)]}'
{
  "log": [
    {
      "commit": "32aaeffbd4a7457bf2f7448b33b5946ff2a960eb",
      "tree": "faf7ad871d87176423ff9ed1d1ba4d9c688fc23f",
      "parents": [
        "208bca0860406d16398145ddd950036a737c3c9d",
        "67b84999b1a8b1af5625b1eabe92146c5eb42932"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sun Nov 06 19:44:47 2011 -0800"
      },
      "message": "Merge branch \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux\n\n* \u0027modsplit-Oct31_2011\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)\n  Revert \"tracing: Include module.h in define_trace.h\"\n  irq: don\u0027t put module.h into irq.h for tracking irqgen modules.\n  bluetooth: macroize two small inlines to avoid module.h\n  ip_vs.h: fix implicit use of module_get/module_put from module.h\n  nf_conntrack.h: fix up fallout from implicit moduleparam.h presence\n  include: replace linux/module.h with \"struct module\" wherever possible\n  include: convert various register fcns to macros to avoid include chaining\n  crypto.h: remove unused crypto_tfm_alg_modname() inline\n  uwb.h: fix implicit use of asm/page.h for PAGE_SIZE\n  pm_runtime.h: explicitly requires notifier.h\n  linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h\n  miscdevice.h: fix up implicit use of lists and types\n  stop_machine.h: fix implicit use of smp.h for smp_processor_id\n  of: fix implicit use of errno.h in include/linux/of.h\n  of_platform.h: delete needless include \u003clinux/module.h\u003e\n  acpi: remove module.h include from platform/aclinux.h\n  miscdevice.h: delete unnecessary inclusion of module.h\n  device_cgroup.h: delete needless include \u003clinux/module.h\u003e\n  net: sch_generic remove redundant use of \u003clinux/module.h\u003e\n  net: inet_timewait_sock doesnt need \u003clinux/module.h\u003e\n  ...\n\nFix up trivial conflicts (other header files, and  removal of the ab3550 mfd driver) in\n - drivers/media/dvb/frontends/dibx000_common.c\n - drivers/media/video/{mt9m111.c,ov6650.c}\n - drivers/mfd/ab3550-core.c\n - include/linux/dmaengine.h\n"
    },
    {
      "commit": "8052ee5f5fd9be153129eaa06ced4a786415abc1",
      "tree": "4f33bf711486846f235426aa3eb365f51570a97d",
      "parents": [
        "ad734bc1565364f9e4b70888d3ce5743b3c1030a"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Tue Nov 01 15:13:04 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue Nov 01 15:13:08 2011 +0100"
      },
      "message": "HID: drivers/hid/hid-roccat.c: eliminate a null pointer dereference\n\nIt is not possible to take the lock in device if device is NULL.\nThe mutex_lock is thus moved after the NULL test.  New error handling\nlabels are added at the end to differentiate between the cases where\ndifferent sets of locks should be unlocks, and between whether or not\nreader should be freed (only on error).\n\nThe semantic match that finds this problem is as follows:\n(http://coccinelle.lip6.fr/)\n\n// \u003csmpl\u003e\n@r@\nexpression E, E1;\nidentifier f;\nstatement S1,S2,S3;\n@@\n\nif (E \u003d\u003d NULL)\n{\n  ... when !\u003d if (E \u003d\u003d NULL || ...) S1 else S2\n      when !\u003d E \u003d E1\n*E-\u003ef\n  ... when any\n  return ...;\n}\nelse S3\n// \u003c/smpl\u003e\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "8f86a2c3cb90e8bb0733de2d2b0abbe7050bb536",
      "tree": "c5e08b28ca080993046f5ed64fe0026df9fb21c8",
      "parents": [
        "15d0580f20f5d3f997e3823bfe39daa3d521a99d"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Sun Jul 03 13:39:48 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:31:17 2011 -0400"
      },
      "message": "hid: Add module.h to fix up implicit users of it\n\nA pending cleanup will mean that module.h won\u0027t be implicitly\neverywhere anymore.  Make sure the modular drivers in clocksource\nare actually calling out for \u003cmodule.h\u003e explicitly in advance.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "5dc0c9835fb96c75c8dbf657393764bd0abbac04",
      "tree": "3e788cd680c8dbc9e6a0bfb7ddfa946fa71d69bf",
      "parents": [
        "e6fa47af5542df3383a78d7cc78f5d5ef63c0d42"
      ],
      "author": {
        "name": "Stefan Achatz",
        "email": "erazor_de@users.sourceforge.net",
        "time": "Thu Feb 03 16:14:43 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Feb 03 16:37:28 2011 +0100"
      },
      "message": "HID: roccat: Rename header roccat.h -\u003e hid-roccat.h\n\nIt was desired that the header roccat.h should be named hid-roccat.h\n\nSigned-off-by: Stefan Achatz \u003cerazor_de@users.sourceforge.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "e6fa47af5542df3383a78d7cc78f5d5ef63c0d42",
      "tree": "61ad2667932aeaec1c1572e4f099ba507eb49e33",
      "parents": [
        "74b643dac475e29f53f4132d2349ec1dba3c9e44"
      ],
      "author": {
        "name": "Stefan Achatz",
        "email": "erazor_de@users.sourceforge.net",
        "time": "Sun Jan 30 13:38:30 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Feb 03 16:37:28 2011 +0100"
      },
      "message": "HID: roccat: Fix bug that prevented roccat chardev from removing devices\n\npointer to device was cleared too early. This is fixed now.\n\nSigned-off-by: Stefan Achatz \u003cerazor_de@users.sourceforge.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "8211e46004518c977f70f2661da961d5ba617399",
      "tree": "b2ae1cdc75fad9dbdece7b1dd5fc23ce0624f3c2",
      "parents": [
        "432762e28b8146d0feff61cc8063b26c517acf26"
      ],
      "author": {
        "name": "Stefan Achatz",
        "email": "erazor_de@users.sourceforge.net",
        "time": "Sun Jan 30 13:38:25 2011 +0100"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Thu Feb 03 16:37:28 2011 +0100"
      },
      "message": "HID: roccat: Add ioctl command to retreive report size from chardev\n\nRoccat chardev was reworked to support only a defined report size per\ndevice and this can be retreived by an ioctl now to enable future changes\nin report definitions.\nHeader was moved/renamed from drivers/hid to include/linux for accessibility.\n\nSigned-off-by: Stefan Achatz \u003cerazor_de@users.sourceforge.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "5012aada506cb8b570e46579077c0ec5b82ebd5d",
      "tree": "cf2d49567af63b16f7cdbef80ae5662938bd539c",
      "parents": [
        "c97415a72521071c235e0879f9a600014afd87b1"
      ],
      "author": {
        "name": "Stefan Achatz",
        "email": "erazor_de@users.sourceforge.net",
        "time": "Fri Nov 26 19:57:33 2010 +0000"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Sat Jan 08 01:11:00 2011 +0100"
      },
      "message": "HID: roccat: use class for char device for sysfs attribute creation\n\nAdding sysfs attributes to an already created device raises no userland\nnotification. Now the device drivers associate the devices attributes\nwith a class and use this for roccat event char device creation.\n\nSigned-off-by: Stefan Achatz \u003cerazor_de@users.sourceforge.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "4291ee305e9bb0699504a66f0e2b7aefcf0512a5",
      "tree": "3996b77eb64d4f3b76a0799f30a5b2ba6cbc9ddb",
      "parents": [
        "5bea7660bba973dc5e8e9d92b11fb1dd5b524ebf"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Thu Dec 09 19:29:03 2010 -0800"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Fri Dec 10 15:10:38 2010 +0100"
      },
      "message": "HID: Add and use hid_\u003clevel\u003e: dev_\u003clevel\u003e equivalents\n\nNeaten current uses of dev_\u003clevel\u003e by adding and using\nhid specific hid_\u003clevel\u003e macros.\n\nConvert existing uses of dev_\u003clevel\u003e uses to hid_\u003clevel\u003e.\nConvert hid-pidff printk uses to hid_\u003clevel\u003e.\n\nRemove err_hid and use hid_err instead.\n\nAdd missing newlines to logging messages where necessary.\nCoalesce format strings.\n\nAdd and use pr_fmt(fmt) KBUILD_MODNAME \": \" fmt\n\nOther miscellaneous changes:\n\nAdd const struct hid_device * argument to hid-core functions\nextract() and implement() so hid_\u003clevel\u003e can be used by them.\nFix bad indentation in hid-core hid_input_field function\nthat calls extract() function above.\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "5bea7660bba973dc5e8e9d92b11fb1dd5b524ebf",
      "tree": "511ae632c2d2c22d94956ed2d236bd8654d27ff0",
      "parents": [
        "33d6eb570b1f3fe5ba93cef465c5be66535c2c9a"
      ],
      "author": {
        "name": "Dmitry Torokhov",
        "email": "dmitry.torokhov@gmail.com",
        "time": "Tue Dec 07 23:02:48 2010 -0800"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Dec 08 14:35:14 2010 +0100"
      },
      "message": "HID: add hid_hw_open/close/power() handlers\n\nInstead of exposing the guts of hid-\u003ell_driver relationship to HID\nsub-drivers provide these helpers to encapsulate the details.\n\nSigned-off-by: Dmitry Torokhov \u003cdtor@mail.ru\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "6038f373a3dc1f1c26496e60b6c40b164716f07e",
      "tree": "a0d3bbd026eea41b9fc36b8c722cbaf56cd9f825",
      "parents": [
        "1ec5584e3edf9c4bf2c88c846534d19cf986ba11"
      ],
      "author": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Sun Aug 15 18:52:59 2010 +0200"
      },
      "committer": {
        "name": "Arnd Bergmann",
        "email": "arnd@arndb.de",
        "time": "Fri Oct 15 15:53:27 2010 +0200"
      },
      "message": "llseek: automatically add .llseek fop\n\nAll file_operations should get a .llseek operation so we can make\nnonseekable_open the default for future file operations without a\n.llseek pointer.\n\nThe three cases that we can automatically detect are no_llseek, seq_lseek\nand default_llseek. For cases where we can we can automatically prove that\nthe file offset is always ignored, we use noop_llseek, which maintains\nthe current behavior of not returning an error from a seek.\n\nNew drivers should normally not use noop_llseek but instead use no_llseek\nand call nonseekable_open at open time.  Existing drivers can be converted\nto do the same when the maintainer knows for certain that no user code\nrelies on calling seek on the device file.\n\nThe generated code is often incorrectly indented and right now contains\ncomments that clarify for each added line why a specific variant was\nchosen. In the version that gets submitted upstream, the comments will\nbe gone and I will manually fix the indentation, because there does not\nseem to be a way to do that using coccinelle.\n\nSome amount of new code is currently sitting in linux-next that should get\nthe same modifications, which I will do at the end of the merge window.\n\nMany thanks to Julia Lawall for helping me learn to write a semantic\npatch that does all this.\n\n\u003d\u003d\u003d\u003d\u003d begin semantic patch \u003d\u003d\u003d\u003d\u003d\n// This adds an llseek\u003d method to all file operations,\n// as a preparation for making no_llseek the default.\n//\n// The rules are\n// - use no_llseek explicitly if we do nonseekable_open\n// - use seq_lseek for sequential files\n// - use default_llseek if we know we access f_pos\n// - use noop_llseek if we know we don\u0027t access f_pos,\n//   but we still want to allow users to call lseek\n//\n@ open1 exists @\nidentifier nested_open;\n@@\nnested_open(...)\n{\n\u003c+...\nnonseekable_open(...)\n...+\u003e\n}\n\n@ open exists@\nidentifier open_f;\nidentifier i, f;\nidentifier open1.nested_open;\n@@\nint open_f(struct inode *i, struct file *f)\n{\n\u003c+...\n(\nnonseekable_open(...)\n|\nnested_open(...)\n)\n...+\u003e\n}\n\n@ read disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n   *off \u003d E\n|\n   *off +\u003d E\n|\n   func(..., off, ...)\n|\n   E \u003d *off\n)\n...+\u003e\n}\n\n@ read_no_fpos disable optional_qualifier exists @\nidentifier read_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ write @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\nexpression E;\nidentifier func;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n\u003c+...\n(\n  *off \u003d E\n|\n  *off +\u003d E\n|\n  func(..., off, ...)\n|\n  E \u003d *off\n)\n...+\u003e\n}\n\n@ write_no_fpos @\nidentifier write_f;\nidentifier f, p, s, off;\ntype ssize_t, size_t, loff_t;\n@@\nssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)\n{\n... when !\u003d off\n}\n\n@ fops0 @\nidentifier fops;\n@@\nstruct file_operations fops \u003d {\n ...\n};\n\n@ has_llseek depends on fops0 @\nidentifier fops0.fops;\nidentifier llseek_f;\n@@\nstruct file_operations fops \u003d {\n...\n .llseek \u003d llseek_f,\n...\n};\n\n@ has_read depends on fops0 @\nidentifier fops0.fops;\nidentifier read_f;\n@@\nstruct file_operations fops \u003d {\n...\n .read \u003d read_f,\n...\n};\n\n@ has_write depends on fops0 @\nidentifier fops0.fops;\nidentifier write_f;\n@@\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n...\n};\n\n@ has_open depends on fops0 @\nidentifier fops0.fops;\nidentifier open_f;\n@@\nstruct file_operations fops \u003d {\n...\n .open \u003d open_f,\n...\n};\n\n// use no_llseek if we call nonseekable_open\n////////////////////////////////////////////\n@ nonseekable1 depends on !has_llseek \u0026\u0026 has_open @\nidentifier fops0.fops;\nidentifier nso ~\u003d \"nonseekable_open\";\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d nso, ...\n+.llseek \u003d no_llseek, /* nonseekable */\n};\n\n@ nonseekable2 depends on !has_llseek @\nidentifier fops0.fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...  .open \u003d open_f, ...\n+.llseek \u003d no_llseek, /* open uses nonseekable */\n};\n\n// use seq_lseek for sequential files\n/////////////////////////////////////\n@ seq depends on !has_llseek @\nidentifier fops0.fops;\nidentifier sr ~\u003d \"seq_read\";\n@@\nstruct file_operations fops \u003d {\n...  .read \u003d sr, ...\n+.llseek \u003d seq_lseek, /* we have seq_read */\n};\n\n// use default_llseek if there is a readdir\n///////////////////////////////////////////\n@ fops1 depends on !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier readdir_e;\n@@\n// any other fop is used that changes pos\nstruct file_operations fops \u003d {\n... .readdir \u003d readdir_e, ...\n+.llseek \u003d default_llseek, /* readdir is present */\n};\n\n// use default_llseek if at least one of read/write touches f_pos\n/////////////////////////////////////////////////////////////////\n@ fops2 depends on !fops1 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read.read_f;\n@@\n// read fops use offset\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d default_llseek, /* read accesses f_pos */\n};\n\n@ fops3 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+\t.llseek \u003d default_llseek, /* write accesses f_pos */\n};\n\n// Use noop_llseek if neither read nor write accesses f_pos\n///////////////////////////////////////////////////////////\n\n@ fops4 depends on !fops1 \u0026\u0026 !fops2 \u0026\u0026 !fops3 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\nidentifier write_no_fpos.write_f;\n@@\n// write fops use offset\nstruct file_operations fops \u003d {\n...\n .write \u003d write_f,\n .read \u003d read_f,\n...\n+.llseek \u003d noop_llseek, /* read and write both use no f_pos */\n};\n\n@ depends on has_write \u0026\u0026 !has_read \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier write_no_fpos.write_f;\n@@\nstruct file_operations fops \u003d {\n... .write \u003d write_f, ...\n+.llseek \u003d noop_llseek, /* write uses no f_pos */\n};\n\n@ depends on has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\nidentifier read_no_fpos.read_f;\n@@\nstruct file_operations fops \u003d {\n... .read \u003d read_f, ...\n+.llseek \u003d noop_llseek, /* read uses no f_pos */\n};\n\n@ depends on !has_read \u0026\u0026 !has_write \u0026\u0026 !fops1 \u0026\u0026 !fops2 \u0026\u0026 !has_llseek \u0026\u0026 !nonseekable1 \u0026\u0026 !nonseekable2 \u0026\u0026 !seq @\nidentifier fops0.fops;\n@@\nstruct file_operations fops \u003d {\n...\n+.llseek \u003d noop_llseek, /* no read or write fn */\n};\n\u003d\u003d\u003d\u003d\u003d End semantic patch \u003d\u003d\u003d\u003d\u003d\n\nSigned-off-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nCc: Julia Lawall \u003cjulia@diku.dk\u003e\nCc: Christoph Hellwig \u003chch@infradead.org\u003e\n"
    },
    {
      "commit": "dfe5c7b7e710d8ed885068b0fcfa6f66ab685592",
      "tree": "b0d9a1529d8d1be97419f11b1071c67927dff69b",
      "parents": [
        "33ccbc320fc38094128c68b2ee0b305884965bd4"
      ],
      "author": {
        "name": "Julia Lawall",
        "email": "julia@diku.dk",
        "time": "Tue Jun 01 16:35:15 2010 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Wed Jun 02 11:08:42 2010 +0200"
      },
      "message": "HID: roccat: introduce missing kfree\n\nError handling code following a kmalloc should free the allocated data.\n\nThe semantic match that finds the problem is as follows:\n(http://www.emn.fr/x-info/coccinelle/)\n\n// \u003csmpl\u003e\n@r exists@\nlocal idexpression x;\nstatement S;\nexpression E;\nidentifier f,f1,l;\nposition p1,p2;\nexpression *ptr !\u003d NULL;\n@@\n\nx@p1 \u003d \\(kmalloc\\|kzalloc\\|kcalloc\\)(...);\n...\nif (x \u003d\u003d NULL) S\n\u003c... when !\u003d x\n     when !\u003d if (...) { \u003c+...x...+\u003e }\n(\nx-\u003ef1 \u003d E\n|\n (x-\u003ef1 \u003d\u003d NULL || ...)\n|\n f(...,x-\u003ef1,...)\n)\n...\u003e\n(\n return \\(0\\|\u003c+...x...+\u003e\\|ptr\\);\n|\n return@p2 ...;\n)\n\n@script:python@\np1 \u003c\u003c r.p1;\np2 \u003c\u003c r.p2;\n@@\n\nprint \"* file: %s kmalloc %s return %s\" % (p1[0].file,p1[0].line,p2[0].line)\n// \u003c/smpl\u003e\n\nSigned-off-by: Julia Lawall \u003cjulia@diku.dk\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    },
    {
      "commit": "206f5f2fcb5ff5bb0c60f9e9189937f3ca03e378",
      "tree": "9699132bf54da1b36560208892a4067bd889a992",
      "parents": [
        "c2fd1a4ebf9127c280d227acb635eb1df213439c"
      ],
      "author": {
        "name": "Stefan Achatz",
        "email": "erazor_de@users.sourceforge.net",
        "time": "Wed May 19 18:55:16 2010 +0200"
      },
      "committer": {
        "name": "Jiri Kosina",
        "email": "jkosina@suse.cz",
        "time": "Tue May 25 09:57:03 2010 +0200"
      },
      "message": "HID: roccat: propagate special events of roccat hardware to userspace\n\nModule roccat is a char device used to report special events of roccat hardware\nto userland. These events include requests for on-screen-display of profile or\ndpi settings or requests for execution of macro sequences that are not stored\nin device. The information in these events depends on hid device implementation\nand contains data that is not available in a single hid event or else hidraw\ncould have been used.\n\nIt is inspired by hidraw, but uses only one circular buffer for all readers.\nThe device is as generic as possible so that the functionality is usable by all\n(kone and upcomming) roccat device drivers.\n\nSigned-off-by: Stefan Achatz \u003cerazor_de@users.sourceforge.net\u003e\nSigned-off-by: Jiri Kosina \u003cjkosina@suse.cz\u003e\n"
    }
  ]
}
