diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-08 13:32:25 -0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-08 13:32:25 -0800 |
| commit | 3ba1fb93e82987a2f72996644e2650f366be7d6f (patch) | |
| tree | aeb5c4d14b5825871e78502545ede22b213c8b65 | |
| parent | dafdcba5da10bf72dcc1182db27d5aa290312441 (diff) | |
| download | patches-3ba1fb93e82987a2f72996644e2650f366be7d6f.tar.gz | |
remove driver-core patches now in Linus's tree
63 files changed, 0 insertions, 7696 deletions
diff --git a/driver-core/auxdisplay-move-cfag12864bfb-s-probe-function-to-.devinit.text.patch b/driver-core/auxdisplay-move-cfag12864bfb-s-probe-function-to-.devinit.text.patch deleted file mode 100644 index 88e7de00c6adb8..00000000000000 --- a/driver-core/auxdisplay-move-cfag12864bfb-s-probe-function-to-.devinit.text.patch +++ /dev/null @@ -1,42 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:45:25 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:56 +0100 -Subject: auxdisplay: move cfag12864bfb's probe function to .devinit.text -To: Greg KH <gregkh@suse.de> -Cc: Andrew Morton <akpm@linux-foundation.org>, Avuton Olrich <avuton@gmail.com>, Antonino Daplas <adaplas@gmail.com> -Message-ID: <1265313417-5568-8-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to cfag12864bfb_probe is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Acked-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> -Cc: Andrew Morton <akpm@linux-foundation.org> -Cc: Avuton Olrich <avuton@gmail.com> -Cc: Antonino Daplas <adaplas@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/auxdisplay/cfag12864bfb.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/auxdisplay/cfag12864bfb.c -+++ b/drivers/auxdisplay/cfag12864bfb.c -@@ -81,7 +81,7 @@ static struct fb_ops cfag12864bfb_ops = - .fb_mmap = cfag12864bfb_mmap, - }; - --static int __init cfag12864bfb_probe(struct platform_device *device) -+static int __devinit cfag12864bfb_probe(struct platform_device *device) - { - int ret = -EINVAL; - struct fb_info *info = framebuffer_alloc(0, &device->dev); diff --git a/driver-core/driver-core-add-class_attr_string-for-simple-read-only-string.patch b/driver-core/driver-core-add-class_attr_string-for-simple-read-only-string.patch deleted file mode 100644 index 0b0a2c6fdcb699..00000000000000 --- a/driver-core/driver-core-add-class_attr_string-for-simple-read-only-string.patch +++ /dev/null @@ -1,68 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:46:44 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:08 +0100 (CET) -Subject: driver core: Add class_attr_string for simple read-only string -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114808.92E7EB17C2@basil.firstfloor.org> - - -Several drivers just export a static string as class attributes. - -Use the new extensible attribute support to define a simple -CLASS_ATTR_STRING() macro for this. - -This will allow to remove code from drivers in followon patches. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/class.c | 10 ++++++++++ - include/linux/device.h | 17 +++++++++++++++++ - 2 files changed, 27 insertions(+) - ---- a/drivers/base/class.c -+++ b/drivers/base/class.c -@@ -490,6 +490,16 @@ void class_interface_unregister(struct c - class_put(parent); - } - -+ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr, -+ char *buf) -+{ -+ struct class_attribute_string *cs; -+ cs = container_of(attr, struct class_attribute_string, attr); -+ return snprintf(buf, PAGE_SIZE, "%s\n", cs->str); -+} -+ -+EXPORT_SYMBOL_GPL(show_class_attr_string); -+ - struct class_compat { - struct kobject *kobj; - }; ---- a/include/linux/device.h -+++ b/include/linux/device.h -@@ -265,6 +265,23 @@ extern int __must_check class_create_fil - extern void class_remove_file(struct class *class, - const struct class_attribute *attr); - -+/* Simple class attribute that is just a static string */ -+ -+struct class_attribute_string { -+ struct class_attribute attr; -+ char *str; -+}; -+ -+/* Currently read-only only */ -+#define _CLASS_ATTR_STRING(_name, _mode, _str) \ -+ { __ATTR(_name, _mode, show_class_attr_string, NULL), _str } -+#define CLASS_ATTR_STRING(_name, _mode, _str) \ -+ struct class_attribute_string class_attr_##_name = \ -+ _CLASS_ATTR_STRING(_name, _mode, _str) -+ -+extern ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr, -+ char *buf); -+ - struct class_interface { - struct list_head node; - struct class *class; diff --git a/driver-core/driver-core-add-platform_create_bundle-helper.patch b/driver-core/driver-core-add-platform_create_bundle-helper.patch deleted file mode 100644 index fc4c753254919b..00000000000000 --- a/driver-core/driver-core-add-platform_create_bundle-helper.patch +++ /dev/null @@ -1,103 +0,0 @@ -From dmitry.torokhov@gmail.com Tue Jan 5 14:23:17 2010 -From: Dmitry Torokhov <dmitry.torokhov@gmail.com> -Date: Tue, 29 Dec 2009 20:11:20 -0800 -Subject: Driver core: add platform_create_bundle() helper -To: Greg KH <gregkh@suse.de> -Message-ID: <20091230041120.GA2186@core.coreip.homeip.net> - - -Many legacy-style module create singleton platform devices themselves, -along with corresponding platform driver. Instead of replicating error -handling code in all such drivers, provide a helper that allocates and -registers a single platform device and a driver and binds them together. - -Signed-off-by: Dmitry Torokhov <dtor@mail.ru> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/platform.c | 58 ++++++++++++++++++++++++++++++++++++++++ - include/linux/platform_device.h | 5 +++ - 2 files changed, 63 insertions(+) - ---- a/drivers/base/platform.c -+++ b/drivers/base/platform.c -@@ -548,6 +548,64 @@ int __init_or_module platform_driver_pro - } - EXPORT_SYMBOL_GPL(platform_driver_probe); - -+/** -+ * platform_create_bundle - register driver and create corresponding device -+ * @driver: platform driver structure -+ * @probe: the driver probe routine, probably from an __init section -+ * @res: set of resources that needs to be allocated for the device -+ * @n_res: number of resources -+ * @data: platform specific data for this platform device -+ * @size: size of platform specific data -+ * -+ * Use this in legacy-style modules that probe hardware directly and -+ * register a single platform device and corresponding platform driver. -+ */ -+struct platform_device * __init_or_module platform_create_bundle( -+ struct platform_driver *driver, -+ int (*probe)(struct platform_device *), -+ struct resource *res, unsigned int n_res, -+ const void *data, size_t size) -+{ -+ struct platform_device *pdev; -+ int error; -+ -+ pdev = platform_device_alloc(driver->driver.name, -1); -+ if (!pdev) { -+ error = -ENOMEM; -+ goto err_out; -+ } -+ -+ if (res) { -+ error = platform_device_add_resources(pdev, res, n_res); -+ if (error) -+ goto err_pdev_put; -+ } -+ -+ if (data) { -+ error = platform_device_add_data(pdev, data, size); -+ if (error) -+ goto err_pdev_put; -+ } -+ -+ error = platform_device_add(pdev); -+ if (error) -+ goto err_pdev_put; -+ -+ error = platform_driver_probe(driver, probe); -+ if (error) -+ goto err_pdev_del; -+ -+ return pdev; -+ -+err_pdev_del: -+ platform_device_del(pdev); -+err_pdev_put: -+ platform_device_put(pdev); -+err_out: -+ return ERR_PTR(error); -+} -+EXPORT_SYMBOL_GPL(platform_create_bundle); -+ - /* modalias support enables more hands-off userspace setup: - * (a) environment variable lets new-style hotplug events work once system is - * fully running: "modprobe $MODALIAS" ---- a/include/linux/platform_device.h -+++ b/include/linux/platform_device.h -@@ -77,6 +77,11 @@ extern int platform_driver_probe(struct - #define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev) - #define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data)) - -+extern struct platform_device *platform_create_bundle(struct platform_driver *driver, -+ int (*probe)(struct platform_device *), -+ struct resource *res, unsigned int n_res, -+ const void *data, size_t size); -+ - /* early platform driver interface */ - struct early_platform_driver { - const char *class_str; diff --git a/driver-core/driver-core-constify-struct-sysfs_ops-in-struct-kobj_type.patch b/driver-core/driver-core-constify-struct-sysfs_ops-in-struct-kobj_type.patch deleted file mode 100644 index e981039e1e3316..00000000000000 --- a/driver-core/driver-core-constify-struct-sysfs_ops-in-struct-kobj_type.patch +++ /dev/null @@ -1,826 +0,0 @@ -From re.emese@gmail.com Wed Jan 27 15:54:13 2010 -From: Emese Revfy <re.emese@gmail.com> -Date: Tue, 19 Jan 2010 02:58:23 +0100 -Subject: Driver core: Constify struct sysfs_ops in struct kobj_type -To: Greg KH <gregkh@suse.de> -Cc: Al Viro <viro@ZenIV.linux.org.uk>, teigland@redhat.com, Matt_Domsch@dell.com, maciej.sosnowski@intel.com, hjk@linutronix.de, Pekka Enberg <penberg@cs.helsinki.fi>, jens.axboe@oracle.com, shemminger@vyatta.com, akpm@linux-foundation.org, davem@davemloft.net, torvalds@linux-foundation.org -Message-ID: <4B5511BF.60508@gmail.com> - - -From: Emese Revfy <re.emese@gmail.com> - -Constify struct sysfs_ops. - -This is part of the ops structure constification -effort started by Arjan van de Ven et al. - -Benefits of this constification: - - * prevents modification of data that is shared - (referenced) by many other structure instances - at runtime - - * detects/prevents accidental (but not intentional) - modification attempts on archs that enforce - read-only kernel data at runtime - - * potentially better optimized code as the compiler - can assume that the const data cannot be changed - - * the compiler/linker move const data into .rodata - and therefore exclude them from false sharing - -Signed-off-by: Emese Revfy <re.emese@gmail.com> -Acked-by: David Teigland <teigland@redhat.com> -Acked-by: Matt Domsch <Matt_Domsch@dell.com> -Acked-by: Maciej Sosnowski <maciej.sosnowski@intel.com> -Acked-by: Hans J. Koch <hjk@linutronix.de> -Acked-by: Pekka Enberg <penberg@cs.helsinki.fi> -Acked-by: Jens Axboe <jens.axboe@oracle.com> -Acked-by: Stephen Hemminger <shemminger@vyatta.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - Documentation/kobject.txt | 2 +- - arch/ia64/kernel/topology.c | 2 +- - arch/powerpc/kernel/cacheinfo.c | 2 +- - arch/sh/kernel/cpu/sh4/sq.c | 2 +- - arch/x86/kernel/cpu/intel_cacheinfo.c | 2 +- - arch/x86/kernel/cpu/mcheck/mce_amd.c | 2 +- - block/blk-integrity.c | 2 +- - block/blk-sysfs.c | 2 +- - block/elevator.c | 2 +- - drivers/base/bus.c | 4 ++-- - drivers/base/class.c | 2 +- - drivers/base/core.c | 2 +- - drivers/base/sys.c | 4 ++-- - drivers/block/pktcdvd.c | 2 +- - drivers/cpufreq/cpufreq.c | 2 +- - drivers/cpuidle/sysfs.c | 4 ++-- - drivers/dma/ioat/dma.c | 2 +- - drivers/dma/ioat/dma.h | 2 +- - drivers/edac/edac_device_sysfs.c | 6 +++--- - drivers/edac/edac_mc_sysfs.c | 4 ++-- - drivers/edac/edac_pci_sysfs.c | 4 ++-- - drivers/firmware/edd.c | 2 +- - drivers/firmware/efivars.c | 2 +- - drivers/firmware/iscsi_ibft.c | 2 +- - drivers/firmware/memmap.c | 2 +- - drivers/gpu/drm/ttm/ttm_bo.c | 2 +- - drivers/gpu/drm/ttm/ttm_memory.c | 2 +- - drivers/infiniband/core/cm.c | 2 +- - drivers/infiniband/core/sysfs.c | 2 +- - drivers/md/dm-sysfs.c | 2 +- - drivers/md/md.c | 4 ++-- - drivers/net/ibmveth.c | 2 +- - drivers/net/iseries_veth.c | 4 ++-- - drivers/parisc/pdc_stable.c | 2 +- - drivers/pci/hotplug/fakephp.c | 2 +- - drivers/pci/slot.c | 2 +- - drivers/uio/uio.c | 4 ++-- - drivers/uwb/wlp/sysfs.c | 3 +-- - drivers/video/omap2/dss/manager.c | 2 +- - drivers/video/omap2/dss/overlay.c | 2 +- - drivers/xen/sys-hypervisor.c | 2 +- - fs/btrfs/sysfs.c | 4 ++-- - fs/dlm/lockspace.c | 2 +- - fs/ext4/super.c | 2 +- - fs/gfs2/sys.c | 2 +- - fs/ocfs2/cluster/masklog.c | 2 +- - fs/sysfs/file.c | 8 ++++---- - include/linux/kobject.h | 4 ++-- - kernel/params.c | 2 +- - lib/kobject.c | 2 +- - mm/slub.c | 2 +- - net/bridge/br_private.h | 2 +- - net/bridge/br_sysfs_if.c | 2 +- - samples/kobject/kset-example.c | 2 +- - 54 files changed, 69 insertions(+), 70 deletions(-) - ---- a/Documentation/kobject.txt -+++ b/Documentation/kobject.txt -@@ -266,7 +266,7 @@ kobj_type: - - struct kobj_type { - void (*release)(struct kobject *); -- struct sysfs_ops *sysfs_ops; -+ const struct sysfs_ops *sysfs_ops; - struct attribute **default_attrs; - }; - ---- a/arch/ia64/kernel/topology.c -+++ b/arch/ia64/kernel/topology.c -@@ -282,7 +282,7 @@ static ssize_t cache_show(struct kobject - return ret; - } - --static struct sysfs_ops cache_sysfs_ops = { -+static const struct sysfs_ops cache_sysfs_ops = { - .show = cache_show - }; - ---- a/arch/powerpc/kernel/cacheinfo.c -+++ b/arch/powerpc/kernel/cacheinfo.c -@@ -642,7 +642,7 @@ static struct kobj_attribute *cache_inde - &cache_assoc_attr, - }; - --static struct sysfs_ops cache_index_ops = { -+static const struct sysfs_ops cache_index_ops = { - .show = cache_index_show, - }; - ---- a/arch/sh/kernel/cpu/sh4/sq.c -+++ b/arch/sh/kernel/cpu/sh4/sq.c -@@ -326,7 +326,7 @@ static struct attribute *sq_sysfs_attrs[ - NULL, - }; - --static struct sysfs_ops sq_sysfs_ops = { -+static const struct sysfs_ops sq_sysfs_ops = { - .show = sq_sysfs_show, - .store = sq_sysfs_store, - }; ---- a/arch/x86/kernel/cpu/intel_cacheinfo.c -+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c -@@ -903,7 +903,7 @@ static ssize_t store(struct kobject *kob - return ret; - } - --static struct sysfs_ops sysfs_ops = { -+static const struct sysfs_ops sysfs_ops = { - .show = show, - .store = store, - }; ---- a/arch/x86/kernel/cpu/mcheck/mce_amd.c -+++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c -@@ -388,7 +388,7 @@ static ssize_t store(struct kobject *kob - return ret; - } - --static struct sysfs_ops threshold_ops = { -+static const struct sysfs_ops threshold_ops = { - .show = show, - .store = store, - }; ---- a/block/blk-integrity.c -+++ b/block/blk-integrity.c -@@ -278,7 +278,7 @@ static struct attribute *integrity_attrs - NULL, - }; - --static struct sysfs_ops integrity_ops = { -+static const struct sysfs_ops integrity_ops = { - .show = &integrity_attr_show, - .store = &integrity_attr_store, - }; ---- a/block/blk-sysfs.c -+++ b/block/blk-sysfs.c -@@ -450,7 +450,7 @@ static void blk_release_queue(struct kob - kmem_cache_free(blk_requestq_cachep, q); - } - --static struct sysfs_ops queue_sysfs_ops = { -+static const struct sysfs_ops queue_sysfs_ops = { - .show = queue_attr_show, - .store = queue_attr_store, - }; ---- a/block/elevator.c -+++ b/block/elevator.c -@@ -892,7 +892,7 @@ elv_attr_store(struct kobject *kobj, str - return error; - } - --static struct sysfs_ops elv_sysfs_ops = { -+static const struct sysfs_ops elv_sysfs_ops = { - .show = elv_attr_show, - .store = elv_attr_store, - }; ---- a/drivers/base/bus.c -+++ b/drivers/base/bus.c -@@ -70,7 +70,7 @@ static ssize_t drv_attr_store(struct kob - return ret; - } - --static struct sysfs_ops driver_sysfs_ops = { -+static const struct sysfs_ops driver_sysfs_ops = { - .show = drv_attr_show, - .store = drv_attr_store, - }; -@@ -115,7 +115,7 @@ static ssize_t bus_attr_store(struct kob - return ret; - } - --static struct sysfs_ops bus_sysfs_ops = { -+static const struct sysfs_ops bus_sysfs_ops = { - .show = bus_attr_show, - .store = bus_attr_store, - }; ---- a/drivers/base/class.c -+++ b/drivers/base/class.c -@@ -63,7 +63,7 @@ static void class_release(struct kobject - kfree(cp); - } - --static struct sysfs_ops class_sysfs_ops = { -+static const struct sysfs_ops class_sysfs_ops = { - .show = class_attr_show, - .store = class_attr_store, - }; ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -100,7 +100,7 @@ static ssize_t dev_attr_store(struct kob - return ret; - } - --static struct sysfs_ops dev_sysfs_ops = { -+static const struct sysfs_ops dev_sysfs_ops = { - .show = dev_attr_show, - .store = dev_attr_store, - }; ---- a/drivers/base/sys.c -+++ b/drivers/base/sys.c -@@ -54,7 +54,7 @@ sysdev_store(struct kobject *kobj, struc - return -EIO; - } - --static struct sysfs_ops sysfs_ops = { -+static const struct sysfs_ops sysfs_ops = { - .show = sysdev_show, - .store = sysdev_store, - }; -@@ -104,7 +104,7 @@ static ssize_t sysdev_class_store(struct - return -EIO; - } - --static struct sysfs_ops sysfs_class_ops = { -+static const struct sysfs_ops sysfs_class_ops = { - .show = sysdev_class_show, - .store = sysdev_class_store, - }; ---- a/drivers/block/pktcdvd.c -+++ b/drivers/block/pktcdvd.c -@@ -284,7 +284,7 @@ static ssize_t kobj_pkt_store(struct kob - return len; - } - --static struct sysfs_ops kobj_pkt_ops = { -+static const struct sysfs_ops kobj_pkt_ops = { - .show = kobj_pkt_show, - .store = kobj_pkt_store - }; ---- a/drivers/cpufreq/cpufreq.c -+++ b/drivers/cpufreq/cpufreq.c -@@ -766,7 +766,7 @@ static void cpufreq_sysfs_release(struct - complete(&policy->kobj_unregister); - } - --static struct sysfs_ops sysfs_ops = { -+static const struct sysfs_ops sysfs_ops = { - .show = show, - .store = store, - }; ---- a/drivers/cpuidle/sysfs.c -+++ b/drivers/cpuidle/sysfs.c -@@ -195,7 +195,7 @@ static ssize_t cpuidle_store(struct kobj - return ret; - } - --static struct sysfs_ops cpuidle_sysfs_ops = { -+static const struct sysfs_ops cpuidle_sysfs_ops = { - .show = cpuidle_show, - .store = cpuidle_store, - }; -@@ -281,7 +281,7 @@ static ssize_t cpuidle_state_show(struct - return ret; - } - --static struct sysfs_ops cpuidle_state_sysfs_ops = { -+static const struct sysfs_ops cpuidle_state_sysfs_ops = { - .show = cpuidle_state_show, - }; - ---- a/drivers/dma/ioat/dma.c -+++ b/drivers/dma/ioat/dma.c -@@ -1138,7 +1138,7 @@ ioat_attr_show(struct kobject *kobj, str - return entry->show(&chan->common, page); - } - --struct sysfs_ops ioat_sysfs_ops = { -+const struct sysfs_ops ioat_sysfs_ops = { - .show = ioat_attr_show, - }; - ---- a/drivers/dma/ioat/dma.h -+++ b/drivers/dma/ioat/dma.h -@@ -346,7 +346,7 @@ bool ioat_cleanup_preamble(struct ioat_c - unsigned long *phys_complete); - void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type); - void ioat_kobject_del(struct ioatdma_device *device); --extern struct sysfs_ops ioat_sysfs_ops; -+extern const struct sysfs_ops ioat_sysfs_ops; - extern struct ioat_sysfs_entry ioat_version_attr; - extern struct ioat_sysfs_entry ioat_cap_attr; - #endif /* IOATDMA_H */ ---- a/drivers/edac/edac_device_sysfs.c -+++ b/drivers/edac/edac_device_sysfs.c -@@ -137,7 +137,7 @@ static ssize_t edac_dev_ctl_info_store(s - } - - /* edac_dev file operations for an 'ctl_info' */ --static struct sysfs_ops device_ctl_info_ops = { -+static const struct sysfs_ops device_ctl_info_ops = { - .show = edac_dev_ctl_info_show, - .store = edac_dev_ctl_info_store - }; -@@ -373,7 +373,7 @@ static ssize_t edac_dev_instance_store(s - } - - /* edac_dev file operations for an 'instance' */ --static struct sysfs_ops device_instance_ops = { -+static const struct sysfs_ops device_instance_ops = { - .show = edac_dev_instance_show, - .store = edac_dev_instance_store - }; -@@ -476,7 +476,7 @@ static ssize_t edac_dev_block_store(stru - } - - /* edac_dev file operations for a 'block' */ --static struct sysfs_ops device_block_ops = { -+static const struct sysfs_ops device_block_ops = { - .show = edac_dev_block_show, - .store = edac_dev_block_store - }; ---- a/drivers/edac/edac_mc_sysfs.c -+++ b/drivers/edac/edac_mc_sysfs.c -@@ -245,7 +245,7 @@ static ssize_t csrowdev_store(struct kob - return -EIO; - } - --static struct sysfs_ops csrowfs_ops = { -+static const struct sysfs_ops csrowfs_ops = { - .show = csrowdev_show, - .store = csrowdev_store - }; -@@ -575,7 +575,7 @@ static ssize_t mcidev_store(struct kobje - } - - /* Intermediate show/store table */ --static struct sysfs_ops mci_ops = { -+static const struct sysfs_ops mci_ops = { - .show = mcidev_show, - .store = mcidev_store - }; ---- a/drivers/edac/edac_pci_sysfs.c -+++ b/drivers/edac/edac_pci_sysfs.c -@@ -121,7 +121,7 @@ static ssize_t edac_pci_instance_store(s - } - - /* fs_ops table */ --static struct sysfs_ops pci_instance_ops = { -+static const struct sysfs_ops pci_instance_ops = { - .show = edac_pci_instance_show, - .store = edac_pci_instance_store - }; -@@ -261,7 +261,7 @@ static ssize_t edac_pci_dev_store(struct - return -EIO; - } - --static struct sysfs_ops edac_pci_sysfs_ops = { -+static const struct sysfs_ops edac_pci_sysfs_ops = { - .show = edac_pci_dev_show, - .store = edac_pci_dev_store - }; ---- a/drivers/firmware/edd.c -+++ b/drivers/firmware/edd.c -@@ -122,7 +122,7 @@ edd_attr_show(struct kobject * kobj, str - return ret; - } - --static struct sysfs_ops edd_attr_ops = { -+static const struct sysfs_ops edd_attr_ops = { - .show = edd_attr_show, - }; - ---- a/drivers/firmware/efivars.c -+++ b/drivers/firmware/efivars.c -@@ -362,7 +362,7 @@ static ssize_t efivar_attr_store(struct - return ret; - } - --static struct sysfs_ops efivar_attr_ops = { -+static const struct sysfs_ops efivar_attr_ops = { - .show = efivar_attr_show, - .store = efivar_attr_store, - }; ---- a/drivers/firmware/iscsi_ibft.c -+++ b/drivers/firmware/iscsi_ibft.c -@@ -519,7 +519,7 @@ static ssize_t ibft_show_attribute(struc - return ret; - } - --static struct sysfs_ops ibft_attr_ops = { -+static const struct sysfs_ops ibft_attr_ops = { - .show = ibft_show_attribute, - }; - ---- a/drivers/firmware/memmap.c -+++ b/drivers/firmware/memmap.c -@@ -74,7 +74,7 @@ static struct attribute *def_attrs[] = { - NULL - }; - --static struct sysfs_ops memmap_attr_ops = { -+static const struct sysfs_ops memmap_attr_ops = { - .show = memmap_attr_show, - }; - ---- a/drivers/gpu/drm/ttm/ttm_bo.c -+++ b/drivers/gpu/drm/ttm/ttm_bo.c -@@ -128,7 +128,7 @@ static struct attribute *ttm_bo_global_a - NULL - }; - --static struct sysfs_ops ttm_bo_global_ops = { -+static const struct sysfs_ops ttm_bo_global_ops = { - .show = &ttm_bo_global_show - }; - ---- a/drivers/gpu/drm/ttm/ttm_memory.c -+++ b/drivers/gpu/drm/ttm/ttm_memory.c -@@ -152,7 +152,7 @@ static struct attribute *ttm_mem_zone_at - NULL - }; - --static struct sysfs_ops ttm_mem_zone_ops = { -+static const struct sysfs_ops ttm_mem_zone_ops = { - .show = &ttm_mem_zone_show, - .store = &ttm_mem_zone_store - }; ---- a/drivers/infiniband/core/cm.c -+++ b/drivers/infiniband/core/cm.c -@@ -3597,7 +3597,7 @@ static ssize_t cm_show_counter(struct ko - atomic_long_read(&group->counter[cm_attr->index])); - } - --static struct sysfs_ops cm_counter_ops = { -+static const struct sysfs_ops cm_counter_ops = { - .show = cm_show_counter - }; - ---- a/drivers/infiniband/core/sysfs.c -+++ b/drivers/infiniband/core/sysfs.c -@@ -79,7 +79,7 @@ static ssize_t port_attr_show(struct kob - return port_attr->show(p, port_attr, buf); - } - --static struct sysfs_ops port_sysfs_ops = { -+static const struct sysfs_ops port_sysfs_ops = { - .show = port_attr_show - }; - ---- a/drivers/md/dm-sysfs.c -+++ b/drivers/md/dm-sysfs.c -@@ -75,7 +75,7 @@ static struct attribute *dm_attrs[] = { - NULL, - }; - --static struct sysfs_ops dm_sysfs_ops = { -+static const struct sysfs_ops dm_sysfs_ops = { - .show = dm_attr_show, - }; - ---- a/drivers/md/md.c -+++ b/drivers/md/md.c -@@ -2642,7 +2642,7 @@ static void rdev_free(struct kobject *ko - mdk_rdev_t *rdev = container_of(ko, mdk_rdev_t, kobj); - kfree(rdev); - } --static struct sysfs_ops rdev_sysfs_ops = { -+static const struct sysfs_ops rdev_sysfs_ops = { - .show = rdev_attr_show, - .store = rdev_attr_store, - }; -@@ -4059,7 +4059,7 @@ static void md_free(struct kobject *ko) - kfree(mddev); - } - --static struct sysfs_ops md_sysfs_ops = { -+static const struct sysfs_ops md_sysfs_ops = { - .show = md_attr_show, - .store = md_attr_store, - }; ---- a/drivers/net/ibmveth.c -+++ b/drivers/net/ibmveth.c -@@ -1577,7 +1577,7 @@ static struct attribute * veth_pool_attr - NULL, - }; - --static struct sysfs_ops veth_pool_ops = { -+static const struct sysfs_ops veth_pool_ops = { - .show = veth_pool_show, - .store = veth_pool_store, - }; ---- a/drivers/net/iseries_veth.c -+++ b/drivers/net/iseries_veth.c -@@ -384,7 +384,7 @@ static struct attribute *veth_cnx_defaul - NULL - }; - --static struct sysfs_ops veth_cnx_sysfs_ops = { -+static const struct sysfs_ops veth_cnx_sysfs_ops = { - .show = veth_cnx_attribute_show - }; - -@@ -441,7 +441,7 @@ static struct attribute *veth_port_defau - NULL - }; - --static struct sysfs_ops veth_port_sysfs_ops = { -+static const struct sysfs_ops veth_port_sysfs_ops = { - .show = veth_port_attribute_show - }; - ---- a/drivers/parisc/pdc_stable.c -+++ b/drivers/parisc/pdc_stable.c -@@ -481,7 +481,7 @@ pdcspath_attr_store(struct kobject *kobj - return ret; - } - --static struct sysfs_ops pdcspath_attr_ops = { -+static const struct sysfs_ops pdcspath_attr_ops = { - .show = pdcspath_attr_show, - .store = pdcspath_attr_store, - }; ---- a/drivers/pci/hotplug/fakephp.c -+++ b/drivers/pci/hotplug/fakephp.c -@@ -73,7 +73,7 @@ static void legacy_release(struct kobjec - } - - static struct kobj_type legacy_ktype = { -- .sysfs_ops = &(struct sysfs_ops){ -+ .sysfs_ops = &(const struct sysfs_ops){ - .store = legacy_store, .show = legacy_show - }, - .release = &legacy_release, ---- a/drivers/pci/slot.c -+++ b/drivers/pci/slot.c -@@ -29,7 +29,7 @@ static ssize_t pci_slot_attr_store(struc - return attribute->store ? attribute->store(slot, buf, len) : -EIO; - } - --static struct sysfs_ops pci_slot_sysfs_ops = { -+static const struct sysfs_ops pci_slot_sysfs_ops = { - .show = pci_slot_attr_show, - .store = pci_slot_attr_store, - }; ---- a/drivers/uio/uio.c -+++ b/drivers/uio/uio.c -@@ -129,7 +129,7 @@ static ssize_t map_type_show(struct kobj - return entry->show(mem, buf); - } - --static struct sysfs_ops map_sysfs_ops = { -+static const struct sysfs_ops map_sysfs_ops = { - .show = map_type_show, - }; - -@@ -217,7 +217,7 @@ static ssize_t portio_type_show(struct k - return entry->show(port, buf); - } - --static struct sysfs_ops portio_sysfs_ops = { -+static const struct sysfs_ops portio_sysfs_ops = { - .show = portio_type_show, - }; - ---- a/drivers/uwb/wlp/sysfs.c -+++ b/drivers/uwb/wlp/sysfs.c -@@ -615,8 +615,7 @@ ssize_t wlp_wss_attr_store(struct kobjec - return ret; - } - --static --struct sysfs_ops wss_sysfs_ops = { -+static const struct sysfs_ops wss_sysfs_ops = { - .show = wlp_wss_attr_show, - .store = wlp_wss_attr_store, - }; ---- a/drivers/video/omap2/dss/manager.c -+++ b/drivers/video/omap2/dss/manager.c -@@ -341,7 +341,7 @@ static ssize_t manager_attr_store(struct - return manager_attr->store(manager, buf, size); - } - --static struct sysfs_ops manager_sysfs_ops = { -+static const struct sysfs_ops manager_sysfs_ops = { - .show = manager_attr_show, - .store = manager_attr_store, - }; ---- a/drivers/video/omap2/dss/overlay.c -+++ b/drivers/video/omap2/dss/overlay.c -@@ -320,7 +320,7 @@ static ssize_t overlay_attr_store(struct - return overlay_attr->store(overlay, buf, size); - } - --static struct sysfs_ops overlay_sysfs_ops = { -+static const struct sysfs_ops overlay_sysfs_ops = { - .show = overlay_attr_show, - .store = overlay_attr_store, - }; ---- a/drivers/xen/sys-hypervisor.c -+++ b/drivers/xen/sys-hypervisor.c -@@ -426,7 +426,7 @@ static ssize_t hyp_sysfs_store(struct ko - return 0; - } - --static struct sysfs_ops hyp_sysfs_ops = { -+static const struct sysfs_ops hyp_sysfs_ops = { - .show = hyp_sysfs_show, - .store = hyp_sysfs_store, - }; ---- a/fs/btrfs/sysfs.c -+++ b/fs/btrfs/sysfs.c -@@ -164,12 +164,12 @@ static void btrfs_root_release(struct ko - complete(&root->kobj_unregister); - } - --static struct sysfs_ops btrfs_super_attr_ops = { -+static const struct sysfs_ops btrfs_super_attr_ops = { - .show = btrfs_super_attr_show, - .store = btrfs_super_attr_store, - }; - --static struct sysfs_ops btrfs_root_attr_ops = { -+static const struct sysfs_ops btrfs_root_attr_ops = { - .show = btrfs_root_attr_show, - .store = btrfs_root_attr_store, - }; ---- a/fs/dlm/lockspace.c -+++ b/fs/dlm/lockspace.c -@@ -148,7 +148,7 @@ static void lockspace_kobj_release(struc - kfree(ls); - } - --static struct sysfs_ops dlm_attr_ops = { -+static const struct sysfs_ops dlm_attr_ops = { - .show = dlm_attr_show, - .store = dlm_attr_store, - }; ---- a/fs/ext4/super.c -+++ b/fs/ext4/super.c -@@ -2358,7 +2358,7 @@ static void ext4_sb_release(struct kobje - } - - --static struct sysfs_ops ext4_attr_ops = { -+static const struct sysfs_ops ext4_attr_ops = { - .show = ext4_attr_show, - .store = ext4_attr_store, - }; ---- a/fs/gfs2/sys.c -+++ b/fs/gfs2/sys.c -@@ -49,7 +49,7 @@ static ssize_t gfs2_attr_store(struct ko - return a->store ? a->store(sdp, buf, len) : len; - } - --static struct sysfs_ops gfs2_attr_ops = { -+static const struct sysfs_ops gfs2_attr_ops = { - .show = gfs2_attr_show, - .store = gfs2_attr_store, - }; ---- a/fs/ocfs2/cluster/masklog.c -+++ b/fs/ocfs2/cluster/masklog.c -@@ -136,7 +136,7 @@ static ssize_t mlog_store(struct kobject - return mlog_mask_store(mlog_attr->mask, buf, count); - } - --static struct sysfs_ops mlog_attr_ops = { -+static const struct sysfs_ops mlog_attr_ops = { - .show = mlog_show, - .store = mlog_store, - }; ---- a/fs/sysfs/file.c -+++ b/fs/sysfs/file.c -@@ -53,7 +53,7 @@ struct sysfs_buffer { - size_t count; - loff_t pos; - char * page; -- struct sysfs_ops * ops; -+ const struct sysfs_ops * ops; - struct mutex mutex; - int needs_read_fill; - int event; -@@ -75,7 +75,7 @@ static int fill_read_buffer(struct dentr - { - struct sysfs_dirent *attr_sd = dentry->d_fsdata; - struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; -- struct sysfs_ops * ops = buffer->ops; -+ const struct sysfs_ops * ops = buffer->ops; - int ret = 0; - ssize_t count; - -@@ -199,7 +199,7 @@ flush_write_buffer(struct dentry * dentr - { - struct sysfs_dirent *attr_sd = dentry->d_fsdata; - struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; -- struct sysfs_ops * ops = buffer->ops; -+ const struct sysfs_ops * ops = buffer->ops; - int rc; - - /* need attr_sd for attr and ops, its parent for kobj */ -@@ -335,7 +335,7 @@ static int sysfs_open_file(struct inode - struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; - struct kobject *kobj = attr_sd->s_parent->s_dir.kobj; - struct sysfs_buffer *buffer; -- struct sysfs_ops *ops; -+ const struct sysfs_ops *ops; - int error = -EACCES; - char *p; - ---- a/include/linux/kobject.h -+++ b/include/linux/kobject.h -@@ -106,7 +106,7 @@ extern char *kobject_get_path(struct kob - - struct kobj_type { - void (*release)(struct kobject *kobj); -- struct sysfs_ops *sysfs_ops; -+ const struct sysfs_ops *sysfs_ops; - struct attribute **default_attrs; - }; - -@@ -132,7 +132,7 @@ struct kobj_attribute { - const char *buf, size_t count); - }; - --extern struct sysfs_ops kobj_sysfs_ops; -+extern const struct sysfs_ops kobj_sysfs_ops; - - /** - * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem. ---- a/kernel/params.c -+++ b/kernel/params.c -@@ -722,7 +722,7 @@ static ssize_t module_attr_store(struct - return ret; - } - --static struct sysfs_ops module_sysfs_ops = { -+static const struct sysfs_ops module_sysfs_ops = { - .show = module_attr_show, - .store = module_attr_store, - }; ---- a/lib/kobject.c -+++ b/lib/kobject.c -@@ -700,7 +700,7 @@ static ssize_t kobj_attr_store(struct ko - return ret; - } - --struct sysfs_ops kobj_sysfs_ops = { -+const struct sysfs_ops kobj_sysfs_ops = { - .show = kobj_attr_show, - .store = kobj_attr_store, - }; ---- a/mm/slub.c -+++ b/mm/slub.c -@@ -4390,7 +4390,7 @@ static void kmem_cache_release(struct ko - kfree(s); - } - --static struct sysfs_ops slab_sysfs_ops = { -+static const struct sysfs_ops slab_sysfs_ops = { - .show = slab_attr_show, - .store = slab_attr_store, - }; ---- a/net/bridge/br_private.h -+++ b/net/bridge/br_private.h -@@ -423,7 +423,7 @@ extern void br_ifinfo_notify(int event, - - #ifdef CONFIG_SYSFS - /* br_sysfs_if.c */ --extern struct sysfs_ops brport_sysfs_ops; -+extern const struct sysfs_ops brport_sysfs_ops; - extern int br_sysfs_addif(struct net_bridge_port *p); - - /* br_sysfs_br.c */ ---- a/net/bridge/br_sysfs_if.c -+++ b/net/bridge/br_sysfs_if.c -@@ -238,7 +238,7 @@ static ssize_t brport_store(struct kobje - return ret; - } - --struct sysfs_ops brport_sysfs_ops = { -+const struct sysfs_ops brport_sysfs_ops = { - .show = brport_show, - .store = brport_store, - }; ---- a/samples/kobject/kset-example.c -+++ b/samples/kobject/kset-example.c -@@ -87,7 +87,7 @@ static ssize_t foo_attr_store(struct kob - } - - /* Our custom sysfs_ops that we will associate with our ktype later on */ --static struct sysfs_ops foo_sysfs_ops = { -+static const struct sysfs_ops foo_sysfs_ops = { - .show = foo_attr_show, - .store = foo_attr_store, - }; diff --git a/driver-core/driver-core-convert-some-drivers-to-class_attr_string.patch b/driver-core/driver-core-convert-some-drivers-to-class_attr_string.patch deleted file mode 100644 index 2979401f523189..00000000000000 --- a/driver-core/driver-core-convert-some-drivers-to-class_attr_string.patch +++ /dev/null @@ -1,252 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:47:02 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:09 +0100 (CET) -Subject: driver core: Convert some drivers to CLASS_ATTR_STRING -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114809.95C3EB17C2@basil.firstfloor.org> - - - -Convert some drivers who export a single string as class attribute -to the new class_attr_string functions. This removes redundant -code all over. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/gpu/drm/drm_sysfs.c | 19 ++++++++----------- - drivers/infiniband/core/ucm.c | 15 +++++---------- - drivers/infiniband/core/user_mad.c | 11 +++-------- - drivers/infiniband/core/uverbs_main.c | 11 +++-------- - drivers/misc/phantom.c | 13 ++++--------- - drivers/staging/asus_oled/asus_oled.c | 15 ++++----------- - 6 files changed, 27 insertions(+), 57 deletions(-) - ---- a/drivers/gpu/drm/drm_sysfs.c -+++ b/drivers/gpu/drm/drm_sysfs.c -@@ -70,20 +70,17 @@ static int drm_class_resume(struct devic - return 0; - } - --/* Display the version of drm_core. This doesn't work right in current design */ --static ssize_t version_show(struct class *dev, struct class_attribute *attr, -- char *buf) --{ -- return sprintf(buf, "%s %d.%d.%d %s\n", CORE_NAME, CORE_MAJOR, -- CORE_MINOR, CORE_PATCHLEVEL, CORE_DATE); --} -- - static char *drm_devnode(struct device *dev, mode_t *mode) - { - return kasprintf(GFP_KERNEL, "dri/%s", dev_name(dev)); - } - --static CLASS_ATTR(version, S_IRUGO, version_show, NULL); -+static CLASS_ATTR_STRING(version, S_IRUGO, -+ CORE_NAME " " -+ __stringify(CORE_MAJOR) "." -+ __stringify(CORE_MINOR) "." -+ __stringify(CORE_PATCHLEVEL) " " -+ CORE_DATE); - - /** - * drm_sysfs_create - create a struct drm_sysfs_class structure -@@ -110,7 +107,7 @@ struct class *drm_sysfs_create(struct mo - class->suspend = drm_class_suspend; - class->resume = drm_class_resume; - -- err = class_create_file(class, &class_attr_version); -+ err = class_create_file(class, &class_attr_version.attr); - if (err) - goto err_out_class; - -@@ -133,7 +130,7 @@ void drm_sysfs_destroy(void) - { - if ((drm_class == NULL) || (IS_ERR(drm_class))) - return; -- class_remove_file(drm_class, &class_attr_version); -+ class_remove_file(drm_class, &class_attr_version.attr); - class_destroy(drm_class); - } - ---- a/drivers/infiniband/core/ucm.c -+++ b/drivers/infiniband/core/ucm.c -@@ -1336,13 +1336,8 @@ static void ib_ucm_remove_one(struct ib_ - device_unregister(&ucm_dev->dev); - } - --static ssize_t show_abi_version(struct class *class, -- struct class_attribute *attr, -- char *buf) --{ -- return sprintf(buf, "%d\n", IB_USER_CM_ABI_VERSION); --} --static CLASS_ATTR(abi_version, S_IRUGO, show_abi_version, NULL); -+static CLASS_ATTR_STRING(abi_version, S_IRUGO, -+ __stringify(IB_USER_CM_ABI_VERSION)); - - static int __init ib_ucm_init(void) - { -@@ -1355,7 +1350,7 @@ static int __init ib_ucm_init(void) - goto error1; - } - -- ret = class_create_file(&cm_class, &class_attr_abi_version); -+ ret = class_create_file(&cm_class, &class_attr_abi_version.attr); - if (ret) { - printk(KERN_ERR "ucm: couldn't create abi_version attribute\n"); - goto error2; -@@ -1369,7 +1364,7 @@ static int __init ib_ucm_init(void) - return 0; - - error3: -- class_remove_file(&cm_class, &class_attr_abi_version); -+ class_remove_file(&cm_class, &class_attr_abi_version.attr); - error2: - unregister_chrdev_region(IB_UCM_BASE_DEV, IB_UCM_MAX_DEVICES); - error1: -@@ -1379,7 +1374,7 @@ error1: - static void __exit ib_ucm_cleanup(void) - { - ib_unregister_client(&ucm_client); -- class_remove_file(&cm_class, &class_attr_abi_version); -+ class_remove_file(&cm_class, &class_attr_abi_version.attr); - unregister_chrdev_region(IB_UCM_BASE_DEV, IB_UCM_MAX_DEVICES); - if (overflow_maj) - unregister_chrdev_region(overflow_maj, IB_UCM_MAX_DEVICES); ---- a/drivers/infiniband/core/user_mad.c -+++ b/drivers/infiniband/core/user_mad.c -@@ -965,13 +965,8 @@ static ssize_t show_port(struct device * - } - static DEVICE_ATTR(port, S_IRUGO, show_port, NULL); - --static ssize_t show_abi_version(struct class *class, -- struct class_attribute *attr, -- char *buf) --{ -- return sprintf(buf, "%d\n", IB_USER_MAD_ABI_VERSION); --} --static CLASS_ATTR(abi_version, S_IRUGO, show_abi_version, NULL); -+static CLASS_ATTR_STRING(abi_version, S_IRUGO, -+ __stringify(IB_USER_MAD_ABI_VERSION)); - - static dev_t overflow_maj; - static DECLARE_BITMAP(overflow_map, IB_UMAD_MAX_PORTS); -@@ -1196,7 +1191,7 @@ static int __init ib_umad_init(void) - goto out_chrdev; - } - -- ret = class_create_file(umad_class, &class_attr_abi_version); -+ ret = class_create_file(umad_class, &class_attr_abi_version.attr); - if (ret) { - printk(KERN_ERR "user_mad: couldn't create abi_version attribute\n"); - goto out_class; ---- a/drivers/infiniband/core/uverbs_main.c -+++ b/drivers/infiniband/core/uverbs_main.c -@@ -691,13 +691,8 @@ static ssize_t show_dev_abi_version(stru - } - static DEVICE_ATTR(abi_version, S_IRUGO, show_dev_abi_version, NULL); - --static ssize_t show_abi_version(struct class *class, -- struct class_attribute *attr, -- char *buf) --{ -- return sprintf(buf, "%d\n", IB_USER_VERBS_ABI_VERSION); --} --static CLASS_ATTR(abi_version, S_IRUGO, show_abi_version, NULL); -+static CLASS_ATTR_STRING(abi_version, S_IRUGO, -+ __stringify(IB_USER_VERBS_ABI_VERSION)); - - static dev_t overflow_maj; - static DECLARE_BITMAP(overflow_map, IB_UVERBS_MAX_DEVICES); -@@ -843,7 +838,7 @@ static int __init ib_uverbs_init(void) - goto out_chrdev; - } - -- ret = class_create_file(uverbs_class, &class_attr_abi_version); -+ ret = class_create_file(uverbs_class, &class_attr_abi_version.attr); - if (ret) { - printk(KERN_ERR "user_verbs: couldn't create abi_version attribute\n"); - goto out_class; ---- a/drivers/misc/phantom.c -+++ b/drivers/misc/phantom.c -@@ -497,12 +497,7 @@ static struct pci_driver phantom_pci_dri - .resume = phantom_resume - }; - --static ssize_t phantom_show_version(struct class *cls, struct class_attribute *attr, char *buf) --{ -- return sprintf(buf, PHANTOM_VERSION "\n"); --} -- --static CLASS_ATTR(version, 0444, phantom_show_version, NULL); -+static CLASS_ATTR_STRING(version, 0444, PHANTOM_VERSION); - - static int __init phantom_init(void) - { -@@ -515,7 +510,7 @@ static int __init phantom_init(void) - printk(KERN_ERR "phantom: can't register phantom class\n"); - goto err; - } -- retval = class_create_file(phantom_class, &class_attr_version); -+ retval = class_create_file(phantom_class, &class_attr_version.attr); - if (retval) { - printk(KERN_ERR "phantom: can't create sysfs version file\n"); - goto err_class; -@@ -541,7 +536,7 @@ static int __init phantom_init(void) - err_unchr: - unregister_chrdev_region(dev, PHANTOM_MAX_MINORS); - err_attr: -- class_remove_file(phantom_class, &class_attr_version); -+ class_remove_file(phantom_class, &class_attr_version.attr); - err_class: - class_destroy(phantom_class); - err: -@@ -554,7 +549,7 @@ static void __exit phantom_exit(void) - - unregister_chrdev_region(MKDEV(phantom_major, 0), PHANTOM_MAX_MINORS); - -- class_remove_file(phantom_class, &class_attr_version); -+ class_remove_file(phantom_class, &class_attr_version.attr); - class_destroy(phantom_class); - - pr_debug("phantom: module successfully removed\n"); ---- a/drivers/staging/asus_oled/asus_oled.c -+++ b/drivers/staging/asus_oled/asus_oled.c -@@ -770,15 +770,8 @@ static struct usb_driver oled_driver = { - .id_table = id_table, - }; - --static ssize_t version_show(struct class *dev, -- struct class_attribute *attr, -- char *buf) --{ -- return sprintf(buf, ASUS_OLED_UNDERSCORE_NAME " %s\n", -- ASUS_OLED_VERSION); --} -- --static CLASS_ATTR(version, S_IRUGO, version_show, NULL); -+static CLASS_ATTR_STRING(version, S_IRUGO, -+ ASUS_OLED_UNDERSCORE_NAME " " ASUS_OLED_VERSION); - - static int __init asus_oled_init(void) - { -@@ -790,7 +783,7 @@ static int __init asus_oled_init(void) - return PTR_ERR(oled_class); - } - -- retval = class_create_file(oled_class, &class_attr_version); -+ retval = class_create_file(oled_class, &class_attr_version.attr); - if (retval) { - err("Error creating class version file"); - goto error; -@@ -812,7 +805,7 @@ error: - - static void __exit asus_oled_exit(void) - { -- class_remove_file(oled_class, &class_attr_version); -+ class_remove_file(oled_class, &class_attr_version.attr); - class_destroy(oled_class); - - usb_deregister(&oled_driver); diff --git a/driver-core/driver-core-create-lock-unlock-functions-for-struct-device.patch b/driver-core/driver-core-create-lock-unlock-functions-for-struct-device.patch deleted file mode 100644 index aa1eafcede2739..00000000000000 --- a/driver-core/driver-core-create-lock-unlock-functions-for-struct-device.patch +++ /dev/null @@ -1,526 +0,0 @@ -From foo@baz Wed Feb 17 10:57:05 PST 2010 -Date: Wed, 17 Feb 2010 10:57:05 -0800 -To: Greg KH <greg@kroah.com> -From: Greg Kroah-Hartman <gregkh@suse.de> -Subject: Driver core: create lock/unlock functions for struct device - -In the future, we are going to be changing the lock type for struct -device (once we get the lockdep infrastructure properly worked out) To -make that changeover easier, and to possibly burry the lock in a -different part of struct device, let's create some functions to lock and -unlock a device so that no out-of-core code needs to be changed in the -future. - -This patch creates the device_lock/unlock/trylock() functions, and -converts all in-tree users to them. - -Cc: Thomas Gleixner <tglx@linutronix.de> -Cc: Jean Delvare <khali@linux-fr.org> -Cc: Dave Young <hidave.darkstar@gmail.com> -Cc: Ming Lei <tom.leiming@gmail.com> -Cc: Jiri Kosina <jkosina@suse.cz> -Cc: Phil Carmody <ext-phil.2.carmody@nokia.com> -Cc: Arjan van de Ven <arjan@linux.intel.com> -Cc: Cornelia Huck <cornelia.huck@de.ibm.com> -Cc: Rafael J. Wysocki <rjw@sisk.pl> -Cc: Pavel Machek <pavel@ucw.cz> -Cc: Len Brown <len.brown@intel.com> -Cc: Magnus Damm <damm@igel.co.jp> -Cc: Alan Stern <stern@rowland.harvard.edu> -Cc: Randy Dunlap <randy.dunlap@oracle.com> -Cc: Stefan Richter <stefanr@s5r6.in-berlin.de> -Cc: David Brownell <dbrownell@users.sourceforge.net> -Cc: Vegard Nossum <vegard.nossum@gmail.com> -Cc: Jesse Barnes <jbarnes@virtuousgeek.org> -Cc: Alex Chiang <achiang@hp.com> -Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> -Cc: Andrew Morton <akpm@linux-foundation.org> -Cc: Andrew Patterson <andrew.patterson@hp.com> -Cc: Yu Zhao <yu.zhao@intel.com> -Cc: Dominik Brodowski <linux@dominikbrodowski.net> -Cc: Samuel Ortiz <sameo@linux.intel.com> -Cc: Wolfram Sang <w.sang@pengutronix.de> -Cc: CHENG Renquan <rqcheng@smu.edu.sg> -Cc: Oliver Neukum <oliver@neukum.org> -Cc: Frans Pop <elendil@planet.nl> -Cc: David Vrabel <david.vrabel@csr.com> -Cc: Kay Sievers <kay.sievers@vrfy.org> -Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/bus.c | 20 ++++++++++---------- - drivers/base/dd.c | 38 +++++++++++++++++++------------------- - drivers/base/power/main.c | 20 ++++++++++---------- - drivers/firewire/core-device.c | 5 ++--- - drivers/ieee1394/nodemgr.c | 5 ++--- - drivers/pci/bus.c | 4 ++-- - drivers/pci/pci.c | 4 ++-- - drivers/pcmcia/ds.c | 8 ++++---- - drivers/usb/core/driver.c | 4 ++-- - drivers/uwb/umc-bus.c | 4 ++-- - drivers/uwb/uwb-internal.h | 4 ++-- - include/linux/device.h | 17 ++++++++++++++++- - include/linux/usb.h | 6 +++--- - 13 files changed, 76 insertions(+), 63 deletions(-) - ---- a/drivers/base/bus.c -+++ b/drivers/base/bus.c -@@ -173,10 +173,10 @@ static ssize_t driver_unbind(struct devi - dev = bus_find_device_by_name(bus, NULL, buf); - if (dev && dev->driver == drv) { - if (dev->parent) /* Needed for USB */ -- down(&dev->parent->sem); -+ device_lock(dev->parent); - device_release_driver(dev); - if (dev->parent) -- up(&dev->parent->sem); -+ device_unlock(dev->parent); - err = count; - } - put_device(dev); -@@ -200,12 +200,12 @@ static ssize_t driver_bind(struct device - dev = bus_find_device_by_name(bus, NULL, buf); - if (dev && dev->driver == NULL && driver_match_device(drv, dev)) { - if (dev->parent) /* Needed for USB */ -- down(&dev->parent->sem); -- down(&dev->sem); -+ device_lock(dev->parent); -+ device_lock(dev); - err = driver_probe_device(drv, dev); -- up(&dev->sem); -+ device_unlock(dev); - if (dev->parent) -- up(&dev->parent->sem); -+ device_unlock(dev->parent); - - if (err > 0) { - /* success */ -@@ -744,10 +744,10 @@ static int __must_check bus_rescan_devic - - if (!dev->driver) { - if (dev->parent) /* Needed for USB */ -- down(&dev->parent->sem); -+ device_lock(dev->parent); - ret = device_attach(dev); - if (dev->parent) -- up(&dev->parent->sem); -+ device_unlock(dev->parent); - } - return ret < 0 ? ret : 0; - } -@@ -779,10 +779,10 @@ int device_reprobe(struct device *dev) - { - if (dev->driver) { - if (dev->parent) /* Needed for USB */ -- down(&dev->parent->sem); -+ device_lock(dev->parent); - device_release_driver(dev); - if (dev->parent) -- up(&dev->parent->sem); -+ device_unlock(dev->parent); - } - return bus_rescan_devices_helper(dev, NULL); - } ---- a/drivers/base/dd.c -+++ b/drivers/base/dd.c -@@ -85,7 +85,7 @@ static void driver_sysfs_remove(struct d - * for before calling this. (It is ok to call with no other effort - * from a driver's probe() method.) - * -- * This function must be called with @dev->sem held. -+ * This function must be called with the device lock held. - */ - int device_bind_driver(struct device *dev) - { -@@ -190,8 +190,8 @@ EXPORT_SYMBOL_GPL(wait_for_device_probe) - * This function returns -ENODEV if the device is not registered, - * 1 if the device is bound successfully and 0 otherwise. - * -- * This function must be called with @dev->sem held. When called for a -- * USB interface, @dev->parent->sem must be held as well. -+ * This function must be called with @dev lock held. When called for a -+ * USB interface, @dev->parent lock must be held as well. - */ - int driver_probe_device(struct device_driver *drv, struct device *dev) - { -@@ -233,13 +233,13 @@ static int __device_attach(struct device - * 0 if no matching driver was found; - * -ENODEV if the device is not registered. - * -- * When called for a USB interface, @dev->parent->sem must be held. -+ * When called for a USB interface, @dev->parent lock must be held. - */ - int device_attach(struct device *dev) - { - int ret = 0; - -- down(&dev->sem); -+ device_lock(dev); - if (dev->driver) { - ret = device_bind_driver(dev); - if (ret == 0) -@@ -253,7 +253,7 @@ int device_attach(struct device *dev) - ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach); - pm_runtime_put_sync(dev); - } -- up(&dev->sem); -+ device_unlock(dev); - return ret; - } - EXPORT_SYMBOL_GPL(device_attach); -@@ -276,13 +276,13 @@ static int __driver_attach(struct device - return 0; - - if (dev->parent) /* Needed for USB */ -- down(&dev->parent->sem); -- down(&dev->sem); -+ device_lock(dev->parent); -+ device_lock(dev); - if (!dev->driver) - driver_probe_device(drv, dev); -- up(&dev->sem); -+ device_unlock(dev); - if (dev->parent) -- up(&dev->parent->sem); -+ device_unlock(dev->parent); - - return 0; - } -@@ -303,8 +303,8 @@ int driver_attach(struct device_driver * - EXPORT_SYMBOL_GPL(driver_attach); - - /* -- * __device_release_driver() must be called with @dev->sem held. -- * When called for a USB interface, @dev->parent->sem must be held as well. -+ * __device_release_driver() must be called with @dev lock held. -+ * When called for a USB interface, @dev->parent lock must be held as well. - */ - static void __device_release_driver(struct device *dev) - { -@@ -343,7 +343,7 @@ static void __device_release_driver(stru - * @dev: device. - * - * Manually detach device from driver. -- * When called for a USB interface, @dev->parent->sem must be held. -+ * When called for a USB interface, @dev->parent lock must be held. - */ - void device_release_driver(struct device *dev) - { -@@ -352,9 +352,9 @@ void device_release_driver(struct device - * within their ->remove callback for the same device, they - * will deadlock right here. - */ -- down(&dev->sem); -+ device_lock(dev); - __device_release_driver(dev); -- up(&dev->sem); -+ device_unlock(dev); - } - EXPORT_SYMBOL_GPL(device_release_driver); - -@@ -381,13 +381,13 @@ void driver_detach(struct device_driver - spin_unlock(&drv->p->klist_devices.k_lock); - - if (dev->parent) /* Needed for USB */ -- down(&dev->parent->sem); -- down(&dev->sem); -+ device_lock(dev->parent); -+ device_lock(dev); - if (dev->driver == drv) - __device_release_driver(dev); -- up(&dev->sem); -+ device_unlock(dev); - if (dev->parent) -- up(&dev->parent->sem); -+ device_unlock(dev->parent); - put_device(dev); - } - } ---- a/drivers/base/power/main.c -+++ b/drivers/base/power/main.c -@@ -35,8 +35,8 @@ - * because children are guaranteed to be discovered after parents, and - * are inserted at the back of the list on discovery. - * -- * Since device_pm_add() may be called with a device semaphore held, -- * we must never try to acquire a device semaphore while holding -+ * Since device_pm_add() may be called with a device lock held, -+ * we must never try to acquire a device lock while holding - * dpm_list_mutex. - */ - -@@ -508,7 +508,7 @@ static int device_resume(struct device * - TRACE_RESUME(0); - - dpm_wait(dev->parent, async); -- down(&dev->sem); -+ device_lock(dev); - - dev->power.status = DPM_RESUMING; - -@@ -543,7 +543,7 @@ static int device_resume(struct device * - } - } - End: -- up(&dev->sem); -+ device_unlock(dev); - complete_all(&dev->power.completion); - - TRACE_RESUME(error); -@@ -629,7 +629,7 @@ static void dpm_resume(pm_message_t stat - */ - static void device_complete(struct device *dev, pm_message_t state) - { -- down(&dev->sem); -+ device_lock(dev); - - if (dev->class && dev->class->pm && dev->class->pm->complete) { - pm_dev_dbg(dev, state, "completing class "); -@@ -646,7 +646,7 @@ static void device_complete(struct devic - dev->bus->pm->complete(dev); - } - -- up(&dev->sem); -+ device_unlock(dev); - } - - /** -@@ -809,7 +809,7 @@ static int __device_suspend(struct devic - int error = 0; - - dpm_wait_for_children(dev, async); -- down(&dev->sem); -+ device_lock(dev); - - if (async_error) - goto End; -@@ -849,7 +849,7 @@ static int __device_suspend(struct devic - dev->power.status = DPM_OFF; - - End: -- up(&dev->sem); -+ device_unlock(dev); - complete_all(&dev->power.completion); - - return error; -@@ -938,7 +938,7 @@ static int device_prepare(struct device - { - int error = 0; - -- down(&dev->sem); -+ device_lock(dev); - - if (dev->bus && dev->bus->pm && dev->bus->pm->prepare) { - pm_dev_dbg(dev, state, "preparing "); -@@ -962,7 +962,7 @@ static int device_prepare(struct device - suspend_report_result(dev->class->pm->prepare, error); - } - End: -- up(&dev->sem); -+ device_unlock(dev); - - return error; - } ---- a/drivers/firewire/core-device.c -+++ b/drivers/firewire/core-device.c -@@ -33,7 +33,6 @@ - #include <linux/module.h> - #include <linux/mutex.h> - #include <linux/rwsem.h> --#include <linux/semaphore.h> - #include <linux/spinlock.h> - #include <linux/string.h> - #include <linux/workqueue.h> -@@ -828,9 +827,9 @@ static int update_unit(struct device *de - struct fw_driver *driver = (struct fw_driver *)dev->driver; - - if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) { -- down(&dev->sem); -+ device_lock(dev); - driver->update(unit); -- up(&dev->sem); -+ device_unlock(dev); - } - - return 0; ---- a/drivers/ieee1394/nodemgr.c -+++ b/drivers/ieee1394/nodemgr.c -@@ -19,7 +19,6 @@ - #include <linux/moduleparam.h> - #include <linux/mutex.h> - #include <linux/freezer.h> --#include <linux/semaphore.h> - #include <asm/atomic.h> - - #include "csr.h" -@@ -1397,9 +1396,9 @@ static int update_pdrv(struct device *de - pdrv = container_of(drv, struct hpsb_protocol_driver, - driver); - if (pdrv->update) { -- down(&ud->device.sem); -+ device_lock(&ud->device); - error = pdrv->update(ud); -- up(&ud->device.sem); -+ device_unlock(&ud->device); - } - if (error) - device_release_driver(&ud->device); ---- a/drivers/pci/bus.c -+++ b/drivers/pci/bus.c -@@ -288,9 +288,9 @@ void pci_walk_bus(struct pci_bus *top, i - next = dev->bus_list.next; - - /* Run device routines with the device locked */ -- down(&dev->dev.sem); -+ device_lock(&dev->dev); - retval = cb(dev, userdata); -- up(&dev->dev.sem); -+ device_unlock(&dev->dev); - if (retval) - break; - } ---- a/drivers/pci/pci.c -+++ b/drivers/pci/pci.c -@@ -2486,7 +2486,7 @@ static int pci_dev_reset(struct pci_dev - if (!probe) { - pci_block_user_cfg_access(dev); - /* block PM suspend, driver probe, etc. */ -- down(&dev->dev.sem); -+ device_lock(&dev->dev); - } - - rc = pci_dev_specific_reset(dev, probe); -@@ -2508,7 +2508,7 @@ static int pci_dev_reset(struct pci_dev - rc = pci_parent_bus_reset(dev, probe); - done: - if (!probe) { -- up(&dev->dev.sem); -+ device_unlock(&dev->dev); - pci_unblock_user_cfg_access(dev); - } - ---- a/drivers/pcmcia/ds.c -+++ b/drivers/pcmcia/ds.c -@@ -971,9 +971,9 @@ static int runtime_suspend(struct device - { - int rc; - -- down(&dev->sem); -+ device_lock(dev); - rc = pcmcia_dev_suspend(dev, PMSG_SUSPEND); -- up(&dev->sem); -+ device_unlock(dev); - return rc; - } - -@@ -981,9 +981,9 @@ static int runtime_resume(struct device - { - int rc; - -- down(&dev->sem); -+ device_lock(dev); - rc = pcmcia_dev_resume(dev); -- up(&dev->sem); -+ device_unlock(dev); - return rc; - } - ---- a/drivers/usb/core/driver.c -+++ b/drivers/usb/core/driver.c -@@ -489,10 +489,10 @@ void usb_driver_release_interface(struct - if (device_is_registered(dev)) { - device_release_driver(dev); - } else { -- down(&dev->sem); -+ device_lock(dev); - usb_unbind_interface(dev); - dev->driver = NULL; -- up(&dev->sem); -+ device_unlock(dev); - } - } - EXPORT_SYMBOL_GPL(usb_driver_release_interface); ---- a/drivers/uwb/umc-bus.c -+++ b/drivers/uwb/umc-bus.c -@@ -62,12 +62,12 @@ int umc_controller_reset(struct umc_dev - struct device *parent = umc->dev.parent; - int ret = 0; - -- if(down_trylock(&parent->sem)) -+ if (device_trylock(parent)) - return -EAGAIN; - ret = device_for_each_child(parent, parent, umc_bus_pre_reset_helper); - if (ret >= 0) - ret = device_for_each_child(parent, parent, umc_bus_post_reset_helper); -- up(&parent->sem); -+ device_unlock(parent); - - return ret; - } ---- a/drivers/uwb/uwb-internal.h -+++ b/drivers/uwb/uwb-internal.h -@@ -366,12 +366,12 @@ struct dentry *uwb_dbg_create_pal_dir(st - - static inline void uwb_dev_lock(struct uwb_dev *uwb_dev) - { -- down(&uwb_dev->dev.sem); -+ device_lock(&uwb_dev->dev); - } - - static inline void uwb_dev_unlock(struct uwb_dev *uwb_dev) - { -- up(&uwb_dev->dev.sem); -+ device_unlock(&uwb_dev->dev); - } - - #endif /* #ifndef __UWB_INTERNAL_H__ */ ---- a/include/linux/device.h -+++ b/include/linux/device.h -@@ -106,7 +106,7 @@ extern int bus_unregister_notifier(struc - - /* All 4 notifers below get called with the target struct device * - * as an argument. Note that those functions are likely to be called -- * with the device semaphore held in the core, so be careful. -+ * with the device lock held in the core, so be careful. - */ - #define BUS_NOTIFY_ADD_DEVICE 0x00000001 /* device added */ - #define BUS_NOTIFY_DEL_DEVICE 0x00000002 /* device removed */ -@@ -508,6 +508,21 @@ static inline bool device_async_suspend_ - return !!dev->power.async_suspend; - } - -+static inline void device_lock(struct device *dev) -+{ -+ down(&dev->sem); -+} -+ -+static inline int device_trylock(struct device *dev) -+{ -+ return down_trylock(&dev->sem); -+} -+ -+static inline void device_unlock(struct device *dev) -+{ -+ up(&dev->sem); -+} -+ - void driver_init(void); - - /* ---- a/include/linux/usb.h -+++ b/include/linux/usb.h -@@ -512,9 +512,9 @@ extern struct usb_device *usb_get_dev(st - extern void usb_put_dev(struct usb_device *dev); - - /* USB device locking */ --#define usb_lock_device(udev) down(&(udev)->dev.sem) --#define usb_unlock_device(udev) up(&(udev)->dev.sem) --#define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) -+#define usb_lock_device(udev) device_lock(&(udev)->dev) -+#define usb_unlock_device(udev) device_unlock(&(udev)->dev) -+#define usb_trylock_device(udev) device_trylock(&(udev)->dev) - extern int usb_lock_device_for_reset(struct usb_device *udev, - const struct usb_interface *iface); - diff --git a/driver-core/driver-core-devtmpfs-remove-experimental-and-enable-it-by-default.patch b/driver-core/driver-core-devtmpfs-remove-experimental-and-enable-it-by-default.patch deleted file mode 100644 index 24b805b7e0b2b8..00000000000000 --- a/driver-core/driver-core-devtmpfs-remove-experimental-and-enable-it-by-default.patch +++ /dev/null @@ -1,74 +0,0 @@ -From kay.sievers@vrfy.org Thu Jan 14 16:48:33 2010 -From: Kay Sievers <kay.sievers@vrfy.org> -Date: Thu, 14 Jan 2010 22:47:57 +0100 -Subject: Driver-Core: devtmpfs - remove EXPERIMENTAL and flush out the description -To: Greg KH <greg@kroah.com> -Message-ID: <1263505677.2074.2.camel@yio.site> - - -All major distros enable devtmpfs on recent systems, so remove -the EXPERIMENTAL flag, and make the description a bit more instructive. - -Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/Kconfig | 41 ++++++++++++++++++++++++----------------- - 1 file changed, 24 insertions(+), 17 deletions(-) - ---- a/drivers/base/Kconfig -+++ b/drivers/base/Kconfig -@@ -9,29 +9,36 @@ config UEVENT_HELPER_PATH - every uevent. - - config DEVTMPFS -- bool "Create a kernel maintained /dev tmpfs (EXPERIMENTAL)" -+ bool "Maintain a devtmpfs filesystem to mount at /dev" - depends on HOTPLUG && SHMEM && TMPFS - help -- This creates a tmpfs filesystem, and mounts it at bootup -- and mounts it at /dev. The kernel driver core creates device -- nodes for all registered devices in that filesystem. All device -- nodes are owned by root and have the default mode of 0600. -- Userspace can add and delete the nodes as needed. This is -- intended to simplify bootup, and make it possible to delay -- the initial coldplug at bootup done by udev in userspace. -- It should also provide a simpler way for rescue systems -- to bring up a kernel with dynamic major/minor numbers. -- Meaningful symlinks, permissions and device ownership must -- still be handled by userspace. -- If unsure, say N here. -+ This creates a tmpfs filesystem instance early at bootup. -+ In this filesystem, the kernel driver core maintains device -+ nodes with their default names and permissions for all -+ registered devices with an assigned major/minor number. -+ Userspace can modify the filesystem content as needed, add -+ symlinks, and apply needed permissions. -+ It provides a fully functional /dev directory, where usually -+ udev runs on top, managing permissions and adding meaningful -+ symlinks. -+ In very limited environments, it may provide a sufficient -+ functional /dev without any further help. It also allows simple -+ rescue systems, and reliably handles dynamic major/minor numbers. - - config DEVTMPFS_MOUNT -- bool "Automount devtmpfs at /dev" -+ bool "Automount devtmpfs at /dev, after the kernel mounted the rootfs" - depends on DEVTMPFS - help -- This will mount devtmpfs at /dev if the kernel mounts the root -- filesystem. It will not affect initramfs based mounting. -- If unsure, say N here. -+ This will instruct the kernel to automatically mount the -+ devtmpfs filesystem at /dev, directly after the kernel has -+ mounted the root filesystem. The behavior can be overridden -+ with the commandline parameter: devtmpfs.mount=0|1. -+ This option does not affect initramfs based booting, here -+ the devtmpfs filesystem always needs to be mounted manually -+ after the roots is mounted. -+ With this option enabled, it allows to bring up a system in -+ rescue mode with init=/bin/sh, even when the /dev directory -+ on the rootfs is completely empty. - - config STANDALONE - bool "Select only drivers that don't need compile-time external firmware" if EXPERIMENTAL diff --git a/driver-core/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch b/driver-core/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch deleted file mode 100644 index 828369e4f120d6..00000000000000 --- a/driver-core/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch +++ /dev/null @@ -1,45 +0,0 @@ -From kay.sievers@vrfy.org Thu Jan 14 16:48:07 2010 -From: Kay Sievers <kay.sievers@vrfy.org> -Date: Wed, 13 Jan 2010 14:16:36 +0100 -Subject: Driver-Core: devtmpfs - reset inode permissions before unlinking -To: Greg KH <greg@kroah.com> -Message-ID: <1263388596.26006.1.camel@yio.site> - - -From: Kay Sievers <kay.sievers@vrfy.org> - -Before unlinking the inode, reset the current permissions of possible -references like hardlinks, so granted permissions can not be retained -across the device lifetime by creating hardlinks, in the unusual case -that there is a user-writable directory on the same filesystem. - -Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/devtmpfs.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - ---- a/drivers/base/devtmpfs.c -+++ b/drivers/base/devtmpfs.c -@@ -301,6 +301,19 @@ int devtmpfs_delete_node(struct device * - if (dentry->d_inode) { - err = vfs_getattr(nd.path.mnt, dentry, &stat); - if (!err && dev_mynode(dev, dentry->d_inode, &stat)) { -+ struct iattr newattrs; -+ /* -+ * before unlinking this node, reset permissions -+ * of possible references like hardlinks -+ */ -+ newattrs.ia_uid = 0; -+ newattrs.ia_gid = 0; -+ newattrs.ia_mode = stat.mode & ~0777; -+ newattrs.ia_valid = -+ ATTR_UID|ATTR_GID|ATTR_MODE; -+ mutex_lock(&dentry->d_inode->i_mutex); -+ notify_change(dentry, &newattrs); -+ mutex_unlock(&dentry->d_inode->i_mutex); - err = vfs_unlink(nd.path.dentry->d_inode, - dentry); - if (!err || err == -ENOENT) diff --git a/driver-core/driver-core-disable-sbin-hotplug-by-default.patch b/driver-core/driver-core-disable-sbin-hotplug-by-default.patch deleted file mode 100644 index c0489cf0e182cd..00000000000000 --- a/driver-core/driver-core-disable-sbin-hotplug-by-default.patch +++ /dev/null @@ -1,42 +0,0 @@ -From kay.sievers@vrfy.org Thu Jan 14 16:49:08 2010 -From: Kay Sievers <kay.sievers@vrfy.org> -Date: Thu, 14 Jan 2010 22:49:39 +0100 -Subject: Driver-Core: disable /sbin/hotplug by default -To: Greg KH <greg@kroah.com> -Message-ID: <1263505779.2074.3.camel@yio.site> - - -From: Kay Sievers <kay.sievers@vrfy.org> - -No recent mainstream system uses the /sbin/hotplug fork-bomb any more. -Disable it by default to reflect how it is used these days. - -Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/Kconfig | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - ---- a/drivers/base/Kconfig -+++ b/drivers/base/Kconfig -@@ -3,10 +3,18 @@ menu "Generic Driver Options" - config UEVENT_HELPER_PATH - string "path to uevent helper" - depends on HOTPLUG -- default "/sbin/hotplug" -+ default "" - help - Path to uevent helper program forked by the kernel for - every uevent. -+ Before the switch to the netlink-based uevent source, this was -+ used to hook hotplug scripts into kernel device events. It -+ usually pointed to a shell script at /sbin/hotplug. -+ This should not be used today, because usual systems create -+ many events at bootup or device discovery in a very short time -+ frame. One forked process per event can create so many processes -+ that it creates a high system load, or on smaller systems -+ it is known to create out-of-memory situations during bootup. - - config DEVTMPFS - bool "Maintain a devtmpfs filesystem to mount at /dev" diff --git a/driver-core/driver-core-firmware_class-remove-base.h-header-inclusion.patch b/driver-core/driver-core-firmware_class-remove-base.h-header-inclusion.patch deleted file mode 100644 index 8e3e306ed8676b..00000000000000 --- a/driver-core/driver-core-firmware_class-remove-base.h-header-inclusion.patch +++ /dev/null @@ -1,31 +0,0 @@ -From lrodriguez@atheros.com Thu Jan 14 17:22:32 2010 -From: "Luis R. Rodriguez" <lrodriguez@atheros.com> -Date: Wed, 13 Jan 2010 21:18:15 -0500 -Subject: driver-core: firmware_class: remove base.h header inclusion -To: greg@kroah.com -Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, mcgrof@gmail.com, "Luis R. Rodriguez" <lrodriguez@atheros.com>, Johannes Berg <johannes@sipsolutions.net> -Message-ID: <1263435495-10966-1-git-send-email-lrodriguez@atheros.com> - - -base.h is used by base drivers for sharing internal structures. -Turns out firmware_class does not depend on it at all so remove it. - -Cc: Johannes Berg <johannes@sipsolutions.net> -Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> -Acked-by: Marcel Holtmann <marcel@holtmann.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/firmware_class.c | 1 - - 1 file changed, 1 deletion(-) - ---- a/drivers/base/firmware_class.c -+++ b/drivers/base/firmware_class.c -@@ -19,7 +19,6 @@ - #include <linux/kthread.h> - #include <linux/highmem.h> - #include <linux/firmware.h> --#include "base.h" - - #define to_dev(obj) container_of(obj, struct device, kobj) - diff --git a/driver-core/driver-core-fix-first-line-of-kernel-doc-for-a-few-functions.patch b/driver-core/driver-core-fix-first-line-of-kernel-doc-for-a-few-functions.patch deleted file mode 100644 index 618458966bc7b5..00000000000000 --- a/driver-core/driver-core-fix-first-line-of-kernel-doc-for-a-few-functions.patch +++ /dev/null @@ -1,104 +0,0 @@ -From ben@decadent.org.uk Wed Feb 17 16:05:12 2010 -From: Ben Hutchings <ben@decadent.org.uk> -Date: Sun, 14 Feb 2010 14:18:53 +0000 -Subject: Driver core: Fix first line of kernel-doc for a few functions -To: Greg Kroah-Hartman <gregkh@suse.de> -Message-ID: <1266157133.10567.14.camel@localhost> - - -The function name must be followed by a space, hypen, space, and a -short description. - -Signed-off-by: Ben Hutchings <ben@decadent.org.uk> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/firmware_class.c | 2 +- - drivers/base/platform.c | 16 ++++++++-------- - 2 files changed, 9 insertions(+), 9 deletions(-) - ---- a/drivers/base/firmware_class.c -+++ b/drivers/base/firmware_class.c -@@ -613,7 +613,7 @@ request_firmware_work_func(void *arg) - } - - /** -- * request_firmware_nowait: asynchronous version of request_firmware -+ * request_firmware_nowait - asynchronous version of request_firmware - * @module: module requesting the firmware - * @uevent: sends uevent to copy the firmware image if this flag - * is non-zero else the firmware copy must be done manually. ---- a/drivers/base/platform.c -+++ b/drivers/base/platform.c -@@ -128,7 +128,7 @@ struct platform_object { - }; - - /** -- * platform_device_put -+ * platform_device_put - destroy a platform device - * @pdev: platform device to free - * - * Free all memory associated with a platform device. This function must -@@ -152,7 +152,7 @@ static void platform_device_release(stru - } - - /** -- * platform_device_alloc -+ * platform_device_alloc - create a platform device - * @name: base name of the device we're adding - * @id: instance id - * -@@ -177,7 +177,7 @@ struct platform_device *platform_device_ - EXPORT_SYMBOL_GPL(platform_device_alloc); - - /** -- * platform_device_add_resources -+ * platform_device_add_resources - add resources to a platform device - * @pdev: platform device allocated by platform_device_alloc to add resources to - * @res: set of resources that needs to be allocated for the device - * @num: number of resources -@@ -202,7 +202,7 @@ int platform_device_add_resources(struct - EXPORT_SYMBOL_GPL(platform_device_add_resources); - - /** -- * platform_device_add_data -+ * platform_device_add_data - add platform-specific data to a platform device - * @pdev: platform device allocated by platform_device_alloc to add resources to - * @data: platform specific data for this platform device - * @size: size of platform specific data -@@ -344,7 +344,7 @@ void platform_device_unregister(struct p - EXPORT_SYMBOL_GPL(platform_device_unregister); - - /** -- * platform_device_register_simple -+ * platform_device_register_simple - add a platform-level device and its resources - * @name: base name of the device we're adding - * @id: instance id - * @res: set of resources that needs to be allocated for the device -@@ -396,7 +396,7 @@ error: - EXPORT_SYMBOL_GPL(platform_device_register_simple); - - /** -- * platform_device_register_data -+ * platform_device_register_data - add a platform-level device with platform-specific data - * @parent: parent device for the device we're adding - * @name: base name of the device we're adding - * @id: instance id -@@ -473,7 +473,7 @@ static void platform_drv_shutdown(struct - } - - /** -- * platform_driver_register -+ * platform_driver_register - register a driver for platform-level devices - * @drv: platform driver structure - */ - int platform_driver_register(struct platform_driver *drv) -@@ -491,7 +491,7 @@ int platform_driver_register(struct plat - EXPORT_SYMBOL_GPL(platform_driver_register); - - /** -- * platform_driver_unregister -+ * platform_driver_unregister - unregister a driver for platform-level devices - * @drv: platform driver structure - */ - void platform_driver_unregister(struct platform_driver *drv) diff --git a/driver-core/driver-core-fix-race-condition-in-get_device_parent.patch b/driver-core/driver-core-fix-race-condition-in-get_device_parent.patch deleted file mode 100644 index a101fa8bf182be..00000000000000 --- a/driver-core/driver-core-fix-race-condition-in-get_device_parent.patch +++ /dev/null @@ -1,118 +0,0 @@ -From tj@kernel.org Sun Feb 7 22:56:35 2010 -From: Tejun Heo <tj@kernel.org> -Date: Fri, 05 Feb 2010 17:57:02 +0900 -Subject: driver-core: fix race condition in get_device_parent() -To: Greg KH <gregkh@suse.de>, Colin Guthrie <cguthrie@mandriva.org>, Kay Sievers <kay.sievers@vrfy.org> -Message-ID: <4B6BDD5E.7080904@kernel.org> - - -sysfs is creating several devices in cuse class concurrently and with -CONFIG_SYSFS_DEPRECATED turned off, it triggers the following oops. - - BUG: unable to handle kernel NULL pointer dereference at 0000000000000038 - IP: [<ffffffff81158b0a>] sysfs_addrm_start+0x4a/0xf0 - PGD 75bb067 PUD 75be067 PMD 0 - Oops: 0000 [#1] PREEMPT SMP - last sysfs file: /sys/devices/system/cpu/cpu7/topology/core_siblings - CPU 1 - Modules linked in: cuse fuse - Pid: 4737, comm: osspd Not tainted 2.6.31-work #77 - RIP: 0010:[<ffffffff81158b0a>] [<ffffffff81158b0a>] sysfs_addrm_start+0x4a/0xf0 - RSP: 0018:ffff88000042f8f8 EFLAGS: 00010296 - RAX: ffff88000042ffd8 RBX: 0000000000000000 RCX: 0000000000000000 - RDX: 0000000000000000 RSI: ffff880007eef660 RDI: 0000000000000001 - RBP: ffff88000042f918 R08: 0000000000000000 R09: 0000000000000000 - R10: 0000000000000001 R11: ffffffff81158b0a R12: ffff88000042f928 - R13: 00000000fffffff4 R14: 0000000000000000 R15: ffff88000042f9a0 - FS: 00007fe93905a950(0000) GS:ffff880008600000(0000) knlGS:0000000000000000 - CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b - CR2: 0000000000000038 CR3: 00000000077c9000 CR4: 00000000000006e0 - DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 - DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 - Process osspd (pid: 4737, threadinfo ffff88000042e000, task ffff880007eef040) - Stack: - ffff880005da10e8 0000000011cc8d6e ffff88000042f928 ffff880003d28a28 - <0> ffff88000042f988 ffffffff811592d7 0000000000000000 0000000000000000 - <0> 0000000000000000 0000000000000000 ffff88000042f958 0000000011cc8d6e - Call Trace: - [<ffffffff811592d7>] create_dir+0x67/0xe0 - [<ffffffff811593a8>] sysfs_create_dir+0x58/0xb0 - [<ffffffff8128ca7c>] ? kobject_add_internal+0xcc/0x220 - [<ffffffff812942e1>] ? vsnprintf+0x3c1/0xb90 - [<ffffffff8128cab7>] kobject_add_internal+0x107/0x220 - [<ffffffff8128cd37>] kobject_add_varg+0x47/0x80 - [<ffffffff8128ce53>] kobject_add+0x53/0x90 - [<ffffffff81357d84>] device_add+0xd4/0x690 - [<ffffffff81356c2b>] ? dev_set_name+0x4b/0x70 - [<ffffffffa001a884>] cuse_process_init_reply+0x2b4/0x420 [cuse] - ... - -The problem is that kobject_add_internal() first adds a kobject to the -kset and then try to create sysfs directory for it. If the creation -fails, it remove the kobject from the kset. get_device_parent() -accesses class_dirs kset while only holding class_dirs.list_lock to -see whether the cuse class dir exists. But when it exists, it may not -have finished initialization yet or may fail and get removed soon. In -the above case, the former happened so the second one ends up trying -to create subdirectory under NULL sysfs_dirent. - -Fix it by grabbing a mutex in get_device_parent(). - -Signed-off-by: Tejun Heo <tj@kernel.org> -Reported-by: Colin Guthrie <cguthrie@mandriva.org> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/core.c | 13 +++++++++++-- - 1 file changed, 11 insertions(+), 2 deletions(-) - ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -607,6 +607,7 @@ static struct kobject *get_device_parent - int retval; - - if (dev->class) { -+ static DEFINE_MUTEX(gdp_mutex); - struct kobject *kobj = NULL; - struct kobject *parent_kobj; - struct kobject *k; -@@ -623,6 +624,8 @@ static struct kobject *get_device_parent - else - parent_kobj = &parent->kobj; - -+ mutex_lock(&gdp_mutex); -+ - /* find our class-directory at the parent and reference it */ - spin_lock(&dev->class->p->class_dirs.list_lock); - list_for_each_entry(k, &dev->class->p->class_dirs.list, entry) -@@ -631,20 +634,26 @@ static struct kobject *get_device_parent - break; - } - spin_unlock(&dev->class->p->class_dirs.list_lock); -- if (kobj) -+ if (kobj) { -+ mutex_unlock(&gdp_mutex); - return kobj; -+ } - - /* or create a new class-directory at the parent device */ - k = kobject_create(); -- if (!k) -+ if (!k) { -+ mutex_unlock(&gdp_mutex); - return NULL; -+ } - k->kset = &dev->class->p->class_dirs; - retval = kobject_add(k, parent_kobj, "%s", dev->class->name); - if (retval < 0) { -+ mutex_unlock(&gdp_mutex); - kobject_put(k); - return NULL; - } - /* do not emit an uevent for this simple "glue" directory */ -+ mutex_unlock(&gdp_mutex); - return k; - } - diff --git a/driver-core/driver-core-make-platform_device_id-table-const.patch b/driver-core/driver-core-make-platform_device_id-table-const.patch deleted file mode 100644 index 2eca3c490ef4bd..00000000000000 --- a/driver-core/driver-core-make-platform_device_id-table-const.patch +++ /dev/null @@ -1,28 +0,0 @@ -From eric.y.miao@gmail.com Tue Jan 5 14:23:45 2010 -From: Eric Miao <eric.y.miao@gmail.com> -Date: Fri, 1 Jan 2010 15:43:28 +0800 -Subject: driver core: make platform_device_id table const -To: Kay Sievers <kay.sievers@vrfy.org>, Greg KH <gregkh@suse.de> -Message-ID: <f17812d70912312343x31656af6sdb4f3556e7022c05@mail.gmail.com> - - -The platform ID table is normally const, force that by adding the attribute. - -Signed-off-by: Eric Miao <eric.y.miao@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - include/linux/platform_device.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/include/linux/platform_device.h -+++ b/include/linux/platform_device.h -@@ -21,7 +21,7 @@ struct platform_device { - u32 num_resources; - struct resource * resource; - -- struct platform_device_id *id_entry; -+ const struct platform_device_id *id_entry; - - /* arch specific additions */ - struct pdev_archdata archdata; diff --git a/driver-core/driver-core-make-struct-platform_driver.id_table-const.patch b/driver-core/driver-core-make-struct-platform_driver.id_table-const.patch deleted file mode 100644 index c5618d7b38b2e2..00000000000000 --- a/driver-core/driver-core-make-struct-platform_driver.id_table-const.patch +++ /dev/null @@ -1,48 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Jan 27 17:08:59 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Tue, 26 Jan 2010 09:35:00 +0100 -Subject: Driver core: make struct platform_driver.id_table const -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Eric Miao <eric.y.miao@gmail.com>, Vikram Dhillon <opensolarisdev@gmail.com>, linux-arm-kernel@lists.infradead.org, Eric Miao <eric.miao@marvell.com>, Ben Dooks <ben-linux@fluff.org> -Message-ID: <20100126083500.GA20792@pengutronix.de> -Content-Disposition: inline - - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -This fixes a warning on several pxa based machines: - - arch/arm/mach-pxa/ssp.c:475: warning: initialization discards qualifiers from pointer target type - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Acked-by: Vikram Dhillon <dhillonv10@gmail.com> -Acked-by: Eric Miao <eric.y.miao@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/platform.c | 2 +- - include/linux/platform_device.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/base/platform.c -+++ b/drivers/base/platform.c -@@ -636,7 +636,7 @@ static int platform_uevent(struct device - } - - static const struct platform_device_id *platform_match_id( -- struct platform_device_id *id, -+ const struct platform_device_id *id, - struct platform_device *pdev) - { - while (id->name[0]) { ---- a/include/linux/platform_device.h -+++ b/include/linux/platform_device.h -@@ -62,7 +62,7 @@ struct platform_driver { - int (*suspend)(struct platform_device *, pm_message_t state); - int (*resume)(struct platform_device *); - struct device_driver driver; -- struct platform_device_id *id_table; -+ const struct platform_device_id *id_table; - }; - - extern int platform_driver_register(struct platform_driver *); diff --git a/driver-core/driver-core-require-valid-action-string-in-uevent-trigger.patch b/driver-core/driver-core-require-valid-action-string-in-uevent-trigger.patch deleted file mode 100644 index 684264c5424e1b..00000000000000 --- a/driver-core/driver-core-require-valid-action-string-in-uevent-trigger.patch +++ /dev/null @@ -1,41 +0,0 @@ -From kay.sievers@vrfy.org Thu Jan 14 16:49:38 2010 -From: Kay Sievers <kay.sievers@vrfy.org> -Date: Thu, 14 Jan 2010 22:54:37 +0100 -Subject: Driver-Core: require valid action string in uevent trigger -To: Greg KH <greg@kroah.com> -Message-ID: <1263506077.2074.8.camel@yio.site> - - -From: Kay Sievers <kay.sievers@vrfy.org> - -No longer fall back to "add" and warn, but always require a valid -action-string written to the "uevent" file. - -Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/core.c | 11 +++-------- - 1 file changed, 3 insertions(+), 8 deletions(-) - ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -306,15 +306,10 @@ static ssize_t store_uevent(struct devic - { - enum kobject_action action; - -- if (kobject_action_type(buf, count, &action) == 0) { -+ if (kobject_action_type(buf, count, &action) == 0) - kobject_uevent(&dev->kobj, action); -- goto out; -- } -- -- dev_err(dev, "uevent: unsupported action-string; this will " -- "be ignored in a future kernel version\n"); -- kobject_uevent(&dev->kobj, KOBJ_ADD); --out: -+ else -+ dev_err(dev, "uevent: unknown action-string\n"); - return count; - } - diff --git a/driver-core/driver-core-use-sysfs_rename_link-in-device_rename.patch b/driver-core/driver-core-use-sysfs_rename_link-in-device_rename.patch deleted file mode 100644 index 6180581480ecb9..00000000000000 --- a/driver-core/driver-core-use-sysfs_rename_link-in-device_rename.patch +++ /dev/null @@ -1,53 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 14:02:02 2010 -From: "Eric W. Biederman" <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 19:22:26 -0800 -Subject: driver core: Use sysfs_rename_link in device_rename -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Kay Sievers <kay.sievers@vrfy.org>, linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>, Cornelia Huck <cornelia.huck@de.ibm.com>, linux-fsdevel@vger.kernel.org, Eric Dumazet <eric.dumazet@gmail.com>, Benjamin LaHaise <bcrl@lhnet.ca>, Serge Hallyn <serue@us.ibm.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "Eric W. Biederman" <ebiederm@aristanetworks.com> -Message-ID: <1266031348-30068-4-git-send-email-ebiederm@xmission.com> - -From: Eric W. Biederman <ebiederm@xmission.com> - -Don't open code the renaming of symlinks in sysfs -instead use the new helper function sysfs_rename_link - -Acked-by: Tejun Heo <tj@kernel.org> -Acked-by: Serge Hallyn <serue@us.ibm.com> -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/core.c | 18 ++++++------------ - 1 file changed, 6 insertions(+), 12 deletions(-) - ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -1578,22 +1578,16 @@ int device_rename(struct device *dev, ch - if (old_class_name) { - new_class_name = make_class_name(dev->class->name, &dev->kobj); - if (new_class_name) { -- error = sysfs_create_link_nowarn(&dev->parent->kobj, -- &dev->kobj, -- new_class_name); -- if (error) -- goto out; -- sysfs_remove_link(&dev->parent->kobj, old_class_name); -+ error = sysfs_rename_link(&dev->parent->kobj, -+ &dev->kobj, -+ old_class_name, -+ new_class_name); - } - } - #else - if (dev->class) { -- error = sysfs_create_link_nowarn(&dev->class->p->class_subsys.kobj, -- &dev->kobj, dev_name(dev)); -- if (error) -- goto out; -- sysfs_remove_link(&dev->class->p->class_subsys.kobj, -- old_device_name); -+ error = sysfs_rename_link(&dev->class->p->class_subsys.kobj, -+ &dev->kobj, old_device_name, new_name); - } - #endif - diff --git a/driver-core/howto-updates-on-subsystem-trees-patchwork-next-vs.-mm.patch b/driver-core/howto-updates-on-subsystem-trees-patchwork-next-vs.-mm.patch deleted file mode 100644 index 9c9330fbe1b382..00000000000000 --- a/driver-core/howto-updates-on-subsystem-trees-patchwork-next-vs.-mm.patch +++ /dev/null @@ -1,167 +0,0 @@ -From stefanr@s5r6.in-berlin.de Fri Jan 15 13:44:16 2010 -From: Stefan Richter <stefanr@s5r6.in-berlin.de> -Date: Fri, 15 Jan 2010 13:23:51 +0100 (CET) -Subject: HOWTO: Updates on subsystem trees, patchwork, -next (vs. -mm) -To: Greg Kroah-Hartman <greg@kroah.com> -Cc: Randy Dunlap <rdunlap@xenotime.net>, Joe Perches <joe@perches.com>, Andrew Morton <akpm@linux-foundation.org>, Alan Cox <alan@lxorguk.ukuu.org.uk>, Lo�c Greni� <loic.grenie@gmail.com>, linux-kernel@vger.kernel.org -Message-ID: <tkrat.b7e388635b69af34@s5r6.in-berlin.de> - - -One of the roles which -mm fulfilled some time ago (to offer an -integration testing ground) has been taken over by -next. This is still -news to Documentation/HOWTO, so mention it there. - -Also add a word on how patchwork is used to track patches as they make -their way into subsystem trees. Remove some arbitrary links to -subsystem repositories; they can all be found in the MAINTAINERS -database. - -Acked-by: Randy Dunlap <rdunlap@xenotime.net> -Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - ---- - Documentation/HOWTO | 113 ++++++++++++++++------------------------------------ - 1 file changed, 36 insertions(+), 77 deletions(-) - ---- a/Documentation/HOWTO -+++ b/Documentation/HOWTO -@@ -221,8 +221,8 @@ branches. These different branches are: - - main 2.6.x kernel tree - - 2.6.x.y -stable kernel tree - - 2.6.x -git kernel patches -- - 2.6.x -mm kernel patches - - subsystem specific kernel trees and patches -+ - the 2.6.x -next kernel tree for integration tests - - 2.6.x kernel tree - ----------------- -@@ -232,7 +232,7 @@ process is as follows: - - As soon as a new kernel is released a two weeks window is open, - during this period of time maintainers can submit big diffs to - Linus, usually the patches that have already been included in the -- -mm kernel for a few weeks. The preferred way to submit big changes -+ -next kernel for a few weeks. The preferred way to submit big changes - is using git (the kernel's source management tool, more information - can be found at http://git.or.cz/) but plain patches are also just - fine. -@@ -293,84 +293,43 @@ daily and represent the current state of - experimental than -rc kernels since they are generated automatically - without even a cursory glance to see if they are sane. - --2.6.x -mm kernel patches -------------------------- --These are experimental kernel patches released by Andrew Morton. Andrew --takes all of the different subsystem kernel trees and patches and mushes --them together, along with a lot of patches that have been plucked from --the linux-kernel mailing list. This tree serves as a proving ground for --new features and patches. Once a patch has proved its worth in -mm for --a while Andrew or the subsystem maintainer pushes it on to Linus for --inclusion in mainline. -- --It is heavily encouraged that all new patches get tested in the -mm tree --before they are sent to Linus for inclusion in the main kernel tree. Code --which does not make an appearance in -mm before the opening of the merge --window will prove hard to merge into the mainline. -- --These kernels are not appropriate for use on systems that are supposed --to be stable and they are more risky to run than any of the other --branches. -- --If you wish to help out with the kernel development process, please test --and use these kernel releases and provide feedback to the linux-kernel --mailing list if you have any problems, and if everything works properly. -- --In addition to all the other experimental patches, these kernels usually --also contain any changes in the mainline -git kernels available at the --time of release. -- --The -mm kernels are not released on a fixed schedule, but usually a few ---mm kernels are released in between each -rc kernel (1 to 3 is common). -- - Subsystem Specific kernel trees and patches - ------------------------------------------- --A number of the different kernel subsystem developers expose their --development trees so that others can see what is happening in the --different areas of the kernel. These trees are pulled into the -mm --kernel releases as described above. -- --Here is a list of some of the different kernel trees available: -- git trees: -- - Kbuild development tree, Sam Ravnborg <sam@ravnborg.org> -- git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git -- -- - ACPI development tree, Len Brown <len.brown@intel.com> -- git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git -- -- - Block development tree, Jens Axboe <jens.axboe@oracle.com> -- git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git -- -- - DRM development tree, Dave Airlie <airlied@linux.ie> -- git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git -- -- - ia64 development tree, Tony Luck <tony.luck@intel.com> -- git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git -- -- - infiniband, Roland Dreier <rolandd@cisco.com> -- git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git -- -- - libata, Jeff Garzik <jgarzik@pobox.com> -- git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git -- -- - network drivers, Jeff Garzik <jgarzik@pobox.com> -- git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git -- -- - pcmcia, Dominik Brodowski <linux@dominikbrodowski.net> -- git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git -- -- - SCSI, James Bottomley <James.Bottomley@hansenpartnership.com> -- git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git -- -- - x86, Ingo Molnar <mingo@elte.hu> -- git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git -- -- quilt trees: -- - USB, Driver Core, and I2C, Greg Kroah-Hartman <gregkh@suse.de> -- kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ -+The maintainers of the various kernel subsystems --- and also many -+kernel subsystem developers --- expose their current state of -+development in source repositories. That way, others can see what is -+happening in the different areas of the kernel. In areas where -+development is rapid, a developer may be asked to base his submissions -+onto such a subsystem kernel tree so that conflicts between the -+submission and other already ongoing work are avoided. -+ -+Most of these repositories are git trees, but there are also other SCMs -+in use, or patch queues being published as quilt series. Addresses of -+these subsystem repositories are listed in the MAINTAINERS file. Many -+of them can be browsed at http://git.kernel.org/. -+ -+Before a proposed patch is committed to such a subsystem tree, it is -+subject to review which primarily happens on mailing lists (see the -+respective section below). For several kernel subsystems, this review -+process is tracked with the tool patchwork. Patchwork offers a web -+interface which shows patch postings, any comments on a patch or -+revisions to it, and maintainers can mark patches as under review, -+accepted, or rejected. Most of these patchwork sites are listed at -+http://patchwork.kernel.org/ or http://patchwork.ozlabs.org/. -+ -+2.6.x -next kernel tree for integration tests -+--------------------------------------------- -+Before updates from subsystem trees are merged into the mainline 2.6.x -+tree, they need to be integration-tested. For this purpose, a special -+testing repository exists into which virtually all subsystem trees are -+pulled on an almost daily basis: -+ http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git -+ http://linux.f-seidel.de/linux-next/pmwiki/ -+ -+This way, the -next kernel gives a summary outlook onto what will be -+expected to go into the mainline kernel at the next merge period. -+Adventurous testers are very welcome to runtime-test the -next kernel. - -- Other kernel trees can be found listed at http://git.kernel.org/ and in -- the MAINTAINERS file. - - Bug Reporting - ------------- diff --git a/driver-core/i2c-move-i2c_omap-s-probe-function-to-.devinit.text.patch b/driver-core/i2c-move-i2c_omap-s-probe-function-to-.devinit.text.patch deleted file mode 100644 index 81cab6c546fd8c..00000000000000 --- a/driver-core/i2c-move-i2c_omap-s-probe-function-to-.devinit.text.patch +++ /dev/null @@ -1,48 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:44:01 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:53 +0100 -Subject: i2c: move i2c_omap's probe function to .devinit.text -To: Greg KH <gregkh@suse.de> -Cc: Kalle Jokiniemi <ext-kalle.jokiniemi@nokia.com>, Tony Lindgren <tony@atomide.com>, Paul Walmsley <paul@pwsan.com>, Richard Woodruff <r-woodruff2@ti.com>, chandra shekhar <x0044955@ti.com>, Jason P Marini <jason.marini@gmail.com>, Syed Mohammed Khasim <x0khasim@ti.com>, Jarkko Nikula <jarkko.nikula@nokia.com>, Juha Yrjola <juha.yrjola@solidboot.com>, Andrew Morton <akpm@linux-foundation.org> -Message-ID: <1265313417-5568-5-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to omap_i2c_probe is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Cc: Kalle Jokiniemi <ext-kalle.jokiniemi@nokia.com> -Cc: Tony Lindgren <tony@atomide.com> -Cc: Paul Walmsley <paul@pwsan.com> -Cc: Richard Woodruff <r-woodruff2@ti.com> -Cc: chandra shekhar <x0044955@ti.com> -Cc: Jason P Marini <jason.marini@gmail.com> -Cc: Syed Mohammed Khasim <x0khasim@ti.com> -Cc: Jarkko Nikula <jarkko.nikula@nokia.com> -Cc: Juha Yrjola <juha.yrjola@solidboot.com> -Cc: Andrew Morton <akpm@linux-foundation.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/i2c/busses/i2c-omap.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/i2c/busses/i2c-omap.c -+++ b/drivers/i2c/busses/i2c-omap.c -@@ -850,7 +850,7 @@ static const struct i2c_algorithm omap_i - .functionality = omap_i2c_func, - }; - --static int __init -+static int __devinit - omap_i2c_probe(struct platform_device *pdev) - { - struct omap_i2c_dev *dev; diff --git a/driver-core/kobject-constify-struct-kset_uevent_ops.patch b/driver-core/kobject-constify-struct-kset_uevent_ops.patch deleted file mode 100644 index 97c992f5985879..00000000000000 --- a/driver-core/kobject-constify-struct-kset_uevent_ops.patch +++ /dev/null @@ -1,176 +0,0 @@ -From re.emese@gmail.com Fri Jan 15 11:18:41 2010 -From: Emese Revfy <re.emese@gmail.com> -Date: Thu, 31 Dec 2009 14:52:51 +0100 -Subject: kobject: Constify struct kset_uevent_ops -To: Greg KH <gregkh@suse.de> -Cc: Pekka Enberg <penberg@cs.helsinki.fi>, linux-kernel@vger.kernel.org, rientjes@google.com, cl@linux-foundation.org, torvalds@linux-foundation.org, akpm@linux-foundation.org, rjw@sisk.pl, rusty@rustcorp.com.au, Arjan van de Ven <arjan@infradead.org> -Message-ID: <4B3CACB3.8020901@gmail.com> - - -From: Emese Revfy <re.emese@gmail.com> - -Constify struct kset_uevent_ops. - -This is part of the ops structure constification -effort started by Arjan van de Ven et al. - -Benefits of this constification: - - * prevents modification of data that is shared - (referenced) by many other structure instances - at runtime - - * detects/prevents accidental (but not intentional) - modification attempts on archs that enforce - read-only kernel data at runtime - - * potentially better optimized code as the compiler - can assume that the const data cannot be changed - - * the compiler/linker move const data into .rodata - and therefore exclude them from false sharing - -Signed-off-by: Emese Revfy <re.emese@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/bus.c | 2 +- - drivers/base/core.c | 2 +- - drivers/base/memory.c | 2 +- - fs/gfs2/sys.c | 2 +- - include/linux/kobject.h | 10 +++++----- - kernel/params.c | 2 +- - lib/kobject.c | 4 ++-- - lib/kobject_uevent.c | 2 +- - mm/slub.c | 2 +- - 9 files changed, 14 insertions(+), 14 deletions(-) - ---- a/drivers/base/bus.c -+++ b/drivers/base/bus.c -@@ -154,7 +154,7 @@ static int bus_uevent_filter(struct kset - return 0; - } - --static struct kset_uevent_ops bus_uevent_ops = { -+static const struct kset_uevent_ops bus_uevent_ops = { - .filter = bus_uevent_filter, - }; - ---- a/drivers/base/core.c -+++ b/drivers/base/core.c -@@ -252,7 +252,7 @@ static int dev_uevent(struct kset *kset, - return retval; - } - --static struct kset_uevent_ops device_uevent_ops = { -+static const struct kset_uevent_ops device_uevent_ops = { - .filter = dev_uevent_filter, - .name = dev_uevent_name, - .uevent = dev_uevent, ---- a/drivers/base/memory.c -+++ b/drivers/base/memory.c -@@ -44,7 +44,7 @@ static int memory_uevent(struct kset *ks - return retval; - } - --static struct kset_uevent_ops memory_uevent_ops = { -+static const struct kset_uevent_ops memory_uevent_ops = { - .name = memory_uevent_name, - .uevent = memory_uevent, - }; ---- a/fs/gfs2/sys.c -+++ b/fs/gfs2/sys.c -@@ -574,7 +574,7 @@ static int gfs2_uevent(struct kset *kset - return 0; - } - --static struct kset_uevent_ops gfs2_uevent_ops = { -+static const struct kset_uevent_ops gfs2_uevent_ops = { - .uevent = gfs2_uevent, - }; - ---- a/include/linux/kobject.h -+++ b/include/linux/kobject.h -@@ -118,9 +118,9 @@ struct kobj_uevent_env { - }; - - struct kset_uevent_ops { -- int (*filter)(struct kset *kset, struct kobject *kobj); -- const char *(*name)(struct kset *kset, struct kobject *kobj); -- int (*uevent)(struct kset *kset, struct kobject *kobj, -+ int (* const filter)(struct kset *kset, struct kobject *kobj); -+ const char *(* const name)(struct kset *kset, struct kobject *kobj); -+ int (* const uevent)(struct kset *kset, struct kobject *kobj, - struct kobj_uevent_env *env); - }; - -@@ -155,14 +155,14 @@ struct kset { - struct list_head list; - spinlock_t list_lock; - struct kobject kobj; -- struct kset_uevent_ops *uevent_ops; -+ const struct kset_uevent_ops *uevent_ops; - }; - - extern void kset_init(struct kset *kset); - extern int __must_check kset_register(struct kset *kset); - extern void kset_unregister(struct kset *kset); - extern struct kset * __must_check kset_create_and_add(const char *name, -- struct kset_uevent_ops *u, -+ const struct kset_uevent_ops *u, - struct kobject *parent_kobj); - - static inline struct kset *to_kset(struct kobject *kobj) ---- a/kernel/params.c -+++ b/kernel/params.c -@@ -736,7 +736,7 @@ static int uevent_filter(struct kset *ks - return 0; - } - --static struct kset_uevent_ops module_uevent_ops = { -+static const struct kset_uevent_ops module_uevent_ops = { - .filter = uevent_filter, - }; - ---- a/lib/kobject.c -+++ b/lib/kobject.c -@@ -789,7 +789,7 @@ static struct kobj_type kset_ktype = { - * If the kset was not able to be created, NULL will be returned. - */ - static struct kset *kset_create(const char *name, -- struct kset_uevent_ops *uevent_ops, -+ const struct kset_uevent_ops *uevent_ops, - struct kobject *parent_kobj) - { - struct kset *kset; -@@ -832,7 +832,7 @@ static struct kset *kset_create(const ch - * If the kset was not able to be created, NULL will be returned. - */ - struct kset *kset_create_and_add(const char *name, -- struct kset_uevent_ops *uevent_ops, -+ const struct kset_uevent_ops *uevent_ops, - struct kobject *parent_kobj) - { - struct kset *kset; ---- a/lib/kobject_uevent.c -+++ b/lib/kobject_uevent.c -@@ -95,7 +95,7 @@ int kobject_uevent_env(struct kobject *k - const char *subsystem; - struct kobject *top_kobj; - struct kset *kset; -- struct kset_uevent_ops *uevent_ops; -+ const struct kset_uevent_ops *uevent_ops; - u64 seq; - int i = 0; - int retval = 0; ---- a/mm/slub.c -+++ b/mm/slub.c -@@ -4409,7 +4409,7 @@ static int uevent_filter(struct kset *ks - return 0; - } - --static struct kset_uevent_ops slab_uevent_ops = { -+static const struct kset_uevent_ops slab_uevent_ops = { - .filter = uevent_filter, - }; - diff --git a/driver-core/kobject-example-spelling-fixes.patch b/driver-core/kobject-example-spelling-fixes.patch deleted file mode 100644 index 0553d5ef32e4bf..00000000000000 --- a/driver-core/kobject-example-spelling-fixes.patch +++ /dev/null @@ -1,38 +0,0 @@ -From rvoicilas@gmail.com Fri Dec 18 11:58:45 2009 -From: Radu Voicilas <rvoicilas@gmail.com> -Date: Sat, 12 Dec 2009 01:06:09 -0800 -Subject: kobject-example: Spelling fixes. -To: gregkh@suse.de -Cc: kernel-janitors@vger.kernel.org, Radu Voicilas <rvoicilas@gmail.com> -Message-ID: <1260608772-9839-2-git-send-email-rvoicilas@gmail.com> - - -No change in functionality. - -Signed-off-by: Radu Voicilas <rvoicilas@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - samples/kobject/kobject-example.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/samples/kobject/kobject-example.c -+++ b/samples/kobject/kobject-example.c -@@ -44,7 +44,7 @@ static struct kobj_attribute foo_attribu - __ATTR(foo, 0666, foo_show, foo_store); - - /* -- * More complex function where we determine which varible is being accessed by -+ * More complex function where we determine which variable is being accessed by - * looking at the attribute for the "baz" and "bar" files. - */ - static ssize_t b_show(struct kobject *kobj, struct kobj_attribute *attr, -@@ -79,7 +79,7 @@ static struct kobj_attribute bar_attribu - - - /* -- * Create a group of attributes so that we can create and destory them all -+ * Create a group of attributes so that we can create and destroy them all - * at once. - */ - static struct attribute *attrs[] = { diff --git a/driver-core/kset-example-spelling-fixes.patch b/driver-core/kset-example-spelling-fixes.patch deleted file mode 100644 index ca5daee7fd495a..00000000000000 --- a/driver-core/kset-example-spelling-fixes.patch +++ /dev/null @@ -1,38 +0,0 @@ -From rvoicilas@gmail.com Fri Dec 18 11:59:04 2009 -From: Radu Voicilas <rvoicilas@gmail.com> -Date: Sat, 12 Dec 2009 01:06:10 -0800 -Subject: kset-example: Spelling fixes. -To: gregkh@suse.de -Cc: kernel-janitors@vger.kernel.org, Radu Voicilas <rvoicilas@gmail.com> -Message-ID: <1260608772-9839-3-git-send-email-rvoicilas@gmail.com> - - -No change in functionality. - -Signed-off-by: Radu Voicilas <rvoicilas@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - samples/kobject/kset-example.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/samples/kobject/kset-example.c -+++ b/samples/kobject/kset-example.c -@@ -127,7 +127,7 @@ static struct foo_attribute foo_attribut - __ATTR(foo, 0666, foo_show, foo_store); - - /* -- * More complex function where we determine which varible is being accessed by -+ * More complex function where we determine which variable is being accessed by - * looking at the attribute for the "baz" and "bar" files. - */ - static ssize_t b_show(struct foo_obj *foo_obj, struct foo_attribute *attr, -@@ -161,7 +161,7 @@ static struct foo_attribute bar_attribut - __ATTR(bar, 0666, b_show, b_store); - - /* -- * Create a group of attributes so that we can create and destory them all -+ * Create a group of attributes so that we can create and destroy them all - * at once. - */ - static struct attribute *foo_default_attrs[] = { diff --git a/driver-core/media-move-omap24xxcam-s-probe-function-to-.devinit.text.patch b/driver-core/media-move-omap24xxcam-s-probe-function-to-.devinit.text.patch deleted file mode 100644 index af52fadc0a1fb6..00000000000000 --- a/driver-core/media-move-omap24xxcam-s-probe-function-to-.devinit.text.patch +++ /dev/null @@ -1,43 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:45:00 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:55 +0100 -Subject: media: move omap24xxcam's probe function to .devinit.text -To: Greg KH <gregkh@suse.de> -Cc: Hans Verkuil <hverkuil@xs4all.nl>, Mauro Carvalho Chehab <mchehab@redhat.com>, Andrew Morton <akpm@linux-foundation.org> -Message-ID: <1265313417-5568-7-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to omap24xxcam_probe is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Acked-by: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com> -Acked-by: Trilok Soni <soni.trilok@gmail.com> -Cc: Hans Verkuil <hverkuil@xs4all.nl> -Cc: Mauro Carvalho Chehab <mchehab@redhat.com> -Cc: Andrew Morton <akpm@linux-foundation.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/media/video/omap24xxcam.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/media/video/omap24xxcam.c -+++ b/drivers/media/video/omap24xxcam.c -@@ -1735,7 +1735,7 @@ static struct v4l2_int_device omap24xxca - * - */ - --static int __init omap24xxcam_probe(struct platform_device *pdev) -+static int __devinit omap24xxcam_probe(struct platform_device *pdev) - { - struct omap24xxcam_device *cam; - struct resource *mem; diff --git a/driver-core/msi-laptop-add-resume-method-for-set-the-scm-load-again.patch b/driver-core/msi-laptop-add-resume-method-for-set-the-scm-load-again.patch deleted file mode 100644 index b5dbda2c9dbb29..00000000000000 --- a/driver-core/msi-laptop-add-resume-method-for-set-the-scm-load-again.patch +++ /dev/null @@ -1,67 +0,0 @@ ->From f8a0814a4d4ec38816508be4f0252eb49605bc4d Mon Sep 17 00:00:00 2001 -From: Lee, Chun-Yi <jlee@novell.com> -Date: Wed, 27 Jan 2010 00:13:45 +0800 -Subject: msi-laptop: Add resume method for set the SCM load again - -Implement the resume method for set the load SCM flag after system reusme. -Without this patch, the wifi function key on SCM model will back to BIOS -control mode then confuse with the userland software control. -e.g. MSI N034 - -Signed-off-by: Lee, Chun-Yi <jlee@novell.com> -Cc: Lennart Poettering <mzxreary@0pointer.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/msi-laptop.c | 26 +++++++++++++++++++++++++- - 1 file changed, 25 insertions(+), 1 deletion(-) - ---- a/drivers/platform/x86/msi-laptop.c -+++ b/drivers/platform/x86/msi-laptop.c -@@ -77,6 +77,8 @@ - #define MSI_STANDARD_EC_SCM_LOAD_ADDRESS 0x2d - #define MSI_STANDARD_EC_SCM_LOAD_MASK (1 << 0) - -+static int msi_laptop_resume(struct platform_device *device); -+ - static int force; - module_param(force, bool, 0); - MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); -@@ -395,7 +397,8 @@ static struct platform_driver msipf_driv - .driver = { - .name = "msi-laptop-pf", - .owner = THIS_MODULE, -- } -+ }, -+ .resume = msi_laptop_resume, - }; - - static struct platform_device *msipf_device; -@@ -584,6 +587,27 @@ err_bluetooth: - return retval; - } - -+static int msi_laptop_resume(struct platform_device *device) -+{ -+ u8 data; -+ int result; -+ -+ if (!load_scm_model) -+ return 0; -+ -+ /* set load SCM to disable hardware control by fn key */ -+ result = ec_read(MSI_STANDARD_EC_SCM_LOAD_ADDRESS, &data); -+ if (result < 0) -+ return result; -+ -+ result = ec_write(MSI_STANDARD_EC_SCM_LOAD_ADDRESS, -+ data | MSI_STANDARD_EC_SCM_LOAD_MASK); -+ if (result < 0) -+ return result; -+ -+ return 0; -+} -+ - static int load_scm_model_init(struct platform_device *sdev) - { - u8 data; diff --git a/driver-core/msi-laptop-add-threeg-sysfs-file-for-support-query-3g-state-by-standard-66-62-ec-command.patch b/driver-core/msi-laptop-add-threeg-sysfs-file-for-support-query-3g-state-by-standard-66-62-ec-command.patch deleted file mode 100644 index 3ca7ba7a8701a4..00000000000000 --- a/driver-core/msi-laptop-add-threeg-sysfs-file-for-support-query-3g-state-by-standard-66-62-ec-command.patch +++ /dev/null @@ -1,98 +0,0 @@ -From ac61c03317125cddb781603fd6f9798a61b23845 Mon Sep 17 00:00:00 2001 -From: Lee, Chun-Yi <jlee@novell.com> -Date: Sat, 9 Jan 2010 23:17:07 +0800 -Subject: msi-laptop: Add threeg sysfs file for support query 3G state by standard 66/62 ec command - -Add threeg sysfs file for support query 3G state by standard 66/62 ec -command, the MSI standard ec interface supported this feature. - -Signed-off-by: Lee, Chun-Yi <jlee@novell.com> -Cc: Lennart Poettering <mzxreary@0pointer.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/msi-laptop.c | 31 ++++++++++++++++++++++++++++++- - 1 file changed, 30 insertions(+), 1 deletion(-) - ---- a/drivers/platform/x86/msi-laptop.c -+++ b/drivers/platform/x86/msi-laptop.c -@@ -70,6 +70,7 @@ - #define MSI_STANDARD_EC_BLUETOOTH_MASK (1 << 0) - #define MSI_STANDARD_EC_WEBCAM_MASK (1 << 1) - #define MSI_STANDARD_EC_WLAN_MASK (1 << 3) -+#define MSI_STANDARD_EC_3G_MASK (1 << 4) - - static int force; - module_param(force, bool, 0); -@@ -80,7 +81,7 @@ module_param(auto_brightness, int, 0); - MODULE_PARM_DESC(auto_brightness, "Enable automatic brightness control (0: disabled; 1: enabled; 2: don't touch)"); - - static bool old_ec_model; --static int wlan_s, bluetooth_s; -+static int wlan_s, bluetooth_s, threeg_s; - - /* Hardware access */ - -@@ -169,6 +170,8 @@ static int get_wireless_state_ec_standar - - bluetooth_s = !!(rdata & MSI_STANDARD_EC_BLUETOOTH_MASK); - -+ threeg_s = !!(rdata & MSI_STANDARD_EC_3G_MASK); -+ - return 0; - } - -@@ -230,6 +233,23 @@ static ssize_t show_bluetooth(struct dev - return sprintf(buf, "%i\n", enabled); - } - -+static ssize_t show_threeg(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ -+ int ret; -+ -+ /* old msi ec not support 3G */ -+ if (old_ec_model) -+ return -1; -+ -+ ret = get_wireless_state_ec_standard(); -+ if (ret < 0) -+ return ret; -+ -+ return sprintf(buf, "%i\n", threeg_s); -+} -+ - static ssize_t show_lcd_level(struct device *dev, - struct device_attribute *attr, char *buf) - { -@@ -292,6 +312,7 @@ static DEVICE_ATTR(lcd_level, 0644, show - static DEVICE_ATTR(auto_brightness, 0644, show_auto_brightness, store_auto_brightness); - static DEVICE_ATTR(bluetooth, 0444, show_bluetooth, NULL); - static DEVICE_ATTR(wlan, 0444, show_wlan, NULL); -+static DEVICE_ATTR(threeg, 0444, show_threeg, NULL); - - static struct attribute *msipf_attributes[] = { - &dev_attr_lcd_level.attr, -@@ -412,6 +433,12 @@ static int __init msi_init(void) - if (ret) - goto fail_platform_device2; - -+ if (!old_ec_model) { -+ ret = device_create_file(&msipf_device->dev, &dev_attr_threeg); -+ if (ret) -+ goto fail_platform_device2; -+ } -+ - /* Disable automatic brightness control by default because - * this module was probably loaded to do brightness control in - * software. */ -@@ -446,6 +473,8 @@ static void __exit msi_cleanup(void) - { - - sysfs_remove_group(&msipf_device->dev.kobj, &msipf_attribute_group); -+ if (!old_ec_model) -+ device_remove_file(&msipf_device->dev, &dev_attr_threeg); - platform_device_unregister(msipf_device); - platform_driver_unregister(&msipf_driver); - backlight_device_unregister(msibl_device); diff --git a/driver-core/msi-laptop-depends-on-rfkill.patch b/driver-core/msi-laptop-depends-on-rfkill.patch deleted file mode 100644 index a1eeb7e196b0ef..00000000000000 --- a/driver-core/msi-laptop-depends-on-rfkill.patch +++ /dev/null @@ -1,40 +0,0 @@ -From akpm@linux-foundation.org Wed Feb 17 12:36:04 2010 -From: Randy Dunlap <randy.dunlap@oracle.com> -Date: Wed, 03 Feb 2010 14:24:28 -0800 -Subject: msi-laptop: depends on RFKILL -To: mm-commits@vger.kernel.org -Cc: randy.dunlap@oracle.com, greg@kroah.com, jlee@novell.com, mzxreary@0pointer.de -Message-ID: <201002032224.o13MOSGP022771@imap1.linux-foundation.org> - -From: Randy Dunlap <randy.dunlap@oracle.com> - -msi-laptop uses rfkill*() interfaces so it should depend on RFKILL. - -msi-laptop.c:(.text+0x1fcd1b): undefined reference to `rfkill_alloc' -msi-laptop.c:(.text+0x1fcd76): undefined reference to `rfkill_register' -msi-laptop.c:(.text+0x1fcdc8): undefined reference to `rfkill_destroy' -msi-laptop.c:(.text+0x1fcdd9): undefined reference to `rfkill_unregister' - -This repairs "msi-laptop: Detect 3G device exists by standard ec command", -which is in some gregkh tree. - -Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> -Cc: Lennart Poettering <mzxreary@0pointer.de> -Cc: Lee, Chun-Yi <jlee@novell.com> -Signed-off-by: Andrew Morton <akpm@linux-foundation.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/Kconfig | 1 + - 1 file changed, 1 insertion(+) - ---- a/drivers/platform/x86/Kconfig -+++ b/drivers/platform/x86/Kconfig -@@ -150,6 +150,7 @@ config MSI_LAPTOP - tristate "MSI Laptop Extras" - depends on ACPI - depends on BACKLIGHT_CLASS_DEVICE -+ depends on RFKILL - ---help--- - This is a driver for laptops built by MSI (MICRO-STAR - INTERNATIONAL): diff --git a/driver-core/msi-laptop-detect-3g-device-exists-by-standard-ec-command.patch b/driver-core/msi-laptop-detect-3g-device-exists-by-standard-ec-command.patch deleted file mode 100644 index f564443cd48994..00000000000000 --- a/driver-core/msi-laptop-detect-3g-device-exists-by-standard-ec-command.patch +++ /dev/null @@ -1,112 +0,0 @@ -From de25bd283cbaaed3c3eaa4505f2c60fc7689c512 Mon Sep 17 00:00:00 2001 -From: Lee, Chun-Yi <jlee@novell.com> -Date: Wed, 27 Jan 2010 12:23:00 +0800 -Subject: msi-laptop: Detect 3G device exists by standard ec command - -Detect 3G device exists by standard ec command. Driver will not create the threeg sysfs -file and threeg rfkill interface if there have no internal 3G device in MSI notebook/netbook. - -Signed-off-by: Lee, Chun-Yi <jlee@novell.com> -Cc: Lennart Poettering <mzxreary@0pointer.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/msi-laptop.c | 44 +++++++++++++++++++++++++++++--------- - 1 file changed, 34 insertions(+), 10 deletions(-) - ---- a/drivers/platform/x86/msi-laptop.c -+++ b/drivers/platform/x86/msi-laptop.c -@@ -79,6 +79,8 @@ - - static int msi_laptop_resume(struct platform_device *device); - -+#define MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS 0x2f -+ - static int force; - module_param(force, bool, 0); - MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); -@@ -89,6 +91,7 @@ MODULE_PARM_DESC(auto_brightness, "Enabl - - static bool old_ec_model; - static int wlan_s, bluetooth_s, threeg_s; -+static int threeg_exists; - - /* Some MSI 3G netbook only have one fn key to control Wlan/Bluetooth/3G, - * those netbook will load the SCM (windows app) to disable the original -@@ -224,6 +227,20 @@ static int get_wireless_state_ec_standar - return 0; - } - -+static int get_threeg_exists(void) -+{ -+ u8 rdata; -+ int result; -+ -+ result = ec_read(MSI_STANDARD_EC_DEVICES_EXISTS_ADDRESS, &rdata); -+ if (result < 0) -+ return -1; -+ -+ threeg_exists = !!(rdata & MSI_STANDARD_EC_3G_MASK); -+ -+ return 0; -+} -+ - /* Backlight device stuff */ - - static int bl_get_brightness(struct backlight_device *b) -@@ -561,15 +578,17 @@ static int rfkill_init(struct platform_d - if (retval) - goto err_wlan; - -- rfk_threeg = rfkill_alloc("msi-threeg", &sdev->dev, RFKILL_TYPE_WWAN, -- &rfkill_threeg_ops, NULL); -- if (!rfk_threeg) { -- retval = -ENOMEM; -- goto err_threeg; -+ if (threeg_exists) { -+ rfk_threeg = rfkill_alloc("msi-threeg", &sdev->dev, -+ RFKILL_TYPE_WWAN, &rfkill_threeg_ops, NULL); -+ if (!rfk_threeg) { -+ retval = -ENOMEM; -+ goto err_threeg; -+ } -+ retval = rfkill_register(rfk_threeg); -+ if (retval) -+ goto err_threeg; - } -- retval = rfkill_register(rfk_threeg); -- if (retval) -- goto err_threeg; - - return 0; - -@@ -649,6 +668,9 @@ static int __init msi_init(void) - if (force || dmi_check_system(msi_dmi_table)) - old_ec_model = 1; - -+ if (!old_ec_model) -+ get_threeg_exists(); -+ - if (!old_ec_model && dmi_check_system(msi_load_scm_models_dmi_table)) - load_scm_model = 1; - -@@ -694,7 +716,9 @@ static int __init msi_init(void) - goto fail_platform_device2; - - if (!old_ec_model) { -- ret = device_create_file(&msipf_device->dev, &dev_attr_threeg); -+ if (threeg_exists) -+ ret = device_create_file(&msipf_device->dev, -+ &dev_attr_threeg); - if (ret) - goto fail_platform_device2; - } -@@ -733,7 +757,7 @@ static void __exit msi_cleanup(void) - { - - sysfs_remove_group(&msipf_device->dev.kobj, &msipf_attribute_group); -- if (!old_ec_model) -+ if (!old_ec_model && threeg_exists) - device_remove_file(&msipf_device->dev, &dev_attr_threeg); - platform_device_unregister(msipf_device); - platform_driver_unregister(&msipf_driver); diff --git a/driver-core/msi-laptop-support-some-msi-3g-netbook-that-is-need-load-scm.patch b/driver-core/msi-laptop-support-some-msi-3g-netbook-that-is-need-load-scm.patch deleted file mode 100644 index ef50862ef737b4..00000000000000 --- a/driver-core/msi-laptop-support-some-msi-3g-netbook-that-is-need-load-scm.patch +++ /dev/null @@ -1,340 +0,0 @@ -From eb7fa79aaab66b15257a1d10fccd5a526919b193 Mon Sep 17 00:00:00 2001 -From: Lee, Chun-Yi <jlee@novell.com> -Date: Fri, 22 Jan 2010 00:15:59 +0800 -Subject: msi-laptop: Support some MSI 3G netbook that is need load SCM - -Some MSI 3G netbook only have one fn key to control Wlan/Bluetooth/3G, -those netbook will load the SCM (windows app) to disable the original -Wlan/Bluetooth control by BIOS when user press fn key, then control -Wlan/Bluetooth/3G by SCM (software control by OS). Without SCM, user -cann't on/off 3G module on those 3G netbook. -On Linux, msi-laptop driver will do the same thing to disable the -original BIOS control, then might need use HAL or other userland -application to do the software control that simulate with SCM. -e.g. MSI N034 netbook - -Signed-off-by: Lee, Chun-Yi <jlee@novell.com> -Cc: Lennart Poettering <mzxreary@0pointer.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/msi-laptop.c | 238 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 238 insertions(+) - ---- a/drivers/platform/x86/msi-laptop.c -+++ b/drivers/platform/x86/msi-laptop.c -@@ -58,6 +58,7 @@ - #include <linux/dmi.h> - #include <linux/backlight.h> - #include <linux/platform_device.h> -+#include <linux/rfkill.h> - - #define MSI_DRIVER_VERSION "0.5" - -@@ -72,6 +73,10 @@ - #define MSI_STANDARD_EC_WLAN_MASK (1 << 3) - #define MSI_STANDARD_EC_3G_MASK (1 << 4) - -+/* For set SCM load flag to disable BIOS fn key */ -+#define MSI_STANDARD_EC_SCM_LOAD_ADDRESS 0x2d -+#define MSI_STANDARD_EC_SCM_LOAD_MASK (1 << 0) -+ - static int force; - module_param(force, bool, 0); - MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); -@@ -83,6 +88,19 @@ MODULE_PARM_DESC(auto_brightness, "Enabl - static bool old_ec_model; - static int wlan_s, bluetooth_s, threeg_s; - -+/* Some MSI 3G netbook only have one fn key to control Wlan/Bluetooth/3G, -+ * those netbook will load the SCM (windows app) to disable the original -+ * Wlan/Bluetooth control by BIOS when user press fn key, then control -+ * Wlan/Bluetooth/3G by SCM (software control by OS). Without SCM, user -+ * cann't on/off 3G module on those 3G netbook. -+ * On Linux, msi-laptop driver will do the same thing to disable the -+ * original BIOS control, then might need use HAL or other userland -+ * application to do the software control that simulate with SCM. -+ * e.g. MSI N034 netbook -+ */ -+static bool load_scm_model; -+static struct rfkill *rfk_wlan, *rfk_bluetooth, *rfk_threeg; -+ - /* Hardware access */ - - static int set_lcd_level(int level) -@@ -139,6 +157,35 @@ static int set_auto_brightness(int enabl - return ec_transaction(MSI_EC_COMMAND_LCD_LEVEL, wdata, 2, NULL, 0, 1); - } - -+static ssize_t set_device_state(const char *buf, size_t count, u8 mask) -+{ -+ int status; -+ u8 wdata = 0, rdata; -+ int result; -+ -+ if (sscanf(buf, "%i", &status) != 1 || (status < 0 || status > 1)) -+ return -EINVAL; -+ -+ /* read current device state */ -+ result = ec_read(MSI_STANDARD_EC_COMMAND_ADDRESS, &rdata); -+ if (result < 0) -+ return -EINVAL; -+ -+ if (!!(rdata & mask) != status) { -+ /* reverse device bit */ -+ if (rdata & mask) -+ wdata = rdata & ~mask; -+ else -+ wdata = rdata | mask; -+ -+ result = ec_write(MSI_STANDARD_EC_COMMAND_ADDRESS, wdata); -+ if (result < 0) -+ return -EINVAL; -+ } -+ -+ return count; -+} -+ - static int get_wireless_state(int *wlan, int *bluetooth) - { - u8 wdata = 0, rdata; -@@ -215,6 +262,12 @@ static ssize_t show_wlan(struct device * - return sprintf(buf, "%i\n", enabled); - } - -+static ssize_t store_wlan(struct device *dev, -+ struct device_attribute *attr, const char *buf, size_t count) -+{ -+ return set_device_state(buf, count, MSI_STANDARD_EC_WLAN_MASK); -+} -+ - static ssize_t show_bluetooth(struct device *dev, - struct device_attribute *attr, char *buf) - { -@@ -233,6 +286,12 @@ static ssize_t show_bluetooth(struct dev - return sprintf(buf, "%i\n", enabled); - } - -+static ssize_t store_bluetooth(struct device *dev, -+ struct device_attribute *attr, const char *buf, size_t count) -+{ -+ return set_device_state(buf, count, MSI_STANDARD_EC_BLUETOOTH_MASK); -+} -+ - static ssize_t show_threeg(struct device *dev, - struct device_attribute *attr, char *buf) - { -@@ -250,6 +309,12 @@ static ssize_t show_threeg(struct device - return sprintf(buf, "%i\n", threeg_s); - } - -+static ssize_t store_threeg(struct device *dev, -+ struct device_attribute *attr, const char *buf, size_t count) -+{ -+ return set_device_state(buf, count, MSI_STANDARD_EC_3G_MASK); -+} -+ - static ssize_t show_lcd_level(struct device *dev, - struct device_attribute *attr, char *buf) - { -@@ -387,6 +452,169 @@ static struct dmi_system_id __initdata m - { } - }; - -+static struct dmi_system_id __initdata msi_load_scm_models_dmi_table[] = { -+ { -+ .ident = "MSI N034", -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, -+ "MICRO-STAR INTERNATIONAL CO., LTD"), -+ DMI_MATCH(DMI_PRODUCT_NAME, "MS-N034"), -+ DMI_MATCH(DMI_CHASSIS_VENDOR, -+ "MICRO-STAR INTERNATIONAL CO., LTD") -+ }, -+ .callback = dmi_check_cb -+ }, -+ { } -+}; -+ -+static int rfkill_bluetooth_set(void *data, bool blocked) -+{ -+ /* Do something with blocked...*/ -+ /* -+ * blocked == false is on -+ * blocked == true is off -+ */ -+ if (blocked) -+ set_device_state("0", 0, MSI_STANDARD_EC_BLUETOOTH_MASK); -+ else -+ set_device_state("1", 0, MSI_STANDARD_EC_BLUETOOTH_MASK); -+ -+ return 0; -+} -+ -+static int rfkill_wlan_set(void *data, bool blocked) -+{ -+ if (blocked) -+ set_device_state("0", 0, MSI_STANDARD_EC_WLAN_MASK); -+ else -+ set_device_state("1", 0, MSI_STANDARD_EC_WLAN_MASK); -+ -+ return 0; -+} -+ -+static int rfkill_threeg_set(void *data, bool blocked) -+{ -+ if (blocked) -+ set_device_state("0", 0, MSI_STANDARD_EC_3G_MASK); -+ else -+ set_device_state("1", 0, MSI_STANDARD_EC_3G_MASK); -+ -+ return 0; -+} -+ -+static struct rfkill_ops rfkill_bluetooth_ops = { -+ .set_block = rfkill_bluetooth_set -+}; -+ -+static struct rfkill_ops rfkill_wlan_ops = { -+ .set_block = rfkill_wlan_set -+}; -+ -+static struct rfkill_ops rfkill_threeg_ops = { -+ .set_block = rfkill_threeg_set -+}; -+ -+static void rfkill_cleanup(void) -+{ -+ if (rfk_bluetooth) { -+ rfkill_unregister(rfk_bluetooth); -+ rfkill_destroy(rfk_bluetooth); -+ } -+ -+ if (rfk_threeg) { -+ rfkill_unregister(rfk_threeg); -+ rfkill_destroy(rfk_threeg); -+ } -+ -+ if (rfk_wlan) { -+ rfkill_unregister(rfk_wlan); -+ rfkill_destroy(rfk_wlan); -+ } -+} -+ -+static int rfkill_init(struct platform_device *sdev) -+{ -+ /* add rfkill */ -+ int retval; -+ -+ rfk_bluetooth = rfkill_alloc("msi-bluetooth", &sdev->dev, -+ RFKILL_TYPE_BLUETOOTH, -+ &rfkill_bluetooth_ops, NULL); -+ if (!rfk_bluetooth) { -+ retval = -ENOMEM; -+ goto err_bluetooth; -+ } -+ retval = rfkill_register(rfk_bluetooth); -+ if (retval) -+ goto err_bluetooth; -+ -+ rfk_wlan = rfkill_alloc("msi-wlan", &sdev->dev, RFKILL_TYPE_WLAN, -+ &rfkill_wlan_ops, NULL); -+ if (!rfk_wlan) { -+ retval = -ENOMEM; -+ goto err_wlan; -+ } -+ retval = rfkill_register(rfk_wlan); -+ if (retval) -+ goto err_wlan; -+ -+ rfk_threeg = rfkill_alloc("msi-threeg", &sdev->dev, RFKILL_TYPE_WWAN, -+ &rfkill_threeg_ops, NULL); -+ if (!rfk_threeg) { -+ retval = -ENOMEM; -+ goto err_threeg; -+ } -+ retval = rfkill_register(rfk_threeg); -+ if (retval) -+ goto err_threeg; -+ -+ return 0; -+ -+err_threeg: -+ rfkill_destroy(rfk_threeg); -+ if (rfk_wlan) -+ rfkill_unregister(rfk_wlan); -+err_wlan: -+ rfkill_destroy(rfk_wlan); -+ if (rfk_bluetooth) -+ rfkill_unregister(rfk_bluetooth); -+err_bluetooth: -+ rfkill_destroy(rfk_bluetooth); -+ -+ return retval; -+} -+ -+static int load_scm_model_init(struct platform_device *sdev) -+{ -+ u8 data; -+ int result; -+ -+ /* allow userland write sysfs file */ -+ dev_attr_bluetooth.store = store_bluetooth; -+ dev_attr_wlan.store = store_wlan; -+ dev_attr_threeg.store = store_threeg; -+ dev_attr_bluetooth.attr.mode |= S_IWUSR; -+ dev_attr_wlan.attr.mode |= S_IWUSR; -+ dev_attr_threeg.attr.mode |= S_IWUSR; -+ -+ /* disable hardware control by fn key */ -+ result = ec_read(MSI_STANDARD_EC_SCM_LOAD_ADDRESS, &data); -+ if (result < 0) -+ return result; -+ -+ result = ec_write(MSI_STANDARD_EC_SCM_LOAD_ADDRESS, -+ data | MSI_STANDARD_EC_SCM_LOAD_MASK); -+ if (result < 0) -+ return result; -+ -+ /* initial rfkill */ -+ result = rfkill_init(sdev); -+ if (result < 0) -+ return result; -+ -+ return 0; -+} -+ - static int __init msi_init(void) - { - int ret; -@@ -397,6 +625,9 @@ static int __init msi_init(void) - if (force || dmi_check_system(msi_dmi_table)) - old_ec_model = 1; - -+ if (!old_ec_model && dmi_check_system(msi_load_scm_models_dmi_table)) -+ load_scm_model = 1; -+ - if (auto_brightness < 0 || auto_brightness > 2) - return -EINVAL; - -@@ -429,6 +660,11 @@ static int __init msi_init(void) - if (ret) - goto fail_platform_device1; - -+ if (load_scm_model && (load_scm_model_init(msipf_device) < 0)) { -+ ret = -EINVAL; -+ goto fail_platform_device1; -+ } -+ - ret = sysfs_create_group(&msipf_device->dev.kobj, &msipf_attribute_group); - if (ret) - goto fail_platform_device2; -@@ -479,6 +715,8 @@ static void __exit msi_cleanup(void) - platform_driver_unregister(&msipf_driver); - backlight_device_unregister(msibl_device); - -+ rfkill_cleanup(); -+ - /* Enable automatic brightness control again */ - if (auto_brightness != 2) - set_auto_brightness(1); diff --git a/driver-core/msi-laptop-support-standard-ec-66-62-command-on-msi-notebook-and-nebook.patch b/driver-core/msi-laptop-support-standard-ec-66-62-command-on-msi-notebook-and-nebook.patch deleted file mode 100644 index 1287ca78403bf0..00000000000000 --- a/driver-core/msi-laptop-support-standard-ec-66-62-command-on-msi-notebook-and-nebook.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 47dda27e67d7de255fa9c9e093441c22ad0d9e56 Mon Sep 17 00:00:00 2001 -From: Lee, Chun-Yi <jlee@novell.com> -Date: Sat, 9 Jan 2010 21:16:52 +0800 -Subject: msi-laptop: Support standard ec 66/62 command on MSI notebook and nebook - -Suppport standard ec 66/62 command on MSI notebook and nebook. MSI -netbook and notebook already support 66/62 command, so, add new -get_state function, and put the old model to non-standard model, but -driver still support those old model. - -Signed-off-by: Lee, Chun-Yi <jlee@novell.com> -Cc: Lennart Poettering <mzxreary@0pointer.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/msi-laptop.c | 43 ++++++++++++++++++++++++++++++++++---- - 1 file changed, 39 insertions(+), 4 deletions(-) - ---- a/drivers/platform/x86/msi-laptop.c -+++ b/drivers/platform/x86/msi-laptop.c -@@ -66,6 +66,11 @@ - #define MSI_EC_COMMAND_WIRELESS 0x10 - #define MSI_EC_COMMAND_LCD_LEVEL 0x11 - -+#define MSI_STANDARD_EC_COMMAND_ADDRESS 0x2e -+#define MSI_STANDARD_EC_BLUETOOTH_MASK (1 << 0) -+#define MSI_STANDARD_EC_WEBCAM_MASK (1 << 1) -+#define MSI_STANDARD_EC_WLAN_MASK (1 << 3) -+ - static int force; - module_param(force, bool, 0); - MODULE_PARM_DESC(force, "Force driver load, ignore DMI data"); -@@ -74,6 +79,9 @@ static int auto_brightness; - module_param(auto_brightness, int, 0); - MODULE_PARM_DESC(auto_brightness, "Enable automatic brightness control (0: disabled; 1: enabled; 2: don't touch)"); - -+static bool old_ec_model; -+static int wlan_s, bluetooth_s; -+ - /* Hardware access */ - - static int set_lcd_level(int level) -@@ -148,6 +156,22 @@ static int get_wireless_state(int *wlan, - return 0; - } - -+static int get_wireless_state_ec_standard(void) -+{ -+ u8 rdata; -+ int result; -+ -+ result = ec_read(MSI_STANDARD_EC_COMMAND_ADDRESS, &rdata); -+ if (result < 0) -+ return -1; -+ -+ wlan_s = !!(rdata & MSI_STANDARD_EC_WLAN_MASK); -+ -+ bluetooth_s = !!(rdata & MSI_STANDARD_EC_BLUETOOTH_MASK); -+ -+ return 0; -+} -+ - /* Backlight device stuff */ - - static int bl_get_brightness(struct backlight_device *b) -@@ -176,7 +200,12 @@ static ssize_t show_wlan(struct device * - - int ret, enabled; - -- ret = get_wireless_state(&enabled, NULL); -+ if (old_ec_model) { -+ ret = get_wireless_state(&enabled, NULL); -+ } else { -+ ret = get_wireless_state_ec_standard(); -+ enabled = wlan_s; -+ } - if (ret < 0) - return ret; - -@@ -189,7 +218,12 @@ static ssize_t show_bluetooth(struct dev - - int ret, enabled; - -- ret = get_wireless_state(NULL, &enabled); -+ if (old_ec_model) { -+ ret = get_wireless_state(NULL, &enabled); -+ } else { -+ ret = get_wireless_state_ec_standard(); -+ enabled = bluetooth_s; -+ } - if (ret < 0) - return ret; - -@@ -339,8 +373,8 @@ static int __init msi_init(void) - if (acpi_disabled) - return -ENODEV; - -- if (!force && !dmi_check_system(msi_dmi_table)) -- return -ENODEV; -+ if (force || dmi_check_system(msi_dmi_table)) -+ old_ec_model = 1; - - if (auto_brightness < 0 || auto_brightness > 2) - return -EINVAL; -@@ -435,3 +469,4 @@ MODULE_ALIAS("dmi:*:svnMICRO-STARINT'LCO - MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1058:pvr0581:rvnMSI:rnMS-1058:*:ct10:*"); - MODULE_ALIAS("dmi:*:svnMicro-StarInternational:pnMS-1412:*:rvnMSI:rnMS-1412:*:cvnMICRO-STARINT'LCO.,LTD:ct10:*"); - MODULE_ALIAS("dmi:*:svnNOTEBOOK:pnSAM2000:pvr0131*:cvnMICRO-STARINT'LCO.,LTD:ct10:*"); -+MODULE_ALIAS("dmi:*:svnMICRO-STARINTERNATIONAL*:pnMS-N034:*"); diff --git a/driver-core/platform-drivers-move-probe-to-.devinit.text-in-arch-arm.patch b/driver-core/platform-drivers-move-probe-to-.devinit.text-in-arch-arm.patch deleted file mode 100644 index 86520f8ab92306..00000000000000 --- a/driver-core/platform-drivers-move-probe-to-.devinit.text-in-arch-arm.patch +++ /dev/null @@ -1,85 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:38:14 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:49 +0100 -Subject: platform-drivers: move probe to .devinit.text in arch/arm -To: Greg KH <gregkh@suse.de> -Cc: Andrew Morton <akpm@linux-foundation.org>, Arnaud Patard <arnaud.patard@rtp-net.org>, Ben Dooks <ben-linux@fluff.org>, Dmitry Baryshkov <dbaryshkov@gmail.com>, Eric Miao <eric.miao@marvell.com>, Kristoffer Ericson <Kristoffer.Ericson@gmail.com>, Liam Girdwood <liam.girdwood@wolfsonmicro.com>, Paul Sokolovsky <pmiscml@gmail.com>, Richard Purdie <rpurdie@rpsys.net>, Russell King <rmk+kernel@arm.linux.org.uk> -Message-ID: <1265313417-5568-1-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to a probe callback is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Cc: Andrew Morton <akpm@linux-foundation.org> -Cc: Ben Dooks <ben-linux@fluff.org> -Cc: Dmitry Baryshkov <dbaryshkov@gmail.com> -Cc: Eric Miao <eric.miao@marvell.com> -Cc: Liam Girdwood <liam.girdwood@wolfsonmicro.com> -Cc: Paul Sokolovsky <pmiscml@gmail.com> -Cc: Richard Purdie <rpurdie@rpsys.net> -Cc: Russell King <rmk+kernel@arm.linux.org.uk> -Acked-by: Arnaud Patard <arnaud.patard@rtp-net.org> -Acked-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> -Acked-by: Kristoffer Ericson <kristoffer.ericson@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - arch/arm/mach-pxa/corgi_ssp.c | 2 +- - arch/arm/mach-pxa/sharpsl_pm.c | 2 +- - arch/arm/mach-s3c2410/h1940-bluetooth.c | 2 +- - arch/arm/mach-sa1100/jornada720_ssp.c | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - ---- a/arch/arm/mach-pxa/corgi_ssp.c -+++ b/arch/arm/mach-pxa/corgi_ssp.c -@@ -204,7 +204,7 @@ void __init corgi_ssp_set_machinfo(struc - ssp_machinfo = machinfo; - } - --static int __init corgi_ssp_probe(struct platform_device *dev) -+static int __devinit corgi_ssp_probe(struct platform_device *dev) - { - int ret; - ---- a/arch/arm/mach-pxa/sharpsl_pm.c -+++ b/arch/arm/mach-pxa/sharpsl_pm.c -@@ -900,7 +900,7 @@ static struct platform_suspend_ops sharp - }; - #endif - --static int __init sharpsl_pm_probe(struct platform_device *pdev) -+static int __devinit sharpsl_pm_probe(struct platform_device *pdev) - { - int ret; - ---- a/arch/arm/mach-s3c2410/h1940-bluetooth.c -+++ b/arch/arm/mach-s3c2410/h1940-bluetooth.c -@@ -56,7 +56,7 @@ static const struct rfkill_ops h1940bt_r - .set_block = h1940bt_set_block, - }; - --static int __init h1940bt_probe(struct platform_device *pdev) -+static int __devinit h1940bt_probe(struct platform_device *pdev) - { - struct rfkill *rfk; - int ret = 0; ---- a/arch/arm/mach-sa1100/jornada720_ssp.c -+++ b/arch/arm/mach-sa1100/jornada720_ssp.c -@@ -130,7 +130,7 @@ void jornada_ssp_end(void) - }; - EXPORT_SYMBOL(jornada_ssp_end); - --static int __init jornada_ssp_probe(struct platform_device *dev) -+static int __devinit jornada_ssp_probe(struct platform_device *dev) - { - int ret; - diff --git a/driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-scsi.patch b/driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-scsi.patch deleted file mode 100644 index 0ade165f042ce1..00000000000000 --- a/driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-scsi.patch +++ /dev/null @@ -1,59 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:39:48 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:50 +0100 -Subject: platform-drivers: move probe to .devinit.text in drivers/scsi -To: Greg KH <gregkh@suse.de> -Cc: Andrew Morton <akpm@linux-foundation.org>, David Brownell <dbrownell@users.sourceforge.net>, Dmitri Vorobiev <dmitri.vorobiev@movial.fi>, Henrik Kretzschmar <henne@nachtwindheim.de>, James Bottomley <James.Bottomley@HansenPartnership.com>, Kay Sievers <kay.sievers@vrfy.org>, peter fuerst <post@pfrst.de>, Ralf Baechle <ralf@linux-mips.org>, Thomas Bogendoerfer <tsbogend@alpha.franken.de> -Message-ID: <1265313417-5568-2-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to a probe callback is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Cc: Andrew Morton <akpm@linux-foundation.org> -Cc: David Brownell <dbrownell@users.sourceforge.net> -Cc: Dmitri Vorobiev <dmitri.vorobiev@movial.fi> -Cc: Henrik Kretzschmar <henne@nachtwindheim.de> -Cc: James Bottomley <James.Bottomley@HansenPartnership.com> -Cc: Kay Sievers <kay.sievers@vrfy.org> -Cc: peter fuerst <post@pfrst.de> -Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> -Acked-by: Ralf Baechle <ralf@linux-mips.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/scsi/sgiwd93.c | 2 +- - drivers/scsi/sni_53c710.c | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/scsi/sgiwd93.c -+++ b/drivers/scsi/sgiwd93.c -@@ -226,7 +226,7 @@ static struct scsi_host_template sgiwd93 - .use_clustering = DISABLE_CLUSTERING, - }; - --static int __init sgiwd93_probe(struct platform_device *pdev) -+static int __devinit sgiwd93_probe(struct platform_device *pdev) - { - struct sgiwd93_platform_data *pd = pdev->dev.platform_data; - unsigned char *wdregs = pd->wdregs; ---- a/drivers/scsi/sni_53c710.c -+++ b/drivers/scsi/sni_53c710.c -@@ -64,7 +64,7 @@ static struct scsi_host_template snirm71 - .module = THIS_MODULE, - }; - --static int __init snirm710_probe(struct platform_device *dev) -+static int __devinit snirm710_probe(struct platform_device *dev) - { - unsigned long base; - struct NCR_700_Host_Parameters *hostdata; diff --git a/driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-video.patch b/driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-video.patch deleted file mode 100644 index 18f67cfb457ee9..00000000000000 --- a/driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-video.patch +++ /dev/null @@ -1,274 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:40:59 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:51 +0100 -Subject: platform-drivers: move probe to .devinit.text in drivers/video -To: Greg KH <gregkh@suse.de> -Cc: Philipp Zabel <philipp.zabel@gmail.com>, Ian Molton <spyro@f2s.com>, Richard Purdie <rpurdie@rpsys.net>, Antonino Daplas <adaplas@gmail.com>, Alberto Mardegan <mardy@users.sourceforge.net>, Andrew Morton <akpm@linux-foundation.org>, Krzysztof Helt <krzysztof.h1@wp.pl>, Roel Kluin <12o3l@tiscali.nl>, Antonino Daplas <adaplas@pol.net>, Frans Pop <elendil@planet.nl>, Helge Deller <deller@gmx.de>, James Simmons <jsimmons@infradead.org>, Greg Kroah-Hartman <gregkh@suse.de>, Magnus Damm <damm@igel.co.jp>, Paul Mundt <lethal@linux-sh.org>, Krzysztof Helt <krzysztof.h1@poczta.fm>, Adrian Bunk <bunk@stusta.de>, Christoph Hellwig <hch@lst.de>, Russell King <rmk+kernel@arm.linux.org.uk>, Matthias Kaehlcke <matthias@kaehlcke.net>, Pavel Machek <pavel@suse.cz>, Ben Dooks <ben-linux@fluff.org>, Arnaud Patard <arnaud.patard@rtp-net.org>, Vincent Sanders <vince@simtec.co.uk>, Andriy Skulysh <askulysh@gmail.com>, Anton Vorontsov <avorontsov@ru.mvista.com>, Roel Kluin <roel.kluin@gmail.com>, Thomas Bogendoerfer <tsbogend@alpha.franken.de>, Kaj-Michael Lang <milang@tal.org>, Martin Michlmayr <tbm@cyrius.com>, Joshua Kinard <kumba@gentoo.org>, Roland Stigge <stigge@antcom.de>, Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>, Ralf Baechle <ralf@linux-mips.org>, linux-fbdev-devel@lists.sourceforge.net, Peter Jones <pjones@redhat.com>, Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>, Jaya Kumar <jayakumar.lkml@gmail.com>, "Maciej W. Rozycki" <macro@linux-mips.org>, Chandramouli Narayanan <mouli@linux.intel.com>, Huang Ying <ying.huang@intel.com> -Message-ID: <1265313417-5568-3-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to a probe callback is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Cc: Adrian Bunk <bunk@stusta.de> -Cc: Alberto Mardegan <mardy@users.sourceforge.net> -Cc: Andrew Morton <akpm@linux-foundation.org> -Cc: Andriy Skulysh <askulysh@gmail.com> -Cc: Antonino Daplas <adaplas@gmail.com> -Cc: Anton Vorontsov <avorontsov@ru.mvista.com> -Cc: Ben Dooks <ben-linux@fluff.org> -Cc: Chandramouli Narayanan <mouli@linux.intel.com> -Cc: Christoph Hellwig <hch@lst.de> -Cc: Frans Pop <elendil@planet.nl> -Cc: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> -Cc: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Helge Deller <deller@gmx.de> -Cc: Huang Ying <ying.huang@intel.com> -Cc: Ian Molton <spyro@f2s.com> -Cc: Joshua Kinard <kumba@gentoo.org> -Cc: Kaj-Michael Lang <milang@tal.org> -Cc: Krzysztof Helt <krzysztof.h1@poczta.fm> -Cc: linux-fbdev-devel@lists.sourceforge.net -Cc: Maciej W. Rozycki <macro@linux-mips.org> -Cc: Magnus Damm <damm@igel.co.jp> -Cc: Martin Michlmayr <tbm@cyrius.com> -Cc: Matthias Kaehlcke <matthias@kaehlcke.net> -Cc: Paul Mundt <lethal@linux-sh.org> -Cc: Pavel Machek <pavel@suse.cz> -Cc: Philipp Zabel <philipp.zabel@gmail.com> -Cc: Richard Purdie <rpurdie@rpsys.net> -Cc: Roel Kluin <roel.kluin@gmail.com> -Cc: Roland Stigge <stigge@antcom.de> -Cc: Russell King <rmk+kernel@arm.linux.org.uk> -Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> -Cc: Vincent Sanders <vince@simtec.co.uk> -Cc: Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> -Acked-by: Ralf Baechle <ralf@linux-mips.org> -Acked-by: Arnaud Patard <arnaud.patard@rtp-net.org> -Acked-by: James Simmons <jsimmons@infradead.org> -Acked-by: Peter Jones <pjones@redhat.com> -Acked-by: Jaya Kumar <jayakumar.lkml@gmail.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/video/acornfb.c | 2 +- - drivers/video/arcfb.c | 2 +- - drivers/video/cobalt_lcdfb.c | 2 +- - drivers/video/efifb.c | 2 +- - drivers/video/epson1355fb.c | 2 +- - drivers/video/gbefb.c | 2 +- - drivers/video/hgafb.c | 2 +- - drivers/video/hitfb.c | 2 +- - drivers/video/q40fb.c | 2 +- - drivers/video/s3c2410fb.c | 4 ++-- - drivers/video/sa1100fb.c | 2 +- - drivers/video/sgivwfb.c | 2 +- - drivers/video/sh_mobile_lcdcfb.c | 2 +- - drivers/video/vesafb.c | 2 +- - drivers/video/vfb.c | 2 +- - drivers/video/vga16fb.c | 2 +- - drivers/video/w100fb.c | 2 +- - 17 files changed, 18 insertions(+), 18 deletions(-) - ---- a/drivers/video/acornfb.c -+++ b/drivers/video/acornfb.c -@@ -1221,7 +1221,7 @@ free_unused_pages(unsigned int virtual_s - printk("acornfb: freed %dK memory\n", mb_freed); - } - --static int __init acornfb_probe(struct platform_device *dev) -+static int __devinit acornfb_probe(struct platform_device *dev) - { - unsigned long size; - u_int h_sync, v_sync; ---- a/drivers/video/arcfb.c -+++ b/drivers/video/arcfb.c -@@ -504,7 +504,7 @@ static struct fb_ops arcfb_ops = { - .fb_ioctl = arcfb_ioctl, - }; - --static int __init arcfb_probe(struct platform_device *dev) -+static int __devinit arcfb_probe(struct platform_device *dev) - { - struct fb_info *info; - int retval = -ENOMEM; ---- a/drivers/video/cobalt_lcdfb.c -+++ b/drivers/video/cobalt_lcdfb.c -@@ -287,7 +287,7 @@ static struct fb_ops cobalt_lcd_fbops = - .fb_cursor = cobalt_lcdfb_cursor, - }; - --static int __init cobalt_lcdfb_probe(struct platform_device *dev) -+static int __devinit cobalt_lcdfb_probe(struct platform_device *dev) - { - struct fb_info *info; - struct resource *res; ---- a/drivers/video/efifb.c -+++ b/drivers/video/efifb.c -@@ -210,7 +210,7 @@ static int __init efifb_setup(char *opti - return 0; - } - --static int __init efifb_probe(struct platform_device *dev) -+static int __devinit efifb_probe(struct platform_device *dev) - { - struct fb_info *info; - int err; ---- a/drivers/video/epson1355fb.c -+++ b/drivers/video/epson1355fb.c -@@ -602,7 +602,7 @@ static int epson1355fb_remove(struct pla - return 0; - } - --int __init epson1355fb_probe(struct platform_device *dev) -+int __devinit epson1355fb_probe(struct platform_device *dev) - { - struct epson1355_par *default_par; - struct fb_info *info; ---- a/drivers/video/gbefb.c -+++ b/drivers/video/gbefb.c -@@ -1128,7 +1128,7 @@ static int __init gbefb_setup(char *opti - return 0; - } - --static int __init gbefb_probe(struct platform_device *p_dev) -+static int __devinit gbefb_probe(struct platform_device *p_dev) - { - int i, ret = 0; - struct fb_info *info; ---- a/drivers/video/hgafb.c -+++ b/drivers/video/hgafb.c -@@ -551,7 +551,7 @@ static struct fb_ops hgafb_ops = { - * Initialization - */ - --static int __init hgafb_probe(struct platform_device *pdev) -+static int __devinit hgafb_probe(struct platform_device *pdev) - { - struct fb_info *info; - ---- a/drivers/video/hitfb.c -+++ b/drivers/video/hitfb.c -@@ -325,7 +325,7 @@ static struct fb_ops hitfb_ops = { - .fb_imageblit = cfb_imageblit, - }; - --static int __init hitfb_probe(struct platform_device *dev) -+static int __devinit hitfb_probe(struct platform_device *dev) - { - unsigned short lcdclor, ldr3, ldvndr; - struct fb_info *info; ---- a/drivers/video/q40fb.c -+++ b/drivers/video/q40fb.c -@@ -85,7 +85,7 @@ static struct fb_ops q40fb_ops = { - .fb_imageblit = cfb_imageblit, - }; - --static int __init q40fb_probe(struct platform_device *dev) -+static int __devinit q40fb_probe(struct platform_device *dev) - { - struct fb_info *info; - ---- a/drivers/video/s3c2410fb.c -+++ b/drivers/video/s3c2410fb.c -@@ -1004,12 +1004,12 @@ dealloc_fb: - return ret; - } - --static int __init s3c2410fb_probe(struct platform_device *pdev) -+static int __devinit s3c2410fb_probe(struct platform_device *pdev) - { - return s3c24xxfb_probe(pdev, DRV_S3C2410); - } - --static int __init s3c2412fb_probe(struct platform_device *pdev) -+static int __devinit s3c2412fb_probe(struct platform_device *pdev) - { - return s3c24xxfb_probe(pdev, DRV_S3C2412); - } ---- a/drivers/video/sa1100fb.c -+++ b/drivers/video/sa1100fb.c -@@ -1435,7 +1435,7 @@ static struct sa1100fb_info * __init sa1 - return fbi; - } - --static int __init sa1100fb_probe(struct platform_device *pdev) -+static int __devinit sa1100fb_probe(struct platform_device *pdev) - { - struct sa1100fb_info *fbi; - int ret, irq; ---- a/drivers/video/sgivwfb.c -+++ b/drivers/video/sgivwfb.c -@@ -745,7 +745,7 @@ int __init sgivwfb_setup(char *options) - /* - * Initialisation - */ --static int __init sgivwfb_probe(struct platform_device *dev) -+static int __devinit sgivwfb_probe(struct platform_device *dev) - { - struct sgivw_par *par; - struct fb_info *info; ---- a/drivers/video/sh_mobile_lcdcfb.c -+++ b/drivers/video/sh_mobile_lcdcfb.c -@@ -943,7 +943,7 @@ static const struct dev_pm_ops sh_mobile - - static int sh_mobile_lcdc_remove(struct platform_device *pdev); - --static int __init sh_mobile_lcdc_probe(struct platform_device *pdev) -+static int __devinit sh_mobile_lcdc_probe(struct platform_device *pdev) - { - struct fb_info *info; - struct sh_mobile_lcdc_priv *priv; ---- a/drivers/video/vesafb.c -+++ b/drivers/video/vesafb.c -@@ -226,7 +226,7 @@ static int __init vesafb_setup(char *opt - return 0; - } - --static int __init vesafb_probe(struct platform_device *dev) -+static int __devinit vesafb_probe(struct platform_device *dev) - { - struct fb_info *info; - int i, err; ---- a/drivers/video/vfb.c -+++ b/drivers/video/vfb.c -@@ -479,7 +479,7 @@ static int __init vfb_setup(char *option - * Initialisation - */ - --static int __init vfb_probe(struct platform_device *dev) -+static int __devinit vfb_probe(struct platform_device *dev) - { - struct fb_info *info; - int retval = -ENOMEM; ---- a/drivers/video/vga16fb.c -+++ b/drivers/video/vga16fb.c -@@ -1293,7 +1293,7 @@ static int vga16fb_setup(char *options) - } - #endif - --static int __init vga16fb_probe(struct platform_device *dev) -+static int __devinit vga16fb_probe(struct platform_device *dev) - { - struct fb_info *info; - struct vga16fb_par *par; ---- a/drivers/video/w100fb.c -+++ b/drivers/video/w100fb.c -@@ -628,7 +628,7 @@ static int w100fb_resume(struct platform - #endif - - --int __init w100fb_probe(struct platform_device *pdev) -+int __devinit w100fb_probe(struct platform_device *pdev) - { - int err = -EIO; - struct w100fb_mach_info *inf; diff --git a/driver-core/sysdev-add-attribute-argument-to-class_attribute-show-store.patch b/driver-core/sysdev-add-attribute-argument-to-class_attribute-show-store.patch deleted file mode 100644 index 3ceb32490d93b2..00000000000000 --- a/driver-core/sysdev-add-attribute-argument-to-class_attribute-show-store.patch +++ /dev/null @@ -1,438 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:46:24 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:07 +0100 (CET) -Subject: driver-core: Add attribute argument to class_attribute show/store -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114807.90132B17C2@basil.firstfloor.org> - - -Passing the attribute to the low level IO functions allows all kinds -of cleanups, by sharing low level IO code without requiring -an own function for every piece of data. - -Also drivers can extend the attributes with own data fields -and use that in the low level function. - -This makes the class attributes the same as sysdev_class attributes -and plain attributes. - -This will allow further cleanups in drivers. - -Full tree sweep converting all users. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/class.c | 4 ++-- - drivers/base/cpu.c | 8 ++++++-- - drivers/base/firmware_class.c | 8 ++++++-- - drivers/base/memory.c | 11 ++++++++--- - drivers/block/osdblk.c | 12 +++++++++--- - drivers/block/pktcdvd.c | 12 +++++++++--- - drivers/gpio/gpiolib.c | 8 ++++++-- - drivers/gpu/drm/drm_sysfs.c | 3 ++- - drivers/infiniband/core/ucm.c | 4 +++- - drivers/infiniband/core/user_mad.c | 4 +++- - drivers/infiniband/core/uverbs_main.c | 4 +++- - drivers/misc/phantom.c | 2 +- - drivers/mtd/ubi/build.c | 3 ++- - drivers/net/bonding/bond_sysfs.c | 5 ++++- - drivers/staging/asus_oled/asus_oled.c | 4 +++- - drivers/uwb/driver.c | 5 ++++- - include/linux/device.h | 6 ++++-- - net/bluetooth/l2cap.c | 4 +++- - net/bluetooth/rfcomm/core.c | 4 +++- - net/bluetooth/rfcomm/sock.c | 4 +++- - net/bluetooth/sco.c | 4 +++- - 21 files changed, 87 insertions(+), 32 deletions(-) - ---- a/drivers/base/class.c -+++ b/drivers/base/class.c -@@ -31,7 +31,7 @@ static ssize_t class_attr_show(struct ko - ssize_t ret = -EIO; - - if (class_attr->show) -- ret = class_attr->show(cp->class, buf); -+ ret = class_attr->show(cp->class, class_attr, buf); - return ret; - } - -@@ -43,7 +43,7 @@ static ssize_t class_attr_store(struct k - ssize_t ret = -EIO; - - if (class_attr->store) -- ret = class_attr->store(cp->class, buf, count); -+ ret = class_attr->store(cp->class, class_attr, buf, count); - return ret; - } - ---- a/drivers/base/cpu.c -+++ b/drivers/base/cpu.c -@@ -79,13 +79,17 @@ void unregister_cpu(struct cpu *cpu) - } - - #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE --static ssize_t cpu_probe_store(struct class *class, const char *buf, -+static ssize_t cpu_probe_store(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, - size_t count) - { - return arch_cpu_probe(buf, count); - } - --static ssize_t cpu_release_store(struct class *class, const char *buf, -+static ssize_t cpu_release_store(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, - size_t count) - { - return arch_cpu_release(buf, count); ---- a/drivers/base/firmware_class.c -+++ b/drivers/base/firmware_class.c -@@ -69,7 +69,9 @@ fw_load_abort(struct firmware_priv *fw_p - } - - static ssize_t --firmware_timeout_show(struct class *class, char *buf) -+firmware_timeout_show(struct class *class, -+ struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", loading_timeout); - } -@@ -87,7 +89,9 @@ firmware_timeout_show(struct class *clas - * Note: zero means 'wait forever'. - **/ - static ssize_t --firmware_timeout_store(struct class *class, const char *buf, size_t count) -+firmware_timeout_store(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, size_t count) - { - loading_timeout = simple_strtol(buf, NULL, 10); - if (loading_timeout < 0) ---- a/drivers/base/memory.c -+++ b/drivers/base/memory.c -@@ -331,7 +331,8 @@ static int block_size_init(void) - */ - #ifdef CONFIG_ARCH_MEMORY_PROBE - static ssize_t --memory_probe_store(struct class *class, const char *buf, size_t count) -+memory_probe_store(struct class *class, struct class_attribute *attr, -+ const char *buf, size_t count) - { - u64 phys_addr; - int nid; -@@ -368,7 +369,9 @@ static inline int memory_probe_init(void - - /* Soft offline a page */ - static ssize_t --store_soft_offline_page(struct class *class, const char *buf, size_t count) -+store_soft_offline_page(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, size_t count) - { - int ret; - u64 pfn; -@@ -385,7 +388,9 @@ store_soft_offline_page(struct class *cl - - /* Forcibly offline a page, including killing processes. */ - static ssize_t --store_hard_offline_page(struct class *class, const char *buf, size_t count) -+store_hard_offline_page(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, size_t count) - { - int ret; - u64 pfn; ---- a/drivers/block/osdblk.c -+++ b/drivers/block/osdblk.c -@@ -476,7 +476,9 @@ static void class_osdblk_release(struct - kfree(cls); - } - --static ssize_t class_osdblk_list(struct class *c, char *data) -+static ssize_t class_osdblk_list(struct class *c, -+ struct class_attribute *attr, -+ char *data) - { - int n = 0; - struct list_head *tmp; -@@ -500,7 +502,9 @@ static ssize_t class_osdblk_list(struct - return n; - } - --static ssize_t class_osdblk_add(struct class *c, const char *buf, size_t count) -+static ssize_t class_osdblk_add(struct class *c, -+ struct class_attribute *attr, -+ const char *buf, size_t count) - { - struct osdblk_device *osdev; - ssize_t rc; -@@ -592,7 +596,9 @@ err_out_mod: - return rc; - } - --static ssize_t class_osdblk_remove(struct class *c, const char *buf, -+static ssize_t class_osdblk_remove(struct class *c, -+ struct class_attribute *attr, -+ const char *buf, - size_t count) - { - struct osdblk_device *osdev = NULL; ---- a/drivers/block/pktcdvd.c -+++ b/drivers/block/pktcdvd.c -@@ -337,7 +337,9 @@ static void class_pktcdvd_release(struct - { - kfree(cls); - } --static ssize_t class_pktcdvd_show_map(struct class *c, char *data) -+static ssize_t class_pktcdvd_show_map(struct class *c, -+ struct class_attribute *attr, -+ char *data) - { - int n = 0; - int idx; -@@ -356,7 +358,9 @@ static ssize_t class_pktcdvd_show_map(st - return n; - } - --static ssize_t class_pktcdvd_store_add(struct class *c, const char *buf, -+static ssize_t class_pktcdvd_store_add(struct class *c, -+ struct class_attribute *attr, -+ const char *buf, - size_t count) - { - unsigned int major, minor; -@@ -376,7 +380,9 @@ static ssize_t class_pktcdvd_store_add(s - return -EINVAL; - } - --static ssize_t class_pktcdvd_store_remove(struct class *c, const char *buf, -+static ssize_t class_pktcdvd_store_remove(struct class *c, -+ struct class_attribute *attr, -+ const char *buf, - size_t count) - { - unsigned int major, minor; ---- a/drivers/gpio/gpiolib.c -+++ b/drivers/gpio/gpiolib.c -@@ -623,7 +623,9 @@ static const struct attribute_group gpio - * /sys/class/gpio/unexport ... write-only - * integer N ... number of GPIO to unexport - */ --static ssize_t export_store(struct class *class, const char *buf, size_t len) -+static ssize_t export_store(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, size_t len) - { - long gpio; - int status; -@@ -653,7 +655,9 @@ done: - return status ? : len; - } - --static ssize_t unexport_store(struct class *class, const char *buf, size_t len) -+static ssize_t unexport_store(struct class *class, -+ struct class_attribute *attr, -+ const char *buf, size_t len) - { - long gpio; - int status; ---- a/drivers/gpu/drm/drm_sysfs.c -+++ b/drivers/gpu/drm/drm_sysfs.c -@@ -71,7 +71,8 @@ static int drm_class_resume(struct devic - } - - /* Display the version of drm_core. This doesn't work right in current design */ --static ssize_t version_show(struct class *dev, char *buf) -+static ssize_t version_show(struct class *dev, struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%s %d.%d.%d %s\n", CORE_NAME, CORE_MAJOR, - CORE_MINOR, CORE_PATCHLEVEL, CORE_DATE); ---- a/drivers/infiniband/core/ucm.c -+++ b/drivers/infiniband/core/ucm.c -@@ -1336,7 +1336,9 @@ static void ib_ucm_remove_one(struct ib_ - device_unregister(&ucm_dev->dev); - } - --static ssize_t show_abi_version(struct class *class, char *buf) -+static ssize_t show_abi_version(struct class *class, -+ struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", IB_USER_CM_ABI_VERSION); - } ---- a/drivers/infiniband/core/user_mad.c -+++ b/drivers/infiniband/core/user_mad.c -@@ -965,7 +965,9 @@ static ssize_t show_port(struct device * - } - static DEVICE_ATTR(port, S_IRUGO, show_port, NULL); - --static ssize_t show_abi_version(struct class *class, char *buf) -+static ssize_t show_abi_version(struct class *class, -+ struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", IB_USER_MAD_ABI_VERSION); - } ---- a/drivers/infiniband/core/uverbs_main.c -+++ b/drivers/infiniband/core/uverbs_main.c -@@ -691,7 +691,9 @@ static ssize_t show_dev_abi_version(stru - } - static DEVICE_ATTR(abi_version, S_IRUGO, show_dev_abi_version, NULL); - --static ssize_t show_abi_version(struct class *class, char *buf) -+static ssize_t show_abi_version(struct class *class, -+ struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", IB_USER_VERBS_ABI_VERSION); - } ---- a/drivers/misc/phantom.c -+++ b/drivers/misc/phantom.c -@@ -497,7 +497,7 @@ static struct pci_driver phantom_pci_dri - .resume = phantom_resume - }; - --static ssize_t phantom_show_version(struct class *cls, char *buf) -+static ssize_t phantom_show_version(struct class *cls, struct class_attribute *attr, char *buf) - { - return sprintf(buf, PHANTOM_VERSION "\n"); - } ---- a/drivers/mtd/ubi/build.c -+++ b/drivers/mtd/ubi/build.c -@@ -89,7 +89,8 @@ DEFINE_MUTEX(ubi_devices_mutex); - static DEFINE_SPINLOCK(ubi_devices_lock); - - /* "Show" method for files in '/<sysfs>/class/ubi/' */ --static ssize_t ubi_version_show(struct class *class, char *buf) -+static ssize_t ubi_version_show(struct class *class, struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", UBI_VERSION); - } ---- a/drivers/net/bonding/bond_sysfs.c -+++ b/drivers/net/bonding/bond_sysfs.c -@@ -51,7 +51,9 @@ - * "show" function for the bond_masters attribute. - * The class parameter is ignored. - */ --static ssize_t bonding_show_bonds(struct class *cls, char *buf) -+static ssize_t bonding_show_bonds(struct class *cls, -+ struct class_attribute *attr, -+ char *buf) - { - struct net *net = current->nsproxy->net_ns; - struct bond_net *bn = net_generic(net, bond_net_id); -@@ -98,6 +100,7 @@ static struct net_device *bond_get_by_na - */ - - static ssize_t bonding_store_bonds(struct class *cls, -+ struct class_attribute *attr, - const char *buffer, size_t count) - { - struct net *net = current->nsproxy->net_ns; ---- a/drivers/staging/asus_oled/asus_oled.c -+++ b/drivers/staging/asus_oled/asus_oled.c -@@ -770,7 +770,9 @@ static struct usb_driver oled_driver = { - .id_table = id_table, - }; - --static ssize_t version_show(struct class *dev, char *buf) -+static ssize_t version_show(struct class *dev, -+ struct class_attribute *attr, -+ char *buf) - { - return sprintf(buf, ASUS_OLED_UNDERSCORE_NAME " %s\n", - ASUS_OLED_VERSION); ---- a/drivers/uwb/driver.c -+++ b/drivers/uwb/driver.c -@@ -74,13 +74,16 @@ - unsigned long beacon_timeout_ms = 500; - - static --ssize_t beacon_timeout_ms_show(struct class *class, char *buf) -+ssize_t beacon_timeout_ms_show(struct class *class, -+ struct class_attribute *attr, -+ char *buf) - { - return scnprintf(buf, PAGE_SIZE, "%lu\n", beacon_timeout_ms); - } - - static - ssize_t beacon_timeout_ms_store(struct class *class, -+ struct class_attribute *attr, - const char *buf, size_t size) - { - unsigned long bt; ---- a/include/linux/device.h -+++ b/include/linux/device.h -@@ -251,8 +251,10 @@ extern struct device *class_find_device( - - struct class_attribute { - struct attribute attr; -- ssize_t (*show)(struct class *class, char *buf); -- ssize_t (*store)(struct class *class, const char *buf, size_t count); -+ ssize_t (*show)(struct class *class, struct class_attribute *attr, -+ char *buf); -+ ssize_t (*store)(struct class *class, struct class_attribute *attr, -+ const char *buf, size_t count); - }; - - #define CLASS_ATTR(_name, _mode, _show, _store) \ ---- a/net/bluetooth/l2cap.c -+++ b/net/bluetooth/l2cap.c -@@ -3937,7 +3937,9 @@ drop: - return 0; - } - --static ssize_t l2cap_sysfs_show(struct class *dev, char *buf) -+static ssize_t l2cap_sysfs_show(struct class *dev, -+ struct class_attribute *attr, -+ char *buf) - { - struct sock *sk; - struct hlist_node *node; ---- a/net/bluetooth/rfcomm/core.c -+++ b/net/bluetooth/rfcomm/core.c -@@ -2098,7 +2098,9 @@ static struct hci_cb rfcomm_cb = { - .security_cfm = rfcomm_security_cfm - }; - --static ssize_t rfcomm_dlc_sysfs_show(struct class *dev, char *buf) -+static ssize_t rfcomm_dlc_sysfs_show(struct class *dev, -+ struct class_attribute *attr, -+ char *buf) - { - struct rfcomm_session *s; - struct list_head *pp, *p; ---- a/net/bluetooth/rfcomm/sock.c -+++ b/net/bluetooth/rfcomm/sock.c -@@ -1061,7 +1061,9 @@ done: - return result; - } - --static ssize_t rfcomm_sock_sysfs_show(struct class *dev, char *buf) -+static ssize_t rfcomm_sock_sysfs_show(struct class *dev, -+ struct class_attribute *attr, -+ char *buf) - { - struct sock *sk; - struct hlist_node *node; ---- a/net/bluetooth/sco.c -+++ b/net/bluetooth/sco.c -@@ -953,7 +953,9 @@ drop: - return 0; - } - --static ssize_t sco_sysfs_show(struct class *dev, char *buf) -+static ssize_t sco_sysfs_show(struct class *dev, -+ struct class_attribute *attr, -+ char *buf) - { - struct sock *sk; - struct hlist_node *node; diff --git a/driver-core/sysdev-add-sysdev_create-remove_files.patch b/driver-core/sysdev-add-sysdev_create-remove_files.patch deleted file mode 100644 index 0f820939a819cb..00000000000000 --- a/driver-core/sysdev-add-sysdev_create-remove_files.patch +++ /dev/null @@ -1,44 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:45:54 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:05 +0100 (CET) -Subject: sysdev: Add sysdev_create/remove_files -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114805.8AA08B17C2@basil.firstfloor.org> - - - -Allow to create/remove arrays of sysdev attributes - -Just wrappers around sysfs_create/move_files - -Will be used later to clean up some drivers. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - include/linux/sysdev.h | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - ---- a/include/linux/sysdev.h -+++ b/include/linux/sysdev.h -@@ -123,6 +123,19 @@ struct sysdev_attribute { - extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *); - extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *); - -+/* Create/remove NULL terminated attribute list */ -+static inline int -+sysdev_create_files(struct sys_device *d, struct sysdev_attribute **a) -+{ -+ return sysfs_create_files(&d->kobj, (const struct attribute **)a); -+} -+ -+static inline void -+sysdev_remove_files(struct sys_device *d, struct sysdev_attribute **a) -+{ -+ return sysfs_remove_files(&d->kobj, (const struct attribute **)a); -+} -+ - struct sysdev_ext_attribute { - struct sysdev_attribute attr; - void *var; diff --git a/driver-core/sysdev-convert-cpu-driver-sysdev-class-attributes.patch b/driver-core/sysdev-convert-cpu-driver-sysdev-class-attributes.patch deleted file mode 100644 index eb9fceaa74139b..00000000000000 --- a/driver-core/sysdev-convert-cpu-driver-sysdev-class-attributes.patch +++ /dev/null @@ -1,85 +0,0 @@ -From andi@firstfloor.org Tue Jan 5 14:28:18 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:00 +0100 (CET) -Subject: sysdev: Convert cpu driver sysdev class attributes -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114800.7CE01B17C2@basil.firstfloor.org> - - - -Using the new attribute argument convert the cpu driver class attributes -to carry the node state. Then use a shared function to do what a lot of -individual functions did before. - -This eliminates an ugly macro. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/cpu.c | 39 ++++++++++++++++++++++----------------- - 1 file changed, 22 insertions(+), 17 deletions(-) - ---- a/drivers/base/cpu.c -+++ b/drivers/base/cpu.c -@@ -141,27 +141,32 @@ static SYSDEV_ATTR(crash_notes, 0400, sh - /* - * Print cpu online, possible, present, and system maps - */ --static ssize_t print_cpus_map(char *buf, const struct cpumask *map) -+ -+struct cpu_attr { -+ struct sysdev_class_attribute attr; -+ const struct cpumask *const * const map; -+}; -+ -+static ssize_t show_cpus_attr(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { -- int n = cpulist_scnprintf(buf, PAGE_SIZE-2, map); -+ struct cpu_attr *ca = container_of(attr, struct cpu_attr, attr); -+ int n = cpulist_scnprintf(buf, PAGE_SIZE-2, *(ca->map)); - - buf[n++] = '\n'; - buf[n] = '\0'; - return n; - } - --#define print_cpus_func(type) \ --static ssize_t print_cpus_##type(struct sysdev_class *class, \ -- struct sysdev_class_attribute *attr, char *buf) \ --{ \ -- return print_cpus_map(buf, cpu_##type##_mask); \ --} \ --static struct sysdev_class_attribute attr_##type##_map = \ -- _SYSDEV_CLASS_ATTR(type, 0444, print_cpus_##type, NULL) -- --print_cpus_func(online); --print_cpus_func(possible); --print_cpus_func(present); -+#define _CPU_ATTR(name, map) \ -+ { _SYSDEV_CLASS_ATTR(name, 0444, show_cpus_attr, NULL), map } -+ -+static struct cpu_attr cpu_attrs[] = { -+ _CPU_ATTR(online, &cpu_online_mask), -+ _CPU_ATTR(possible, &cpu_possible_mask), -+ _CPU_ATTR(present, &cpu_present_mask), -+}; - - /* - * Print values for NR_CPUS and offlined cpus -@@ -208,9 +213,9 @@ static ssize_t print_cpus_offline(struct - static SYSDEV_CLASS_ATTR(offline, 0444, print_cpus_offline, NULL); - - static struct sysdev_class_attribute *cpu_state_attr[] = { -- &attr_online_map, -- &attr_possible_map, -- &attr_present_map, -+ &cpu_attrs[0].attr, -+ &cpu_attrs[1].attr, -+ &cpu_attrs[2].attr, - &attr_kernel_max, - &attr_offline, - }; diff --git a/driver-core/sysdev-convert-node-driver-class-attributes-to-be-data-driven.patch b/driver-core/sysdev-convert-node-driver-class-attributes-to-be-data-driven.patch deleted file mode 100644 index 408bce26c7acf1..00000000000000 --- a/driver-core/sysdev-convert-node-driver-class-attributes-to-be-data-driven.patch +++ /dev/null @@ -1,110 +0,0 @@ -From andi@firstfloor.org Tue Jan 5 14:27:32 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:47:59 +0100 (CET) -Subject: sysdev: Convert node driver class attributes to be data driven -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114759.7A2EEB17C2@basil.firstfloor.org> - - - -Using the new attribute argument convert the node driver class -attributes to carry the node state. Then use a shared function to do -what a lot of individual functions did before. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/node.c | 65 ++++++++++++++-------------------------------------- - 1 file changed, 18 insertions(+), 47 deletions(-) - ---- a/drivers/base/node.c -+++ b/drivers/base/node.c -@@ -544,59 +544,29 @@ static ssize_t print_nodes_state(enum no - return n; - } - --static ssize_t print_nodes_possible(struct sysdev_class *class, -- struct sysdev_class_attribute *attr, char *buf) --{ -- return print_nodes_state(N_POSSIBLE, buf); --} -- --static ssize_t print_nodes_online(struct sysdev_class *class, -- struct sysdev_class_attribute *attr, -- char *buf) --{ -- return print_nodes_state(N_ONLINE, buf); --} -- --static ssize_t print_nodes_has_normal_memory(struct sysdev_class *class, -- struct sysdev_class_attribute *attr, -- char *buf) --{ -- return print_nodes_state(N_NORMAL_MEMORY, buf); --} -- --static ssize_t print_nodes_has_cpu(struct sysdev_class *class, -- struct sysdev_class_attribute *attr, -- char *buf) --{ -- return print_nodes_state(N_CPU, buf); --} -- --static SYSDEV_CLASS_ATTR(possible, 0444, print_nodes_possible, NULL); --static SYSDEV_CLASS_ATTR(online, 0444, print_nodes_online, NULL); --static SYSDEV_CLASS_ATTR(has_normal_memory, 0444, print_nodes_has_normal_memory, -- NULL); --static SYSDEV_CLASS_ATTR(has_cpu, 0444, print_nodes_has_cpu, NULL); -+struct node_attr { -+ struct sysdev_class_attribute attr; -+ enum node_states state; -+}; - --#ifdef CONFIG_HIGHMEM --static ssize_t print_nodes_has_high_memory(struct sysdev_class *class, -- struct sysdev_class_attribute *attr, -- char *buf) -+static ssize_t show_node_state(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, char *buf) - { -- return print_nodes_state(N_HIGH_MEMORY, buf); -+ struct node_attr *na = container_of(attr, struct node_attr, attr); -+ return print_nodes_state(na->state, buf); - } - --static SYSDEV_CLASS_ATTR(has_high_memory, 0444, print_nodes_has_high_memory, -- NULL); --#endif -+#define _NODE_ATTR(name, state) \ -+ { _SYSDEV_CLASS_ATTR(name, 0444, show_node_state, NULL), state } - --struct sysdev_class_attribute *node_state_attr[] = { -- &attr_possible, -- &attr_online, -- &attr_has_normal_memory, -+static struct node_attr node_state_attr[] = { -+ _NODE_ATTR(possible, N_POSSIBLE), -+ _NODE_ATTR(online, N_ONLINE), -+ _NODE_ATTR(has_normal_memory, N_NORMAL_MEMORY), -+ _NODE_ATTR(has_cpu, N_CPU), - #ifdef CONFIG_HIGHMEM -- &attr_has_high_memory, -+ _NODE_ATTR(has_high_memory, N_HIGH_MEMORY), - #endif -- &attr_has_cpu, - }; - - static int node_states_init(void) -@@ -604,9 +574,10 @@ static int node_states_init(void) - int i; - int err = 0; - -+ BUILD_BUG_ON(ARRAY_SIZE(node_state_attr) != NR_NODE_STATES); - for (i = 0; i < NR_NODE_STATES; i++) { - int ret; -- ret = sysdev_class_create_file(&node_class, node_state_attr[i]); -+ ret = sysdev_class_create_file(&node_class, &node_state_attr[i].attr); - if (!err) - err = ret; - } diff --git a/driver-core/sysdev-convert-node-driver.patch b/driver-core/sysdev-convert-node-driver.patch deleted file mode 100644 index 261455f0f5508d..00000000000000 --- a/driver-core/sysdev-convert-node-driver.patch +++ /dev/null @@ -1,119 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:45:18 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:03 +0100 (CET) -Subject: sysdev: Convert node driver -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114803.85222B17C2@basil.firstfloor.org> - -Use sysdev_class attribute arrays in node driver - -Convert the node driver to sysdev_class attribute arrays. This -greatly cleans up the code and remove a lot of code. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/cpu.c | 57 +++++++++++++++-------------------------------------- - 1 file changed, 17 insertions(+), 40 deletions(-) - ---- a/drivers/base/cpu.c -+++ b/drivers/base/cpu.c -@@ -13,8 +13,11 @@ - - #include "base.h" - -+static struct sysdev_class_attribute *cpu_sysdev_class_attrs[]; -+ - struct sysdev_class cpu_sysdev_class = { - .name = "cpu", -+ .attrs = cpu_sysdev_class_attrs, - }; - EXPORT_SYMBOL(cpu_sysdev_class); - -@@ -90,20 +93,6 @@ static ssize_t cpu_release_store(struct - - static CLASS_ATTR(probe, S_IWUSR, NULL, cpu_probe_store); - static CLASS_ATTR(release, S_IWUSR, NULL, cpu_release_store); -- --int __init cpu_probe_release_init(void) --{ -- int rc; -- -- rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj, -- &class_attr_probe.attr); -- if (!rc) -- rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj, -- &class_attr_release.attr); -- -- return rc; --} --device_initcall(cpu_probe_release_init); - #endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */ - - #else /* ... !CONFIG_HOTPLUG_CPU */ -@@ -162,6 +151,7 @@ static ssize_t show_cpus_attr(struct sys - #define _CPU_ATTR(name, map) \ - { _SYSDEV_CLASS_ATTR(name, 0444, show_cpus_attr, NULL), map } - -+/* Keep in sync with cpu_sysdev_class_attrs */ - static struct cpu_attr cpu_attrs[] = { - _CPU_ATTR(online, &cpu_online_mask), - _CPU_ATTR(possible, &cpu_possible_mask), -@@ -212,29 +202,6 @@ static ssize_t print_cpus_offline(struct - } - static SYSDEV_CLASS_ATTR(offline, 0444, print_cpus_offline, NULL); - --static struct sysdev_class_attribute *cpu_state_attr[] = { -- &cpu_attrs[0].attr, -- &cpu_attrs[1].attr, -- &cpu_attrs[2].attr, -- &attr_kernel_max, -- &attr_offline, --}; -- --static int cpu_states_init(void) --{ -- int i; -- int err = 0; -- -- for (i = 0; i < ARRAY_SIZE(cpu_state_attr); i++) { -- int ret; -- ret = sysdev_class_create_file(&cpu_sysdev_class, -- cpu_state_attr[i]); -- if (!err) -- err = ret; -- } -- return err; --} -- - /* - * register_cpu - Setup a sysfs device for a CPU. - * @cpu - cpu->hotpluggable field set to 1 will generate a control file in -@@ -280,9 +247,6 @@ int __init cpu_dev_init(void) - int err; - - err = sysdev_class_register(&cpu_sysdev_class); -- if (!err) -- err = cpu_states_init(); -- - #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT) - if (!err) - err = sched_create_sysfs_power_savings_entries(&cpu_sysdev_class); -@@ -290,3 +254,16 @@ int __init cpu_dev_init(void) - - return err; - } -+ -+static struct sysdev_class_attribute *cpu_sysdev_class_attrs[] = { -+#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE -+ &class_attr_probe.attr, -+ &class_attr_release.attr, -+#endif -+ &cpu_attrs[0].attr, -+ &cpu_attrs[1].attr, -+ &cpu_attrs[2].attr, -+ &attr_kernel_max, -+ &attr_offline, -+ NULL -+}; diff --git a/driver-core/sysdev-fix-missing-s390-conversion.patch b/driver-core/sysdev-fix-missing-s390-conversion.patch deleted file mode 100644 index 5f0ea6c8a38f00..00000000000000 --- a/driver-core/sysdev-fix-missing-s390-conversion.patch +++ /dev/null @@ -1,35 +0,0 @@ -From heiko.carstens@de.ibm.com Wed Feb 17 15:56:39 2010 -From: Heiko Carstens <heiko.carstens@de.ibm.com> -Date: Fri, 12 Feb 2010 11:19:24 +0100 -Subject: sysdev: fix missing s390 conversion -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Andi Kleen <ak@linux.intel.com>, Martin Schwidefsky <schwidefsky@de.ibm.com>, linux-kernel@vger.kernel.org -Message-ID: <20100212101924.GA27548@osiris.boeblingen.de.ibm.com> - -From: Heiko Carstens <heiko.carstens@de.ibm.com> - -In linux-next "sysdev: Pass attribute in sysdev_class attributes show/store" -forgot to convert one place in s390 code. Here is the missing part. - -Cc: Andi Kleen <ak@linux.intel.com> -Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> -Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - arch/s390/kernel/smp.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - ---- a/arch/s390/kernel/smp.c -+++ b/arch/s390/kernel/smp.c -@@ -1033,7 +1033,9 @@ static ssize_t __ref rescan_store(struct - static SYSDEV_CLASS_ATTR(rescan, 0200, NULL, rescan_store); - #endif /* CONFIG_HOTPLUG_CPU */ - --static ssize_t dispatching_show(struct sysdev_class *class, char *buf) -+static ssize_t dispatching_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - ssize_t count; - diff --git a/driver-core/sysdev-fix-type-of-sysdev-class-attribute-in-memory-driver.patch b/driver-core/sysdev-fix-type-of-sysdev-class-attribute-in-memory-driver.patch deleted file mode 100644 index 1baf4c72c5acda..00000000000000 --- a/driver-core/sysdev-fix-type-of-sysdev-class-attribute-in-memory-driver.patch +++ /dev/null @@ -1,45 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:46:10 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:06 +0100 (CET) -Subject: sysdev: Fix type of sysdev class attribute in memory driver -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114806.8D457B17C2@basil.firstfloor.org> - - - -This attribute is really a sysdev_class attribute, not a plain class attribute. - -They are identical in layout currently, but this might not always be -the case. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/base/memory.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - ---- a/drivers/base/memory.c -+++ b/drivers/base/memory.c -@@ -309,17 +309,18 @@ static SYSDEV_ATTR(removable, 0444, show - * Block size attribute stuff - */ - static ssize_t --print_block_size(struct class *class, char *buf) -+print_block_size(struct sysdev_class *class, struct sysdev_class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%#lx\n", (unsigned long)PAGES_PER_SECTION * PAGE_SIZE); - } - --static CLASS_ATTR(block_size_bytes, 0444, print_block_size, NULL); -+static SYSDEV_CLASS_ATTR(block_size_bytes, 0444, print_block_size, NULL); - - static int block_size_init(void) - { - return sysfs_create_file(&memory_sysdev_class.kset.kobj, -- &class_attr_block_size_bytes.attr); -+ &attr_block_size_bytes.attr); - } - - /* diff --git a/driver-core/sysdev-fix-up-the-probe-release-attributes.patch b/driver-core/sysdev-fix-up-the-probe-release-attributes.patch deleted file mode 100644 index 15bdf06f317509..00000000000000 --- a/driver-core/sysdev-fix-up-the-probe-release-attributes.patch +++ /dev/null @@ -1,62 +0,0 @@ -From foo@baz Thu Jan 21 15:07:59 PST 2010 -Date: Thu, 21 Jan 2010 15:07:59 -0800 -To: Greg KH <greg@kroah.com> -From: Greg Kroah-Hartman <gregkh@suse.de> -Subject: sysdev: fix up the probe/release attributes - -These should be sysdev attributes, not class attributes. This patch -should resolve the problem. - -Thanks to Stephen Rothwell for pointing out the problem. - -Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> -Cc: Andi Kleen <andi@firstfloor.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> ---- - drivers/base/cpu.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - ---- a/drivers/base/cpu.c -+++ b/drivers/base/cpu.c -@@ -79,24 +79,24 @@ void unregister_cpu(struct cpu *cpu) - } - - #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE --static ssize_t cpu_probe_store(struct class *class, -- struct class_attribute *attr, -+static ssize_t cpu_probe_store(struct sys_device *dev, -+ struct sysdev_attribute *attr, - const char *buf, - size_t count) - { - return arch_cpu_probe(buf, count); - } - --static ssize_t cpu_release_store(struct class *class, -- struct class_attribute *attr, -+static ssize_t cpu_release_store(struct sys_device *dev, -+ struct sysdev_attribute *attr, - const char *buf, - size_t count) - { - return arch_cpu_release(buf, count); - } - --static CLASS_ATTR(probe, S_IWUSR, NULL, cpu_probe_store); --static CLASS_ATTR(release, S_IWUSR, NULL, cpu_release_store); -+static SYSDEV_ATTR(probe, S_IWUSR, NULL, cpu_probe_store); -+static SYSDEV_ATTR(release, S_IWUSR, NULL, cpu_release_store); - #endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */ - - #else /* ... !CONFIG_HOTPLUG_CPU */ -@@ -261,8 +261,8 @@ int __init cpu_dev_init(void) - - static struct sysdev_class_attribute *cpu_sysdev_class_attrs[] = { - #ifdef CONFIG_ARCH_CPU_PROBE_RELEASE -- &class_attr_probe.attr, -- &class_attr_release.attr, -+ &attr_probe, -+ &attr_release, - #endif - &cpu_attrs[0].attr, - &cpu_attrs[1].attr, diff --git a/driver-core/sysdev-pass-attribute-in-sysdev_class-attributes-show-store.patch b/driver-core/sysdev-pass-attribute-in-sysdev_class-attributes-show-store.patch deleted file mode 100644 index 776ed5ef88084c..00000000000000 --- a/driver-core/sysdev-pass-attribute-in-sysdev_class-attributes-show-store.patch +++ /dev/null @@ -1,442 +0,0 @@ -From andi@firstfloor.org Tue Jan 5 14:27:04 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:47:58 +0100 (CET) -Subject: sysdev: Pass attribute in sysdev_class attributes show/store -To: greg@kroah.com -Message-ID: <20100105114758.7773BB17C2@basil.firstfloor.org> - - - -Passing the attribute to the low level IO functions allows all kinds -of cleanups, by sharing low level IO code without requiring -an own function for every piece of data. - -Also drivers can extend the attributes with own data fields -and use that in the low level function. - -Similar to sysdev_attributes and normal attributes. - -This is a tree-wide sweep, converting everything in one go. - -No functional changes in this patch other than passing the new -argument everywhere. - -Tested on x86, the non x86 parts are uncompiled. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - arch/mips/txx9/generic/7segled.c | 5 +++ - arch/s390/kernel/smp.c | 8 ++++-- - arch/s390/kernel/time.c | 49 +++++++++++++++++++++++++++++---------- - drivers/base/cpu.c | 9 ++++--- - drivers/base/node.c | 17 +++++++++---- - drivers/base/sys.c | 4 +-- - drivers/cpuidle/sysfs.c | 4 +++ - include/linux/sysdev.h | 6 +++- - kernel/perf_event.c | 13 +++++++--- - kernel/sched.c | 4 +++ - 10 files changed, 89 insertions(+), 30 deletions(-) - ---- a/arch/mips/txx9/generic/7segled.c -+++ b/arch/mips/txx9/generic/7segled.c -@@ -58,13 +58,16 @@ static ssize_t raw_store(struct sys_devi - static SYSDEV_ATTR(ascii, 0200, NULL, ascii_store); - static SYSDEV_ATTR(raw, 0200, NULL, raw_store); - --static ssize_t map_seg7_show(struct sysdev_class *class, char *buf) -+static ssize_t map_seg7_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - memcpy(buf, &txx9_seg7map, sizeof(txx9_seg7map)); - return sizeof(txx9_seg7map); - } - - static ssize_t map_seg7_store(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - const char *buf, size_t size) - { - if (size != sizeof(txx9_seg7map)) ---- a/arch/s390/kernel/smp.c -+++ b/arch/s390/kernel/smp.c -@@ -1020,7 +1020,9 @@ out: - return rc; - } - --static ssize_t __ref rescan_store(struct sysdev_class *class, const char *buf, -+static ssize_t __ref rescan_store(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ const char *buf, - size_t count) - { - int rc; -@@ -1041,7 +1043,9 @@ static ssize_t dispatching_show(struct s - return count; - } - --static ssize_t dispatching_store(struct sysdev_class *dev, const char *buf, -+static ssize_t dispatching_store(struct sysdev_class *dev, -+ struct sysdev_class_attribute *attr, -+ const char *buf, - size_t count) - { - int val, rc; ---- a/arch/s390/kernel/time.c -+++ b/arch/s390/kernel/time.c -@@ -1116,14 +1116,18 @@ static struct sys_device etr_port1_dev = - /* - * ETR class attributes - */ --static ssize_t etr_stepping_port_show(struct sysdev_class *class, char *buf) -+static ssize_t etr_stepping_port_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%i\n", etr_port0.esw.p); - } - - static SYSDEV_CLASS_ATTR(stepping_port, 0400, etr_stepping_port_show, NULL); - --static ssize_t etr_stepping_mode_show(struct sysdev_class *class, char *buf) -+static ssize_t etr_stepping_mode_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - char *mode_str; - -@@ -1584,7 +1588,9 @@ static struct sysdev_class stp_sysclass - .name = "stp", - }; - --static ssize_t stp_ctn_id_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_ctn_id_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online) - return -ENODATA; -@@ -1594,7 +1600,9 @@ static ssize_t stp_ctn_id_show(struct sy - - static SYSDEV_CLASS_ATTR(ctn_id, 0400, stp_ctn_id_show, NULL); - --static ssize_t stp_ctn_type_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_ctn_type_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online) - return -ENODATA; -@@ -1603,7 +1611,9 @@ static ssize_t stp_ctn_type_show(struct - - static SYSDEV_CLASS_ATTR(ctn_type, 0400, stp_ctn_type_show, NULL); - --static ssize_t stp_dst_offset_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_dst_offset_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online || !(stp_info.vbits & 0x2000)) - return -ENODATA; -@@ -1612,7 +1622,9 @@ static ssize_t stp_dst_offset_show(struc - - static SYSDEV_CLASS_ATTR(dst_offset, 0400, stp_dst_offset_show, NULL); - --static ssize_t stp_leap_seconds_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_leap_seconds_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online || !(stp_info.vbits & 0x8000)) - return -ENODATA; -@@ -1621,7 +1633,9 @@ static ssize_t stp_leap_seconds_show(str - - static SYSDEV_CLASS_ATTR(leap_seconds, 0400, stp_leap_seconds_show, NULL); - --static ssize_t stp_stratum_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_stratum_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online) - return -ENODATA; -@@ -1630,7 +1644,9 @@ static ssize_t stp_stratum_show(struct s - - static SYSDEV_CLASS_ATTR(stratum, 0400, stp_stratum_show, NULL); - --static ssize_t stp_time_offset_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_time_offset_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online || !(stp_info.vbits & 0x0800)) - return -ENODATA; -@@ -1639,7 +1655,9 @@ static ssize_t stp_time_offset_show(stru - - static SYSDEV_CLASS_ATTR(time_offset, 0400, stp_time_offset_show, NULL); - --static ssize_t stp_time_zone_offset_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_time_zone_offset_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online || !(stp_info.vbits & 0x4000)) - return -ENODATA; -@@ -1649,7 +1667,9 @@ static ssize_t stp_time_zone_offset_show - static SYSDEV_CLASS_ATTR(time_zone_offset, 0400, - stp_time_zone_offset_show, NULL); - --static ssize_t stp_timing_mode_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_timing_mode_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online) - return -ENODATA; -@@ -1658,7 +1678,9 @@ static ssize_t stp_timing_mode_show(stru - - static SYSDEV_CLASS_ATTR(timing_mode, 0400, stp_timing_mode_show, NULL); - --static ssize_t stp_timing_state_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_timing_state_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - if (!stp_online) - return -ENODATA; -@@ -1667,12 +1689,15 @@ static ssize_t stp_timing_state_show(str - - static SYSDEV_CLASS_ATTR(timing_state, 0400, stp_timing_state_show, NULL); - --static ssize_t stp_online_show(struct sysdev_class *class, char *buf) -+static ssize_t stp_online_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%i\n", stp_online); - } - - static ssize_t stp_online_store(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - const char *buf, size_t count) - { - unsigned int value; ---- a/drivers/base/cpu.c -+++ b/drivers/base/cpu.c -@@ -151,7 +151,8 @@ static ssize_t print_cpus_map(char *buf, - } - - #define print_cpus_func(type) \ --static ssize_t print_cpus_##type(struct sysdev_class *class, char *buf) \ -+static ssize_t print_cpus_##type(struct sysdev_class *class, \ -+ struct sysdev_class_attribute *attr, char *buf) \ - { \ - return print_cpus_map(buf, cpu_##type##_mask); \ - } \ -@@ -165,7 +166,8 @@ print_cpus_func(present); - /* - * Print values for NR_CPUS and offlined cpus - */ --static ssize_t print_cpus_kernel_max(struct sysdev_class *class, char *buf) -+static ssize_t print_cpus_kernel_max(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, char *buf) - { - int n = snprintf(buf, PAGE_SIZE-2, "%d\n", NR_CPUS - 1); - return n; -@@ -175,7 +177,8 @@ static SYSDEV_CLASS_ATTR(kernel_max, 044 - /* arch-optional setting to enable display of offline cpus >= nr_cpu_ids */ - unsigned int total_cpus; - --static ssize_t print_cpus_offline(struct sysdev_class *class, char *buf) -+static ssize_t print_cpus_offline(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, char *buf) - { - int n = 0, len = PAGE_SIZE-2; - cpumask_var_t offline; ---- a/drivers/base/node.c -+++ b/drivers/base/node.c -@@ -544,23 +544,29 @@ static ssize_t print_nodes_state(enum no - return n; - } - --static ssize_t print_nodes_possible(struct sysdev_class *class, char *buf) -+static ssize_t print_nodes_possible(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, char *buf) - { - return print_nodes_state(N_POSSIBLE, buf); - } - --static ssize_t print_nodes_online(struct sysdev_class *class, char *buf) -+static ssize_t print_nodes_online(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return print_nodes_state(N_ONLINE, buf); - } - - static ssize_t print_nodes_has_normal_memory(struct sysdev_class *class, -- char *buf) -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return print_nodes_state(N_NORMAL_MEMORY, buf); - } - --static ssize_t print_nodes_has_cpu(struct sysdev_class *class, char *buf) -+static ssize_t print_nodes_has_cpu(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return print_nodes_state(N_CPU, buf); - } -@@ -573,7 +579,8 @@ static SYSDEV_CLASS_ATTR(has_cpu, 0444, - - #ifdef CONFIG_HIGHMEM - static ssize_t print_nodes_has_high_memory(struct sysdev_class *class, -- char *buf) -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return print_nodes_state(N_HIGH_MEMORY, buf); - } ---- a/drivers/base/sys.c -+++ b/drivers/base/sys.c -@@ -89,7 +89,7 @@ static ssize_t sysdev_class_show(struct - struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr); - - if (class_attr->show) -- return class_attr->show(class, buffer); -+ return class_attr->show(class, class_attr, buffer); - return -EIO; - } - -@@ -100,7 +100,7 @@ static ssize_t sysdev_class_store(struct - struct sysdev_class_attribute *class_attr = to_sysdev_class_attr(attr); - - if (class_attr->store) -- return class_attr->store(class, buffer, count); -+ return class_attr->store(class, class_attr, buffer, count); - return -EIO; - } - ---- a/drivers/cpuidle/sysfs.c -+++ b/drivers/cpuidle/sysfs.c -@@ -22,6 +22,7 @@ static int __init cpuidle_sysfs_setup(ch - __setup("cpuidle_sysfs_switch", cpuidle_sysfs_setup); - - static ssize_t show_available_governors(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - char *buf) - { - ssize_t i = 0; -@@ -41,6 +42,7 @@ out: - } - - static ssize_t show_current_driver(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - char *buf) - { - ssize_t ret; -@@ -56,6 +58,7 @@ static ssize_t show_current_driver(struc - } - - static ssize_t show_current_governor(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - char *buf) - { - ssize_t ret; -@@ -71,6 +74,7 @@ static ssize_t show_current_governor(str - } - - static ssize_t store_current_governor(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - const char *buf, size_t count) - { - char gov_name[CPUIDLE_NAME_LEN]; ---- a/include/linux/sysdev.h -+++ b/include/linux/sysdev.h -@@ -41,8 +41,10 @@ struct sysdev_class { - - struct sysdev_class_attribute { - struct attribute attr; -- ssize_t (*show)(struct sysdev_class *, char *); -- ssize_t (*store)(struct sysdev_class *, const char *, size_t); -+ ssize_t (*show)(struct sysdev_class *, struct sysdev_class_attribute *, -+ char *); -+ ssize_t (*store)(struct sysdev_class *, struct sysdev_class_attribute *, -+ const char *, size_t); - }; - - #define _SYSDEV_CLASS_ATTR(_name,_mode,_show,_store) \ ---- a/kernel/perf_event.c -+++ b/kernel/perf_event.c -@@ -5481,13 +5481,16 @@ void __init perf_event_init(void) - register_cpu_notifier(&perf_cpu_nb); - } - --static ssize_t perf_show_reserve_percpu(struct sysdev_class *class, char *buf) -+static ssize_t perf_show_reserve_percpu(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", perf_reserved_percpu); - } - - static ssize_t - perf_set_reserve_percpu(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - const char *buf, - size_t count) - { -@@ -5516,13 +5519,17 @@ perf_set_reserve_percpu(struct sysdev_cl - return count; - } - --static ssize_t perf_show_overcommit(struct sysdev_class *class, char *buf) -+static ssize_t perf_show_overcommit(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ char *buf) - { - return sprintf(buf, "%d\n", perf_overcommit); - } - - static ssize_t --perf_set_overcommit(struct sysdev_class *class, const char *buf, size_t count) -+perf_set_overcommit(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, -+ const char *buf, size_t count) - { - unsigned long val; - int err; ---- a/kernel/sched.c -+++ b/kernel/sched.c -@@ -7406,11 +7406,13 @@ static ssize_t sched_power_savings_store - - #ifdef CONFIG_SCHED_MC - static ssize_t sched_mc_power_savings_show(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - char *page) - { - return sprintf(page, "%u\n", sched_mc_power_savings); - } - static ssize_t sched_mc_power_savings_store(struct sysdev_class *class, -+ struct sysdev_class_attribute *attr, - const char *buf, size_t count) - { - return sched_power_savings_store(buf, count, 0); -@@ -7422,11 +7424,13 @@ static SYSDEV_CLASS_ATTR(sched_mc_power_ - - #ifdef CONFIG_SCHED_SMT - static ssize_t sched_smt_power_savings_show(struct sysdev_class *dev, -+ struct sysdev_class_attribute *attr, - char *page) - { - return sprintf(page, "%u\n", sched_smt_power_savings); - } - static ssize_t sched_smt_power_savings_store(struct sysdev_class *dev, -+ struct sysdev_class_attribute *attr, - const char *buf, size_t count) - { - return sched_power_savings_store(buf, count, 1); diff --git a/driver-core/sysdev-use-sysdev_class-attribute-arrays-in-node-driver.patch b/driver-core/sysdev-use-sysdev_class-attribute-arrays-in-node-driver.patch deleted file mode 100644 index 4b9a1bc19c3b62..00000000000000 --- a/driver-core/sysdev-use-sysdev_class-attribute-arrays-in-node-driver.patch +++ /dev/null @@ -1,79 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:45:41 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:04 +0100 (CET) -Subject: sysdev: Use sysdev_class attribute arrays in node driver -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114804.87EAAB17C2@basil.firstfloor.org> - - - -Convert the node driver to sysdev_class attribute arrays. This -greatly cleans up the code and remove a lot of code. - -Saves ~150 bytes of code on x86-64. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/node.c | 31 ++++++++++++++++--------------- - 1 file changed, 16 insertions(+), 15 deletions(-) - ---- a/drivers/base/node.c -+++ b/drivers/base/node.c -@@ -16,8 +16,11 @@ - #include <linux/device.h> - #include <linux/swap.h> - -+static struct sysdev_class_attribute *node_state_attrs[]; -+ - static struct sysdev_class node_class = { - .name = "node", -+ .attrs = node_state_attrs, - }; - - -@@ -569,29 +572,27 @@ static struct node_attr node_state_attr[ - #endif - }; - --static int node_states_init(void) --{ -- int i; -- int err = 0; -- -- BUILD_BUG_ON(ARRAY_SIZE(node_state_attr) != NR_NODE_STATES); -- for (i = 0; i < NR_NODE_STATES; i++) { -- int ret; -- ret = sysdev_class_create_file(&node_class, &node_state_attr[i].attr); -- if (!err) -- err = ret; -- } -- return err; --} -+static struct sysdev_class_attribute *node_state_attrs[] = { -+ &node_state_attr[0].attr, -+ &node_state_attr[1].attr, -+ &node_state_attr[2].attr, -+ &node_state_attr[3].attr, -+#ifdef CONFIG_HIGHMEM -+ &node_state_attr[4].attr, -+#endif -+ NULL -+}; - - #define NODE_CALLBACK_PRI 2 /* lower than SLAB */ - static int __init register_node_type(void) - { - int ret; - -+ BUILD_BUG_ON(ARRAY_SIZE(node_state_attr) != NR_NODE_STATES); -+ BUILD_BUG_ON(ARRAY_SIZE(node_state_attrs)-1 != NR_NODE_STATES); -+ - ret = sysdev_class_register(&node_class); - if (!ret) { -- ret = node_states_init(); - hotplug_memory_notifier(node_memory_callback, - NODE_CALLBACK_PRI); - } diff --git a/driver-core/sysfs-add-attribute-array-to-sysdev-classes.patch b/driver-core/sysfs-add-attribute-array-to-sysdev-classes.patch deleted file mode 100644 index a13420d7cc9ba3..00000000000000 --- a/driver-core/sysfs-add-attribute-array-to-sysdev-classes.patch +++ /dev/null @@ -1,67 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:45:05 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:02 +0100 (CET) -Subject: sysfs: Add attribute array to sysdev classes -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114802.8240CB17C2@basil.firstfloor.org> - - - -Add a attribute array that is automatically registered and unregistered -to struct sysdev_class. This is similar to what struct class has. - -A lot of drivers add list of attributes, so it's better to do -this easily in the common sysdev layer. - -This adds a new field to struct sysdev_class. I audited the -whole tree and there are no dynamically allocated sysdev classes, -so this is fully compatible. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/base/sys.c | 9 ++++++++- - include/linux/sysdev.h | 2 ++ - 2 files changed, 10 insertions(+), 1 deletion(-) - ---- a/drivers/base/sys.c -+++ b/drivers/base/sys.c -@@ -145,13 +145,20 @@ int sysdev_class_register(struct sysdev_ - if (retval) - return retval; - -- return kset_register(&cls->kset); -+ retval = kset_register(&cls->kset); -+ if (!retval && cls->attrs) -+ retval = sysfs_create_files(&cls->kset.kobj, -+ (const struct attribute **)cls->attrs); -+ return retval; - } - - void sysdev_class_unregister(struct sysdev_class *cls) - { - pr_debug("Unregistering sysdev class '%s'\n", - kobject_name(&cls->kset.kobj)); -+ if (cls->attrs) -+ sysfs_remove_files(&cls->kset.kobj, -+ (const struct attribute **)cls->attrs); - kset_unregister(&cls->kset); - } - ---- a/include/linux/sysdev.h -+++ b/include/linux/sysdev.h -@@ -27,10 +27,12 @@ - - - struct sys_device; -+struct sysdev_class_attribute; - - struct sysdev_class { - const char *name; - struct list_head drivers; -+ struct sysdev_class_attribute **attrs; - - /* Default operations for these types of devices */ - int (*shutdown)(struct sys_device *); diff --git a/driver-core/sysfs-add-sysfs_add-remove_files-utility-functions.patch b/driver-core/sysfs-add-sysfs_add-remove_files-utility-functions.patch deleted file mode 100644 index 1a57df6fb8ec2e..00000000000000 --- a/driver-core/sysfs-add-sysfs_add-remove_files-utility-functions.patch +++ /dev/null @@ -1,102 +0,0 @@ -From andi@firstfloor.org Thu Jan 14 16:44:49 2010 -From: Andi Kleen <andi@firstfloor.org> -Date: Tue, 5 Jan 2010 12:48:01 +0100 (CET) -Subject: sysfs: Add sysfs_add/remove_files utility functions -To: linux-kernel@vger.kernel.org, greg@kroah.com -Message-ID: <20100105114801.7F8B5B17C2@basil.firstfloor.org> - - - -Adding/Removing a whole array of attributes is very common. Add a standard -utility function to do this with a simple function call, instead of -requiring drivers to open code this. - -Signed-off-by: Andi Kleen <ak@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - fs/sysfs/file.c | 20 ++++++++++++++++++++ - include/linux/sysfs.h | 14 ++++++++++++++ - 2 files changed, 34 insertions(+) - ---- a/fs/sysfs/file.c -+++ b/fs/sysfs/file.c -@@ -542,6 +542,18 @@ int sysfs_create_file(struct kobject * k - - } - -+int sysfs_create_files(struct kobject *kobj, const struct attribute **ptr) -+{ -+ int err = 0; -+ int i; -+ -+ for (i = 0; ptr[i] && !err; i++) -+ err = sysfs_create_file(kobj, ptr[i]); -+ if (err) -+ while (--i >= 0) -+ sysfs_remove_file(kobj, ptr[i]); -+ return err; -+} - - /** - * sysfs_add_file_to_group - add an attribute file to a pre-existing group. -@@ -614,6 +626,12 @@ void sysfs_remove_file(struct kobject * - sysfs_hash_and_remove(kobj->sd, attr->name); - } - -+void sysfs_remove_files(struct kobject * kobj, const struct attribute **ptr) -+{ -+ int i; -+ for (i = 0; ptr[i]; i++) -+ sysfs_remove_file(kobj, ptr[i]); -+} - - /** - * sysfs_remove_file_from_group - remove an attribute file from a group. -@@ -732,3 +750,5 @@ EXPORT_SYMBOL_GPL(sysfs_schedule_callbac - - EXPORT_SYMBOL_GPL(sysfs_create_file); - EXPORT_SYMBOL_GPL(sysfs_remove_file); -+EXPORT_SYMBOL_GPL(sysfs_remove_files); -+EXPORT_SYMBOL_GPL(sysfs_create_files); ---- a/include/linux/sysfs.h -+++ b/include/linux/sysfs.h -@@ -94,9 +94,12 @@ int __must_check sysfs_move_dir(struct k - - int __must_check sysfs_create_file(struct kobject *kobj, - const struct attribute *attr); -+int __must_check sysfs_create_files(struct kobject *kobj, -+ const struct attribute **attr); - int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, - mode_t mode); - void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr); -+void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr); - - int __must_check sysfs_create_bin_file(struct kobject *kobj, - const struct bin_attribute *attr); -@@ -164,6 +167,12 @@ static inline int sysfs_create_file(stru - return 0; - } - -+static inline int sysfs_create_files(struct kobject *kobj, -+ const struct attribute **attr) -+{ -+ return 0; -+} -+ - static inline int sysfs_chmod_file(struct kobject *kobj, - struct attribute *attr, mode_t mode) - { -@@ -175,6 +184,11 @@ static inline void sysfs_remove_file(str - { - } - -+static inline void sysfs_remove_files(struct kobject *kobj, -+ const struct attribute **attr) -+{ -+} -+ - static inline int sysfs_create_bin_file(struct kobject *kobj, - const struct bin_attribute *attr) - { diff --git a/driver-core/sysfs-cache-the-last-sysfs_dirent-to-improve-readdir-scalability-v2.patch b/driver-core/sysfs-cache-the-last-sysfs_dirent-to-improve-readdir-scalability-v2.patch deleted file mode 100644 index f73480acec18be..00000000000000 --- a/driver-core/sysfs-cache-the-last-sysfs_dirent-to-improve-readdir-scalability-v2.patch +++ /dev/null @@ -1,143 +0,0 @@ -From ebiederm@xmission.com Thu Jan 14 16:52:20 2010 -From: ebiederm@xmission.com (Eric W. Biederman) -Date: Fri, 01 Jan 2010 14:43:53 -0800 -Subject: sysfs: Cache the last sysfs_dirent to improve readdir scalability v2 -To: Linus Torvalds <torvalds@linux-foundation.org> -Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>, Borislav Petkov <petkovbb@googlemail.com>, David Airlie <airlied@linux.ie>, Greg KH <greg@kroah.com>, Al Viro <viro@ZenIV.linux.org.uk> -Message-ID: <m1y6kh30pi.fsf_-_@fess.ebiederm.org> - -When sysfs_readdir stops short we now cache the next -sysfs_dirent to return to user space in filp->private_data. -There is no impact on the rest of sysfs by doing this and -in the common case it allows us to pick up exactly where -we left off with no seeking. - -Additionally I drop and regrab the sysfs_mutex around -filldir to avoid a page fault abritrarily increasing the -hold time on the sysfs_mutex. - -v2: Returned to using INT_MAX as the EOF condition. - seekdir is ambiguous unless all directory entries have - a unique f_pos value. - -Fixes http://bugzilla.kernel.org/show_bug.cgi?id=14949 - -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Cc: Linus Torvalds <torvalds@linux-foundation.org> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/dir.c | 82 +++++++++++++++++++++++++++++++++++++++++---------------- - 1 file changed, 60 insertions(+), 22 deletions(-) - ---- a/fs/sysfs/dir.c -+++ b/fs/sysfs/dir.c -@@ -837,11 +837,46 @@ static inline unsigned char dt_type(stru - return (sd->s_mode >> 12) & 15; - } - -+static int sysfs_dir_release(struct inode *inode, struct file *filp) -+{ -+ sysfs_put(filp->private_data); -+ return 0; -+} -+ -+static struct sysfs_dirent *sysfs_dir_pos(struct sysfs_dirent *parent_sd, -+ ino_t ino, struct sysfs_dirent *pos) -+{ -+ if (pos) { -+ int valid = !(pos->s_flags & SYSFS_FLAG_REMOVED) && -+ pos->s_parent == parent_sd && -+ ino == pos->s_ino; -+ sysfs_put(pos); -+ if (valid) -+ return pos; -+ } -+ pos = NULL; -+ if ((ino > 1) && (ino < INT_MAX)) { -+ pos = parent_sd->s_dir.children; -+ while (pos && (ino > pos->s_ino)) -+ pos = pos->s_sibling; -+ } -+ return pos; -+} -+ -+static struct sysfs_dirent *sysfs_dir_next_pos(struct sysfs_dirent *parent_sd, -+ ino_t ino, struct sysfs_dirent *pos) -+{ -+ pos = sysfs_dir_pos(parent_sd, ino, pos); -+ if (pos) -+ pos = pos->s_sibling; -+ return pos; -+} -+ - static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir) - { - struct dentry *dentry = filp->f_path.dentry; - struct sysfs_dirent * parent_sd = dentry->d_fsdata; -- struct sysfs_dirent *pos; -+ struct sysfs_dirent *pos = filp->private_data; - ino_t ino; - - if (filp->f_pos == 0) { -@@ -857,29 +892,31 @@ static int sysfs_readdir(struct file * f - if (filldir(dirent, "..", 2, filp->f_pos, ino, DT_DIR) == 0) - filp->f_pos++; - } -- if ((filp->f_pos > 1) && (filp->f_pos < INT_MAX)) { -- mutex_lock(&sysfs_mutex); -+ mutex_lock(&sysfs_mutex); -+ for (pos = sysfs_dir_pos(parent_sd, filp->f_pos, pos); -+ pos; -+ pos = sysfs_dir_next_pos(parent_sd, filp->f_pos, pos)) { -+ const char * name; -+ unsigned int type; -+ int len, ret; -+ -+ name = pos->s_name; -+ len = strlen(name); -+ ino = pos->s_ino; -+ type = dt_type(pos); -+ filp->f_pos = ino; -+ filp->private_data = sysfs_get(pos); - -- /* Skip the dentries we have already reported */ -- pos = parent_sd->s_dir.children; -- while (pos && (filp->f_pos > pos->s_ino)) -- pos = pos->s_sibling; -- -- for ( ; pos; pos = pos->s_sibling) { -- const char * name; -- int len; -- -- name = pos->s_name; -- len = strlen(name); -- filp->f_pos = ino = pos->s_ino; -- -- if (filldir(dirent, name, len, filp->f_pos, ino, -- dt_type(pos)) < 0) -- break; -- } -- if (!pos) -- filp->f_pos = INT_MAX; - mutex_unlock(&sysfs_mutex); -+ ret = filldir(dirent, name, len, filp->f_pos, ino, type); -+ mutex_lock(&sysfs_mutex); -+ if (ret < 0) -+ break; -+ } -+ mutex_unlock(&sysfs_mutex); -+ if ((filp->f_pos > 1) && !pos) { /* EOF */ -+ filp->f_pos = INT_MAX; -+ filp->private_data = NULL; - } - return 0; - } -@@ -888,5 +925,6 @@ static int sysfs_readdir(struct file * f - const struct file_operations sysfs_dir_operations = { - .read = generic_read_dir, - .readdir = sysfs_readdir, -+ .release = sysfs_dir_release, - .llseek = generic_file_llseek, - }; diff --git a/driver-core/sysfs-document-sysfs_attr_init-and-sysfs_bin_attr_init.patch b/driver-core/sysfs-document-sysfs_attr_init-and-sysfs_bin_attr_init.patch deleted file mode 100644 index b3ce1f2b281255..00000000000000 --- a/driver-core/sysfs-document-sysfs_attr_init-and-sysfs_bin_attr_init.patch +++ /dev/null @@ -1,64 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 13:58:23 2010 -From: Eric W. Biederman <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 04:47:10 -0800 -Subject: sysfs: Document sysfs_attr_init and sysfs_bin_attr_init -To: Greg KH <gregkh@suse.de> -Cc: Am�rico Wang <xiyou.wangcong@gmail.com>, "Tejun Heo <tj@kernel.org> Neil Brown" <neilb@suse.de>, linux-kernel@vger.kernel.org -Message-ID: <m1vde2vcxd.fsf_-_@fess.ebiederm.org> - - -Date: Fri, 12 Feb 2010 04:35:32 -0800 -Subject: [PATCH] sysfs: Document sysfs_attr_init and sysfs_bin_attr_init - -I have added a new requirement to the external sysfs interface -that dynamically allocated sysfs attributes must call sysfs_attr_init -if lockdep is enabled. For the time being callying sysfs_attr_init -is only mandatory if lockdep is enabled, so we can live with a few -unconverted instances until we find them all. As this is part of -the public interface of sysfs it is a good idea to document these -pseudo functions so someone inspeciting the code can find out -what has happened. - -Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - include/linux/sysfs.h | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - ---- a/include/linux/sysfs.h -+++ b/include/linux/sysfs.h -@@ -36,6 +36,16 @@ struct attribute { - #endif - }; - -+/** -+ * sysfs_attr_init - initialize a dynamically allocated sysfs attribute -+ * @attr: struct attribute to initialize -+ * -+ * Initialize a dynamically allocated struct attribute so we can -+ * make lockdep happy. This is a new requirement for attributes -+ * and initially this is only needed when lockdep is enabled. -+ * Lockdep gives a nice error when your attribute is added to -+ * sysfs if you don't have this. -+ */ - #ifdef CONFIG_DEBUG_LOCK_ALLOC - #define sysfs_attr_init(attr) \ - do { \ -@@ -90,6 +100,16 @@ struct bin_attribute { - struct vm_area_struct *vma); - }; - -+/** -+ * sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute -+ * @attr: struct bin_attribute to initialize -+ * -+ * Initialize a dynamically allocated struct bin_attribute so we -+ * can make lockdep happy. This is a new requirement for -+ * attributes and initially this is only needed when lockdep is -+ * enabled. Lockdep gives a nice error when your attribute is -+ * added to sysfs if you don't have this. -+ */ - #define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&bin_attr->attr) - - struct sysfs_ops { diff --git a/driver-core/sysfs-fix-for-thinko-with-sysfs_bin_attr_init.patch b/driver-core/sysfs-fix-for-thinko-with-sysfs_bin_attr_init.patch deleted file mode 100644 index 7d2d9172995fe9..00000000000000 --- a/driver-core/sysfs-fix-for-thinko-with-sysfs_bin_attr_init.patch +++ /dev/null @@ -1,59 +0,0 @@ -From sfr@canb.auug.org.au Mon Mar 1 01:37:59 2010 -From: Stephen Rothwell <sfr@canb.auug.org.au> -Date: Mon, 1 Mar 2010 20:38:36 +1100 -Subject: sysfs: fix for thinko with sysfs_bin_attr_init() - - - -After merging the final tree, today's linux-next build (powerpc -allyesconfig) failed like this: - -drivers/pci/pci-sysfs.c: In function 'pci_create_legacy_files': -drivers/pci/pci-sysfs.c:645: error: lvalue required as unary '&' operand -drivers/pci/pci-sysfs.c:658: error: lvalue required as unary '&' operand - -Caused by commit "sysfs: Use sysfs_attr_init and sysfs_bin_attr_init on -dynamic attributes" interacting with commit "sysfs: Use one lockdep -class per sysfs attribute") both from the driver-core tree. - -Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> -Cc: "Eric W. Biederman" <ebiederm@xmission.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - - ---- - drivers/pci/pci-sysfs.c | 4 ++-- - include/linux/sysfs.h | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - ---- a/drivers/pci/pci-sysfs.c -+++ b/drivers/pci/pci-sysfs.c -@@ -642,7 +642,7 @@ void pci_create_legacy_files(struct pci_ - if (!b->legacy_io) - goto kzalloc_err; - -- sysfs_bin_attr_init(&b->legacy_io); -+ sysfs_bin_attr_init(b->legacy_io); - b->legacy_io->attr.name = "legacy_io"; - b->legacy_io->size = 0xffff; - b->legacy_io->attr.mode = S_IRUSR | S_IWUSR; -@@ -655,7 +655,7 @@ void pci_create_legacy_files(struct pci_ - goto legacy_io_err; - - /* Allocated above after the legacy_io struct */ -- sysfs_bin_attr_init(&b->legacy_mem); -+ sysfs_bin_attr_init(b->legacy_mem); - b->legacy_mem = b->legacy_io + 1; - b->legacy_mem->attr.name = "legacy_mem"; - b->legacy_mem->size = 1024*1024; ---- a/include/linux/sysfs.h -+++ b/include/linux/sysfs.h -@@ -110,7 +110,7 @@ struct bin_attribute { - * enabled. Lockdep gives a nice error when your attribute is - * added to sysfs if you don't have this. - */ --#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&bin_attr->attr) -+#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr) - - struct sysfs_ops { - ssize_t (*show)(struct kobject *, struct attribute *,char *); diff --git a/driver-core/sysfs-implement-sysfs_rename_link.patch b/driver-core/sysfs-implement-sysfs_rename_link.patch deleted file mode 100644 index 5f71f2560d375b..00000000000000 --- a/driver-core/sysfs-implement-sysfs_rename_link.patch +++ /dev/null @@ -1,100 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 14:01:25 2010 -From: "Eric W. Biederman" <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 19:22:25 -0800 -Subject: sysfs: Implement sysfs_rename_link -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Kay Sievers <kay.sievers@vrfy.org>, linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>, Cornelia Huck <cornelia.huck@de.ibm.com>, linux-fsdevel@vger.kernel.org, Eric Dumazet <eric.dumazet@gmail.com>, Benjamin LaHaise <bcrl@lhnet.ca>, Serge Hallyn <serue@us.ibm.com>, "Eric W. Biederman" <ebiederm@xmission.com>, Benjamin Thery <benjamin.thery@bull.net>, Daniel Lezcano <dlezcano@fr.ibm.com>, "Eric W. Biederman" <ebiederm@aristanetworks.com> -Message-ID: <1266031348-30068-3-git-send-email-ebiederm@xmission.com> - - -From: Eric W. Biederman <ebiederm@xmission.com> - -Because of rename ordering problems we occassionally give false -warnings about invalid sysfs operations. So using sysfs_rename -create a sysfs_rename_link function that doesn't need strange -workarounds. - -Cc: Benjamin Thery <benjamin.thery@bull.net> -Cc: Daniel Lezcano <dlezcano@fr.ibm.com> -Acked-by: Serge Hallyn <serue@us.ibm.com> -Acked-by: Tejun Heo <tj@kernel.org> -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/symlink.c | 38 ++++++++++++++++++++++++++++++++++++++ - include/linux/sysfs.h | 9 +++++++++ - 2 files changed, 47 insertions(+) - ---- a/fs/sysfs/symlink.c -+++ b/fs/sysfs/symlink.c -@@ -123,6 +123,44 @@ void sysfs_remove_link(struct kobject * - sysfs_hash_and_remove(parent_sd, name); - } - -+/** -+ * sysfs_rename_link - rename symlink in object's directory. -+ * @kobj: object we're acting for. -+ * @targ: object we're pointing to. -+ * @old: previous name of the symlink. -+ * @new: new name of the symlink. -+ * -+ * A helper function for the common rename symlink idiom. -+ */ -+int sysfs_rename_link(struct kobject *kobj, struct kobject *targ, -+ const char *old, const char *new) -+{ -+ struct sysfs_dirent *parent_sd, *sd = NULL; -+ int result; -+ -+ if (!kobj) -+ parent_sd = &sysfs_root; -+ else -+ parent_sd = kobj->sd; -+ -+ result = -ENOENT; -+ sd = sysfs_get_dirent(parent_sd, old); -+ if (!sd) -+ goto out; -+ -+ result = -EINVAL; -+ if (sysfs_type(sd) != SYSFS_KOBJ_LINK) -+ goto out; -+ if (sd->s_symlink.target_sd->s_dir.kobj != targ) -+ goto out; -+ -+ result = sysfs_rename(sd, parent_sd, new); -+ -+out: -+ sysfs_put(sd); -+ return result; -+} -+ - static int sysfs_get_target_path(struct sysfs_dirent *parent_sd, - struct sysfs_dirent *target_sd, char *path) - { ---- a/include/linux/sysfs.h -+++ b/include/linux/sysfs.h -@@ -151,6 +151,9 @@ int __must_check sysfs_create_link_nowar - const char *name); - void sysfs_remove_link(struct kobject *kobj, const char *name); - -+int sysfs_rename_link(struct kobject *kobj, struct kobject *target, -+ const char *old_name, const char *new_name); -+ - int __must_check sysfs_create_group(struct kobject *kobj, - const struct attribute_group *grp); - int sysfs_update_group(struct kobject *kobj, -@@ -255,6 +258,12 @@ static inline void sysfs_remove_link(str - { - } - -+static inline int sysfs_rename_link(struct kobject *k, struct kobject *t, -+ const char *old_name, const char *new_name) -+{ -+ return 0; -+} -+ - static inline int sysfs_create_group(struct kobject *kobj, - const struct attribute_group *grp) - { diff --git a/driver-core/sysfs-kill-unused-sysfs_sb-variable.patch b/driver-core/sysfs-kill-unused-sysfs_sb-variable.patch deleted file mode 100644 index 434e83fb5862c2..00000000000000 --- a/driver-core/sysfs-kill-unused-sysfs_sb-variable.patch +++ /dev/null @@ -1,52 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 14:02:48 2010 -From: "Eric W. Biederman" <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 19:22:28 -0800 -Subject: sysfs: Kill unused sysfs_sb variable. -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Kay Sievers <kay.sievers@vrfy.org>, linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>, Cornelia Huck <cornelia.huck@de.ibm.com>, linux-fsdevel@vger.kernel.org, Eric Dumazet <eric.dumazet@gmail.com>, Benjamin LaHaise <bcrl@lhnet.ca>, Serge Hallyn <serue@us.ibm.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "Eric W. Biederman" <ebiederm@aristanetworks.com> -Message-ID: <1266031348-30068-6-git-send-email-ebiederm@xmission.com> - - -From: Eric W. Biederman <ebiederm@xmission.com> - -Now that there are no more users we can remove -the sysfs_sb variable. - -Acked-by: Tejun Heo <tj@kernel.org> -Acked-by: Serge Hallyn <serue@us.ibm.com> -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/mount.c | 2 -- - fs/sysfs/sysfs.h | 1 - - 2 files changed, 3 deletions(-) - ---- a/fs/sysfs/mount.c -+++ b/fs/sysfs/mount.c -@@ -23,7 +23,6 @@ - - - static struct vfsmount *sysfs_mount; --struct super_block * sysfs_sb = NULL; - struct kmem_cache *sysfs_dir_cachep; - - static const struct super_operations sysfs_ops = { -@@ -50,7 +49,6 @@ static int sysfs_fill_super(struct super - sb->s_magic = SYSFS_MAGIC; - sb->s_op = &sysfs_ops; - sb->s_time_gran = 1; -- sysfs_sb = sb; - - /* get root inode, initialize and unlock it */ - mutex_lock(&sysfs_mutex); ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -115,7 +115,6 @@ struct sysfs_addrm_cxt { - * mount.c - */ - extern struct sysfs_dirent sysfs_root; --extern struct super_block *sysfs_sb; - extern struct kmem_cache *sysfs_dir_cachep; - - /* diff --git a/driver-core/sysfs-only-take-active-references-on-attributes.patch b/driver-core/sysfs-only-take-active-references-on-attributes.patch deleted file mode 100644 index 39d30d43b36dc4..00000000000000 --- a/driver-core/sysfs-only-take-active-references-on-attributes.patch +++ /dev/null @@ -1,70 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 13:56:51 2010 -From: Eric W. Biederman <ebiederm@xmission.com> -Date: Thu, 11 Feb 2010 15:20:00 -0800 -Subject: sysfs: Only take active references on attributes. -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Am�rico Wang <xiyou.wangcong@gmail.com>, "Tejun Heo <tj@kernel.org> Neil Brown" <neilb@suse.de>, linux-kernel@vger.kernel.org -Message-ID: <m1ljezwean.fsf_-_@fess.ebiederm.org> - - - -If we exclude directories and symlinks from the set of sysfs -dirents where we need active references we are left with -sysfs attributes (binary or not). - -- Tweak sysfs_deactivate to only do something on attributes -- Move lockdep initialization into sysfs_file_add_mode to - limit it to just attributes. - -Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -Acked-by: WANG Cong <xiyou.wangcong@gmail.com> -Cc: Tejun Heo <tj@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/dir.c | 5 ++++- - fs/sysfs/file.c | 1 + - fs/sysfs/sysfs.h | 1 + - 3 files changed, 6 insertions(+), 1 deletion(-) - ---- a/fs/sysfs/dir.c -+++ b/fs/sysfs/dir.c -@@ -156,6 +156,10 @@ static void sysfs_deactivate(struct sysf - int v; - - BUG_ON(sd->s_sibling || !(sd->s_flags & SYSFS_FLAG_REMOVED)); -+ -+ if (!(sysfs_type(sd) & SYSFS_ACTIVE_REF)) -+ return; -+ - sd->s_sibling = (void *)&wait; - - rwsem_acquire(&sd->dep_map, 0, 0, _RET_IP_); -@@ -315,7 +319,6 @@ struct sysfs_dirent *sysfs_new_dirent(co - - atomic_set(&sd->s_count, 1); - atomic_set(&sd->s_active, 0); -- sysfs_dirent_init_lockdep(sd); - - sd->s_name = name; - sd->s_mode = mode; ---- a/fs/sysfs/file.c -+++ b/fs/sysfs/file.c -@@ -509,6 +509,7 @@ int sysfs_add_file_mode(struct sysfs_dir - if (!sd) - return -ENOMEM; - sd->s_attr.attr = (void *)attr; -+ sysfs_dirent_init_lockdep(sd); - - sysfs_addrm_start(&acxt, dir_sd); - rc = sysfs_add_one(&acxt, sd); ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -79,6 +79,7 @@ struct sysfs_dirent { - #define SYSFS_KOBJ_BIN_ATTR 0x0004 - #define SYSFS_KOBJ_LINK 0x0008 - #define SYSFS_COPY_NAME (SYSFS_DIR | SYSFS_KOBJ_LINK) -+#define SYSFS_ACTIVE_REF (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR) - - #define SYSFS_FLAG_MASK ~SYSFS_TYPE_MASK - #define SYSFS_FLAG_REMOVED 0x0200 diff --git a/driver-core/sysfs-pack-sysfs_dirent-more-tightly.patch b/driver-core/sysfs-pack-sysfs_dirent-more-tightly.patch deleted file mode 100644 index e7cc7b8f6af53c..00000000000000 --- a/driver-core/sysfs-pack-sysfs_dirent-more-tightly.patch +++ /dev/null @@ -1,37 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 14:00:55 2010 -From: "Eric W. Biederman" <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 19:22:24 -0800 -Subject: sysfs: Pack sysfs_dirent more tightly. -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Kay Sievers <kay.sievers@vrfy.org>, linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>, Cornelia Huck <cornelia.huck@de.ibm.com>, linux-fsdevel@vger.kernel.org, Eric Dumazet <eric.dumazet@gmail.com>, Benjamin LaHaise <bcrl@lhnet.ca>, Serge Hallyn <serue@us.ibm.com>, "Eric W. Biederman" <ebiederm@aristanetworks.com> -Message-ID: <1266031348-30068-2-git-send-email-ebiederm@xmission.com> - - -From: Eric W. Biederman <ebiederm@aristanetworks.com> - -Placing the 16bit s_mode between a pointer and a long doesn't pack well -especailly on 64bit where we wast 48 bits. So move s_mode and -declare it as a unsigned short. This is the sysfs backing store -after all we don't need fields extra large just in case someday -we want userspace to be able to use a larger value. - -Acked-by: Tejun Heo <tj@kernel.org> -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/sysfs.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -66,8 +66,8 @@ struct sysfs_dirent { - }; - - unsigned int s_flags; -+ unsigned short s_mode; - ino_t s_ino; -- umode_t s_mode; - struct sysfs_inode_attrs *s_iattr; - }; - diff --git a/driver-core/sysfs-pass-super_block-to-sysfs_get_inode.patch b/driver-core/sysfs-pass-super_block-to-sysfs_get_inode.patch deleted file mode 100644 index 584e1b473df869..00000000000000 --- a/driver-core/sysfs-pass-super_block-to-sysfs_get_inode.patch +++ /dev/null @@ -1,84 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 14:02:34 2010 -From: "Eric W. Biederman" <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 19:22:27 -0800 -Subject: sysfs: Pass super_block to sysfs_get_inode -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Kay Sievers <kay.sievers@vrfy.org>, linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>, Cornelia Huck <cornelia.huck@de.ibm.com>, linux-fsdevel@vger.kernel.org, Eric Dumazet <eric.dumazet@gmail.com>, Benjamin LaHaise <bcrl@lhnet.ca>, Serge Hallyn <serue@us.ibm.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "Eric W. Biederman" <ebiederm@aristanetworks.com> -Message-ID: <1266031348-30068-5-git-send-email-ebiederm@xmission.com> - - -From: Eric W. Biederman <ebiederm@xmission.com> - -Currently sysfs_get_inode magically returns an inode on -sysfs_sb. Make the super_block parameter explicit and -the code becomes clearer. - -Acked-by: Tejun Heo <tj@kernel.org> -Acked-by: Serge Hallyn <serue@us.ibm.com> -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/dir.c | 2 +- - fs/sysfs/inode.c | 5 +++-- - fs/sysfs/mount.c | 2 +- - fs/sysfs/sysfs.h | 2 +- - 4 files changed, 6 insertions(+), 5 deletions(-) - ---- a/fs/sysfs/dir.c -+++ b/fs/sysfs/dir.c -@@ -645,7 +645,7 @@ static struct dentry * sysfs_lookup(stru - } - - /* attach dentry and inode */ -- inode = sysfs_get_inode(sd); -+ inode = sysfs_get_inode(dir->i_sb, sd); - if (!inode) { - ret = ERR_PTR(-ENOMEM); - goto out_unlock; ---- a/fs/sysfs/inode.c -+++ b/fs/sysfs/inode.c -@@ -283,6 +283,7 @@ static void sysfs_init_inode(struct sysf - - /** - * sysfs_get_inode - get inode for sysfs_dirent -+ * @sb: super block - * @sd: sysfs_dirent to allocate inode for - * - * Get inode for @sd. If such inode doesn't exist, a new inode -@@ -295,11 +296,11 @@ static void sysfs_init_inode(struct sysf - * RETURNS: - * Pointer to allocated inode on success, NULL on failure. - */ --struct inode * sysfs_get_inode(struct sysfs_dirent *sd) -+struct inode * sysfs_get_inode(struct super_block *sb, struct sysfs_dirent *sd) - { - struct inode *inode; - -- inode = iget_locked(sysfs_sb, sd->s_ino); -+ inode = iget_locked(sb, sd->s_ino); - if (inode && (inode->i_state & I_NEW)) - sysfs_init_inode(sd, inode); - ---- a/fs/sysfs/mount.c -+++ b/fs/sysfs/mount.c -@@ -54,7 +54,7 @@ static int sysfs_fill_super(struct super - - /* get root inode, initialize and unlock it */ - mutex_lock(&sysfs_mutex); -- inode = sysfs_get_inode(&sysfs_root); -+ inode = sysfs_get_inode(sb, &sysfs_root); - mutex_unlock(&sysfs_mutex); - if (!inode) { - pr_debug("sysfs: could not get root inode\n"); ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -172,7 +172,7 @@ static inline void __sysfs_put(struct sy - /* - * inode.c - */ --struct inode *sysfs_get_inode(struct sysfs_dirent *sd); -+struct inode *sysfs_get_inode(struct super_block *sb, struct sysfs_dirent *sd); - void sysfs_delete_inode(struct inode *inode); - int sysfs_sd_setattr(struct sysfs_dirent *sd, struct iattr *iattr); - int sysfs_permission(struct inode *inode, int mask); diff --git a/driver-core/sysfs-remove-sysfs_get-put_active_two.patch b/driver-core/sysfs-remove-sysfs_get-put_active_two.patch deleted file mode 100644 index 6ab7e6f86a6d5c..00000000000000 --- a/driver-core/sysfs-remove-sysfs_get-put_active_two.patch +++ /dev/null @@ -1,379 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 13:56:11 2010 -From: Eric W. Biederman <ebiederm@xmission.com> -Date: Thu, 11 Feb 2010 15:18:38 -0800 -Subject: sysfs: Remove sysfs_get/put_active_two -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Am�rico Wang <xiyou.wangcong@gmail.com>, "Tejun Heo <tj@kernel.org> Neil Brown" <neilb@suse.de>, linux-kernel@vger.kernel.org -Message-ID: <m1pr4bwecx.fsf_-_@fess.ebiederm.org> - - - -It turns out that holding an active reference on a directory is -pointless. The purpose of the active references are to allows us to -block when removing sysfs entries that have custom methods so we don't -remove modules while running modular code and to keep those custom -methods from accessing data structures after the files have been -removed. Further sysfs_remove_dir remove all elements in the -directory before removing the directory itself, so there is no chance -we will remove a directory with active children. - -Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -Cc: Tejun Heo <tj@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/bin.c | 50 +++++++++++++++++++++++++------------------------- - fs/sysfs/dir.c | 43 ++----------------------------------------- - fs/sysfs/file.c | 18 +++++++++--------- - fs/sysfs/sysfs.h | 4 ++-- - 4 files changed, 38 insertions(+), 77 deletions(-) - ---- a/fs/sysfs/bin.c -+++ b/fs/sysfs/bin.c -@@ -54,14 +54,14 @@ fill_read(struct dentry *dentry, char *b - int rc; - - /* need attr_sd for attr, its parent for kobj */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -ENODEV; - - rc = -EIO; - if (attr->read) - rc = attr->read(kobj, attr, buffer, off, count); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - - return rc; - } -@@ -125,14 +125,14 @@ flush_write(struct dentry *dentry, char - int rc; - - /* need attr_sd for attr, its parent for kobj */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -ENODEV; - - rc = -EIO; - if (attr->write) - rc = attr->write(kobj, attr, buffer, offset, count); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - - return rc; - } -@@ -184,12 +184,12 @@ static void bin_vma_open(struct vm_area_ - if (!bb->vm_ops || !bb->vm_ops->open) - return; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return; - - bb->vm_ops->open(vma); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - } - - static void bin_vma_close(struct vm_area_struct *vma) -@@ -201,12 +201,12 @@ static void bin_vma_close(struct vm_area - if (!bb->vm_ops || !bb->vm_ops->close) - return; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return; - - bb->vm_ops->close(vma); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - } - - static int bin_fault(struct vm_area_struct *vma, struct vm_fault *vmf) -@@ -219,12 +219,12 @@ static int bin_fault(struct vm_area_stru - if (!bb->vm_ops || !bb->vm_ops->fault) - return VM_FAULT_SIGBUS; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return VM_FAULT_SIGBUS; - - ret = bb->vm_ops->fault(vma, vmf); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return ret; - } - -@@ -241,12 +241,12 @@ static int bin_page_mkwrite(struct vm_ar - if (!bb->vm_ops->page_mkwrite) - return 0; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return VM_FAULT_SIGBUS; - - ret = bb->vm_ops->page_mkwrite(vma, vmf); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return ret; - } - -@@ -261,12 +261,12 @@ static int bin_access(struct vm_area_str - if (!bb->vm_ops || !bb->vm_ops->access) - return -EINVAL; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -EINVAL; - - ret = bb->vm_ops->access(vma, addr, buf, len, write); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return ret; - } - -@@ -281,12 +281,12 @@ static int bin_set_policy(struct vm_area - if (!bb->vm_ops || !bb->vm_ops->set_policy) - return 0; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -EINVAL; - - ret = bb->vm_ops->set_policy(vma, new); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return ret; - } - -@@ -301,12 +301,12 @@ static struct mempolicy *bin_get_policy( - if (!bb->vm_ops || !bb->vm_ops->get_policy) - return vma->vm_policy; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return vma->vm_policy; - - pol = bb->vm_ops->get_policy(vma, addr); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return pol; - } - -@@ -321,12 +321,12 @@ static int bin_migrate(struct vm_area_st - if (!bb->vm_ops || !bb->vm_ops->migrate) - return 0; - -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return 0; - - ret = bb->vm_ops->migrate(vma, from, to, flags); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return ret; - } - #endif -@@ -356,7 +356,7 @@ static int mmap(struct file *file, struc - - /* need attr_sd for attr, its parent for kobj */ - rc = -ENODEV; -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - goto out_unlock; - - rc = -EINVAL; -@@ -384,7 +384,7 @@ static int mmap(struct file *file, struc - bb->vm_ops = vma->vm_ops; - vma->vm_ops = &bin_vm_ops; - out_put: -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - out_unlock: - mutex_unlock(&bb->mutex); - -@@ -399,7 +399,7 @@ static int open(struct inode * inode, st - int error; - - /* binary file operations requires both @sd and its parent */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -ENODEV; - - error = -EACCES; -@@ -426,11 +426,11 @@ static int open(struct inode * inode, st - mutex_unlock(&sysfs_bin_lock); - - /* open succeeded, put active references */ -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return 0; - - err_out: -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - kfree(bb); - return error; - } ---- a/fs/sysfs/dir.c -+++ b/fs/sysfs/dir.c -@@ -93,7 +93,7 @@ static void sysfs_unlink_sibling(struct - * RETURNS: - * Pointer to @sd on success, NULL on failure. - */ --static struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd) -+struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd) - { - if (unlikely(!sd)) - return NULL; -@@ -124,7 +124,7 @@ static struct sysfs_dirent *sysfs_get_ac - * Put an active reference to @sd. This function is noop if @sd - * is NULL. - */ --static void sysfs_put_active(struct sysfs_dirent *sd) -+void sysfs_put_active(struct sysfs_dirent *sd) - { - struct completion *cmpl; - int v; -@@ -145,45 +145,6 @@ static void sysfs_put_active(struct sysf - } - - /** -- * sysfs_get_active_two - get active references to sysfs_dirent and parent -- * @sd: sysfs_dirent of interest -- * -- * Get active reference to @sd and its parent. Parent's active -- * reference is grabbed first. This function is noop if @sd is -- * NULL. -- * -- * RETURNS: -- * Pointer to @sd on success, NULL on failure. -- */ --struct sysfs_dirent *sysfs_get_active_two(struct sysfs_dirent *sd) --{ -- if (sd) { -- if (sd->s_parent && unlikely(!sysfs_get_active(sd->s_parent))) -- return NULL; -- if (unlikely(!sysfs_get_active(sd))) { -- sysfs_put_active(sd->s_parent); -- return NULL; -- } -- } -- return sd; --} -- --/** -- * sysfs_put_active_two - put active references to sysfs_dirent and parent -- * @sd: sysfs_dirent of interest -- * -- * Put active references to @sd and its parent. This function is -- * noop if @sd is NULL. -- */ --void sysfs_put_active_two(struct sysfs_dirent *sd) --{ -- if (sd) { -- sysfs_put_active(sd); -- sysfs_put_active(sd->s_parent); -- } --} -- --/** - * sysfs_deactivate - deactivate sysfs_dirent - * @sd: sysfs_dirent to deactivate - * ---- a/fs/sysfs/file.c -+++ b/fs/sysfs/file.c -@@ -85,13 +85,13 @@ static int fill_read_buffer(struct dentr - return -ENOMEM; - - /* need attr_sd for attr and ops, its parent for kobj */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -ENODEV; - - buffer->event = atomic_read(&attr_sd->s_attr.open->event); - count = ops->show(kobj, attr_sd->s_attr.attr, buffer->page); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - - /* - * The code works fine with PAGE_SIZE return but it's likely to -@@ -203,12 +203,12 @@ flush_write_buffer(struct dentry * dentr - int rc; - - /* need attr_sd for attr and ops, its parent for kobj */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -ENODEV; - - rc = ops->store(kobj, attr_sd->s_attr.attr, buffer->page, count); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - - return rc; - } -@@ -344,7 +344,7 @@ static int sysfs_open_file(struct inode - memmove(last_sysfs_file, p, strlen(p) + 1); - - /* need attr_sd for attr and ops, its parent for kobj */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - return -ENODEV; - - /* every kobject with an attribute needs a ktype assigned */ -@@ -393,13 +393,13 @@ static int sysfs_open_file(struct inode - goto err_free; - - /* open succeeded, put active references */ -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return 0; - - err_free: - kfree(buffer); - err_out: -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - return error; - } - -@@ -437,12 +437,12 @@ static unsigned int sysfs_poll(struct fi - struct sysfs_open_dirent *od = attr_sd->s_attr.open; - - /* need parent for the kobj, grab both */ -- if (!sysfs_get_active_two(attr_sd)) -+ if (!sysfs_get_active(attr_sd)) - goto trigger; - - poll_wait(filp, &od->poll, wait); - -- sysfs_put_active_two(attr_sd); -+ sysfs_put_active(attr_sd); - - if (buffer->event != atomic_read(&od->event)) - goto trigger; ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -124,8 +124,8 @@ extern const struct file_operations sysf - extern const struct inode_operations sysfs_dir_inode_operations; - - struct dentry *sysfs_get_dentry(struct sysfs_dirent *sd); --struct sysfs_dirent *sysfs_get_active_two(struct sysfs_dirent *sd); --void sysfs_put_active_two(struct sysfs_dirent *sd); -+struct sysfs_dirent *sysfs_get_active(struct sysfs_dirent *sd); -+void sysfs_put_active(struct sysfs_dirent *sd); - void sysfs_addrm_start(struct sysfs_addrm_cxt *acxt, - struct sysfs_dirent *parent_sd); - int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd); diff --git a/driver-core/sysfs-serialize-updates-to-the-vfs-inode.patch b/driver-core/sysfs-serialize-updates-to-the-vfs-inode.patch deleted file mode 100644 index 0cd41c46f5c990..00000000000000 --- a/driver-core/sysfs-serialize-updates-to-the-vfs-inode.patch +++ /dev/null @@ -1,67 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 14:00:40 2010 -From: "Eric W. Biederman" <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 19:22:23 -0800 -Subject: [PATCH 1/6] sysfs: Serialize updates to the vfs inode -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Kay Sievers <kay.sievers@vrfy.org>, linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>, Cornelia Huck <cornelia.huck@de.ibm.com>, linux-fsdevel@vger.kernel.org, Eric Dumazet <eric.dumazet@gmail.com>, Benjamin LaHaise <bcrl@lhnet.ca>, Serge Hallyn <serue@us.ibm.com>, "Eric W. Biederman" <ebiederm@aristanetworks.com> -Message-ID: <1266031348-30068-1-git-send-email-ebiederm@xmission.com> - - -From: Eric W. Biederman <ebiederm@aristanetworks.com> - -The vfs depends upon filesystem methods to update the -vfs inode. Sysfs adds to the normal number of places -where the vfs inode is updated by also updatng the -vfs inode in sysfs_refresh_inode. - -Typically the inode mutex is used to serialize updates -to the vfs inode, but grabbing the inode mutex in -sysfs_permission and sysfs_getattr causes deadlocks, -because sometimes the vfs calls those operations with -the inode mutex held. Therefore sysfs can not use the -inode mutex to serial updates to the vfs inode. - -The sysfs_mutex is acquired in all of the routines -where sysfs updates the vfs inode, and with a small -change we can consistently protext sysfs vfs inode -updates with the sysfs_mutex. To protect the sysfs -vfs inode updates with the sysfs_mutex simply requires -extending the scope of sysfs_mutex in sysfs_setattr -over inode_setattr, and over inode_change_ok (so we -have an unchanging inode when we perform the check). - -Acked-by: Serge Hallyn <serue@us.ibm.com> -Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/inode.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - ---- a/fs/sysfs/inode.c -+++ b/fs/sysfs/inode.c -@@ -111,20 +111,20 @@ int sysfs_setattr(struct dentry *dentry, - if (!sd) - return -EINVAL; - -+ mutex_lock(&sysfs_mutex); - error = inode_change_ok(inode, iattr); - if (error) -- return error; -+ goto out; - - iattr->ia_valid &= ~ATTR_SIZE; /* ignore size changes */ - - error = inode_setattr(inode, iattr); - if (error) -- return error; -+ goto out; - -- mutex_lock(&sysfs_mutex); - error = sysfs_sd_setattr(sd, iattr); -+out: - mutex_unlock(&sysfs_mutex); -- - return error; - } - diff --git a/driver-core/sysfs-use-one-lockdep-class-per-sysfs-attribute.patch b/driver-core/sysfs-use-one-lockdep-class-per-sysfs-attribute.patch deleted file mode 100644 index 9c1c2627899288..00000000000000 --- a/driver-core/sysfs-use-one-lockdep-class-per-sysfs-attribute.patch +++ /dev/null @@ -1,93 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 13:57:22 2010 -From: Eric W. Biederman <ebiederm@xmission.com> -Date: Thu, 11 Feb 2010 15:21:53 -0800 -Subject: sysfs: Use one lockdep class per sysfs attribute. -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Am�rico Wang <xiyou.wangcong@gmail.com>, "Tejun Heo <tj@kernel.org> Neil Brown" <neilb@suse.de>, linux-kernel@vger.kernel.org -Message-ID: <m1hbpnwe7i.fsf_-_@fess.ebiederm.org> - -Acknowledge that the logical sysfs rwsem has one instance per -sysfs attribute with different locking depencencies for different -attributes. - -There is a sysfs idiom where writing to one sysfs file causes the -addition or removal of other sysfs files. Lumping all of the -sysfs attributes together in one lock class causes lockdep to -generate lots of false positives. - -This introduces the requirement that non-static sysfs attributes -need to be initialized with sysfs_attr_init or sysfs_bin_attr_init. -Strictly speaking this requirement only exists when lockdep is -enabled, and when lockdep is enabled we get a bit fat warning -if this requirement is not met. - -Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -Acked-by: WANG Cong <xiyou.wangcong@gmail.com> -Cc: Tejun Heo <tj@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - fs/sysfs/sysfs.h | 7 +++++-- - include/linux/sysfs.h | 18 ++++++++++++++++++ - 2 files changed, 23 insertions(+), 2 deletions(-) - ---- a/fs/sysfs/sysfs.h -+++ b/fs/sysfs/sysfs.h -@@ -92,9 +92,12 @@ static inline unsigned int sysfs_type(st - #ifdef CONFIG_DEBUG_LOCK_ALLOC - #define sysfs_dirent_init_lockdep(sd) \ - do { \ -- static struct lock_class_key __key; \ -+ struct attribute *attr = sd->s_attr.attr; \ -+ struct lock_class_key *key = attr->key; \ -+ if (!key) \ -+ key = &attr->skey; \ - \ -- lockdep_init_map(&sd->dep_map, "s_active", &__key, 0); \ -+ lockdep_init_map(&sd->dep_map, "s_active", key, 0); \ - } while(0) - #else - #define sysfs_dirent_init_lockdep(sd) do {} while(0) ---- a/include/linux/sysfs.h -+++ b/include/linux/sysfs.h -@@ -15,6 +15,7 @@ - #include <linux/compiler.h> - #include <linux/errno.h> - #include <linux/list.h> -+#include <linux/lockdep.h> - #include <asm/atomic.h> - - struct kobject; -@@ -29,8 +30,23 @@ struct attribute { - const char *name; - struct module *owner; - mode_t mode; -+#ifdef CONFIG_DEBUG_LOCK_ALLOC -+ struct lock_class_key *key; -+ struct lock_class_key skey; -+#endif - }; - -+#ifdef CONFIG_DEBUG_LOCK_ALLOC -+#define sysfs_attr_init(attr) \ -+do { \ -+ static struct lock_class_key __key; \ -+ \ -+ (attr)->key = &__key; \ -+} while(0) -+#else -+#define sysfs_attr_init(attr) do {} while(0) -+#endif -+ - struct attribute_group { - const char *name; - mode_t (*is_visible)(struct kobject *, -@@ -74,6 +90,8 @@ struct bin_attribute { - struct vm_area_struct *vma); - }; - -+#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&bin_attr->attr) -+ - struct sysfs_ops { - ssize_t (*show)(struct kobject *, struct attribute *,char *); - ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t); diff --git a/driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-dynamic-attributes.patch b/driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-dynamic-attributes.patch deleted file mode 100644 index ab4214423ebb71..00000000000000 --- a/driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-dynamic-attributes.patch +++ /dev/null @@ -1,108 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 13:57:58 2010 -From: Eric W. Biederman <ebiederm@xmission.com> -Date: Thu, 11 Feb 2010 15:23:05 -0800 -Subject: sysfs: Use sysfs_attr_init and sysfs_bin_attr_init on dynamic attributes -To: Greg Kroah-Hartman <gregkh@suse.de> -Cc: Am�rico Wang <xiyou.wangcong@gmail.com>, "Tejun Heo <tj@kernel.org> Neil Brown" <neilb@suse.de>, linux-kernel@vger.kernel.org -Message-ID: <m1d40bwe5i.fsf_-_@fess.ebiederm.org> - - - -These are the non-static sysfs attributes that exist on -my test machine. Fix them to use sysfs_attr_init or -sysfs_bin_attr_init as appropriate. It simply requires -making a sysfs attribute present to see this. So this -is a little bit tedious but otherwise not too bad. - -Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -Acked-by: WANG Cong <xiyou.wangcong@gmail.com> -Cc: Tejun Heo <tj@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - arch/x86/kernel/cpu/mcheck/mce.c | 1 + - drivers/acpi/system.c | 2 ++ - drivers/pci/pci-sysfs.c | 5 +++++ - kernel/params.c | 1 + - 4 files changed, 9 insertions(+) - ---- a/arch/x86/kernel/cpu/mcheck/mce.c -+++ b/arch/x86/kernel/cpu/mcheck/mce.c -@@ -2044,6 +2044,7 @@ static __init void mce_init_banks(void) - struct mce_bank *b = &mce_banks[i]; - struct sysdev_attribute *a = &b->attr; - -+ sysfs_attr_init(&a->attr); - a->attr.name = b->attrname; - snprintf(b->attrname, ATTR_LEN, "bank%d", i); - ---- a/drivers/acpi/system.c -+++ b/drivers/acpi/system.c -@@ -101,6 +101,7 @@ static void acpi_table_attr_init(struct - struct acpi_table_header *header = NULL; - struct acpi_table_attr *attr = NULL; - -+ sysfs_attr_init(&table_attr->attr.attr); - if (table_header->signature[0] != '\0') - memcpy(table_attr->name, table_header->signature, - ACPI_NAME_SIZE); -@@ -475,6 +476,7 @@ void acpi_irq_stats_init(void) - goto fail; - strncpy(name, buffer, strlen(buffer) + 1); - -+ sysfs_attr_init(&counter_attrs[i].attr); - counter_attrs[i].attr.name = name; - counter_attrs[i].attr.mode = 0644; - counter_attrs[i].show = counter_show; ---- a/drivers/pci/pci-sysfs.c -+++ b/drivers/pci/pci-sysfs.c -@@ -642,6 +642,7 @@ void pci_create_legacy_files(struct pci_ - if (!b->legacy_io) - goto kzalloc_err; - -+ sysfs_bin_attr_init(&b->legacy_io); - b->legacy_io->attr.name = "legacy_io"; - b->legacy_io->size = 0xffff; - b->legacy_io->attr.mode = S_IRUSR | S_IWUSR; -@@ -654,6 +655,7 @@ void pci_create_legacy_files(struct pci_ - goto legacy_io_err; - - /* Allocated above after the legacy_io struct */ -+ sysfs_bin_attr_init(&b->legacy_mem); - b->legacy_mem = b->legacy_io + 1; - b->legacy_mem->attr.name = "legacy_mem"; - b->legacy_mem->size = 1024*1024; -@@ -800,6 +802,7 @@ static int pci_create_attr(struct pci_de - if (res_attr) { - char *res_attr_name = (char *)(res_attr + 1); - -+ sysfs_bin_attr_init(res_attr); - if (write_combine) { - pdev->res_attr_wc[num] = res_attr; - sprintf(res_attr_name, "resource%d_wc", num); -@@ -972,6 +975,7 @@ static int pci_create_capabilities_sysfs - if (!attr) - return -ENOMEM; - -+ sysfs_bin_attr_init(attr); - attr->size = dev->vpd->len; - attr->attr.name = "vpd"; - attr->attr.mode = S_IRUSR | S_IWUSR; -@@ -1038,6 +1042,7 @@ int __must_check pci_create_sysfs_dev_fi - retval = -ENOMEM; - goto err_resource_files; - } -+ sysfs_bin_attr_init(attr); - attr->size = rom_size; - attr->attr.name = "rom"; - attr->attr.mode = S_IRUSR; ---- a/kernel/params.c -+++ b/kernel/params.c -@@ -516,6 +516,7 @@ static __modinit int add_sysfs_param(str - new->grp.attrs = attrs; - - /* Tack new one on the end. */ -+ sysfs_attr_init(&new->attrs[num].mattr.attr); - new->attrs[num].param = kp; - new->attrs[num].mattr.show = param_attr_show; - new->attrs[num].mattr.store = param_attr_store; diff --git a/driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-module-dynamic-attributes.patch b/driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-module-dynamic-attributes.patch deleted file mode 100644 index c5c8aa691db46b..00000000000000 --- a/driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-module-dynamic-attributes.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ebiederm@xmission.com Fri Feb 26 13:59:54 2010 -From: Eric W. Biederman <ebiederm@xmission.com> -Date: Fri, 12 Feb 2010 13:41:56 -0800 -Subject: sysfs: Use sysfs_attr_init and sysfs_bin_attr_init on module dynamic attributes -To: Greg KH <gregkh@suse.de> -Cc: Am�rico Wang <xiyou.wangcong@gmail.com>, "Tejun Heo <tj@kernel.org> Neil Brown" <neilb@suse.de>, linux-kernel@vger.kernel.org -Message-ID: <m1fx56uo63.fsf_-_@fess.ebiederm.org> - - - -A little more whack-a-mole annotating the dynamic sysfs attributes. I -had everything built into my earlier test kernel, and so I missed -these. - -Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - kernel/module.c | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/kernel/module.c -+++ b/kernel/module.c -@@ -1085,6 +1085,7 @@ static void add_sect_attrs(struct module - if (sattr->name == NULL) - goto out; - sect_attrs->nsections++; -+ sysfs_attr_init(&sattr->mattr.attr); - sattr->mattr.show = module_sect_show; - sattr->mattr.store = NULL; - sattr->mattr.attr.name = sattr->name; -@@ -1180,6 +1181,7 @@ static void add_notes_attrs(struct modul - if (sect_empty(&sechdrs[i])) - continue; - if (sechdrs[i].sh_type == SHT_NOTE) { -+ sysfs_bin_attr_init(nattr); - nattr->attr.name = mod->sect_attrs->attrs[loaded].name; - nattr->attr.mode = S_IRUGO; - nattr->size = sechdrs[i].sh_size; -@@ -1252,6 +1254,7 @@ int module_add_modinfo_attrs(struct modu - if (!attr->test || - (attr->test && attr->test(mod))) { - memcpy(temp_attr, attr, sizeof(*temp_attr)); -+ sysfs_attr_init(&temp_attr->attr); - error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr); - ++temp_attr; - } diff --git a/driver-core/sysfs-windfarm-init-sysfs-attributes.patch b/driver-core/sysfs-windfarm-init-sysfs-attributes.patch deleted file mode 100644 index df1e4fb12d584a..00000000000000 --- a/driver-core/sysfs-windfarm-init-sysfs-attributes.patch +++ /dev/null @@ -1,39 +0,0 @@ -From johannes@sipsolutions.net Fri Feb 26 14:20:21 2010 -From: Johannes Berg <johannes@sipsolutions.net> -Date: Sat, 20 Feb 2010 16:43:02 +0100 -Subject: sysfs: windfarm: init sysfs attributes -To: Am�rico Wang <xiyou.wangcong@gmail.com> -Cc: "Eric W. Biederman" <ebiederm@xmission.com>, Greg KH <greg@kroah.com>, Benjamin Herrenschmidt <benh@kernel.crashing.org> -Message-ID: <1266680582.17363.7.camel@jlt3.sipsolutions.net> - - -This is required for lockdep. - -Signed-off-by: Johannes Berg <johannes@sipsolutions.net> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/macintosh/windfarm_core.c | 1 + - drivers/macintosh/windfarm_smu_controls.c | 1 + - 2 files changed, 2 insertions(+) - ---- a/drivers/macintosh/windfarm_core.c -+++ b/drivers/macintosh/windfarm_core.c -@@ -321,6 +321,7 @@ int wf_register_sensor(struct wf_sensor - kref_init(&new_sr->ref); - list_add(&new_sr->link, &wf_sensors); - -+ sysfs_attr_init(&new_sr->attr.attr); - new_sr->attr.attr.name = new_sr->name; - new_sr->attr.attr.mode = 0444; - new_sr->attr.show = wf_show_sensor; ---- a/drivers/macintosh/windfarm_smu_controls.c -+++ b/drivers/macintosh/windfarm_smu_controls.c -@@ -173,6 +173,7 @@ static struct smu_fan_control *smu_fan_c - - fct->fan_type = pwm_fan; - fct->ctrl.type = pwm_fan ? WF_CONTROL_PWM_FAN : WF_CONTROL_RPM_FAN; -+ sysfs_attr_init(&fct->ctrl.attr.attr); - - /* We use the name & location here the same way we do for SMU sensors, - * see the comment in windfarm_smu_sensors.c. The locations are a bit diff --git a/driver-core/uio-add-a-driver-for-hilscher-netx-based-fieldbus-cards.patch b/driver-core/uio-add-a-driver-for-hilscher-netx-based-fieldbus-cards.patch deleted file mode 100644 index 4b2298e055b53d..00000000000000 --- a/driver-core/uio-add-a-driver-for-hilscher-netx-based-fieldbus-cards.patch +++ /dev/null @@ -1,225 +0,0 @@ -From hjk@linutronix.de Wed Feb 17 15:34:20 2010 -From: "Hans J. Koch" <hjk@linutronix.de> -Date: Tue, 9 Feb 2010 20:13:49 +0100 -Subject: UIO: Add a driver for Hilscher netX-based fieldbus cards -Cc: Greg Kroah-Hartman <gregkh@suse.de>, Manuel Traut <manut@linutronix.de> -Message-ID: <20100209191349.GE3229@local> -Content-Disposition: inline - - -This patch adds a Userspace IO driver for netX-based fieldbus cards by -Hilscher (see http://www.hilscher.com). ATM, cifX and comX cards are -supported. The userspace part for this driver is provided by Hilscher -and should come with the card. -The driver is in use for several months now and has been tested by -people at Hilscher and Linutronix. - -Signed-off-by: Hans J. Koch <hjk@linutronix.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/uio/Kconfig | 11 +++ - drivers/uio/Makefile | 1 - drivers/uio/uio_netx.c | 172 +++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 184 insertions(+) - ---- a/drivers/uio/Kconfig -+++ b/drivers/uio/Kconfig -@@ -94,4 +94,15 @@ config UIO_PCI_GENERIC - primarily, for virtualization scenarios. - If you compile this as a module, it will be called uio_pci_generic. - -+config UIO_NETX -+ tristate "Hilscher NetX Card driver" -+ depends on PCI -+ help -+ Driver for Hilscher NetX based fieldbus cards (cifX, comX). -+ This driver requires a userspace component that comes with the card -+ or is available from Hilscher (http://www.hilscher.com). -+ -+ To compile this driver as a module, choose M here; the module -+ will be called uio_netx. -+ - endif ---- a/drivers/uio/Makefile -+++ b/drivers/uio/Makefile -@@ -6,3 +6,4 @@ obj-$(CONFIG_UIO_SMX) += uio_smx.o - obj-$(CONFIG_UIO_AEC) += uio_aec.o - obj-$(CONFIG_UIO_SERCOS3) += uio_sercos3.o - obj-$(CONFIG_UIO_PCI_GENERIC) += uio_pci_generic.o -+obj-$(CONFIG_UIO_NETX) += uio_netx.o ---- /dev/null -+++ b/drivers/uio/uio_netx.c -@@ -0,0 +1,172 @@ -+/* -+ * UIO driver for Hilscher NetX based fieldbus cards (cifX, comX). -+ * See http://www.hilscher.com for details. -+ * -+ * (C) 2007 Hans J. Koch <hjk@linutronix.de> -+ * (C) 2008 Manuel Traut <manut@linutronix.de> -+ * -+ * Licensed under GPL version 2 only. -+ * -+ */ -+ -+#include <linux/device.h> -+#include <linux/io.h> -+#include <linux/module.h> -+#include <linux/pci.h> -+#include <linux/uio_driver.h> -+ -+#define PCI_VENDOR_ID_HILSCHER 0x15CF -+#define PCI_DEVICE_ID_HILSCHER_NETX 0x0000 -+#define PCI_SUBDEVICE_ID_NXSB_PCA 0x3235 -+#define PCI_SUBDEVICE_ID_NXPCA 0x3335 -+ -+#define DPM_HOST_INT_EN0 0xfff0 -+#define DPM_HOST_INT_STAT0 0xffe0 -+ -+#define DPM_HOST_INT_MASK 0xe600ffff -+#define DPM_HOST_INT_GLOBAL_EN 0x80000000 -+ -+static irqreturn_t netx_handler(int irq, struct uio_info *dev_info) -+{ -+ void __iomem *int_enable_reg = dev_info->mem[0].internal_addr -+ + DPM_HOST_INT_EN0; -+ void __iomem *int_status_reg = dev_info->mem[0].internal_addr -+ + DPM_HOST_INT_STAT0; -+ -+ /* Is one of our interrupts enabled and active ? */ -+ if (!(ioread32(int_enable_reg) & ioread32(int_status_reg) -+ & DPM_HOST_INT_MASK)) -+ return IRQ_NONE; -+ -+ /* Disable interrupt */ -+ iowrite32(ioread32(int_enable_reg) & ~DPM_HOST_INT_GLOBAL_EN, -+ int_enable_reg); -+ return IRQ_HANDLED; -+} -+ -+static int __devinit netx_pci_probe(struct pci_dev *dev, -+ const struct pci_device_id *id) -+{ -+ struct uio_info *info; -+ int bar; -+ -+ info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); -+ if (!info) -+ return -ENOMEM; -+ -+ if (pci_enable_device(dev)) -+ goto out_free; -+ -+ if (pci_request_regions(dev, "netx")) -+ goto out_disable; -+ -+ switch (id->device) { -+ case PCI_DEVICE_ID_HILSCHER_NETX: -+ bar = 0; -+ info->name = "netx"; -+ break; -+ default: -+ bar = 2; -+ info->name = "netx_plx"; -+ } -+ -+ /* BAR0 or 2 points to the card's dual port memory */ -+ info->mem[0].addr = pci_resource_start(dev, bar); -+ if (!info->mem[0].addr) -+ goto out_release; -+ info->mem[0].internal_addr = ioremap(pci_resource_start(dev, bar), -+ pci_resource_len(dev, bar)); -+ -+ if (!info->mem[0].internal_addr) -+ goto out_release; -+ -+ info->mem[0].size = pci_resource_len(dev, bar); -+ info->mem[0].memtype = UIO_MEM_PHYS; -+ info->irq = dev->irq; -+ info->irq_flags = IRQF_SHARED; -+ info->handler = netx_handler; -+ info->version = "0.0.1"; -+ -+ /* Make sure all interrupts are disabled */ -+ iowrite32(0, info->mem[0].internal_addr + DPM_HOST_INT_EN0); -+ -+ if (uio_register_device(&dev->dev, info)) -+ goto out_unmap; -+ -+ pci_set_drvdata(dev, info); -+ dev_info(&dev->dev, "Found %s card, registered UIO device.\n", -+ info->name); -+ -+ return 0; -+ -+out_unmap: -+ iounmap(info->mem[0].internal_addr); -+out_release: -+ pci_release_regions(dev); -+out_disable: -+ pci_disable_device(dev); -+out_free: -+ kfree(info); -+ return -ENODEV; -+} -+ -+static void netx_pci_remove(struct pci_dev *dev) -+{ -+ struct uio_info *info = pci_get_drvdata(dev); -+ -+ /* Disable all interrupts */ -+ iowrite32(0, info->mem[0].internal_addr + DPM_HOST_INT_EN0); -+ uio_unregister_device(info); -+ pci_release_regions(dev); -+ pci_disable_device(dev); -+ pci_set_drvdata(dev, NULL); -+ iounmap(info->mem[0].internal_addr); -+ -+ kfree(info); -+} -+ -+static struct pci_device_id netx_pci_ids[] = { -+ { -+ .vendor = PCI_VENDOR_ID_HILSCHER, -+ .device = PCI_DEVICE_ID_HILSCHER_NETX, -+ .subvendor = 0, -+ .subdevice = 0, -+ }, -+ { -+ .vendor = PCI_VENDOR_ID_PLX, -+ .device = PCI_DEVICE_ID_PLX_9030, -+ .subvendor = PCI_VENDOR_ID_PLX, -+ .subdevice = PCI_SUBDEVICE_ID_NXSB_PCA, -+ }, -+ { -+ .vendor = PCI_VENDOR_ID_PLX, -+ .device = PCI_DEVICE_ID_PLX_9030, -+ .subvendor = PCI_VENDOR_ID_PLX, -+ .subdevice = PCI_SUBDEVICE_ID_NXPCA, -+ }, -+ { 0, } -+}; -+ -+static struct pci_driver netx_pci_driver = { -+ .name = "netx", -+ .id_table = netx_pci_ids, -+ .probe = netx_pci_probe, -+ .remove = netx_pci_remove, -+}; -+ -+static int __init netx_init_module(void) -+{ -+ return pci_register_driver(&netx_pci_driver); -+} -+ -+static void __exit netx_exit_module(void) -+{ -+ pci_unregister_driver(&netx_pci_driver); -+} -+ -+module_init(netx_init_module); -+module_exit(netx_exit_module); -+ -+MODULE_DEVICE_TABLE(pci, netx_pci_ids); -+MODULE_LICENSE("GPL v2"); -+MODULE_AUTHOR("Hans J. Koch, Manuel Traut"); diff --git a/driver-core/uio-minor-kconfig-fixes.patch b/driver-core/uio-minor-kconfig-fixes.patch deleted file mode 100644 index 4d20fceca98ee8..00000000000000 --- a/driver-core/uio-minor-kconfig-fixes.patch +++ /dev/null @@ -1,38 +0,0 @@ -From john.ogness@linutronix.de Wed Feb 17 15:36:36 2010 -From: John Ogness <john.ogness@linutronix.de> -Date: Thu, 11 Feb 2010 15:38:53 +0100 -Subject: UIO: minor Kconfig fixes -Cc: "Greg Kroah-Hartman" <gregkh@suse.de>, "Michael S. Tsirkin" <mst@redhat.com>, "Hans J. Koch" <hjk@linutronix.de> -Message-ID: <80vde3rg5e.fsf@merkur.tec.linutronix.de> - - -Two trivial fixes for the Userspace IO Kconfig file: -1) uio_sercos3 is a PCI driver, so let it depend on PCI. -2) "default n" under UIO_PCI_GENERIC is luxury since it is already the default. - -Acked-by: John Ogness <john.ogness@linutronix.de> -Signed-off-by: Hans J. Koch <hjk@linutronix.de> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/uio/Kconfig | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/drivers/uio/Kconfig -+++ b/drivers/uio/Kconfig -@@ -74,6 +74,7 @@ config UIO_AEC - - config UIO_SERCOS3 - tristate "Automata Sercos III PCI card driver" -+ depends on PCI - help - Userspace I/O interface for the Sercos III PCI card from - Automata GmbH. The userspace part of this driver will be -@@ -87,7 +88,6 @@ config UIO_SERCOS3 - config UIO_PCI_GENERIC - tristate "Generic driver for PCI 2.3 and PCI Express cards" - depends on PCI -- default n - help - Generic driver that you can bind, dynamically, to any - PCI 2.3 compliant and PCI Express card. It is useful, diff --git a/driver-core/uio-remove-smx-cryptengine-driver.patch b/driver-core/uio-remove-smx-cryptengine-driver.patch deleted file mode 100644 index 6e4f5817f10acf..00000000000000 --- a/driver-core/uio-remove-smx-cryptengine-driver.patch +++ /dev/null @@ -1,197 +0,0 @@ -From hjk@linutronix.de Wed Feb 17 15:37:10 2010 -From: "Hans J. Koch" <hjk@linutronix.de> -Date: Wed, 10 Feb 2010 20:12:42 +0100 -Subject: UIO: Remove SMX Cryptengine driver -Cc: Greg Kroah-Hartman <gregkh@suse.de>, Ben Nizette <bn@niasdigital.com> -Message-ID: <20100210191241.GD2946@local> -Content-Disposition: inline - - -Ben Nizette, the author of this driver, told me in a private mail that this -project has been cancelled. He suggested to remove the driver for now, and -will come back with a new version should the hardware really exist. -This patch completely removes the driver. - -Signed-off-by: Hans J. Koch <hjk@linutronix.de> -Acked-by: Ben Nizette <bn@niasdigital.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/uio/Kconfig | 11 --- - drivers/uio/Makefile | 1 - drivers/uio/uio_smx.c | 140 -------------------------------------------------- - 3 files changed, 152 deletions(-) - ---- a/drivers/uio/Kconfig -+++ b/drivers/uio/Kconfig -@@ -44,17 +44,6 @@ config UIO_PDRV_GENIRQ - - If you don't know what to do here, say N. - --config UIO_SMX -- tristate "SMX cryptengine UIO interface" -- help -- Userspace IO interface to the Cryptography engine found on the -- Nias Digital SMX boards. These will be available from Q4 2008 -- from http://www.niasdigital.com. The userspace part of this -- driver will be released under the GPL at the same time as the -- hardware and will be able to be downloaded from the same site. -- -- If you compile this as a module, it will be called uio_smx. -- - config UIO_AEC - tristate "AEC video timestamp device" - depends on PCI ---- a/drivers/uio/Makefile -+++ b/drivers/uio/Makefile -@@ -2,7 +2,6 @@ obj-$(CONFIG_UIO) += uio.o - obj-$(CONFIG_UIO_CIF) += uio_cif.o - obj-$(CONFIG_UIO_PDRV) += uio_pdrv.o - obj-$(CONFIG_UIO_PDRV_GENIRQ) += uio_pdrv_genirq.o --obj-$(CONFIG_UIO_SMX) += uio_smx.o - obj-$(CONFIG_UIO_AEC) += uio_aec.o - obj-$(CONFIG_UIO_SERCOS3) += uio_sercos3.o - obj-$(CONFIG_UIO_PCI_GENERIC) += uio_pci_generic.o ---- a/drivers/uio/uio_smx.c -+++ /dev/null -@@ -1,140 +0,0 @@ --/* -- * UIO SMX Cryptengine driver. -- * -- * (C) 2008 Nias Digital P/L <bn@niasdigital.com> -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License version 2 as -- * published by the Free Software Foundation. -- * -- */ -- --#include <linux/device.h> --#include <linux/module.h> --#include <linux/platform_device.h> --#include <linux/uio_driver.h> --#include <linux/io.h> -- --#define DRV_NAME "smx-ce" --#define DRV_VERSION "0.03" -- --#define SMX_CSR 0x00000000 --#define SMX_EnD 0x00000001 --#define SMX_RUN 0x00000002 --#define SMX_DRDY 0x00000004 --#define SMX_ERR 0x00000008 -- --static irqreturn_t smx_handler(int irq, struct uio_info *dev_info) --{ -- void __iomem *csr = dev_info->mem[0].internal_addr + SMX_CSR; -- -- u32 status = ioread32(csr); -- -- if (!(status & SMX_DRDY)) -- return IRQ_NONE; -- -- /* Disable interrupt */ -- iowrite32(status & ~SMX_DRDY, csr); -- return IRQ_HANDLED; --} -- --static int __devinit smx_ce_probe(struct platform_device *dev) --{ -- -- int ret = -ENODEV; -- struct uio_info *info; -- struct resource *regs; -- -- info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); -- if (!info) -- return -ENOMEM; -- -- regs = platform_get_resource(dev, IORESOURCE_MEM, 0); -- if (!regs) { -- dev_err(&dev->dev, "No memory resource specified\n"); -- goto out_free; -- } -- -- info->mem[0].addr = regs->start; -- if (!info->mem[0].addr) { -- dev_err(&dev->dev, "Invalid memory resource\n"); -- goto out_free; -- } -- -- info->mem[0].size = regs->end - regs->start + 1; -- info->mem[0].internal_addr = ioremap(regs->start, info->mem[0].size); -- -- if (!info->mem[0].internal_addr) { -- dev_err(&dev->dev, "Can't remap memory address range\n"); -- goto out_free; -- } -- -- info->mem[0].memtype = UIO_MEM_PHYS; -- -- info->name = "smx-ce"; -- info->version = "0.03"; -- -- info->irq = platform_get_irq(dev, 0); -- if (info->irq < 0) { -- ret = info->irq; -- dev_err(&dev->dev, "No (or invalid) IRQ resource specified\n"); -- goto out_unmap; -- } -- -- info->irq_flags = IRQF_SHARED; -- info->handler = smx_handler; -- -- platform_set_drvdata(dev, info); -- -- ret = uio_register_device(&dev->dev, info); -- -- if (ret) -- goto out_unmap; -- -- return 0; -- --out_unmap: -- iounmap(info->mem[0].internal_addr); --out_free: -- kfree(info); -- -- return ret; --} -- --static int __devexit smx_ce_remove(struct platform_device *dev) --{ -- struct uio_info *info = platform_get_drvdata(dev); -- -- uio_unregister_device(info); -- platform_set_drvdata(dev, NULL); -- iounmap(info->mem[0].internal_addr); -- -- kfree(info); -- -- return 0; --} -- --static struct platform_driver smx_ce_driver = { -- .probe = smx_ce_probe, -- .remove = __devexit_p(smx_ce_remove), -- .driver = { -- .name = DRV_NAME, -- .owner = THIS_MODULE, -- }, --}; -- --static int __init smx_ce_init_module(void) --{ -- return platform_driver_register(&smx_ce_driver); --} --module_init(smx_ce_init_module); -- --static void __exit smx_ce_exit_module(void) --{ -- platform_driver_unregister(&smx_ce_driver); --} --module_exit(smx_ce_exit_module); -- --MODULE_LICENSE("GPL v2"); --MODULE_VERSION(DRV_VERSION); --MODULE_AUTHOR("Ben Nizette <bn@niasdigital.com>"); diff --git a/driver-core/w1-move-omap_hdq-s-probe-function-to-.devinit.text.patch b/driver-core/w1-move-omap_hdq-s-probe-function-to-.devinit.text.patch deleted file mode 100644 index 307d627121c5be..00000000000000 --- a/driver-core/w1-move-omap_hdq-s-probe-function-to-.devinit.text.patch +++ /dev/null @@ -1,52 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:44:30 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:54 +0100 -Subject: w1: move omap_hdq's probe function to .devinit.text -To: Greg KH <gregkh@suse.de> -Cc: "Stanley.Miao" <stanley.miao@windriver.com>, Andrew Morton <akpm@linux-foundation.org>, Madhusudhan Chikkature <madhu.cr@ti.com>, Felipe Balbi <felipe.balbi@nokia.com> -Message-ID: <1265313417-5568-6-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to omap_hdq_probe is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Cc: Stanley.Miao <stanley.miao@windriver.com> -Acked-by: Evgeniy Polyakov <zbr@ioremap.net> -Cc: Andrew Morton <akpm@linux-foundation.org> -Cc: Madhusudhan Chikkature <madhu.cr@ti.com> -Cc: Felipe Balbi <felipe.balbi@nokia.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/w1/masters/omap_hdq.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/w1/masters/omap_hdq.c -+++ b/drivers/w1/masters/omap_hdq.c -@@ -72,7 +72,7 @@ struct hdq_data { - int init_trans; - }; - --static int __init omap_hdq_probe(struct platform_device *pdev); -+static int __devinit omap_hdq_probe(struct platform_device *pdev); - static int omap_hdq_remove(struct platform_device *pdev); - - static struct platform_driver omap_hdq_driver = { -@@ -558,7 +558,7 @@ static void omap_w1_write_byte(void *_hd - return; - } - --static int __init omap_hdq_probe(struct platform_device *pdev) -+static int __devinit omap_hdq_probe(struct platform_device *pdev) - { - struct hdq_data *hdq_data; - struct resource *res; diff --git a/driver-core/x86-move-hp-wmi-s-probe-function-to-.devinit.text.patch b/driver-core/x86-move-hp-wmi-s-probe-function-to-.devinit.text.patch deleted file mode 100644 index 910a6cd72cee62..00000000000000 --- a/driver-core/x86-move-hp-wmi-s-probe-function-to-.devinit.text.patch +++ /dev/null @@ -1,53 +0,0 @@ -From u.kleine-koenig@pengutronix.de Wed Feb 17 12:43:16 2010 -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Date: Thu, 4 Feb 2010 20:56:52 +0100 -Subject: x86: move hp-wmi's probe function to .devinit.text -To: Greg KH <gregkh@suse.de> -Cc: Frans Pop <elendil@planet.nl>, Larry Finger <Larry.Finger@lwfinger.net>, Len Brown <lenb@kernel.org>, Helge Deller <deller@gmx.de>, Matthew Garrett <mjg@redhat.com>, Andrew Morton <akpm@linux-foundation.org> -Message-ID: <1265313417-5568-4-git-send-email-u.kleine-koenig@pengutronix.de> - -From: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> - -A pointer to hp_wmi_bios_setup is passed to the core via -platform_driver_register and so the function must not disappear when the -.init sections are discarded. Otherwise (if also having HOTPLUG=y) -unbinding and binding a device to the driver via sysfs will result in an -oops as does a device being registered late. - -An alternative to this patch is using platform_driver_probe instead of -platform_driver_register plus removing the pointer to the probe function -from the struct platform_driver. - -Signed-off-by: Uwe Kleine-K�nig <u.kleine-koenig@pengutronix.de> -Cc: Frans Pop <elendil@planet.nl> -Cc: Larry Finger <Larry.Finger@lwfinger.net> -Cc: Len Brown <lenb@kernel.org> -Cc: Helge Deller <deller@gmx.de> -Cc: Andrew Morton <akpm@linux-foundation.org> -Acked-by: Matthew Garrett <mjg@redhat.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/platform/x86/hp-wmi.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/platform/x86/hp-wmi.c -+++ b/drivers/platform/x86/hp-wmi.c -@@ -57,7 +57,7 @@ enum hp_wmi_radio { - HPWMI_WWAN = 2, - }; - --static int __init hp_wmi_bios_setup(struct platform_device *device); -+static int __devinit hp_wmi_bios_setup(struct platform_device *device); - static int __exit hp_wmi_bios_remove(struct platform_device *device); - static int hp_wmi_resume_handler(struct device *device); - -@@ -447,7 +447,7 @@ static void cleanup_sysfs(struct platfor - device_remove_file(&device->dev, &dev_attr_tablet); - } - --static int __init hp_wmi_bios_setup(struct platform_device *device) -+static int __devinit hp_wmi_bios_setup(struct platform_device *device) - { - int err; - int wireless = hp_wmi_perform_query(HPWMI_WIRELESS_QUERY, 0, 0); @@ -1,7 +1,6 @@ # My specific stuff, at the top to make it easier to work stuff below. gregkh/gkh-version.patch - ##################################################################### # Stuff to be merged for 2.6.33 ##################################################################### @@ -31,73 +30,8 @@ gregkh/gkh-version.patch ############################################# # Driver core patches for after 2.6.33 is out ############################################# -driver-core/driver-core-fix-race-condition-in-get_device_parent.patch -driver-core/kobject-example-spelling-fixes.patch -driver-core/kset-example-spelling-fixes.patch -driver-core/driver-core-add-platform_create_bundle-helper.patch -driver-core/driver-core-make-platform_device_id-table-const.patch -driver-core/sysdev-pass-attribute-in-sysdev_class-attributes-show-store.patch -driver-core/sysdev-convert-node-driver-class-attributes-to-be-data-driven.patch -driver-core/sysdev-convert-cpu-driver-sysdev-class-attributes.patch -driver-core/sysfs-add-sysfs_add-remove_files-utility-functions.patch -driver-core/sysfs-add-attribute-array-to-sysdev-classes.patch -driver-core/sysdev-convert-node-driver.patch -driver-core/sysdev-use-sysdev_class-attribute-arrays-in-node-driver.patch -driver-core/sysdev-add-sysdev_create-remove_files.patch -driver-core/sysdev-fix-type-of-sysdev-class-attribute-in-memory-driver.patch -driver-core/sysdev-fix-missing-s390-conversion.patch -driver-core/sysdev-add-attribute-argument-to-class_attribute-show-store.patch -driver-core/driver-core-add-class_attr_string-for-simple-read-only-string.patch -driver-core/driver-core-convert-some-drivers-to-class_attr_string.patch -driver-core/driver-core-devtmpfs-reset-inode-permissions-before-unlinking.patch -driver-core/driver-core-devtmpfs-remove-experimental-and-enable-it-by-default.patch -driver-core/driver-core-disable-sbin-hotplug-by-default.patch -driver-core/driver-core-require-valid-action-string-in-uevent-trigger.patch -driver-core/sysfs-cache-the-last-sysfs_dirent-to-improve-readdir-scalability-v2.patch -driver-core/driver-core-firmware_class-remove-base.h-header-inclusion.patch -driver-core/kobject-constify-struct-kset_uevent_ops.patch -driver-core/howto-updates-on-subsystem-trees-patchwork-next-vs.-mm.patch -driver-core/sysdev-fix-up-the-probe-release-attributes.patch -driver-core/driver-core-constify-struct-sysfs_ops-in-struct-kobj_type.patch -driver-core/driver-core-make-struct-platform_driver.id_table-const.patch - -driver-core/platform-drivers-move-probe-to-.devinit.text-in-arch-arm.patch -driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-scsi.patch -driver-core/platform-drivers-move-probe-to-.devinit.text-in-drivers-video.patch -driver-core/x86-move-hp-wmi-s-probe-function-to-.devinit.text.patch -driver-core/i2c-move-i2c_omap-s-probe-function-to-.devinit.text.patch -driver-core/w1-move-omap_hdq-s-probe-function-to-.devinit.text.patch -driver-core/media-move-omap24xxcam-s-probe-function-to-.devinit.text.patch -driver-core/auxdisplay-move-cfag12864bfb-s-probe-function-to-.devinit.text.patch -driver-core/uio-add-a-driver-for-hilscher-netx-based-fieldbus-cards.patch -driver-core/uio-minor-kconfig-fixes.patch -driver-core/uio-remove-smx-cryptengine-driver.patch -driver-core/driver-core-fix-first-line-of-kernel-doc-for-a-few-functions.patch -driver-core/sysfs-remove-sysfs_get-put_active_two.patch -driver-core/sysfs-only-take-active-references-on-attributes.patch -driver-core/sysfs-use-one-lockdep-class-per-sysfs-attribute.patch -driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-dynamic-attributes.patch -driver-core/sysfs-document-sysfs_attr_init-and-sysfs_bin_attr_init.patch -driver-core/sysfs-use-sysfs_attr_init-and-sysfs_bin_attr_init-on-module-dynamic-attributes.patch -driver-core/sysfs-windfarm-init-sysfs-attributes.patch -driver-core/sysfs-serialize-updates-to-the-vfs-inode.patch -driver-core/sysfs-pack-sysfs_dirent-more-tightly.patch -driver-core/sysfs-implement-sysfs_rename_link.patch -driver-core/driver-core-use-sysfs_rename_link-in-device_rename.patch -driver-core/sysfs-pass-super_block-to-sysfs_get_inode.patch -driver-core/sysfs-kill-unused-sysfs_sb-variable.patch -driver-core/sysfs-fix-for-thinko-with-sysfs_bin_attr_init.patch - -driver-core/driver-core-create-lock-unlock-functions-for-struct-device.patch driver-core/drivers-base-convert-sema.patch -# sent to Lennart 01-15-2010 -driver-core/msi-laptop-support-standard-ec-66-62-command-on-msi-notebook-and-nebook.patch -driver-core/msi-laptop-add-threeg-sysfs-file-for-support-query-3g-state-by-standard-66-62-ec-command.patch -driver-core/msi-laptop-support-some-msi-3g-netbook-that-is-need-load-scm.patch -driver-core/msi-laptop-add-resume-method-for-set-the-scm-load-again.patch -driver-core/msi-laptop-detect-3g-device-exists-by-standard-ec-command.patch -driver-core/msi-laptop-depends-on-rfkill.patch ##################################### # TTY patches for after 2.6.33 is out |
