* [PATCH 1/2] Driver core: move the bus notifier call points (fwd)
@ 2008-12-08 15:14 Alan Stern
2008-12-08 21:52 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 2+ messages in thread
From: Alan Stern @ 2008-12-08 15:14 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Kernel development list
Ben:
After posting the patch below, I noticed that you were the person who
originally added the bus notifier code. You don't see any problems
with this code motion, do you?
Alan Stern
This patch (as1184) changes the location of the notifications in
device_add() and device_del(). Now the BUS_NOTIFY_ADD_DEVICE message
is sent after dpm_sysfs_add(), which is necessary for clients that
want to add attributes to the power/ subdirectory. The
BUS_NOTIFY_DEL_DEVICE message is correspondingly moved before
dpm_sysfs_remove().
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
---
Index: usb-2.6/drivers/base/core.c
===================================================================
--- usb-2.6.orig/drivers/base/core.c
+++ usb-2.6/drivers/base/core.c
@@ -884,11 +884,6 @@ int device_add(struct device *dev)
if (platform_notify)
platform_notify(dev);
- /* notify clients of device entry (new way) */
- if (dev->bus)
- blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
- BUS_NOTIFY_ADD_DEVICE, dev);
-
error = device_create_file(dev, &uevent_attr);
if (error)
goto attrError;
@@ -916,6 +911,14 @@ int device_add(struct device *dev)
if (error)
goto DPMError;
device_pm_add(dev);
+
+ /* Notify clients of device addition. This call must come
+ * after dpm_sysf_add() and before kobject_uevent().
+ */
+ if (dev->bus)
+ blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
+ BUS_NOTIFY_ADD_DEVICE, dev);
+
kobject_uevent(&dev->kobj, KOBJ_ADD);
bus_attach_device(dev);
if (parent)
@@ -940,9 +943,6 @@ done:
DPMError:
bus_remove_device(dev);
BusError:
- if (dev->bus)
- blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
- BUS_NOTIFY_DEL_DEVICE, dev);
device_remove_attrs(dev);
AttrsError:
device_remove_class_symlinks(dev);
@@ -1027,6 +1027,12 @@ void device_del(struct device *dev)
struct device *parent = dev->parent;
struct class_interface *class_intf;
+ /* Notify clients of device removal. This call must come
+ * before dpm_sysfs_remove().
+ */
+ if (dev->bus)
+ blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
+ BUS_NOTIFY_DEL_DEVICE, dev);
device_pm_remove(dev);
dpm_sysfs_remove(dev);
if (parent)
@@ -1064,9 +1070,6 @@ void device_del(struct device *dev)
*/
if (platform_notify_remove)
platform_notify_remove(dev);
- if (dev->bus)
- blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
- BUS_NOTIFY_DEL_DEVICE, dev);
kobject_uevent(&dev->kobj, KOBJ_REMOVE);
cleanup_device_parent(dev);
if (!list_empty(&dev->klist_children.k_list))
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 1/2] Driver core: move the bus notifier call points (fwd)
2008-12-08 15:14 [PATCH 1/2] Driver core: move the bus notifier call points (fwd) Alan Stern
@ 2008-12-08 21:52 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 2+ messages in thread
From: Benjamin Herrenschmidt @ 2008-12-08 21:52 UTC (permalink / raw)
To: Alan Stern; +Cc: Kernel development list
On Mon, 2008-12-08 at 10:14 -0500, Alan Stern wrote:
> Ben:
>
> After posting the patch below, I noticed that you were the person who
> originally added the bus notifier code. You don't see any problems
> with this code motion, do you?
I think it should be fine. I need to make sure the driver isn't bound
yet, that's my main requirement, since I use those callbacks to setup
the DMA operations & iommu for the device on Cell.
Cheers,
Ben.
> Alan Stern
>
>
>
> This patch (as1184) changes the location of the notifications in
> device_add() and device_del(). Now the BUS_NOTIFY_ADD_DEVICE message
> is sent after dpm_sysfs_add(), which is necessary for clients that
> want to add attributes to the power/ subdirectory. The
> BUS_NOTIFY_DEL_DEVICE message is correspondingly moved before
> dpm_sysfs_remove().
>
> Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
>
> ---
>
> Index: usb-2.6/drivers/base/core.c
> ===================================================================
> --- usb-2.6.orig/drivers/base/core.c
> +++ usb-2.6/drivers/base/core.c
> @@ -884,11 +884,6 @@ int device_add(struct device *dev)
> if (platform_notify)
> platform_notify(dev);
>
> - /* notify clients of device entry (new way) */
> - if (dev->bus)
> - blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> - BUS_NOTIFY_ADD_DEVICE, dev);
> -
> error = device_create_file(dev, &uevent_attr);
> if (error)
> goto attrError;
> @@ -916,6 +911,14 @@ int device_add(struct device *dev)
> if (error)
> goto DPMError;
> device_pm_add(dev);
> +
> + /* Notify clients of device addition. This call must come
> + * after dpm_sysf_add() and before kobject_uevent().
> + */
> + if (dev->bus)
> + blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> + BUS_NOTIFY_ADD_DEVICE, dev);
> +
> kobject_uevent(&dev->kobj, KOBJ_ADD);
> bus_attach_device(dev);
> if (parent)
> @@ -940,9 +943,6 @@ done:
> DPMError:
> bus_remove_device(dev);
> BusError:
> - if (dev->bus)
> - blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> - BUS_NOTIFY_DEL_DEVICE, dev);
> device_remove_attrs(dev);
> AttrsError:
> device_remove_class_symlinks(dev);
> @@ -1027,6 +1027,12 @@ void device_del(struct device *dev)
> struct device *parent = dev->parent;
> struct class_interface *class_intf;
>
> + /* Notify clients of device removal. This call must come
> + * before dpm_sysfs_remove().
> + */
> + if (dev->bus)
> + blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> + BUS_NOTIFY_DEL_DEVICE, dev);
> device_pm_remove(dev);
> dpm_sysfs_remove(dev);
> if (parent)
> @@ -1064,9 +1070,6 @@ void device_del(struct device *dev)
> */
> if (platform_notify_remove)
> platform_notify_remove(dev);
> - if (dev->bus)
> - blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
> - BUS_NOTIFY_DEL_DEVICE, dev);
> kobject_uevent(&dev->kobj, KOBJ_REMOVE);
> cleanup_device_parent(dev);
> if (!list_empty(&dev->klist_children.k_list))
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-12-08 21:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-08 15:14 [PATCH 1/2] Driver core: move the bus notifier call points (fwd) Alan Stern
2008-12-08 21:52 ` Benjamin Herrenschmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox