Loading Documentation/powerpc/eeh-pci-error-recovery.txt +16 −15 Original line number Original line Diff line number Diff line Loading @@ -115,7 +115,7 @@ Current PPC64 Linux EEH Implementation At this time, a generic EEH recovery mechanism has been implemented, At this time, a generic EEH recovery mechanism has been implemented, so that individual device drivers do not need to be modified to support so that individual device drivers do not need to be modified to support EEH recovery. This generic mechanism piggy-backs on the PCI hotplug EEH recovery. This generic mechanism piggy-backs on the PCI hotplug infrastructure, and percolates events up through the hotplug/udev infrastructure, and percolates events up through the userspace/udev infrastructure. Followiing is a detailed description of how this is infrastructure. Followiing is a detailed description of how this is accomplished. accomplished. Loading Loading @@ -172,7 +172,7 @@ A handler for the EEH notifier_block events is implemented in drivers/pci/hotplug/pSeries_pci.c, called handle_eeh_events(). drivers/pci/hotplug/pSeries_pci.c, called handle_eeh_events(). It saves the device BAR's and then calls rpaphp_unconfig_pci_adapter(). It saves the device BAR's and then calls rpaphp_unconfig_pci_adapter(). This last call causes the device driver for the card to be stopped, This last call causes the device driver for the card to be stopped, which causes hotplug events to go out to user space. This triggers which causes uevents to go out to user space. This triggers user-space scripts that might issue commands such as "ifdown eth0" user-space scripts that might issue commands such as "ifdown eth0" for ethernet cards, and so on. This handler then sleeps for 5 seconds, for ethernet cards, and so on. This handler then sleeps for 5 seconds, hoping to give the user-space scripts enough time to complete. hoping to give the user-space scripts enough time to complete. Loading Loading @@ -264,23 +264,24 @@ rpa_php_unconfig_pci_adapter() { // in rpaphp_pci.c calls calls kobject_del() { //in /libs/kobject.c kobject_del() { //in /libs/kobject.c calls calls kobject_hotplug() { // in /libs/kobject.c kobject_uevent() { // in /libs/kobject.c calls calls kset_hotplug() { // in /lib/kobject.c kset_uevent() { // in /lib/kobject.c calls calls kset->hotplug_ops->hotplug() which is really just kset->uevent_ops->uevent() // which is really just a call to a call to dev_hotplug() { // in /drivers/base/core.c dev_uevent() { // in /drivers/base/core.c calls calls dev->bus->hotplug() which is really just a call to dev->bus->uevent() which is really just a call to pci_hotplug () { // in drivers/pci/hotplug.c pci_uevent () { // in drivers/pci/hotplug.c which prints device name, etc.... which prints device name, etc.... } } } } then kset_hotplug() calls then kobject_uevent() sends a netlink uevent to userspace call_usermodehelper () with --> userspace uevent argv[0]=hotplug_path[] which is "/sbin/hotplug" (during early boot, nobody listens to netlink events and --> event to userspace, kobject_uevent() executes uevent_helper[], which runs the event process /sbin/hotplug) } } } } kobject_del() then calls sysfs_remove_dir(), which would kobject_del() then calls sysfs_remove_dir(), which would Loading MAINTAINERS +0 −6 Original line number Original line Diff line number Diff line Loading @@ -1480,12 +1480,6 @@ W: http://nfs.sourceforge.net/ W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ S: Maintained S: Maintained KERNEL EVENT LAYER (KOBJECT_UEVENT) P: Robert Love M: rml@novell.com L: linux-kernel@vger.kernel.org S: Maintained KEXEC KEXEC P: Eric Biederman P: Eric Biederman P: Randy Dunlap P: Randy Dunlap Loading arch/arm/common/amba.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -45,7 +45,7 @@ static int amba_match(struct device *dev, struct device_driver *drv) } } #ifdef CONFIG_HOTPLUG #ifdef CONFIG_HOTPLUG static int amba_hotplug(struct device *dev, char **envp, int nr_env, char *buf, int bufsz) static int amba_uevent(struct device *dev, char **envp, int nr_env, char *buf, int bufsz) { { struct amba_device *pcdev = to_amba_device(dev); struct amba_device *pcdev = to_amba_device(dev); Loading @@ -58,7 +58,7 @@ static int amba_hotplug(struct device *dev, char **envp, int nr_env, char *buf, return 0; return 0; } } #else #else #define amba_hotplug NULL #define amba_uevent NULL #endif #endif static int amba_suspend(struct device *dev, pm_message_t state) static int amba_suspend(struct device *dev, pm_message_t state) Loading Loading @@ -88,7 +88,7 @@ static int amba_resume(struct device *dev) static struct bus_type amba_bustype = { static struct bus_type amba_bustype = { .name = "amba", .name = "amba", .match = amba_match, .match = amba_match, .hotplug = amba_hotplug, .uevent = amba_uevent, .suspend = amba_suspend, .suspend = amba_suspend, .resume = amba_resume, .resume = amba_resume, }; }; Loading arch/ia64/sn/kernel/tiocx.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -65,7 +65,7 @@ static int tiocx_match(struct device *dev, struct device_driver *drv) } } static int tiocx_hotplug(struct device *dev, char **envp, int num_envp, static int tiocx_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size) char *buffer, int buffer_size) { { return -ENODEV; return -ENODEV; Loading @@ -79,7 +79,7 @@ static void tiocx_bus_release(struct device *dev) struct bus_type tiocx_bus_type = { struct bus_type tiocx_bus_type = { .name = "tiocx", .name = "tiocx", .match = tiocx_match, .match = tiocx_match, .hotplug = tiocx_hotplug, .uevent = tiocx_uevent, }; }; /** /** Loading arch/powerpc/kernel/vio.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -293,6 +293,6 @@ static int vio_hotplug(struct device *dev, char **envp, int num_envp, struct bus_type vio_bus_type = { struct bus_type vio_bus_type = { .name = "vio", .name = "vio", .hotplug = vio_hotplug, .uevent = vio_hotplug, .match = vio_bus_match, .match = vio_bus_match, }; }; Loading
Documentation/powerpc/eeh-pci-error-recovery.txt +16 −15 Original line number Original line Diff line number Diff line Loading @@ -115,7 +115,7 @@ Current PPC64 Linux EEH Implementation At this time, a generic EEH recovery mechanism has been implemented, At this time, a generic EEH recovery mechanism has been implemented, so that individual device drivers do not need to be modified to support so that individual device drivers do not need to be modified to support EEH recovery. This generic mechanism piggy-backs on the PCI hotplug EEH recovery. This generic mechanism piggy-backs on the PCI hotplug infrastructure, and percolates events up through the hotplug/udev infrastructure, and percolates events up through the userspace/udev infrastructure. Followiing is a detailed description of how this is infrastructure. Followiing is a detailed description of how this is accomplished. accomplished. Loading Loading @@ -172,7 +172,7 @@ A handler for the EEH notifier_block events is implemented in drivers/pci/hotplug/pSeries_pci.c, called handle_eeh_events(). drivers/pci/hotplug/pSeries_pci.c, called handle_eeh_events(). It saves the device BAR's and then calls rpaphp_unconfig_pci_adapter(). It saves the device BAR's and then calls rpaphp_unconfig_pci_adapter(). This last call causes the device driver for the card to be stopped, This last call causes the device driver for the card to be stopped, which causes hotplug events to go out to user space. This triggers which causes uevents to go out to user space. This triggers user-space scripts that might issue commands such as "ifdown eth0" user-space scripts that might issue commands such as "ifdown eth0" for ethernet cards, and so on. This handler then sleeps for 5 seconds, for ethernet cards, and so on. This handler then sleeps for 5 seconds, hoping to give the user-space scripts enough time to complete. hoping to give the user-space scripts enough time to complete. Loading Loading @@ -264,23 +264,24 @@ rpa_php_unconfig_pci_adapter() { // in rpaphp_pci.c calls calls kobject_del() { //in /libs/kobject.c kobject_del() { //in /libs/kobject.c calls calls kobject_hotplug() { // in /libs/kobject.c kobject_uevent() { // in /libs/kobject.c calls calls kset_hotplug() { // in /lib/kobject.c kset_uevent() { // in /lib/kobject.c calls calls kset->hotplug_ops->hotplug() which is really just kset->uevent_ops->uevent() // which is really just a call to a call to dev_hotplug() { // in /drivers/base/core.c dev_uevent() { // in /drivers/base/core.c calls calls dev->bus->hotplug() which is really just a call to dev->bus->uevent() which is really just a call to pci_hotplug () { // in drivers/pci/hotplug.c pci_uevent () { // in drivers/pci/hotplug.c which prints device name, etc.... which prints device name, etc.... } } } } then kset_hotplug() calls then kobject_uevent() sends a netlink uevent to userspace call_usermodehelper () with --> userspace uevent argv[0]=hotplug_path[] which is "/sbin/hotplug" (during early boot, nobody listens to netlink events and --> event to userspace, kobject_uevent() executes uevent_helper[], which runs the event process /sbin/hotplug) } } } } kobject_del() then calls sysfs_remove_dir(), which would kobject_del() then calls sysfs_remove_dir(), which would Loading
MAINTAINERS +0 −6 Original line number Original line Diff line number Diff line Loading @@ -1480,12 +1480,6 @@ W: http://nfs.sourceforge.net/ W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ W: http://www.cse.unsw.edu.au/~neilb/patches/linux-devel/ S: Maintained S: Maintained KERNEL EVENT LAYER (KOBJECT_UEVENT) P: Robert Love M: rml@novell.com L: linux-kernel@vger.kernel.org S: Maintained KEXEC KEXEC P: Eric Biederman P: Eric Biederman P: Randy Dunlap P: Randy Dunlap Loading
arch/arm/common/amba.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -45,7 +45,7 @@ static int amba_match(struct device *dev, struct device_driver *drv) } } #ifdef CONFIG_HOTPLUG #ifdef CONFIG_HOTPLUG static int amba_hotplug(struct device *dev, char **envp, int nr_env, char *buf, int bufsz) static int amba_uevent(struct device *dev, char **envp, int nr_env, char *buf, int bufsz) { { struct amba_device *pcdev = to_amba_device(dev); struct amba_device *pcdev = to_amba_device(dev); Loading @@ -58,7 +58,7 @@ static int amba_hotplug(struct device *dev, char **envp, int nr_env, char *buf, return 0; return 0; } } #else #else #define amba_hotplug NULL #define amba_uevent NULL #endif #endif static int amba_suspend(struct device *dev, pm_message_t state) static int amba_suspend(struct device *dev, pm_message_t state) Loading Loading @@ -88,7 +88,7 @@ static int amba_resume(struct device *dev) static struct bus_type amba_bustype = { static struct bus_type amba_bustype = { .name = "amba", .name = "amba", .match = amba_match, .match = amba_match, .hotplug = amba_hotplug, .uevent = amba_uevent, .suspend = amba_suspend, .suspend = amba_suspend, .resume = amba_resume, .resume = amba_resume, }; }; Loading
arch/ia64/sn/kernel/tiocx.c +2 −2 Original line number Original line Diff line number Diff line Loading @@ -65,7 +65,7 @@ static int tiocx_match(struct device *dev, struct device_driver *drv) } } static int tiocx_hotplug(struct device *dev, char **envp, int num_envp, static int tiocx_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size) char *buffer, int buffer_size) { { return -ENODEV; return -ENODEV; Loading @@ -79,7 +79,7 @@ static void tiocx_bus_release(struct device *dev) struct bus_type tiocx_bus_type = { struct bus_type tiocx_bus_type = { .name = "tiocx", .name = "tiocx", .match = tiocx_match, .match = tiocx_match, .hotplug = tiocx_hotplug, .uevent = tiocx_uevent, }; }; /** /** Loading
arch/powerpc/kernel/vio.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -293,6 +293,6 @@ static int vio_hotplug(struct device *dev, char **envp, int num_envp, struct bus_type vio_bus_type = { struct bus_type vio_bus_type = { .name = "vio", .name = "vio", .hotplug = vio_hotplug, .uevent = vio_hotplug, .match = vio_bus_match, .match = vio_bus_match, }; };