On Jul 29, 2011, at 1:30 PM, Jarod Wilson wrote: > On Jul 29, 2011, at 1:53 AM, Mauro Carvalho Chehab wrote: > >> rc unregister logic were deadly broken, preventing some drivers to >> be removed. Among the broken things, rc_dev_uevent() is being called >> during device_del(), causing a data filling on an area that it is >> not ready anymore. >> >> Also, some drivers have a stop callback defined, that needs to be called >> before data removal, as it stops data polling. >> >> Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> >> >> diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c >> index 51a23f4..666d4bb 100644 >> --- a/drivers/media/rc/rc-main.c >> +++ b/drivers/media/rc/rc-main.c >> @@ -928,10 +928,6 @@ out: >> >> static void rc_dev_release(struct device *device) >> { >> - struct rc_dev *dev = to_rc_dev(device); >> - >> - kfree(dev); >> - module_put(THIS_MODULE); >> } > > Since this function become a no-op, does it make sense to just remove it > and not set a .release function for static struct device_type rc_dev_type? Nope, that leads to this: [ 765.095926] ------------[ cut here ]------------ [ 765.098076] WARNING: at /home/jarod/src/linux-ir/drivers/base/core.c:143 device_release+0x73/0x7f() [ 765.100215] Hardware name: empty [ 765.102343] Device 'rc0' does not have a release() function, it is broken and must be fixed. Which may or not be bogus. But I've got a hanging modprobe -r em28xx-dvb with this change in place. Now to test with it rolled back... -- Jarod Wilson jarod@xxxxxxxxxxxx -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html