)]}'
{
  "commit": "96c3da7d7d7c37ee308ad6813947f48a71cca573",
  "tree": "525a6031138d4e4fbe8cd487f5fb3a42db50cb2f",
  "parents": [
    "144333313b156a9e99d80e39e034a3cba00adeaf"
  ],
  "author": {
    "name": "Helmut Schaa",
    "email": "helmut.schaa@googlemail.com",
    "time": "Sat Oct 02 11:27:35 2010 +0200"
  },
  "committer": {
    "name": "John W. Linville",
    "email": "linville@tuxdriver.com",
    "time": "Tue Oct 05 13:35:26 2010 -0400"
  },
  "message": "rt2x00: rework tx status handling in rt2800pci\n\nThis patch changes the way tx status reports are handled by rt2800pci.\nPreviously rt2800pci would sometimes lose tx status reports as the\nTX_STA_FIFO register is a fifo of 16 entries that can overflow in case\nwe don\u0027t read it often/fast enough. Since interrupts are disabled in the\ndevice during the execution of the interrupt thread it happend sometimes\nunder high network and CPU load that processing took too long and a few\ntx status reports were dropped by the hw.\n\nTo fix this issue the TX_STA_FIFO register is read directly in the\ninterrupt handler and stored in a kfifo which is large enough to hold\nall status reports of all used tx queues.\n\nTo process the status reports a new tasklet txstatus_tasklet is used.\nUsing the already used interrupt thread is not possible since we don\u0027t\nwant to disable the TX_FIFO_STATUS interrupt while processing them and\nit is not possible to schedule the interrupt thread multiple times for\nexecution. A tasklet instead can be scheduled multiple times which\nallows to leave the TX_FIFO_STATUS interrupt enabled while a previously\nscheduled tasklet is still executing.\n\nIn short: All other interrupts are handled in the interrupt thread as\nbefore. Only the TX_FIFO_STATUS interrupt is partly handled in the\ninterrupt handler and finished in the according tasklet.\n\nOne drawback of this patch is that it duplicates some code from\nrt2800lib. However, that can be cleaned up in the future once the\nrt2800usb and rt2800pci tx status handling converge more.\n\nUsing this patch on a Ralink RT3052 embedded board gives me a reliable\nwireless connection even under high CPU and network load. I\u0027ve\ntransferred several gigabytes without any queue lockups.\n\nSigned-off-by: Helmut Schaa \u003chelmut.schaa@googlemail.com\u003e\nSigned-off-by: Ivo van Doorn \u003cIvDoorn@gmail.com\u003e\nSigned-off-by: John W. Linville \u003clinville@tuxdriver.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "005ee153e0ccf244296ca60f5d02ef1ec32951d5",
      "old_mode": 33188,
      "old_path": "drivers/net/wireless/rt2x00/rt2800pci.c",
      "new_id": "3806454b827be4c11fa135c322cac1854111f4c8",
      "new_mode": 33188,
      "new_path": "drivers/net/wireless/rt2x00/rt2800pci.c"
    },
    {
      "type": "modify",
      "old_id": "7832a5996a8c94b53d38ae70922025081f43e0c0",
      "old_mode": 33188,
      "old_path": "drivers/net/wireless/rt2x00/rt2x00.h",
      "new_id": "bab10adae5372227b5bfe00d7609fb1462f0ec45",
      "new_mode": 33188,
      "new_path": "drivers/net/wireless/rt2x00/rt2x00.h"
    },
    {
      "type": "modify",
      "old_id": "053fdd3bd7206c56836a7aa73aed12e155edd026",
      "old_mode": 33188,
      "old_path": "drivers/net/wireless/rt2x00/rt2x00dev.c",
      "new_id": "b03e6e41dc1edb1331e67f5b0854797b78b12dcf",
      "new_mode": 33188,
      "new_path": "drivers/net/wireless/rt2x00/rt2x00dev.c"
    }
  ]
}
