aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-03-22 15:02:35 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-03-22 15:02:35 -0800
commitf2c2f130ddbab89249a6ebe2fee0bd6465834771 (patch)
treeb6644c31263bdc7ed0dd3f400e493fc39ee19f4d /driver
parentae96b741d6afe9157982b8b4ccefd66ac21a51de (diff)
downloadpatches-f2c2f130ddbab89249a6ebe2fee0bd6465834771.tar.gz
removed driver patches already in mainline
Diffstat (limited to 'driver')
-rw-r--r--driver/allow-sysfs-attribute-files-to-be-pollable.patch6
-rw-r--r--driver/clean-up-module.c-symbol-searching-logic.patch124
-rw-r--r--driver/debugfs-add-debugfs_create_blob-helper-for-exporting-binary-data.patch108
-rw-r--r--driver/driver-core-add-macros-notice-dev_notice.patch34
-rw-r--r--driver/driver-core-platform_get_irq-return-enxio-on-error.patch38
-rw-r--r--driver/empty_release_functions_are_broken.patch32
-rw-r--r--driver/export_symbol_gpl_future-rcu.patch26
-rw-r--r--driver/export_symbol_gpl_future-usb.patch63
-rw-r--r--driver/export_symbol_gpl_future.patch414
-rw-r--r--driver/firmware-fix-bug-in-fw_realloc_buffer.patch50
-rw-r--r--driver/fix-up-the-sysfs-pollable-patch.patch4
-rw-r--r--driver/get_cpu_sysdev-signedness-fix.patch43
-rw-r--r--driver/handle-errors-returned-by-platform_get_irq.patch305
-rw-r--r--driver/kobj_map-semaphore-to-mutex-conversion.patch350
-rw-r--r--driver/kobject-add-error-notify.patch56
-rw-r--r--driver/kobject-fix-build-error-if-config_sysfs-n.patch44
-rw-r--r--driver/kobject-kobject.h-fix-a-typo.patch29
-rw-r--r--driver/kobject_add_dir.patch80
-rw-r--r--driver/kref-avoid-an-atomic-operation-in-kref_put.patch36
-rw-r--r--driver/module_sysfs_refcount.patch232
-rw-r--r--driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch115
-rw-r--r--driver/sysfs-kzalloc-conversion.patch46
-rw-r--r--driver/sysfs_add_link-kobject-leak-fix.patch27
-rw-r--r--driver/sysfs_remove_dir-needs-to-invalidate-the-dentry.patch51
-rw-r--r--driver/unexport-sysfs-dir.patch27
25 files changed, 5 insertions, 2335 deletions
diff --git a/driver/allow-sysfs-attribute-files-to-be-pollable.patch b/driver/allow-sysfs-attribute-files-to-be-pollable.patch
index 4800c68cfa640..a115dd781a556 100644
--- a/driver/allow-sysfs-attribute-files-to-be-pollable.patch
+++ b/driver/allow-sysfs-attribute-files-to-be-pollable.patch
@@ -86,7 +86,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
count = ops->show(kobj,attr,buffer->page);
buffer->needs_read_fill = 0;
BUG_ON(count > (ssize_t)PAGE_SIZE);
-@@ -349,12 +353,55 @@ static int sysfs_release(struct inode *
+@@ -348,12 +352,55 @@ static int sysfs_release(struct inode *
return 0;
}
@@ -144,7 +144,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- gregkh-2.6.orig/fs/sysfs/inode.c
+++ gregkh-2.6/fs/sysfs/inode.c
-@@ -250,3 +250,24 @@ void sysfs_hash_and_remove(struct dentry
+@@ -249,3 +249,24 @@ void sysfs_hash_and_remove(struct dentry
}
mutex_unlock(&dir->d_inode->i_mutex);
}
@@ -171,7 +171,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+}
--- gregkh-2.6.orig/fs/sysfs/sysfs.h
+++ gregkh-2.6/fs/sysfs/sysfs.h
-@@ -10,6 +10,7 @@ extern int sysfs_make_dirent(struct sysf
+@@ -11,6 +11,7 @@ extern int sysfs_make_dirent(struct sysf
extern int sysfs_add_file(struct dentry *, const struct attribute *, int);
extern void sysfs_hash_and_remove(struct dentry * dir, const char * name);
diff --git a/driver/clean-up-module.c-symbol-searching-logic.patch b/driver/clean-up-module.c-symbol-searching-logic.patch
deleted file mode 100644
index ae2c803328d46..0000000000000
--- a/driver/clean-up-module.c-symbol-searching-logic.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From sam@ravnborg.org Wed Feb 8 14:53:48 2006
-Date: Wed, 8 Feb 2006 21:16:45 +0100
-From: Sam Ravnborg <sam@ravnborg.org>
-To: Greg KH <gregkh@suse.de>
-Subject: Clean up module.c symbol searching logic
-Message-ID: <20060208201645.GA9497@mars.ravnborg.org>
-Content-Disposition: inline
-
-Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- kernel/module.c | 73 +++++++++++++++++++++++++++++++-------------------------
- 1 file changed, 41 insertions(+), 32 deletions(-)
-
---- gregkh-2.6.orig/kernel/module.c
-+++ gregkh-2.6/kernel/module.c
-@@ -135,6 +135,18 @@ extern const unsigned long __start___kcr
- #define symversion(base, idx) ((base) ? ((base) + (idx)) : NULL)
- #endif
-
-+/* lookup symbol in given range of kernel_symbols */
-+static const struct kernel_symbol *lookup_symbol(const char *name,
-+ const struct kernel_symbol *start,
-+ const struct kernel_symbol *stop)
-+{
-+ const struct kernel_symbol *ks = start;
-+ for (; ks < stop; ks++)
-+ if (strcmp(ks->name, name) == 0)
-+ return ks;
-+ return NULL;
-+}
-+
- /* Find a symbol, return value, crc and module which owns it */
- static unsigned long __find_symbol(const char *name,
- struct module **owner,
-@@ -142,39 +154,41 @@ static unsigned long __find_symbol(const
- int gplok)
- {
- struct module *mod;
-- unsigned int i;
-+ const struct kernel_symbol *ks;
-
- /* Core kernel first. */
- *owner = NULL;
-- for (i = 0; __start___ksymtab+i < __stop___ksymtab; i++) {
-- if (strcmp(__start___ksymtab[i].name, name) == 0) {
-- *crc = symversion(__start___kcrctab, i);
-- return __start___ksymtab[i].value;
-- }
-+ ks = lookup_symbol(name, __start___ksymtab, __stop___ksymtab);
-+ if (ks) {
-+ *crc = symversion(__start___kcrctab, (ks - __start___ksymtab));
-+ return ks->value;
- }
- if (gplok) {
-- for (i = 0; __start___ksymtab_gpl+i<__stop___ksymtab_gpl; i++)
-- if (strcmp(__start___ksymtab_gpl[i].name, name) == 0) {
-- *crc = symversion(__start___kcrctab_gpl, i);
-- return __start___ksymtab_gpl[i].value;
-- }
-+ ks = lookup_symbol(name, __start___ksymtab_gpl,
-+ __stop___ksymtab_gpl);
-+ if (ks) {
-+ *crc = symversion(__start___kcrctab_gpl,
-+ (ks - __start___ksymtab_gpl));
-+ return ks->value;
-+ }
- }
-
- /* Now try modules. */
- list_for_each_entry(mod, &modules, list) {
- *owner = mod;
-- for (i = 0; i < mod->num_syms; i++)
-- if (strcmp(mod->syms[i].name, name) == 0) {
-- *crc = symversion(mod->crcs, i);
-- return mod->syms[i].value;
-- }
-+ ks = lookup_symbol(name, mod->syms, mod->syms + mod->num_syms);
-+ if (ks) {
-+ *crc = symversion(mod->crcs, (ks - mod->syms));
-+ return ks->value;
-+ }
-
- if (gplok) {
-- for (i = 0; i < mod->num_gpl_syms; i++) {
-- if (strcmp(mod->gpl_syms[i].name, name) == 0) {
-- *crc = symversion(mod->gpl_crcs, i);
-- return mod->gpl_syms[i].value;
-- }
-+ ks = lookup_symbol(name, mod->gpl_syms,
-+ mod->gpl_syms + mod->num_gpl_syms);
-+ if (ks) {
-+ *crc = symversion(mod->gpl_crcs,
-+ (ks - mod->gpl_syms));
-+ return ks->value;
- }
- }
- }
-@@ -1444,18 +1458,13 @@ static void setup_modinfo(struct module
- #ifdef CONFIG_KALLSYMS
- int is_exported(const char *name, const struct module *mod)
- {
-- unsigned int i;
--
-- if (!mod) {
-- for (i = 0; __start___ksymtab+i < __stop___ksymtab; i++)
-- if (strcmp(__start___ksymtab[i].name, name) == 0)
-- return 1;
-- return 0;
-- }
-- for (i = 0; i < mod->num_syms; i++)
-- if (strcmp(mod->syms[i].name, name) == 0)
-+ if (!mod && lookup_symbol(name, __start___ksymtab, __stop___ksymtab))
-+ return 1;
-+ else
-+ if (lookup_symbol(name, mod->syms, mod->syms + mod->num_syms))
- return 1;
-- return 0;
-+ else
-+ return 0;
- }
-
- /* As per nm */
diff --git a/driver/debugfs-add-debugfs_create_blob-helper-for-exporting-binary-data.patch b/driver/debugfs-add-debugfs_create_blob-helper-for-exporting-binary-data.patch
deleted file mode 100644
index ccd88b9b74e75..0000000000000
--- a/driver/debugfs-add-debugfs_create_blob-helper-for-exporting-binary-data.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From michael@ozlabs.org Tue Mar 7 02:42:37 2006
-To: Greg Kroah-Hartman <greg@kroah.com>
-From: Michael Ellerman <michael@ellerman.id.au>
-Date: Tue, 07 Mar 2006 21:41:59 +1100
-Subject: debugfs: Add debugfs_create_blob() helper for exporting binary data
-Message-Id: <20060307104225.E0DDA679E6@ozlabs.org>
-
-I wanted to export a binary blob via debugfs, and although it was pretty easy
-it seems like it'd be easier if there was a helper for it. It's a pity we need
-the wrapper struct but I can't see a cleaner way to do it.
-
-Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- fs/debugfs/file.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
- include/linux/debugfs.h | 15 +++++++++++++++
- 2 files changed, 61 insertions(+)
-
---- gregkh-2.6.orig/fs/debugfs/file.c
-+++ gregkh-2.6/fs/debugfs/file.c
-@@ -251,3 +251,49 @@ struct dentry *debugfs_create_bool(const
- }
- EXPORT_SYMBOL_GPL(debugfs_create_bool);
-
-+static ssize_t read_file_blob(struct file *file, char __user *user_buf,
-+ size_t count, loff_t *ppos)
-+{
-+ struct debugfs_blob_wrapper *blob = file->private_data;
-+ return simple_read_from_buffer(user_buf, count, ppos, blob->data,
-+ blob->size);
-+}
-+
-+static struct file_operations fops_blob = {
-+ .read = read_file_blob,
-+ .open = default_open,
-+};
-+
-+/**
-+ * debugfs_create_blob - create a file in the debugfs filesystem that is
-+ * used to read and write a binary blob.
-+ *
-+ * @name: a pointer to a string containing the name of the file to create.
-+ * @mode: the permission that the file should have
-+ * @parent: a pointer to the parent dentry for this file. This should be a
-+ * directory dentry if set. If this paramater is NULL, then the
-+ * file will be created in the root of the debugfs filesystem.
-+ * @blob: a pointer to a struct debugfs_blob_wrapper which contains a pointer
-+ * to the blob data and the size of the data.
-+ *
-+ * This function creates a file in debugfs with the given name that exports
-+ * @blob->data as a binary blob. If the @mode variable is so set it can be
-+ * read from. Writing is not supported.
-+ *
-+ * This function will return a pointer to a dentry if it succeeds. This
-+ * pointer must be passed to the debugfs_remove() function when the file is
-+ * to be removed (no automatic cleanup happens if your module is unloaded,
-+ * you are responsible here.) If an error occurs, NULL will be returned.
-+ *
-+ * If debugfs is not enabled in the kernel, the value -ENODEV will be
-+ * returned. It is not wise to check for this value, but rather, check for
-+ * NULL or !NULL instead as to eliminate the need for #ifdef in the calling
-+ * code.
-+ */
-+struct dentry *debugfs_create_blob(const char *name, mode_t mode,
-+ struct dentry *parent,
-+ struct debugfs_blob_wrapper *blob)
-+{
-+ return debugfs_create_file(name, mode, parent, blob, &fops_blob);
-+}
-+EXPORT_SYMBOL_GPL(debugfs_create_blob);
---- gregkh-2.6.orig/include/linux/debugfs.h
-+++ gregkh-2.6/include/linux/debugfs.h
-@@ -21,6 +21,11 @@
-
- struct file_operations;
-
-+struct debugfs_blob_wrapper {
-+ void *data;
-+ unsigned long size;
-+};
-+
- #if defined(CONFIG_DEBUG_FS)
- struct dentry *debugfs_create_file(const char *name, mode_t mode,
- struct dentry *parent, void *data,
-@@ -39,6 +44,9 @@ struct dentry *debugfs_create_u32(const
- struct dentry *debugfs_create_bool(const char *name, mode_t mode,
- struct dentry *parent, u32 *value);
-
-+struct dentry *debugfs_create_blob(const char *name, mode_t mode,
-+ struct dentry *parent,
-+ struct debugfs_blob_wrapper *blob);
- #else
-
- #include <linux/err.h>
-@@ -94,6 +102,13 @@ static inline struct dentry *debugfs_cre
- return ERR_PTR(-ENODEV);
- }
-
-+static inline struct dentry *debugfs_create_blob(const char *name, mode_t mode,
-+ struct dentry *parent,
-+ struct debugfs_blob_wrapper *blob)
-+{
-+ return ERR_PTR(-ENODEV);
-+}
-+
- #endif
-
- #endif
diff --git a/driver/driver-core-add-macros-notice-dev_notice.patch b/driver/driver-core-add-macros-notice-dev_notice.patch
deleted file mode 100644
index 52e9859154b6b..0000000000000
--- a/driver/driver-core-add-macros-notice-dev_notice.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From linux-usb-devel-admin@lists.sourceforge.net Fri Feb 24 02:06:04 2006
-Message-ID: <43FEDA79.3010505@imap.cc>
-From: Tilman Schmidt <tilman@imap.cc>
-Cc: <hjlipp@web.de>
-Subject: Driver core: add macros notice(), dev_notice()
-Date: Fri, 24 Feb 2006 11:05:45 +0100
-
-Both usb.h and device.h have collections of convenience macros for
-printk() with the KERN_ERR, KERN_WARNING, and KERN_NOTICE severity
-levels. This patch adds macros for the KERN_NOTICE level which was
-so far uncatered for.
-
-These macros already exist privately in drivers/isdn/gigaset/gigaset.h
-(currently in the process of being submitted for the kernel tree)
-but they really belong with their brothers and sisters in
-include/linux/{device,usb}.h.
-
-Signed-off-by: Tilman Schmidt <tilman@imap.cc>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- include/linux/device.h | 2 ++
- 1 file changed, 2 insertions(+)
-
---- gregkh-2.6.orig/include/linux/device.h
-+++ gregkh-2.6/include/linux/device.h
-@@ -424,6 +424,8 @@ extern void firmware_unregister(struct s
- dev_printk(KERN_INFO , dev , format , ## arg)
- #define dev_warn(dev, format, arg...) \
- dev_printk(KERN_WARNING , dev , format , ## arg)
-+#define dev_notice(dev, format, arg...) \
-+ dev_printk(KERN_NOTICE , dev , format , ## arg)
-
- /* Create alias, so I can be autoloaded. */
- #define MODULE_ALIAS_CHARDEV(major,minor) \
diff --git a/driver/driver-core-platform_get_irq-return-enxio-on-error.patch b/driver/driver-core-platform_get_irq-return-enxio-on-error.patch
deleted file mode 100644
index c8b7ee744d25e..0000000000000
--- a/driver/driver-core-platform_get_irq-return-enxio-on-error.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From dvrabel@arcom.com Thu Jan 19 09:52:35 2006
-Message-ID: <43CFD1DB.4010900@arcom.com>
-Date: Thu, 19 Jan 2006 17:52:27 +0000
-From: David Vrabel <dvrabel@arcom.com>
-To: Greg KH <gregkh@suse.de>
-Cc: David Vrabel <dvrabel@arcom.com>
-Subject: driver core: platform_get_irq*(): return -ENXIO on error
-
-platform_get_irq*() cannot return 0 on error as 0 is a valid IRQ on some
-platforms, return -ENXIO instead.
-
-Signed-off-by: David Vrabel <dvrabel@arcom.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/base/platform.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/drivers/base/platform.c
-+++ gregkh-2.6/drivers/base/platform.c
-@@ -61,7 +61,7 @@ int platform_get_irq(struct platform_dev
- {
- struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num);
-
-- return r ? r->start : 0;
-+ return r ? r->start : -ENXIO;
- }
- EXPORT_SYMBOL_GPL(platform_get_irq);
-
-@@ -98,7 +98,7 @@ int platform_get_irq_byname(struct platf
- {
- struct resource *r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name);
-
-- return r ? r->start : 0;
-+ return r ? r->start : -ENXIO;
- }
- EXPORT_SYMBOL_GPL(platform_get_irq_byname);
-
diff --git a/driver/empty_release_functions_are_broken.patch b/driver/empty_release_functions_are_broken.patch
deleted file mode 100644
index f22920e529fae..0000000000000
--- a/driver/empty_release_functions_are_broken.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: Mark empty release functions as broken
-
-Come on people, this is just wrong...
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/video/epson1355fb.c | 1 +
- drivers/video/vfb.c | 1 +
- 2 files changed, 2 insertions(+)
-
---- gregkh-2.6.orig/drivers/video/epson1355fb.c
-+++ gregkh-2.6/drivers/video/epson1355fb.c
-@@ -607,6 +607,7 @@ static void clearfb16(struct fb_info *in
-
- static void epson1355fb_platform_release(struct device *device)
- {
-+ dev_err(device, "This driver is broken, please bug the authors so they will fix it.\n");
- }
-
- static int epson1355fb_remove(struct platform_device *dev)
---- gregkh-2.6.orig/drivers/video/vfb.c
-+++ gregkh-2.6/drivers/video/vfb.c
-@@ -401,6 +401,7 @@ static int __init vfb_setup(char *option
- static void vfb_platform_release(struct device *device)
- {
- // This is called when the reference count goes to zero.
-+ dev_err(device, "This driver is broken, please bug the authors so they will fix it.\n");
- }
-
- static int __init vfb_probe(struct platform_device *dev)
diff --git a/driver/export_symbol_gpl_future-rcu.patch b/driver/export_symbol_gpl_future-rcu.patch
deleted file mode 100644
index 23327239e1431..0000000000000
--- a/driver/export_symbol_gpl_future-rcu.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: [PATCH] add EXPORT_SYMBOL_GPL_FUTURE() to RCU subsystem
-
-As the RCU symbols are going to be changed to GPL in the near future,
-lets warn users that this is going to happen.
-
-Cc: Paul McKenney <paulmck@us.ibm.com>
-Acked-by: Dipankar Sarma <dipankar@in.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- kernel/rcupdate.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
---- gregkh-2.6.orig/kernel/rcupdate.c
-+++ gregkh-2.6/kernel/rcupdate.c
-@@ -609,7 +609,7 @@ module_param(qlowmark, int, 0);
- module_param(rsinterval, int, 0);
- #endif
- EXPORT_SYMBOL_GPL(rcu_batches_completed);
--EXPORT_SYMBOL(call_rcu); /* WARNING: GPL-only in April 2006. */
--EXPORT_SYMBOL(call_rcu_bh); /* WARNING: GPL-only in April 2006. */
-+EXPORT_SYMBOL_GPL_FUTURE(call_rcu); /* WARNING: GPL-only in April 2006. */
-+EXPORT_SYMBOL_GPL_FUTURE(call_rcu_bh); /* WARNING: GPL-only in April 2006. */
- EXPORT_SYMBOL_GPL(synchronize_rcu);
--EXPORT_SYMBOL(synchronize_kernel); /* WARNING: GPL-only in April 2006. */
-+EXPORT_SYMBOL_GPL_FUTURE(synchronize_kernel); /* WARNING: GPL-only in April 2006. */
diff --git a/driver/export_symbol_gpl_future-usb.patch b/driver/export_symbol_gpl_future-usb.patch
deleted file mode 100644
index 9fab773509dd3..0000000000000
--- a/driver/export_symbol_gpl_future-usb.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: [PATCH] add EXPORT_SYMBOL_GPL_FUTURE() to USB subsystem
-
-The USB core symbols will be converted to GPL-only in a few years. Mark
-this as such and update the documentation explaining why, and provide a
-pointer for developers to receive help if they need it.
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- Documentation/feature-removal-schedule.txt | 18 ++++++++++++++++++
- drivers/usb/core/driver.c | 6 +++---
- 2 files changed, 21 insertions(+), 3 deletions(-)
-
---- gregkh-2.6.orig/Documentation/feature-removal-schedule.txt
-+++ gregkh-2.6/Documentation/feature-removal-schedule.txt
-@@ -189,3 +189,21 @@ Why: Board specific code doesn't build a
- users have complained indicating there is no more need for these
- boards. This should really be considered a last call.
- Who: Ralf Baechle <ralf@linux-mips.org>
-+
-+---------------------------
-+
-+What: USB driver API moves to EXPORT_SYMBOL_GPL
-+When: Febuary 2008
-+Files: include/linux/usb.h, drivers/usb/core/driver.c
-+Why: The USB subsystem has changed a lot over time, and it has been
-+ possible to create userspace USB drivers using usbfs/libusb/gadgetfs
-+ that operate as fast as the USB bus allows. Because of this, the USB
-+ subsystem will not be allowing closed source kernel drivers to
-+ register with it, after this grace period is over. If anyone needs
-+ any help in converting their closed source drivers over to use the
-+ userspace filesystems, please contact the
-+ linux-usb-devel@lists.sourceforge.net mailing list, and the developers
-+ there will be glad to help you out.
-+Who: Greg Kroah-Hartman <gregkh@suse.de>
-+
-+---------------------------
---- gregkh-2.6.orig/drivers/usb/core/driver.c
-+++ gregkh-2.6/drivers/usb/core/driver.c
-@@ -378,7 +378,7 @@ const struct usb_device_id *usb_match_id
-
- return NULL;
- }
--EXPORT_SYMBOL(usb_match_id);
-+EXPORT_SYMBOL_GPL_FUTURE(usb_match_id);
-
- int usb_device_match(struct device *dev, struct device_driver *drv)
- {
-@@ -446,7 +446,7 @@ int usb_register_driver(struct usb_drive
-
- return retval;
- }
--EXPORT_SYMBOL(usb_register_driver);
-+EXPORT_SYMBOL_GPL_FUTURE(usb_register_driver);
-
- /**
- * usb_deregister - unregister a USB driver
-@@ -469,4 +469,4 @@ void usb_deregister(struct usb_driver *d
-
- usbfs_update_special();
- }
--EXPORT_SYMBOL(usb_deregister);
-+EXPORT_SYMBOL_GPL_FUTURE(usb_deregister);
diff --git a/driver/export_symbol_gpl_future.patch b/driver/export_symbol_gpl_future.patch
deleted file mode 100644
index 62c07b9edd3d3..0000000000000
--- a/driver/export_symbol_gpl_future.patch
+++ /dev/null
@@ -1,414 +0,0 @@
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: [PATCH] add EXPORT_SYMBOL_GPL_FUTURE()
-
-This patch adds the ability to mark symbols that will be changed in the
-future, so that kernel modules that don't include MODULE_LICENSE("GPL")
-and use the symbols, will be flagged and printed out to the system log.
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- arch/m68knommu/kernel/vmlinux.lds.S | 10 +++
- arch/v850/kernel/vmlinux.lds.S | 8 +++
- include/asm-generic/vmlinux.lds.h | 14 +++++
- include/linux/module.h | 9 +++
- kernel/module.c | 49 ++++++++++++++++++-
- scripts/genksyms/keywords.c_shipped | 91 ++++++++++++++++++------------------
- scripts/genksyms/keywords.gperf | 1
- 7 files changed, 135 insertions(+), 47 deletions(-)
-
---- gregkh-2.6.orig/arch/m68knommu/kernel/vmlinux.lds.S
-+++ gregkh-2.6/arch/m68knommu/kernel/vmlinux.lds.S
-@@ -269,6 +269,11 @@ SECTIONS {
- *(__ksymtab_gpl)
- __stop___ksymtab_gpl = .;
-
-+ /* Kernel symbol table: GPL-future symbols */
-+ __start___ksymtab_gpl_future = .;
-+ *(__ksymtab_gpl_future)
-+ __stop___ksymtab_gpl_future = .;
-+
- /* Kernel symbol table: Normal symbols */
- __start___kcrctab = .;
- *(__kcrctab)
-@@ -279,6 +284,11 @@ SECTIONS {
- *(__kcrctab_gpl)
- __stop___kcrctab_gpl = .;
-
-+ /* Kernel symbol table: GPL-future symbols */
-+ __start___kcrctab_gpl_future = .;
-+ *(__kcrctab_gpl_future)
-+ __stop___kcrctab_gpl_future = .;
-+
- /* Kernel symbol table: strings */
- *(__ksymtab_strings)
-
---- gregkh-2.6.orig/arch/v850/kernel/vmlinux.lds.S
-+++ gregkh-2.6/arch/v850/kernel/vmlinux.lds.S
-@@ -64,6 +64,10 @@
- ___start___ksymtab_gpl = .; \
- *(__ksymtab_gpl) \
- ___stop___ksymtab_gpl = .; \
-+ /* Kernel symbol table: GPL-future symbols */ \
-+ ___start___ksymtab_gpl_future = .; \
-+ *(__ksymtab_gpl_future) \
-+ ___stop___ksymtab_gpl_future = .; \
- /* Kernel symbol table: strings */ \
- *(__ksymtab_strings) \
- /* Kernel symbol table: Normal symbols */ \
-@@ -74,6 +78,10 @@
- ___start___kcrctab_gpl = .; \
- *(__kcrctab_gpl) \
- ___stop___kcrctab_gpl = .; \
-+ /* Kernel symbol table: GPL-future symbols */ \
-+ ___start___kcrctab_gpl_future = .; \
-+ *(__kcrctab_gpl_future) \
-+ ___stop___kcrctab_gpl_future = .; \
- /* Built-in module parameters */ \
- . = ALIGN (4) ; \
- ___start___param = .; \
---- gregkh-2.6.orig/include/asm-generic/vmlinux.lds.h
-+++ gregkh-2.6/include/asm-generic/vmlinux.lds.h
-@@ -58,6 +58,13 @@
- VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \
- } \
- \
-+ /* Kernel symbol table: GPL-future-only symbols */ \
-+ __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
-+ VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .; \
-+ *(__ksymtab_gpl_future) \
-+ VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .; \
-+ } \
-+ \
- /* Kernel symbol table: Normal symbols */ \
- __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \
- VMLINUX_SYMBOL(__start___kcrctab) = .; \
-@@ -72,6 +79,13 @@
- VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \
- } \
- \
-+ /* Kernel symbol table: GPL-future-only symbols */ \
-+ __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \
-+ VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .; \
-+ *(__kcrctab_gpl_future) \
-+ VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .; \
-+ } \
-+ \
- /* Kernel symbol table: strings */ \
- __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
- *(__ksymtab_strings) \
---- gregkh-2.6.orig/include/linux/module.h
-+++ gregkh-2.6/include/linux/module.h
-@@ -198,6 +198,9 @@ void *__symbol_get_gpl(const char *symbo
- #define EXPORT_SYMBOL_GPL(sym) \
- __EXPORT_SYMBOL(sym, "_gpl")
-
-+#define EXPORT_SYMBOL_GPL_FUTURE(sym) \
-+ __EXPORT_SYMBOL(sym, "_gpl_future")
-+
- #endif
-
- struct module_ref
-@@ -255,6 +258,11 @@ struct module
- unsigned int num_gpl_syms;
- const unsigned long *gpl_crcs;
-
-+ /* symbols that will be GPL-only in the near future. */
-+ const struct kernel_symbol *gpl_future_syms;
-+ unsigned int num_gpl_future_syms;
-+ const unsigned long *gpl_future_crcs;
-+
- /* Exception table */
- unsigned int num_exentries;
- const struct exception_table_entry *extable;
-@@ -441,6 +449,7 @@ void module_remove_driver(struct device_
- #else /* !CONFIG_MODULES... */
- #define EXPORT_SYMBOL(sym)
- #define EXPORT_SYMBOL_GPL(sym)
-+#define EXPORT_SYMBOL_GPL_FUTURE(sym)
-
- /* Given an address, look for it in the exception tables. */
- static inline const struct exception_table_entry *
---- gregkh-2.6.orig/kernel/module.c
-+++ gregkh-2.6/kernel/module.c
-@@ -126,8 +126,11 @@ extern const struct kernel_symbol __star
- extern const struct kernel_symbol __stop___ksymtab[];
- extern const struct kernel_symbol __start___ksymtab_gpl[];
- extern const struct kernel_symbol __stop___ksymtab_gpl[];
-+extern const struct kernel_symbol __start___ksymtab_gpl_future[];
-+extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
- extern const unsigned long __start___kcrctab[];
- extern const unsigned long __start___kcrctab_gpl[];
-+extern const unsigned long __start___kcrctab_gpl_future[];
-
- #ifndef CONFIG_MODVERSIONS
- #define symversion(base, idx) NULL
-@@ -172,6 +175,22 @@ static unsigned long __find_symbol(const
- return ks->value;
- }
- }
-+ ks = lookup_symbol(name, __start___ksymtab_gpl_future,
-+ __stop___ksymtab_gpl_future);
-+ if (ks) {
-+ if (!gplok) {
-+ printk(KERN_WARNING "Symbol %s is being used "
-+ "by a non-GPL module, which will not "
-+ "be allowed in the future\n", name);
-+ printk(KERN_WARNING "Please see the file "
-+ "Documentation/feature-removal-schedule.txt "
-+ "in the kernel source tree for more "
-+ "details.\n");
-+ }
-+ *crc = symversion(__start___kcrctab_gpl_future,
-+ (ks - __start___ksymtab_gpl_future));
-+ return ks->value;
-+ }
-
- /* Now try modules. */
- list_for_each_entry(mod, &modules, list) {
-@@ -191,6 +210,23 @@ static unsigned long __find_symbol(const
- return ks->value;
- }
- }
-+ ks = lookup_symbol(name, mod->gpl_future_syms,
-+ (mod->gpl_future_syms +
-+ mod->num_gpl_future_syms));
-+ if (ks) {
-+ if (!gplok) {
-+ printk(KERN_WARNING "Symbol %s is being used "
-+ "by a non-GPL module, which will not "
-+ "be allowed in the future\n", name);
-+ printk(KERN_WARNING "Please see the file "
-+ "Documentation/feature-removal-schedule.txt "
-+ "in the kernel source tree for more "
-+ "details.\n");
-+ }
-+ *crc = symversion(mod->gpl_future_crcs,
-+ (ks - mod->gpl_future_syms));
-+ return ks->value;
-+ }
- }
- DEBUGP("Failed to find symbol %s\n", name);
- return 0;
-@@ -1546,7 +1582,8 @@ static struct module *load_module(void _
- char *secstrings, *args, *modmagic, *strtab = NULL;
- unsigned int i, symindex = 0, strindex = 0, setupindex, exindex,
- exportindex, modindex, obsparmindex, infoindex, gplindex,
-- crcindex, gplcrcindex, versindex, pcpuindex;
-+ crcindex, gplcrcindex, versindex, pcpuindex, gplfutureindex,
-+ gplfuturecrcindex;
- long arglen;
- struct module *mod;
- long err = 0;
-@@ -1627,8 +1664,10 @@ static struct module *load_module(void _
- /* Optional sections */
- exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab");
- gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl");
-+ gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future");
- crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab");
- gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl");
-+ gplfuturecrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl_future");
- setupindex = find_sec(hdr, sechdrs, secstrings, "__param");
- exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table");
- obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm");
-@@ -1784,10 +1823,16 @@ static struct module *load_module(void _
- mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr;
- if (gplcrcindex)
- mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr;
-+ mod->num_gpl_future_syms = sechdrs[gplfutureindex].sh_size /
-+ sizeof(*mod->gpl_future_syms);
-+ mod->gpl_future_syms = (void *)sechdrs[gplfutureindex].sh_addr;
-+ if (gplfuturecrcindex)
-+ mod->gpl_future_crcs = (void *)sechdrs[gplfuturecrcindex].sh_addr;
-
- #ifdef CONFIG_MODVERSIONS
- if ((mod->num_syms && !crcindex) ||
-- (mod->num_gpl_syms && !gplcrcindex)) {
-+ (mod->num_gpl_syms && !gplcrcindex) ||
-+ (mod->num_gpl_future_syms && !gplfuturecrcindex)) {
- printk(KERN_WARNING "%s: No versions for exported symbols."
- " Tainting kernel.\n", mod->name);
- add_taint(TAINT_FORCED_MODULE);
---- gregkh-2.6.orig/scripts/genksyms/keywords.c_shipped
-+++ gregkh-2.6/scripts/genksyms/keywords.c_shipped
-@@ -52,9 +52,9 @@ is_reserved_hash (register const char *s
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-- 71, 71, 71, 71, 71, 71, 71, 71, 71, 15,
-- 71, 71, 71, 71, 71, 71, 15, 71, 71, 71,
-- 10, 71, 71, 71, 71, 71, 71, 71, 71, 71,
-+ 71, 71, 71, 71, 71, 71, 71, 71, 71, 0,
-+ 71, 71, 71, 71, 71, 71, 35, 71, 71, 71,
-+ 5, 71, 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 0, 71, 0, 71, 5,
- 5, 0, 10, 20, 71, 25, 71, 71, 20, 0,
- 20, 30, 25, 71, 10, 5, 0, 20, 15, 71,
-@@ -84,9 +84,9 @@ is_reserved_word (register const char *s
- {
- enum
- {
-- TOTAL_KEYWORDS = 41,
-+ TOTAL_KEYWORDS = 42,
- MIN_WORD_LENGTH = 3,
-- MAX_WORD_LENGTH = 17,
-+ MAX_WORD_LENGTH = 24,
- MIN_HASH_VALUE = 3,
- MAX_HASH_VALUE = 70
- };
-@@ -94,104 +94,105 @@ is_reserved_word (register const char *s
- static const struct resword wordlist[] =
- {
- {""}, {""}, {""},
--#line 24 "scripts/genksyms/keywords.gperf"
-+#line 25 "scripts/genksyms/keywords.gperf"
- {"asm", ASM_KEYW},
- {""},
--#line 7 "scripts/genksyms/keywords.gperf"
-+#line 8 "scripts/genksyms/keywords.gperf"
- {"__asm", ASM_KEYW},
- {""},
--#line 8 "scripts/genksyms/keywords.gperf"
-+#line 9 "scripts/genksyms/keywords.gperf"
- {"__asm__", ASM_KEYW},
- {""},
--#line 21 "scripts/genksyms/keywords.gperf"
-+#line 22 "scripts/genksyms/keywords.gperf"
- {"_restrict", RESTRICT_KEYW},
--#line 50 "scripts/genksyms/keywords.gperf"
-+#line 51 "scripts/genksyms/keywords.gperf"
- {"__typeof__", TYPEOF_KEYW},
--#line 9 "scripts/genksyms/keywords.gperf"
-+#line 10 "scripts/genksyms/keywords.gperf"
- {"__attribute", ATTRIBUTE_KEYW},
--#line 11 "scripts/genksyms/keywords.gperf"
-+#line 12 "scripts/genksyms/keywords.gperf"
- {"__const", CONST_KEYW},
--#line 10 "scripts/genksyms/keywords.gperf"
-+#line 11 "scripts/genksyms/keywords.gperf"
- {"__attribute__", ATTRIBUTE_KEYW},
--#line 12 "scripts/genksyms/keywords.gperf"
-+#line 13 "scripts/genksyms/keywords.gperf"
- {"__const__", CONST_KEYW},
--#line 16 "scripts/genksyms/keywords.gperf"
-+#line 17 "scripts/genksyms/keywords.gperf"
- {"__signed__", SIGNED_KEYW},
--#line 42 "scripts/genksyms/keywords.gperf"
-+#line 43 "scripts/genksyms/keywords.gperf"
- {"static", STATIC_KEYW},
- {""},
--#line 15 "scripts/genksyms/keywords.gperf"
-+#line 16 "scripts/genksyms/keywords.gperf"
- {"__signed", SIGNED_KEYW},
--#line 30 "scripts/genksyms/keywords.gperf"
-+#line 31 "scripts/genksyms/keywords.gperf"
- {"char", CHAR_KEYW},
- {""},
--#line 43 "scripts/genksyms/keywords.gperf"
-+#line 44 "scripts/genksyms/keywords.gperf"
- {"struct", STRUCT_KEYW},
--#line 22 "scripts/genksyms/keywords.gperf"
-- {"__restrict__", RESTRICT_KEYW},
- #line 23 "scripts/genksyms/keywords.gperf"
-+ {"__restrict__", RESTRICT_KEYW},
-+#line 24 "scripts/genksyms/keywords.gperf"
- {"restrict", RESTRICT_KEYW},
--#line 33 "scripts/genksyms/keywords.gperf"
-+#line 34 "scripts/genksyms/keywords.gperf"
- {"enum", ENUM_KEYW},
--#line 17 "scripts/genksyms/keywords.gperf"
-+#line 18 "scripts/genksyms/keywords.gperf"
- {"__volatile", VOLATILE_KEYW},
--#line 34 "scripts/genksyms/keywords.gperf"
-+#line 35 "scripts/genksyms/keywords.gperf"
- {"extern", EXTERN_KEYW},
--#line 18 "scripts/genksyms/keywords.gperf"
-+#line 19 "scripts/genksyms/keywords.gperf"
- {"__volatile__", VOLATILE_KEYW},
--#line 37 "scripts/genksyms/keywords.gperf"
-+#line 38 "scripts/genksyms/keywords.gperf"
- {"int", INT_KEYW},
-- {""},
--#line 31 "scripts/genksyms/keywords.gperf"
-- {"const", CONST_KEYW},
-+#line 7 "scripts/genksyms/keywords.gperf"
-+ {"EXPORT_SYMBOL_GPL_FUTURE", EXPORT_SYMBOL_KEYW},
- #line 32 "scripts/genksyms/keywords.gperf"
-+ {"const", CONST_KEYW},
-+#line 33 "scripts/genksyms/keywords.gperf"
- {"double", DOUBLE_KEYW},
- {""},
--#line 13 "scripts/genksyms/keywords.gperf"
-+#line 14 "scripts/genksyms/keywords.gperf"
- {"__inline", INLINE_KEYW},
--#line 29 "scripts/genksyms/keywords.gperf"
-+#line 30 "scripts/genksyms/keywords.gperf"
- {"auto", AUTO_KEYW},
--#line 14 "scripts/genksyms/keywords.gperf"
-+#line 15 "scripts/genksyms/keywords.gperf"
- {"__inline__", INLINE_KEYW},
--#line 41 "scripts/genksyms/keywords.gperf"
-+#line 42 "scripts/genksyms/keywords.gperf"
- {"signed", SIGNED_KEYW},
- {""},
--#line 46 "scripts/genksyms/keywords.gperf"
-+#line 47 "scripts/genksyms/keywords.gperf"
- {"unsigned", UNSIGNED_KEYW},
- {""},
--#line 40 "scripts/genksyms/keywords.gperf"
-+#line 41 "scripts/genksyms/keywords.gperf"
- {"short", SHORT_KEYW},
--#line 49 "scripts/genksyms/keywords.gperf"
-+#line 50 "scripts/genksyms/keywords.gperf"
- {"typeof", TYPEOF_KEYW},
--#line 44 "scripts/genksyms/keywords.gperf"
-+#line 45 "scripts/genksyms/keywords.gperf"
- {"typedef", TYPEDEF_KEYW},
--#line 48 "scripts/genksyms/keywords.gperf"
-+#line 49 "scripts/genksyms/keywords.gperf"
- {"volatile", VOLATILE_KEYW},
- {""},
--#line 35 "scripts/genksyms/keywords.gperf"
-+#line 36 "scripts/genksyms/keywords.gperf"
- {"float", FLOAT_KEYW},
- {""}, {""},
--#line 39 "scripts/genksyms/keywords.gperf"
-+#line 40 "scripts/genksyms/keywords.gperf"
- {"register", REGISTER_KEYW},
--#line 47 "scripts/genksyms/keywords.gperf"
-+#line 48 "scripts/genksyms/keywords.gperf"
- {"void", VOID_KEYW},
- {""},
--#line 36 "scripts/genksyms/keywords.gperf"
-+#line 37 "scripts/genksyms/keywords.gperf"
- {"inline", INLINE_KEYW},
- {""},
- #line 5 "scripts/genksyms/keywords.gperf"
- {"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
- {""},
--#line 20 "scripts/genksyms/keywords.gperf"
-+#line 21 "scripts/genksyms/keywords.gperf"
- {"_Bool", BOOL_KEYW},
- {""},
- #line 6 "scripts/genksyms/keywords.gperf"
- {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
- {""}, {""}, {""}, {""}, {""}, {""},
--#line 38 "scripts/genksyms/keywords.gperf"
-+#line 39 "scripts/genksyms/keywords.gperf"
- {"long", LONG_KEYW},
- {""}, {""}, {""}, {""}, {""},
--#line 45 "scripts/genksyms/keywords.gperf"
-+#line 46 "scripts/genksyms/keywords.gperf"
- {"union", UNION_KEYW}
- };
-
---- gregkh-2.6.orig/scripts/genksyms/keywords.gperf
-+++ gregkh-2.6/scripts/genksyms/keywords.gperf
-@@ -4,6 +4,7 @@ struct resword { const char *name; int t
- %%
- EXPORT_SYMBOL, EXPORT_SYMBOL_KEYW
- EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_KEYW
-+EXPORT_SYMBOL_GPL_FUTURE, EXPORT_SYMBOL_KEYW
- __asm, ASM_KEYW
- __asm__, ASM_KEYW
- __attribute, ATTRIBUTE_KEYW
diff --git a/driver/firmware-fix-bug-in-fw_realloc_buffer.patch b/driver/firmware-fix-bug-in-fw_realloc_buffer.patch
deleted file mode 100644
index aaecc69d9369f..0000000000000
--- a/driver/firmware-fix-bug-in-fw_realloc_buffer.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From akpm@osdl.org Mon Feb 13 14:53:31 2006
-Message-Id: <200602132253.k1DMrUXe010880@shell0.pdx.osdl.net>
-Subject: firmware: fix BUG: in fw_realloc_buffer
-To: jmoyer@redhat.com, greg@kroah.com, mm-commits@vger.kernel.org
-From: akpm@osdl.org
-Date: Mon, 13 Feb 2006 14:52:38 -0800
-
-From: Jeff Moyer <jmoyer@redhat.com>
-
-The fw_realloc_buffer routine does not handle an increase in buffer size of
-more than 4k. It's not clear to me why it expects that it will only get an
-extra 4k of data. The attached patch modifies fw_realloc_buffer to vmalloc
-as much memory as is requested, instead of what we previously had + 4k.
-
-I've tested this on my laptop, which would crash occaisionally on boot
-without the patch. With the patch, it hasn't crashed, but I can't be
-certain that this code path is exercised.
-
-Signed-off-by: Jeff Moyer <jmoyer@redhat.com>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- drivers/base/firmware_class.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/drivers/base/firmware_class.c
-+++ gregkh-2.6/drivers/base/firmware_class.c
-@@ -211,18 +211,20 @@ static int
- fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
- {
- u8 *new_data;
-+ int new_size = fw_priv->alloc_size;
-
- if (min_size <= fw_priv->alloc_size)
- return 0;
-
-- new_data = vmalloc(fw_priv->alloc_size + PAGE_SIZE);
-+ new_size = ALIGN(min_size, PAGE_SIZE);
-+ new_data = vmalloc(new_size);
- if (!new_data) {
- printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
- /* Make sure that we don't keep incomplete data */
- fw_load_abort(fw_priv);
- return -ENOMEM;
- }
-- fw_priv->alloc_size += PAGE_SIZE;
-+ fw_priv->alloc_size = new_size;
- if (fw_priv->fw->data) {
- memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
- vfree(fw_priv->fw->data);
diff --git a/driver/fix-up-the-sysfs-pollable-patch.patch b/driver/fix-up-the-sysfs-pollable-patch.patch
index 17230e1d1de66..deb664120d891 100644
--- a/driver/fix-up-the-sysfs-pollable-patch.patch
+++ b/driver/fix-up-the-sysfs-pollable-patch.patch
@@ -34,7 +34,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- gregkh-2.6.orig/fs/sysfs/file.c
+++ gregkh-2.6/fs/sysfs/file.c
-@@ -375,22 +375,50 @@ static unsigned int sysfs_poll(struct fi
+@@ -374,22 +374,50 @@ static unsigned int sysfs_poll(struct fi
poll_wait(filp, &kobj->poll, wait);
@@ -95,7 +95,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
EXPORT_SYMBOL_GPL(sysfs_notify);
--- gregkh-2.6.orig/fs/sysfs/inode.c
+++ gregkh-2.6/fs/sysfs/inode.c
-@@ -250,24 +250,3 @@ void sysfs_hash_and_remove(struct dentry
+@@ -249,24 +249,3 @@ void sysfs_hash_and_remove(struct dentry
}
mutex_unlock(&dir->d_inode->i_mutex);
}
diff --git a/driver/get_cpu_sysdev-signedness-fix.patch b/driver/get_cpu_sysdev-signedness-fix.patch
deleted file mode 100644
index f997163e016e8..0000000000000
--- a/driver/get_cpu_sysdev-signedness-fix.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From akpm@osdl.org Tue Mar 7 23:55:21 2006
-Message-Id: <200603080755.k287tEKn001163@shell0.pdx.osdl.net>
-From: Andrew Morton <akpm@osdl.org>
-Subject: get_cpu_sysdev() signedness fix
-To: greg@kroah.com
-Cc: akpm@osdl.org
-Date: Tue, 07 Mar 2006 23:53:25 -0800
-
-
-From: Andrew Morton <akpm@osdl.org>
-
-Doing (int < NR_CPUS) doesn't dtrt if it's negative..
-
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
-
- drivers/base/cpu.c | 2 +-
- include/linux/cpu.h | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
---- gregkh-2.6.orig/drivers/base/cpu.c
-+++ gregkh-2.6/drivers/base/cpu.c
-@@ -141,7 +141,7 @@ int __devinit register_cpu(struct cpu *c
- return error;
- }
-
--struct sys_device *get_cpu_sysdev(int cpu)
-+struct sys_device *get_cpu_sysdev(unsigned cpu)
- {
- if (cpu < NR_CPUS)
- return cpu_sys_devices[cpu];
---- gregkh-2.6.orig/include/linux/cpu.h
-+++ gregkh-2.6/include/linux/cpu.h
-@@ -32,7 +32,7 @@ struct cpu {
- };
-
- extern int register_cpu(struct cpu *, int, struct node *);
--extern struct sys_device *get_cpu_sysdev(int cpu);
-+extern struct sys_device *get_cpu_sysdev(unsigned cpu);
- #ifdef CONFIG_HOTPLUG_CPU
- extern void unregister_cpu(struct cpu *, struct node *);
- #endif
diff --git a/driver/handle-errors-returned-by-platform_get_irq.patch b/driver/handle-errors-returned-by-platform_get_irq.patch
deleted file mode 100644
index 8a680cc3a4cf2..0000000000000
--- a/driver/handle-errors-returned-by-platform_get_irq.patch
+++ /dev/null
@@ -1,305 +0,0 @@
-From dvrabel@arcom.com Thu Jan 19 09:57:38 2006
-Message-ID: <43CFD2CD.8090803@arcom.com>
-Date: Thu, 19 Jan 2006 17:56:29 +0000
-From: David Vrabel <dvrabel@arcom.com>
-To: Greg KH <gregkh@suse.de>
-Subject: handle errors returned by platform_get_irq*()
-
-platform_get_irq*() now returns on -ENXIO when the resource cannot be
-found. Ensure all users of platform_get_irq*() handle this error
-appropriately.
-
-Signed-off-by: David Vrabel <dvrabel@arcom.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- arch/arm/common/locomo.c | 2 ++
- arch/arm/common/sa1111.c | 2 ++
- drivers/char/s3c2410-rtc.c | 4 ++--
- drivers/char/watchdog/mpcore_wdt.c | 4 ++++
- drivers/i2c/busses/i2c-iop3xx.c | 9 +++++++--
- drivers/i2c/busses/i2c-mpc.c | 5 +++++
- drivers/i2c/busses/i2c-mv64xxx.c | 4 ++++
- drivers/ide/mips/au1xxx-ide.c | 5 +++++
- drivers/mmc/pxamci.c | 2 +-
- drivers/net/arm/am79c961a.c | 4 +++-
- drivers/net/fs_enet/mac-fcc.c | 2 ++
- drivers/net/fs_enet/mac-fec.c | 2 ++
- drivers/net/fs_enet/mac-scc.c | 2 ++
- drivers/net/gianfar.c | 4 ++++
- drivers/net/smc91x.c | 4 ++++
- drivers/pcmcia/omap_cf.c | 2 +-
- drivers/serial/s3c2410.c | 2 ++
- drivers/usb/host/ohci-omap.c | 9 +++++++--
- drivers/video/sa1100fb.c | 2 +-
- 19 files changed, 60 insertions(+), 10 deletions(-)
-
---- gregkh-2.6.orig/arch/arm/common/locomo.c
-+++ gregkh-2.6/arch/arm/common/locomo.c
-@@ -767,6 +767,8 @@ static int locomo_probe(struct platform_
- if (!mem)
- return -EINVAL;
- irq = platform_get_irq(dev, 0);
-+ if (irq < 0)
-+ return -ENXIO;
-
- return __locomo_probe(&dev->dev, mem, irq);
- }
---- gregkh-2.6.orig/arch/arm/common/sa1111.c
-+++ gregkh-2.6/arch/arm/common/sa1111.c
-@@ -943,6 +943,8 @@ static int sa1111_probe(struct platform_
- if (!mem)
- return -EINVAL;
- irq = platform_get_irq(pdev, 0);
-+ if (irq < 0)
-+ return -ENXIO;
-
- return __sa1111_probe(&pdev->dev, mem, irq);
- }
---- gregkh-2.6.orig/drivers/char/s3c2410-rtc.c
-+++ gregkh-2.6/drivers/char/s3c2410-rtc.c
-@@ -448,13 +448,13 @@ static int s3c2410_rtc_probe(struct plat
- /* find the IRQs */
-
- s3c2410_rtc_tickno = platform_get_irq(pdev, 1);
-- if (s3c2410_rtc_tickno <= 0) {
-+ if (s3c2410_rtc_tickno < 0) {
- dev_err(&pdev->dev, "no irq for rtc tick\n");
- return -ENOENT;
- }
-
- s3c2410_rtc_alarmno = platform_get_irq(pdev, 0);
-- if (s3c2410_rtc_alarmno <= 0) {
-+ if (s3c2410_rtc_alarmno < 0) {
- dev_err(&pdev->dev, "no irq for alarm\n");
- return -ENOENT;
- }
---- gregkh-2.6.orig/drivers/char/watchdog/mpcore_wdt.c
-+++ gregkh-2.6/drivers/char/watchdog/mpcore_wdt.c
-@@ -338,6 +338,10 @@ static int __devinit mpcore_wdt_probe(st
-
- wdt->dev = &dev->dev;
- wdt->irq = platform_get_irq(dev, 0);
-+ if (wdt->irq < 0) {
-+ ret = -ENXIO;
-+ goto err_free;
-+ }
- wdt->base = ioremap(res->start, res->end - res->start + 1);
- if (!wdt->base) {
- ret = -ENOMEM;
---- gregkh-2.6.orig/drivers/i2c/busses/i2c-iop3xx.c
-+++ gregkh-2.6/drivers/i2c/busses/i2c-iop3xx.c
-@@ -434,7 +434,7 @@ static int
- iop3xx_i2c_probe(struct platform_device *pdev)
- {
- struct resource *res;
-- int ret;
-+ int ret, irq;
- struct i2c_adapter *new_adapter;
- struct i2c_algo_iop3xx_data *adapter_data;
-
-@@ -470,7 +470,12 @@ iop3xx_i2c_probe(struct platform_device
- goto release_region;
- }
-
-- ret = request_irq(platform_get_irq(pdev, 0), iop3xx_i2c_irq_handler, 0,
-+ irq = platform_get_irq(pdev, 0);
-+ if (irq < 0) {
-+ ret = -ENXIO;
-+ goto unmap;
-+ }
-+ ret = request_irq(irq, iop3xx_i2c_irq_handler, 0,
- pdev->name, adapter_data);
-
- if (ret) {
---- gregkh-2.6.orig/drivers/i2c/busses/i2c-mpc.c
-+++ gregkh-2.6/drivers/i2c/busses/i2c-mpc.c
-@@ -302,6 +302,10 @@ static int fsl_i2c_probe(struct platform
- }
-
- i2c->irq = platform_get_irq(pdev, 0);
-+ if (i2c->irq < 0) {
-+ result = -ENXIO;
-+ goto fail_get_irq;
-+ }
- i2c->flags = pdata->device_flags;
- init_waitqueue_head(&i2c->queue);
-
-@@ -340,6 +344,7 @@ static int fsl_i2c_probe(struct platform
- fail_irq:
- iounmap(i2c->base);
- fail_map:
-+ fail_get_irq:
- kfree(i2c);
- return result;
- };
---- gregkh-2.6.orig/drivers/i2c/busses/i2c-mv64xxx.c
-+++ gregkh-2.6/drivers/i2c/busses/i2c-mv64xxx.c
-@@ -516,6 +516,10 @@ mv64xxx_i2c_probe(struct platform_device
- drv_data->freq_m = pdata->freq_m;
- drv_data->freq_n = pdata->freq_n;
- drv_data->irq = platform_get_irq(pd, 0);
-+ if (drv_data->irq < 0) {
-+ rc = -ENXIO;
-+ goto exit_unmap_regs;
-+ }
- drv_data->adapter.id = I2C_HW_MV64XXX;
- drv_data->adapter.algo = &mv64xxx_i2c_algo;
- drv_data->adapter.owner = THIS_MODULE;
---- gregkh-2.6.orig/drivers/ide/mips/au1xxx-ide.c
-+++ gregkh-2.6/drivers/ide/mips/au1xxx-ide.c
-@@ -674,6 +674,11 @@ static int au_ide_probe(struct device *d
- ret = -ENODEV;
- goto out;
- }
-+ if (ahwif->irq < 0) {
-+ pr_debug("%s %d: no IRQ\n", DRV_NAME, pdev->id);
-+ ret = -ENODEV;
-+ goto out;
-+ }
-
- if (!request_mem_region (res->start, res->end-res->start, pdev->name)) {
- pr_debug("%s: request_mem_region failed\n", DRV_NAME);
---- gregkh-2.6.orig/drivers/mmc/pxamci.c
-+++ gregkh-2.6/drivers/mmc/pxamci.c
-@@ -438,7 +438,7 @@ static int pxamci_probe(struct platform_
-
- r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- irq = platform_get_irq(pdev, 0);
-- if (!r || irq == NO_IRQ)
-+ if (!r || irq < 0)
- return -ENXIO;
-
- r = request_mem_region(r->start, SZ_4K, DRIVER_NAME);
---- gregkh-2.6.orig/drivers/net/arm/am79c961a.c
-+++ gregkh-2.6/drivers/net/arm/am79c961a.c
-@@ -696,7 +696,9 @@ static int __init am79c961_probe(struct
- dev->base_addr = res->start;
- dev->irq = platform_get_irq(pdev, 0);
-
-- ret = -ENODEV;
-+ ret = -ENODEV;
-+ if (dev->irq < 0)
-+ goto nodev;
- if (!request_region(dev->base_addr, 0x18, dev->name))
- goto nodev;
-
---- gregkh-2.6.orig/drivers/net/fs_enet/mac-fcc.c
-+++ gregkh-2.6/drivers/net/fs_enet/mac-fcc.c
-@@ -118,6 +118,8 @@ static int do_pd_setup(struct fs_enet_pr
-
- /* Fill out IRQ field */
- fep->interrupt = platform_get_irq(pdev, 0);
-+ if (fep->interrupt < 0)
-+ return -EINVAL;
-
- /* Attach the memory for the FCC Parameter RAM */
- r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "fcc_pram");
---- gregkh-2.6.orig/drivers/net/fs_enet/mac-fec.c
-+++ gregkh-2.6/drivers/net/fs_enet/mac-fec.c
-@@ -144,6 +144,8 @@ static int do_pd_setup(struct fs_enet_pr
-
- /* Fill out IRQ field */
- fep->interrupt = platform_get_irq_byname(pdev,"interrupt");
-+ if (fep->interrupt < 0)
-+ return -EINVAL;
-
- r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs");
- fep->fec.fecp =(void*)r->start;
---- gregkh-2.6.orig/drivers/net/fs_enet/mac-scc.c
-+++ gregkh-2.6/drivers/net/fs_enet/mac-scc.c
-@@ -118,6 +118,8 @@ static int do_pd_setup(struct fs_enet_pr
-
- /* Fill out IRQ field */
- fep->interrupt = platform_get_irq_byname(pdev, "interrupt");
-+ if (fep->interrupt < 0)
-+ return -EINVAL;
-
- r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "regs");
- fep->scc.sccp = (void *)r->start;
---- gregkh-2.6.orig/drivers/net/gianfar.c
-+++ gregkh-2.6/drivers/net/gianfar.c
-@@ -193,8 +193,12 @@ static int gfar_probe(struct platform_de
- priv->interruptTransmit = platform_get_irq_byname(pdev, "tx");
- priv->interruptReceive = platform_get_irq_byname(pdev, "rx");
- priv->interruptError = platform_get_irq_byname(pdev, "error");
-+ if (priv->interruptTransmit < 0 || priv->interruptReceive < 0 || priv->interruptError < 0)
-+ goto regs_fail;
- } else {
- priv->interruptTransmit = platform_get_irq(pdev, 0);
-+ if (priv->interruptTransmit < 0)
-+ goto regs_fail;
- }
-
- /* get a pointer to the register memory */
---- gregkh-2.6.orig/drivers/net/smc91x.c
-+++ gregkh-2.6/drivers/net/smc91x.c
-@@ -2221,6 +2221,10 @@ static int smc_drv_probe(struct platform
-
- ndev->dma = (unsigned char)-1;
- ndev->irq = platform_get_irq(pdev, 0);
-+ if (ndev->irq < 0) {
-+ ret = -ENODEV;
-+ goto out_free_netdev;
-+ }
-
- ret = smc_request_attrib(pdev);
- if (ret)
---- gregkh-2.6.orig/drivers/pcmcia/omap_cf.c
-+++ gregkh-2.6/drivers/pcmcia/omap_cf.c
-@@ -218,7 +218,7 @@ static int __init omap_cf_probe(struct d
-
- /* either CFLASH.IREQ (INT_1610_CF) or some GPIO */
- irq = platform_get_irq(pdev, 0);
-- if (!irq)
-+ if (irq < 0)
- return -EINVAL;
-
- cf = kcalloc(1, sizeof *cf, GFP_KERNEL);
---- gregkh-2.6.orig/drivers/serial/s3c2410.c
-+++ gregkh-2.6/drivers/serial/s3c2410.c
-@@ -1066,6 +1066,8 @@ static int s3c24xx_serial_init_port(stru
- port->mapbase = res->start;
- port->membase = S3C24XX_VA_UART + (res->start - S3C24XX_PA_UART);
- port->irq = platform_get_irq(platdev, 0);
-+ if (port->irq < 0)
-+ port->irq = 0;
-
- ourport->clk = clk_get(&platdev->dev, "uart");
-
---- gregkh-2.6.orig/drivers/usb/host/ohci-omap.c
-+++ gregkh-2.6/drivers/usb/host/ohci-omap.c
-@@ -286,7 +286,7 @@ void usb_hcd_omap_remove (struct usb_hcd
- int usb_hcd_omap_probe (const struct hc_driver *driver,
- struct platform_device *pdev)
- {
-- int retval;
-+ int retval, irq;
- struct usb_hcd *hcd = 0;
- struct ohci_hcd *ohci;
-
-@@ -329,7 +329,12 @@ int usb_hcd_omap_probe (const struct hc_
- if (retval < 0)
- goto err2;
-
-- retval = usb_add_hcd(hcd, platform_get_irq(pdev, 0), SA_INTERRUPT);
-+ irq = platform_get_irq(pdev, 0);
-+ if (irq < 0) {
-+ retval = -ENXIO;
-+ goto err2;
-+ }
-+ retval = usb_add_hcd(hcd, irq, SA_INTERRUPT);
- if (retval == 0)
- return retval;
-
---- gregkh-2.6.orig/drivers/video/sa1100fb.c
-+++ gregkh-2.6/drivers/video/sa1100fb.c
-@@ -1457,7 +1457,7 @@ static int __init sa1100fb_probe(struct
- int ret, irq;
-
- irq = platform_get_irq(pdev, 0);
-- if (irq <= 0)
-+ if (irq < 0)
- return -EINVAL;
-
- if (!request_mem_region(0xb0100000, 0x10000, "LCD"))
diff --git a/driver/kobj_map-semaphore-to-mutex-conversion.patch b/driver/kobj_map-semaphore-to-mutex-conversion.patch
deleted file mode 100644
index 57ca5056167c8..0000000000000
--- a/driver/kobj_map-semaphore-to-mutex-conversion.patch
+++ /dev/null
@@ -1,350 +0,0 @@
-From akpm@osdl.org Mon Feb 6 14:10:39 2006
-Message-Id: <200602062210.k16MAa5X031577@shell0.pdx.osdl.net>
-Subject: kobj_map semaphore to mutex conversion
-To: jes@sgi.com, greg@kroah.com, mm-commits@vger.kernel.org
-From: akpm@osdl.org
-Date: Mon, 6 Feb 2006 14:12:43 -0800
-
-From: Jes Sorensen <jes@sgi.com>
-
-Convert the kobj_map code to use a mutex instead of a semaphore. It
-converts the single two users as well, genhd.c and char_dev.c.
-
-Signed-off-by: Jes Sorensen <jes@sgi.com>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- block/genhd.c | 31 ++++++++++++++++---------------
- drivers/base/map.c | 21 +++++++++++----------
- fs/char_dev.c | 17 +++++++++--------
- include/linux/kobj_map.h | 4 ++--
- 4 files changed, 38 insertions(+), 35 deletions(-)
-
---- gregkh-2.6.orig/block/genhd.c
-+++ gregkh-2.6/block/genhd.c
-@@ -15,12 +15,13 @@
- #include <linux/kmod.h>
- #include <linux/kobj_map.h>
- #include <linux/buffer_head.h>
-+#include <linux/mutex.h>
-
- #define MAX_PROBE_HASH 255 /* random */
-
- static struct subsystem block_subsys;
-
--static DECLARE_MUTEX(block_subsys_sem);
-+static DEFINE_MUTEX(block_subsys_lock);
-
- /*
- * Can be deleted altogether. Later.
-@@ -46,7 +47,7 @@ struct blkdev_info {
- /*
- * iterate over a list of blkdev_info structures. allows
- * the major_names array to be iterated over from outside this file
-- * must be called with the block_subsys_sem held
-+ * must be called with the block_subsys_lock held
- */
- void *get_next_blkdev(void *dev)
- {
-@@ -85,20 +86,20 @@ out:
-
- void *acquire_blkdev_list(void)
- {
-- down(&block_subsys_sem);
-+ mutex_lock(&block_subsys_lock);
- return get_next_blkdev(NULL);
- }
-
- void release_blkdev_list(void *dev)
- {
-- up(&block_subsys_sem);
-+ mutex_unlock(&block_subsys_lock);
- kfree(dev);
- }
-
-
- /*
- * Count the number of records in the blkdev_list.
-- * must be called with the block_subsys_sem held
-+ * must be called with the block_subsys_lock held
- */
- int count_blkdev_list(void)
- {
-@@ -118,7 +119,7 @@ int count_blkdev_list(void)
- /*
- * extract the major and name values from a blkdev_info struct
- * passed in as a void to *dev. Must be called with
-- * block_subsys_sem held
-+ * block_subsys_lock held
- */
- int get_blkdev_info(void *dev, int *major, char **name)
- {
-@@ -138,7 +139,7 @@ int register_blkdev(unsigned int major,
- struct blk_major_name **n, *p;
- int index, ret = 0;
-
-- down(&block_subsys_sem);
-+ mutex_lock(&block_subsys_lock);
-
- /* temporary */
- if (major == 0) {
-@@ -183,7 +184,7 @@ int register_blkdev(unsigned int major,
- kfree(p);
- }
- out:
-- up(&block_subsys_sem);
-+ mutex_unlock(&block_subsys_lock);
- return ret;
- }
-
-@@ -197,7 +198,7 @@ int unregister_blkdev(unsigned int major
- int index = major_to_index(major);
- int ret = 0;
-
-- down(&block_subsys_sem);
-+ mutex_lock(&block_subsys_lock);
- for (n = &major_names[index]; *n; n = &(*n)->next)
- if ((*n)->major == major)
- break;
-@@ -207,7 +208,7 @@ int unregister_blkdev(unsigned int major
- p = *n;
- *n = p->next;
- }
-- up(&block_subsys_sem);
-+ mutex_unlock(&block_subsys_lock);
- kfree(p);
-
- return ret;
-@@ -301,7 +302,7 @@ static void *part_start(struct seq_file
- struct list_head *p;
- loff_t l = *pos;
-
-- down(&block_subsys_sem);
-+ mutex_lock(&block_subsys_lock);
- list_for_each(p, &block_subsys.kset.list)
- if (!l--)
- return list_entry(p, struct gendisk, kobj.entry);
-@@ -318,7 +319,7 @@ static void *part_next(struct seq_file *
-
- static void part_stop(struct seq_file *part, void *v)
- {
-- up(&block_subsys_sem);
-+ mutex_unlock(&block_subsys_lock);
- }
-
- static int show_partition(struct seq_file *part, void *v)
-@@ -377,7 +378,7 @@ static struct kobject *base_probe(dev_t
-
- static int __init genhd_device_init(void)
- {
-- bdev_map = kobj_map_init(base_probe, &block_subsys_sem);
-+ bdev_map = kobj_map_init(base_probe, &block_subsys_lock);
- blk_dev_init();
- subsystem_register(&block_subsys);
- return 0;
-@@ -611,7 +612,7 @@ static void *diskstats_start(struct seq_
- loff_t k = *pos;
- struct list_head *p;
-
-- down(&block_subsys_sem);
-+ mutex_lock(&block_subsys_lock);
- list_for_each(p, &block_subsys.kset.list)
- if (!k--)
- return list_entry(p, struct gendisk, kobj.entry);
-@@ -628,7 +629,7 @@ static void *diskstats_next(struct seq_f
-
- static void diskstats_stop(struct seq_file *part, void *v)
- {
-- up(&block_subsys_sem);
-+ mutex_unlock(&block_subsys_lock);
- }
-
- static int diskstats_show(struct seq_file *s, void *v)
---- gregkh-2.6.orig/drivers/base/map.c
-+++ gregkh-2.6/drivers/base/map.c
-@@ -11,6 +11,7 @@
-
- #include <linux/module.h>
- #include <linux/slab.h>
-+#include <linux/mutex.h>
- #include <linux/kdev_t.h>
- #include <linux/kobject.h>
- #include <linux/kobj_map.h>
-@@ -25,7 +26,7 @@ struct kobj_map {
- int (*lock)(dev_t, void *);
- void *data;
- } *probes[255];
-- struct semaphore *sem;
-+ struct mutex *lock;
- };
-
- int kobj_map(struct kobj_map *domain, dev_t dev, unsigned long range,
-@@ -53,7 +54,7 @@ int kobj_map(struct kobj_map *domain, de
- p->range = range;
- p->data = data;
- }
-- down(domain->sem);
-+ mutex_lock(domain->lock);
- for (i = 0, p -= n; i < n; i++, p++, index++) {
- struct probe **s = &domain->probes[index % 255];
- while (*s && (*s)->range < range)
-@@ -61,7 +62,7 @@ int kobj_map(struct kobj_map *domain, de
- p->next = *s;
- *s = p;
- }
-- up(domain->sem);
-+ mutex_unlock(domain->lock);
- return 0;
- }
-
-@@ -75,7 +76,7 @@ void kobj_unmap(struct kobj_map *domain,
- if (n > 255)
- n = 255;
-
-- down(domain->sem);
-+ mutex_lock(domain->lock);
- for (i = 0; i < n; i++, index++) {
- struct probe **s;
- for (s = &domain->probes[index % 255]; *s; s = &(*s)->next) {
-@@ -88,7 +89,7 @@ void kobj_unmap(struct kobj_map *domain,
- }
- }
- }
-- up(domain->sem);
-+ mutex_unlock(domain->lock);
- kfree(found);
- }
-
-@@ -99,7 +100,7 @@ struct kobject *kobj_lookup(struct kobj_
- unsigned long best = ~0UL;
-
- retry:
-- down(domain->sem);
-+ mutex_lock(domain->lock);
- for (p = domain->probes[MAJOR(dev) % 255]; p; p = p->next) {
- struct kobject *(*probe)(dev_t, int *, void *);
- struct module *owner;
-@@ -120,7 +121,7 @@ retry:
- module_put(owner);
- continue;
- }
-- up(domain->sem);
-+ mutex_unlock(domain->lock);
- kobj = probe(dev, index, data);
- /* Currently ->owner protects _only_ ->probe() itself. */
- module_put(owner);
-@@ -128,11 +129,11 @@ retry:
- return kobj;
- goto retry;
- }
-- up(domain->sem);
-+ mutex_unlock(domain->lock);
- return NULL;
- }
-
--struct kobj_map *kobj_map_init(kobj_probe_t *base_probe, struct semaphore *sem)
-+struct kobj_map *kobj_map_init(kobj_probe_t *base_probe, struct mutex *lock)
- {
- struct kobj_map *p = kmalloc(sizeof(struct kobj_map), GFP_KERNEL);
- struct probe *base = kzalloc(sizeof(*base), GFP_KERNEL);
-@@ -149,6 +150,6 @@ struct kobj_map *kobj_map_init(kobj_prob
- base->get = base_probe;
- for (i = 0; i < 255; i++)
- p->probes[i] = base;
-- p->sem = sem;
-+ p->lock = lock;
- return p;
- }
---- gregkh-2.6.orig/fs/char_dev.c
-+++ gregkh-2.6/fs/char_dev.c
-@@ -19,6 +19,7 @@
- #include <linux/kobject.h>
- #include <linux/kobj_map.h>
- #include <linux/cdev.h>
-+#include <linux/mutex.h>
-
- #ifdef CONFIG_KMOD
- #include <linux/kmod.h>
-@@ -28,7 +29,7 @@ static struct kobj_map *cdev_map;
-
- #define MAX_PROBE_HASH 255 /* random */
-
--static DECLARE_MUTEX(chrdevs_lock);
-+static DEFINE_MUTEX(chrdevs_lock);
-
- static struct char_device_struct {
- struct char_device_struct *next;
-@@ -88,13 +89,13 @@ out:
-
- void *acquire_chrdev_list(void)
- {
-- down(&chrdevs_lock);
-+ mutex_lock(&chrdevs_lock);
- return get_next_chrdev(NULL);
- }
-
- void release_chrdev_list(void *dev)
- {
-- up(&chrdevs_lock);
-+ mutex_unlock(&chrdevs_lock);
- kfree(dev);
- }
-
-@@ -151,7 +152,7 @@ __register_chrdev_region(unsigned int ma
-
- memset(cd, 0, sizeof(struct char_device_struct));
-
-- down(&chrdevs_lock);
-+ mutex_lock(&chrdevs_lock);
-
- /* temporary */
- if (major == 0) {
-@@ -186,10 +187,10 @@ __register_chrdev_region(unsigned int ma
- }
- cd->next = *cp;
- *cp = cd;
-- up(&chrdevs_lock);
-+ mutex_unlock(&chrdevs_lock);
- return cd;
- out:
-- up(&chrdevs_lock);
-+ mutex_unlock(&chrdevs_lock);
- kfree(cd);
- return ERR_PTR(ret);
- }
-@@ -200,7 +201,7 @@ __unregister_chrdev_region(unsigned majo
- struct char_device_struct *cd = NULL, **cp;
- int i = major_to_index(major);
-
-- down(&chrdevs_lock);
-+ mutex_lock(&chrdevs_lock);
- for (cp = &chrdevs[i]; *cp; cp = &(*cp)->next)
- if ((*cp)->major == major &&
- (*cp)->baseminor == baseminor &&
-@@ -210,7 +211,7 @@ __unregister_chrdev_region(unsigned majo
- cd = *cp;
- *cp = cd->next;
- }
-- up(&chrdevs_lock);
-+ mutex_unlock(&chrdevs_lock);
- return cd;
- }
-
---- gregkh-2.6.orig/include/linux/kobj_map.h
-+++ gregkh-2.6/include/linux/kobj_map.h
-@@ -1,6 +1,6 @@
- #ifdef __KERNEL__
-
--#include <asm/semaphore.h>
-+#include <linux/mutex.h>
-
- typedef struct kobject *kobj_probe_t(dev_t, int *, void *);
- struct kobj_map;
-@@ -9,6 +9,6 @@ int kobj_map(struct kobj_map *, dev_t, u
- kobj_probe_t *, int (*)(dev_t, void *), void *);
- void kobj_unmap(struct kobj_map *, dev_t, unsigned long);
- struct kobject *kobj_lookup(struct kobj_map *, dev_t, int *);
--struct kobj_map *kobj_map_init(kobj_probe_t *, struct semaphore *);
-+struct kobj_map *kobj_map_init(kobj_probe_t *, struct mutex *);
-
- #endif
diff --git a/driver/kobject-add-error-notify.patch b/driver/kobject-add-error-notify.patch
deleted file mode 100644
index 6b3573d64a9f1..0000000000000
--- a/driver/kobject-add-error-notify.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: Kobject: provide better warning messages when people do stupid things
-
-Now that kobject_add() is used more than kobject_register() the kernel
-wasn't always letting people know that they were doing something wrong.
-This change fixes this.
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-
----
- lib/kobject.c | 22 ++++++++++++++--------
- 1 file changed, 14 insertions(+), 8 deletions(-)
-
---- gregkh-2.6.orig/lib/kobject.c
-+++ gregkh-2.6/lib/kobject.c
-@@ -196,6 +196,17 @@ int kobject_add(struct kobject * kobj)
- unlink(kobj);
- if (parent)
- kobject_put(parent);
-+
-+ /* be noisy on error issues */
-+ if (error == -EEXIST)
-+ printk("kobject_add failed for %s with -EEXIST, "
-+ "don't try to register things with the "
-+ "same name in the same directory.\n",
-+ kobject_name(kobj));
-+ else
-+ printk("kobject_add failed for %s (%d)\n",
-+ kobject_name(kobj), error);
-+ dump_stack();
- }
-
- return error;
-@@ -209,18 +220,13 @@ int kobject_add(struct kobject * kobj)
-
- int kobject_register(struct kobject * kobj)
- {
-- int error = 0;
-+ int error = -EINVAL;
- if (kobj) {
- kobject_init(kobj);
- error = kobject_add(kobj);
-- if (error) {
-- printk("kobject_register failed for %s (%d)\n",
-- kobject_name(kobj),error);
-- dump_stack();
-- } else
-+ if (!error)
- kobject_uevent(kobj, KOBJ_ADD);
-- } else
-- error = -EINVAL;
-+ }
- return error;
- }
-
diff --git a/driver/kobject-fix-build-error-if-config_sysfs-n.patch b/driver/kobject-fix-build-error-if-config_sysfs-n.patch
deleted file mode 100644
index b40ae563774ec..0000000000000
--- a/driver/kobject-fix-build-error-if-config_sysfs-n.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From j-nomura@ce.jp.nec.com Wed Mar 15 05:27:20 2006
-Message-ID: <44181697.2070709@ce.jp.nec.com>
-Date: Wed, 15 Mar 2006 08:28:55 -0500
-From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com>
-To: Greg KH <gregkh@suse.de>
-Cc: linux-kernel@vger.kernel.org
-Subject: kobject: fix build error if CONFIG_SYSFS=n
-
-
-Moving uevent_seqnum and uevent_helper to kobject_uevent.c
-because they are used even if CONFIG_SYSFS=n
-while kernel/ksysfs.c is built only if CONFIG_SYSFS=y,
-
-Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- kernel/ksysfs.c | 3 ---
- lib/kobject_uevent.c | 2 ++
- 2 files changed, 2 insertions(+), 3 deletions(-)
-
---- gregkh-2.6.orig/kernel/ksysfs.c
-+++ gregkh-2.6/kernel/ksysfs.c
-@@ -15,9 +15,6 @@
- #include <linux/module.h>
- #include <linux/init.h>
-
--u64 uevent_seqnum;
--char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug";
--
- #define KERNEL_ATTR_RO(_name) \
- static struct subsys_attribute _name##_attr = __ATTR_RO(_name)
-
---- gregkh-2.6.orig/lib/kobject_uevent.c
-+++ gregkh-2.6/lib/kobject_uevent.c
-@@ -26,6 +26,8 @@
- #define NUM_ENVP 32 /* number of env pointers */
-
- #if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
-+u64 uevent_seqnum;
-+char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug";
- static DEFINE_SPINLOCK(sequence_lock);
- static struct sock *uevent_sock;
-
diff --git a/driver/kobject-kobject.h-fix-a-typo.patch b/driver/kobject-kobject.h-fix-a-typo.patch
deleted file mode 100644
index 55a499ec50d58..0000000000000
--- a/driver/kobject-kobject.h-fix-a-typo.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From bunk@stusta.de Sat Mar 4 04:16:15 2006
-Date: Sat, 4 Mar 2006 13:15:31 +0100
-From: Adrian Bunk <bunk@stusta.de>
-To: gregkh@suse.de
-Subject: Kobject: kobject.h: fix a typo
-Message-ID: <20060304121531.GU9295@stusta.de>
-Content-Disposition: inline
-
-It shouldn't cause real harm, but it hurts my eyes.
-
-
-Signed-off-by: Adrian Bunk <bunk@stusta.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- include/linux/kobject.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- gregkh-2.6.orig/include/linux/kobject.h
-+++ gregkh-2.6/include/linux/kobject.h
-@@ -257,7 +257,7 @@ struct subsys_attribute {
- extern int subsys_create_file(struct subsystem * , struct subsys_attribute *);
- extern void subsys_remove_file(struct subsystem * , struct subsys_attribute *);
-
--#if defined(CONFIG_HOTPLUG) & defined(CONFIG_NET)
-+#if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
- void kobject_uevent(struct kobject *kobj, enum kobject_action action);
-
- int add_uevent_var(char **envp, int num_envp, int *cur_index,
diff --git a/driver/kobject_add_dir.patch b/driver/kobject_add_dir.patch
deleted file mode 100644
index 6ed340b11ed7f..0000000000000
--- a/driver/kobject_add_dir.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From j-nomura@ce.jp.nec.com Mon Mar 13 14:12:55 2006
-Message-ID: <4415EEC1.5080201@ce.jp.nec.com>
-Date: Mon, 13 Mar 2006 17:14:25 -0500
-From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com>
-To: Andrew Morton <akpm@osdl.org>, Alasdair Kergon <agk@redhat.com>,
- Greg KH <gregkh@suse.de>, Neil Brown <neilb@suse.de>
-Cc: Lars Marowsky-Bree <lmb@suse.de>,
- device-mapper development <dm-devel@redhat.com>,
- linux-kernel@vger.kernel.org
-Subject: kobject_add_dir
-
-Adding kobject_add_dir() function which creates a subdirectory
-for a given kobject.
-
-Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- include/linux/kobject.h | 2 ++
- lib/kobject.c | 38 ++++++++++++++++++++++++++++++++++++++
- 2 files changed, 40 insertions(+)
-
---- gregkh-2.6.orig/include/linux/kobject.h
-+++ gregkh-2.6/include/linux/kobject.h
-@@ -82,6 +82,8 @@ extern void kobject_unregister(struct ko
- extern struct kobject * kobject_get(struct kobject *);
- extern void kobject_put(struct kobject *);
-
-+extern struct kobject *kobject_add_dir(struct kobject *, const char *);
-+
- extern char * kobject_get_path(struct kobject *, gfp_t);
-
- struct kobj_type {
---- gregkh-2.6.orig/lib/kobject.c
-+++ gregkh-2.6/lib/kobject.c
-@@ -393,6 +393,44 @@ void kobject_put(struct kobject * kobj)
- }
-
-
-+static void dir_release(struct kobject *kobj)
-+{
-+ kfree(kobj);
-+}
-+
-+static struct kobj_type dir_ktype = {
-+ .release = dir_release,
-+ .sysfs_ops = NULL,
-+ .default_attrs = NULL,
-+};
-+
-+/**
-+ * kobject_add_dir - add sub directory of object.
-+ * @parent: object in which a directory is created.
-+ * @name: directory name.
-+ *
-+ * Add a plain directory object as child of given object.
-+ */
-+struct kobject *kobject_add_dir(struct kobject *parent, const char *name)
-+{
-+ struct kobject *k;
-+
-+ if (!parent)
-+ return NULL;
-+
-+ k = kzalloc(sizeof(*k), GFP_KERNEL);
-+ if (!k)
-+ return NULL;
-+
-+ k->parent = parent;
-+ k->ktype = &dir_ktype;
-+ kobject_set_name(k, name);
-+ kobject_register(k);
-+
-+ return k;
-+}
-+EXPORT_SYMBOL_GPL(kobject_add_dir);
-+
- /**
- * kset_init - initialize a kset for use
- * @k: kset
diff --git a/driver/kref-avoid-an-atomic-operation-in-kref_put.patch b/driver/kref-avoid-an-atomic-operation-in-kref_put.patch
deleted file mode 100644
index 919101fe879a9..0000000000000
--- a/driver/kref-avoid-an-atomic-operation-in-kref_put.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From linux-kernel-owner+greg=40kroah.com-S1751243AbWA3FTq@vger.kernel.org Sun Jan 29 21:20:33 2006
-Message-ID: <43DDA1E7.5010109@cosmosbay.com>
-Date: Mon, 30 Jan 2006 06:19:35 +0100
-From: Eric Dumazet <dada1@cosmosbay.com>
-To: Greg KH <greg@kroah.com>
-Cc: "Eric W. Biederman" <ebiederm@xmission.com>, Herbert Poetzl <herbert@13thfloor.at>, "Serge E. Hallyn" <serue@us.ibm.com>, Alan Cox <alan@lxorguk.ukuu.org.uk>, Dave Hansen <haveblue@us.ibm.com>, Arjan van de Ven <arjan@infradead.org>, Suleiman Souhlal <ssouhlal@FreeBSD.org>, Hubertus Franke <frankeh@watson.ibm.com>, Cedric Le Goater <clg@fr.ibm.com>, Kyle Moffett <mrmacman_g4@mac.com>
-Subject: kref: avoid an atomic operation in kref_put()
-
-Avoid an atomic operation in kref_put() when the last reference is
-dropped. On most platforms, atomic_read() is a plan read of the counter
-and involves no atomic at all.
-
-
-Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- lib/kref.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
---- gregkh-2.6.orig/lib/kref.c
-+++ gregkh-2.6/lib/kref.c
-@@ -52,7 +52,12 @@ int kref_put(struct kref *kref, void (*r
- WARN_ON(release == NULL);
- WARN_ON(release == (void (*)(struct kref *))kfree);
-
-- if (atomic_dec_and_test(&kref->refcount)) {
-+ /*
-+ * if current count is one, we are the last user and can release object
-+ * right now, avoiding an atomic operation on 'refcount'
-+ */
-+ if ((atomic_read(&kref->refcount) == 1) ||
-+ (atomic_dec_and_test(&kref->refcount))) {
- release(kref);
- return 1;
- }
diff --git a/driver/module_sysfs_refcount.patch b/driver/module_sysfs_refcount.patch
deleted file mode 100644
index 46071e29acf27..0000000000000
--- a/driver/module_sysfs_refcount.patch
+++ /dev/null
@@ -1,232 +0,0 @@
-From foo@baz.com Thu Feb 16 07:01:47 2006
-Date: Thu, 16 Feb 2006 13:50:23 -0800
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: fix module sysfs files reference counting
-
-The module files, refcnt, version, and srcversion did not properly
-increment the owner's module reference count, allowing the modules to
-be removed while the files were open, causing oopses.
-
-This patch fixes this, and also fixes the problem that the version and
-srcversion files were not showing up, unless CONFIG_MODULE_UNLOAD was
-enabled, which is not correct.
-
-Cc: Nathan Lynch <ntl@pobox.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- include/linux/module.h | 1
- kernel/module.c | 77 +++++++++++++++++++------------------------------
- kernel/params.c | 10 ------
- 3 files changed, 32 insertions(+), 56 deletions(-)
-
---- gregkh-2.6.orig/include/linux/module.h
-+++ gregkh-2.6/include/linux/module.h
-@@ -245,6 +245,7 @@ struct module
- /* Sysfs stuff. */
- struct module_kobject mkobj;
- struct module_param_attrs *param_attrs;
-+ struct module_attribute *modinfo_attrs;
- const char *version;
- const char *srcversion;
-
---- gregkh-2.6.orig/kernel/module.c
-+++ gregkh-2.6/kernel/module.c
-@@ -429,7 +429,6 @@ static inline void percpu_modcopy(void *
- }
- #endif /* CONFIG_SMP */
-
--#ifdef CONFIG_MODULE_UNLOAD
- #define MODINFO_ATTR(field) \
- static void setup_modinfo_##field(struct module *mod, const char *s) \
- { \
-@@ -461,12 +460,7 @@ static struct module_attribute modinfo_#
- MODINFO_ATTR(version);
- MODINFO_ATTR(srcversion);
-
--static struct module_attribute *modinfo_attrs[] = {
-- &modinfo_version,
-- &modinfo_srcversion,
-- NULL,
--};
--
-+#ifdef CONFIG_MODULE_UNLOAD
- /* Init the unload section of the module. */
- static void module_unload_init(struct module *mod)
- {
-@@ -781,6 +775,15 @@ static inline void module_unload_init(st
- }
- #endif /* CONFIG_MODULE_UNLOAD */
-
-+static struct module_attribute *modinfo_attrs[] = {
-+ &modinfo_version,
-+ &modinfo_srcversion,
-+#ifdef CONFIG_MODULE_UNLOAD
-+ &refcnt,
-+#endif
-+ NULL,
-+};
-+
- #ifdef CONFIG_OBSOLETE_MODPARM
- /* Bounds checking done below */
- static int obsparm_copy_string(const char *val, struct kernel_param *kp)
-@@ -1106,37 +1109,28 @@ static inline void remove_sect_attrs(str
- }
- #endif /* CONFIG_KALLSYMS */
-
--
--#ifdef CONFIG_MODULE_UNLOAD
--static inline int module_add_refcnt_attr(struct module *mod)
--{
-- return sysfs_create_file(&mod->mkobj.kobj, &refcnt.attr);
--}
--static void module_remove_refcnt_attr(struct module *mod)
--{
-- return sysfs_remove_file(&mod->mkobj.kobj, &refcnt.attr);
--}
--#else
--static inline int module_add_refcnt_attr(struct module *mod)
--{
-- return 0;
--}
--static void module_remove_refcnt_attr(struct module *mod)
--{
--}
--#endif
--
--#ifdef CONFIG_MODULE_UNLOAD
- static int module_add_modinfo_attrs(struct module *mod)
- {
- struct module_attribute *attr;
-+ struct module_attribute *temp_attr;
- int error = 0;
- int i;
-
-+ mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) *
-+ (ARRAY_SIZE(modinfo_attrs) + 1)),
-+ GFP_KERNEL);
-+ if (!mod->modinfo_attrs)
-+ return -ENOMEM;
-+
-+ temp_attr = mod->modinfo_attrs;
- for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
- if (!attr->test ||
-- (attr->test && attr->test(mod)))
-- error = sysfs_create_file(&mod->mkobj.kobj,&attr->attr);
-+ (attr->test && attr->test(mod))) {
-+ memcpy(temp_attr, attr, sizeof(*temp_attr));
-+ temp_attr->attr.owner = mod;
-+ error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr);
-+ ++temp_attr;
-+ }
- }
- return error;
- }
-@@ -1146,12 +1140,16 @@ static void module_remove_modinfo_attrs(
- struct module_attribute *attr;
- int i;
-
-- for (i = 0; (attr = modinfo_attrs[i]); i++) {
-+ for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
-+ /* pick a field to test for end of list */
-+ if (!attr->attr.name)
-+ break;
- sysfs_remove_file(&mod->mkobj.kobj,&attr->attr);
-- attr->free(mod);
-+ if (attr->free)
-+ attr->free(mod);
- }
-+ kfree(mod->modinfo_attrs);
- }
--#endif
-
- static int mod_sysfs_setup(struct module *mod,
- struct kernel_param *kparam,
-@@ -1169,19 +1167,13 @@ static int mod_sysfs_setup(struct module
- if (err)
- goto out;
-
-- err = module_add_refcnt_attr(mod);
-- if (err)
-- goto out_unreg;
--
- err = module_param_sysfs_setup(mod, kparam, num_params);
- if (err)
- goto out_unreg;
-
--#ifdef CONFIG_MODULE_UNLOAD
- err = module_add_modinfo_attrs(mod);
- if (err)
- goto out_unreg;
--#endif
-
- return 0;
-
-@@ -1193,10 +1185,7 @@ out:
-
- static void mod_kobject_remove(struct module *mod)
- {
--#ifdef CONFIG_MODULE_UNLOAD
- module_remove_modinfo_attrs(mod);
--#endif
-- module_remove_refcnt_attr(mod);
- module_param_sysfs_remove(mod);
-
- kobject_unregister(&mod->mkobj.kobj);
-@@ -1474,7 +1463,6 @@ static char *get_modinfo(Elf_Shdr *sechd
- return NULL;
- }
-
--#ifdef CONFIG_MODULE_UNLOAD
- static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs,
- unsigned int infoindex)
- {
-@@ -1489,7 +1477,6 @@ static void setup_modinfo(struct module
- attr->attr.name));
- }
- }
--#endif
-
- #ifdef CONFIG_KALLSYMS
- int is_exported(const char *name, const struct module *mod)
-@@ -1803,10 +1790,8 @@ static struct module *load_module(void _
- if (strcmp(mod->name, "driverloader") == 0)
- add_taint(TAINT_PROPRIETARY_MODULE);
-
--#ifdef CONFIG_MODULE_UNLOAD
- /* Set up MODINFO_ATTR fields */
- setup_modinfo(mod, sechdrs, infoindex);
--#endif
-
- /* Fix up syms, so that st_value is a pointer to location. */
- err = simplify_symbols(sechdrs, symindex, strtab, versindex, pcpuindex,
---- gregkh-2.6.orig/kernel/params.c
-+++ gregkh-2.6/kernel/params.c
-@@ -638,13 +638,8 @@ static ssize_t module_attr_show(struct k
- if (!attribute->show)
- return -EIO;
-
-- if (!try_module_get(mk->mod))
-- return -ENODEV;
--
- ret = attribute->show(attribute, mk->mod, buf);
-
-- module_put(mk->mod);
--
- return ret;
- }
-
-@@ -662,13 +657,8 @@ static ssize_t module_attr_store(struct
- if (!attribute->store)
- return -EIO;
-
-- if (!try_module_get(mk->mod))
-- return -ENODEV;
--
- ret = attribute->store(attribute, mk->mod, buf, len);
-
-- module_put(mk->mod);
--
- return ret;
- }
-
diff --git a/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch b/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch
deleted file mode 100644
index 9e341b44267d5..0000000000000
--- a/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From maneesh@in.ibm.com Thu Mar 9 06:13:04 2006
-Date: Thu, 9 Mar 2006 19:40:14 +0530
-From: Maneesh Soni <maneesh@in.ibm.com>
-To: Greg KH <greg@kroah.com>
-Cc: Patrick Mochel <mochel@digitalimplant.org>
-Subject: sysfs: fix problem with duplicate sysfs directories and files
-Message-ID: <20060309141014.GB10667@in.ibm.com>
-Content-Disposition: inline
-
-
-The following patch checks for existing sysfs_dirent before
-preparing new one while creating sysfs directories and files.
-
-Signed-off-by: Maneesh Soni <maneesh@in.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- fs/sysfs/dir.c | 32 +++++++++++++++++++++++++++++++-
- fs/sysfs/file.c | 6 ++++--
- fs/sysfs/symlink.c | 5 +++--
- fs/sysfs/sysfs.h | 1 +
- 4 files changed, 39 insertions(+), 5 deletions(-)
-
---- gregkh-2.6.orig/fs/sysfs/dir.c
-+++ gregkh-2.6/fs/sysfs/dir.c
-@@ -51,6 +51,32 @@ static struct sysfs_dirent * sysfs_new_d
- return sd;
- }
-
-+/**
-+ *
-+ * Return -EEXIST if there is already a sysfs element with the same name for
-+ * the same parent.
-+ *
-+ * called with parent inode's i_mutex held
-+ */
-+int sysfs_dirent_exist(struct sysfs_dirent *parent_sd,
-+ const unsigned char *new)
-+{
-+ struct sysfs_dirent * sd;
-+
-+ list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
-+ if (sd->s_element) {
-+ const unsigned char *existing = sysfs_get_name(sd);
-+ if (strcmp(existing, new))
-+ continue;
-+ else
-+ return -EEXIST;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+
- int sysfs_make_dirent(struct sysfs_dirent * parent_sd, struct dentry * dentry,
- void * element, umode_t mode, int type)
- {
-@@ -103,7 +129,11 @@ static int create_dir(struct kobject * k
- mutex_lock(&p->d_inode->i_mutex);
- *d = lookup_one_len(n, p, strlen(n));
- if (!IS_ERR(*d)) {
-- error = sysfs_make_dirent(p->d_fsdata, *d, k, mode, SYSFS_DIR);
-+ if (sysfs_dirent_exist(p->d_fsdata, n))
-+ error = -EEXIST;
-+ else
-+ error = sysfs_make_dirent(p->d_fsdata, *d, k, mode,
-+ SYSFS_DIR);
- if (!error) {
- error = sysfs_create(*d, mode, init_dir);
- if (!error) {
---- gregkh-2.6.orig/fs/sysfs/file.c
-+++ gregkh-2.6/fs/sysfs/file.c
-@@ -436,10 +436,12 @@ int sysfs_add_file(struct dentry * dir,
- {
- struct sysfs_dirent * parent_sd = dir->d_fsdata;
- umode_t mode = (attr->mode & S_IALLUGO) | S_IFREG;
-- int error = 0;
-+ int error = -EEXIST;
-
- mutex_lock(&dir->d_inode->i_mutex);
-- error = sysfs_make_dirent(parent_sd, NULL, (void *) attr, mode, type);
-+ if (!sysfs_dirent_exist(parent_sd, attr->name))
-+ error = sysfs_make_dirent(parent_sd, NULL, (void *)attr,
-+ mode, type);
- mutex_unlock(&dir->d_inode->i_mutex);
-
- return error;
---- gregkh-2.6.orig/fs/sysfs/symlink.c
-+++ gregkh-2.6/fs/sysfs/symlink.c
-@@ -82,12 +82,13 @@ exit1:
- int sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name)
- {
- struct dentry * dentry = kobj->dentry;
-- int error = 0;
-+ int error = -EEXIST;
-
- BUG_ON(!kobj || !kobj->dentry || !name);
-
- mutex_lock(&dentry->d_inode->i_mutex);
-- error = sysfs_add_link(dentry, name, target);
-+ if (!sysfs_dirent_exist(dentry->d_fsdata, name))
-+ error = sysfs_add_link(dentry, name, target);
- mutex_unlock(&dentry->d_inode->i_mutex);
- return error;
- }
---- gregkh-2.6.orig/fs/sysfs/sysfs.h
-+++ gregkh-2.6/fs/sysfs/sysfs.h
-@@ -5,6 +5,7 @@ extern kmem_cache_t *sysfs_dir_cachep;
- extern struct inode * sysfs_new_inode(mode_t mode, struct sysfs_dirent *);
- extern int sysfs_create(struct dentry *, int mode, int (*init)(struct inode *));
-
-+extern int sysfs_dirent_exist(struct sysfs_dirent *, const unsigned char *);
- extern int sysfs_make_dirent(struct sysfs_dirent *, struct dentry *, void *,
- umode_t, int);
-
diff --git a/driver/sysfs-kzalloc-conversion.patch b/driver/sysfs-kzalloc-conversion.patch
deleted file mode 100644
index 83adbee528526..0000000000000
--- a/driver/sysfs-kzalloc-conversion.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From snakebyte@gmx.de Wed Feb 22 02:18:18 2006
-From: Eric Sesterhenn <snakebyte@gmx.de>
-Subject: sysfs: kzalloc conversion
-Cc: gregkh@suse.de
-Date: Wed, 22 Feb 2006 11:18:15 +0100
-Message-Id: <1140603496.14898.20.camel@alice>
-
-this converts fs/sysfs to kzalloc() usage.
-compile tested with make allyesconfig
-
-Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- fs/sysfs/file.c | 3 +--
- fs/sysfs/inode.c | 3 +--
- 2 files changed, 2 insertions(+), 4 deletions(-)
-
---- gregkh-2.6.orig/fs/sysfs/file.c
-+++ gregkh-2.6/fs/sysfs/file.c
-@@ -305,9 +305,8 @@ static int check_perm(struct inode * ino
- /* No error? Great, allocate a buffer for the file, and store it
- * it in file->private_data for easy access.
- */
-- buffer = kmalloc(sizeof(struct sysfs_buffer),GFP_KERNEL);
-+ buffer = kzalloc(sizeof(struct sysfs_buffer), GFP_KERNEL);
- if (buffer) {
-- memset(buffer,0,sizeof(struct sysfs_buffer));
- init_MUTEX(&buffer->sem);
- buffer->needs_read_fill = 1;
- buffer->ops = ops;
---- gregkh-2.6.orig/fs/sysfs/inode.c
-+++ gregkh-2.6/fs/sysfs/inode.c
-@@ -54,11 +54,10 @@ int sysfs_setattr(struct dentry * dentry
-
- if (!sd_iattr) {
- /* setting attributes for the first time, allocate now */
-- sd_iattr = kmalloc(sizeof(struct iattr), GFP_KERNEL);
-+ sd_iattr = kzalloc(sizeof(struct iattr), GFP_KERNEL);
- if (!sd_iattr)
- return -ENOMEM;
- /* assign default attributes */
-- memset(sd_iattr, 0, sizeof(struct iattr));
- sd_iattr->ia_mode = sd->s_mode;
- sd_iattr->ia_uid = 0;
- sd_iattr->ia_gid = 0;
diff --git a/driver/sysfs_add_link-kobject-leak-fix.patch b/driver/sysfs_add_link-kobject-leak-fix.patch
deleted file mode 100644
index 6057e6e7c9d1a..0000000000000
--- a/driver/sysfs_add_link-kobject-leak-fix.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From foo@baz Tue Apr 9 12:12:43 2002
-Date: Thu, 16 Mar 2006 15:44:26 -0800
-To: Greg KH <greg@kroah.com>
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: sysfs: fix a kobject leak in sysfs_add_link on the error path
-
-As pointed out by Oliver Neukum.
-
-
-Cc: Maneesh Soni <maneesh@in.ibm.com>
-Cc: Oliver Neukum <oliver@neukum.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- fs/sysfs/symlink.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- gregkh-2.6.orig/fs/sysfs/symlink.c
-+++ gregkh-2.6/fs/sysfs/symlink.c
-@@ -66,6 +66,7 @@ static int sysfs_add_link(struct dentry
- if (!error)
- return 0;
-
-+ kobject_put(target);
- kfree(sl->link_name);
- exit2:
- kfree(sl);
diff --git a/driver/sysfs_remove_dir-needs-to-invalidate-the-dentry.patch b/driver/sysfs_remove_dir-needs-to-invalidate-the-dentry.patch
deleted file mode 100644
index e4f7a86f1878d..0000000000000
--- a/driver/sysfs_remove_dir-needs-to-invalidate-the-dentry.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: sysfs: sysfs_remove_dir() needs to invalidate the dentry
-
-When calling sysfs_remove_dir() don't allow any further sysfs functions
-to work for this kobject anymore. This fixes a nasty USB cdc-acm oops
-on disconnect.
-
-Many thanks to Bob Copeland and Paul Fulghum for taking the time to
-track this down.
-
-
-Cc: Bob Copeland <email@bobcopeland.com>
-Cc: Paul Fulghum <paulkf@microgate.com>
-Cc: Maneesh Soni <maneesh@in.ibm.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- fs/sysfs/dir.c | 1 +
- fs/sysfs/inode.c | 6 +++++-
- 2 files changed, 6 insertions(+), 1 deletion(-)
-
---- gregkh-2.6.orig/fs/sysfs/dir.c
-+++ gregkh-2.6/fs/sysfs/dir.c
-@@ -302,6 +302,7 @@ void sysfs_remove_dir(struct kobject * k
- * Drop reference from dget() on entrance.
- */
- dput(dentry);
-+ kobj->dentry = NULL;
- }
-
- int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
---- gregkh-2.6.orig/fs/sysfs/inode.c
-+++ gregkh-2.6/fs/sysfs/inode.c
-@@ -227,12 +227,16 @@ void sysfs_drop_dentry(struct sysfs_dire
- void sysfs_hash_and_remove(struct dentry * dir, const char * name)
- {
- struct sysfs_dirent * sd;
-- struct sysfs_dirent * parent_sd = dir->d_fsdata;
-+ struct sysfs_dirent * parent_sd;
-+
-+ if (!dir)
-+ return;
-
- if (dir->d_inode == NULL)
- /* no inode means this hasn't been made visible yet */
- return;
-
-+ parent_sd = dir->d_fsdata;
- mutex_lock(&dir->d_inode->i_mutex);
- list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
- if (!sd->s_element)
diff --git a/driver/unexport-sysfs-dir.patch b/driver/unexport-sysfs-dir.patch
deleted file mode 100644
index 0a96b25aadf5f..0000000000000
--- a/driver/unexport-sysfs-dir.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From foo@baz Tue Apr 9 12:12:43 2002
-Date: Thu, 16 Mar 2006 11:23:21 -0700
-From: Greg Kroah-Hartman <gregkh@suse.de>
-Subject: sysfs: don't export dir symbols
-
-These functions should only be used by the kobject core, and if any
-driver tries to use them, bad things happen. Unexport them to try to
-prevent this from happening.
-
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-
----
- fs/sysfs/dir.c | 4 ----
- 1 file changed, 4 deletions(-)
-
---- gregkh-2.6.orig/fs/sysfs/dir.c
-+++ gregkh-2.6/fs/sysfs/dir.c
-@@ -511,7 +511,3 @@ struct file_operations sysfs_dir_operati
- .read = generic_read_dir,
- .readdir = sysfs_readdir,
- };
--
--EXPORT_SYMBOL_GPL(sysfs_create_dir);
--EXPORT_SYMBOL_GPL(sysfs_remove_dir);
--EXPORT_SYMBOL_GPL(sysfs_rename_dir);