On 03/16/2016 06:04 AM, Mauro Carvalho Chehab wrote: > If au0828 gets removed, we need to remove the notifiers. > > Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxx> Tested bind_unbind au0828 loop 1000 times, followed by bind_unbind snd_usb_audio loop 1000 times. Didn't see any lock warnings on a KASAN enabled kernel (lock testing enabled). No use-after-free errors during these runs. Ran device removal test and rmmod and modprobe tests on both drivers. Generated graph after the runs and the graph looks good. Reviewed-by: Shuah Khan <shuahkh@xxxxxxxxxxxxxxx> Tested-by: Shuah Khan <shuahkh@xxxxxxxxxxxxxxx> thanks, -- Shuah > --- > drivers/media/usb/au0828/au0828-core.c | 34 ++++++++++++++++++++++++---------- > 1 file changed, 24 insertions(+), 10 deletions(-) > > diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c > index 2fcd17d9b1a6..06da73f1ff22 100644 > --- a/drivers/media/usb/au0828/au0828-core.c > +++ b/drivers/media/usb/au0828/au0828-core.c > @@ -131,21 +131,35 @@ static int recv_control_msg(struct au0828_dev *dev, u16 request, u32 value, > return status; > } > > +#ifdef CONFIG_MEDIA_CONTROLLER > +static void au0828_media_graph_notify(struct media_entity *new, > + void *notify_data); > +#endif > + > static void au0828_unregister_media_device(struct au0828_dev *dev) > { > - > #ifdef CONFIG_MEDIA_CONTROLLER > - if (dev->media_dev && > - media_devnode_is_registered(&dev->media_dev->devnode)) { > - /* clear enable_source, disable_source */ > - dev->media_dev->source_priv = NULL; > - dev->media_dev->enable_source = NULL; > - dev->media_dev->disable_source = NULL; > + struct media_device *mdev = dev->media_dev; > + struct media_entity_notify *notify, *nextp; > > - media_device_unregister(dev->media_dev); > - media_device_cleanup(dev->media_dev); > - dev->media_dev = NULL; > + if (!mdev || !media_devnode_is_registered(&mdev->devnode)) > + return; > + > + /* Remove au0828 entity_notify callbacks */ > + list_for_each_entry_safe(notify, nextp, &mdev->entity_notify, list) { > + if (notify->notify != au0828_media_graph_notify) > + continue; > + media_device_unregister_entity_notify(mdev, notify); > } > + > + /* clear enable_source, disable_source */ > + dev->media_dev->source_priv = NULL; > + dev->media_dev->enable_source = NULL; > + dev->media_dev->disable_source = NULL; > + > + media_device_unregister(dev->media_dev); > + media_device_cleanup(dev->media_dev); > + dev->media_dev = NULL; > #endif > } > > -- Shuah Khan Sr. Linux Kernel Developer Open Source Innovation Group Samsung Research America (Silicon Valley) shuahkh@xxxxxxxxxxxxxxx | (970) 217-8978 -- 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