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))
 
        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;
        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;
 
 /*
  * 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;
 
        .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;
 
 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;
 
 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;
 
 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;
 
 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;
 
 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;
 
 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;
 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;
 
 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;
 
 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;
 
 }
 
 #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);                  \
 }                                                                      \
 /*
  * 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;
 /* 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;
 
        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);
 }
 
 #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);
 }
 
        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;
 }
 
        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;
 }
 
 
 __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;
 }
 
 static ssize_t show_current_driver(struct sysdev_class *class,
+                                  struct sysdev_class_attribute *attr,
                                   char *buf)
 {
        ssize_t ret;
 }
 
 static ssize_t show_current_governor(struct sysdev_class *class,
+                                    struct sysdev_class_attribute *attr,
                                     char *buf)
 {
        ssize_t ret;
 }
 
 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];
 
 
 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)           \
 
        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)
 {
        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;
 
 
 #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);
 
 #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);