)]}'
{
  "commit": "521594442cc62d1c2af8436a05ab5918b7730b19",
  "tree": "6def6161e8b87e13791b42636cb26ae6c389538a",
  "parents": [
    "4bfc44958e499af9a73f62201543b3a1f617cfeb"
  ],
  "author": {
    "name": "Florian Tobias Schandinat",
    "email": "FlorianSchandinat@gmx.de",
    "time": "Thu Aug 06 15:07:34 2009 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Fri Aug 07 10:39:56 2009 -0700"
  },
  "message": "viafb: fix rmmod bug\n\nThis fixes a bug caused by changing pointers (viafb_mode, viafb_mode1)\nassigned by module_param.  It reduces driver complexity by not needlessly\nchanging these vars as they are only read once and removing now\nsuperfluous code.\n\nOn unpatched kernels loading viafb with viafb_mode or viafb_mode1 option\nused and afterwards unloading it results in:\n\nkernel BUG at mm/slub.c:2926!\ninvalid opcode: 0000 [#1] PREEMPT\nlast sysfs file: /sys/devices/virtual/block/loop0/removable\nModules linked in: snd_hda_codec_realtek snd_hda_intel snd_hda_codec\nsnd_hwdep snd_pcm rtl8187 snd_timer eeprom_93cx6 mmc_block snd soundcore\nvia_sdmmc fb snd_page_alloc i2c_algo_bit i2c_viapro ehci_hcd uhci_hcd\ncfbcopyarea mmc_core cfbimgblt cfbfillrect video output [last unloaded:\nviafb]\n\n  Pid: 3355, comm: rmmod Not tainted (2.6.31-rc1 #0)\n  EIP: 0060:[\u003cc106a759\u003e] EFLAGS: 00010246 CPU: 0\n  EIP is at kfree+0x80/0xda\n  EAX: c17c2da0 EBX: dc7edbdc ECX: 0000010f EDX: 00000000\n  ESI: c102c700 EDI: dc7ed8fa EBP: d703ff2c ESP: d703ff20\n   DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068\n  Process rmmod (pid: 3355, ti\u003dd703e000 task\u003ddb1412c0 task.ti\u003dd703e000)\n  Stack:\n   dc7edbdc 00000014 00000016 d703ff40 c102c700 dc7f45d4 dc7f45d4 00000880\n   d703ff4c c103e571 00000000 d703ffac c103e751 66616976 da140062 db89ba80\n   00000328 d702edf8 db89ba80 d703ff9c c105d0f0 00000200 da14f898 00000014\n  Call Trace:\n   [\u003cc102c700\u003e] ? destroy_params+0x1e/0x2b\n   [\u003cc103e571\u003e] ? free_module+0xa2/0xd7\n   [\u003cc103e751\u003e] ? sys_delete_module+0x1ab/0x1da\n   [\u003cc105d0f0\u003e] ? do_munmap+0x20a/0x225\n   [\u003cc10029b4\u003e] ? sysenter_do_call+0x12/0x26\n  Code: 10 76 7a 8d 87 00 00 00 40 c1 e8 0c c1 e0 05 03 05 1c 87 41 c1 66 83 38 00 79 03 8b 40 0c 8b 10 84 d2 78 12 66 f7 c2 00 c0 75 04 \u003c0f\u003e 0b eb fe e8 6f 5a fe ff eb 47 8b 55 04 8b 58 0c 9c 5e fa 3b\n  EIP: [\u003cc106a759\u003e] kfree+0x80/0xda SS:ESP 0068:d703ff20\n\nThis is caused by the current code changing the pointers assigned by\nmodule_param.  During unload it tries to free the memory the pointers\npoint at which is now part of an internal structure.\n\nThe patch simply avoids changing the pointers.  This is okay as they are\nread only once during the initialization process.\n\nSigned-off-by: Florian Tobias Schandinat \u003cFlorianSchandinat@gmx.de\u003e\nCc: Scott Fang \u003cScottFang@viatech.com.cn\u003e\nCc: Joseph Chan \u003cJosephChan@via.com.tw\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "fcd53ceb88fa4c76f99ba8ba4891ef550edab377",
      "old_mode": 33188,
      "old_path": "drivers/video/via/hw.c",
      "new_id": "c8960003f47dc4e0e8ed4de2e0b62c91633af8ae",
      "new_mode": 33188,
      "new_path": "drivers/video/via/hw.c"
    },
    {
      "type": "modify",
      "old_id": "6c7290a6a44735d2f150282bda5e622f63f60c40",
      "old_mode": 33188,
      "old_path": "drivers/video/via/lcd.c",
      "new_id": "78c6b3387947e1a207525158b4924ca0cb0ffb71",
      "new_mode": 33188,
      "new_path": "drivers/video/via/lcd.c"
    },
    {
      "type": "modify",
      "old_id": "a0fec298216ea26f86695e6253d774c3a0e23729",
      "old_mode": 33188,
      "old_path": "drivers/video/via/viafbdev.c",
      "new_id": "72833f3334b53ed583610906188c79e621811513",
      "new_mode": 33188,
      "new_path": "drivers/video/via/viafbdev.c"
    },
    {
      "type": "modify",
      "old_id": "a4158e8728783bc8b1e65a22310d633dfca0b11b",
      "old_mode": 33188,
      "old_path": "drivers/video/via/viafbdev.h",
      "new_id": "227b000feb3839f289a5bea173d54aff1c4c38c7",
      "new_mode": 33188,
      "new_path": "drivers/video/via/viafbdev.h"
    }
  ]
}
