)]}'
{
  "log": [
    {
      "commit": "234e340582901211f40d8c732afc49f0630ecf05",
      "tree": "753076500dfd883b3db56d4f5410af31d8945623",
      "parents": [
        "9b3ae64be658a573b33d05a8dc73b08d3345fa44"
      ],
      "author": {
        "name": "Stephen Boyd",
        "email": "sboyd@codeaurora.org",
        "time": "Thu Apr 05 14:25:11 2012 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Apr 05 15:25:50 2012 -0700"
      },
      "message": "simple_open: automatically convert to simple_open()\n\nMany users of debugfs copy the implementation of default_open() when\nthey want to support a custom read/write function op.  This leads to a\nproliferation of the default_open() implementation across the entire\ntree.\n\nNow that the common implementation has been consolidated into libfs we\ncan replace all the users of this function with simple_open().\n\nThis replacement was done with the following semantic patch:\n\n\u003csmpl\u003e\n@ open @\nidentifier open_f !\u003d simple_open;\nidentifier i, f;\n@@\n-int open_f(struct inode *i, struct file *f)\n-{\n(\n-if (i-\u003ei_private)\n-f-\u003eprivate_data \u003d i-\u003ei_private;\n|\n-f-\u003eprivate_data \u003d i-\u003ei_private;\n)\n-return 0;\n-}\n\n@ has_open depends on open @\nidentifier fops;\nidentifier open.open_f;\n@@\nstruct file_operations fops \u003d {\n...\n-.open \u003d open_f,\n+.open \u003d simple_open,\n...\n};\n\u003c/smpl\u003e\n\n[akpm@linux-foundation.org: checkpatch fixes]\nSigned-off-by: Stephen Boyd \u003csboyd@codeaurora.org\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@linuxfoundation.org\u003e\nCc: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nCc: Julia Lawall \u003cJulia.Lawall@lip6.fr\u003e\nAcked-by: Ingo Molnar \u003cmingo@elte.hu\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "b4017c5368f992fb8fb3a2545a0977082c6664e4",
      "tree": "b18fee77164297141c988965a9846225f8d8b3d3",
      "parents": [
        "97767a87f3be8834192dc3fc9412aaccf708d87f",
        "413708bbaf5c85c4c8a264145f7d6c3afcd97f99"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Mar 01 17:57:40 2012 -0500"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Mar 01 17:57:40 2012 -0500"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net\n\nConflicts:\n\tdrivers/net/ethernet/broadcom/tg3.c\n\nConflicts in the statistics regression bug fix from \u0027net\u0027,\nbut happily Matt Carlson originally posted the fix against\n\u0027net-next\u0027 so I used that to resolve this.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8617b093d0031837a7be9b32bc674580cfb5f6b5",
      "tree": "6f9965790045cc0b73c43033aae859cab79128a2",
      "parents": [
        "5dcbf480473f6c3f06ad2426b7517038a2a18911"
      ],
      "author": {
        "name": "Mohammed Shafi Shajakhan",
        "email": "mohammed@qca.qualcomm.com",
        "time": "Mon Feb 20 10:05:31 2012 +0530"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Feb 21 14:45:26 2012 -0500"
      },
      "message": "mac80211: zero initialize count field in ieee80211_tx_rate\n\nrate control algorithms concludes the rate as invalid\nwith rate[i].idx \u003c -1 , while they do also check for rate[i].count is\nnon-zero. it would be safer to zero initialize the \u0027count\u0027 field.\nrecently we had a ath9k rate control crash where the ath9k rate control\nin ath_tx_status assumed to check only for rate[i].count being non-zero\nin one instance and ended up in using invalid rate index for\n\u0027connection monitoring NULL func frames\u0027 which eventually lead to the crash.\nthanks to Pavel Roskin for fixing it and finding the root cause.\nhttps://bugzilla.redhat.com/show_bug.cgi?id\u003d768639\n\nCc: stable@vger.kernel.org\nCc: Pavel Roskin \u003cproski@gnu.org\u003e\nSigned-off-by: Mohammed Shafi Shajakhan \u003cmohammed@qca.qualcomm.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "4b5a433ae5348c23caa0b5f0a2fca7c342acb200",
      "tree": "023096819178eb695a78eb2de271af6470ff29c3",
      "parents": [
        "24d2b8c0ac5c8ec41c26ed432238b0e027184882"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes.berg@intel.com",
        "time": "Fri Jan 20 13:55:23 2012 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Wed Feb 15 13:56:06 2012 -0500"
      },
      "message": "mac80211: call rate control only after init\n\nThere are situations where we don\u0027t have the\nnecessary rate control information yet for\nstation entries, e.g. when associating. This\ncurrently doesn\u0027t really happen due to the\ndummy station handling; explicitly disabling\nrate control when it\u0027s not initialised will\nallow us to remove dummy stations.\n\nSigned-off-by: Johannes Berg \u003cjohannes.berg@intel.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "e1936e9407138b483e6d1332dd944afec8131f30",
      "tree": "65ec2b02b60e572f0067771da951bcf53b52aa9c",
      "parents": [
        "1023f3bc7b3f56da1f79f605cbe459318c4792ae"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes.berg@intel.com",
        "time": "Fri Jan 20 13:55:23 2012 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Feb 06 15:35:11 2012 -0500"
      },
      "message": "mac80211: call rate control only after init\n\nThere are situations where we don\u0027t have the\nnecessary rate control information yet for\nstation entries, e.g. when associating. This\ncurrently doesn\u0027t really happen due to the\ndummy station handling; explicitly disabling\nrate control when it\u0027s not initialised will\nallow us to remove dummy stations.\n\nSigned-off-by: Johannes Berg \u003cjohannes.berg@intel.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "910570b5f4dbf75b73389010704ca6442a767a41",
      "tree": "6c3c581f672492906ebf5b4c34adc307e06aa5a3",
      "parents": [
        "d486a5b4996d2fffd10098725781f2c5690774bc"
      ],
      "author": {
        "name": "Dan Carpenter",
        "email": "dan.carpenter@oracle.com",
        "time": "Wed Feb 01 10:42:11 2012 +0300"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Feb 06 14:55:41 2012 -0500"
      },
      "message": "mac80211: off by one in mcs mask handling\n\n\"ridx\" is used as an index into the mcs_mask[] array which has\nIEEE80211_HT_MCS_MASK_LEN elements.\n\nSigned-off-by: Dan Carpenter \u003cdan.carpenter@oracle.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "19468413e8d98d44be8daf0acaf8d576dfc53fa2",
      "tree": "99d7df720566824c4588ccff03c65e60c381e60d",
      "parents": [
        "24db78c05b1e3ccb5a78aedd17aa1008c91dab5a"
      ],
      "author": {
        "name": "Simon Wunderlich",
        "email": "simon.wunderlich@s2003.tu-chemnitz.de",
        "time": "Sat Jan 28 17:25:33 2012 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Jan 30 15:48:26 2012 -0500"
      },
      "message": "mac80211: add support for mcs masks\n\n* Handle MCS masks set by the user.\n* Match rates provided by the rate control algorithm to the mask set,\n  also in HT mode, and switch back to legacy mode if necessary.\n* add debugfs files to observate the rate selection\n\nSigned-off-by: Simon Wunderlich \u003csiwu@hrz.tu-chemnitz.de\u003e\nSigned-off-by: Mathias Kretschmer \u003cmathias.kretschmer@fokus.fraunhofer.de\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "889cbb911a195b832745f77240f547cb2a2885bc",
      "tree": "973a6325e082b0840a56a284a95b609134058c39",
      "parents": [
        "151a02f693b866dd43e147725c818fc1ddb96aa3"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes.berg@intel.com",
        "time": "Tue Jan 17 10:33:29 2012 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Jan 24 14:21:55 2012 -0500"
      },
      "message": "mac80211: clean up rate control code\n\nIt seems exceedingly unlikely that we\u0027ll ever\nsupport swapping rate control algorithms at\nruntime, so remove the unused refcounting code.\n\nSigned-off-by: Johannes Berg \u003cjohannes.berg@intel.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "3a9a231d977222eea36eae091df2c358e03ac839",
      "tree": "d2df117cf336a29fddddb000f972b5f333f40f6d",
      "parents": [
        "6e5fdeedca610df600aabc393c4b1f44b128fe49"
      ],
      "author": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Fri May 27 09:12:25 2011 -0400"
      },
      "committer": {
        "name": "Paul Gortmaker",
        "email": "paul.gortmaker@windriver.com",
        "time": "Mon Oct 31 19:30:28 2011 -0400"
      },
      "message": "net: Fix files explicitly needing to include module.h\n\nWith calls to modular infrastructure, these files really\nneeds the full module.h header.  Call it out so some of the\ncleanups of implicit and unrequired includes elsewhere can be\ncleaned up.\n\nSigned-off-by: Paul Gortmaker \u003cpaul.gortmaker@windriver.com\u003e\n"
    },
    {
      "commit": "b6f35301efda5e94342cfcca9e29b7b3e9a5f827",
      "tree": "f828168204f52f423a7d1b160b9f371c0fd94dc1",
      "parents": [
        "e209c5a7ed1870ab7f112ad47083b5d616e8b6a4"
      ],
      "author": {
        "name": "Rajkumar Manoharan",
        "email": "rmanohar@qca.qualcomm.com",
        "time": "Thu Sep 29 20:34:04 2011 +0530"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Oct 03 15:22:32 2011 -0400"
      },
      "message": "mac80211: Send nullfunc frames at lower rate during connection monitor\n\nRecently mac80211 was changed to use nullfunc instead of probe\nrequest for connection monitoring for tx ack status reporting\nhardwares. Sometimes in congested network, STA got disconnected\nquickly after the association. It was observered that the rate\ncontrol was not adopted to environment due to minimal transmission.\n\nAs the nullfunc are used for monitoring purpose, these frames should\nnot be sacrificed for rate control updation. So it is better to send\nthe monitoring null func frames at minimum rate that could help to\nretain the connection.\n\nSigned-off-by: Rajkumar Manoharan \u003crmanohar@qca.qualcomm.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "aad14ceb45f5ff12da2ab5b37a596e6f81566515",
      "tree": "898380834d260961219b687e377b60c41f5f16e9",
      "parents": [
        "e9f935e3e8dc0bddd0df6d148165d95925422502"
      ],
      "author": {
        "name": "Rajkumar Manoharan",
        "email": "rmanohar@qca.qualcomm.com",
        "time": "Sun Sep 25 14:53:31 2011 +0530"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Sep 27 14:34:10 2011 -0400"
      },
      "message": "mac80211: Send the management frame at requested rate\n\nWhenever the scan request or tx_mgmt is requesting not to\nuse CCK rate for managemet frames through\nNL80211_ATTR_TX_NO_CCK_RATE attribute, then mac80211 should\nselect appropriate least non-CCK rate. This could help to\nsend P2P probes and P2P action frames at non 11b rates\nwithout diabling 11b rates globally.\n\nCc: Jouni Malinen \u003cjouni@qca.qualcomm.com\u003e\nSigned-off-by: Rajkumar Manoharan \u003crmanohar@qca.qualcomm.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "dd5b4cc71cd09c33e1579cc6d5720656e94e52de",
      "tree": "86a27c86480109d9b6bbedddc083095035fbef2d",
      "parents": [
        "46090979a55a0dc2cdb3d939f94fa47742108194"
      ],
      "author": {
        "name": "Felix Fietkau",
        "email": "nbd@openwrt.org",
        "time": "Mon Nov 22 20:58:24 2010 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Wed Nov 24 16:19:35 2010 -0500"
      },
      "message": "cfg80211/mac80211: improve ad-hoc multicast rate handling\n\n- store the multicast rate as an index instead of the rate value\n  (reduces cpu overhead in a hotpath)\n- validate the rate values (must match a bitrate in at least one sband)\n\nSigned-off-by: Felix Fietkau \u003cnbd@openwrt.org\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "8f0729b16ae354f9db89394fc1d2d65003455d56",
      "tree": "260a562d0c0079ebfc1c507c9aa50e55a1592b6d",
      "parents": [
        "885a46d0f7942d76c2f3860acb45f75237d3bb42"
      ],
      "author": {
        "name": "Felix Fietkau",
        "email": "nbd@openwrt.org",
        "time": "Thu Nov 11 15:07:23 2010 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Nov 16 16:39:08 2010 -0500"
      },
      "message": "mac80211: add support for setting the ad-hoc multicast rate\n\nSigned-off-by: Felix Fietkau \u003cnbd@openwrt.org\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "5f4e6b2d3c74c1adda1cbfd9d9d30da22c7484fc",
      "tree": "b6790e3f195491139d2af7642ef3f4f51408ca10",
      "parents": [
        "cae7f953e8afa9b1ce234fd0907183b643cc5ab8"
      ],
      "author": {
        "name": "Christian Lamparter",
        "email": "chunkeey@googlemail.com",
        "time": "Sat Oct 16 18:49:15 2010 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Oct 25 14:43:13 2010 -0400"
      },
      "message": "mac80211: don\u0027t sanitize invalid rates\n\nI found this bug while poking around with a pure-gn AP.\n\nCommit:\ncfg80211/mac80211: Use more generic bitrate mask for rate control\n\nAdded some sanity checks to ensure that each tx rate index\nis included in the configured mask and it would change any\nrate indexes if it wasn\u0027t.\n\nBut, the current implementation doesn\u0027t take into account\nthat the invalid rate index \"-1\" has a special meaning\n(\u003d no further attempts) and it should not be \"changed\".\n\nSigned-off-by: Christian Lamparter \u003cchunkeey@googlemail.com\u003e\nCc: stable@kernel.org\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "5f05647dd81c11a6a165ccc8f0c1370b16f3bcb0",
      "tree": "7851ef1c93aa1aba7ef327ca4b75fd35e6d10f29",
      "parents": [
        "02f36038c568111ad4fc433f6fa760ff5e38fab4",
        "ec37a48d1d16c30b655ac5280209edf52a6775d4"
      ],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 23 11:47:02 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Oct 23 11:47:02 2010 -0700"
      },
      "message": "Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6\n\n* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1699 commits)\n  bnx2/bnx2x: Unsupported Ethtool operations should return -EINVAL.\n  vlan: Calling vlan_hwaccel_do_receive() is always valid.\n  tproxy: use the interface primary IP address as a default value for --on-ip\n  tproxy: added IPv6 support to the socket match\n  cxgb3: function namespace cleanup\n  tproxy: added IPv6 support to the TPROXY target\n  tproxy: added IPv6 socket lookup function to nf_tproxy_core\n  be2net: Changes to use only priority codes allowed by f/w\n  tproxy: allow non-local binds of IPv6 sockets if IP_TRANSPARENT is enabled\n  tproxy: added tproxy sockopt interface in the IPV6 layer\n  tproxy: added udp6_lib_lookup function\n  tproxy: added const specifiers to udp lookup functions\n  tproxy: split off ipv6 defragmentation to a separate module\n  l2tp: small cleanup\n  nf_nat: restrict ICMP translation for embedded header\n  can: mcp251x: fix generation of error frames\n  can: mcp251x: fix endless loop in interrupt handler if CANINTF_MERRF is set\n  can-raw: add msg_flags to distinguish local traffic\n  9p: client code cleanup\n  rds: make local functions/variables static\n  ...\n\nFix up conflicts in net/core/dev.c, drivers/net/pcmcia/smc91c92_cs.c and\ndrivers/net/wireless/ath/ath9k/debug.c as per David\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": "a02cec2155fbea457eca8881870fd2de1a4c4c76",
      "tree": "cfbfc4b32bfe10f9cd803d46c31607d13f1858f5",
      "parents": [
        "6a08d194ee40806e0ccd5f36ed768e64cbfc979f"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Wed Sep 22 20:43:57 2010 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Sep 23 14:33:39 2010 -0700"
      },
      "message": "net: return operator cleanup\n\nChange \"return (EXPR);\" to \"return EXPR;\"\n\nreturn is not a function, parentheses are not required.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "78ab952717b62c0ba6ca7f7a27eaa0486685e45f",
      "tree": "a4ab2bfc578f279fc6847031f501d84c75057531",
      "parents": [
        "3e502e63586920f219ed2590f69c1f5a8888cfa4",
        "85f72bc839705294b32b6c16b491c0422f0a71b3"
      ],
      "author": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Thu Sep 02 13:30:07 2010 -0400"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Thu Sep 02 13:30:07 2010 -0400"
      },
      "message": "Merge branch \u0027master\u0027 of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem\n"
    },
    {
      "commit": "0fb9a9ec27718fbf7fa3153bc94becefb716ceeb",
      "tree": "8f5d6a5fa9f2c6b8b08273dc198d6187d0a70361",
      "parents": [
        "b62177a0aa0521fd07cd7501534c0c3b256ebce6"
      ],
      "author": {
        "name": "Joe Perches",
        "email": "joe@perches.com",
        "time": "Fri Aug 20 16:25:38 2010 -0700"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Wed Aug 25 14:33:17 2010 -0400"
      },
      "message": "net/mac80211: Use wiphy_\u003clevel\u003e\n\nStandardize logging messages from\n\tprintk(KERN_\u003clevel\u003e \"%s: \" fmt , wiphy_name(foo), args);\nto\n\twiphy_\u003clevel\u003e(foo, fmt, args);\n\nSigned-off-by: Joe Perches \u003cjoe@perches.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "d6d1b650ae6acce73d55dd0246de22180303ae73",
      "tree": "7a342999c119a5ee6395966cee91ddf5186f5665",
      "parents": [
        "dca41306395eab37e222ff9e72765e692fcc7251"
      ],
      "author": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Aug 11 23:04:27 2010 -0600"
      },
      "committer": {
        "name": "Rusty Russell",
        "email": "rusty@rustcorp.com.au",
        "time": "Wed Aug 11 23:04:31 2010 +0930"
      },
      "message": "param: simple locking for sysfs-writable charp parameters\n\nSince the writing to sysfs can free the old one, we need to block that\nwhen we access the charp variables.\n\nSigned-off-by: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nReviewed-by: Takashi Iwai \u003ctiwai@suse.de\u003e\nTested-by: Phil Carmody \u003cext-phil.2.carmody@nokia.com\u003e\nCc: Jeff Dike \u003cjdike@addtoit.com\u003e\nCc: Dan Williams \u003cdcbw@redhat.com\u003e\nCc: John W. Linville \u003clinville@tuxdriver.com\u003e\nCc: Jing Huang \u003chuangj@brocade.com\u003e\nCc: James E.J. Bottomley \u003cJames.Bottomley@suse.de\u003e\nCc: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nCc: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nCc: David S. Miller \u003cdavem@davemloft.net\u003e\nCc: user-mode-linux-devel@lists.sourceforge.net\nCc: libertas-dev@lists.infradead.org\nCc: linux-wireless@vger.kernel.org\nCc: netdev@vger.kernel.org\nCc: linux-scsi@vger.kernel.org\nCc: linux-usb@vger.kernel.org\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "5ecccb74dc91e22496a142b103ba958f93c29275",
      "tree": "b560b8974ec0e0478492d60753d45d8aea9db9b0",
      "parents": [
        "f6f223039c0d0683bdea1eabd35b309e10311a60",
        "3d0beb921fa34ebf8b13e206e5473329b14deb83"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Feb 14 22:30:54 2010 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Feb 14 22:30:54 2010 -0800"
      },
      "message": "Merge branch \u0027master\u0027 of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6\n\nConflicts:\n\tnet/mac80211/rate.c\n"
    },
    {
      "commit": "5affcd6ba2036b59a4dee3f0576ae3584e92e4f1",
      "tree": "78c6d3a329968b253d5c67c7d11adc0ab9af3c3d",
      "parents": [
        "fafaf31bf9f965d91462ee115e27ef6c262b74ea"
      ],
      "author": {
        "name": "Juuso Oikarinen",
        "email": "juuso.oikarinen@nokia.com",
        "time": "Fri Feb 12 10:05:45 2010 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Feb 12 14:50:22 2010 -0500"
      },
      "message": "mac80211: fix handling of null-rate control in rate_control_get_rate\n\nFor hardware with IEEE80211_HW_HAS_RATE_CONTROL the rate controller is not\ninitialized. However, calling functions such as ieee80211_beacon_get result\nin the rate_control_get_rate function getting called, which is accessing\n(in this case uninitialized) rate control structures unconditionally.\n\nFix by exiting the function before setting the rates for HW with\nIEEE80211_HW_HAS_RATE_CONTROL set. The initialization of the ieee80211_tx_info\nstruct is intentionally still executed.\n\nSigned-off-by: Juuso Oikarinen \u003cjuuso.oikarinen@nokia.com\u003e\nReviewed-by: Kalle Valo \u003ckalle.valo@nokia.com\u003e\nCc: stable@kernel.org\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "209c671db7a917740ab9873d442b10ae7e369937",
      "tree": "5bdad7889666b679e5dd67adf59a5e3223d0d266",
      "parents": [
        "641eabb0a3717020d1a93d3f91493ab0d826c910"
      ],
      "author": {
        "name": "Andres Salomon",
        "email": "dilinger@collabora.co.uk",
        "time": "Sun Feb 07 21:47:50 2010 -0500"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Feb 08 16:51:03 2010 -0500"
      },
      "message": "mac80211: make rate_control_alloc static\n\nrate_control_alloc is not used by anything outside of\nieee80211_init_rate_ctrl_alg.  Both are in rate.c; there\u0027s no reason to make\nrate_control_alloc visible outside of it.\n\nSigned-off-by: Andres Salomon \u003cdilinger@collabora.co.uk\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "37eb0b164cf9fa9f70c8500926f5cde7c652f48e",
      "tree": "9260e7045f32268c8c4ded718677711d371cd5ed",
      "parents": [
        "e00cfce0cb2a397859607bf515c6de9ce064b64a"
      ],
      "author": {
        "name": "Jouni Malinen",
        "email": "jouni.malinen@atheros.com",
        "time": "Wed Jan 06 13:09:08 2010 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Jan 12 13:50:11 2010 -0500"
      },
      "message": "cfg80211/mac80211: Use more generic bitrate mask for rate control\n\nExtend struct cfg80211_bitrate_mask to actually use a bitfield mask\ninstead of just a single fixed or maximum rate index. This change\nitself does not modify the behavior (except for debugfs files), but it\nprepares cfg80211 and mac80211 for a new nl80211 command for setting\nwhich rates can be used in TX rate control.\n\nSince frames are now going through the rate control algorithm\nunconditionally, the internal IEEE80211_TX_INTFL_RCALGO flag can now\nbe removed. The RC implementations can use the rate_idx_mask value to\noptimize their behavior if only a single rate is enabled.\n\nThe old max_rate_idx in struct ieee80211_tx_rate_control is maintained\n(but commented as deprecated) for backwards compatibility with existing\nRC implementations. Once these implementations have been updated to\nuse the more generic rate_idx_mask, the max_rate_idx value can be\nremoved.\n\nSigned-off-by: Jouni Malinen \u003cjouni.malinen@atheros.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "e00cfce0cb2a397859607bf515c6de9ce064b64a",
      "tree": "038d87e7d90a5bcdd8f689a563221eab883b0546",
      "parents": [
        "3dc1de0bf23816ed557ac8addf680cd5ee57e805"
      ],
      "author": {
        "name": "Jouni Malinen",
        "email": "jouni.malinen@atheros.com",
        "time": "Tue Dec 29 12:59:19 2009 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Jan 12 13:50:09 2010 -0500"
      },
      "message": "mac80211: Select lowest rate based on basic rate set in AP mode\n\nIf the basic rate set is configured to not include the lowest rate\n(e.g., basic rate set \u003d 6, 12, 24 Mbps in IEEE 802.11g mode), the AP\nshould not send out broadcast frames at 1 Mbps. This type of\nconfiguration can be used to optimize channel usage in cases where\nthere is no need for backwards compatibility with IEEE 802.11b-only\ndevices.\n\nIn AP mode, mac80211 was unconditionally using the lowest rate for\nBeacon frames and similarly, with all rate control algorithms that use\nrate_control_send_low(), the lowest rate ended up being used for all\nbroadcast frames (and all unicast frames that are sent before\nassociation). Change this to take into account the basic rate\nconfiguration in AP mode, i.e., use the lowest rate in the basic rate\nset instead of the lowest supported rate when selecting the rate.\n\nSigned-off-by: Jouni Malinen \u003cjouni.malinen@atheros.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "af65cd96dd4ea8ea5adc6ee850e61a407cd1067a",
      "tree": "fcdd50d2b9121bc26110329cb0fbefdeace99858",
      "parents": [
        "c95cf3d09adc9afe7816a13a920b6df36062a3fe"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Tue Nov 17 18:18:36 2009 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Wed Nov 18 17:09:24 2009 -0500"
      },
      "message": "mac80211: make software rate control optional\n\nSome devices implement the entire rate control in\nfirmware in some way, like wl1271 or like iwlwifi\nwhich does some things in software but not a lot.\nTherefore generic software rate control is rather\nuseless for them and just adds avoidable overhead\nto the transmit path.\n\nIt\u0027s fairly simple to let drivers indicate that\nthey do not need rate control, but they need to\nfulfil a number of conditions that we encode in\nWARN_ONs.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "7bcfaf2f431c09c51fe776fc06638b25d3b421c5",
      "tree": "27f767335566826f11f0134b97ee76b58d9bcf90",
      "parents": [
        "2c0d6100da3ee9b0f0cc46add9bb8a8161299a92"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Tue Oct 27 12:59:03 2009 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Oct 30 16:49:18 2009 -0400"
      },
      "message": "cfg80211/mac80211: use debugfs_remove_recursive\n\nWe can save a lot of code and pointers in the structs\nby using debugfs_remove_recursive().\n\nFirst, change cfg80211 to use debugfs_remove_recursive()\nso that drivers do not need to clean up any files they\nadded to the per-wiphy debugfs (if and only if they are\nok to be accessed until after wiphy_unregister!).\n\nThen also make mac80211 use debugfs_remove_recursive()\nwhere necessary -- it need not remove per-wiphy files\nas cfg80211 now removes those, but netdev etc. files\nstill need to be handled but can now be removed without\nneeding struct dentry pointers to all of them.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "3b8d81e020f77c9da8b85b0685c8cd2ca7c7b150",
      "tree": "a19fcddbf28fecdbd13ad009fe07b8afc5e95c90",
      "parents": [
        "c4029083e2acb82229c43b791c07afb089d972ff"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Wed Jun 17 17:43:56 2009 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Jul 24 15:05:30 2009 -0400"
      },
      "message": "mac80211: remove master netdev\n\nWith the internal \u0027pending\u0027 queue system in place, we can simply\nput packets there instead of pushing them off to the master dev,\ngetting rid of the master interface completely.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "4c6d4f5c33fbe19b134c1af43af166fee79eb986",
      "tree": "789bd7f9c049ea9c57ad8f4826df6bcad3774ade",
      "parents": [
        "943ab70f6aebfdc0005ef7e58ae982e9ec22224b"
      ],
      "author": {
        "name": "Luis R. Rodriguez",
        "email": "lrodriguez@atheros.com",
        "time": "Thu Jul 16 10:05:41 2009 -0700"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Jul 24 15:05:16 2009 -0400"
      },
      "message": "mac80211: add helper for management / no-ack frame rate decision\n\nAll current rate control algorithms agree to send management and no-ack\nframes at the lowest rate. They also agree to do this when sta\nand the private rate control data is NULL. We add a hlper to mac80211\nfor this and simplify the rate control algorithm code.\n\nDevelopers wishing to make enhancements to rate control algorithms\nare for broadcast/multicast can opt to not use this in their\ngate_rate() mac80211 callback.\n\nCc: Zhu Yi \u003cyi.zhu@intel.com\u003e\nAcked-by: Reinette Chatre \u003creinette.chatre@intel.com\u003e\nCc: ipw3945-devel@lists.sourceforge.net\nCc: Gabor Juhos \u003cjuhosg@openwrt.org\u003e\nAcked-by: Felix Fietkau \u003cnbd@openwrt.org\u003e\nCc: Derek Smithies \u003cderek@indranet.co.nz\u003e\nCc: Chittajit Mitra \u003cChittajit.Mitra@Atheros.com\u003e\nSigned-off-by: Luis R. Rodriguez \u003clrodriguez@atheros.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "2b874e83c970b45c328ab12239b066a43505454c",
      "tree": "e4924ed6989f01682ec50910361b0d621dae0be4",
      "parents": [
        "4a48e2a484e5cf99da4795cf2d6916e057d533ad"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Mon Mar 23 14:10:22 2009 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Mar 27 20:13:15 2009 -0400"
      },
      "message": "mac80211: rate control status only for controlled packets\n\nThis patch changes mac80211 to not notify the rate control algorithm\u0027s\ntx_status() method when reporting status for a packet that didn\u0027t go\nthrough the rate control algorithm\u0027s get_rate() method.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "e6a9854b05c1a6af1308fe2b8c68f35abf28a3ee",
      "tree": "241f611f8194586ccabf61bacb060508773b9d05",
      "parents": [
        "cb121bad67a32cde37adc2729b7e18aa4fd3063e"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Tue Oct 21 12:40:02 2008 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Oct 31 19:00:23 2008 -0400"
      },
      "message": "mac80211/drivers: rewrite the rate control API\n\nSo after the previous changes we were still unhappy with how\nconvoluted the API is and decided to make things simpler for\neverybody. This completely changes the rate control API, now\ntaking into account 802.11n with MCS rates and more control,\nmost drivers don\u0027t support that though.\n\nSigned-off-by: Felix Fietkau \u003cnbd@openwrt.org\u003e\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "4b7679a561e552eeda1e3567119bef2bca99b66e",
      "tree": "b5f2b45c9186eb954f9329322d07e277e669b422",
      "parents": [
        "2ff6a6d4e92270283432690adf53a7e5ab186d19"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Thu Sep 18 18:14:18 2008 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Wed Sep 24 16:18:03 2008 -0400"
      },
      "message": "mac80211: clean up rate control API\n\nLong awaited, hard work. This patch totally cleans up the rate control\nAPI to remove the requirement to include internal headers outside of\nnet/mac80211/.\n\nThere\u0027s one internal use in the PID algorithm left for mesh networking,\nwe\u0027ll have to figure out a way to clean that one up and decide how to\ndo the peer link evaluation, possibly independent of the rate control\nalgorithm or via new API.\n\nAdditionally, ath9k is left using the cross-inclusion hack for now, we\nwill add new API where necessary to make this work properly, but right\nnow I\u0027m not expert enough to do it. It\u0027s still off better than before.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "2e92e6f2c50b4baf85cca968f0e6f1b5c0df7d39",
      "tree": "e845c2f3af6d29c807c540366b97b1d886b92c91",
      "parents": [
        "36d6825b91bc492b65b6333c369cd96a2fc8c903"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Thu May 15 12:55:27 2008 +0200"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Wed May 21 21:48:09 2008 -0400"
      },
      "message": "mac80211: use rate index in TX control\n\nThis patch modifies struct ieee80211_tx_control to give band\ninfo and the rate index (instead of rate pointers) to drivers.\nThis mostly serves to reduce the TX control structure size to\nmake it fit into skb-\u003ecb so that the fragmentation code can\nput it there and we can think about passing it to drivers that\nway in the future.\n\nThe rt2x00 driver update was done by Ivo, thanks.\n\nSigned-off-by: Ivo van Doorn \u003cIvDoorn@gmail.com\u003e\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "2c8dccc77420fb7433da5674818959d3499d35be",
      "tree": "2da037732b78a4796254b485f0c591d9625b7d1e",
      "parents": [
        "3b96766f0e643f52ae19e134664df6730c737e87"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Tue Apr 08 15:14:40 2008 -0400"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Tue Apr 08 16:44:45 2008 -0400"
      },
      "message": "mac80211: rename files\n\nThis patch renames all mac80211 files (except ieee80211_i.h) to get rid\nof the useless ieee80211_ prefix.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "d0709a65181beb787ef3f58cfe45536a2bb254c8",
      "tree": "29e5f36583b0e0a3f11b291347e57672eab41dad",
      "parents": [
        "5cf121c3cdb955583bf0c5d28c992b7968a4aa1a"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Mon Feb 25 16:27:46 2008 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Thu Mar 06 15:30:46 2008 -0500"
      },
      "message": "mac80211: RCU-ify STA info structure access\n\nThis makes access to the STA hash table/list use RCU to protect\nagainst freeing of items. However, it\u0027s not a true RCU, the\ncopy step is missing: whenever somebody changes a STA item it\nis simply updated. This is an existing race condition that is\nnow somewhat understandable.\n\nThis patch also fixes the race key freeing vs. STA destruction\nby making sure that sta_info_destroy() is always called under\nRTNL and frees the key.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "8318d78a44d49ac1edf2bdec7299de3617c4232e",
      "tree": "d434634418edd7399737801615d247be06616fdd",
      "parents": [
        "10b6b80145cc93887dd8aab99bfffa375e9add31"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Thu Jan 24 19:38:38 2008 +0100"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Fri Feb 29 15:19:32 2008 -0500"
      },
      "message": "cfg80211 API for channels/bitrates, mac80211 and driver conversion\n\nThis patch creates new cfg80211 wiphy API for channel and bitrate\nregistration and converts mac80211 and drivers to the new API. The\nold mac80211 API is completely ripped out. All drivers (except ath5k)\nare updated to the new API, in many cases I expect that optimisations\ncan be done.\n\nAlong with the regulatory code I\u0027ve also ripped out the\nIEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED flag, I believe it to be\nunnecessary if the hardware simply gives us whatever channels it wants\nto support and we then enable/disable them as required, which is pretty\nmuch required for travelling.\n\nAdditionally, the patch adds proper \"basic\" rate handling for STA\nmode interface, AP mode interface will have to have new API added\nto allow userspace to set the basic rate set, currently it\u0027ll be\nempty... However, the basic rate handling will need to be moved to\nthe BSS conf stuff.\n\nI do expect there to be bugs in this, especially wrt. transmit\npower handling where I\u0027m basically clueless about how it should work.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "2bc454b0b30b3645d114689b64321cb49be99923",
      "tree": "a6c2bc87e02586f43a71dbb5f1808079df120dec",
      "parents": [
        "9ab461732a3cd8e7a7cf13cc46ed4c1ac7907824"
      ],
      "author": {
        "name": "Michael Wu",
        "email": "flamingice@sourmilk.net",
        "time": "Tue Dec 25 19:33:16 2007 -0500"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 15:09:42 2008 -0800"
      },
      "message": "mac80211: Fix rate reporting regression\n\nMattias Nissler\u0027s \"clean up rate selection\" patch incorrectly changes\nthe behavior of txrate setting in sta_info. This patch backs out parts\nof the rate selection consolidation in order to fix this issue for now.\n\nSigned-off-by: Michael Wu \u003cflamingice@sourmilk.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "4b475898ec9dc6e62cebcb8fc0b3495c986a4590",
      "tree": "8409a6865f3d83965228fd8f6fae3b05e1e106ed",
      "parents": [
        "688b88a4886834d7e3457711cd4feef6611d3232"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Wed Jan 02 15:17:03 2008 +0100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 15:01:02 2008 -0800"
      },
      "message": "mac80211: better rate control algorithm selection\n\nThis patch changes mac80211\u0027s Kconfig/Makefile to:\n * select between the PID and the SIMPLE rate control\n   algorithm as default\n * always allow tri-state for the rate control algorithms,\n   building those that are selected \u0027y\u0027 into the mac80211\n   module (if that is a module, otherwise all into the kernel)\n * force the default rate control algorithm to be built into\n   mac80211\n\nIt also makes both rate control algorithms proper modules again\nwith MODULE_LICENSE etc.\n\nOnly if EMBEDDED is the user allowed to select \"NONE\" as default\nwhich will cause no algorithm to be selected, this will work\nonly when the driver brings one itself (e.g. iwlwifi drivers).\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "c21b39aca4f8f4975784e54cd3a1b80bab80dcc0",
      "tree": "bcf9b8ab5ecdb77fbd7ff7e56bc6474334a5d008",
      "parents": [
        "b92edbe0b8a36a833c16b0cbafb6e899b81ffc08"
      ],
      "author": {
        "name": "Stefano Brivio",
        "email": "stefano.brivio@polimi.it",
        "time": "Wed Dec 19 01:26:16 2007 +0100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:59:41 2008 -0800"
      },
      "message": "mac80211: make PID rate control algorithm the default\n\nThis makes the new PID TX rate control algorithm the default instead of the\nrc80211_simple rate control algorithm. The simple algorithm was flawed in\nseveral ways: it wasn\u0027t responsive at all and didn\u0027t age the information it was\nrelying on properly. The PID algorithm allows us to tune characteristics such\nas responsiveness by adjusting parameters and was found to generally behave\nbetter.\n\nThe default algorithm can be overridden to select simple instead. Which\never algorithm is the default is included as part of the mac80211\nmodule automatically. The other algorithm (simple vs. pid) can\nbe selected for inclusion as well. If EMBEDDED is selected then\nthe choice is available to have no default specified and neither\nalgorithm included in mac80211. The default algorithm can be set\nthrough a modparam.\n\nWhile at it, mark rc80211-simple as deprecated, and schedule it\nfor removal.\n\nSigned-off-by: Stefano Brivio \u003cstefano.brivio@polimi.it\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1abbe498e4b5e4f2000dfc30a0fa25be9553530e",
      "tree": "8f899d2f623b2316f874fd8ae4b84838ad4e8b40",
      "parents": [
        "98f0b0a3a412eade153c7cf00c6b863600980d89"
      ],
      "author": {
        "name": "Mattias Nissler",
        "email": "mattias.nissler@gmx.de",
        "time": "Thu Dec 20 13:50:07 2007 +0100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:59:17 2008 -0800"
      },
      "message": "mac80211: clean up rate selection\n\nMove some code out of rc80211_simple since it\u0027s probably needed for all rate\nselection algorithms, and fix iwlwifi accordingly. While at it, clean up the\nrate_control_get_rate() interface.\n\nSigned-off-by: Stefano Brivio \u003cstefano.brivio@polimi.it\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "20880e8936e467fe30d79aa838c8d24b7073648f",
      "tree": "a4f0b2de724ee3610414459b1072149cd2386598",
      "parents": [
        "3333590e94262aebb5d0fb767cc7ed8b2359705c"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@gmail.com",
        "time": "Thu Dec 13 16:17:03 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Dec 19 16:43:47 2007 -0800"
      },
      "message": "NET: mac80211: fix inappropriate memory freeing\n\nFix inappropriate memory freeing in case of requested rate_control_ops was\nnot found.  In this case the list head entity is going to be accidentally\nwasted.\n\nSigned-off-by: Cyrill Gorcunov \u003cgorcunov@gmail.com\u003e\nAcked-by: Michael Wu \u003cflamingice@sourmilk.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "b808ab16a9c99c00e3d8c3b351977fce62781dd0",
      "tree": "7005de517244926a3aac5f18a4df38f80063839c",
      "parents": [
        "2ef19e63e698d740661e04bd6d62ac3305435c61"
      ],
      "author": {
        "name": "Cyrill Gorcunov",
        "email": "gorcunov@gmail.com",
        "time": "Thu Dec 13 15:52:11 2007 -0800"
      },
      "committer": {
        "name": "John W. Linville",
        "email": "linville@tuxdriver.com",
        "time": "Mon Dec 17 17:01:39 2007 -0500"
      },
      "message": "ieee80211_rate: missed unlock\n\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "999acd9c339a761a18d625b13001612ac396ee00",
      "tree": "57498e6de24beb8a998e3a14743e8b7d73869e60",
      "parents": [
        "2bf236d55e5ea2b92ed5235af09997c2995b316b"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Sun Oct 28 14:49:33 2007 +0100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Sat Nov 10 21:59:43 2007 -0800"
      },
      "message": "mac80211: don\u0027t allow registering the same rate control twice\n\nPreviously, mac80211 would allow registering the same rate control\nalgorithm twice. This is a programming error in the registration\nand should not happen; additionally the second version could never\nbe selected. Disallow this and warn about it.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "ac71c691e6a5ce991fe221d3bdb0c972f617aa37",
      "tree": "a3641b416579fbb8368e04e1a88f68e0da8dfe39",
      "parents": [
        "8a8f1c0437a77cce29c1cb6089f01f22a6d9ca6e"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Sun Oct 28 14:17:44 2007 +0100"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Sat Nov 10 21:59:23 2007 -0800"
      },
      "message": "mac80211: make simple rate control algorithm built-in\n\nToo frequently people do not have module autoloading enabled\nor fail to install the rate control module correctly, hence\ntheir hardware probing fails due to no rate control algorithm\nbeing available. This makes the \u0027simple\u0027 algorithm built into\nthe mac80211 module unless EMBEDDED is enabled in which case\nit can be disabled (eg. if the wanted driver requires another\nrate control algorithm.)\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nAcked-by: Michael Buesch \u003cmb@bu3sch.de\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "f9d540ee5f7e480339911df8d7389ef4c435ab54",
      "tree": "89381e4aa0f8ea31662dc21e890c339d715f8271",
      "parents": [
        "a28975525016ddcbdaab8225666df1cf2dc9cb2d"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Fri Sep 28 14:02:09 2007 +0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Oct 10 16:54:15 2007 -0700"
      },
      "message": "[MAC80211]: remove management interface\n\nRemoves the management interface since it is only required\nfor hostapd/userspace MLME, will not be in the final tree\nat least in this form and hostapd/userspace MLME currently\ndo not work against this tree anyway.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "dd1cd4c620c174ebbdf78dc01b924115a06de5d3",
      "tree": "a04517b9ee2ede228ec4a8ab96099460060c4245",
      "parents": [
        "9c7d7728baf79c63ae58df95fb39ea13db487599"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Tue Sep 18 17:29:20 2007 -0400"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Oct 10 16:52:32 2007 -0700"
      },
      "message": "[MAC80211]: print out wiphy name instead of master device\n\nThis makes mac80211 print out the wiphy name instead of the\nmaster device name where appropriate.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: Michael Wu \u003cflamingice@sourmilk.net\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "ff6880892990aece71a3271425dfde35344d51bb",
      "tree": "6a6c5f61c0e060a9080345324df5a16e33a94f7e",
      "parents": [
        "1f5a7e47ae58cc23c623c09f1c9d97b7a8cf6344"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Fri Jul 27 15:43:23 2007 +0200"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Oct 10 16:47:35 2007 -0700"
      },
      "message": "[MAC80211]: move some rate control functions out of ieee80211.c\n\nI think these can go with rate control just as well and it makes\nieee80211.c more readable.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: Jiri Benc \u003cjbenc@suse.cz\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    },
    {
      "commit": "dd00cc486ab1c17049a535413d1751ef3482141c",
      "tree": "d90ff69ea06792b9284f2f2665c96624f121b88a",
      "parents": [
        "3b5ad0797c0e4049001f961a8b58f1d0ce532072"
      ],
      "author": {
        "name": "Yoann Padioleau",
        "email": "padator@wanadoo.fr",
        "time": "Thu Jul 19 01:49:03 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Thu Jul 19 10:04:50 2007 -0700"
      },
      "message": "some kmalloc/memset -\u003ekzalloc (tree wide)\n\nTransform some calls to kmalloc/memset to a single kzalloc (or kcalloc).\n\nHere is a short excerpt of the semantic patch performing\nthis transformation:\n\n@@\ntype T2;\nexpression x;\nidentifier f,fld;\nexpression E;\nexpression E1,E2;\nexpression e1,e2,e3,y;\nstatement S;\n@@\n\n x \u003d\n- kmalloc\n+ kzalloc\n  (E1,E2)\n  ...  when !\u003d \\(x-\u003efld\u003dE;\\|y\u003df(...,x,...);\\|f(...,x,...);\\|x\u003dE;\\|while(...) S\\|for(e1;e2;e3) S\\)\n- memset((T2)x,0,E1);\n\n@@\nexpression E1,E2,E3;\n@@\n\n- kzalloc(E1 * E2,E3)\n+ kcalloc(E1,E2,E3)\n\n[akpm@linux-foundation.org: get kcalloc args the right way around]\nSigned-off-by: Yoann Padioleau \u003cpadator@wanadoo.fr\u003e\nCc: Richard Henderson \u003crth@twiddle.net\u003e\nCc: Ivan Kokshaysky \u003cink@jurassic.park.msu.ru\u003e\nAcked-by: Russell King \u003crmk@arm.linux.org.uk\u003e\nCc: Bryan Wu \u003cbryan.wu@analog.com\u003e\nAcked-by: Jiri Slaby \u003cjirislaby@gmail.com\u003e\nCc: Dave Airlie \u003cairlied@linux.ie\u003e\nAcked-by: Roland Dreier \u003crolandd@cisco.com\u003e\nCc: Jiri Kosina \u003cjkosina@suse.cz\u003e\nAcked-by: Dmitry Torokhov \u003cdtor@mail.ru\u003e\nCc: Benjamin Herrenschmidt \u003cbenh@kernel.crashing.org\u003e\nAcked-by: Mauro Carvalho Chehab \u003cmchehab@infradead.org\u003e\nAcked-by: Pierre Ossman \u003cdrzeus-list@drzeus.cx\u003e\nCc: Jeff Garzik \u003cjeff@garzik.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nAcked-by: Greg KH \u003cgreg@kroah.com\u003e\nCc: James Bottomley \u003cJames.Bottomley@steeleye.com\u003e\nCc: \"Antonino A. Daplas\" \u003cadaplas@pol.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "f0706e828e96d0fa4e80c0d25aa98523f6d589a0",
      "tree": "a03c7f94939d74c1e1b82fcd9a215871590d8b35",
      "parents": [
        "a9de8ce0943e03b425be18561f51159fcceb873d"
      ],
      "author": {
        "name": "Jiri Benc",
        "email": "jbenc@suse.cz",
        "time": "Sat May 05 11:45:53 2007 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat May 05 11:45:53 2007 -0700"
      },
      "message": "[MAC80211]: Add mac80211 wireless stack.\n\nAdd mac80211, the IEEE 802.11 software MAC layer.\n\nSigned-off-by: Jiri Benc \u003cjbenc@suse.cz\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n"
    }
  ]
}
