aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-30 15:37:22 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-30 15:37:22 +0100
commit946cb48082b0bbff0bb96b3f816d0327bf409d79 (patch)
treeddf24fb1cffad74877ccd6d4c3421cf8e6cc5bb8
parent3c37d678907cad7f656ff2d3f1d7d9781cf90b58 (diff)
downloadpatches-946cb48082b0bbff0bb96b3f816d0327bf409d79.tar.gz
more patches updated
-rw-r--r--c09.patch2
-rw-r--r--c10.patch4
-rw-r--r--csdio2.patch2
-rw-r--r--d06.patch61
-rw-r--r--d07.patch23
-rw-r--r--d08.patch61
-rw-r--r--d09.patch24
-rw-r--r--d10.patch200
-rw-r--r--d11.patch147
-rw-r--r--d12.patch34
-rw-r--r--d13.patch29
-rw-r--r--d14.patch73
-rw-r--r--d15.patch26
-rw-r--r--d16.patch120
-rw-r--r--d99.patch29
-rw-r--r--pci_groups.patch131
-rw-r--r--series13
17 files changed, 975 insertions, 4 deletions
diff --git a/c09.patch b/c09.patch
index 8023640ffecd35..d6cca560e1da40 100644
--- a/c09.patch
+++ b/c09.patch
@@ -21,7 +21,7 @@
mutex_unlock(&ctl_mutex);
return n;
}
-+static CLASS_ATTRIBUTE_RO(device_map);
++static CLASS_ATTR_RO(device_map);
-static ssize_t class_pktcdvd_store_add(struct class *c,
- struct class_attribute *attr,
diff --git a/c10.patch b/c10.patch
index 422409d813db94..f55fd6edc0bff7 100644
--- a/c10.patch
+++ b/c10.patch
@@ -17,7 +17,7 @@
return ret;
}
-+static CLASS_ATTRIBUTE_RO(model);
++static CLASS_ATTR_RO(model);
-static ssize_t merisc_revision_show(struct class *class, char *buf)
+static ssize_t revision_show(struct class *class, char *buf)
@@ -28,7 +28,7 @@
return ret;
}
-+static CLASS_ATTRIBUTE_RO(revision);
++static CLASS_ATTR_RO(revision);
-static struct class_attribute merisc_class_attrs[] = {
- __ATTR(model, S_IRUGO, merisc_model_show, NULL),
diff --git a/csdio2.patch b/csdio2.patch
index 74fca2d76e81c6..1a66ab8d8a9edd 100644
--- a/csdio2.patch
+++ b/csdio2.patch
@@ -266,7 +266,7 @@ Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
+ help
+ Enter device id for targeted sdio device, this may be overwritten by
+ module parameters.
-+.
++
endmenu
--- a/drivers/char/Makefile
diff --git a/d06.patch b/d06.patch
new file mode 100644
index 00000000000000..bff4fdf7205c51
--- /dev/null
+++ b/d06.patch
@@ -0,0 +1,61 @@
+---
+ drivers/net/caif/caif_spi.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/caif/caif_spi.c
++++ b/drivers/net/caif/caif_spi.c
+@@ -289,44 +289,44 @@ static LIST_HEAD(cfspi_list);
+ static spinlock_t cfspi_list_lock;
+
+ /* SPI uplink head alignment. */
+-static ssize_t show_up_head_align(struct device_driver *driver, char *buf)
++static ssize_t up_head_align_show(struct device_driver *driver, char *buf)
+ {
+ return sprintf(buf, "%d\n", spi_up_head_align);
+ }
+
+-static DRIVER_ATTR(up_head_align, S_IRUSR, show_up_head_align, NULL);
++static DRIVER_ATTR_RO(up_head_align);
+
+ /* SPI uplink tail alignment. */
+-static ssize_t show_up_tail_align(struct device_driver *driver, char *buf)
++static ssize_t up_tail_align_show(struct device_driver *driver, char *buf)
+ {
+ return sprintf(buf, "%d\n", spi_up_tail_align);
+ }
+
+-static DRIVER_ATTR(up_tail_align, S_IRUSR, show_up_tail_align, NULL);
++static DRIVER_ATTR_RO(up_tail_align);
+
+ /* SPI downlink head alignment. */
+-static ssize_t show_down_head_align(struct device_driver *driver, char *buf)
++static ssize_t down_head_align_show(struct device_driver *driver, char *buf)
+ {
+ return sprintf(buf, "%d\n", spi_down_head_align);
+ }
+
+-static DRIVER_ATTR(down_head_align, S_IRUSR, show_down_head_align, NULL);
++static DRIVER_ATTR_RO(down_head_align);
+
+ /* SPI downlink tail alignment. */
+-static ssize_t show_down_tail_align(struct device_driver *driver, char *buf)
++static ssize_t down_tail_align_show(struct device_driver *driver, char *buf)
+ {
+ return sprintf(buf, "%d\n", spi_down_tail_align);
+ }
+
+-static DRIVER_ATTR(down_tail_align, S_IRUSR, show_down_tail_align, NULL);
++static DRIVER_ATTR_RO(down_tail_align);
+
+ /* SPI frame alignment. */
+-static ssize_t show_frame_align(struct device_driver *driver, char *buf)
++static ssize_t frame_align_show(struct device_driver *driver, char *buf)
+ {
+ return sprintf(buf, "%d\n", spi_frm_align);
+ }
+
+-static DRIVER_ATTR(frame_align, S_IRUSR, show_frame_align, NULL);
++static DRIVER_ATTR_RO(frame_align);
+
+ int cfspi_xmitfrm(struct cfspi *cfspi, u8 *buf, size_t len)
+ {
diff --git a/d07.patch b/d07.patch
new file mode 100644
index 00000000000000..5778bbc0a0d0f6
--- /dev/null
+++ b/d07.patch
@@ -0,0 +1,23 @@
+---
+ drivers/net/ethernet/ibm/ehea/ehea_main.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
++++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
+@@ -3560,14 +3560,12 @@ static int check_module_parm(void)
+ return ret;
+ }
+
+-static ssize_t ehea_show_capabilities(struct device_driver *drv,
+- char *buf)
++static ssize_t capabilities_show(struct device_driver *drv, char *buf)
+ {
+ return sprintf(buf, "%d", EHEA_CAPABILITIES);
+ }
+
+-static DRIVER_ATTR(capabilities, S_IRUSR | S_IRGRP | S_IROTH,
+- ehea_show_capabilities, NULL);
++static DRIVER_ATTR_RO(capabilities);
+
+ static int __init ehea_module_init(void)
+ {
diff --git a/d08.patch b/d08.patch
new file mode 100644
index 00000000000000..0bb621a5adb6b7
--- /dev/null
+++ b/d08.patch
@@ -0,0 +1,61 @@
+---
+ drivers/net/wireless/intel/ipw2x00/ipw2100.c | 8 +++-----
+ drivers/net/wireless/intel/ipw2x00/ipw2200.c | 8 +++-----
+ 2 files changed, 6 insertions(+), 10 deletions(-)
+
+--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
++++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
+@@ -4160,12 +4160,12 @@ static ssize_t show_bssinfo(struct devic
+ static DEVICE_ATTR(bssinfo, S_IRUGO, show_bssinfo, NULL);
+
+ #ifdef CONFIG_IPW2100_DEBUG
+-static ssize_t show_debug_level(struct device_driver *d, char *buf)
++static ssize_t debug_level_show(struct device_driver *d, char *buf)
+ {
+ return sprintf(buf, "0x%08X\n", ipw2100_debug_level);
+ }
+
+-static ssize_t store_debug_level(struct device_driver *d,
++static ssize_t debug_level_store(struct device_driver *d,
+ const char *buf, size_t count)
+ {
+ u32 val;
+@@ -4179,9 +4179,7 @@ static ssize_t store_debug_level(struct
+
+ return strnlen(buf, count);
+ }
+-
+-static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO, show_debug_level,
+- store_debug_level);
++static DRIVER_ATTR_RW(debug_level);
+ #endif /* CONFIG_IPW2100_DEBUG */
+
+ static ssize_t show_fatal_error(struct device *d,
+--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
++++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+@@ -1195,12 +1195,12 @@ static void ipw_led_shutdown(struct ipw_
+ *
+ * See the level definitions in ipw for details.
+ */
+-static ssize_t show_debug_level(struct device_driver *d, char *buf)
++static ssize_t debug_level_show(struct device_driver *d, char *buf)
+ {
+ return sprintf(buf, "0x%08X\n", ipw_debug_level);
+ }
+
+-static ssize_t store_debug_level(struct device_driver *d, const char *buf,
++static ssize_t debug_level_store(struct device_driver *d, const char *buf,
+ size_t count)
+ {
+ char *p = (char *)buf;
+@@ -1221,9 +1221,7 @@ static ssize_t store_debug_level(struct
+
+ return strnlen(buf, count);
+ }
+-
+-static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO,
+- show_debug_level, store_debug_level);
++static DRIVER_ATTR_RW(debug_level);
+
+ static inline u32 ipw_get_event_log_len(struct ipw_priv *priv)
+ {
diff --git a/d09.patch b/d09.patch
new file mode 100644
index 00000000000000..d58affbbf94a5b
--- /dev/null
+++ b/d09.patch
@@ -0,0 +1,24 @@
+---
+ drivers/pcmcia/ds.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/pcmcia/ds.c
++++ b/drivers/pcmcia/ds.c
+@@ -95,7 +95,7 @@ struct pcmcia_dynid {
+ * and causes the driver to probe for all devices again.
+ */
+ static ssize_t
+-pcmcia_store_new_id(struct device_driver *driver, const char *buf, size_t count)
++new_id_store(struct device_driver *driver, const char *buf, size_t count)
+ {
+ struct pcmcia_dynid *dynid;
+ struct pcmcia_driver *pdrv = to_pcmcia_drv(driver);
+@@ -133,7 +133,7 @@ pcmcia_store_new_id(struct device_driver
+ return retval;
+ return count;
+ }
+-static DRIVER_ATTR(new_id, S_IWUSR, NULL, pcmcia_store_new_id);
++static DRIVER_ATTR_WO(new_id, S_IWUSR, NULL, pcmcia_store_new_id);
+
+ static void
+ pcmcia_free_dynids(struct pcmcia_driver *drv)
diff --git a/d10.patch b/d10.patch
new file mode 100644
index 00000000000000..139450dce5dcfc
--- /dev/null
+++ b/d10.patch
@@ -0,0 +1,200 @@
+---
+ drivers/platform/x86/thinkpad_acpi.c | 91 ++++++++++-------------------------
+ 1 file changed, 28 insertions(+), 63 deletions(-)
+
+--- a/drivers/platform/x86/thinkpad_acpi.c
++++ b/drivers/platform/x86/thinkpad_acpi.c
+@@ -1430,25 +1430,20 @@ static int tpacpi_rfk_procfs_write(const
+ */
+
+ /* interface_version --------------------------------------------------- */
+-static ssize_t tpacpi_driver_interface_version_show(
+- struct device_driver *drv,
+- char *buf)
++static ssize_t interface_version_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "0x%08x\n", TPACPI_SYSFS_VERSION);
+ }
+-
+-static DRIVER_ATTR(interface_version, S_IRUGO,
+- tpacpi_driver_interface_version_show, NULL);
++static DRIVER_ATTR_RO(interface_version);
+
+ /* debug_level --------------------------------------------------------- */
+-static ssize_t tpacpi_driver_debug_show(struct device_driver *drv,
+- char *buf)
++static ssize_t debug_level_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "0x%04x\n", dbg_level);
+ }
+
+-static ssize_t tpacpi_driver_debug_store(struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t debug_level_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ unsigned long t;
+
+@@ -1459,34 +1454,28 @@ static ssize_t tpacpi_driver_debug_store
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(debug_level, S_IWUSR | S_IRUGO,
+- tpacpi_driver_debug_show, tpacpi_driver_debug_store);
++static DRIVER_ATTR_RW(debug_level);
+
+ /* version ------------------------------------------------------------- */
+-static ssize_t tpacpi_driver_version_show(struct device_driver *drv,
+- char *buf)
++static ssize_t version_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%s v%s\n",
+ TPACPI_DESC, TPACPI_VERSION);
+ }
+-
+-static DRIVER_ATTR(version, S_IRUGO,
+- tpacpi_driver_version_show, NULL);
++static DRIVER_ATTR_RO(version);
+
+ /* --------------------------------------------------------------------- */
+
+ #ifdef CONFIG_THINKPAD_ACPI_DEBUGFACILITIES
+
+ /* wlsw_emulstate ------------------------------------------------------ */
+-static ssize_t tpacpi_driver_wlsw_emulstate_show(struct device_driver *drv,
+- char *buf)
++static ssize_t wlsw_emulstate_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_wlsw_emulstate);
+ }
+
+-static ssize_t tpacpi_driver_wlsw_emulstate_store(struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t wlsw_emulstate_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ unsigned long t;
+
+@@ -1500,22 +1489,16 @@ static ssize_t tpacpi_driver_wlsw_emulst
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(wlsw_emulstate, S_IWUSR | S_IRUGO,
+- tpacpi_driver_wlsw_emulstate_show,
+- tpacpi_driver_wlsw_emulstate_store);
++static DRIVER_ATTR_RW(wlsw_emulstate);
+
+ /* bluetooth_emulstate ------------------------------------------------- */
+-static ssize_t tpacpi_driver_bluetooth_emulstate_show(
+- struct device_driver *drv,
+- char *buf)
++static ssize_t bluetooth_emulstate_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_bluetooth_emulstate);
+ }
+
+-static ssize_t tpacpi_driver_bluetooth_emulstate_store(
+- struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t bluetooth_emulstate_store(struct device_driver *drv,
++ const char *buf, size_t count)
+ {
+ unsigned long t;
+
+@@ -1526,22 +1509,16 @@ static ssize_t tpacpi_driver_bluetooth_e
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(bluetooth_emulstate, S_IWUSR | S_IRUGO,
+- tpacpi_driver_bluetooth_emulstate_show,
+- tpacpi_driver_bluetooth_emulstate_store);
++static DRIVER_ATTR_RW(bluetooth_emulstate);
+
+ /* wwan_emulstate ------------------------------------------------- */
+-static ssize_t tpacpi_driver_wwan_emulstate_show(
+- struct device_driver *drv,
+- char *buf)
++static ssize_t wwan_emulstate_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_wwan_emulstate);
+ }
+
+-static ssize_t tpacpi_driver_wwan_emulstate_store(
+- struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t wwan_emulstate_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ unsigned long t;
+
+@@ -1552,22 +1529,16 @@ static ssize_t tpacpi_driver_wwan_emulst
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(wwan_emulstate, S_IWUSR | S_IRUGO,
+- tpacpi_driver_wwan_emulstate_show,
+- tpacpi_driver_wwan_emulstate_store);
++static DRIVER_ATTR_RW(wwan_emulstate);
+
+ /* uwb_emulstate ------------------------------------------------- */
+-static ssize_t tpacpi_driver_uwb_emulstate_show(
+- struct device_driver *drv,
+- char *buf)
++static ssize_t uwb_emulstate_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%d\n", !!tpacpi_uwb_emulstate);
+ }
+
+-static ssize_t tpacpi_driver_uwb_emulstate_store(
+- struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t uwb_emulstate_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ unsigned long t;
+
+@@ -1578,10 +1549,7 @@ static ssize_t tpacpi_driver_uwb_emulsta
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(uwb_emulstate, S_IWUSR | S_IRUGO,
+- tpacpi_driver_uwb_emulstate_show,
+- tpacpi_driver_uwb_emulstate_store);
++static DRIVER_ATTR_RW(uwb_emulstate);
+ #endif
+
+ /* --------------------------------------------------------------------- */
+@@ -8516,14 +8484,13 @@ static ssize_t fan_fan2_input_show(struc
+ static DEVICE_ATTR(fan2_input, S_IRUGO, fan_fan2_input_show, NULL);
+
+ /* sysfs fan fan_watchdog (hwmon driver) ------------------------------- */
+-static ssize_t fan_fan_watchdog_show(struct device_driver *drv,
+- char *buf)
++static ssize_t fan_watchdog_show(struct device_driver *drv, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%u\n", fan_watchdog_maxinterval);
+ }
+
+-static ssize_t fan_fan_watchdog_store(struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t fan_watchdog_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ unsigned long t;
+
+@@ -8540,9 +8507,7 @@ static ssize_t fan_fan_watchdog_store(st
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(fan_watchdog, S_IWUSR | S_IRUGO,
+- fan_fan_watchdog_show, fan_fan_watchdog_store);
++static DRIVER_ATTR_RW(fan_watchdog);
+
+ /* --------------------------------------------------------------------- */
+ static struct attribute *fan_attributes[] = {
diff --git a/d11.patch b/d11.patch
new file mode 100644
index 00000000000000..332e64ac370d4c
--- /dev/null
+++ b/d11.patch
@@ -0,0 +1,147 @@
+---
+ drivers/s390/char/sclp.c | 12 ++++++------
+ drivers/s390/char/vmlogrdr.c | 7 ++-----
+ drivers/s390/net/lcs.c | 6 +++---
+ drivers/s390/net/netiucv.c | 14 ++++++--------
+ drivers/s390/net/qeth_core_main.c | 6 +++---
+ 5 files changed, 20 insertions(+), 25 deletions(-)
+
+--- a/drivers/s390/char/sclp.c
++++ b/drivers/s390/char/sclp.c
+@@ -1128,26 +1128,26 @@ static const struct dev_pm_ops sclp_pm_o
+ .restore = sclp_restore,
+ };
+
+-static ssize_t sclp_show_console_pages(struct device_driver *dev, char *buf)
++static ssize_t console_pages_show(struct device_driver *dev, char *buf)
+ {
+ return sprintf(buf, "%i\n", sclp_console_pages);
+ }
+
+-static DRIVER_ATTR(con_pages, S_IRUSR, sclp_show_console_pages, NULL);
++static DRIVER_ATTR_RO(con_pages);
+
+-static ssize_t sclp_show_con_drop(struct device_driver *dev, char *buf)
++static ssize_t con_drop_show(struct device_driver *dev, char *buf)
+ {
+ return sprintf(buf, "%i\n", sclp_console_drop);
+ }
+
+-static DRIVER_ATTR(con_drop, S_IRUSR, sclp_show_con_drop, NULL);
++static DRIVER_ATTR_RO(con_drop);
+
+-static ssize_t sclp_show_console_full(struct device_driver *dev, char *buf)
++static ssize_t con_full_show(struct device_driver *dev, char *buf)
+ {
+ return sprintf(buf, "%lu\n", sclp_console_full);
+ }
+
+-static DRIVER_ATTR(con_full, S_IRUSR, sclp_show_console_full, NULL);
++static DRIVER_ATTR_RO(con_full);
+
+ static struct attribute *sclp_drv_attrs[] = {
+ &driver_attr_con_pages.attr,
+--- a/drivers/s390/char/vmlogrdr.c
++++ b/drivers/s390/char/vmlogrdr.c
+@@ -641,10 +641,8 @@ static ssize_t vmlogrdr_recording_store(
+ static DEVICE_ATTR(recording, 0200, NULL, vmlogrdr_recording_store);
+
+
+-static ssize_t vmlogrdr_recording_status_show(struct device_driver *driver,
+- char *buf)
++static ssize_t recording_status_show(struct device_driver *driver, char *buf)
+ {
+-
+ static const char cp_command[] = "QUERY RECORDING ";
+ int len;
+
+@@ -652,8 +650,7 @@ static ssize_t vmlogrdr_recording_status
+ len = strlen(buf);
+ return len;
+ }
+-static DRIVER_ATTR(recording_status, 0444, vmlogrdr_recording_status_show,
+- NULL);
++static DRIVER_ATTR_RO(recording_status);
+ static struct attribute *vmlogrdr_drv_attrs[] = {
+ &driver_attr_recording_status.attr,
+ NULL,
+--- a/drivers/s390/net/lcs.c
++++ b/drivers/s390/net/lcs.c
+@@ -2411,14 +2411,14 @@ static struct ccwgroup_driver lcs_group_
+ .restore = lcs_restore,
+ };
+
+-static ssize_t lcs_driver_group_store(struct device_driver *ddrv,
+- const char *buf, size_t count)
++static ssize_t group_store(struct device_driver *ddrv, const char *buf,
++ size_t count)
+ {
+ int err;
+ err = ccwgroup_create_dev(lcs_root_dev, &lcs_group_driver, 2, buf);
+ return err ? err : count;
+ }
+-static DRIVER_ATTR(group, 0200, NULL, lcs_driver_group_store);
++static DRIVER_ATTR_WO(group);
+
+ static struct attribute *lcs_drv_attrs[] = {
+ &driver_attr_group.attr,
+--- a/drivers/s390/net/netiucv.c
++++ b/drivers/s390/net/netiucv.c
+@@ -2041,8 +2041,8 @@ out_netdev:
+ return NULL;
+ }
+
+-static ssize_t conn_write(struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t connection_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ char username[9];
+ char userdata[17];
+@@ -2103,11 +2103,10 @@ out_free_ndev:
+ netiucv_free_netdevice(dev);
+ return rc;
+ }
++static DRIVER_ATTR_WO(connection);
+
+-static DRIVER_ATTR(connection, 0200, NULL, conn_write);
+-
+-static ssize_t remove_write (struct device_driver *drv,
+- const char *buf, size_t count)
++static ssize_t remove_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ struct iucv_connection *cp;
+ struct net_device *ndev;
+@@ -2153,8 +2152,7 @@ static ssize_t remove_write (struct devi
+ IUCV_DBF_TEXT(data, 2, "remove_write: unknown device\n");
+ return -EINVAL;
+ }
+-
+-static DRIVER_ATTR(remove, 0200, NULL, remove_write);
++static DRIVER_ATTR_WO(remove);
+
+ static struct attribute * netiucv_drv_attrs[] = {
+ &driver_attr_connection.attr,
+--- a/drivers/s390/net/qeth_core_main.c
++++ b/drivers/s390/net/qeth_core_main.c
+@@ -5740,8 +5740,8 @@ static struct ccwgroup_driver qeth_core_
+ .restore = qeth_core_restore,
+ };
+
+-static ssize_t qeth_core_driver_group_store(struct device_driver *ddrv,
+- const char *buf, size_t count)
++static ssize_t group_store(struct device_driver *ddrv, const char *buf,
++ size_t count)
+ {
+ int err;
+
+@@ -5750,7 +5750,7 @@ static ssize_t qeth_core_driver_group_st
+
+ return err ? err : count;
+ }
+-static DRIVER_ATTR(group, 0200, NULL, qeth_core_driver_group_store);
++static DRIVER_ATTR_WO(group);
+
+ static struct attribute *qeth_drv_attrs[] = {
+ &driver_attr_group.attr,
diff --git a/d12.patch b/d12.patch
new file mode 100644
index 00000000000000..b626b75dd768fa
--- /dev/null
+++ b/d12.patch
@@ -0,0 +1,34 @@
+---
+ drivers/usb/usbip/stub_main.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/drivers/usb/usbip/stub_main.c
++++ b/drivers/usb/usbip/stub_main.c
+@@ -134,7 +134,7 @@ out:
+ return ret;
+ }
+
+-static ssize_t show_match_busid(struct device_driver *drv, char *buf)
++static ssize_t match_busid_show(struct device_driver *drv, char *buf)
+ {
+ int i;
+ char *out = buf;
+@@ -149,7 +149,7 @@ static ssize_t show_match_busid(struct d
+ return out - buf;
+ }
+
+-static ssize_t store_match_busid(struct device_driver *dev, const char *buf,
++static ssize_t match_busid_store(struct device_driver *dev, const char *buf,
+ size_t count)
+ {
+ int len;
+@@ -181,8 +181,7 @@ static ssize_t store_match_busid(struct
+
+ return -EINVAL;
+ }
+-static DRIVER_ATTR(match_busid, S_IRUSR | S_IWUSR, show_match_busid,
+- store_match_busid);
++static DRIVER_ATTR_RW(match_busid);
+
+ static ssize_t rebind_store(struct device_driver *dev, const char *buf,
+ size_t count)
diff --git a/d13.patch b/d13.patch
new file mode 100644
index 00000000000000..aec58db47c1152
--- /dev/null
+++ b/d13.patch
@@ -0,0 +1,29 @@
+---
+ drivers/video/fbdev/uvesafb.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+--- a/drivers/video/fbdev/uvesafb.c
++++ b/drivers/video/fbdev/uvesafb.c
+@@ -1883,19 +1883,18 @@ static int uvesafb_setup(char *options)
+ }
+ #endif /* !MODULE */
+
+-static ssize_t show_v86d(struct device_driver *dev, char *buf)
++static ssize_t v86d_show(struct device_driver *dev, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE, "%s\n", v86d_path);
+ }
+
+-static ssize_t store_v86d(struct device_driver *dev, const char *buf,
++static ssize_t v86d_store(struct device_driver *dev, const char *buf,
+ size_t count)
+ {
+ strncpy(v86d_path, buf, PATH_MAX);
+ return count;
+ }
+-
+-static DRIVER_ATTR(v86d, S_IRUGO | S_IWUSR, show_v86d, store_v86d);
++static DRIVER_ATTR_RW(v86d);
+
+ static int uvesafb_init(void)
+ {
diff --git a/d14.patch b/d14.patch
new file mode 100644
index 00000000000000..27abe3120c4a99
--- /dev/null
+++ b/d14.patch
@@ -0,0 +1,73 @@
+---
+ drivers/dma/ppc4xx/adma.c | 23 ++++++++++-------------
+ 1 file changed, 10 insertions(+), 13 deletions(-)
+
+
+--- a/drivers/dma/ppc4xx/adma.c
++++ b/drivers/dma/ppc4xx/adma.c
+@@ -4307,7 +4307,7 @@ static int ppc440spe_adma_remove(struct
+ * "poly" allows setting/checking used polynomial (for PPC440SPe only).
+ */
+
+-static ssize_t show_ppc440spe_devices(struct device_driver *dev, char *buf)
++static ssize_t devices_show(struct device_driver *dev, char *buf)
+ {
+ ssize_t size = 0;
+ int i;
+@@ -4321,16 +4321,17 @@ static ssize_t show_ppc440spe_devices(st
+ }
+ return size;
+ }
++static DRIVER_ATTR_RO(devices);
+
+-static ssize_t show_ppc440spe_r6enable(struct device_driver *dev, char *buf)
++static ssize_t enable_show(struct device_driver *dev, char *buf)
+ {
+ return snprintf(buf, PAGE_SIZE,
+ "PPC440SP(e) RAID-6 capabilities are %sABLED.\n",
+ ppc440spe_r6_enabled ? "EN" : "DIS");
+ }
+
+-static ssize_t store_ppc440spe_r6enable(struct device_driver *dev,
+- const char *buf, size_t count)
++static ssize_t enable_store(struct device_driver *dev, const char *buf,
++ size_t count)
+ {
+ unsigned long val;
+
+@@ -4357,8 +4358,9 @@ static ssize_t store_ppc440spe_r6enable(
+ }
+ return count;
+ }
++static DRIVER_ATTR_RW(enable);
+
+-static ssize_t show_ppc440spe_r6poly(struct device_driver *dev, char *buf)
++static ssize_t poly_store(struct device_driver *dev, char *buf)
+ {
+ ssize_t size = 0;
+ u32 reg;
+@@ -4377,8 +4379,8 @@ static ssize_t show_ppc440spe_r6poly(str
+ return size;
+ }
+
+-static ssize_t store_ppc440spe_r6poly(struct device_driver *dev,
+- const char *buf, size_t count)
++static ssize_t poly_store(struct device_driver *dev, const char *buf,
++ size_t count)
+ {
+ unsigned long reg, val;
+
+@@ -4404,12 +4406,7 @@ static ssize_t store_ppc440spe_r6poly(st
+
+ return count;
+ }
+-
+-static DRIVER_ATTR(devices, S_IRUGO, show_ppc440spe_devices, NULL);
+-static DRIVER_ATTR(enable, S_IRUGO | S_IWUSR, show_ppc440spe_r6enable,
+- store_ppc440spe_r6enable);
+-static DRIVER_ATTR(poly, S_IRUGO | S_IWUSR, show_ppc440spe_r6poly,
+- store_ppc440spe_r6poly);
++static DRIVER_ATTR_RW(poly);
+
+ /*
+ * Common initialisation for RAID engines; allocate memory for
diff --git a/d15.patch b/d15.patch
new file mode 100644
index 00000000000000..df935a57f83bf8
--- /dev/null
+++ b/d15.patch
@@ -0,0 +1,26 @@
+---
+ drivers/s390/net/ctcm_main.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+
+--- a/drivers/s390/net/ctcm_main.c
++++ b/drivers/s390/net/ctcm_main.c
+@@ -1771,15 +1771,15 @@ static struct ccwgroup_driver ctcm_group
+ .restore = ctcm_pm_resume,
+ };
+
+-static ssize_t ctcm_driver_group_store(struct device_driver *ddrv,
+- const char *buf, size_t count)
++static ssize_t group_store(struct device_driver *ddrv, const char *buf,
++ size_t count)
+ {
+ int err;
+
+ err = ccwgroup_create_dev(ctcm_root_dev, &ctcm_group_driver, 2, buf);
+ return err ? err : count;
+ }
+-static DRIVER_ATTR(group, 0200, NULL, ctcm_driver_group_store);
++static DRIVER_ATTR_WO(group);
+
+ static struct attribute *ctcm_drv_attrs[] = {
+ &driver_attr_group.attr,
diff --git a/d16.patch b/d16.patch
new file mode 100644
index 00000000000000..1fa50d6891fb20
--- /dev/null
+++ b/d16.patch
@@ -0,0 +1,120 @@
+---
+ drivers/xen/xen-pciback/pci_stub.c | 44 ++++++++++++++++---------------------
+ 1 file changed, 20 insertions(+), 24 deletions(-)
+
+
+--- a/drivers/xen/xen-pciback/pci_stub.c
++++ b/drivers/xen/xen-pciback/pci_stub.c
+@@ -1172,8 +1172,8 @@ out:
+ return err;
+ }
+
+-static ssize_t pcistub_slot_add(struct device_driver *drv, const char *buf,
+- size_t count)
++static ssize_t new_slot_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ int domain, bus, slot, func;
+ int err;
+@@ -1189,10 +1189,10 @@ out:
+ err = count;
+ return err;
+ }
+-static DRIVER_ATTR(new_slot, S_IWUSR, NULL, pcistub_slot_add);
++static DRIVER_ATTR_WO(new_slot);
+
+-static ssize_t pcistub_slot_remove(struct device_driver *drv, const char *buf,
+- size_t count)
++static ssize_t remove_slot_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ int domain, bus, slot, func;
+ int err;
+@@ -1208,9 +1208,9 @@ out:
+ err = count;
+ return err;
+ }
+-static DRIVER_ATTR(remove_slot, S_IWUSR, NULL, pcistub_slot_remove);
++static DRIVER_ATTR_WO(remove_slot);
+
+-static ssize_t pcistub_slot_show(struct device_driver *drv, char *buf)
++static ssize_t slots_show(struct device_driver *drv, char *buf)
+ {
+ struct pcistub_device_id *pci_dev_id;
+ size_t count = 0;
+@@ -1231,9 +1231,9 @@ static ssize_t pcistub_slot_show(struct
+
+ return count;
+ }
+-static DRIVER_ATTR(slots, S_IRUSR, pcistub_slot_show, NULL);
++static DRIVER_ATTR_RO(slots);
+
+-static ssize_t pcistub_irq_handler_show(struct device_driver *drv, char *buf)
++static ssize_t irq_handlers_show(struct device_driver *drv, char *buf)
+ {
+ struct pcistub_device *psdev;
+ struct xen_pcibk_dev_data *dev_data;
+@@ -1260,11 +1260,10 @@ static ssize_t pcistub_irq_handler_show(
+ spin_unlock_irqrestore(&pcistub_devices_lock, flags);
+ return count;
+ }
+-static DRIVER_ATTR(irq_handlers, S_IRUSR, pcistub_irq_handler_show, NULL);
++static DRIVER_ATTR_RO(irq_handlers);
+
+-static ssize_t pcistub_irq_handler_switch(struct device_driver *drv,
+- const char *buf,
+- size_t count)
++static ssize_t irq_handler_state_store(struct device_driver *drv,
++ const char *buf, size_t count)
+ {
+ struct pcistub_device *psdev;
+ struct xen_pcibk_dev_data *dev_data;
+@@ -1301,11 +1300,10 @@ out:
+ err = count;
+ return err;
+ }
+-static DRIVER_ATTR(irq_handler_state, S_IWUSR, NULL,
+- pcistub_irq_handler_switch);
++static DRIVER_ATTR_WO(irq_handler_state);
+
+-static ssize_t pcistub_quirk_add(struct device_driver *drv, const char *buf,
+- size_t count)
++static ssize_t quirks_add(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ int domain, bus, slot, func, reg, size, mask;
+ int err;
+@@ -1323,7 +1321,7 @@ out:
+ return err;
+ }
+
+-static ssize_t pcistub_quirk_show(struct device_driver *drv, char *buf)
++static ssize_t quirks_show(struct device_driver *drv, char *buf)
+ {
+ int count = 0;
+ unsigned long flags;
+@@ -1366,11 +1364,10 @@ out:
+
+ return count;
+ }
+-static DRIVER_ATTR(quirks, S_IRUSR | S_IWUSR, pcistub_quirk_show,
+- pcistub_quirk_add);
++static DRIVER_ATTR_RW(quirks);
+
+-static ssize_t permissive_add(struct device_driver *drv, const char *buf,
+- size_t count)
++static ssize_t permissive_store(struct device_driver *drv, const char *buf,
++ size_t count)
+ {
+ int domain, bus, slot, func;
+ int err;
+@@ -1431,8 +1428,7 @@ static ssize_t permissive_show(struct de
+ spin_unlock_irqrestore(&pcistub_devices_lock, flags);
+ return count;
+ }
+-static DRIVER_ATTR(permissive, S_IRUSR | S_IWUSR, permissive_show,
+- permissive_add);
++static DRIVER_ATTR_RW(permissive);
+
+ static void pcistub_exit(void)
+ {
diff --git a/d99.patch b/d99.patch
new file mode 100644
index 00000000000000..b3d1f6cd46f37b
--- /dev/null
+++ b/d99.patch
@@ -0,0 +1,29 @@
+From foo@baz Wed Nov 30 14:34:22 CET 2016
+Date: Wed, 30 Nov 2016 14:34:22 +0100
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Subject: [PATCH] driver core: remove DRIVER_ATTR
+
+DRIVER_ATTR is no longer in use, and driver authors should be using
+DRIVER_ATTR_RW() or DRIVER_ATTR_RO() or DRIVER_ATTR_WO() instead in
+order to always get the permissions correct. So remove it so that no
+one can use it anymore.
+
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/device.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -303,8 +303,6 @@ struct driver_attribute {
+ size_t count);
+ };
+
+-#define DRIVER_ATTR(_name, _mode, _show, _store) \
+- struct driver_attribute driver_attr_##_name = __ATTR(_name, _mode, _show, _store)
+ #define DRIVER_ATTR_RW(_name) \
+ struct driver_attribute driver_attr_##_name = __ATTR_RW(_name)
+ #define DRIVER_ATTR_RO(_name) \
diff --git a/pci_groups.patch b/pci_groups.patch
new file mode 100644
index 00000000000000..afd7f8aaaaeb88
--- /dev/null
+++ b/pci_groups.patch
@@ -0,0 +1,131 @@
+---
+ drivers/infiniband/hw/nes/nes.c | 69 +++++++++++++---------------------------
+ drivers/pci/pci-driver.c | 1
+ include/linux/pci.h | 1
+ 3 files changed, 26 insertions(+), 45 deletions(-)
+
+--- a/drivers/infiniband/hw/nes/nes.c
++++ b/drivers/infiniband/hw/nes/nes.c
+@@ -810,13 +810,6 @@ static void nes_remove(struct pci_dev *p
+ }
+
+
+-static struct pci_driver nes_pci_driver = {
+- .name = DRV_NAME,
+- .id_table = nes_pci_table,
+- .probe = nes_probe,
+- .remove = nes_remove,
+-};
+-
+ static ssize_t adapter_show(struct device_driver *ddp, char *buf)
+ {
+ unsigned int devfn = 0xffffffff;
+@@ -1158,35 +1151,29 @@ static DRIVER_ATTR_RW(idx_addr);
+ static DRIVER_ATTR_RW(idx_data);
+ static DRIVER_ATTR_RW(wqm_quanta);
+
+-static int nes_create_driver_sysfs(struct pci_driver *drv)
+-{
+- int error;
+- error = driver_create_file(&drv->driver, &driver_attr_adapter);
+- error |= driver_create_file(&drv->driver, &driver_attr_eeprom_cmd);
+- error |= driver_create_file(&drv->driver, &driver_attr_eeprom_data);
+- error |= driver_create_file(&drv->driver, &driver_attr_flash_cmd);
+- error |= driver_create_file(&drv->driver, &driver_attr_flash_data);
+- error |= driver_create_file(&drv->driver, &driver_attr_nonidx_addr);
+- error |= driver_create_file(&drv->driver, &driver_attr_nonidx_data);
+- error |= driver_create_file(&drv->driver, &driver_attr_idx_addr);
+- error |= driver_create_file(&drv->driver, &driver_attr_idx_data);
+- error |= driver_create_file(&drv->driver, &driver_attr_wqm_quanta);
+- return error;
+-}
+-
+-static void nes_remove_driver_sysfs(struct pci_driver *drv)
+-{
+- driver_remove_file(&drv->driver, &driver_attr_adapter);
+- driver_remove_file(&drv->driver, &driver_attr_eeprom_cmd);
+- driver_remove_file(&drv->driver, &driver_attr_eeprom_data);
+- driver_remove_file(&drv->driver, &driver_attr_flash_cmd);
+- driver_remove_file(&drv->driver, &driver_attr_flash_data);
+- driver_remove_file(&drv->driver, &driver_attr_nonidx_addr);
+- driver_remove_file(&drv->driver, &driver_attr_nonidx_data);
+- driver_remove_file(&drv->driver, &driver_attr_idx_addr);
+- driver_remove_file(&drv->driver, &driver_attr_idx_data);
+- driver_remove_file(&drv->driver, &driver_attr_wqm_quanta);
+-}
++static struct attribute *nes_attrs[] = {
++ &driver_attr_adapter,
++ &driver_attr_eeprom_cmd,
++ &driver_attr_eeprom_data,
++ &driver_attr_flash_cmd,
++ &driver_attr_flash_data,
++ &driver_attr_nonidx_addr,
++ &driver_attr_nonidx_data,
++ &driver_attr_idx_addr,
++ &driver_attr_idx_data,
++ &driver_attr_wqm_quanta,
++ NULL,
++};
++ATTRIBUTE_GROUPS(nes);
++
++static struct pci_driver nes_pci_driver = {
++ .name = DRV_NAME,
++ .id_table = nes_pci_table,
++ .probe = nes_probe,
++ .remove = nes_remove,
++ .groups = nes_groups,
++};
++
+
+ /**
+ * nes_init_module - module initialization entry point
+@@ -1194,20 +1181,13 @@ static void nes_remove_driver_sysfs(stru
+ static int __init nes_init_module(void)
+ {
+ int retval;
+- int retval1;
+
+ retval = nes_cm_start();
+ if (retval) {
+ printk(KERN_ERR PFX "Unable to start NetEffect iWARP CM.\n");
+ return retval;
+ }
+- retval = pci_register_driver(&nes_pci_driver);
+- if (retval >= 0) {
+- retval1 = nes_create_driver_sysfs(&nes_pci_driver);
+- if (retval1 < 0)
+- printk(KERN_ERR PFX "Unable to create NetEffect sys files.\n");
+- }
+- return retval;
++ return pci_register_driver(&nes_pci_driver);
+ }
+
+
+@@ -1217,7 +1197,6 @@ static int __init nes_init_module(void)
+ static void __exit nes_exit_module(void)
+ {
+ nes_cm_stop();
+- nes_remove_driver_sysfs(&nes_pci_driver);
+
+ pci_unregister_driver(&nes_pci_driver);
+ }
+--- a/drivers/pci/pci-driver.c
++++ b/drivers/pci/pci-driver.c
+@@ -1289,6 +1289,7 @@ int __pci_register_driver(struct pci_dri
+ drv->driver.bus = &pci_bus_type;
+ drv->driver.owner = owner;
+ drv->driver.mod_name = mod_name;
++ drv->driver.groups = drv->groups;
+
+ spin_lock_init(&drv->dynids.lock);
+ INIT_LIST_HEAD(&drv->dynids.list);
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -689,6 +689,7 @@ struct pci_driver {
+ void (*shutdown) (struct pci_dev *dev);
+ int (*sriov_configure) (struct pci_dev *dev, int num_vfs); /* PF pdev */
+ const struct pci_error_handlers *err_handler;
++ const struct attribute_group **groups;
+ struct device_driver driver;
+ struct pci_dynids dynids;
+ };
diff --git a/series b/series
index f6bf25963fe766..a0714106ccb313 100644
--- a/series
+++ b/series
@@ -74,6 +74,19 @@ d02.patch
d03.patch
d04.patch
d05.patch
+d06.patch
+d07.patch
+d08.patch
+d09.patch
+d10.patch
+d11.patch
+d12.patch
+d13.patch
+d14.patch
+d15.patch
+d16.patch
+d99.patch
+pci_groups.patch
qlcnic_sysfs.patch
#