Merge "usb: hcd: Add USB atomic notifier callback for HC died error"
This commit is contained in:
commit
c41f5ad099
4 changed files with 36 additions and 0 deletions
|
@ -2513,6 +2513,7 @@ void usb_hc_died (struct usb_hcd *hcd)
|
|||
}
|
||||
spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
|
||||
/* Make sure that the other roothub is also deallocated. */
|
||||
usb_atomic_notify_dead_bus(&hcd->self);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL (usb_hc_died);
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "usb.h"
|
||||
|
||||
static BLOCKING_NOTIFIER_HEAD(usb_notifier_list);
|
||||
static ATOMIC_NOTIFIER_HEAD(usb_atomic_notifier_list);
|
||||
|
||||
/**
|
||||
* usb_register_notify - register a notifier callback whenever a usb change happens
|
||||
|
@ -67,3 +68,33 @@ void usb_notify_remove_bus(struct usb_bus *ubus)
|
|||
{
|
||||
blocking_notifier_call_chain(&usb_notifier_list, USB_BUS_REMOVE, ubus);
|
||||
}
|
||||
|
||||
/**
|
||||
* usb_register_atomic_notify - register a atomic notifier callback whenever a
|
||||
* HC dies
|
||||
* @nb: pointer to the atomic notifier block for the callback events.
|
||||
*
|
||||
*/
|
||||
void usb_register_atomic_notify(struct notifier_block *nb)
|
||||
{
|
||||
atomic_notifier_chain_register(&usb_atomic_notifier_list, nb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usb_register_atomic_notify);
|
||||
|
||||
/**
|
||||
* usb_unregister_atomic_notify - unregister a atomic notifier callback
|
||||
* @nb: pointer to the notifier block for the callback events.
|
||||
*
|
||||
*/
|
||||
void usb_unregister_atomic_notify(struct notifier_block *nb)
|
||||
{
|
||||
atomic_notifier_chain_unregister(&usb_atomic_notifier_list, nb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usb_unregister_atomic_notify);
|
||||
|
||||
|
||||
void usb_atomic_notify_dead_bus(struct usb_bus *ubus)
|
||||
{
|
||||
atomic_notifier_call_chain(&usb_atomic_notifier_list, USB_BUS_DIED,
|
||||
ubus);
|
||||
}
|
||||
|
|
|
@ -175,6 +175,7 @@ extern void usb_notify_add_device(struct usb_device *udev);
|
|||
extern void usb_notify_remove_device(struct usb_device *udev);
|
||||
extern void usb_notify_add_bus(struct usb_bus *ubus);
|
||||
extern void usb_notify_remove_bus(struct usb_bus *ubus);
|
||||
extern void usb_atomic_notify_dead_bus(struct usb_bus *ubus);
|
||||
extern void usb_hub_adjust_deviceremovable(struct usb_device *hdev,
|
||||
struct usb_hub_descriptor *desc);
|
||||
|
||||
|
|
|
@ -1896,8 +1896,11 @@ static inline int usb_translate_errors(int error_code)
|
|||
#define USB_DEVICE_REMOVE 0x0002
|
||||
#define USB_BUS_ADD 0x0003
|
||||
#define USB_BUS_REMOVE 0x0004
|
||||
#define USB_BUS_DIED 0x0005
|
||||
extern void usb_register_notify(struct notifier_block *nb);
|
||||
extern void usb_unregister_notify(struct notifier_block *nb);
|
||||
extern void usb_register_atomic_notify(struct notifier_block *nb);
|
||||
extern void usb_unregister_atomic_notify(struct notifier_block *nb);
|
||||
|
||||
/* debugfs stuff */
|
||||
extern struct dentry *usb_debug_root;
|
||||
|
|
Loading…
Add table
Reference in a new issue