)]}'
{
  "log": [
    {
      "commit": "4c898c7f2f286b204fefc5dddb568f755d195d0c",
      "tree": "026fead9aef220a5fd994e2eaa269ed598651d39",
      "parents": [
        "0b50f81d5a63428f131ff20596f4e3d473e5b94f"
      ],
      "author": {
        "name": "Daniel Ritz",
        "email": "daniel.ritz@gmx.ch",
        "time": "Thu Sep 22 00:47:11 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Sep 22 07:58:24 2005 -0700"
      },
      "message": "[PATCH] Driver Core: fis bus rescan devices race\n\nbus_rescan_devices_helper() does not hold the dev-\u003esem when it checks for\n!dev-\u003edriver().  device_attach() holds the sem, but calls again\ndevice_bind_driver() even when dev-\u003edriver is set.\n\nWhat happens is that a first device_attach() call (module insertion time)\nis on the way binding the device to a driver.  Another thread calls\nbus_rescan_devices().  Now when bus_rescan_devices_helper() checks for\ndev-\u003edriver it is still NULL \u0027cos the the prior device_attach() is not yet\nfinished.  But as soon as the first one releases the dev-\u003esem the second\ndevice_attach() tries to rebind the already bound device again.\ndevice_bind_driver() does this blindly which leads to a corrupt\ndriver-\u003eklist_devices list (the device links itself, the head points to the\ndevice).  Later a call to device_release_driver() sets dev-\u003edriver to NULL\nand breaks the link it has to itself on knode_driver.  Rmmoding the driver\nlater calls driver_detach() which leads to an endless loop \u0027cos the list\nhead in klist_devices still points to the device.  And since dev-\u003edriver is\nNULL it\u0027s stuck with the same device forever.  Boom.  And rmmod hangs.\n\nVery easy to reproduce with new-style pcmcia and a 16bit card.  Just loop\nmodprobe \u003cpcmcia-modules\u003e ;cardctl eject; rmmod \u003ccard driver, pcmcia\nmodules\u003e.\n\nEasiest fix is to check if the device is already bound to a driver in\ndevice_bind_driver().  This avoids the double binding.\n\nSigned-off-by: Daniel Ritz \u003cdaniel.ritz@gmx.ch\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d856f1e337782326c638c70c0b4df2b909350dec",
      "tree": "15c070e3909cbd260b2616001f0a6dde4a0c24fa",
      "parents": [
        "fef6ec8dd96205fb22e3cfe2e4abd69d89413631"
      ],
      "author": {
        "name": "James Bottomley",
        "email": "James.Bottomley@SteelEye.com",
        "time": "Fri Aug 19 09:14:01 2005 -0400"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Sep 05 16:03:13 2005 -0700"
      },
      "message": "[PATCH] klist: fix klist to have the same klist_add semantics as list_head\n\nat the moment, the list_head semantics are\n\nlist_add(node, head)\n\nwhereas current klist semantics are\n\nklist_add(head, node)\n\nThis is bound to cause confusion, and since klist is the newcomer, it\nshould follow the list_head semantics.\n\nI also added missing include guards to klist.h\n\nSigned-off-by: James Bottomley \u003cJames.Bottomley@SteelEye.com\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "afdce75f1eaebcf358b7594ba7969aade105c3b0",
      "tree": "5374a0e85e03c8706a1dd95478b9d0a3312917e0",
      "parents": [
        "151ef38f7c0ec1b0420f04438b0316e3a30bf2e4"
      ],
      "author": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Jun 22 16:09:05 2005 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Wed Jun 29 22:48:04 2005 -0700"
      },
      "message": "[PATCH] driver core: Add the ability to bind drivers to devices from userspace\n\nThis adds a single file, \"bind\", to the sysfs directory of every driver\nregistered with the driver core.  To bind a device to a driver, write\nthe bus id of the device you wish to bind to that specific driver to the\n\"bind\" file (remember to not add a trailing \\n).  If that bus id matches\na device on that bus, and it does not currently have a driver bound to\nit, the probe sequence will be initiated with that driver and device.\n\nNote, this requires that the driver itself be willing and able to accept\nthat device (usually through a device id type table).  This patch does\nnot make it possible to override the driver\u0027s id table.\n\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "ca2b94ba12f3c36fd3d6ed9d38b3798d4dad0d8b",
      "tree": "d9b85e0f423d1cd0a9ad1c72cec7464bcf50c126",
      "parents": [
        "acaefc25d21f850e47ecc5098d1e0bc442c526be"
      ],
      "author": {
        "name": "Hannes Reinecke",
        "email": "hare@suse.de",
        "time": "Wed May 18 10:42:23 2005 +0200"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:31 2005 -0700"
      },
      "message": "[PATCH] driver core: fix error handling in bus_add_device\n\nThe error handling in bus_add_device() and device_attach() is simply\nnon-existing. This patch propagates any error from device_attach to\nthe upper layers to allow for a proper recovery.\n\nFrom: Hannes Reinecke \u003chare@suse.de\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "c95a6b057b108c2b7add35cba1354f9af921349e",
      "tree": "5a312f634b0aec295201a93020ba025d840e5f21",
      "parents": [
        "6623415687eaffef49429292ab062bb046ee3311"
      ],
      "author": {
        "name": "Alan Stern",
        "email": "stern@rowland.harvard.edu",
        "time": "Fri May 06 15:38:33 2005 -0400"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:28 2005 -0700"
      },
      "message": "[PATCH] driver core: Fix races in driver_detach()\n\nThis patch is intended for your \"driver\" tree.  It fixes several subtle\nraces in driver_detach() and device_release_driver() in the driver-model\ncore.\n\nThe major change is to use klist_remove() rather than klist_del() when\ntaking a device off its driver\u0027s list.  There\u0027s no other way to guarantee\nthat the list pointers will be updated before some other driver binds to\nthe device.  For this to work driver_detach() can\u0027t use a klist iterator,\nso the loop over the devices must be written out in full.  In addition the\npatch protects against the possibility that, when a driver and a device\nare unregistered at the same time, one may be unloaded from memory before\nthe other is finished using it.\n\nSigned-off-by: Alan Stern \u003cstern@rowland.harvard.edu\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "0d3e5a2e39b6ba2974e9e7c2a429018c45de8e76",
      "tree": "30e584b73c356adce49dcc9df75332abaef95470",
      "parents": [
        "b86c1df1f98d16c999423a3907eb40a9423f481e"
      ],
      "author": {
        "name": "Patrick Mochel",
        "email": "mochel@digitalimplant.org",
        "time": "Tue Apr 05 23:46:33 2005 -0700"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:27 2005 -0700"
      },
      "message": "[PATCH] Driver Core: fix bk-driver-core kills ppc64\n\nThere\u0027s no check to see if the device is already bound to a driver, which\ncould do bad things.  The first thing to go wrong is that it will try to match\na driver with a device already bound to one.  In some cases (it appears with\nUSB with drivers/usb/core/usb.c::usb_match_id()), some drivers will match a\ndevice based on the class type, so it would be common (especially for HID\ndevices) to match a device that is already bound.\n\nThe fun comes when -\u003eprobe() is called, it fails, then\ndriver_probe_device() does this:\n\n\tdev-\u003edriver \u003d NULL;\n\nLater on, that pointer could be be dereferenced without checking and cause\nhell to break loose.\n\nThis problem could be nasty. It\u0027s very hardware dependent, since some\ndevices could have a different set of matching qualifiers than others.\n\nNow, I don\u0027t quite see exactly where/how you were getting that crash.\nYou\u0027re dereferencing bad memory, but I\u0027m not sure which pointer was bad\nand where it came from, but it could have come from a couple of different\nplaces.\n\nThe patch below will hopefully fix it all up for you. It\u0027s against\n2.6.12-rc2-mm1, and does the following:\n\n- Move logic to driver_probe_device() and comments uncommon returns:\n  1 - If device is bound\n  0 - If device not bound, and no error\n  error - If there was an error.\n\n- Move locking to caller of that function, since we want to lock a\n  device for the entire time we\u0027re trying to bind it to a driver (to\n  prevent against a driver being loaded at the same time).\n\n- Update __device_attach() and __driver_attach() to do that locking.\n\n- Check if device is already bound in __driver_attach()\n\n- Update the converse device_release_driver() so it locks the device\n  around all of the operations.\n\n- Mark driver_probe_device() as static and remove export. It\u0027s an\n  internal function, it should stay that way, and there are no other\n  callers. If there is ever a need to export it, we can audit it as\n  necessary.\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\n"
    },
    {
      "commit": "b86c1df1f98d16c999423a3907eb40a9423f481e",
      "tree": "02cf0b54f3c1d9b987268f2d4737af1a67dd4056",
      "parents": [
        "d0e2b4a0a9dd3eed71b56c47268bf4e40cff6d0f"
      ],
      "author": {
        "name": "gregkh@suse.de",
        "email": "gregkh@suse.de",
        "time": "Thu Mar 31 12:53:00 2005 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:27 2005 -0700"
      },
      "message": "[PATCH] Driver core: Fix up the driver and device iterators to be quieter\n\nAlso stops looping over the lists when a match is found.\n\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\n"
    },
    {
      "commit": "0956af53afea290c5676c75249fc2c180d831375",
      "tree": "43ba929157462d22b6320a8924823a56cb292569",
      "parents": [
        "63c4f204ffc8219696bda88eb20c9873d007a2fc"
      ],
      "author": {
        "name": "mochel@digitalimplant.org",
        "email": "mochel@digitalimplant.org",
        "time": "Thu Mar 24 18:58:45 2005 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:19 2005 -0700"
      },
      "message": "[PATCH] Call klist_del() instead of klist_remove().\n\n- Can\u0027t wait on removing the current item in the list (the positive refcount *because*\n  we are using it causes it to deadlock).\n\nSigned-off-by: Patrick Mochel \u003cmochel@digitalimplant.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "2287c322b61fced7e0c326a1a9606aa73147e3df",
      "tree": "8241c7cab4172969f38d8b55852aca2e071a494f",
      "parents": [
        "cb85b6f1cc811ecb9ed4b950206d8941ba710e68"
      ],
      "author": {
        "name": "mochel@digitalimplant.org",
        "email": "mochel@digitalimplant.org",
        "time": "Thu Mar 24 10:50:24 2005 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:17 2005 -0700"
      },
      "message": "[PATCH] Use bus_for_each_{dev,drv} for driver binding.\n\n- Now possible, since the lists are locked using the klist lock and not the\n  global rwsem.\n\nSigned-off-by: Patrick Mochel \u003cmochel@digitalimplant.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "94e7b1c5ff2055571703e38b059afffe17658432",
      "tree": "469dbd920087ec62acd88b4985437a78c6786c0e",
      "parents": [
        "38fdac3cdce276554b4484a41f8ec2daf81cb2ff"
      ],
      "author": {
        "name": "mochel@digitalimplant.org",
        "email": "mochel@digitalimplant.org",
        "time": "Mon Mar 21 12:25:36 2005 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:16 2005 -0700"
      },
      "message": "[PATCH] Add a klist to struct device_driver for the devices bound to it.\n\n- Use it in driver_for_each_device() instead of the regular list_head and stop using\n  the bus\u0027s rwsem for protection.\n- Use driver_for_each_device() in driver_detach() so we don\u0027t deadlock on the\n  bus\u0027s rwsem.\n- Remove -\u003edevices.\n- Move klist access and sysfs link access out from under device\u0027s semaphore, since\n  they\u0027re synchronized through other means.\n\nSigned-off-by: Patrick Mochel \u003cmochel@digitalimplant.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    },
    {
      "commit": "07e4a3e27fe414980ddc85a358e5a56abc48b363",
      "tree": "eb32858e7facf8b24a2f0fc2d4e829d6ee715c09",
      "parents": [
        "af70316af182f4716cc5eec7e0d27fc731d164bd"
      ],
      "author": {
        "name": "mochel@digitalimplant.org",
        "email": "mochel@digitalimplant.org",
        "time": "Mon Mar 21 10:52:54 2005 -0800"
      },
      "committer": {
        "name": "Greg Kroah-Hartman",
        "email": "gregkh@suse.de",
        "time": "Mon Jun 20 15:15:13 2005 -0700"
      },
      "message": "[PATCH] Move device/driver code to drivers/base/dd.c\n\nThis relocates the driver binding/unbinding code to drivers/base/dd.c. This is done\nfor two reasons: One, it\u0027s not code related to the bus_type itself; it uses some from\nthat, some from devices, and some from drivers. And Two, it will make it easier to do\nsome of the upcoming lock removal on that code..\n\nSigned-off-by: Patrick Mochel \u003cmochel@digitalimplant.org\u003e\nSigned-off-by: Greg Kroah-Hartman \u003cgregkh@suse.de\u003e\n"
    }
  ]
}
