aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2005-11-16 11:26:26 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2005-11-16 11:26:26 -0800
commit87c6034675a703ac8cbf5111e505180b6a6bda95 (patch)
tree5784a2c64bc0fb2e690502c0b83392800f2215d4 /driver
parent535fc297f29b38c56d8f80c2b5e0bb187bddec7c (diff)
downloadpatches-87c6034675a703ac8cbf5111e505180b6a6bda95.tar.gz
add kill-hotplug-word patch and refresh the rest for 2.6.15-rc1-git4
Diffstat (limited to 'driver')
-rw-r--r--driver/kill-hotplug-word-from-driver-core.patch2032
-rw-r--r--driver/speakup-core.patch2
2 files changed, 2033 insertions, 1 deletions
diff --git a/driver/kill-hotplug-word-from-driver-core.patch b/driver/kill-hotplug-word-from-driver-core.patch
new file mode 100644
index 0000000000000..95289d5d6d555
--- /dev/null
+++ b/driver/kill-hotplug-word-from-driver-core.patch
@@ -0,0 +1,2032 @@
+Author: Kay Sievers <kay.sievers@suse.de>
+Date: Wed Nov 16 09:00:00 2005 +0100
+
+driver core: replace "hotplug" by "uevent"
+
+Leave the overloaded "hotplug" word to susbsystems which are handling
+real devices. The driver core does not "plug" anything, it just exports
+the state to userspace and generates events.
+
+Signed-off-by: Kay Sievers <kay.sievers@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ Documentation/powerpc/eeh-pci-error-recovery.txt | 31 ++++----
+ block/genhd.c | 48 ++++++------
+ drivers/acpi/container.c | 8 +-
+ drivers/acpi/processor_core.c | 8 +-
+ drivers/acpi/scan.c | 14 +--
+ drivers/base/Kconfig | 4 -
+ drivers/base/class.c | 68 +++++++++---------
+ drivers/base/core.c | 42 +++++------
+ drivers/base/cpu.c | 4 -
+ drivers/base/firmware_class.c | 45 +++++-------
+ drivers/base/memory.c | 8 +-
+ drivers/ieee1394/nodemgr.c | 20 ++---
+ drivers/infiniband/core/sysfs.c | 16 ++--
+ drivers/input/input.c | 14 +--
+ drivers/input/serio/serio.c | 22 ++---
+ drivers/mmc/mmc_sysfs.c | 4 -
+ drivers/pci/hotplug.c | 44 +++++------
+ drivers/pci/pci-driver.c | 6 -
+ drivers/pci/pci.h | 4 -
+ drivers/pcmcia/cs.c | 10 +-
+ drivers/pcmcia/ds.c | 50 ++++++-------
+ drivers/scsi/ipr.c | 2
+ drivers/usb/core/usb.c | 86 ++++++++++-------------
+ drivers/usb/host/hc_crisv10.c | 2
+ drivers/w1/w1.c | 14 +--
+ fs/partitions/check.c | 6 -
+ include/linux/device.h | 14 +--
+ include/linux/firmware.h | 2
+ include/linux/kobject.h | 40 +++++-----
+ include/linux/sysctl.h | 2
+ include/linux/usb.h | 2
+ kernel/ksysfs.c | 14 +--
+ kernel/sysctl.c | 4 -
+ lib/kobject.c | 4 -
+ lib/kobject_uevent.c | 64 ++++++++---------
+ net/bluetooth/hci_sysfs.c | 4 -
+ net/bridge/br_sysfs_if.c | 4 -
+ net/core/net-sysfs.c | 8 +-
+ 38 files changed, 368 insertions(+), 374 deletions(-)
+
+--- gregkh-2.6.orig/Documentation/powerpc/eeh-pci-error-recovery.txt
++++ gregkh-2.6/Documentation/powerpc/eeh-pci-error-recovery.txt
+@@ -115,7 +115,7 @@ Current PPC64 Linux EEH Implementation
+ At this time, a generic EEH recovery mechanism has been implemented,
+ so that individual device drivers do not need to be modified to support
+ 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
+ accomplished.
+
+@@ -172,7 +172,7 @@ A handler for the EEH notifier_block eve
+ drivers/pci/hotplug/pSeries_pci.c, called handle_eeh_events().
+ 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,
+-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"
+ for ethernet cards, and so on. This handler then sleeps for 5 seconds,
+ hoping to give the user-space scripts enough time to complete.
+@@ -258,29 +258,30 @@ rpa_php_unconfig_pci_adapter() {
+ calls
+ pci_destroy_dev (struct pci_dev *) {
+ calls
+- device_unregister (&dev->dev) { // in /drivers/base/core.c
++ device_unregister (&dev->dev) { // in /drivers/base/core.c
+ calls
+- device_del(struct device * dev) { // in /drivers/base/core.c
++ device_del(struct device * dev) { // in /drivers/base/core.c
+ calls
+- kobject_del() { //in /libs/kobject.c
++ kobject_del() { //in /libs/kobject.c
+ calls
+- kobject_hotplug() { // in /libs/kobject.c
++ kobject_uevent() { // in /libs/kobject.c
+ calls
+- kset_hotplug() { // in /lib/kobject.c
++ kset_uevent() { // in /lib/kobject.c
+ calls
+- kset->hotplug_ops->hotplug() which is really just
++ kset->uevent_ops->uevent() // which is really just
+ a call to
+- dev_hotplug() { // in /drivers/base/core.c
++ dev_uevent() { // in /drivers/base/core.c
+ calls
+- dev->bus->hotplug() which is really just a call to
+- pci_hotplug () { // in drivers/pci/hotplug.c
++ dev->bus->uevent() which is really just a call to
++ pci_uevent () { // in drivers/pci/hotplug.c
+ which prints device name, etc....
+ }
+ }
+- then kset_hotplug() calls
+- call_usermodehelper () with
+- argv[0]=hotplug_path[] which is "/sbin/hotplug"
+- --> event to userspace,
++ then kobject_uevent() sends a netlink uevent to userspace
++ --> userspace uevent
++ (during early boot, nobody listens to netlink events and
++ kobject_uevent() executes uevent_helper[], which runs the
++ event process /sbin/hotplug)
+ }
+ }
+ kobject_del() then calls sysfs_remove_dir(), which would
+--- gregkh-2.6.orig/block/genhd.c
++++ gregkh-2.6/block/genhd.c
+@@ -358,7 +358,7 @@ static struct sysfs_ops disk_sysfs_ops =
+ static ssize_t disk_uevent_store(struct gendisk * disk,
+ const char *buf, size_t count)
+ {
+- kobject_hotplug(&disk->kobj, KOBJ_ADD);
++ kobject_uevent(&disk->kobj, KOBJ_ADD);
+ return count;
+ }
+ static ssize_t disk_dev_read(struct gendisk * disk, char *page)
+@@ -455,14 +455,14 @@ static struct kobj_type ktype_block = {
+
+ extern struct kobj_type ktype_part;
+
+-static int block_hotplug_filter(struct kset *kset, struct kobject *kobj)
++static int block_uevent_filter(struct kset *kset, struct kobject *kobj)
+ {
+ struct kobj_type *ktype = get_ktype(kobj);
+
+ return ((ktype == &ktype_block) || (ktype == &ktype_part));
+ }
+
+-static int block_hotplug(struct kset *kset, struct kobject *kobj, char **envp,
++static int block_uevent(struct kset *kset, struct kobject *kobj, char **envp,
+ int num_envp, char *buffer, int buffer_size)
+ {
+ struct kobj_type *ktype = get_ktype(kobj);
+@@ -474,40 +474,40 @@ static int block_hotplug(struct kset *ks
+
+ if (ktype == &ktype_block) {
+ disk = container_of(kobj, struct gendisk, kobj);
+- add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size,
+- &length, "MINOR=%u", disk->first_minor);
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
++ &length, "MINOR=%u", disk->first_minor);
+ } else if (ktype == &ktype_part) {
+ disk = container_of(kobj->parent, struct gendisk, kobj);
+ part = container_of(kobj, struct hd_struct, kobj);
+- add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size,
+- &length, "MINOR=%u",
+- disk->first_minor + part->partno);
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
++ &length, "MINOR=%u",
++ disk->first_minor + part->partno);
+ } else
+ return 0;
+
+- add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, &length,
+- "MAJOR=%u", disk->major);
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
++ "MAJOR=%u", disk->major);
+
+ /* add physical device, backing this device */
+ physdev = disk->driverfs_dev;
+ if (physdev) {
+ char *path = kobject_get_path(&physdev->kobj, GFP_KERNEL);
+
+- add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size,
+- &length, "PHYSDEVPATH=%s", path);
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
++ &length, "PHYSDEVPATH=%s", path);
+ kfree(path);
+
+ if (physdev->bus)
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PHYSDEVBUS=%s",
+- physdev->bus->name);
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PHYSDEVBUS=%s",
++ physdev->bus->name);
+
+ if (physdev->driver)
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PHYSDEVDRIVER=%s",
+- physdev->driver->name);
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PHYSDEVDRIVER=%s",
++ physdev->driver->name);
+ }
+
+ /* terminate, set to next free slot, shrink available space */
+@@ -520,13 +520,13 @@ static int block_hotplug(struct kset *ks
+ return 0;
+ }
+
+-static struct kset_hotplug_ops block_hotplug_ops = {
+- .filter = block_hotplug_filter,
+- .hotplug = block_hotplug,
++static struct kset_uevent_ops block_uevent_ops = {
++ .filter = block_uevent_filter,
++ .uevent = block_uevent,
+ };
+
+ /* declare block_subsys. */
+-static decl_subsys(block, &ktype_block, &block_hotplug_ops);
++static decl_subsys(block, &ktype_block, &block_uevent_ops);
+
+
+ /*
+--- gregkh-2.6.orig/drivers/acpi/container.c
++++ gregkh-2.6/drivers/acpi/container.c
+@@ -172,21 +172,21 @@ static void container_notify_cb(acpi_han
+ if (ACPI_FAILURE(status) || !device) {
+ result = container_device_add(&device, handle);
+ if (!result)
+- kobject_hotplug(&device->kobj,
+- KOBJ_ONLINE);
++ kobject_uevent(&device->kobj,
++ KOBJ_ONLINE);
+ else
+ printk("Failed to add container\n");
+ }
+ } else {
+ if (ACPI_SUCCESS(status)) {
+ /* device exist and this is a remove request */
+- kobject_hotplug(&device->kobj, KOBJ_OFFLINE);
++ kobject_uevent(&device->kobj, KOBJ_OFFLINE);
+ }
+ }
+ break;
+ case ACPI_NOTIFY_EJECT_REQUEST:
+ if (!acpi_bus_get_device(handle, &device) && device) {
+- kobject_hotplug(&device->kobj, KOBJ_OFFLINE);
++ kobject_uevent(&device->kobj, KOBJ_OFFLINE);
+ }
+ break;
+ default:
+--- gregkh-2.6.orig/drivers/acpi/processor_core.c
++++ gregkh-2.6/drivers/acpi/processor_core.c
+@@ -733,7 +733,7 @@ int acpi_processor_device_add(acpi_handl
+ return_VALUE(-ENODEV);
+
+ if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
+- kobject_hotplug(&(*device)->kobj, KOBJ_ONLINE);
++ kobject_uevent(&(*device)->kobj, KOBJ_ONLINE);
+ }
+ return_VALUE(0);
+ }
+@@ -773,13 +773,13 @@ acpi_processor_hotplug_notify(acpi_handl
+ }
+
+ if (pr->id >= 0 && (pr->id < NR_CPUS)) {
+- kobject_hotplug(&device->kobj, KOBJ_OFFLINE);
++ kobject_uevent(&device->kobj, KOBJ_OFFLINE);
+ break;
+ }
+
+ result = acpi_processor_start(device);
+ if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) {
+- kobject_hotplug(&device->kobj, KOBJ_ONLINE);
++ kobject_uevent(&device->kobj, KOBJ_ONLINE);
+ } else {
+ ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
+ "Device [%s] failed to start\n",
+@@ -803,7 +803,7 @@ acpi_processor_hotplug_notify(acpi_handl
+ }
+
+ if ((pr->id < NR_CPUS) && (cpu_present(pr->id)))
+- kobject_hotplug(&device->kobj, KOBJ_OFFLINE);
++ kobject_uevent(&device->kobj, KOBJ_OFFLINE);
+ break;
+ default:
+ ACPI_DEBUG_PRINT((ACPI_DB_INFO,
+--- gregkh-2.6.orig/drivers/acpi/scan.c
++++ gregkh-2.6/drivers/acpi/scan.c
+@@ -78,7 +78,7 @@ static struct kobj_type ktype_acpi_ns =
+ .release = acpi_device_release,
+ };
+
+-static int namespace_hotplug(struct kset *kset, struct kobject *kobj,
++static int namespace_uevent(struct kset *kset, struct kobject *kobj,
+ char **envp, int num_envp, char *buffer,
+ int buffer_size)
+ {
+@@ -89,8 +89,8 @@ static int namespace_hotplug(struct kset
+ if (!dev->driver)
+ return 0;
+
+- if (add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, &len,
+- "PHYSDEVDRIVER=%s", dev->driver->name))
++ if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len,
++ "PHYSDEVDRIVER=%s", dev->driver->name))
+ return -ENOMEM;
+
+ envp[i] = NULL;
+@@ -98,8 +98,8 @@ static int namespace_hotplug(struct kset
+ return 0;
+ }
+
+-static struct kset_hotplug_ops namespace_hotplug_ops = {
+- .hotplug = &namespace_hotplug,
++static struct kset_uevent_ops namespace_uevent_ops = {
++ .uevent = &namespace_uevent,
+ };
+
+ static struct kset acpi_namespace_kset = {
+@@ -108,7 +108,7 @@ static struct kset acpi_namespace_kset =
+ },
+ .subsys = &acpi_subsys,
+ .ktype = &ktype_acpi_ns,
+- .hotplug_ops = &namespace_hotplug_ops,
++ .uevent_ops = &namespace_uevent_ops,
+ };
+
+ static void acpi_device_register(struct acpi_device *device,
+@@ -347,7 +347,7 @@ static int acpi_bus_get_wakeup_device_fl
+ }
+
+ /* --------------------------------------------------------------------------
+- ACPI hotplug sysfs device file support
++ ACPI sysfs device file support
+ -------------------------------------------------------------------------- */
+ static ssize_t acpi_eject_store(struct acpi_device *device,
+ const char *buf, size_t count);
+--- gregkh-2.6.orig/drivers/base/Kconfig
++++ gregkh-2.6/drivers/base/Kconfig
+@@ -19,11 +19,11 @@ config PREVENT_FIRMWARE_BUILD
+ If unsure say Y here.
+
+ config FW_LOADER
+- tristate "Hotplug firmware loading support"
++ tristate "Userspace firmware loading support"
+ select HOTPLUG
+ ---help---
+ This option is provided for the case where no in-kernel-tree modules
+- require hotplug firmware loading support, but a module built outside
++ require userspace firmware loading support, but a module built outside
+ the kernel tree does.
+
+ config DEBUG_DRIVER
+--- gregkh-2.6.orig/drivers/base/class.c
++++ gregkh-2.6/drivers/base/class.c
+@@ -178,7 +178,7 @@ static void class_device_create_release(
+ }
+
+ /* needed to allow these devices to have parent class devices */
+-static int class_device_create_hotplug(struct class_device *class_dev,
++static int class_device_create_uevent(struct class_device *class_dev,
+ char **envp, int num_envp,
+ char *buffer, int buffer_size)
+ {
+@@ -331,7 +331,7 @@ static struct kobj_type ktype_class_devi
+ .release = class_dev_release,
+ };
+
+-static int class_hotplug_filter(struct kset *kset, struct kobject *kobj)
++static int class_uevent_filter(struct kset *kset, struct kobject *kobj)
+ {
+ struct kobj_type *ktype = get_ktype(kobj);
+
+@@ -343,14 +343,14 @@ static int class_hotplug_filter(struct k
+ return 0;
+ }
+
+-static const char *class_hotplug_name(struct kset *kset, struct kobject *kobj)
++static const char *class_uevent_name(struct kset *kset, struct kobject *kobj)
+ {
+ struct class_device *class_dev = to_class_dev(kobj);
+
+ return class_dev->class->name;
+ }
+
+-static int class_hotplug(struct kset *kset, struct kobject *kobj, char **envp,
++static int class_uevent(struct kset *kset, struct kobject *kobj, char **envp,
+ int num_envp, char *buffer, int buffer_size)
+ {
+ struct class_device *class_dev = to_class_dev(kobj);
+@@ -365,29 +365,29 @@ static int class_hotplug(struct kset *ks
+ struct device *dev = class_dev->dev;
+ char *path = kobject_get_path(&dev->kobj, GFP_KERNEL);
+
+- add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size,
+- &length, "PHYSDEVPATH=%s", path);
++ add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
++ &length, "PHYSDEVPATH=%s", path);
+ kfree(path);
+
+ if (dev->bus)
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PHYSDEVBUS=%s", dev->bus->name);
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PHYSDEVBUS=%s", dev->bus->name);
+
+ if (dev->driver)
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PHYSDEVDRIVER=%s", dev->driver->name);
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PHYSDEVDRIVER=%s", dev->driver->name);
+ }
+
+ if (MAJOR(class_dev->devt)) {
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "MAJOR=%u", MAJOR(class_dev->devt));
+-
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "MINOR=%u", MINOR(class_dev->devt));
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "MAJOR=%u", MAJOR(class_dev->devt));
++
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "MINOR=%u", MINOR(class_dev->devt));
+ }
+
+ /* terminate, set to next free slot, shrink available space */
+@@ -397,30 +397,30 @@ static int class_hotplug(struct kset *ks
+ buffer = &buffer[length];
+ buffer_size -= length;
+
+- if (class_dev->hotplug) {
++ if (class_dev->uevent) {
+ /* have the class device specific function add its stuff */
+- retval = class_dev->hotplug(class_dev, envp, num_envp,
++ retval = class_dev->uevent(class_dev, envp, num_envp,
+ buffer, buffer_size);
+ if (retval)
+- pr_debug("class_dev->hotplug() returned %d\n", retval);
+- } else if (class_dev->class->hotplug) {
++ pr_debug("class_dev->uevent() returned %d\n", retval);
++ } else if (class_dev->class->uevent) {
+ /* have the class specific function add its stuff */
+- retval = class_dev->class->hotplug(class_dev, envp, num_envp,
++ retval = class_dev->class->uevent(class_dev, envp, num_envp,
+ buffer, buffer_size);
+ if (retval)
+- pr_debug("class->hotplug() returned %d\n", retval);
++ pr_debug("class->uevent() returned %d\n", retval);
+ }
+
+ return retval;
+ }
+
+-static struct kset_hotplug_ops class_hotplug_ops = {
+- .filter = class_hotplug_filter,
+- .name = class_hotplug_name,
+- .hotplug = class_hotplug,
++static struct kset_uevent_ops class_uevent_ops = {
++ .filter = class_uevent_filter,
++ .name = class_uevent_name,
++ .uevent = class_uevent,
+ };
+
+-static decl_subsys(class_obj, &ktype_class_device, &class_hotplug_ops);
++static decl_subsys(class_obj, &ktype_class_device, &class_uevent_ops);
+
+
+ static int class_device_add_attrs(struct class_device * cd)
+@@ -464,7 +464,7 @@ static ssize_t show_dev(struct class_dev
+ static ssize_t store_uevent(struct class_device *class_dev,
+ const char *buf, size_t count)
+ {
+- kobject_hotplug(&class_dev->kobj, KOBJ_ADD);
++ kobject_uevent(&class_dev->kobj, KOBJ_ADD);
+ return count;
+ }
+
+@@ -559,7 +559,7 @@ int class_device_add(struct class_device
+ class_name);
+ }
+
+- kobject_hotplug(&class_dev->kobj, KOBJ_ADD);
++ kobject_uevent(&class_dev->kobj, KOBJ_ADD);
+
+ /* notify any interfaces this device is now here */
+ if (parent_class) {
+@@ -632,7 +632,7 @@ struct class_device *class_device_create
+ class_dev->class = cls;
+ class_dev->parent = parent;
+ class_dev->release = class_device_create_release;
+- class_dev->hotplug = class_device_create_hotplug;
++ class_dev->uevent = class_device_create_uevent;
+
+ va_start(args, fmt);
+ vsnprintf(class_dev->class_id, BUS_ID_SIZE, fmt, args);
+@@ -674,7 +674,7 @@ void class_device_del(struct class_devic
+ class_device_remove_file(class_dev, class_dev->devt_attr);
+ class_device_remove_attrs(class_dev);
+
+- kobject_hotplug(&class_dev->kobj, KOBJ_REMOVE);
++ kobject_uevent(&class_dev->kobj, KOBJ_REMOVE);
+ kobject_del(&class_dev->kobj);
+
+ class_device_put(parent_device);
+--- gregkh-2.6.orig/drivers/base/core.c
++++ gregkh-2.6/drivers/base/core.c
+@@ -90,7 +90,7 @@ static struct kobj_type ktype_device = {
+ };
+
+
+-static int dev_hotplug_filter(struct kset *kset, struct kobject *kobj)
++static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
+ {
+ struct kobj_type *ktype = get_ktype(kobj);
+
+@@ -102,14 +102,14 @@ static int dev_hotplug_filter(struct kse
+ return 0;
+ }
+
+-static const char *dev_hotplug_name(struct kset *kset, struct kobject *kobj)
++static const char *dev_uevent_name(struct kset *kset, struct kobject *kobj)
+ {
+ struct device *dev = to_dev(kobj);
+
+ return dev->bus->name;
+ }
+
+-static int dev_hotplug(struct kset *kset, struct kobject *kobj, char **envp,
++static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
+ int num_envp, char *buffer, int buffer_size)
+ {
+ struct device *dev = to_dev(kobj);
+@@ -119,15 +119,15 @@ static int dev_hotplug(struct kset *kset
+
+ /* add bus name of physical device */
+ if (dev->bus)
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PHYSDEVBUS=%s", dev->bus->name);
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PHYSDEVBUS=%s", dev->bus->name);
+
+ /* add driver name of physical device */
+ if (dev->driver)
+- add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PHYSDEVDRIVER=%s", dev->driver->name);
++ add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PHYSDEVDRIVER=%s", dev->driver->name);
+
+ /* terminate, set to next free slot, shrink available space */
+ envp[i] = NULL;
+@@ -136,11 +136,11 @@ static int dev_hotplug(struct kset *kset
+ buffer = &buffer[length];
+ buffer_size -= length;
+
+- if (dev->bus && dev->bus->hotplug) {
++ if (dev->bus && dev->bus->uevent) {
+ /* have the bus specific function add its stuff */
+- retval = dev->bus->hotplug (dev, envp, num_envp, buffer, buffer_size);
++ retval = dev->bus->uevent(dev, envp, num_envp, buffer, buffer_size);
+ if (retval) {
+- pr_debug ("%s - hotplug() returned %d\n",
++ pr_debug ("%s - uevent() returned %d\n",
+ __FUNCTION__, retval);
+ }
+ }
+@@ -148,16 +148,16 @@ static int dev_hotplug(struct kset *kset
+ return retval;
+ }
+
+-static struct kset_hotplug_ops device_hotplug_ops = {
+- .filter = dev_hotplug_filter,
+- .name = dev_hotplug_name,
+- .hotplug = dev_hotplug,
++static struct kset_uevent_ops device_uevent_ops = {
++ .filter = dev_uevent_filter,
++ .name = dev_uevent_name,
++ .uevent = dev_uevent,
+ };
+
+ static ssize_t store_uevent(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
+- kobject_hotplug(&dev->kobj, KOBJ_ADD);
++ kobject_uevent(&dev->kobj, KOBJ_ADD);
+ return count;
+ }
+
+@@ -165,7 +165,7 @@ static ssize_t store_uevent(struct devic
+ * device_subsys - structure to be registered with kobject core.
+ */
+
+-decl_subsys(devices, &ktype_device, &device_hotplug_ops);
++decl_subsys(devices, &ktype_device, &device_uevent_ops);
+
+
+ /**
+@@ -274,7 +274,7 @@ int device_add(struct device *dev)
+ dev->uevent_attr.store = store_uevent;
+ device_create_file(dev, &dev->uevent_attr);
+
+- kobject_hotplug(&dev->kobj, KOBJ_ADD);
++ kobject_uevent(&dev->kobj, KOBJ_ADD);
+ if ((error = device_pm_add(dev)))
+ goto PMError;
+ if ((error = bus_add_device(dev)))
+@@ -291,7 +291,7 @@ int device_add(struct device *dev)
+ BusError:
+ device_pm_remove(dev);
+ PMError:
+- kobject_hotplug(&dev->kobj, KOBJ_REMOVE);
++ kobject_uevent(&dev->kobj, KOBJ_REMOVE);
+ kobject_del(&dev->kobj);
+ Error:
+ if (parent)
+@@ -374,7 +374,7 @@ void device_del(struct device * dev)
+ platform_notify_remove(dev);
+ bus_remove_device(dev);
+ device_pm_remove(dev);
+- kobject_hotplug(&dev->kobj, KOBJ_REMOVE);
++ kobject_uevent(&dev->kobj, KOBJ_REMOVE);
+ kobject_del(&dev->kobj);
+ if (parent)
+ put_device(parent);
+--- gregkh-2.6.orig/drivers/base/cpu.c
++++ gregkh-2.6/drivers/base/cpu.c
+@@ -41,14 +41,14 @@ static ssize_t store_online(struct sys_d
+ case '0':
+ ret = cpu_down(cpu->sysdev.id);
+ if (!ret)
+- kobject_hotplug(&dev->kobj, KOBJ_OFFLINE);
++ kobject_uevent(&dev->kobj, KOBJ_OFFLINE);
+ break;
+ case '1':
+ ret = smp_prepare_cpu(cpu->sysdev.id);
+ if (!ret)
+ ret = cpu_up(cpu->sysdev.id);
+ if (!ret)
+- kobject_hotplug(&dev->kobj, KOBJ_ONLINE);
++ kobject_uevent(&dev->kobj, KOBJ_ONLINE);
+ break;
+ default:
+ ret = -EINVAL;
+--- gregkh-2.6.orig/drivers/base/firmware_class.c
++++ gregkh-2.6/drivers/base/firmware_class.c
+@@ -85,17 +85,17 @@ firmware_timeout_store(struct class *cla
+ static CLASS_ATTR(timeout, 0644, firmware_timeout_show, firmware_timeout_store);
+
+ static void fw_class_dev_release(struct class_device *class_dev);
+-int firmware_class_hotplug(struct class_device *dev, char **envp,
++int firmware_class_uevent(struct class_device *dev, char **envp,
+ int num_envp, char *buffer, int buffer_size);
+
+ static struct class firmware_class = {
+ .name = "firmware",
+- .hotplug = firmware_class_hotplug,
++ .uevent = firmware_class_uevent,
+ .release = fw_class_dev_release,
+ };
+
+ int
+-firmware_class_hotplug(struct class_device *class_dev, char **envp,
++firmware_class_uevent(struct class_device *class_dev, char **envp,
+ int num_envp, char *buffer, int buffer_size)
+ {
+ struct firmware_priv *fw_priv = class_get_devdata(class_dev);
+@@ -104,13 +104,12 @@ firmware_class_hotplug(struct class_devi
+ if (!test_bit(FW_STATUS_READY, &fw_priv->status))
+ return -ENODEV;
+
+- if (add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, &len,
+- "FIRMWARE=%s", fw_priv->fw_id))
++ if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len,
++ "FIRMWARE=%s", fw_priv->fw_id))
+ return -ENOMEM;
+- if (add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, &len,
+- "TIMEOUT=%i", loading_timeout))
++ if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len,
++ "TIMEOUT=%i", loading_timeout))
+ return -ENOMEM;
+-
+ envp[i] = NULL;
+
+ return 0;
+@@ -352,7 +351,7 @@ error_kfree:
+
+ static int
+ fw_setup_class_device(struct firmware *fw, struct class_device **class_dev_p,
+- const char *fw_name, struct device *device, int hotplug)
++ const char *fw_name, struct device *device, int uevent)
+ {
+ struct class_device *class_dev;
+ struct firmware_priv *fw_priv;
+@@ -384,7 +383,7 @@ fw_setup_class_device(struct firmware *f
+ goto error_unreg;
+ }
+
+- if (hotplug)
++ if (uevent)
+ set_bit(FW_STATUS_READY, &fw_priv->status);
+ else
+ set_bit(FW_STATUS_READY_NOHOTPLUG, &fw_priv->status);
+@@ -399,7 +398,7 @@ out:
+
+ static int
+ _request_firmware(const struct firmware **firmware_p, const char *name,
+- struct device *device, int hotplug)
++ struct device *device, int uevent)
+ {
+ struct class_device *class_dev;
+ struct firmware_priv *fw_priv;
+@@ -418,19 +417,19 @@ _request_firmware(const struct firmware
+ }
+
+ retval = fw_setup_class_device(firmware, &class_dev, name, device,
+- hotplug);
++ uevent);
+ if (retval)
+ goto error_kfree_fw;
+
+ fw_priv = class_get_devdata(class_dev);
+
+- if (hotplug) {
++ if (uevent) {
+ if (loading_timeout > 0) {
+ fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
+ add_timer(&fw_priv->timeout);
+ }
+
+- kobject_hotplug(&class_dev->kobj, KOBJ_ADD);
++ kobject_uevent(&class_dev->kobj, KOBJ_ADD);
+ wait_for_completion(&fw_priv->completion);
+ set_bit(FW_STATUS_DONE, &fw_priv->status);
+ del_timer_sync(&fw_priv->timeout);
+@@ -456,7 +455,7 @@ out:
+ }
+
+ /**
+- * request_firmware: - request firmware to hotplug and wait for it
++ * request_firmware: - send firmware request and wait for it
+ * @firmware_p: pointer to firmware image
+ * @name: name of firmware file
+ * @device: device for which firmware is being loaded
+@@ -466,7 +465,7 @@ out:
+ *
+ * Should be called from user context where sleeping is allowed.
+ *
+- * @name will be used as $FIRMWARE in the hotplug environment and
++ * @name will be used as $FIRMWARE in the uevent environment and
+ * should be distinctive enough not to be confused with any other
+ * firmware image for this or any other device.
+ **/
+@@ -474,8 +473,8 @@ int
+ request_firmware(const struct firmware **firmware_p, const char *name,
+ struct device *device)
+ {
+- int hotplug = 1;
+- return _request_firmware(firmware_p, name, device, hotplug);
++ int uevent = 1;
++ return _request_firmware(firmware_p, name, device, uevent);
+ }
+
+ /**
+@@ -518,7 +517,7 @@ struct firmware_work {
+ struct device *device;
+ void *context;
+ void (*cont)(const struct firmware *fw, void *context);
+- int hotplug;
++ int uevent;
+ };
+
+ static int
+@@ -533,7 +532,7 @@ request_firmware_work_func(void *arg)
+ }
+ daemonize("%s/%s", "firmware", fw_work->name);
+ ret = _request_firmware(&fw, fw_work->name, fw_work->device,
+- fw_work->hotplug);
++ fw_work->uevent);
+ if (ret < 0)
+ fw_work->cont(NULL, fw_work->context);
+ else {
+@@ -548,7 +547,7 @@ request_firmware_work_func(void *arg)
+ /**
+ * request_firmware_nowait: asynchronous version of request_firmware
+ * @module: module requesting the firmware
+- * @hotplug: invokes hotplug event to copy the firmware image if this flag
++ * @uevent: sends uevent to copy the firmware image if this flag
+ * is non-zero else the firmware copy must be done manually.
+ * @name: name of firmware file
+ * @device: device for which firmware is being loaded
+@@ -562,7 +561,7 @@ request_firmware_work_func(void *arg)
+ **/
+ int
+ request_firmware_nowait(
+- struct module *module, int hotplug,
++ struct module *module, int uevent,
+ const char *name, struct device *device, void *context,
+ void (*cont)(const struct firmware *fw, void *context))
+ {
+@@ -583,7 +582,7 @@ request_firmware_nowait(
+ .device = device,
+ .context = context,
+ .cont = cont,
+- .hotplug = hotplug,
++ .uevent = uevent,
+ };
+
+ ret = kernel_thread(request_firmware_work_func, fw_work,
+--- gregkh-2.6.orig/drivers/base/memory.c
++++ gregkh-2.6/drivers/base/memory.c
+@@ -43,9 +43,9 @@ static int memory_hotplug(struct kset *k
+ return retval;
+ }
+
+-static struct kset_hotplug_ops memory_hotplug_ops = {
+- .name = memory_hotplug_name,
+- .hotplug = memory_hotplug,
++static struct kset_uevent_ops memory_uevent_ops = {
++ .name = memory_uevent_name,
++ .uevent = memory_uevent,
+ };
+
+ static struct notifier_block *memory_chain;
+@@ -432,7 +432,7 @@ int __init memory_dev_init(void)
+ unsigned int i;
+ int ret;
+
+- memory_sysdev_class.kset.hotplug_ops = &memory_hotplug_ops;
++ memory_sysdev_class.kset.uevent_ops = &memory_uevent_ops;
+ ret = sysdev_class_register(&memory_sysdev_class);
+
+ /*
+--- gregkh-2.6.orig/drivers/ieee1394/nodemgr.c
++++ gregkh-2.6/drivers/ieee1394/nodemgr.c
+@@ -121,8 +121,8 @@ struct host_info {
+ };
+
+ static int nodemgr_bus_match(struct device * dev, struct device_driver * drv);
+-static int nodemgr_hotplug(struct class_device *cdev, char **envp, int num_envp,
+- char *buffer, int buffer_size);
++static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
++ char *buffer, int buffer_size);
+ static void nodemgr_resume_ne(struct node_entry *ne);
+ static void nodemgr_remove_ne(struct node_entry *ne);
+ static struct node_entry *find_entry_by_guid(u64 guid);
+@@ -162,7 +162,7 @@ static void ud_cls_release(struct class_
+ static struct class nodemgr_ud_class = {
+ .name = "ieee1394",
+ .release = ud_cls_release,
+- .hotplug = nodemgr_hotplug,
++ .uevent = nodemgr_uevent,
+ };
+
+ static struct hpsb_highlevel nodemgr_highlevel;
+@@ -966,7 +966,7 @@ static struct unit_directory *nodemgr_pr
+ if (ud_child == NULL)
+ break;
+
+- /* inherit unspecified values so hotplug picks it up */
++ /* inherit unspecified values, the driver core picks it up */
+ if ((ud->flags & UNIT_DIRECTORY_MODEL_ID) &&
+ !(ud_child->flags & UNIT_DIRECTORY_MODEL_ID))
+ {
+@@ -1062,8 +1062,8 @@ static void nodemgr_process_root_directo
+
+ #ifdef CONFIG_HOTPLUG
+
+-static int nodemgr_hotplug(struct class_device *cdev, char **envp, int num_envp,
+- char *buffer, int buffer_size)
++static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
+ {
+ struct unit_directory *ud;
+ int i = 0;
+@@ -1112,8 +1112,8 @@ do { \
+
+ #else
+
+-static int nodemgr_hotplug(struct class_device *cdev, char **envp, int num_envp,
+- char *buffer, int buffer_size)
++static int nodemgr_uevent(struct class_device *cdev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
+ {
+ return -ENODEV;
+ }
+@@ -1571,8 +1571,8 @@ static int nodemgr_host_thread(void *__h
+
+ /* Scan our nodes to get the bus options and create node
+ * entries. This does not do the sysfs stuff, since that
+- * would trigger hotplug callbacks and such, which is a
+- * bad idea at this point. */
++ * would trigger uevents and such, which is a bad idea at
++ * this point. */
+ nodemgr_node_scan(hi, generation);
+
+ /* This actually does the full probe, with sysfs
+--- gregkh-2.6.orig/drivers/infiniband/core/sysfs.c
++++ gregkh-2.6/drivers/infiniband/core/sysfs.c
+@@ -434,24 +434,24 @@ static void ib_device_release(struct cla
+ kfree(dev);
+ }
+
+-static int ib_device_hotplug(struct class_device *cdev, char **envp,
+- int num_envp, char *buf, int size)
++static int ib_device_uevent(struct class_device *cdev, char **envp,
++ int num_envp, char *buf, int size)
+ {
+ struct ib_device *dev = container_of(cdev, struct ib_device, class_dev);
+ int i = 0, len = 0;
+
+- if (add_hotplug_env_var(envp, num_envp, &i, buf, size, &len,
+- "NAME=%s", dev->name))
++ if (add_uevent_var(envp, num_envp, &i, buf, size, &len,
++ "NAME=%s", dev->name))
+ return -ENOMEM;
+
+ /*
+- * It might be nice to pass the node GUID to hotplug, but
++ * It might be nice to pass the node GUID with the event, but
+ * right now the only way to get it is to query the device
+ * provider, and this can crash during device removal because
+ * we are will be running after driver removal has started.
+ * We could add a node_guid field to struct ib_device, or we
+- * could just let the hotplug script read the node GUID from
+- * sysfs when devices are added.
++ * could just let userspace read the node GUID from sysfs when
++ * devices are added.
+ */
+
+ envp[i] = NULL;
+@@ -653,7 +653,7 @@ static struct class_device_attribute *ib
+ static struct class ib_class = {
+ .name = "infiniband",
+ .release = ib_device_release,
+- .hotplug = ib_device_hotplug,
++ .uevent = ib_device_uevent,
+ };
+
+ int ib_device_register_sysfs(struct ib_device *device)
+--- gregkh-2.6.orig/drivers/input/input.c
++++ gregkh-2.6/drivers/input/input.c
+@@ -610,10 +610,10 @@ static void input_dev_release(struct cla
+ }
+
+ /*
+- * Input hotplugging interface - loading event handlers based on
++ * Input uevent interface - loading event handlers based on
+ * device bitfields.
+ */
+-static int input_add_hotplug_bm_var(char **envp, int num_envp, int *cur_index,
++static int input_add_uevent_bm_var(char **envp, int num_envp, int *cur_index,
+ char *buffer, int buffer_size, int *cur_len,
+ const char *name, unsigned long *bitmap, int max)
+ {
+@@ -638,7 +638,7 @@ static int input_add_hotplug_bm_var(char
+
+ #define INPUT_ADD_HOTPLUG_VAR(fmt, val...) \
+ do { \
+- int err = add_hotplug_env_var(envp, num_envp, &i, \
++ int err = add_uevent_var(envp, num_envp, &i, \
+ buffer, buffer_size, &len, \
+ fmt, val); \
+ if (err) \
+@@ -647,15 +647,15 @@ static int input_add_hotplug_bm_var(char
+
+ #define INPUT_ADD_HOTPLUG_BM_VAR(name, bm, max) \
+ do { \
+- int err = input_add_hotplug_bm_var(envp, num_envp, &i, \
++ int err = input_add_uevent_bm_var(envp, num_envp, &i, \
+ buffer, buffer_size, &len, \
+ name, bm, max); \
+ if (err) \
+ return err; \
+ } while (0)
+
+-static int input_dev_hotplug(struct class_device *cdev, char **envp,
+- int num_envp, char *buffer, int buffer_size)
++static int input_dev_uevent(struct class_device *cdev, char **envp,
++ int num_envp, char *buffer, int buffer_size)
+ {
+ struct input_dev *dev = to_input_dev(cdev);
+ int i = 0;
+@@ -697,7 +697,7 @@ static int input_dev_hotplug(struct clas
+ struct class input_class = {
+ .name = "input",
+ .release = input_dev_release,
+- .hotplug = input_dev_hotplug,
++ .uevent = input_dev_uevent,
+ };
+
+ struct input_dev *input_allocate_device(void)
+--- gregkh-2.6.orig/drivers/input/serio/serio.c
++++ gregkh-2.6/drivers/input/serio/serio.c
+@@ -794,16 +794,16 @@ static int serio_bus_match(struct device
+
+ #ifdef CONFIG_HOTPLUG
+
+-#define SERIO_ADD_HOTPLUG_VAR(fmt, val...) \
++#define SERIO_ADD_UEVENT_VAR(fmt, val...) \
+ do { \
+- int err = add_hotplug_env_var(envp, num_envp, &i, \
++ int err = add_uevent_var(envp, num_envp, &i, \
+ buffer, buffer_size, &len, \
+ fmt, val); \
+ if (err) \
+ return err; \
+ } while (0)
+
+-static int serio_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
++static int serio_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
+ {
+ struct serio *serio;
+ int i = 0;
+@@ -814,21 +814,21 @@ static int serio_hotplug(struct device *
+
+ serio = to_serio_port(dev);
+
+- SERIO_ADD_HOTPLUG_VAR("SERIO_TYPE=%02x", serio->id.type);
+- SERIO_ADD_HOTPLUG_VAR("SERIO_PROTO=%02x", serio->id.proto);
+- SERIO_ADD_HOTPLUG_VAR("SERIO_ID=%02x", serio->id.id);
+- SERIO_ADD_HOTPLUG_VAR("SERIO_EXTRA=%02x", serio->id.extra);
+- SERIO_ADD_HOTPLUG_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X",
++ SERIO_ADD_UEVENT_VAR("SERIO_TYPE=%02x", serio->id.type);
++ SERIO_ADD_UEVENT_VAR("SERIO_PROTO=%02x", serio->id.proto);
++ SERIO_ADD_UEVENT_VAR("SERIO_ID=%02x", serio->id.id);
++ SERIO_ADD_UEVENT_VAR("SERIO_EXTRA=%02x", serio->id.extra);
++ SERIO_ADD_UEVENT_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X",
+ serio->id.type, serio->id.proto, serio->id.id, serio->id.extra);
+ envp[i] = NULL;
+
+ return 0;
+ }
+-#undef SERIO_ADD_HOTPLUG_VAR
++#undef SERIO_ADD_UEVENT_VAR
+
+ #else
+
+-static int serio_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
++static int serio_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
+ {
+ return -ENODEV;
+ }
+@@ -902,7 +902,7 @@ static int __init serio_init(void)
+ serio_bus.dev_attrs = serio_device_attrs;
+ serio_bus.drv_attrs = serio_driver_attrs;
+ serio_bus.match = serio_bus_match;
+- serio_bus.hotplug = serio_hotplug;
++ serio_bus.uevent = serio_uevent;
+ serio_bus.resume = serio_resume;
+ bus_register(&serio_bus);
+
+--- gregkh-2.6.orig/drivers/mmc/mmc_sysfs.c
++++ gregkh-2.6/drivers/mmc/mmc_sysfs.c
+@@ -80,7 +80,7 @@ static int mmc_bus_match(struct device *
+ }
+
+ static int
+-mmc_bus_hotplug(struct device *dev, char **envp, int num_envp, char *buf,
++mmc_bus_uevent(struct device *dev, char **envp, int num_envp, char *buf,
+ int buf_size)
+ {
+ struct mmc_card *card = dev_to_mmc_card(dev);
+@@ -140,7 +140,7 @@ static struct bus_type mmc_bus_type = {
+ .name = "mmc",
+ .dev_attrs = mmc_dev_attrs,
+ .match = mmc_bus_match,
+- .hotplug = mmc_bus_hotplug,
++ .uevent = mmc_bus_uevent,
+ .suspend = mmc_bus_suspend,
+ .resume = mmc_bus_resume,
+ };
+--- gregkh-2.6.orig/drivers/pci/hotplug.c
++++ gregkh-2.6/drivers/pci/hotplug.c
+@@ -3,8 +3,8 @@
+ #include <linux/module.h>
+ #include "pci.h"
+
+-int pci_hotplug (struct device *dev, char **envp, int num_envp,
+- char *buffer, int buffer_size)
++int pci_uevent(struct device *dev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
+ {
+ struct pci_dev *pdev;
+ int i = 0;
+@@ -17,34 +17,34 @@ int pci_hotplug (struct device *dev, cha
+ if (!pdev)
+ return -ENODEV;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PCI_CLASS=%04X", pdev->class))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PCI_CLASS=%04X", pdev->class))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
+- pdev->subsystem_device))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
++ pdev->subsystem_device))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PCI_SLOT_NAME=%s", pci_name(pdev)))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PCI_SLOT_NAME=%s", pci_name(pdev)))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
+- pdev->vendor, pdev->device,
+- pdev->subsystem_vendor, pdev->subsystem_device,
+- (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
+- (u8)(pdev->class)))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
++ pdev->vendor, pdev->device,
++ pdev->subsystem_vendor, pdev->subsystem_device,
++ (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
++ (u8)(pdev->class)))
+ return -ENOMEM;
+
+ envp[i] = NULL;
+--- gregkh-2.6.orig/drivers/pci/pci-driver.c
++++ gregkh-2.6/drivers/pci/pci-driver.c
+@@ -502,8 +502,8 @@ void pci_dev_put(struct pci_dev *dev)
+ }
+
+ #ifndef CONFIG_HOTPLUG
+-int pci_hotplug (struct device *dev, char **envp, int num_envp,
+- char *buffer, int buffer_size)
++int pci_uevent(struct device *dev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
+ {
+ return -ENODEV;
+ }
+@@ -512,7 +512,7 @@ int pci_hotplug (struct device *dev, cha
+ struct bus_type pci_bus_type = {
+ .name = "pci",
+ .match = pci_bus_match,
+- .hotplug = pci_hotplug,
++ .uevent = pci_uevent,
+ .suspend = pci_device_suspend,
+ .resume = pci_device_resume,
+ .dev_attrs = pci_dev_attrs,
+--- gregkh-2.6.orig/drivers/pci/pci.h
++++ gregkh-2.6/drivers/pci/pci.h
+@@ -1,7 +1,7 @@
+ /* Functions internal to the PCI core code */
+
+-extern int pci_hotplug (struct device *dev, char **envp, int num_envp,
+- char *buffer, int buffer_size);
++extern int pci_uevent(struct device *dev, char **envp, int num_envp,
++ char *buffer, int buffer_size);
+ extern int pci_create_sysfs_dev_files(struct pci_dev *pdev);
+ extern void pci_remove_sysfs_dev_files(struct pci_dev *pdev);
+ extern void pci_cleanup_rom(struct pci_dev *dev);
+--- gregkh-2.6.orig/drivers/pcmcia/cs.c
++++ gregkh-2.6/drivers/pcmcia/cs.c
+@@ -901,14 +901,14 @@ int pcmcia_insert_card(struct pcmcia_soc
+ EXPORT_SYMBOL(pcmcia_insert_card);
+
+
+-static int pcmcia_socket_hotplug(struct class_device *dev, char **envp,
+- int num_envp, char *buffer, int buffer_size)
++static int pcmcia_socket_uevent(struct class_device *dev, char **envp,
++ int num_envp, char *buffer, int buffer_size)
+ {
+ struct pcmcia_socket *s = container_of(dev, struct pcmcia_socket, dev);
+ int i = 0, length = 0;
+
+- if (add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size,
+- &length, "SOCKET_NO=%u", s->sock))
++ if (add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
++ &length, "SOCKET_NO=%u", s->sock))
+ return -ENOMEM;
+
+ envp[i] = NULL;
+@@ -927,7 +927,7 @@ static void pcmcia_release_socket_class(
+
+ struct class pcmcia_socket_class = {
+ .name = "pcmcia_socket",
+- .hotplug = pcmcia_socket_hotplug,
++ .uevent = pcmcia_socket_uevent,
+ .release = pcmcia_release_socket,
+ .class_release = pcmcia_release_socket_class,
+ };
+--- gregkh-2.6.orig/drivers/pcmcia/ds.c
++++ gregkh-2.6/drivers/pcmcia/ds.c
+@@ -779,8 +779,8 @@ static int pcmcia_bus_match(struct devic
+
+ #ifdef CONFIG_HOTPLUG
+
+-static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
+- char *buffer, int buffer_size)
++static int pcmcia_bus_uevent(struct device *dev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
+ {
+ struct pcmcia_device *p_dev;
+ int i, length = 0;
+@@ -800,31 +800,31 @@ static int pcmcia_bus_hotplug(struct dev
+
+ i = 0;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "SOCKET_NO=%u",
+- p_dev->socket->sock))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "SOCKET_NO=%u",
++ p_dev->socket->sock))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "DEVICE_NO=%02X",
+- p_dev->device_no))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "DEVICE_NO=%02X",
++ p_dev->device_no))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "MODALIAS=pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
+- "pa%08Xpb%08Xpc%08Xpd%08X",
+- p_dev->has_manf_id ? p_dev->manf_id : 0,
+- p_dev->has_card_id ? p_dev->card_id : 0,
+- p_dev->has_func_id ? p_dev->func_id : 0,
+- p_dev->func,
+- p_dev->device_no,
+- hash[0],
+- hash[1],
+- hash[2],
+- hash[3]))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "MODALIAS=pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
++ "pa%08Xpb%08Xpc%08Xpd%08X",
++ p_dev->has_manf_id ? p_dev->manf_id : 0,
++ p_dev->has_card_id ? p_dev->card_id : 0,
++ p_dev->has_func_id ? p_dev->func_id : 0,
++ p_dev->func,
++ p_dev->device_no,
++ hash[0],
++ hash[1],
++ hash[2],
++ hash[3]))
+ return -ENOMEM;
+
+ envp[i] = NULL;
+@@ -834,7 +834,7 @@ static int pcmcia_bus_hotplug(struct dev
+
+ #else
+
+-static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
++static int pcmcia_bus_uevent(struct device *dev, char **envp, int num_envp,
+ char *buffer, int buffer_size)
+ {
+ return -ENODEV;
+@@ -1223,7 +1223,7 @@ static struct class_interface pcmcia_bus
+
+ struct bus_type pcmcia_bus_type = {
+ .name = "pcmcia",
+- .hotplug = pcmcia_bus_hotplug,
++ .uevent = pcmcia_bus_uevent,
+ .match = pcmcia_bus_match,
+ .dev_attrs = pcmcia_dev_attrs,
+ };
+--- gregkh-2.6.orig/drivers/scsi/ipr.c
++++ gregkh-2.6/drivers/scsi/ipr.c
+@@ -2132,7 +2132,7 @@ restart:
+ }
+
+ spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+- kobject_hotplug(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE);
++ kobject_uevent(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE);
+ LEAVE;
+ }
+
+--- gregkh-2.6.orig/drivers/usb/core/usb.c
++++ gregkh-2.6/drivers/usb/core/usb.c
+@@ -370,8 +370,7 @@ void usb_driver_release_interface(struct
+ * Most USB device drivers will use this indirectly, through the usb core,
+ * but some layered driver frameworks use it directly.
+ * These device tables are exported with MODULE_DEVICE_TABLE, through
+- * modutils and "modules.usbmap", to support the driver loading
+- * functionality of USB hotplugging.
++ * modutils, to support the driver loading functionality of USB hotplugging.
+ *
+ * What Matches:
+ *
+@@ -552,10 +551,7 @@ static int usb_device_match (struct devi
+ #ifdef CONFIG_HOTPLUG
+
+ /*
+- * USB hotplugging invokes what /proc/sys/kernel/hotplug says
+- * (normally /sbin/hotplug) when USB devices get added or removed.
+- *
+- * This invokes a user mode policy agent, typically helping to load driver
++ * This sends an uevent to userspace, typically helping to load driver
+ * or other modules, configure the device, and more. Drivers can provide
+ * a MODULE_DEVICE_TABLE to help with module loading subtasks.
+ *
+@@ -564,8 +560,8 @@ static int usb_device_match (struct devi
+ * delays in event delivery. Use sysfs (and DEVPATH) to make sure the
+ * device (and this configuration!) are still present.
+ */
+-static int usb_hotplug (struct device *dev, char **envp, int num_envp,
+- char *buffer, int buffer_size)
++static int usb_uevent(struct device *dev, char **envp, int num_envp,
++ char *buffer, int buffer_size)
+ {
+ struct usb_interface *intf;
+ struct usb_device *usb_dev;
+@@ -577,7 +573,7 @@ static int usb_hotplug (struct device *d
+ return -ENODEV;
+
+ /* driver is often null here; dev_dbg() would oops */
+- pr_debug ("usb %s: hotplug\n", dev->bus_id);
++ pr_debug ("usb %s: uevent\n", dev->bus_id);
+
+ /* Must check driver_data here, as on remove driver is always NULL */
+ if ((dev->driver == &usb_generic_driver) ||
+@@ -604,51 +600,51 @@ static int usb_hotplug (struct device *d
+ *
+ * FIXME reduce hardwired intelligence here
+ */
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "DEVICE=/proc/bus/usb/%03d/%03d",
+- usb_dev->bus->busnum, usb_dev->devnum))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "DEVICE=/proc/bus/usb/%03d/%03d",
++ usb_dev->bus->busnum, usb_dev->devnum))
+ return -ENOMEM;
+ #endif
+
+ /* per-device configurations are common */
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "PRODUCT=%x/%x/%x",
+- le16_to_cpu(usb_dev->descriptor.idVendor),
+- le16_to_cpu(usb_dev->descriptor.idProduct),
+- le16_to_cpu(usb_dev->descriptor.bcdDevice)))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "PRODUCT=%x/%x/%x",
++ le16_to_cpu(usb_dev->descriptor.idVendor),
++ le16_to_cpu(usb_dev->descriptor.idProduct),
++ le16_to_cpu(usb_dev->descriptor.bcdDevice)))
+ return -ENOMEM;
+
+ /* class-based driver binding models */
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "TYPE=%d/%d/%d",
+- usb_dev->descriptor.bDeviceClass,
+- usb_dev->descriptor.bDeviceSubClass,
+- usb_dev->descriptor.bDeviceProtocol))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "TYPE=%d/%d/%d",
++ usb_dev->descriptor.bDeviceClass,
++ usb_dev->descriptor.bDeviceSubClass,
++ usb_dev->descriptor.bDeviceProtocol))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "INTERFACE=%d/%d/%d",
+- alt->desc.bInterfaceClass,
+- alt->desc.bInterfaceSubClass,
+- alt->desc.bInterfaceProtocol))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "INTERFACE=%d/%d/%d",
++ alt->desc.bInterfaceClass,
++ alt->desc.bInterfaceSubClass,
++ alt->desc.bInterfaceProtocol))
+ return -ENOMEM;
+
+- if (add_hotplug_env_var(envp, num_envp, &i,
+- buffer, buffer_size, &length,
+- "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
+- le16_to_cpu(usb_dev->descriptor.idVendor),
+- le16_to_cpu(usb_dev->descriptor.idProduct),
+- le16_to_cpu(usb_dev->descriptor.bcdDevice),
+- usb_dev->descriptor.bDeviceClass,
+- usb_dev->descriptor.bDeviceSubClass,
+- usb_dev->descriptor.bDeviceProtocol,
+- alt->desc.bInterfaceClass,
+- alt->desc.bInterfaceSubClass,
+- alt->desc.bInterfaceProtocol))
++ if (add_uevent_var(envp, num_envp, &i,
++ buffer, buffer_size, &length,
++ "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
++ le16_to_cpu(usb_dev->descriptor.idVendor),
++ le16_to_cpu(usb_dev->descriptor.idProduct),
++ le16_to_cpu(usb_dev->descriptor.bcdDevice),
++ usb_dev->descriptor.bDeviceClass,
++ usb_dev->descriptor.bDeviceSubClass,
++ usb_dev->descriptor.bDeviceProtocol,
++ alt->desc.bInterfaceClass,
++ alt->desc.bInterfaceSubClass,
++ alt->desc.bInterfaceProtocol))
+ return -ENOMEM;
+
+ envp[i] = NULL;
+@@ -658,7 +654,7 @@ static int usb_hotplug (struct device *d
+
+ #else
+
+-static int usb_hotplug (struct device *dev, char **envp,
++static int usb_uevent(struct device *dev, char **envp,
+ int num_envp, char *buffer, int buffer_size)
+ {
+ return -ENODEV;
+@@ -1495,7 +1491,7 @@ static int usb_generic_resume(struct dev
+ struct bus_type usb_bus_type = {
+ .name = "usb",
+ .match = usb_device_match,
+- .hotplug = usb_hotplug,
++ .uevent = usb_uevent,
+ .suspend = usb_generic_suspend,
+ .resume = usb_generic_resume,
+ };
+--- gregkh-2.6.orig/drivers/usb/host/hc_crisv10.c
++++ gregkh-2.6/drivers/usb/host/hc_crisv10.c
+@@ -4397,7 +4397,7 @@ static int __init etrax_usb_hc_init(void
+ device_initialize(&fake_device);
+ kobject_set_name(&fake_device.kobj, "etrax_usb");
+ kobject_add(&fake_device.kobj);
+- kobject_hotplug(&fake_device.kobj, KOBJ_ADD);
++ kobject_uevent(&fake_device.kobj, KOBJ_ADD);
+ hc->bus->controller = &fake_device;
+ usb_register_bus(hc->bus);
+
+--- gregkh-2.6.orig/drivers/w1/w1.c
++++ gregkh-2.6/drivers/w1/w1.c
+@@ -142,12 +142,12 @@ static struct bin_attribute w1_slave_att
+ /* Default family */
+ static struct w1_family w1_default_family;
+
+-static int w1_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size);
++static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size);
+
+ static struct bus_type w1_bus_type = {
+ .name = "w1",
+ .match = w1_master_match,
+- .hotplug = w1_hotplug,
++ .uevent = w1_uevent,
+ };
+
+ struct device_driver w1_master_driver = {
+@@ -361,7 +361,7 @@ void w1_destroy_master_attributes(struct
+ }
+
+ #ifdef CONFIG_HOTPLUG
+-static int w1_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
++static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
+ {
+ struct w1_master *md = NULL;
+ struct w1_slave *sl = NULL;
+@@ -377,7 +377,7 @@ static int w1_hotplug(struct device *dev
+ event_owner = "slave";
+ name = sl->name;
+ } else {
+- dev_dbg(dev, "Unknown hotplug event.\n");
++ dev_dbg(dev, "Unknown event.\n");
+ return -EINVAL;
+ }
+
+@@ -386,18 +386,18 @@ static int w1_hotplug(struct device *dev
+ if (dev->driver != &w1_slave_driver || !sl)
+ return 0;
+
+- err = add_hotplug_env_var(envp, num_envp, &cur_index, buffer, buffer_size, &cur_len, "W1_FID=%02X", sl->reg_num.family);
++ err = add_uevent_var(envp, num_envp, &cur_index, buffer, buffer_size, &cur_len, "W1_FID=%02X", sl->reg_num.family);
+ if (err)
+ return err;
+
+- err = add_hotplug_env_var(envp, num_envp, &cur_index, buffer, buffer_size, &cur_len, "W1_SLAVE_ID=%024LX", (u64)sl->reg_num.id);
++ err = add_uevent_var(envp, num_envp, &cur_index, buffer, buffer_size, &cur_len, "W1_SLAVE_ID=%024LX", (u64)sl->reg_num.id);
+ if (err)
+ return err;
+
+ return 0;
+ };
+ #else
+-static int w1_hotplug(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
++static int w1_uevent(struct device *dev, char **envp, int num_envp, char *buffer, int buffer_size)
+ {
+ return 0;
+ }
+--- gregkh-2.6.orig/fs/partitions/check.c
++++ gregkh-2.6/fs/partitions/check.c
+@@ -226,7 +226,7 @@ static struct sysfs_ops part_sysfs_ops =
+ static ssize_t part_uevent_store(struct hd_struct * p,
+ const char *page, size_t count)
+ {
+- kobject_hotplug(&p->kobj, KOBJ_ADD);
++ kobject_uevent(&p->kobj, KOBJ_ADD);
+ return count;
+ }
+ static ssize_t part_dev_read(struct hd_struct * p, char *page)
+@@ -360,7 +360,7 @@ void register_disk(struct gendisk *disk)
+ if ((err = kobject_add(&disk->kobj)))
+ return;
+ disk_sysfs_symlinks(disk);
+- kobject_hotplug(&disk->kobj, KOBJ_ADD);
++ kobject_uevent(&disk->kobj, KOBJ_ADD);
+
+ /* No minors to use for partitions */
+ if (disk->minors == 1) {
+@@ -465,6 +465,6 @@ void del_gendisk(struct gendisk *disk)
+ sysfs_remove_link(&disk->driverfs_dev->kobj, "block");
+ put_device(disk->driverfs_dev);
+ }
+- kobject_hotplug(&disk->kobj, KOBJ_REMOVE);
++ kobject_uevent(&disk->kobj, KOBJ_REMOVE);
+ kobject_del(&disk->kobj);
+ }
+--- gregkh-2.6.orig/include/linux/device.h
++++ gregkh-2.6/include/linux/device.h
+@@ -47,8 +47,8 @@ struct bus_type {
+ struct driver_attribute * drv_attrs;
+
+ int (*match)(struct device * dev, struct device_driver * drv);
+- int (*hotplug) (struct device *dev, char **envp,
+- int num_envp, char *buffer, int buffer_size);
++ int (*uevent)(struct device *dev, char **envp,
++ int num_envp, char *buffer, int buffer_size);
+ int (*suspend)(struct device * dev, pm_message_t state);
+ int (*resume)(struct device * dev);
+ };
+@@ -151,7 +151,7 @@ struct class {
+ struct class_attribute * class_attrs;
+ struct class_device_attribute * class_dev_attrs;
+
+- int (*hotplug)(struct class_device *dev, char **envp,
++ int (*uevent)(struct class_device *dev, char **envp,
+ int num_envp, char *buffer, int buffer_size);
+
+ void (*release)(struct class_device *dev);
+@@ -209,9 +209,9 @@ extern int class_device_create_file(stru
+ * set, this will be called instead of the class specific release function.
+ * Only use this if you want to override the default release function, like
+ * when you are nesting class_device structures.
+- * @hotplug: pointer to a hotplug function for this struct class_device. If
+- * set, this will be called instead of the class specific hotplug function.
+- * Only use this if you want to override the default hotplug function, like
++ * @uevent: pointer to a uevent function for this struct class_device. If
++ * set, this will be called instead of the class specific uevent function.
++ * Only use this if you want to override the default uevent function, like
+ * when you are nesting class_device structures.
+ */
+ struct class_device {
+@@ -227,7 +227,7 @@ struct class_device {
+ struct class_device *parent; /* parent of this child device, if there is one */
+
+ void (*release)(struct class_device *dev);
+- int (*hotplug)(struct class_device *dev, char **envp,
++ int (*uevent)(struct class_device *dev, char **envp,
+ int num_envp, char *buffer, int buffer_size);
+ char class_id[BUS_ID_SIZE]; /* unique to this class */
+ };
+--- gregkh-2.6.orig/include/linux/firmware.h
++++ gregkh-2.6/include/linux/firmware.h
+@@ -14,7 +14,7 @@ struct device;
+ int request_firmware(const struct firmware **fw, const char *name,
+ struct device *device);
+ int request_firmware_nowait(
+- struct module *module, int hotplug,
++ struct module *module, int uevent,
+ const char *name, struct device *device, void *context,
+ void (*cont)(const struct firmware *fw, void *context));
+
+--- gregkh-2.6.orig/include/linux/kobject.h
++++ gregkh-2.6/include/linux/kobject.h
+@@ -26,15 +26,14 @@
+ #include <linux/kernel.h>
+ #include <asm/atomic.h>
+
+-#define KOBJ_NAME_LEN 20
+-
+-#define HOTPLUG_PATH_LEN 256
++#define KOBJ_NAME_LEN 20
++#define UEVENT_HELPER_PATH_LEN 256
+
+ /* path to the userspace helper executed on an event */
+-extern char hotplug_path[];
++extern char uevent_helper[];
+
+-/* counter to tag the hotplug event, read only except for the kobject core */
+-extern u64 hotplug_seqnum;
++/* counter to tag the uevent, read only except for the kobject core */
++extern u64 uevent_seqnum;
+
+ /* the actions here must match the proper string in lib/kobject_uevent.c */
+ typedef int __bitwise kobject_action_t;
+@@ -101,15 +100,14 @@ struct kobj_type {
+ * of object; multiple ksets can belong to one subsystem. All
+ * ksets of a subsystem share the subsystem's lock.
+ *
+- * Each kset can support hotplugging; if it does, it will be given
+- * the opportunity to filter out specific kobjects from being
+- * reported, as well as to add its own "data" elements to the
+- * environment being passed to the hotplug helper.
++ * Each kset can support specific event variables; it can
++ * supress the event generation or add subsystem specific
++ * variables carried with the event.
+ */
+-struct kset_hotplug_ops {
++struct kset_uevent_ops {
+ int (*filter)(struct kset *kset, struct kobject *kobj);
+ const char *(*name)(struct kset *kset, struct kobject *kobj);
+- int (*hotplug)(struct kset *kset, struct kobject *kobj, char **envp,
++ int (*uevent)(struct kset *kset, struct kobject *kobj, char **envp,
+ int num_envp, char *buffer, int buffer_size);
+ };
+
+@@ -119,7 +117,7 @@ struct kset {
+ struct list_head list;
+ spinlock_t list_lock;
+ struct kobject kobj;
+- struct kset_hotplug_ops * hotplug_ops;
++ struct kset_uevent_ops * uevent_ops;
+ };
+
+
+@@ -167,20 +165,20 @@ struct subsystem {
+ struct rw_semaphore rwsem;
+ };
+
+-#define decl_subsys(_name,_type,_hotplug_ops) \
++#define decl_subsys(_name,_type,_uevent_ops) \
+ struct subsystem _name##_subsys = { \
+ .kset = { \
+ .kobj = { .name = __stringify(_name) }, \
+ .ktype = _type, \
+- .hotplug_ops =_hotplug_ops, \
++ .uevent_ops =_uevent_ops, \
+ } \
+ }
+-#define decl_subsys_name(_varname,_name,_type,_hotplug_ops) \
++#define decl_subsys_name(_varname,_name,_type,_uevent_ops) \
+ struct subsystem _varname##_subsys = { \
+ .kset = { \
+ .kobj = { .name = __stringify(_name) }, \
+ .ktype = _type, \
+- .hotplug_ops =_hotplug_ops, \
++ .uevent_ops =_uevent_ops, \
+ } \
+ }
+
+@@ -256,16 +254,16 @@ extern int subsys_create_file(struct sub
+ extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *);
+
+ #ifdef CONFIG_HOTPLUG
+-void kobject_hotplug(struct kobject *kobj, enum kobject_action action);
++void kobject_uevent(struct kobject *kobj, enum kobject_action action);
+
+-int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
++int add_uevent_var(char **envp, int num_envp, int *cur_index,
+ char *buffer, int buffer_size, int *cur_len,
+ const char *format, ...)
+ __attribute__((format (printf, 7, 8)));
+ #else
+-static inline void kobject_hotplug(struct kobject *kobj, enum kobject_action action) { }
++static inline void kobject_uevent(struct kobject *kobj, enum kobject_action action) { }
+
+-static inline int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
++static inline int add_uevent_var(char **envp, int num_envp, int *cur_index,
+ char *buffer, int buffer_size, int *cur_len,
+ const char *format, ...)
+ { return 0; }
+--- gregkh-2.6.orig/include/linux/sysctl.h
++++ gregkh-2.6/include/linux/sysctl.h
+@@ -124,7 +124,7 @@ enum
+ KERN_OVERFLOWUID=46, /* int: overflow UID */
+ KERN_OVERFLOWGID=47, /* int: overflow GID */
+ KERN_SHMPATH=48, /* string: path to shm fs */
+- KERN_HOTPLUG=49, /* string: path to hotplug policy agent */
++ KERN_HOTPLUG=49, /* string: path to uevent helper (deprecated) */
+ KERN_IEEE_EMULATION_WARNINGS=50, /* int: unimplemented ieee instructions */
+ KERN_S390_USER_DEBUG_LOGGING=51, /* int: dumps of user faults */
+ KERN_CORE_USES_PID=52, /* int: use core or core.%pid */
+--- gregkh-2.6.orig/include/linux/usb.h
++++ gregkh-2.6/include/linux/usb.h
+@@ -224,7 +224,7 @@ struct usb_interface_cache {
+ * Device drivers should not attempt to activate configurations. The choice
+ * of which configuration to install is a policy decision based on such
+ * considerations as available power, functionality provided, and the user's
+- * desires (expressed through hotplug scripts). However, drivers can call
++ * desires (expressed through userspace tools). However, drivers can call
+ * usb_reset_configuration() to reinitialize the current configuration and
+ * all its interfaces.
+ */
+--- gregkh-2.6.orig/kernel/ksysfs.c
++++ gregkh-2.6/kernel/ksysfs.c
+@@ -26,23 +26,23 @@ static struct subsys_attribute _name##_a
+ /* current uevent sequence number */
+ static ssize_t uevent_seqnum_show(struct subsystem *subsys, char *page)
+ {
+- return sprintf(page, "%llu\n", (unsigned long long)hotplug_seqnum);
++ return sprintf(page, "%llu\n", (unsigned long long)uevent_seqnum);
+ }
+ KERNEL_ATTR_RO(uevent_seqnum);
+
+ /* uevent helper program, used during early boo */
+ static ssize_t uevent_helper_show(struct subsystem *subsys, char *page)
+ {
+- return sprintf(page, "%s\n", hotplug_path);
++ return sprintf(page, "%s\n", uevent_helper);
+ }
+ static ssize_t uevent_helper_store(struct subsystem *subsys, const char *page, size_t count)
+ {
+- if (count+1 > HOTPLUG_PATH_LEN)
++ if (count+1 > UEVENT_HELPER_PATH_LEN)
+ return -ENOENT;
+- memcpy(hotplug_path, page, count);
+- hotplug_path[count] = '\0';
+- if (count && hotplug_path[count-1] == '\n')
+- hotplug_path[count-1] = '\0';
++ memcpy(uevent_helper, page, count);
++ uevent_helper[count] = '\0';
++ if (count && uevent_helper[count-1] == '\n')
++ uevent_helper[count-1] = '\0';
+ return count;
+ }
+ KERNEL_ATTR_RW(uevent_helper);
+--- gregkh-2.6.orig/kernel/sysctl.c
++++ gregkh-2.6/kernel/sysctl.c
+@@ -395,8 +395,8 @@ static ctl_table kern_table[] = {
+ {
+ .ctl_name = KERN_HOTPLUG,
+ .procname = "hotplug",
+- .data = &hotplug_path,
+- .maxlen = HOTPLUG_PATH_LEN,
++ .data = &uevent_helper,
++ .maxlen = UEVENT_HELPER_PATH_LEN,
+ .mode = 0644,
+ .proc_handler = &proc_dostring,
+ .strategy = &sysctl_string,
+--- gregkh-2.6.orig/lib/kobject.c
++++ gregkh-2.6/lib/kobject.c
+@@ -208,7 +208,7 @@ int kobject_register(struct kobject * ko
+ kobject_name(kobj),error);
+ dump_stack();
+ } else
+- kobject_hotplug(kobj, KOBJ_ADD);
++ kobject_uevent(kobj, KOBJ_ADD);
+ } else
+ error = -EINVAL;
+ return error;
+@@ -313,7 +313,7 @@ void kobject_del(struct kobject * kobj)
+ void kobject_unregister(struct kobject * kobj)
+ {
+ pr_debug("kobject %s: unregistering\n",kobject_name(kobj));
+- kobject_hotplug(kobj, KOBJ_REMOVE);
++ kobject_uevent(kobj, KOBJ_REMOVE);
+ kobject_del(kobj);
+ kobject_put(kobj);
+ }
+--- gregkh-2.6.orig/lib/kobject_uevent.c
++++ gregkh-2.6/lib/kobject_uevent.c
+@@ -22,12 +22,12 @@
+ #include <linux/kobject.h>
+ #include <net/sock.h>
+
+-#define BUFFER_SIZE 1024 /* buffer for the hotplug env */
++#define BUFFER_SIZE 1024 /* buffer for the variables */
+ #define NUM_ENVP 32 /* number of env pointers */
+
+ #if defined(CONFIG_HOTPLUG)
+-char hotplug_path[HOTPLUG_PATH_LEN] = "/sbin/hotplug";
+-u64 hotplug_seqnum;
++char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug";
++u64 uevent_seqnum;
+ static DEFINE_SPINLOCK(sequence_lock);
+ static struct sock *uevent_sock;
+
+@@ -50,12 +50,12 @@ static char *action_to_string(enum kobje
+ }
+
+ /**
+- * kobject_hotplug - notify userspace by executing /sbin/hotplug
++ * kobject_uevent - notify userspace by ending an uevent
+ *
+- * @action: action that is happening (usually "ADD" or "REMOVE")
++ * @action: action that is happening (usually KOBJ_ADD and KOBJ_REMOVE)
+ * @kobj: struct kobject that the action is happening to
+ */
+-void kobject_hotplug(struct kobject *kobj, enum kobject_action action)
++void kobject_uevent(struct kobject *kobj, enum kobject_action action)
+ {
+ char **envp;
+ char *buffer;
+@@ -65,7 +65,7 @@ void kobject_hotplug(struct kobject *kob
+ const char *subsystem;
+ struct kobject *top_kobj;
+ struct kset *kset;
+- struct kset_hotplug_ops *hotplug_ops;
++ struct kset_uevent_ops *uevent_ops;
+ u64 seq;
+ char *seq_buff;
+ int i = 0;
+@@ -88,11 +88,11 @@ void kobject_hotplug(struct kobject *kob
+ return;
+
+ kset = top_kobj->kset;
+- hotplug_ops = kset->hotplug_ops;
++ uevent_ops = kset->uevent_ops;
+
+ /* skip the event, if the filter returns zero. */
+- if (hotplug_ops && hotplug_ops->filter)
+- if (!hotplug_ops->filter(kset, kobj))
++ if (uevent_ops && uevent_ops->filter)
++ if (!uevent_ops->filter(kset, kobj))
+ return;
+
+ /* environment index */
+@@ -111,8 +111,8 @@ void kobject_hotplug(struct kobject *kob
+ goto exit;
+
+ /* originating subsystem */
+- if (hotplug_ops && hotplug_ops->name)
+- subsystem = hotplug_ops->name(kset, kobj);
++ if (uevent_ops && uevent_ops->name)
++ subsystem = uevent_ops->name(kset, kobj);
+ else
+ subsystem = kobject_name(&kset->kobj);
+
+@@ -134,12 +134,12 @@ void kobject_hotplug(struct kobject *kob
+ scratch += strlen("SEQNUM=18446744073709551616") + 1;
+
+ /* let the kset specific function add its stuff */
+- if (hotplug_ops && hotplug_ops->hotplug) {
+- retval = hotplug_ops->hotplug (kset, kobj,
++ if (uevent_ops && uevent_ops->uevent) {
++ retval = uevent_ops->uevent(kset, kobj,
+ &envp[i], NUM_ENVP - i, scratch,
+ BUFFER_SIZE - (scratch - buffer));
+ if (retval) {
+- pr_debug ("%s - hotplug() returned %d\n",
++ pr_debug ("%s - uevent() returned %d\n",
+ __FUNCTION__, retval);
+ goto exit;
+ }
+@@ -147,7 +147,7 @@ void kobject_hotplug(struct kobject *kob
+
+ /* we will send an event, request a new sequence number */
+ spin_lock(&sequence_lock);
+- seq = ++hotplug_seqnum;
++ seq = ++uevent_seqnum;
+ spin_unlock(&sequence_lock);
+ sprintf(seq_buff, "SEQNUM=%llu", (unsigned long long)seq);
+
+@@ -177,10 +177,10 @@ void kobject_hotplug(struct kobject *kob
+ }
+
+ /* call uevent_helper, usually only enabled during early boot */
+- if (hotplug_path[0]) {
++ if (uevent_helper[0]) {
+ char *argv [3];
+
+- argv [0] = hotplug_path;
++ argv [0] = uevent_helper;
+ argv [1] = (char *)subsystem;
+ argv [2] = NULL;
+ call_usermodehelper (argv[0], argv, envp, 0);
+@@ -192,39 +192,39 @@ exit:
+ kfree(envp);
+ return;
+ }
+-EXPORT_SYMBOL(kobject_hotplug);
++EXPORT_SYMBOL_GPL(kobject_uevent);
+
+ /**
+- * add_hotplug_env_var - helper for creating hotplug environment variables
++ * add_uevent_var - helper for creating event variables
+ * @envp: Pointer to table of environment variables, as passed into
+- * hotplug() method.
++ * uevent() method.
+ * @num_envp: Number of environment variable slots available, as
+- * passed into hotplug() method.
++ * passed into uevent() method.
+ * @cur_index: Pointer to current index into @envp. It should be
+- * initialized to 0 before the first call to add_hotplug_env_var(),
++ * initialized to 0 before the first call to add_uevent_var(),
+ * and will be incremented on success.
+ * @buffer: Pointer to buffer for environment variables, as passed
+- * into hotplug() method.
+- * @buffer_size: Length of @buffer, as passed into hotplug() method.
++ * into uevent() method.
++ * @buffer_size: Length of @buffer, as passed into uevent() method.
+ * @cur_len: Pointer to current length of space used in @buffer.
+ * Should be initialized to 0 before the first call to
+- * add_hotplug_env_var(), and will be incremented on success.
++ * add_uevent_var(), and will be incremented on success.
+ * @format: Format for creating environment variable (of the form
+ * "XXX=%x") for snprintf().
+ *
+ * Returns 0 if environment variable was added successfully or -ENOMEM
+ * if no space was available.
+ */
+-int add_hotplug_env_var(char **envp, int num_envp, int *cur_index,
+- char *buffer, int buffer_size, int *cur_len,
+- const char *format, ...)
++int add_uevent_var(char **envp, int num_envp, int *cur_index,
++ char *buffer, int buffer_size, int *cur_len,
++ const char *format, ...)
+ {
+ va_list args;
+
+ /*
+ * We check against num_envp - 1 to make sure there is at
+- * least one slot left after we return, since the hotplug
+- * method needs to set the last slot to NULL.
++ * least one slot left after we return, since kobject_uevent()
++ * needs to set the last slot to NULL.
+ */
+ if (*cur_index >= num_envp - 1)
+ return -ENOMEM;
+@@ -243,7 +243,7 @@ int add_hotplug_env_var(char **envp, int
+ (*cur_index)++;
+ return 0;
+ }
+-EXPORT_SYMBOL(add_hotplug_env_var);
++EXPORT_SYMBOL_GPL(add_uevent_var);
+
+ static int __init kobject_uevent_init(void)
+ {
+--- gregkh-2.6.orig/net/bluetooth/hci_sysfs.c
++++ gregkh-2.6/net/bluetooth/hci_sysfs.c
+@@ -78,7 +78,7 @@ static struct class_device_attribute *bt
+ };
+
+ #ifdef CONFIG_HOTPLUG
+-static int bt_hotplug(struct class_device *cdev, char **envp, int num_envp, char *buf, int size)
++static int bt_uevent(struct class_device *cdev, char **envp, int num_envp, char *buf, int size)
+ {
+ struct hci_dev *hdev = class_get_devdata(cdev);
+ int n, i = 0;
+@@ -107,7 +107,7 @@ struct class bt_class = {
+ .name = "bluetooth",
+ .release = bt_release,
+ #ifdef CONFIG_HOTPLUG
+- .hotplug = bt_hotplug,
++ .uevent = bt_uevent,
+ #endif
+ };
+
+--- gregkh-2.6.orig/net/bridge/br_sysfs_if.c
++++ gregkh-2.6/net/bridge/br_sysfs_if.c
+@@ -248,7 +248,7 @@ int br_sysfs_addif(struct net_bridge_por
+ if (err)
+ goto out2;
+
+- kobject_hotplug(&p->kobj, KOBJ_ADD);
++ kobject_uevent(&p->kobj, KOBJ_ADD);
+ return 0;
+ out2:
+ kobject_del(&p->kobj);
+@@ -260,7 +260,7 @@ void br_sysfs_removeif(struct net_bridge
+ {
+ pr_debug("br_sysfs_removeif\n");
+ sysfs_remove_link(&p->br->ifobj, p->dev->name);
+- kobject_hotplug(&p->kobj, KOBJ_REMOVE);
++ kobject_uevent(&p->kobj, KOBJ_REMOVE);
+ kobject_del(&p->kobj);
+ }
+
+--- gregkh-2.6.orig/net/core/net-sysfs.c
++++ gregkh-2.6/net/core/net-sysfs.c
+@@ -369,14 +369,14 @@ static struct attribute_group wireless_g
+ #endif
+
+ #ifdef CONFIG_HOTPLUG
+-static int netdev_hotplug(struct class_device *cd, char **envp,
+- int num_envp, char *buf, int size)
++static int netdev_uevent(struct class_device *cd, char **envp,
++ int num_envp, char *buf, int size)
+ {
+ struct net_device *dev = to_net_dev(cd);
+ int i = 0;
+ int n;
+
+- /* pass interface in env to hotplug. */
++ /* pass interface to uevent. */
+ envp[i++] = buf;
+ n = snprintf(buf, size, "INTERFACE=%s", dev->name) + 1;
+ buf += n;
+@@ -408,7 +408,7 @@ static struct class net_class = {
+ .name = "net",
+ .release = netdev_release,
+ #ifdef CONFIG_HOTPLUG
+- .hotplug = netdev_hotplug,
++ .uevent = netdev_uevent,
+ #endif
+ };
+
diff --git a/driver/speakup-core.patch b/driver/speakup-core.patch
index 50607add5950f..37f2d02af79ed 100644
--- a/driver/speakup-core.patch
+++ b/driver/speakup-core.patch
@@ -8801,7 +8801,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+#endif
--- gregkh-2.6.orig/arch/arm/Kconfig
+++ gregkh-2.6/arch/arm/Kconfig
-@@ -755,6 +755,7 @@ source "drivers/mfd/Kconfig"
+@@ -741,6 +741,7 @@ source "drivers/mfd/Kconfig"
source "drivers/media/Kconfig"
source "drivers/video/Kconfig"