diff options
129 files changed, 3879 insertions, 2322 deletions
diff --git a/Documentation/ABI/testing/sysfs-ibft b/Documentation/ABI/testing/sysfs-ibft new file mode 100644 index 000000000000..c2b7d1154bec --- /dev/null +++ b/Documentation/ABI/testing/sysfs-ibft | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | What: /sys/firmware/ibft/initiator | ||
| 2 | Date: November 2007 | ||
| 3 | Contact: Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 4 | Description: The /sys/firmware/ibft/initiator directory will contain | ||
| 5 | files that expose the iSCSI Boot Firmware Table initiator data. | ||
| 6 | Usually this contains the Initiator name. | ||
| 7 | |||
| 8 | What: /sys/firmware/ibft/targetX | ||
| 9 | Date: November 2007 | ||
| 10 | Contact: Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 11 | Description: The /sys/firmware/ibft/targetX directory will contain | ||
| 12 | files that expose the iSCSI Boot Firmware Table target data. | ||
| 13 | Usually this contains the target's IP address, boot LUN, | ||
| 14 | target name, and what NIC it is associated with. It can also | ||
| 15 | contain the CHAP name (and password), the reverse CHAP | ||
| 16 | name (and password) | ||
| 17 | |||
| 18 | What: /sys/firmware/ibft/ethernetX | ||
| 19 | Date: November 2007 | ||
| 20 | Contact: Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 21 | Description: The /sys/firmware/ibft/ethernetX directory will contain | ||
| 22 | files that expose the iSCSI Boot Firmware Table NIC data. | ||
| 23 | This can this can the IP address, MAC, and gateway of the NIC. | ||
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index dc0f30c3e571..488dd4a4945b 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
| @@ -297,11 +297,6 @@ X!Earch/x86/kernel/mca_32.c | |||
| 297 | !Ikernel/acct.c | 297 | !Ikernel/acct.c |
| 298 | </chapter> | 298 | </chapter> |
| 299 | 299 | ||
| 300 | <chapter id="pmfuncs"> | ||
| 301 | <title>Power Management</title> | ||
| 302 | !Ekernel/power/pm.c | ||
| 303 | </chapter> | ||
| 304 | |||
| 305 | <chapter id="devdrivers"> | 300 | <chapter id="devdrivers"> |
| 306 | <title>Device drivers infrastructure</title> | 301 | <title>Device drivers infrastructure</title> |
| 307 | <sect1><title>Device Drivers Base</title> | 302 | <sect1><title>Device Drivers Base</title> |
diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt index 4598ef7b622b..7f27b8f840d0 100644 --- a/Documentation/filesystems/sysfs.txt +++ b/Documentation/filesystems/sysfs.txt | |||
| @@ -176,8 +176,10 @@ implementations: | |||
| 176 | Recall that an attribute should only be exporting one value, or an | 176 | Recall that an attribute should only be exporting one value, or an |
| 177 | array of similar values, so this shouldn't be that expensive. | 177 | array of similar values, so this shouldn't be that expensive. |
| 178 | 178 | ||
| 179 | This allows userspace to do partial reads and seeks arbitrarily over | 179 | This allows userspace to do partial reads and forward seeks |
| 180 | the entire file at will. | 180 | arbitrarily over the entire file at will. If userspace seeks back to |
| 181 | zero or does a pread(2) with an offset of '0' the show() method will | ||
| 182 | be called again, rearmed, to fill the buffer. | ||
| 181 | 183 | ||
| 182 | - On write(2), sysfs expects the entire buffer to be passed during the | 184 | - On write(2), sysfs expects the entire buffer to be passed during the |
| 183 | first write. Sysfs then passes the entire buffer to the store() | 185 | first write. Sysfs then passes the entire buffer to the store() |
| @@ -192,6 +194,9 @@ implementations: | |||
| 192 | 194 | ||
| 193 | Other notes: | 195 | Other notes: |
| 194 | 196 | ||
| 197 | - Writing causes the show() method to be rearmed regardless of current | ||
| 198 | file position. | ||
| 199 | |||
| 195 | - The buffer will always be PAGE_SIZE bytes in length. On i386, this | 200 | - The buffer will always be PAGE_SIZE bytes in length. On i386, this |
| 196 | is 4096. | 201 | is 4096. |
| 197 | 202 | ||
diff --git a/Documentation/power/devices.txt b/Documentation/power/devices.txt index 461e4f1dbec4..421e7d00ffd0 100644 --- a/Documentation/power/devices.txt +++ b/Documentation/power/devices.txt | |||
| @@ -196,6 +196,11 @@ its parent; and can't be removed or suspended after that parent. | |||
| 196 | 196 | ||
| 197 | The policy is that the device tree should match hardware bus topology. | 197 | The policy is that the device tree should match hardware bus topology. |
| 198 | (Or at least the control bus, for devices which use multiple busses.) | 198 | (Or at least the control bus, for devices which use multiple busses.) |
| 199 | In particular, this means that a device registration may fail if the parent of | ||
| 200 | the device is suspending (ie. has been chosen by the PM core as the next | ||
| 201 | device to suspend) or has already suspended, as well as after all of the other | ||
| 202 | devices have been suspended. Device drivers must be prepared to cope with such | ||
| 203 | situations. | ||
| 199 | 204 | ||
| 200 | 205 | ||
| 201 | Suspending Devices | 206 | Suspending Devices |
diff --git a/MAINTAINERS b/MAINTAINERS index 2b67bb057180..a46ec689f0ac 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -3610,6 +3610,11 @@ M: mhoffman@lightlink.com | |||
| 3610 | L: lm-sensors@lm-sensors.org | 3610 | L: lm-sensors@lm-sensors.org |
| 3611 | S: Maintained | 3611 | S: Maintained |
| 3612 | 3612 | ||
| 3613 | SMX UIO Interface | ||
| 3614 | P: Ben Nizette | ||
| 3615 | M: bn@niasdigital.com | ||
| 3616 | S: Maintained | ||
| 3617 | |||
| 3613 | SOFTWARE RAID (Multiple Disks) SUPPORT | 3618 | SOFTWARE RAID (Multiple Disks) SUPPORT |
| 3614 | P: Ingo Molnar | 3619 | P: Ingo Molnar |
| 3615 | M: mingo@redhat.com | 3620 | M: mingo@redhat.com |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a34cc03e727f..d8d253285a94 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -1192,6 +1192,8 @@ source "drivers/dma/Kconfig" | |||
| 1192 | 1192 | ||
| 1193 | source "drivers/dca/Kconfig" | 1193 | source "drivers/dca/Kconfig" |
| 1194 | 1194 | ||
| 1195 | source "drivers/uio/Kconfig" | ||
| 1196 | |||
| 1195 | endmenu | 1197 | endmenu |
| 1196 | 1198 | ||
| 1197 | source "fs/Kconfig" | 1199 | source "fs/Kconfig" |
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index 288e7a6598ac..daff52a62248 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c | |||
| @@ -154,12 +154,10 @@ static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb, | |||
| 154 | err = cpuid_device_create(cpu); | 154 | err = cpuid_device_create(cpu); |
| 155 | break; | 155 | break; |
| 156 | case CPU_UP_CANCELED: | 156 | case CPU_UP_CANCELED: |
| 157 | case CPU_UP_CANCELED_FROZEN: | ||
| 157 | case CPU_DEAD: | 158 | case CPU_DEAD: |
| 158 | cpuid_device_destroy(cpu); | 159 | cpuid_device_destroy(cpu); |
| 159 | break; | 160 | break; |
| 160 | case CPU_UP_CANCELED_FROZEN: | ||
| 161 | destroy_suspended_device(cpuid_class, MKDEV(CPUID_MAJOR, cpu)); | ||
| 162 | break; | ||
| 163 | } | 161 | } |
| 164 | return err ? NOTIFY_BAD : NOTIFY_OK; | 162 | return err ? NOTIFY_BAD : NOTIFY_OK; |
| 165 | } | 163 | } |
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index 4dfb40530057..1f3abe048e93 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c | |||
| @@ -162,12 +162,10 @@ static int __cpuinit msr_class_cpu_callback(struct notifier_block *nfb, | |||
| 162 | err = msr_device_create(cpu); | 162 | err = msr_device_create(cpu); |
| 163 | break; | 163 | break; |
| 164 | case CPU_UP_CANCELED: | 164 | case CPU_UP_CANCELED: |
| 165 | case CPU_UP_CANCELED_FROZEN: | ||
| 165 | case CPU_DEAD: | 166 | case CPU_DEAD: |
| 166 | msr_device_destroy(cpu); | 167 | msr_device_destroy(cpu); |
| 167 | break; | 168 | break; |
| 168 | case CPU_UP_CANCELED_FROZEN: | ||
| 169 | destroy_suspended_device(msr_class, MKDEV(MSR_MAJOR, cpu)); | ||
| 170 | break; | ||
| 171 | } | 169 | } |
| 172 | return err ? NOTIFY_BAD : NOTIFY_OK; | 170 | return err ? NOTIFY_BAD : NOTIFY_OK; |
| 173 | } | 171 | } |
diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c index 1c4799e68718..78828b0f604f 100644 --- a/arch/x86/kernel/setup_32.c +++ b/arch/x86/kernel/setup_32.c | |||
| @@ -39,6 +39,7 @@ | |||
| 39 | #include <linux/efi.h> | 39 | #include <linux/efi.h> |
| 40 | #include <linux/init.h> | 40 | #include <linux/init.h> |
| 41 | #include <linux/edd.h> | 41 | #include <linux/edd.h> |
| 42 | #include <linux/iscsi_ibft.h> | ||
| 42 | #include <linux/nodemask.h> | 43 | #include <linux/nodemask.h> |
| 43 | #include <linux/kexec.h> | 44 | #include <linux/kexec.h> |
| 44 | #include <linux/crash_dump.h> | 45 | #include <linux/crash_dump.h> |
| @@ -689,6 +690,8 @@ void __init setup_bootmem_allocator(void) | |||
| 689 | #endif | 690 | #endif |
| 690 | numa_kva_reserve(); | 691 | numa_kva_reserve(); |
| 691 | reserve_crashkernel(); | 692 | reserve_crashkernel(); |
| 693 | |||
| 694 | reserve_ibft_region(); | ||
| 692 | } | 695 | } |
| 693 | 696 | ||
| 694 | /* | 697 | /* |
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c index 6b8e11f0c15d..c2ec3dcb6b99 100644 --- a/arch/x86/kernel/setup_64.c +++ b/arch/x86/kernel/setup_64.c | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #include <linux/acpi.h> | 33 | #include <linux/acpi.h> |
| 34 | #include <linux/kallsyms.h> | 34 | #include <linux/kallsyms.h> |
| 35 | #include <linux/edd.h> | 35 | #include <linux/edd.h> |
| 36 | #include <linux/iscsi_ibft.h> | ||
| 36 | #include <linux/mmzone.h> | 37 | #include <linux/mmzone.h> |
| 37 | #include <linux/kexec.h> | 38 | #include <linux/kexec.h> |
| 38 | #include <linux/cpufreq.h> | 39 | #include <linux/cpufreq.h> |
| @@ -439,6 +440,9 @@ void __init setup_arch(char **cmdline_p) | |||
| 439 | } | 440 | } |
| 440 | #endif | 441 | #endif |
| 441 | reserve_crashkernel(); | 442 | reserve_crashkernel(); |
| 443 | |||
| 444 | reserve_ibft_region(); | ||
| 445 | |||
| 442 | paging_init(); | 446 | paging_init(); |
| 443 | map_vsyscall(); | 447 | map_vsyscall(); |
| 444 | 448 | ||
diff --git a/block/bsg.c b/block/bsg.c index 302ac1f5af39..f51172ed27c2 100644 --- a/block/bsg.c +++ b/block/bsg.c | |||
| @@ -758,7 +758,7 @@ static struct bsg_device *bsg_add_device(struct inode *inode, | |||
| 758 | mutex_lock(&bsg_mutex); | 758 | mutex_lock(&bsg_mutex); |
| 759 | hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode))); | 759 | hlist_add_head(&bd->dev_list, bsg_dev_idx_hash(iminor(inode))); |
| 760 | 760 | ||
| 761 | strncpy(bd->name, rq->bsg_dev.class_dev->class_id, sizeof(bd->name) - 1); | 761 | strncpy(bd->name, rq->bsg_dev.class_dev->bus_id, sizeof(bd->name) - 1); |
| 762 | dprintk("bound to <%s>, max queue %d\n", | 762 | dprintk("bound to <%s>, max queue %d\n", |
| 763 | format_dev_t(buf, inode->i_rdev), bd->max_queue); | 763 | format_dev_t(buf, inode->i_rdev), bd->max_queue); |
| 764 | 764 | ||
| @@ -946,7 +946,7 @@ void bsg_unregister_queue(struct request_queue *q) | |||
| 946 | mutex_lock(&bsg_mutex); | 946 | mutex_lock(&bsg_mutex); |
| 947 | idr_remove(&bsg_minor_idr, bcd->minor); | 947 | idr_remove(&bsg_minor_idr, bcd->minor); |
| 948 | sysfs_remove_link(&q->kobj, "bsg"); | 948 | sysfs_remove_link(&q->kobj, "bsg"); |
| 949 | class_device_unregister(bcd->class_dev); | 949 | device_unregister(bcd->class_dev); |
| 950 | put_device(bcd->dev); | 950 | put_device(bcd->dev); |
| 951 | bcd->class_dev = NULL; | 951 | bcd->class_dev = NULL; |
| 952 | mutex_unlock(&bsg_mutex); | 952 | mutex_unlock(&bsg_mutex); |
| @@ -959,7 +959,7 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev, | |||
| 959 | struct bsg_class_device *bcd; | 959 | struct bsg_class_device *bcd; |
| 960 | dev_t dev; | 960 | dev_t dev; |
| 961 | int ret, minor; | 961 | int ret, minor; |
| 962 | struct class_device *class_dev = NULL; | 962 | struct device *class_dev = NULL; |
| 963 | const char *devname; | 963 | const char *devname; |
| 964 | 964 | ||
| 965 | if (name) | 965 | if (name) |
| @@ -998,8 +998,7 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev, | |||
| 998 | bcd->queue = q; | 998 | bcd->queue = q; |
| 999 | bcd->dev = get_device(gdev); | 999 | bcd->dev = get_device(gdev); |
| 1000 | dev = MKDEV(bsg_major, bcd->minor); | 1000 | dev = MKDEV(bsg_major, bcd->minor); |
| 1001 | class_dev = class_device_create(bsg_class, NULL, dev, gdev, "%s", | 1001 | class_dev = device_create(bsg_class, gdev, dev, "%s", devname); |
| 1002 | devname); | ||
| 1003 | if (IS_ERR(class_dev)) { | 1002 | if (IS_ERR(class_dev)) { |
| 1004 | ret = PTR_ERR(class_dev); | 1003 | ret = PTR_ERR(class_dev); |
| 1005 | goto put_dev; | 1004 | goto put_dev; |
| @@ -1016,7 +1015,7 @@ int bsg_register_queue(struct request_queue *q, struct device *gdev, | |||
| 1016 | return 0; | 1015 | return 0; |
| 1017 | 1016 | ||
| 1018 | unregister_class_dev: | 1017 | unregister_class_dev: |
| 1019 | class_device_unregister(class_dev); | 1018 | device_unregister(class_dev); |
| 1020 | put_dev: | 1019 | put_dev: |
| 1021 | put_device(gdev); | 1020 | put_device(gdev); |
| 1022 | remove_idr: | 1021 | remove_idr: |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 739ba3f222e8..986e3324e302 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -273,8 +273,8 @@ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg); | |||
| 273 | static int ahci_pci_device_resume(struct pci_dev *pdev); | 273 | static int ahci_pci_device_resume(struct pci_dev *pdev); |
| 274 | #endif | 274 | #endif |
| 275 | 275 | ||
| 276 | static struct class_device_attribute *ahci_shost_attrs[] = { | 276 | static struct device_attribute *ahci_shost_attrs[] = { |
| 277 | &class_device_attr_link_power_management_policy, | 277 | &dev_attr_link_power_management_policy, |
| 278 | NULL | 278 | NULL |
| 279 | }; | 279 | }; |
| 280 | 280 | ||
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index f3c69a8c1103..a34f32442edf 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
| @@ -131,10 +131,11 @@ static const char *ata_scsi_lpm_get(enum link_pm policy) | |||
| 131 | return NULL; | 131 | return NULL; |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | static ssize_t ata_scsi_lpm_put(struct class_device *class_dev, | 134 | static ssize_t ata_scsi_lpm_put(struct device *dev, |
| 135 | const char *buf, size_t count) | 135 | struct device_attribute *attr, |
| 136 | const char *buf, size_t count) | ||
| 136 | { | 137 | { |
| 137 | struct Scsi_Host *shost = class_to_shost(class_dev); | 138 | struct Scsi_Host *shost = class_to_shost(dev); |
| 138 | struct ata_port *ap = ata_shost_to_port(shost); | 139 | struct ata_port *ap = ata_shost_to_port(shost); |
| 139 | enum link_pm policy = 0; | 140 | enum link_pm policy = 0; |
| 140 | int i; | 141 | int i; |
| @@ -162,9 +163,9 @@ static ssize_t ata_scsi_lpm_put(struct class_device *class_dev, | |||
| 162 | } | 163 | } |
| 163 | 164 | ||
| 164 | static ssize_t | 165 | static ssize_t |
| 165 | ata_scsi_lpm_show(struct class_device *class_dev, char *buf) | 166 | ata_scsi_lpm_show(struct device *dev, struct device_attribute *attr, char *buf) |
| 166 | { | 167 | { |
| 167 | struct Scsi_Host *shost = class_to_shost(class_dev); | 168 | struct Scsi_Host *shost = class_to_shost(dev); |
| 168 | struct ata_port *ap = ata_shost_to_port(shost); | 169 | struct ata_port *ap = ata_shost_to_port(shost); |
| 169 | const char *policy = | 170 | const char *policy = |
| 170 | ata_scsi_lpm_get(ap->pm_policy); | 171 | ata_scsi_lpm_get(ap->pm_policy); |
| @@ -174,9 +175,9 @@ ata_scsi_lpm_show(struct class_device *class_dev, char *buf) | |||
| 174 | 175 | ||
| 175 | return snprintf(buf, 23, "%s\n", policy); | 176 | return snprintf(buf, 23, "%s\n", policy); |
| 176 | } | 177 | } |
| 177 | CLASS_DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR, | 178 | DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR, |
| 178 | ata_scsi_lpm_show, ata_scsi_lpm_put); | 179 | ata_scsi_lpm_show, ata_scsi_lpm_put); |
| 179 | EXPORT_SYMBOL_GPL(class_device_attr_link_power_management_policy); | 180 | EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy); |
| 180 | 181 | ||
| 181 | static void ata_scsi_invalid_field(struct scsi_cmnd *cmd, | 182 | static void ata_scsi_invalid_field(struct scsi_cmnd *cmd, |
| 182 | void (*done)(struct scsi_cmnd *)) | 183 | void (*done)(struct scsi_cmnd *)) |
diff --git a/drivers/base/attribute_container.c b/drivers/base/attribute_container.c index 3b43e8a9f87e..f57652db0a2a 100644 --- a/drivers/base/attribute_container.c +++ b/drivers/base/attribute_container.c | |||
| @@ -27,21 +27,21 @@ | |||
| 27 | struct internal_container { | 27 | struct internal_container { |
| 28 | struct klist_node node; | 28 | struct klist_node node; |
| 29 | struct attribute_container *cont; | 29 | struct attribute_container *cont; |
| 30 | struct class_device classdev; | 30 | struct device classdev; |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | static void internal_container_klist_get(struct klist_node *n) | 33 | static void internal_container_klist_get(struct klist_node *n) |
| 34 | { | 34 | { |
| 35 | struct internal_container *ic = | 35 | struct internal_container *ic = |
| 36 | container_of(n, struct internal_container, node); | 36 | container_of(n, struct internal_container, node); |
| 37 | class_device_get(&ic->classdev); | 37 | get_device(&ic->classdev); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | static void internal_container_klist_put(struct klist_node *n) | 40 | static void internal_container_klist_put(struct klist_node *n) |
| 41 | { | 41 | { |
| 42 | struct internal_container *ic = | 42 | struct internal_container *ic = |
| 43 | container_of(n, struct internal_container, node); | 43 | container_of(n, struct internal_container, node); |
| 44 | class_device_put(&ic->classdev); | 44 | put_device(&ic->classdev); |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | 47 | ||
| @@ -53,7 +53,7 @@ static void internal_container_klist_put(struct klist_node *n) | |||
| 53 | * Returns the container associated with this classdev. | 53 | * Returns the container associated with this classdev. |
| 54 | */ | 54 | */ |
| 55 | struct attribute_container * | 55 | struct attribute_container * |
| 56 | attribute_container_classdev_to_container(struct class_device *classdev) | 56 | attribute_container_classdev_to_container(struct device *classdev) |
| 57 | { | 57 | { |
| 58 | struct internal_container *ic = | 58 | struct internal_container *ic = |
| 59 | container_of(classdev, struct internal_container, classdev); | 59 | container_of(classdev, struct internal_container, classdev); |
| @@ -110,11 +110,11 @@ attribute_container_unregister(struct attribute_container *cont) | |||
| 110 | EXPORT_SYMBOL_GPL(attribute_container_unregister); | 110 | EXPORT_SYMBOL_GPL(attribute_container_unregister); |
| 111 | 111 | ||
| 112 | /* private function used as class release */ | 112 | /* private function used as class release */ |
| 113 | static void attribute_container_release(struct class_device *classdev) | 113 | static void attribute_container_release(struct device *classdev) |
| 114 | { | 114 | { |
| 115 | struct internal_container *ic | 115 | struct internal_container *ic |
| 116 | = container_of(classdev, struct internal_container, classdev); | 116 | = container_of(classdev, struct internal_container, classdev); |
| 117 | struct device *dev = classdev->dev; | 117 | struct device *dev = classdev->parent; |
| 118 | 118 | ||
| 119 | kfree(ic); | 119 | kfree(ic); |
| 120 | put_device(dev); | 120 | put_device(dev); |
| @@ -129,12 +129,12 @@ static void attribute_container_release(struct class_device *classdev) | |||
| 129 | * This function allocates storage for the class device(s) to be | 129 | * This function allocates storage for the class device(s) to be |
| 130 | * attached to dev (one for each matching attribute_container). If no | 130 | * attached to dev (one for each matching attribute_container). If no |
| 131 | * fn is provided, the code will simply register the class device via | 131 | * fn is provided, the code will simply register the class device via |
| 132 | * class_device_add. If a function is provided, it is expected to add | 132 | * device_add. If a function is provided, it is expected to add |
| 133 | * the class device at the appropriate time. One of the things that | 133 | * the class device at the appropriate time. One of the things that |
| 134 | * might be necessary is to allocate and initialise the classdev and | 134 | * might be necessary is to allocate and initialise the classdev and |
| 135 | * then add it a later time. To do this, call this routine for | 135 | * then add it a later time. To do this, call this routine for |
| 136 | * allocation and initialisation and then use | 136 | * allocation and initialisation and then use |
| 137 | * attribute_container_device_trigger() to call class_device_add() on | 137 | * attribute_container_device_trigger() to call device_add() on |
| 138 | * it. Note: after this, the class device contains a reference to dev | 138 | * it. Note: after this, the class device contains a reference to dev |
| 139 | * which is not relinquished until the release of the classdev. | 139 | * which is not relinquished until the release of the classdev. |
| 140 | */ | 140 | */ |
| @@ -142,7 +142,7 @@ void | |||
| 142 | attribute_container_add_device(struct device *dev, | 142 | attribute_container_add_device(struct device *dev, |
| 143 | int (*fn)(struct attribute_container *, | 143 | int (*fn)(struct attribute_container *, |
| 144 | struct device *, | 144 | struct device *, |
| 145 | struct class_device *)) | 145 | struct device *)) |
| 146 | { | 146 | { |
| 147 | struct attribute_container *cont; | 147 | struct attribute_container *cont; |
| 148 | 148 | ||
| @@ -163,11 +163,11 @@ attribute_container_add_device(struct device *dev, | |||
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | ic->cont = cont; | 165 | ic->cont = cont; |
| 166 | class_device_initialize(&ic->classdev); | 166 | device_initialize(&ic->classdev); |
| 167 | ic->classdev.dev = get_device(dev); | 167 | ic->classdev.parent = get_device(dev); |
| 168 | ic->classdev.class = cont->class; | 168 | ic->classdev.class = cont->class; |
| 169 | cont->class->release = attribute_container_release; | 169 | cont->class->dev_release = attribute_container_release; |
| 170 | strcpy(ic->classdev.class_id, dev->bus_id); | 170 | strcpy(ic->classdev.bus_id, dev->bus_id); |
| 171 | if (fn) | 171 | if (fn) |
| 172 | fn(cont, dev, &ic->classdev); | 172 | fn(cont, dev, &ic->classdev); |
| 173 | else | 173 | else |
| @@ -195,20 +195,19 @@ attribute_container_add_device(struct device *dev, | |||
| 195 | * @fn: A function to call to remove the device | 195 | * @fn: A function to call to remove the device |
| 196 | * | 196 | * |
| 197 | * This routine triggers device removal. If fn is NULL, then it is | 197 | * This routine triggers device removal. If fn is NULL, then it is |
| 198 | * simply done via class_device_unregister (note that if something | 198 | * simply done via device_unregister (note that if something |
| 199 | * still has a reference to the classdev, then the memory occupied | 199 | * still has a reference to the classdev, then the memory occupied |
| 200 | * will not be freed until the classdev is released). If you want a | 200 | * will not be freed until the classdev is released). If you want a |
| 201 | * two phase release: remove from visibility and then delete the | 201 | * two phase release: remove from visibility and then delete the |
| 202 | * device, then you should use this routine with a fn that calls | 202 | * device, then you should use this routine with a fn that calls |
| 203 | * class_device_del() and then use | 203 | * device_del() and then use attribute_container_device_trigger() |
| 204 | * attribute_container_device_trigger() to do the final put on the | 204 | * to do the final put on the classdev. |
| 205 | * classdev. | ||
| 206 | */ | 205 | */ |
| 207 | void | 206 | void |
| 208 | attribute_container_remove_device(struct device *dev, | 207 | attribute_container_remove_device(struct device *dev, |
| 209 | void (*fn)(struct attribute_container *, | 208 | void (*fn)(struct attribute_container *, |
| 210 | struct device *, | 209 | struct device *, |
| 211 | struct class_device *)) | 210 | struct device *)) |
| 212 | { | 211 | { |
| 213 | struct attribute_container *cont; | 212 | struct attribute_container *cont; |
| 214 | 213 | ||
| @@ -224,14 +223,14 @@ attribute_container_remove_device(struct device *dev, | |||
| 224 | continue; | 223 | continue; |
| 225 | 224 | ||
| 226 | klist_for_each_entry(ic, &cont->containers, node, &iter) { | 225 | klist_for_each_entry(ic, &cont->containers, node, &iter) { |
| 227 | if (dev != ic->classdev.dev) | 226 | if (dev != ic->classdev.parent) |
| 228 | continue; | 227 | continue; |
| 229 | klist_del(&ic->node); | 228 | klist_del(&ic->node); |
| 230 | if (fn) | 229 | if (fn) |
| 231 | fn(cont, dev, &ic->classdev); | 230 | fn(cont, dev, &ic->classdev); |
| 232 | else { | 231 | else { |
| 233 | attribute_container_remove_attrs(&ic->classdev); | 232 | attribute_container_remove_attrs(&ic->classdev); |
| 234 | class_device_unregister(&ic->classdev); | 233 | device_unregister(&ic->classdev); |
| 235 | } | 234 | } |
| 236 | } | 235 | } |
| 237 | } | 236 | } |
| @@ -252,7 +251,7 @@ void | |||
| 252 | attribute_container_device_trigger(struct device *dev, | 251 | attribute_container_device_trigger(struct device *dev, |
| 253 | int (*fn)(struct attribute_container *, | 252 | int (*fn)(struct attribute_container *, |
| 254 | struct device *, | 253 | struct device *, |
| 255 | struct class_device *)) | 254 | struct device *)) |
| 256 | { | 255 | { |
| 257 | struct attribute_container *cont; | 256 | struct attribute_container *cont; |
| 258 | 257 | ||
| @@ -270,7 +269,7 @@ attribute_container_device_trigger(struct device *dev, | |||
| 270 | } | 269 | } |
| 271 | 270 | ||
| 272 | klist_for_each_entry(ic, &cont->containers, node, &iter) { | 271 | klist_for_each_entry(ic, &cont->containers, node, &iter) { |
| 273 | if (dev == ic->classdev.dev) | 272 | if (dev == ic->classdev.parent) |
| 274 | fn(cont, dev, &ic->classdev); | 273 | fn(cont, dev, &ic->classdev); |
| 275 | } | 274 | } |
| 276 | } | 275 | } |
| @@ -313,11 +312,11 @@ attribute_container_trigger(struct device *dev, | |||
| 313 | * attributes listed in the container | 312 | * attributes listed in the container |
| 314 | */ | 313 | */ |
| 315 | int | 314 | int |
| 316 | attribute_container_add_attrs(struct class_device *classdev) | 315 | attribute_container_add_attrs(struct device *classdev) |
| 317 | { | 316 | { |
| 318 | struct attribute_container *cont = | 317 | struct attribute_container *cont = |
| 319 | attribute_container_classdev_to_container(classdev); | 318 | attribute_container_classdev_to_container(classdev); |
| 320 | struct class_device_attribute **attrs = cont->attrs; | 319 | struct device_attribute **attrs = cont->attrs; |
| 321 | int i, error; | 320 | int i, error; |
| 322 | 321 | ||
| 323 | BUG_ON(attrs && cont->grp); | 322 | BUG_ON(attrs && cont->grp); |
| @@ -329,7 +328,7 @@ attribute_container_add_attrs(struct class_device *classdev) | |||
| 329 | return sysfs_create_group(&classdev->kobj, cont->grp); | 328 | return sysfs_create_group(&classdev->kobj, cont->grp); |
| 330 | 329 | ||
| 331 | for (i = 0; attrs[i]; i++) { | 330 | for (i = 0; attrs[i]; i++) { |
| 332 | error = class_device_create_file(classdev, attrs[i]); | 331 | error = device_create_file(classdev, attrs[i]); |
| 333 | if (error) | 332 | if (error) |
| 334 | return error; | 333 | return error; |
| 335 | } | 334 | } |
| @@ -338,18 +337,18 @@ attribute_container_add_attrs(struct class_device *classdev) | |||
| 338 | } | 337 | } |
| 339 | 338 | ||
| 340 | /** | 339 | /** |
| 341 | * attribute_container_add_class_device - same function as class_device_add | 340 | * attribute_container_add_class_device - same function as device_add |
| 342 | * | 341 | * |
| 343 | * @classdev: the class device to add | 342 | * @classdev: the class device to add |
| 344 | * | 343 | * |
| 345 | * This performs essentially the same function as class_device_add except for | 344 | * This performs essentially the same function as device_add except for |
| 346 | * attribute containers, namely add the classdev to the system and then | 345 | * attribute containers, namely add the classdev to the system and then |
| 347 | * create the attribute files | 346 | * create the attribute files |
| 348 | */ | 347 | */ |
| 349 | int | 348 | int |
| 350 | attribute_container_add_class_device(struct class_device *classdev) | 349 | attribute_container_add_class_device(struct device *classdev) |
| 351 | { | 350 | { |
| 352 | int error = class_device_add(classdev); | 351 | int error = device_add(classdev); |
| 353 | if (error) | 352 | if (error) |
| 354 | return error; | 353 | return error; |
| 355 | return attribute_container_add_attrs(classdev); | 354 | return attribute_container_add_attrs(classdev); |
| @@ -364,7 +363,7 @@ attribute_container_add_class_device(struct class_device *classdev) | |||
| 364 | int | 363 | int |
| 365 | attribute_container_add_class_device_adapter(struct attribute_container *cont, | 364 | attribute_container_add_class_device_adapter(struct attribute_container *cont, |
| 366 | struct device *dev, | 365 | struct device *dev, |
| 367 | struct class_device *classdev) | 366 | struct device *classdev) |
| 368 | { | 367 | { |
| 369 | return attribute_container_add_class_device(classdev); | 368 | return attribute_container_add_class_device(classdev); |
| 370 | } | 369 | } |
| @@ -376,11 +375,11 @@ attribute_container_add_class_device_adapter(struct attribute_container *cont, | |||
| 376 | * | 375 | * |
| 377 | */ | 376 | */ |
| 378 | void | 377 | void |
| 379 | attribute_container_remove_attrs(struct class_device *classdev) | 378 | attribute_container_remove_attrs(struct device *classdev) |
| 380 | { | 379 | { |
| 381 | struct attribute_container *cont = | 380 | struct attribute_container *cont = |
| 382 | attribute_container_classdev_to_container(classdev); | 381 | attribute_container_classdev_to_container(classdev); |
| 383 | struct class_device_attribute **attrs = cont->attrs; | 382 | struct device_attribute **attrs = cont->attrs; |
| 384 | int i; | 383 | int i; |
| 385 | 384 | ||
| 386 | if (!attrs && !cont->grp) | 385 | if (!attrs && !cont->grp) |
| @@ -392,7 +391,7 @@ attribute_container_remove_attrs(struct class_device *classdev) | |||
| 392 | } | 391 | } |
| 393 | 392 | ||
| 394 | for (i = 0; attrs[i]; i++) | 393 | for (i = 0; attrs[i]; i++) |
| 395 | class_device_remove_file(classdev, attrs[i]); | 394 | device_remove_file(classdev, attrs[i]); |
| 396 | } | 395 | } |
| 397 | 396 | ||
| 398 | /** | 397 | /** |
| @@ -401,13 +400,13 @@ attribute_container_remove_attrs(struct class_device *classdev) | |||
| 401 | * @classdev: the class device | 400 | * @classdev: the class device |
| 402 | * | 401 | * |
| 403 | * This function simply removes all the attribute files and then calls | 402 | * This function simply removes all the attribute files and then calls |
| 404 | * class_device_del. | 403 | * device_del. |
| 405 | */ | 404 | */ |
| 406 | void | 405 | void |
| 407 | attribute_container_class_device_del(struct class_device *classdev) | 406 | attribute_container_class_device_del(struct device *classdev) |
| 408 | { | 407 | { |
| 409 | attribute_container_remove_attrs(classdev); | 408 | attribute_container_remove_attrs(classdev); |
| 410 | class_device_del(classdev); | 409 | device_del(classdev); |
| 411 | } | 410 | } |
| 412 | 411 | ||
| 413 | /** | 412 | /** |
| @@ -419,16 +418,16 @@ attribute_container_class_device_del(struct class_device *classdev) | |||
| 419 | * Looks up the device in the container's list of class devices and returns | 418 | * Looks up the device in the container's list of class devices and returns |
| 420 | * the corresponding class_device. | 419 | * the corresponding class_device. |
| 421 | */ | 420 | */ |
| 422 | struct class_device * | 421 | struct device * |
| 423 | attribute_container_find_class_device(struct attribute_container *cont, | 422 | attribute_container_find_class_device(struct attribute_container *cont, |
| 424 | struct device *dev) | 423 | struct device *dev) |
| 425 | { | 424 | { |
| 426 | struct class_device *cdev = NULL; | 425 | struct device *cdev = NULL; |
| 427 | struct internal_container *ic; | 426 | struct internal_container *ic; |
| 428 | struct klist_iter iter; | 427 | struct klist_iter iter; |
| 429 | 428 | ||
| 430 | klist_for_each_entry(ic, &cont->containers, node, &iter) { | 429 | klist_for_each_entry(ic, &cont->containers, node, &iter) { |
| 431 | if (ic->classdev.dev == dev) { | 430 | if (ic->classdev.parent == dev) { |
| 432 | cdev = &ic->classdev; | 431 | cdev = &ic->classdev; |
| 433 | /* FIXME: must exit iterator then break */ | 432 | /* FIXME: must exit iterator then break */ |
| 434 | klist_iter_exit(&iter); | 433 | klist_iter_exit(&iter); |
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 2d207ad30336..be1cc5143354 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
| @@ -79,7 +79,7 @@ static void driver_release(struct kobject *kobj) | |||
| 79 | { | 79 | { |
| 80 | struct driver_private *drv_priv = to_driver(kobj); | 80 | struct driver_private *drv_priv = to_driver(kobj); |
| 81 | 81 | ||
| 82 | pr_debug("driver: '%s': %s\n", kobject_name(kobj), __FUNCTION__); | 82 | pr_debug("driver: '%s': %s\n", kobject_name(kobj), __func__); |
| 83 | kfree(drv_priv); | 83 | kfree(drv_priv); |
| 84 | } | 84 | } |
| 85 | 85 | ||
| @@ -505,14 +505,11 @@ void bus_attach_device(struct device *dev) | |||
| 505 | int ret = 0; | 505 | int ret = 0; |
| 506 | 506 | ||
| 507 | if (bus) { | 507 | if (bus) { |
| 508 | dev->is_registered = 1; | ||
| 509 | if (bus->p->drivers_autoprobe) | 508 | if (bus->p->drivers_autoprobe) |
| 510 | ret = device_attach(dev); | 509 | ret = device_attach(dev); |
| 511 | WARN_ON(ret < 0); | 510 | WARN_ON(ret < 0); |
| 512 | if (ret >= 0) | 511 | if (ret >= 0) |
| 513 | klist_add_tail(&dev->knode_bus, &bus->p->klist_devices); | 512 | klist_add_tail(&dev->knode_bus, &bus->p->klist_devices); |
| 514 | else | ||
| 515 | dev->is_registered = 0; | ||
| 516 | } | 513 | } |
| 517 | } | 514 | } |
| 518 | 515 | ||
| @@ -533,10 +530,8 @@ void bus_remove_device(struct device *dev) | |||
| 533 | sysfs_remove_link(&dev->bus->p->devices_kset->kobj, | 530 | sysfs_remove_link(&dev->bus->p->devices_kset->kobj, |
| 534 | dev->bus_id); | 531 | dev->bus_id); |
| 535 | device_remove_attrs(dev->bus, dev); | 532 | device_remove_attrs(dev->bus, dev); |
| 536 | if (dev->is_registered) { | 533 | klist_del(&dev->knode_bus); |
| 537 | dev->is_registered = 0; | 534 | |
| 538 | klist_del(&dev->knode_bus); | ||
| 539 | } | ||
| 540 | pr_debug("bus: '%s': remove device %s\n", | 535 | pr_debug("bus: '%s': remove device %s\n", |
| 541 | dev->bus->name, dev->bus_id); | 536 | dev->bus->name, dev->bus_id); |
| 542 | device_release_driver(dev); | 537 | device_release_driver(dev); |
| @@ -682,19 +677,19 @@ int bus_add_driver(struct device_driver *drv) | |||
| 682 | error = driver_create_file(drv, &driver_attr_uevent); | 677 | error = driver_create_file(drv, &driver_attr_uevent); |
| 683 | if (error) { | 678 | if (error) { |
| 684 | printk(KERN_ERR "%s: uevent attr (%s) failed\n", | 679 | printk(KERN_ERR "%s: uevent attr (%s) failed\n", |
| 685 | __FUNCTION__, drv->name); | 680 | __func__, drv->name); |
| 686 | } | 681 | } |
| 687 | error = driver_add_attrs(bus, drv); | 682 | error = driver_add_attrs(bus, drv); |
| 688 | if (error) { | 683 | if (error) { |
| 689 | /* How the hell do we get out of this pickle? Give up */ | 684 | /* How the hell do we get out of this pickle? Give up */ |
| 690 | printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", | 685 | printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", |
| 691 | __FUNCTION__, drv->name); | 686 | __func__, drv->name); |
| 692 | } | 687 | } |
| 693 | error = add_bind_files(drv); | 688 | error = add_bind_files(drv); |
| 694 | if (error) { | 689 | if (error) { |
| 695 | /* Ditto */ | 690 | /* Ditto */ |
| 696 | printk(KERN_ERR "%s: add_bind_files(%s) failed\n", | 691 | printk(KERN_ERR "%s: add_bind_files(%s) failed\n", |
| 697 | __FUNCTION__, drv->name); | 692 | __func__, drv->name); |
| 698 | } | 693 | } |
| 699 | 694 | ||
| 700 | kobject_uevent(&priv->kobj, KOBJ_ADD); | 695 | kobject_uevent(&priv->kobj, KOBJ_ADD); |
diff --git a/drivers/base/class.c b/drivers/base/class.c index 9d915376c313..b4901799308b 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c | |||
| @@ -175,13 +175,13 @@ void class_unregister(struct class *cls) | |||
| 175 | 175 | ||
| 176 | static void class_create_release(struct class *cls) | 176 | static void class_create_release(struct class *cls) |
| 177 | { | 177 | { |
| 178 | pr_debug("%s called for %s\n", __FUNCTION__, cls->name); | 178 | pr_debug("%s called for %s\n", __func__, cls->name); |
| 179 | kfree(cls); | 179 | kfree(cls); |
| 180 | } | 180 | } |
| 181 | 181 | ||
| 182 | static void class_device_create_release(struct class_device *class_dev) | 182 | static void class_device_create_release(struct class_device *class_dev) |
| 183 | { | 183 | { |
| 184 | pr_debug("%s called for %s\n", __FUNCTION__, class_dev->class_id); | 184 | pr_debug("%s called for %s\n", __func__, class_dev->class_id); |
| 185 | kfree(class_dev); | 185 | kfree(class_dev); |
| 186 | } | 186 | } |
| 187 | 187 | ||
| @@ -189,7 +189,7 @@ static void class_device_create_release(struct class_device *class_dev) | |||
| 189 | static int class_device_create_uevent(struct class_device *class_dev, | 189 | static int class_device_create_uevent(struct class_device *class_dev, |
| 190 | struct kobj_uevent_env *env) | 190 | struct kobj_uevent_env *env) |
| 191 | { | 191 | { |
| 192 | pr_debug("%s called for %s\n", __FUNCTION__, class_dev->class_id); | 192 | pr_debug("%s called for %s\n", __func__, class_dev->class_id); |
| 193 | return 0; | 193 | return 0; |
| 194 | } | 194 | } |
| 195 | 195 | ||
| @@ -415,7 +415,7 @@ static int class_uevent(struct kset *kset, struct kobject *kobj, | |||
| 415 | struct device *dev = class_dev->dev; | 415 | struct device *dev = class_dev->dev; |
| 416 | int retval = 0; | 416 | int retval = 0; |
| 417 | 417 | ||
| 418 | pr_debug("%s - name = %s\n", __FUNCTION__, class_dev->class_id); | 418 | pr_debug("%s - name = %s\n", __func__, class_dev->class_id); |
| 419 | 419 | ||
| 420 | if (MAJOR(class_dev->devt)) { | 420 | if (MAJOR(class_dev->devt)) { |
| 421 | add_uevent_var(env, "MAJOR=%u", MAJOR(class_dev->devt)); | 421 | add_uevent_var(env, "MAJOR=%u", MAJOR(class_dev->devt)); |
diff --git a/drivers/base/core.c b/drivers/base/core.c index 7c4b36ccb1a0..9248e0927d08 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
| @@ -207,7 +207,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, | |||
| 207 | retval = dev->bus->uevent(dev, env); | 207 | retval = dev->bus->uevent(dev, env); |
| 208 | if (retval) | 208 | if (retval) |
| 209 | pr_debug("device: '%s': %s: bus uevent() returned %d\n", | 209 | pr_debug("device: '%s': %s: bus uevent() returned %d\n", |
| 210 | dev->bus_id, __FUNCTION__, retval); | 210 | dev->bus_id, __func__, retval); |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | /* have the class specific function add its stuff */ | 213 | /* have the class specific function add its stuff */ |
| @@ -216,7 +216,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, | |||
| 216 | if (retval) | 216 | if (retval) |
| 217 | pr_debug("device: '%s': %s: class uevent() " | 217 | pr_debug("device: '%s': %s: class uevent() " |
| 218 | "returned %d\n", dev->bus_id, | 218 | "returned %d\n", dev->bus_id, |
| 219 | __FUNCTION__, retval); | 219 | __func__, retval); |
| 220 | } | 220 | } |
| 221 | 221 | ||
| 222 | /* have the device type specific fuction add its stuff */ | 222 | /* have the device type specific fuction add its stuff */ |
| @@ -225,7 +225,7 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, | |||
| 225 | if (retval) | 225 | if (retval) |
| 226 | pr_debug("device: '%s': %s: dev_type uevent() " | 226 | pr_debug("device: '%s': %s: dev_type uevent() " |
| 227 | "returned %d\n", dev->bus_id, | 227 | "returned %d\n", dev->bus_id, |
| 228 | __FUNCTION__, retval); | 228 | __func__, retval); |
| 229 | } | 229 | } |
| 230 | 230 | ||
| 231 | return retval; | 231 | return retval; |
| @@ -782,7 +782,7 @@ int device_add(struct device *dev) | |||
| 782 | goto Done; | 782 | goto Done; |
| 783 | } | 783 | } |
| 784 | 784 | ||
| 785 | pr_debug("device: '%s': %s\n", dev->bus_id, __FUNCTION__); | 785 | pr_debug("device: '%s': %s\n", dev->bus_id, __func__); |
| 786 | 786 | ||
| 787 | parent = get_device(dev->parent); | 787 | parent = get_device(dev->parent); |
| 788 | setup_parent(dev, parent); | 788 | setup_parent(dev, parent); |
| @@ -817,13 +817,12 @@ int device_add(struct device *dev) | |||
| 817 | error = device_add_attrs(dev); | 817 | error = device_add_attrs(dev); |
| 818 | if (error) | 818 | if (error) |
| 819 | goto AttrsError; | 819 | goto AttrsError; |
| 820 | error = dpm_sysfs_add(dev); | ||
| 821 | if (error) | ||
| 822 | goto PMError; | ||
| 823 | device_pm_add(dev); | ||
| 824 | error = bus_add_device(dev); | 820 | error = bus_add_device(dev); |
| 825 | if (error) | 821 | if (error) |
| 826 | goto BusError; | 822 | goto BusError; |
| 823 | error = device_pm_add(dev); | ||
| 824 | if (error) | ||
| 825 | goto PMError; | ||
| 827 | kobject_uevent(&dev->kobj, KOBJ_ADD); | 826 | kobject_uevent(&dev->kobj, KOBJ_ADD); |
| 828 | bus_attach_device(dev); | 827 | bus_attach_device(dev); |
| 829 | if (parent) | 828 | if (parent) |
| @@ -843,9 +842,9 @@ int device_add(struct device *dev) | |||
| 843 | Done: | 842 | Done: |
| 844 | put_device(dev); | 843 | put_device(dev); |
| 845 | return error; | 844 | return error; |
| 846 | BusError: | ||
| 847 | device_pm_remove(dev); | ||
| 848 | PMError: | 845 | PMError: |
| 846 | bus_remove_device(dev); | ||
| 847 | BusError: | ||
| 849 | if (dev->bus) | 848 | if (dev->bus) |
| 850 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, | 849 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, |
| 851 | BUS_NOTIFY_DEL_DEVICE, dev); | 850 | BUS_NOTIFY_DEL_DEVICE, dev); |
| @@ -981,7 +980,7 @@ void device_del(struct device *dev) | |||
| 981 | */ | 980 | */ |
| 982 | void device_unregister(struct device *dev) | 981 | void device_unregister(struct device *dev) |
| 983 | { | 982 | { |
| 984 | pr_debug("device: '%s': %s\n", dev->bus_id, __FUNCTION__); | 983 | pr_debug("device: '%s': %s\n", dev->bus_id, __func__); |
| 985 | device_del(dev); | 984 | device_del(dev); |
| 986 | put_device(dev); | 985 | put_device(dev); |
| 987 | } | 986 | } |
| @@ -1076,7 +1075,7 @@ EXPORT_SYMBOL_GPL(device_remove_file); | |||
| 1076 | 1075 | ||
| 1077 | static void device_create_release(struct device *dev) | 1076 | static void device_create_release(struct device *dev) |
| 1078 | { | 1077 | { |
| 1079 | pr_debug("device: '%s': %s\n", dev->bus_id, __FUNCTION__); | 1078 | pr_debug("device: '%s': %s\n", dev->bus_id, __func__); |
| 1080 | kfree(dev); | 1079 | kfree(dev); |
| 1081 | } | 1080 | } |
| 1082 | 1081 | ||
| @@ -1164,35 +1163,6 @@ void device_destroy(struct class *class, dev_t devt) | |||
| 1164 | } | 1163 | } |
| 1165 | EXPORT_SYMBOL_GPL(device_destroy); | 1164 | EXPORT_SYMBOL_GPL(device_destroy); |
| 1166 | 1165 | ||
| 1167 | #ifdef CONFIG_PM_SLEEP | ||
| 1168 | /** | ||
| 1169 | * destroy_suspended_device - asks the PM core to remove a suspended device | ||
| 1170 | * @class: pointer to the struct class that this device was registered with | ||
| 1171 | * @devt: the dev_t of the device that was previously registered | ||
| 1172 | * | ||
| 1173 | * This call notifies the PM core of the necessity to unregister a suspended | ||
| 1174 | * device created with a call to device_create() (devices cannot be | ||
| 1175 | * unregistered directly while suspended, since the PM core holds their | ||
| 1176 | * semaphores at that time). | ||
| 1177 | * | ||
| 1178 | * It can only be called within the scope of a system sleep transition. In | ||
| 1179 | * practice this means it has to be directly or indirectly invoked either by | ||
| 1180 | * a suspend or resume method, or by the PM core (e.g. via | ||
| 1181 | * disable_nonboot_cpus() or enable_nonboot_cpus()). | ||
| 1182 | */ | ||
| 1183 | void destroy_suspended_device(struct class *class, dev_t devt) | ||
| 1184 | { | ||
| 1185 | struct device *dev; | ||
| 1186 | |||
| 1187 | dev = class_find_device(class, &devt, __match_devt); | ||
| 1188 | if (dev) { | ||
| 1189 | device_pm_schedule_removal(dev); | ||
| 1190 | put_device(dev); | ||
| 1191 | } | ||
| 1192 | } | ||
| 1193 | EXPORT_SYMBOL_GPL(destroy_suspended_device); | ||
| 1194 | #endif /* CONFIG_PM_SLEEP */ | ||
| 1195 | |||
| 1196 | /** | 1166 | /** |
| 1197 | * device_rename - renames a device | 1167 | * device_rename - renames a device |
| 1198 | * @dev: the pointer to the struct device to be renamed | 1168 | * @dev: the pointer to the struct device to be renamed |
| @@ -1210,7 +1180,7 @@ int device_rename(struct device *dev, char *new_name) | |||
| 1210 | return -EINVAL; | 1180 | return -EINVAL; |
| 1211 | 1181 | ||
| 1212 | pr_debug("device: '%s': %s: renaming to '%s'\n", dev->bus_id, | 1182 | pr_debug("device: '%s': %s: renaming to '%s'\n", dev->bus_id, |
| 1213 | __FUNCTION__, new_name); | 1183 | __func__, new_name); |
| 1214 | 1184 | ||
| 1215 | #ifdef CONFIG_SYSFS_DEPRECATED | 1185 | #ifdef CONFIG_SYSFS_DEPRECATED |
| 1216 | if ((dev->class) && (dev->parent)) | 1186 | if ((dev->class) && (dev->parent)) |
| @@ -1249,7 +1219,7 @@ int device_rename(struct device *dev, char *new_name) | |||
| 1249 | dev->bus_id); | 1219 | dev->bus_id); |
| 1250 | if (error) { | 1220 | if (error) { |
| 1251 | dev_err(dev, "%s: sysfs_create_symlink failed (%d)\n", | 1221 | dev_err(dev, "%s: sysfs_create_symlink failed (%d)\n", |
| 1252 | __FUNCTION__, error); | 1222 | __func__, error); |
| 1253 | } | 1223 | } |
| 1254 | } | 1224 | } |
| 1255 | #endif | 1225 | #endif |
| @@ -1325,7 +1295,7 @@ int device_move(struct device *dev, struct device *new_parent) | |||
| 1325 | new_parent_kobj = get_device_parent(dev, new_parent); | 1295 | new_parent_kobj = get_device_parent(dev, new_parent); |
| 1326 | 1296 | ||
| 1327 | pr_debug("device: '%s': %s: moving to '%s'\n", dev->bus_id, | 1297 | pr_debug("device: '%s': %s: moving to '%s'\n", dev->bus_id, |
| 1328 | __FUNCTION__, new_parent ? new_parent->bus_id : "<NULL>"); | 1298 | __func__, new_parent ? new_parent->bus_id : "<NULL>"); |
| 1329 | error = kobject_move(&dev->kobj, new_parent_kobj); | 1299 | error = kobject_move(&dev->kobj, new_parent_kobj); |
| 1330 | if (error) { | 1300 | if (error) { |
| 1331 | cleanup_glue_dir(dev, new_parent_kobj); | 1301 | cleanup_glue_dir(dev, new_parent_kobj); |
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index 2c76afff3b15..6fe417429977 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c | |||
| @@ -28,7 +28,7 @@ static ssize_t show_online(struct sys_device *dev, char *buf) | |||
| 28 | return sprintf(buf, "%u\n", !!cpu_online(cpu->sysdev.id)); | 28 | return sprintf(buf, "%u\n", !!cpu_online(cpu->sysdev.id)); |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | static ssize_t store_online(struct sys_device *dev, const char *buf, | 31 | static ssize_t __ref store_online(struct sys_device *dev, const char *buf, |
| 32 | size_t count) | 32 | size_t count) |
| 33 | { | 33 | { |
| 34 | struct cpu *cpu = container_of(dev, struct cpu, sysdev); | 34 | struct cpu *cpu = container_of(dev, struct cpu, sysdev); |
| @@ -55,7 +55,7 @@ static ssize_t store_online(struct sys_device *dev, const char *buf, | |||
| 55 | } | 55 | } |
| 56 | static SYSDEV_ATTR(online, 0644, show_online, store_online); | 56 | static SYSDEV_ATTR(online, 0644, show_online, store_online); |
| 57 | 57 | ||
| 58 | static void __devinit register_cpu_control(struct cpu *cpu) | 58 | static void __cpuinit register_cpu_control(struct cpu *cpu) |
| 59 | { | 59 | { |
| 60 | sysdev_create_file(&cpu->sysdev, &attr_online); | 60 | sysdev_create_file(&cpu->sysdev, &attr_online); |
| 61 | } | 61 | } |
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index a5cde94bb982..3ac443b2ac08 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c | |||
| @@ -30,12 +30,12 @@ static void driver_bound(struct device *dev) | |||
| 30 | { | 30 | { |
| 31 | if (klist_node_attached(&dev->knode_driver)) { | 31 | if (klist_node_attached(&dev->knode_driver)) { |
| 32 | printk(KERN_WARNING "%s: device %s already bound\n", | 32 | printk(KERN_WARNING "%s: device %s already bound\n", |
| 33 | __FUNCTION__, kobject_name(&dev->kobj)); | 33 | __func__, kobject_name(&dev->kobj)); |
| 34 | return; | 34 | return; |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->bus_id, | 37 | pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->bus_id, |
| 38 | __FUNCTION__, dev->driver->name); | 38 | __func__, dev->driver->name); |
| 39 | 39 | ||
| 40 | if (dev->bus) | 40 | if (dev->bus) |
| 41 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, | 41 | blocking_notifier_call_chain(&dev->bus->p->bus_notifier, |
| @@ -104,13 +104,13 @@ static int really_probe(struct device *dev, struct device_driver *drv) | |||
| 104 | 104 | ||
| 105 | atomic_inc(&probe_count); | 105 | atomic_inc(&probe_count); |
| 106 | pr_debug("bus: '%s': %s: probing driver %s with device %s\n", | 106 | pr_debug("bus: '%s': %s: probing driver %s with device %s\n", |
| 107 | drv->bus->name, __FUNCTION__, drv->name, dev->bus_id); | 107 | drv->bus->name, __func__, drv->name, dev->bus_id); |
| 108 | WARN_ON(!list_empty(&dev->devres_head)); | 108 | WARN_ON(!list_empty(&dev->devres_head)); |
| 109 | 109 | ||
| 110 | dev->driver = drv; | 110 | dev->driver = drv; |
| 111 | if (driver_sysfs_add(dev)) { | 111 | if (driver_sysfs_add(dev)) { |
| 112 | printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n", | 112 | printk(KERN_ERR "%s: driver_sysfs_add(%s) failed\n", |
| 113 | __FUNCTION__, dev->bus_id); | 113 | __func__, dev->bus_id); |
| 114 | goto probe_failed; | 114 | goto probe_failed; |
| 115 | } | 115 | } |
| 116 | 116 | ||
| @@ -127,7 +127,7 @@ static int really_probe(struct device *dev, struct device_driver *drv) | |||
| 127 | driver_bound(dev); | 127 | driver_bound(dev); |
| 128 | ret = 1; | 128 | ret = 1; |
| 129 | pr_debug("bus: '%s': %s: bound device %s to driver %s\n", | 129 | pr_debug("bus: '%s': %s: bound device %s to driver %s\n", |
| 130 | drv->bus->name, __FUNCTION__, dev->bus_id, drv->name); | 130 | drv->bus->name, __func__, dev->bus_id, drv->name); |
| 131 | goto done; | 131 | goto done; |
| 132 | 132 | ||
| 133 | probe_failed: | 133 | probe_failed: |
| @@ -160,7 +160,7 @@ done: | |||
| 160 | */ | 160 | */ |
| 161 | int driver_probe_done(void) | 161 | int driver_probe_done(void) |
| 162 | { | 162 | { |
| 163 | pr_debug("%s: probe_count = %d\n", __FUNCTION__, | 163 | pr_debug("%s: probe_count = %d\n", __func__, |
| 164 | atomic_read(&probe_count)); | 164 | atomic_read(&probe_count)); |
| 165 | if (atomic_read(&probe_count)) | 165 | if (atomic_read(&probe_count)) |
| 166 | return -EBUSY; | 166 | return -EBUSY; |
| @@ -194,7 +194,7 @@ int driver_probe_device(struct device_driver *drv, struct device *dev) | |||
| 194 | goto done; | 194 | goto done; |
| 195 | 195 | ||
| 196 | pr_debug("bus: '%s': %s: matched device %s with driver %s\n", | 196 | pr_debug("bus: '%s': %s: matched device %s with driver %s\n", |
| 197 | drv->bus->name, __FUNCTION__, dev->bus_id, drv->name); | 197 | drv->bus->name, __func__, dev->bus_id, drv->name); |
| 198 | 198 | ||
| 199 | ret = really_probe(dev, drv); | 199 | ret = really_probe(dev, drv); |
| 200 | 200 | ||
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index 4a1b9bfc5471..1fef7df8c9d6 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c | |||
| @@ -156,7 +156,7 @@ static ssize_t firmware_loading_store(struct device *dev, | |||
| 156 | } | 156 | } |
| 157 | /* fallthrough */ | 157 | /* fallthrough */ |
| 158 | default: | 158 | default: |
| 159 | printk(KERN_ERR "%s: unexpected value (%d)\n", __FUNCTION__, | 159 | printk(KERN_ERR "%s: unexpected value (%d)\n", __func__, |
| 160 | loading); | 160 | loading); |
| 161 | /* fallthrough */ | 161 | /* fallthrough */ |
| 162 | case -1: | 162 | case -1: |
| @@ -209,7 +209,7 @@ fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size) | |||
| 209 | new_size = ALIGN(min_size, PAGE_SIZE); | 209 | new_size = ALIGN(min_size, PAGE_SIZE); |
| 210 | new_data = vmalloc(new_size); | 210 | new_data = vmalloc(new_size); |
| 211 | if (!new_data) { | 211 | if (!new_data) { |
| 212 | printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__); | 212 | printk(KERN_ERR "%s: unable to alloc buffer\n", __func__); |
| 213 | /* Make sure that we don't keep incomplete data */ | 213 | /* Make sure that we don't keep incomplete data */ |
| 214 | fw_load_abort(fw_priv); | 214 | fw_load_abort(fw_priv); |
| 215 | return -ENOMEM; | 215 | return -ENOMEM; |
| @@ -307,7 +307,7 @@ static int fw_register_device(struct device **dev_p, const char *fw_name, | |||
| 307 | *dev_p = NULL; | 307 | *dev_p = NULL; |
| 308 | 308 | ||
| 309 | if (!fw_priv || !f_dev) { | 309 | if (!fw_priv || !f_dev) { |
| 310 | printk(KERN_ERR "%s: kmalloc failed\n", __FUNCTION__); | 310 | printk(KERN_ERR "%s: kmalloc failed\n", __func__); |
| 311 | retval = -ENOMEM; | 311 | retval = -ENOMEM; |
| 312 | goto error_kfree; | 312 | goto error_kfree; |
| 313 | } | 313 | } |
| @@ -328,7 +328,7 @@ static int fw_register_device(struct device **dev_p, const char *fw_name, | |||
| 328 | retval = device_register(f_dev); | 328 | retval = device_register(f_dev); |
| 329 | if (retval) { | 329 | if (retval) { |
| 330 | printk(KERN_ERR "%s: device_register failed\n", | 330 | printk(KERN_ERR "%s: device_register failed\n", |
| 331 | __FUNCTION__); | 331 | __func__); |
| 332 | goto error_kfree; | 332 | goto error_kfree; |
| 333 | } | 333 | } |
| 334 | *dev_p = f_dev; | 334 | *dev_p = f_dev; |
| @@ -362,14 +362,14 @@ static int fw_setup_device(struct firmware *fw, struct device **dev_p, | |||
| 362 | retval = sysfs_create_bin_file(&f_dev->kobj, &fw_priv->attr_data); | 362 | retval = sysfs_create_bin_file(&f_dev->kobj, &fw_priv->attr_data); |
| 363 | if (retval) { | 363 | if (retval) { |
| 364 | printk(KERN_ERR "%s: sysfs_create_bin_file failed\n", | 364 | printk(KERN_ERR "%s: sysfs_create_bin_file failed\n", |
| 365 | __FUNCTION__); | 365 | __func__); |
| 366 | goto error_unreg; | 366 | goto error_unreg; |
| 367 | } | 367 | } |
| 368 | 368 | ||
| 369 | retval = device_create_file(f_dev, &dev_attr_loading); | 369 | retval = device_create_file(f_dev, &dev_attr_loading); |
| 370 | if (retval) { | 370 | if (retval) { |
| 371 | printk(KERN_ERR "%s: device_create_file failed\n", | 371 | printk(KERN_ERR "%s: device_create_file failed\n", |
| 372 | __FUNCTION__); | 372 | __func__); |
| 373 | goto error_unreg; | 373 | goto error_unreg; |
| 374 | } | 374 | } |
| 375 | 375 | ||
| @@ -399,7 +399,7 @@ _request_firmware(const struct firmware **firmware_p, const char *name, | |||
| 399 | *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL); | 399 | *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL); |
| 400 | if (!firmware) { | 400 | if (!firmware) { |
| 401 | printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n", | 401 | printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n", |
| 402 | __FUNCTION__); | 402 | __func__); |
| 403 | retval = -ENOMEM; | 403 | retval = -ENOMEM; |
| 404 | goto out; | 404 | goto out; |
| 405 | } | 405 | } |
| @@ -570,13 +570,13 @@ firmware_class_init(void) | |||
| 570 | int error; | 570 | int error; |
| 571 | error = class_register(&firmware_class); | 571 | error = class_register(&firmware_class); |
| 572 | if (error) { | 572 | if (error) { |
| 573 | printk(KERN_ERR "%s: class_register failed\n", __FUNCTION__); | 573 | printk(KERN_ERR "%s: class_register failed\n", __func__); |
| 574 | return error; | 574 | return error; |
| 575 | } | 575 | } |
| 576 | error = class_create_file(&firmware_class, &class_attr_timeout); | 576 | error = class_create_file(&firmware_class, &class_attr_timeout); |
| 577 | if (error) { | 577 | if (error) { |
| 578 | printk(KERN_ERR "%s: class_create_file failed\n", | 578 | printk(KERN_ERR "%s: class_create_file failed\n", |
| 579 | __FUNCTION__); | 579 | __func__); |
| 580 | class_unregister(&firmware_class); | 580 | class_unregister(&firmware_class); |
| 581 | } | 581 | } |
| 582 | return error; | 582 | return error; |
diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 7ae413fdd5fc..8ce6de5a7e28 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/kobject.h> | 20 | #include <linux/kobject.h> |
| 21 | #include <linux/memory_hotplug.h> | 21 | #include <linux/memory_hotplug.h> |
| 22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
| 23 | #include <linux/mutex.h> | ||
| 23 | #include <asm/atomic.h> | 24 | #include <asm/atomic.h> |
| 24 | #include <asm/uaccess.h> | 25 | #include <asm/uaccess.h> |
| 25 | 26 | ||
| @@ -61,8 +62,8 @@ void unregister_memory_notifier(struct notifier_block *nb) | |||
| 61 | /* | 62 | /* |
| 62 | * register_memory - Setup a sysfs device for a memory block | 63 | * register_memory - Setup a sysfs device for a memory block |
| 63 | */ | 64 | */ |
| 64 | int register_memory(struct memory_block *memory, struct mem_section *section, | 65 | static |
| 65 | struct node *root) | 66 | int register_memory(struct memory_block *memory, struct mem_section *section) |
| 66 | { | 67 | { |
| 67 | int error; | 68 | int error; |
| 68 | 69 | ||
| @@ -70,26 +71,18 @@ int register_memory(struct memory_block *memory, struct mem_section *section, | |||
| 70 | memory->sysdev.id = __section_nr(section); | 71 | memory->sysdev.id = __section_nr(section); |
| 71 | 72 | ||
| 72 | error = sysdev_register(&memory->sysdev); | 73 | error = sysdev_register(&memory->sysdev); |
| 73 | |||
| 74 | if (root && !error) | ||
| 75 | error = sysfs_create_link(&root->sysdev.kobj, | ||
| 76 | &memory->sysdev.kobj, | ||
| 77 | kobject_name(&memory->sysdev.kobj)); | ||
| 78 | |||
| 79 | return error; | 74 | return error; |
| 80 | } | 75 | } |
| 81 | 76 | ||
| 82 | static void | 77 | static void |
| 83 | unregister_memory(struct memory_block *memory, struct mem_section *section, | 78 | unregister_memory(struct memory_block *memory, struct mem_section *section) |
| 84 | struct node *root) | ||
| 85 | { | 79 | { |
| 86 | BUG_ON(memory->sysdev.cls != &memory_sysdev_class); | 80 | BUG_ON(memory->sysdev.cls != &memory_sysdev_class); |
| 87 | BUG_ON(memory->sysdev.id != __section_nr(section)); | 81 | BUG_ON(memory->sysdev.id != __section_nr(section)); |
| 88 | 82 | ||
| 83 | /* drop the ref. we got in remove_memory_block() */ | ||
| 84 | kobject_put(&memory->sysdev.kobj); | ||
| 89 | sysdev_unregister(&memory->sysdev); | 85 | sysdev_unregister(&memory->sysdev); |
| 90 | if (root) | ||
| 91 | sysfs_remove_link(&root->sysdev.kobj, | ||
| 92 | kobject_name(&memory->sysdev.kobj)); | ||
| 93 | } | 86 | } |
| 94 | 87 | ||
| 95 | /* | 88 | /* |
| @@ -193,7 +186,7 @@ memory_block_action(struct memory_block *mem, unsigned long action) | |||
| 193 | break; | 186 | break; |
| 194 | default: | 187 | default: |
| 195 | printk(KERN_WARNING "%s(%p, %ld) unknown action: %ld\n", | 188 | printk(KERN_WARNING "%s(%p, %ld) unknown action: %ld\n", |
| 196 | __FUNCTION__, mem, action, action); | 189 | __func__, mem, action, action); |
| 197 | WARN_ON(1); | 190 | WARN_ON(1); |
| 198 | ret = -EINVAL; | 191 | ret = -EINVAL; |
| 199 | } | 192 | } |
| @@ -205,7 +198,7 @@ static int memory_block_change_state(struct memory_block *mem, | |||
| 205 | unsigned long to_state, unsigned long from_state_req) | 198 | unsigned long to_state, unsigned long from_state_req) |
| 206 | { | 199 | { |
| 207 | int ret = 0; | 200 | int ret = 0; |
| 208 | down(&mem->state_sem); | 201 | mutex_lock(&mem->state_mutex); |
| 209 | 202 | ||
| 210 | if (mem->state != from_state_req) { | 203 | if (mem->state != from_state_req) { |
| 211 | ret = -EINVAL; | 204 | ret = -EINVAL; |
| @@ -217,7 +210,7 @@ static int memory_block_change_state(struct memory_block *mem, | |||
| 217 | mem->state = to_state; | 210 | mem->state = to_state; |
| 218 | 211 | ||
| 219 | out: | 212 | out: |
| 220 | up(&mem->state_sem); | 213 | mutex_unlock(&mem->state_mutex); |
| 221 | return ret; | 214 | return ret; |
| 222 | } | 215 | } |
| 223 | 216 | ||
| @@ -341,10 +334,10 @@ static int add_memory_block(unsigned long node_id, struct mem_section *section, | |||
| 341 | 334 | ||
| 342 | mem->phys_index = __section_nr(section); | 335 | mem->phys_index = __section_nr(section); |
| 343 | mem->state = state; | 336 | mem->state = state; |
| 344 | init_MUTEX(&mem->state_sem); | 337 | mutex_init(&mem->state_mutex); |
| 345 | mem->phys_device = phys_device; | 338 | mem->phys_device = phys_device; |
| 346 | 339 | ||
| 347 | ret = register_memory(mem, section, NULL); | 340 | ret = register_memory(mem, section); |
| 348 | if (!ret) | 341 | if (!ret) |
| 349 | ret = mem_create_simple_file(mem, phys_index); | 342 | ret = mem_create_simple_file(mem, phys_index); |
| 350 | if (!ret) | 343 | if (!ret) |
| @@ -395,7 +388,7 @@ int remove_memory_block(unsigned long node_id, struct mem_section *section, | |||
| 395 | mem_remove_simple_file(mem, phys_index); | 388 | mem_remove_simple_file(mem, phys_index); |
| 396 | mem_remove_simple_file(mem, state); | 389 | mem_remove_simple_file(mem, state); |
| 397 | mem_remove_simple_file(mem, phys_device); | 390 | mem_remove_simple_file(mem, phys_device); |
| 398 | unregister_memory(mem, section, NULL); | 391 | unregister_memory(mem, section); |
| 399 | 392 | ||
| 400 | return 0; | 393 | return 0; |
| 401 | } | 394 | } |
| @@ -451,6 +444,6 @@ int __init memory_dev_init(void) | |||
| 451 | ret = err; | 444 | ret = err; |
| 452 | out: | 445 | out: |
| 453 | if (ret) | 446 | if (ret) |
| 454 | printk(KERN_ERR "%s() failed: %d\n", __FUNCTION__, ret); | 447 | printk(KERN_ERR "%s() failed: %d\n", __func__, ret); |
| 455 | return ret; | 448 | return ret; |
| 456 | } | 449 | } |
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index d887d5cb5bef..c4568b82875b 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
| @@ -50,26 +50,40 @@ | |||
| 50 | LIST_HEAD(dpm_active); | 50 | LIST_HEAD(dpm_active); |
| 51 | static LIST_HEAD(dpm_off); | 51 | static LIST_HEAD(dpm_off); |
| 52 | static LIST_HEAD(dpm_off_irq); | 52 | static LIST_HEAD(dpm_off_irq); |
| 53 | static LIST_HEAD(dpm_destroy); | ||
| 54 | 53 | ||
| 55 | static DEFINE_MUTEX(dpm_list_mtx); | 54 | static DEFINE_MUTEX(dpm_list_mtx); |
| 56 | 55 | ||
| 57 | static DECLARE_RWSEM(pm_sleep_rwsem); | 56 | /* 'true' if all devices have been suspended, protected by dpm_list_mtx */ |
| 58 | 57 | static bool all_sleeping; | |
| 59 | int (*platform_enable_wakeup)(struct device *dev, int is_on); | ||
| 60 | 58 | ||
| 61 | /** | 59 | /** |
| 62 | * device_pm_add - add a device to the list of active devices | 60 | * device_pm_add - add a device to the list of active devices |
| 63 | * @dev: Device to be added to the list | 61 | * @dev: Device to be added to the list |
| 64 | */ | 62 | */ |
| 65 | void device_pm_add(struct device *dev) | 63 | int device_pm_add(struct device *dev) |
| 66 | { | 64 | { |
| 65 | int error = 0; | ||
| 66 | |||
| 67 | pr_debug("PM: Adding info for %s:%s\n", | 67 | pr_debug("PM: Adding info for %s:%s\n", |
| 68 | dev->bus ? dev->bus->name : "No Bus", | 68 | dev->bus ? dev->bus->name : "No Bus", |
| 69 | kobject_name(&dev->kobj)); | 69 | kobject_name(&dev->kobj)); |
| 70 | mutex_lock(&dpm_list_mtx); | 70 | mutex_lock(&dpm_list_mtx); |
| 71 | list_add_tail(&dev->power.entry, &dpm_active); | 71 | if ((dev->parent && dev->parent->power.sleeping) || all_sleeping) { |
| 72 | if (dev->parent->power.sleeping) | ||
| 73 | dev_warn(dev, | ||
| 74 | "parent %s is sleeping, will not add\n", | ||
| 75 | dev->parent->bus_id); | ||
| 76 | else | ||
| 77 | dev_warn(dev, "devices are sleeping, will not add\n"); | ||
| 78 | WARN_ON(true); | ||
| 79 | error = -EBUSY; | ||
| 80 | } else { | ||
| 81 | error = dpm_sysfs_add(dev); | ||
| 82 | if (!error) | ||
| 83 | list_add_tail(&dev->power.entry, &dpm_active); | ||
| 84 | } | ||
| 72 | mutex_unlock(&dpm_list_mtx); | 85 | mutex_unlock(&dpm_list_mtx); |
| 86 | return error; | ||
| 73 | } | 87 | } |
| 74 | 88 | ||
| 75 | /** | 89 | /** |
| @@ -89,50 +103,6 @@ void device_pm_remove(struct device *dev) | |||
| 89 | mutex_unlock(&dpm_list_mtx); | 103 | mutex_unlock(&dpm_list_mtx); |
| 90 | } | 104 | } |
| 91 | 105 | ||
| 92 | /** | ||
| 93 | * device_pm_schedule_removal - schedule the removal of a suspended device | ||
| 94 | * @dev: Device to destroy | ||
| 95 | * | ||
| 96 | * Moves the device to the dpm_destroy list for further processing by | ||
| 97 | * unregister_dropped_devices(). | ||
| 98 | */ | ||
| 99 | void device_pm_schedule_removal(struct device *dev) | ||
| 100 | { | ||
| 101 | pr_debug("PM: Preparing for removal: %s:%s\n", | ||
| 102 | dev->bus ? dev->bus->name : "No Bus", | ||
| 103 | kobject_name(&dev->kobj)); | ||
| 104 | mutex_lock(&dpm_list_mtx); | ||
| 105 | list_move_tail(&dev->power.entry, &dpm_destroy); | ||
| 106 | mutex_unlock(&dpm_list_mtx); | ||
| 107 | } | ||
| 108 | EXPORT_SYMBOL_GPL(device_pm_schedule_removal); | ||
| 109 | |||
| 110 | /** | ||
| 111 | * pm_sleep_lock - mutual exclusion for registration and suspend | ||
| 112 | * | ||
| 113 | * Returns 0 if no suspend is underway and device registration | ||
| 114 | * may proceed, otherwise -EBUSY. | ||
| 115 | */ | ||
| 116 | int pm_sleep_lock(void) | ||
| 117 | { | ||
| 118 | if (down_read_trylock(&pm_sleep_rwsem)) | ||
| 119 | return 0; | ||
| 120 | |||
| 121 | return -EBUSY; | ||
| 122 | } | ||
| 123 | |||
| 124 | /** | ||
| 125 | * pm_sleep_unlock - mutual exclusion for registration and suspend | ||
| 126 | * | ||
| 127 | * This routine undoes the effect of device_pm_add_lock | ||
| 128 | * when a device's registration is complete. | ||
| 129 | */ | ||
| 130 | void pm_sleep_unlock(void) | ||
| 131 | { | ||
| 132 | up_read(&pm_sleep_rwsem); | ||
| 133 | } | ||
| 134 | |||
| 135 | |||
| 136 | /*------------------------- Resume routines -------------------------*/ | 106 | /*------------------------- Resume routines -------------------------*/ |
| 137 | 107 | ||
| 138 | /** | 108 | /** |
| @@ -242,11 +212,13 @@ static int resume_device(struct device *dev) | |||
| 242 | static void dpm_resume(void) | 212 | static void dpm_resume(void) |
| 243 | { | 213 | { |
| 244 | mutex_lock(&dpm_list_mtx); | 214 | mutex_lock(&dpm_list_mtx); |
| 215 | all_sleeping = false; | ||
| 245 | while(!list_empty(&dpm_off)) { | 216 | while(!list_empty(&dpm_off)) { |
| 246 | struct list_head *entry = dpm_off.next; | 217 | struct list_head *entry = dpm_off.next; |
| 247 | struct device *dev = to_device(entry); | 218 | struct device *dev = to_device(entry); |
| 248 | 219 | ||
| 249 | list_move_tail(entry, &dpm_active); | 220 | list_move_tail(entry, &dpm_active); |
| 221 | dev->power.sleeping = false; | ||
| 250 | mutex_unlock(&dpm_list_mtx); | 222 | mutex_unlock(&dpm_list_mtx); |
| 251 | resume_device(dev); | 223 | resume_device(dev); |
| 252 | mutex_lock(&dpm_list_mtx); | 224 | mutex_lock(&dpm_list_mtx); |
| @@ -255,26 +227,6 @@ static void dpm_resume(void) | |||
| 255 | } | 227 | } |
| 256 | 228 | ||
| 257 | /** | 229 | /** |
| 258 | * unregister_dropped_devices - Unregister devices scheduled for removal | ||
| 259 | * | ||
| 260 | * Unregister all devices on the dpm_destroy list. | ||
| 261 | */ | ||
| 262 | static void unregister_dropped_devices(void) | ||
| 263 | { | ||
| 264 | mutex_lock(&dpm_list_mtx); | ||
| 265 | while (!list_empty(&dpm_destroy)) { | ||
| 266 | struct list_head *entry = dpm_destroy.next; | ||
| 267 | struct device *dev = to_device(entry); | ||
| 268 | |||
| 269 | mutex_unlock(&dpm_list_mtx); | ||
| 270 | /* This also removes the device from the list */ | ||
| 271 | device_unregister(dev); | ||
| 272 | mutex_lock(&dpm_list_mtx); | ||
| 273 | } | ||
| 274 | mutex_unlock(&dpm_list_mtx); | ||
| 275 | } | ||
| 276 | |||
| 277 | /** | ||
| 278 | * device_resume - Restore state of each device in system. | 230 | * device_resume - Restore state of each device in system. |
| 279 | * | 231 | * |
| 280 | * Resume all the devices, unlock them all, and allow new | 232 | * Resume all the devices, unlock them all, and allow new |
| @@ -284,8 +236,6 @@ void device_resume(void) | |||
| 284 | { | 236 | { |
| 285 | might_sleep(); | 237 | might_sleep(); |
| 286 | dpm_resume(); | 238 | dpm_resume(); |
| 287 | unregister_dropped_devices(); | ||
| 288 | up_write(&pm_sleep_rwsem); | ||
| 289 | } | 239 | } |
| 290 | EXPORT_SYMBOL_GPL(device_resume); | 240 | EXPORT_SYMBOL_GPL(device_resume); |
| 291 | 241 | ||
| @@ -377,11 +327,6 @@ static int suspend_device(struct device *dev, pm_message_t state) | |||
| 377 | 327 | ||
| 378 | down(&dev->sem); | 328 | down(&dev->sem); |
| 379 | 329 | ||
| 380 | if (dev->power.power_state.event) { | ||
| 381 | dev_dbg(dev, "PM: suspend %d-->%d\n", | ||
| 382 | dev->power.power_state.event, state.event); | ||
| 383 | } | ||
| 384 | |||
| 385 | if (dev->class && dev->class->suspend) { | 330 | if (dev->class && dev->class->suspend) { |
| 386 | suspend_device_dbg(dev, state, "class "); | 331 | suspend_device_dbg(dev, state, "class "); |
| 387 | error = dev->class->suspend(dev, state); | 332 | error = dev->class->suspend(dev, state); |
| @@ -426,6 +371,9 @@ static int dpm_suspend(pm_message_t state) | |||
| 426 | struct list_head *entry = dpm_active.prev; | 371 | struct list_head *entry = dpm_active.prev; |
| 427 | struct device *dev = to_device(entry); | 372 | struct device *dev = to_device(entry); |
| 428 | 373 | ||
| 374 | WARN_ON(dev->parent && dev->parent->power.sleeping); | ||
| 375 | |||
| 376 | dev->power.sleeping = true; | ||
| 429 | mutex_unlock(&dpm_list_mtx); | 377 | mutex_unlock(&dpm_list_mtx); |
| 430 | error = suspend_device(dev, state); | 378 | error = suspend_device(dev, state); |
| 431 | mutex_lock(&dpm_list_mtx); | 379 | mutex_lock(&dpm_list_mtx); |
| @@ -437,11 +385,14 @@ static int dpm_suspend(pm_message_t state) | |||
| 437 | (error == -EAGAIN ? | 385 | (error == -EAGAIN ? |
| 438 | " (please convert to suspend_late)" : | 386 | " (please convert to suspend_late)" : |
| 439 | "")); | 387 | "")); |
| 388 | dev->power.sleeping = false; | ||
| 440 | break; | 389 | break; |
| 441 | } | 390 | } |
| 442 | if (!list_empty(&dev->power.entry)) | 391 | if (!list_empty(&dev->power.entry)) |
| 443 | list_move(&dev->power.entry, &dpm_off); | 392 | list_move(&dev->power.entry, &dpm_off); |
| 444 | } | 393 | } |
| 394 | if (!error) | ||
| 395 | all_sleeping = true; | ||
| 445 | mutex_unlock(&dpm_list_mtx); | 396 | mutex_unlock(&dpm_list_mtx); |
| 446 | 397 | ||
| 447 | return error; | 398 | return error; |
| @@ -459,7 +410,6 @@ int device_suspend(pm_message_t state) | |||
| 459 | int error; | 410 | int error; |
| 460 | 411 | ||
| 461 | might_sleep(); | 412 | might_sleep(); |
| 462 | down_write(&pm_sleep_rwsem); | ||
| 463 | error = dpm_suspend(state); | 413 | error = dpm_suspend(state); |
| 464 | if (error) | 414 | if (error) |
| 465 | device_resume(); | 415 | device_resume(); |
diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h index e32d3bdb92c1..a6894f2a4b99 100644 --- a/drivers/base/power/power.h +++ b/drivers/base/power/power.h | |||
| @@ -11,30 +11,13 @@ static inline struct device *to_device(struct list_head *entry) | |||
| 11 | return container_of(entry, struct device, power.entry); | 11 | return container_of(entry, struct device, power.entry); |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | extern void device_pm_add(struct device *); | 14 | extern int device_pm_add(struct device *); |
| 15 | extern void device_pm_remove(struct device *); | 15 | extern void device_pm_remove(struct device *); |
| 16 | extern int pm_sleep_lock(void); | ||
| 17 | extern void pm_sleep_unlock(void); | ||
| 18 | 16 | ||
| 19 | #else /* CONFIG_PM_SLEEP */ | 17 | #else /* CONFIG_PM_SLEEP */ |
| 20 | 18 | ||
| 21 | 19 | static inline int device_pm_add(struct device *dev) { return 0; } | |
| 22 | static inline void device_pm_add(struct device *dev) | 20 | static inline void device_pm_remove(struct device *dev) {} |
| 23 | { | ||
| 24 | } | ||
| 25 | |||
| 26 | static inline void device_pm_remove(struct device *dev) | ||
| 27 | { | ||
| 28 | } | ||
| 29 | |||
| 30 | static inline int pm_sleep_lock(void) | ||
| 31 | { | ||
| 32 | return 0; | ||
| 33 | } | ||
| 34 | |||
| 35 | static inline void pm_sleep_unlock(void) | ||
| 36 | { | ||
| 37 | } | ||
| 38 | 21 | ||
| 39 | #endif | 22 | #endif |
| 40 | 23 | ||
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index f2ed179cd695..d11f74b038db 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c | |||
| @@ -6,6 +6,8 @@ | |||
| 6 | #include <linux/string.h> | 6 | #include <linux/string.h> |
| 7 | #include "power.h" | 7 | #include "power.h" |
| 8 | 8 | ||
| 9 | int (*platform_enable_wakeup)(struct device *dev, int is_on); | ||
| 10 | |||
| 9 | 11 | ||
| 10 | /* | 12 | /* |
| 11 | * wakeup - Report/change current wakeup option for device | 13 | * wakeup - Report/change current wakeup option for device |
diff --git a/drivers/base/sys.c b/drivers/base/sys.c index 8e13fd942163..4fbb56bcb1ee 100644 --- a/drivers/base/sys.c +++ b/drivers/base/sys.c | |||
| @@ -167,6 +167,22 @@ int sysdev_driver_register(struct sysdev_class *cls, struct sysdev_driver *drv) | |||
| 167 | { | 167 | { |
| 168 | int err = 0; | 168 | int err = 0; |
| 169 | 169 | ||
| 170 | if (!cls) { | ||
| 171 | printk(KERN_WARNING "sysdev: invalid class passed to " | ||
| 172 | "sysdev_driver_register!\n"); | ||
| 173 | WARN_ON(1); | ||
| 174 | return -EINVAL; | ||
| 175 | } | ||
| 176 | |||
| 177 | /* Check whether this driver has already been added to a class. */ | ||
| 178 | if ((drv->entry.next != drv->entry.prev) || | ||
| 179 | (drv->entry.next != NULL)) { | ||
| 180 | printk(KERN_WARNING "sysdev: class %s: driver (%p) has already" | ||
| 181 | " been registered to a class, something is wrong, but " | ||
| 182 | "will forge on!\n", cls->name, drv); | ||
| 183 | WARN_ON(1); | ||
| 184 | } | ||
| 185 | |||
| 170 | mutex_lock(&sysdev_drivers_lock); | 186 | mutex_lock(&sysdev_drivers_lock); |
| 171 | if (cls && kset_get(&cls->kset)) { | 187 | if (cls && kset_get(&cls->kset)) { |
| 172 | list_add_tail(&drv->entry, &cls->drivers); | 188 | list_add_tail(&drv->entry, &cls->drivers); |
| @@ -179,7 +195,7 @@ int sysdev_driver_register(struct sysdev_class *cls, struct sysdev_driver *drv) | |||
| 179 | } | 195 | } |
| 180 | } else { | 196 | } else { |
| 181 | err = -EINVAL; | 197 | err = -EINVAL; |
| 182 | printk(KERN_ERR "%s: invalid device class\n", __FUNCTION__); | 198 | printk(KERN_ERR "%s: invalid device class\n", __func__); |
| 183 | WARN_ON(1); | 199 | WARN_ON(1); |
| 184 | } | 200 | } |
| 185 | mutex_unlock(&sysdev_drivers_lock); | 201 | mutex_unlock(&sysdev_drivers_lock); |
diff --git a/drivers/base/transport_class.c b/drivers/base/transport_class.c index cabd0edf2156..84997efdb23d 100644 --- a/drivers/base/transport_class.c +++ b/drivers/base/transport_class.c | |||
| @@ -66,7 +66,7 @@ EXPORT_SYMBOL_GPL(transport_class_unregister); | |||
| 66 | 66 | ||
| 67 | static int anon_transport_dummy_function(struct transport_container *tc, | 67 | static int anon_transport_dummy_function(struct transport_container *tc, |
| 68 | struct device *dev, | 68 | struct device *dev, |
| 69 | struct class_device *cdev) | 69 | struct device *cdev) |
| 70 | { | 70 | { |
| 71 | /* do nothing */ | 71 | /* do nothing */ |
| 72 | return 0; | 72 | return 0; |
| @@ -115,7 +115,7 @@ EXPORT_SYMBOL_GPL(anon_transport_class_unregister); | |||
| 115 | 115 | ||
| 116 | static int transport_setup_classdev(struct attribute_container *cont, | 116 | static int transport_setup_classdev(struct attribute_container *cont, |
| 117 | struct device *dev, | 117 | struct device *dev, |
| 118 | struct class_device *classdev) | 118 | struct device *classdev) |
| 119 | { | 119 | { |
| 120 | struct transport_class *tclass = class_to_transport_class(cont->class); | 120 | struct transport_class *tclass = class_to_transport_class(cont->class); |
| 121 | struct transport_container *tcont = attribute_container_to_transport_container(cont); | 121 | struct transport_container *tcont = attribute_container_to_transport_container(cont); |
| @@ -149,7 +149,7 @@ EXPORT_SYMBOL_GPL(transport_setup_device); | |||
| 149 | 149 | ||
| 150 | static int transport_add_class_device(struct attribute_container *cont, | 150 | static int transport_add_class_device(struct attribute_container *cont, |
| 151 | struct device *dev, | 151 | struct device *dev, |
| 152 | struct class_device *classdev) | 152 | struct device *classdev) |
| 153 | { | 153 | { |
| 154 | int error = attribute_container_add_class_device(classdev); | 154 | int error = attribute_container_add_class_device(classdev); |
| 155 | struct transport_container *tcont = | 155 | struct transport_container *tcont = |
| @@ -181,7 +181,7 @@ EXPORT_SYMBOL_GPL(transport_add_device); | |||
| 181 | 181 | ||
| 182 | static int transport_configure(struct attribute_container *cont, | 182 | static int transport_configure(struct attribute_container *cont, |
| 183 | struct device *dev, | 183 | struct device *dev, |
| 184 | struct class_device *cdev) | 184 | struct device *cdev) |
| 185 | { | 185 | { |
| 186 | struct transport_class *tclass = class_to_transport_class(cont->class); | 186 | struct transport_class *tclass = class_to_transport_class(cont->class); |
| 187 | struct transport_container *tcont = attribute_container_to_transport_container(cont); | 187 | struct transport_container *tcont = attribute_container_to_transport_container(cont); |
| @@ -212,7 +212,7 @@ EXPORT_SYMBOL_GPL(transport_configure_device); | |||
| 212 | 212 | ||
| 213 | static int transport_remove_classdev(struct attribute_container *cont, | 213 | static int transport_remove_classdev(struct attribute_container *cont, |
| 214 | struct device *dev, | 214 | struct device *dev, |
| 215 | struct class_device *classdev) | 215 | struct device *classdev) |
| 216 | { | 216 | { |
| 217 | struct transport_container *tcont = | 217 | struct transport_container *tcont = |
| 218 | attribute_container_to_transport_container(cont); | 218 | attribute_container_to_transport_container(cont); |
| @@ -251,12 +251,12 @@ EXPORT_SYMBOL_GPL(transport_remove_device); | |||
| 251 | 251 | ||
| 252 | static void transport_destroy_classdev(struct attribute_container *cont, | 252 | static void transport_destroy_classdev(struct attribute_container *cont, |
| 253 | struct device *dev, | 253 | struct device *dev, |
| 254 | struct class_device *classdev) | 254 | struct device *classdev) |
| 255 | { | 255 | { |
| 256 | struct transport_class *tclass = class_to_transport_class(cont->class); | 256 | struct transport_class *tclass = class_to_transport_class(cont->class); |
| 257 | 257 | ||
| 258 | if (tclass->remove != anon_transport_dummy_function) | 258 | if (tclass->remove != anon_transport_dummy_function) |
| 259 | class_device_put(classdev); | 259 | put_device(classdev); |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | 262 | ||
diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h index 8ea9dd1717a9..6540948d5176 100644 --- a/drivers/char/drm/drmP.h +++ b/drivers/char/drm/drmP.h | |||
| @@ -640,7 +640,6 @@ struct drm_head { | |||
| 640 | struct drm_device *dev; | 640 | struct drm_device *dev; |
| 641 | struct proc_dir_entry *dev_root; /**< proc directory entry */ | 641 | struct proc_dir_entry *dev_root; /**< proc directory entry */ |
| 642 | dev_t device; /**< Device number for mknod */ | 642 | dev_t device; /**< Device number for mknod */ |
| 643 | struct class_device *dev_class; | ||
| 644 | }; | 643 | }; |
| 645 | 644 | ||
| 646 | /** | 645 | /** |
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c index 349b6edc5794..662d60e44e9a 100644 --- a/drivers/char/hw_random/core.c +++ b/drivers/char/hw_random/core.c | |||
| @@ -238,11 +238,11 @@ static DEVICE_ATTR(rng_available, S_IRUGO, | |||
| 238 | NULL); | 238 | NULL); |
| 239 | 239 | ||
| 240 | 240 | ||
| 241 | static void unregister_miscdev(bool suspended) | 241 | static void unregister_miscdev(void) |
| 242 | { | 242 | { |
| 243 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_available); | 243 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_available); |
| 244 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current); | 244 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current); |
| 245 | __misc_deregister(&rng_miscdev, suspended); | 245 | misc_deregister(&rng_miscdev); |
| 246 | } | 246 | } |
| 247 | 247 | ||
| 248 | static int register_miscdev(void) | 248 | static int register_miscdev(void) |
| @@ -317,7 +317,7 @@ out: | |||
| 317 | } | 317 | } |
| 318 | EXPORT_SYMBOL_GPL(hwrng_register); | 318 | EXPORT_SYMBOL_GPL(hwrng_register); |
| 319 | 319 | ||
| 320 | void __hwrng_unregister(struct hwrng *rng, bool suspended) | 320 | void hwrng_unregister(struct hwrng *rng) |
| 321 | { | 321 | { |
| 322 | int err; | 322 | int err; |
| 323 | 323 | ||
| @@ -336,11 +336,11 @@ void __hwrng_unregister(struct hwrng *rng, bool suspended) | |||
| 336 | } | 336 | } |
| 337 | } | 337 | } |
| 338 | if (list_empty(&rng_list)) | 338 | if (list_empty(&rng_list)) |
| 339 | unregister_miscdev(suspended); | 339 | unregister_miscdev(); |
| 340 | 340 | ||
| 341 | mutex_unlock(&rng_mutex); | 341 | mutex_unlock(&rng_mutex); |
| 342 | } | 342 | } |
| 343 | EXPORT_SYMBOL_GPL(__hwrng_unregister); | 343 | EXPORT_SYMBOL_GPL(hwrng_unregister); |
| 344 | 344 | ||
| 345 | 345 | ||
| 346 | MODULE_DESCRIPTION("H/W Random Number Generator (RNG) driver"); | 346 | MODULE_DESCRIPTION("H/W Random Number Generator (RNG) driver"); |
diff --git a/drivers/char/misc.c b/drivers/char/misc.c index a39101feb2ed..4d058dadbfcc 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c | |||
| @@ -232,9 +232,8 @@ int misc_register(struct miscdevice * misc) | |||
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | /** | 234 | /** |
| 235 | * __misc_deregister - unregister a miscellaneous device | 235 | * misc_deregister - unregister a miscellaneous device |
| 236 | * @misc: device to unregister | 236 | * @misc: device to unregister |
| 237 | * @suspended: to be set if the function is used during suspend/resume | ||
| 238 | * | 237 | * |
| 239 | * Unregister a miscellaneous device that was previously | 238 | * Unregister a miscellaneous device that was previously |
| 240 | * successfully registered with misc_register(). Success | 239 | * successfully registered with misc_register(). Success |
| @@ -242,7 +241,7 @@ int misc_register(struct miscdevice * misc) | |||
| 242 | * indicates an error. | 241 | * indicates an error. |
| 243 | */ | 242 | */ |
| 244 | 243 | ||
| 245 | int __misc_deregister(struct miscdevice *misc, bool suspended) | 244 | int misc_deregister(struct miscdevice *misc) |
| 246 | { | 245 | { |
| 247 | int i = misc->minor; | 246 | int i = misc->minor; |
| 248 | 247 | ||
| @@ -251,11 +250,7 @@ int __misc_deregister(struct miscdevice *misc, bool suspended) | |||
| 251 | 250 | ||
| 252 | mutex_lock(&misc_mtx); | 251 | mutex_lock(&misc_mtx); |
| 253 | list_del(&misc->list); | 252 | list_del(&misc->list); |
| 254 | if (suspended) | 253 | device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); |
| 255 | destroy_suspended_device(misc_class, | ||
| 256 | MKDEV(MISC_MAJOR, misc->minor)); | ||
| 257 | else | ||
| 258 | device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); | ||
| 259 | if (i < DYNAMIC_MINORS && i>0) { | 254 | if (i < DYNAMIC_MINORS && i>0) { |
| 260 | misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); | 255 | misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); |
| 261 | } | 256 | } |
| @@ -264,7 +259,7 @@ int __misc_deregister(struct miscdevice *misc, bool suspended) | |||
| 264 | } | 259 | } |
| 265 | 260 | ||
| 266 | EXPORT_SYMBOL(misc_register); | 261 | EXPORT_SYMBOL(misc_register); |
| 267 | EXPORT_SYMBOL(__misc_deregister); | 262 | EXPORT_SYMBOL(misc_deregister); |
| 268 | 263 | ||
| 269 | static int __init misc_init(void) | 264 | static int __init misc_init(void) |
| 270 | { | 265 | { |
diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig index 05f02a326f1c..40ffd767647d 100644 --- a/drivers/firmware/Kconfig +++ b/drivers/firmware/Kconfig | |||
| @@ -93,4 +93,24 @@ config DMIID | |||
| 93 | information from userspace through /sys/class/dmi/id/ or if you want | 93 | information from userspace through /sys/class/dmi/id/ or if you want |
| 94 | DMI-based module auto-loading. | 94 | DMI-based module auto-loading. |
| 95 | 95 | ||
| 96 | config ISCSI_IBFT_FIND | ||
| 97 | bool "iSCSI Boot Firmware Table Attributes" | ||
| 98 | depends on X86 | ||
| 99 | default n | ||
| 100 | help | ||
| 101 | This option enables the kernel to find the region of memory | ||
| 102 | in which the ISCSI Boot Firmware Table (iBFT) resides. This | ||
| 103 | is necessary for iSCSI Boot Firmware Table Attributes module to work | ||
| 104 | properly. | ||
| 105 | |||
| 106 | config ISCSI_IBFT | ||
| 107 | tristate "iSCSI Boot Firmware Table Attributes module" | ||
| 108 | depends on ISCSI_IBFT_FIND | ||
| 109 | default n | ||
| 110 | help | ||
| 111 | This option enables support for detection and exposing of iSCSI | ||
| 112 | Boot Firmware Table (iBFT) via sysfs to userspace. If you wish to | ||
| 113 | detect iSCSI boot parameters dynamically during system boot, say Y. | ||
| 114 | Otherwise, say N. | ||
| 115 | |||
| 96 | endmenu | 116 | endmenu |
diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile index 8d4ebc805a50..4c9147154df8 100644 --- a/drivers/firmware/Makefile +++ b/drivers/firmware/Makefile | |||
| @@ -8,3 +8,5 @@ obj-$(CONFIG_EFI_PCDP) += pcdp.o | |||
| 8 | obj-$(CONFIG_DELL_RBU) += dell_rbu.o | 8 | obj-$(CONFIG_DELL_RBU) += dell_rbu.o |
| 9 | obj-$(CONFIG_DCDBAS) += dcdbas.o | 9 | obj-$(CONFIG_DCDBAS) += dcdbas.o |
| 10 | obj-$(CONFIG_DMIID) += dmi-id.o | 10 | obj-$(CONFIG_DMIID) += dmi-id.o |
| 11 | obj-$(CONFIG_ISCSI_IBFT_FIND) += iscsi_ibft_find.o | ||
| 12 | obj-$(CONFIG_ISCSI_IBFT) += iscsi_ibft.o | ||
diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c new file mode 100644 index 000000000000..8024e3bfd877 --- /dev/null +++ b/drivers/firmware/iscsi_ibft.c | |||
| @@ -0,0 +1,982 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2007 Red Hat, Inc. | ||
| 3 | * by Peter Jones <pjones@redhat.com> | ||
| 4 | * Copyright 2008 IBM, Inc. | ||
| 5 | * by Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 6 | * Copyright 2008 | ||
| 7 | * by Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 8 | * | ||
| 9 | * This code exposes the iSCSI Boot Format Table to userland via sysfs. | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License v2.0 as published by | ||
| 13 | * the Free Software Foundation | ||
| 14 | * | ||
| 15 | * This program is distributed in the hope that it will be useful, | ||
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | * GNU General Public License for more details. | ||
| 19 | * | ||
| 20 | * Changelog: | ||
| 21 | * | ||
| 22 | * 14 Mar 2008 - Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 23 | * Updated comments and copyrights. (v0.4.9) | ||
| 24 | * | ||
| 25 | * 11 Feb 2008 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 26 | * Converted to using ibft_addr. (v0.4.8) | ||
| 27 | * | ||
| 28 | * 8 Feb 2008 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 29 | * Combined two functions in one: reserve_ibft_region. (v0.4.7) | ||
| 30 | * | ||
| 31 | * 30 Jan 2008 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 32 | * Added logic to handle IPv6 addresses. (v0.4.6) | ||
| 33 | * | ||
| 34 | * 25 Jan 2008 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 35 | * Added logic to handle badly not-to-spec iBFT. (v0.4.5) | ||
| 36 | * | ||
| 37 | * 4 Jan 2008 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 38 | * Added __init to function declarations. (v0.4.4) | ||
| 39 | * | ||
| 40 | * 21 Dec 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 41 | * Updated kobject registration, combined unregister functions in one | ||
| 42 | * and code and style cleanup. (v0.4.3) | ||
| 43 | * | ||
| 44 | * 5 Dec 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 45 | * Added end-markers to enums and re-organized kobject registration. (v0.4.2) | ||
| 46 | * | ||
| 47 | * 4 Dec 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 48 | * Created 'device' sysfs link to the NIC and style cleanup. (v0.4.1) | ||
| 49 | * | ||
| 50 | * 28 Nov 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 51 | * Added sysfs-ibft documentation, moved 'find_ibft' function to | ||
| 52 | * in its own file and added text attributes for every struct field. (v0.4) | ||
| 53 | * | ||
| 54 | * 21 Nov 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 55 | * Added text attributes emulating OpenFirmware /proc/device-tree naming. | ||
| 56 | * Removed binary /sysfs interface (v0.3) | ||
| 57 | * | ||
| 58 | * 29 Aug 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 59 | * Added functionality in setup.c to reserve iBFT region. (v0.2) | ||
| 60 | * | ||
| 61 | * 27 Aug 2007 - Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 62 | * First version exposing iBFT data via a binary /sysfs. (v0.1) | ||
| 63 | * | ||
| 64 | */ | ||
| 65 | |||
| 66 | |||
| 67 | #include <linux/blkdev.h> | ||
| 68 | #include <linux/capability.h> | ||
| 69 | #include <linux/ctype.h> | ||
| 70 | #include <linux/device.h> | ||
| 71 | #include <linux/err.h> | ||
| 72 | #include <linux/init.h> | ||
| 73 | #include <linux/iscsi_ibft.h> | ||
| 74 | #include <linux/limits.h> | ||
| 75 | #include <linux/module.h> | ||
| 76 | #include <linux/pci.h> | ||
| 77 | #include <linux/slab.h> | ||
| 78 | #include <linux/stat.h> | ||
| 79 | #include <linux/string.h> | ||
| 80 | #include <linux/types.h> | ||
| 81 | |||
| 82 | #define IBFT_ISCSI_VERSION "0.4.9" | ||
| 83 | #define IBFT_ISCSI_DATE "2008-Mar-14" | ||
| 84 | |||
| 85 | MODULE_AUTHOR("Peter Jones <pjones@redhat.com> and \ | ||
| 86 | Konrad Rzeszutek <ketuzsezr@darnok.org>"); | ||
| 87 | MODULE_DESCRIPTION("sysfs interface to BIOS iBFT information"); | ||
| 88 | MODULE_LICENSE("GPL"); | ||
| 89 | MODULE_VERSION(IBFT_ISCSI_VERSION); | ||
| 90 | |||
| 91 | struct ibft_hdr { | ||
| 92 | u8 id; | ||
| 93 | u8 version; | ||
| 94 | u16 length; | ||
| 95 | u8 index; | ||
| 96 | u8 flags; | ||
| 97 | } __attribute__((__packed__)); | ||
| 98 | |||
| 99 | struct ibft_control { | ||
| 100 | struct ibft_hdr hdr; | ||
| 101 | u16 extensions; | ||
| 102 | u16 initiator_off; | ||
| 103 | u16 nic0_off; | ||
| 104 | u16 tgt0_off; | ||
| 105 | u16 nic1_off; | ||
| 106 | u16 tgt1_off; | ||
| 107 | } __attribute__((__packed__)); | ||
| 108 | |||
| 109 | struct ibft_initiator { | ||
| 110 | struct ibft_hdr hdr; | ||
| 111 | char isns_server[16]; | ||
| 112 | char slp_server[16]; | ||
| 113 | char pri_radius_server[16]; | ||
| 114 | char sec_radius_server[16]; | ||
| 115 | u16 initiator_name_len; | ||
| 116 | u16 initiator_name_off; | ||
| 117 | } __attribute__((__packed__)); | ||
| 118 | |||
| 119 | struct ibft_nic { | ||
| 120 | struct ibft_hdr hdr; | ||
| 121 | char ip_addr[16]; | ||
| 122 | u8 subnet_mask_prefix; | ||
| 123 | u8 origin; | ||
| 124 | char gateway[16]; | ||
| 125 | char primary_dns[16]; | ||
| 126 | char secondary_dns[16]; | ||
| 127 | char dhcp[16]; | ||
| 128 | u16 vlan; | ||
| 129 | char mac[6]; | ||
| 130 | u16 pci_bdf; | ||
| 131 | u16 hostname_len; | ||
| 132 | u16 hostname_off; | ||
| 133 | } __attribute__((__packed__)); | ||
| 134 | |||
| 135 | struct ibft_tgt { | ||
| 136 | struct ibft_hdr hdr; | ||
| 137 | char ip_addr[16]; | ||
| 138 | u16 port; | ||
| 139 | char lun[8]; | ||
| 140 | u8 chap_type; | ||
| 141 | u8 nic_assoc; | ||
| 142 | u16 tgt_name_len; | ||
| 143 | u16 tgt_name_off; | ||
| 144 | u16 chap_name_len; | ||
| 145 | u16 chap_name_off; | ||
| 146 | u16 chap_secret_len; | ||
| 147 | u16 chap_secret_off; | ||
| 148 | u16 rev_chap_name_len; | ||
| 149 | u16 rev_chap_name_off; | ||
| 150 | u16 rev_chap_secret_len; | ||
| 151 | u16 rev_chap_secret_off; | ||
| 152 | } __attribute__((__packed__)); | ||
| 153 | |||
| 154 | /* | ||
| 155 | * The kobject different types and its names. | ||
| 156 | * | ||
| 157 | */ | ||
| 158 | enum ibft_id { | ||
| 159 | id_reserved = 0, /* We don't support. */ | ||
| 160 | id_control = 1, /* Should show up only once and is not exported. */ | ||
| 161 | id_initiator = 2, | ||
| 162 | id_nic = 3, | ||
| 163 | id_target = 4, | ||
| 164 | id_extensions = 5, /* We don't support. */ | ||
| 165 | id_end_marker, | ||
| 166 | }; | ||
| 167 | |||
| 168 | /* | ||
| 169 | * We do not support the other types, hence the usage of NULL. | ||
| 170 | * This maps to the enum ibft_id. | ||
| 171 | */ | ||
| 172 | static const char *ibft_id_names[] = | ||
| 173 | {NULL, NULL, "initiator", "ethernet%d", "target%d", NULL, NULL}; | ||
| 174 | |||
| 175 | /* | ||
| 176 | * The text attributes names for each of the kobjects. | ||
| 177 | */ | ||
| 178 | enum ibft_eth_properties_enum { | ||
| 179 | ibft_eth_index, | ||
| 180 | ibft_eth_flags, | ||
| 181 | ibft_eth_ip_addr, | ||
| 182 | ibft_eth_subnet_mask, | ||
| 183 | ibft_eth_origin, | ||
| 184 | ibft_eth_gateway, | ||
| 185 | ibft_eth_primary_dns, | ||
| 186 | ibft_eth_secondary_dns, | ||
| 187 | ibft_eth_dhcp, | ||
| 188 | ibft_eth_vlan, | ||
| 189 | ibft_eth_mac, | ||
| 190 | /* ibft_eth_pci_bdf - this is replaced by link to the device itself. */ | ||
| 191 | ibft_eth_hostname, | ||
| 192 | ibft_eth_end_marker, | ||
| 193 | }; | ||
| 194 | |||
| 195 | static const char *ibft_eth_properties[] = | ||
| 196 | {"index", "flags", "ip-addr", "subnet-mask", "origin", "gateway", | ||
| 197 | "primary-dns", "secondary-dns", "dhcp", "vlan", "mac", "hostname", | ||
| 198 | NULL}; | ||
| 199 | |||
| 200 | enum ibft_tgt_properties_enum { | ||
| 201 | ibft_tgt_index, | ||
| 202 | ibft_tgt_flags, | ||
| 203 | ibft_tgt_ip_addr, | ||
| 204 | ibft_tgt_port, | ||
| 205 | ibft_tgt_lun, | ||
| 206 | ibft_tgt_chap_type, | ||
| 207 | ibft_tgt_nic_assoc, | ||
| 208 | ibft_tgt_name, | ||
| 209 | ibft_tgt_chap_name, | ||
| 210 | ibft_tgt_chap_secret, | ||
| 211 | ibft_tgt_rev_chap_name, | ||
| 212 | ibft_tgt_rev_chap_secret, | ||
| 213 | ibft_tgt_end_marker, | ||
| 214 | }; | ||
| 215 | |||
| 216 | static const char *ibft_tgt_properties[] = | ||
| 217 | {"index", "flags", "ip-addr", "port", "lun", "chap-type", "nic-assoc", | ||
| 218 | "target-name", "chap-name", "chap-secret", "rev-chap-name", | ||
| 219 | "rev-chap-name-secret", NULL}; | ||
| 220 | |||
| 221 | enum ibft_initiator_properties_enum { | ||
| 222 | ibft_init_index, | ||
| 223 | ibft_init_flags, | ||
| 224 | ibft_init_isns_server, | ||
| 225 | ibft_init_slp_server, | ||
| 226 | ibft_init_pri_radius_server, | ||
| 227 | ibft_init_sec_radius_server, | ||
| 228 | ibft_init_initiator_name, | ||
| 229 | ibft_init_end_marker, | ||
| 230 | }; | ||
| 231 | |||
| 232 | static const char *ibft_initiator_properties[] = | ||
| 233 | {"index", "flags", "isns-server", "slp-server", "pri-radius-server", | ||
| 234 | "sec-radius-server", "initiator-name", NULL}; | ||
| 235 | |||
| 236 | /* | ||
| 237 | * The kobject and attribute structures. | ||
| 238 | */ | ||
| 239 | |||
| 240 | struct ibft_kobject { | ||
| 241 | struct ibft_table_header *header; | ||
| 242 | union { | ||
| 243 | struct ibft_initiator *initiator; | ||
| 244 | struct ibft_nic *nic; | ||
| 245 | struct ibft_tgt *tgt; | ||
| 246 | struct ibft_hdr *hdr; | ||
| 247 | }; | ||
| 248 | struct kobject kobj; | ||
| 249 | struct list_head node; | ||
| 250 | }; | ||
| 251 | |||
| 252 | struct ibft_attribute { | ||
| 253 | struct attribute attr; | ||
| 254 | ssize_t (*show) (struct ibft_kobject *entry, | ||
| 255 | struct ibft_attribute *attr, char *buf); | ||
| 256 | union { | ||
| 257 | struct ibft_initiator *initiator; | ||
| 258 | struct ibft_nic *nic; | ||
| 259 | struct ibft_tgt *tgt; | ||
| 260 | struct ibft_hdr *hdr; | ||
| 261 | }; | ||
| 262 | struct kobject *kobj; | ||
| 263 | int type; /* The enum of the type. This can be any value of: | ||
| 264 | ibft_eth_properties_enum, ibft_tgt_properties_enum, | ||
| 265 | or ibft_initiator_properties_enum. */ | ||
| 266 | struct list_head node; | ||
| 267 | }; | ||
| 268 | |||
| 269 | static LIST_HEAD(ibft_attr_list); | ||
| 270 | static LIST_HEAD(ibft_kobject_list); | ||
| 271 | |||
| 272 | static const char nulls[16]; | ||
| 273 | |||
| 274 | /* | ||
| 275 | * Helper functions to parse data properly. | ||
| 276 | */ | ||
| 277 | static ssize_t sprintf_ipaddr(char *buf, u8 *ip) | ||
| 278 | { | ||
| 279 | char *str = buf; | ||
| 280 | |||
| 281 | if (ip[0] == 0 && ip[1] == 0 && ip[2] == 0 && ip[3] == 0 && | ||
| 282 | ip[4] == 0 && ip[5] == 0 && ip[6] == 0 && ip[7] == 0 && | ||
| 283 | ip[8] == 0 && ip[9] == 0 && ip[10] == 0xff && ip[11] == 0xff) { | ||
| 284 | /* | ||
| 285 | * IPV4 | ||
| 286 | */ | ||
| 287 | str += sprintf(buf, NIPQUAD_FMT, ip[12], | ||
| 288 | ip[13], ip[14], ip[15]); | ||
| 289 | } else { | ||
| 290 | /* | ||
| 291 | * IPv6 | ||
| 292 | */ | ||
| 293 | str += sprintf(str, NIP6_FMT, ntohs(ip[0]), ntohs(ip[1]), | ||
| 294 | ntohs(ip[2]), ntohs(ip[3]), ntohs(ip[4]), | ||
| 295 | ntohs(ip[5]), ntohs(ip[6]), ntohs(ip[7])); | ||
| 296 | } | ||
| 297 | str += sprintf(str, "\n"); | ||
| 298 | return str - buf; | ||
| 299 | } | ||
| 300 | |||
| 301 | static ssize_t sprintf_string(char *str, int len, char *buf) | ||
| 302 | { | ||
| 303 | return sprintf(str, "%.*s\n", len, buf); | ||
| 304 | } | ||
| 305 | |||
| 306 | /* | ||
| 307 | * Helper function to verify the IBFT header. | ||
| 308 | */ | ||
| 309 | static int ibft_verify_hdr(char *t, struct ibft_hdr *hdr, int id, int length) | ||
| 310 | { | ||
| 311 | if (hdr->id != id) { | ||
| 312 | printk(KERN_ERR "iBFT error: We expected the " \ | ||
| 313 | "field header.id to have %d but " \ | ||
| 314 | "found %d instead!\n", id, hdr->id); | ||
| 315 | return -ENODEV; | ||
| 316 | } | ||
| 317 | if (hdr->length != length) { | ||
| 318 | printk(KERN_ERR "iBFT error: We expected the " \ | ||
| 319 | "field header.length to have %d but " \ | ||
| 320 | "found %d instead!\n", length, hdr->length); | ||
| 321 | return -ENODEV; | ||
| 322 | } | ||
| 323 | |||
| 324 | return 0; | ||
| 325 | } | ||
| 326 | |||
| 327 | static void ibft_release(struct kobject *kobj) | ||
| 328 | { | ||
| 329 | struct ibft_kobject *ibft = | ||
| 330 | container_of(kobj, struct ibft_kobject, kobj); | ||
| 331 | kfree(ibft); | ||
| 332 | } | ||
| 333 | |||
| 334 | /* | ||
| 335 | * Routines for parsing the iBFT data to be human readable. | ||
| 336 | */ | ||
| 337 | ssize_t ibft_attr_show_initiator(struct ibft_kobject *entry, | ||
| 338 | struct ibft_attribute *attr, | ||
| 339 | char *buf) | ||
| 340 | { | ||
| 341 | struct ibft_initiator *initiator = entry->initiator; | ||
| 342 | void *ibft_loc = entry->header; | ||
| 343 | char *str = buf; | ||
| 344 | |||
| 345 | if (!initiator) | ||
| 346 | return 0; | ||
| 347 | |||
| 348 | switch (attr->type) { | ||
| 349 | case ibft_init_index: | ||
| 350 | str += sprintf(str, "%d\n", initiator->hdr.index); | ||
| 351 | break; | ||
| 352 | case ibft_init_flags: | ||
| 353 | str += sprintf(str, "%d\n", initiator->hdr.flags); | ||
| 354 | break; | ||
| 355 | case ibft_init_isns_server: | ||
| 356 | str += sprintf_ipaddr(str, initiator->isns_server); | ||
| 357 | break; | ||
| 358 | case ibft_init_slp_server: | ||
| 359 | str += sprintf_ipaddr(str, initiator->slp_server); | ||
| 360 | break; | ||
| 361 | case ibft_init_pri_radius_server: | ||
| 362 | str += sprintf_ipaddr(str, initiator->pri_radius_server); | ||
| 363 | break; | ||
| 364 | case ibft_init_sec_radius_server: | ||
| 365 | str += sprintf_ipaddr(str, initiator->sec_radius_server); | ||
| 366 | break; | ||
| 367 | case ibft_init_initiator_name: | ||
| 368 | str += sprintf_string(str, initiator->initiator_name_len, | ||
| 369 | (char *)ibft_loc + | ||
| 370 | initiator->initiator_name_off); | ||
| 371 | break; | ||
| 372 | default: | ||
| 373 | break; | ||
| 374 | } | ||
| 375 | |||
| 376 | return str - buf; | ||
| 377 | } | ||
| 378 | |||
| 379 | ssize_t ibft_attr_show_nic(struct ibft_kobject *entry, | ||
| 380 | struct ibft_attribute *attr, | ||
| 381 | char *buf) | ||
| 382 | { | ||
| 383 | struct ibft_nic *nic = entry->nic; | ||
| 384 | void *ibft_loc = entry->header; | ||
| 385 | char *str = buf; | ||
| 386 | char *mac; | ||
| 387 | int val; | ||
| 388 | |||
| 389 | if (!nic) | ||
| 390 | return 0; | ||
| 391 | |||
| 392 | switch (attr->type) { | ||
| 393 | case ibft_eth_index: | ||
| 394 | str += sprintf(str, "%d\n", nic->hdr.index); | ||
| 395 | break; | ||
| 396 | case ibft_eth_flags: | ||
| 397 | str += sprintf(str, "%d\n", nic->hdr.flags); | ||
| 398 | break; | ||
| 399 | case ibft_eth_ip_addr: | ||
| 400 | str += sprintf_ipaddr(str, nic->ip_addr); | ||
| 401 | break; | ||
| 402 | case ibft_eth_subnet_mask: | ||
| 403 | val = ~((1 << (32-nic->subnet_mask_prefix))-1); | ||
| 404 | str += sprintf(str, NIPQUAD_FMT, | ||
| 405 | (u8)(val >> 24), (u8)(val >> 16), | ||
| 406 | (u8)(val >> 8), (u8)(val)); | ||
| 407 | break; | ||
| 408 | case ibft_eth_origin: | ||
| 409 | str += sprintf(str, "%d\n", nic->origin); | ||
| 410 | break; | ||
| 411 | case ibft_eth_gateway: | ||
| 412 | str += sprintf_ipaddr(str, nic->gateway); | ||
| 413 | break; | ||
| 414 | case ibft_eth_primary_dns: | ||
| 415 | str += sprintf_ipaddr(str, nic->primary_dns); | ||
| 416 | break; | ||
| 417 | case ibft_eth_secondary_dns: | ||
| 418 | str += sprintf_ipaddr(str, nic->secondary_dns); | ||
| 419 | break; | ||
| 420 | case ibft_eth_dhcp: | ||
| 421 | str += sprintf_ipaddr(str, nic->dhcp); | ||
| 422 | break; | ||
| 423 | case ibft_eth_vlan: | ||
| 424 | str += sprintf(str, "%d\n", nic->vlan); | ||
| 425 | break; | ||
| 426 | case ibft_eth_mac: | ||
| 427 | mac = nic->mac; | ||
| 428 | str += sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x\n", | ||
| 429 | (u8)mac[0], (u8)mac[1], (u8)mac[2], | ||
| 430 | (u8)mac[3], (u8)mac[4], (u8)mac[5]); | ||
| 431 | break; | ||
| 432 | case ibft_eth_hostname: | ||
| 433 | str += sprintf_string(str, nic->hostname_len, | ||
| 434 | (char *)ibft_loc + nic->hostname_off); | ||
| 435 | break; | ||
| 436 | default: | ||
| 437 | break; | ||
| 438 | } | ||
| 439 | |||
| 440 | return str - buf; | ||
| 441 | }; | ||
| 442 | |||
| 443 | ssize_t ibft_attr_show_target(struct ibft_kobject *entry, | ||
| 444 | struct ibft_attribute *attr, | ||
| 445 | char *buf) | ||
| 446 | { | ||
| 447 | struct ibft_tgt *tgt = entry->tgt; | ||
| 448 | void *ibft_loc = entry->header; | ||
| 449 | char *str = buf; | ||
| 450 | int i; | ||
| 451 | |||
| 452 | if (!tgt) | ||
| 453 | return 0; | ||
| 454 | |||
| 455 | switch (attr->type) { | ||
| 456 | case ibft_tgt_index: | ||
| 457 | str += sprintf(str, "%d\n", tgt->hdr.index); | ||
| 458 | break; | ||
| 459 | case ibft_tgt_flags: | ||
| 460 | str += sprintf(str, "%d\n", tgt->hdr.flags); | ||
| 461 | break; | ||
| 462 | case ibft_tgt_ip_addr: | ||
| 463 | str += sprintf_ipaddr(str, tgt->ip_addr); | ||
| 464 | break; | ||
| 465 | case ibft_tgt_port: | ||
| 466 | str += sprintf(str, "%d\n", tgt->port); | ||
| 467 | break; | ||
| 468 | case ibft_tgt_lun: | ||
| 469 | for (i = 0; i < 8; i++) | ||
| 470 | str += sprintf(str, "%x", (u8)tgt->lun[i]); | ||
| 471 | str += sprintf(str, "\n"); | ||
| 472 | break; | ||
| 473 | case ibft_tgt_nic_assoc: | ||
| 474 | str += sprintf(str, "%d\n", tgt->nic_assoc); | ||
| 475 | break; | ||
| 476 | case ibft_tgt_chap_type: | ||
| 477 | str += sprintf(str, "%d\n", tgt->chap_type); | ||
| 478 | break; | ||
| 479 | case ibft_tgt_name: | ||
| 480 | str += sprintf_string(str, tgt->tgt_name_len, | ||
| 481 | (char *)ibft_loc + tgt->tgt_name_off); | ||
| 482 | break; | ||
| 483 | case ibft_tgt_chap_name: | ||
| 484 | str += sprintf_string(str, tgt->chap_name_len, | ||
| 485 | (char *)ibft_loc + tgt->chap_name_off); | ||
| 486 | break; | ||
| 487 | case ibft_tgt_chap_secret: | ||
| 488 | str += sprintf_string(str, tgt->chap_secret_len, | ||
| 489 | (char *)ibft_loc + tgt->chap_secret_off); | ||
| 490 | break; | ||
| 491 | case ibft_tgt_rev_chap_name: | ||
| 492 | str += sprintf_string(str, tgt->rev_chap_name_len, | ||
| 493 | (char *)ibft_loc + | ||
| 494 | tgt->rev_chap_name_off); | ||
| 495 | break; | ||
| 496 | case ibft_tgt_rev_chap_secret: | ||
| 497 | str += sprintf_string(str, tgt->rev_chap_secret_len, | ||
| 498 | (char *)ibft_loc + | ||
| 499 | tgt->rev_chap_secret_off); | ||
| 500 | break; | ||
| 501 | default: | ||
| 502 | break; | ||
| 503 | } | ||
| 504 | |||
| 505 | return str - buf; | ||
| 506 | } | ||
| 507 | |||
| 508 | /* | ||
| 509 | * The routine called for all sysfs attributes. | ||
| 510 | */ | ||
| 511 | static ssize_t ibft_show_attribute(struct kobject *kobj, | ||
| 512 | struct attribute *attr, | ||
| 513 | char *buf) | ||
| 514 | { | ||
| 515 | struct ibft_kobject *dev = | ||
| 516 | container_of(kobj, struct ibft_kobject, kobj); | ||
| 517 | struct ibft_attribute *ibft_attr = | ||
| 518 | container_of(attr, struct ibft_attribute, attr); | ||
| 519 | ssize_t ret = -EIO; | ||
| 520 | char *str = buf; | ||
| 521 | |||
| 522 | if (!capable(CAP_SYS_ADMIN)) | ||
| 523 | return -EACCES; | ||
| 524 | |||
| 525 | if (ibft_attr->show) | ||
| 526 | ret = ibft_attr->show(dev, ibft_attr, str); | ||
| 527 | |||
| 528 | return ret; | ||
| 529 | } | ||
| 530 | |||
| 531 | static struct sysfs_ops ibft_attr_ops = { | ||
| 532 | .show = ibft_show_attribute, | ||
| 533 | }; | ||
| 534 | |||
| 535 | static struct kobj_type ibft_ktype = { | ||
| 536 | .release = ibft_release, | ||
| 537 | .sysfs_ops = &ibft_attr_ops, | ||
| 538 | }; | ||
| 539 | |||
| 540 | static struct kset *ibft_kset; | ||
| 541 | |||
| 542 | static int __init ibft_check_device(void) | ||
| 543 | { | ||
| 544 | int len; | ||
| 545 | u8 *pos; | ||
| 546 | u8 csum = 0; | ||
| 547 | |||
| 548 | len = ibft_addr->length; | ||
| 549 | |||
| 550 | /* Sanity checking of iBFT. */ | ||
| 551 | if (ibft_addr->revision != 1) { | ||
| 552 | printk(KERN_ERR "iBFT module supports only revision 1, " \ | ||
| 553 | "while this is %d.\n", ibft_addr->revision); | ||
| 554 | return -ENOENT; | ||
| 555 | } | ||
| 556 | for (pos = (u8 *)ibft_addr; pos < (u8 *)ibft_addr + len; pos++) | ||
| 557 | csum += *pos; | ||
| 558 | |||
| 559 | if (csum) { | ||
| 560 | printk(KERN_ERR "iBFT has incorrect checksum (0x%x)!\n", csum); | ||
| 561 | return -ENOENT; | ||
| 562 | } | ||
| 563 | |||
| 564 | return 0; | ||
| 565 | } | ||
| 566 | |||
| 567 | /* | ||
| 568 | * Helper function for ibft_register_kobjects. | ||
| 569 | */ | ||
| 570 | static int __init ibft_create_kobject(struct ibft_table_header *header, | ||
| 571 | struct ibft_hdr *hdr, | ||
| 572 | struct list_head *list) | ||
| 573 | { | ||
| 574 | struct ibft_kobject *ibft_kobj = NULL; | ||
| 575 | struct ibft_nic *nic = (struct ibft_nic *)hdr; | ||
| 576 | struct pci_dev *pci_dev; | ||
| 577 | int rc = 0; | ||
| 578 | |||
| 579 | ibft_kobj = kzalloc(sizeof(*ibft_kobj), GFP_KERNEL); | ||
| 580 | if (!ibft_kobj) | ||
| 581 | return -ENOMEM; | ||
| 582 | |||
| 583 | ibft_kobj->header = header; | ||
| 584 | ibft_kobj->hdr = hdr; | ||
| 585 | |||
| 586 | switch (hdr->id) { | ||
| 587 | case id_initiator: | ||
| 588 | rc = ibft_verify_hdr("initiator", hdr, id_initiator, | ||
| 589 | sizeof(*ibft_kobj->initiator)); | ||
| 590 | break; | ||
| 591 | case id_nic: | ||
| 592 | rc = ibft_verify_hdr("ethernet", hdr, id_nic, | ||
| 593 | sizeof(*ibft_kobj->nic)); | ||
| 594 | break; | ||
| 595 | case id_target: | ||
| 596 | rc = ibft_verify_hdr("target", hdr, id_target, | ||
| 597 | sizeof(*ibft_kobj->tgt)); | ||
| 598 | break; | ||
| 599 | case id_reserved: | ||
| 600 | case id_control: | ||
| 601 | case id_extensions: | ||
| 602 | /* Fields which we don't support. Ignore them */ | ||
| 603 | rc = 1; | ||
| 604 | break; | ||
| 605 | default: | ||
| 606 | printk(KERN_ERR "iBFT has unknown structure type (%d). " \ | ||
| 607 | "Report this bug to %.6s!\n", hdr->id, | ||
| 608 | header->oem_id); | ||
| 609 | rc = 1; | ||
| 610 | break; | ||
| 611 | } | ||
| 612 | |||
| 613 | if (rc) { | ||
| 614 | /* Skip adding this kobject, but exit with non-fatal error. */ | ||
| 615 | kfree(ibft_kobj); | ||
| 616 | goto out_invalid_struct; | ||
| 617 | } | ||
| 618 | |||
| 619 | ibft_kobj->kobj.kset = ibft_kset; | ||
| 620 | |||
| 621 | rc = kobject_init_and_add(&ibft_kobj->kobj, &ibft_ktype, | ||
| 622 | NULL, ibft_id_names[hdr->id], hdr->index); | ||
| 623 | |||
| 624 | if (rc) { | ||
| 625 | kfree(ibft_kobj); | ||
| 626 | goto out; | ||
| 627 | } | ||
| 628 | |||
| 629 | kobject_uevent(&ibft_kobj->kobj, KOBJ_ADD); | ||
| 630 | |||
| 631 | if (hdr->id == id_nic) { | ||
| 632 | /* | ||
| 633 | * We don't search for the device in other domains than | ||
| 634 | * zero. This is because on x86 platforms the BIOS | ||
| 635 | * executes only devices which are in domain 0. Furthermore, the | ||
| 636 | * iBFT spec doesn't have a domain id field :-( | ||
| 637 | */ | ||
| 638 | pci_dev = pci_get_bus_and_slot((nic->pci_bdf & 0xff00) >> 8, | ||
| 639 | (nic->pci_bdf & 0xff)); | ||
| 640 | if (pci_dev) { | ||
| 641 | rc = sysfs_create_link(&ibft_kobj->kobj, | ||
| 642 | &pci_dev->dev.kobj, "device"); | ||
| 643 | pci_dev_put(pci_dev); | ||
| 644 | } | ||
| 645 | } | ||
| 646 | |||
| 647 | /* Nothing broke so lets add it to the list. */ | ||
| 648 | list_add_tail(&ibft_kobj->node, list); | ||
| 649 | out: | ||
| 650 | return rc; | ||
| 651 | out_invalid_struct: | ||
| 652 | /* Unsupported structs are skipped. */ | ||
| 653 | return 0; | ||
| 654 | } | ||
| 655 | |||
| 656 | /* | ||
| 657 | * Scan the IBFT table structure for the NIC and Target fields. When | ||
| 658 | * found add them on the passed-in list. We do not support the other | ||
| 659 | * fields at this point, so they are skipped. | ||
| 660 | */ | ||
| 661 | static int __init ibft_register_kobjects(struct ibft_table_header *header, | ||
| 662 | struct list_head *list) | ||
| 663 | { | ||
| 664 | struct ibft_control *control = NULL; | ||
| 665 | void *ptr, *end; | ||
| 666 | int rc = 0; | ||
| 667 | u16 offset; | ||
| 668 | u16 eot_offset; | ||
| 669 | |||
| 670 | control = (void *)header + sizeof(*header); | ||
| 671 | end = (void *)control + control->hdr.length; | ||
| 672 | eot_offset = (void *)header + header->length - | ||
| 673 | (void *)control - sizeof(*header); | ||
| 674 | rc = ibft_verify_hdr("control", (struct ibft_hdr *)control, id_control, | ||
| 675 | sizeof(*control)); | ||
| 676 | |||
| 677 | /* iBFT table safety checking */ | ||
| 678 | rc |= ((control->hdr.index) ? -ENODEV : 0); | ||
| 679 | if (rc) { | ||
| 680 | printk(KERN_ERR "iBFT error: Control header is invalid!\n"); | ||
| 681 | return rc; | ||
| 682 | } | ||
| 683 | for (ptr = &control->initiator_off; ptr < end; ptr += sizeof(u16)) { | ||
| 684 | offset = *(u16 *)ptr; | ||
| 685 | if (offset && offset < header->length && offset < eot_offset) { | ||
| 686 | rc = ibft_create_kobject(header, | ||
| 687 | (void *)header + offset, | ||
| 688 | list); | ||
| 689 | if (rc) | ||
| 690 | break; | ||
| 691 | } | ||
| 692 | } | ||
| 693 | |||
| 694 | return rc; | ||
| 695 | } | ||
| 696 | |||
| 697 | static void ibft_unregister(struct list_head *attr_list, | ||
| 698 | struct list_head *kobj_list) | ||
| 699 | { | ||
| 700 | struct ibft_kobject *data = NULL, *n; | ||
| 701 | struct ibft_attribute *attr = NULL, *m; | ||
| 702 | |||
| 703 | list_for_each_entry_safe(attr, m, attr_list, node) { | ||
| 704 | sysfs_remove_file(attr->kobj, &attr->attr); | ||
| 705 | list_del(&attr->node); | ||
| 706 | kfree(attr); | ||
| 707 | }; | ||
| 708 | list_del_init(attr_list); | ||
| 709 | |||
| 710 | list_for_each_entry_safe(data, n, kobj_list, node) { | ||
| 711 | list_del(&data->node); | ||
| 712 | if (data->hdr->id == id_nic) | ||
| 713 | sysfs_remove_link(&data->kobj, "device"); | ||
| 714 | kobject_put(&data->kobj); | ||
| 715 | }; | ||
| 716 | list_del_init(kobj_list); | ||
| 717 | } | ||
| 718 | |||
| 719 | static int __init ibft_create_attribute(struct ibft_kobject *kobj_data, | ||
| 720 | int type, | ||
| 721 | const char *name, | ||
| 722 | ssize_t (*show)(struct ibft_kobject *, | ||
| 723 | struct ibft_attribute*, | ||
| 724 | char *buf), | ||
| 725 | struct list_head *list) | ||
| 726 | { | ||
| 727 | struct ibft_attribute *attr = NULL; | ||
| 728 | struct ibft_hdr *hdr = kobj_data->hdr; | ||
| 729 | |||
| 730 | attr = kmalloc(sizeof(*attr), GFP_KERNEL); | ||
| 731 | if (!attr) | ||
| 732 | return -ENOMEM; | ||
| 733 | |||
| 734 | attr->attr.name = name; | ||
| 735 | attr->attr.mode = S_IRUSR; | ||
| 736 | attr->attr.owner = THIS_MODULE; | ||
| 737 | |||
| 738 | attr->hdr = hdr; | ||
| 739 | attr->show = show; | ||
| 740 | attr->kobj = &kobj_data->kobj; | ||
| 741 | attr->type = type; | ||
| 742 | |||
| 743 | list_add_tail(&attr->node, list); | ||
| 744 | |||
| 745 | return 0; | ||
| 746 | } | ||
| 747 | |||
| 748 | /* | ||
| 749 | * Helper routiners to check to determine if the entry is valid | ||
| 750 | * in the proper iBFT structure. | ||
| 751 | */ | ||
| 752 | static int __init ibft_check_nic_for(struct ibft_nic *nic, int entry) | ||
| 753 | { | ||
| 754 | int rc = 0; | ||
| 755 | |||
| 756 | switch (entry) { | ||
| 757 | case ibft_eth_index: | ||
| 758 | case ibft_eth_flags: | ||
| 759 | rc = 1; | ||
| 760 | break; | ||
| 761 | case ibft_eth_ip_addr: | ||
| 762 | if (!memcmp(nic->dhcp, nulls, sizeof(nic->dhcp))) | ||
| 763 | rc = 1; | ||
| 764 | break; | ||
| 765 | case ibft_eth_subnet_mask: | ||
| 766 | if (!memcmp(nic->dhcp, nulls, sizeof(nic->dhcp))) | ||
| 767 | rc = 1; | ||
| 768 | break; | ||
| 769 | case ibft_eth_origin: | ||
| 770 | rc = 1; | ||
| 771 | break; | ||
| 772 | case ibft_eth_gateway: | ||
| 773 | if (memcmp(nic->gateway, nulls, sizeof(nic->gateway))) | ||
| 774 | rc = 1; | ||
| 775 | break; | ||
| 776 | case ibft_eth_primary_dns: | ||
| 777 | if (memcmp(nic->primary_dns, nulls, | ||
| 778 | sizeof(nic->primary_dns))) | ||
| 779 | rc = 1; | ||
| 780 | break; | ||
| 781 | case ibft_eth_secondary_dns: | ||
| 782 | if (memcmp(nic->secondary_dns, nulls, | ||
| 783 | sizeof(nic->secondary_dns))) | ||
| 784 | rc = 1; | ||
| 785 | break; | ||
| 786 | case ibft_eth_dhcp: | ||
| 787 | if (memcmp(nic->dhcp, nulls, sizeof(nic->dhcp))) | ||
| 788 | rc = 1; | ||
| 789 | break; | ||
| 790 | case ibft_eth_vlan: | ||
| 791 | case ibft_eth_mac: | ||
| 792 | rc = 1; | ||
| 793 | break; | ||
| 794 | case ibft_eth_hostname: | ||
| 795 | if (nic->hostname_off) | ||
| 796 | rc = 1; | ||
| 797 | break; | ||
| 798 | default: | ||
| 799 | break; | ||
| 800 | } | ||
| 801 | |||
| 802 | return rc; | ||
| 803 | } | ||
| 804 | |||
| 805 | static int __init ibft_check_tgt_for(struct ibft_tgt *tgt, int entry) | ||
| 806 | { | ||
| 807 | int rc = 0; | ||
| 808 | |||
| 809 | switch (entry) { | ||
| 810 | case ibft_tgt_index: | ||
| 811 | case ibft_tgt_flags: | ||
| 812 | case ibft_tgt_ip_addr: | ||
| 813 | case ibft_tgt_port: | ||
| 814 | case ibft_tgt_lun: | ||
| 815 | case ibft_tgt_nic_assoc: | ||
| 816 | case ibft_tgt_chap_type: | ||
| 817 | rc = 1; | ||
| 818 | case ibft_tgt_name: | ||
| 819 | if (tgt->tgt_name_len) | ||
| 820 | rc = 1; | ||
| 821 | break; | ||
| 822 | case ibft_tgt_chap_name: | ||
| 823 | case ibft_tgt_chap_secret: | ||
| 824 | if (tgt->chap_name_len) | ||
| 825 | rc = 1; | ||
| 826 | break; | ||
| 827 | case ibft_tgt_rev_chap_name: | ||
| 828 | case ibft_tgt_rev_chap_secret: | ||
| 829 | if (tgt->rev_chap_name_len) | ||
| 830 | rc = 1; | ||
| 831 | break; | ||
| 832 | default: | ||
| 833 | break; | ||
| 834 | } | ||
| 835 | |||
| 836 | return rc; | ||
| 837 | } | ||
| 838 | |||
| 839 | static int __init ibft_check_initiator_for(struct ibft_initiator *init, | ||
| 840 | int entry) | ||
| 841 | { | ||
| 842 | int rc = 0; | ||
| 843 | |||
| 844 | switch (entry) { | ||
| 845 | case ibft_init_index: | ||
| 846 | case ibft_init_flags: | ||
| 847 | rc = 1; | ||
| 848 | break; | ||
| 849 | case ibft_init_isns_server: | ||
| 850 | if (memcmp(init->isns_server, nulls, | ||
| 851 | sizeof(init->isns_server))) | ||
| 852 | rc = 1; | ||
| 853 | break; | ||
| 854 | case ibft_init_slp_server: | ||
| 855 | if (memcmp(init->slp_server, nulls, | ||
| 856 | sizeof(init->slp_server))) | ||
| 857 | rc = 1; | ||
| 858 | break; | ||
| 859 | case ibft_init_pri_radius_server: | ||
| 860 | if (memcmp(init->pri_radius_server, nulls, | ||
| 861 | sizeof(init->pri_radius_server))) | ||
| 862 | rc = 1; | ||
| 863 | break; | ||
| 864 | case ibft_init_sec_radius_server: | ||
| 865 | if (memcmp(init->sec_radius_server, nulls, | ||
| 866 | sizeof(init->sec_radius_server))) | ||
| 867 | rc = 1; | ||
| 868 | break; | ||
| 869 | case ibft_init_initiator_name: | ||
| 870 | if (init->initiator_name_len) | ||
| 871 | rc = 1; | ||
| 872 | break; | ||
| 873 | default: | ||
| 874 | break; | ||
| 875 | } | ||
| 876 | |||
| 877 | return rc; | ||
| 878 | } | ||
| 879 | |||
| 880 | /* | ||
| 881 | * Register the attributes for all of the kobjects. | ||
| 882 | */ | ||
| 883 | static int __init ibft_register_attributes(struct list_head *kobject_list, | ||
| 884 | struct list_head *attr_list) | ||
| 885 | { | ||
| 886 | int rc = 0, i = 0; | ||
| 887 | struct ibft_kobject *data = NULL; | ||
| 888 | struct ibft_attribute *attr = NULL, *m; | ||
| 889 | |||
| 890 | list_for_each_entry(data, kobject_list, node) { | ||
| 891 | switch (data->hdr->id) { | ||
| 892 | case id_nic: | ||
| 893 | for (i = 0; i < ibft_eth_end_marker && !rc; i++) | ||
| 894 | if (ibft_check_nic_for(data->nic, i)) | ||
| 895 | rc = ibft_create_attribute(data, i, | ||
| 896 | ibft_eth_properties[i], | ||
| 897 | ibft_attr_show_nic, attr_list); | ||
| 898 | break; | ||
| 899 | case id_target: | ||
| 900 | for (i = 0; i < ibft_tgt_end_marker && !rc; i++) | ||
| 901 | if (ibft_check_tgt_for(data->tgt, i)) | ||
| 902 | rc = ibft_create_attribute(data, i, | ||
| 903 | ibft_tgt_properties[i], | ||
| 904 | ibft_attr_show_target, | ||
| 905 | attr_list); | ||
| 906 | break; | ||
| 907 | case id_initiator: | ||
| 908 | for (i = 0; i < ibft_init_end_marker && !rc; i++) | ||
| 909 | if (ibft_check_initiator_for( | ||
| 910 | data->initiator, i)) | ||
| 911 | rc = ibft_create_attribute(data, i, | ||
| 912 | ibft_initiator_properties[i], | ||
| 913 | ibft_attr_show_initiator, | ||
| 914 | attr_list); | ||
| 915 | break; | ||
| 916 | default: | ||
| 917 | break; | ||
| 918 | } | ||
| 919 | if (rc) | ||
| 920 | break; | ||
| 921 | } | ||
| 922 | list_for_each_entry_safe(attr, m, attr_list, node) { | ||
| 923 | rc = sysfs_create_file(attr->kobj, &attr->attr); | ||
| 924 | if (rc) { | ||
| 925 | list_del(&attr->node); | ||
| 926 | kfree(attr); | ||
| 927 | break; | ||
| 928 | } | ||
| 929 | } | ||
| 930 | |||
| 931 | return rc; | ||
| 932 | } | ||
| 933 | |||
| 934 | /* | ||
| 935 | * ibft_init() - creates sysfs tree entries for the iBFT data. | ||
| 936 | */ | ||
| 937 | static int __init ibft_init(void) | ||
| 938 | { | ||
| 939 | int rc = 0; | ||
| 940 | |||
| 941 | ibft_kset = kset_create_and_add("ibft", NULL, firmware_kobj); | ||
| 942 | if (!ibft_kset) | ||
| 943 | return -ENOMEM; | ||
| 944 | |||
| 945 | if (ibft_addr) { | ||
| 946 | printk(KERN_INFO "iBFT detected at 0x%lx.\n", | ||
| 947 | virt_to_phys((void *)ibft_addr)); | ||
| 948 | |||
| 949 | rc = ibft_check_device(); | ||
| 950 | if (rc) | ||
| 951 | goto out_firmware_unregister; | ||
| 952 | |||
| 953 | /* Scan the IBFT for data and register the kobjects. */ | ||
| 954 | rc = ibft_register_kobjects(ibft_addr, &ibft_kobject_list); | ||
| 955 | if (rc) | ||
| 956 | goto out_free; | ||
| 957 | |||
| 958 | /* Register the attributes */ | ||
| 959 | rc = ibft_register_attributes(&ibft_kobject_list, | ||
| 960 | &ibft_attr_list); | ||
| 961 | if (rc) | ||
| 962 | goto out_free; | ||
| 963 | } else | ||
| 964 | printk(KERN_INFO "No iBFT detected.\n"); | ||
| 965 | |||
| 966 | return 0; | ||
| 967 | |||
| 968 | out_free: | ||
| 969 | ibft_unregister(&ibft_attr_list, &ibft_kobject_list); | ||
| 970 | out_firmware_unregister: | ||
| 971 | kset_unregister(ibft_kset); | ||
| 972 | return rc; | ||
| 973 | } | ||
| 974 | |||
| 975 | static void __exit ibft_exit(void) | ||
| 976 | { | ||
| 977 | ibft_unregister(&ibft_attr_list, &ibft_kobject_list); | ||
| 978 | kset_unregister(ibft_kset); | ||
| 979 | } | ||
| 980 | |||
| 981 | module_init(ibft_init); | ||
| 982 | module_exit(ibft_exit); | ||
diff --git a/drivers/firmware/iscsi_ibft_find.c b/drivers/firmware/iscsi_ibft_find.c new file mode 100644 index 000000000000..d0e5fa4ea51b --- /dev/null +++ b/drivers/firmware/iscsi_ibft_find.c | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2007 Red Hat, Inc. | ||
| 3 | * by Peter Jones <pjones@redhat.com> | ||
| 4 | * Copyright 2007 IBM, Inc. | ||
| 5 | * by Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 6 | * Copyright 2008 | ||
| 7 | * by Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 8 | * | ||
| 9 | * This code finds the iSCSI Boot Format Table. | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License v2.0 as published by | ||
| 13 | * the Free Software Foundation | ||
| 14 | * | ||
| 15 | * This program is distributed in the hope that it will be useful, | ||
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | * GNU General Public License for more details. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #include <linux/bootmem.h> | ||
| 22 | #include <linux/blkdev.h> | ||
| 23 | #include <linux/ctype.h> | ||
| 24 | #include <linux/device.h> | ||
| 25 | #include <linux/err.h> | ||
| 26 | #include <linux/init.h> | ||
| 27 | #include <linux/limits.h> | ||
| 28 | #include <linux/module.h> | ||
| 29 | #include <linux/pci.h> | ||
| 30 | #include <linux/slab.h> | ||
| 31 | #include <linux/stat.h> | ||
| 32 | #include <linux/string.h> | ||
| 33 | #include <linux/types.h> | ||
| 34 | |||
| 35 | #include <asm/mmzone.h> | ||
| 36 | |||
| 37 | /* | ||
| 38 | * Physical location of iSCSI Boot Format Table. | ||
| 39 | */ | ||
| 40 | struct ibft_table_header *ibft_addr; | ||
| 41 | EXPORT_SYMBOL_GPL(ibft_addr); | ||
| 42 | |||
| 43 | #define IBFT_SIGN "iBFT" | ||
| 44 | #define IBFT_SIGN_LEN 4 | ||
| 45 | #define IBFT_START 0x80000 /* 512kB */ | ||
| 46 | #define IBFT_END 0x100000 /* 1MB */ | ||
| 47 | #define VGA_MEM 0xA0000 /* VGA buffer */ | ||
| 48 | #define VGA_SIZE 0x20000 /* 128kB */ | ||
| 49 | |||
| 50 | |||
| 51 | /* | ||
| 52 | * Routine used to find the iSCSI Boot Format Table. The logical | ||
| 53 | * kernel address is set in the ibft_addr global variable. | ||
| 54 | */ | ||
| 55 | void __init reserve_ibft_region(void) | ||
| 56 | { | ||
| 57 | unsigned long pos; | ||
| 58 | unsigned int len = 0; | ||
| 59 | void *virt; | ||
| 60 | |||
| 61 | ibft_addr = 0; | ||
| 62 | |||
| 63 | for (pos = IBFT_START; pos < IBFT_END; pos += 16) { | ||
| 64 | /* The table can't be inside the VGA BIOS reserved space, | ||
| 65 | * so skip that area */ | ||
| 66 | if (pos == VGA_MEM) | ||
| 67 | pos += VGA_SIZE; | ||
| 68 | virt = phys_to_virt(pos); | ||
| 69 | if (memcmp(virt, IBFT_SIGN, IBFT_SIGN_LEN) == 0) { | ||
| 70 | unsigned long *addr = | ||
| 71 | (unsigned long *)phys_to_virt(pos + 4); | ||
| 72 | len = *addr; | ||
| 73 | /* if the length of the table extends past 1M, | ||
| 74 | * the table cannot be valid. */ | ||
| 75 | if (pos + len <= (IBFT_END-1)) { | ||
| 76 | ibft_addr = (struct ibft_table_header *)virt; | ||
| 77 | break; | ||
| 78 | } | ||
| 79 | } | ||
| 80 | } | ||
| 81 | if (ibft_addr) | ||
| 82 | reserve_bootmem(pos, PAGE_ALIGN(len), BOOTMEM_DEFAULT); | ||
| 83 | } | ||
| 84 | EXPORT_SYMBOL_GPL(reserve_ibft_region); | ||
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c index 5a4b2e65534b..95756551cf7c 100644 --- a/drivers/infiniband/core/sysfs.c +++ b/drivers/infiniband/core/sysfs.c | |||
| @@ -427,17 +427,17 @@ static struct kobj_type port_type = { | |||
| 427 | .default_attrs = port_default_attrs | 427 | .default_attrs = port_default_attrs |
| 428 | }; | 428 | }; |
| 429 | 429 | ||
| 430 | static void ib_device_release(struct class_device *cdev) | 430 | static void ib_device_release(struct device *device) |
| 431 | { | 431 | { |
| 432 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 432 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 433 | 433 | ||
| 434 | kfree(dev); | 434 | kfree(dev); |
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | static int ib_device_uevent(struct class_device *cdev, | 437 | static int ib_device_uevent(struct device *device, |
| 438 | struct kobj_uevent_env *env) | 438 | struct kobj_uevent_env *env) |
| 439 | { | 439 | { |
| 440 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 440 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 441 | 441 | ||
| 442 | if (add_uevent_var(env, "NAME=%s", dev->name)) | 442 | if (add_uevent_var(env, "NAME=%s", dev->name)) |
| 443 | return -ENOMEM; | 443 | return -ENOMEM; |
| @@ -567,9 +567,10 @@ err_put: | |||
| 567 | return ret; | 567 | return ret; |
| 568 | } | 568 | } |
| 569 | 569 | ||
| 570 | static ssize_t show_node_type(struct class_device *cdev, char *buf) | 570 | static ssize_t show_node_type(struct device *device, |
| 571 | struct device_attribute *attr, char *buf) | ||
| 571 | { | 572 | { |
| 572 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 573 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 573 | 574 | ||
| 574 | if (!ibdev_is_alive(dev)) | 575 | if (!ibdev_is_alive(dev)) |
| 575 | return -ENODEV; | 576 | return -ENODEV; |
| @@ -583,9 +584,10 @@ static ssize_t show_node_type(struct class_device *cdev, char *buf) | |||
| 583 | } | 584 | } |
| 584 | } | 585 | } |
| 585 | 586 | ||
| 586 | static ssize_t show_sys_image_guid(struct class_device *cdev, char *buf) | 587 | static ssize_t show_sys_image_guid(struct device *device, |
| 588 | struct device_attribute *dev_attr, char *buf) | ||
| 587 | { | 589 | { |
| 588 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 590 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 589 | struct ib_device_attr attr; | 591 | struct ib_device_attr attr; |
| 590 | ssize_t ret; | 592 | ssize_t ret; |
| 591 | 593 | ||
| @@ -603,9 +605,10 @@ static ssize_t show_sys_image_guid(struct class_device *cdev, char *buf) | |||
| 603 | be16_to_cpu(((__be16 *) &attr.sys_image_guid)[3])); | 605 | be16_to_cpu(((__be16 *) &attr.sys_image_guid)[3])); |
| 604 | } | 606 | } |
| 605 | 607 | ||
| 606 | static ssize_t show_node_guid(struct class_device *cdev, char *buf) | 608 | static ssize_t show_node_guid(struct device *device, |
| 609 | struct device_attribute *attr, char *buf) | ||
| 607 | { | 610 | { |
| 608 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 611 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 609 | 612 | ||
| 610 | if (!ibdev_is_alive(dev)) | 613 | if (!ibdev_is_alive(dev)) |
| 611 | return -ENODEV; | 614 | return -ENODEV; |
| @@ -617,17 +620,19 @@ static ssize_t show_node_guid(struct class_device *cdev, char *buf) | |||
| 617 | be16_to_cpu(((__be16 *) &dev->node_guid)[3])); | 620 | be16_to_cpu(((__be16 *) &dev->node_guid)[3])); |
| 618 | } | 621 | } |
| 619 | 622 | ||
| 620 | static ssize_t show_node_desc(struct class_device *cdev, char *buf) | 623 | static ssize_t show_node_desc(struct device *device, |
| 624 | struct device_attribute *attr, char *buf) | ||
| 621 | { | 625 | { |
| 622 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 626 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 623 | 627 | ||
| 624 | return sprintf(buf, "%.64s\n", dev->node_desc); | 628 | return sprintf(buf, "%.64s\n", dev->node_desc); |
| 625 | } | 629 | } |
| 626 | 630 | ||
| 627 | static ssize_t set_node_desc(struct class_device *cdev, const char *buf, | 631 | static ssize_t set_node_desc(struct device *device, |
| 628 | size_t count) | 632 | struct device_attribute *attr, |
| 633 | const char *buf, size_t count) | ||
| 629 | { | 634 | { |
| 630 | struct ib_device *dev = container_of(cdev, struct ib_device, class_dev); | 635 | struct ib_device *dev = container_of(device, struct ib_device, dev); |
| 631 | struct ib_device_modify desc = {}; | 636 | struct ib_device_modify desc = {}; |
| 632 | int ret; | 637 | int ret; |
| 633 | 638 | ||
| @@ -642,44 +647,43 @@ static ssize_t set_node_desc(struct class_device *cdev, const char *buf, | |||
| 642 | return count; | 647 | return count; |
| 643 | } | 648 | } |
| 644 | 649 | ||
| 645 | static CLASS_DEVICE_ATTR(node_type, S_IRUGO, show_node_type, NULL); | 650 | static DEVICE_ATTR(node_type, S_IRUGO, show_node_type, NULL); |
| 646 | static CLASS_DEVICE_ATTR(sys_image_guid, S_IRUGO, show_sys_image_guid, NULL); | 651 | static DEVICE_ATTR(sys_image_guid, S_IRUGO, show_sys_image_guid, NULL); |
| 647 | static CLASS_DEVICE_ATTR(node_guid, S_IRUGO, show_node_guid, NULL); | 652 | static DEVICE_ATTR(node_guid, S_IRUGO, show_node_guid, NULL); |
| 648 | static CLASS_DEVICE_ATTR(node_desc, S_IRUGO | S_IWUSR, show_node_desc, | 653 | static DEVICE_ATTR(node_desc, S_IRUGO | S_IWUSR, show_node_desc, set_node_desc); |
| 649 | set_node_desc); | 654 | |
| 650 | 655 | static struct device_attribute *ib_class_attributes[] = { | |
| 651 | static struct class_device_attribute *ib_class_attributes[] = { | 656 | &dev_attr_node_type, |
| 652 | &class_device_attr_node_type, | 657 | &dev_attr_sys_image_guid, |
| 653 | &class_device_attr_sys_image_guid, | 658 | &dev_attr_node_guid, |
| 654 | &class_device_attr_node_guid, | 659 | &dev_attr_node_desc |
| 655 | &class_device_attr_node_desc | ||
| 656 | }; | 660 | }; |
| 657 | 661 | ||
| 658 | static struct class ib_class = { | 662 | static struct class ib_class = { |
| 659 | .name = "infiniband", | 663 | .name = "infiniband", |
| 660 | .release = ib_device_release, | 664 | .dev_release = ib_device_release, |
| 661 | .uevent = ib_device_uevent, | 665 | .dev_uevent = ib_device_uevent, |
| 662 | }; | 666 | }; |
| 663 | 667 | ||
| 664 | int ib_device_register_sysfs(struct ib_device *device) | 668 | int ib_device_register_sysfs(struct ib_device *device) |
| 665 | { | 669 | { |
| 666 | struct class_device *class_dev = &device->class_dev; | 670 | struct device *class_dev = &device->dev; |
| 667 | int ret; | 671 | int ret; |
| 668 | int i; | 672 | int i; |
| 669 | 673 | ||
| 670 | class_dev->class = &ib_class; | 674 | class_dev->class = &ib_class; |
| 671 | class_dev->class_data = device; | 675 | class_dev->driver_data = device; |
| 672 | class_dev->dev = device->dma_device; | 676 | class_dev->parent = device->dma_device; |
| 673 | strlcpy(class_dev->class_id, device->name, BUS_ID_SIZE); | 677 | strlcpy(class_dev->bus_id, device->name, BUS_ID_SIZE); |
| 674 | 678 | ||
| 675 | INIT_LIST_HEAD(&device->port_list); | 679 | INIT_LIST_HEAD(&device->port_list); |
| 676 | 680 | ||
| 677 | ret = class_device_register(class_dev); | 681 | ret = device_register(class_dev); |
| 678 | if (ret) | 682 | if (ret) |
| 679 | goto err; | 683 | goto err; |
| 680 | 684 | ||
| 681 | for (i = 0; i < ARRAY_SIZE(ib_class_attributes); ++i) { | 685 | for (i = 0; i < ARRAY_SIZE(ib_class_attributes); ++i) { |
| 682 | ret = class_device_create_file(class_dev, ib_class_attributes[i]); | 686 | ret = device_create_file(class_dev, ib_class_attributes[i]); |
| 683 | if (ret) | 687 | if (ret) |
| 684 | goto err_unregister; | 688 | goto err_unregister; |
| 685 | } | 689 | } |
| @@ -723,7 +727,7 @@ err_put: | |||
| 723 | kobject_put(&class_dev->kobj); | 727 | kobject_put(&class_dev->kobj); |
| 724 | 728 | ||
| 725 | err_unregister: | 729 | err_unregister: |
| 726 | class_device_unregister(class_dev); | 730 | device_unregister(class_dev); |
| 727 | 731 | ||
| 728 | err: | 732 | err: |
| 729 | return ret; | 733 | return ret; |
| @@ -744,7 +748,7 @@ void ib_device_unregister_sysfs(struct ib_device *device) | |||
| 744 | } | 748 | } |
| 745 | 749 | ||
| 746 | kobject_put(device->ports_parent); | 750 | kobject_put(device->ports_parent); |
| 747 | class_device_unregister(&device->class_dev); | 751 | device_unregister(&device->dev); |
| 748 | } | 752 | } |
| 749 | 753 | ||
| 750 | int ib_sysfs_setup(void) | 754 | int ib_sysfs_setup(void) |
diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c index 4291ab42a5b9..d7a6881b571d 100644 --- a/drivers/infiniband/core/ucm.c +++ b/drivers/infiniband/core/ucm.c | |||
| @@ -58,8 +58,8 @@ MODULE_LICENSE("Dual BSD/GPL"); | |||
| 58 | 58 | ||
| 59 | struct ib_ucm_device { | 59 | struct ib_ucm_device { |
| 60 | int devnum; | 60 | int devnum; |
| 61 | struct cdev dev; | 61 | struct cdev cdev; |
| 62 | struct class_device class_dev; | 62 | struct device dev; |
| 63 | struct ib_device *ib_dev; | 63 | struct ib_device *ib_dev; |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| @@ -1171,7 +1171,7 @@ static int ib_ucm_open(struct inode *inode, struct file *filp) | |||
| 1171 | 1171 | ||
| 1172 | filp->private_data = file; | 1172 | filp->private_data = file; |
| 1173 | file->filp = filp; | 1173 | file->filp = filp; |
| 1174 | file->device = container_of(inode->i_cdev, struct ib_ucm_device, dev); | 1174 | file->device = container_of(inode->i_cdev, struct ib_ucm_device, cdev); |
| 1175 | 1175 | ||
| 1176 | return 0; | 1176 | return 0; |
| 1177 | } | 1177 | } |
| @@ -1202,14 +1202,14 @@ static int ib_ucm_close(struct inode *inode, struct file *filp) | |||
| 1202 | return 0; | 1202 | return 0; |
| 1203 | } | 1203 | } |
| 1204 | 1204 | ||
| 1205 | static void ucm_release_class_dev(struct class_device *class_dev) | 1205 | static void ib_ucm_release_dev(struct device *dev) |
| 1206 | { | 1206 | { |
| 1207 | struct ib_ucm_device *dev; | 1207 | struct ib_ucm_device *ucm_dev; |
| 1208 | 1208 | ||
| 1209 | dev = container_of(class_dev, struct ib_ucm_device, class_dev); | 1209 | ucm_dev = container_of(dev, struct ib_ucm_device, dev); |
| 1210 | cdev_del(&dev->dev); | 1210 | cdev_del(&ucm_dev->cdev); |
| 1211 | clear_bit(dev->devnum, dev_map); | 1211 | clear_bit(ucm_dev->devnum, dev_map); |
| 1212 | kfree(dev); | 1212 | kfree(ucm_dev); |
| 1213 | } | 1213 | } |
| 1214 | 1214 | ||
| 1215 | static const struct file_operations ucm_fops = { | 1215 | static const struct file_operations ucm_fops = { |
| @@ -1220,14 +1220,15 @@ static const struct file_operations ucm_fops = { | |||
| 1220 | .poll = ib_ucm_poll, | 1220 | .poll = ib_ucm_poll, |
| 1221 | }; | 1221 | }; |
| 1222 | 1222 | ||
| 1223 | static ssize_t show_ibdev(struct class_device *class_dev, char *buf) | 1223 | static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr, |
| 1224 | char *buf) | ||
| 1224 | { | 1225 | { |
| 1225 | struct ib_ucm_device *dev; | 1226 | struct ib_ucm_device *ucm_dev; |
| 1226 | 1227 | ||
| 1227 | dev = container_of(class_dev, struct ib_ucm_device, class_dev); | 1228 | ucm_dev = container_of(dev, struct ib_ucm_device, dev); |
| 1228 | return sprintf(buf, "%s\n", dev->ib_dev->name); | 1229 | return sprintf(buf, "%s\n", ucm_dev->ib_dev->name); |
| 1229 | } | 1230 | } |
| 1230 | static CLASS_DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); | 1231 | static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); |
| 1231 | 1232 | ||
| 1232 | static void ib_ucm_add_one(struct ib_device *device) | 1233 | static void ib_ucm_add_one(struct ib_device *device) |
| 1233 | { | 1234 | { |
| @@ -1249,32 +1250,31 @@ static void ib_ucm_add_one(struct ib_device *device) | |||
| 1249 | 1250 | ||
| 1250 | set_bit(ucm_dev->devnum, dev_map); | 1251 | set_bit(ucm_dev->devnum, dev_map); |
| 1251 | 1252 | ||
| 1252 | cdev_init(&ucm_dev->dev, &ucm_fops); | 1253 | cdev_init(&ucm_dev->cdev, &ucm_fops); |
| 1253 | ucm_dev->dev.owner = THIS_MODULE; | 1254 | ucm_dev->cdev.owner = THIS_MODULE; |
| 1254 | kobject_set_name(&ucm_dev->dev.kobj, "ucm%d", ucm_dev->devnum); | 1255 | kobject_set_name(&ucm_dev->cdev.kobj, "ucm%d", ucm_dev->devnum); |
| 1255 | if (cdev_add(&ucm_dev->dev, IB_UCM_BASE_DEV + ucm_dev->devnum, 1)) | 1256 | if (cdev_add(&ucm_dev->cdev, IB_UCM_BASE_DEV + ucm_dev->devnum, 1)) |
| 1256 | goto err; | 1257 | goto err; |
| 1257 | 1258 | ||
| 1258 | ucm_dev->class_dev.class = &cm_class; | 1259 | ucm_dev->dev.class = &cm_class; |
| 1259 | ucm_dev->class_dev.dev = device->dma_device; | 1260 | ucm_dev->dev.parent = device->dma_device; |
| 1260 | ucm_dev->class_dev.devt = ucm_dev->dev.dev; | 1261 | ucm_dev->dev.devt = ucm_dev->cdev.dev; |
| 1261 | ucm_dev->class_dev.release = ucm_release_class_dev; | 1262 | ucm_dev->dev.release = ib_ucm_release_dev; |
| 1262 | snprintf(ucm_dev->class_dev.class_id, BUS_ID_SIZE, "ucm%d", | 1263 | snprintf(ucm_dev->dev.bus_id, BUS_ID_SIZE, "ucm%d", |
| 1263 | ucm_dev->devnum); | 1264 | ucm_dev->devnum); |
| 1264 | if (class_device_register(&ucm_dev->class_dev)) | 1265 | if (device_register(&ucm_dev->dev)) |
| 1265 | goto err_cdev; | 1266 | goto err_cdev; |
| 1266 | 1267 | ||
| 1267 | if (class_device_create_file(&ucm_dev->class_dev, | 1268 | if (device_create_file(&ucm_dev->dev, &dev_attr_ibdev)) |
| 1268 | &class_device_attr_ibdev)) | 1269 | goto err_dev; |
| 1269 | goto err_class; | ||
| 1270 | 1270 | ||
| 1271 | ib_set_client_data(device, &ucm_client, ucm_dev); | 1271 | ib_set_client_data(device, &ucm_client, ucm_dev); |
| 1272 | return; | 1272 | return; |
| 1273 | 1273 | ||
| 1274 | err_class: | 1274 | err_dev: |
| 1275 | class_device_unregister(&ucm_dev->class_dev); | 1275 | device_unregister(&ucm_dev->dev); |
| 1276 | err_cdev: | 1276 | err_cdev: |
| 1277 | cdev_del(&ucm_dev->dev); | 1277 | cdev_del(&ucm_dev->cdev); |
| 1278 | clear_bit(ucm_dev->devnum, dev_map); | 1278 | clear_bit(ucm_dev->devnum, dev_map); |
| 1279 | err: | 1279 | err: |
| 1280 | kfree(ucm_dev); | 1280 | kfree(ucm_dev); |
| @@ -1288,7 +1288,7 @@ static void ib_ucm_remove_one(struct ib_device *device) | |||
| 1288 | if (!ucm_dev) | 1288 | if (!ucm_dev) |
| 1289 | return; | 1289 | return; |
| 1290 | 1290 | ||
| 1291 | class_device_unregister(&ucm_dev->class_dev); | 1291 | device_unregister(&ucm_dev->dev); |
| 1292 | } | 1292 | } |
| 1293 | 1293 | ||
| 1294 | static ssize_t show_abi_version(struct class *class, char *buf) | 1294 | static ssize_t show_abi_version(struct class *class, char *buf) |
diff --git a/drivers/infiniband/core/user_mad.c b/drivers/infiniband/core/user_mad.c index be953e87bf93..3aa2db54eae4 100644 --- a/drivers/infiniband/core/user_mad.c +++ b/drivers/infiniband/core/user_mad.c | |||
| @@ -88,11 +88,11 @@ enum { | |||
| 88 | */ | 88 | */ |
| 89 | 89 | ||
| 90 | struct ib_umad_port { | 90 | struct ib_umad_port { |
| 91 | struct cdev *dev; | 91 | struct cdev *cdev; |
| 92 | struct class_device *class_dev; | 92 | struct device *dev; |
| 93 | 93 | ||
| 94 | struct cdev *sm_dev; | 94 | struct cdev *sm_cdev; |
| 95 | struct class_device *sm_class_dev; | 95 | struct device *sm_dev; |
| 96 | struct semaphore sm_sem; | 96 | struct semaphore sm_sem; |
| 97 | 97 | ||
| 98 | struct mutex file_mutex; | 98 | struct mutex file_mutex; |
| @@ -948,27 +948,29 @@ static struct ib_client umad_client = { | |||
| 948 | .remove = ib_umad_remove_one | 948 | .remove = ib_umad_remove_one |
| 949 | }; | 949 | }; |
| 950 | 950 | ||
| 951 | static ssize_t show_ibdev(struct class_device *class_dev, char *buf) | 951 | static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr, |
| 952 | char *buf) | ||
| 952 | { | 953 | { |
| 953 | struct ib_umad_port *port = class_get_devdata(class_dev); | 954 | struct ib_umad_port *port = dev_get_drvdata(dev); |
| 954 | 955 | ||
| 955 | if (!port) | 956 | if (!port) |
| 956 | return -ENODEV; | 957 | return -ENODEV; |
| 957 | 958 | ||
| 958 | return sprintf(buf, "%s\n", port->ib_dev->name); | 959 | return sprintf(buf, "%s\n", port->ib_dev->name); |
| 959 | } | 960 | } |
| 960 | static CLASS_DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); | 961 | static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); |
| 961 | 962 | ||
| 962 | static ssize_t show_port(struct class_device *class_dev, char *buf) | 963 | static ssize_t show_port(struct device *dev, struct device_attribute *attr, |
| 964 | char *buf) | ||
| 963 | { | 965 | { |
| 964 | struct ib_umad_port *port = class_get_devdata(class_dev); | 966 | struct ib_umad_port *port = dev_get_drvdata(dev); |
| 965 | 967 | ||
| 966 | if (!port) | 968 | if (!port) |
| 967 | return -ENODEV; | 969 | return -ENODEV; |
| 968 | 970 | ||
| 969 | return sprintf(buf, "%d\n", port->port_num); | 971 | return sprintf(buf, "%d\n", port->port_num); |
| 970 | } | 972 | } |
| 971 | static CLASS_DEVICE_ATTR(port, S_IRUGO, show_port, NULL); | 973 | static DEVICE_ATTR(port, S_IRUGO, show_port, NULL); |
| 972 | 974 | ||
| 973 | static ssize_t show_abi_version(struct class *class, char *buf) | 975 | static ssize_t show_abi_version(struct class *class, char *buf) |
| 974 | { | 976 | { |
| @@ -994,48 +996,47 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | |||
| 994 | mutex_init(&port->file_mutex); | 996 | mutex_init(&port->file_mutex); |
| 995 | INIT_LIST_HEAD(&port->file_list); | 997 | INIT_LIST_HEAD(&port->file_list); |
| 996 | 998 | ||
| 997 | port->dev = cdev_alloc(); | 999 | port->cdev = cdev_alloc(); |
| 998 | if (!port->dev) | 1000 | if (!port->cdev) |
| 999 | return -1; | 1001 | return -1; |
| 1000 | port->dev->owner = THIS_MODULE; | 1002 | port->cdev->owner = THIS_MODULE; |
| 1001 | port->dev->ops = &umad_fops; | 1003 | port->cdev->ops = &umad_fops; |
| 1002 | kobject_set_name(&port->dev->kobj, "umad%d", port->dev_num); | 1004 | kobject_set_name(&port->cdev->kobj, "umad%d", port->dev_num); |
| 1003 | if (cdev_add(port->dev, base_dev + port->dev_num, 1)) | 1005 | if (cdev_add(port->cdev, base_dev + port->dev_num, 1)) |
| 1004 | goto err_cdev; | 1006 | goto err_cdev; |
| 1005 | 1007 | ||
| 1006 | port->class_dev = class_device_create(umad_class, NULL, port->dev->dev, | 1008 | port->dev = device_create(umad_class, device->dma_device, |
| 1007 | device->dma_device, | 1009 | port->cdev->dev, "umad%d", port->dev_num); |
| 1008 | "umad%d", port->dev_num); | 1010 | if (IS_ERR(port->dev)) |
| 1009 | if (IS_ERR(port->class_dev)) | ||
| 1010 | goto err_cdev; | 1011 | goto err_cdev; |
| 1011 | 1012 | ||
| 1012 | if (class_device_create_file(port->class_dev, &class_device_attr_ibdev)) | 1013 | if (device_create_file(port->dev, &dev_attr_ibdev)) |
| 1013 | goto err_class; | 1014 | goto err_dev; |
| 1014 | if (class_device_create_file(port->class_dev, &class_device_attr_port)) | 1015 | if (device_create_file(port->dev, &dev_attr_port)) |
| 1015 | goto err_class; | 1016 | goto err_dev; |
| 1016 | 1017 | ||
| 1017 | port->sm_dev = cdev_alloc(); | 1018 | port->sm_cdev = cdev_alloc(); |
| 1018 | if (!port->sm_dev) | 1019 | if (!port->sm_cdev) |
| 1019 | goto err_class; | 1020 | goto err_dev; |
| 1020 | port->sm_dev->owner = THIS_MODULE; | 1021 | port->sm_cdev->owner = THIS_MODULE; |
| 1021 | port->sm_dev->ops = &umad_sm_fops; | 1022 | port->sm_cdev->ops = &umad_sm_fops; |
| 1022 | kobject_set_name(&port->sm_dev->kobj, "issm%d", port->dev_num); | 1023 | kobject_set_name(&port->sm_cdev->kobj, "issm%d", port->dev_num); |
| 1023 | if (cdev_add(port->sm_dev, base_dev + port->dev_num + IB_UMAD_MAX_PORTS, 1)) | 1024 | if (cdev_add(port->sm_cdev, base_dev + port->dev_num + IB_UMAD_MAX_PORTS, 1)) |
| 1024 | goto err_sm_cdev; | 1025 | goto err_sm_cdev; |
| 1025 | 1026 | ||
| 1026 | port->sm_class_dev = class_device_create(umad_class, NULL, port->sm_dev->dev, | 1027 | port->sm_dev = device_create(umad_class, device->dma_device, |
| 1027 | device->dma_device, | 1028 | port->sm_cdev->dev, |
| 1028 | "issm%d", port->dev_num); | 1029 | "issm%d", port->dev_num); |
| 1029 | if (IS_ERR(port->sm_class_dev)) | 1030 | if (IS_ERR(port->sm_dev)) |
| 1030 | goto err_sm_cdev; | 1031 | goto err_sm_cdev; |
| 1031 | 1032 | ||
| 1032 | class_set_devdata(port->class_dev, port); | 1033 | dev_set_drvdata(port->dev, port); |
| 1033 | class_set_devdata(port->sm_class_dev, port); | 1034 | dev_set_drvdata(port->sm_dev, port); |
| 1034 | 1035 | ||
| 1035 | if (class_device_create_file(port->sm_class_dev, &class_device_attr_ibdev)) | 1036 | if (device_create_file(port->sm_dev, &dev_attr_ibdev)) |
| 1036 | goto err_sm_class; | 1037 | goto err_sm_dev; |
| 1037 | if (class_device_create_file(port->sm_class_dev, &class_device_attr_port)) | 1038 | if (device_create_file(port->sm_dev, &dev_attr_port)) |
| 1038 | goto err_sm_class; | 1039 | goto err_sm_dev; |
| 1039 | 1040 | ||
| 1040 | spin_lock(&port_lock); | 1041 | spin_lock(&port_lock); |
| 1041 | umad_port[port->dev_num] = port; | 1042 | umad_port[port->dev_num] = port; |
| @@ -1043,17 +1044,17 @@ static int ib_umad_init_port(struct ib_device *device, int port_num, | |||
| 1043 | 1044 | ||
| 1044 | return 0; | 1045 | return 0; |
| 1045 | 1046 | ||
| 1046 | err_sm_class: | 1047 | err_sm_dev: |
| 1047 | class_device_destroy(umad_class, port->sm_dev->dev); | 1048 | device_destroy(umad_class, port->sm_cdev->dev); |
| 1048 | 1049 | ||
| 1049 | err_sm_cdev: | 1050 | err_sm_cdev: |
| 1050 | cdev_del(port->sm_dev); | 1051 | cdev_del(port->sm_cdev); |
| 1051 | 1052 | ||
| 1052 | err_class: | 1053 | err_dev: |
| 1053 | class_device_destroy(umad_class, port->dev->dev); | 1054 | device_destroy(umad_class, port->cdev->dev); |
| 1054 | 1055 | ||
| 1055 | err_cdev: | 1056 | err_cdev: |
| 1056 | cdev_del(port->dev); | 1057 | cdev_del(port->cdev); |
| 1057 | clear_bit(port->dev_num, dev_map); | 1058 | clear_bit(port->dev_num, dev_map); |
| 1058 | 1059 | ||
| 1059 | return -1; | 1060 | return -1; |
| @@ -1065,14 +1066,14 @@ static void ib_umad_kill_port(struct ib_umad_port *port) | |||
| 1065 | int already_dead; | 1066 | int already_dead; |
| 1066 | int id; | 1067 | int id; |
| 1067 | 1068 | ||
| 1068 | class_set_devdata(port->class_dev, NULL); | 1069 | dev_set_drvdata(port->dev, NULL); |
| 1069 | class_set_devdata(port->sm_class_dev, NULL); | 1070 | dev_set_drvdata(port->sm_dev, NULL); |
| 1070 | 1071 | ||
| 1071 | class_device_destroy(umad_class, port->dev->dev); | 1072 | device_destroy(umad_class, port->cdev->dev); |
| 1072 | class_device_destroy(umad_class, port->sm_dev->dev); | 1073 | device_destroy(umad_class, port->sm_cdev->dev); |
| 1073 | 1074 | ||
| 1074 | cdev_del(port->dev); | 1075 | cdev_del(port->cdev); |
| 1075 | cdev_del(port->sm_dev); | 1076 | cdev_del(port->sm_cdev); |
| 1076 | 1077 | ||
| 1077 | spin_lock(&port_lock); | 1078 | spin_lock(&port_lock); |
| 1078 | umad_port[port->dev_num] = NULL; | 1079 | umad_port[port->dev_num] = NULL; |
diff --git a/drivers/infiniband/core/uverbs.h b/drivers/infiniband/core/uverbs.h index 2cad8b4b5292..376a57ce1b40 100644 --- a/drivers/infiniband/core/uverbs.h +++ b/drivers/infiniband/core/uverbs.h | |||
| @@ -73,8 +73,8 @@ struct ib_uverbs_device { | |||
| 73 | struct kref ref; | 73 | struct kref ref; |
| 74 | struct completion comp; | 74 | struct completion comp; |
| 75 | int devnum; | 75 | int devnum; |
| 76 | struct cdev *dev; | 76 | struct cdev *cdev; |
| 77 | struct class_device *class_dev; | 77 | struct device *dev; |
| 78 | struct ib_device *ib_dev; | 78 | struct ib_device *ib_dev; |
| 79 | int num_comp_vectors; | 79 | int num_comp_vectors; |
| 80 | }; | 80 | }; |
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c index f49f94653a96..cc1afa28c181 100644 --- a/drivers/infiniband/core/uverbs_main.c +++ b/drivers/infiniband/core/uverbs_main.c | |||
| @@ -690,27 +690,29 @@ static struct ib_client uverbs_client = { | |||
| 690 | .remove = ib_uverbs_remove_one | 690 | .remove = ib_uverbs_remove_one |
| 691 | }; | 691 | }; |
| 692 | 692 | ||
| 693 | static ssize_t show_ibdev(struct class_device *class_dev, char *buf) | 693 | static ssize_t show_ibdev(struct device *device, struct device_attribute *attr, |
| 694 | char *buf) | ||
| 694 | { | 695 | { |
| 695 | struct ib_uverbs_device *dev = class_get_devdata(class_dev); | 696 | struct ib_uverbs_device *dev = dev_get_drvdata(device); |
| 696 | 697 | ||
| 697 | if (!dev) | 698 | if (!dev) |
| 698 | return -ENODEV; | 699 | return -ENODEV; |
| 699 | 700 | ||
| 700 | return sprintf(buf, "%s\n", dev->ib_dev->name); | 701 | return sprintf(buf, "%s\n", dev->ib_dev->name); |
| 701 | } | 702 | } |
| 702 | static CLASS_DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); | 703 | static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); |
| 703 | 704 | ||
| 704 | static ssize_t show_dev_abi_version(struct class_device *class_dev, char *buf) | 705 | static ssize_t show_dev_abi_version(struct device *device, |
| 706 | struct device_attribute *attr, char *buf) | ||
| 705 | { | 707 | { |
| 706 | struct ib_uverbs_device *dev = class_get_devdata(class_dev); | 708 | struct ib_uverbs_device *dev = dev_get_drvdata(device); |
| 707 | 709 | ||
| 708 | if (!dev) | 710 | if (!dev) |
| 709 | return -ENODEV; | 711 | return -ENODEV; |
| 710 | 712 | ||
| 711 | return sprintf(buf, "%d\n", dev->ib_dev->uverbs_abi_ver); | 713 | return sprintf(buf, "%d\n", dev->ib_dev->uverbs_abi_ver); |
| 712 | } | 714 | } |
| 713 | static CLASS_DEVICE_ATTR(abi_version, S_IRUGO, show_dev_abi_version, NULL); | 715 | static DEVICE_ATTR(abi_version, S_IRUGO, show_dev_abi_version, NULL); |
| 714 | 716 | ||
| 715 | static ssize_t show_abi_version(struct class *class, char *buf) | 717 | static ssize_t show_abi_version(struct class *class, char *buf) |
| 716 | { | 718 | { |
| @@ -744,27 +746,26 @@ static void ib_uverbs_add_one(struct ib_device *device) | |||
| 744 | uverbs_dev->ib_dev = device; | 746 | uverbs_dev->ib_dev = device; |
| 745 | uverbs_dev->num_comp_vectors = device->num_comp_vectors; | 747 | uverbs_dev->num_comp_vectors = device->num_comp_vectors; |
| 746 | 748 | ||
| 747 | uverbs_dev->dev = cdev_alloc(); | 749 | uverbs_dev->cdev = cdev_alloc(); |
| 748 | if (!uverbs_dev->dev) | 750 | if (!uverbs_dev->cdev) |
| 749 | goto err; | 751 | goto err; |
| 750 | uverbs_dev->dev->owner = THIS_MODULE; | 752 | uverbs_dev->cdev->owner = THIS_MODULE; |
| 751 | uverbs_dev->dev->ops = device->mmap ? &uverbs_mmap_fops : &uverbs_fops; | 753 | uverbs_dev->cdev->ops = device->mmap ? &uverbs_mmap_fops : &uverbs_fops; |
| 752 | kobject_set_name(&uverbs_dev->dev->kobj, "uverbs%d", uverbs_dev->devnum); | 754 | kobject_set_name(&uverbs_dev->cdev->kobj, "uverbs%d", uverbs_dev->devnum); |
| 753 | if (cdev_add(uverbs_dev->dev, IB_UVERBS_BASE_DEV + uverbs_dev->devnum, 1)) | 755 | if (cdev_add(uverbs_dev->cdev, IB_UVERBS_BASE_DEV + uverbs_dev->devnum, 1)) |
| 754 | goto err_cdev; | 756 | goto err_cdev; |
| 755 | 757 | ||
| 756 | uverbs_dev->class_dev = class_device_create(uverbs_class, NULL, | 758 | uverbs_dev->dev = device_create(uverbs_class, device->dma_device, |
| 757 | uverbs_dev->dev->dev, | 759 | uverbs_dev->cdev->dev, |
| 758 | device->dma_device, | 760 | "uverbs%d", uverbs_dev->devnum); |
| 759 | "uverbs%d", uverbs_dev->devnum); | 761 | if (IS_ERR(uverbs_dev->dev)) |
| 760 | if (IS_ERR(uverbs_dev->class_dev)) | ||
| 761 | goto err_cdev; | 762 | goto err_cdev; |
| 762 | 763 | ||
| 763 | class_set_devdata(uverbs_dev->class_dev, uverbs_dev); | 764 | dev_set_drvdata(uverbs_dev->dev, uverbs_dev); |
| 764 | 765 | ||
| 765 | if (class_device_create_file(uverbs_dev->class_dev, &class_device_attr_ibdev)) | 766 | if (device_create_file(uverbs_dev->dev, &dev_attr_ibdev)) |
| 766 | goto err_class; | 767 | goto err_class; |
| 767 | if (class_device_create_file(uverbs_dev->class_dev, &class_device_attr_abi_version)) | 768 | if (device_create_file(uverbs_dev->dev, &dev_attr_abi_version)) |
| 768 | goto err_class; | 769 | goto err_class; |
| 769 | 770 | ||
| 770 | spin_lock(&map_lock); | 771 | spin_lock(&map_lock); |
| @@ -776,10 +777,10 @@ static void ib_uverbs_add_one(struct ib_device *device) | |||
| 776 | return; | 777 | return; |
| 777 | 778 | ||
| 778 | err_class: | 779 | err_class: |
| 779 | class_device_destroy(uverbs_class, uverbs_dev->dev->dev); | 780 | device_destroy(uverbs_class, uverbs_dev->cdev->dev); |
| 780 | 781 | ||
| 781 | err_cdev: | 782 | err_cdev: |
| 782 | cdev_del(uverbs_dev->dev); | 783 | cdev_del(uverbs_dev->cdev); |
| 783 | clear_bit(uverbs_dev->devnum, dev_map); | 784 | clear_bit(uverbs_dev->devnum, dev_map); |
| 784 | 785 | ||
| 785 | err: | 786 | err: |
| @@ -796,9 +797,9 @@ static void ib_uverbs_remove_one(struct ib_device *device) | |||
| 796 | if (!uverbs_dev) | 797 | if (!uverbs_dev) |
| 797 | return; | 798 | return; |
| 798 | 799 | ||
| 799 | class_set_devdata(uverbs_dev->class_dev, NULL); | 800 | dev_set_drvdata(uverbs_dev->dev, NULL); |
| 800 | class_device_destroy(uverbs_class, uverbs_dev->dev->dev); | 801 | device_destroy(uverbs_class, uverbs_dev->cdev->dev); |
| 801 | cdev_del(uverbs_dev->dev); | 802 | cdev_del(uverbs_dev->cdev); |
| 802 | 803 | ||
| 803 | spin_lock(&map_lock); | 804 | spin_lock(&map_lock); |
| 804 | dev_table[uverbs_dev->devnum] = NULL; | 805 | dev_table[uverbs_dev->devnum] = NULL; |
diff --git a/drivers/infiniband/hw/amso1100/c2_provider.c b/drivers/infiniband/hw/amso1100/c2_provider.c index e10d27a6e145..6af2c0f79a67 100644 --- a/drivers/infiniband/hw/amso1100/c2_provider.c +++ b/drivers/infiniband/hw/amso1100/c2_provider.c | |||
| @@ -523,45 +523,49 @@ static int c2_dereg_mr(struct ib_mr *ib_mr) | |||
| 523 | return err; | 523 | return err; |
| 524 | } | 524 | } |
| 525 | 525 | ||
| 526 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 526 | static ssize_t show_rev(struct device *dev, struct device_attribute *attr, |
| 527 | char *buf) | ||
| 527 | { | 528 | { |
| 528 | struct c2_dev *dev = container_of(cdev, struct c2_dev, ibdev.class_dev); | 529 | struct c2_dev *c2dev = container_of(dev, struct c2_dev, ibdev.dev); |
| 529 | pr_debug("%s:%u\n", __func__, __LINE__); | 530 | pr_debug("%s:%u\n", __func__, __LINE__); |
| 530 | return sprintf(buf, "%x\n", dev->props.hw_ver); | 531 | return sprintf(buf, "%x\n", c2dev->props.hw_ver); |
| 531 | } | 532 | } |
| 532 | 533 | ||
| 533 | static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | 534 | static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, |
| 535 | char *buf) | ||
| 534 | { | 536 | { |
| 535 | struct c2_dev *dev = container_of(cdev, struct c2_dev, ibdev.class_dev); | 537 | struct c2_dev *c2dev = container_of(dev, struct c2_dev, ibdev.dev); |
| 536 | pr_debug("%s:%u\n", __func__, __LINE__); | 538 | pr_debug("%s:%u\n", __func__, __LINE__); |
| 537 | return sprintf(buf, "%x.%x.%x\n", | 539 | return sprintf(buf, "%x.%x.%x\n", |
| 538 | (int) (dev->props.fw_ver >> 32), | 540 | (int) (c2dev->props.fw_ver >> 32), |
| 539 | (int) (dev->props.fw_ver >> 16) & 0xffff, | 541 | (int) (c2dev->props.fw_ver >> 16) & 0xffff, |
| 540 | (int) (dev->props.fw_ver & 0xffff)); | 542 | (int) (c2dev->props.fw_ver & 0xffff)); |
| 541 | } | 543 | } |
| 542 | 544 | ||
| 543 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 545 | static ssize_t show_hca(struct device *dev, struct device_attribute *attr, |
| 546 | char *buf) | ||
| 544 | { | 547 | { |
| 545 | pr_debug("%s:%u\n", __func__, __LINE__); | 548 | pr_debug("%s:%u\n", __func__, __LINE__); |
| 546 | return sprintf(buf, "AMSO1100\n"); | 549 | return sprintf(buf, "AMSO1100\n"); |
| 547 | } | 550 | } |
| 548 | 551 | ||
| 549 | static ssize_t show_board(struct class_device *cdev, char *buf) | 552 | static ssize_t show_board(struct device *dev, struct device_attribute *attr, |
| 553 | char *buf) | ||
| 550 | { | 554 | { |
| 551 | pr_debug("%s:%u\n", __func__, __LINE__); | 555 | pr_debug("%s:%u\n", __func__, __LINE__); |
| 552 | return sprintf(buf, "%.*s\n", 32, "AMSO1100 Board ID"); | 556 | return sprintf(buf, "%.*s\n", 32, "AMSO1100 Board ID"); |
| 553 | } | 557 | } |
| 554 | 558 | ||
| 555 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 559 | static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| 556 | static CLASS_DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); | 560 | static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); |
| 557 | static CLASS_DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); | 561 | static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); |
| 558 | static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); | 562 | static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); |
| 559 | 563 | ||
| 560 | static struct class_device_attribute *c2_class_attributes[] = { | 564 | static struct device_attribute *c2_dev_attributes[] = { |
| 561 | &class_device_attr_hw_rev, | 565 | &dev_attr_hw_rev, |
| 562 | &class_device_attr_fw_ver, | 566 | &dev_attr_fw_ver, |
| 563 | &class_device_attr_hca_type, | 567 | &dev_attr_hca_type, |
| 564 | &class_device_attr_board_id | 568 | &dev_attr_board_id |
| 565 | }; | 569 | }; |
| 566 | 570 | ||
| 567 | static int c2_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, | 571 | static int c2_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, |
| @@ -861,9 +865,9 @@ int c2_register_device(struct c2_dev *dev) | |||
| 861 | if (ret) | 865 | if (ret) |
| 862 | goto out1; | 866 | goto out1; |
| 863 | 867 | ||
| 864 | for (i = 0; i < ARRAY_SIZE(c2_class_attributes); ++i) { | 868 | for (i = 0; i < ARRAY_SIZE(c2_dev_attributes); ++i) { |
| 865 | ret = class_device_create_file(&dev->ibdev.class_dev, | 869 | ret = device_create_file(&dev->ibdev.dev, |
| 866 | c2_class_attributes[i]); | 870 | c2_dev_attributes[i]); |
| 867 | if (ret) | 871 | if (ret) |
| 868 | goto out0; | 872 | goto out0; |
| 869 | } | 873 | } |
diff --git a/drivers/infiniband/hw/cxgb3/iwch_provider.c b/drivers/infiniband/hw/cxgb3/iwch_provider.c index ca7265443c05..ab4695c1dd56 100644 --- a/drivers/infiniband/hw/cxgb3/iwch_provider.c +++ b/drivers/infiniband/hw/cxgb3/iwch_provider.c | |||
| @@ -1041,61 +1041,60 @@ static int iwch_query_port(struct ib_device *ibdev, | |||
| 1041 | return 0; | 1041 | return 0; |
| 1042 | } | 1042 | } |
| 1043 | 1043 | ||
| 1044 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 1044 | static ssize_t show_rev(struct device *dev, struct device_attribute *attr, |
| 1045 | char *buf) | ||
| 1045 | { | 1046 | { |
| 1046 | struct iwch_dev *dev = container_of(cdev, struct iwch_dev, | 1047 | struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev, |
| 1047 | ibdev.class_dev); | 1048 | ibdev.dev); |
| 1048 | PDBG("%s class dev 0x%p\n", __func__, cdev); | 1049 | PDBG("%s dev 0x%p\n", __func__, dev); |
| 1049 | return sprintf(buf, "%d\n", dev->rdev.t3cdev_p->type); | 1050 | return sprintf(buf, "%d\n", iwch_dev->rdev.t3cdev_p->type); |
| 1050 | } | 1051 | } |
| 1051 | 1052 | ||
| 1052 | static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | 1053 | static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, char *buf) |
| 1053 | { | 1054 | { |
| 1054 | struct iwch_dev *dev = container_of(cdev, struct iwch_dev, | 1055 | struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev, |
| 1055 | ibdev.class_dev); | 1056 | ibdev.dev); |
| 1056 | struct ethtool_drvinfo info; | 1057 | struct ethtool_drvinfo info; |
| 1057 | struct net_device *lldev = dev->rdev.t3cdev_p->lldev; | 1058 | struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev; |
| 1058 | 1059 | ||
| 1059 | PDBG("%s class dev 0x%p\n", __func__, cdev); | 1060 | PDBG("%s dev 0x%p\n", __func__, dev); |
| 1060 | rtnl_lock(); | ||
| 1061 | lldev->ethtool_ops->get_drvinfo(lldev, &info); | 1061 | lldev->ethtool_ops->get_drvinfo(lldev, &info); |
| 1062 | rtnl_unlock(); | ||
| 1063 | return sprintf(buf, "%s\n", info.fw_version); | 1062 | return sprintf(buf, "%s\n", info.fw_version); |
| 1064 | } | 1063 | } |
| 1065 | 1064 | ||
| 1066 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 1065 | static ssize_t show_hca(struct device *dev, struct device_attribute *attr, |
| 1066 | char *buf) | ||
| 1067 | { | 1067 | { |
| 1068 | struct iwch_dev *dev = container_of(cdev, struct iwch_dev, | 1068 | struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev, |
| 1069 | ibdev.class_dev); | 1069 | ibdev.dev); |
| 1070 | struct ethtool_drvinfo info; | 1070 | struct ethtool_drvinfo info; |
| 1071 | struct net_device *lldev = dev->rdev.t3cdev_p->lldev; | 1071 | struct net_device *lldev = iwch_dev->rdev.t3cdev_p->lldev; |
| 1072 | 1072 | ||
| 1073 | PDBG("%s class dev 0x%p\n", __func__, cdev); | 1073 | PDBG("%s dev 0x%p\n", __func__, dev); |
| 1074 | rtnl_lock(); | ||
| 1075 | lldev->ethtool_ops->get_drvinfo(lldev, &info); | 1074 | lldev->ethtool_ops->get_drvinfo(lldev, &info); |
| 1076 | rtnl_unlock(); | ||
| 1077 | return sprintf(buf, "%s\n", info.driver); | 1075 | return sprintf(buf, "%s\n", info.driver); |
| 1078 | } | 1076 | } |
| 1079 | 1077 | ||
| 1080 | static ssize_t show_board(struct class_device *cdev, char *buf) | 1078 | static ssize_t show_board(struct device *dev, struct device_attribute *attr, |
| 1079 | char *buf) | ||
| 1081 | { | 1080 | { |
| 1082 | struct iwch_dev *dev = container_of(cdev, struct iwch_dev, | 1081 | struct iwch_dev *iwch_dev = container_of(dev, struct iwch_dev, |
| 1083 | ibdev.class_dev); | 1082 | ibdev.dev); |
| 1084 | PDBG("%s class dev 0x%p\n", __func__, dev); | 1083 | PDBG("%s dev 0x%p\n", __func__, dev); |
| 1085 | return sprintf(buf, "%x.%x\n", dev->rdev.rnic_info.pdev->vendor, | 1084 | return sprintf(buf, "%x.%x\n", iwch_dev->rdev.rnic_info.pdev->vendor, |
| 1086 | dev->rdev.rnic_info.pdev->device); | 1085 | iwch_dev->rdev.rnic_info.pdev->device); |
| 1087 | } | 1086 | } |
| 1088 | 1087 | ||
| 1089 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 1088 | static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| 1090 | static CLASS_DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); | 1089 | static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); |
| 1091 | static CLASS_DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); | 1090 | static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); |
| 1092 | static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); | 1091 | static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); |
| 1093 | 1092 | ||
| 1094 | static struct class_device_attribute *iwch_class_attributes[] = { | 1093 | static struct device_attribute *iwch_class_attributes[] = { |
| 1095 | &class_device_attr_hw_rev, | 1094 | &dev_attr_hw_rev, |
| 1096 | &class_device_attr_fw_ver, | 1095 | &dev_attr_fw_ver, |
| 1097 | &class_device_attr_hca_type, | 1096 | &dev_attr_hca_type, |
| 1098 | &class_device_attr_board_id | 1097 | &dev_attr_board_id |
| 1099 | }; | 1098 | }; |
| 1100 | 1099 | ||
| 1101 | int iwch_register_device(struct iwch_dev *dev) | 1100 | int iwch_register_device(struct iwch_dev *dev) |
| @@ -1189,8 +1188,8 @@ int iwch_register_device(struct iwch_dev *dev) | |||
| 1189 | goto bail1; | 1188 | goto bail1; |
| 1190 | 1189 | ||
| 1191 | for (i = 0; i < ARRAY_SIZE(iwch_class_attributes); ++i) { | 1190 | for (i = 0; i < ARRAY_SIZE(iwch_class_attributes); ++i) { |
| 1192 | ret = class_device_create_file(&dev->ibdev.class_dev, | 1191 | ret = device_create_file(&dev->ibdev.dev, |
| 1193 | iwch_class_attributes[i]); | 1192 | iwch_class_attributes[i]); |
| 1194 | if (ret) { | 1193 | if (ret) { |
| 1195 | goto bail2; | 1194 | goto bail2; |
| 1196 | } | 1195 | } |
| @@ -1208,8 +1207,8 @@ void iwch_unregister_device(struct iwch_dev *dev) | |||
| 1208 | 1207 | ||
| 1209 | PDBG("%s iwch_dev %p\n", __func__, dev); | 1208 | PDBG("%s iwch_dev %p\n", __func__, dev); |
| 1210 | for (i = 0; i < ARRAY_SIZE(iwch_class_attributes); ++i) | 1209 | for (i = 0; i < ARRAY_SIZE(iwch_class_attributes); ++i) |
| 1211 | class_device_remove_file(&dev->ibdev.class_dev, | 1210 | device_remove_file(&dev->ibdev.dev, |
| 1212 | iwch_class_attributes[i]); | 1211 | iwch_class_attributes[i]); |
| 1213 | ib_unregister_device(&dev->ibdev); | 1212 | ib_unregister_device(&dev->ibdev); |
| 1214 | return; | 1213 | return; |
| 1215 | } | 1214 | } |
diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c index 6d49d2f18a88..d4ce8b63e19e 100644 --- a/drivers/infiniband/hw/ipath/ipath_diag.c +++ b/drivers/infiniband/hw/ipath/ipath_diag.c | |||
| @@ -79,7 +79,7 @@ static const struct file_operations diagpkt_file_ops = { | |||
| 79 | 79 | ||
| 80 | static atomic_t diagpkt_count = ATOMIC_INIT(0); | 80 | static atomic_t diagpkt_count = ATOMIC_INIT(0); |
| 81 | static struct cdev *diagpkt_cdev; | 81 | static struct cdev *diagpkt_cdev; |
| 82 | static struct class_device *diagpkt_class_dev; | 82 | static struct device *diagpkt_dev; |
| 83 | 83 | ||
| 84 | int ipath_diag_add(struct ipath_devdata *dd) | 84 | int ipath_diag_add(struct ipath_devdata *dd) |
| 85 | { | 85 | { |
| @@ -89,7 +89,7 @@ int ipath_diag_add(struct ipath_devdata *dd) | |||
| 89 | if (atomic_inc_return(&diagpkt_count) == 1) { | 89 | if (atomic_inc_return(&diagpkt_count) == 1) { |
| 90 | ret = ipath_cdev_init(IPATH_DIAGPKT_MINOR, | 90 | ret = ipath_cdev_init(IPATH_DIAGPKT_MINOR, |
| 91 | "ipath_diagpkt", &diagpkt_file_ops, | 91 | "ipath_diagpkt", &diagpkt_file_ops, |
| 92 | &diagpkt_cdev, &diagpkt_class_dev); | 92 | &diagpkt_cdev, &diagpkt_dev); |
| 93 | 93 | ||
| 94 | if (ret) { | 94 | if (ret) { |
| 95 | ipath_dev_err(dd, "Couldn't create ipath_diagpkt " | 95 | ipath_dev_err(dd, "Couldn't create ipath_diagpkt " |
| @@ -102,7 +102,7 @@ int ipath_diag_add(struct ipath_devdata *dd) | |||
| 102 | 102 | ||
| 103 | ret = ipath_cdev_init(IPATH_DIAG_MINOR_BASE + dd->ipath_unit, name, | 103 | ret = ipath_cdev_init(IPATH_DIAG_MINOR_BASE + dd->ipath_unit, name, |
| 104 | &diag_file_ops, &dd->diag_cdev, | 104 | &diag_file_ops, &dd->diag_cdev, |
| 105 | &dd->diag_class_dev); | 105 | &dd->diag_dev); |
| 106 | if (ret) | 106 | if (ret) |
| 107 | ipath_dev_err(dd, "Couldn't create %s device: %d", | 107 | ipath_dev_err(dd, "Couldn't create %s device: %d", |
| 108 | name, ret); | 108 | name, ret); |
| @@ -114,9 +114,9 @@ done: | |||
| 114 | void ipath_diag_remove(struct ipath_devdata *dd) | 114 | void ipath_diag_remove(struct ipath_devdata *dd) |
| 115 | { | 115 | { |
| 116 | if (atomic_dec_and_test(&diagpkt_count)) | 116 | if (atomic_dec_and_test(&diagpkt_count)) |
| 117 | ipath_cdev_cleanup(&diagpkt_cdev, &diagpkt_class_dev); | 117 | ipath_cdev_cleanup(&diagpkt_cdev, &diagpkt_dev); |
| 118 | 118 | ||
| 119 | ipath_cdev_cleanup(&dd->diag_cdev, &dd->diag_class_dev); | 119 | ipath_cdev_cleanup(&dd->diag_cdev, &dd->diag_dev); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | /** | 122 | /** |
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c index 1e627aab18bf..8b1752202e78 100644 --- a/drivers/infiniband/hw/ipath/ipath_file_ops.c +++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c | |||
| @@ -2434,11 +2434,11 @@ static ssize_t ipath_writev(struct kiocb *iocb, const struct iovec *iov, | |||
| 2434 | static struct class *ipath_class; | 2434 | static struct class *ipath_class; |
| 2435 | 2435 | ||
| 2436 | static int init_cdev(int minor, char *name, const struct file_operations *fops, | 2436 | static int init_cdev(int minor, char *name, const struct file_operations *fops, |
| 2437 | struct cdev **cdevp, struct class_device **class_devp) | 2437 | struct cdev **cdevp, struct device **devp) |
| 2438 | { | 2438 | { |
| 2439 | const dev_t dev = MKDEV(IPATH_MAJOR, minor); | 2439 | const dev_t dev = MKDEV(IPATH_MAJOR, minor); |
| 2440 | struct cdev *cdev = NULL; | 2440 | struct cdev *cdev = NULL; |
| 2441 | struct class_device *class_dev = NULL; | 2441 | struct device *device = NULL; |
| 2442 | int ret; | 2442 | int ret; |
| 2443 | 2443 | ||
| 2444 | cdev = cdev_alloc(); | 2444 | cdev = cdev_alloc(); |
| @@ -2462,12 +2462,12 @@ static int init_cdev(int minor, char *name, const struct file_operations *fops, | |||
| 2462 | goto err_cdev; | 2462 | goto err_cdev; |
| 2463 | } | 2463 | } |
| 2464 | 2464 | ||
| 2465 | class_dev = class_device_create(ipath_class, NULL, dev, NULL, name); | 2465 | device = device_create(ipath_class, NULL, dev, name); |
| 2466 | 2466 | ||
| 2467 | if (IS_ERR(class_dev)) { | 2467 | if (IS_ERR(device)) { |
| 2468 | ret = PTR_ERR(class_dev); | 2468 | ret = PTR_ERR(device); |
| 2469 | printk(KERN_ERR IPATH_DRV_NAME ": Could not create " | 2469 | printk(KERN_ERR IPATH_DRV_NAME ": Could not create " |
| 2470 | "class_dev for minor %d, %s (err %d)\n", | 2470 | "device for minor %d, %s (err %d)\n", |
| 2471 | minor, name, -ret); | 2471 | minor, name, -ret); |
| 2472 | goto err_cdev; | 2472 | goto err_cdev; |
| 2473 | } | 2473 | } |
| @@ -2481,29 +2481,29 @@ err_cdev: | |||
| 2481 | done: | 2481 | done: |
| 2482 | if (ret >= 0) { | 2482 | if (ret >= 0) { |
| 2483 | *cdevp = cdev; | 2483 | *cdevp = cdev; |
| 2484 | *class_devp = class_dev; | 2484 | *devp = device; |
| 2485 | } else { | 2485 | } else { |
| 2486 | *cdevp = NULL; | 2486 | *cdevp = NULL; |
| 2487 | *class_devp = NULL; | 2487 | *devp = NULL; |
| 2488 | } | 2488 | } |
| 2489 | 2489 | ||
| 2490 | return ret; | 2490 | return ret; |
| 2491 | } | 2491 | } |
| 2492 | 2492 | ||
| 2493 | int ipath_cdev_init(int minor, char *name, const struct file_operations *fops, | 2493 | int ipath_cdev_init(int minor, char *name, const struct file_operations *fops, |
| 2494 | struct cdev **cdevp, struct class_device **class_devp) | 2494 | struct cdev **cdevp, struct device **devp) |
| 2495 | { | 2495 | { |
| 2496 | return init_cdev(minor, name, fops, cdevp, class_devp); | 2496 | return init_cdev(minor, name, fops, cdevp, devp); |
| 2497 | } | 2497 | } |
| 2498 | 2498 | ||
| 2499 | static void cleanup_cdev(struct cdev **cdevp, | 2499 | static void cleanup_cdev(struct cdev **cdevp, |
| 2500 | struct class_device **class_devp) | 2500 | struct device **devp) |
| 2501 | { | 2501 | { |
| 2502 | struct class_device *class_dev = *class_devp; | 2502 | struct device *dev = *devp; |
| 2503 | 2503 | ||
| 2504 | if (class_dev) { | 2504 | if (dev) { |
| 2505 | class_device_unregister(class_dev); | 2505 | device_unregister(dev); |
| 2506 | *class_devp = NULL; | 2506 | *devp = NULL; |
| 2507 | } | 2507 | } |
| 2508 | 2508 | ||
| 2509 | if (*cdevp) { | 2509 | if (*cdevp) { |
| @@ -2513,13 +2513,13 @@ static void cleanup_cdev(struct cdev **cdevp, | |||
| 2513 | } | 2513 | } |
| 2514 | 2514 | ||
| 2515 | void ipath_cdev_cleanup(struct cdev **cdevp, | 2515 | void ipath_cdev_cleanup(struct cdev **cdevp, |
| 2516 | struct class_device **class_devp) | 2516 | struct device **devp) |
| 2517 | { | 2517 | { |
| 2518 | cleanup_cdev(cdevp, class_devp); | 2518 | cleanup_cdev(cdevp, devp); |
| 2519 | } | 2519 | } |
| 2520 | 2520 | ||
| 2521 | static struct cdev *wildcard_cdev; | 2521 | static struct cdev *wildcard_cdev; |
| 2522 | static struct class_device *wildcard_class_dev; | 2522 | static struct device *wildcard_dev; |
| 2523 | 2523 | ||
| 2524 | static const dev_t dev = MKDEV(IPATH_MAJOR, 0); | 2524 | static const dev_t dev = MKDEV(IPATH_MAJOR, 0); |
| 2525 | 2525 | ||
| @@ -2576,7 +2576,7 @@ int ipath_user_add(struct ipath_devdata *dd) | |||
| 2576 | goto bail; | 2576 | goto bail; |
| 2577 | } | 2577 | } |
| 2578 | ret = init_cdev(0, "ipath", &ipath_file_ops, &wildcard_cdev, | 2578 | ret = init_cdev(0, "ipath", &ipath_file_ops, &wildcard_cdev, |
| 2579 | &wildcard_class_dev); | 2579 | &wildcard_dev); |
| 2580 | if (ret < 0) { | 2580 | if (ret < 0) { |
| 2581 | ipath_dev_err(dd, "Could not create wildcard " | 2581 | ipath_dev_err(dd, "Could not create wildcard " |
| 2582 | "minor: error %d\n", -ret); | 2582 | "minor: error %d\n", -ret); |
| @@ -2589,7 +2589,7 @@ int ipath_user_add(struct ipath_devdata *dd) | |||
| 2589 | snprintf(name, sizeof(name), "ipath%d", dd->ipath_unit); | 2589 | snprintf(name, sizeof(name), "ipath%d", dd->ipath_unit); |
| 2590 | 2590 | ||
| 2591 | ret = init_cdev(dd->ipath_unit + 1, name, &ipath_file_ops, | 2591 | ret = init_cdev(dd->ipath_unit + 1, name, &ipath_file_ops, |
| 2592 | &dd->user_cdev, &dd->user_class_dev); | 2592 | &dd->user_cdev, &dd->user_dev); |
| 2593 | if (ret < 0) | 2593 | if (ret < 0) |
| 2594 | ipath_dev_err(dd, "Could not create user minor %d, %s\n", | 2594 | ipath_dev_err(dd, "Could not create user minor %d, %s\n", |
| 2595 | dd->ipath_unit + 1, name); | 2595 | dd->ipath_unit + 1, name); |
| @@ -2604,13 +2604,13 @@ bail: | |||
| 2604 | 2604 | ||
| 2605 | void ipath_user_remove(struct ipath_devdata *dd) | 2605 | void ipath_user_remove(struct ipath_devdata *dd) |
| 2606 | { | 2606 | { |
| 2607 | cleanup_cdev(&dd->user_cdev, &dd->user_class_dev); | 2607 | cleanup_cdev(&dd->user_cdev, &dd->user_dev); |
| 2608 | 2608 | ||
| 2609 | if (atomic_dec_return(&user_count) == 0) { | 2609 | if (atomic_dec_return(&user_count) == 0) { |
| 2610 | if (atomic_read(&user_setup) == 0) | 2610 | if (atomic_read(&user_setup) == 0) |
| 2611 | goto bail; | 2611 | goto bail; |
| 2612 | 2612 | ||
| 2613 | cleanup_cdev(&wildcard_cdev, &wildcard_class_dev); | 2613 | cleanup_cdev(&wildcard_cdev, &wildcard_dev); |
| 2614 | user_cleanup(); | 2614 | user_cleanup(); |
| 2615 | 2615 | ||
| 2616 | atomic_set(&user_setup, 0); | 2616 | atomic_set(&user_setup, 0); |
diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h index 5863cbe99303..202337ae90dc 100644 --- a/drivers/infiniband/hw/ipath/ipath_kernel.h +++ b/drivers/infiniband/hw/ipath/ipath_kernel.h | |||
| @@ -466,8 +466,8 @@ struct ipath_devdata { | |||
| 466 | struct pci_dev *pcidev; | 466 | struct pci_dev *pcidev; |
| 467 | struct cdev *user_cdev; | 467 | struct cdev *user_cdev; |
| 468 | struct cdev *diag_cdev; | 468 | struct cdev *diag_cdev; |
| 469 | struct class_device *user_class_dev; | 469 | struct device *user_dev; |
| 470 | struct class_device *diag_class_dev; | 470 | struct device *diag_dev; |
| 471 | /* timer used to prevent stats overflow, error throttling, etc. */ | 471 | /* timer used to prevent stats overflow, error throttling, etc. */ |
| 472 | struct timer_list ipath_stats_timer; | 472 | struct timer_list ipath_stats_timer; |
| 473 | /* timer to verify interrupts work, and fallback if possible */ | 473 | /* timer to verify interrupts work, and fallback if possible */ |
| @@ -854,9 +854,9 @@ void ipath_clear_freeze(struct ipath_devdata *); | |||
| 854 | 854 | ||
| 855 | struct file_operations; | 855 | struct file_operations; |
| 856 | int ipath_cdev_init(int minor, char *name, const struct file_operations *fops, | 856 | int ipath_cdev_init(int minor, char *name, const struct file_operations *fops, |
| 857 | struct cdev **cdevp, struct class_device **class_devp); | 857 | struct cdev **cdevp, struct device **devp); |
| 858 | void ipath_cdev_cleanup(struct cdev **cdevp, | 858 | void ipath_cdev_cleanup(struct cdev **cdevp, |
| 859 | struct class_device **class_devp); | 859 | struct device **devp); |
| 860 | 860 | ||
| 861 | int ipath_diag_add(struct ipath_devdata *); | 861 | int ipath_diag_add(struct ipath_devdata *); |
| 862 | void ipath_diag_remove(struct ipath_devdata *); | 862 | void ipath_diag_remove(struct ipath_devdata *); |
diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index 320a6d018de7..c38f9aa8be8d 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
| @@ -2172,18 +2172,20 @@ void ipath_unregister_ib_device(struct ipath_ibdev *dev) | |||
| 2172 | ib_dealloc_device(ibdev); | 2172 | ib_dealloc_device(ibdev); |
| 2173 | } | 2173 | } |
| 2174 | 2174 | ||
| 2175 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 2175 | static ssize_t show_rev(struct device *device, struct device_attribute *attr, |
| 2176 | char *buf) | ||
| 2176 | { | 2177 | { |
| 2177 | struct ipath_ibdev *dev = | 2178 | struct ipath_ibdev *dev = |
| 2178 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 2179 | container_of(device, struct ipath_ibdev, ibdev.dev); |
| 2179 | 2180 | ||
| 2180 | return sprintf(buf, "%x\n", dev->dd->ipath_pcirev); | 2181 | return sprintf(buf, "%x\n", dev->dd->ipath_pcirev); |
| 2181 | } | 2182 | } |
| 2182 | 2183 | ||
| 2183 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 2184 | static ssize_t show_hca(struct device *device, struct device_attribute *attr, |
| 2185 | char *buf) | ||
| 2184 | { | 2186 | { |
| 2185 | struct ipath_ibdev *dev = | 2187 | struct ipath_ibdev *dev = |
| 2186 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 2188 | container_of(device, struct ipath_ibdev, ibdev.dev); |
| 2187 | int ret; | 2189 | int ret; |
| 2188 | 2190 | ||
| 2189 | ret = dev->dd->ipath_f_get_boardname(dev->dd, buf, 128); | 2191 | ret = dev->dd->ipath_f_get_boardname(dev->dd, buf, 128); |
| @@ -2196,10 +2198,11 @@ bail: | |||
| 2196 | return ret; | 2198 | return ret; |
| 2197 | } | 2199 | } |
| 2198 | 2200 | ||
| 2199 | static ssize_t show_stats(struct class_device *cdev, char *buf) | 2201 | static ssize_t show_stats(struct device *device, struct device_attribute *attr, |
| 2202 | char *buf) | ||
| 2200 | { | 2203 | { |
| 2201 | struct ipath_ibdev *dev = | 2204 | struct ipath_ibdev *dev = |
| 2202 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 2205 | container_of(device, struct ipath_ibdev, ibdev.dev); |
| 2203 | int i; | 2206 | int i; |
| 2204 | int len; | 2207 | int len; |
| 2205 | 2208 | ||
| @@ -2237,16 +2240,16 @@ static ssize_t show_stats(struct class_device *cdev, char *buf) | |||
| 2237 | return len; | 2240 | return len; |
| 2238 | } | 2241 | } |
| 2239 | 2242 | ||
| 2240 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 2243 | static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| 2241 | static CLASS_DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); | 2244 | static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); |
| 2242 | static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_hca, NULL); | 2245 | static DEVICE_ATTR(board_id, S_IRUGO, show_hca, NULL); |
| 2243 | static CLASS_DEVICE_ATTR(stats, S_IRUGO, show_stats, NULL); | 2246 | static DEVICE_ATTR(stats, S_IRUGO, show_stats, NULL); |
| 2244 | 2247 | ||
| 2245 | static struct class_device_attribute *ipath_class_attributes[] = { | 2248 | static struct device_attribute *ipath_class_attributes[] = { |
| 2246 | &class_device_attr_hw_rev, | 2249 | &dev_attr_hw_rev, |
| 2247 | &class_device_attr_hca_type, | 2250 | &dev_attr_hca_type, |
| 2248 | &class_device_attr_board_id, | 2251 | &dev_attr_board_id, |
| 2249 | &class_device_attr_stats | 2252 | &dev_attr_stats |
| 2250 | }; | 2253 | }; |
| 2251 | 2254 | ||
| 2252 | static int ipath_verbs_register_sysfs(struct ib_device *dev) | 2255 | static int ipath_verbs_register_sysfs(struct ib_device *dev) |
| @@ -2255,8 +2258,8 @@ static int ipath_verbs_register_sysfs(struct ib_device *dev) | |||
| 2255 | int ret; | 2258 | int ret; |
| 2256 | 2259 | ||
| 2257 | for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) | 2260 | for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) |
| 2258 | if (class_device_create_file(&dev->class_dev, | 2261 | if (device_create_file(&dev->dev, |
| 2259 | ipath_class_attributes[i])) { | 2262 | ipath_class_attributes[i])) { |
| 2260 | ret = 1; | 2263 | ret = 1; |
| 2261 | goto bail; | 2264 | goto bail; |
| 2262 | } | 2265 | } |
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 136c76c7b4e7..4d9b5ac42202 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
| @@ -481,42 +481,51 @@ out: | |||
| 481 | return err; | 481 | return err; |
| 482 | } | 482 | } |
| 483 | 483 | ||
| 484 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 484 | static ssize_t show_hca(struct device *device, struct device_attribute *attr, |
| 485 | char *buf) | ||
| 485 | { | 486 | { |
| 486 | struct mlx4_ib_dev *dev = container_of(cdev, struct mlx4_ib_dev, ib_dev.class_dev); | 487 | struct mlx4_ib_dev *dev = |
| 488 | container_of(device, struct mlx4_ib_dev, ib_dev.dev); | ||
| 487 | return sprintf(buf, "MT%d\n", dev->dev->pdev->device); | 489 | return sprintf(buf, "MT%d\n", dev->dev->pdev->device); |
| 488 | } | 490 | } |
| 489 | 491 | ||
| 490 | static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | 492 | static ssize_t show_fw_ver(struct device *device, struct device_attribute *attr, |
| 493 | char *buf) | ||
| 491 | { | 494 | { |
| 492 | struct mlx4_ib_dev *dev = container_of(cdev, struct mlx4_ib_dev, ib_dev.class_dev); | 495 | struct mlx4_ib_dev *dev = |
| 496 | container_of(device, struct mlx4_ib_dev, ib_dev.dev); | ||
| 493 | return sprintf(buf, "%d.%d.%d\n", (int) (dev->dev->caps.fw_ver >> 32), | 497 | return sprintf(buf, "%d.%d.%d\n", (int) (dev->dev->caps.fw_ver >> 32), |
| 494 | (int) (dev->dev->caps.fw_ver >> 16) & 0xffff, | 498 | (int) (dev->dev->caps.fw_ver >> 16) & 0xffff, |
| 495 | (int) dev->dev->caps.fw_ver & 0xffff); | 499 | (int) dev->dev->caps.fw_ver & 0xffff); |
| 496 | } | 500 | } |
| 497 | 501 | ||
| 498 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 502 | static ssize_t show_rev(struct device *device, struct device_attribute *attr, |
| 503 | char *buf) | ||
| 499 | { | 504 | { |
| 500 | struct mlx4_ib_dev *dev = container_of(cdev, struct mlx4_ib_dev, ib_dev.class_dev); | 505 | struct mlx4_ib_dev *dev = |
| 506 | container_of(device, struct mlx4_ib_dev, ib_dev.dev); | ||
| 501 | return sprintf(buf, "%x\n", dev->dev->rev_id); | 507 | return sprintf(buf, "%x\n", dev->dev->rev_id); |
| 502 | } | 508 | } |
| 503 | 509 | ||
| 504 | static ssize_t show_board(struct class_device *cdev, char *buf) | 510 | static ssize_t show_board(struct device *device, struct device_attribute *attr, |
| 511 | char *buf) | ||
| 505 | { | 512 | { |
| 506 | struct mlx4_ib_dev *dev = container_of(cdev, struct mlx4_ib_dev, ib_dev.class_dev); | 513 | struct mlx4_ib_dev *dev = |
| 507 | return sprintf(buf, "%.*s\n", MLX4_BOARD_ID_LEN, dev->dev->board_id); | 514 | container_of(device, struct mlx4_ib_dev, ib_dev.dev); |
| 515 | return sprintf(buf, "%.*s\n", MLX4_BOARD_ID_LEN, | ||
| 516 | dev->dev->board_id); | ||
| 508 | } | 517 | } |
| 509 | 518 | ||
| 510 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 519 | static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| 511 | static CLASS_DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); | 520 | static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); |
| 512 | static CLASS_DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); | 521 | static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); |
| 513 | static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); | 522 | static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); |
| 514 | 523 | ||
| 515 | static struct class_device_attribute *mlx4_class_attributes[] = { | 524 | static struct device_attribute *mlx4_class_attributes[] = { |
| 516 | &class_device_attr_hw_rev, | 525 | &dev_attr_hw_rev, |
| 517 | &class_device_attr_fw_ver, | 526 | &dev_attr_fw_ver, |
| 518 | &class_device_attr_hca_type, | 527 | &dev_attr_hca_type, |
| 519 | &class_device_attr_board_id | 528 | &dev_attr_board_id |
| 520 | }; | 529 | }; |
| 521 | 530 | ||
| 522 | static void *mlx4_ib_add(struct mlx4_dev *dev) | 531 | static void *mlx4_ib_add(struct mlx4_dev *dev) |
| @@ -640,8 +649,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) | |||
| 640 | goto err_reg; | 649 | goto err_reg; |
| 641 | 650 | ||
| 642 | for (i = 0; i < ARRAY_SIZE(mlx4_class_attributes); ++i) { | 651 | for (i = 0; i < ARRAY_SIZE(mlx4_class_attributes); ++i) { |
| 643 | if (class_device_create_file(&ibdev->ib_dev.class_dev, | 652 | if (device_create_file(&ibdev->ib_dev.dev, |
| 644 | mlx4_class_attributes[i])) | 653 | mlx4_class_attributes[i])) |
| 645 | goto err_reg; | 654 | goto err_reg; |
| 646 | } | 655 | } |
| 647 | 656 | ||
diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infiniband/hw/mthca/mthca_provider.c index 81b257e18bb6..696e1f302332 100644 --- a/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/drivers/infiniband/hw/mthca/mthca_provider.c | |||
| @@ -1170,23 +1170,29 @@ static int mthca_unmap_fmr(struct list_head *fmr_list) | |||
| 1170 | return 0; | 1170 | return 0; |
| 1171 | } | 1171 | } |
| 1172 | 1172 | ||
| 1173 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 1173 | static ssize_t show_rev(struct device *device, struct device_attribute *attr, |
| 1174 | char *buf) | ||
| 1174 | { | 1175 | { |
| 1175 | struct mthca_dev *dev = container_of(cdev, struct mthca_dev, ib_dev.class_dev); | 1176 | struct mthca_dev *dev = |
| 1177 | container_of(device, struct mthca_dev, ib_dev.dev); | ||
| 1176 | return sprintf(buf, "%x\n", dev->rev_id); | 1178 | return sprintf(buf, "%x\n", dev->rev_id); |
| 1177 | } | 1179 | } |
| 1178 | 1180 | ||
| 1179 | static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | 1181 | static ssize_t show_fw_ver(struct device *device, struct device_attribute *attr, |
| 1182 | char *buf) | ||
| 1180 | { | 1183 | { |
| 1181 | struct mthca_dev *dev = container_of(cdev, struct mthca_dev, ib_dev.class_dev); | 1184 | struct mthca_dev *dev = |
| 1185 | container_of(device, struct mthca_dev, ib_dev.dev); | ||
| 1182 | return sprintf(buf, "%d.%d.%d\n", (int) (dev->fw_ver >> 32), | 1186 | return sprintf(buf, "%d.%d.%d\n", (int) (dev->fw_ver >> 32), |
| 1183 | (int) (dev->fw_ver >> 16) & 0xffff, | 1187 | (int) (dev->fw_ver >> 16) & 0xffff, |
| 1184 | (int) dev->fw_ver & 0xffff); | 1188 | (int) dev->fw_ver & 0xffff); |
| 1185 | } | 1189 | } |
| 1186 | 1190 | ||
| 1187 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 1191 | static ssize_t show_hca(struct device *device, struct device_attribute *attr, |
| 1192 | char *buf) | ||
| 1188 | { | 1193 | { |
| 1189 | struct mthca_dev *dev = container_of(cdev, struct mthca_dev, ib_dev.class_dev); | 1194 | struct mthca_dev *dev = |
| 1195 | container_of(device, struct mthca_dev, ib_dev.dev); | ||
| 1190 | switch (dev->pdev->device) { | 1196 | switch (dev->pdev->device) { |
| 1191 | case PCI_DEVICE_ID_MELLANOX_TAVOR: | 1197 | case PCI_DEVICE_ID_MELLANOX_TAVOR: |
| 1192 | return sprintf(buf, "MT23108\n"); | 1198 | return sprintf(buf, "MT23108\n"); |
| @@ -1202,22 +1208,24 @@ static ssize_t show_hca(struct class_device *cdev, char *buf) | |||
| 1202 | } | 1208 | } |
| 1203 | } | 1209 | } |
| 1204 | 1210 | ||
| 1205 | static ssize_t show_board(struct class_device *cdev, char *buf) | 1211 | static ssize_t show_board(struct device *device, struct device_attribute *attr, |
| 1212 | char *buf) | ||
| 1206 | { | 1213 | { |
| 1207 | struct mthca_dev *dev = container_of(cdev, struct mthca_dev, ib_dev.class_dev); | 1214 | struct mthca_dev *dev = |
| 1215 | container_of(device, struct mthca_dev, ib_dev.dev); | ||
| 1208 | return sprintf(buf, "%.*s\n", MTHCA_BOARD_ID_LEN, dev->board_id); | 1216 | return sprintf(buf, "%.*s\n", MTHCA_BOARD_ID_LEN, dev->board_id); |
| 1209 | } | 1217 | } |
| 1210 | 1218 | ||
| 1211 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 1219 | static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| 1212 | static CLASS_DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); | 1220 | static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); |
| 1213 | static CLASS_DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); | 1221 | static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); |
| 1214 | static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); | 1222 | static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); |
| 1215 | 1223 | ||
| 1216 | static struct class_device_attribute *mthca_class_attributes[] = { | 1224 | static struct device_attribute *mthca_dev_attributes[] = { |
| 1217 | &class_device_attr_hw_rev, | 1225 | &dev_attr_hw_rev, |
| 1218 | &class_device_attr_fw_ver, | 1226 | &dev_attr_fw_ver, |
| 1219 | &class_device_attr_hca_type, | 1227 | &dev_attr_hca_type, |
| 1220 | &class_device_attr_board_id | 1228 | &dev_attr_board_id |
| 1221 | }; | 1229 | }; |
| 1222 | 1230 | ||
| 1223 | static int mthca_init_node_data(struct mthca_dev *dev) | 1231 | static int mthca_init_node_data(struct mthca_dev *dev) |
| @@ -1379,9 +1387,9 @@ int mthca_register_device(struct mthca_dev *dev) | |||
| 1379 | if (ret) | 1387 | if (ret) |
| 1380 | return ret; | 1388 | return ret; |
| 1381 | 1389 | ||
| 1382 | for (i = 0; i < ARRAY_SIZE(mthca_class_attributes); ++i) { | 1390 | for (i = 0; i < ARRAY_SIZE(mthca_dev_attributes); ++i) { |
| 1383 | ret = class_device_create_file(&dev->ib_dev.class_dev, | 1391 | ret = device_create_file(&dev->ib_dev.dev, |
| 1384 | mthca_class_attributes[i]); | 1392 | mthca_dev_attributes[i]); |
| 1385 | if (ret) { | 1393 | if (ret) { |
| 1386 | ib_unregister_device(&dev->ib_dev); | 1394 | ib_unregister_device(&dev->ib_dev); |
| 1387 | return ret; | 1395 | return ret; |
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c index 7c27420c2240..f9a5d4390892 100644 --- a/drivers/infiniband/hw/nes/nes_verbs.c +++ b/drivers/infiniband/hw/nes/nes_verbs.c | |||
| @@ -2800,10 +2800,11 @@ static int nes_dereg_mr(struct ib_mr *ib_mr) | |||
| 2800 | /** | 2800 | /** |
| 2801 | * show_rev | 2801 | * show_rev |
| 2802 | */ | 2802 | */ |
| 2803 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 2803 | static ssize_t show_rev(struct device *dev, struct device_attribute *attr, |
| 2804 | char *buf) | ||
| 2804 | { | 2805 | { |
| 2805 | struct nes_ib_device *nesibdev = | 2806 | struct nes_ib_device *nesibdev = |
| 2806 | container_of(cdev, struct nes_ib_device, ibdev.class_dev); | 2807 | container_of(dev, struct nes_ib_device, ibdev.dev); |
| 2807 | struct nes_vnic *nesvnic = nesibdev->nesvnic; | 2808 | struct nes_vnic *nesvnic = nesibdev->nesvnic; |
| 2808 | 2809 | ||
| 2809 | nes_debug(NES_DBG_INIT, "\n"); | 2810 | nes_debug(NES_DBG_INIT, "\n"); |
| @@ -2814,10 +2815,11 @@ static ssize_t show_rev(struct class_device *cdev, char *buf) | |||
| 2814 | /** | 2815 | /** |
| 2815 | * show_fw_ver | 2816 | * show_fw_ver |
| 2816 | */ | 2817 | */ |
| 2817 | static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | 2818 | static ssize_t show_fw_ver(struct device *dev, struct device_attribute *attr, |
| 2819 | char *buf) | ||
| 2818 | { | 2820 | { |
| 2819 | struct nes_ib_device *nesibdev = | 2821 | struct nes_ib_device *nesibdev = |
| 2820 | container_of(cdev, struct nes_ib_device, ibdev.class_dev); | 2822 | container_of(dev, struct nes_ib_device, ibdev.dev); |
| 2821 | struct nes_vnic *nesvnic = nesibdev->nesvnic; | 2823 | struct nes_vnic *nesvnic = nesibdev->nesvnic; |
| 2822 | 2824 | ||
| 2823 | nes_debug(NES_DBG_INIT, "\n"); | 2825 | nes_debug(NES_DBG_INIT, "\n"); |
| @@ -2831,7 +2833,8 @@ static ssize_t show_fw_ver(struct class_device *cdev, char *buf) | |||
| 2831 | /** | 2833 | /** |
| 2832 | * show_hca | 2834 | * show_hca |
| 2833 | */ | 2835 | */ |
| 2834 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 2836 | static ssize_t show_hca(struct device *dev, struct device_attribute *attr, |
| 2837 | char *buf) | ||
| 2835 | { | 2838 | { |
| 2836 | nes_debug(NES_DBG_INIT, "\n"); | 2839 | nes_debug(NES_DBG_INIT, "\n"); |
| 2837 | return sprintf(buf, "NES020\n"); | 2840 | return sprintf(buf, "NES020\n"); |
| @@ -2841,23 +2844,24 @@ static ssize_t show_hca(struct class_device *cdev, char *buf) | |||
| 2841 | /** | 2844 | /** |
| 2842 | * show_board | 2845 | * show_board |
| 2843 | */ | 2846 | */ |
| 2844 | static ssize_t show_board(struct class_device *cdev, char *buf) | 2847 | static ssize_t show_board(struct device *dev, struct device_attribute *attr, |
| 2848 | char *buf) | ||
| 2845 | { | 2849 | { |
| 2846 | nes_debug(NES_DBG_INIT, "\n"); | 2850 | nes_debug(NES_DBG_INIT, "\n"); |
| 2847 | return sprintf(buf, "%.*s\n", 32, "NES020 Board ID"); | 2851 | return sprintf(buf, "%.*s\n", 32, "NES020 Board ID"); |
| 2848 | } | 2852 | } |
| 2849 | 2853 | ||
| 2850 | 2854 | ||
| 2851 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 2855 | static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); |
| 2852 | static CLASS_DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); | 2856 | static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); |
| 2853 | static CLASS_DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); | 2857 | static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); |
| 2854 | static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); | 2858 | static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); |
| 2855 | 2859 | ||
| 2856 | static struct class_device_attribute *nes_class_attributes[] = { | 2860 | static struct device_attribute *nes_dev_attributes[] = { |
| 2857 | &class_device_attr_hw_rev, | 2861 | &dev_attr_hw_rev, |
| 2858 | &class_device_attr_fw_ver, | 2862 | &dev_attr_fw_ver, |
| 2859 | &class_device_attr_hca_type, | 2863 | &dev_attr_hca_type, |
| 2860 | &class_device_attr_board_id | 2864 | &dev_attr_board_id |
| 2861 | }; | 2865 | }; |
| 2862 | 2866 | ||
| 2863 | 2867 | ||
| @@ -3782,7 +3786,7 @@ struct nes_ib_device *nes_init_ofa_device(struct net_device *netdev) | |||
| 3782 | nesibdev->ibdev.phys_port_cnt = 1; | 3786 | nesibdev->ibdev.phys_port_cnt = 1; |
| 3783 | nesibdev->ibdev.num_comp_vectors = 1; | 3787 | nesibdev->ibdev.num_comp_vectors = 1; |
| 3784 | nesibdev->ibdev.dma_device = &nesdev->pcidev->dev; | 3788 | nesibdev->ibdev.dma_device = &nesdev->pcidev->dev; |
| 3785 | nesibdev->ibdev.class_dev.dev = &nesdev->pcidev->dev; | 3789 | nesibdev->ibdev.dev.parent = &nesdev->pcidev->dev; |
| 3786 | nesibdev->ibdev.query_device = nes_query_device; | 3790 | nesibdev->ibdev.query_device = nes_query_device; |
| 3787 | nesibdev->ibdev.query_port = nes_query_port; | 3791 | nesibdev->ibdev.query_port = nes_query_port; |
| 3788 | nesibdev->ibdev.modify_port = nes_modify_port; | 3792 | nesibdev->ibdev.modify_port = nes_modify_port; |
| @@ -3877,13 +3881,13 @@ int nes_register_ofa_device(struct nes_ib_device *nesibdev) | |||
| 3877 | nesibdev->max_qp = (nesadapter->max_qp-NES_FIRST_QPN) / nesadapter->port_count; | 3881 | nesibdev->max_qp = (nesadapter->max_qp-NES_FIRST_QPN) / nesadapter->port_count; |
| 3878 | nesibdev->max_pd = nesadapter->max_pd / nesadapter->port_count; | 3882 | nesibdev->max_pd = nesadapter->max_pd / nesadapter->port_count; |
| 3879 | 3883 | ||
| 3880 | for (i = 0; i < ARRAY_SIZE(nes_class_attributes); ++i) { | 3884 | for (i = 0; i < ARRAY_SIZE(nes_dev_attributes); ++i) { |
| 3881 | ret = class_device_create_file(&nesibdev->ibdev.class_dev, nes_class_attributes[i]); | 3885 | ret = device_create_file(&nesibdev->ibdev.dev, nes_dev_attributes[i]); |
| 3882 | if (ret) { | 3886 | if (ret) { |
| 3883 | while (i > 0) { | 3887 | while (i > 0) { |
| 3884 | i--; | 3888 | i--; |
| 3885 | class_device_remove_file(&nesibdev->ibdev.class_dev, | 3889 | device_remove_file(&nesibdev->ibdev.dev, |
| 3886 | nes_class_attributes[i]); | 3890 | nes_dev_attributes[i]); |
| 3887 | } | 3891 | } |
| 3888 | ib_unregister_device(&nesibdev->ibdev); | 3892 | ib_unregister_device(&nesibdev->ibdev); |
| 3889 | return ret; | 3893 | return ret; |
| @@ -3904,8 +3908,8 @@ static void nes_unregister_ofa_device(struct nes_ib_device *nesibdev) | |||
| 3904 | struct nes_vnic *nesvnic = nesibdev->nesvnic; | 3908 | struct nes_vnic *nesvnic = nesibdev->nesvnic; |
| 3905 | int i; | 3909 | int i; |
| 3906 | 3910 | ||
| 3907 | for (i = 0; i < ARRAY_SIZE(nes_class_attributes); ++i) { | 3911 | for (i = 0; i < ARRAY_SIZE(nes_dev_attributes); ++i) { |
| 3908 | class_device_remove_file(&nesibdev->ibdev.class_dev, nes_class_attributes[i]); | 3912 | device_remove_file(&nesibdev->ibdev.dev, nes_dev_attributes[i]); |
| 3909 | } | 3913 | } |
| 3910 | 3914 | ||
| 3911 | if (nesvnic->of_device_registered) { | 3915 | if (nesvnic->of_device_registered) { |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 125765aa9d59..435145709dd6 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
| @@ -139,8 +139,9 @@ static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size, | |||
| 139 | if (!iu->buf) | 139 | if (!iu->buf) |
| 140 | goto out_free_iu; | 140 | goto out_free_iu; |
| 141 | 141 | ||
| 142 | iu->dma = ib_dma_map_single(host->dev->dev, iu->buf, size, direction); | 142 | iu->dma = ib_dma_map_single(host->srp_dev->dev, iu->buf, size, |
| 143 | if (ib_dma_mapping_error(host->dev->dev, iu->dma)) | 143 | direction); |
| 144 | if (ib_dma_mapping_error(host->srp_dev->dev, iu->dma)) | ||
| 144 | goto out_free_buf; | 145 | goto out_free_buf; |
| 145 | 146 | ||
| 146 | iu->size = size; | 147 | iu->size = size; |
| @@ -161,7 +162,8 @@ static void srp_free_iu(struct srp_host *host, struct srp_iu *iu) | |||
| 161 | if (!iu) | 162 | if (!iu) |
| 162 | return; | 163 | return; |
| 163 | 164 | ||
| 164 | ib_dma_unmap_single(host->dev->dev, iu->dma, iu->size, iu->direction); | 165 | ib_dma_unmap_single(host->srp_dev->dev, iu->dma, iu->size, |
| 166 | iu->direction); | ||
| 165 | kfree(iu->buf); | 167 | kfree(iu->buf); |
| 166 | kfree(iu); | 168 | kfree(iu); |
| 167 | } | 169 | } |
| @@ -181,7 +183,7 @@ static int srp_init_qp(struct srp_target_port *target, | |||
| 181 | if (!attr) | 183 | if (!attr) |
| 182 | return -ENOMEM; | 184 | return -ENOMEM; |
| 183 | 185 | ||
| 184 | ret = ib_find_cached_pkey(target->srp_host->dev->dev, | 186 | ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev, |
| 185 | target->srp_host->port, | 187 | target->srp_host->port, |
| 186 | be16_to_cpu(target->path.pkey), | 188 | be16_to_cpu(target->path.pkey), |
| 187 | &attr->pkey_index); | 189 | &attr->pkey_index); |
| @@ -208,7 +210,7 @@ static int srp_new_cm_id(struct srp_target_port *target) | |||
| 208 | { | 210 | { |
| 209 | struct ib_cm_id *new_cm_id; | 211 | struct ib_cm_id *new_cm_id; |
| 210 | 212 | ||
| 211 | new_cm_id = ib_create_cm_id(target->srp_host->dev->dev, | 213 | new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev, |
| 212 | srp_cm_handler, target); | 214 | srp_cm_handler, target); |
| 213 | if (IS_ERR(new_cm_id)) | 215 | if (IS_ERR(new_cm_id)) |
| 214 | return PTR_ERR(new_cm_id); | 216 | return PTR_ERR(new_cm_id); |
| @@ -229,8 +231,8 @@ static int srp_create_target_ib(struct srp_target_port *target) | |||
| 229 | if (!init_attr) | 231 | if (!init_attr) |
| 230 | return -ENOMEM; | 232 | return -ENOMEM; |
| 231 | 233 | ||
| 232 | target->cq = ib_create_cq(target->srp_host->dev->dev, srp_completion, | 234 | target->cq = ib_create_cq(target->srp_host->srp_dev->dev, |
| 233 | NULL, target, SRP_CQ_SIZE, 0); | 235 | srp_completion, NULL, target, SRP_CQ_SIZE, 0); |
| 234 | if (IS_ERR(target->cq)) { | 236 | if (IS_ERR(target->cq)) { |
| 235 | ret = PTR_ERR(target->cq); | 237 | ret = PTR_ERR(target->cq); |
| 236 | goto out; | 238 | goto out; |
| @@ -248,7 +250,7 @@ static int srp_create_target_ib(struct srp_target_port *target) | |||
| 248 | init_attr->send_cq = target->cq; | 250 | init_attr->send_cq = target->cq; |
| 249 | init_attr->recv_cq = target->cq; | 251 | init_attr->recv_cq = target->cq; |
| 250 | 252 | ||
| 251 | target->qp = ib_create_qp(target->srp_host->dev->pd, init_attr); | 253 | target->qp = ib_create_qp(target->srp_host->srp_dev->pd, init_attr); |
| 252 | if (IS_ERR(target->qp)) { | 254 | if (IS_ERR(target->qp)) { |
| 253 | ret = PTR_ERR(target->qp); | 255 | ret = PTR_ERR(target->qp); |
| 254 | ib_destroy_cq(target->cq); | 256 | ib_destroy_cq(target->cq); |
| @@ -302,7 +304,7 @@ static int srp_lookup_path(struct srp_target_port *target) | |||
| 302 | init_completion(&target->done); | 304 | init_completion(&target->done); |
| 303 | 305 | ||
| 304 | target->path_query_id = ib_sa_path_rec_get(&srp_sa_client, | 306 | target->path_query_id = ib_sa_path_rec_get(&srp_sa_client, |
| 305 | target->srp_host->dev->dev, | 307 | target->srp_host->srp_dev->dev, |
| 306 | target->srp_host->port, | 308 | target->srp_host->port, |
| 307 | &target->path, | 309 | &target->path, |
| 308 | IB_SA_PATH_REC_SERVICE_ID | | 310 | IB_SA_PATH_REC_SERVICE_ID | |
| @@ -403,7 +405,7 @@ static int srp_send_req(struct srp_target_port *target) | |||
| 403 | (unsigned long long) be64_to_cpu(target->ioc_guid)); | 405 | (unsigned long long) be64_to_cpu(target->ioc_guid)); |
| 404 | memset(req->priv.initiator_port_id, 0, 8); | 406 | memset(req->priv.initiator_port_id, 0, 8); |
| 405 | memcpy(req->priv.initiator_port_id + 8, | 407 | memcpy(req->priv.initiator_port_id + 8, |
| 406 | &target->srp_host->dev->dev->node_guid, 8); | 408 | &target->srp_host->srp_dev->dev->node_guid, 8); |
| 407 | } | 409 | } |
| 408 | 410 | ||
| 409 | status = ib_send_cm_req(target->cm_id, &req->param); | 411 | status = ib_send_cm_req(target->cm_id, &req->param); |
| @@ -520,7 +522,7 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd, | |||
| 520 | req->fmr = NULL; | 522 | req->fmr = NULL; |
| 521 | } | 523 | } |
| 522 | 524 | ||
| 523 | ib_dma_unmap_sg(target->srp_host->dev->dev, scsi_sglist(scmnd), | 525 | ib_dma_unmap_sg(target->srp_host->srp_dev->dev, scsi_sglist(scmnd), |
| 524 | scsi_sg_count(scmnd), scmnd->sc_data_direction); | 526 | scsi_sg_count(scmnd), scmnd->sc_data_direction); |
| 525 | } | 527 | } |
| 526 | 528 | ||
| @@ -628,7 +630,7 @@ static int srp_map_fmr(struct srp_target_port *target, struct scatterlist *scat, | |||
| 628 | int page_cnt; | 630 | int page_cnt; |
| 629 | int i, j; | 631 | int i, j; |
| 630 | int ret; | 632 | int ret; |
| 631 | struct srp_device *dev = target->srp_host->dev; | 633 | struct srp_device *dev = target->srp_host->srp_dev; |
| 632 | struct ib_device *ibdev = dev->dev; | 634 | struct ib_device *ibdev = dev->dev; |
| 633 | struct scatterlist *sg; | 635 | struct scatterlist *sg; |
| 634 | 636 | ||
| @@ -723,7 +725,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target, | |||
| 723 | nents = scsi_sg_count(scmnd); | 725 | nents = scsi_sg_count(scmnd); |
| 724 | scat = scsi_sglist(scmnd); | 726 | scat = scsi_sglist(scmnd); |
| 725 | 727 | ||
| 726 | dev = target->srp_host->dev; | 728 | dev = target->srp_host->srp_dev; |
| 727 | ibdev = dev->dev; | 729 | ibdev = dev->dev; |
| 728 | 730 | ||
| 729 | count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction); | 731 | count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction); |
| @@ -779,7 +781,7 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target, | |||
| 779 | buf->table_desc.va = | 781 | buf->table_desc.va = |
| 780 | cpu_to_be64(req->cmd->dma + sizeof *cmd + sizeof *buf); | 782 | cpu_to_be64(req->cmd->dma + sizeof *cmd + sizeof *buf); |
| 781 | buf->table_desc.key = | 783 | buf->table_desc.key = |
| 782 | cpu_to_be32(target->srp_host->dev->mr->rkey); | 784 | cpu_to_be32(target->srp_host->srp_dev->mr->rkey); |
| 783 | buf->table_desc.len = | 785 | buf->table_desc.len = |
| 784 | cpu_to_be32(count * sizeof (struct srp_direct_buf)); | 786 | cpu_to_be32(count * sizeof (struct srp_direct_buf)); |
| 785 | 787 | ||
| @@ -855,7 +857,7 @@ static void srp_handle_recv(struct srp_target_port *target, struct ib_wc *wc) | |||
| 855 | 857 | ||
| 856 | iu = target->rx_ring[wc->wr_id & ~SRP_OP_RECV]; | 858 | iu = target->rx_ring[wc->wr_id & ~SRP_OP_RECV]; |
| 857 | 859 | ||
| 858 | dev = target->srp_host->dev->dev; | 860 | dev = target->srp_host->srp_dev->dev; |
| 859 | ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_ti_iu_len, | 861 | ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_ti_iu_len, |
| 860 | DMA_FROM_DEVICE); | 862 | DMA_FROM_DEVICE); |
| 861 | 863 | ||
| @@ -937,7 +939,7 @@ static int __srp_post_recv(struct srp_target_port *target) | |||
| 937 | 939 | ||
| 938 | list.addr = iu->dma; | 940 | list.addr = iu->dma; |
| 939 | list.length = iu->size; | 941 | list.length = iu->size; |
| 940 | list.lkey = target->srp_host->dev->mr->lkey; | 942 | list.lkey = target->srp_host->srp_dev->mr->lkey; |
| 941 | 943 | ||
| 942 | wr.next = NULL; | 944 | wr.next = NULL; |
| 943 | wr.sg_list = &list; | 945 | wr.sg_list = &list; |
| @@ -996,7 +998,7 @@ static int __srp_post_send(struct srp_target_port *target, | |||
| 996 | 998 | ||
| 997 | list.addr = iu->dma; | 999 | list.addr = iu->dma; |
| 998 | list.length = len; | 1000 | list.length = len; |
| 999 | list.lkey = target->srp_host->dev->mr->lkey; | 1001 | list.lkey = target->srp_host->srp_dev->mr->lkey; |
| 1000 | 1002 | ||
| 1001 | wr.next = NULL; | 1003 | wr.next = NULL; |
| 1002 | wr.wr_id = target->tx_head & SRP_SQ_SIZE; | 1004 | wr.wr_id = target->tx_head & SRP_SQ_SIZE; |
| @@ -1039,7 +1041,7 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd, | |||
| 1039 | if (!iu) | 1041 | if (!iu) |
| 1040 | goto err; | 1042 | goto err; |
| 1041 | 1043 | ||
| 1042 | dev = target->srp_host->dev->dev; | 1044 | dev = target->srp_host->srp_dev->dev; |
| 1043 | ib_dma_sync_single_for_cpu(dev, iu->dma, srp_max_iu_len, | 1045 | ib_dma_sync_single_for_cpu(dev, iu->dma, srp_max_iu_len, |
| 1044 | DMA_TO_DEVICE); | 1046 | DMA_TO_DEVICE); |
| 1045 | 1047 | ||
| @@ -1456,9 +1458,10 @@ static int srp_reset_host(struct scsi_cmnd *scmnd) | |||
| 1456 | return ret; | 1458 | return ret; |
| 1457 | } | 1459 | } |
| 1458 | 1460 | ||
| 1459 | static ssize_t show_id_ext(struct class_device *cdev, char *buf) | 1461 | static ssize_t show_id_ext(struct device *dev, struct device_attribute *attr, |
| 1462 | char *buf) | ||
| 1460 | { | 1463 | { |
| 1461 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1464 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1462 | 1465 | ||
| 1463 | if (target->state == SRP_TARGET_DEAD || | 1466 | if (target->state == SRP_TARGET_DEAD || |
| 1464 | target->state == SRP_TARGET_REMOVED) | 1467 | target->state == SRP_TARGET_REMOVED) |
| @@ -1468,9 +1471,10 @@ static ssize_t show_id_ext(struct class_device *cdev, char *buf) | |||
| 1468 | (unsigned long long) be64_to_cpu(target->id_ext)); | 1471 | (unsigned long long) be64_to_cpu(target->id_ext)); |
| 1469 | } | 1472 | } |
| 1470 | 1473 | ||
| 1471 | static ssize_t show_ioc_guid(struct class_device *cdev, char *buf) | 1474 | static ssize_t show_ioc_guid(struct device *dev, struct device_attribute *attr, |
| 1475 | char *buf) | ||
| 1472 | { | 1476 | { |
| 1473 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1477 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1474 | 1478 | ||
| 1475 | if (target->state == SRP_TARGET_DEAD || | 1479 | if (target->state == SRP_TARGET_DEAD || |
| 1476 | target->state == SRP_TARGET_REMOVED) | 1480 | target->state == SRP_TARGET_REMOVED) |
| @@ -1480,9 +1484,10 @@ static ssize_t show_ioc_guid(struct class_device *cdev, char *buf) | |||
| 1480 | (unsigned long long) be64_to_cpu(target->ioc_guid)); | 1484 | (unsigned long long) be64_to_cpu(target->ioc_guid)); |
| 1481 | } | 1485 | } |
| 1482 | 1486 | ||
| 1483 | static ssize_t show_service_id(struct class_device *cdev, char *buf) | 1487 | static ssize_t show_service_id(struct device *dev, |
| 1488 | struct device_attribute *attr, char *buf) | ||
| 1484 | { | 1489 | { |
| 1485 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1490 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1486 | 1491 | ||
| 1487 | if (target->state == SRP_TARGET_DEAD || | 1492 | if (target->state == SRP_TARGET_DEAD || |
| 1488 | target->state == SRP_TARGET_REMOVED) | 1493 | target->state == SRP_TARGET_REMOVED) |
| @@ -1492,9 +1497,10 @@ static ssize_t show_service_id(struct class_device *cdev, char *buf) | |||
| 1492 | (unsigned long long) be64_to_cpu(target->service_id)); | 1497 | (unsigned long long) be64_to_cpu(target->service_id)); |
| 1493 | } | 1498 | } |
| 1494 | 1499 | ||
| 1495 | static ssize_t show_pkey(struct class_device *cdev, char *buf) | 1500 | static ssize_t show_pkey(struct device *dev, struct device_attribute *attr, |
| 1501 | char *buf) | ||
| 1496 | { | 1502 | { |
| 1497 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1503 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1498 | 1504 | ||
| 1499 | if (target->state == SRP_TARGET_DEAD || | 1505 | if (target->state == SRP_TARGET_DEAD || |
| 1500 | target->state == SRP_TARGET_REMOVED) | 1506 | target->state == SRP_TARGET_REMOVED) |
| @@ -1503,9 +1509,10 @@ static ssize_t show_pkey(struct class_device *cdev, char *buf) | |||
| 1503 | return sprintf(buf, "0x%04x\n", be16_to_cpu(target->path.pkey)); | 1509 | return sprintf(buf, "0x%04x\n", be16_to_cpu(target->path.pkey)); |
| 1504 | } | 1510 | } |
| 1505 | 1511 | ||
| 1506 | static ssize_t show_dgid(struct class_device *cdev, char *buf) | 1512 | static ssize_t show_dgid(struct device *dev, struct device_attribute *attr, |
| 1513 | char *buf) | ||
| 1507 | { | 1514 | { |
| 1508 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1515 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1509 | 1516 | ||
| 1510 | if (target->state == SRP_TARGET_DEAD || | 1517 | if (target->state == SRP_TARGET_DEAD || |
| 1511 | target->state == SRP_TARGET_REMOVED) | 1518 | target->state == SRP_TARGET_REMOVED) |
| @@ -1522,9 +1529,10 @@ static ssize_t show_dgid(struct class_device *cdev, char *buf) | |||
| 1522 | be16_to_cpu(((__be16 *) target->path.dgid.raw)[7])); | 1529 | be16_to_cpu(((__be16 *) target->path.dgid.raw)[7])); |
| 1523 | } | 1530 | } |
| 1524 | 1531 | ||
| 1525 | static ssize_t show_orig_dgid(struct class_device *cdev, char *buf) | 1532 | static ssize_t show_orig_dgid(struct device *dev, |
| 1533 | struct device_attribute *attr, char *buf) | ||
| 1526 | { | 1534 | { |
| 1527 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1535 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1528 | 1536 | ||
| 1529 | if (target->state == SRP_TARGET_DEAD || | 1537 | if (target->state == SRP_TARGET_DEAD || |
| 1530 | target->state == SRP_TARGET_REMOVED) | 1538 | target->state == SRP_TARGET_REMOVED) |
| @@ -1541,9 +1549,10 @@ static ssize_t show_orig_dgid(struct class_device *cdev, char *buf) | |||
| 1541 | be16_to_cpu(target->orig_dgid[7])); | 1549 | be16_to_cpu(target->orig_dgid[7])); |
| 1542 | } | 1550 | } |
| 1543 | 1551 | ||
| 1544 | static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf) | 1552 | static ssize_t show_zero_req_lim(struct device *dev, |
| 1553 | struct device_attribute *attr, char *buf) | ||
| 1545 | { | 1554 | { |
| 1546 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1555 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1547 | 1556 | ||
| 1548 | if (target->state == SRP_TARGET_DEAD || | 1557 | if (target->state == SRP_TARGET_DEAD || |
| 1549 | target->state == SRP_TARGET_REMOVED) | 1558 | target->state == SRP_TARGET_REMOVED) |
| @@ -1552,40 +1561,42 @@ static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf) | |||
| 1552 | return sprintf(buf, "%d\n", target->zero_req_lim); | 1561 | return sprintf(buf, "%d\n", target->zero_req_lim); |
| 1553 | } | 1562 | } |
| 1554 | 1563 | ||
| 1555 | static ssize_t show_local_ib_port(struct class_device *cdev, char *buf) | 1564 | static ssize_t show_local_ib_port(struct device *dev, |
| 1565 | struct device_attribute *attr, char *buf) | ||
| 1556 | { | 1566 | { |
| 1557 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1567 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1558 | 1568 | ||
| 1559 | return sprintf(buf, "%d\n", target->srp_host->port); | 1569 | return sprintf(buf, "%d\n", target->srp_host->port); |
| 1560 | } | 1570 | } |
| 1561 | 1571 | ||
| 1562 | static ssize_t show_local_ib_device(struct class_device *cdev, char *buf) | 1572 | static ssize_t show_local_ib_device(struct device *dev, |
| 1573 | struct device_attribute *attr, char *buf) | ||
| 1563 | { | 1574 | { |
| 1564 | struct srp_target_port *target = host_to_target(class_to_shost(cdev)); | 1575 | struct srp_target_port *target = host_to_target(class_to_shost(dev)); |
| 1565 | 1576 | ||
| 1566 | return sprintf(buf, "%s\n", target->srp_host->dev->dev->name); | 1577 | return sprintf(buf, "%s\n", target->srp_host->srp_dev->dev->name); |
| 1567 | } | 1578 | } |
| 1568 | 1579 | ||
| 1569 | static CLASS_DEVICE_ATTR(id_ext, S_IRUGO, show_id_ext, NULL); | 1580 | static DEVICE_ATTR(id_ext, S_IRUGO, show_id_ext, NULL); |
| 1570 | static CLASS_DEVICE_ATTR(ioc_guid, S_IRUGO, show_ioc_guid, NULL); | 1581 | static DEVICE_ATTR(ioc_guid, S_IRUGO, show_ioc_guid, NULL); |
| 1571 | static CLASS_DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL); | 1582 | static DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL); |
| 1572 | static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL); | 1583 | static DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL); |
| 1573 | static CLASS_DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL); | 1584 | static DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL); |
| 1574 | static CLASS_DEVICE_ATTR(orig_dgid, S_IRUGO, show_orig_dgid, NULL); | 1585 | static DEVICE_ATTR(orig_dgid, S_IRUGO, show_orig_dgid, NULL); |
| 1575 | static CLASS_DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL); | 1586 | static DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL); |
| 1576 | static CLASS_DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL); | 1587 | static DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL); |
| 1577 | static CLASS_DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL); | 1588 | static DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL); |
| 1578 | 1589 | ||
| 1579 | static struct class_device_attribute *srp_host_attrs[] = { | 1590 | static struct device_attribute *srp_host_attrs[] = { |
| 1580 | &class_device_attr_id_ext, | 1591 | &dev_attr_id_ext, |
| 1581 | &class_device_attr_ioc_guid, | 1592 | &dev_attr_ioc_guid, |
| 1582 | &class_device_attr_service_id, | 1593 | &dev_attr_service_id, |
| 1583 | &class_device_attr_pkey, | 1594 | &dev_attr_pkey, |
| 1584 | &class_device_attr_dgid, | 1595 | &dev_attr_dgid, |
| 1585 | &class_device_attr_orig_dgid, | 1596 | &dev_attr_orig_dgid, |
| 1586 | &class_device_attr_zero_req_lim, | 1597 | &dev_attr_zero_req_lim, |
| 1587 | &class_device_attr_local_ib_port, | 1598 | &dev_attr_local_ib_port, |
| 1588 | &class_device_attr_local_ib_device, | 1599 | &dev_attr_local_ib_device, |
| 1589 | NULL | 1600 | NULL |
| 1590 | }; | 1601 | }; |
| 1591 | 1602 | ||
| @@ -1613,7 +1624,7 @@ static int srp_add_target(struct srp_host *host, struct srp_target_port *target) | |||
| 1613 | sprintf(target->target_name, "SRP.T10:%016llX", | 1624 | sprintf(target->target_name, "SRP.T10:%016llX", |
| 1614 | (unsigned long long) be64_to_cpu(target->id_ext)); | 1625 | (unsigned long long) be64_to_cpu(target->id_ext)); |
| 1615 | 1626 | ||
| 1616 | if (scsi_add_host(target->scsi_host, host->dev->dev->dma_device)) | 1627 | if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dma_device)) |
| 1617 | return -ENODEV; | 1628 | return -ENODEV; |
| 1618 | 1629 | ||
| 1619 | memcpy(ids.port_id, &target->id_ext, 8); | 1630 | memcpy(ids.port_id, &target->id_ext, 8); |
| @@ -1637,17 +1648,17 @@ static int srp_add_target(struct srp_host *host, struct srp_target_port *target) | |||
| 1637 | return 0; | 1648 | return 0; |
| 1638 | } | 1649 | } |
| 1639 | 1650 | ||
| 1640 | static void srp_release_class_dev(struct class_device *class_dev) | 1651 | static void srp_release_dev(struct device *dev) |
| 1641 | { | 1652 | { |
| 1642 | struct srp_host *host = | 1653 | struct srp_host *host = |
| 1643 | container_of(class_dev, struct srp_host, class_dev); | 1654 | container_of(dev, struct srp_host, dev); |
| 1644 | 1655 | ||
| 1645 | complete(&host->released); | 1656 | complete(&host->released); |
| 1646 | } | 1657 | } |
| 1647 | 1658 | ||
| 1648 | static struct class srp_class = { | 1659 | static struct class srp_class = { |
| 1649 | .name = "infiniband_srp", | 1660 | .name = "infiniband_srp", |
| 1650 | .release = srp_release_class_dev | 1661 | .dev_release = srp_release_dev |
| 1651 | }; | 1662 | }; |
| 1652 | 1663 | ||
| 1653 | /* | 1664 | /* |
| @@ -1835,11 +1846,12 @@ out: | |||
| 1835 | return ret; | 1846 | return ret; |
| 1836 | } | 1847 | } |
| 1837 | 1848 | ||
| 1838 | static ssize_t srp_create_target(struct class_device *class_dev, | 1849 | static ssize_t srp_create_target(struct device *dev, |
| 1850 | struct device_attribute *attr, | ||
| 1839 | const char *buf, size_t count) | 1851 | const char *buf, size_t count) |
| 1840 | { | 1852 | { |
| 1841 | struct srp_host *host = | 1853 | struct srp_host *host = |
| 1842 | container_of(class_dev, struct srp_host, class_dev); | 1854 | container_of(dev, struct srp_host, dev); |
| 1843 | struct Scsi_Host *target_host; | 1855 | struct Scsi_Host *target_host; |
| 1844 | struct srp_target_port *target; | 1856 | struct srp_target_port *target; |
| 1845 | int ret; | 1857 | int ret; |
| @@ -1871,7 +1883,8 @@ static ssize_t srp_create_target(struct class_device *class_dev, | |||
| 1871 | if (ret) | 1883 | if (ret) |
| 1872 | goto err; | 1884 | goto err; |
| 1873 | 1885 | ||
| 1874 | ib_get_cached_gid(host->dev->dev, host->port, 0, &target->path.sgid); | 1886 | ib_get_cached_gid(host->srp_dev->dev, host->port, 0, |
| 1887 | &target->path.sgid); | ||
| 1875 | 1888 | ||
| 1876 | shost_printk(KERN_DEBUG, target->scsi_host, PFX | 1889 | shost_printk(KERN_DEBUG, target->scsi_host, PFX |
| 1877 | "new target: id_ext %016llx ioc_guid %016llx pkey %04x " | 1890 | "new target: id_ext %016llx ioc_guid %016llx pkey %04x " |
| @@ -1926,27 +1939,27 @@ err: | |||
| 1926 | return ret; | 1939 | return ret; |
| 1927 | } | 1940 | } |
| 1928 | 1941 | ||
| 1929 | static CLASS_DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target); | 1942 | static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target); |
| 1930 | 1943 | ||
| 1931 | static ssize_t show_ibdev(struct class_device *class_dev, char *buf) | 1944 | static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr, |
| 1945 | char *buf) | ||
| 1932 | { | 1946 | { |
| 1933 | struct srp_host *host = | 1947 | struct srp_host *host = container_of(dev, struct srp_host, dev); |
| 1934 | container_of(class_dev, struct srp_host, class_dev); | ||
| 1935 | 1948 | ||
| 1936 | return sprintf(buf, "%s\n", host->dev->dev->name); | 1949 | return sprintf(buf, "%s\n", host->srp_dev->dev->name); |
| 1937 | } | 1950 | } |
| 1938 | 1951 | ||
| 1939 | static CLASS_DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); | 1952 | static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL); |
| 1940 | 1953 | ||
| 1941 | static ssize_t show_port(struct class_device *class_dev, char *buf) | 1954 | static ssize_t show_port(struct device *dev, struct device_attribute *attr, |
| 1955 | char *buf) | ||
| 1942 | { | 1956 | { |
| 1943 | struct srp_host *host = | 1957 | struct srp_host *host = container_of(dev, struct srp_host, dev); |
| 1944 | container_of(class_dev, struct srp_host, class_dev); | ||
| 1945 | 1958 | ||
| 1946 | return sprintf(buf, "%d\n", host->port); | 1959 | return sprintf(buf, "%d\n", host->port); |
| 1947 | } | 1960 | } |
| 1948 | 1961 | ||
| 1949 | static CLASS_DEVICE_ATTR(port, S_IRUGO, show_port, NULL); | 1962 | static DEVICE_ATTR(port, S_IRUGO, show_port, NULL); |
| 1950 | 1963 | ||
| 1951 | static struct srp_host *srp_add_port(struct srp_device *device, u8 port) | 1964 | static struct srp_host *srp_add_port(struct srp_device *device, u8 port) |
| 1952 | { | 1965 | { |
| @@ -1959,27 +1972,27 @@ static struct srp_host *srp_add_port(struct srp_device *device, u8 port) | |||
| 1959 | INIT_LIST_HEAD(&host->target_list); | 1972 | INIT_LIST_HEAD(&host->target_list); |
| 1960 | spin_lock_init(&host->target_lock); | 1973 | spin_lock_init(&host->target_lock); |
| 1961 | init_completion(&host->released); | 1974 | init_completion(&host->released); |
| 1962 | host->dev = device; | 1975 | host->srp_dev = device; |
| 1963 | host->port = port; | 1976 | host->port = port; |
| 1964 | 1977 | ||
| 1965 | host->class_dev.class = &srp_class; | 1978 | host->dev.class = &srp_class; |
| 1966 | host->class_dev.dev = device->dev->dma_device; | 1979 | host->dev.parent = device->dev->dma_device; |
| 1967 | snprintf(host->class_dev.class_id, BUS_ID_SIZE, "srp-%s-%d", | 1980 | snprintf(host->dev.bus_id, BUS_ID_SIZE, "srp-%s-%d", |
| 1968 | device->dev->name, port); | 1981 | device->dev->name, port); |
| 1969 | 1982 | ||
| 1970 | if (class_device_register(&host->class_dev)) | 1983 | if (device_register(&host->dev)) |
| 1971 | goto free_host; | 1984 | goto free_host; |
| 1972 | if (class_device_create_file(&host->class_dev, &class_device_attr_add_target)) | 1985 | if (device_create_file(&host->dev, &dev_attr_add_target)) |
| 1973 | goto err_class; | 1986 | goto err_class; |
| 1974 | if (class_device_create_file(&host->class_dev, &class_device_attr_ibdev)) | 1987 | if (device_create_file(&host->dev, &dev_attr_ibdev)) |
| 1975 | goto err_class; | 1988 | goto err_class; |
| 1976 | if (class_device_create_file(&host->class_dev, &class_device_attr_port)) | 1989 | if (device_create_file(&host->dev, &dev_attr_port)) |
| 1977 | goto err_class; | 1990 | goto err_class; |
| 1978 | 1991 | ||
| 1979 | return host; | 1992 | return host; |
| 1980 | 1993 | ||
| 1981 | err_class: | 1994 | err_class: |
| 1982 | class_device_unregister(&host->class_dev); | 1995 | device_unregister(&host->dev); |
| 1983 | 1996 | ||
| 1984 | free_host: | 1997 | free_host: |
| 1985 | kfree(host); | 1998 | kfree(host); |
| @@ -2084,7 +2097,7 @@ static void srp_remove_one(struct ib_device *device) | |||
| 2084 | srp_dev = ib_get_client_data(device, &srp_client); | 2097 | srp_dev = ib_get_client_data(device, &srp_client); |
| 2085 | 2098 | ||
| 2086 | list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) { | 2099 | list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) { |
| 2087 | class_device_unregister(&host->class_dev); | 2100 | device_unregister(&host->dev); |
| 2088 | /* | 2101 | /* |
| 2089 | * Wait for the sysfs entry to go away, so that no new | 2102 | * Wait for the sysfs entry to go away, so that no new |
| 2090 | * target ports can be created. | 2103 | * target ports can be created. |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h index cb6eb816024a..63d2ae724061 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.h +++ b/drivers/infiniband/ulp/srp/ib_srp.h | |||
| @@ -97,9 +97,9 @@ struct srp_device { | |||
| 97 | }; | 97 | }; |
| 98 | 98 | ||
| 99 | struct srp_host { | 99 | struct srp_host { |
| 100 | struct srp_device *dev; | 100 | struct srp_device *srp_dev; |
| 101 | u8 port; | 101 | u8 port; |
| 102 | struct class_device class_dev; | 102 | struct device dev; |
| 103 | struct list_head target_list; | 103 | struct list_head target_list; |
| 104 | spinlock_t target_lock; | 104 | spinlock_t target_lock; |
| 105 | struct completion released; | 105 | struct completion released; |
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 4a938780dfc3..63aad90247c4 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c | |||
| @@ -139,12 +139,10 @@ EXPORT_SYMBOL_GPL(led_classdev_register); | |||
| 139 | /** | 139 | /** |
| 140 | * __led_classdev_unregister - unregisters a object of led_properties class. | 140 | * __led_classdev_unregister - unregisters a object of led_properties class. |
| 141 | * @led_cdev: the led device to unregister | 141 | * @led_cdev: the led device to unregister |
| 142 | * @suspended: indicates whether system-wide suspend or resume is in progress | ||
| 143 | * | 142 | * |
| 144 | * Unregisters a previously registered via led_classdev_register object. | 143 | * Unregisters a previously registered via led_classdev_register object. |
| 145 | */ | 144 | */ |
| 146 | void __led_classdev_unregister(struct led_classdev *led_cdev, | 145 | void led_classdev_unregister(struct led_classdev *led_cdev) |
| 147 | bool suspended) | ||
| 148 | { | 146 | { |
| 149 | device_remove_file(led_cdev->dev, &dev_attr_brightness); | 147 | device_remove_file(led_cdev->dev, &dev_attr_brightness); |
| 150 | #ifdef CONFIG_LEDS_TRIGGERS | 148 | #ifdef CONFIG_LEDS_TRIGGERS |
| @@ -155,16 +153,13 @@ void __led_classdev_unregister(struct led_classdev *led_cdev, | |||
| 155 | up_write(&led_cdev->trigger_lock); | 153 | up_write(&led_cdev->trigger_lock); |
| 156 | #endif | 154 | #endif |
| 157 | 155 | ||
| 158 | if (suspended) | 156 | device_unregister(led_cdev->dev); |
| 159 | device_pm_schedule_removal(led_cdev->dev); | ||
| 160 | else | ||
| 161 | device_unregister(led_cdev->dev); | ||
| 162 | 157 | ||
| 163 | down_write(&leds_list_lock); | 158 | down_write(&leds_list_lock); |
| 164 | list_del(&led_cdev->node); | 159 | list_del(&led_cdev->node); |
| 165 | up_write(&leds_list_lock); | 160 | up_write(&leds_list_lock); |
| 166 | } | 161 | } |
| 167 | EXPORT_SYMBOL_GPL(__led_classdev_unregister); | 162 | EXPORT_SYMBOL_GPL(led_classdev_unregister); |
| 168 | 163 | ||
| 169 | static int __init leds_init(void) | 164 | static int __init leds_init(void) |
| 170 | { | 165 | { |
diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c index 946e3d3506ac..61b98c333cb0 100644 --- a/drivers/memstick/core/memstick.c +++ b/drivers/memstick/core/memstick.c | |||
| @@ -177,16 +177,16 @@ static struct bus_type memstick_bus_type = { | |||
| 177 | .resume = memstick_device_resume | 177 | .resume = memstick_device_resume |
| 178 | }; | 178 | }; |
| 179 | 179 | ||
| 180 | static void memstick_free(struct class_device *cdev) | 180 | static void memstick_free(struct device *dev) |
| 181 | { | 181 | { |
| 182 | struct memstick_host *host = container_of(cdev, struct memstick_host, | 182 | struct memstick_host *host = container_of(dev, struct memstick_host, |
| 183 | cdev); | 183 | dev); |
| 184 | kfree(host); | 184 | kfree(host); |
| 185 | } | 185 | } |
| 186 | 186 | ||
| 187 | static struct class memstick_host_class = { | 187 | static struct class memstick_host_class = { |
| 188 | .name = "memstick_host", | 188 | .name = "memstick_host", |
| 189 | .release = memstick_free | 189 | .dev_release = memstick_free |
| 190 | }; | 190 | }; |
| 191 | 191 | ||
| 192 | static void memstick_free_card(struct device *dev) | 192 | static void memstick_free_card(struct device *dev) |
| @@ -383,8 +383,8 @@ static struct memstick_dev *memstick_alloc_card(struct memstick_host *host) | |||
| 383 | if (card) { | 383 | if (card) { |
| 384 | card->host = host; | 384 | card->host = host; |
| 385 | snprintf(card->dev.bus_id, sizeof(card->dev.bus_id), | 385 | snprintf(card->dev.bus_id, sizeof(card->dev.bus_id), |
| 386 | "%s", host->cdev.class_id); | 386 | "%s", host->dev.bus_id); |
| 387 | card->dev.parent = host->cdev.dev; | 387 | card->dev.parent = &host->dev; |
| 388 | card->dev.bus = &memstick_bus_type; | 388 | card->dev.bus = &memstick_bus_type; |
| 389 | card->dev.release = memstick_free_card; | 389 | card->dev.release = memstick_free_card; |
| 390 | card->check = memstick_dummy_check; | 390 | card->check = memstick_dummy_check; |
| @@ -427,7 +427,7 @@ static void memstick_check(struct work_struct *work) | |||
| 427 | media_checker); | 427 | media_checker); |
| 428 | struct memstick_dev *card; | 428 | struct memstick_dev *card; |
| 429 | 429 | ||
| 430 | dev_dbg(host->cdev.dev, "memstick_check started\n"); | 430 | dev_dbg(&host->dev, "memstick_check started\n"); |
| 431 | mutex_lock(&host->lock); | 431 | mutex_lock(&host->lock); |
| 432 | if (!host->card) | 432 | if (!host->card) |
| 433 | memstick_power_on(host); | 433 | memstick_power_on(host); |
| @@ -440,7 +440,7 @@ static void memstick_check(struct work_struct *work) | |||
| 440 | host->card = NULL; | 440 | host->card = NULL; |
| 441 | } | 441 | } |
| 442 | } else { | 442 | } else { |
| 443 | dev_dbg(host->cdev.dev, "new card %02x, %02x, %02x\n", | 443 | dev_dbg(&host->dev, "new card %02x, %02x, %02x\n", |
| 444 | card->id.type, card->id.category, card->id.class); | 444 | card->id.type, card->id.category, card->id.class); |
| 445 | if (host->card) { | 445 | if (host->card) { |
| 446 | if (memstick_set_rw_addr(host->card) | 446 | if (memstick_set_rw_addr(host->card) |
| @@ -465,7 +465,7 @@ static void memstick_check(struct work_struct *work) | |||
| 465 | host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); | 465 | host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF); |
| 466 | 466 | ||
| 467 | mutex_unlock(&host->lock); | 467 | mutex_unlock(&host->lock); |
| 468 | dev_dbg(host->cdev.dev, "memstick_check finished\n"); | 468 | dev_dbg(&host->dev, "memstick_check finished\n"); |
| 469 | } | 469 | } |
| 470 | 470 | ||
| 471 | /** | 471 | /** |
| @@ -482,9 +482,9 @@ struct memstick_host *memstick_alloc_host(unsigned int extra, | |||
| 482 | if (host) { | 482 | if (host) { |
| 483 | mutex_init(&host->lock); | 483 | mutex_init(&host->lock); |
| 484 | INIT_WORK(&host->media_checker, memstick_check); | 484 | INIT_WORK(&host->media_checker, memstick_check); |
| 485 | host->cdev.class = &memstick_host_class; | 485 | host->dev.class = &memstick_host_class; |
| 486 | host->cdev.dev = dev; | 486 | host->dev.parent = dev; |
| 487 | class_device_initialize(&host->cdev); | 487 | device_initialize(&host->dev); |
| 488 | } | 488 | } |
| 489 | return host; | 489 | return host; |
| 490 | } | 490 | } |
| @@ -507,10 +507,9 @@ int memstick_add_host(struct memstick_host *host) | |||
| 507 | if (rc) | 507 | if (rc) |
| 508 | return rc; | 508 | return rc; |
| 509 | 509 | ||
| 510 | snprintf(host->cdev.class_id, BUS_ID_SIZE, | 510 | snprintf(host->dev.bus_id, BUS_ID_SIZE, "memstick%u", host->id); |
| 511 | "memstick%u", host->id); | ||
| 512 | 511 | ||
| 513 | rc = class_device_add(&host->cdev); | 512 | rc = device_add(&host->dev); |
| 514 | if (rc) { | 513 | if (rc) { |
| 515 | spin_lock(&memstick_host_lock); | 514 | spin_lock(&memstick_host_lock); |
| 516 | idr_remove(&memstick_host_idr, host->id); | 515 | idr_remove(&memstick_host_idr, host->id); |
| @@ -541,7 +540,7 @@ void memstick_remove_host(struct memstick_host *host) | |||
| 541 | spin_lock(&memstick_host_lock); | 540 | spin_lock(&memstick_host_lock); |
| 542 | idr_remove(&memstick_host_idr, host->id); | 541 | idr_remove(&memstick_host_idr, host->id); |
| 543 | spin_unlock(&memstick_host_lock); | 542 | spin_unlock(&memstick_host_lock); |
| 544 | class_device_del(&host->cdev); | 543 | device_del(&host->dev); |
| 545 | } | 544 | } |
| 546 | EXPORT_SYMBOL(memstick_remove_host); | 545 | EXPORT_SYMBOL(memstick_remove_host); |
| 547 | 546 | ||
| @@ -552,7 +551,7 @@ EXPORT_SYMBOL(memstick_remove_host); | |||
| 552 | void memstick_free_host(struct memstick_host *host) | 551 | void memstick_free_host(struct memstick_host *host) |
| 553 | { | 552 | { |
| 554 | mutex_destroy(&host->lock); | 553 | mutex_destroy(&host->lock); |
| 555 | class_device_put(&host->cdev); | 554 | put_device(&host->dev); |
| 556 | } | 555 | } |
| 557 | EXPORT_SYMBOL(memstick_free_host); | 556 | EXPORT_SYMBOL(memstick_free_host); |
| 558 | 557 | ||
diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c index 557dbbba5cb2..477d0fb6e588 100644 --- a/drivers/memstick/core/mspro_block.c +++ b/drivers/memstick/core/mspro_block.c | |||
| @@ -1127,8 +1127,8 @@ static int mspro_block_init_disk(struct memstick_dev *card) | |||
| 1127 | u64 limit = BLK_BOUNCE_HIGH; | 1127 | u64 limit = BLK_BOUNCE_HIGH; |
| 1128 | unsigned long capacity; | 1128 | unsigned long capacity; |
| 1129 | 1129 | ||
| 1130 | if (host->cdev.dev->dma_mask && *(host->cdev.dev->dma_mask)) | 1130 | if (host->dev.dma_mask && *(host->dev.dma_mask)) |
| 1131 | limit = *(host->cdev.dev->dma_mask); | 1131 | limit = *(host->dev.dma_mask); |
| 1132 | 1132 | ||
| 1133 | for (rc = 0; msb->attr_group.attrs[rc]; ++rc) { | 1133 | for (rc = 0; msb->attr_group.attrs[rc]; ++rc) { |
| 1134 | s_attr = mspro_from_sysfs_attr(msb->attr_group.attrs[rc]); | 1134 | s_attr = mspro_from_sysfs_attr(msb->attr_group.attrs[rc]); |
diff --git a/drivers/memstick/host/jmb38x_ms.c b/drivers/memstick/host/jmb38x_ms.c index 8770a5fac3b6..a054668eda16 100644 --- a/drivers/memstick/host/jmb38x_ms.c +++ b/drivers/memstick/host/jmb38x_ms.c | |||
| @@ -361,15 +361,15 @@ static int jmb38x_ms_issue_cmd(struct memstick_host *msh) | |||
| 361 | unsigned int data_len, cmd, t_val; | 361 | unsigned int data_len, cmd, t_val; |
| 362 | 362 | ||
| 363 | if (!(STATUS_HAS_MEDIA & readl(host->addr + STATUS))) { | 363 | if (!(STATUS_HAS_MEDIA & readl(host->addr + STATUS))) { |
| 364 | dev_dbg(msh->cdev.dev, "no media status\n"); | 364 | dev_dbg(&msh->dev, "no media status\n"); |
| 365 | host->req->error = -ETIME; | 365 | host->req->error = -ETIME; |
| 366 | return host->req->error; | 366 | return host->req->error; |
| 367 | } | 367 | } |
| 368 | 368 | ||
| 369 | dev_dbg(msh->cdev.dev, "control %08x\n", | 369 | dev_dbg(&msh->dev, "control %08x\n", |
| 370 | readl(host->addr + HOST_CONTROL)); | 370 | readl(host->addr + HOST_CONTROL)); |
| 371 | dev_dbg(msh->cdev.dev, "status %08x\n", readl(host->addr + INT_STATUS)); | 371 | dev_dbg(&msh->dev, "status %08x\n", readl(host->addr + INT_STATUS)); |
| 372 | dev_dbg(msh->cdev.dev, "hstatus %08x\n", readl(host->addr + STATUS)); | 372 | dev_dbg(&msh->dev, "hstatus %08x\n", readl(host->addr + STATUS)); |
| 373 | 373 | ||
| 374 | host->cmd_flags = 0; | 374 | host->cmd_flags = 0; |
| 375 | host->block_pos = 0; | 375 | host->block_pos = 0; |
| @@ -448,7 +448,7 @@ static int jmb38x_ms_issue_cmd(struct memstick_host *msh) | |||
| 448 | host->req->error = 0; | 448 | host->req->error = 0; |
| 449 | 449 | ||
| 450 | writel(cmd, host->addr + TPC); | 450 | writel(cmd, host->addr + TPC); |
| 451 | dev_dbg(msh->cdev.dev, "executing TPC %08x, len %x\n", cmd, data_len); | 451 | dev_dbg(&msh->dev, "executing TPC %08x, len %x\n", cmd, data_len); |
| 452 | 452 | ||
| 453 | return 0; | 453 | return 0; |
| 454 | } | 454 | } |
| @@ -461,11 +461,11 @@ static void jmb38x_ms_complete_cmd(struct memstick_host *msh, int last) | |||
| 461 | 461 | ||
| 462 | del_timer(&host->timer); | 462 | del_timer(&host->timer); |
| 463 | 463 | ||
| 464 | dev_dbg(msh->cdev.dev, "c control %08x\n", | 464 | dev_dbg(&msh->dev, "c control %08x\n", |
| 465 | readl(host->addr + HOST_CONTROL)); | 465 | readl(host->addr + HOST_CONTROL)); |
| 466 | dev_dbg(msh->cdev.dev, "c status %08x\n", | 466 | dev_dbg(&msh->dev, "c status %08x\n", |
| 467 | readl(host->addr + INT_STATUS)); | 467 | readl(host->addr + INT_STATUS)); |
| 468 | dev_dbg(msh->cdev.dev, "c hstatus %08x\n", readl(host->addr + STATUS)); | 468 | dev_dbg(&msh->dev, "c hstatus %08x\n", readl(host->addr + STATUS)); |
| 469 | 469 | ||
| 470 | host->req->int_reg = readl(host->addr + STATUS) & 0xff; | 470 | host->req->int_reg = readl(host->addr + STATUS) & 0xff; |
| 471 | 471 | ||
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 89c63147a15d..b109bd8a4d19 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c | |||
| @@ -3300,9 +3300,10 @@ mptscsih_synchronize_cache(MPT_SCSI_HOST *hd, VirtDevice *vdevice) | |||
| 3300 | } | 3300 | } |
| 3301 | 3301 | ||
| 3302 | static ssize_t | 3302 | static ssize_t |
| 3303 | mptscsih_version_fw_show(struct class_device *cdev, char *buf) | 3303 | mptscsih_version_fw_show(struct device *dev, struct device_attribute *attr, |
| 3304 | char *buf) | ||
| 3304 | { | 3305 | { |
| 3305 | struct Scsi_Host *host = class_to_shost(cdev); | 3306 | struct Scsi_Host *host = class_to_shost(dev); |
| 3306 | MPT_SCSI_HOST *hd = shost_priv(host); | 3307 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3307 | MPT_ADAPTER *ioc = hd->ioc; | 3308 | MPT_ADAPTER *ioc = hd->ioc; |
| 3308 | 3309 | ||
| @@ -3312,12 +3313,13 @@ mptscsih_version_fw_show(struct class_device *cdev, char *buf) | |||
| 3312 | (ioc->facts.FWVersion.Word & 0x0000FF00) >> 8, | 3313 | (ioc->facts.FWVersion.Word & 0x0000FF00) >> 8, |
| 3313 | ioc->facts.FWVersion.Word & 0x000000FF); | 3314 | ioc->facts.FWVersion.Word & 0x000000FF); |
| 3314 | } | 3315 | } |
| 3315 | static CLASS_DEVICE_ATTR(version_fw, S_IRUGO, mptscsih_version_fw_show, NULL); | 3316 | static DEVICE_ATTR(version_fw, S_IRUGO, mptscsih_version_fw_show, NULL); |
| 3316 | 3317 | ||
| 3317 | static ssize_t | 3318 | static ssize_t |
| 3318 | mptscsih_version_bios_show(struct class_device *cdev, char *buf) | 3319 | mptscsih_version_bios_show(struct device *dev, struct device_attribute *attr, |
| 3320 | char *buf) | ||
| 3319 | { | 3321 | { |
| 3320 | struct Scsi_Host *host = class_to_shost(cdev); | 3322 | struct Scsi_Host *host = class_to_shost(dev); |
| 3321 | MPT_SCSI_HOST *hd = shost_priv(host); | 3323 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3322 | MPT_ADAPTER *ioc = hd->ioc; | 3324 | MPT_ADAPTER *ioc = hd->ioc; |
| 3323 | 3325 | ||
| @@ -3327,129 +3329,141 @@ mptscsih_version_bios_show(struct class_device *cdev, char *buf) | |||
| 3327 | (ioc->biosVersion & 0x0000FF00) >> 8, | 3329 | (ioc->biosVersion & 0x0000FF00) >> 8, |
| 3328 | ioc->biosVersion & 0x000000FF); | 3330 | ioc->biosVersion & 0x000000FF); |
| 3329 | } | 3331 | } |
| 3330 | static CLASS_DEVICE_ATTR(version_bios, S_IRUGO, mptscsih_version_bios_show, NULL); | 3332 | static DEVICE_ATTR(version_bios, S_IRUGO, mptscsih_version_bios_show, NULL); |
| 3331 | 3333 | ||
| 3332 | static ssize_t | 3334 | static ssize_t |
| 3333 | mptscsih_version_mpi_show(struct class_device *cdev, char *buf) | 3335 | mptscsih_version_mpi_show(struct device *dev, struct device_attribute *attr, |
| 3336 | char *buf) | ||
| 3334 | { | 3337 | { |
| 3335 | struct Scsi_Host *host = class_to_shost(cdev); | 3338 | struct Scsi_Host *host = class_to_shost(dev); |
| 3336 | MPT_SCSI_HOST *hd = shost_priv(host); | 3339 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3337 | MPT_ADAPTER *ioc = hd->ioc; | 3340 | MPT_ADAPTER *ioc = hd->ioc; |
| 3338 | 3341 | ||
| 3339 | return snprintf(buf, PAGE_SIZE, "%03x\n", ioc->facts.MsgVersion); | 3342 | return snprintf(buf, PAGE_SIZE, "%03x\n", ioc->facts.MsgVersion); |
| 3340 | } | 3343 | } |
| 3341 | static CLASS_DEVICE_ATTR(version_mpi, S_IRUGO, mptscsih_version_mpi_show, NULL); | 3344 | static DEVICE_ATTR(version_mpi, S_IRUGO, mptscsih_version_mpi_show, NULL); |
| 3342 | 3345 | ||
| 3343 | static ssize_t | 3346 | static ssize_t |
| 3344 | mptscsih_version_product_show(struct class_device *cdev, char *buf) | 3347 | mptscsih_version_product_show(struct device *dev, |
| 3348 | struct device_attribute *attr, | ||
| 3349 | char *buf) | ||
| 3345 | { | 3350 | { |
| 3346 | struct Scsi_Host *host = class_to_shost(cdev); | 3351 | struct Scsi_Host *host = class_to_shost(dev); |
| 3347 | MPT_SCSI_HOST *hd = shost_priv(host); | 3352 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3348 | MPT_ADAPTER *ioc = hd->ioc; | 3353 | MPT_ADAPTER *ioc = hd->ioc; |
| 3349 | 3354 | ||
| 3350 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->prod_name); | 3355 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->prod_name); |
| 3351 | } | 3356 | } |
| 3352 | static CLASS_DEVICE_ATTR(version_product, S_IRUGO, | 3357 | static DEVICE_ATTR(version_product, S_IRUGO, |
| 3353 | mptscsih_version_product_show, NULL); | 3358 | mptscsih_version_product_show, NULL); |
| 3354 | 3359 | ||
| 3355 | static ssize_t | 3360 | static ssize_t |
| 3356 | mptscsih_version_nvdata_persistent_show(struct class_device *cdev, char *buf) | 3361 | mptscsih_version_nvdata_persistent_show(struct device *dev, |
| 3362 | struct device_attribute *attr, | ||
| 3363 | char *buf) | ||
| 3357 | { | 3364 | { |
| 3358 | struct Scsi_Host *host = class_to_shost(cdev); | 3365 | struct Scsi_Host *host = class_to_shost(dev); |
| 3359 | MPT_SCSI_HOST *hd = shost_priv(host); | 3366 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3360 | MPT_ADAPTER *ioc = hd->ioc; | 3367 | MPT_ADAPTER *ioc = hd->ioc; |
| 3361 | 3368 | ||
| 3362 | return snprintf(buf, PAGE_SIZE, "%02xh\n", | 3369 | return snprintf(buf, PAGE_SIZE, "%02xh\n", |
| 3363 | ioc->nvdata_version_persistent); | 3370 | ioc->nvdata_version_persistent); |
| 3364 | } | 3371 | } |
| 3365 | static CLASS_DEVICE_ATTR(version_nvdata_persistent, S_IRUGO, | 3372 | static DEVICE_ATTR(version_nvdata_persistent, S_IRUGO, |
| 3366 | mptscsih_version_nvdata_persistent_show, NULL); | 3373 | mptscsih_version_nvdata_persistent_show, NULL); |
| 3367 | 3374 | ||
| 3368 | static ssize_t | 3375 | static ssize_t |
| 3369 | mptscsih_version_nvdata_default_show(struct class_device *cdev, char *buf) | 3376 | mptscsih_version_nvdata_default_show(struct device *dev, |
| 3377 | struct device_attribute *attr, char *buf) | ||
| 3370 | { | 3378 | { |
| 3371 | struct Scsi_Host *host = class_to_shost(cdev); | 3379 | struct Scsi_Host *host = class_to_shost(dev); |
| 3372 | MPT_SCSI_HOST *hd = shost_priv(host); | 3380 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3373 | MPT_ADAPTER *ioc = hd->ioc; | 3381 | MPT_ADAPTER *ioc = hd->ioc; |
| 3374 | 3382 | ||
| 3375 | return snprintf(buf, PAGE_SIZE, "%02xh\n",ioc->nvdata_version_default); | 3383 | return snprintf(buf, PAGE_SIZE, "%02xh\n",ioc->nvdata_version_default); |
| 3376 | } | 3384 | } |
| 3377 | static CLASS_DEVICE_ATTR(version_nvdata_default, S_IRUGO, | 3385 | static DEVICE_ATTR(version_nvdata_default, S_IRUGO, |
| 3378 | mptscsih_version_nvdata_default_show, NULL); | 3386 | mptscsih_version_nvdata_default_show, NULL); |
| 3379 | 3387 | ||
| 3380 | static ssize_t | 3388 | static ssize_t |
| 3381 | mptscsih_board_name_show(struct class_device *cdev, char *buf) | 3389 | mptscsih_board_name_show(struct device *dev, struct device_attribute *attr, |
| 3390 | char *buf) | ||
| 3382 | { | 3391 | { |
| 3383 | struct Scsi_Host *host = class_to_shost(cdev); | 3392 | struct Scsi_Host *host = class_to_shost(dev); |
| 3384 | MPT_SCSI_HOST *hd = shost_priv(host); | 3393 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3385 | MPT_ADAPTER *ioc = hd->ioc; | 3394 | MPT_ADAPTER *ioc = hd->ioc; |
| 3386 | 3395 | ||
| 3387 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_name); | 3396 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_name); |
| 3388 | } | 3397 | } |
| 3389 | static CLASS_DEVICE_ATTR(board_name, S_IRUGO, mptscsih_board_name_show, NULL); | 3398 | static DEVICE_ATTR(board_name, S_IRUGO, mptscsih_board_name_show, NULL); |
| 3390 | 3399 | ||
| 3391 | static ssize_t | 3400 | static ssize_t |
| 3392 | mptscsih_board_assembly_show(struct class_device *cdev, char *buf) | 3401 | mptscsih_board_assembly_show(struct device *dev, |
| 3402 | struct device_attribute *attr, char *buf) | ||
| 3393 | { | 3403 | { |
| 3394 | struct Scsi_Host *host = class_to_shost(cdev); | 3404 | struct Scsi_Host *host = class_to_shost(dev); |
| 3395 | MPT_SCSI_HOST *hd = shost_priv(host); | 3405 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3396 | MPT_ADAPTER *ioc = hd->ioc; | 3406 | MPT_ADAPTER *ioc = hd->ioc; |
| 3397 | 3407 | ||
| 3398 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_assembly); | 3408 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_assembly); |
| 3399 | } | 3409 | } |
| 3400 | static CLASS_DEVICE_ATTR(board_assembly, S_IRUGO, | 3410 | static DEVICE_ATTR(board_assembly, S_IRUGO, |
| 3401 | mptscsih_board_assembly_show, NULL); | 3411 | mptscsih_board_assembly_show, NULL); |
| 3402 | 3412 | ||
| 3403 | static ssize_t | 3413 | static ssize_t |
| 3404 | mptscsih_board_tracer_show(struct class_device *cdev, char *buf) | 3414 | mptscsih_board_tracer_show(struct device *dev, struct device_attribute *attr, |
| 3415 | char *buf) | ||
| 3405 | { | 3416 | { |
| 3406 | struct Scsi_Host *host = class_to_shost(cdev); | 3417 | struct Scsi_Host *host = class_to_shost(dev); |
| 3407 | MPT_SCSI_HOST *hd = shost_priv(host); | 3418 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3408 | MPT_ADAPTER *ioc = hd->ioc; | 3419 | MPT_ADAPTER *ioc = hd->ioc; |
| 3409 | 3420 | ||
| 3410 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_tracer); | 3421 | return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_tracer); |
| 3411 | } | 3422 | } |
| 3412 | static CLASS_DEVICE_ATTR(board_tracer, S_IRUGO, | 3423 | static DEVICE_ATTR(board_tracer, S_IRUGO, |
| 3413 | mptscsih_board_tracer_show, NULL); | 3424 | mptscsih_board_tracer_show, NULL); |
| 3414 | 3425 | ||
| 3415 | static ssize_t | 3426 | static ssize_t |
| 3416 | mptscsih_io_delay_show(struct class_device *cdev, char *buf) | 3427 | mptscsih_io_delay_show(struct device *dev, struct device_attribute *attr, |
| 3428 | char *buf) | ||
| 3417 | { | 3429 | { |
| 3418 | struct Scsi_Host *host = class_to_shost(cdev); | 3430 | struct Scsi_Host *host = class_to_shost(dev); |
| 3419 | MPT_SCSI_HOST *hd = shost_priv(host); | 3431 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3420 | MPT_ADAPTER *ioc = hd->ioc; | 3432 | MPT_ADAPTER *ioc = hd->ioc; |
| 3421 | 3433 | ||
| 3422 | return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->io_missing_delay); | 3434 | return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->io_missing_delay); |
| 3423 | } | 3435 | } |
| 3424 | static CLASS_DEVICE_ATTR(io_delay, S_IRUGO, | 3436 | static DEVICE_ATTR(io_delay, S_IRUGO, |
| 3425 | mptscsih_io_delay_show, NULL); | 3437 | mptscsih_io_delay_show, NULL); |
| 3426 | 3438 | ||
| 3427 | static ssize_t | 3439 | static ssize_t |
| 3428 | mptscsih_device_delay_show(struct class_device *cdev, char *buf) | 3440 | mptscsih_device_delay_show(struct device *dev, struct device_attribute *attr, |
| 3441 | char *buf) | ||
| 3429 | { | 3442 | { |
| 3430 | struct Scsi_Host *host = class_to_shost(cdev); | 3443 | struct Scsi_Host *host = class_to_shost(dev); |
| 3431 | MPT_SCSI_HOST *hd = shost_priv(host); | 3444 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3432 | MPT_ADAPTER *ioc = hd->ioc; | 3445 | MPT_ADAPTER *ioc = hd->ioc; |
| 3433 | 3446 | ||
| 3434 | return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->device_missing_delay); | 3447 | return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->device_missing_delay); |
| 3435 | } | 3448 | } |
| 3436 | static CLASS_DEVICE_ATTR(device_delay, S_IRUGO, | 3449 | static DEVICE_ATTR(device_delay, S_IRUGO, |
| 3437 | mptscsih_device_delay_show, NULL); | 3450 | mptscsih_device_delay_show, NULL); |
| 3438 | 3451 | ||
| 3439 | static ssize_t | 3452 | static ssize_t |
| 3440 | mptscsih_debug_level_show(struct class_device *cdev, char *buf) | 3453 | mptscsih_debug_level_show(struct device *dev, struct device_attribute *attr, |
| 3454 | char *buf) | ||
| 3441 | { | 3455 | { |
| 3442 | struct Scsi_Host *host = class_to_shost(cdev); | 3456 | struct Scsi_Host *host = class_to_shost(dev); |
| 3443 | MPT_SCSI_HOST *hd = shost_priv(host); | 3457 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3444 | MPT_ADAPTER *ioc = hd->ioc; | 3458 | MPT_ADAPTER *ioc = hd->ioc; |
| 3445 | 3459 | ||
| 3446 | return snprintf(buf, PAGE_SIZE, "%08xh\n", ioc->debug_level); | 3460 | return snprintf(buf, PAGE_SIZE, "%08xh\n", ioc->debug_level); |
| 3447 | } | 3461 | } |
| 3448 | static ssize_t | 3462 | static ssize_t |
| 3449 | mptscsih_debug_level_store(struct class_device *cdev, const char *buf, | 3463 | mptscsih_debug_level_store(struct device *dev, struct device_attribute *attr, |
| 3450 | size_t count) | 3464 | const char *buf, size_t count) |
| 3451 | { | 3465 | { |
| 3452 | struct Scsi_Host *host = class_to_shost(cdev); | 3466 | struct Scsi_Host *host = class_to_shost(dev); |
| 3453 | MPT_SCSI_HOST *hd = shost_priv(host); | 3467 | MPT_SCSI_HOST *hd = shost_priv(host); |
| 3454 | MPT_ADAPTER *ioc = hd->ioc; | 3468 | MPT_ADAPTER *ioc = hd->ioc; |
| 3455 | int val = 0; | 3469 | int val = 0; |
| @@ -3462,22 +3476,22 @@ mptscsih_debug_level_store(struct class_device *cdev, const char *buf, | |||
| 3462 | ioc->name, ioc->debug_level); | 3476 | ioc->name, ioc->debug_level); |
| 3463 | return strlen(buf); | 3477 | return strlen(buf); |
| 3464 | } | 3478 | } |
| 3465 | static CLASS_DEVICE_ATTR(debug_level, S_IRUGO | S_IWUSR, | 3479 | static DEVICE_ATTR(debug_level, S_IRUGO | S_IWUSR, |
| 3466 | mptscsih_debug_level_show, mptscsih_debug_level_store); | 3480 | mptscsih_debug_level_show, mptscsih_debug_level_store); |
| 3467 | 3481 | ||
| 3468 | struct class_device_attribute *mptscsih_host_attrs[] = { | 3482 | struct device_attribute *mptscsih_host_attrs[] = { |
| 3469 | &class_device_attr_version_fw, | 3483 | &dev_attr_version_fw, |
| 3470 | &class_device_attr_version_bios, | 3484 | &dev_attr_version_bios, |
| 3471 | &class_device_attr_version_mpi, | 3485 | &dev_attr_version_mpi, |
| 3472 | &class_device_attr_version_product, | 3486 | &dev_attr_version_product, |
| 3473 | &class_device_attr_version_nvdata_persistent, | 3487 | &dev_attr_version_nvdata_persistent, |
| 3474 | &class_device_attr_version_nvdata_default, | 3488 | &dev_attr_version_nvdata_default, |
| 3475 | &class_device_attr_board_name, | 3489 | &dev_attr_board_name, |
| 3476 | &class_device_attr_board_assembly, | 3490 | &dev_attr_board_assembly, |
| 3477 | &class_device_attr_board_tracer, | 3491 | &dev_attr_board_tracer, |
| 3478 | &class_device_attr_io_delay, | 3492 | &dev_attr_io_delay, |
| 3479 | &class_device_attr_device_delay, | 3493 | &dev_attr_device_delay, |
| 3480 | &class_device_attr_debug_level, | 3494 | &dev_attr_debug_level, |
| 3481 | NULL, | 3495 | NULL, |
| 3482 | }; | 3496 | }; |
| 3483 | EXPORT_SYMBOL(mptscsih_host_attrs); | 3497 | EXPORT_SYMBOL(mptscsih_host_attrs); |
diff --git a/drivers/message/fusion/mptscsih.h b/drivers/message/fusion/mptscsih.h index d289e97cfe8b..7ea7da0e090c 100644 --- a/drivers/message/fusion/mptscsih.h +++ b/drivers/message/fusion/mptscsih.h | |||
| @@ -129,4 +129,4 @@ extern void mptscsih_timer_expired(unsigned long data); | |||
| 129 | extern int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int ctx2abort, ulong timeout); | 129 | extern int mptscsih_TMHandler(MPT_SCSI_HOST *hd, u8 type, u8 channel, u8 id, int lun, int ctx2abort, ulong timeout); |
| 130 | extern u8 mptscsih_raid_id_to_num(MPT_ADAPTER *ioc, u8 channel, u8 id); | 130 | extern u8 mptscsih_raid_id_to_num(MPT_ADAPTER *ioc, u8 channel, u8 id); |
| 131 | extern int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, u8 channel, u8 id); | 131 | extern int mptscsih_is_phys_disk(MPT_ADAPTER *ioc, u8 channel, u8 id); |
| 132 | extern struct class_device_attribute *mptscsih_host_attrs[]; | 132 | extern struct device_attribute *mptscsih_host_attrs[]; |
diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c index 6fcb0e96adf4..fafb57fed761 100644 --- a/drivers/misc/enclosure.c +++ b/drivers/misc/enclosure.c | |||
| @@ -40,16 +40,16 @@ static struct class enclosure_component_class; | |||
| 40 | * Looks through the list of registered enclosures to see | 40 | * Looks through the list of registered enclosures to see |
| 41 | * if it can find a match for a device. Returns NULL if no | 41 | * if it can find a match for a device. Returns NULL if no |
| 42 | * enclosure is found. Obtains a reference to the enclosure class | 42 | * enclosure is found. Obtains a reference to the enclosure class |
| 43 | * device which must be released with class_device_put(). | 43 | * device which must be released with device_put(). |
| 44 | */ | 44 | */ |
| 45 | struct enclosure_device *enclosure_find(struct device *dev) | 45 | struct enclosure_device *enclosure_find(struct device *dev) |
| 46 | { | 46 | { |
| 47 | struct enclosure_device *edev = NULL; | 47 | struct enclosure_device *edev; |
| 48 | 48 | ||
| 49 | mutex_lock(&container_list_lock); | 49 | mutex_lock(&container_list_lock); |
| 50 | list_for_each_entry(edev, &container_list, node) { | 50 | list_for_each_entry(edev, &container_list, node) { |
| 51 | if (edev->cdev.dev == dev) { | 51 | if (edev->edev.parent == dev) { |
| 52 | class_device_get(&edev->cdev); | 52 | get_device(&edev->edev); |
| 53 | mutex_unlock(&container_list_lock); | 53 | mutex_unlock(&container_list_lock); |
| 54 | return edev; | 54 | return edev; |
| 55 | } | 55 | } |
| @@ -117,11 +117,11 @@ enclosure_register(struct device *dev, const char *name, int components, | |||
| 117 | 117 | ||
| 118 | edev->components = components; | 118 | edev->components = components; |
| 119 | 119 | ||
| 120 | edev->cdev.class = &enclosure_class; | 120 | edev->edev.class = &enclosure_class; |
| 121 | edev->cdev.dev = get_device(dev); | 121 | edev->edev.parent = get_device(dev); |
| 122 | edev->cb = cb; | 122 | edev->cb = cb; |
| 123 | snprintf(edev->cdev.class_id, BUS_ID_SIZE, "%s", name); | 123 | snprintf(edev->edev.bus_id, BUS_ID_SIZE, "%s", name); |
| 124 | err = class_device_register(&edev->cdev); | 124 | err = device_register(&edev->edev); |
| 125 | if (err) | 125 | if (err) |
| 126 | goto err; | 126 | goto err; |
| 127 | 127 | ||
| @@ -135,7 +135,7 @@ enclosure_register(struct device *dev, const char *name, int components, | |||
| 135 | return edev; | 135 | return edev; |
| 136 | 136 | ||
| 137 | err: | 137 | err: |
| 138 | put_device(edev->cdev.dev); | 138 | put_device(edev->edev.parent); |
| 139 | kfree(edev); | 139 | kfree(edev); |
| 140 | return ERR_PTR(err); | 140 | return ERR_PTR(err); |
| 141 | } | 141 | } |
| @@ -158,27 +158,28 @@ void enclosure_unregister(struct enclosure_device *edev) | |||
| 158 | 158 | ||
| 159 | for (i = 0; i < edev->components; i++) | 159 | for (i = 0; i < edev->components; i++) |
| 160 | if (edev->component[i].number != -1) | 160 | if (edev->component[i].number != -1) |
| 161 | class_device_unregister(&edev->component[i].cdev); | 161 | device_unregister(&edev->component[i].cdev); |
| 162 | 162 | ||
| 163 | /* prevent any callbacks into service user */ | 163 | /* prevent any callbacks into service user */ |
| 164 | edev->cb = &enclosure_null_callbacks; | 164 | edev->cb = &enclosure_null_callbacks; |
| 165 | class_device_unregister(&edev->cdev); | 165 | device_unregister(&edev->edev); |
| 166 | } | 166 | } |
| 167 | EXPORT_SYMBOL_GPL(enclosure_unregister); | 167 | EXPORT_SYMBOL_GPL(enclosure_unregister); |
| 168 | 168 | ||
| 169 | static void enclosure_release(struct class_device *cdev) | 169 | static void enclosure_release(struct device *cdev) |
| 170 | { | 170 | { |
| 171 | struct enclosure_device *edev = to_enclosure_device(cdev); | 171 | struct enclosure_device *edev = to_enclosure_device(cdev); |
| 172 | 172 | ||
| 173 | put_device(cdev->dev); | 173 | put_device(cdev->parent); |
| 174 | kfree(edev); | 174 | kfree(edev); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | static void enclosure_component_release(struct class_device *cdev) | 177 | static void enclosure_component_release(struct device *dev) |
| 178 | { | 178 | { |
| 179 | if (cdev->dev) | 179 | struct enclosure_component *cdev = to_enclosure_component(dev); |
| 180 | put_device(cdev->dev); | 180 | |
| 181 | class_device_put(cdev->parent); | 181 | put_device(cdev->dev); |
| 182 | put_device(dev->parent); | ||
| 182 | } | 183 | } |
| 183 | 184 | ||
| 184 | /** | 185 | /** |
| @@ -201,7 +202,7 @@ enclosure_component_register(struct enclosure_device *edev, | |||
| 201 | const char *name) | 202 | const char *name) |
| 202 | { | 203 | { |
| 203 | struct enclosure_component *ecomp; | 204 | struct enclosure_component *ecomp; |
| 204 | struct class_device *cdev; | 205 | struct device *cdev; |
| 205 | int err; | 206 | int err; |
| 206 | 207 | ||
| 207 | if (number >= edev->components) | 208 | if (number >= edev->components) |
| @@ -215,14 +216,14 @@ enclosure_component_register(struct enclosure_device *edev, | |||
| 215 | ecomp->type = type; | 216 | ecomp->type = type; |
| 216 | ecomp->number = number; | 217 | ecomp->number = number; |
| 217 | cdev = &ecomp->cdev; | 218 | cdev = &ecomp->cdev; |
| 218 | cdev->parent = class_device_get(&edev->cdev); | 219 | cdev->parent = get_device(&edev->edev); |
| 219 | cdev->class = &enclosure_component_class; | 220 | cdev->class = &enclosure_component_class; |
| 220 | if (name) | 221 | if (name) |
| 221 | snprintf(cdev->class_id, BUS_ID_SIZE, "%s", name); | 222 | snprintf(cdev->bus_id, BUS_ID_SIZE, "%s", name); |
| 222 | else | 223 | else |
| 223 | snprintf(cdev->class_id, BUS_ID_SIZE, "%u", number); | 224 | snprintf(cdev->bus_id, BUS_ID_SIZE, "%u", number); |
| 224 | 225 | ||
| 225 | err = class_device_register(cdev); | 226 | err = device_register(cdev); |
| 226 | if (err) | 227 | if (err) |
| 227 | ERR_PTR(err); | 228 | ERR_PTR(err); |
| 228 | 229 | ||
| @@ -247,18 +248,17 @@ EXPORT_SYMBOL_GPL(enclosure_component_register); | |||
| 247 | int enclosure_add_device(struct enclosure_device *edev, int component, | 248 | int enclosure_add_device(struct enclosure_device *edev, int component, |
| 248 | struct device *dev) | 249 | struct device *dev) |
| 249 | { | 250 | { |
| 250 | struct class_device *cdev; | 251 | struct enclosure_component *cdev; |
| 251 | 252 | ||
| 252 | if (!edev || component >= edev->components) | 253 | if (!edev || component >= edev->components) |
| 253 | return -EINVAL; | 254 | return -EINVAL; |
| 254 | 255 | ||
| 255 | cdev = &edev->component[component].cdev; | 256 | cdev = &edev->component[component]; |
| 256 | 257 | ||
| 257 | class_device_del(cdev); | 258 | device_del(&cdev->cdev); |
| 258 | if (cdev->dev) | 259 | put_device(cdev->dev); |
| 259 | put_device(cdev->dev); | ||
| 260 | cdev->dev = get_device(dev); | 260 | cdev->dev = get_device(dev); |
| 261 | return class_device_add(cdev); | 261 | return device_add(&cdev->cdev); |
| 262 | } | 262 | } |
| 263 | EXPORT_SYMBOL_GPL(enclosure_add_device); | 263 | EXPORT_SYMBOL_GPL(enclosure_add_device); |
| 264 | 264 | ||
| @@ -272,18 +272,17 @@ EXPORT_SYMBOL_GPL(enclosure_add_device); | |||
| 272 | */ | 272 | */ |
| 273 | int enclosure_remove_device(struct enclosure_device *edev, int component) | 273 | int enclosure_remove_device(struct enclosure_device *edev, int component) |
| 274 | { | 274 | { |
| 275 | struct class_device *cdev; | 275 | struct enclosure_component *cdev; |
| 276 | 276 | ||
| 277 | if (!edev || component >= edev->components) | 277 | if (!edev || component >= edev->components) |
| 278 | return -EINVAL; | 278 | return -EINVAL; |
| 279 | 279 | ||
| 280 | cdev = &edev->component[component].cdev; | 280 | cdev = &edev->component[component]; |
| 281 | 281 | ||
| 282 | class_device_del(cdev); | 282 | device_del(&cdev->cdev); |
| 283 | if (cdev->dev) | 283 | put_device(cdev->dev); |
| 284 | put_device(cdev->dev); | ||
| 285 | cdev->dev = NULL; | 284 | cdev->dev = NULL; |
| 286 | return class_device_add(cdev); | 285 | return device_add(&cdev->cdev); |
| 287 | } | 286 | } |
| 288 | EXPORT_SYMBOL_GPL(enclosure_remove_device); | 287 | EXPORT_SYMBOL_GPL(enclosure_remove_device); |
| 289 | 288 | ||
| @@ -291,14 +290,16 @@ EXPORT_SYMBOL_GPL(enclosure_remove_device); | |||
| 291 | * sysfs pieces below | 290 | * sysfs pieces below |
| 292 | */ | 291 | */ |
| 293 | 292 | ||
| 294 | static ssize_t enclosure_show_components(struct class_device *cdev, char *buf) | 293 | static ssize_t enclosure_show_components(struct device *cdev, |
| 294 | struct device_attribute *attr, | ||
| 295 | char *buf) | ||
| 295 | { | 296 | { |
| 296 | struct enclosure_device *edev = to_enclosure_device(cdev); | 297 | struct enclosure_device *edev = to_enclosure_device(cdev); |
| 297 | 298 | ||
| 298 | return snprintf(buf, 40, "%d\n", edev->components); | 299 | return snprintf(buf, 40, "%d\n", edev->components); |
| 299 | } | 300 | } |
| 300 | 301 | ||
| 301 | static struct class_device_attribute enclosure_attrs[] = { | 302 | static struct device_attribute enclosure_attrs[] = { |
| 302 | __ATTR(components, S_IRUGO, enclosure_show_components, NULL), | 303 | __ATTR(components, S_IRUGO, enclosure_show_components, NULL), |
| 303 | __ATTR_NULL | 304 | __ATTR_NULL |
| 304 | }; | 305 | }; |
| @@ -306,8 +307,8 @@ static struct class_device_attribute enclosure_attrs[] = { | |||
| 306 | static struct class enclosure_class = { | 307 | static struct class enclosure_class = { |
| 307 | .name = "enclosure", | 308 | .name = "enclosure", |
| 308 | .owner = THIS_MODULE, | 309 | .owner = THIS_MODULE, |
| 309 | .release = enclosure_release, | 310 | .dev_release = enclosure_release, |
| 310 | .class_dev_attrs = enclosure_attrs, | 311 | .dev_attrs = enclosure_attrs, |
| 311 | }; | 312 | }; |
| 312 | 313 | ||
| 313 | static const char *const enclosure_status [] = { | 314 | static const char *const enclosure_status [] = { |
| @@ -326,7 +327,8 @@ static const char *const enclosure_type [] = { | |||
| 326 | [ENCLOSURE_COMPONENT_ARRAY_DEVICE] = "array device", | 327 | [ENCLOSURE_COMPONENT_ARRAY_DEVICE] = "array device", |
| 327 | }; | 328 | }; |
| 328 | 329 | ||
| 329 | static ssize_t get_component_fault(struct class_device *cdev, char *buf) | 330 | static ssize_t get_component_fault(struct device *cdev, |
| 331 | struct device_attribute *attr, char *buf) | ||
| 330 | { | 332 | { |
| 331 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 333 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 332 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 334 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -336,8 +338,9 @@ static ssize_t get_component_fault(struct class_device *cdev, char *buf) | |||
| 336 | return snprintf(buf, 40, "%d\n", ecomp->fault); | 338 | return snprintf(buf, 40, "%d\n", ecomp->fault); |
| 337 | } | 339 | } |
| 338 | 340 | ||
| 339 | static ssize_t set_component_fault(struct class_device *cdev, const char *buf, | 341 | static ssize_t set_component_fault(struct device *cdev, |
| 340 | size_t count) | 342 | struct device_attribute *attr, |
| 343 | const char *buf, size_t count) | ||
| 341 | { | 344 | { |
| 342 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 345 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 343 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 346 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -348,7 +351,8 @@ static ssize_t set_component_fault(struct class_device *cdev, const char *buf, | |||
| 348 | return count; | 351 | return count; |
| 349 | } | 352 | } |
| 350 | 353 | ||
| 351 | static ssize_t get_component_status(struct class_device *cdev, char *buf) | 354 | static ssize_t get_component_status(struct device *cdev, |
| 355 | struct device_attribute *attr,char *buf) | ||
| 352 | { | 356 | { |
| 353 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 357 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 354 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 358 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -358,8 +362,9 @@ static ssize_t get_component_status(struct class_device *cdev, char *buf) | |||
| 358 | return snprintf(buf, 40, "%s\n", enclosure_status[ecomp->status]); | 362 | return snprintf(buf, 40, "%s\n", enclosure_status[ecomp->status]); |
| 359 | } | 363 | } |
| 360 | 364 | ||
| 361 | static ssize_t set_component_status(struct class_device *cdev, const char *buf, | 365 | static ssize_t set_component_status(struct device *cdev, |
| 362 | size_t count) | 366 | struct device_attribute *attr, |
| 367 | const char *buf, size_t count) | ||
| 363 | { | 368 | { |
| 364 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 369 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 365 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 370 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -380,7 +385,8 @@ static ssize_t set_component_status(struct class_device *cdev, const char *buf, | |||
| 380 | return -EINVAL; | 385 | return -EINVAL; |
| 381 | } | 386 | } |
| 382 | 387 | ||
| 383 | static ssize_t get_component_active(struct class_device *cdev, char *buf) | 388 | static ssize_t get_component_active(struct device *cdev, |
| 389 | struct device_attribute *attr, char *buf) | ||
| 384 | { | 390 | { |
| 385 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 391 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 386 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 392 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -390,8 +396,9 @@ static ssize_t get_component_active(struct class_device *cdev, char *buf) | |||
| 390 | return snprintf(buf, 40, "%d\n", ecomp->active); | 396 | return snprintf(buf, 40, "%d\n", ecomp->active); |
| 391 | } | 397 | } |
| 392 | 398 | ||
| 393 | static ssize_t set_component_active(struct class_device *cdev, const char *buf, | 399 | static ssize_t set_component_active(struct device *cdev, |
| 394 | size_t count) | 400 | struct device_attribute *attr, |
| 401 | const char *buf, size_t count) | ||
| 395 | { | 402 | { |
| 396 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 403 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 397 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 404 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -402,7 +409,8 @@ static ssize_t set_component_active(struct class_device *cdev, const char *buf, | |||
| 402 | return count; | 409 | return count; |
| 403 | } | 410 | } |
| 404 | 411 | ||
| 405 | static ssize_t get_component_locate(struct class_device *cdev, char *buf) | 412 | static ssize_t get_component_locate(struct device *cdev, |
| 413 | struct device_attribute *attr, char *buf) | ||
| 406 | { | 414 | { |
| 407 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 415 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 408 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 416 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -412,8 +420,9 @@ static ssize_t get_component_locate(struct class_device *cdev, char *buf) | |||
| 412 | return snprintf(buf, 40, "%d\n", ecomp->locate); | 420 | return snprintf(buf, 40, "%d\n", ecomp->locate); |
| 413 | } | 421 | } |
| 414 | 422 | ||
| 415 | static ssize_t set_component_locate(struct class_device *cdev, const char *buf, | 423 | static ssize_t set_component_locate(struct device *cdev, |
| 416 | size_t count) | 424 | struct device_attribute *attr, |
| 425 | const char *buf, size_t count) | ||
| 417 | { | 426 | { |
| 418 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); | 427 | struct enclosure_device *edev = to_enclosure_device(cdev->parent); |
| 419 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 428 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| @@ -424,7 +433,8 @@ static ssize_t set_component_locate(struct class_device *cdev, const char *buf, | |||
| 424 | return count; | 433 | return count; |
| 425 | } | 434 | } |
| 426 | 435 | ||
| 427 | static ssize_t get_component_type(struct class_device *cdev, char *buf) | 436 | static ssize_t get_component_type(struct device *cdev, |
| 437 | struct device_attribute *attr, char *buf) | ||
| 428 | { | 438 | { |
| 429 | struct enclosure_component *ecomp = to_enclosure_component(cdev); | 439 | struct enclosure_component *ecomp = to_enclosure_component(cdev); |
| 430 | 440 | ||
| @@ -432,7 +442,7 @@ static ssize_t get_component_type(struct class_device *cdev, char *buf) | |||
| 432 | } | 442 | } |
| 433 | 443 | ||
| 434 | 444 | ||
| 435 | static struct class_device_attribute enclosure_component_attrs[] = { | 445 | static struct device_attribute enclosure_component_attrs[] = { |
| 436 | __ATTR(fault, S_IRUGO | S_IWUSR, get_component_fault, | 446 | __ATTR(fault, S_IRUGO | S_IWUSR, get_component_fault, |
| 437 | set_component_fault), | 447 | set_component_fault), |
| 438 | __ATTR(status, S_IRUGO | S_IWUSR, get_component_status, | 448 | __ATTR(status, S_IRUGO | S_IWUSR, get_component_status, |
| @@ -448,8 +458,8 @@ static struct class_device_attribute enclosure_component_attrs[] = { | |||
| 448 | static struct class enclosure_component_class = { | 458 | static struct class enclosure_component_class = { |
| 449 | .name = "enclosure_component", | 459 | .name = "enclosure_component", |
| 450 | .owner = THIS_MODULE, | 460 | .owner = THIS_MODULE, |
| 451 | .class_dev_attrs = enclosure_component_attrs, | 461 | .dev_attrs = enclosure_component_attrs, |
| 452 | .release = enclosure_component_release, | 462 | .dev_release = enclosure_component_release, |
| 453 | }; | 463 | }; |
| 454 | 464 | ||
| 455 | static int __init enclosure_init(void) | 465 | static int __init enclosure_init(void) |
diff --git a/drivers/net/wireless/b43/leds.c b/drivers/net/wireless/b43/leds.c index 0aac1ff511df..36a9c42df835 100644 --- a/drivers/net/wireless/b43/leds.c +++ b/drivers/net/wireless/b43/leds.c | |||
| @@ -116,10 +116,7 @@ static void b43_unregister_led(struct b43_led *led) | |||
| 116 | { | 116 | { |
| 117 | if (!led->dev) | 117 | if (!led->dev) |
| 118 | return; | 118 | return; |
| 119 | if (led->dev->suspend_in_progress) | 119 | led_classdev_unregister(&led->led_dev); |
| 120 | led_classdev_unregister_suspended(&led->led_dev); | ||
| 121 | else | ||
| 122 | led_classdev_unregister(&led->led_dev); | ||
| 123 | b43_led_turn_off(led->dev, led->index, led->activelow); | 120 | b43_led_turn_off(led->dev, led->index, led->activelow); |
| 124 | led->dev = NULL; | 121 | led->dev = NULL; |
| 125 | } | 122 | } |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index cf5c046c9fa8..943cc851c504 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -2804,10 +2804,10 @@ static int b43_rng_read(struct hwrng *rng, u32 * data) | |||
| 2804 | return (sizeof(u16)); | 2804 | return (sizeof(u16)); |
| 2805 | } | 2805 | } |
| 2806 | 2806 | ||
| 2807 | static void b43_rng_exit(struct b43_wl *wl, bool suspended) | 2807 | static void b43_rng_exit(struct b43_wl *wl) |
| 2808 | { | 2808 | { |
| 2809 | if (wl->rng_initialized) | 2809 | if (wl->rng_initialized) |
| 2810 | __hwrng_unregister(&wl->rng, suspended); | 2810 | hwrng_unregister(&wl->rng); |
| 2811 | } | 2811 | } |
| 2812 | 2812 | ||
| 2813 | static int b43_rng_init(struct b43_wl *wl) | 2813 | static int b43_rng_init(struct b43_wl *wl) |
| @@ -3824,7 +3824,7 @@ static void b43_wireless_core_exit(struct b43_wldev *dev) | |||
| 3824 | 3824 | ||
| 3825 | if (!dev->suspend_in_progress) { | 3825 | if (!dev->suspend_in_progress) { |
| 3826 | b43_leds_exit(dev); | 3826 | b43_leds_exit(dev); |
| 3827 | b43_rng_exit(dev->wl, false); | 3827 | b43_rng_exit(dev->wl); |
| 3828 | } | 3828 | } |
| 3829 | b43_dma_free(dev); | 3829 | b43_dma_free(dev); |
| 3830 | b43_pio_free(dev); | 3830 | b43_pio_free(dev); |
| @@ -4589,7 +4589,7 @@ static int b43_resume(struct ssb_device *dev) | |||
| 4589 | err = b43_wireless_core_start(wldev); | 4589 | err = b43_wireless_core_start(wldev); |
| 4590 | if (err) { | 4590 | if (err) { |
| 4591 | b43_leds_exit(wldev); | 4591 | b43_leds_exit(wldev); |
| 4592 | b43_rng_exit(wldev->wl, true); | 4592 | b43_rng_exit(wldev->wl); |
| 4593 | b43_wireless_core_exit(wldev); | 4593 | b43_wireless_core_exit(wldev); |
| 4594 | b43err(wl, "Resume failed at core start\n"); | 4594 | b43err(wl, "Resume failed at core start\n"); |
| 4595 | goto out; | 4595 | goto out; |
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 51c3ebf1c7d1..b31faeccb9cd 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c | |||
| @@ -140,9 +140,10 @@ static void twa_unmap_scsi_data(TW_Device_Extension *tw_dev, int request_id); | |||
| 140 | /* Functions */ | 140 | /* Functions */ |
| 141 | 141 | ||
| 142 | /* Show some statistics about the card */ | 142 | /* Show some statistics about the card */ |
| 143 | static ssize_t twa_show_stats(struct class_device *class_dev, char *buf) | 143 | static ssize_t twa_show_stats(struct device *dev, |
| 144 | struct device_attribute *attr, char *buf) | ||
| 144 | { | 145 | { |
| 145 | struct Scsi_Host *host = class_to_shost(class_dev); | 146 | struct Scsi_Host *host = class_to_shost(dev); |
| 146 | TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; | 147 | TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; |
| 147 | unsigned long flags = 0; | 148 | unsigned long flags = 0; |
| 148 | ssize_t len; | 149 | ssize_t len; |
| @@ -184,7 +185,7 @@ static int twa_change_queue_depth(struct scsi_device *sdev, int queue_depth) | |||
| 184 | } /* End twa_change_queue_depth() */ | 185 | } /* End twa_change_queue_depth() */ |
| 185 | 186 | ||
| 186 | /* Create sysfs 'stats' entry */ | 187 | /* Create sysfs 'stats' entry */ |
| 187 | static struct class_device_attribute twa_host_stats_attr = { | 188 | static struct device_attribute twa_host_stats_attr = { |
| 188 | .attr = { | 189 | .attr = { |
| 189 | .name = "stats", | 190 | .name = "stats", |
| 190 | .mode = S_IRUGO, | 191 | .mode = S_IRUGO, |
| @@ -193,7 +194,7 @@ static struct class_device_attribute twa_host_stats_attr = { | |||
| 193 | }; | 194 | }; |
| 194 | 195 | ||
| 195 | /* Host attributes initializer */ | 196 | /* Host attributes initializer */ |
| 196 | static struct class_device_attribute *twa_host_attrs[] = { | 197 | static struct device_attribute *twa_host_attrs[] = { |
| 197 | &twa_host_stats_attr, | 198 | &twa_host_stats_attr, |
| 198 | NULL, | 199 | NULL, |
| 199 | }; | 200 | }; |
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c index adb98a297210..8c22329aa85e 100644 --- a/drivers/scsi/3w-xxxx.c +++ b/drivers/scsi/3w-xxxx.c | |||
| @@ -484,9 +484,10 @@ static void tw_state_request_start(TW_Device_Extension *tw_dev, int *request_id) | |||
| 484 | } /* End tw_state_request_start() */ | 484 | } /* End tw_state_request_start() */ |
| 485 | 485 | ||
| 486 | /* Show some statistics about the card */ | 486 | /* Show some statistics about the card */ |
| 487 | static ssize_t tw_show_stats(struct class_device *class_dev, char *buf) | 487 | static ssize_t tw_show_stats(struct device *dev, struct device_attribute *attr, |
| 488 | char *buf) | ||
| 488 | { | 489 | { |
| 489 | struct Scsi_Host *host = class_to_shost(class_dev); | 490 | struct Scsi_Host *host = class_to_shost(dev); |
| 490 | TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; | 491 | TW_Device_Extension *tw_dev = (TW_Device_Extension *)host->hostdata; |
| 491 | unsigned long flags = 0; | 492 | unsigned long flags = 0; |
| 492 | ssize_t len; | 493 | ssize_t len; |
| @@ -528,7 +529,7 @@ static int tw_change_queue_depth(struct scsi_device *sdev, int queue_depth) | |||
| 528 | } /* End tw_change_queue_depth() */ | 529 | } /* End tw_change_queue_depth() */ |
| 529 | 530 | ||
| 530 | /* Create sysfs 'stats' entry */ | 531 | /* Create sysfs 'stats' entry */ |
| 531 | static struct class_device_attribute tw_host_stats_attr = { | 532 | static struct device_attribute tw_host_stats_attr = { |
| 532 | .attr = { | 533 | .attr = { |
| 533 | .name = "stats", | 534 | .name = "stats", |
| 534 | .mode = S_IRUGO, | 535 | .mode = S_IRUGO, |
| @@ -537,7 +538,7 @@ static struct class_device_attribute tw_host_stats_attr = { | |||
| 537 | }; | 538 | }; |
| 538 | 539 | ||
| 539 | /* Host attributes initializer */ | 540 | /* Host attributes initializer */ |
| 540 | static struct class_device_attribute *tw_host_attrs[] = { | 541 | static struct device_attribute *tw_host_attrs[] = { |
| 541 | &tw_host_stats_attr, | 542 | &tw_host_stats_attr, |
| 542 | NULL, | 543 | NULL, |
| 543 | }; | 544 | }; |
diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index f1504beb2788..460d4024c46c 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c | |||
| @@ -1315,7 +1315,7 @@ int aac_get_adapter_info(struct aac_dev* dev) | |||
| 1315 | tmp>>24,(tmp>>16)&0xff,tmp&0xff, | 1315 | tmp>>24,(tmp>>16)&0xff,tmp&0xff, |
| 1316 | le32_to_cpu(dev->adapter_info.biosbuild)); | 1316 | le32_to_cpu(dev->adapter_info.biosbuild)); |
| 1317 | buffer[0] = '\0'; | 1317 | buffer[0] = '\0'; |
| 1318 | if (aac_show_serial_number( | 1318 | if (aac_get_serial_number( |
| 1319 | shost_to_class(dev->scsi_host_ptr), buffer)) | 1319 | shost_to_class(dev->scsi_host_ptr), buffer)) |
| 1320 | printk(KERN_INFO "%s%d: serial %s", | 1320 | printk(KERN_INFO "%s%d: serial %s", |
| 1321 | dev->name, dev->id, buffer); | 1321 | dev->name, dev->id, buffer); |
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h index ace0b751c131..113ca9c8934c 100644 --- a/drivers/scsi/aacraid/aacraid.h +++ b/drivers/scsi/aacraid/aacraid.h | |||
| @@ -1850,9 +1850,9 @@ int aac_get_containers(struct aac_dev *dev); | |||
| 1850 | int aac_scsi_cmd(struct scsi_cmnd *cmd); | 1850 | int aac_scsi_cmd(struct scsi_cmnd *cmd); |
| 1851 | int aac_dev_ioctl(struct aac_dev *dev, int cmd, void __user *arg); | 1851 | int aac_dev_ioctl(struct aac_dev *dev, int cmd, void __user *arg); |
| 1852 | #ifndef shost_to_class | 1852 | #ifndef shost_to_class |
| 1853 | #define shost_to_class(shost) &shost->shost_classdev | 1853 | #define shost_to_class(shost) &shost->shost_dev |
| 1854 | #endif | 1854 | #endif |
| 1855 | ssize_t aac_show_serial_number(struct class_device *class_dev, char *buf); | 1855 | ssize_t aac_get_serial_number(struct device *dev, char *buf); |
| 1856 | int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg); | 1856 | int aac_do_ioctl(struct aac_dev * dev, int cmd, void __user *arg); |
| 1857 | int aac_rx_init(struct aac_dev *dev); | 1857 | int aac_rx_init(struct aac_dev *dev); |
| 1858 | int aac_rkt_init(struct aac_dev *dev); | 1858 | int aac_rkt_init(struct aac_dev *dev); |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 8372bf6ed482..c109f63f8279 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
| @@ -754,10 +754,10 @@ static long aac_compat_cfg_ioctl(struct file *file, unsigned cmd, unsigned long | |||
| 754 | } | 754 | } |
| 755 | #endif | 755 | #endif |
| 756 | 756 | ||
| 757 | static ssize_t aac_show_model(struct class_device *class_dev, | 757 | static ssize_t aac_show_model(struct device *device, |
| 758 | char *buf) | 758 | struct device_attribute *attr, char *buf) |
| 759 | { | 759 | { |
| 760 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 760 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 761 | int len; | 761 | int len; |
| 762 | 762 | ||
| 763 | if (dev->supplement_adapter_info.AdapterTypeText[0]) { | 763 | if (dev->supplement_adapter_info.AdapterTypeText[0]) { |
| @@ -773,10 +773,10 @@ static ssize_t aac_show_model(struct class_device *class_dev, | |||
| 773 | return len; | 773 | return len; |
| 774 | } | 774 | } |
| 775 | 775 | ||
| 776 | static ssize_t aac_show_vendor(struct class_device *class_dev, | 776 | static ssize_t aac_show_vendor(struct device *device, |
| 777 | char *buf) | 777 | struct device_attribute *attr, char *buf) |
| 778 | { | 778 | { |
| 779 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 779 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 780 | int len; | 780 | int len; |
| 781 | 781 | ||
| 782 | if (dev->supplement_adapter_info.AdapterTypeText[0]) { | 782 | if (dev->supplement_adapter_info.AdapterTypeText[0]) { |
| @@ -792,10 +792,11 @@ static ssize_t aac_show_vendor(struct class_device *class_dev, | |||
| 792 | return len; | 792 | return len; |
| 793 | } | 793 | } |
| 794 | 794 | ||
| 795 | static ssize_t aac_show_flags(struct class_device *class_dev, char *buf) | 795 | static ssize_t aac_show_flags(struct device *cdev, |
| 796 | struct device_attribute *attr, char *buf) | ||
| 796 | { | 797 | { |
| 797 | int len = 0; | 798 | int len = 0; |
| 798 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 799 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(cdev)->hostdata; |
| 799 | 800 | ||
| 800 | if (nblank(dprintk(x))) | 801 | if (nblank(dprintk(x))) |
| 801 | len = snprintf(buf, PAGE_SIZE, "dprintk\n"); | 802 | len = snprintf(buf, PAGE_SIZE, "dprintk\n"); |
| @@ -811,10 +812,11 @@ static ssize_t aac_show_flags(struct class_device *class_dev, char *buf) | |||
| 811 | return len; | 812 | return len; |
| 812 | } | 813 | } |
| 813 | 814 | ||
| 814 | static ssize_t aac_show_kernel_version(struct class_device *class_dev, | 815 | static ssize_t aac_show_kernel_version(struct device *device, |
| 815 | char *buf) | 816 | struct device_attribute *attr, |
| 817 | char *buf) | ||
| 816 | { | 818 | { |
| 817 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 819 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 818 | int len, tmp; | 820 | int len, tmp; |
| 819 | 821 | ||
| 820 | tmp = le32_to_cpu(dev->adapter_info.kernelrev); | 822 | tmp = le32_to_cpu(dev->adapter_info.kernelrev); |
| @@ -824,10 +826,11 @@ static ssize_t aac_show_kernel_version(struct class_device *class_dev, | |||
| 824 | return len; | 826 | return len; |
| 825 | } | 827 | } |
| 826 | 828 | ||
| 827 | static ssize_t aac_show_monitor_version(struct class_device *class_dev, | 829 | static ssize_t aac_show_monitor_version(struct device *device, |
| 828 | char *buf) | 830 | struct device_attribute *attr, |
| 831 | char *buf) | ||
| 829 | { | 832 | { |
| 830 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 833 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 831 | int len, tmp; | 834 | int len, tmp; |
| 832 | 835 | ||
| 833 | tmp = le32_to_cpu(dev->adapter_info.monitorrev); | 836 | tmp = le32_to_cpu(dev->adapter_info.monitorrev); |
| @@ -837,10 +840,11 @@ static ssize_t aac_show_monitor_version(struct class_device *class_dev, | |||
| 837 | return len; | 840 | return len; |
| 838 | } | 841 | } |
| 839 | 842 | ||
| 840 | static ssize_t aac_show_bios_version(struct class_device *class_dev, | 843 | static ssize_t aac_show_bios_version(struct device *device, |
| 841 | char *buf) | 844 | struct device_attribute *attr, |
| 845 | char *buf) | ||
| 842 | { | 846 | { |
| 843 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 847 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 844 | int len, tmp; | 848 | int len, tmp; |
| 845 | 849 | ||
| 846 | tmp = le32_to_cpu(dev->adapter_info.biosrev); | 850 | tmp = le32_to_cpu(dev->adapter_info.biosrev); |
| @@ -850,9 +854,10 @@ static ssize_t aac_show_bios_version(struct class_device *class_dev, | |||
| 850 | return len; | 854 | return len; |
| 851 | } | 855 | } |
| 852 | 856 | ||
| 853 | ssize_t aac_show_serial_number(struct class_device *class_dev, char *buf) | 857 | ssize_t aac_show_serial_number(struct device *device, |
| 858 | struct device_attribute *attr, char *buf) | ||
| 854 | { | 859 | { |
| 855 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 860 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 856 | int len = 0; | 861 | int len = 0; |
| 857 | 862 | ||
| 858 | if (le32_to_cpu(dev->adapter_info.serial[0]) != 0xBAD0) | 863 | if (le32_to_cpu(dev->adapter_info.serial[0]) != 0xBAD0) |
| @@ -868,35 +873,39 @@ ssize_t aac_show_serial_number(struct class_device *class_dev, char *buf) | |||
| 868 | return len; | 873 | return len; |
| 869 | } | 874 | } |
| 870 | 875 | ||
| 871 | static ssize_t aac_show_max_channel(struct class_device *class_dev, char *buf) | 876 | static ssize_t aac_show_max_channel(struct device *device, |
| 877 | struct device_attribute *attr, char *buf) | ||
| 872 | { | 878 | { |
| 873 | return snprintf(buf, PAGE_SIZE, "%d\n", | 879 | return snprintf(buf, PAGE_SIZE, "%d\n", |
| 874 | class_to_shost(class_dev)->max_channel); | 880 | class_to_shost(device)->max_channel); |
| 875 | } | 881 | } |
| 876 | 882 | ||
| 877 | static ssize_t aac_show_max_id(struct class_device *class_dev, char *buf) | 883 | static ssize_t aac_show_max_id(struct device *device, |
| 884 | struct device_attribute *attr, char *buf) | ||
| 878 | { | 885 | { |
| 879 | return snprintf(buf, PAGE_SIZE, "%d\n", | 886 | return snprintf(buf, PAGE_SIZE, "%d\n", |
| 880 | class_to_shost(class_dev)->max_id); | 887 | class_to_shost(device)->max_id); |
| 881 | } | 888 | } |
| 882 | 889 | ||
| 883 | static ssize_t aac_store_reset_adapter(struct class_device *class_dev, | 890 | static ssize_t aac_store_reset_adapter(struct device *device, |
| 884 | const char *buf, size_t count) | 891 | struct device_attribute *attr, |
| 892 | const char *buf, size_t count) | ||
| 885 | { | 893 | { |
| 886 | int retval = -EACCES; | 894 | int retval = -EACCES; |
| 887 | 895 | ||
| 888 | if (!capable(CAP_SYS_ADMIN)) | 896 | if (!capable(CAP_SYS_ADMIN)) |
| 889 | return retval; | 897 | return retval; |
| 890 | retval = aac_reset_adapter((struct aac_dev*)class_to_shost(class_dev)->hostdata, buf[0] == '!'); | 898 | retval = aac_reset_adapter((struct aac_dev*)class_to_shost(device)->hostdata, buf[0] == '!'); |
| 891 | if (retval >= 0) | 899 | if (retval >= 0) |
| 892 | retval = count; | 900 | retval = count; |
| 893 | return retval; | 901 | return retval; |
| 894 | } | 902 | } |
| 895 | 903 | ||
| 896 | static ssize_t aac_show_reset_adapter(struct class_device *class_dev, | 904 | static ssize_t aac_show_reset_adapter(struct device *device, |
| 897 | char *buf) | 905 | struct device_attribute *attr, |
| 906 | char *buf) | ||
| 898 | { | 907 | { |
| 899 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(class_dev)->hostdata; | 908 | struct aac_dev *dev = (struct aac_dev*)class_to_shost(device)->hostdata; |
| 900 | int len, tmp; | 909 | int len, tmp; |
| 901 | 910 | ||
| 902 | tmp = aac_adapter_check_health(dev); | 911 | tmp = aac_adapter_check_health(dev); |
| @@ -906,70 +915,70 @@ static ssize_t aac_show_reset_adapter(struct class_device *class_dev, | |||
| 906 | return len; | 915 | return len; |
| 907 | } | 916 | } |
| 908 | 917 | ||
| 909 | static struct class_device_attribute aac_model = { | 918 | static struct device_attribute aac_model = { |
| 910 | .attr = { | 919 | .attr = { |
| 911 | .name = "model", | 920 | .name = "model", |
| 912 | .mode = S_IRUGO, | 921 | .mode = S_IRUGO, |
| 913 | }, | 922 | }, |
| 914 | .show = aac_show_model, | 923 | .show = aac_show_model, |
| 915 | }; | 924 | }; |
| 916 | static struct class_device_attribute aac_vendor = { | 925 | static struct device_attribute aac_vendor = { |
| 917 | .attr = { | 926 | .attr = { |
| 918 | .name = "vendor", | 927 | .name = "vendor", |
| 919 | .mode = S_IRUGO, | 928 | .mode = S_IRUGO, |
| 920 | }, | 929 | }, |
| 921 | .show = aac_show_vendor, | 930 | .show = aac_show_vendor, |
| 922 | }; | 931 | }; |
| 923 | static struct class_device_attribute aac_flags = { | 932 | static struct device_attribute aac_flags = { |
| 924 | .attr = { | 933 | .attr = { |
| 925 | .name = "flags", | 934 | .name = "flags", |
| 926 | .mode = S_IRUGO, | 935 | .mode = S_IRUGO, |
| 927 | }, | 936 | }, |
| 928 | .show = aac_show_flags, | 937 | .show = aac_show_flags, |
| 929 | }; | 938 | }; |
| 930 | static struct class_device_attribute aac_kernel_version = { | 939 | static struct device_attribute aac_kernel_version = { |
| 931 | .attr = { | 940 | .attr = { |
| 932 | .name = "hba_kernel_version", | 941 | .name = "hba_kernel_version", |
| 933 | .mode = S_IRUGO, | 942 | .mode = S_IRUGO, |
| 934 | }, | 943 | }, |
| 935 | .show = aac_show_kernel_version, | 944 | .show = aac_show_kernel_version, |
| 936 | }; | 945 | }; |
| 937 | static struct class_device_attribute aac_monitor_version = { | 946 | static struct device_attribute aac_monitor_version = { |
| 938 | .attr = { | 947 | .attr = { |
| 939 | .name = "hba_monitor_version", | 948 | .name = "hba_monitor_version", |
| 940 | .mode = S_IRUGO, | 949 | .mode = S_IRUGO, |
| 941 | }, | 950 | }, |
| 942 | .show = aac_show_monitor_version, | 951 | .show = aac_show_monitor_version, |
| 943 | }; | 952 | }; |
| 944 | static struct class_device_attribute aac_bios_version = { | 953 | static struct device_attribute aac_bios_version = { |
| 945 | .attr = { | 954 | .attr = { |
| 946 | .name = "hba_bios_version", | 955 | .name = "hba_bios_version", |
| 947 | .mode = S_IRUGO, | 956 | .mode = S_IRUGO, |
| 948 | }, | 957 | }, |
| 949 | .show = aac_show_bios_version, | 958 | .show = aac_show_bios_version, |
| 950 | }; | 959 | }; |
| 951 | static struct class_device_attribute aac_serial_number = { | 960 | static struct device_attribute aac_serial_number = { |
| 952 | .attr = { | 961 | .attr = { |
| 953 | .name = "serial_number", | 962 | .name = "serial_number", |
| 954 | .mode = S_IRUGO, | 963 | .mode = S_IRUGO, |
| 955 | }, | 964 | }, |
| 956 | .show = aac_show_serial_number, | 965 | .show = aac_show_serial_number, |
| 957 | }; | 966 | }; |
| 958 | static struct class_device_attribute aac_max_channel = { | 967 | static struct device_attribute aac_max_channel = { |
| 959 | .attr = { | 968 | .attr = { |
| 960 | .name = "max_channel", | 969 | .name = "max_channel", |
| 961 | .mode = S_IRUGO, | 970 | .mode = S_IRUGO, |
| 962 | }, | 971 | }, |
| 963 | .show = aac_show_max_channel, | 972 | .show = aac_show_max_channel, |
| 964 | }; | 973 | }; |
| 965 | static struct class_device_attribute aac_max_id = { | 974 | static struct device_attribute aac_max_id = { |
| 966 | .attr = { | 975 | .attr = { |
| 967 | .name = "max_id", | 976 | .name = "max_id", |
| 968 | .mode = S_IRUGO, | 977 | .mode = S_IRUGO, |
| 969 | }, | 978 | }, |
| 970 | .show = aac_show_max_id, | 979 | .show = aac_show_max_id, |
| 971 | }; | 980 | }; |
| 972 | static struct class_device_attribute aac_reset = { | 981 | static struct device_attribute aac_reset = { |
| 973 | .attr = { | 982 | .attr = { |
| 974 | .name = "reset_host", | 983 | .name = "reset_host", |
| 975 | .mode = S_IWUSR|S_IRUGO, | 984 | .mode = S_IWUSR|S_IRUGO, |
| @@ -978,7 +987,7 @@ static struct class_device_attribute aac_reset = { | |||
| 978 | .show = aac_show_reset_adapter, | 987 | .show = aac_show_reset_adapter, |
| 979 | }; | 988 | }; |
| 980 | 989 | ||
| 981 | static struct class_device_attribute *aac_attrs[] = { | 990 | static struct device_attribute *aac_attrs[] = { |
| 982 | &aac_model, | 991 | &aac_model, |
| 983 | &aac_vendor, | 992 | &aac_vendor, |
| 984 | &aac_flags, | 993 | &aac_flags, |
| @@ -992,6 +1001,10 @@ static struct class_device_attribute *aac_attrs[] = { | |||
| 992 | NULL | 1001 | NULL |
| 993 | }; | 1002 | }; |
| 994 | 1003 | ||
| 1004 | ssize_t aac_get_serial_number(struct device *device, char *buf) | ||
| 1005 | { | ||
| 1006 | return aac_show_serial_number(device, &aac_serial_number, buf); | ||
| 1007 | } | ||
| 995 | 1008 | ||
| 996 | static const struct file_operations aac_cfg_fops = { | 1009 | static const struct file_operations aac_cfg_fops = { |
| 997 | .owner = THIS_MODULE, | 1010 | .owner = THIS_MODULE, |
diff --git a/drivers/scsi/arcmsr/arcmsr.h b/drivers/scsi/arcmsr/arcmsr.h index 3288be2e49f8..ab646e580d64 100644 --- a/drivers/scsi/arcmsr/arcmsr.h +++ b/drivers/scsi/arcmsr/arcmsr.h | |||
| @@ -44,7 +44,7 @@ | |||
| 44 | */ | 44 | */ |
| 45 | #include <linux/interrupt.h> | 45 | #include <linux/interrupt.h> |
| 46 | 46 | ||
| 47 | struct class_device_attribute; | 47 | struct device_attribute; |
| 48 | /*The limit of outstanding scsi command that firmware can handle*/ | 48 | /*The limit of outstanding scsi command that firmware can handle*/ |
| 49 | #define ARCMSR_MAX_OUTSTANDING_CMD 256 | 49 | #define ARCMSR_MAX_OUTSTANDING_CMD 256 |
| 50 | #define ARCMSR_MAX_FREECCB_NUM 320 | 50 | #define ARCMSR_MAX_FREECCB_NUM 320 |
| @@ -556,6 +556,6 @@ struct SENSE_DATA | |||
| 556 | extern void arcmsr_post_ioctldata2iop(struct AdapterControlBlock *); | 556 | extern void arcmsr_post_ioctldata2iop(struct AdapterControlBlock *); |
| 557 | extern void arcmsr_iop_message_read(struct AdapterControlBlock *); | 557 | extern void arcmsr_iop_message_read(struct AdapterControlBlock *); |
| 558 | extern struct QBUFFER __iomem *arcmsr_get_iop_rqbuffer(struct AdapterControlBlock *); | 558 | extern struct QBUFFER __iomem *arcmsr_get_iop_rqbuffer(struct AdapterControlBlock *); |
| 559 | extern struct class_device_attribute *arcmsr_host_attrs[]; | 559 | extern struct device_attribute *arcmsr_host_attrs[]; |
| 560 | extern int arcmsr_alloc_sysfs_attr(struct AdapterControlBlock *); | 560 | extern int arcmsr_alloc_sysfs_attr(struct AdapterControlBlock *); |
| 561 | void arcmsr_free_sysfs_attr(struct AdapterControlBlock *acb); | 561 | void arcmsr_free_sysfs_attr(struct AdapterControlBlock *acb); |
diff --git a/drivers/scsi/arcmsr/arcmsr_attr.c b/drivers/scsi/arcmsr/arcmsr_attr.c index 7d7b0a554276..69f8346aa288 100644 --- a/drivers/scsi/arcmsr/arcmsr_attr.c +++ b/drivers/scsi/arcmsr/arcmsr_attr.c | |||
| @@ -57,15 +57,15 @@ | |||
| 57 | #include <scsi/scsi_transport.h> | 57 | #include <scsi/scsi_transport.h> |
| 58 | #include "arcmsr.h" | 58 | #include "arcmsr.h" |
| 59 | 59 | ||
| 60 | struct class_device_attribute *arcmsr_host_attrs[]; | 60 | struct device_attribute *arcmsr_host_attrs[]; |
| 61 | 61 | ||
| 62 | static ssize_t arcmsr_sysfs_iop_message_read(struct kobject *kobj, | 62 | static ssize_t arcmsr_sysfs_iop_message_read(struct kobject *kobj, |
| 63 | struct bin_attribute *bin, | 63 | struct bin_attribute *bin, |
| 64 | char *buf, loff_t off, | 64 | char *buf, loff_t off, |
| 65 | size_t count) | 65 | size_t count) |
| 66 | { | 66 | { |
| 67 | struct class_device *cdev = container_of(kobj,struct class_device,kobj); | 67 | struct device *dev = container_of(kobj,struct device,kobj); |
| 68 | struct Scsi_Host *host = class_to_shost(cdev); | 68 | struct Scsi_Host *host = class_to_shost(dev); |
| 69 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 69 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; |
| 70 | uint8_t *pQbuffer,*ptmpQbuffer; | 70 | uint8_t *pQbuffer,*ptmpQbuffer; |
| 71 | int32_t allxfer_len = 0; | 71 | int32_t allxfer_len = 0; |
| @@ -110,8 +110,8 @@ static ssize_t arcmsr_sysfs_iop_message_write(struct kobject *kobj, | |||
| 110 | char *buf, loff_t off, | 110 | char *buf, loff_t off, |
| 111 | size_t count) | 111 | size_t count) |
| 112 | { | 112 | { |
| 113 | struct class_device *cdev = container_of(kobj,struct class_device,kobj); | 113 | struct device *dev = container_of(kobj,struct device,kobj); |
| 114 | struct Scsi_Host *host = class_to_shost(cdev); | 114 | struct Scsi_Host *host = class_to_shost(dev); |
| 115 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 115 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; |
| 116 | int32_t my_empty_len, user_len, wqbuf_firstindex, wqbuf_lastindex; | 116 | int32_t my_empty_len, user_len, wqbuf_firstindex, wqbuf_lastindex; |
| 117 | uint8_t *pQbuffer, *ptmpuserbuffer; | 117 | uint8_t *pQbuffer, *ptmpuserbuffer; |
| @@ -158,8 +158,8 @@ static ssize_t arcmsr_sysfs_iop_message_clear(struct kobject *kobj, | |||
| 158 | char *buf, loff_t off, | 158 | char *buf, loff_t off, |
| 159 | size_t count) | 159 | size_t count) |
| 160 | { | 160 | { |
| 161 | struct class_device *cdev = container_of(kobj,struct class_device,kobj); | 161 | struct device *dev = container_of(kobj,struct device,kobj); |
| 162 | struct Scsi_Host *host = class_to_shost(cdev); | 162 | struct Scsi_Host *host = class_to_shost(dev); |
| 163 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 163 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; |
| 164 | uint8_t *pQbuffer; | 164 | uint8_t *pQbuffer; |
| 165 | 165 | ||
| @@ -220,87 +220,104 @@ int arcmsr_alloc_sysfs_attr(struct AdapterControlBlock *acb) | |||
| 220 | struct Scsi_Host *host = acb->host; | 220 | struct Scsi_Host *host = acb->host; |
| 221 | int error; | 221 | int error; |
| 222 | 222 | ||
| 223 | error = sysfs_create_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_read_attr); | 223 | error = sysfs_create_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_read_attr); |
| 224 | if (error) { | 224 | if (error) { |
| 225 | printk(KERN_ERR "arcmsr: alloc sysfs mu_read failed\n"); | 225 | printk(KERN_ERR "arcmsr: alloc sysfs mu_read failed\n"); |
| 226 | goto error_bin_file_message_read; | 226 | goto error_bin_file_message_read; |
| 227 | } | 227 | } |
| 228 | error = sysfs_create_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_write_attr); | 228 | error = sysfs_create_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_write_attr); |
| 229 | if (error) { | 229 | if (error) { |
| 230 | printk(KERN_ERR "arcmsr: alloc sysfs mu_write failed\n"); | 230 | printk(KERN_ERR "arcmsr: alloc sysfs mu_write failed\n"); |
| 231 | goto error_bin_file_message_write; | 231 | goto error_bin_file_message_write; |
| 232 | } | 232 | } |
| 233 | error = sysfs_create_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_clear_attr); | 233 | error = sysfs_create_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_clear_attr); |
| 234 | if (error) { | 234 | if (error) { |
| 235 | printk(KERN_ERR "arcmsr: alloc sysfs mu_clear failed\n"); | 235 | printk(KERN_ERR "arcmsr: alloc sysfs mu_clear failed\n"); |
| 236 | goto error_bin_file_message_clear; | 236 | goto error_bin_file_message_clear; |
| 237 | } | 237 | } |
| 238 | return 0; | 238 | return 0; |
| 239 | error_bin_file_message_clear: | 239 | error_bin_file_message_clear: |
| 240 | sysfs_remove_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_write_attr); | 240 | sysfs_remove_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_write_attr); |
| 241 | error_bin_file_message_write: | 241 | error_bin_file_message_write: |
| 242 | sysfs_remove_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_read_attr); | 242 | sysfs_remove_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_read_attr); |
| 243 | error_bin_file_message_read: | 243 | error_bin_file_message_read: |
| 244 | return error; | 244 | return error; |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | void | 247 | void arcmsr_free_sysfs_attr(struct AdapterControlBlock *acb) |
| 248 | arcmsr_free_sysfs_attr(struct AdapterControlBlock *acb) { | 248 | { |
| 249 | struct Scsi_Host *host = acb->host; | 249 | struct Scsi_Host *host = acb->host; |
| 250 | 250 | ||
| 251 | sysfs_remove_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_clear_attr); | 251 | sysfs_remove_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_clear_attr); |
| 252 | sysfs_remove_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_write_attr); | 252 | sysfs_remove_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_write_attr); |
| 253 | sysfs_remove_bin_file(&host->shost_classdev.kobj, &arcmsr_sysfs_message_read_attr); | 253 | sysfs_remove_bin_file(&host->shost_dev.kobj, &arcmsr_sysfs_message_read_attr); |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | 256 | ||
| 257 | static ssize_t | 257 | static ssize_t |
| 258 | arcmsr_attr_host_driver_version(struct class_device *cdev, char *buf) { | 258 | arcmsr_attr_host_driver_version(struct device *dev, |
| 259 | struct device_attribute *attr, char *buf) | ||
| 260 | { | ||
| 259 | return snprintf(buf, PAGE_SIZE, | 261 | return snprintf(buf, PAGE_SIZE, |
| 260 | "%s\n", | 262 | "%s\n", |
| 261 | ARCMSR_DRIVER_VERSION); | 263 | ARCMSR_DRIVER_VERSION); |
| 262 | } | 264 | } |
| 263 | 265 | ||
| 264 | static ssize_t | 266 | static ssize_t |
| 265 | arcmsr_attr_host_driver_posted_cmd(struct class_device *cdev, char *buf) { | 267 | arcmsr_attr_host_driver_posted_cmd(struct device *dev, |
| 266 | struct Scsi_Host *host = class_to_shost(cdev); | 268 | struct device_attribute *attr, char *buf) |
| 267 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 269 | { |
| 270 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 271 | struct AdapterControlBlock *acb = | ||
| 272 | (struct AdapterControlBlock *) host->hostdata; | ||
| 268 | return snprintf(buf, PAGE_SIZE, | 273 | return snprintf(buf, PAGE_SIZE, |
| 269 | "%4d\n", | 274 | "%4d\n", |
| 270 | atomic_read(&acb->ccboutstandingcount)); | 275 | atomic_read(&acb->ccboutstandingcount)); |
| 271 | } | 276 | } |
| 272 | 277 | ||
| 273 | static ssize_t | 278 | static ssize_t |
| 274 | arcmsr_attr_host_driver_reset(struct class_device *cdev, char *buf) { | 279 | arcmsr_attr_host_driver_reset(struct device *dev, |
| 275 | struct Scsi_Host *host = class_to_shost(cdev); | 280 | struct device_attribute *attr, char *buf) |
| 276 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 281 | { |
| 282 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 283 | struct AdapterControlBlock *acb = | ||
| 284 | (struct AdapterControlBlock *) host->hostdata; | ||
| 277 | return snprintf(buf, PAGE_SIZE, | 285 | return snprintf(buf, PAGE_SIZE, |
| 278 | "%4d\n", | 286 | "%4d\n", |
| 279 | acb->num_resets); | 287 | acb->num_resets); |
| 280 | } | 288 | } |
| 281 | 289 | ||
| 282 | static ssize_t | 290 | static ssize_t |
| 283 | arcmsr_attr_host_driver_abort(struct class_device *cdev, char *buf) { | 291 | arcmsr_attr_host_driver_abort(struct device *dev, |
| 284 | struct Scsi_Host *host = class_to_shost(cdev); | 292 | struct device_attribute *attr, char *buf) |
| 285 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 293 | { |
| 294 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 295 | struct AdapterControlBlock *acb = | ||
| 296 | (struct AdapterControlBlock *) host->hostdata; | ||
| 286 | return snprintf(buf, PAGE_SIZE, | 297 | return snprintf(buf, PAGE_SIZE, |
| 287 | "%4d\n", | 298 | "%4d\n", |
| 288 | acb->num_aborts); | 299 | acb->num_aborts); |
| 289 | } | 300 | } |
| 290 | 301 | ||
| 291 | static ssize_t | 302 | static ssize_t |
| 292 | arcmsr_attr_host_fw_model(struct class_device *cdev, char *buf) { | 303 | arcmsr_attr_host_fw_model(struct device *dev, struct device_attribute *attr, |
| 293 | struct Scsi_Host *host = class_to_shost(cdev); | 304 | char *buf) |
| 294 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 305 | { |
| 306 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 307 | struct AdapterControlBlock *acb = | ||
| 308 | (struct AdapterControlBlock *) host->hostdata; | ||
| 295 | return snprintf(buf, PAGE_SIZE, | 309 | return snprintf(buf, PAGE_SIZE, |
| 296 | "%s\n", | 310 | "%s\n", |
| 297 | acb->firm_model); | 311 | acb->firm_model); |
| 298 | } | 312 | } |
| 299 | 313 | ||
| 300 | static ssize_t | 314 | static ssize_t |
| 301 | arcmsr_attr_host_fw_version(struct class_device *cdev, char *buf) { | 315 | arcmsr_attr_host_fw_version(struct device *dev, |
| 302 | struct Scsi_Host *host = class_to_shost(cdev); | 316 | struct device_attribute *attr, char *buf) |
| 303 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 317 | { |
| 318 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 319 | struct AdapterControlBlock *acb = | ||
| 320 | (struct AdapterControlBlock *) host->hostdata; | ||
| 304 | 321 | ||
| 305 | return snprintf(buf, PAGE_SIZE, | 322 | return snprintf(buf, PAGE_SIZE, |
| 306 | "%s\n", | 323 | "%s\n", |
| @@ -308,9 +325,12 @@ arcmsr_attr_host_fw_version(struct class_device *cdev, char *buf) { | |||
| 308 | } | 325 | } |
| 309 | 326 | ||
| 310 | static ssize_t | 327 | static ssize_t |
| 311 | arcmsr_attr_host_fw_request_len(struct class_device *cdev, char *buf) { | 328 | arcmsr_attr_host_fw_request_len(struct device *dev, |
| 312 | struct Scsi_Host *host = class_to_shost(cdev); | 329 | struct device_attribute *attr, char *buf) |
| 313 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 330 | { |
| 331 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 332 | struct AdapterControlBlock *acb = | ||
| 333 | (struct AdapterControlBlock *) host->hostdata; | ||
| 314 | 334 | ||
| 315 | return snprintf(buf, PAGE_SIZE, | 335 | return snprintf(buf, PAGE_SIZE, |
| 316 | "%4d\n", | 336 | "%4d\n", |
| @@ -318,9 +338,12 @@ arcmsr_attr_host_fw_request_len(struct class_device *cdev, char *buf) { | |||
| 318 | } | 338 | } |
| 319 | 339 | ||
| 320 | static ssize_t | 340 | static ssize_t |
| 321 | arcmsr_attr_host_fw_numbers_queue(struct class_device *cdev, char *buf) { | 341 | arcmsr_attr_host_fw_numbers_queue(struct device *dev, |
| 322 | struct Scsi_Host *host = class_to_shost(cdev); | 342 | struct device_attribute *attr, char *buf) |
| 323 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 343 | { |
| 344 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 345 | struct AdapterControlBlock *acb = | ||
| 346 | (struct AdapterControlBlock *) host->hostdata; | ||
| 324 | 347 | ||
| 325 | return snprintf(buf, PAGE_SIZE, | 348 | return snprintf(buf, PAGE_SIZE, |
| 326 | "%4d\n", | 349 | "%4d\n", |
| @@ -328,9 +351,12 @@ arcmsr_attr_host_fw_numbers_queue(struct class_device *cdev, char *buf) { | |||
| 328 | } | 351 | } |
| 329 | 352 | ||
| 330 | static ssize_t | 353 | static ssize_t |
| 331 | arcmsr_attr_host_fw_sdram_size(struct class_device *cdev, char *buf) { | 354 | arcmsr_attr_host_fw_sdram_size(struct device *dev, |
| 332 | struct Scsi_Host *host = class_to_shost(cdev); | 355 | struct device_attribute *attr, char *buf) |
| 333 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 356 | { |
| 357 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 358 | struct AdapterControlBlock *acb = | ||
| 359 | (struct AdapterControlBlock *) host->hostdata; | ||
| 334 | 360 | ||
| 335 | return snprintf(buf, PAGE_SIZE, | 361 | return snprintf(buf, PAGE_SIZE, |
| 336 | "%4d\n", | 362 | "%4d\n", |
| @@ -338,36 +364,39 @@ arcmsr_attr_host_fw_sdram_size(struct class_device *cdev, char *buf) { | |||
| 338 | } | 364 | } |
| 339 | 365 | ||
| 340 | static ssize_t | 366 | static ssize_t |
| 341 | arcmsr_attr_host_fw_hd_channels(struct class_device *cdev, char *buf) { | 367 | arcmsr_attr_host_fw_hd_channels(struct device *dev, |
| 342 | struct Scsi_Host *host = class_to_shost(cdev); | 368 | struct device_attribute *attr, char *buf) |
| 343 | struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; | 369 | { |
| 370 | struct Scsi_Host *host = class_to_shost(dev); | ||
| 371 | struct AdapterControlBlock *acb = | ||
| 372 | (struct AdapterControlBlock *) host->hostdata; | ||
| 344 | 373 | ||
| 345 | return snprintf(buf, PAGE_SIZE, | 374 | return snprintf(buf, PAGE_SIZE, |
| 346 | "%4d\n", | 375 | "%4d\n", |
| 347 | acb->firm_hd_channels); | 376 | acb->firm_hd_channels); |
| 348 | } | 377 | } |
| 349 | 378 | ||
| 350 | static CLASS_DEVICE_ATTR(host_driver_version, S_IRUGO, arcmsr_attr_host_driver_version, NULL); | 379 | static DEVICE_ATTR(host_driver_version, S_IRUGO, arcmsr_attr_host_driver_version, NULL); |
| 351 | static CLASS_DEVICE_ATTR(host_driver_posted_cmd, S_IRUGO, arcmsr_attr_host_driver_posted_cmd, NULL); | 380 | static DEVICE_ATTR(host_driver_posted_cmd, S_IRUGO, arcmsr_attr_host_driver_posted_cmd, NULL); |
| 352 | static CLASS_DEVICE_ATTR(host_driver_reset, S_IRUGO, arcmsr_attr_host_driver_reset, NULL); | 381 | static DEVICE_ATTR(host_driver_reset, S_IRUGO, arcmsr_attr_host_driver_reset, NULL); |
| 353 | static CLASS_DEVICE_ATTR(host_driver_abort, S_IRUGO, arcmsr_attr_host_driver_abort, NULL); | 382 | static DEVICE_ATTR(host_driver_abort, S_IRUGO, arcmsr_attr_host_driver_abort, NULL); |
| 354 | static CLASS_DEVICE_ATTR(host_fw_model, S_IRUGO, arcmsr_attr_host_fw_model, NULL); | 383 | static DEVICE_ATTR(host_fw_model, S_IRUGO, arcmsr_attr_host_fw_model, NULL); |
| 355 | static CLASS_DEVICE_ATTR(host_fw_version, S_IRUGO, arcmsr_attr_host_fw_version, NULL); | 384 | static DEVICE_ATTR(host_fw_version, S_IRUGO, arcmsr_attr_host_fw_version, NULL); |
| 356 | static CLASS_DEVICE_ATTR(host_fw_request_len, S_IRUGO, arcmsr_attr_host_fw_request_len, NULL); | 385 | static DEVICE_ATTR(host_fw_request_len, S_IRUGO, arcmsr_attr_host_fw_request_len, NULL); |
| 357 | static CLASS_DEVICE_ATTR(host_fw_numbers_queue, S_IRUGO, arcmsr_attr_host_fw_numbers_queue, NULL); | 386 | static DEVICE_ATTR(host_fw_numbers_queue, S_IRUGO, arcmsr_attr_host_fw_numbers_queue, NULL); |
| 358 | static CLASS_DEVICE_ATTR(host_fw_sdram_size, S_IRUGO, arcmsr_attr_host_fw_sdram_size, NULL); | 387 | static DEVICE_ATTR(host_fw_sdram_size, S_IRUGO, arcmsr_attr_host_fw_sdram_size, NULL); |
| 359 | static CLASS_DEVICE_ATTR(host_fw_hd_channels, S_IRUGO, arcmsr_attr_host_fw_hd_channels, NULL); | 388 | static DEVICE_ATTR(host_fw_hd_channels, S_IRUGO, arcmsr_attr_host_fw_hd_channels, NULL); |
| 360 | 389 | ||
| 361 | struct class_device_attribute *arcmsr_host_attrs[] = { | 390 | struct device_attribute *arcmsr_host_attrs[] = { |
| 362 | &class_device_attr_host_driver_version, | 391 | &dev_attr_host_driver_version, |
| 363 | &class_device_attr_host_driver_posted_cmd, | 392 | &dev_attr_host_driver_posted_cmd, |
| 364 | &class_device_attr_host_driver_reset, | 393 | &dev_attr_host_driver_reset, |
| 365 | &class_device_attr_host_driver_abort, | 394 | &dev_attr_host_driver_abort, |
| 366 | &class_device_attr_host_fw_model, | 395 | &dev_attr_host_fw_model, |
| 367 | &class_device_attr_host_fw_version, | 396 | &dev_attr_host_fw_version, |
| 368 | &class_device_attr_host_fw_request_len, | 397 | &dev_attr_host_fw_request_len, |
| 369 | &class_device_attr_host_fw_numbers_queue, | 398 | &dev_attr_host_fw_numbers_queue, |
| 370 | &class_device_attr_host_fw_sdram_size, | 399 | &dev_attr_host_fw_sdram_size, |
| 371 | &class_device_attr_host_fw_hd_channels, | 400 | &dev_attr_host_fw_hd_channels, |
| 372 | NULL, | 401 | NULL, |
| 373 | }; | 402 | }; |
diff --git a/drivers/scsi/ch.c b/drivers/scsi/ch.c index 92d1cb1b21cb..75c84d7b9ce8 100644 --- a/drivers/scsi/ch.c +++ b/drivers/scsi/ch.c | |||
| @@ -881,7 +881,7 @@ static long ch_ioctl_compat(struct file * file, | |||
| 881 | static int ch_probe(struct device *dev) | 881 | static int ch_probe(struct device *dev) |
| 882 | { | 882 | { |
| 883 | struct scsi_device *sd = to_scsi_device(dev); | 883 | struct scsi_device *sd = to_scsi_device(dev); |
| 884 | struct class_device *class_dev; | 884 | struct device *class_dev; |
| 885 | int minor, ret = -ENOMEM; | 885 | int minor, ret = -ENOMEM; |
| 886 | scsi_changer *ch; | 886 | scsi_changer *ch; |
| 887 | 887 | ||
| @@ -910,11 +910,11 @@ static int ch_probe(struct device *dev) | |||
| 910 | ch->minor = minor; | 910 | ch->minor = minor; |
| 911 | sprintf(ch->name,"ch%d",ch->minor); | 911 | sprintf(ch->name,"ch%d",ch->minor); |
| 912 | 912 | ||
| 913 | class_dev = class_device_create(ch_sysfs_class, NULL, | 913 | class_dev = device_create(ch_sysfs_class, dev, |
| 914 | MKDEV(SCSI_CHANGER_MAJOR, ch->minor), | 914 | MKDEV(SCSI_CHANGER_MAJOR,ch->minor), |
| 915 | dev, "s%s", ch->name); | 915 | "s%s", ch->name); |
| 916 | if (IS_ERR(class_dev)) { | 916 | if (IS_ERR(class_dev)) { |
| 917 | printk(KERN_WARNING "ch%d: class_device_create failed\n", | 917 | printk(KERN_WARNING "ch%d: device_create failed\n", |
| 918 | ch->minor); | 918 | ch->minor); |
| 919 | ret = PTR_ERR(class_dev); | 919 | ret = PTR_ERR(class_dev); |
| 920 | goto remove_idr; | 920 | goto remove_idr; |
| @@ -945,8 +945,7 @@ static int ch_remove(struct device *dev) | |||
| 945 | idr_remove(&ch_index_idr, ch->minor); | 945 | idr_remove(&ch_index_idr, ch->minor); |
| 946 | spin_unlock(&ch_index_lock); | 946 | spin_unlock(&ch_index_lock); |
| 947 | 947 | ||
| 948 | class_device_destroy(ch_sysfs_class, | 948 | device_destroy(ch_sysfs_class, MKDEV(SCSI_CHANGER_MAJOR,ch->minor)); |
| 949 | MKDEV(SCSI_CHANGER_MAJOR,ch->minor)); | ||
| 950 | kfree(ch->dt); | 949 | kfree(ch->dt); |
| 951 | kfree(ch); | 950 | kfree(ch); |
| 952 | return 0; | 951 | return 0; |
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c index 1592640a87b5..c264a8c5f01e 100644 --- a/drivers/scsi/hosts.c +++ b/drivers/scsi/hosts.c | |||
| @@ -43,14 +43,14 @@ | |||
| 43 | static int scsi_host_next_hn; /* host_no for next new host */ | 43 | static int scsi_host_next_hn; /* host_no for next new host */ |
| 44 | 44 | ||
| 45 | 45 | ||
| 46 | static void scsi_host_cls_release(struct class_device *class_dev) | 46 | static void scsi_host_cls_release(struct device *dev) |
| 47 | { | 47 | { |
| 48 | put_device(&class_to_shost(class_dev)->shost_gendev); | 48 | put_device(&class_to_shost(dev)->shost_gendev); |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | static struct class shost_class = { | 51 | static struct class shost_class = { |
| 52 | .name = "scsi_host", | 52 | .name = "scsi_host", |
| 53 | .release = scsi_host_cls_release, | 53 | .dev_release = scsi_host_cls_release, |
| 54 | }; | 54 | }; |
| 55 | 55 | ||
| 56 | /** | 56 | /** |
| @@ -174,7 +174,7 @@ void scsi_remove_host(struct Scsi_Host *shost) | |||
| 174 | spin_unlock_irqrestore(shost->host_lock, flags); | 174 | spin_unlock_irqrestore(shost->host_lock, flags); |
| 175 | 175 | ||
| 176 | transport_unregister_device(&shost->shost_gendev); | 176 | transport_unregister_device(&shost->shost_gendev); |
| 177 | class_device_unregister(&shost->shost_classdev); | 177 | device_unregister(&shost->shost_dev); |
| 178 | device_del(&shost->shost_gendev); | 178 | device_del(&shost->shost_gendev); |
| 179 | scsi_proc_hostdir_rm(shost->hostt); | 179 | scsi_proc_hostdir_rm(shost->hostt); |
| 180 | } | 180 | } |
| @@ -212,7 +212,7 @@ int scsi_add_host(struct Scsi_Host *shost, struct device *dev) | |||
| 212 | scsi_host_set_state(shost, SHOST_RUNNING); | 212 | scsi_host_set_state(shost, SHOST_RUNNING); |
| 213 | get_device(shost->shost_gendev.parent); | 213 | get_device(shost->shost_gendev.parent); |
| 214 | 214 | ||
| 215 | error = class_device_add(&shost->shost_classdev); | 215 | error = device_add(&shost->shost_dev); |
| 216 | if (error) | 216 | if (error) |
| 217 | goto out_del_gendev; | 217 | goto out_del_gendev; |
| 218 | 218 | ||
| @@ -223,7 +223,7 @@ int scsi_add_host(struct Scsi_Host *shost, struct device *dev) | |||
| 223 | GFP_KERNEL); | 223 | GFP_KERNEL); |
| 224 | if (shost->shost_data == NULL) { | 224 | if (shost->shost_data == NULL) { |
| 225 | error = -ENOMEM; | 225 | error = -ENOMEM; |
| 226 | goto out_del_classdev; | 226 | goto out_del_dev; |
| 227 | } | 227 | } |
| 228 | } | 228 | } |
| 229 | 229 | ||
| @@ -250,8 +250,8 @@ int scsi_add_host(struct Scsi_Host *shost, struct device *dev) | |||
| 250 | destroy_workqueue(shost->work_q); | 250 | destroy_workqueue(shost->work_q); |
| 251 | out_free_shost_data: | 251 | out_free_shost_data: |
| 252 | kfree(shost->shost_data); | 252 | kfree(shost->shost_data); |
| 253 | out_del_classdev: | 253 | out_del_dev: |
| 254 | class_device_del(&shost->shost_classdev); | 254 | device_del(&shost->shost_dev); |
| 255 | out_del_gendev: | 255 | out_del_gendev: |
| 256 | device_del(&shost->shost_gendev); | 256 | device_del(&shost->shost_gendev); |
| 257 | out: | 257 | out: |
| @@ -385,11 +385,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize) | |||
| 385 | shost->host_no); | 385 | shost->host_no); |
| 386 | shost->shost_gendev.release = scsi_host_dev_release; | 386 | shost->shost_gendev.release = scsi_host_dev_release; |
| 387 | 387 | ||
| 388 | class_device_initialize(&shost->shost_classdev); | 388 | device_initialize(&shost->shost_dev); |
| 389 | shost->shost_classdev.dev = &shost->shost_gendev; | 389 | shost->shost_dev.parent = &shost->shost_gendev; |
| 390 | shost->shost_classdev.class = &shost_class; | 390 | shost->shost_dev.class = &shost_class; |
| 391 | snprintf(shost->shost_classdev.class_id, BUS_ID_SIZE, "host%d", | 391 | snprintf(shost->shost_dev.bus_id, BUS_ID_SIZE, "host%d", |
| 392 | shost->host_no); | 392 | shost->host_no); |
| 393 | 393 | ||
| 394 | shost->ehandler = kthread_run(scsi_error_handler, shost, | 394 | shost->ehandler = kthread_run(scsi_error_handler, shost, |
| 395 | "scsi_eh_%d", shost->host_no); | 395 | "scsi_eh_%d", shost->host_no); |
| @@ -432,12 +432,12 @@ void scsi_unregister(struct Scsi_Host *shost) | |||
| 432 | } | 432 | } |
| 433 | EXPORT_SYMBOL(scsi_unregister); | 433 | EXPORT_SYMBOL(scsi_unregister); |
| 434 | 434 | ||
| 435 | static int __scsi_host_match(struct class_device *cdev, void *data) | 435 | static int __scsi_host_match(struct device *dev, void *data) |
| 436 | { | 436 | { |
| 437 | struct Scsi_Host *p; | 437 | struct Scsi_Host *p; |
| 438 | unsigned short *hostnum = (unsigned short *)data; | 438 | unsigned short *hostnum = (unsigned short *)data; |
| 439 | 439 | ||
| 440 | p = class_to_shost(cdev); | 440 | p = class_to_shost(dev); |
| 441 | return p->host_no == *hostnum; | 441 | return p->host_no == *hostnum; |
| 442 | } | 442 | } |
| 443 | 443 | ||
| @@ -450,10 +450,10 @@ static int __scsi_host_match(struct class_device *cdev, void *data) | |||
| 450 | **/ | 450 | **/ |
| 451 | struct Scsi_Host *scsi_host_lookup(unsigned short hostnum) | 451 | struct Scsi_Host *scsi_host_lookup(unsigned short hostnum) |
| 452 | { | 452 | { |
| 453 | struct class_device *cdev; | 453 | struct device *cdev; |
| 454 | struct Scsi_Host *shost = ERR_PTR(-ENXIO); | 454 | struct Scsi_Host *shost = ERR_PTR(-ENXIO); |
| 455 | 455 | ||
| 456 | cdev = class_find_child(&shost_class, &hostnum, __scsi_host_match); | 456 | cdev = class_find_device(&shost_class, &hostnum, __scsi_host_match); |
| 457 | if (cdev) | 457 | if (cdev) |
| 458 | shost = scsi_host_get(class_to_shost(cdev)); | 458 | shost = scsi_host_get(class_to_shost(cdev)); |
| 459 | 459 | ||
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c index beecda991682..5b7be1e9841c 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c | |||
| @@ -859,14 +859,16 @@ static int hptiop_adjust_disk_queue_depth(struct scsi_device *sdev, | |||
| 859 | return queue_depth; | 859 | return queue_depth; |
| 860 | } | 860 | } |
| 861 | 861 | ||
| 862 | static ssize_t hptiop_show_version(struct class_device *class_dev, char *buf) | 862 | static ssize_t hptiop_show_version(struct device *dev, |
| 863 | struct device_attribute *attr, char *buf) | ||
| 863 | { | 864 | { |
| 864 | return snprintf(buf, PAGE_SIZE, "%s\n", driver_ver); | 865 | return snprintf(buf, PAGE_SIZE, "%s\n", driver_ver); |
| 865 | } | 866 | } |
| 866 | 867 | ||
| 867 | static ssize_t hptiop_show_fw_version(struct class_device *class_dev, char *buf) | 868 | static ssize_t hptiop_show_fw_version(struct device *dev, |
| 869 | struct device_attribute *attr, char *buf) | ||
| 868 | { | 870 | { |
| 869 | struct Scsi_Host *host = class_to_shost(class_dev); | 871 | struct Scsi_Host *host = class_to_shost(dev); |
| 870 | struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata; | 872 | struct hptiop_hba *hba = (struct hptiop_hba *)host->hostdata; |
| 871 | 873 | ||
| 872 | return snprintf(buf, PAGE_SIZE, "%d.%d.%d.%d\n", | 874 | return snprintf(buf, PAGE_SIZE, "%d.%d.%d.%d\n", |
| @@ -876,7 +878,7 @@ static ssize_t hptiop_show_fw_version(struct class_device *class_dev, char *buf) | |||
| 876 | hba->firmware_version & 0xff); | 878 | hba->firmware_version & 0xff); |
| 877 | } | 879 | } |
| 878 | 880 | ||
| 879 | static struct class_device_attribute hptiop_attr_version = { | 881 | static struct device_attribute hptiop_attr_version = { |
| 880 | .attr = { | 882 | .attr = { |
| 881 | .name = "driver-version", | 883 | .name = "driver-version", |
| 882 | .mode = S_IRUGO, | 884 | .mode = S_IRUGO, |
| @@ -884,7 +886,7 @@ static struct class_device_attribute hptiop_attr_version = { | |||
| 884 | .show = hptiop_show_version, | 886 | .show = hptiop_show_version, |
| 885 | }; | 887 | }; |
| 886 | 888 | ||
| 887 | static struct class_device_attribute hptiop_attr_fw_version = { | 889 | static struct device_attribute hptiop_attr_fw_version = { |
| 888 | .attr = { | 890 | .attr = { |
| 889 | .name = "firmware-version", | 891 | .name = "firmware-version", |
| 890 | .mode = S_IRUGO, | 892 | .mode = S_IRUGO, |
| @@ -892,7 +894,7 @@ static struct class_device_attribute hptiop_attr_fw_version = { | |||
| 892 | .show = hptiop_show_fw_version, | 894 | .show = hptiop_show_fw_version, |
| 893 | }; | 895 | }; |
| 894 | 896 | ||
| 895 | static struct class_device_attribute *hptiop_attrs[] = { | 897 | static struct device_attribute *hptiop_attrs[] = { |
| 896 | &hptiop_attr_version, | 898 | &hptiop_attr_version, |
| 897 | &hptiop_attr_fw_version, | 899 | &hptiop_attr_fw_version, |
| 898 | NULL | 900 | NULL |
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index 78d46a900bb5..4a922c57125e 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
| @@ -1456,9 +1456,10 @@ static int ibmvscsi_change_queue_depth(struct scsi_device *sdev, int qdepth) | |||
| 1456 | /* ------------------------------------------------------------ | 1456 | /* ------------------------------------------------------------ |
| 1457 | * sysfs attributes | 1457 | * sysfs attributes |
| 1458 | */ | 1458 | */ |
| 1459 | static ssize_t show_host_srp_version(struct class_device *class_dev, char *buf) | 1459 | static ssize_t show_host_srp_version(struct device *dev, |
| 1460 | struct device_attribute *attr, char *buf) | ||
| 1460 | { | 1461 | { |
| 1461 | struct Scsi_Host *shost = class_to_shost(class_dev); | 1462 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1462 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); | 1463 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); |
| 1463 | int len; | 1464 | int len; |
| 1464 | 1465 | ||
| @@ -1467,7 +1468,7 @@ static ssize_t show_host_srp_version(struct class_device *class_dev, char *buf) | |||
| 1467 | return len; | 1468 | return len; |
| 1468 | } | 1469 | } |
| 1469 | 1470 | ||
| 1470 | static struct class_device_attribute ibmvscsi_host_srp_version = { | 1471 | static struct device_attribute ibmvscsi_host_srp_version = { |
| 1471 | .attr = { | 1472 | .attr = { |
| 1472 | .name = "srp_version", | 1473 | .name = "srp_version", |
| 1473 | .mode = S_IRUGO, | 1474 | .mode = S_IRUGO, |
| @@ -1475,10 +1476,11 @@ static struct class_device_attribute ibmvscsi_host_srp_version = { | |||
| 1475 | .show = show_host_srp_version, | 1476 | .show = show_host_srp_version, |
| 1476 | }; | 1477 | }; |
| 1477 | 1478 | ||
| 1478 | static ssize_t show_host_partition_name(struct class_device *class_dev, | 1479 | static ssize_t show_host_partition_name(struct device *dev, |
| 1480 | struct device_attribute *attr, | ||
| 1479 | char *buf) | 1481 | char *buf) |
| 1480 | { | 1482 | { |
| 1481 | struct Scsi_Host *shost = class_to_shost(class_dev); | 1483 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1482 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); | 1484 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); |
| 1483 | int len; | 1485 | int len; |
| 1484 | 1486 | ||
| @@ -1487,7 +1489,7 @@ static ssize_t show_host_partition_name(struct class_device *class_dev, | |||
| 1487 | return len; | 1489 | return len; |
| 1488 | } | 1490 | } |
| 1489 | 1491 | ||
| 1490 | static struct class_device_attribute ibmvscsi_host_partition_name = { | 1492 | static struct device_attribute ibmvscsi_host_partition_name = { |
| 1491 | .attr = { | 1493 | .attr = { |
| 1492 | .name = "partition_name", | 1494 | .name = "partition_name", |
| 1493 | .mode = S_IRUGO, | 1495 | .mode = S_IRUGO, |
| @@ -1495,10 +1497,11 @@ static struct class_device_attribute ibmvscsi_host_partition_name = { | |||
| 1495 | .show = show_host_partition_name, | 1497 | .show = show_host_partition_name, |
| 1496 | }; | 1498 | }; |
| 1497 | 1499 | ||
| 1498 | static ssize_t show_host_partition_number(struct class_device *class_dev, | 1500 | static ssize_t show_host_partition_number(struct device *dev, |
| 1501 | struct device_attribute *attr, | ||
| 1499 | char *buf) | 1502 | char *buf) |
| 1500 | { | 1503 | { |
| 1501 | struct Scsi_Host *shost = class_to_shost(class_dev); | 1504 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1502 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); | 1505 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); |
| 1503 | int len; | 1506 | int len; |
| 1504 | 1507 | ||
| @@ -1507,7 +1510,7 @@ static ssize_t show_host_partition_number(struct class_device *class_dev, | |||
| 1507 | return len; | 1510 | return len; |
| 1508 | } | 1511 | } |
| 1509 | 1512 | ||
| 1510 | static struct class_device_attribute ibmvscsi_host_partition_number = { | 1513 | static struct device_attribute ibmvscsi_host_partition_number = { |
| 1511 | .attr = { | 1514 | .attr = { |
| 1512 | .name = "partition_number", | 1515 | .name = "partition_number", |
| 1513 | .mode = S_IRUGO, | 1516 | .mode = S_IRUGO, |
| @@ -1515,9 +1518,10 @@ static struct class_device_attribute ibmvscsi_host_partition_number = { | |||
| 1515 | .show = show_host_partition_number, | 1518 | .show = show_host_partition_number, |
| 1516 | }; | 1519 | }; |
| 1517 | 1520 | ||
| 1518 | static ssize_t show_host_mad_version(struct class_device *class_dev, char *buf) | 1521 | static ssize_t show_host_mad_version(struct device *dev, |
| 1522 | struct device_attribute *attr, char *buf) | ||
| 1519 | { | 1523 | { |
| 1520 | struct Scsi_Host *shost = class_to_shost(class_dev); | 1524 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1521 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); | 1525 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); |
| 1522 | int len; | 1526 | int len; |
| 1523 | 1527 | ||
| @@ -1526,7 +1530,7 @@ static ssize_t show_host_mad_version(struct class_device *class_dev, char *buf) | |||
| 1526 | return len; | 1530 | return len; |
| 1527 | } | 1531 | } |
| 1528 | 1532 | ||
| 1529 | static struct class_device_attribute ibmvscsi_host_mad_version = { | 1533 | static struct device_attribute ibmvscsi_host_mad_version = { |
| 1530 | .attr = { | 1534 | .attr = { |
| 1531 | .name = "mad_version", | 1535 | .name = "mad_version", |
| 1532 | .mode = S_IRUGO, | 1536 | .mode = S_IRUGO, |
| @@ -1534,9 +1538,10 @@ static struct class_device_attribute ibmvscsi_host_mad_version = { | |||
| 1534 | .show = show_host_mad_version, | 1538 | .show = show_host_mad_version, |
| 1535 | }; | 1539 | }; |
| 1536 | 1540 | ||
| 1537 | static ssize_t show_host_os_type(struct class_device *class_dev, char *buf) | 1541 | static ssize_t show_host_os_type(struct device *dev, |
| 1542 | struct device_attribute *attr, char *buf) | ||
| 1538 | { | 1543 | { |
| 1539 | struct Scsi_Host *shost = class_to_shost(class_dev); | 1544 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1540 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); | 1545 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); |
| 1541 | int len; | 1546 | int len; |
| 1542 | 1547 | ||
| @@ -1544,7 +1549,7 @@ static ssize_t show_host_os_type(struct class_device *class_dev, char *buf) | |||
| 1544 | return len; | 1549 | return len; |
| 1545 | } | 1550 | } |
| 1546 | 1551 | ||
| 1547 | static struct class_device_attribute ibmvscsi_host_os_type = { | 1552 | static struct device_attribute ibmvscsi_host_os_type = { |
| 1548 | .attr = { | 1553 | .attr = { |
| 1549 | .name = "os_type", | 1554 | .name = "os_type", |
| 1550 | .mode = S_IRUGO, | 1555 | .mode = S_IRUGO, |
| @@ -1552,9 +1557,10 @@ static struct class_device_attribute ibmvscsi_host_os_type = { | |||
| 1552 | .show = show_host_os_type, | 1557 | .show = show_host_os_type, |
| 1553 | }; | 1558 | }; |
| 1554 | 1559 | ||
| 1555 | static ssize_t show_host_config(struct class_device *class_dev, char *buf) | 1560 | static ssize_t show_host_config(struct device *dev, |
| 1561 | struct device_attribute *attr, char *buf) | ||
| 1556 | { | 1562 | { |
| 1557 | struct Scsi_Host *shost = class_to_shost(class_dev); | 1563 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1558 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); | 1564 | struct ibmvscsi_host_data *hostdata = shost_priv(shost); |
| 1559 | 1565 | ||
| 1560 | /* returns null-terminated host config data */ | 1566 | /* returns null-terminated host config data */ |
| @@ -1564,7 +1570,7 @@ static ssize_t show_host_config(struct class_device *class_dev, char *buf) | |||
| 1564 | return 0; | 1570 | return 0; |
| 1565 | } | 1571 | } |
| 1566 | 1572 | ||
| 1567 | static struct class_device_attribute ibmvscsi_host_config = { | 1573 | static struct device_attribute ibmvscsi_host_config = { |
| 1568 | .attr = { | 1574 | .attr = { |
| 1569 | .name = "config", | 1575 | .name = "config", |
| 1570 | .mode = S_IRUGO, | 1576 | .mode = S_IRUGO, |
| @@ -1572,7 +1578,7 @@ static struct class_device_attribute ibmvscsi_host_config = { | |||
| 1572 | .show = show_host_config, | 1578 | .show = show_host_config, |
| 1573 | }; | 1579 | }; |
| 1574 | 1580 | ||
| 1575 | static struct class_device_attribute *ibmvscsi_attrs[] = { | 1581 | static struct device_attribute *ibmvscsi_attrs[] = { |
| 1576 | &ibmvscsi_host_srp_version, | 1582 | &ibmvscsi_host_srp_version, |
| 1577 | &ibmvscsi_host_partition_name, | 1583 | &ibmvscsi_host_partition_name, |
| 1578 | &ibmvscsi_host_partition_number, | 1584 | &ibmvscsi_host_partition_number, |
diff --git a/drivers/scsi/ibmvscsi/ibmvstgt.c b/drivers/scsi/ibmvscsi/ibmvstgt.c index e5881e92d0fb..3b9514c8f1f1 100644 --- a/drivers/scsi/ibmvscsi/ibmvstgt.c +++ b/drivers/scsi/ibmvscsi/ibmvstgt.c | |||
| @@ -780,32 +780,35 @@ static int ibmvstgt_it_nexus_response(struct Scsi_Host *shost, u64 itn_id, | |||
| 780 | return 0; | 780 | return 0; |
| 781 | } | 781 | } |
| 782 | 782 | ||
| 783 | static ssize_t system_id_show(struct class_device *cdev, char *buf) | 783 | static ssize_t system_id_show(struct device *dev, |
| 784 | struct device_attribute *attr, char *buf) | ||
| 784 | { | 785 | { |
| 785 | return snprintf(buf, PAGE_SIZE, "%s\n", system_id); | 786 | return snprintf(buf, PAGE_SIZE, "%s\n", system_id); |
| 786 | } | 787 | } |
| 787 | 788 | ||
| 788 | static ssize_t partition_number_show(struct class_device *cdev, char *buf) | 789 | static ssize_t partition_number_show(struct device *dev, |
| 790 | struct device_attribute *attr, char *buf) | ||
| 789 | { | 791 | { |
| 790 | return snprintf(buf, PAGE_SIZE, "%x\n", partition_number); | 792 | return snprintf(buf, PAGE_SIZE, "%x\n", partition_number); |
| 791 | } | 793 | } |
| 792 | 794 | ||
| 793 | static ssize_t unit_address_show(struct class_device *cdev, char *buf) | 795 | static ssize_t unit_address_show(struct device *dev, |
| 796 | struct device_attribute *attr, char *buf) | ||
| 794 | { | 797 | { |
| 795 | struct Scsi_Host *shost = class_to_shost(cdev); | 798 | struct Scsi_Host *shost = class_to_shost(dev); |
| 796 | struct srp_target *target = host_to_srp_target(shost); | 799 | struct srp_target *target = host_to_srp_target(shost); |
| 797 | struct vio_port *vport = target_to_port(target); | 800 | struct vio_port *vport = target_to_port(target); |
| 798 | return snprintf(buf, PAGE_SIZE, "%x\n", vport->dma_dev->unit_address); | 801 | return snprintf(buf, PAGE_SIZE, "%x\n", vport->dma_dev->unit_address); |
| 799 | } | 802 | } |
| 800 | 803 | ||
| 801 | static CLASS_DEVICE_ATTR(system_id, S_IRUGO, system_id_show, NULL); | 804 | static DEVICE_ATTR(system_id, S_IRUGO, system_id_show, NULL); |
| 802 | static CLASS_DEVICE_ATTR(partition_number, S_IRUGO, partition_number_show, NULL); | 805 | static DEVICE_ATTR(partition_number, S_IRUGO, partition_number_show, NULL); |
| 803 | static CLASS_DEVICE_ATTR(unit_address, S_IRUGO, unit_address_show, NULL); | 806 | static DEVICE_ATTR(unit_address, S_IRUGO, unit_address_show, NULL); |
| 804 | 807 | ||
| 805 | static struct class_device_attribute *ibmvstgt_attrs[] = { | 808 | static struct device_attribute *ibmvstgt_attrs[] = { |
| 806 | &class_device_attr_system_id, | 809 | &dev_attr_system_id, |
| 807 | &class_device_attr_partition_number, | 810 | &dev_attr_partition_number, |
| 808 | &class_device_attr_unit_address, | 811 | &dev_attr_unit_address, |
| 809 | NULL, | 812 | NULL, |
| 810 | }; | 813 | }; |
| 811 | 814 | ||
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 65dc18dea845..de5ae6a65029 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c | |||
| @@ -2431,7 +2431,7 @@ restart: | |||
| 2431 | } | 2431 | } |
| 2432 | 2432 | ||
| 2433 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); | 2433 | spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags); |
| 2434 | kobject_uevent(&ioa_cfg->host->shost_classdev.kobj, KOBJ_CHANGE); | 2434 | kobject_uevent(&ioa_cfg->host->shost_dev.kobj, KOBJ_CHANGE); |
| 2435 | LEAVE; | 2435 | LEAVE; |
| 2436 | } | 2436 | } |
| 2437 | 2437 | ||
| @@ -2451,8 +2451,8 @@ static ssize_t ipr_read_trace(struct kobject *kobj, | |||
| 2451 | struct bin_attribute *bin_attr, | 2451 | struct bin_attribute *bin_attr, |
| 2452 | char *buf, loff_t off, size_t count) | 2452 | char *buf, loff_t off, size_t count) |
| 2453 | { | 2453 | { |
| 2454 | struct class_device *cdev = container_of(kobj,struct class_device,kobj); | 2454 | struct device *dev = container_of(kobj, struct device, kobj); |
| 2455 | struct Scsi_Host *shost = class_to_shost(cdev); | 2455 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2456 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2456 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2457 | unsigned long lock_flags = 0; | 2457 | unsigned long lock_flags = 0; |
| 2458 | int size = IPR_TRACE_SIZE; | 2458 | int size = IPR_TRACE_SIZE; |
| @@ -2492,15 +2492,16 @@ static const struct { | |||
| 2492 | 2492 | ||
| 2493 | /** | 2493 | /** |
| 2494 | * ipr_show_write_caching - Show the write caching attribute | 2494 | * ipr_show_write_caching - Show the write caching attribute |
| 2495 | * @class_dev: class device struct | 2495 | * @dev: device struct |
| 2496 | * @buf: buffer | 2496 | * @buf: buffer |
| 2497 | * | 2497 | * |
| 2498 | * Return value: | 2498 | * Return value: |
| 2499 | * number of bytes printed to buffer | 2499 | * number of bytes printed to buffer |
| 2500 | **/ | 2500 | **/ |
| 2501 | static ssize_t ipr_show_write_caching(struct class_device *class_dev, char *buf) | 2501 | static ssize_t ipr_show_write_caching(struct device *dev, |
| 2502 | struct device_attribute *attr, char *buf) | ||
| 2502 | { | 2503 | { |
| 2503 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2504 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2504 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2505 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2505 | unsigned long lock_flags = 0; | 2506 | unsigned long lock_flags = 0; |
| 2506 | int i, len = 0; | 2507 | int i, len = 0; |
| @@ -2519,19 +2520,20 @@ static ssize_t ipr_show_write_caching(struct class_device *class_dev, char *buf) | |||
| 2519 | 2520 | ||
| 2520 | /** | 2521 | /** |
| 2521 | * ipr_store_write_caching - Enable/disable adapter write cache | 2522 | * ipr_store_write_caching - Enable/disable adapter write cache |
| 2522 | * @class_dev: class_device struct | 2523 | * @dev: device struct |
| 2523 | * @buf: buffer | 2524 | * @buf: buffer |
| 2524 | * @count: buffer size | 2525 | * @count: buffer size |
| 2525 | * | 2526 | * |
| 2526 | * This function will enable/disable adapter write cache. | 2527 | * This function will enable/disable adapter write cache. |
| 2527 | * | 2528 | * |
| 2528 | * Return value: | 2529 | * Return value: |
| 2529 | * count on success / other on failure | 2530 | * count on success / other on failure |
| 2530 | **/ | 2531 | **/ |
| 2531 | static ssize_t ipr_store_write_caching(struct class_device *class_dev, | 2532 | static ssize_t ipr_store_write_caching(struct device *dev, |
| 2532 | const char *buf, size_t count) | 2533 | struct device_attribute *attr, |
| 2534 | const char *buf, size_t count) | ||
| 2533 | { | 2535 | { |
| 2534 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2536 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2535 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2537 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2536 | unsigned long lock_flags = 0; | 2538 | unsigned long lock_flags = 0; |
| 2537 | enum ipr_cache_state new_state = CACHE_INVALID; | 2539 | enum ipr_cache_state new_state = CACHE_INVALID; |
| @@ -2569,7 +2571,7 @@ static ssize_t ipr_store_write_caching(struct class_device *class_dev, | |||
| 2569 | return count; | 2571 | return count; |
| 2570 | } | 2572 | } |
| 2571 | 2573 | ||
| 2572 | static struct class_device_attribute ipr_ioa_cache_attr = { | 2574 | static struct device_attribute ipr_ioa_cache_attr = { |
| 2573 | .attr = { | 2575 | .attr = { |
| 2574 | .name = "write_cache", | 2576 | .name = "write_cache", |
| 2575 | .mode = S_IRUGO | S_IWUSR, | 2577 | .mode = S_IRUGO | S_IWUSR, |
| @@ -2580,15 +2582,16 @@ static struct class_device_attribute ipr_ioa_cache_attr = { | |||
| 2580 | 2582 | ||
| 2581 | /** | 2583 | /** |
| 2582 | * ipr_show_fw_version - Show the firmware version | 2584 | * ipr_show_fw_version - Show the firmware version |
| 2583 | * @class_dev: class device struct | 2585 | * @dev: class device struct |
| 2584 | * @buf: buffer | 2586 | * @buf: buffer |
| 2585 | * | 2587 | * |
| 2586 | * Return value: | 2588 | * Return value: |
| 2587 | * number of bytes printed to buffer | 2589 | * number of bytes printed to buffer |
| 2588 | **/ | 2590 | **/ |
| 2589 | static ssize_t ipr_show_fw_version(struct class_device *class_dev, char *buf) | 2591 | static ssize_t ipr_show_fw_version(struct device *dev, |
| 2592 | struct device_attribute *attr, char *buf) | ||
| 2590 | { | 2593 | { |
| 2591 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2594 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2592 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2595 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2593 | struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data; | 2596 | struct ipr_inquiry_page3 *ucode_vpd = &ioa_cfg->vpd_cbs->page3_data; |
| 2594 | unsigned long lock_flags = 0; | 2597 | unsigned long lock_flags = 0; |
| @@ -2603,7 +2606,7 @@ static ssize_t ipr_show_fw_version(struct class_device *class_dev, char *buf) | |||
| 2603 | return len; | 2606 | return len; |
| 2604 | } | 2607 | } |
| 2605 | 2608 | ||
| 2606 | static struct class_device_attribute ipr_fw_version_attr = { | 2609 | static struct device_attribute ipr_fw_version_attr = { |
| 2607 | .attr = { | 2610 | .attr = { |
| 2608 | .name = "fw_version", | 2611 | .name = "fw_version", |
| 2609 | .mode = S_IRUGO, | 2612 | .mode = S_IRUGO, |
| @@ -2613,15 +2616,16 @@ static struct class_device_attribute ipr_fw_version_attr = { | |||
| 2613 | 2616 | ||
| 2614 | /** | 2617 | /** |
| 2615 | * ipr_show_log_level - Show the adapter's error logging level | 2618 | * ipr_show_log_level - Show the adapter's error logging level |
| 2616 | * @class_dev: class device struct | 2619 | * @dev: class device struct |
| 2617 | * @buf: buffer | 2620 | * @buf: buffer |
| 2618 | * | 2621 | * |
| 2619 | * Return value: | 2622 | * Return value: |
| 2620 | * number of bytes printed to buffer | 2623 | * number of bytes printed to buffer |
| 2621 | **/ | 2624 | **/ |
| 2622 | static ssize_t ipr_show_log_level(struct class_device *class_dev, char *buf) | 2625 | static ssize_t ipr_show_log_level(struct device *dev, |
| 2626 | struct device_attribute *attr, char *buf) | ||
| 2623 | { | 2627 | { |
| 2624 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2628 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2625 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2629 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2626 | unsigned long lock_flags = 0; | 2630 | unsigned long lock_flags = 0; |
| 2627 | int len; | 2631 | int len; |
| @@ -2634,16 +2638,17 @@ static ssize_t ipr_show_log_level(struct class_device *class_dev, char *buf) | |||
| 2634 | 2638 | ||
| 2635 | /** | 2639 | /** |
| 2636 | * ipr_store_log_level - Change the adapter's error logging level | 2640 | * ipr_store_log_level - Change the adapter's error logging level |
| 2637 | * @class_dev: class device struct | 2641 | * @dev: class device struct |
| 2638 | * @buf: buffer | 2642 | * @buf: buffer |
| 2639 | * | 2643 | * |
| 2640 | * Return value: | 2644 | * Return value: |
| 2641 | * number of bytes printed to buffer | 2645 | * number of bytes printed to buffer |
| 2642 | **/ | 2646 | **/ |
| 2643 | static ssize_t ipr_store_log_level(struct class_device *class_dev, | 2647 | static ssize_t ipr_store_log_level(struct device *dev, |
| 2648 | struct device_attribute *attr, | ||
| 2644 | const char *buf, size_t count) | 2649 | const char *buf, size_t count) |
| 2645 | { | 2650 | { |
| 2646 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2651 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2647 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2652 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2648 | unsigned long lock_flags = 0; | 2653 | unsigned long lock_flags = 0; |
| 2649 | 2654 | ||
| @@ -2653,7 +2658,7 @@ static ssize_t ipr_store_log_level(struct class_device *class_dev, | |||
| 2653 | return strlen(buf); | 2658 | return strlen(buf); |
| 2654 | } | 2659 | } |
| 2655 | 2660 | ||
| 2656 | static struct class_device_attribute ipr_log_level_attr = { | 2661 | static struct device_attribute ipr_log_level_attr = { |
| 2657 | .attr = { | 2662 | .attr = { |
| 2658 | .name = "log_level", | 2663 | .name = "log_level", |
| 2659 | .mode = S_IRUGO | S_IWUSR, | 2664 | .mode = S_IRUGO | S_IWUSR, |
| @@ -2664,9 +2669,9 @@ static struct class_device_attribute ipr_log_level_attr = { | |||
| 2664 | 2669 | ||
| 2665 | /** | 2670 | /** |
| 2666 | * ipr_store_diagnostics - IOA Diagnostics interface | 2671 | * ipr_store_diagnostics - IOA Diagnostics interface |
| 2667 | * @class_dev: class_device struct | 2672 | * @dev: device struct |
| 2668 | * @buf: buffer | 2673 | * @buf: buffer |
| 2669 | * @count: buffer size | 2674 | * @count: buffer size |
| 2670 | * | 2675 | * |
| 2671 | * This function will reset the adapter and wait a reasonable | 2676 | * This function will reset the adapter and wait a reasonable |
| 2672 | * amount of time for any errors that the adapter might log. | 2677 | * amount of time for any errors that the adapter might log. |
| @@ -2674,10 +2679,11 @@ static struct class_device_attribute ipr_log_level_attr = { | |||
| 2674 | * Return value: | 2679 | * Return value: |
| 2675 | * count on success / other on failure | 2680 | * count on success / other on failure |
| 2676 | **/ | 2681 | **/ |
| 2677 | static ssize_t ipr_store_diagnostics(struct class_device *class_dev, | 2682 | static ssize_t ipr_store_diagnostics(struct device *dev, |
| 2683 | struct device_attribute *attr, | ||
| 2678 | const char *buf, size_t count) | 2684 | const char *buf, size_t count) |
| 2679 | { | 2685 | { |
| 2680 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2686 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2681 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2687 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2682 | unsigned long lock_flags = 0; | 2688 | unsigned long lock_flags = 0; |
| 2683 | int rc = count; | 2689 | int rc = count; |
| @@ -2714,7 +2720,7 @@ static ssize_t ipr_store_diagnostics(struct class_device *class_dev, | |||
| 2714 | return rc; | 2720 | return rc; |
| 2715 | } | 2721 | } |
| 2716 | 2722 | ||
| 2717 | static struct class_device_attribute ipr_diagnostics_attr = { | 2723 | static struct device_attribute ipr_diagnostics_attr = { |
| 2718 | .attr = { | 2724 | .attr = { |
| 2719 | .name = "run_diagnostics", | 2725 | .name = "run_diagnostics", |
| 2720 | .mode = S_IWUSR, | 2726 | .mode = S_IWUSR, |
| @@ -2724,15 +2730,16 @@ static struct class_device_attribute ipr_diagnostics_attr = { | |||
| 2724 | 2730 | ||
| 2725 | /** | 2731 | /** |
| 2726 | * ipr_show_adapter_state - Show the adapter's state | 2732 | * ipr_show_adapter_state - Show the adapter's state |
| 2727 | * @class_dev: class device struct | 2733 | * @class_dev: device struct |
| 2728 | * @buf: buffer | 2734 | * @buf: buffer |
| 2729 | * | 2735 | * |
| 2730 | * Return value: | 2736 | * Return value: |
| 2731 | * number of bytes printed to buffer | 2737 | * number of bytes printed to buffer |
| 2732 | **/ | 2738 | **/ |
| 2733 | static ssize_t ipr_show_adapter_state(struct class_device *class_dev, char *buf) | 2739 | static ssize_t ipr_show_adapter_state(struct device *dev, |
| 2740 | struct device_attribute *attr, char *buf) | ||
| 2734 | { | 2741 | { |
| 2735 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2742 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2736 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2743 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2737 | unsigned long lock_flags = 0; | 2744 | unsigned long lock_flags = 0; |
| 2738 | int len; | 2745 | int len; |
| @@ -2748,19 +2755,20 @@ static ssize_t ipr_show_adapter_state(struct class_device *class_dev, char *buf) | |||
| 2748 | 2755 | ||
| 2749 | /** | 2756 | /** |
| 2750 | * ipr_store_adapter_state - Change adapter state | 2757 | * ipr_store_adapter_state - Change adapter state |
| 2751 | * @class_dev: class_device struct | 2758 | * @dev: device struct |
| 2752 | * @buf: buffer | 2759 | * @buf: buffer |
| 2753 | * @count: buffer size | 2760 | * @count: buffer size |
| 2754 | * | 2761 | * |
| 2755 | * This function will change the adapter's state. | 2762 | * This function will change the adapter's state. |
| 2756 | * | 2763 | * |
| 2757 | * Return value: | 2764 | * Return value: |
| 2758 | * count on success / other on failure | 2765 | * count on success / other on failure |
| 2759 | **/ | 2766 | **/ |
| 2760 | static ssize_t ipr_store_adapter_state(struct class_device *class_dev, | 2767 | static ssize_t ipr_store_adapter_state(struct device *dev, |
| 2768 | struct device_attribute *attr, | ||
| 2761 | const char *buf, size_t count) | 2769 | const char *buf, size_t count) |
| 2762 | { | 2770 | { |
| 2763 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2771 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2764 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2772 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2765 | unsigned long lock_flags; | 2773 | unsigned long lock_flags; |
| 2766 | int result = count; | 2774 | int result = count; |
| @@ -2781,7 +2789,7 @@ static ssize_t ipr_store_adapter_state(struct class_device *class_dev, | |||
| 2781 | return result; | 2789 | return result; |
| 2782 | } | 2790 | } |
| 2783 | 2791 | ||
| 2784 | static struct class_device_attribute ipr_ioa_state_attr = { | 2792 | static struct device_attribute ipr_ioa_state_attr = { |
| 2785 | .attr = { | 2793 | .attr = { |
| 2786 | .name = "state", | 2794 | .name = "state", |
| 2787 | .mode = S_IRUGO | S_IWUSR, | 2795 | .mode = S_IRUGO | S_IWUSR, |
| @@ -2792,19 +2800,20 @@ static struct class_device_attribute ipr_ioa_state_attr = { | |||
| 2792 | 2800 | ||
| 2793 | /** | 2801 | /** |
| 2794 | * ipr_store_reset_adapter - Reset the adapter | 2802 | * ipr_store_reset_adapter - Reset the adapter |
| 2795 | * @class_dev: class_device struct | 2803 | * @dev: device struct |
| 2796 | * @buf: buffer | 2804 | * @buf: buffer |
| 2797 | * @count: buffer size | 2805 | * @count: buffer size |
| 2798 | * | 2806 | * |
| 2799 | * This function will reset the adapter. | 2807 | * This function will reset the adapter. |
| 2800 | * | 2808 | * |
| 2801 | * Return value: | 2809 | * Return value: |
| 2802 | * count on success / other on failure | 2810 | * count on success / other on failure |
| 2803 | **/ | 2811 | **/ |
| 2804 | static ssize_t ipr_store_reset_adapter(struct class_device *class_dev, | 2812 | static ssize_t ipr_store_reset_adapter(struct device *dev, |
| 2813 | struct device_attribute *attr, | ||
| 2805 | const char *buf, size_t count) | 2814 | const char *buf, size_t count) |
| 2806 | { | 2815 | { |
| 2807 | struct Scsi_Host *shost = class_to_shost(class_dev); | 2816 | struct Scsi_Host *shost = class_to_shost(dev); |
| 2808 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 2817 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 2809 | unsigned long lock_flags; | 2818 | unsigned long lock_flags; |
| 2810 | int result = count; | 2819 | int result = count; |
| @@ -2821,7 +2830,7 @@ static ssize_t ipr_store_reset_adapter(struct class_device *class_dev, | |||
| 2821 | return result; | 2830 | return result; |
| 2822 | } | 2831 | } |
| 2823 | 2832 | ||
| 2824 | static struct class_device_attribute ipr_ioa_reset_attr = { | 2833 | static struct device_attribute ipr_ioa_reset_attr = { |
| 2825 | .attr = { | 2834 | .attr = { |
| 2826 | .name = "reset_host", | 2835 | .name = "reset_host", |
| 2827 | .mode = S_IWUSR, | 2836 | .mode = S_IWUSR, |
| @@ -3054,19 +3063,20 @@ static int ipr_update_ioa_ucode(struct ipr_ioa_cfg *ioa_cfg, | |||
| 3054 | 3063 | ||
| 3055 | /** | 3064 | /** |
| 3056 | * ipr_store_update_fw - Update the firmware on the adapter | 3065 | * ipr_store_update_fw - Update the firmware on the adapter |
| 3057 | * @class_dev: class_device struct | 3066 | * @class_dev: device struct |
| 3058 | * @buf: buffer | 3067 | * @buf: buffer |
| 3059 | * @count: buffer size | 3068 | * @count: buffer size |
| 3060 | * | 3069 | * |
| 3061 | * This function will update the firmware on the adapter. | 3070 | * This function will update the firmware on the adapter. |
| 3062 | * | 3071 | * |
| 3063 | * Return value: | 3072 | * Return value: |
| 3064 | * count on success / other on failure | 3073 | * count on success / other on failure |
| 3065 | **/ | 3074 | **/ |
| 3066 | static ssize_t ipr_store_update_fw(struct class_device *class_dev, | 3075 | static ssize_t ipr_store_update_fw(struct device *dev, |
| 3067 | const char *buf, size_t count) | 3076 | struct device_attribute *attr, |
| 3077 | const char *buf, size_t count) | ||
| 3068 | { | 3078 | { |
| 3069 | struct Scsi_Host *shost = class_to_shost(class_dev); | 3079 | struct Scsi_Host *shost = class_to_shost(dev); |
| 3070 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 3080 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 3071 | struct ipr_ucode_image_header *image_hdr; | 3081 | struct ipr_ucode_image_header *image_hdr; |
| 3072 | const struct firmware *fw_entry; | 3082 | const struct firmware *fw_entry; |
| @@ -3124,7 +3134,7 @@ out: | |||
| 3124 | return result; | 3134 | return result; |
| 3125 | } | 3135 | } |
| 3126 | 3136 | ||
| 3127 | static struct class_device_attribute ipr_update_fw_attr = { | 3137 | static struct device_attribute ipr_update_fw_attr = { |
| 3128 | .attr = { | 3138 | .attr = { |
| 3129 | .name = "update_fw", | 3139 | .name = "update_fw", |
| 3130 | .mode = S_IWUSR, | 3140 | .mode = S_IWUSR, |
| @@ -3132,7 +3142,7 @@ static struct class_device_attribute ipr_update_fw_attr = { | |||
| 3132 | .store = ipr_store_update_fw | 3142 | .store = ipr_store_update_fw |
| 3133 | }; | 3143 | }; |
| 3134 | 3144 | ||
| 3135 | static struct class_device_attribute *ipr_ioa_attrs[] = { | 3145 | static struct device_attribute *ipr_ioa_attrs[] = { |
| 3136 | &ipr_fw_version_attr, | 3146 | &ipr_fw_version_attr, |
| 3137 | &ipr_log_level_attr, | 3147 | &ipr_log_level_attr, |
| 3138 | &ipr_diagnostics_attr, | 3148 | &ipr_diagnostics_attr, |
| @@ -3159,7 +3169,7 @@ static ssize_t ipr_read_dump(struct kobject *kobj, | |||
| 3159 | struct bin_attribute *bin_attr, | 3169 | struct bin_attribute *bin_attr, |
| 3160 | char *buf, loff_t off, size_t count) | 3170 | char *buf, loff_t off, size_t count) |
| 3161 | { | 3171 | { |
| 3162 | struct class_device *cdev = container_of(kobj,struct class_device,kobj); | 3172 | struct device *cdev = container_of(kobj, struct device, kobj); |
| 3163 | struct Scsi_Host *shost = class_to_shost(cdev); | 3173 | struct Scsi_Host *shost = class_to_shost(cdev); |
| 3164 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 3174 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 3165 | struct ipr_dump *dump; | 3175 | struct ipr_dump *dump; |
| @@ -3322,7 +3332,7 @@ static ssize_t ipr_write_dump(struct kobject *kobj, | |||
| 3322 | struct bin_attribute *bin_attr, | 3332 | struct bin_attribute *bin_attr, |
| 3323 | char *buf, loff_t off, size_t count) | 3333 | char *buf, loff_t off, size_t count) |
| 3324 | { | 3334 | { |
| 3325 | struct class_device *cdev = container_of(kobj,struct class_device,kobj); | 3335 | struct device *cdev = container_of(kobj, struct device, kobj); |
| 3326 | struct Scsi_Host *shost = class_to_shost(cdev); | 3336 | struct Scsi_Host *shost = class_to_shost(cdev); |
| 3327 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; | 3337 | struct ipr_ioa_cfg *ioa_cfg = (struct ipr_ioa_cfg *)shost->hostdata; |
| 3328 | int rc; | 3338 | int rc; |
| @@ -7671,9 +7681,9 @@ static void ipr_remove(struct pci_dev *pdev) | |||
| 7671 | 7681 | ||
| 7672 | ENTER; | 7682 | ENTER; |
| 7673 | 7683 | ||
| 7674 | ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj, | 7684 | ipr_remove_trace_file(&ioa_cfg->host->shost_dev.kobj, |
| 7675 | &ipr_trace_attr); | 7685 | &ipr_trace_attr); |
| 7676 | ipr_remove_dump_file(&ioa_cfg->host->shost_classdev.kobj, | 7686 | ipr_remove_dump_file(&ioa_cfg->host->shost_dev.kobj, |
| 7677 | &ipr_dump_attr); | 7687 | &ipr_dump_attr); |
| 7678 | scsi_remove_host(ioa_cfg->host); | 7688 | scsi_remove_host(ioa_cfg->host); |
| 7679 | 7689 | ||
| @@ -7714,7 +7724,7 @@ static int __devinit ipr_probe(struct pci_dev *pdev, | |||
| 7714 | return rc; | 7724 | return rc; |
| 7715 | } | 7725 | } |
| 7716 | 7726 | ||
| 7717 | rc = ipr_create_trace_file(&ioa_cfg->host->shost_classdev.kobj, | 7727 | rc = ipr_create_trace_file(&ioa_cfg->host->shost_dev.kobj, |
| 7718 | &ipr_trace_attr); | 7728 | &ipr_trace_attr); |
| 7719 | 7729 | ||
| 7720 | if (rc) { | 7730 | if (rc) { |
| @@ -7723,11 +7733,11 @@ static int __devinit ipr_probe(struct pci_dev *pdev, | |||
| 7723 | return rc; | 7733 | return rc; |
| 7724 | } | 7734 | } |
| 7725 | 7735 | ||
| 7726 | rc = ipr_create_dump_file(&ioa_cfg->host->shost_classdev.kobj, | 7736 | rc = ipr_create_dump_file(&ioa_cfg->host->shost_dev.kobj, |
| 7727 | &ipr_dump_attr); | 7737 | &ipr_dump_attr); |
| 7728 | 7738 | ||
| 7729 | if (rc) { | 7739 | if (rc) { |
| 7730 | ipr_remove_trace_file(&ioa_cfg->host->shost_classdev.kobj, | 7740 | ipr_remove_trace_file(&ioa_cfg->host->shost_dev.kobj, |
| 7731 | &ipr_trace_attr); | 7741 | &ipr_trace_attr); |
| 7732 | scsi_remove_host(ioa_cfg->host); | 7742 | scsi_remove_host(ioa_cfg->host); |
| 7733 | __ipr_remove(pdev); | 7743 | __ipr_remove(pdev); |
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c index 74c9fc204211..a9fbb3f88659 100644 --- a/drivers/scsi/lpfc/lpfc_attr.c +++ b/drivers/scsi/lpfc/lpfc_attr.c | |||
| @@ -66,23 +66,26 @@ lpfc_jedec_to_ascii(int incr, char hdw[]) | |||
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static ssize_t | 68 | static ssize_t |
| 69 | lpfc_drvr_version_show(struct class_device *cdev, char *buf) | 69 | lpfc_drvr_version_show(struct device *dev, struct device_attribute *attr, |
| 70 | char *buf) | ||
| 70 | { | 71 | { |
| 71 | return snprintf(buf, PAGE_SIZE, LPFC_MODULE_DESC "\n"); | 72 | return snprintf(buf, PAGE_SIZE, LPFC_MODULE_DESC "\n"); |
| 72 | } | 73 | } |
| 73 | 74 | ||
| 74 | static ssize_t | 75 | static ssize_t |
| 75 | lpfc_info_show(struct class_device *cdev, char *buf) | 76 | lpfc_info_show(struct device *dev, struct device_attribute *attr, |
| 77 | char *buf) | ||
| 76 | { | 78 | { |
| 77 | struct Scsi_Host *host = class_to_shost(cdev); | 79 | struct Scsi_Host *host = class_to_shost(dev); |
| 78 | 80 | ||
| 79 | return snprintf(buf, PAGE_SIZE, "%s\n",lpfc_info(host)); | 81 | return snprintf(buf, PAGE_SIZE, "%s\n",lpfc_info(host)); |
| 80 | } | 82 | } |
| 81 | 83 | ||
| 82 | static ssize_t | 84 | static ssize_t |
| 83 | lpfc_serialnum_show(struct class_device *cdev, char *buf) | 85 | lpfc_serialnum_show(struct device *dev, struct device_attribute *attr, |
| 86 | char *buf) | ||
| 84 | { | 87 | { |
| 85 | struct Scsi_Host *shost = class_to_shost(cdev); | 88 | struct Scsi_Host *shost = class_to_shost(dev); |
| 86 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 89 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 87 | struct lpfc_hba *phba = vport->phba; | 90 | struct lpfc_hba *phba = vport->phba; |
| 88 | 91 | ||
| @@ -90,18 +93,20 @@ lpfc_serialnum_show(struct class_device *cdev, char *buf) | |||
| 90 | } | 93 | } |
| 91 | 94 | ||
| 92 | static ssize_t | 95 | static ssize_t |
| 93 | lpfc_temp_sensor_show(struct class_device *cdev, char *buf) | 96 | lpfc_temp_sensor_show(struct device *dev, struct device_attribute *attr, |
| 97 | char *buf) | ||
| 94 | { | 98 | { |
| 95 | struct Scsi_Host *shost = class_to_shost(cdev); | 99 | struct Scsi_Host *shost = class_to_shost(dev); |
| 96 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 100 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 97 | struct lpfc_hba *phba = vport->phba; | 101 | struct lpfc_hba *phba = vport->phba; |
| 98 | return snprintf(buf, PAGE_SIZE, "%d\n",phba->temp_sensor_support); | 102 | return snprintf(buf, PAGE_SIZE, "%d\n",phba->temp_sensor_support); |
| 99 | } | 103 | } |
| 100 | 104 | ||
| 101 | static ssize_t | 105 | static ssize_t |
| 102 | lpfc_modeldesc_show(struct class_device *cdev, char *buf) | 106 | lpfc_modeldesc_show(struct device *dev, struct device_attribute *attr, |
| 107 | char *buf) | ||
| 103 | { | 108 | { |
| 104 | struct Scsi_Host *shost = class_to_shost(cdev); | 109 | struct Scsi_Host *shost = class_to_shost(dev); |
| 105 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 110 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 106 | struct lpfc_hba *phba = vport->phba; | 111 | struct lpfc_hba *phba = vport->phba; |
| 107 | 112 | ||
| @@ -109,9 +114,10 @@ lpfc_modeldesc_show(struct class_device *cdev, char *buf) | |||
| 109 | } | 114 | } |
| 110 | 115 | ||
| 111 | static ssize_t | 116 | static ssize_t |
| 112 | lpfc_modelname_show(struct class_device *cdev, char *buf) | 117 | lpfc_modelname_show(struct device *dev, struct device_attribute *attr, |
| 118 | char *buf) | ||
| 113 | { | 119 | { |
| 114 | struct Scsi_Host *shost = class_to_shost(cdev); | 120 | struct Scsi_Host *shost = class_to_shost(dev); |
| 115 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 121 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 116 | struct lpfc_hba *phba = vport->phba; | 122 | struct lpfc_hba *phba = vport->phba; |
| 117 | 123 | ||
| @@ -119,9 +125,10 @@ lpfc_modelname_show(struct class_device *cdev, char *buf) | |||
| 119 | } | 125 | } |
| 120 | 126 | ||
| 121 | static ssize_t | 127 | static ssize_t |
| 122 | lpfc_programtype_show(struct class_device *cdev, char *buf) | 128 | lpfc_programtype_show(struct device *dev, struct device_attribute *attr, |
| 129 | char *buf) | ||
| 123 | { | 130 | { |
| 124 | struct Scsi_Host *shost = class_to_shost(cdev); | 131 | struct Scsi_Host *shost = class_to_shost(dev); |
| 125 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 132 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 126 | struct lpfc_hba *phba = vport->phba; | 133 | struct lpfc_hba *phba = vport->phba; |
| 127 | 134 | ||
| @@ -129,9 +136,10 @@ lpfc_programtype_show(struct class_device *cdev, char *buf) | |||
| 129 | } | 136 | } |
| 130 | 137 | ||
| 131 | static ssize_t | 138 | static ssize_t |
| 132 | lpfc_vportnum_show(struct class_device *cdev, char *buf) | 139 | lpfc_vportnum_show(struct device *dev, struct device_attribute *attr, |
| 140 | char *buf) | ||
| 133 | { | 141 | { |
| 134 | struct Scsi_Host *shost = class_to_shost(cdev); | 142 | struct Scsi_Host *shost = class_to_shost(dev); |
| 135 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 143 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 136 | struct lpfc_hba *phba = vport->phba; | 144 | struct lpfc_hba *phba = vport->phba; |
| 137 | 145 | ||
| @@ -139,9 +147,10 @@ lpfc_vportnum_show(struct class_device *cdev, char *buf) | |||
| 139 | } | 147 | } |
| 140 | 148 | ||
| 141 | static ssize_t | 149 | static ssize_t |
| 142 | lpfc_fwrev_show(struct class_device *cdev, char *buf) | 150 | lpfc_fwrev_show(struct device *dev, struct device_attribute *attr, |
| 151 | char *buf) | ||
| 143 | { | 152 | { |
| 144 | struct Scsi_Host *shost = class_to_shost(cdev); | 153 | struct Scsi_Host *shost = class_to_shost(dev); |
| 145 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 154 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 146 | struct lpfc_hba *phba = vport->phba; | 155 | struct lpfc_hba *phba = vport->phba; |
| 147 | char fwrev[32]; | 156 | char fwrev[32]; |
| @@ -151,10 +160,10 @@ lpfc_fwrev_show(struct class_device *cdev, char *buf) | |||
| 151 | } | 160 | } |
| 152 | 161 | ||
| 153 | static ssize_t | 162 | static ssize_t |
| 154 | lpfc_hdw_show(struct class_device *cdev, char *buf) | 163 | lpfc_hdw_show(struct device *dev, struct device_attribute *attr, char *buf) |
| 155 | { | 164 | { |
| 156 | char hdw[9]; | 165 | char hdw[9]; |
| 157 | struct Scsi_Host *shost = class_to_shost(cdev); | 166 | struct Scsi_Host *shost = class_to_shost(dev); |
| 158 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 167 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 159 | struct lpfc_hba *phba = vport->phba; | 168 | struct lpfc_hba *phba = vport->phba; |
| 160 | lpfc_vpd_t *vp = &phba->vpd; | 169 | lpfc_vpd_t *vp = &phba->vpd; |
| @@ -163,18 +172,20 @@ lpfc_hdw_show(struct class_device *cdev, char *buf) | |||
| 163 | return snprintf(buf, PAGE_SIZE, "%s\n", hdw); | 172 | return snprintf(buf, PAGE_SIZE, "%s\n", hdw); |
| 164 | } | 173 | } |
| 165 | static ssize_t | 174 | static ssize_t |
| 166 | lpfc_option_rom_version_show(struct class_device *cdev, char *buf) | 175 | lpfc_option_rom_version_show(struct device *dev, struct device_attribute *attr, |
| 176 | char *buf) | ||
| 167 | { | 177 | { |
| 168 | struct Scsi_Host *shost = class_to_shost(cdev); | 178 | struct Scsi_Host *shost = class_to_shost(dev); |
| 169 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 179 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 170 | struct lpfc_hba *phba = vport->phba; | 180 | struct lpfc_hba *phba = vport->phba; |
| 171 | 181 | ||
| 172 | return snprintf(buf, PAGE_SIZE, "%s\n", phba->OptionROMVersion); | 182 | return snprintf(buf, PAGE_SIZE, "%s\n", phba->OptionROMVersion); |
| 173 | } | 183 | } |
| 174 | static ssize_t | 184 | static ssize_t |
| 175 | lpfc_state_show(struct class_device *cdev, char *buf) | 185 | lpfc_state_show(struct device *dev, struct device_attribute *attr, |
| 186 | char *buf) | ||
| 176 | { | 187 | { |
| 177 | struct Scsi_Host *shost = class_to_shost(cdev); | 188 | struct Scsi_Host *shost = class_to_shost(dev); |
| 178 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 189 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 179 | struct lpfc_hba *phba = vport->phba; | 190 | struct lpfc_hba *phba = vport->phba; |
| 180 | int len = 0; | 191 | int len = 0; |
| @@ -243,9 +254,10 @@ lpfc_state_show(struct class_device *cdev, char *buf) | |||
| 243 | } | 254 | } |
| 244 | 255 | ||
| 245 | static ssize_t | 256 | static ssize_t |
| 246 | lpfc_num_discovered_ports_show(struct class_device *cdev, char *buf) | 257 | lpfc_num_discovered_ports_show(struct device *dev, |
| 258 | struct device_attribute *attr, char *buf) | ||
| 247 | { | 259 | { |
| 248 | struct Scsi_Host *shost = class_to_shost(cdev); | 260 | struct Scsi_Host *shost = class_to_shost(dev); |
| 249 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 261 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 250 | 262 | ||
| 251 | return snprintf(buf, PAGE_SIZE, "%d\n", | 263 | return snprintf(buf, PAGE_SIZE, "%d\n", |
| @@ -367,9 +379,10 @@ lpfc_selective_reset(struct lpfc_hba *phba) | |||
| 367 | } | 379 | } |
| 368 | 380 | ||
| 369 | static ssize_t | 381 | static ssize_t |
| 370 | lpfc_issue_reset(struct class_device *cdev, const char *buf, size_t count) | 382 | lpfc_issue_reset(struct device *dev, struct device_attribute *attr, |
| 383 | const char *buf, size_t count) | ||
| 371 | { | 384 | { |
| 372 | struct Scsi_Host *shost = class_to_shost(cdev); | 385 | struct Scsi_Host *shost = class_to_shost(dev); |
| 373 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 386 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 374 | struct lpfc_hba *phba = vport->phba; | 387 | struct lpfc_hba *phba = vport->phba; |
| 375 | 388 | ||
| @@ -385,9 +398,10 @@ lpfc_issue_reset(struct class_device *cdev, const char *buf, size_t count) | |||
| 385 | } | 398 | } |
| 386 | 399 | ||
| 387 | static ssize_t | 400 | static ssize_t |
| 388 | lpfc_nport_evt_cnt_show(struct class_device *cdev, char *buf) | 401 | lpfc_nport_evt_cnt_show(struct device *dev, struct device_attribute *attr, |
| 402 | char *buf) | ||
| 389 | { | 403 | { |
| 390 | struct Scsi_Host *shost = class_to_shost(cdev); | 404 | struct Scsi_Host *shost = class_to_shost(dev); |
| 391 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 405 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 392 | struct lpfc_hba *phba = vport->phba; | 406 | struct lpfc_hba *phba = vport->phba; |
| 393 | 407 | ||
| @@ -395,9 +409,10 @@ lpfc_nport_evt_cnt_show(struct class_device *cdev, char *buf) | |||
| 395 | } | 409 | } |
| 396 | 410 | ||
| 397 | static ssize_t | 411 | static ssize_t |
| 398 | lpfc_board_mode_show(struct class_device *cdev, char *buf) | 412 | lpfc_board_mode_show(struct device *dev, struct device_attribute *attr, |
| 413 | char *buf) | ||
| 399 | { | 414 | { |
| 400 | struct Scsi_Host *shost = class_to_shost(cdev); | 415 | struct Scsi_Host *shost = class_to_shost(dev); |
| 401 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 416 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 402 | struct lpfc_hba *phba = vport->phba; | 417 | struct lpfc_hba *phba = vport->phba; |
| 403 | char * state; | 418 | char * state; |
| @@ -415,9 +430,10 @@ lpfc_board_mode_show(struct class_device *cdev, char *buf) | |||
| 415 | } | 430 | } |
| 416 | 431 | ||
| 417 | static ssize_t | 432 | static ssize_t |
| 418 | lpfc_board_mode_store(struct class_device *cdev, const char *buf, size_t count) | 433 | lpfc_board_mode_store(struct device *dev, struct device_attribute *attr, |
| 434 | const char *buf, size_t count) | ||
| 419 | { | 435 | { |
| 420 | struct Scsi_Host *shost = class_to_shost(cdev); | 436 | struct Scsi_Host *shost = class_to_shost(dev); |
| 421 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 437 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 422 | struct lpfc_hba *phba = vport->phba; | 438 | struct lpfc_hba *phba = vport->phba; |
| 423 | struct completion online_compl; | 439 | struct completion online_compl; |
| @@ -509,9 +525,10 @@ lpfc_get_hba_info(struct lpfc_hba *phba, | |||
| 509 | } | 525 | } |
| 510 | 526 | ||
| 511 | static ssize_t | 527 | static ssize_t |
| 512 | lpfc_max_rpi_show(struct class_device *cdev, char *buf) | 528 | lpfc_max_rpi_show(struct device *dev, struct device_attribute *attr, |
| 529 | char *buf) | ||
| 513 | { | 530 | { |
| 514 | struct Scsi_Host *shost = class_to_shost(cdev); | 531 | struct Scsi_Host *shost = class_to_shost(dev); |
| 515 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 532 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 516 | struct lpfc_hba *phba = vport->phba; | 533 | struct lpfc_hba *phba = vport->phba; |
| 517 | uint32_t cnt; | 534 | uint32_t cnt; |
| @@ -522,9 +539,10 @@ lpfc_max_rpi_show(struct class_device *cdev, char *buf) | |||
| 522 | } | 539 | } |
| 523 | 540 | ||
| 524 | static ssize_t | 541 | static ssize_t |
| 525 | lpfc_used_rpi_show(struct class_device *cdev, char *buf) | 542 | lpfc_used_rpi_show(struct device *dev, struct device_attribute *attr, |
| 543 | char *buf) | ||
| 526 | { | 544 | { |
| 527 | struct Scsi_Host *shost = class_to_shost(cdev); | 545 | struct Scsi_Host *shost = class_to_shost(dev); |
| 528 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 546 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 529 | struct lpfc_hba *phba = vport->phba; | 547 | struct lpfc_hba *phba = vport->phba; |
| 530 | uint32_t cnt, acnt; | 548 | uint32_t cnt, acnt; |
| @@ -535,9 +553,10 @@ lpfc_used_rpi_show(struct class_device *cdev, char *buf) | |||
| 535 | } | 553 | } |
| 536 | 554 | ||
| 537 | static ssize_t | 555 | static ssize_t |
| 538 | lpfc_max_xri_show(struct class_device *cdev, char *buf) | 556 | lpfc_max_xri_show(struct device *dev, struct device_attribute *attr, |
| 557 | char *buf) | ||
| 539 | { | 558 | { |
| 540 | struct Scsi_Host *shost = class_to_shost(cdev); | 559 | struct Scsi_Host *shost = class_to_shost(dev); |
| 541 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 560 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 542 | struct lpfc_hba *phba = vport->phba; | 561 | struct lpfc_hba *phba = vport->phba; |
| 543 | uint32_t cnt; | 562 | uint32_t cnt; |
| @@ -548,9 +567,10 @@ lpfc_max_xri_show(struct class_device *cdev, char *buf) | |||
| 548 | } | 567 | } |
| 549 | 568 | ||
| 550 | static ssize_t | 569 | static ssize_t |
| 551 | lpfc_used_xri_show(struct class_device *cdev, char *buf) | 570 | lpfc_used_xri_show(struct device *dev, struct device_attribute *attr, |
| 571 | char *buf) | ||
| 552 | { | 572 | { |
| 553 | struct Scsi_Host *shost = class_to_shost(cdev); | 573 | struct Scsi_Host *shost = class_to_shost(dev); |
| 554 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 574 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 555 | struct lpfc_hba *phba = vport->phba; | 575 | struct lpfc_hba *phba = vport->phba; |
| 556 | uint32_t cnt, acnt; | 576 | uint32_t cnt, acnt; |
| @@ -561,9 +581,10 @@ lpfc_used_xri_show(struct class_device *cdev, char *buf) | |||
| 561 | } | 581 | } |
| 562 | 582 | ||
| 563 | static ssize_t | 583 | static ssize_t |
| 564 | lpfc_max_vpi_show(struct class_device *cdev, char *buf) | 584 | lpfc_max_vpi_show(struct device *dev, struct device_attribute *attr, |
| 585 | char *buf) | ||
| 565 | { | 586 | { |
| 566 | struct Scsi_Host *shost = class_to_shost(cdev); | 587 | struct Scsi_Host *shost = class_to_shost(dev); |
| 567 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 588 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 568 | struct lpfc_hba *phba = vport->phba; | 589 | struct lpfc_hba *phba = vport->phba; |
| 569 | uint32_t cnt; | 590 | uint32_t cnt; |
| @@ -574,9 +595,10 @@ lpfc_max_vpi_show(struct class_device *cdev, char *buf) | |||
| 574 | } | 595 | } |
| 575 | 596 | ||
| 576 | static ssize_t | 597 | static ssize_t |
| 577 | lpfc_used_vpi_show(struct class_device *cdev, char *buf) | 598 | lpfc_used_vpi_show(struct device *dev, struct device_attribute *attr, |
| 599 | char *buf) | ||
| 578 | { | 600 | { |
| 579 | struct Scsi_Host *shost = class_to_shost(cdev); | 601 | struct Scsi_Host *shost = class_to_shost(dev); |
| 580 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 602 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 581 | struct lpfc_hba *phba = vport->phba; | 603 | struct lpfc_hba *phba = vport->phba; |
| 582 | uint32_t cnt, acnt; | 604 | uint32_t cnt, acnt; |
| @@ -587,9 +609,10 @@ lpfc_used_vpi_show(struct class_device *cdev, char *buf) | |||
| 587 | } | 609 | } |
| 588 | 610 | ||
| 589 | static ssize_t | 611 | static ssize_t |
| 590 | lpfc_npiv_info_show(struct class_device *cdev, char *buf) | 612 | lpfc_npiv_info_show(struct device *dev, struct device_attribute *attr, |
| 613 | char *buf) | ||
| 591 | { | 614 | { |
| 592 | struct Scsi_Host *shost = class_to_shost(cdev); | 615 | struct Scsi_Host *shost = class_to_shost(dev); |
| 593 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 616 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 594 | struct lpfc_hba *phba = vport->phba; | 617 | struct lpfc_hba *phba = vport->phba; |
| 595 | 618 | ||
| @@ -601,9 +624,10 @@ lpfc_npiv_info_show(struct class_device *cdev, char *buf) | |||
| 601 | } | 624 | } |
| 602 | 625 | ||
| 603 | static ssize_t | 626 | static ssize_t |
| 604 | lpfc_poll_show(struct class_device *cdev, char *buf) | 627 | lpfc_poll_show(struct device *dev, struct device_attribute *attr, |
| 628 | char *buf) | ||
| 605 | { | 629 | { |
| 606 | struct Scsi_Host *shost = class_to_shost(cdev); | 630 | struct Scsi_Host *shost = class_to_shost(dev); |
| 607 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 631 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 608 | struct lpfc_hba *phba = vport->phba; | 632 | struct lpfc_hba *phba = vport->phba; |
| 609 | 633 | ||
| @@ -611,10 +635,10 @@ lpfc_poll_show(struct class_device *cdev, char *buf) | |||
| 611 | } | 635 | } |
| 612 | 636 | ||
| 613 | static ssize_t | 637 | static ssize_t |
| 614 | lpfc_poll_store(struct class_device *cdev, const char *buf, | 638 | lpfc_poll_store(struct device *dev, struct device_attribute *attr, |
| 615 | size_t count) | 639 | const char *buf, size_t count) |
| 616 | { | 640 | { |
| 617 | struct Scsi_Host *shost = class_to_shost(cdev); | 641 | struct Scsi_Host *shost = class_to_shost(dev); |
| 618 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 642 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 619 | struct lpfc_hba *phba = vport->phba; | 643 | struct lpfc_hba *phba = vport->phba; |
| 620 | uint32_t creg_val; | 644 | uint32_t creg_val; |
| @@ -670,9 +694,10 @@ lpfc_poll_store(struct class_device *cdev, const char *buf, | |||
| 670 | 694 | ||
| 671 | #define lpfc_param_show(attr) \ | 695 | #define lpfc_param_show(attr) \ |
| 672 | static ssize_t \ | 696 | static ssize_t \ |
| 673 | lpfc_##attr##_show(struct class_device *cdev, char *buf) \ | 697 | lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \ |
| 698 | char *buf) \ | ||
| 674 | { \ | 699 | { \ |
| 675 | struct Scsi_Host *shost = class_to_shost(cdev);\ | 700 | struct Scsi_Host *shost = class_to_shost(dev);\ |
| 676 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ | 701 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ |
| 677 | struct lpfc_hba *phba = vport->phba;\ | 702 | struct lpfc_hba *phba = vport->phba;\ |
| 678 | int val = 0;\ | 703 | int val = 0;\ |
| @@ -683,9 +708,10 @@ lpfc_##attr##_show(struct class_device *cdev, char *buf) \ | |||
| 683 | 708 | ||
| 684 | #define lpfc_param_hex_show(attr) \ | 709 | #define lpfc_param_hex_show(attr) \ |
| 685 | static ssize_t \ | 710 | static ssize_t \ |
| 686 | lpfc_##attr##_show(struct class_device *cdev, char *buf) \ | 711 | lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \ |
| 712 | char *buf) \ | ||
| 687 | { \ | 713 | { \ |
| 688 | struct Scsi_Host *shost = class_to_shost(cdev);\ | 714 | struct Scsi_Host *shost = class_to_shost(dev);\ |
| 689 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ | 715 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ |
| 690 | struct lpfc_hba *phba = vport->phba;\ | 716 | struct lpfc_hba *phba = vport->phba;\ |
| 691 | int val = 0;\ | 717 | int val = 0;\ |
| @@ -725,9 +751,10 @@ lpfc_##attr##_set(struct lpfc_hba *phba, int val) \ | |||
| 725 | 751 | ||
| 726 | #define lpfc_param_store(attr) \ | 752 | #define lpfc_param_store(attr) \ |
| 727 | static ssize_t \ | 753 | static ssize_t \ |
| 728 | lpfc_##attr##_store(struct class_device *cdev, const char *buf, size_t count) \ | 754 | lpfc_##attr##_store(struct device *dev, struct device_attribute *attr, \ |
| 755 | const char *buf, size_t count) \ | ||
| 729 | { \ | 756 | { \ |
| 730 | struct Scsi_Host *shost = class_to_shost(cdev);\ | 757 | struct Scsi_Host *shost = class_to_shost(dev);\ |
| 731 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ | 758 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ |
| 732 | struct lpfc_hba *phba = vport->phba;\ | 759 | struct lpfc_hba *phba = vport->phba;\ |
| 733 | int val=0;\ | 760 | int val=0;\ |
| @@ -743,9 +770,10 @@ lpfc_##attr##_store(struct class_device *cdev, const char *buf, size_t count) \ | |||
| 743 | 770 | ||
| 744 | #define lpfc_vport_param_show(attr) \ | 771 | #define lpfc_vport_param_show(attr) \ |
| 745 | static ssize_t \ | 772 | static ssize_t \ |
| 746 | lpfc_##attr##_show(struct class_device *cdev, char *buf) \ | 773 | lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \ |
| 774 | char *buf) \ | ||
| 747 | { \ | 775 | { \ |
| 748 | struct Scsi_Host *shost = class_to_shost(cdev);\ | 776 | struct Scsi_Host *shost = class_to_shost(dev);\ |
| 749 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ | 777 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ |
| 750 | int val = 0;\ | 778 | int val = 0;\ |
| 751 | val = vport->cfg_##attr;\ | 779 | val = vport->cfg_##attr;\ |
| @@ -754,9 +782,10 @@ lpfc_##attr##_show(struct class_device *cdev, char *buf) \ | |||
| 754 | 782 | ||
| 755 | #define lpfc_vport_param_hex_show(attr) \ | 783 | #define lpfc_vport_param_hex_show(attr) \ |
| 756 | static ssize_t \ | 784 | static ssize_t \ |
| 757 | lpfc_##attr##_show(struct class_device *cdev, char *buf) \ | 785 | lpfc_##attr##_show(struct device *dev, struct device_attribute *attr, \ |
| 786 | char *buf) \ | ||
| 758 | { \ | 787 | { \ |
| 759 | struct Scsi_Host *shost = class_to_shost(cdev);\ | 788 | struct Scsi_Host *shost = class_to_shost(dev);\ |
| 760 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ | 789 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ |
| 761 | int val = 0;\ | 790 | int val = 0;\ |
| 762 | val = vport->cfg_##attr;\ | 791 | val = vport->cfg_##attr;\ |
| @@ -794,9 +823,10 @@ lpfc_##attr##_set(struct lpfc_vport *vport, int val) \ | |||
| 794 | 823 | ||
| 795 | #define lpfc_vport_param_store(attr) \ | 824 | #define lpfc_vport_param_store(attr) \ |
| 796 | static ssize_t \ | 825 | static ssize_t \ |
| 797 | lpfc_##attr##_store(struct class_device *cdev, const char *buf, size_t count) \ | 826 | lpfc_##attr##_store(struct device *dev, struct device_attribute *attr, \ |
| 827 | const char *buf, size_t count) \ | ||
| 798 | { \ | 828 | { \ |
| 799 | struct Scsi_Host *shost = class_to_shost(cdev);\ | 829 | struct Scsi_Host *shost = class_to_shost(dev);\ |
| 800 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ | 830 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;\ |
| 801 | int val=0;\ | 831 | int val=0;\ |
| 802 | if (!isdigit(buf[0]))\ | 832 | if (!isdigit(buf[0]))\ |
| @@ -822,7 +852,7 @@ module_param(lpfc_##name, int, 0);\ | |||
| 822 | MODULE_PARM_DESC(lpfc_##name, desc);\ | 852 | MODULE_PARM_DESC(lpfc_##name, desc);\ |
| 823 | lpfc_param_show(name)\ | 853 | lpfc_param_show(name)\ |
| 824 | lpfc_param_init(name, defval, minval, maxval)\ | 854 | lpfc_param_init(name, defval, minval, maxval)\ |
| 825 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) | 855 | static DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) |
| 826 | 856 | ||
| 827 | #define LPFC_ATTR_RW(name, defval, minval, maxval, desc) \ | 857 | #define LPFC_ATTR_RW(name, defval, minval, maxval, desc) \ |
| 828 | static int lpfc_##name = defval;\ | 858 | static int lpfc_##name = defval;\ |
| @@ -832,8 +862,8 @@ lpfc_param_show(name)\ | |||
| 832 | lpfc_param_init(name, defval, minval, maxval)\ | 862 | lpfc_param_init(name, defval, minval, maxval)\ |
| 833 | lpfc_param_set(name, defval, minval, maxval)\ | 863 | lpfc_param_set(name, defval, minval, maxval)\ |
| 834 | lpfc_param_store(name)\ | 864 | lpfc_param_store(name)\ |
| 835 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ | 865 | static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ |
| 836 | lpfc_##name##_show, lpfc_##name##_store) | 866 | lpfc_##name##_show, lpfc_##name##_store) |
| 837 | 867 | ||
| 838 | #define LPFC_ATTR_HEX_R(name, defval, minval, maxval, desc) \ | 868 | #define LPFC_ATTR_HEX_R(name, defval, minval, maxval, desc) \ |
| 839 | static int lpfc_##name = defval;\ | 869 | static int lpfc_##name = defval;\ |
| @@ -841,7 +871,7 @@ module_param(lpfc_##name, int, 0);\ | |||
| 841 | MODULE_PARM_DESC(lpfc_##name, desc);\ | 871 | MODULE_PARM_DESC(lpfc_##name, desc);\ |
| 842 | lpfc_param_hex_show(name)\ | 872 | lpfc_param_hex_show(name)\ |
| 843 | lpfc_param_init(name, defval, minval, maxval)\ | 873 | lpfc_param_init(name, defval, minval, maxval)\ |
| 844 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) | 874 | static DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) |
| 845 | 875 | ||
| 846 | #define LPFC_ATTR_HEX_RW(name, defval, minval, maxval, desc) \ | 876 | #define LPFC_ATTR_HEX_RW(name, defval, minval, maxval, desc) \ |
| 847 | static int lpfc_##name = defval;\ | 877 | static int lpfc_##name = defval;\ |
| @@ -851,8 +881,8 @@ lpfc_param_hex_show(name)\ | |||
| 851 | lpfc_param_init(name, defval, minval, maxval)\ | 881 | lpfc_param_init(name, defval, minval, maxval)\ |
| 852 | lpfc_param_set(name, defval, minval, maxval)\ | 882 | lpfc_param_set(name, defval, minval, maxval)\ |
| 853 | lpfc_param_store(name)\ | 883 | lpfc_param_store(name)\ |
| 854 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ | 884 | static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ |
| 855 | lpfc_##name##_show, lpfc_##name##_store) | 885 | lpfc_##name##_show, lpfc_##name##_store) |
| 856 | 886 | ||
| 857 | #define LPFC_VPORT_ATTR(name, defval, minval, maxval, desc) \ | 887 | #define LPFC_VPORT_ATTR(name, defval, minval, maxval, desc) \ |
| 858 | static int lpfc_##name = defval;\ | 888 | static int lpfc_##name = defval;\ |
| @@ -866,7 +896,7 @@ module_param(lpfc_##name, int, 0);\ | |||
| 866 | MODULE_PARM_DESC(lpfc_##name, desc);\ | 896 | MODULE_PARM_DESC(lpfc_##name, desc);\ |
| 867 | lpfc_vport_param_show(name)\ | 897 | lpfc_vport_param_show(name)\ |
| 868 | lpfc_vport_param_init(name, defval, minval, maxval)\ | 898 | lpfc_vport_param_init(name, defval, minval, maxval)\ |
| 869 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) | 899 | static DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) |
| 870 | 900 | ||
| 871 | #define LPFC_VPORT_ATTR_RW(name, defval, minval, maxval, desc) \ | 901 | #define LPFC_VPORT_ATTR_RW(name, defval, minval, maxval, desc) \ |
| 872 | static int lpfc_##name = defval;\ | 902 | static int lpfc_##name = defval;\ |
| @@ -876,8 +906,8 @@ lpfc_vport_param_show(name)\ | |||
| 876 | lpfc_vport_param_init(name, defval, minval, maxval)\ | 906 | lpfc_vport_param_init(name, defval, minval, maxval)\ |
| 877 | lpfc_vport_param_set(name, defval, minval, maxval)\ | 907 | lpfc_vport_param_set(name, defval, minval, maxval)\ |
| 878 | lpfc_vport_param_store(name)\ | 908 | lpfc_vport_param_store(name)\ |
| 879 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ | 909 | static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ |
| 880 | lpfc_##name##_show, lpfc_##name##_store) | 910 | lpfc_##name##_show, lpfc_##name##_store) |
| 881 | 911 | ||
| 882 | #define LPFC_VPORT_ATTR_HEX_R(name, defval, minval, maxval, desc) \ | 912 | #define LPFC_VPORT_ATTR_HEX_R(name, defval, minval, maxval, desc) \ |
| 883 | static int lpfc_##name = defval;\ | 913 | static int lpfc_##name = defval;\ |
| @@ -885,7 +915,7 @@ module_param(lpfc_##name, int, 0);\ | |||
| 885 | MODULE_PARM_DESC(lpfc_##name, desc);\ | 915 | MODULE_PARM_DESC(lpfc_##name, desc);\ |
| 886 | lpfc_vport_param_hex_show(name)\ | 916 | lpfc_vport_param_hex_show(name)\ |
| 887 | lpfc_vport_param_init(name, defval, minval, maxval)\ | 917 | lpfc_vport_param_init(name, defval, minval, maxval)\ |
| 888 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) | 918 | static DEVICE_ATTR(lpfc_##name, S_IRUGO , lpfc_##name##_show, NULL) |
| 889 | 919 | ||
| 890 | #define LPFC_VPORT_ATTR_HEX_RW(name, defval, minval, maxval, desc) \ | 920 | #define LPFC_VPORT_ATTR_HEX_RW(name, defval, minval, maxval, desc) \ |
| 891 | static int lpfc_##name = defval;\ | 921 | static int lpfc_##name = defval;\ |
| @@ -895,46 +925,44 @@ lpfc_vport_param_hex_show(name)\ | |||
| 895 | lpfc_vport_param_init(name, defval, minval, maxval)\ | 925 | lpfc_vport_param_init(name, defval, minval, maxval)\ |
| 896 | lpfc_vport_param_set(name, defval, minval, maxval)\ | 926 | lpfc_vport_param_set(name, defval, minval, maxval)\ |
| 897 | lpfc_vport_param_store(name)\ | 927 | lpfc_vport_param_store(name)\ |
| 898 | static CLASS_DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ | 928 | static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\ |
| 899 | lpfc_##name##_show, lpfc_##name##_store) | 929 | lpfc_##name##_show, lpfc_##name##_store) |
| 900 | 930 | ||
| 901 | static CLASS_DEVICE_ATTR(info, S_IRUGO, lpfc_info_show, NULL); | 931 | static DEVICE_ATTR(info, S_IRUGO, lpfc_info_show, NULL); |
| 902 | static CLASS_DEVICE_ATTR(serialnum, S_IRUGO, lpfc_serialnum_show, NULL); | 932 | static DEVICE_ATTR(serialnum, S_IRUGO, lpfc_serialnum_show, NULL); |
| 903 | static CLASS_DEVICE_ATTR(modeldesc, S_IRUGO, lpfc_modeldesc_show, NULL); | 933 | static DEVICE_ATTR(modeldesc, S_IRUGO, lpfc_modeldesc_show, NULL); |
| 904 | static CLASS_DEVICE_ATTR(modelname, S_IRUGO, lpfc_modelname_show, NULL); | 934 | static DEVICE_ATTR(modelname, S_IRUGO, lpfc_modelname_show, NULL); |
| 905 | static CLASS_DEVICE_ATTR(programtype, S_IRUGO, lpfc_programtype_show, NULL); | 935 | static DEVICE_ATTR(programtype, S_IRUGO, lpfc_programtype_show, NULL); |
| 906 | static CLASS_DEVICE_ATTR(portnum, S_IRUGO, lpfc_vportnum_show, NULL); | 936 | static DEVICE_ATTR(portnum, S_IRUGO, lpfc_vportnum_show, NULL); |
| 907 | static CLASS_DEVICE_ATTR(fwrev, S_IRUGO, lpfc_fwrev_show, NULL); | 937 | static DEVICE_ATTR(fwrev, S_IRUGO, lpfc_fwrev_show, NULL); |
| 908 | static CLASS_DEVICE_ATTR(hdw, S_IRUGO, lpfc_hdw_show, NULL); | 938 | static DEVICE_ATTR(hdw, S_IRUGO, lpfc_hdw_show, NULL); |
| 909 | static CLASS_DEVICE_ATTR(state, S_IRUGO, lpfc_state_show, NULL); | 939 | static DEVICE_ATTR(state, S_IRUGO, lpfc_state_show, NULL); |
| 910 | static CLASS_DEVICE_ATTR(option_rom_version, S_IRUGO, | 940 | static DEVICE_ATTR(option_rom_version, S_IRUGO, |
| 911 | lpfc_option_rom_version_show, NULL); | 941 | lpfc_option_rom_version_show, NULL); |
| 912 | static CLASS_DEVICE_ATTR(num_discovered_ports, S_IRUGO, | 942 | static DEVICE_ATTR(num_discovered_ports, S_IRUGO, |
| 913 | lpfc_num_discovered_ports_show, NULL); | 943 | lpfc_num_discovered_ports_show, NULL); |
| 914 | static CLASS_DEVICE_ATTR(nport_evt_cnt, S_IRUGO, lpfc_nport_evt_cnt_show, NULL); | 944 | static DEVICE_ATTR(nport_evt_cnt, S_IRUGO, lpfc_nport_evt_cnt_show, NULL); |
| 915 | static CLASS_DEVICE_ATTR(lpfc_drvr_version, S_IRUGO, lpfc_drvr_version_show, | 945 | static DEVICE_ATTR(lpfc_drvr_version, S_IRUGO, lpfc_drvr_version_show, NULL); |
| 916 | NULL); | 946 | static DEVICE_ATTR(board_mode, S_IRUGO | S_IWUSR, |
| 917 | static CLASS_DEVICE_ATTR(board_mode, S_IRUGO | S_IWUSR, | 947 | lpfc_board_mode_show, lpfc_board_mode_store); |
| 918 | lpfc_board_mode_show, lpfc_board_mode_store); | 948 | static DEVICE_ATTR(issue_reset, S_IWUSR, NULL, lpfc_issue_reset); |
| 919 | static CLASS_DEVICE_ATTR(issue_reset, S_IWUSR, NULL, lpfc_issue_reset); | 949 | static DEVICE_ATTR(max_vpi, S_IRUGO, lpfc_max_vpi_show, NULL); |
| 920 | static CLASS_DEVICE_ATTR(max_vpi, S_IRUGO, lpfc_max_vpi_show, NULL); | 950 | static DEVICE_ATTR(used_vpi, S_IRUGO, lpfc_used_vpi_show, NULL); |
| 921 | static CLASS_DEVICE_ATTR(used_vpi, S_IRUGO, lpfc_used_vpi_show, NULL); | 951 | static DEVICE_ATTR(max_rpi, S_IRUGO, lpfc_max_rpi_show, NULL); |
| 922 | static CLASS_DEVICE_ATTR(max_rpi, S_IRUGO, lpfc_max_rpi_show, NULL); | 952 | static DEVICE_ATTR(used_rpi, S_IRUGO, lpfc_used_rpi_show, NULL); |
| 923 | static CLASS_DEVICE_ATTR(used_rpi, S_IRUGO, lpfc_used_rpi_show, NULL); | 953 | static DEVICE_ATTR(max_xri, S_IRUGO, lpfc_max_xri_show, NULL); |
| 924 | static CLASS_DEVICE_ATTR(max_xri, S_IRUGO, lpfc_max_xri_show, NULL); | 954 | static DEVICE_ATTR(used_xri, S_IRUGO, lpfc_used_xri_show, NULL); |
| 925 | static CLASS_DEVICE_ATTR(used_xri, S_IRUGO, lpfc_used_xri_show, NULL); | 955 | static DEVICE_ATTR(npiv_info, S_IRUGO, lpfc_npiv_info_show, NULL); |
| 926 | static CLASS_DEVICE_ATTR(npiv_info, S_IRUGO, lpfc_npiv_info_show, NULL); | 956 | static DEVICE_ATTR(lpfc_temp_sensor, S_IRUGO, lpfc_temp_sensor_show, NULL); |
| 927 | static CLASS_DEVICE_ATTR(lpfc_temp_sensor, S_IRUGO, lpfc_temp_sensor_show, | ||
| 928 | NULL); | ||
| 929 | 957 | ||
| 930 | 958 | ||
| 931 | static char *lpfc_soft_wwn_key = "C99G71SL8032A"; | 959 | static char *lpfc_soft_wwn_key = "C99G71SL8032A"; |
| 932 | 960 | ||
| 933 | static ssize_t | 961 | static ssize_t |
| 934 | lpfc_soft_wwn_enable_store(struct class_device *cdev, const char *buf, | 962 | lpfc_soft_wwn_enable_store(struct device *dev, struct device_attribute *attr, |
| 935 | size_t count) | 963 | const char *buf, size_t count) |
| 936 | { | 964 | { |
| 937 | struct Scsi_Host *shost = class_to_shost(cdev); | 965 | struct Scsi_Host *shost = class_to_shost(dev); |
| 938 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 966 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 939 | struct lpfc_hba *phba = vport->phba; | 967 | struct lpfc_hba *phba = vport->phba; |
| 940 | unsigned int cnt = count; | 968 | unsigned int cnt = count; |
| @@ -963,13 +991,14 @@ lpfc_soft_wwn_enable_store(struct class_device *cdev, const char *buf, | |||
| 963 | phba->soft_wwn_enable = 1; | 991 | phba->soft_wwn_enable = 1; |
| 964 | return count; | 992 | return count; |
| 965 | } | 993 | } |
| 966 | static CLASS_DEVICE_ATTR(lpfc_soft_wwn_enable, S_IWUSR, NULL, | 994 | static DEVICE_ATTR(lpfc_soft_wwn_enable, S_IWUSR, NULL, |
| 967 | lpfc_soft_wwn_enable_store); | 995 | lpfc_soft_wwn_enable_store); |
| 968 | 996 | ||
| 969 | static ssize_t | 997 | static ssize_t |
| 970 | lpfc_soft_wwpn_show(struct class_device *cdev, char *buf) | 998 | lpfc_soft_wwpn_show(struct device *dev, struct device_attribute *attr, |
| 999 | char *buf) | ||
| 971 | { | 1000 | { |
| 972 | struct Scsi_Host *shost = class_to_shost(cdev); | 1001 | struct Scsi_Host *shost = class_to_shost(dev); |
| 973 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1002 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 974 | struct lpfc_hba *phba = vport->phba; | 1003 | struct lpfc_hba *phba = vport->phba; |
| 975 | 1004 | ||
| @@ -979,9 +1008,10 @@ lpfc_soft_wwpn_show(struct class_device *cdev, char *buf) | |||
| 979 | 1008 | ||
| 980 | 1009 | ||
| 981 | static ssize_t | 1010 | static ssize_t |
| 982 | lpfc_soft_wwpn_store(struct class_device *cdev, const char *buf, size_t count) | 1011 | lpfc_soft_wwpn_store(struct device *dev, struct device_attribute *attr, |
| 1012 | const char *buf, size_t count) | ||
| 983 | { | 1013 | { |
| 984 | struct Scsi_Host *shost = class_to_shost(cdev); | 1014 | struct Scsi_Host *shost = class_to_shost(dev); |
| 985 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1015 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 986 | struct lpfc_hba *phba = vport->phba; | 1016 | struct lpfc_hba *phba = vport->phba; |
| 987 | struct completion online_compl; | 1017 | struct completion online_compl; |
| @@ -1047,13 +1077,14 @@ lpfc_soft_wwpn_store(struct class_device *cdev, const char *buf, size_t count) | |||
| 1047 | "reinit adapter - %d\n", stat2); | 1077 | "reinit adapter - %d\n", stat2); |
| 1048 | return (stat1 || stat2) ? -EIO : count; | 1078 | return (stat1 || stat2) ? -EIO : count; |
| 1049 | } | 1079 | } |
| 1050 | static CLASS_DEVICE_ATTR(lpfc_soft_wwpn, S_IRUGO | S_IWUSR,\ | 1080 | static DEVICE_ATTR(lpfc_soft_wwpn, S_IRUGO | S_IWUSR,\ |
| 1051 | lpfc_soft_wwpn_show, lpfc_soft_wwpn_store); | 1081 | lpfc_soft_wwpn_show, lpfc_soft_wwpn_store); |
| 1052 | 1082 | ||
| 1053 | static ssize_t | 1083 | static ssize_t |
| 1054 | lpfc_soft_wwnn_show(struct class_device *cdev, char *buf) | 1084 | lpfc_soft_wwnn_show(struct device *dev, struct device_attribute *attr, |
| 1085 | char *buf) | ||
| 1055 | { | 1086 | { |
| 1056 | struct Scsi_Host *shost = class_to_shost(cdev); | 1087 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1057 | struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba; | 1088 | struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba; |
| 1058 | return snprintf(buf, PAGE_SIZE, "0x%llx\n", | 1089 | return snprintf(buf, PAGE_SIZE, "0x%llx\n", |
| 1059 | (unsigned long long)phba->cfg_soft_wwnn); | 1090 | (unsigned long long)phba->cfg_soft_wwnn); |
| @@ -1061,9 +1092,10 @@ lpfc_soft_wwnn_show(struct class_device *cdev, char *buf) | |||
| 1061 | 1092 | ||
| 1062 | 1093 | ||
| 1063 | static ssize_t | 1094 | static ssize_t |
| 1064 | lpfc_soft_wwnn_store(struct class_device *cdev, const char *buf, size_t count) | 1095 | lpfc_soft_wwnn_store(struct device *dev, struct device_attribute *attr, |
| 1096 | const char *buf, size_t count) | ||
| 1065 | { | 1097 | { |
| 1066 | struct Scsi_Host *shost = class_to_shost(cdev); | 1098 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1067 | struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba; | 1099 | struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba; |
| 1068 | unsigned int i, j, cnt=count; | 1100 | unsigned int i, j, cnt=count; |
| 1069 | u8 wwnn[8]; | 1101 | u8 wwnn[8]; |
| @@ -1107,8 +1139,8 @@ lpfc_soft_wwnn_store(struct class_device *cdev, const char *buf, size_t count) | |||
| 1107 | 1139 | ||
| 1108 | return count; | 1140 | return count; |
| 1109 | } | 1141 | } |
| 1110 | static CLASS_DEVICE_ATTR(lpfc_soft_wwnn, S_IRUGO | S_IWUSR,\ | 1142 | static DEVICE_ATTR(lpfc_soft_wwnn, S_IRUGO | S_IWUSR,\ |
| 1111 | lpfc_soft_wwnn_show, lpfc_soft_wwnn_store); | 1143 | lpfc_soft_wwnn_show, lpfc_soft_wwnn_store); |
| 1112 | 1144 | ||
| 1113 | 1145 | ||
| 1114 | static int lpfc_poll = 0; | 1146 | static int lpfc_poll = 0; |
| @@ -1118,8 +1150,8 @@ MODULE_PARM_DESC(lpfc_poll, "FCP ring polling mode control:" | |||
| 1118 | " 1 - poll with interrupts enabled" | 1150 | " 1 - poll with interrupts enabled" |
| 1119 | " 3 - poll and disable FCP ring interrupts"); | 1151 | " 3 - poll and disable FCP ring interrupts"); |
| 1120 | 1152 | ||
| 1121 | static CLASS_DEVICE_ATTR(lpfc_poll, S_IRUGO | S_IWUSR, | 1153 | static DEVICE_ATTR(lpfc_poll, S_IRUGO | S_IWUSR, |
| 1122 | lpfc_poll_show, lpfc_poll_store); | 1154 | lpfc_poll_show, lpfc_poll_store); |
| 1123 | 1155 | ||
| 1124 | int lpfc_sli_mode = 0; | 1156 | int lpfc_sli_mode = 0; |
| 1125 | module_param(lpfc_sli_mode, int, 0); | 1157 | module_param(lpfc_sli_mode, int, 0); |
| @@ -1133,7 +1165,7 @@ module_param(lpfc_enable_npiv, int, 0); | |||
| 1133 | MODULE_PARM_DESC(lpfc_enable_npiv, "Enable NPIV functionality"); | 1165 | MODULE_PARM_DESC(lpfc_enable_npiv, "Enable NPIV functionality"); |
| 1134 | lpfc_param_show(enable_npiv); | 1166 | lpfc_param_show(enable_npiv); |
| 1135 | lpfc_param_init(enable_npiv, 0, 0, 1); | 1167 | lpfc_param_init(enable_npiv, 0, 0, 1); |
| 1136 | static CLASS_DEVICE_ATTR(lpfc_enable_npiv, S_IRUGO, | 1168 | static DEVICE_ATTR(lpfc_enable_npiv, S_IRUGO, |
| 1137 | lpfc_enable_npiv_show, NULL); | 1169 | lpfc_enable_npiv_show, NULL); |
| 1138 | 1170 | ||
| 1139 | /* | 1171 | /* |
| @@ -1147,9 +1179,10 @@ MODULE_PARM_DESC(lpfc_nodev_tmo, | |||
| 1147 | "Seconds driver will hold I/O waiting " | 1179 | "Seconds driver will hold I/O waiting " |
| 1148 | "for a device to come back"); | 1180 | "for a device to come back"); |
| 1149 | static ssize_t | 1181 | static ssize_t |
| 1150 | lpfc_nodev_tmo_show(struct class_device *cdev, char *buf) | 1182 | lpfc_nodev_tmo_show(struct device *dev, struct device_attribute *attr, |
| 1183 | char *buf) | ||
| 1151 | { | 1184 | { |
| 1152 | struct Scsi_Host *shost = class_to_shost(cdev); | 1185 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1153 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1186 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 1154 | int val = 0; | 1187 | int val = 0; |
| 1155 | val = vport->cfg_devloss_tmo; | 1188 | val = vport->cfg_devloss_tmo; |
| @@ -1221,8 +1254,8 @@ lpfc_nodev_tmo_set(struct lpfc_vport *vport, int val) | |||
| 1221 | 1254 | ||
| 1222 | lpfc_vport_param_store(nodev_tmo) | 1255 | lpfc_vport_param_store(nodev_tmo) |
| 1223 | 1256 | ||
| 1224 | static CLASS_DEVICE_ATTR(lpfc_nodev_tmo, S_IRUGO | S_IWUSR, | 1257 | static DEVICE_ATTR(lpfc_nodev_tmo, S_IRUGO | S_IWUSR, |
| 1225 | lpfc_nodev_tmo_show, lpfc_nodev_tmo_store); | 1258 | lpfc_nodev_tmo_show, lpfc_nodev_tmo_store); |
| 1226 | 1259 | ||
| 1227 | /* | 1260 | /* |
| 1228 | # lpfc_devloss_tmo: If set, it will hold all I/O errors on devices that | 1261 | # lpfc_devloss_tmo: If set, it will hold all I/O errors on devices that |
| @@ -1255,8 +1288,8 @@ lpfc_devloss_tmo_set(struct lpfc_vport *vport, int val) | |||
| 1255 | } | 1288 | } |
| 1256 | 1289 | ||
| 1257 | lpfc_vport_param_store(devloss_tmo) | 1290 | lpfc_vport_param_store(devloss_tmo) |
| 1258 | static CLASS_DEVICE_ATTR(lpfc_devloss_tmo, S_IRUGO | S_IWUSR, | 1291 | static DEVICE_ATTR(lpfc_devloss_tmo, S_IRUGO | S_IWUSR, |
| 1259 | lpfc_devloss_tmo_show, lpfc_devloss_tmo_store); | 1292 | lpfc_devloss_tmo_show, lpfc_devloss_tmo_store); |
| 1260 | 1293 | ||
| 1261 | /* | 1294 | /* |
| 1262 | # lpfc_log_verbose: Only turn this flag on if you are willing to risk being | 1295 | # lpfc_log_verbose: Only turn this flag on if you are willing to risk being |
| @@ -1374,8 +1407,8 @@ lpfc_restrict_login_set(struct lpfc_vport *vport, int val) | |||
| 1374 | return 0; | 1407 | return 0; |
| 1375 | } | 1408 | } |
| 1376 | lpfc_vport_param_store(restrict_login); | 1409 | lpfc_vport_param_store(restrict_login); |
| 1377 | static CLASS_DEVICE_ATTR(lpfc_restrict_login, S_IRUGO | S_IWUSR, | 1410 | static DEVICE_ATTR(lpfc_restrict_login, S_IRUGO | S_IWUSR, |
| 1378 | lpfc_restrict_login_show, lpfc_restrict_login_store); | 1411 | lpfc_restrict_login_show, lpfc_restrict_login_store); |
| 1379 | 1412 | ||
| 1380 | /* | 1413 | /* |
| 1381 | # Some disk devices have a "select ID" or "select Target" capability. | 1414 | # Some disk devices have a "select ID" or "select Target" capability. |
| @@ -1433,7 +1466,7 @@ MODULE_PARM_DESC(lpfc_topology, "Select Fibre Channel topology"); | |||
| 1433 | lpfc_param_show(topology) | 1466 | lpfc_param_show(topology) |
| 1434 | lpfc_param_init(topology, 0, 0, 6) | 1467 | lpfc_param_init(topology, 0, 0, 6) |
| 1435 | lpfc_param_store(topology) | 1468 | lpfc_param_store(topology) |
| 1436 | static CLASS_DEVICE_ATTR(lpfc_topology, S_IRUGO | S_IWUSR, | 1469 | static DEVICE_ATTR(lpfc_topology, S_IRUGO | S_IWUSR, |
| 1437 | lpfc_topology_show, lpfc_topology_store); | 1470 | lpfc_topology_show, lpfc_topology_store); |
| 1438 | 1471 | ||
| 1439 | /* | 1472 | /* |
| @@ -1497,7 +1530,7 @@ lpfc_link_speed_init(struct lpfc_hba *phba, int val) | |||
| 1497 | } | 1530 | } |
| 1498 | 1531 | ||
| 1499 | lpfc_param_store(link_speed) | 1532 | lpfc_param_store(link_speed) |
| 1500 | static CLASS_DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR, | 1533 | static DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR, |
| 1501 | lpfc_link_speed_show, lpfc_link_speed_store); | 1534 | lpfc_link_speed_show, lpfc_link_speed_store); |
| 1502 | 1535 | ||
| 1503 | /* | 1536 | /* |
| @@ -1623,82 +1656,81 @@ LPFC_ATTR_R(enable_hba_heartbeat, 1, 0, 1, "Enable HBA Heartbeat."); | |||
| 1623 | LPFC_ATTR_R(sg_seg_cnt, LPFC_DEFAULT_SG_SEG_CNT, LPFC_DEFAULT_SG_SEG_CNT, | 1656 | LPFC_ATTR_R(sg_seg_cnt, LPFC_DEFAULT_SG_SEG_CNT, LPFC_DEFAULT_SG_SEG_CNT, |
| 1624 | LPFC_MAX_SG_SEG_CNT, "Max Scatter Gather Segment Count"); | 1657 | LPFC_MAX_SG_SEG_CNT, "Max Scatter Gather Segment Count"); |
| 1625 | 1658 | ||
| 1626 | struct class_device_attribute *lpfc_hba_attrs[] = { | 1659 | struct device_attribute *lpfc_hba_attrs[] = { |
| 1627 | &class_device_attr_info, | 1660 | &dev_attr_info, |
| 1628 | &class_device_attr_serialnum, | 1661 | &dev_attr_serialnum, |
| 1629 | &class_device_attr_modeldesc, | 1662 | &dev_attr_modeldesc, |
| 1630 | &class_device_attr_modelname, | 1663 | &dev_attr_modelname, |
| 1631 | &class_device_attr_programtype, | 1664 | &dev_attr_programtype, |
| 1632 | &class_device_attr_portnum, | 1665 | &dev_attr_portnum, |
| 1633 | &class_device_attr_fwrev, | 1666 | &dev_attr_fwrev, |
| 1634 | &class_device_attr_hdw, | 1667 | &dev_attr_hdw, |
| 1635 | &class_device_attr_option_rom_version, | 1668 | &dev_attr_option_rom_version, |
| 1636 | &class_device_attr_state, | 1669 | &dev_attr_state, |
| 1637 | &class_device_attr_num_discovered_ports, | 1670 | &dev_attr_num_discovered_ports, |
| 1638 | &class_device_attr_lpfc_drvr_version, | 1671 | &dev_attr_lpfc_drvr_version, |
| 1639 | &class_device_attr_lpfc_temp_sensor, | 1672 | &dev_attr_lpfc_temp_sensor, |
| 1640 | &class_device_attr_lpfc_log_verbose, | 1673 | &dev_attr_lpfc_log_verbose, |
| 1641 | &class_device_attr_lpfc_lun_queue_depth, | 1674 | &dev_attr_lpfc_lun_queue_depth, |
| 1642 | &class_device_attr_lpfc_hba_queue_depth, | 1675 | &dev_attr_lpfc_hba_queue_depth, |
| 1643 | &class_device_attr_lpfc_peer_port_login, | 1676 | &dev_attr_lpfc_peer_port_login, |
| 1644 | &class_device_attr_lpfc_nodev_tmo, | 1677 | &dev_attr_lpfc_nodev_tmo, |
| 1645 | &class_device_attr_lpfc_devloss_tmo, | 1678 | &dev_attr_lpfc_devloss_tmo, |
| 1646 | &class_device_attr_lpfc_fcp_class, | 1679 | &dev_attr_lpfc_fcp_class, |
| 1647 | &class_device_attr_lpfc_use_adisc, | 1680 | &dev_attr_lpfc_use_adisc, |
| 1648 | &class_device_attr_lpfc_ack0, | 1681 | &dev_attr_lpfc_ack0, |
| 1649 | &class_device_attr_lpfc_topology, | 1682 | &dev_attr_lpfc_topology, |
| 1650 | &class_device_attr_lpfc_scan_down, | 1683 | &dev_attr_lpfc_scan_down, |
| 1651 | &class_device_attr_lpfc_link_speed, | 1684 | &dev_attr_lpfc_link_speed, |
| 1652 | &class_device_attr_lpfc_cr_delay, | 1685 | &dev_attr_lpfc_cr_delay, |
| 1653 | &class_device_attr_lpfc_cr_count, | 1686 | &dev_attr_lpfc_cr_count, |
| 1654 | &class_device_attr_lpfc_multi_ring_support, | 1687 | &dev_attr_lpfc_multi_ring_support, |
| 1655 | &class_device_attr_lpfc_multi_ring_rctl, | 1688 | &dev_attr_lpfc_multi_ring_rctl, |
| 1656 | &class_device_attr_lpfc_multi_ring_type, | 1689 | &dev_attr_lpfc_multi_ring_type, |
| 1657 | &class_device_attr_lpfc_fdmi_on, | 1690 | &dev_attr_lpfc_fdmi_on, |
| 1658 | &class_device_attr_lpfc_max_luns, | 1691 | &dev_attr_lpfc_max_luns, |
| 1659 | &class_device_attr_lpfc_enable_npiv, | 1692 | &dev_attr_lpfc_enable_npiv, |
| 1660 | &class_device_attr_nport_evt_cnt, | 1693 | &dev_attr_nport_evt_cnt, |
| 1661 | &class_device_attr_board_mode, | 1694 | &dev_attr_board_mode, |
| 1662 | &class_device_attr_max_vpi, | 1695 | &dev_attr_max_vpi, |
| 1663 | &class_device_attr_used_vpi, | 1696 | &dev_attr_used_vpi, |
| 1664 | &class_device_attr_max_rpi, | 1697 | &dev_attr_max_rpi, |
| 1665 | &class_device_attr_used_rpi, | 1698 | &dev_attr_used_rpi, |
| 1666 | &class_device_attr_max_xri, | 1699 | &dev_attr_max_xri, |
| 1667 | &class_device_attr_used_xri, | 1700 | &dev_attr_used_xri, |
| 1668 | &class_device_attr_npiv_info, | 1701 | &dev_attr_npiv_info, |
| 1669 | &class_device_attr_issue_reset, | 1702 | &dev_attr_issue_reset, |
| 1670 | &class_device_attr_lpfc_poll, | 1703 | &dev_attr_lpfc_poll, |
| 1671 | &class_device_attr_lpfc_poll_tmo, | 1704 | &dev_attr_lpfc_poll_tmo, |
| 1672 | &class_device_attr_lpfc_use_msi, | 1705 | &dev_attr_lpfc_use_msi, |
| 1673 | &class_device_attr_lpfc_soft_wwnn, | 1706 | &dev_attr_lpfc_soft_wwnn, |
| 1674 | &class_device_attr_lpfc_soft_wwpn, | 1707 | &dev_attr_lpfc_soft_wwpn, |
| 1675 | &class_device_attr_lpfc_soft_wwn_enable, | 1708 | &dev_attr_lpfc_soft_wwn_enable, |
| 1676 | &class_device_attr_lpfc_enable_hba_reset, | 1709 | &dev_attr_lpfc_enable_hba_reset, |
| 1677 | &class_device_attr_lpfc_enable_hba_heartbeat, | 1710 | &dev_attr_lpfc_enable_hba_heartbeat, |
| 1678 | &class_device_attr_lpfc_sg_seg_cnt, | 1711 | &dev_attr_lpfc_sg_seg_cnt, |
| 1679 | NULL, | 1712 | NULL, |
| 1680 | }; | 1713 | }; |
| 1681 | 1714 | ||
| 1682 | struct class_device_attribute *lpfc_vport_attrs[] = { | 1715 | struct device_attribute *lpfc_vport_attrs[] = { |
| 1683 | &class_device_attr_info, | 1716 | &dev_attr_info, |
| 1684 | &class_device_attr_state, | 1717 | &dev_attr_state, |
| 1685 | &class_device_attr_num_discovered_ports, | 1718 | &dev_attr_num_discovered_ports, |
| 1686 | &class_device_attr_lpfc_drvr_version, | 1719 | &dev_attr_lpfc_drvr_version, |
| 1687 | 1720 | &dev_attr_lpfc_log_verbose, | |
| 1688 | &class_device_attr_lpfc_log_verbose, | 1721 | &dev_attr_lpfc_lun_queue_depth, |
| 1689 | &class_device_attr_lpfc_lun_queue_depth, | 1722 | &dev_attr_lpfc_nodev_tmo, |
| 1690 | &class_device_attr_lpfc_nodev_tmo, | 1723 | &dev_attr_lpfc_devloss_tmo, |
| 1691 | &class_device_attr_lpfc_devloss_tmo, | 1724 | &dev_attr_lpfc_hba_queue_depth, |
| 1692 | &class_device_attr_lpfc_hba_queue_depth, | 1725 | &dev_attr_lpfc_peer_port_login, |
| 1693 | &class_device_attr_lpfc_peer_port_login, | 1726 | &dev_attr_lpfc_restrict_login, |
| 1694 | &class_device_attr_lpfc_restrict_login, | 1727 | &dev_attr_lpfc_fcp_class, |
| 1695 | &class_device_attr_lpfc_fcp_class, | 1728 | &dev_attr_lpfc_use_adisc, |
| 1696 | &class_device_attr_lpfc_use_adisc, | 1729 | &dev_attr_lpfc_fdmi_on, |
| 1697 | &class_device_attr_lpfc_fdmi_on, | 1730 | &dev_attr_lpfc_max_luns, |
| 1698 | &class_device_attr_lpfc_max_luns, | 1731 | &dev_attr_nport_evt_cnt, |
| 1699 | &class_device_attr_nport_evt_cnt, | 1732 | &dev_attr_npiv_info, |
| 1700 | &class_device_attr_npiv_info, | 1733 | &dev_attr_lpfc_enable_da_id, |
| 1701 | &class_device_attr_lpfc_enable_da_id, | ||
| 1702 | NULL, | 1734 | NULL, |
| 1703 | }; | 1735 | }; |
| 1704 | 1736 | ||
| @@ -1707,9 +1739,8 @@ sysfs_ctlreg_write(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
| 1707 | char *buf, loff_t off, size_t count) | 1739 | char *buf, loff_t off, size_t count) |
| 1708 | { | 1740 | { |
| 1709 | size_t buf_off; | 1741 | size_t buf_off; |
| 1710 | struct class_device *cdev = container_of(kobj, struct class_device, | 1742 | struct device *dev = container_of(kobj, struct device, kobj); |
| 1711 | kobj); | 1743 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1712 | struct Scsi_Host *shost = class_to_shost(cdev); | ||
| 1713 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1744 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 1714 | struct lpfc_hba *phba = vport->phba; | 1745 | struct lpfc_hba *phba = vport->phba; |
| 1715 | 1746 | ||
| @@ -1741,9 +1772,8 @@ sysfs_ctlreg_read(struct kobject *kobj, struct bin_attribute *bin_attr, | |||
| 1741 | { | 1772 | { |
| 1742 | size_t buf_off; | 1773 | size_t buf_off; |
| 1743 | uint32_t * tmp_ptr; | 1774 | uint32_t * tmp_ptr; |
| 1744 | struct class_device *cdev = container_of(kobj, struct class_device, | 1775 | struct device *dev = container_of(kobj, struct device, kobj); |
| 1745 | kobj); | 1776 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1746 | struct Scsi_Host *shost = class_to_shost(cdev); | ||
| 1747 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1777 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 1748 | struct lpfc_hba *phba = vport->phba; | 1778 | struct lpfc_hba *phba = vport->phba; |
| 1749 | 1779 | ||
| @@ -1798,9 +1828,8 @@ static ssize_t | |||
| 1798 | sysfs_mbox_write(struct kobject *kobj, struct bin_attribute *bin_attr, | 1828 | sysfs_mbox_write(struct kobject *kobj, struct bin_attribute *bin_attr, |
| 1799 | char *buf, loff_t off, size_t count) | 1829 | char *buf, loff_t off, size_t count) |
| 1800 | { | 1830 | { |
| 1801 | struct class_device *cdev = container_of(kobj, struct class_device, | 1831 | struct device *dev = container_of(kobj, struct device, kobj); |
| 1802 | kobj); | 1832 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1803 | struct Scsi_Host *shost = class_to_shost(cdev); | ||
| 1804 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1833 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 1805 | struct lpfc_hba *phba = vport->phba; | 1834 | struct lpfc_hba *phba = vport->phba; |
| 1806 | struct lpfcMboxq *mbox = NULL; | 1835 | struct lpfcMboxq *mbox = NULL; |
| @@ -1853,9 +1882,8 @@ static ssize_t | |||
| 1853 | sysfs_mbox_read(struct kobject *kobj, struct bin_attribute *bin_attr, | 1882 | sysfs_mbox_read(struct kobject *kobj, struct bin_attribute *bin_attr, |
| 1854 | char *buf, loff_t off, size_t count) | 1883 | char *buf, loff_t off, size_t count) |
| 1855 | { | 1884 | { |
| 1856 | struct class_device *cdev = container_of(kobj, struct class_device, | 1885 | struct device *dev = container_of(kobj, struct device, kobj); |
| 1857 | kobj); | 1886 | struct Scsi_Host *shost = class_to_shost(dev); |
| 1858 | struct Scsi_Host *shost = class_to_shost(cdev); | ||
| 1859 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | 1887 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; |
| 1860 | struct lpfc_hba *phba = vport->phba; | 1888 | struct lpfc_hba *phba = vport->phba; |
| 1861 | int rc; | 1889 | int rc; |
| @@ -2038,19 +2066,19 @@ lpfc_alloc_sysfs_attr(struct lpfc_vport *vport) | |||
| 2038 | struct Scsi_Host *shost = lpfc_shost_from_vport(vport); | 2066 | struct Scsi_Host *shost = lpfc_shost_from_vport(vport); |
| 2039 | int error; | 2067 | int error; |
| 2040 | 2068 | ||
| 2041 | error = sysfs_create_bin_file(&shost->shost_classdev.kobj, | 2069 | error = sysfs_create_bin_file(&shost->shost_dev.kobj, |
| 2042 | &sysfs_ctlreg_attr); | 2070 | &sysfs_ctlreg_attr); |
| 2043 | if (error) | 2071 | if (error) |
| 2044 | goto out; | 2072 | goto out; |
| 2045 | 2073 | ||
| 2046 | error = sysfs_create_bin_file(&shost->shost_classdev.kobj, | 2074 | error = sysfs_create_bin_file(&shost->shost_dev.kobj, |
| 2047 | &sysfs_mbox_attr); | 2075 | &sysfs_mbox_attr); |
| 2048 | if (error) | 2076 | if (error) |
| 2049 | goto out_remove_ctlreg_attr; | 2077 | goto out_remove_ctlreg_attr; |
| 2050 | 2078 | ||
| 2051 | return 0; | 2079 | return 0; |
| 2052 | out_remove_ctlreg_attr: | 2080 | out_remove_ctlreg_attr: |
| 2053 | sysfs_remove_bin_file(&shost->shost_classdev.kobj, &sysfs_ctlreg_attr); | 2081 | sysfs_remove_bin_file(&shost->shost_dev.kobj, &sysfs_ctlreg_attr); |
| 2054 | out: | 2082 | out: |
| 2055 | return error; | 2083 | return error; |
| 2056 | } | 2084 | } |
| @@ -2060,8 +2088,8 @@ lpfc_free_sysfs_attr(struct lpfc_vport *vport) | |||
| 2060 | { | 2088 | { |
| 2061 | struct Scsi_Host *shost = lpfc_shost_from_vport(vport); | 2089 | struct Scsi_Host *shost = lpfc_shost_from_vport(vport); |
| 2062 | 2090 | ||
| 2063 | sysfs_remove_bin_file(&shost->shost_classdev.kobj, &sysfs_mbox_attr); | 2091 | sysfs_remove_bin_file(&shost->shost_dev.kobj, &sysfs_mbox_attr); |
| 2064 | sysfs_remove_bin_file(&shost->shost_classdev.kobj, &sysfs_ctlreg_attr); | 2092 | sysfs_remove_bin_file(&shost->shost_dev.kobj, &sysfs_ctlreg_attr); |
| 2065 | } | 2093 | } |
| 2066 | 2094 | ||
| 2067 | 2095 | ||
| @@ -2443,9 +2471,11 @@ lpfc_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) | |||
| 2443 | 2471 | ||
| 2444 | #define lpfc_rport_show_function(field, format_string, sz, cast) \ | 2472 | #define lpfc_rport_show_function(field, format_string, sz, cast) \ |
| 2445 | static ssize_t \ | 2473 | static ssize_t \ |
| 2446 | lpfc_show_rport_##field (struct class_device *cdev, char *buf) \ | 2474 | lpfc_show_rport_##field (struct device *dev, \ |
| 2475 | struct device_attribute *attr, \ | ||
| 2476 | char *buf) \ | ||
| 2447 | { \ | 2477 | { \ |
| 2448 | struct fc_rport *rport = transport_class_to_rport(cdev); \ | 2478 | struct fc_rport *rport = transport_class_to_rport(dev); \ |
| 2449 | struct lpfc_rport_data *rdata = rport->hostdata; \ | 2479 | struct lpfc_rport_data *rdata = rport->hostdata; \ |
| 2450 | return snprintf(buf, sz, format_string, \ | 2480 | return snprintf(buf, sz, format_string, \ |
| 2451 | (rdata->target) ? cast rdata->target->field : 0); \ | 2481 | (rdata->target) ? cast rdata->target->field : 0); \ |
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h index 0819f5f39de5..7c9f8317d972 100644 --- a/drivers/scsi/lpfc/lpfc_crtn.h +++ b/drivers/scsi/lpfc/lpfc_crtn.h | |||
| @@ -253,8 +253,8 @@ void lpfc_get_cfgparam(struct lpfc_hba *); | |||
| 253 | void lpfc_get_vport_cfgparam(struct lpfc_vport *); | 253 | void lpfc_get_vport_cfgparam(struct lpfc_vport *); |
| 254 | int lpfc_alloc_sysfs_attr(struct lpfc_vport *); | 254 | int lpfc_alloc_sysfs_attr(struct lpfc_vport *); |
| 255 | void lpfc_free_sysfs_attr(struct lpfc_vport *); | 255 | void lpfc_free_sysfs_attr(struct lpfc_vport *); |
| 256 | extern struct class_device_attribute *lpfc_hba_attrs[]; | 256 | extern struct device_attribute *lpfc_hba_attrs[]; |
| 257 | extern struct class_device_attribute *lpfc_vport_attrs[]; | 257 | extern struct device_attribute *lpfc_vport_attrs[]; |
| 258 | extern struct scsi_host_template lpfc_template; | 258 | extern struct scsi_host_template lpfc_template; |
| 259 | extern struct scsi_host_template lpfc_vport_template; | 259 | extern struct scsi_host_template lpfc_vport_template; |
| 260 | extern struct fc_function_template lpfc_transport_functions; | 260 | extern struct fc_function_template lpfc_transport_functions; |
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c index 9f041929aca5..820f91fb63ba 100644 --- a/drivers/scsi/megaraid/megaraid_mbox.c +++ b/drivers/scsi/megaraid/megaraid_mbox.c | |||
| @@ -125,7 +125,7 @@ static irqreturn_t megaraid_isr(int, void *); | |||
| 125 | 125 | ||
| 126 | static void megaraid_mbox_dpc(unsigned long); | 126 | static void megaraid_mbox_dpc(unsigned long); |
| 127 | 127 | ||
| 128 | static ssize_t megaraid_sysfs_show_app_hndl(struct class_device *, char *); | 128 | static ssize_t megaraid_sysfs_show_app_hndl(struct device *, struct device_attribute *attr, char *); |
| 129 | static ssize_t megaraid_sysfs_show_ldnum(struct device *, struct device_attribute *attr, char *); | 129 | static ssize_t megaraid_sysfs_show_ldnum(struct device *, struct device_attribute *attr, char *); |
| 130 | 130 | ||
| 131 | static int megaraid_cmm_register(adapter_t *); | 131 | static int megaraid_cmm_register(adapter_t *); |
| @@ -313,12 +313,12 @@ static struct pci_driver megaraid_pci_driver = { | |||
| 313 | // definitions for the device attributes for exporting logical drive number | 313 | // definitions for the device attributes for exporting logical drive number |
| 314 | // for a scsi address (Host, Channel, Id, Lun) | 314 | // for a scsi address (Host, Channel, Id, Lun) |
| 315 | 315 | ||
| 316 | CLASS_DEVICE_ATTR(megaraid_mbox_app_hndl, S_IRUSR, megaraid_sysfs_show_app_hndl, | 316 | DEVICE_ATTR(megaraid_mbox_app_hndl, S_IRUSR, megaraid_sysfs_show_app_hndl, |
| 317 | NULL); | 317 | NULL); |
| 318 | 318 | ||
| 319 | // Host template initializer for megaraid mbox sysfs device attributes | 319 | // Host template initializer for megaraid mbox sysfs device attributes |
| 320 | static struct class_device_attribute *megaraid_shost_attrs[] = { | 320 | static struct device_attribute *megaraid_shost_attrs[] = { |
| 321 | &class_device_attr_megaraid_mbox_app_hndl, | 321 | &dev_attr_megaraid_mbox_app_hndl, |
| 322 | NULL, | 322 | NULL, |
| 323 | }; | 323 | }; |
| 324 | 324 | ||
| @@ -4063,9 +4063,10 @@ megaraid_sysfs_get_ldmap(adapter_t *adapter) | |||
| 4063 | * handle, since we do not interface with applications directly. | 4063 | * handle, since we do not interface with applications directly. |
| 4064 | */ | 4064 | */ |
| 4065 | static ssize_t | 4065 | static ssize_t |
| 4066 | megaraid_sysfs_show_app_hndl(struct class_device *cdev, char *buf) | 4066 | megaraid_sysfs_show_app_hndl(struct device *dev, struct device_attribute *attr, |
| 4067 | char *buf) | ||
| 4067 | { | 4068 | { |
| 4068 | struct Scsi_Host *shost = class_to_shost(cdev); | 4069 | struct Scsi_Host *shost = class_to_shost(dev); |
| 4069 | adapter_t *adapter = (adapter_t *)SCSIHOST2ADAP(shost); | 4070 | adapter_t *adapter = (adapter_t *)SCSIHOST2ADAP(shost); |
| 4070 | uint32_t app_hndl; | 4071 | uint32_t app_hndl; |
| 4071 | 4072 | ||
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c index c5ebf018b378..d89289400425 100644 --- a/drivers/scsi/ncr53c8xx.c +++ b/drivers/scsi/ncr53c8xx.c | |||
| @@ -8243,7 +8243,8 @@ static void process_waiting_list(struct ncb *np, int sts) | |||
| 8243 | 8243 | ||
| 8244 | #undef next_wcmd | 8244 | #undef next_wcmd |
| 8245 | 8245 | ||
| 8246 | static ssize_t show_ncr53c8xx_revision(struct class_device *dev, char *buf) | 8246 | static ssize_t show_ncr53c8xx_revision(struct device *dev, |
| 8247 | struct device_attribute *attr, char *buf) | ||
| 8247 | { | 8248 | { |
| 8248 | struct Scsi_Host *host = class_to_shost(dev); | 8249 | struct Scsi_Host *host = class_to_shost(dev); |
| 8249 | struct host_data *host_data = (struct host_data *)host->hostdata; | 8250 | struct host_data *host_data = (struct host_data *)host->hostdata; |
| @@ -8251,12 +8252,12 @@ static ssize_t show_ncr53c8xx_revision(struct class_device *dev, char *buf) | |||
| 8251 | return snprintf(buf, 20, "0x%x\n", host_data->ncb->revision_id); | 8252 | return snprintf(buf, 20, "0x%x\n", host_data->ncb->revision_id); |
| 8252 | } | 8253 | } |
| 8253 | 8254 | ||
| 8254 | static struct class_device_attribute ncr53c8xx_revision_attr = { | 8255 | static struct device_attribute ncr53c8xx_revision_attr = { |
| 8255 | .attr = { .name = "revision", .mode = S_IRUGO, }, | 8256 | .attr = { .name = "revision", .mode = S_IRUGO, }, |
| 8256 | .show = show_ncr53c8xx_revision, | 8257 | .show = show_ncr53c8xx_revision, |
| 8257 | }; | 8258 | }; |
| 8258 | 8259 | ||
| 8259 | static struct class_device_attribute *ncr53c8xx_host_attrs[] = { | 8260 | static struct device_attribute *ncr53c8xx_host_attrs[] = { |
| 8260 | &ncr53c8xx_revision_attr, | 8261 | &ncr53c8xx_revision_attr, |
| 8261 | NULL | 8262 | NULL |
| 8262 | }; | 8263 | }; |
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c index abef7048f25b..31f7aec44d90 100644 --- a/drivers/scsi/osst.c +++ b/drivers/scsi/osst.c | |||
| @@ -5591,9 +5591,10 @@ static void osst_remove_sysfs_files(struct device_driver *sysfs) | |||
| 5591 | * sysfs support for accessing ADR header information | 5591 | * sysfs support for accessing ADR header information |
| 5592 | */ | 5592 | */ |
| 5593 | 5593 | ||
| 5594 | static ssize_t osst_adr_rev_show(struct class_device *class_dev, char *buf) | 5594 | static ssize_t osst_adr_rev_show(struct device *dev, |
| 5595 | struct device_attribute *attr, char *buf) | ||
| 5595 | { | 5596 | { |
| 5596 | struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev); | 5597 | struct osst_tape * STp = (struct osst_tape *) dev_get_drvdata (dev); |
| 5597 | ssize_t l = 0; | 5598 | ssize_t l = 0; |
| 5598 | 5599 | ||
| 5599 | if (STp && STp->header_ok && STp->linux_media) | 5600 | if (STp && STp->header_ok && STp->linux_media) |
| @@ -5601,11 +5602,13 @@ static ssize_t osst_adr_rev_show(struct class_device *class_dev, char *buf) | |||
| 5601 | return l; | 5602 | return l; |
| 5602 | } | 5603 | } |
| 5603 | 5604 | ||
| 5604 | CLASS_DEVICE_ATTR(ADR_rev, S_IRUGO, osst_adr_rev_show, NULL); | 5605 | DEVICE_ATTR(ADR_rev, S_IRUGO, osst_adr_rev_show, NULL); |
| 5605 | 5606 | ||
| 5606 | static ssize_t osst_linux_media_version_show(struct class_device *class_dev, char *buf) | 5607 | static ssize_t osst_linux_media_version_show(struct device *dev, |
| 5608 | struct device_attribute *attr, | ||
| 5609 | char *buf) | ||
| 5607 | { | 5610 | { |
| 5608 | struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev); | 5611 | struct osst_tape * STp = (struct osst_tape *) dev_get_drvdata (dev); |
| 5609 | ssize_t l = 0; | 5612 | ssize_t l = 0; |
| 5610 | 5613 | ||
| 5611 | if (STp && STp->header_ok && STp->linux_media) | 5614 | if (STp && STp->header_ok && STp->linux_media) |
| @@ -5613,11 +5616,12 @@ static ssize_t osst_linux_media_version_show(struct class_device *class_dev, cha | |||
| 5613 | return l; | 5616 | return l; |
| 5614 | } | 5617 | } |
| 5615 | 5618 | ||
| 5616 | CLASS_DEVICE_ATTR(media_version, S_IRUGO, osst_linux_media_version_show, NULL); | 5619 | DEVICE_ATTR(media_version, S_IRUGO, osst_linux_media_version_show, NULL); |
| 5617 | 5620 | ||
| 5618 | static ssize_t osst_capacity_show(struct class_device *class_dev, char *buf) | 5621 | static ssize_t osst_capacity_show(struct device *dev, |
| 5622 | struct device_attribute *attr, char *buf) | ||
| 5619 | { | 5623 | { |
| 5620 | struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev); | 5624 | struct osst_tape * STp = (struct osst_tape *) dev_get_drvdata (dev); |
| 5621 | ssize_t l = 0; | 5625 | ssize_t l = 0; |
| 5622 | 5626 | ||
| 5623 | if (STp && STp->header_ok && STp->linux_media) | 5627 | if (STp && STp->header_ok && STp->linux_media) |
| @@ -5625,11 +5629,13 @@ static ssize_t osst_capacity_show(struct class_device *class_dev, char *buf) | |||
| 5625 | return l; | 5629 | return l; |
| 5626 | } | 5630 | } |
| 5627 | 5631 | ||
| 5628 | CLASS_DEVICE_ATTR(capacity, S_IRUGO, osst_capacity_show, NULL); | 5632 | DEVICE_ATTR(capacity, S_IRUGO, osst_capacity_show, NULL); |
| 5629 | 5633 | ||
| 5630 | static ssize_t osst_first_data_ppos_show(struct class_device *class_dev, char *buf) | 5634 | static ssize_t osst_first_data_ppos_show(struct device *dev, |
| 5635 | struct device_attribute *attr, | ||
| 5636 | char *buf) | ||
| 5631 | { | 5637 | { |
| 5632 | struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev); | 5638 | struct osst_tape * STp = (struct osst_tape *) dev_get_drvdata (dev); |
| 5633 | ssize_t l = 0; | 5639 | ssize_t l = 0; |
| 5634 | 5640 | ||
| 5635 | if (STp && STp->header_ok && STp->linux_media) | 5641 | if (STp && STp->header_ok && STp->linux_media) |
| @@ -5637,11 +5643,13 @@ static ssize_t osst_first_data_ppos_show(struct class_device *class_dev, char *b | |||
| 5637 | return l; | 5643 | return l; |
| 5638 | } | 5644 | } |
| 5639 | 5645 | ||
| 5640 | CLASS_DEVICE_ATTR(BOT_frame, S_IRUGO, osst_first_data_ppos_show, NULL); | 5646 | DEVICE_ATTR(BOT_frame, S_IRUGO, osst_first_data_ppos_show, NULL); |
| 5641 | 5647 | ||
| 5642 | static ssize_t osst_eod_frame_ppos_show(struct class_device *class_dev, char *buf) | 5648 | static ssize_t osst_eod_frame_ppos_show(struct device *dev, |
| 5649 | struct device_attribute *attr, | ||
| 5650 | char *buf) | ||
| 5643 | { | 5651 | { |
| 5644 | struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev); | 5652 | struct osst_tape * STp = (struct osst_tape *) dev_get_drvdata (dev); |
| 5645 | ssize_t l = 0; | 5653 | ssize_t l = 0; |
| 5646 | 5654 | ||
| 5647 | if (STp && STp->header_ok && STp->linux_media) | 5655 | if (STp && STp->header_ok && STp->linux_media) |
| @@ -5649,11 +5657,12 @@ static ssize_t osst_eod_frame_ppos_show(struct class_device *class_dev, char *bu | |||
| 5649 | return l; | 5657 | return l; |
| 5650 | } | 5658 | } |
| 5651 | 5659 | ||
| 5652 | CLASS_DEVICE_ATTR(EOD_frame, S_IRUGO, osst_eod_frame_ppos_show, NULL); | 5660 | DEVICE_ATTR(EOD_frame, S_IRUGO, osst_eod_frame_ppos_show, NULL); |
| 5653 | 5661 | ||
| 5654 | static ssize_t osst_filemark_cnt_show(struct class_device *class_dev, char *buf) | 5662 | static ssize_t osst_filemark_cnt_show(struct device *dev, |
| 5663 | struct device_attribute *attr, char *buf) | ||
| 5655 | { | 5664 | { |
| 5656 | struct osst_tape * STp = (struct osst_tape *) class_get_devdata (class_dev); | 5665 | struct osst_tape * STp = (struct osst_tape *) dev_get_drvdata (dev); |
| 5657 | ssize_t l = 0; | 5666 | ssize_t l = 0; |
| 5658 | 5667 | ||
| 5659 | if (STp && STp->header_ok && STp->linux_media) | 5668 | if (STp && STp->header_ok && STp->linux_media) |
| @@ -5661,7 +5670,7 @@ static ssize_t osst_filemark_cnt_show(struct class_device *class_dev, char *buf) | |||
| 5661 | return l; | 5670 | return l; |
| 5662 | } | 5671 | } |
| 5663 | 5672 | ||
| 5664 | CLASS_DEVICE_ATTR(file_count, S_IRUGO, osst_filemark_cnt_show, NULL); | 5673 | DEVICE_ATTR(file_count, S_IRUGO, osst_filemark_cnt_show, NULL); |
| 5665 | 5674 | ||
| 5666 | static struct class *osst_sysfs_class; | 5675 | static struct class *osst_sysfs_class; |
| 5667 | 5676 | ||
| @@ -5678,44 +5687,37 @@ static int osst_sysfs_init(void) | |||
| 5678 | 5687 | ||
| 5679 | static void osst_sysfs_destroy(dev_t dev) | 5688 | static void osst_sysfs_destroy(dev_t dev) |
| 5680 | { | 5689 | { |
| 5681 | class_device_destroy(osst_sysfs_class, dev); | 5690 | device_destroy(osst_sysfs_class, dev); |
| 5682 | } | 5691 | } |
| 5683 | 5692 | ||
| 5684 | static int osst_sysfs_add(dev_t dev, struct device *device, struct osst_tape * STp, char * name) | 5693 | static int osst_sysfs_add(dev_t dev, struct device *device, struct osst_tape * STp, char * name) |
| 5685 | { | 5694 | { |
| 5686 | struct class_device *osst_class_member; | 5695 | struct device *osst_member; |
| 5687 | int err; | 5696 | int err; |
| 5688 | 5697 | ||
| 5689 | osst_class_member = class_device_create(osst_sysfs_class, NULL, dev, | 5698 | osst_member = device_create(osst_sysfs_class, device, dev, "%s", name); |
| 5690 | device, "%s", name); | 5699 | if (IS_ERR(osst_member)) { |
| 5691 | if (IS_ERR(osst_class_member)) { | ||
| 5692 | printk(KERN_WARNING "osst :W: Unable to add sysfs class member %s\n", name); | 5700 | printk(KERN_WARNING "osst :W: Unable to add sysfs class member %s\n", name); |
| 5693 | return PTR_ERR(osst_class_member); | 5701 | return PTR_ERR(osst_member); |
| 5694 | } | 5702 | } |
| 5695 | 5703 | ||
| 5696 | class_set_devdata(osst_class_member, STp); | 5704 | dev_set_drvdata(osst_member, STp); |
| 5697 | err = class_device_create_file(osst_class_member, | 5705 | err = device_create_file(osst_member, &dev_attr_ADR_rev); |
| 5698 | &class_device_attr_ADR_rev); | ||
| 5699 | if (err) | 5706 | if (err) |
| 5700 | goto err_out; | 5707 | goto err_out; |
| 5701 | err = class_device_create_file(osst_class_member, | 5708 | err = device_create_file(osst_member, &dev_attr_media_version); |
| 5702 | &class_device_attr_media_version); | ||
| 5703 | if (err) | 5709 | if (err) |
| 5704 | goto err_out; | 5710 | goto err_out; |
| 5705 | err = class_device_create_file(osst_class_member, | 5711 | err = device_create_file(osst_member, &dev_attr_capacity); |
| 5706 | &class_device_attr_capacity); | ||
| 5707 | if (err) | 5712 | if (err) |
| 5708 | goto err_out; | 5713 | goto err_out; |
| 5709 | err = class_device_create_file(osst_class_member, | 5714 | err = device_create_file(osst_member, &dev_attr_BOT_frame); |
| 5710 | &class_device_attr_BOT_frame); | ||
| 5711 | if (err) | 5715 | if (err) |
| 5712 | goto err_out; | 5716 | goto err_out; |
| 5713 | err = class_device_create_file(osst_class_member, | 5717 | err = device_create_file(osst_member, &dev_attr_EOD_frame); |
| 5714 | &class_device_attr_EOD_frame); | ||
| 5715 | if (err) | 5718 | if (err) |
| 5716 | goto err_out; | 5719 | goto err_out; |
| 5717 | err = class_device_create_file(osst_class_member, | 5720 | err = device_create_file(osst_member, &dev_attr_file_count); |
| 5718 | &class_device_attr_file_count); | ||
| 5719 | if (err) | 5721 | if (err) |
| 5720 | goto err_out; | 5722 | goto err_out; |
| 5721 | 5723 | ||
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c index 3454a5714749..0be232b58ffb 100644 --- a/drivers/scsi/pcmcia/sym53c500_cs.c +++ b/drivers/scsi/pcmcia/sym53c500_cs.c | |||
| @@ -632,9 +632,10 @@ SYM53C500_biosparm(struct scsi_device *disk, | |||
| 632 | } | 632 | } |
| 633 | 633 | ||
| 634 | static ssize_t | 634 | static ssize_t |
| 635 | SYM53C500_show_pio(struct class_device *cdev, char *buf) | 635 | SYM53C500_show_pio(struct device *dev, struct device_attribute *attr, |
| 636 | char *buf) | ||
| 636 | { | 637 | { |
| 637 | struct Scsi_Host *SHp = class_to_shost(cdev); | 638 | struct Scsi_Host *SHp = class_to_shost(dev); |
| 638 | struct sym53c500_data *data = | 639 | struct sym53c500_data *data = |
| 639 | (struct sym53c500_data *)SHp->hostdata; | 640 | (struct sym53c500_data *)SHp->hostdata; |
| 640 | 641 | ||
| @@ -642,10 +643,11 @@ SYM53C500_show_pio(struct class_device *cdev, char *buf) | |||
| 642 | } | 643 | } |
| 643 | 644 | ||
| 644 | static ssize_t | 645 | static ssize_t |
| 645 | SYM53C500_store_pio(struct class_device *cdev, const char *buf, size_t count) | 646 | SYM53C500_store_pio(struct device *dev, struct device_attribute *attr, |
| 647 | const char *buf, size_t count) | ||
| 646 | { | 648 | { |
| 647 | int pio; | 649 | int pio; |
| 648 | struct Scsi_Host *SHp = class_to_shost(cdev); | 650 | struct Scsi_Host *SHp = class_to_shost(dev); |
| 649 | struct sym53c500_data *data = | 651 | struct sym53c500_data *data = |
| 650 | (struct sym53c500_data *)SHp->hostdata; | 652 | (struct sym53c500_data *)SHp->hostdata; |
| 651 | 653 | ||
| @@ -662,7 +664,7 @@ SYM53C500_store_pio(struct class_device *cdev, const char *buf, size_t count) | |||
| 662 | * SCSI HBA device attributes we want to | 664 | * SCSI HBA device attributes we want to |
| 663 | * make available via sysfs. | 665 | * make available via sysfs. |
| 664 | */ | 666 | */ |
| 665 | static struct class_device_attribute SYM53C500_pio_attr = { | 667 | static struct device_attribute SYM53C500_pio_attr = { |
| 666 | .attr = { | 668 | .attr = { |
| 667 | .name = "fast_pio", | 669 | .name = "fast_pio", |
| 668 | .mode = (S_IRUGO | S_IWUSR), | 670 | .mode = (S_IRUGO | S_IWUSR), |
| @@ -671,7 +673,7 @@ static struct class_device_attribute SYM53C500_pio_attr = { | |||
| 671 | .store = SYM53C500_store_pio, | 673 | .store = SYM53C500_store_pio, |
| 672 | }; | 674 | }; |
| 673 | 675 | ||
| 674 | static struct class_device_attribute *SYM53C500_shost_attrs[] = { | 676 | static struct device_attribute *SYM53C500_shost_attrs[] = { |
| 675 | &SYM53C500_pio_attr, | 677 | &SYM53C500_pio_attr, |
| 676 | NULL, | 678 | NULL, |
| 677 | }; | 679 | }; |
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 413d8cd6a324..d61df036910c 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
| @@ -530,15 +530,17 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *ha) | |||
| 530 | /* Scsi_Host attributes. */ | 530 | /* Scsi_Host attributes. */ |
| 531 | 531 | ||
| 532 | static ssize_t | 532 | static ssize_t |
| 533 | qla2x00_drvr_version_show(struct class_device *cdev, char *buf) | 533 | qla2x00_drvr_version_show(struct device *dev, |
| 534 | struct device_attribute *attr, char *buf) | ||
| 534 | { | 535 | { |
| 535 | return snprintf(buf, PAGE_SIZE, "%s\n", qla2x00_version_str); | 536 | return snprintf(buf, PAGE_SIZE, "%s\n", qla2x00_version_str); |
| 536 | } | 537 | } |
| 537 | 538 | ||
| 538 | static ssize_t | 539 | static ssize_t |
| 539 | qla2x00_fw_version_show(struct class_device *cdev, char *buf) | 540 | qla2x00_fw_version_show(struct device *dev, |
| 541 | struct device_attribute *attr, char *buf) | ||
| 540 | { | 542 | { |
| 541 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 543 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 542 | char fw_str[30]; | 544 | char fw_str[30]; |
| 543 | 545 | ||
| 544 | return snprintf(buf, PAGE_SIZE, "%s\n", | 546 | return snprintf(buf, PAGE_SIZE, "%s\n", |
| @@ -546,9 +548,10 @@ qla2x00_fw_version_show(struct class_device *cdev, char *buf) | |||
| 546 | } | 548 | } |
| 547 | 549 | ||
| 548 | static ssize_t | 550 | static ssize_t |
| 549 | qla2x00_serial_num_show(struct class_device *cdev, char *buf) | 551 | qla2x00_serial_num_show(struct device *dev, struct device_attribute *attr, |
| 552 | char *buf) | ||
| 550 | { | 553 | { |
| 551 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 554 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 552 | uint32_t sn; | 555 | uint32_t sn; |
| 553 | 556 | ||
| 554 | if (IS_FWI2_CAPABLE(ha)) | 557 | if (IS_FWI2_CAPABLE(ha)) |
| @@ -560,40 +563,45 @@ qla2x00_serial_num_show(struct class_device *cdev, char *buf) | |||
| 560 | } | 563 | } |
| 561 | 564 | ||
| 562 | static ssize_t | 565 | static ssize_t |
| 563 | qla2x00_isp_name_show(struct class_device *cdev, char *buf) | 566 | qla2x00_isp_name_show(struct device *dev, struct device_attribute *attr, |
| 567 | char *buf) | ||
| 564 | { | 568 | { |
| 565 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 569 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 566 | return snprintf(buf, PAGE_SIZE, "ISP%04X\n", ha->pdev->device); | 570 | return snprintf(buf, PAGE_SIZE, "ISP%04X\n", ha->pdev->device); |
| 567 | } | 571 | } |
| 568 | 572 | ||
| 569 | static ssize_t | 573 | static ssize_t |
| 570 | qla2x00_isp_id_show(struct class_device *cdev, char *buf) | 574 | qla2x00_isp_id_show(struct device *dev, struct device_attribute *attr, |
| 575 | char *buf) | ||
| 571 | { | 576 | { |
| 572 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 577 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 573 | return snprintf(buf, PAGE_SIZE, "%04x %04x %04x %04x\n", | 578 | return snprintf(buf, PAGE_SIZE, "%04x %04x %04x %04x\n", |
| 574 | ha->product_id[0], ha->product_id[1], ha->product_id[2], | 579 | ha->product_id[0], ha->product_id[1], ha->product_id[2], |
| 575 | ha->product_id[3]); | 580 | ha->product_id[3]); |
| 576 | } | 581 | } |
| 577 | 582 | ||
| 578 | static ssize_t | 583 | static ssize_t |
| 579 | qla2x00_model_name_show(struct class_device *cdev, char *buf) | 584 | qla2x00_model_name_show(struct device *dev, struct device_attribute *attr, |
| 585 | char *buf) | ||
| 580 | { | 586 | { |
| 581 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 587 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 582 | return snprintf(buf, PAGE_SIZE, "%s\n", ha->model_number); | 588 | return snprintf(buf, PAGE_SIZE, "%s\n", ha->model_number); |
| 583 | } | 589 | } |
| 584 | 590 | ||
| 585 | static ssize_t | 591 | static ssize_t |
| 586 | qla2x00_model_desc_show(struct class_device *cdev, char *buf) | 592 | qla2x00_model_desc_show(struct device *dev, struct device_attribute *attr, |
| 593 | char *buf) | ||
| 587 | { | 594 | { |
| 588 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 595 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 589 | return snprintf(buf, PAGE_SIZE, "%s\n", | 596 | return snprintf(buf, PAGE_SIZE, "%s\n", |
| 590 | ha->model_desc ? ha->model_desc: ""); | 597 | ha->model_desc ? ha->model_desc: ""); |
| 591 | } | 598 | } |
| 592 | 599 | ||
| 593 | static ssize_t | 600 | static ssize_t |
| 594 | qla2x00_pci_info_show(struct class_device *cdev, char *buf) | 601 | qla2x00_pci_info_show(struct device *dev, struct device_attribute *attr, |
| 602 | char *buf) | ||
| 595 | { | 603 | { |
| 596 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 604 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 597 | char pci_info[30]; | 605 | char pci_info[30]; |
| 598 | 606 | ||
| 599 | return snprintf(buf, PAGE_SIZE, "%s\n", | 607 | return snprintf(buf, PAGE_SIZE, "%s\n", |
| @@ -601,9 +609,10 @@ qla2x00_pci_info_show(struct class_device *cdev, char *buf) | |||
| 601 | } | 609 | } |
| 602 | 610 | ||
| 603 | static ssize_t | 611 | static ssize_t |
| 604 | qla2x00_state_show(struct class_device *cdev, char *buf) | 612 | qla2x00_state_show(struct device *dev, struct device_attribute *attr, |
| 613 | char *buf) | ||
| 605 | { | 614 | { |
| 606 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 615 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 607 | int len = 0; | 616 | int len = 0; |
| 608 | 617 | ||
| 609 | if (atomic_read(&ha->loop_state) == LOOP_DOWN || | 618 | if (atomic_read(&ha->loop_state) == LOOP_DOWN || |
| @@ -639,9 +648,10 @@ qla2x00_state_show(struct class_device *cdev, char *buf) | |||
| 639 | } | 648 | } |
| 640 | 649 | ||
| 641 | static ssize_t | 650 | static ssize_t |
| 642 | qla2x00_zio_show(struct class_device *cdev, char *buf) | 651 | qla2x00_zio_show(struct device *dev, struct device_attribute *attr, |
| 652 | char *buf) | ||
| 643 | { | 653 | { |
| 644 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 654 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 645 | int len = 0; | 655 | int len = 0; |
| 646 | 656 | ||
| 647 | switch (ha->zio_mode) { | 657 | switch (ha->zio_mode) { |
| @@ -656,9 +666,10 @@ qla2x00_zio_show(struct class_device *cdev, char *buf) | |||
| 656 | } | 666 | } |
| 657 | 667 | ||
| 658 | static ssize_t | 668 | static ssize_t |
| 659 | qla2x00_zio_store(struct class_device *cdev, const char *buf, size_t count) | 669 | qla2x00_zio_store(struct device *dev, struct device_attribute *attr, |
| 670 | const char *buf, size_t count) | ||
| 660 | { | 671 | { |
| 661 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 672 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 662 | int val = 0; | 673 | int val = 0; |
| 663 | uint16_t zio_mode; | 674 | uint16_t zio_mode; |
| 664 | 675 | ||
| @@ -682,18 +693,19 @@ qla2x00_zio_store(struct class_device *cdev, const char *buf, size_t count) | |||
| 682 | } | 693 | } |
| 683 | 694 | ||
| 684 | static ssize_t | 695 | static ssize_t |
| 685 | qla2x00_zio_timer_show(struct class_device *cdev, char *buf) | 696 | qla2x00_zio_timer_show(struct device *dev, struct device_attribute *attr, |
| 697 | char *buf) | ||
| 686 | { | 698 | { |
| 687 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 699 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 688 | 700 | ||
| 689 | return snprintf(buf, PAGE_SIZE, "%d us\n", ha->zio_timer * 100); | 701 | return snprintf(buf, PAGE_SIZE, "%d us\n", ha->zio_timer * 100); |
| 690 | } | 702 | } |
| 691 | 703 | ||
| 692 | static ssize_t | 704 | static ssize_t |
| 693 | qla2x00_zio_timer_store(struct class_device *cdev, const char *buf, | 705 | qla2x00_zio_timer_store(struct device *dev, struct device_attribute *attr, |
| 694 | size_t count) | 706 | const char *buf, size_t count) |
| 695 | { | 707 | { |
| 696 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 708 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 697 | int val = 0; | 709 | int val = 0; |
| 698 | uint16_t zio_timer; | 710 | uint16_t zio_timer; |
| 699 | 711 | ||
| @@ -709,9 +721,10 @@ qla2x00_zio_timer_store(struct class_device *cdev, const char *buf, | |||
| 709 | } | 721 | } |
| 710 | 722 | ||
| 711 | static ssize_t | 723 | static ssize_t |
| 712 | qla2x00_beacon_show(struct class_device *cdev, char *buf) | 724 | qla2x00_beacon_show(struct device *dev, struct device_attribute *attr, |
| 725 | char *buf) | ||
| 713 | { | 726 | { |
| 714 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 727 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 715 | int len = 0; | 728 | int len = 0; |
| 716 | 729 | ||
| 717 | if (ha->beacon_blink_led) | 730 | if (ha->beacon_blink_led) |
| @@ -722,10 +735,10 @@ qla2x00_beacon_show(struct class_device *cdev, char *buf) | |||
| 722 | } | 735 | } |
| 723 | 736 | ||
| 724 | static ssize_t | 737 | static ssize_t |
| 725 | qla2x00_beacon_store(struct class_device *cdev, const char *buf, | 738 | qla2x00_beacon_store(struct device *dev, struct device_attribute *attr, |
| 726 | size_t count) | 739 | const char *buf, size_t count) |
| 727 | { | 740 | { |
| 728 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 741 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 729 | int val = 0; | 742 | int val = 0; |
| 730 | int rval; | 743 | int rval; |
| 731 | 744 | ||
| @@ -753,84 +766,86 @@ qla2x00_beacon_store(struct class_device *cdev, const char *buf, | |||
| 753 | } | 766 | } |
| 754 | 767 | ||
| 755 | static ssize_t | 768 | static ssize_t |
| 756 | qla2x00_optrom_bios_version_show(struct class_device *cdev, char *buf) | 769 | qla2x00_optrom_bios_version_show(struct device *dev, |
| 770 | struct device_attribute *attr, char *buf) | ||
| 757 | { | 771 | { |
| 758 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 772 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 759 | 773 | ||
| 760 | return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->bios_revision[1], | 774 | return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->bios_revision[1], |
| 761 | ha->bios_revision[0]); | 775 | ha->bios_revision[0]); |
| 762 | } | 776 | } |
| 763 | 777 | ||
| 764 | static ssize_t | 778 | static ssize_t |
| 765 | qla2x00_optrom_efi_version_show(struct class_device *cdev, char *buf) | 779 | qla2x00_optrom_efi_version_show(struct device *dev, |
| 780 | struct device_attribute *attr, char *buf) | ||
| 766 | { | 781 | { |
| 767 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 782 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 768 | 783 | ||
| 769 | return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->efi_revision[1], | 784 | return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->efi_revision[1], |
| 770 | ha->efi_revision[0]); | 785 | ha->efi_revision[0]); |
| 771 | } | 786 | } |
| 772 | 787 | ||
| 773 | static ssize_t | 788 | static ssize_t |
| 774 | qla2x00_optrom_fcode_version_show(struct class_device *cdev, char *buf) | 789 | qla2x00_optrom_fcode_version_show(struct device *dev, |
| 790 | struct device_attribute *attr, char *buf) | ||
| 775 | { | 791 | { |
| 776 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 792 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 777 | 793 | ||
| 778 | return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fcode_revision[1], | 794 | return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fcode_revision[1], |
| 779 | ha->fcode_revision[0]); | 795 | ha->fcode_revision[0]); |
| 780 | } | 796 | } |
| 781 | 797 | ||
| 782 | static ssize_t | 798 | static ssize_t |
| 783 | qla2x00_optrom_fw_version_show(struct class_device *cdev, char *buf) | 799 | qla2x00_optrom_fw_version_show(struct device *dev, |
| 800 | struct device_attribute *attr, char *buf) | ||
| 784 | { | 801 | { |
| 785 | scsi_qla_host_t *ha = shost_priv(class_to_shost(cdev)); | 802 | scsi_qla_host_t *ha = shost_priv(class_to_shost(dev)); |
| 786 | 803 | ||
| 787 | return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d %d\n", | 804 | return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d %d\n", |
| 788 | ha->fw_revision[0], ha->fw_revision[1], ha->fw_revision[2], | 805 | ha->fw_revision[0], ha->fw_revision[1], ha->fw_revision[2], |
| 789 | ha->fw_revision[3]); | 806 | ha->fw_revision[3]); |
| 790 | } | 807 | } |
| 791 | 808 | ||
| 792 | static CLASS_DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, | 809 | static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); |
| 793 | NULL); | 810 | static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); |
| 794 | static CLASS_DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); | 811 | static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); |
| 795 | static CLASS_DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); | 812 | static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL); |
| 796 | static CLASS_DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL); | 813 | static DEVICE_ATTR(isp_id, S_IRUGO, qla2x00_isp_id_show, NULL); |
| 797 | static CLASS_DEVICE_ATTR(isp_id, S_IRUGO, qla2x00_isp_id_show, NULL); | 814 | static DEVICE_ATTR(model_name, S_IRUGO, qla2x00_model_name_show, NULL); |
| 798 | static CLASS_DEVICE_ATTR(model_name, S_IRUGO, qla2x00_model_name_show, NULL); | 815 | static DEVICE_ATTR(model_desc, S_IRUGO, qla2x00_model_desc_show, NULL); |
| 799 | static CLASS_DEVICE_ATTR(model_desc, S_IRUGO, qla2x00_model_desc_show, NULL); | 816 | static DEVICE_ATTR(pci_info, S_IRUGO, qla2x00_pci_info_show, NULL); |
| 800 | static CLASS_DEVICE_ATTR(pci_info, S_IRUGO, qla2x00_pci_info_show, NULL); | 817 | static DEVICE_ATTR(state, S_IRUGO, qla2x00_state_show, NULL); |
| 801 | static CLASS_DEVICE_ATTR(state, S_IRUGO, qla2x00_state_show, NULL); | 818 | static DEVICE_ATTR(zio, S_IRUGO | S_IWUSR, qla2x00_zio_show, qla2x00_zio_store); |
| 802 | static CLASS_DEVICE_ATTR(zio, S_IRUGO | S_IWUSR, qla2x00_zio_show, | 819 | static DEVICE_ATTR(zio_timer, S_IRUGO | S_IWUSR, qla2x00_zio_timer_show, |
| 803 | qla2x00_zio_store); | 820 | qla2x00_zio_timer_store); |
| 804 | static CLASS_DEVICE_ATTR(zio_timer, S_IRUGO | S_IWUSR, qla2x00_zio_timer_show, | 821 | static DEVICE_ATTR(beacon, S_IRUGO | S_IWUSR, qla2x00_beacon_show, |
| 805 | qla2x00_zio_timer_store); | 822 | qla2x00_beacon_store); |
| 806 | static CLASS_DEVICE_ATTR(beacon, S_IRUGO | S_IWUSR, qla2x00_beacon_show, | 823 | static DEVICE_ATTR(optrom_bios_version, S_IRUGO, |
| 807 | qla2x00_beacon_store); | 824 | qla2x00_optrom_bios_version_show, NULL); |
| 808 | static CLASS_DEVICE_ATTR(optrom_bios_version, S_IRUGO, | 825 | static DEVICE_ATTR(optrom_efi_version, S_IRUGO, |
| 809 | qla2x00_optrom_bios_version_show, NULL); | 826 | qla2x00_optrom_efi_version_show, NULL); |
| 810 | static CLASS_DEVICE_ATTR(optrom_efi_version, S_IRUGO, | 827 | static DEVICE_ATTR(optrom_fcode_version, S_IRUGO, |
| 811 | qla2x00_optrom_efi_version_show, NULL); | 828 | qla2x00_optrom_fcode_version_show, NULL); |
| 812 | static CLASS_DEVICE_ATTR(optrom_fcode_version, S_IRUGO, | 829 | static DEVICE_ATTR(optrom_fw_version, S_IRUGO, qla2x00_optrom_fw_version_show, |
| 813 | qla2x00_optrom_fcode_version_show, NULL); | 830 | NULL); |
| 814 | static CLASS_DEVICE_ATTR(optrom_fw_version, S_IRUGO, | 831 | |
| 815 | qla2x00_optrom_fw_version_show, NULL); | 832 | struct device_attribute *qla2x00_host_attrs[] = { |
| 816 | 833 | &dev_attr_driver_version, | |
| 817 | struct class_device_attribute *qla2x00_host_attrs[] = { | 834 | &dev_attr_fw_version, |
| 818 | &class_device_attr_driver_version, | 835 | &dev_attr_serial_num, |
| 819 | &class_device_attr_fw_version, | 836 | &dev_attr_isp_name, |
| 820 | &class_device_attr_serial_num, | 837 | &dev_attr_isp_id, |
| 821 | &class_device_attr_isp_name, | 838 | &dev_attr_model_name, |
| 822 | &class_device_attr_isp_id, | 839 | &dev_attr_model_desc, |
| 823 | &class_device_attr_model_name, | 840 | &dev_attr_pci_info, |
| 824 | &class_device_attr_model_desc, | 841 | &dev_attr_state, |
| 825 | &class_device_attr_pci_info, | 842 | &dev_attr_zio, |
| 826 | &class_device_attr_state, | 843 | &dev_attr_zio_timer, |
| 827 | &class_device_attr_zio, | 844 | &dev_attr_beacon, |
| 828 | &class_device_attr_zio_timer, | 845 | &dev_attr_optrom_bios_version, |
| 829 | &class_device_attr_beacon, | 846 | &dev_attr_optrom_efi_version, |
| 830 | &class_device_attr_optrom_bios_version, | 847 | &dev_attr_optrom_fcode_version, |
| 831 | &class_device_attr_optrom_efi_version, | 848 | &dev_attr_optrom_fw_version, |
| 832 | &class_device_attr_optrom_fcode_version, | ||
| 833 | &class_device_attr_optrom_fw_version, | ||
| 834 | NULL, | 849 | NULL, |
| 835 | }; | 850 | }; |
| 836 | 851 | ||
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index a9571c214a9e..76eb4fecce65 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
| @@ -347,8 +347,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *); | |||
| 347 | /* | 347 | /* |
| 348 | * Global Function Prototypes in qla_attr.c source file. | 348 | * Global Function Prototypes in qla_attr.c source file. |
| 349 | */ | 349 | */ |
| 350 | struct class_device_attribute; | 350 | struct device_attribute; |
| 351 | extern struct class_device_attribute *qla2x00_host_attrs[]; | 351 | extern struct device_attribute *qla2x00_host_attrs[]; |
| 352 | struct fc_function_template; | 352 | struct fc_function_template; |
| 353 | extern struct fc_function_template qla2xxx_transport_functions; | 353 | extern struct fc_function_template qla2xxx_transport_functions; |
| 354 | extern struct fc_function_template qla2xxx_transport_vport_functions; | 354 | extern struct fc_function_template qla2xxx_transport_vport_functions; |
diff --git a/drivers/scsi/raid_class.c b/drivers/scsi/raid_class.c index 52182a744ba6..913a931176ef 100644 --- a/drivers/scsi/raid_class.c +++ b/drivers/scsi/raid_class.c | |||
| @@ -24,15 +24,15 @@ struct raid_internal { | |||
| 24 | struct raid_template r; | 24 | struct raid_template r; |
| 25 | struct raid_function_template *f; | 25 | struct raid_function_template *f; |
| 26 | /* The actual attributes */ | 26 | /* The actual attributes */ |
| 27 | struct class_device_attribute private_attrs[RAID_NUM_ATTRS]; | 27 | struct device_attribute private_attrs[RAID_NUM_ATTRS]; |
| 28 | /* The array of null terminated pointers to attributes | 28 | /* The array of null terminated pointers to attributes |
| 29 | * needed by scsi_sysfs.c */ | 29 | * needed by scsi_sysfs.c */ |
| 30 | struct class_device_attribute *attrs[RAID_NUM_ATTRS + 1]; | 30 | struct device_attribute *attrs[RAID_NUM_ATTRS + 1]; |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | struct raid_component { | 33 | struct raid_component { |
| 34 | struct list_head node; | 34 | struct list_head node; |
| 35 | struct class_device cdev; | 35 | struct device dev; |
| 36 | int num; | 36 | int num; |
| 37 | }; | 37 | }; |
| 38 | 38 | ||
| @@ -50,9 +50,9 @@ struct raid_component { | |||
| 50 | tc_to_raid_internal(tc); \ | 50 | tc_to_raid_internal(tc); \ |
| 51 | }) | 51 | }) |
| 52 | 52 | ||
| 53 | #define class_device_to_raid_internal(cdev) ({ \ | 53 | #define device_to_raid_internal(dev) ({ \ |
| 54 | struct attribute_container *ac = \ | 54 | struct attribute_container *ac = \ |
| 55 | attribute_container_classdev_to_container(cdev); \ | 55 | attribute_container_classdev_to_container(dev); \ |
| 56 | ac_to_raid_internal(ac); \ | 56 | ac_to_raid_internal(ac); \ |
| 57 | }) | 57 | }) |
| 58 | 58 | ||
| @@ -76,33 +76,33 @@ static int raid_match(struct attribute_container *cont, struct device *dev) | |||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | static int raid_setup(struct transport_container *tc, struct device *dev, | 78 | static int raid_setup(struct transport_container *tc, struct device *dev, |
| 79 | struct class_device *cdev) | 79 | struct device *cdev) |
| 80 | { | 80 | { |
| 81 | struct raid_data *rd; | 81 | struct raid_data *rd; |
| 82 | 82 | ||
| 83 | BUG_ON(class_get_devdata(cdev)); | 83 | BUG_ON(dev_get_drvdata(cdev)); |
| 84 | 84 | ||
| 85 | rd = kzalloc(sizeof(*rd), GFP_KERNEL); | 85 | rd = kzalloc(sizeof(*rd), GFP_KERNEL); |
| 86 | if (!rd) | 86 | if (!rd) |
| 87 | return -ENOMEM; | 87 | return -ENOMEM; |
| 88 | 88 | ||
| 89 | INIT_LIST_HEAD(&rd->component_list); | 89 | INIT_LIST_HEAD(&rd->component_list); |
| 90 | class_set_devdata(cdev, rd); | 90 | dev_set_drvdata(cdev, rd); |
| 91 | 91 | ||
| 92 | return 0; | 92 | return 0; |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | static int raid_remove(struct transport_container *tc, struct device *dev, | 95 | static int raid_remove(struct transport_container *tc, struct device *dev, |
| 96 | struct class_device *cdev) | 96 | struct device *cdev) |
| 97 | { | 97 | { |
| 98 | struct raid_data *rd = class_get_devdata(cdev); | 98 | struct raid_data *rd = dev_get_drvdata(cdev); |
| 99 | struct raid_component *rc, *next; | 99 | struct raid_component *rc, *next; |
| 100 | dev_printk(KERN_ERR, dev, "RAID REMOVE\n"); | 100 | dev_printk(KERN_ERR, dev, "RAID REMOVE\n"); |
| 101 | class_set_devdata(cdev, NULL); | 101 | dev_set_drvdata(cdev, NULL); |
| 102 | list_for_each_entry_safe(rc, next, &rd->component_list, node) { | 102 | list_for_each_entry_safe(rc, next, &rd->component_list, node) { |
| 103 | list_del(&rc->node); | 103 | list_del(&rc->node); |
| 104 | dev_printk(KERN_ERR, rc->cdev.dev, "RAID COMPONENT REMOVE\n"); | 104 | dev_printk(KERN_ERR, rc->dev.parent, "RAID COMPONENT REMOVE\n"); |
| 105 | class_device_unregister(&rc->cdev); | 105 | device_unregister(&rc->dev); |
| 106 | } | 106 | } |
| 107 | dev_printk(KERN_ERR, dev, "RAID REMOVE DONE\n"); | 107 | dev_printk(KERN_ERR, dev, "RAID REMOVE DONE\n"); |
| 108 | kfree(rd); | 108 | kfree(rd); |
| @@ -171,9 +171,11 @@ static const char *raid_level_name(enum raid_level level) | |||
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | #define raid_attr_show_internal(attr, fmt, var, code) \ | 173 | #define raid_attr_show_internal(attr, fmt, var, code) \ |
| 174 | static ssize_t raid_show_##attr(struct class_device *cdev, char *buf) \ | 174 | static ssize_t raid_show_##attr(struct device *dev, \ |
| 175 | struct device_attribute *attr, \ | ||
| 176 | char *buf) \ | ||
| 175 | { \ | 177 | { \ |
| 176 | struct raid_data *rd = class_get_devdata(cdev); \ | 178 | struct raid_data *rd = dev_get_drvdata(dev); \ |
| 177 | code \ | 179 | code \ |
| 178 | return snprintf(buf, 20, #fmt "\n", var); \ | 180 | return snprintf(buf, 20, #fmt "\n", var); \ |
| 179 | } | 181 | } |
| @@ -184,17 +186,17 @@ raid_attr_show_internal(attr, %s, name, \ | |||
| 184 | code \ | 186 | code \ |
| 185 | name = raid_##states##_name(rd->attr); \ | 187 | name = raid_##states##_name(rd->attr); \ |
| 186 | ) \ | 188 | ) \ |
| 187 | static CLASS_DEVICE_ATTR(attr, S_IRUGO, raid_show_##attr, NULL) | 189 | static DEVICE_ATTR(attr, S_IRUGO, raid_show_##attr, NULL) |
| 188 | 190 | ||
| 189 | 191 | ||
| 190 | #define raid_attr_ro_internal(attr, code) \ | 192 | #define raid_attr_ro_internal(attr, code) \ |
| 191 | raid_attr_show_internal(attr, %d, rd->attr, code) \ | 193 | raid_attr_show_internal(attr, %d, rd->attr, code) \ |
| 192 | static CLASS_DEVICE_ATTR(attr, S_IRUGO, raid_show_##attr, NULL) | 194 | static DEVICE_ATTR(attr, S_IRUGO, raid_show_##attr, NULL) |
| 193 | 195 | ||
| 194 | #define ATTR_CODE(attr) \ | 196 | #define ATTR_CODE(attr) \ |
| 195 | struct raid_internal *i = class_device_to_raid_internal(cdev); \ | 197 | struct raid_internal *i = device_to_raid_internal(dev); \ |
| 196 | if (i->f->get_##attr) \ | 198 | if (i->f->get_##attr) \ |
| 197 | i->f->get_##attr(cdev->dev); | 199 | i->f->get_##attr(dev->parent); |
| 198 | 200 | ||
| 199 | #define raid_attr_ro(attr) raid_attr_ro_internal(attr, ) | 201 | #define raid_attr_ro(attr) raid_attr_ro_internal(attr, ) |
| 200 | #define raid_attr_ro_fn(attr) raid_attr_ro_internal(attr, ATTR_CODE(attr)) | 202 | #define raid_attr_ro_fn(attr) raid_attr_ro_internal(attr, ATTR_CODE(attr)) |
| @@ -206,23 +208,23 @@ raid_attr_ro_state(level); | |||
| 206 | raid_attr_ro_fn(resync); | 208 | raid_attr_ro_fn(resync); |
| 207 | raid_attr_ro_state_fn(state); | 209 | raid_attr_ro_state_fn(state); |
| 208 | 210 | ||
| 209 | static void raid_component_release(struct class_device *cdev) | 211 | static void raid_component_release(struct device *dev) |
| 210 | { | 212 | { |
| 211 | struct raid_component *rc = container_of(cdev, struct raid_component, | 213 | struct raid_component *rc = |
| 212 | cdev); | 214 | container_of(dev, struct raid_component, dev); |
| 213 | dev_printk(KERN_ERR, rc->cdev.dev, "COMPONENT RELEASE\n"); | 215 | dev_printk(KERN_ERR, rc->dev.parent, "COMPONENT RELEASE\n"); |
| 214 | put_device(rc->cdev.dev); | 216 | put_device(rc->dev.parent); |
| 215 | kfree(rc); | 217 | kfree(rc); |
| 216 | } | 218 | } |
| 217 | 219 | ||
| 218 | int raid_component_add(struct raid_template *r,struct device *raid_dev, | 220 | int raid_component_add(struct raid_template *r,struct device *raid_dev, |
| 219 | struct device *component_dev) | 221 | struct device *component_dev) |
| 220 | { | 222 | { |
| 221 | struct class_device *cdev = | 223 | struct device *cdev = |
| 222 | attribute_container_find_class_device(&r->raid_attrs.ac, | 224 | attribute_container_find_class_device(&r->raid_attrs.ac, |
| 223 | raid_dev); | 225 | raid_dev); |
| 224 | struct raid_component *rc; | 226 | struct raid_component *rc; |
| 225 | struct raid_data *rd = class_get_devdata(cdev); | 227 | struct raid_data *rd = dev_get_drvdata(cdev); |
| 226 | int err; | 228 | int err; |
| 227 | 229 | ||
| 228 | rc = kzalloc(sizeof(*rc), GFP_KERNEL); | 230 | rc = kzalloc(sizeof(*rc), GFP_KERNEL); |
| @@ -230,17 +232,16 @@ int raid_component_add(struct raid_template *r,struct device *raid_dev, | |||
| 230 | return -ENOMEM; | 232 | return -ENOMEM; |
| 231 | 233 | ||
| 232 | INIT_LIST_HEAD(&rc->node); | 234 | INIT_LIST_HEAD(&rc->node); |
| 233 | class_device_initialize(&rc->cdev); | 235 | device_initialize(&rc->dev); |
| 234 | rc->cdev.release = raid_component_release; | 236 | rc->dev.release = raid_component_release; |
| 235 | rc->cdev.dev = get_device(component_dev); | 237 | rc->dev.parent = get_device(component_dev); |
| 236 | rc->num = rd->component_count++; | 238 | rc->num = rd->component_count++; |
| 237 | 239 | ||
| 238 | snprintf(rc->cdev.class_id, sizeof(rc->cdev.class_id), | 240 | snprintf(rc->dev.bus_id, sizeof(rc->dev.bus_id), |
| 239 | "component-%d", rc->num); | 241 | "component-%d", rc->num); |
| 240 | list_add_tail(&rc->node, &rd->component_list); | 242 | list_add_tail(&rc->node, &rd->component_list); |
| 241 | rc->cdev.parent = cdev; | 243 | rc->dev.class = &raid_class.class; |
| 242 | rc->cdev.class = &raid_class.class; | 244 | err = device_add(&rc->dev); |
| 243 | err = class_device_add(&rc->cdev); | ||
| 244 | if (err) | 245 | if (err) |
| 245 | goto err_out; | 246 | goto err_out; |
| 246 | 247 | ||
| @@ -273,9 +274,9 @@ raid_class_attach(struct raid_function_template *ft) | |||
| 273 | 274 | ||
| 274 | attribute_container_register(&i->r.raid_attrs.ac); | 275 | attribute_container_register(&i->r.raid_attrs.ac); |
| 275 | 276 | ||
| 276 | i->attrs[count++] = &class_device_attr_level; | 277 | i->attrs[count++] = &dev_attr_level; |
| 277 | i->attrs[count++] = &class_device_attr_resync; | 278 | i->attrs[count++] = &dev_attr_resync; |
| 278 | i->attrs[count++] = &class_device_attr_state; | 279 | i->attrs[count++] = &dev_attr_state; |
| 279 | 280 | ||
| 280 | i->attrs[count] = NULL; | 281 | i->attrs[count] = NULL; |
| 281 | BUG_ON(count > RAID_NUM_ATTRS); | 282 | BUG_ON(count > RAID_NUM_ATTRS); |
diff --git a/drivers/scsi/scsi_sas_internal.h b/drivers/scsi/scsi_sas_internal.h index e1edab45a37b..998cb5be6833 100644 --- a/drivers/scsi/scsi_sas_internal.h +++ b/drivers/scsi/scsi_sas_internal.h | |||
| @@ -13,12 +13,12 @@ struct sas_internal { | |||
| 13 | struct sas_function_template *f; | 13 | struct sas_function_template *f; |
| 14 | struct sas_domain_function_template *dft; | 14 | struct sas_domain_function_template *dft; |
| 15 | 15 | ||
| 16 | struct class_device_attribute private_host_attrs[SAS_HOST_ATTRS]; | 16 | struct device_attribute private_host_attrs[SAS_HOST_ATTRS]; |
| 17 | struct class_device_attribute private_phy_attrs[SAS_PHY_ATTRS]; | 17 | struct device_attribute private_phy_attrs[SAS_PHY_ATTRS]; |
| 18 | struct class_device_attribute private_port_attrs[SAS_PORT_ATTRS]; | 18 | struct device_attribute private_port_attrs[SAS_PORT_ATTRS]; |
| 19 | struct class_device_attribute private_rphy_attrs[SAS_RPORT_ATTRS]; | 19 | struct device_attribute private_rphy_attrs[SAS_RPORT_ATTRS]; |
| 20 | struct class_device_attribute private_end_dev_attrs[SAS_END_DEV_ATTRS]; | 20 | struct device_attribute private_end_dev_attrs[SAS_END_DEV_ATTRS]; |
| 21 | struct class_device_attribute private_expander_attrs[SAS_EXPANDER_ATTRS]; | 21 | struct device_attribute private_expander_attrs[SAS_EXPANDER_ATTRS]; |
| 22 | 22 | ||
| 23 | struct transport_container phy_attr_cont; | 23 | struct transport_container phy_attr_cont; |
| 24 | struct transport_container port_attr_cont; | 24 | struct transport_container port_attr_cont; |
| @@ -30,12 +30,12 @@ struct sas_internal { | |||
| 30 | * The array of null terminated pointers to attributes | 30 | * The array of null terminated pointers to attributes |
| 31 | * needed by scsi_sysfs.c | 31 | * needed by scsi_sysfs.c |
| 32 | */ | 32 | */ |
| 33 | struct class_device_attribute *host_attrs[SAS_HOST_ATTRS + 1]; | 33 | struct device_attribute *host_attrs[SAS_HOST_ATTRS + 1]; |
| 34 | struct class_device_attribute *phy_attrs[SAS_PHY_ATTRS + 1]; | 34 | struct device_attribute *phy_attrs[SAS_PHY_ATTRS + 1]; |
| 35 | struct class_device_attribute *port_attrs[SAS_PORT_ATTRS + 1]; | 35 | struct device_attribute *port_attrs[SAS_PORT_ATTRS + 1]; |
| 36 | struct class_device_attribute *rphy_attrs[SAS_RPORT_ATTRS + 1]; | 36 | struct device_attribute *rphy_attrs[SAS_RPORT_ATTRS + 1]; |
| 37 | struct class_device_attribute *end_dev_attrs[SAS_END_DEV_ATTRS + 1]; | 37 | struct device_attribute *end_dev_attrs[SAS_END_DEV_ATTRS + 1]; |
| 38 | struct class_device_attribute *expander_attrs[SAS_EXPANDER_ATTRS + 1]; | 38 | struct device_attribute *expander_attrs[SAS_EXPANDER_ATTRS + 1]; |
| 39 | }; | 39 | }; |
| 40 | #define to_sas_internal(tmpl) container_of(tmpl, struct sas_internal, t) | 40 | #define to_sas_internal(tmpl) container_of(tmpl, struct sas_internal, t) |
| 41 | 41 | ||
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index ed83cdb6e67d..67bb20ed45d2 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c | |||
| @@ -119,9 +119,10 @@ static int scsi_scan(struct Scsi_Host *shost, const char *str) | |||
| 119 | */ | 119 | */ |
| 120 | #define shost_show_function(name, field, format_string) \ | 120 | #define shost_show_function(name, field, format_string) \ |
| 121 | static ssize_t \ | 121 | static ssize_t \ |
| 122 | show_##name (struct class_device *class_dev, char *buf) \ | 122 | show_##name (struct device *dev, struct device_attribute *attr, \ |
| 123 | char *buf) \ | ||
| 123 | { \ | 124 | { \ |
| 124 | struct Scsi_Host *shost = class_to_shost(class_dev); \ | 125 | struct Scsi_Host *shost = class_to_shost(dev); \ |
| 125 | return snprintf (buf, 20, format_string, shost->field); \ | 126 | return snprintf (buf, 20, format_string, shost->field); \ |
| 126 | } | 127 | } |
| 127 | 128 | ||
| @@ -131,7 +132,7 @@ show_##name (struct class_device *class_dev, char *buf) \ | |||
| 131 | */ | 132 | */ |
| 132 | #define shost_rd_attr2(name, field, format_string) \ | 133 | #define shost_rd_attr2(name, field, format_string) \ |
| 133 | shost_show_function(name, field, format_string) \ | 134 | shost_show_function(name, field, format_string) \ |
| 134 | static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL); | 135 | static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL); |
| 135 | 136 | ||
| 136 | #define shost_rd_attr(field, format_string) \ | 137 | #define shost_rd_attr(field, format_string) \ |
| 137 | shost_rd_attr2(field, field, format_string) | 138 | shost_rd_attr2(field, field, format_string) |
| @@ -140,10 +141,11 @@ shost_rd_attr2(field, field, format_string) | |||
| 140 | * Create the actual show/store functions and data structures. | 141 | * Create the actual show/store functions and data structures. |
| 141 | */ | 142 | */ |
| 142 | 143 | ||
| 143 | static ssize_t store_scan(struct class_device *class_dev, const char *buf, | 144 | static ssize_t |
| 144 | size_t count) | 145 | store_scan(struct device *dev, struct device_attribute *attr, |
| 146 | const char *buf, size_t count) | ||
| 145 | { | 147 | { |
| 146 | struct Scsi_Host *shost = class_to_shost(class_dev); | 148 | struct Scsi_Host *shost = class_to_shost(dev); |
| 147 | int res; | 149 | int res; |
| 148 | 150 | ||
| 149 | res = scsi_scan(shost, buf); | 151 | res = scsi_scan(shost, buf); |
| @@ -151,13 +153,14 @@ static ssize_t store_scan(struct class_device *class_dev, const char *buf, | |||
| 151 | res = count; | 153 | res = count; |
| 152 | return res; | 154 | return res; |
| 153 | }; | 155 | }; |
| 154 | static CLASS_DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan); | 156 | static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan); |
| 155 | 157 | ||
| 156 | static ssize_t | 158 | static ssize_t |
| 157 | store_shost_state(struct class_device *class_dev, const char *buf, size_t count) | 159 | store_shost_state(struct device *dev, struct device_attribute *attr, |
| 160 | const char *buf, size_t count) | ||
| 158 | { | 161 | { |
| 159 | int i; | 162 | int i; |
| 160 | struct Scsi_Host *shost = class_to_shost(class_dev); | 163 | struct Scsi_Host *shost = class_to_shost(dev); |
| 161 | enum scsi_host_state state = 0; | 164 | enum scsi_host_state state = 0; |
| 162 | 165 | ||
| 163 | for (i = 0; i < ARRAY_SIZE(shost_states); i++) { | 166 | for (i = 0; i < ARRAY_SIZE(shost_states); i++) { |
| @@ -177,9 +180,9 @@ store_shost_state(struct class_device *class_dev, const char *buf, size_t count) | |||
| 177 | } | 180 | } |
| 178 | 181 | ||
| 179 | static ssize_t | 182 | static ssize_t |
| 180 | show_shost_state(struct class_device *class_dev, char *buf) | 183 | show_shost_state(struct device *dev, struct device_attribute *attr, char *buf) |
| 181 | { | 184 | { |
| 182 | struct Scsi_Host *shost = class_to_shost(class_dev); | 185 | struct Scsi_Host *shost = class_to_shost(dev); |
| 183 | const char *name = scsi_host_state_name(shost->shost_state); | 186 | const char *name = scsi_host_state_name(shost->shost_state); |
| 184 | 187 | ||
| 185 | if (!name) | 188 | if (!name) |
| @@ -188,7 +191,9 @@ show_shost_state(struct class_device *class_dev, char *buf) | |||
| 188 | return snprintf(buf, 20, "%s\n", name); | 191 | return snprintf(buf, 20, "%s\n", name); |
| 189 | } | 192 | } |
| 190 | 193 | ||
| 191 | static CLASS_DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state); | 194 | /* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */ |
| 195 | struct device_attribute dev_attr_hstate = | ||
| 196 | __ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state); | ||
| 192 | 197 | ||
| 193 | static ssize_t | 198 | static ssize_t |
| 194 | show_shost_mode(unsigned int mode, char *buf) | 199 | show_shost_mode(unsigned int mode, char *buf) |
| @@ -206,9 +211,11 @@ show_shost_mode(unsigned int mode, char *buf) | |||
| 206 | return len; | 211 | return len; |
| 207 | } | 212 | } |
| 208 | 213 | ||
| 209 | static ssize_t show_shost_supported_mode(struct class_device *class_dev, char *buf) | 214 | static ssize_t |
| 215 | show_shost_supported_mode(struct device *dev, struct device_attribute *attr, | ||
| 216 | char *buf) | ||
| 210 | { | 217 | { |
| 211 | struct Scsi_Host *shost = class_to_shost(class_dev); | 218 | struct Scsi_Host *shost = class_to_shost(dev); |
| 212 | unsigned int supported_mode = shost->hostt->supported_mode; | 219 | unsigned int supported_mode = shost->hostt->supported_mode; |
| 213 | 220 | ||
| 214 | if (supported_mode == MODE_UNKNOWN) | 221 | if (supported_mode == MODE_UNKNOWN) |
| @@ -218,11 +225,13 @@ static ssize_t show_shost_supported_mode(struct class_device *class_dev, char *b | |||
| 218 | return show_shost_mode(supported_mode, buf); | 225 | return show_shost_mode(supported_mode, buf); |
| 219 | } | 226 | } |
| 220 | 227 | ||
| 221 | static CLASS_DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL); | 228 | static DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL); |
| 222 | 229 | ||
| 223 | static ssize_t show_shost_active_mode(struct class_device *class_dev, char *buf) | 230 | static ssize_t |
| 231 | show_shost_active_mode(struct device *dev, | ||
| 232 | struct device_attribute *attr, char *buf) | ||
| 224 | { | 233 | { |
| 225 | struct Scsi_Host *shost = class_to_shost(class_dev); | 234 | struct Scsi_Host *shost = class_to_shost(dev); |
| 226 | 235 | ||
| 227 | if (shost->active_mode == MODE_UNKNOWN) | 236 | if (shost->active_mode == MODE_UNKNOWN) |
| 228 | return snprintf(buf, 20, "unknown\n"); | 237 | return snprintf(buf, 20, "unknown\n"); |
| @@ -230,7 +239,7 @@ static ssize_t show_shost_active_mode(struct class_device *class_dev, char *buf) | |||
| 230 | return show_shost_mode(shost->active_mode, buf); | 239 | return show_shost_mode(shost->active_mode, buf); |
| 231 | } | 240 | } |
| 232 | 241 | ||
| 233 | static CLASS_DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL); | 242 | static DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL); |
| 234 | 243 | ||
| 235 | shost_rd_attr(unique_id, "%u\n"); | 244 | shost_rd_attr(unique_id, "%u\n"); |
| 236 | shost_rd_attr(host_busy, "%hu\n"); | 245 | shost_rd_attr(host_busy, "%hu\n"); |
| @@ -240,22 +249,22 @@ shost_rd_attr(sg_tablesize, "%hu\n"); | |||
| 240 | shost_rd_attr(unchecked_isa_dma, "%d\n"); | 249 | shost_rd_attr(unchecked_isa_dma, "%d\n"); |
| 241 | shost_rd_attr2(proc_name, hostt->proc_name, "%s\n"); | 250 | shost_rd_attr2(proc_name, hostt->proc_name, "%s\n"); |
| 242 | 251 | ||
| 243 | static struct class_device_attribute *scsi_sysfs_shost_attrs[] = { | 252 | static struct device_attribute *scsi_sysfs_shost_attrs[] = { |
| 244 | &class_device_attr_unique_id, | 253 | &dev_attr_unique_id, |
| 245 | &class_device_attr_host_busy, | 254 | &dev_attr_host_busy, |
| 246 | &class_device_attr_cmd_per_lun, | 255 | &dev_attr_cmd_per_lun, |
| 247 | &class_device_attr_can_queue, | 256 | &dev_attr_can_queue, |
| 248 | &class_device_attr_sg_tablesize, | 257 | &dev_attr_sg_tablesize, |
| 249 | &class_device_attr_unchecked_isa_dma, | 258 | &dev_attr_unchecked_isa_dma, |
| 250 | &class_device_attr_proc_name, | 259 | &dev_attr_proc_name, |
| 251 | &class_device_attr_scan, | 260 | &dev_attr_scan, |
| 252 | &class_device_attr_state, | 261 | &dev_attr_hstate, |
| 253 | &class_device_attr_supported_mode, | 262 | &dev_attr_supported_mode, |
| 254 | &class_device_attr_active_mode, | 263 | &dev_attr_active_mode, |
| 255 | NULL | 264 | NULL |
| 256 | }; | 265 | }; |
| 257 | 266 | ||
| 258 | static void scsi_device_cls_release(struct class_device *class_dev) | 267 | static void scsi_device_cls_release(struct device *class_dev) |
| 259 | { | 268 | { |
| 260 | struct scsi_device *sdev; | 269 | struct scsi_device *sdev; |
| 261 | 270 | ||
| @@ -320,7 +329,7 @@ static void scsi_device_dev_release(struct device *dev) | |||
| 320 | 329 | ||
| 321 | static struct class sdev_class = { | 330 | static struct class sdev_class = { |
| 322 | .name = "scsi_device", | 331 | .name = "scsi_device", |
| 323 | .release = scsi_device_cls_release, | 332 | .dev_release = scsi_device_cls_release, |
| 324 | }; | 333 | }; |
| 325 | 334 | ||
| 326 | /* all probing is done in the individual ->probe routines */ | 335 | /* all probing is done in the individual ->probe routines */ |
| @@ -424,7 +433,8 @@ void scsi_sysfs_unregister(void) | |||
| 424 | */ | 433 | */ |
| 425 | #define sdev_show_function(field, format_string) \ | 434 | #define sdev_show_function(field, format_string) \ |
| 426 | static ssize_t \ | 435 | static ssize_t \ |
| 427 | sdev_show_##field (struct device *dev, struct device_attribute *attr, char *buf) \ | 436 | sdev_show_##field (struct device *dev, struct device_attribute *attr, \ |
| 437 | char *buf) \ | ||
| 428 | { \ | 438 | { \ |
| 429 | struct scsi_device *sdev; \ | 439 | struct scsi_device *sdev; \ |
| 430 | sdev = to_scsi_device(dev); \ | 440 | sdev = to_scsi_device(dev); \ |
| @@ -448,7 +458,8 @@ static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL); | |||
| 448 | sdev_show_function(field, format_string) \ | 458 | sdev_show_function(field, format_string) \ |
| 449 | \ | 459 | \ |
| 450 | static ssize_t \ | 460 | static ssize_t \ |
| 451 | sdev_store_##field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ | 461 | sdev_store_##field (struct device *dev, struct device_attribute *attr, \ |
| 462 | const char *buf, size_t count) \ | ||
| 452 | { \ | 463 | { \ |
| 453 | struct scsi_device *sdev; \ | 464 | struct scsi_device *sdev; \ |
| 454 | sdev = to_scsi_device(dev); \ | 465 | sdev = to_scsi_device(dev); \ |
| @@ -468,7 +479,8 @@ static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##fie | |||
| 468 | sdev_show_function(field, "%d\n") \ | 479 | sdev_show_function(field, "%d\n") \ |
| 469 | \ | 480 | \ |
| 470 | static ssize_t \ | 481 | static ssize_t \ |
| 471 | sdev_store_##field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) \ | 482 | sdev_store_##field (struct device *dev, struct device_attribute *attr, \ |
| 483 | const char *buf, size_t count) \ | ||
| 472 | { \ | 484 | { \ |
| 473 | int ret; \ | 485 | int ret; \ |
| 474 | struct scsi_device *sdev; \ | 486 | struct scsi_device *sdev; \ |
| @@ -519,7 +531,8 @@ sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf) | |||
| 519 | } | 531 | } |
| 520 | 532 | ||
| 521 | static ssize_t | 533 | static ssize_t |
| 522 | sdev_store_timeout (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 534 | sdev_store_timeout (struct device *dev, struct device_attribute *attr, |
| 535 | const char *buf, size_t count) | ||
| 523 | { | 536 | { |
| 524 | struct scsi_device *sdev; | 537 | struct scsi_device *sdev; |
| 525 | int timeout; | 538 | int timeout; |
| @@ -531,7 +544,8 @@ sdev_store_timeout (struct device *dev, struct device_attribute *attr, const cha | |||
| 531 | static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout); | 544 | static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout); |
| 532 | 545 | ||
| 533 | static ssize_t | 546 | static ssize_t |
| 534 | store_rescan_field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 547 | store_rescan_field (struct device *dev, struct device_attribute *attr, |
| 548 | const char *buf, size_t count) | ||
| 535 | { | 549 | { |
| 536 | scsi_rescan_device(dev); | 550 | scsi_rescan_device(dev); |
| 537 | return count; | 551 | return count; |
| @@ -543,8 +557,9 @@ static void sdev_store_delete_callback(struct device *dev) | |||
| 543 | scsi_remove_device(to_scsi_device(dev)); | 557 | scsi_remove_device(to_scsi_device(dev)); |
| 544 | } | 558 | } |
| 545 | 559 | ||
| 546 | static ssize_t sdev_store_delete(struct device *dev, struct device_attribute *attr, const char *buf, | 560 | static ssize_t |
| 547 | size_t count) | 561 | sdev_store_delete(struct device *dev, struct device_attribute *attr, |
| 562 | const char *buf, size_t count) | ||
| 548 | { | 563 | { |
| 549 | int rc; | 564 | int rc; |
| 550 | 565 | ||
| @@ -559,7 +574,8 @@ static ssize_t sdev_store_delete(struct device *dev, struct device_attribute *at | |||
| 559 | static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete); | 574 | static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete); |
| 560 | 575 | ||
| 561 | static ssize_t | 576 | static ssize_t |
| 562 | store_state_field(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) | 577 | store_state_field(struct device *dev, struct device_attribute *attr, |
| 578 | const char *buf, size_t count) | ||
| 563 | { | 579 | { |
| 564 | int i; | 580 | int i; |
| 565 | struct scsi_device *sdev = to_scsi_device(dev); | 581 | struct scsi_device *sdev = to_scsi_device(dev); |
| @@ -596,7 +612,8 @@ show_state_field(struct device *dev, struct device_attribute *attr, char *buf) | |||
| 596 | static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field); | 612 | static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field); |
| 597 | 613 | ||
| 598 | static ssize_t | 614 | static ssize_t |
| 599 | show_queue_type_field(struct device *dev, struct device_attribute *attr, char *buf) | 615 | show_queue_type_field(struct device *dev, struct device_attribute *attr, |
| 616 | char *buf) | ||
| 600 | { | 617 | { |
| 601 | struct scsi_device *sdev = to_scsi_device(dev); | 618 | struct scsi_device *sdev = to_scsi_device(dev); |
| 602 | const char *name = "none"; | 619 | const char *name = "none"; |
| @@ -612,7 +629,7 @@ show_queue_type_field(struct device *dev, struct device_attribute *attr, char *b | |||
| 612 | static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL); | 629 | static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL); |
| 613 | 630 | ||
| 614 | static ssize_t | 631 | static ssize_t |
| 615 | show_iostat_counterbits(struct device *dev, struct device_attribute *attr, char *buf) | 632 | show_iostat_counterbits(struct device *dev, struct device_attribute *attr, char *buf) |
| 616 | { | 633 | { |
| 617 | return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8); | 634 | return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8); |
| 618 | } | 635 | } |
| @@ -621,7 +638,8 @@ static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL); | |||
| 621 | 638 | ||
| 622 | #define show_sdev_iostat(field) \ | 639 | #define show_sdev_iostat(field) \ |
| 623 | static ssize_t \ | 640 | static ssize_t \ |
| 624 | show_iostat_##field(struct device *dev, struct device_attribute *attr, char *buf) \ | 641 | show_iostat_##field(struct device *dev, struct device_attribute *attr, \ |
| 642 | char *buf) \ | ||
| 625 | { \ | 643 | { \ |
| 626 | struct scsi_device *sdev = to_scsi_device(dev); \ | 644 | struct scsi_device *sdev = to_scsi_device(dev); \ |
| 627 | unsigned long long count = atomic_read(&sdev->field); \ | 645 | unsigned long long count = atomic_read(&sdev->field); \ |
| @@ -645,7 +663,7 @@ static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL); | |||
| 645 | #define DECLARE_EVT_SHOW(name, Cap_name) \ | 663 | #define DECLARE_EVT_SHOW(name, Cap_name) \ |
| 646 | static ssize_t \ | 664 | static ssize_t \ |
| 647 | sdev_show_evt_##name(struct device *dev, struct device_attribute *attr, \ | 665 | sdev_show_evt_##name(struct device *dev, struct device_attribute *attr, \ |
| 648 | char *buf) \ | 666 | char *buf) \ |
| 649 | { \ | 667 | { \ |
| 650 | struct scsi_device *sdev = to_scsi_device(dev); \ | 668 | struct scsi_device *sdev = to_scsi_device(dev); \ |
| 651 | int val = test_bit(SDEV_EVT_##Cap_name, sdev->supported_events);\ | 669 | int val = test_bit(SDEV_EVT_##Cap_name, sdev->supported_events);\ |
| @@ -654,7 +672,7 @@ sdev_show_evt_##name(struct device *dev, struct device_attribute *attr, \ | |||
| 654 | 672 | ||
| 655 | #define DECLARE_EVT_STORE(name, Cap_name) \ | 673 | #define DECLARE_EVT_STORE(name, Cap_name) \ |
| 656 | static ssize_t \ | 674 | static ssize_t \ |
| 657 | sdev_store_evt_##name(struct device *dev, struct device_attribute *attr, \ | 675 | sdev_store_evt_##name(struct device *dev, struct device_attribute *attr,\ |
| 658 | const char *buf, size_t count) \ | 676 | const char *buf, size_t count) \ |
| 659 | { \ | 677 | { \ |
| 660 | struct scsi_device *sdev = to_scsi_device(dev); \ | 678 | struct scsi_device *sdev = to_scsi_device(dev); \ |
| @@ -707,8 +725,9 @@ static struct attribute_group *scsi_sdev_attr_groups[] = { | |||
| 707 | NULL | 725 | NULL |
| 708 | }; | 726 | }; |
| 709 | 727 | ||
| 710 | static ssize_t sdev_store_queue_depth_rw(struct device *dev, struct device_attribute *attr, const char *buf, | 728 | static ssize_t |
| 711 | size_t count) | 729 | sdev_store_queue_depth_rw(struct device *dev, struct device_attribute *attr, |
| 730 | const char *buf, size_t count) | ||
| 712 | { | 731 | { |
| 713 | int depth, retval; | 732 | int depth, retval; |
| 714 | struct scsi_device *sdev = to_scsi_device(dev); | 733 | struct scsi_device *sdev = to_scsi_device(dev); |
| @@ -733,8 +752,9 @@ static struct device_attribute sdev_attr_queue_depth_rw = | |||
| 733 | __ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth, | 752 | __ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth, |
| 734 | sdev_store_queue_depth_rw); | 753 | sdev_store_queue_depth_rw); |
| 735 | 754 | ||
| 736 | static ssize_t sdev_store_queue_type_rw(struct device *dev, struct device_attribute *attr, const char *buf, | 755 | static ssize_t |
| 737 | size_t count) | 756 | sdev_store_queue_type_rw(struct device *dev, struct device_attribute *attr, |
| 757 | const char *buf, size_t count) | ||
| 738 | { | 758 | { |
| 739 | struct scsi_device *sdev = to_scsi_device(dev); | 759 | struct scsi_device *sdev = to_scsi_device(dev); |
| 740 | struct scsi_host_template *sht = sdev->host->hostt; | 760 | struct scsi_host_template *sht = sdev->host->hostt; |
| @@ -786,13 +806,13 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev) | |||
| 786 | printk(KERN_INFO "error 1\n"); | 806 | printk(KERN_INFO "error 1\n"); |
| 787 | return error; | 807 | return error; |
| 788 | } | 808 | } |
| 789 | error = class_device_add(&sdev->sdev_classdev); | 809 | error = device_add(&sdev->sdev_dev); |
| 790 | if (error) { | 810 | if (error) { |
| 791 | printk(KERN_INFO "error 2\n"); | 811 | printk(KERN_INFO "error 2\n"); |
| 792 | goto clean_device; | 812 | goto clean_device; |
| 793 | } | 813 | } |
| 794 | 814 | ||
| 795 | /* take a reference for the sdev_classdev; this is | 815 | /* take a reference for the sdev_dev; this is |
| 796 | * released by the sdev_class .release */ | 816 | * released by the sdev_class .release */ |
| 797 | get_device(&sdev->sdev_gendev); | 817 | get_device(&sdev->sdev_gendev); |
| 798 | 818 | ||
| @@ -858,7 +878,7 @@ void __scsi_remove_device(struct scsi_device *sdev) | |||
| 858 | return; | 878 | return; |
| 859 | 879 | ||
| 860 | bsg_unregister_queue(sdev->request_queue); | 880 | bsg_unregister_queue(sdev->request_queue); |
| 861 | class_device_unregister(&sdev->sdev_classdev); | 881 | device_unregister(&sdev->sdev_dev); |
| 862 | transport_remove_device(dev); | 882 | transport_remove_device(dev); |
| 863 | device_del(dev); | 883 | device_del(dev); |
| 864 | scsi_device_set_state(sdev, SDEV_DEL); | 884 | scsi_device_set_state(sdev, SDEV_DEL); |
| @@ -952,9 +972,9 @@ int scsi_register_interface(struct class_interface *intf) | |||
| 952 | EXPORT_SYMBOL(scsi_register_interface); | 972 | EXPORT_SYMBOL(scsi_register_interface); |
| 953 | 973 | ||
| 954 | 974 | ||
| 955 | static struct class_device_attribute *class_attr_overridden( | 975 | static struct device_attribute *class_attr_overridden( |
| 956 | struct class_device_attribute **attrs, | 976 | struct device_attribute **attrs, |
| 957 | struct class_device_attribute *attr) | 977 | struct device_attribute *attr) |
| 958 | { | 978 | { |
| 959 | int i; | 979 | int i; |
| 960 | 980 | ||
| @@ -966,10 +986,10 @@ static struct class_device_attribute *class_attr_overridden( | |||
| 966 | return NULL; | 986 | return NULL; |
| 967 | } | 987 | } |
| 968 | 988 | ||
| 969 | static int class_attr_add(struct class_device *classdev, | 989 | static int class_attr_add(struct device *classdev, |
| 970 | struct class_device_attribute *attr) | 990 | struct device_attribute *attr) |
| 971 | { | 991 | { |
| 972 | struct class_device_attribute *base_attr; | 992 | struct device_attribute *base_attr; |
| 973 | 993 | ||
| 974 | /* | 994 | /* |
| 975 | * Spare the caller from having to copy things it's not interested in. | 995 | * Spare the caller from having to copy things it's not interested in. |
| @@ -986,7 +1006,7 @@ static int class_attr_add(struct class_device *classdev, | |||
| 986 | attr->store = base_attr->store; | 1006 | attr->store = base_attr->store; |
| 987 | } | 1007 | } |
| 988 | 1008 | ||
| 989 | return class_device_create_file(classdev, attr); | 1009 | return device_create_file(classdev, attr); |
| 990 | } | 1010 | } |
| 991 | 1011 | ||
| 992 | /** | 1012 | /** |
| @@ -1000,7 +1020,7 @@ int scsi_sysfs_add_host(struct Scsi_Host *shost) | |||
| 1000 | 1020 | ||
| 1001 | if (shost->hostt->shost_attrs) { | 1021 | if (shost->hostt->shost_attrs) { |
| 1002 | for (i = 0; shost->hostt->shost_attrs[i]; i++) { | 1022 | for (i = 0; shost->hostt->shost_attrs[i]; i++) { |
| 1003 | error = class_attr_add(&shost->shost_classdev, | 1023 | error = class_attr_add(&shost->shost_dev, |
| 1004 | shost->hostt->shost_attrs[i]); | 1024 | shost->hostt->shost_attrs[i]); |
| 1005 | if (error) | 1025 | if (error) |
| 1006 | return error; | 1026 | return error; |
| @@ -1010,7 +1030,7 @@ int scsi_sysfs_add_host(struct Scsi_Host *shost) | |||
| 1010 | for (i = 0; scsi_sysfs_shost_attrs[i]; i++) { | 1030 | for (i = 0; scsi_sysfs_shost_attrs[i]; i++) { |
| 1011 | if (!class_attr_overridden(shost->hostt->shost_attrs, | 1031 | if (!class_attr_overridden(shost->hostt->shost_attrs, |
| 1012 | scsi_sysfs_shost_attrs[i])) { | 1032 | scsi_sysfs_shost_attrs[i])) { |
| 1013 | error = class_device_create_file(&shost->shost_classdev, | 1033 | error = device_create_file(&shost->shost_dev, |
| 1014 | scsi_sysfs_shost_attrs[i]); | 1034 | scsi_sysfs_shost_attrs[i]); |
| 1015 | if (error) | 1035 | if (error) |
| 1016 | return error; | 1036 | return error; |
| @@ -1041,10 +1061,10 @@ void scsi_sysfs_device_initialize(struct scsi_device *sdev) | |||
| 1041 | sdev->host->host_no, sdev->channel, sdev->id, | 1061 | sdev->host->host_no, sdev->channel, sdev->id, |
| 1042 | sdev->lun); | 1062 | sdev->lun); |
| 1043 | 1063 | ||
| 1044 | class_device_initialize(&sdev->sdev_classdev); | 1064 | device_initialize(&sdev->sdev_dev); |
| 1045 | sdev->sdev_classdev.dev = &sdev->sdev_gendev; | 1065 | sdev->sdev_dev.parent = &sdev->sdev_gendev; |
| 1046 | sdev->sdev_classdev.class = &sdev_class; | 1066 | sdev->sdev_dev.class = &sdev_class; |
| 1047 | snprintf(sdev->sdev_classdev.class_id, BUS_ID_SIZE, | 1067 | snprintf(sdev->sdev_dev.bus_id, BUS_ID_SIZE, |
| 1048 | "%d:%d:%d:%d", sdev->host->host_no, | 1068 | "%d:%d:%d:%d", sdev->host->host_no, |
| 1049 | sdev->channel, sdev->id, sdev->lun); | 1069 | sdev->channel, sdev->id, sdev->lun); |
| 1050 | sdev->scsi_level = starget->scsi_level; | 1070 | sdev->scsi_level = starget->scsi_level; |
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index b1119da6e88c..6b092a6c295d 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c | |||
| @@ -72,8 +72,8 @@ static int fc_vport_create(struct Scsi_Host *shost, int channel, | |||
| 72 | * Redefine so that we can have same named attributes in the | 72 | * Redefine so that we can have same named attributes in the |
| 73 | * sdev/starget/host objects. | 73 | * sdev/starget/host objects. |
| 74 | */ | 74 | */ |
| 75 | #define FC_CLASS_DEVICE_ATTR(_prefix,_name,_mode,_show,_store) \ | 75 | #define FC_DEVICE_ATTR(_prefix,_name,_mode,_show,_store) \ |
| 76 | struct class_device_attribute class_device_attr_##_prefix##_##_name = \ | 76 | struct device_attribute device_attr_##_prefix##_##_name = \ |
| 77 | __ATTR(_name,_mode,_show,_store) | 77 | __ATTR(_name,_mode,_show,_store) |
| 78 | 78 | ||
| 79 | #define fc_enum_name_search(title, table_type, table) \ | 79 | #define fc_enum_name_search(title, table_type, table) \ |
| @@ -326,26 +326,26 @@ struct fc_internal { | |||
| 326 | * part of the midlayer. As the remote port is specific to the | 326 | * part of the midlayer. As the remote port is specific to the |
| 327 | * fc transport, we must provide the attribute container. | 327 | * fc transport, we must provide the attribute container. |
| 328 | */ | 328 | */ |
| 329 | struct class_device_attribute private_starget_attrs[ | 329 | struct device_attribute private_starget_attrs[ |
| 330 | FC_STARGET_NUM_ATTRS]; | 330 | FC_STARGET_NUM_ATTRS]; |
| 331 | struct class_device_attribute *starget_attrs[FC_STARGET_NUM_ATTRS + 1]; | 331 | struct device_attribute *starget_attrs[FC_STARGET_NUM_ATTRS + 1]; |
| 332 | 332 | ||
| 333 | struct class_device_attribute private_host_attrs[FC_HOST_NUM_ATTRS]; | 333 | struct device_attribute private_host_attrs[FC_HOST_NUM_ATTRS]; |
| 334 | struct class_device_attribute *host_attrs[FC_HOST_NUM_ATTRS + 1]; | 334 | struct device_attribute *host_attrs[FC_HOST_NUM_ATTRS + 1]; |
| 335 | 335 | ||
| 336 | struct transport_container rport_attr_cont; | 336 | struct transport_container rport_attr_cont; |
| 337 | struct class_device_attribute private_rport_attrs[FC_RPORT_NUM_ATTRS]; | 337 | struct device_attribute private_rport_attrs[FC_RPORT_NUM_ATTRS]; |
| 338 | struct class_device_attribute *rport_attrs[FC_RPORT_NUM_ATTRS + 1]; | 338 | struct device_attribute *rport_attrs[FC_RPORT_NUM_ATTRS + 1]; |
| 339 | 339 | ||
| 340 | struct transport_container vport_attr_cont; | 340 | struct transport_container vport_attr_cont; |
| 341 | struct class_device_attribute private_vport_attrs[FC_VPORT_NUM_ATTRS]; | 341 | struct device_attribute private_vport_attrs[FC_VPORT_NUM_ATTRS]; |
| 342 | struct class_device_attribute *vport_attrs[FC_VPORT_NUM_ATTRS + 1]; | 342 | struct device_attribute *vport_attrs[FC_VPORT_NUM_ATTRS + 1]; |
| 343 | }; | 343 | }; |
| 344 | 344 | ||
| 345 | #define to_fc_internal(tmpl) container_of(tmpl, struct fc_internal, t) | 345 | #define to_fc_internal(tmpl) container_of(tmpl, struct fc_internal, t) |
| 346 | 346 | ||
| 347 | static int fc_target_setup(struct transport_container *tc, struct device *dev, | 347 | static int fc_target_setup(struct transport_container *tc, struct device *dev, |
| 348 | struct class_device *cdev) | 348 | struct device *cdev) |
| 349 | { | 349 | { |
| 350 | struct scsi_target *starget = to_scsi_target(dev); | 350 | struct scsi_target *starget = to_scsi_target(dev); |
| 351 | struct fc_rport *rport = starget_to_rport(starget); | 351 | struct fc_rport *rport = starget_to_rport(starget); |
| @@ -375,7 +375,7 @@ static DECLARE_TRANSPORT_CLASS(fc_transport_class, | |||
| 375 | NULL); | 375 | NULL); |
| 376 | 376 | ||
| 377 | static int fc_host_setup(struct transport_container *tc, struct device *dev, | 377 | static int fc_host_setup(struct transport_container *tc, struct device *dev, |
| 378 | struct class_device *cdev) | 378 | struct device *cdev) |
| 379 | { | 379 | { |
| 380 | struct Scsi_Host *shost = dev_to_shost(dev); | 380 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 381 | struct fc_host_attrs *fc_host = shost_to_fc_host(shost); | 381 | struct fc_host_attrs *fc_host = shost_to_fc_host(shost); |
| @@ -682,9 +682,10 @@ static void __exit fc_transport_exit(void) | |||
| 682 | 682 | ||
| 683 | #define fc_rport_show_function(field, format_string, sz, cast) \ | 683 | #define fc_rport_show_function(field, format_string, sz, cast) \ |
| 684 | static ssize_t \ | 684 | static ssize_t \ |
| 685 | show_fc_rport_##field (struct class_device *cdev, char *buf) \ | 685 | show_fc_rport_##field (struct device *dev, \ |
| 686 | struct device_attribute *attr, char *buf) \ | ||
| 686 | { \ | 687 | { \ |
| 687 | struct fc_rport *rport = transport_class_to_rport(cdev); \ | 688 | struct fc_rport *rport = transport_class_to_rport(dev); \ |
| 688 | struct Scsi_Host *shost = rport_to_shost(rport); \ | 689 | struct Scsi_Host *shost = rport_to_shost(rport); \ |
| 689 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 690 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 690 | if ((i->f->get_rport_##field) && \ | 691 | if ((i->f->get_rport_##field) && \ |
| @@ -697,11 +698,12 @@ show_fc_rport_##field (struct class_device *cdev, char *buf) \ | |||
| 697 | 698 | ||
| 698 | #define fc_rport_store_function(field) \ | 699 | #define fc_rport_store_function(field) \ |
| 699 | static ssize_t \ | 700 | static ssize_t \ |
| 700 | store_fc_rport_##field(struct class_device *cdev, const char *buf, \ | 701 | store_fc_rport_##field(struct device *dev, \ |
| 701 | size_t count) \ | 702 | struct device_attribute *attr, \ |
| 703 | const char *buf, size_t count) \ | ||
| 702 | { \ | 704 | { \ |
| 703 | int val; \ | 705 | int val; \ |
| 704 | struct fc_rport *rport = transport_class_to_rport(cdev); \ | 706 | struct fc_rport *rport = transport_class_to_rport(dev); \ |
| 705 | struct Scsi_Host *shost = rport_to_shost(rport); \ | 707 | struct Scsi_Host *shost = rport_to_shost(rport); \ |
| 706 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 708 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 707 | char *cp; \ | 709 | char *cp; \ |
| @@ -718,58 +720,60 @@ store_fc_rport_##field(struct class_device *cdev, const char *buf, \ | |||
| 718 | 720 | ||
| 719 | #define fc_rport_rd_attr(field, format_string, sz) \ | 721 | #define fc_rport_rd_attr(field, format_string, sz) \ |
| 720 | fc_rport_show_function(field, format_string, sz, ) \ | 722 | fc_rport_show_function(field, format_string, sz, ) \ |
| 721 | static FC_CLASS_DEVICE_ATTR(rport, field, S_IRUGO, \ | 723 | static FC_DEVICE_ATTR(rport, field, S_IRUGO, \ |
| 722 | show_fc_rport_##field, NULL) | 724 | show_fc_rport_##field, NULL) |
| 723 | 725 | ||
| 724 | #define fc_rport_rd_attr_cast(field, format_string, sz, cast) \ | 726 | #define fc_rport_rd_attr_cast(field, format_string, sz, cast) \ |
| 725 | fc_rport_show_function(field, format_string, sz, (cast)) \ | 727 | fc_rport_show_function(field, format_string, sz, (cast)) \ |
| 726 | static FC_CLASS_DEVICE_ATTR(rport, field, S_IRUGO, \ | 728 | static FC_DEVICE_ATTR(rport, field, S_IRUGO, \ |
| 727 | show_fc_rport_##field, NULL) | 729 | show_fc_rport_##field, NULL) |
| 728 | 730 | ||
| 729 | #define fc_rport_rw_attr(field, format_string, sz) \ | 731 | #define fc_rport_rw_attr(field, format_string, sz) \ |
| 730 | fc_rport_show_function(field, format_string, sz, ) \ | 732 | fc_rport_show_function(field, format_string, sz, ) \ |
| 731 | fc_rport_store_function(field) \ | 733 | fc_rport_store_function(field) \ |
| 732 | static FC_CLASS_DEVICE_ATTR(rport, field, S_IRUGO | S_IWUSR, \ | 734 | static FC_DEVICE_ATTR(rport, field, S_IRUGO | S_IWUSR, \ |
| 733 | show_fc_rport_##field, \ | 735 | show_fc_rport_##field, \ |
| 734 | store_fc_rport_##field) | 736 | store_fc_rport_##field) |
| 735 | 737 | ||
| 736 | 738 | ||
| 737 | #define fc_private_rport_show_function(field, format_string, sz, cast) \ | 739 | #define fc_private_rport_show_function(field, format_string, sz, cast) \ |
| 738 | static ssize_t \ | 740 | static ssize_t \ |
| 739 | show_fc_rport_##field (struct class_device *cdev, char *buf) \ | 741 | show_fc_rport_##field (struct device *dev, \ |
| 742 | struct device_attribute *attr, char *buf) \ | ||
| 740 | { \ | 743 | { \ |
| 741 | struct fc_rport *rport = transport_class_to_rport(cdev); \ | 744 | struct fc_rport *rport = transport_class_to_rport(dev); \ |
| 742 | return snprintf(buf, sz, format_string, cast rport->field); \ | 745 | return snprintf(buf, sz, format_string, cast rport->field); \ |
| 743 | } | 746 | } |
| 744 | 747 | ||
| 745 | #define fc_private_rport_rd_attr(field, format_string, sz) \ | 748 | #define fc_private_rport_rd_attr(field, format_string, sz) \ |
| 746 | fc_private_rport_show_function(field, format_string, sz, ) \ | 749 | fc_private_rport_show_function(field, format_string, sz, ) \ |
| 747 | static FC_CLASS_DEVICE_ATTR(rport, field, S_IRUGO, \ | 750 | static FC_DEVICE_ATTR(rport, field, S_IRUGO, \ |
| 748 | show_fc_rport_##field, NULL) | 751 | show_fc_rport_##field, NULL) |
| 749 | 752 | ||
| 750 | #define fc_private_rport_rd_attr_cast(field, format_string, sz, cast) \ | 753 | #define fc_private_rport_rd_attr_cast(field, format_string, sz, cast) \ |
| 751 | fc_private_rport_show_function(field, format_string, sz, (cast)) \ | 754 | fc_private_rport_show_function(field, format_string, sz, (cast)) \ |
| 752 | static FC_CLASS_DEVICE_ATTR(rport, field, S_IRUGO, \ | 755 | static FC_DEVICE_ATTR(rport, field, S_IRUGO, \ |
| 753 | show_fc_rport_##field, NULL) | 756 | show_fc_rport_##field, NULL) |
| 754 | 757 | ||
| 755 | 758 | ||
| 756 | #define fc_private_rport_rd_enum_attr(title, maxlen) \ | 759 | #define fc_private_rport_rd_enum_attr(title, maxlen) \ |
| 757 | static ssize_t \ | 760 | static ssize_t \ |
| 758 | show_fc_rport_##title (struct class_device *cdev, char *buf) \ | 761 | show_fc_rport_##title (struct device *dev, \ |
| 762 | struct device_attribute *attr, char *buf) \ | ||
| 759 | { \ | 763 | { \ |
| 760 | struct fc_rport *rport = transport_class_to_rport(cdev); \ | 764 | struct fc_rport *rport = transport_class_to_rport(dev); \ |
| 761 | const char *name; \ | 765 | const char *name; \ |
| 762 | name = get_fc_##title##_name(rport->title); \ | 766 | name = get_fc_##title##_name(rport->title); \ |
| 763 | if (!name) \ | 767 | if (!name) \ |
| 764 | return -EINVAL; \ | 768 | return -EINVAL; \ |
| 765 | return snprintf(buf, maxlen, "%s\n", name); \ | 769 | return snprintf(buf, maxlen, "%s\n", name); \ |
| 766 | } \ | 770 | } \ |
| 767 | static FC_CLASS_DEVICE_ATTR(rport, title, S_IRUGO, \ | 771 | static FC_DEVICE_ATTR(rport, title, S_IRUGO, \ |
| 768 | show_fc_rport_##title, NULL) | 772 | show_fc_rport_##title, NULL) |
| 769 | 773 | ||
| 770 | 774 | ||
| 771 | #define SETUP_RPORT_ATTRIBUTE_RD(field) \ | 775 | #define SETUP_RPORT_ATTRIBUTE_RD(field) \ |
| 772 | i->private_rport_attrs[count] = class_device_attr_rport_##field; \ | 776 | i->private_rport_attrs[count] = device_attr_rport_##field; \ |
| 773 | i->private_rport_attrs[count].attr.mode = S_IRUGO; \ | 777 | i->private_rport_attrs[count].attr.mode = S_IRUGO; \ |
| 774 | i->private_rport_attrs[count].store = NULL; \ | 778 | i->private_rport_attrs[count].store = NULL; \ |
| 775 | i->rport_attrs[count] = &i->private_rport_attrs[count]; \ | 779 | i->rport_attrs[count] = &i->private_rport_attrs[count]; \ |
| @@ -777,14 +781,14 @@ static FC_CLASS_DEVICE_ATTR(rport, title, S_IRUGO, \ | |||
| 777 | count++ | 781 | count++ |
| 778 | 782 | ||
| 779 | #define SETUP_PRIVATE_RPORT_ATTRIBUTE_RD(field) \ | 783 | #define SETUP_PRIVATE_RPORT_ATTRIBUTE_RD(field) \ |
| 780 | i->private_rport_attrs[count] = class_device_attr_rport_##field; \ | 784 | i->private_rport_attrs[count] = device_attr_rport_##field; \ |
| 781 | i->private_rport_attrs[count].attr.mode = S_IRUGO; \ | 785 | i->private_rport_attrs[count].attr.mode = S_IRUGO; \ |
| 782 | i->private_rport_attrs[count].store = NULL; \ | 786 | i->private_rport_attrs[count].store = NULL; \ |
| 783 | i->rport_attrs[count] = &i->private_rport_attrs[count]; \ | 787 | i->rport_attrs[count] = &i->private_rport_attrs[count]; \ |
| 784 | count++ | 788 | count++ |
| 785 | 789 | ||
| 786 | #define SETUP_RPORT_ATTRIBUTE_RW(field) \ | 790 | #define SETUP_RPORT_ATTRIBUTE_RW(field) \ |
| 787 | i->private_rport_attrs[count] = class_device_attr_rport_##field; \ | 791 | i->private_rport_attrs[count] = device_attr_rport_##field; \ |
| 788 | if (!i->f->set_rport_##field) { \ | 792 | if (!i->f->set_rport_##field) { \ |
| 789 | i->private_rport_attrs[count].attr.mode = S_IRUGO; \ | 793 | i->private_rport_attrs[count].attr.mode = S_IRUGO; \ |
| 790 | i->private_rport_attrs[count].store = NULL; \ | 794 | i->private_rport_attrs[count].store = NULL; \ |
| @@ -795,7 +799,7 @@ static FC_CLASS_DEVICE_ATTR(rport, title, S_IRUGO, \ | |||
| 795 | 799 | ||
| 796 | #define SETUP_PRIVATE_RPORT_ATTRIBUTE_RW(field) \ | 800 | #define SETUP_PRIVATE_RPORT_ATTRIBUTE_RW(field) \ |
| 797 | { \ | 801 | { \ |
| 798 | i->private_rport_attrs[count] = class_device_attr_rport_##field; \ | 802 | i->private_rport_attrs[count] = device_attr_rport_##field; \ |
| 799 | i->rport_attrs[count] = &i->private_rport_attrs[count]; \ | 803 | i->rport_attrs[count] = &i->private_rport_attrs[count]; \ |
| 800 | count++; \ | 804 | count++; \ |
| 801 | } | 805 | } |
| @@ -808,14 +812,15 @@ static FC_CLASS_DEVICE_ATTR(rport, title, S_IRUGO, \ | |||
| 808 | fc_private_rport_rd_attr(maxframe_size, "%u bytes\n", 20); | 812 | fc_private_rport_rd_attr(maxframe_size, "%u bytes\n", 20); |
| 809 | 813 | ||
| 810 | static ssize_t | 814 | static ssize_t |
| 811 | show_fc_rport_supported_classes (struct class_device *cdev, char *buf) | 815 | show_fc_rport_supported_classes (struct device *dev, |
| 816 | struct device_attribute *attr, char *buf) | ||
| 812 | { | 817 | { |
| 813 | struct fc_rport *rport = transport_class_to_rport(cdev); | 818 | struct fc_rport *rport = transport_class_to_rport(dev); |
| 814 | if (rport->supported_classes == FC_COS_UNSPECIFIED) | 819 | if (rport->supported_classes == FC_COS_UNSPECIFIED) |
| 815 | return snprintf(buf, 20, "unspecified\n"); | 820 | return snprintf(buf, 20, "unspecified\n"); |
| 816 | return get_fc_cos_names(rport->supported_classes, buf); | 821 | return get_fc_cos_names(rport->supported_classes, buf); |
| 817 | } | 822 | } |
| 818 | static FC_CLASS_DEVICE_ATTR(rport, supported_classes, S_IRUGO, | 823 | static FC_DEVICE_ATTR(rport, supported_classes, S_IRUGO, |
| 819 | show_fc_rport_supported_classes, NULL); | 824 | show_fc_rport_supported_classes, NULL); |
| 820 | 825 | ||
| 821 | /* Dynamic Remote Port Attributes */ | 826 | /* Dynamic Remote Port Attributes */ |
| @@ -825,11 +830,11 @@ static FC_CLASS_DEVICE_ATTR(rport, supported_classes, S_IRUGO, | |||
| 825 | */ | 830 | */ |
| 826 | fc_rport_show_function(dev_loss_tmo, "%d\n", 20, ) | 831 | fc_rport_show_function(dev_loss_tmo, "%d\n", 20, ) |
| 827 | static ssize_t | 832 | static ssize_t |
| 828 | store_fc_rport_dev_loss_tmo(struct class_device *cdev, const char *buf, | 833 | store_fc_rport_dev_loss_tmo(struct device *dev, struct device_attribute *attr, |
| 829 | size_t count) | 834 | const char *buf, size_t count) |
| 830 | { | 835 | { |
| 831 | int val; | 836 | int val; |
| 832 | struct fc_rport *rport = transport_class_to_rport(cdev); | 837 | struct fc_rport *rport = transport_class_to_rport(dev); |
| 833 | struct Scsi_Host *shost = rport_to_shost(rport); | 838 | struct Scsi_Host *shost = rport_to_shost(rport); |
| 834 | struct fc_internal *i = to_fc_internal(shost->transportt); | 839 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 835 | char *cp; | 840 | char *cp; |
| @@ -844,7 +849,7 @@ store_fc_rport_dev_loss_tmo(struct class_device *cdev, const char *buf, | |||
| 844 | i->f->set_rport_dev_loss_tmo(rport, val); | 849 | i->f->set_rport_dev_loss_tmo(rport, val); |
| 845 | return count; | 850 | return count; |
| 846 | } | 851 | } |
| 847 | static FC_CLASS_DEVICE_ATTR(rport, dev_loss_tmo, S_IRUGO | S_IWUSR, | 852 | static FC_DEVICE_ATTR(rport, dev_loss_tmo, S_IRUGO | S_IWUSR, |
| 848 | show_fc_rport_dev_loss_tmo, store_fc_rport_dev_loss_tmo); | 853 | show_fc_rport_dev_loss_tmo, store_fc_rport_dev_loss_tmo); |
| 849 | 854 | ||
| 850 | 855 | ||
| @@ -855,9 +860,10 @@ fc_private_rport_rd_attr_cast(port_name, "0x%llx\n", 20, unsigned long long); | |||
| 855 | fc_private_rport_rd_attr(port_id, "0x%06x\n", 20); | 860 | fc_private_rport_rd_attr(port_id, "0x%06x\n", 20); |
| 856 | 861 | ||
| 857 | static ssize_t | 862 | static ssize_t |
| 858 | show_fc_rport_roles (struct class_device *cdev, char *buf) | 863 | show_fc_rport_roles (struct device *dev, struct device_attribute *attr, |
| 864 | char *buf) | ||
| 859 | { | 865 | { |
| 860 | struct fc_rport *rport = transport_class_to_rport(cdev); | 866 | struct fc_rport *rport = transport_class_to_rport(dev); |
| 861 | 867 | ||
| 862 | /* identify any roles that are port_id specific */ | 868 | /* identify any roles that are port_id specific */ |
| 863 | if ((rport->port_id != -1) && | 869 | if ((rport->port_id != -1) && |
| @@ -883,7 +889,7 @@ show_fc_rport_roles (struct class_device *cdev, char *buf) | |||
| 883 | return get_fc_port_roles_names(rport->roles, buf); | 889 | return get_fc_port_roles_names(rport->roles, buf); |
| 884 | } | 890 | } |
| 885 | } | 891 | } |
| 886 | static FC_CLASS_DEVICE_ATTR(rport, roles, S_IRUGO, | 892 | static FC_DEVICE_ATTR(rport, roles, S_IRUGO, |
| 887 | show_fc_rport_roles, NULL); | 893 | show_fc_rport_roles, NULL); |
| 888 | 894 | ||
| 889 | fc_private_rport_rd_enum_attr(port_state, FC_PORTSTATE_MAX_NAMELEN); | 895 | fc_private_rport_rd_enum_attr(port_state, FC_PORTSTATE_MAX_NAMELEN); |
| @@ -893,9 +899,10 @@ fc_private_rport_rd_attr(scsi_target_id, "%d\n", 20); | |||
| 893 | * fast_io_fail_tmo attribute | 899 | * fast_io_fail_tmo attribute |
| 894 | */ | 900 | */ |
| 895 | static ssize_t | 901 | static ssize_t |
| 896 | show_fc_rport_fast_io_fail_tmo (struct class_device *cdev, char *buf) | 902 | show_fc_rport_fast_io_fail_tmo (struct device *dev, |
| 903 | struct device_attribute *attr, char *buf) | ||
| 897 | { | 904 | { |
| 898 | struct fc_rport *rport = transport_class_to_rport(cdev); | 905 | struct fc_rport *rport = transport_class_to_rport(dev); |
| 899 | 906 | ||
| 900 | if (rport->fast_io_fail_tmo == -1) | 907 | if (rport->fast_io_fail_tmo == -1) |
| 901 | return snprintf(buf, 5, "off\n"); | 908 | return snprintf(buf, 5, "off\n"); |
| @@ -903,12 +910,13 @@ show_fc_rport_fast_io_fail_tmo (struct class_device *cdev, char *buf) | |||
| 903 | } | 910 | } |
| 904 | 911 | ||
| 905 | static ssize_t | 912 | static ssize_t |
| 906 | store_fc_rport_fast_io_fail_tmo(struct class_device *cdev, const char *buf, | 913 | store_fc_rport_fast_io_fail_tmo(struct device *dev, |
| 907 | size_t count) | 914 | struct device_attribute *attr, const char *buf, |
| 915 | size_t count) | ||
| 908 | { | 916 | { |
| 909 | int val; | 917 | int val; |
| 910 | char *cp; | 918 | char *cp; |
| 911 | struct fc_rport *rport = transport_class_to_rport(cdev); | 919 | struct fc_rport *rport = transport_class_to_rport(dev); |
| 912 | 920 | ||
| 913 | if ((rport->port_state == FC_PORTSTATE_BLOCKED) || | 921 | if ((rport->port_state == FC_PORTSTATE_BLOCKED) || |
| 914 | (rport->port_state == FC_PORTSTATE_DELETED) || | 922 | (rport->port_state == FC_PORTSTATE_DELETED) || |
| @@ -925,7 +933,7 @@ store_fc_rport_fast_io_fail_tmo(struct class_device *cdev, const char *buf, | |||
| 925 | } | 933 | } |
| 926 | return count; | 934 | return count; |
| 927 | } | 935 | } |
| 928 | static FC_CLASS_DEVICE_ATTR(rport, fast_io_fail_tmo, S_IRUGO | S_IWUSR, | 936 | static FC_DEVICE_ATTR(rport, fast_io_fail_tmo, S_IRUGO | S_IWUSR, |
| 929 | show_fc_rport_fast_io_fail_tmo, store_fc_rport_fast_io_fail_tmo); | 937 | show_fc_rport_fast_io_fail_tmo, store_fc_rport_fast_io_fail_tmo); |
| 930 | 938 | ||
| 931 | 939 | ||
| @@ -941,9 +949,10 @@ static FC_CLASS_DEVICE_ATTR(rport, fast_io_fail_tmo, S_IRUGO | S_IWUSR, | |||
| 941 | */ | 949 | */ |
| 942 | #define fc_starget_show_function(field, format_string, sz, cast) \ | 950 | #define fc_starget_show_function(field, format_string, sz, cast) \ |
| 943 | static ssize_t \ | 951 | static ssize_t \ |
| 944 | show_fc_starget_##field (struct class_device *cdev, char *buf) \ | 952 | show_fc_starget_##field (struct device *dev, \ |
| 953 | struct device_attribute *attr, char *buf) \ | ||
| 945 | { \ | 954 | { \ |
| 946 | struct scsi_target *starget = transport_class_to_starget(cdev); \ | 955 | struct scsi_target *starget = transport_class_to_starget(dev); \ |
| 947 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ | 956 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ |
| 948 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 957 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 949 | struct fc_rport *rport = starget_to_rport(starget); \ | 958 | struct fc_rport *rport = starget_to_rport(starget); \ |
| @@ -957,16 +966,16 @@ show_fc_starget_##field (struct class_device *cdev, char *buf) \ | |||
| 957 | 966 | ||
| 958 | #define fc_starget_rd_attr(field, format_string, sz) \ | 967 | #define fc_starget_rd_attr(field, format_string, sz) \ |
| 959 | fc_starget_show_function(field, format_string, sz, ) \ | 968 | fc_starget_show_function(field, format_string, sz, ) \ |
| 960 | static FC_CLASS_DEVICE_ATTR(starget, field, S_IRUGO, \ | 969 | static FC_DEVICE_ATTR(starget, field, S_IRUGO, \ |
| 961 | show_fc_starget_##field, NULL) | 970 | show_fc_starget_##field, NULL) |
| 962 | 971 | ||
| 963 | #define fc_starget_rd_attr_cast(field, format_string, sz, cast) \ | 972 | #define fc_starget_rd_attr_cast(field, format_string, sz, cast) \ |
| 964 | fc_starget_show_function(field, format_string, sz, (cast)) \ | 973 | fc_starget_show_function(field, format_string, sz, (cast)) \ |
| 965 | static FC_CLASS_DEVICE_ATTR(starget, field, S_IRUGO, \ | 974 | static FC_DEVICE_ATTR(starget, field, S_IRUGO, \ |
| 966 | show_fc_starget_##field, NULL) | 975 | show_fc_starget_##field, NULL) |
| 967 | 976 | ||
| 968 | #define SETUP_STARGET_ATTRIBUTE_RD(field) \ | 977 | #define SETUP_STARGET_ATTRIBUTE_RD(field) \ |
| 969 | i->private_starget_attrs[count] = class_device_attr_starget_##field; \ | 978 | i->private_starget_attrs[count] = device_attr_starget_##field; \ |
| 970 | i->private_starget_attrs[count].attr.mode = S_IRUGO; \ | 979 | i->private_starget_attrs[count].attr.mode = S_IRUGO; \ |
| 971 | i->private_starget_attrs[count].store = NULL; \ | 980 | i->private_starget_attrs[count].store = NULL; \ |
| 972 | i->starget_attrs[count] = &i->private_starget_attrs[count]; \ | 981 | i->starget_attrs[count] = &i->private_starget_attrs[count]; \ |
| @@ -974,7 +983,7 @@ static FC_CLASS_DEVICE_ATTR(starget, field, S_IRUGO, \ | |||
| 974 | count++ | 983 | count++ |
| 975 | 984 | ||
| 976 | #define SETUP_STARGET_ATTRIBUTE_RW(field) \ | 985 | #define SETUP_STARGET_ATTRIBUTE_RW(field) \ |
| 977 | i->private_starget_attrs[count] = class_device_attr_starget_##field; \ | 986 | i->private_starget_attrs[count] = device_attr_starget_##field; \ |
| 978 | if (!i->f->set_starget_##field) { \ | 987 | if (!i->f->set_starget_##field) { \ |
| 979 | i->private_starget_attrs[count].attr.mode = S_IRUGO; \ | 988 | i->private_starget_attrs[count].attr.mode = S_IRUGO; \ |
| 980 | i->private_starget_attrs[count].store = NULL; \ | 989 | i->private_starget_attrs[count].store = NULL; \ |
| @@ -995,9 +1004,10 @@ fc_starget_rd_attr(port_id, "0x%06x\n", 20); | |||
| 995 | 1004 | ||
| 996 | #define fc_vport_show_function(field, format_string, sz, cast) \ | 1005 | #define fc_vport_show_function(field, format_string, sz, cast) \ |
| 997 | static ssize_t \ | 1006 | static ssize_t \ |
| 998 | show_fc_vport_##field (struct class_device *cdev, char *buf) \ | 1007 | show_fc_vport_##field (struct device *dev, \ |
| 1008 | struct device_attribute *attr, char *buf) \ | ||
| 999 | { \ | 1009 | { \ |
| 1000 | struct fc_vport *vport = transport_class_to_vport(cdev); \ | 1010 | struct fc_vport *vport = transport_class_to_vport(dev); \ |
| 1001 | struct Scsi_Host *shost = vport_to_shost(vport); \ | 1011 | struct Scsi_Host *shost = vport_to_shost(vport); \ |
| 1002 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1012 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1003 | if ((i->f->get_vport_##field) && \ | 1013 | if ((i->f->get_vport_##field) && \ |
| @@ -1008,11 +1018,12 @@ show_fc_vport_##field (struct class_device *cdev, char *buf) \ | |||
| 1008 | 1018 | ||
| 1009 | #define fc_vport_store_function(field) \ | 1019 | #define fc_vport_store_function(field) \ |
| 1010 | static ssize_t \ | 1020 | static ssize_t \ |
| 1011 | store_fc_vport_##field(struct class_device *cdev, const char *buf, \ | 1021 | store_fc_vport_##field(struct device *dev, \ |
| 1012 | size_t count) \ | 1022 | struct device_attribute *attr, \ |
| 1023 | const char *buf, size_t count) \ | ||
| 1013 | { \ | 1024 | { \ |
| 1014 | int val; \ | 1025 | int val; \ |
| 1015 | struct fc_vport *vport = transport_class_to_vport(cdev); \ | 1026 | struct fc_vport *vport = transport_class_to_vport(dev); \ |
| 1016 | struct Scsi_Host *shost = vport_to_shost(vport); \ | 1027 | struct Scsi_Host *shost = vport_to_shost(vport); \ |
| 1017 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1028 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1018 | char *cp; \ | 1029 | char *cp; \ |
| @@ -1027,10 +1038,11 @@ store_fc_vport_##field(struct class_device *cdev, const char *buf, \ | |||
| 1027 | 1038 | ||
| 1028 | #define fc_vport_store_str_function(field, slen) \ | 1039 | #define fc_vport_store_str_function(field, slen) \ |
| 1029 | static ssize_t \ | 1040 | static ssize_t \ |
| 1030 | store_fc_vport_##field(struct class_device *cdev, const char *buf, \ | 1041 | store_fc_vport_##field(struct device *dev, \ |
| 1031 | size_t count) \ | 1042 | struct device_attribute *attr, \ |
| 1043 | const char *buf, size_t count) \ | ||
| 1032 | { \ | 1044 | { \ |
| 1033 | struct fc_vport *vport = transport_class_to_vport(cdev); \ | 1045 | struct fc_vport *vport = transport_class_to_vport(dev); \ |
| 1034 | struct Scsi_Host *shost = vport_to_shost(vport); \ | 1046 | struct Scsi_Host *shost = vport_to_shost(vport); \ |
| 1035 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1047 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1036 | unsigned int cnt=count; \ | 1048 | unsigned int cnt=count; \ |
| @@ -1047,36 +1059,38 @@ store_fc_vport_##field(struct class_device *cdev, const char *buf, \ | |||
| 1047 | 1059 | ||
| 1048 | #define fc_vport_rd_attr(field, format_string, sz) \ | 1060 | #define fc_vport_rd_attr(field, format_string, sz) \ |
| 1049 | fc_vport_show_function(field, format_string, sz, ) \ | 1061 | fc_vport_show_function(field, format_string, sz, ) \ |
| 1050 | static FC_CLASS_DEVICE_ATTR(vport, field, S_IRUGO, \ | 1062 | static FC_DEVICE_ATTR(vport, field, S_IRUGO, \ |
| 1051 | show_fc_vport_##field, NULL) | 1063 | show_fc_vport_##field, NULL) |
| 1052 | 1064 | ||
| 1053 | #define fc_vport_rd_attr_cast(field, format_string, sz, cast) \ | 1065 | #define fc_vport_rd_attr_cast(field, format_string, sz, cast) \ |
| 1054 | fc_vport_show_function(field, format_string, sz, (cast)) \ | 1066 | fc_vport_show_function(field, format_string, sz, (cast)) \ |
| 1055 | static FC_CLASS_DEVICE_ATTR(vport, field, S_IRUGO, \ | 1067 | static FC_DEVICE_ATTR(vport, field, S_IRUGO, \ |
| 1056 | show_fc_vport_##field, NULL) | 1068 | show_fc_vport_##field, NULL) |
| 1057 | 1069 | ||
| 1058 | #define fc_vport_rw_attr(field, format_string, sz) \ | 1070 | #define fc_vport_rw_attr(field, format_string, sz) \ |
| 1059 | fc_vport_show_function(field, format_string, sz, ) \ | 1071 | fc_vport_show_function(field, format_string, sz, ) \ |
| 1060 | fc_vport_store_function(field) \ | 1072 | fc_vport_store_function(field) \ |
| 1061 | static FC_CLASS_DEVICE_ATTR(vport, field, S_IRUGO | S_IWUSR, \ | 1073 | static FC_DEVICE_ATTR(vport, field, S_IRUGO | S_IWUSR, \ |
| 1062 | show_fc_vport_##field, \ | 1074 | show_fc_vport_##field, \ |
| 1063 | store_fc_vport_##field) | 1075 | store_fc_vport_##field) |
| 1064 | 1076 | ||
| 1065 | #define fc_private_vport_show_function(field, format_string, sz, cast) \ | 1077 | #define fc_private_vport_show_function(field, format_string, sz, cast) \ |
| 1066 | static ssize_t \ | 1078 | static ssize_t \ |
| 1067 | show_fc_vport_##field (struct class_device *cdev, char *buf) \ | 1079 | show_fc_vport_##field (struct device *dev, \ |
| 1080 | struct device_attribute *attr, char *buf) \ | ||
| 1068 | { \ | 1081 | { \ |
| 1069 | struct fc_vport *vport = transport_class_to_vport(cdev); \ | 1082 | struct fc_vport *vport = transport_class_to_vport(dev); \ |
| 1070 | return snprintf(buf, sz, format_string, cast vport->field); \ | 1083 | return snprintf(buf, sz, format_string, cast vport->field); \ |
| 1071 | } | 1084 | } |
| 1072 | 1085 | ||
| 1073 | #define fc_private_vport_store_u32_function(field) \ | 1086 | #define fc_private_vport_store_u32_function(field) \ |
| 1074 | static ssize_t \ | 1087 | static ssize_t \ |
| 1075 | store_fc_vport_##field(struct class_device *cdev, const char *buf, \ | 1088 | store_fc_vport_##field(struct device *dev, \ |
| 1076 | size_t count) \ | 1089 | struct device_attribute *attr, \ |
| 1090 | const char *buf, size_t count) \ | ||
| 1077 | { \ | 1091 | { \ |
| 1078 | u32 val; \ | 1092 | u32 val; \ |
| 1079 | struct fc_vport *vport = transport_class_to_vport(cdev); \ | 1093 | struct fc_vport *vport = transport_class_to_vport(dev); \ |
| 1080 | char *cp; \ | 1094 | char *cp; \ |
| 1081 | if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) \ | 1095 | if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) \ |
| 1082 | return -EBUSY; \ | 1096 | return -EBUSY; \ |
| @@ -1090,39 +1104,41 @@ store_fc_vport_##field(struct class_device *cdev, const char *buf, \ | |||
| 1090 | 1104 | ||
| 1091 | #define fc_private_vport_rd_attr(field, format_string, sz) \ | 1105 | #define fc_private_vport_rd_attr(field, format_string, sz) \ |
| 1092 | fc_private_vport_show_function(field, format_string, sz, ) \ | 1106 | fc_private_vport_show_function(field, format_string, sz, ) \ |
| 1093 | static FC_CLASS_DEVICE_ATTR(vport, field, S_IRUGO, \ | 1107 | static FC_DEVICE_ATTR(vport, field, S_IRUGO, \ |
| 1094 | show_fc_vport_##field, NULL) | 1108 | show_fc_vport_##field, NULL) |
| 1095 | 1109 | ||
| 1096 | #define fc_private_vport_rd_attr_cast(field, format_string, sz, cast) \ | 1110 | #define fc_private_vport_rd_attr_cast(field, format_string, sz, cast) \ |
| 1097 | fc_private_vport_show_function(field, format_string, sz, (cast)) \ | 1111 | fc_private_vport_show_function(field, format_string, sz, (cast)) \ |
| 1098 | static FC_CLASS_DEVICE_ATTR(vport, field, S_IRUGO, \ | 1112 | static FC_DEVICE_ATTR(vport, field, S_IRUGO, \ |
| 1099 | show_fc_vport_##field, NULL) | 1113 | show_fc_vport_##field, NULL) |
| 1100 | 1114 | ||
| 1101 | #define fc_private_vport_rw_u32_attr(field, format_string, sz) \ | 1115 | #define fc_private_vport_rw_u32_attr(field, format_string, sz) \ |
| 1102 | fc_private_vport_show_function(field, format_string, sz, ) \ | 1116 | fc_private_vport_show_function(field, format_string, sz, ) \ |
| 1103 | fc_private_vport_store_u32_function(field) \ | 1117 | fc_private_vport_store_u32_function(field) \ |
| 1104 | static FC_CLASS_DEVICE_ATTR(vport, field, S_IRUGO | S_IWUSR, \ | 1118 | static FC_DEVICE_ATTR(vport, field, S_IRUGO | S_IWUSR, \ |
| 1105 | show_fc_vport_##field, \ | 1119 | show_fc_vport_##field, \ |
| 1106 | store_fc_vport_##field) | 1120 | store_fc_vport_##field) |
| 1107 | 1121 | ||
| 1108 | 1122 | ||
| 1109 | #define fc_private_vport_rd_enum_attr(title, maxlen) \ | 1123 | #define fc_private_vport_rd_enum_attr(title, maxlen) \ |
| 1110 | static ssize_t \ | 1124 | static ssize_t \ |
| 1111 | show_fc_vport_##title (struct class_device *cdev, char *buf) \ | 1125 | show_fc_vport_##title (struct device *dev, \ |
| 1126 | struct device_attribute *attr, \ | ||
| 1127 | char *buf) \ | ||
| 1112 | { \ | 1128 | { \ |
| 1113 | struct fc_vport *vport = transport_class_to_vport(cdev); \ | 1129 | struct fc_vport *vport = transport_class_to_vport(dev); \ |
| 1114 | const char *name; \ | 1130 | const char *name; \ |
| 1115 | name = get_fc_##title##_name(vport->title); \ | 1131 | name = get_fc_##title##_name(vport->title); \ |
| 1116 | if (!name) \ | 1132 | if (!name) \ |
| 1117 | return -EINVAL; \ | 1133 | return -EINVAL; \ |
| 1118 | return snprintf(buf, maxlen, "%s\n", name); \ | 1134 | return snprintf(buf, maxlen, "%s\n", name); \ |
| 1119 | } \ | 1135 | } \ |
| 1120 | static FC_CLASS_DEVICE_ATTR(vport, title, S_IRUGO, \ | 1136 | static FC_DEVICE_ATTR(vport, title, S_IRUGO, \ |
| 1121 | show_fc_vport_##title, NULL) | 1137 | show_fc_vport_##title, NULL) |
| 1122 | 1138 | ||
| 1123 | 1139 | ||
| 1124 | #define SETUP_VPORT_ATTRIBUTE_RD(field) \ | 1140 | #define SETUP_VPORT_ATTRIBUTE_RD(field) \ |
| 1125 | i->private_vport_attrs[count] = class_device_attr_vport_##field; \ | 1141 | i->private_vport_attrs[count] = device_attr_vport_##field; \ |
| 1126 | i->private_vport_attrs[count].attr.mode = S_IRUGO; \ | 1142 | i->private_vport_attrs[count].attr.mode = S_IRUGO; \ |
| 1127 | i->private_vport_attrs[count].store = NULL; \ | 1143 | i->private_vport_attrs[count].store = NULL; \ |
| 1128 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ | 1144 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ |
| @@ -1131,21 +1147,21 @@ static FC_CLASS_DEVICE_ATTR(vport, title, S_IRUGO, \ | |||
| 1131 | /* NOTE: Above MACRO differs: checks function not show bit */ | 1147 | /* NOTE: Above MACRO differs: checks function not show bit */ |
| 1132 | 1148 | ||
| 1133 | #define SETUP_PRIVATE_VPORT_ATTRIBUTE_RD(field) \ | 1149 | #define SETUP_PRIVATE_VPORT_ATTRIBUTE_RD(field) \ |
| 1134 | i->private_vport_attrs[count] = class_device_attr_vport_##field; \ | 1150 | i->private_vport_attrs[count] = device_attr_vport_##field; \ |
| 1135 | i->private_vport_attrs[count].attr.mode = S_IRUGO; \ | 1151 | i->private_vport_attrs[count].attr.mode = S_IRUGO; \ |
| 1136 | i->private_vport_attrs[count].store = NULL; \ | 1152 | i->private_vport_attrs[count].store = NULL; \ |
| 1137 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ | 1153 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ |
| 1138 | count++ | 1154 | count++ |
| 1139 | 1155 | ||
| 1140 | #define SETUP_VPORT_ATTRIBUTE_WR(field) \ | 1156 | #define SETUP_VPORT_ATTRIBUTE_WR(field) \ |
| 1141 | i->private_vport_attrs[count] = class_device_attr_vport_##field; \ | 1157 | i->private_vport_attrs[count] = device_attr_vport_##field; \ |
| 1142 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ | 1158 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ |
| 1143 | if (i->f->field) \ | 1159 | if (i->f->field) \ |
| 1144 | count++ | 1160 | count++ |
| 1145 | /* NOTE: Above MACRO differs: checks function */ | 1161 | /* NOTE: Above MACRO differs: checks function */ |
| 1146 | 1162 | ||
| 1147 | #define SETUP_VPORT_ATTRIBUTE_RW(field) \ | 1163 | #define SETUP_VPORT_ATTRIBUTE_RW(field) \ |
| 1148 | i->private_vport_attrs[count] = class_device_attr_vport_##field; \ | 1164 | i->private_vport_attrs[count] = device_attr_vport_##field; \ |
| 1149 | if (!i->f->set_vport_##field) { \ | 1165 | if (!i->f->set_vport_##field) { \ |
| 1150 | i->private_vport_attrs[count].attr.mode = S_IRUGO; \ | 1166 | i->private_vport_attrs[count].attr.mode = S_IRUGO; \ |
| 1151 | i->private_vport_attrs[count].store = NULL; \ | 1167 | i->private_vport_attrs[count].store = NULL; \ |
| @@ -1156,7 +1172,7 @@ static FC_CLASS_DEVICE_ATTR(vport, title, S_IRUGO, \ | |||
| 1156 | 1172 | ||
| 1157 | #define SETUP_PRIVATE_VPORT_ATTRIBUTE_RW(field) \ | 1173 | #define SETUP_PRIVATE_VPORT_ATTRIBUTE_RW(field) \ |
| 1158 | { \ | 1174 | { \ |
| 1159 | i->private_vport_attrs[count] = class_device_attr_vport_##field; \ | 1175 | i->private_vport_attrs[count] = device_attr_vport_##field; \ |
| 1160 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ | 1176 | i->vport_attrs[count] = &i->private_vport_attrs[count]; \ |
| 1161 | count++; \ | 1177 | count++; \ |
| 1162 | } | 1178 | } |
| @@ -1176,35 +1192,36 @@ fc_private_vport_rd_attr_cast(node_name, "0x%llx\n", 20, unsigned long long); | |||
| 1176 | fc_private_vport_rd_attr_cast(port_name, "0x%llx\n", 20, unsigned long long); | 1192 | fc_private_vport_rd_attr_cast(port_name, "0x%llx\n", 20, unsigned long long); |
| 1177 | 1193 | ||
| 1178 | static ssize_t | 1194 | static ssize_t |
| 1179 | show_fc_vport_roles (struct class_device *cdev, char *buf) | 1195 | show_fc_vport_roles (struct device *dev, struct device_attribute *attr, |
| 1196 | char *buf) | ||
| 1180 | { | 1197 | { |
| 1181 | struct fc_vport *vport = transport_class_to_vport(cdev); | 1198 | struct fc_vport *vport = transport_class_to_vport(dev); |
| 1182 | 1199 | ||
| 1183 | if (vport->roles == FC_PORT_ROLE_UNKNOWN) | 1200 | if (vport->roles == FC_PORT_ROLE_UNKNOWN) |
| 1184 | return snprintf(buf, 20, "unknown\n"); | 1201 | return snprintf(buf, 20, "unknown\n"); |
| 1185 | return get_fc_port_roles_names(vport->roles, buf); | 1202 | return get_fc_port_roles_names(vport->roles, buf); |
| 1186 | } | 1203 | } |
| 1187 | static FC_CLASS_DEVICE_ATTR(vport, roles, S_IRUGO, show_fc_vport_roles, NULL); | 1204 | static FC_DEVICE_ATTR(vport, roles, S_IRUGO, show_fc_vport_roles, NULL); |
| 1188 | 1205 | ||
| 1189 | fc_private_vport_rd_enum_attr(vport_type, FC_PORTTYPE_MAX_NAMELEN); | 1206 | fc_private_vport_rd_enum_attr(vport_type, FC_PORTTYPE_MAX_NAMELEN); |
| 1190 | 1207 | ||
| 1191 | fc_private_vport_show_function(symbolic_name, "%s\n", | 1208 | fc_private_vport_show_function(symbolic_name, "%s\n", |
| 1192 | FC_VPORT_SYMBOLIC_NAMELEN + 1, ) | 1209 | FC_VPORT_SYMBOLIC_NAMELEN + 1, ) |
| 1193 | fc_vport_store_str_function(symbolic_name, FC_VPORT_SYMBOLIC_NAMELEN) | 1210 | fc_vport_store_str_function(symbolic_name, FC_VPORT_SYMBOLIC_NAMELEN) |
| 1194 | static FC_CLASS_DEVICE_ATTR(vport, symbolic_name, S_IRUGO | S_IWUSR, | 1211 | static FC_DEVICE_ATTR(vport, symbolic_name, S_IRUGO | S_IWUSR, |
| 1195 | show_fc_vport_symbolic_name, store_fc_vport_symbolic_name); | 1212 | show_fc_vport_symbolic_name, store_fc_vport_symbolic_name); |
| 1196 | 1213 | ||
| 1197 | static ssize_t | 1214 | static ssize_t |
| 1198 | store_fc_vport_delete(struct class_device *cdev, const char *buf, | 1215 | store_fc_vport_delete(struct device *dev, struct device_attribute *attr, |
| 1199 | size_t count) | 1216 | const char *buf, size_t count) |
| 1200 | { | 1217 | { |
| 1201 | struct fc_vport *vport = transport_class_to_vport(cdev); | 1218 | struct fc_vport *vport = transport_class_to_vport(dev); |
| 1202 | struct Scsi_Host *shost = vport_to_shost(vport); | 1219 | struct Scsi_Host *shost = vport_to_shost(vport); |
| 1203 | 1220 | ||
| 1204 | fc_queue_work(shost, &vport->vport_delete_work); | 1221 | fc_queue_work(shost, &vport->vport_delete_work); |
| 1205 | return count; | 1222 | return count; |
| 1206 | } | 1223 | } |
| 1207 | static FC_CLASS_DEVICE_ATTR(vport, vport_delete, S_IWUSR, | 1224 | static FC_DEVICE_ATTR(vport, vport_delete, S_IWUSR, |
| 1208 | NULL, store_fc_vport_delete); | 1225 | NULL, store_fc_vport_delete); |
| 1209 | 1226 | ||
| 1210 | 1227 | ||
| @@ -1213,10 +1230,11 @@ static FC_CLASS_DEVICE_ATTR(vport, vport_delete, S_IWUSR, | |||
| 1213 | * Write "1" to disable, write "0" to enable | 1230 | * Write "1" to disable, write "0" to enable |
| 1214 | */ | 1231 | */ |
| 1215 | static ssize_t | 1232 | static ssize_t |
| 1216 | store_fc_vport_disable(struct class_device *cdev, const char *buf, | 1233 | store_fc_vport_disable(struct device *dev, struct device_attribute *attr, |
| 1234 | const char *buf, | ||
| 1217 | size_t count) | 1235 | size_t count) |
| 1218 | { | 1236 | { |
| 1219 | struct fc_vport *vport = transport_class_to_vport(cdev); | 1237 | struct fc_vport *vport = transport_class_to_vport(dev); |
| 1220 | struct Scsi_Host *shost = vport_to_shost(vport); | 1238 | struct Scsi_Host *shost = vport_to_shost(vport); |
| 1221 | struct fc_internal *i = to_fc_internal(shost->transportt); | 1239 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 1222 | int stat; | 1240 | int stat; |
| @@ -1236,7 +1254,7 @@ store_fc_vport_disable(struct class_device *cdev, const char *buf, | |||
| 1236 | stat = i->f->vport_disable(vport, ((*buf == '0') ? false : true)); | 1254 | stat = i->f->vport_disable(vport, ((*buf == '0') ? false : true)); |
| 1237 | return stat ? stat : count; | 1255 | return stat ? stat : count; |
| 1238 | } | 1256 | } |
| 1239 | static FC_CLASS_DEVICE_ATTR(vport, vport_disable, S_IWUSR, | 1257 | static FC_DEVICE_ATTR(vport, vport_disable, S_IWUSR, |
| 1240 | NULL, store_fc_vport_disable); | 1258 | NULL, store_fc_vport_disable); |
| 1241 | 1259 | ||
| 1242 | 1260 | ||
| @@ -1246,9 +1264,10 @@ static FC_CLASS_DEVICE_ATTR(vport, vport_disable, S_IWUSR, | |||
| 1246 | 1264 | ||
| 1247 | #define fc_host_show_function(field, format_string, sz, cast) \ | 1265 | #define fc_host_show_function(field, format_string, sz, cast) \ |
| 1248 | static ssize_t \ | 1266 | static ssize_t \ |
| 1249 | show_fc_host_##field (struct class_device *cdev, char *buf) \ | 1267 | show_fc_host_##field (struct device *dev, \ |
| 1268 | struct device_attribute *attr, char *buf) \ | ||
| 1250 | { \ | 1269 | { \ |
| 1251 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | 1270 | struct Scsi_Host *shost = transport_class_to_shost(dev); \ |
| 1252 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1271 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1253 | if (i->f->get_host_##field) \ | 1272 | if (i->f->get_host_##field) \ |
| 1254 | i->f->get_host_##field(shost); \ | 1273 | i->f->get_host_##field(shost); \ |
| @@ -1257,11 +1276,12 @@ show_fc_host_##field (struct class_device *cdev, char *buf) \ | |||
| 1257 | 1276 | ||
| 1258 | #define fc_host_store_function(field) \ | 1277 | #define fc_host_store_function(field) \ |
| 1259 | static ssize_t \ | 1278 | static ssize_t \ |
| 1260 | store_fc_host_##field(struct class_device *cdev, const char *buf, \ | 1279 | store_fc_host_##field(struct device *dev, \ |
| 1261 | size_t count) \ | 1280 | struct device_attribute *attr, \ |
| 1281 | const char *buf, size_t count) \ | ||
| 1262 | { \ | 1282 | { \ |
| 1263 | int val; \ | 1283 | int val; \ |
| 1264 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | 1284 | struct Scsi_Host *shost = transport_class_to_shost(dev); \ |
| 1265 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1285 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1266 | char *cp; \ | 1286 | char *cp; \ |
| 1267 | \ | 1287 | \ |
| @@ -1274,10 +1294,11 @@ store_fc_host_##field(struct class_device *cdev, const char *buf, \ | |||
| 1274 | 1294 | ||
| 1275 | #define fc_host_store_str_function(field, slen) \ | 1295 | #define fc_host_store_str_function(field, slen) \ |
| 1276 | static ssize_t \ | 1296 | static ssize_t \ |
| 1277 | store_fc_host_##field(struct class_device *cdev, const char *buf, \ | 1297 | store_fc_host_##field(struct device *dev, \ |
| 1278 | size_t count) \ | 1298 | struct device_attribute *attr, \ |
| 1299 | const char *buf, size_t count) \ | ||
| 1279 | { \ | 1300 | { \ |
| 1280 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | 1301 | struct Scsi_Host *shost = transport_class_to_shost(dev); \ |
| 1281 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1302 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1282 | unsigned int cnt=count; \ | 1303 | unsigned int cnt=count; \ |
| 1283 | \ | 1304 | \ |
| @@ -1293,26 +1314,27 @@ store_fc_host_##field(struct class_device *cdev, const char *buf, \ | |||
| 1293 | 1314 | ||
| 1294 | #define fc_host_rd_attr(field, format_string, sz) \ | 1315 | #define fc_host_rd_attr(field, format_string, sz) \ |
| 1295 | fc_host_show_function(field, format_string, sz, ) \ | 1316 | fc_host_show_function(field, format_string, sz, ) \ |
| 1296 | static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO, \ | 1317 | static FC_DEVICE_ATTR(host, field, S_IRUGO, \ |
| 1297 | show_fc_host_##field, NULL) | 1318 | show_fc_host_##field, NULL) |
| 1298 | 1319 | ||
| 1299 | #define fc_host_rd_attr_cast(field, format_string, sz, cast) \ | 1320 | #define fc_host_rd_attr_cast(field, format_string, sz, cast) \ |
| 1300 | fc_host_show_function(field, format_string, sz, (cast)) \ | 1321 | fc_host_show_function(field, format_string, sz, (cast)) \ |
| 1301 | static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO, \ | 1322 | static FC_DEVICE_ATTR(host, field, S_IRUGO, \ |
| 1302 | show_fc_host_##field, NULL) | 1323 | show_fc_host_##field, NULL) |
| 1303 | 1324 | ||
| 1304 | #define fc_host_rw_attr(field, format_string, sz) \ | 1325 | #define fc_host_rw_attr(field, format_string, sz) \ |
| 1305 | fc_host_show_function(field, format_string, sz, ) \ | 1326 | fc_host_show_function(field, format_string, sz, ) \ |
| 1306 | fc_host_store_function(field) \ | 1327 | fc_host_store_function(field) \ |
| 1307 | static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO | S_IWUSR, \ | 1328 | static FC_DEVICE_ATTR(host, field, S_IRUGO | S_IWUSR, \ |
| 1308 | show_fc_host_##field, \ | 1329 | show_fc_host_##field, \ |
| 1309 | store_fc_host_##field) | 1330 | store_fc_host_##field) |
| 1310 | 1331 | ||
| 1311 | #define fc_host_rd_enum_attr(title, maxlen) \ | 1332 | #define fc_host_rd_enum_attr(title, maxlen) \ |
| 1312 | static ssize_t \ | 1333 | static ssize_t \ |
| 1313 | show_fc_host_##title (struct class_device *cdev, char *buf) \ | 1334 | show_fc_host_##title (struct device *dev, \ |
| 1335 | struct device_attribute *attr, char *buf) \ | ||
| 1314 | { \ | 1336 | { \ |
| 1315 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | 1337 | struct Scsi_Host *shost = transport_class_to_shost(dev); \ |
| 1316 | struct fc_internal *i = to_fc_internal(shost->transportt); \ | 1338 | struct fc_internal *i = to_fc_internal(shost->transportt); \ |
| 1317 | const char *name; \ | 1339 | const char *name; \ |
| 1318 | if (i->f->get_host_##title) \ | 1340 | if (i->f->get_host_##title) \ |
| @@ -1322,10 +1344,10 @@ show_fc_host_##title (struct class_device *cdev, char *buf) \ | |||
| 1322 | return -EINVAL; \ | 1344 | return -EINVAL; \ |
| 1323 | return snprintf(buf, maxlen, "%s\n", name); \ | 1345 | return snprintf(buf, maxlen, "%s\n", name); \ |
| 1324 | } \ | 1346 | } \ |
| 1325 | static FC_CLASS_DEVICE_ATTR(host, title, S_IRUGO, show_fc_host_##title, NULL) | 1347 | static FC_DEVICE_ATTR(host, title, S_IRUGO, show_fc_host_##title, NULL) |
| 1326 | 1348 | ||
| 1327 | #define SETUP_HOST_ATTRIBUTE_RD(field) \ | 1349 | #define SETUP_HOST_ATTRIBUTE_RD(field) \ |
| 1328 | i->private_host_attrs[count] = class_device_attr_host_##field; \ | 1350 | i->private_host_attrs[count] = device_attr_host_##field; \ |
| 1329 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ | 1351 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ |
| 1330 | i->private_host_attrs[count].store = NULL; \ | 1352 | i->private_host_attrs[count].store = NULL; \ |
| 1331 | i->host_attrs[count] = &i->private_host_attrs[count]; \ | 1353 | i->host_attrs[count] = &i->private_host_attrs[count]; \ |
| @@ -1333,14 +1355,14 @@ static FC_CLASS_DEVICE_ATTR(host, title, S_IRUGO, show_fc_host_##title, NULL) | |||
| 1333 | count++ | 1355 | count++ |
| 1334 | 1356 | ||
| 1335 | #define SETUP_HOST_ATTRIBUTE_RD_NS(field) \ | 1357 | #define SETUP_HOST_ATTRIBUTE_RD_NS(field) \ |
| 1336 | i->private_host_attrs[count] = class_device_attr_host_##field; \ | 1358 | i->private_host_attrs[count] = device_attr_host_##field; \ |
| 1337 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ | 1359 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ |
| 1338 | i->private_host_attrs[count].store = NULL; \ | 1360 | i->private_host_attrs[count].store = NULL; \ |
| 1339 | i->host_attrs[count] = &i->private_host_attrs[count]; \ | 1361 | i->host_attrs[count] = &i->private_host_attrs[count]; \ |
| 1340 | count++ | 1362 | count++ |
| 1341 | 1363 | ||
| 1342 | #define SETUP_HOST_ATTRIBUTE_RW(field) \ | 1364 | #define SETUP_HOST_ATTRIBUTE_RW(field) \ |
| 1343 | i->private_host_attrs[count] = class_device_attr_host_##field; \ | 1365 | i->private_host_attrs[count] = device_attr_host_##field; \ |
| 1344 | if (!i->f->set_host_##field) { \ | 1366 | if (!i->f->set_host_##field) { \ |
| 1345 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ | 1367 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ |
| 1346 | i->private_host_attrs[count].store = NULL; \ | 1368 | i->private_host_attrs[count].store = NULL; \ |
| @@ -1352,24 +1374,25 @@ static FC_CLASS_DEVICE_ATTR(host, title, S_IRUGO, show_fc_host_##title, NULL) | |||
| 1352 | 1374 | ||
| 1353 | #define fc_private_host_show_function(field, format_string, sz, cast) \ | 1375 | #define fc_private_host_show_function(field, format_string, sz, cast) \ |
| 1354 | static ssize_t \ | 1376 | static ssize_t \ |
| 1355 | show_fc_host_##field (struct class_device *cdev, char *buf) \ | 1377 | show_fc_host_##field (struct device *dev, \ |
| 1378 | struct device_attribute *attr, char *buf) \ | ||
| 1356 | { \ | 1379 | { \ |
| 1357 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | 1380 | struct Scsi_Host *shost = transport_class_to_shost(dev); \ |
| 1358 | return snprintf(buf, sz, format_string, cast fc_host_##field(shost)); \ | 1381 | return snprintf(buf, sz, format_string, cast fc_host_##field(shost)); \ |
| 1359 | } | 1382 | } |
| 1360 | 1383 | ||
| 1361 | #define fc_private_host_rd_attr(field, format_string, sz) \ | 1384 | #define fc_private_host_rd_attr(field, format_string, sz) \ |
| 1362 | fc_private_host_show_function(field, format_string, sz, ) \ | 1385 | fc_private_host_show_function(field, format_string, sz, ) \ |
| 1363 | static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO, \ | 1386 | static FC_DEVICE_ATTR(host, field, S_IRUGO, \ |
| 1364 | show_fc_host_##field, NULL) | 1387 | show_fc_host_##field, NULL) |
| 1365 | 1388 | ||
| 1366 | #define fc_private_host_rd_attr_cast(field, format_string, sz, cast) \ | 1389 | #define fc_private_host_rd_attr_cast(field, format_string, sz, cast) \ |
| 1367 | fc_private_host_show_function(field, format_string, sz, (cast)) \ | 1390 | fc_private_host_show_function(field, format_string, sz, (cast)) \ |
| 1368 | static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO, \ | 1391 | static FC_DEVICE_ATTR(host, field, S_IRUGO, \ |
| 1369 | show_fc_host_##field, NULL) | 1392 | show_fc_host_##field, NULL) |
| 1370 | 1393 | ||
| 1371 | #define SETUP_PRIVATE_HOST_ATTRIBUTE_RD(field) \ | 1394 | #define SETUP_PRIVATE_HOST_ATTRIBUTE_RD(field) \ |
| 1372 | i->private_host_attrs[count] = class_device_attr_host_##field; \ | 1395 | i->private_host_attrs[count] = device_attr_host_##field; \ |
| 1373 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ | 1396 | i->private_host_attrs[count].attr.mode = S_IRUGO; \ |
| 1374 | i->private_host_attrs[count].store = NULL; \ | 1397 | i->private_host_attrs[count].store = NULL; \ |
| 1375 | i->host_attrs[count] = &i->private_host_attrs[count]; \ | 1398 | i->host_attrs[count] = &i->private_host_attrs[count]; \ |
| @@ -1377,7 +1400,7 @@ static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO, \ | |||
| 1377 | 1400 | ||
| 1378 | #define SETUP_PRIVATE_HOST_ATTRIBUTE_RW(field) \ | 1401 | #define SETUP_PRIVATE_HOST_ATTRIBUTE_RW(field) \ |
| 1379 | { \ | 1402 | { \ |
| 1380 | i->private_host_attrs[count] = class_device_attr_host_##field; \ | 1403 | i->private_host_attrs[count] = device_attr_host_##field; \ |
| 1381 | i->host_attrs[count] = &i->private_host_attrs[count]; \ | 1404 | i->host_attrs[count] = &i->private_host_attrs[count]; \ |
| 1382 | count++; \ | 1405 | count++; \ |
| 1383 | } | 1406 | } |
| @@ -1386,38 +1409,41 @@ static FC_CLASS_DEVICE_ATTR(host, field, S_IRUGO, \ | |||
| 1386 | /* Fixed Host Attributes */ | 1409 | /* Fixed Host Attributes */ |
| 1387 | 1410 | ||
| 1388 | static ssize_t | 1411 | static ssize_t |
| 1389 | show_fc_host_supported_classes (struct class_device *cdev, char *buf) | 1412 | show_fc_host_supported_classes (struct device *dev, |
| 1413 | struct device_attribute *attr, char *buf) | ||
| 1390 | { | 1414 | { |
| 1391 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1415 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1392 | 1416 | ||
| 1393 | if (fc_host_supported_classes(shost) == FC_COS_UNSPECIFIED) | 1417 | if (fc_host_supported_classes(shost) == FC_COS_UNSPECIFIED) |
| 1394 | return snprintf(buf, 20, "unspecified\n"); | 1418 | return snprintf(buf, 20, "unspecified\n"); |
| 1395 | 1419 | ||
| 1396 | return get_fc_cos_names(fc_host_supported_classes(shost), buf); | 1420 | return get_fc_cos_names(fc_host_supported_classes(shost), buf); |
| 1397 | } | 1421 | } |
| 1398 | static FC_CLASS_DEVICE_ATTR(host, supported_classes, S_IRUGO, | 1422 | static FC_DEVICE_ATTR(host, supported_classes, S_IRUGO, |
| 1399 | show_fc_host_supported_classes, NULL); | 1423 | show_fc_host_supported_classes, NULL); |
| 1400 | 1424 | ||
| 1401 | static ssize_t | 1425 | static ssize_t |
| 1402 | show_fc_host_supported_fc4s (struct class_device *cdev, char *buf) | 1426 | show_fc_host_supported_fc4s (struct device *dev, |
| 1427 | struct device_attribute *attr, char *buf) | ||
| 1403 | { | 1428 | { |
| 1404 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1429 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1405 | return (ssize_t)show_fc_fc4s(buf, fc_host_supported_fc4s(shost)); | 1430 | return (ssize_t)show_fc_fc4s(buf, fc_host_supported_fc4s(shost)); |
| 1406 | } | 1431 | } |
| 1407 | static FC_CLASS_DEVICE_ATTR(host, supported_fc4s, S_IRUGO, | 1432 | static FC_DEVICE_ATTR(host, supported_fc4s, S_IRUGO, |
| 1408 | show_fc_host_supported_fc4s, NULL); | 1433 | show_fc_host_supported_fc4s, NULL); |
| 1409 | 1434 | ||
| 1410 | static ssize_t | 1435 | static ssize_t |
| 1411 | show_fc_host_supported_speeds (struct class_device *cdev, char *buf) | 1436 | show_fc_host_supported_speeds (struct device *dev, |
| 1437 | struct device_attribute *attr, char *buf) | ||
| 1412 | { | 1438 | { |
| 1413 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1439 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1414 | 1440 | ||
| 1415 | if (fc_host_supported_speeds(shost) == FC_PORTSPEED_UNKNOWN) | 1441 | if (fc_host_supported_speeds(shost) == FC_PORTSPEED_UNKNOWN) |
| 1416 | return snprintf(buf, 20, "unknown\n"); | 1442 | return snprintf(buf, 20, "unknown\n"); |
| 1417 | 1443 | ||
| 1418 | return get_fc_port_speed_names(fc_host_supported_speeds(shost), buf); | 1444 | return get_fc_port_speed_names(fc_host_supported_speeds(shost), buf); |
| 1419 | } | 1445 | } |
| 1420 | static FC_CLASS_DEVICE_ATTR(host, supported_speeds, S_IRUGO, | 1446 | static FC_DEVICE_ATTR(host, supported_speeds, S_IRUGO, |
| 1421 | show_fc_host_supported_speeds, NULL); | 1447 | show_fc_host_supported_speeds, NULL); |
| 1422 | 1448 | ||
| 1423 | 1449 | ||
| @@ -1433,9 +1459,10 @@ fc_private_host_rd_attr(serial_number, "%s\n", (FC_SERIAL_NUMBER_SIZE +1)); | |||
| 1433 | /* Dynamic Host Attributes */ | 1459 | /* Dynamic Host Attributes */ |
| 1434 | 1460 | ||
| 1435 | static ssize_t | 1461 | static ssize_t |
| 1436 | show_fc_host_active_fc4s (struct class_device *cdev, char *buf) | 1462 | show_fc_host_active_fc4s (struct device *dev, |
| 1463 | struct device_attribute *attr, char *buf) | ||
| 1437 | { | 1464 | { |
| 1438 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1465 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1439 | struct fc_internal *i = to_fc_internal(shost->transportt); | 1466 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 1440 | 1467 | ||
| 1441 | if (i->f->get_host_active_fc4s) | 1468 | if (i->f->get_host_active_fc4s) |
| @@ -1443,13 +1470,14 @@ show_fc_host_active_fc4s (struct class_device *cdev, char *buf) | |||
| 1443 | 1470 | ||
| 1444 | return (ssize_t)show_fc_fc4s(buf, fc_host_active_fc4s(shost)); | 1471 | return (ssize_t)show_fc_fc4s(buf, fc_host_active_fc4s(shost)); |
| 1445 | } | 1472 | } |
| 1446 | static FC_CLASS_DEVICE_ATTR(host, active_fc4s, S_IRUGO, | 1473 | static FC_DEVICE_ATTR(host, active_fc4s, S_IRUGO, |
| 1447 | show_fc_host_active_fc4s, NULL); | 1474 | show_fc_host_active_fc4s, NULL); |
| 1448 | 1475 | ||
| 1449 | static ssize_t | 1476 | static ssize_t |
| 1450 | show_fc_host_speed (struct class_device *cdev, char *buf) | 1477 | show_fc_host_speed (struct device *dev, |
| 1478 | struct device_attribute *attr, char *buf) | ||
| 1451 | { | 1479 | { |
| 1452 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1480 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1453 | struct fc_internal *i = to_fc_internal(shost->transportt); | 1481 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 1454 | 1482 | ||
| 1455 | if (i->f->get_host_speed) | 1483 | if (i->f->get_host_speed) |
| @@ -1460,7 +1488,7 @@ show_fc_host_speed (struct class_device *cdev, char *buf) | |||
| 1460 | 1488 | ||
| 1461 | return get_fc_port_speed_names(fc_host_speed(shost), buf); | 1489 | return get_fc_port_speed_names(fc_host_speed(shost), buf); |
| 1462 | } | 1490 | } |
| 1463 | static FC_CLASS_DEVICE_ATTR(host, speed, S_IRUGO, | 1491 | static FC_DEVICE_ATTR(host, speed, S_IRUGO, |
| 1464 | show_fc_host_speed, NULL); | 1492 | show_fc_host_speed, NULL); |
| 1465 | 1493 | ||
| 1466 | 1494 | ||
| @@ -1473,16 +1501,17 @@ fc_host_rd_attr(symbolic_name, "%s\n", FC_SYMBOLIC_NAME_SIZE + 1); | |||
| 1473 | fc_private_host_show_function(system_hostname, "%s\n", | 1501 | fc_private_host_show_function(system_hostname, "%s\n", |
| 1474 | FC_SYMBOLIC_NAME_SIZE + 1, ) | 1502 | FC_SYMBOLIC_NAME_SIZE + 1, ) |
| 1475 | fc_host_store_str_function(system_hostname, FC_SYMBOLIC_NAME_SIZE) | 1503 | fc_host_store_str_function(system_hostname, FC_SYMBOLIC_NAME_SIZE) |
| 1476 | static FC_CLASS_DEVICE_ATTR(host, system_hostname, S_IRUGO | S_IWUSR, | 1504 | static FC_DEVICE_ATTR(host, system_hostname, S_IRUGO | S_IWUSR, |
| 1477 | show_fc_host_system_hostname, store_fc_host_system_hostname); | 1505 | show_fc_host_system_hostname, store_fc_host_system_hostname); |
| 1478 | 1506 | ||
| 1479 | 1507 | ||
| 1480 | /* Private Host Attributes */ | 1508 | /* Private Host Attributes */ |
| 1481 | 1509 | ||
| 1482 | static ssize_t | 1510 | static ssize_t |
| 1483 | show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf) | 1511 | show_fc_private_host_tgtid_bind_type(struct device *dev, |
| 1512 | struct device_attribute *attr, char *buf) | ||
| 1484 | { | 1513 | { |
| 1485 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1514 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1486 | const char *name; | 1515 | const char *name; |
| 1487 | 1516 | ||
| 1488 | name = get_fc_tgtid_bind_type_name(fc_host_tgtid_bind_type(shost)); | 1517 | name = get_fc_tgtid_bind_type_name(fc_host_tgtid_bind_type(shost)); |
| @@ -1495,10 +1524,10 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf) | |||
| 1495 | pos = list_entry((head)->next, typeof(*pos), member) | 1524 | pos = list_entry((head)->next, typeof(*pos), member) |
| 1496 | 1525 | ||
| 1497 | static ssize_t | 1526 | static ssize_t |
| 1498 | store_fc_private_host_tgtid_bind_type(struct class_device *cdev, | 1527 | store_fc_private_host_tgtid_bind_type(struct device *dev, |
| 1499 | const char *buf, size_t count) | 1528 | struct device_attribute *attr, const char *buf, size_t count) |
| 1500 | { | 1529 | { |
| 1501 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1530 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1502 | struct fc_rport *rport; | 1531 | struct fc_rport *rport; |
| 1503 | enum fc_tgtid_binding_type val; | 1532 | enum fc_tgtid_binding_type val; |
| 1504 | unsigned long flags; | 1533 | unsigned long flags; |
| @@ -1523,15 +1552,15 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev, | |||
| 1523 | return count; | 1552 | return count; |
| 1524 | } | 1553 | } |
| 1525 | 1554 | ||
| 1526 | static FC_CLASS_DEVICE_ATTR(host, tgtid_bind_type, S_IRUGO | S_IWUSR, | 1555 | static FC_DEVICE_ATTR(host, tgtid_bind_type, S_IRUGO | S_IWUSR, |
| 1527 | show_fc_private_host_tgtid_bind_type, | 1556 | show_fc_private_host_tgtid_bind_type, |
| 1528 | store_fc_private_host_tgtid_bind_type); | 1557 | store_fc_private_host_tgtid_bind_type); |
| 1529 | 1558 | ||
| 1530 | static ssize_t | 1559 | static ssize_t |
| 1531 | store_fc_private_host_issue_lip(struct class_device *cdev, | 1560 | store_fc_private_host_issue_lip(struct device *dev, |
| 1532 | const char *buf, size_t count) | 1561 | struct device_attribute *attr, const char *buf, size_t count) |
| 1533 | { | 1562 | { |
| 1534 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1563 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1535 | struct fc_internal *i = to_fc_internal(shost->transportt); | 1564 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 1536 | int ret; | 1565 | int ret; |
| 1537 | 1566 | ||
| @@ -1544,7 +1573,7 @@ store_fc_private_host_issue_lip(struct class_device *cdev, | |||
| 1544 | return -ENOENT; | 1573 | return -ENOENT; |
| 1545 | } | 1574 | } |
| 1546 | 1575 | ||
| 1547 | static FC_CLASS_DEVICE_ATTR(host, issue_lip, S_IWUSR, NULL, | 1576 | static FC_DEVICE_ATTR(host, issue_lip, S_IWUSR, NULL, |
| 1548 | store_fc_private_host_issue_lip); | 1577 | store_fc_private_host_issue_lip); |
| 1549 | 1578 | ||
| 1550 | fc_private_host_rd_attr(npiv_vports_inuse, "%u\n", 20); | 1579 | fc_private_host_rd_attr(npiv_vports_inuse, "%u\n", 20); |
| @@ -1556,9 +1585,9 @@ fc_private_host_rd_attr(npiv_vports_inuse, "%u\n", 20); | |||
| 1556 | 1585 | ||
| 1557 | /* Show a given an attribute in the statistics group */ | 1586 | /* Show a given an attribute in the statistics group */ |
| 1558 | static ssize_t | 1587 | static ssize_t |
| 1559 | fc_stat_show(const struct class_device *cdev, char *buf, unsigned long offset) | 1588 | fc_stat_show(const struct device *dev, char *buf, unsigned long offset) |
| 1560 | { | 1589 | { |
| 1561 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1590 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1562 | struct fc_internal *i = to_fc_internal(shost->transportt); | 1591 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 1563 | struct fc_host_statistics *stats; | 1592 | struct fc_host_statistics *stats; |
| 1564 | ssize_t ret = -ENOENT; | 1593 | ssize_t ret = -ENOENT; |
| @@ -1579,12 +1608,14 @@ fc_stat_show(const struct class_device *cdev, char *buf, unsigned long offset) | |||
| 1579 | 1608 | ||
| 1580 | /* generate a read-only statistics attribute */ | 1609 | /* generate a read-only statistics attribute */ |
| 1581 | #define fc_host_statistic(name) \ | 1610 | #define fc_host_statistic(name) \ |
| 1582 | static ssize_t show_fcstat_##name(struct class_device *cd, char *buf) \ | 1611 | static ssize_t show_fcstat_##name(struct device *cd, \ |
| 1612 | struct device_attribute *attr, \ | ||
| 1613 | char *buf) \ | ||
| 1583 | { \ | 1614 | { \ |
| 1584 | return fc_stat_show(cd, buf, \ | 1615 | return fc_stat_show(cd, buf, \ |
| 1585 | offsetof(struct fc_host_statistics, name)); \ | 1616 | offsetof(struct fc_host_statistics, name)); \ |
| 1586 | } \ | 1617 | } \ |
| 1587 | static FC_CLASS_DEVICE_ATTR(host, name, S_IRUGO, show_fcstat_##name, NULL) | 1618 | static FC_DEVICE_ATTR(host, name, S_IRUGO, show_fcstat_##name, NULL) |
| 1588 | 1619 | ||
| 1589 | fc_host_statistic(seconds_since_last_reset); | 1620 | fc_host_statistic(seconds_since_last_reset); |
| 1590 | fc_host_statistic(tx_frames); | 1621 | fc_host_statistic(tx_frames); |
| @@ -1608,10 +1639,10 @@ fc_host_statistic(fcp_input_megabytes); | |||
| 1608 | fc_host_statistic(fcp_output_megabytes); | 1639 | fc_host_statistic(fcp_output_megabytes); |
| 1609 | 1640 | ||
| 1610 | static ssize_t | 1641 | static ssize_t |
| 1611 | fc_reset_statistics(struct class_device *cdev, const char *buf, | 1642 | fc_reset_statistics(struct device *dev, struct device_attribute *attr, |
| 1612 | size_t count) | 1643 | const char *buf, size_t count) |
| 1613 | { | 1644 | { |
| 1614 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1645 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1615 | struct fc_internal *i = to_fc_internal(shost->transportt); | 1646 | struct fc_internal *i = to_fc_internal(shost->transportt); |
| 1616 | 1647 | ||
| 1617 | /* ignore any data value written to the attribute */ | 1648 | /* ignore any data value written to the attribute */ |
| @@ -1622,31 +1653,31 @@ fc_reset_statistics(struct class_device *cdev, const char *buf, | |||
| 1622 | 1653 | ||
| 1623 | return -ENOENT; | 1654 | return -ENOENT; |
| 1624 | } | 1655 | } |
| 1625 | static FC_CLASS_DEVICE_ATTR(host, reset_statistics, S_IWUSR, NULL, | 1656 | static FC_DEVICE_ATTR(host, reset_statistics, S_IWUSR, NULL, |
| 1626 | fc_reset_statistics); | 1657 | fc_reset_statistics); |
| 1627 | 1658 | ||
| 1628 | static struct attribute *fc_statistics_attrs[] = { | 1659 | static struct attribute *fc_statistics_attrs[] = { |
| 1629 | &class_device_attr_host_seconds_since_last_reset.attr, | 1660 | &device_attr_host_seconds_since_last_reset.attr, |
| 1630 | &class_device_attr_host_tx_frames.attr, | 1661 | &device_attr_host_tx_frames.attr, |
| 1631 | &class_device_attr_host_tx_words.attr, | 1662 | &device_attr_host_tx_words.attr, |
| 1632 | &class_device_attr_host_rx_frames.attr, | 1663 | &device_attr_host_rx_frames.attr, |
| 1633 | &class_device_attr_host_rx_words.attr, | 1664 | &device_attr_host_rx_words.attr, |
| 1634 | &class_device_attr_host_lip_count.attr, | 1665 | &device_attr_host_lip_count.attr, |
| 1635 | &class_device_attr_host_nos_count.attr, | 1666 | &device_attr_host_nos_count.attr, |
| 1636 | &class_device_attr_host_error_frames.attr, | 1667 | &device_attr_host_error_frames.attr, |
| 1637 | &class_device_attr_host_dumped_frames.attr, | 1668 | &device_attr_host_dumped_frames.attr, |
| 1638 | &class_device_attr_host_link_failure_count.attr, | 1669 | &device_attr_host_link_failure_count.attr, |
| 1639 | &class_device_attr_host_loss_of_sync_count.attr, | 1670 | &device_attr_host_loss_of_sync_count.attr, |
| 1640 | &class_device_attr_host_loss_of_signal_count.attr, | 1671 | &device_attr_host_loss_of_signal_count.attr, |
| 1641 | &class_device_attr_host_prim_seq_protocol_err_count.attr, | 1672 | &device_attr_host_prim_seq_protocol_err_count.attr, |
| 1642 | &class_device_attr_host_invalid_tx_word_count.attr, | 1673 | &device_attr_host_invalid_tx_word_count.attr, |
| 1643 | &class_device_attr_host_invalid_crc_count.attr, | 1674 | &device_attr_host_invalid_crc_count.attr, |
| 1644 | &class_device_attr_host_fcp_input_requests.attr, | 1675 | &device_attr_host_fcp_input_requests.attr, |
| 1645 | &class_device_attr_host_fcp_output_requests.attr, | 1676 | &device_attr_host_fcp_output_requests.attr, |
| 1646 | &class_device_attr_host_fcp_control_requests.attr, | 1677 | &device_attr_host_fcp_control_requests.attr, |
| 1647 | &class_device_attr_host_fcp_input_megabytes.attr, | 1678 | &device_attr_host_fcp_input_megabytes.attr, |
| 1648 | &class_device_attr_host_fcp_output_megabytes.attr, | 1679 | &device_attr_host_fcp_output_megabytes.attr, |
| 1649 | &class_device_attr_host_reset_statistics.attr, | 1680 | &device_attr_host_reset_statistics.attr, |
| 1650 | NULL | 1681 | NULL |
| 1651 | }; | 1682 | }; |
| 1652 | 1683 | ||
| @@ -1695,10 +1726,10 @@ fc_parse_wwn(const char *ns, u64 *nm) | |||
| 1695 | * as hex characters, and may *not* contain any prefixes (e.g. 0x, x, etc) | 1726 | * as hex characters, and may *not* contain any prefixes (e.g. 0x, x, etc) |
| 1696 | */ | 1727 | */ |
| 1697 | static ssize_t | 1728 | static ssize_t |
| 1698 | store_fc_host_vport_create(struct class_device *cdev, const char *buf, | 1729 | store_fc_host_vport_create(struct device *dev, struct device_attribute *attr, |
| 1699 | size_t count) | 1730 | const char *buf, size_t count) |
| 1700 | { | 1731 | { |
| 1701 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1732 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1702 | struct fc_vport_identifiers vid; | 1733 | struct fc_vport_identifiers vid; |
| 1703 | struct fc_vport *vport; | 1734 | struct fc_vport *vport; |
| 1704 | unsigned int cnt=count; | 1735 | unsigned int cnt=count; |
| @@ -1731,7 +1762,7 @@ store_fc_host_vport_create(struct class_device *cdev, const char *buf, | |||
| 1731 | stat = fc_vport_create(shost, 0, &shost->shost_gendev, &vid, &vport); | 1762 | stat = fc_vport_create(shost, 0, &shost->shost_gendev, &vid, &vport); |
| 1732 | return stat ? stat : count; | 1763 | return stat ? stat : count; |
| 1733 | } | 1764 | } |
| 1734 | static FC_CLASS_DEVICE_ATTR(host, vport_create, S_IWUSR, NULL, | 1765 | static FC_DEVICE_ATTR(host, vport_create, S_IWUSR, NULL, |
| 1735 | store_fc_host_vport_create); | 1766 | store_fc_host_vport_create); |
| 1736 | 1767 | ||
| 1737 | 1768 | ||
| @@ -1742,10 +1773,10 @@ static FC_CLASS_DEVICE_ATTR(host, vport_create, S_IWUSR, NULL, | |||
| 1742 | * any prefixes (e.g. 0x, x, etc) | 1773 | * any prefixes (e.g. 0x, x, etc) |
| 1743 | */ | 1774 | */ |
| 1744 | static ssize_t | 1775 | static ssize_t |
| 1745 | store_fc_host_vport_delete(struct class_device *cdev, const char *buf, | 1776 | store_fc_host_vport_delete(struct device *dev, struct device_attribute *attr, |
| 1746 | size_t count) | 1777 | const char *buf, size_t count) |
| 1747 | { | 1778 | { |
| 1748 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1779 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 1749 | struct fc_host_attrs *fc_host = shost_to_fc_host(shost); | 1780 | struct fc_host_attrs *fc_host = shost_to_fc_host(shost); |
| 1750 | struct fc_vport *vport; | 1781 | struct fc_vport *vport; |
| 1751 | u64 wwpn, wwnn; | 1782 | u64 wwpn, wwnn; |
| @@ -1787,7 +1818,7 @@ store_fc_host_vport_delete(struct class_device *cdev, const char *buf, | |||
| 1787 | stat = fc_vport_terminate(vport); | 1818 | stat = fc_vport_terminate(vport); |
| 1788 | return stat ? stat : count; | 1819 | return stat ? stat : count; |
| 1789 | } | 1820 | } |
| 1790 | static FC_CLASS_DEVICE_ATTR(host, vport_delete, S_IWUSR, NULL, | 1821 | static FC_DEVICE_ATTR(host, vport_delete, S_IWUSR, NULL, |
| 1791 | store_fc_host_vport_delete); | 1822 | store_fc_host_vport_delete); |
| 1792 | 1823 | ||
| 1793 | 1824 | ||
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index ca7bb6f63bde..65d1737eb664 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c | |||
| @@ -40,13 +40,13 @@ struct iscsi_internal { | |||
| 40 | struct scsi_transport_template t; | 40 | struct scsi_transport_template t; |
| 41 | struct iscsi_transport *iscsi_transport; | 41 | struct iscsi_transport *iscsi_transport; |
| 42 | struct list_head list; | 42 | struct list_head list; |
| 43 | struct class_device cdev; | 43 | struct device dev; |
| 44 | 44 | ||
| 45 | struct class_device_attribute *host_attrs[ISCSI_HOST_ATTRS + 1]; | 45 | struct device_attribute *host_attrs[ISCSI_HOST_ATTRS + 1]; |
| 46 | struct transport_container conn_cont; | 46 | struct transport_container conn_cont; |
| 47 | struct class_device_attribute *conn_attrs[ISCSI_CONN_ATTRS + 1]; | 47 | struct device_attribute *conn_attrs[ISCSI_CONN_ATTRS + 1]; |
| 48 | struct transport_container session_cont; | 48 | struct transport_container session_cont; |
| 49 | struct class_device_attribute *session_attrs[ISCSI_SESSION_ATTRS + 1]; | 49 | struct device_attribute *session_attrs[ISCSI_SESSION_ATTRS + 1]; |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | static atomic_t iscsi_session_nr; /* sysfs session id for next new session */ | 52 | static atomic_t iscsi_session_nr; /* sysfs session id for next new session */ |
| @@ -63,12 +63,12 @@ static DEFINE_SPINLOCK(iscsi_transport_lock); | |||
| 63 | #define to_iscsi_internal(tmpl) \ | 63 | #define to_iscsi_internal(tmpl) \ |
| 64 | container_of(tmpl, struct iscsi_internal, t) | 64 | container_of(tmpl, struct iscsi_internal, t) |
| 65 | 65 | ||
| 66 | #define cdev_to_iscsi_internal(_cdev) \ | 66 | #define dev_to_iscsi_internal(_dev) \ |
| 67 | container_of(_cdev, struct iscsi_internal, cdev) | 67 | container_of(_dev, struct iscsi_internal, dev) |
| 68 | 68 | ||
| 69 | static void iscsi_transport_release(struct class_device *cdev) | 69 | static void iscsi_transport_release(struct device *dev) |
| 70 | { | 70 | { |
| 71 | struct iscsi_internal *priv = cdev_to_iscsi_internal(cdev); | 71 | struct iscsi_internal *priv = dev_to_iscsi_internal(dev); |
| 72 | kfree(priv); | 72 | kfree(priv); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| @@ -78,25 +78,27 @@ static void iscsi_transport_release(struct class_device *cdev) | |||
| 78 | */ | 78 | */ |
| 79 | static struct class iscsi_transport_class = { | 79 | static struct class iscsi_transport_class = { |
| 80 | .name = "iscsi_transport", | 80 | .name = "iscsi_transport", |
| 81 | .release = iscsi_transport_release, | 81 | .dev_release = iscsi_transport_release, |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| 84 | static ssize_t | 84 | static ssize_t |
| 85 | show_transport_handle(struct class_device *cdev, char *buf) | 85 | show_transport_handle(struct device *dev, struct device_attribute *attr, |
| 86 | char *buf) | ||
| 86 | { | 87 | { |
| 87 | struct iscsi_internal *priv = cdev_to_iscsi_internal(cdev); | 88 | struct iscsi_internal *priv = dev_to_iscsi_internal(dev); |
| 88 | return sprintf(buf, "%llu\n", (unsigned long long)iscsi_handle(priv->iscsi_transport)); | 89 | return sprintf(buf, "%llu\n", (unsigned long long)iscsi_handle(priv->iscsi_transport)); |
| 89 | } | 90 | } |
| 90 | static CLASS_DEVICE_ATTR(handle, S_IRUGO, show_transport_handle, NULL); | 91 | static DEVICE_ATTR(handle, S_IRUGO, show_transport_handle, NULL); |
| 91 | 92 | ||
| 92 | #define show_transport_attr(name, format) \ | 93 | #define show_transport_attr(name, format) \ |
| 93 | static ssize_t \ | 94 | static ssize_t \ |
| 94 | show_transport_##name(struct class_device *cdev, char *buf) \ | 95 | show_transport_##name(struct device *dev, \ |
| 96 | struct device_attribute *attr,char *buf) \ | ||
| 95 | { \ | 97 | { \ |
| 96 | struct iscsi_internal *priv = cdev_to_iscsi_internal(cdev); \ | 98 | struct iscsi_internal *priv = dev_to_iscsi_internal(dev); \ |
| 97 | return sprintf(buf, format"\n", priv->iscsi_transport->name); \ | 99 | return sprintf(buf, format"\n", priv->iscsi_transport->name); \ |
| 98 | } \ | 100 | } \ |
| 99 | static CLASS_DEVICE_ATTR(name, S_IRUGO, show_transport_##name, NULL); | 101 | static DEVICE_ATTR(name, S_IRUGO, show_transport_##name, NULL); |
| 100 | 102 | ||
| 101 | show_transport_attr(caps, "0x%x"); | 103 | show_transport_attr(caps, "0x%x"); |
| 102 | show_transport_attr(max_lun, "%d"); | 104 | show_transport_attr(max_lun, "%d"); |
| @@ -104,11 +106,11 @@ show_transport_attr(max_conn, "%d"); | |||
| 104 | show_transport_attr(max_cmd_len, "%d"); | 106 | show_transport_attr(max_cmd_len, "%d"); |
| 105 | 107 | ||
| 106 | static struct attribute *iscsi_transport_attrs[] = { | 108 | static struct attribute *iscsi_transport_attrs[] = { |
| 107 | &class_device_attr_handle.attr, | 109 | &dev_attr_handle.attr, |
| 108 | &class_device_attr_caps.attr, | 110 | &dev_attr_caps.attr, |
| 109 | &class_device_attr_max_lun.attr, | 111 | &dev_attr_max_lun.attr, |
| 110 | &class_device_attr_max_conn.attr, | 112 | &dev_attr_max_conn.attr, |
| 111 | &class_device_attr_max_cmd_len.attr, | 113 | &dev_attr_max_cmd_len.attr, |
| 112 | NULL, | 114 | NULL, |
| 113 | }; | 115 | }; |
| 114 | 116 | ||
| @@ -119,7 +121,7 @@ static struct attribute_group iscsi_transport_group = { | |||
| 119 | 121 | ||
| 120 | 122 | ||
| 121 | static int iscsi_setup_host(struct transport_container *tc, struct device *dev, | 123 | static int iscsi_setup_host(struct transport_container *tc, struct device *dev, |
| 122 | struct class_device *cdev) | 124 | struct device *cdev) |
| 123 | { | 125 | { |
| 124 | struct Scsi_Host *shost = dev_to_shost(dev); | 126 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 125 | struct iscsi_host *ihost = shost->shost_data; | 127 | struct iscsi_host *ihost = shost->shost_data; |
| @@ -139,7 +141,7 @@ static int iscsi_setup_host(struct transport_container *tc, struct device *dev, | |||
| 139 | } | 141 | } |
| 140 | 142 | ||
| 141 | static int iscsi_remove_host(struct transport_container *tc, struct device *dev, | 143 | static int iscsi_remove_host(struct transport_container *tc, struct device *dev, |
| 142 | struct class_device *cdev) | 144 | struct device *cdev) |
| 143 | { | 145 | { |
| 144 | struct Scsi_Host *shost = dev_to_shost(dev); | 146 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 145 | struct iscsi_host *ihost = shost->shost_data; | 147 | struct iscsi_host *ihost = shost->shost_data; |
| @@ -1337,11 +1339,8 @@ iscsi_if_rx(struct sk_buff *skb) | |||
| 1337 | mutex_unlock(&rx_queue_mutex); | 1339 | mutex_unlock(&rx_queue_mutex); |
| 1338 | } | 1340 | } |
| 1339 | 1341 | ||
| 1340 | #define iscsi_cdev_to_conn(_cdev) \ | ||
| 1341 | iscsi_dev_to_conn(_cdev->dev) | ||
| 1342 | |||
| 1343 | #define ISCSI_CLASS_ATTR(_prefix,_name,_mode,_show,_store) \ | 1342 | #define ISCSI_CLASS_ATTR(_prefix,_name,_mode,_show,_store) \ |
| 1344 | struct class_device_attribute class_device_attr_##_prefix##_##_name = \ | 1343 | struct device_attribute dev_attr_##_prefix##_##_name = \ |
| 1345 | __ATTR(_name,_mode,_show,_store) | 1344 | __ATTR(_name,_mode,_show,_store) |
| 1346 | 1345 | ||
| 1347 | /* | 1346 | /* |
| @@ -1349,9 +1348,10 @@ struct class_device_attribute class_device_attr_##_prefix##_##_name = \ | |||
| 1349 | */ | 1348 | */ |
| 1350 | #define iscsi_conn_attr_show(param) \ | 1349 | #define iscsi_conn_attr_show(param) \ |
| 1351 | static ssize_t \ | 1350 | static ssize_t \ |
| 1352 | show_conn_param_##param(struct class_device *cdev, char *buf) \ | 1351 | show_conn_param_##param(struct device *dev, \ |
| 1352 | struct device_attribute *attr, char *buf) \ | ||
| 1353 | { \ | 1353 | { \ |
| 1354 | struct iscsi_cls_conn *conn = iscsi_cdev_to_conn(cdev); \ | 1354 | struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev->parent); \ |
| 1355 | struct iscsi_transport *t = conn->transport; \ | 1355 | struct iscsi_transport *t = conn->transport; \ |
| 1356 | return t->get_conn_param(conn, param, buf); \ | 1356 | return t->get_conn_param(conn, param, buf); \ |
| 1357 | } | 1357 | } |
| @@ -1375,17 +1375,16 @@ iscsi_conn_attr(address, ISCSI_PARAM_CONN_ADDRESS); | |||
| 1375 | iscsi_conn_attr(ping_tmo, ISCSI_PARAM_PING_TMO); | 1375 | iscsi_conn_attr(ping_tmo, ISCSI_PARAM_PING_TMO); |
| 1376 | iscsi_conn_attr(recv_tmo, ISCSI_PARAM_RECV_TMO); | 1376 | iscsi_conn_attr(recv_tmo, ISCSI_PARAM_RECV_TMO); |
| 1377 | 1377 | ||
| 1378 | #define iscsi_cdev_to_session(_cdev) \ | ||
| 1379 | iscsi_dev_to_session(_cdev->dev) | ||
| 1380 | |||
| 1381 | /* | 1378 | /* |
| 1382 | * iSCSI session attrs | 1379 | * iSCSI session attrs |
| 1383 | */ | 1380 | */ |
| 1384 | #define iscsi_session_attr_show(param, perm) \ | 1381 | #define iscsi_session_attr_show(param, perm) \ |
| 1385 | static ssize_t \ | 1382 | static ssize_t \ |
| 1386 | show_session_param_##param(struct class_device *cdev, char *buf) \ | 1383 | show_session_param_##param(struct device *dev, \ |
| 1384 | struct device_attribute *attr, char *buf) \ | ||
| 1387 | { \ | 1385 | { \ |
| 1388 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); \ | 1386 | struct iscsi_cls_session *session = \ |
| 1387 | iscsi_dev_to_session(dev->parent); \ | ||
| 1389 | struct iscsi_transport *t = session->transport; \ | 1388 | struct iscsi_transport *t = session->transport; \ |
| 1390 | \ | 1389 | \ |
| 1391 | if (perm && !capable(CAP_SYS_ADMIN)) \ | 1390 | if (perm && !capable(CAP_SYS_ADMIN)) \ |
| @@ -1417,9 +1416,10 @@ iscsi_session_attr(abort_tmo, ISCSI_PARAM_ABORT_TMO, 0); | |||
| 1417 | iscsi_session_attr(lu_reset_tmo, ISCSI_PARAM_LU_RESET_TMO, 0); | 1416 | iscsi_session_attr(lu_reset_tmo, ISCSI_PARAM_LU_RESET_TMO, 0); |
| 1418 | 1417 | ||
| 1419 | static ssize_t | 1418 | static ssize_t |
| 1420 | show_priv_session_state(struct class_device *cdev, char *buf) | 1419 | show_priv_session_state(struct device *dev, struct device_attribute *attr, |
| 1420 | char *buf) | ||
| 1421 | { | 1421 | { |
| 1422 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev); | 1422 | struct iscsi_cls_session *session = iscsi_dev_to_session(dev->parent); |
| 1423 | return sprintf(buf, "%s\n", iscsi_session_state_name(session->state)); | 1423 | return sprintf(buf, "%s\n", iscsi_session_state_name(session->state)); |
| 1424 | } | 1424 | } |
| 1425 | static ISCSI_CLASS_ATTR(priv_sess, state, S_IRUGO, show_priv_session_state, | 1425 | static ISCSI_CLASS_ATTR(priv_sess, state, S_IRUGO, show_priv_session_state, |
| @@ -1427,9 +1427,11 @@ static ISCSI_CLASS_ATTR(priv_sess, state, S_IRUGO, show_priv_session_state, | |||
| 1427 | 1427 | ||
| 1428 | #define iscsi_priv_session_attr_show(field, format) \ | 1428 | #define iscsi_priv_session_attr_show(field, format) \ |
| 1429 | static ssize_t \ | 1429 | static ssize_t \ |
| 1430 | show_priv_session_##field(struct class_device *cdev, char *buf) \ | 1430 | show_priv_session_##field(struct device *dev, \ |
| 1431 | struct device_attribute *attr, char *buf) \ | ||
| 1431 | { \ | 1432 | { \ |
| 1432 | struct iscsi_cls_session *session = iscsi_cdev_to_session(cdev);\ | 1433 | struct iscsi_cls_session *session = \ |
| 1434 | iscsi_dev_to_session(dev->parent); \ | ||
| 1433 | return sprintf(buf, format"\n", session->field); \ | 1435 | return sprintf(buf, format"\n", session->field); \ |
| 1434 | } | 1436 | } |
| 1435 | 1437 | ||
| @@ -1444,9 +1446,10 @@ iscsi_priv_session_attr(recovery_tmo, "%d"); | |||
| 1444 | */ | 1446 | */ |
| 1445 | #define iscsi_host_attr_show(param) \ | 1447 | #define iscsi_host_attr_show(param) \ |
| 1446 | static ssize_t \ | 1448 | static ssize_t \ |
| 1447 | show_host_param_##param(struct class_device *cdev, char *buf) \ | 1449 | show_host_param_##param(struct device *dev, \ |
| 1450 | struct device_attribute *attr, char *buf) \ | ||
| 1448 | { \ | 1451 | { \ |
| 1449 | struct Scsi_Host *shost = transport_class_to_shost(cdev); \ | 1452 | struct Scsi_Host *shost = transport_class_to_shost(dev); \ |
| 1450 | struct iscsi_internal *priv = to_iscsi_internal(shost->transportt); \ | 1453 | struct iscsi_internal *priv = to_iscsi_internal(shost->transportt); \ |
| 1451 | return priv->iscsi_transport->get_host_param(shost, param, buf); \ | 1454 | return priv->iscsi_transport->get_host_param(shost, param, buf); \ |
| 1452 | } | 1455 | } |
| @@ -1463,7 +1466,7 @@ iscsi_host_attr(initiatorname, ISCSI_HOST_PARAM_INITIATOR_NAME); | |||
| 1463 | 1466 | ||
| 1464 | #define SETUP_PRIV_SESSION_RD_ATTR(field) \ | 1467 | #define SETUP_PRIV_SESSION_RD_ATTR(field) \ |
| 1465 | do { \ | 1468 | do { \ |
| 1466 | priv->session_attrs[count] = &class_device_attr_priv_sess_##field; \ | 1469 | priv->session_attrs[count] = &dev_attr_priv_sess_##field; \ |
| 1467 | count++; \ | 1470 | count++; \ |
| 1468 | } while (0) | 1471 | } while (0) |
| 1469 | 1472 | ||
| @@ -1471,7 +1474,7 @@ do { \ | |||
| 1471 | #define SETUP_SESSION_RD_ATTR(field, param_flag) \ | 1474 | #define SETUP_SESSION_RD_ATTR(field, param_flag) \ |
| 1472 | do { \ | 1475 | do { \ |
| 1473 | if (tt->param_mask & param_flag) { \ | 1476 | if (tt->param_mask & param_flag) { \ |
| 1474 | priv->session_attrs[count] = &class_device_attr_sess_##field; \ | 1477 | priv->session_attrs[count] = &dev_attr_sess_##field; \ |
| 1475 | count++; \ | 1478 | count++; \ |
| 1476 | } \ | 1479 | } \ |
| 1477 | } while (0) | 1480 | } while (0) |
| @@ -1479,7 +1482,7 @@ do { \ | |||
| 1479 | #define SETUP_CONN_RD_ATTR(field, param_flag) \ | 1482 | #define SETUP_CONN_RD_ATTR(field, param_flag) \ |
| 1480 | do { \ | 1483 | do { \ |
| 1481 | if (tt->param_mask & param_flag) { \ | 1484 | if (tt->param_mask & param_flag) { \ |
| 1482 | priv->conn_attrs[count] = &class_device_attr_conn_##field; \ | 1485 | priv->conn_attrs[count] = &dev_attr_conn_##field; \ |
| 1483 | count++; \ | 1486 | count++; \ |
| 1484 | } \ | 1487 | } \ |
| 1485 | } while (0) | 1488 | } while (0) |
| @@ -1487,7 +1490,7 @@ do { \ | |||
| 1487 | #define SETUP_HOST_RD_ATTR(field, param_flag) \ | 1490 | #define SETUP_HOST_RD_ATTR(field, param_flag) \ |
| 1488 | do { \ | 1491 | do { \ |
| 1489 | if (tt->host_param_mask & param_flag) { \ | 1492 | if (tt->host_param_mask & param_flag) { \ |
| 1490 | priv->host_attrs[count] = &class_device_attr_host_##field; \ | 1493 | priv->host_attrs[count] = &dev_attr_host_##field; \ |
| 1491 | count++; \ | 1494 | count++; \ |
| 1492 | } \ | 1495 | } \ |
| 1493 | } while (0) | 1496 | } while (0) |
| @@ -1578,15 +1581,15 @@ iscsi_register_transport(struct iscsi_transport *tt) | |||
| 1578 | priv->iscsi_transport = tt; | 1581 | priv->iscsi_transport = tt; |
| 1579 | priv->t.user_scan = iscsi_user_scan; | 1582 | priv->t.user_scan = iscsi_user_scan; |
| 1580 | 1583 | ||
| 1581 | priv->cdev.class = &iscsi_transport_class; | 1584 | priv->dev.class = &iscsi_transport_class; |
| 1582 | snprintf(priv->cdev.class_id, BUS_ID_SIZE, "%s", tt->name); | 1585 | snprintf(priv->dev.bus_id, BUS_ID_SIZE, "%s", tt->name); |
| 1583 | err = class_device_register(&priv->cdev); | 1586 | err = device_register(&priv->dev); |
| 1584 | if (err) | 1587 | if (err) |
| 1585 | goto free_priv; | 1588 | goto free_priv; |
| 1586 | 1589 | ||
| 1587 | err = sysfs_create_group(&priv->cdev.kobj, &iscsi_transport_group); | 1590 | err = sysfs_create_group(&priv->dev.kobj, &iscsi_transport_group); |
| 1588 | if (err) | 1591 | if (err) |
| 1589 | goto unregister_cdev; | 1592 | goto unregister_dev; |
| 1590 | 1593 | ||
| 1591 | /* host parameters */ | 1594 | /* host parameters */ |
| 1592 | priv->t.host_attrs.ac.attrs = &priv->host_attrs[0]; | 1595 | priv->t.host_attrs.ac.attrs = &priv->host_attrs[0]; |
| @@ -1663,8 +1666,8 @@ iscsi_register_transport(struct iscsi_transport *tt) | |||
| 1663 | printk(KERN_NOTICE "iscsi: registered transport (%s)\n", tt->name); | 1666 | printk(KERN_NOTICE "iscsi: registered transport (%s)\n", tt->name); |
| 1664 | return &priv->t; | 1667 | return &priv->t; |
| 1665 | 1668 | ||
| 1666 | unregister_cdev: | 1669 | unregister_dev: |
| 1667 | class_device_unregister(&priv->cdev); | 1670 | device_unregister(&priv->dev); |
| 1668 | free_priv: | 1671 | free_priv: |
| 1669 | kfree(priv); | 1672 | kfree(priv); |
| 1670 | return NULL; | 1673 | return NULL; |
| @@ -1691,8 +1694,8 @@ int iscsi_unregister_transport(struct iscsi_transport *tt) | |||
| 1691 | transport_container_unregister(&priv->session_cont); | 1694 | transport_container_unregister(&priv->session_cont); |
| 1692 | transport_container_unregister(&priv->t.host_attrs); | 1695 | transport_container_unregister(&priv->t.host_attrs); |
| 1693 | 1696 | ||
| 1694 | sysfs_remove_group(&priv->cdev.kobj, &iscsi_transport_group); | 1697 | sysfs_remove_group(&priv->dev.kobj, &iscsi_transport_group); |
| 1695 | class_device_unregister(&priv->cdev); | 1698 | device_unregister(&priv->dev); |
| 1696 | mutex_unlock(&rx_queue_mutex); | 1699 | mutex_unlock(&rx_queue_mutex); |
| 1697 | 1700 | ||
| 1698 | return 0; | 1701 | return 0; |
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index 43a964d635b4..27ec625ab771 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c | |||
| @@ -53,8 +53,8 @@ struct sas_host_attrs { | |||
| 53 | /* | 53 | /* |
| 54 | * Hack to allow attributes of the same name in different objects. | 54 | * Hack to allow attributes of the same name in different objects. |
| 55 | */ | 55 | */ |
| 56 | #define SAS_CLASS_DEVICE_ATTR(_prefix,_name,_mode,_show,_store) \ | 56 | #define SAS_DEVICE_ATTR(_prefix,_name,_mode,_show,_store) \ |
| 57 | struct class_device_attribute class_device_attr_##_prefix##_##_name = \ | 57 | struct device_attribute dev_attr_##_prefix##_##_name = \ |
| 58 | __ATTR(_name,_mode,_show,_store) | 58 | __ATTR(_name,_mode,_show,_store) |
| 59 | 59 | ||
| 60 | 60 | ||
| @@ -261,7 +261,7 @@ static void sas_bsg_remove(struct Scsi_Host *shost, struct sas_rphy *rphy) | |||
| 261 | */ | 261 | */ |
| 262 | 262 | ||
| 263 | static int sas_host_setup(struct transport_container *tc, struct device *dev, | 263 | static int sas_host_setup(struct transport_container *tc, struct device *dev, |
| 264 | struct class_device *cdev) | 264 | struct device *cdev) |
| 265 | { | 265 | { |
| 266 | struct Scsi_Host *shost = dev_to_shost(dev); | 266 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 267 | struct sas_host_attrs *sas_host = to_sas_host_attrs(shost); | 267 | struct sas_host_attrs *sas_host = to_sas_host_attrs(shost); |
| @@ -280,7 +280,7 @@ static int sas_host_setup(struct transport_container *tc, struct device *dev, | |||
| 280 | } | 280 | } |
| 281 | 281 | ||
| 282 | static int sas_host_remove(struct transport_container *tc, struct device *dev, | 282 | static int sas_host_remove(struct transport_container *tc, struct device *dev, |
| 283 | struct class_device *cdev) | 283 | struct device *cdev) |
| 284 | { | 284 | { |
| 285 | struct Scsi_Host *shost = dev_to_shost(dev); | 285 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 286 | 286 | ||
| @@ -356,22 +356,24 @@ EXPORT_SYMBOL(sas_remove_host); | |||
| 356 | 356 | ||
| 357 | #define sas_phy_show_simple(field, name, format_string, cast) \ | 357 | #define sas_phy_show_simple(field, name, format_string, cast) \ |
| 358 | static ssize_t \ | 358 | static ssize_t \ |
| 359 | show_sas_phy_##name(struct class_device *cdev, char *buf) \ | 359 | show_sas_phy_##name(struct device *dev, \ |
| 360 | struct device_attribute *attr, char *buf) \ | ||
| 360 | { \ | 361 | { \ |
| 361 | struct sas_phy *phy = transport_class_to_phy(cdev); \ | 362 | struct sas_phy *phy = transport_class_to_phy(dev); \ |
| 362 | \ | 363 | \ |
| 363 | return snprintf(buf, 20, format_string, cast phy->field); \ | 364 | return snprintf(buf, 20, format_string, cast phy->field); \ |
| 364 | } | 365 | } |
| 365 | 366 | ||
| 366 | #define sas_phy_simple_attr(field, name, format_string, type) \ | 367 | #define sas_phy_simple_attr(field, name, format_string, type) \ |
| 367 | sas_phy_show_simple(field, name, format_string, (type)) \ | 368 | sas_phy_show_simple(field, name, format_string, (type)) \ |
| 368 | static CLASS_DEVICE_ATTR(name, S_IRUGO, show_sas_phy_##name, NULL) | 369 | static DEVICE_ATTR(name, S_IRUGO, show_sas_phy_##name, NULL) |
| 369 | 370 | ||
| 370 | #define sas_phy_show_protocol(field, name) \ | 371 | #define sas_phy_show_protocol(field, name) \ |
| 371 | static ssize_t \ | 372 | static ssize_t \ |
| 372 | show_sas_phy_##name(struct class_device *cdev, char *buf) \ | 373 | show_sas_phy_##name(struct device *dev, \ |
| 374 | struct device_attribute *attr, char *buf) \ | ||
| 373 | { \ | 375 | { \ |
| 374 | struct sas_phy *phy = transport_class_to_phy(cdev); \ | 376 | struct sas_phy *phy = transport_class_to_phy(dev); \ |
| 375 | \ | 377 | \ |
| 376 | if (!phy->field) \ | 378 | if (!phy->field) \ |
| 377 | return snprintf(buf, 20, "none\n"); \ | 379 | return snprintf(buf, 20, "none\n"); \ |
| @@ -380,13 +382,14 @@ show_sas_phy_##name(struct class_device *cdev, char *buf) \ | |||
| 380 | 382 | ||
| 381 | #define sas_phy_protocol_attr(field, name) \ | 383 | #define sas_phy_protocol_attr(field, name) \ |
| 382 | sas_phy_show_protocol(field, name) \ | 384 | sas_phy_show_protocol(field, name) \ |
| 383 | static CLASS_DEVICE_ATTR(name, S_IRUGO, show_sas_phy_##name, NULL) | 385 | static DEVICE_ATTR(name, S_IRUGO, show_sas_phy_##name, NULL) |
| 384 | 386 | ||
| 385 | #define sas_phy_show_linkspeed(field) \ | 387 | #define sas_phy_show_linkspeed(field) \ |
| 386 | static ssize_t \ | 388 | static ssize_t \ |
| 387 | show_sas_phy_##field(struct class_device *cdev, char *buf) \ | 389 | show_sas_phy_##field(struct device *dev, \ |
| 390 | struct device_attribute *attr, char *buf) \ | ||
| 388 | { \ | 391 | { \ |
| 389 | struct sas_phy *phy = transport_class_to_phy(cdev); \ | 392 | struct sas_phy *phy = transport_class_to_phy(dev); \ |
| 390 | \ | 393 | \ |
| 391 | return get_sas_linkspeed_names(phy->field, buf); \ | 394 | return get_sas_linkspeed_names(phy->field, buf); \ |
| 392 | } | 395 | } |
| @@ -394,10 +397,11 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \ | |||
| 394 | /* Fudge to tell if we're minimum or maximum */ | 397 | /* Fudge to tell if we're minimum or maximum */ |
| 395 | #define sas_phy_store_linkspeed(field) \ | 398 | #define sas_phy_store_linkspeed(field) \ |
| 396 | static ssize_t \ | 399 | static ssize_t \ |
| 397 | store_sas_phy_##field(struct class_device *cdev, const char *buf, \ | 400 | store_sas_phy_##field(struct device *dev, \ |
| 398 | size_t count) \ | 401 | struct device_attribute *attr, \ |
| 402 | const char *buf, size_t count) \ | ||
| 399 | { \ | 403 | { \ |
| 400 | struct sas_phy *phy = transport_class_to_phy(cdev); \ | 404 | struct sas_phy *phy = transport_class_to_phy(dev); \ |
| 401 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); \ | 405 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); \ |
| 402 | struct sas_internal *i = to_sas_internal(shost->transportt); \ | 406 | struct sas_internal *i = to_sas_internal(shost->transportt); \ |
| 403 | u32 value; \ | 407 | u32 value; \ |
| @@ -416,19 +420,20 @@ store_sas_phy_##field(struct class_device *cdev, const char *buf, \ | |||
| 416 | #define sas_phy_linkspeed_rw_attr(field) \ | 420 | #define sas_phy_linkspeed_rw_attr(field) \ |
| 417 | sas_phy_show_linkspeed(field) \ | 421 | sas_phy_show_linkspeed(field) \ |
| 418 | sas_phy_store_linkspeed(field) \ | 422 | sas_phy_store_linkspeed(field) \ |
| 419 | static CLASS_DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, \ | 423 | static DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, \ |
| 420 | store_sas_phy_##field) | 424 | store_sas_phy_##field) |
| 421 | 425 | ||
| 422 | #define sas_phy_linkspeed_attr(field) \ | 426 | #define sas_phy_linkspeed_attr(field) \ |
| 423 | sas_phy_show_linkspeed(field) \ | 427 | sas_phy_show_linkspeed(field) \ |
| 424 | static CLASS_DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, NULL) | 428 | static DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, NULL) |
| 425 | 429 | ||
| 426 | 430 | ||
| 427 | #define sas_phy_show_linkerror(field) \ | 431 | #define sas_phy_show_linkerror(field) \ |
| 428 | static ssize_t \ | 432 | static ssize_t \ |
| 429 | show_sas_phy_##field(struct class_device *cdev, char *buf) \ | 433 | show_sas_phy_##field(struct device *dev, \ |
| 434 | struct device_attribute *attr, char *buf) \ | ||
| 430 | { \ | 435 | { \ |
| 431 | struct sas_phy *phy = transport_class_to_phy(cdev); \ | 436 | struct sas_phy *phy = transport_class_to_phy(dev); \ |
| 432 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); \ | 437 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); \ |
| 433 | struct sas_internal *i = to_sas_internal(shost->transportt); \ | 438 | struct sas_internal *i = to_sas_internal(shost->transportt); \ |
| 434 | int error; \ | 439 | int error; \ |
| @@ -441,24 +446,25 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \ | |||
| 441 | 446 | ||
| 442 | #define sas_phy_linkerror_attr(field) \ | 447 | #define sas_phy_linkerror_attr(field) \ |
| 443 | sas_phy_show_linkerror(field) \ | 448 | sas_phy_show_linkerror(field) \ |
| 444 | static CLASS_DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, NULL) | 449 | static DEVICE_ATTR(field, S_IRUGO, show_sas_phy_##field, NULL) |
| 445 | 450 | ||
| 446 | 451 | ||
| 447 | static ssize_t | 452 | static ssize_t |
| 448 | show_sas_device_type(struct class_device *cdev, char *buf) | 453 | show_sas_device_type(struct device *dev, |
| 454 | struct device_attribute *attr, char *buf) | ||
| 449 | { | 455 | { |
| 450 | struct sas_phy *phy = transport_class_to_phy(cdev); | 456 | struct sas_phy *phy = transport_class_to_phy(dev); |
| 451 | 457 | ||
| 452 | if (!phy->identify.device_type) | 458 | if (!phy->identify.device_type) |
| 453 | return snprintf(buf, 20, "none\n"); | 459 | return snprintf(buf, 20, "none\n"); |
| 454 | return get_sas_device_type_names(phy->identify.device_type, buf); | 460 | return get_sas_device_type_names(phy->identify.device_type, buf); |
| 455 | } | 461 | } |
| 456 | static CLASS_DEVICE_ATTR(device_type, S_IRUGO, show_sas_device_type, NULL); | 462 | static DEVICE_ATTR(device_type, S_IRUGO, show_sas_device_type, NULL); |
| 457 | 463 | ||
| 458 | static ssize_t do_sas_phy_enable(struct class_device *cdev, | 464 | static ssize_t do_sas_phy_enable(struct device *dev, |
| 459 | size_t count, int enable) | 465 | size_t count, int enable) |
| 460 | { | 466 | { |
| 461 | struct sas_phy *phy = transport_class_to_phy(cdev); | 467 | struct sas_phy *phy = transport_class_to_phy(dev); |
| 462 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); | 468 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); |
| 463 | struct sas_internal *i = to_sas_internal(shost->transportt); | 469 | struct sas_internal *i = to_sas_internal(shost->transportt); |
| 464 | int error; | 470 | int error; |
| @@ -470,18 +476,19 @@ static ssize_t do_sas_phy_enable(struct class_device *cdev, | |||
| 470 | return count; | 476 | return count; |
| 471 | }; | 477 | }; |
| 472 | 478 | ||
| 473 | static ssize_t store_sas_phy_enable(struct class_device *cdev, | 479 | static ssize_t |
| 474 | const char *buf, size_t count) | 480 | store_sas_phy_enable(struct device *dev, struct device_attribute *attr, |
| 481 | const char *buf, size_t count) | ||
| 475 | { | 482 | { |
| 476 | if (count < 1) | 483 | if (count < 1) |
| 477 | return -EINVAL; | 484 | return -EINVAL; |
| 478 | 485 | ||
| 479 | switch (buf[0]) { | 486 | switch (buf[0]) { |
| 480 | case '0': | 487 | case '0': |
| 481 | do_sas_phy_enable(cdev, count, 0); | 488 | do_sas_phy_enable(dev, count, 0); |
| 482 | break; | 489 | break; |
| 483 | case '1': | 490 | case '1': |
| 484 | do_sas_phy_enable(cdev, count, 1); | 491 | do_sas_phy_enable(dev, count, 1); |
| 485 | break; | 492 | break; |
| 486 | default: | 493 | default: |
| 487 | return -EINVAL; | 494 | return -EINVAL; |
| @@ -490,20 +497,22 @@ static ssize_t store_sas_phy_enable(struct class_device *cdev, | |||
| 490 | return count; | 497 | return count; |
| 491 | } | 498 | } |
| 492 | 499 | ||
| 493 | static ssize_t show_sas_phy_enable(struct class_device *cdev, char *buf) | 500 | static ssize_t |
| 501 | show_sas_phy_enable(struct device *dev, struct device_attribute *attr, | ||
| 502 | char *buf) | ||
| 494 | { | 503 | { |
| 495 | struct sas_phy *phy = transport_class_to_phy(cdev); | 504 | struct sas_phy *phy = transport_class_to_phy(dev); |
| 496 | 505 | ||
| 497 | return snprintf(buf, 20, "%d", phy->enabled); | 506 | return snprintf(buf, 20, "%d", phy->enabled); |
| 498 | } | 507 | } |
| 499 | 508 | ||
| 500 | static CLASS_DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, show_sas_phy_enable, | 509 | static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, show_sas_phy_enable, |
| 501 | store_sas_phy_enable); | 510 | store_sas_phy_enable); |
| 502 | 511 | ||
| 503 | static ssize_t do_sas_phy_reset(struct class_device *cdev, | 512 | static ssize_t |
| 504 | size_t count, int hard_reset) | 513 | do_sas_phy_reset(struct device *dev, size_t count, int hard_reset) |
| 505 | { | 514 | { |
| 506 | struct sas_phy *phy = transport_class_to_phy(cdev); | 515 | struct sas_phy *phy = transport_class_to_phy(dev); |
| 507 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); | 516 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); |
| 508 | struct sas_internal *i = to_sas_internal(shost->transportt); | 517 | struct sas_internal *i = to_sas_internal(shost->transportt); |
| 509 | int error; | 518 | int error; |
| @@ -514,19 +523,21 @@ static ssize_t do_sas_phy_reset(struct class_device *cdev, | |||
| 514 | return count; | 523 | return count; |
| 515 | }; | 524 | }; |
| 516 | 525 | ||
| 517 | static ssize_t store_sas_link_reset(struct class_device *cdev, | 526 | static ssize_t |
| 518 | const char *buf, size_t count) | 527 | store_sas_link_reset(struct device *dev, struct device_attribute *attr, |
| 528 | const char *buf, size_t count) | ||
| 519 | { | 529 | { |
| 520 | return do_sas_phy_reset(cdev, count, 0); | 530 | return do_sas_phy_reset(dev, count, 0); |
| 521 | } | 531 | } |
| 522 | static CLASS_DEVICE_ATTR(link_reset, S_IWUSR, NULL, store_sas_link_reset); | 532 | static DEVICE_ATTR(link_reset, S_IWUSR, NULL, store_sas_link_reset); |
| 523 | 533 | ||
| 524 | static ssize_t store_sas_hard_reset(struct class_device *cdev, | 534 | static ssize_t |
| 525 | const char *buf, size_t count) | 535 | store_sas_hard_reset(struct device *dev, struct device_attribute *attr, |
| 536 | const char *buf, size_t count) | ||
| 526 | { | 537 | { |
| 527 | return do_sas_phy_reset(cdev, count, 1); | 538 | return do_sas_phy_reset(dev, count, 1); |
| 528 | } | 539 | } |
| 529 | static CLASS_DEVICE_ATTR(hard_reset, S_IWUSR, NULL, store_sas_hard_reset); | 540 | static DEVICE_ATTR(hard_reset, S_IWUSR, NULL, store_sas_hard_reset); |
| 530 | 541 | ||
| 531 | sas_phy_protocol_attr(identify.initiator_port_protocols, | 542 | sas_phy_protocol_attr(identify.initiator_port_protocols, |
| 532 | initiator_port_protocols); | 543 | initiator_port_protocols); |
| @@ -695,16 +706,17 @@ EXPORT_SYMBOL(scsi_is_sas_phy); | |||
| 695 | */ | 706 | */ |
| 696 | #define sas_port_show_simple(field, name, format_string, cast) \ | 707 | #define sas_port_show_simple(field, name, format_string, cast) \ |
| 697 | static ssize_t \ | 708 | static ssize_t \ |
| 698 | show_sas_port_##name(struct class_device *cdev, char *buf) \ | 709 | show_sas_port_##name(struct device *dev, \ |
| 710 | struct device_attribute *attr, char *buf) \ | ||
| 699 | { \ | 711 | { \ |
| 700 | struct sas_port *port = transport_class_to_sas_port(cdev); \ | 712 | struct sas_port *port = transport_class_to_sas_port(dev); \ |
| 701 | \ | 713 | \ |
| 702 | return snprintf(buf, 20, format_string, cast port->field); \ | 714 | return snprintf(buf, 20, format_string, cast port->field); \ |
| 703 | } | 715 | } |
| 704 | 716 | ||
| 705 | #define sas_port_simple_attr(field, name, format_string, type) \ | 717 | #define sas_port_simple_attr(field, name, format_string, type) \ |
| 706 | sas_port_show_simple(field, name, format_string, (type)) \ | 718 | sas_port_show_simple(field, name, format_string, (type)) \ |
| 707 | static CLASS_DEVICE_ATTR(name, S_IRUGO, show_sas_port_##name, NULL) | 719 | static DEVICE_ATTR(name, S_IRUGO, show_sas_port_##name, NULL) |
| 708 | 720 | ||
| 709 | sas_port_simple_attr(num_phys, num_phys, "%d\n", int); | 721 | sas_port_simple_attr(num_phys, num_phys, "%d\n", int); |
| 710 | 722 | ||
| @@ -1017,23 +1029,25 @@ EXPORT_SYMBOL(sas_port_mark_backlink); | |||
| 1017 | 1029 | ||
| 1018 | #define sas_rphy_show_simple(field, name, format_string, cast) \ | 1030 | #define sas_rphy_show_simple(field, name, format_string, cast) \ |
| 1019 | static ssize_t \ | 1031 | static ssize_t \ |
| 1020 | show_sas_rphy_##name(struct class_device *cdev, char *buf) \ | 1032 | show_sas_rphy_##name(struct device *dev, \ |
| 1033 | struct device_attribute *attr, char *buf) \ | ||
| 1021 | { \ | 1034 | { \ |
| 1022 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); \ | 1035 | struct sas_rphy *rphy = transport_class_to_rphy(dev); \ |
| 1023 | \ | 1036 | \ |
| 1024 | return snprintf(buf, 20, format_string, cast rphy->field); \ | 1037 | return snprintf(buf, 20, format_string, cast rphy->field); \ |
| 1025 | } | 1038 | } |
| 1026 | 1039 | ||
| 1027 | #define sas_rphy_simple_attr(field, name, format_string, type) \ | 1040 | #define sas_rphy_simple_attr(field, name, format_string, type) \ |
| 1028 | sas_rphy_show_simple(field, name, format_string, (type)) \ | 1041 | sas_rphy_show_simple(field, name, format_string, (type)) \ |
| 1029 | static SAS_CLASS_DEVICE_ATTR(rphy, name, S_IRUGO, \ | 1042 | static SAS_DEVICE_ATTR(rphy, name, S_IRUGO, \ |
| 1030 | show_sas_rphy_##name, NULL) | 1043 | show_sas_rphy_##name, NULL) |
| 1031 | 1044 | ||
| 1032 | #define sas_rphy_show_protocol(field, name) \ | 1045 | #define sas_rphy_show_protocol(field, name) \ |
| 1033 | static ssize_t \ | 1046 | static ssize_t \ |
| 1034 | show_sas_rphy_##name(struct class_device *cdev, char *buf) \ | 1047 | show_sas_rphy_##name(struct device *dev, \ |
| 1048 | struct device_attribute *attr, char *buf) \ | ||
| 1035 | { \ | 1049 | { \ |
| 1036 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); \ | 1050 | struct sas_rphy *rphy = transport_class_to_rphy(dev); \ |
| 1037 | \ | 1051 | \ |
| 1038 | if (!rphy->field) \ | 1052 | if (!rphy->field) \ |
| 1039 | return snprintf(buf, 20, "none\n"); \ | 1053 | return snprintf(buf, 20, "none\n"); \ |
| @@ -1042,13 +1056,14 @@ show_sas_rphy_##name(struct class_device *cdev, char *buf) \ | |||
| 1042 | 1056 | ||
| 1043 | #define sas_rphy_protocol_attr(field, name) \ | 1057 | #define sas_rphy_protocol_attr(field, name) \ |
| 1044 | sas_rphy_show_protocol(field, name) \ | 1058 | sas_rphy_show_protocol(field, name) \ |
| 1045 | static SAS_CLASS_DEVICE_ATTR(rphy, name, S_IRUGO, \ | 1059 | static SAS_DEVICE_ATTR(rphy, name, S_IRUGO, \ |
| 1046 | show_sas_rphy_##name, NULL) | 1060 | show_sas_rphy_##name, NULL) |
| 1047 | 1061 | ||
| 1048 | static ssize_t | 1062 | static ssize_t |
| 1049 | show_sas_rphy_device_type(struct class_device *cdev, char *buf) | 1063 | show_sas_rphy_device_type(struct device *dev, |
| 1064 | struct device_attribute *attr, char *buf) | ||
| 1050 | { | 1065 | { |
| 1051 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); | 1066 | struct sas_rphy *rphy = transport_class_to_rphy(dev); |
| 1052 | 1067 | ||
| 1053 | if (!rphy->identify.device_type) | 1068 | if (!rphy->identify.device_type) |
| 1054 | return snprintf(buf, 20, "none\n"); | 1069 | return snprintf(buf, 20, "none\n"); |
| @@ -1056,13 +1071,14 @@ show_sas_rphy_device_type(struct class_device *cdev, char *buf) | |||
| 1056 | rphy->identify.device_type, buf); | 1071 | rphy->identify.device_type, buf); |
| 1057 | } | 1072 | } |
| 1058 | 1073 | ||
| 1059 | static SAS_CLASS_DEVICE_ATTR(rphy, device_type, S_IRUGO, | 1074 | static SAS_DEVICE_ATTR(rphy, device_type, S_IRUGO, |
| 1060 | show_sas_rphy_device_type, NULL); | 1075 | show_sas_rphy_device_type, NULL); |
| 1061 | 1076 | ||
| 1062 | static ssize_t | 1077 | static ssize_t |
| 1063 | show_sas_rphy_enclosure_identifier(struct class_device *cdev, char *buf) | 1078 | show_sas_rphy_enclosure_identifier(struct device *dev, |
| 1079 | struct device_attribute *attr, char *buf) | ||
| 1064 | { | 1080 | { |
| 1065 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); | 1081 | struct sas_rphy *rphy = transport_class_to_rphy(dev); |
| 1066 | struct sas_phy *phy = dev_to_phy(rphy->dev.parent); | 1082 | struct sas_phy *phy = dev_to_phy(rphy->dev.parent); |
| 1067 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); | 1083 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); |
| 1068 | struct sas_internal *i = to_sas_internal(shost->transportt); | 1084 | struct sas_internal *i = to_sas_internal(shost->transportt); |
| @@ -1082,13 +1098,14 @@ show_sas_rphy_enclosure_identifier(struct class_device *cdev, char *buf) | |||
| 1082 | return sprintf(buf, "0x%llx\n", (unsigned long long)identifier); | 1098 | return sprintf(buf, "0x%llx\n", (unsigned long long)identifier); |
| 1083 | } | 1099 | } |
| 1084 | 1100 | ||
| 1085 | static SAS_CLASS_DEVICE_ATTR(rphy, enclosure_identifier, S_IRUGO, | 1101 | static SAS_DEVICE_ATTR(rphy, enclosure_identifier, S_IRUGO, |
| 1086 | show_sas_rphy_enclosure_identifier, NULL); | 1102 | show_sas_rphy_enclosure_identifier, NULL); |
| 1087 | 1103 | ||
| 1088 | static ssize_t | 1104 | static ssize_t |
| 1089 | show_sas_rphy_bay_identifier(struct class_device *cdev, char *buf) | 1105 | show_sas_rphy_bay_identifier(struct device *dev, |
| 1106 | struct device_attribute *attr, char *buf) | ||
| 1090 | { | 1107 | { |
| 1091 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); | 1108 | struct sas_rphy *rphy = transport_class_to_rphy(dev); |
| 1092 | struct sas_phy *phy = dev_to_phy(rphy->dev.parent); | 1109 | struct sas_phy *phy = dev_to_phy(rphy->dev.parent); |
| 1093 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); | 1110 | struct Scsi_Host *shost = dev_to_shost(phy->dev.parent); |
| 1094 | struct sas_internal *i = to_sas_internal(shost->transportt); | 1111 | struct sas_internal *i = to_sas_internal(shost->transportt); |
| @@ -1103,7 +1120,7 @@ show_sas_rphy_bay_identifier(struct class_device *cdev, char *buf) | |||
| 1103 | return sprintf(buf, "%d\n", val); | 1120 | return sprintf(buf, "%d\n", val); |
| 1104 | } | 1121 | } |
| 1105 | 1122 | ||
| 1106 | static SAS_CLASS_DEVICE_ATTR(rphy, bay_identifier, S_IRUGO, | 1123 | static SAS_DEVICE_ATTR(rphy, bay_identifier, S_IRUGO, |
| 1107 | show_sas_rphy_bay_identifier, NULL); | 1124 | show_sas_rphy_bay_identifier, NULL); |
| 1108 | 1125 | ||
| 1109 | sas_rphy_protocol_attr(identify.initiator_port_protocols, | 1126 | sas_rphy_protocol_attr(identify.initiator_port_protocols, |
| @@ -1161,9 +1178,10 @@ static DECLARE_TRANSPORT_CLASS(sas_end_dev_class, | |||
| 1161 | 1178 | ||
| 1162 | #define sas_end_dev_show_simple(field, name, format_string, cast) \ | 1179 | #define sas_end_dev_show_simple(field, name, format_string, cast) \ |
| 1163 | static ssize_t \ | 1180 | static ssize_t \ |
| 1164 | show_sas_end_dev_##name(struct class_device *cdev, char *buf) \ | 1181 | show_sas_end_dev_##name(struct device *dev, \ |
| 1182 | struct device_attribute *attr, char *buf) \ | ||
| 1165 | { \ | 1183 | { \ |
| 1166 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); \ | 1184 | struct sas_rphy *rphy = transport_class_to_rphy(dev); \ |
| 1167 | struct sas_end_device *rdev = rphy_to_end_device(rphy); \ | 1185 | struct sas_end_device *rdev = rphy_to_end_device(rphy); \ |
| 1168 | \ | 1186 | \ |
| 1169 | return snprintf(buf, 20, format_string, cast rdev->field); \ | 1187 | return snprintf(buf, 20, format_string, cast rdev->field); \ |
| @@ -1171,7 +1189,7 @@ show_sas_end_dev_##name(struct class_device *cdev, char *buf) \ | |||
| 1171 | 1189 | ||
| 1172 | #define sas_end_dev_simple_attr(field, name, format_string, type) \ | 1190 | #define sas_end_dev_simple_attr(field, name, format_string, type) \ |
| 1173 | sas_end_dev_show_simple(field, name, format_string, (type)) \ | 1191 | sas_end_dev_show_simple(field, name, format_string, (type)) \ |
| 1174 | static SAS_CLASS_DEVICE_ATTR(end_dev, name, S_IRUGO, \ | 1192 | static SAS_DEVICE_ATTR(end_dev, name, S_IRUGO, \ |
| 1175 | show_sas_end_dev_##name, NULL) | 1193 | show_sas_end_dev_##name, NULL) |
| 1176 | 1194 | ||
| 1177 | sas_end_dev_simple_attr(ready_led_meaning, ready_led_meaning, "%d\n", int); | 1195 | sas_end_dev_simple_attr(ready_led_meaning, ready_led_meaning, "%d\n", int); |
| @@ -1185,9 +1203,10 @@ static DECLARE_TRANSPORT_CLASS(sas_expander_class, | |||
| 1185 | 1203 | ||
| 1186 | #define sas_expander_show_simple(field, name, format_string, cast) \ | 1204 | #define sas_expander_show_simple(field, name, format_string, cast) \ |
| 1187 | static ssize_t \ | 1205 | static ssize_t \ |
| 1188 | show_sas_expander_##name(struct class_device *cdev, char *buf) \ | 1206 | show_sas_expander_##name(struct device *dev, \ |
| 1207 | struct device_attribute *attr, char *buf) \ | ||
| 1189 | { \ | 1208 | { \ |
| 1190 | struct sas_rphy *rphy = transport_class_to_rphy(cdev); \ | 1209 | struct sas_rphy *rphy = transport_class_to_rphy(dev); \ |
| 1191 | struct sas_expander_device *edev = rphy_to_expander_device(rphy); \ | 1210 | struct sas_expander_device *edev = rphy_to_expander_device(rphy); \ |
| 1192 | \ | 1211 | \ |
| 1193 | return snprintf(buf, 20, format_string, cast edev->field); \ | 1212 | return snprintf(buf, 20, format_string, cast edev->field); \ |
| @@ -1195,7 +1214,7 @@ show_sas_expander_##name(struct class_device *cdev, char *buf) \ | |||
| 1195 | 1214 | ||
| 1196 | #define sas_expander_simple_attr(field, name, format_string, type) \ | 1215 | #define sas_expander_simple_attr(field, name, format_string, type) \ |
| 1197 | sas_expander_show_simple(field, name, format_string, (type)) \ | 1216 | sas_expander_show_simple(field, name, format_string, (type)) \ |
| 1198 | static SAS_CLASS_DEVICE_ATTR(expander, name, S_IRUGO, \ | 1217 | static SAS_DEVICE_ATTR(expander, name, S_IRUGO, \ |
| 1199 | show_sas_expander_##name, NULL) | 1218 | show_sas_expander_##name, NULL) |
| 1200 | 1219 | ||
| 1201 | sas_expander_simple_attr(vendor_id, vendor_id, "%s\n", char *); | 1220 | sas_expander_simple_attr(vendor_id, vendor_id, "%s\n", char *); |
| @@ -1554,14 +1573,14 @@ static int sas_user_scan(struct Scsi_Host *shost, uint channel, | |||
| 1554 | */ | 1573 | */ |
| 1555 | 1574 | ||
| 1556 | #define SETUP_TEMPLATE(attrb, field, perm, test) \ | 1575 | #define SETUP_TEMPLATE(attrb, field, perm, test) \ |
| 1557 | i->private_##attrb[count] = class_device_attr_##field; \ | 1576 | i->private_##attrb[count] = dev_attr_##field; \ |
| 1558 | i->private_##attrb[count].attr.mode = perm; \ | 1577 | i->private_##attrb[count].attr.mode = perm; \ |
| 1559 | i->attrb[count] = &i->private_##attrb[count]; \ | 1578 | i->attrb[count] = &i->private_##attrb[count]; \ |
| 1560 | if (test) \ | 1579 | if (test) \ |
| 1561 | count++ | 1580 | count++ |
| 1562 | 1581 | ||
| 1563 | #define SETUP_TEMPLATE_RW(attrb, field, perm, test, ro_test, ro_perm) \ | 1582 | #define SETUP_TEMPLATE_RW(attrb, field, perm, test, ro_test, ro_perm) \ |
| 1564 | i->private_##attrb[count] = class_device_attr_##field; \ | 1583 | i->private_##attrb[count] = dev_attr_##field; \ |
| 1565 | i->private_##attrb[count].attr.mode = perm; \ | 1584 | i->private_##attrb[count].attr.mode = perm; \ |
| 1566 | if (ro_test) { \ | 1585 | if (ro_test) { \ |
| 1567 | i->private_##attrb[count].attr.mode = ro_perm; \ | 1586 | i->private_##attrb[count].attr.mode = ro_perm; \ |
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c index 1fb60313a516..bc12b5d5d676 100644 --- a/drivers/scsi/scsi_transport_spi.c +++ b/drivers/scsi/scsi_transport_spi.c | |||
| @@ -158,7 +158,7 @@ static inline enum spi_signal_type spi_signal_to_value(const char *name) | |||
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | static int spi_host_setup(struct transport_container *tc, struct device *dev, | 160 | static int spi_host_setup(struct transport_container *tc, struct device *dev, |
| 161 | struct class_device *cdev) | 161 | struct device *cdev) |
| 162 | { | 162 | { |
| 163 | struct Scsi_Host *shost = dev_to_shost(dev); | 163 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 164 | 164 | ||
| @@ -169,7 +169,7 @@ static int spi_host_setup(struct transport_container *tc, struct device *dev, | |||
| 169 | 169 | ||
| 170 | static int spi_host_configure(struct transport_container *tc, | 170 | static int spi_host_configure(struct transport_container *tc, |
| 171 | struct device *dev, | 171 | struct device *dev, |
| 172 | struct class_device *cdev); | 172 | struct device *cdev); |
| 173 | 173 | ||
| 174 | static DECLARE_TRANSPORT_CLASS(spi_host_class, | 174 | static DECLARE_TRANSPORT_CLASS(spi_host_class, |
| 175 | "spi_host", | 175 | "spi_host", |
| @@ -195,11 +195,11 @@ static int spi_host_match(struct attribute_container *cont, | |||
| 195 | 195 | ||
| 196 | static int spi_target_configure(struct transport_container *tc, | 196 | static int spi_target_configure(struct transport_container *tc, |
| 197 | struct device *dev, | 197 | struct device *dev, |
| 198 | struct class_device *cdev); | 198 | struct device *cdev); |
| 199 | 199 | ||
| 200 | static int spi_device_configure(struct transport_container *tc, | 200 | static int spi_device_configure(struct transport_container *tc, |
| 201 | struct device *dev, | 201 | struct device *dev, |
| 202 | struct class_device *cdev) | 202 | struct device *cdev) |
| 203 | { | 203 | { |
| 204 | struct scsi_device *sdev = to_scsi_device(dev); | 204 | struct scsi_device *sdev = to_scsi_device(dev); |
| 205 | struct scsi_target *starget = sdev->sdev_target; | 205 | struct scsi_target *starget = sdev->sdev_target; |
| @@ -219,7 +219,7 @@ static int spi_device_configure(struct transport_container *tc, | |||
| 219 | 219 | ||
| 220 | static int spi_setup_transport_attrs(struct transport_container *tc, | 220 | static int spi_setup_transport_attrs(struct transport_container *tc, |
| 221 | struct device *dev, | 221 | struct device *dev, |
| 222 | struct class_device *cdev) | 222 | struct device *cdev) |
| 223 | { | 223 | { |
| 224 | struct scsi_target *starget = to_scsi_target(dev); | 224 | struct scsi_target *starget = to_scsi_target(dev); |
| 225 | 225 | ||
| @@ -248,9 +248,10 @@ static int spi_setup_transport_attrs(struct transport_container *tc, | |||
| 248 | #define spi_transport_show_simple(field, format_string) \ | 248 | #define spi_transport_show_simple(field, format_string) \ |
| 249 | \ | 249 | \ |
| 250 | static ssize_t \ | 250 | static ssize_t \ |
| 251 | show_spi_transport_##field(struct class_device *cdev, char *buf) \ | 251 | show_spi_transport_##field(struct device *dev, \ |
| 252 | struct device_attribute *attr, char *buf) \ | ||
| 252 | { \ | 253 | { \ |
| 253 | struct scsi_target *starget = transport_class_to_starget(cdev); \ | 254 | struct scsi_target *starget = transport_class_to_starget(dev); \ |
| 254 | struct spi_transport_attrs *tp; \ | 255 | struct spi_transport_attrs *tp; \ |
| 255 | \ | 256 | \ |
| 256 | tp = (struct spi_transport_attrs *)&starget->starget_data; \ | 257 | tp = (struct spi_transport_attrs *)&starget->starget_data; \ |
| @@ -260,11 +261,12 @@ show_spi_transport_##field(struct class_device *cdev, char *buf) \ | |||
| 260 | #define spi_transport_store_simple(field, format_string) \ | 261 | #define spi_transport_store_simple(field, format_string) \ |
| 261 | \ | 262 | \ |
| 262 | static ssize_t \ | 263 | static ssize_t \ |
| 263 | store_spi_transport_##field(struct class_device *cdev, const char *buf, \ | 264 | store_spi_transport_##field(struct device *dev, \ |
| 264 | size_t count) \ | 265 | struct device_attribute *attr, \ |
| 266 | const char *buf, size_t count) \ | ||
| 265 | { \ | 267 | { \ |
| 266 | int val; \ | 268 | int val; \ |
| 267 | struct scsi_target *starget = transport_class_to_starget(cdev); \ | 269 | struct scsi_target *starget = transport_class_to_starget(dev); \ |
| 268 | struct spi_transport_attrs *tp; \ | 270 | struct spi_transport_attrs *tp; \ |
| 269 | \ | 271 | \ |
| 270 | tp = (struct spi_transport_attrs *)&starget->starget_data; \ | 272 | tp = (struct spi_transport_attrs *)&starget->starget_data; \ |
| @@ -276,9 +278,10 @@ store_spi_transport_##field(struct class_device *cdev, const char *buf, \ | |||
| 276 | #define spi_transport_show_function(field, format_string) \ | 278 | #define spi_transport_show_function(field, format_string) \ |
| 277 | \ | 279 | \ |
| 278 | static ssize_t \ | 280 | static ssize_t \ |
| 279 | show_spi_transport_##field(struct class_device *cdev, char *buf) \ | 281 | show_spi_transport_##field(struct device *dev, \ |
| 282 | struct device_attribute *attr, char *buf) \ | ||
| 280 | { \ | 283 | { \ |
| 281 | struct scsi_target *starget = transport_class_to_starget(cdev); \ | 284 | struct scsi_target *starget = transport_class_to_starget(dev); \ |
| 282 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ | 285 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ |
| 283 | struct spi_transport_attrs *tp; \ | 286 | struct spi_transport_attrs *tp; \ |
| 284 | struct spi_internal *i = to_spi_internal(shost->transportt); \ | 287 | struct spi_internal *i = to_spi_internal(shost->transportt); \ |
| @@ -290,11 +293,12 @@ show_spi_transport_##field(struct class_device *cdev, char *buf) \ | |||
| 290 | 293 | ||
| 291 | #define spi_transport_store_function(field, format_string) \ | 294 | #define spi_transport_store_function(field, format_string) \ |
| 292 | static ssize_t \ | 295 | static ssize_t \ |
| 293 | store_spi_transport_##field(struct class_device *cdev, const char *buf, \ | 296 | store_spi_transport_##field(struct device *dev, \ |
| 294 | size_t count) \ | 297 | struct device_attribute *attr, \ |
| 298 | const char *buf, size_t count) \ | ||
| 295 | { \ | 299 | { \ |
| 296 | int val; \ | 300 | int val; \ |
| 297 | struct scsi_target *starget = transport_class_to_starget(cdev); \ | 301 | struct scsi_target *starget = transport_class_to_starget(dev); \ |
| 298 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ | 302 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ |
| 299 | struct spi_internal *i = to_spi_internal(shost->transportt); \ | 303 | struct spi_internal *i = to_spi_internal(shost->transportt); \ |
| 300 | \ | 304 | \ |
| @@ -307,11 +311,12 @@ store_spi_transport_##field(struct class_device *cdev, const char *buf, \ | |||
| 307 | 311 | ||
| 308 | #define spi_transport_store_max(field, format_string) \ | 312 | #define spi_transport_store_max(field, format_string) \ |
| 309 | static ssize_t \ | 313 | static ssize_t \ |
| 310 | store_spi_transport_##field(struct class_device *cdev, const char *buf, \ | 314 | store_spi_transport_##field(struct device *dev, \ |
| 311 | size_t count) \ | 315 | struct device_attribute *attr, \ |
| 316 | const char *buf, size_t count) \ | ||
| 312 | { \ | 317 | { \ |
| 313 | int val; \ | 318 | int val; \ |
| 314 | struct scsi_target *starget = transport_class_to_starget(cdev); \ | 319 | struct scsi_target *starget = transport_class_to_starget(dev); \ |
| 315 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ | 320 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); \ |
| 316 | struct spi_internal *i = to_spi_internal(shost->transportt); \ | 321 | struct spi_internal *i = to_spi_internal(shost->transportt); \ |
| 317 | struct spi_transport_attrs *tp \ | 322 | struct spi_transport_attrs *tp \ |
| @@ -329,24 +334,24 @@ store_spi_transport_##field(struct class_device *cdev, const char *buf, \ | |||
| 329 | #define spi_transport_rd_attr(field, format_string) \ | 334 | #define spi_transport_rd_attr(field, format_string) \ |
| 330 | spi_transport_show_function(field, format_string) \ | 335 | spi_transport_show_function(field, format_string) \ |
| 331 | spi_transport_store_function(field, format_string) \ | 336 | spi_transport_store_function(field, format_string) \ |
| 332 | static CLASS_DEVICE_ATTR(field, S_IRUGO, \ | 337 | static DEVICE_ATTR(field, S_IRUGO, \ |
| 333 | show_spi_transport_##field, \ | 338 | show_spi_transport_##field, \ |
| 334 | store_spi_transport_##field); | 339 | store_spi_transport_##field); |
| 335 | 340 | ||
| 336 | #define spi_transport_simple_attr(field, format_string) \ | 341 | #define spi_transport_simple_attr(field, format_string) \ |
| 337 | spi_transport_show_simple(field, format_string) \ | 342 | spi_transport_show_simple(field, format_string) \ |
| 338 | spi_transport_store_simple(field, format_string) \ | 343 | spi_transport_store_simple(field, format_string) \ |
| 339 | static CLASS_DEVICE_ATTR(field, S_IRUGO, \ | 344 | static DEVICE_ATTR(field, S_IRUGO, \ |
| 340 | show_spi_transport_##field, \ | 345 | show_spi_transport_##field, \ |
| 341 | store_spi_transport_##field); | 346 | store_spi_transport_##field); |
| 342 | 347 | ||
| 343 | #define spi_transport_max_attr(field, format_string) \ | 348 | #define spi_transport_max_attr(field, format_string) \ |
| 344 | spi_transport_show_function(field, format_string) \ | 349 | spi_transport_show_function(field, format_string) \ |
| 345 | spi_transport_store_max(field, format_string) \ | 350 | spi_transport_store_max(field, format_string) \ |
| 346 | spi_transport_simple_attr(max_##field, format_string) \ | 351 | spi_transport_simple_attr(max_##field, format_string) \ |
| 347 | static CLASS_DEVICE_ATTR(field, S_IRUGO, \ | 352 | static DEVICE_ATTR(field, S_IRUGO, \ |
| 348 | show_spi_transport_##field, \ | 353 | show_spi_transport_##field, \ |
| 349 | store_spi_transport_##field); | 354 | store_spi_transport_##field); |
| 350 | 355 | ||
| 351 | /* The Parallel SCSI Tranport Attributes: */ | 356 | /* The Parallel SCSI Tranport Attributes: */ |
| 352 | spi_transport_max_attr(offset, "%d\n"); | 357 | spi_transport_max_attr(offset, "%d\n"); |
| @@ -370,14 +375,15 @@ static int child_iter(struct device *dev, void *data) | |||
| 370 | } | 375 | } |
| 371 | 376 | ||
| 372 | static ssize_t | 377 | static ssize_t |
| 373 | store_spi_revalidate(struct class_device *cdev, const char *buf, size_t count) | 378 | store_spi_revalidate(struct device *dev, struct device_attribute *attr, |
| 379 | const char *buf, size_t count) | ||
| 374 | { | 380 | { |
| 375 | struct scsi_target *starget = transport_class_to_starget(cdev); | 381 | struct scsi_target *starget = transport_class_to_starget(dev); |
| 376 | 382 | ||
| 377 | device_for_each_child(&starget->dev, NULL, child_iter); | 383 | device_for_each_child(&starget->dev, NULL, child_iter); |
| 378 | return count; | 384 | return count; |
| 379 | } | 385 | } |
| 380 | static CLASS_DEVICE_ATTR(revalidate, S_IWUSR, NULL, store_spi_revalidate); | 386 | static DEVICE_ATTR(revalidate, S_IWUSR, NULL, store_spi_revalidate); |
| 381 | 387 | ||
| 382 | /* Translate the period into ns according to the current spec | 388 | /* Translate the period into ns according to the current spec |
| 383 | * for SDTR/PPR messages */ | 389 | * for SDTR/PPR messages */ |
| @@ -412,7 +418,7 @@ show_spi_transport_period_helper(char *buf, int period) | |||
| 412 | } | 418 | } |
| 413 | 419 | ||
| 414 | static ssize_t | 420 | static ssize_t |
| 415 | store_spi_transport_period_helper(struct class_device *cdev, const char *buf, | 421 | store_spi_transport_period_helper(struct device *dev, const char *buf, |
| 416 | size_t count, int *periodp) | 422 | size_t count, int *periodp) |
| 417 | { | 423 | { |
| 418 | int j, picosec, period = -1; | 424 | int j, picosec, period = -1; |
| @@ -449,9 +455,10 @@ store_spi_transport_period_helper(struct class_device *cdev, const char *buf, | |||
| 449 | } | 455 | } |
| 450 | 456 | ||
| 451 | static ssize_t | 457 | static ssize_t |
| 452 | show_spi_transport_period(struct class_device *cdev, char *buf) | 458 | show_spi_transport_period(struct device *dev, |
| 459 | struct device_attribute *attr, char *buf) | ||
| 453 | { | 460 | { |
| 454 | struct scsi_target *starget = transport_class_to_starget(cdev); | 461 | struct scsi_target *starget = transport_class_to_starget(dev); |
| 455 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); | 462 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); |
| 456 | struct spi_internal *i = to_spi_internal(shost->transportt); | 463 | struct spi_internal *i = to_spi_internal(shost->transportt); |
| 457 | struct spi_transport_attrs *tp = | 464 | struct spi_transport_attrs *tp = |
| @@ -464,8 +471,8 @@ show_spi_transport_period(struct class_device *cdev, char *buf) | |||
| 464 | } | 471 | } |
| 465 | 472 | ||
| 466 | static ssize_t | 473 | static ssize_t |
| 467 | store_spi_transport_period(struct class_device *cdev, const char *buf, | 474 | store_spi_transport_period(struct device *cdev, struct device_attribute *attr, |
| 468 | size_t count) | 475 | const char *buf, size_t count) |
| 469 | { | 476 | { |
| 470 | struct scsi_target *starget = transport_class_to_starget(cdev); | 477 | struct scsi_target *starget = transport_class_to_starget(cdev); |
| 471 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); | 478 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); |
| @@ -487,12 +494,13 @@ store_spi_transport_period(struct class_device *cdev, const char *buf, | |||
| 487 | return retval; | 494 | return retval; |
| 488 | } | 495 | } |
| 489 | 496 | ||
| 490 | static CLASS_DEVICE_ATTR(period, S_IRUGO, | 497 | static DEVICE_ATTR(period, S_IRUGO, |
| 491 | show_spi_transport_period, | 498 | show_spi_transport_period, |
| 492 | store_spi_transport_period); | 499 | store_spi_transport_period); |
| 493 | 500 | ||
| 494 | static ssize_t | 501 | static ssize_t |
| 495 | show_spi_transport_min_period(struct class_device *cdev, char *buf) | 502 | show_spi_transport_min_period(struct device *cdev, |
| 503 | struct device_attribute *attr, char *buf) | ||
| 496 | { | 504 | { |
| 497 | struct scsi_target *starget = transport_class_to_starget(cdev); | 505 | struct scsi_target *starget = transport_class_to_starget(cdev); |
| 498 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); | 506 | struct Scsi_Host *shost = dev_to_shost(starget->dev.parent); |
| @@ -507,8 +515,9 @@ show_spi_transport_min_period(struct class_device *cdev, char *buf) | |||
| 507 | } | 515 | } |
| 508 | 516 | ||
| 509 | static ssize_t | 517 | static ssize_t |
| 510 | store_spi_transport_min_period(struct class_device *cdev, const char *buf, | 518 | store_spi_transport_min_period(struct device *cdev, |
| 511 | size_t count) | 519 | struct device_attribute *attr, |
| 520 | const char *buf, size_t count) | ||
| 512 | { | 521 | { |
| 513 | struct scsi_target *starget = transport_class_to_starget(cdev); | 522 | struct scsi_target *starget = transport_class_to_starget(cdev); |
| 514 | struct spi_transport_attrs *tp = | 523 | struct spi_transport_attrs *tp = |
| @@ -519,12 +528,14 @@ store_spi_transport_min_period(struct class_device *cdev, const char *buf, | |||
| 519 | } | 528 | } |
| 520 | 529 | ||
| 521 | 530 | ||
| 522 | static CLASS_DEVICE_ATTR(min_period, S_IRUGO, | 531 | static DEVICE_ATTR(min_period, S_IRUGO, |
| 523 | show_spi_transport_min_period, | 532 | show_spi_transport_min_period, |
| 524 | store_spi_transport_min_period); | 533 | store_spi_transport_min_period); |
| 525 | 534 | ||
| 526 | 535 | ||
| 527 | static ssize_t show_spi_host_signalling(struct class_device *cdev, char *buf) | 536 | static ssize_t show_spi_host_signalling(struct device *cdev, |
| 537 | struct device_attribute *attr, | ||
| 538 | char *buf) | ||
| 528 | { | 539 | { |
| 529 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 540 | struct Scsi_Host *shost = transport_class_to_shost(cdev); |
| 530 | struct spi_internal *i = to_spi_internal(shost->transportt); | 541 | struct spi_internal *i = to_spi_internal(shost->transportt); |
| @@ -534,10 +545,11 @@ static ssize_t show_spi_host_signalling(struct class_device *cdev, char *buf) | |||
| 534 | 545 | ||
| 535 | return sprintf(buf, "%s\n", spi_signal_to_string(spi_signalling(shost))); | 546 | return sprintf(buf, "%s\n", spi_signal_to_string(spi_signalling(shost))); |
| 536 | } | 547 | } |
| 537 | static ssize_t store_spi_host_signalling(struct class_device *cdev, | 548 | static ssize_t store_spi_host_signalling(struct device *dev, |
| 549 | struct device_attribute *attr, | ||
| 538 | const char *buf, size_t count) | 550 | const char *buf, size_t count) |
| 539 | { | 551 | { |
| 540 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 552 | struct Scsi_Host *shost = transport_class_to_shost(dev); |
| 541 | struct spi_internal *i = to_spi_internal(shost->transportt); | 553 | struct spi_internal *i = to_spi_internal(shost->transportt); |
| 542 | enum spi_signal_type type = spi_signal_to_value(buf); | 554 | enum spi_signal_type type = spi_signal_to_value(buf); |
| 543 | 555 | ||
| @@ -549,9 +561,9 @@ static ssize_t store_spi_host_signalling(struct class_device *cdev, | |||
| 549 | 561 | ||
| 550 | return count; | 562 | return count; |
| 551 | } | 563 | } |
| 552 | static CLASS_DEVICE_ATTR(signalling, S_IRUGO, | 564 | static DEVICE_ATTR(signalling, S_IRUGO, |
| 553 | show_spi_host_signalling, | 565 | show_spi_host_signalling, |
| 554 | store_spi_host_signalling); | 566 | store_spi_host_signalling); |
| 555 | 567 | ||
| 556 | #define DV_SET(x, y) \ | 568 | #define DV_SET(x, y) \ |
| 557 | if(i->f->set_##x) \ | 569 | if(i->f->set_##x) \ |
| @@ -1334,7 +1346,7 @@ static DECLARE_ANON_TRANSPORT_CLASS(spi_device_class, | |||
| 1334 | spi_device_configure); | 1346 | spi_device_configure); |
| 1335 | 1347 | ||
| 1336 | static struct attribute *host_attributes[] = { | 1348 | static struct attribute *host_attributes[] = { |
| 1337 | &class_device_attr_signalling.attr, | 1349 | &dev_attr_signalling.attr, |
| 1338 | NULL | 1350 | NULL |
| 1339 | }; | 1351 | }; |
| 1340 | 1352 | ||
| @@ -1344,12 +1356,12 @@ static struct attribute_group host_attribute_group = { | |||
| 1344 | 1356 | ||
| 1345 | static int spi_host_configure(struct transport_container *tc, | 1357 | static int spi_host_configure(struct transport_container *tc, |
| 1346 | struct device *dev, | 1358 | struct device *dev, |
| 1347 | struct class_device *cdev) | 1359 | struct device *cdev) |
| 1348 | { | 1360 | { |
| 1349 | struct kobject *kobj = &cdev->kobj; | 1361 | struct kobject *kobj = &cdev->kobj; |
| 1350 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1362 | struct Scsi_Host *shost = transport_class_to_shost(cdev); |
| 1351 | struct spi_internal *si = to_spi_internal(shost->transportt); | 1363 | struct spi_internal *si = to_spi_internal(shost->transportt); |
| 1352 | struct attribute *attr = &class_device_attr_signalling.attr; | 1364 | struct attribute *attr = &dev_attr_signalling.attr; |
| 1353 | int rc = 0; | 1365 | int rc = 0; |
| 1354 | 1366 | ||
| 1355 | if (si->f->set_signalling) | 1367 | if (si->f->set_signalling) |
| @@ -1368,76 +1380,75 @@ static int spi_host_configure(struct transport_container *tc, | |||
| 1368 | static int target_attribute_is_visible(struct kobject *kobj, | 1380 | static int target_attribute_is_visible(struct kobject *kobj, |
| 1369 | struct attribute *attr, int i) | 1381 | struct attribute *attr, int i) |
| 1370 | { | 1382 | { |
| 1371 | struct class_device *cdev = | 1383 | struct device *cdev = container_of(kobj, struct device, kobj); |
| 1372 | container_of(kobj, struct class_device, kobj); | ||
| 1373 | struct scsi_target *starget = transport_class_to_starget(cdev); | 1384 | struct scsi_target *starget = transport_class_to_starget(cdev); |
| 1374 | struct Scsi_Host *shost = transport_class_to_shost(cdev); | 1385 | struct Scsi_Host *shost = transport_class_to_shost(cdev); |
| 1375 | struct spi_internal *si = to_spi_internal(shost->transportt); | 1386 | struct spi_internal *si = to_spi_internal(shost->transportt); |
| 1376 | 1387 | ||
| 1377 | if (attr == &class_device_attr_period.attr && | 1388 | if (attr == &dev_attr_period.attr && |
| 1378 | spi_support_sync(starget)) | 1389 | spi_support_sync(starget)) |
| 1379 | return TARGET_ATTRIBUTE_HELPER(period); | 1390 | return TARGET_ATTRIBUTE_HELPER(period); |
| 1380 | else if (attr == &class_device_attr_min_period.attr && | 1391 | else if (attr == &dev_attr_min_period.attr && |
| 1381 | spi_support_sync(starget)) | 1392 | spi_support_sync(starget)) |
| 1382 | return TARGET_ATTRIBUTE_HELPER(period); | 1393 | return TARGET_ATTRIBUTE_HELPER(period); |
| 1383 | else if (attr == &class_device_attr_offset.attr && | 1394 | else if (attr == &dev_attr_offset.attr && |
| 1384 | spi_support_sync(starget)) | 1395 | spi_support_sync(starget)) |
| 1385 | return TARGET_ATTRIBUTE_HELPER(offset); | 1396 | return TARGET_ATTRIBUTE_HELPER(offset); |
| 1386 | else if (attr == &class_device_attr_max_offset.attr && | 1397 | else if (attr == &dev_attr_max_offset.attr && |
| 1387 | spi_support_sync(starget)) | 1398 | spi_support_sync(starget)) |
| 1388 | return TARGET_ATTRIBUTE_HELPER(offset); | 1399 | return TARGET_ATTRIBUTE_HELPER(offset); |
| 1389 | else if (attr == &class_device_attr_width.attr && | 1400 | else if (attr == &dev_attr_width.attr && |
| 1390 | spi_support_wide(starget)) | 1401 | spi_support_wide(starget)) |
| 1391 | return TARGET_ATTRIBUTE_HELPER(width); | 1402 | return TARGET_ATTRIBUTE_HELPER(width); |
| 1392 | else if (attr == &class_device_attr_max_width.attr && | 1403 | else if (attr == &dev_attr_max_width.attr && |
| 1393 | spi_support_wide(starget)) | 1404 | spi_support_wide(starget)) |
| 1394 | return TARGET_ATTRIBUTE_HELPER(width); | 1405 | return TARGET_ATTRIBUTE_HELPER(width); |
| 1395 | else if (attr == &class_device_attr_iu.attr && | 1406 | else if (attr == &dev_attr_iu.attr && |
| 1396 | spi_support_ius(starget)) | 1407 | spi_support_ius(starget)) |
| 1397 | return TARGET_ATTRIBUTE_HELPER(iu); | 1408 | return TARGET_ATTRIBUTE_HELPER(iu); |
| 1398 | else if (attr == &class_device_attr_dt.attr && | 1409 | else if (attr == &dev_attr_dt.attr && |
| 1399 | spi_support_dt(starget)) | 1410 | spi_support_dt(starget)) |
| 1400 | return TARGET_ATTRIBUTE_HELPER(dt); | 1411 | return TARGET_ATTRIBUTE_HELPER(dt); |
| 1401 | else if (attr == &class_device_attr_qas.attr && | 1412 | else if (attr == &dev_attr_qas.attr && |
| 1402 | spi_support_qas(starget)) | 1413 | spi_support_qas(starget)) |
| 1403 | return TARGET_ATTRIBUTE_HELPER(qas); | 1414 | return TARGET_ATTRIBUTE_HELPER(qas); |
| 1404 | else if (attr == &class_device_attr_wr_flow.attr && | 1415 | else if (attr == &dev_attr_wr_flow.attr && |
| 1405 | spi_support_ius(starget)) | 1416 | spi_support_ius(starget)) |
| 1406 | return TARGET_ATTRIBUTE_HELPER(wr_flow); | 1417 | return TARGET_ATTRIBUTE_HELPER(wr_flow); |
| 1407 | else if (attr == &class_device_attr_rd_strm.attr && | 1418 | else if (attr == &dev_attr_rd_strm.attr && |
| 1408 | spi_support_ius(starget)) | 1419 | spi_support_ius(starget)) |
| 1409 | return TARGET_ATTRIBUTE_HELPER(rd_strm); | 1420 | return TARGET_ATTRIBUTE_HELPER(rd_strm); |
| 1410 | else if (attr == &class_device_attr_rti.attr && | 1421 | else if (attr == &dev_attr_rti.attr && |
| 1411 | spi_support_ius(starget)) | 1422 | spi_support_ius(starget)) |
| 1412 | return TARGET_ATTRIBUTE_HELPER(rti); | 1423 | return TARGET_ATTRIBUTE_HELPER(rti); |
| 1413 | else if (attr == &class_device_attr_pcomp_en.attr && | 1424 | else if (attr == &dev_attr_pcomp_en.attr && |
| 1414 | spi_support_ius(starget)) | 1425 | spi_support_ius(starget)) |
| 1415 | return TARGET_ATTRIBUTE_HELPER(pcomp_en); | 1426 | return TARGET_ATTRIBUTE_HELPER(pcomp_en); |
| 1416 | else if (attr == &class_device_attr_hold_mcs.attr && | 1427 | else if (attr == &dev_attr_hold_mcs.attr && |
| 1417 | spi_support_ius(starget)) | 1428 | spi_support_ius(starget)) |
| 1418 | return TARGET_ATTRIBUTE_HELPER(hold_mcs); | 1429 | return TARGET_ATTRIBUTE_HELPER(hold_mcs); |
| 1419 | else if (attr == &class_device_attr_revalidate.attr) | 1430 | else if (attr == &dev_attr_revalidate.attr) |
| 1420 | return 1; | 1431 | return 1; |
| 1421 | 1432 | ||
| 1422 | return 0; | 1433 | return 0; |
| 1423 | } | 1434 | } |
| 1424 | 1435 | ||
| 1425 | static struct attribute *target_attributes[] = { | 1436 | static struct attribute *target_attributes[] = { |
| 1426 | &class_device_attr_period.attr, | 1437 | &dev_attr_period.attr, |
| 1427 | &class_device_attr_min_period.attr, | 1438 | &dev_attr_min_period.attr, |
| 1428 | &class_device_attr_offset.attr, | 1439 | &dev_attr_offset.attr, |
| 1429 | &class_device_attr_max_offset.attr, | 1440 | &dev_attr_max_offset.attr, |
| 1430 | &class_device_attr_width.attr, | 1441 | &dev_attr_width.attr, |
| 1431 | &class_device_attr_max_width.attr, | 1442 | &dev_attr_max_width.attr, |
| 1432 | &class_device_attr_iu.attr, | 1443 | &dev_attr_iu.attr, |
| 1433 | &class_device_attr_dt.attr, | 1444 | &dev_attr_dt.attr, |
| 1434 | &class_device_attr_qas.attr, | 1445 | &dev_attr_qas.attr, |
| 1435 | &class_device_attr_wr_flow.attr, | 1446 | &dev_attr_wr_flow.attr, |
| 1436 | &class_device_attr_rd_strm.attr, | 1447 | &dev_attr_rd_strm.attr, |
| 1437 | &class_device_attr_rti.attr, | 1448 | &dev_attr_rti.attr, |
| 1438 | &class_device_attr_pcomp_en.attr, | 1449 | &dev_attr_pcomp_en.attr, |
| 1439 | &class_device_attr_hold_mcs.attr, | 1450 | &dev_attr_hold_mcs.attr, |
| 1440 | &class_device_attr_revalidate.attr, | 1451 | &dev_attr_revalidate.attr, |
| 1441 | NULL | 1452 | NULL |
| 1442 | }; | 1453 | }; |
| 1443 | 1454 | ||
| @@ -1448,7 +1459,7 @@ static struct attribute_group target_attribute_group = { | |||
| 1448 | 1459 | ||
| 1449 | static int spi_target_configure(struct transport_container *tc, | 1460 | static int spi_target_configure(struct transport_container *tc, |
| 1450 | struct device *dev, | 1461 | struct device *dev, |
| 1451 | struct class_device *cdev) | 1462 | struct device *cdev) |
| 1452 | { | 1463 | { |
| 1453 | struct kobject *kobj = &cdev->kobj; | 1464 | struct kobject *kobj = &cdev->kobj; |
| 1454 | int i; | 1465 | int i; |
| @@ -1462,7 +1473,7 @@ static int spi_target_configure(struct transport_container *tc, | |||
| 1462 | * to ignore, sysfs also does a WARN_ON and dumps a trace, | 1473 | * to ignore, sysfs also does a WARN_ON and dumps a trace, |
| 1463 | * which is bad, so temporarily, skip attributes that are | 1474 | * which is bad, so temporarily, skip attributes that are |
| 1464 | * already visible (the revalidate one) */ | 1475 | * already visible (the revalidate one) */ |
| 1465 | if (j && attr != &class_device_attr_revalidate.attr) | 1476 | if (j && attr != &dev_attr_revalidate.attr) |
| 1466 | rc = sysfs_add_file_to_group(kobj, attr, | 1477 | rc = sysfs_add_file_to_group(kobj, attr, |
| 1467 | target_attribute_group.name); | 1478 | target_attribute_group.name); |
| 1468 | /* and make the attribute writeable if we have a set | 1479 | /* and make the attribute writeable if we have a set |
diff --git a/drivers/scsi/scsi_transport_srp.c b/drivers/scsi/scsi_transport_srp.c index 2445c98ae95e..8a7af951d98a 100644 --- a/drivers/scsi/scsi_transport_srp.c +++ b/drivers/scsi/scsi_transport_srp.c | |||
| @@ -44,20 +44,20 @@ struct srp_internal { | |||
| 44 | struct scsi_transport_template t; | 44 | struct scsi_transport_template t; |
| 45 | struct srp_function_template *f; | 45 | struct srp_function_template *f; |
| 46 | 46 | ||
| 47 | struct class_device_attribute *host_attrs[SRP_HOST_ATTRS + 1]; | 47 | struct device_attribute *host_attrs[SRP_HOST_ATTRS + 1]; |
| 48 | 48 | ||
| 49 | struct class_device_attribute *rport_attrs[SRP_RPORT_ATTRS + 1]; | 49 | struct device_attribute *rport_attrs[SRP_RPORT_ATTRS + 1]; |
| 50 | struct class_device_attribute private_rport_attrs[SRP_RPORT_ATTRS]; | 50 | struct device_attribute private_rport_attrs[SRP_RPORT_ATTRS]; |
| 51 | struct transport_container rport_attr_cont; | 51 | struct transport_container rport_attr_cont; |
| 52 | }; | 52 | }; |
| 53 | 53 | ||
| 54 | #define to_srp_internal(tmpl) container_of(tmpl, struct srp_internal, t) | 54 | #define to_srp_internal(tmpl) container_of(tmpl, struct srp_internal, t) |
| 55 | 55 | ||
| 56 | #define dev_to_rport(d) container_of(d, struct srp_rport, dev) | 56 | #define dev_to_rport(d) container_of(d, struct srp_rport, dev) |
| 57 | #define transport_class_to_srp_rport(cdev) dev_to_rport((cdev)->dev) | 57 | #define transport_class_to_srp_rport(dev) dev_to_rport((dev)->parent) |
| 58 | 58 | ||
| 59 | static int srp_host_setup(struct transport_container *tc, struct device *dev, | 59 | static int srp_host_setup(struct transport_container *tc, struct device *dev, |
| 60 | struct class_device *cdev) | 60 | struct device *cdev) |
| 61 | { | 61 | { |
| 62 | struct Scsi_Host *shost = dev_to_shost(dev); | 62 | struct Scsi_Host *shost = dev_to_shost(dev); |
| 63 | struct srp_host_attrs *srp_host = to_srp_host_attrs(shost); | 63 | struct srp_host_attrs *srp_host = to_srp_host_attrs(shost); |
| @@ -73,7 +73,7 @@ static DECLARE_TRANSPORT_CLASS(srp_rport_class, "srp_remote_ports", | |||
| 73 | NULL, NULL, NULL); | 73 | NULL, NULL, NULL); |
| 74 | 74 | ||
| 75 | #define SETUP_TEMPLATE(attrb, field, perm, test, ro_test, ro_perm) \ | 75 | #define SETUP_TEMPLATE(attrb, field, perm, test, ro_test, ro_perm) \ |
| 76 | i->private_##attrb[count] = class_device_attr_##field; \ | 76 | i->private_##attrb[count] = dev_attr_##field; \ |
| 77 | i->private_##attrb[count].attr.mode = perm; \ | 77 | i->private_##attrb[count].attr.mode = perm; \ |
| 78 | if (ro_test) { \ | 78 | if (ro_test) { \ |
| 79 | i->private_##attrb[count].attr.mode = ro_perm; \ | 79 | i->private_##attrb[count].attr.mode = ro_perm; \ |
| @@ -100,13 +100,14 @@ static DECLARE_TRANSPORT_CLASS(srp_rport_class, "srp_remote_ports", | |||
| 100 | "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" | 100 | "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x" |
| 101 | 101 | ||
| 102 | static ssize_t | 102 | static ssize_t |
| 103 | show_srp_rport_id(struct class_device *cdev, char *buf) | 103 | show_srp_rport_id(struct device *dev, struct device_attribute *attr, |
| 104 | char *buf) | ||
| 104 | { | 105 | { |
| 105 | struct srp_rport *rport = transport_class_to_srp_rport(cdev); | 106 | struct srp_rport *rport = transport_class_to_srp_rport(dev); |
| 106 | return sprintf(buf, SRP_PID_FMT "\n", SRP_PID(rport)); | 107 | return sprintf(buf, SRP_PID_FMT "\n", SRP_PID(rport)); |
| 107 | } | 108 | } |
| 108 | 109 | ||
| 109 | static CLASS_DEVICE_ATTR(port_id, S_IRUGO, show_srp_rport_id, NULL); | 110 | static DEVICE_ATTR(port_id, S_IRUGO, show_srp_rport_id, NULL); |
| 110 | 111 | ||
| 111 | static const struct { | 112 | static const struct { |
| 112 | u32 value; | 113 | u32 value; |
| @@ -117,9 +118,10 @@ static const struct { | |||
| 117 | }; | 118 | }; |
| 118 | 119 | ||
| 119 | static ssize_t | 120 | static ssize_t |
| 120 | show_srp_rport_roles(struct class_device *cdev, char *buf) | 121 | show_srp_rport_roles(struct device *dev, struct device_attribute *attr, |
| 122 | char *buf) | ||
| 121 | { | 123 | { |
| 122 | struct srp_rport *rport = transport_class_to_srp_rport(cdev); | 124 | struct srp_rport *rport = transport_class_to_srp_rport(dev); |
| 123 | int i; | 125 | int i; |
| 124 | char *name = NULL; | 126 | char *name = NULL; |
| 125 | 127 | ||
| @@ -131,7 +133,7 @@ show_srp_rport_roles(struct class_device *cdev, char *buf) | |||
| 131 | return sprintf(buf, "%s\n", name ? : "unknown"); | 133 | return sprintf(buf, "%s\n", name ? : "unknown"); |
| 132 | } | 134 | } |
| 133 | 135 | ||
| 134 | static CLASS_DEVICE_ATTR(roles, S_IRUGO, show_srp_rport_roles, NULL); | 136 | static DEVICE_ATTR(roles, S_IRUGO, show_srp_rport_roles, NULL); |
| 135 | 137 | ||
| 136 | static void srp_rport_release(struct device *dev) | 138 | static void srp_rport_release(struct device *dev) |
| 137 | { | 139 | { |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 5fe7aaed904c..3cea17dd5dba 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
| @@ -95,7 +95,7 @@ static int sd_resume(struct device *); | |||
| 95 | static void sd_rescan(struct device *); | 95 | static void sd_rescan(struct device *); |
| 96 | static int sd_done(struct scsi_cmnd *); | 96 | static int sd_done(struct scsi_cmnd *); |
| 97 | static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer); | 97 | static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer); |
| 98 | static void scsi_disk_release(struct class_device *cdev); | 98 | static void scsi_disk_release(struct device *cdev); |
| 99 | static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *); | 99 | static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *); |
| 100 | static void sd_print_result(struct scsi_disk *, int); | 100 | static void sd_print_result(struct scsi_disk *, int); |
| 101 | 101 | ||
| @@ -112,11 +112,12 @@ static const char *sd_cache_types[] = { | |||
| 112 | "write back, no read (daft)" | 112 | "write back, no read (daft)" |
| 113 | }; | 113 | }; |
| 114 | 114 | ||
| 115 | static ssize_t sd_store_cache_type(struct class_device *cdev, const char *buf, | 115 | static ssize_t |
| 116 | size_t count) | 116 | sd_store_cache_type(struct device *dev, struct device_attribute *attr, |
| 117 | const char *buf, size_t count) | ||
| 117 | { | 118 | { |
| 118 | int i, ct = -1, rcd, wce, sp; | 119 | int i, ct = -1, rcd, wce, sp; |
| 119 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 120 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 120 | struct scsi_device *sdp = sdkp->device; | 121 | struct scsi_device *sdp = sdkp->device; |
| 121 | char buffer[64]; | 122 | char buffer[64]; |
| 122 | char *buffer_data; | 123 | char *buffer_data; |
| @@ -163,10 +164,11 @@ static ssize_t sd_store_cache_type(struct class_device *cdev, const char *buf, | |||
| 163 | return count; | 164 | return count; |
| 164 | } | 165 | } |
| 165 | 166 | ||
| 166 | static ssize_t sd_store_manage_start_stop(struct class_device *cdev, | 167 | static ssize_t |
| 167 | const char *buf, size_t count) | 168 | sd_store_manage_start_stop(struct device *dev, struct device_attribute *attr, |
| 169 | const char *buf, size_t count) | ||
| 168 | { | 170 | { |
| 169 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 171 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 170 | struct scsi_device *sdp = sdkp->device; | 172 | struct scsi_device *sdp = sdkp->device; |
| 171 | 173 | ||
| 172 | if (!capable(CAP_SYS_ADMIN)) | 174 | if (!capable(CAP_SYS_ADMIN)) |
| @@ -177,10 +179,11 @@ static ssize_t sd_store_manage_start_stop(struct class_device *cdev, | |||
| 177 | return count; | 179 | return count; |
| 178 | } | 180 | } |
| 179 | 181 | ||
| 180 | static ssize_t sd_store_allow_restart(struct class_device *cdev, const char *buf, | 182 | static ssize_t |
| 181 | size_t count) | 183 | sd_store_allow_restart(struct device *dev, struct device_attribute *attr, |
| 184 | const char *buf, size_t count) | ||
| 182 | { | 185 | { |
| 183 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 186 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 184 | struct scsi_device *sdp = sdkp->device; | 187 | struct scsi_device *sdp = sdkp->device; |
| 185 | 188 | ||
| 186 | if (!capable(CAP_SYS_ADMIN)) | 189 | if (!capable(CAP_SYS_ADMIN)) |
| @@ -194,37 +197,44 @@ static ssize_t sd_store_allow_restart(struct class_device *cdev, const char *buf | |||
| 194 | return count; | 197 | return count; |
| 195 | } | 198 | } |
| 196 | 199 | ||
| 197 | static ssize_t sd_show_cache_type(struct class_device *cdev, char *buf) | 200 | static ssize_t |
| 201 | sd_show_cache_type(struct device *dev, struct device_attribute *attr, | ||
| 202 | char *buf) | ||
| 198 | { | 203 | { |
| 199 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 204 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 200 | int ct = sdkp->RCD + 2*sdkp->WCE; | 205 | int ct = sdkp->RCD + 2*sdkp->WCE; |
| 201 | 206 | ||
| 202 | return snprintf(buf, 40, "%s\n", sd_cache_types[ct]); | 207 | return snprintf(buf, 40, "%s\n", sd_cache_types[ct]); |
| 203 | } | 208 | } |
| 204 | 209 | ||
| 205 | static ssize_t sd_show_fua(struct class_device *cdev, char *buf) | 210 | static ssize_t |
| 211 | sd_show_fua(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 206 | { | 212 | { |
| 207 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 213 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 208 | 214 | ||
| 209 | return snprintf(buf, 20, "%u\n", sdkp->DPOFUA); | 215 | return snprintf(buf, 20, "%u\n", sdkp->DPOFUA); |
| 210 | } | 216 | } |
| 211 | 217 | ||
| 212 | static ssize_t sd_show_manage_start_stop(struct class_device *cdev, char *buf) | 218 | static ssize_t |
| 219 | sd_show_manage_start_stop(struct device *dev, struct device_attribute *attr, | ||
| 220 | char *buf) | ||
| 213 | { | 221 | { |
| 214 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 222 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 215 | struct scsi_device *sdp = sdkp->device; | 223 | struct scsi_device *sdp = sdkp->device; |
| 216 | 224 | ||
| 217 | return snprintf(buf, 20, "%u\n", sdp->manage_start_stop); | 225 | return snprintf(buf, 20, "%u\n", sdp->manage_start_stop); |
| 218 | } | 226 | } |
| 219 | 227 | ||
| 220 | static ssize_t sd_show_allow_restart(struct class_device *cdev, char *buf) | 228 | static ssize_t |
| 229 | sd_show_allow_restart(struct device *dev, struct device_attribute *attr, | ||
| 230 | char *buf) | ||
| 221 | { | 231 | { |
| 222 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 232 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 223 | 233 | ||
| 224 | return snprintf(buf, 40, "%d\n", sdkp->device->allow_restart); | 234 | return snprintf(buf, 40, "%d\n", sdkp->device->allow_restart); |
| 225 | } | 235 | } |
| 226 | 236 | ||
| 227 | static struct class_device_attribute sd_disk_attrs[] = { | 237 | static struct device_attribute sd_disk_attrs[] = { |
| 228 | __ATTR(cache_type, S_IRUGO|S_IWUSR, sd_show_cache_type, | 238 | __ATTR(cache_type, S_IRUGO|S_IWUSR, sd_show_cache_type, |
| 229 | sd_store_cache_type), | 239 | sd_store_cache_type), |
| 230 | __ATTR(FUA, S_IRUGO, sd_show_fua, NULL), | 240 | __ATTR(FUA, S_IRUGO, sd_show_fua, NULL), |
| @@ -238,8 +248,8 @@ static struct class_device_attribute sd_disk_attrs[] = { | |||
| 238 | static struct class sd_disk_class = { | 248 | static struct class sd_disk_class = { |
| 239 | .name = "scsi_disk", | 249 | .name = "scsi_disk", |
| 240 | .owner = THIS_MODULE, | 250 | .owner = THIS_MODULE, |
| 241 | .release = scsi_disk_release, | 251 | .dev_release = scsi_disk_release, |
| 242 | .class_dev_attrs = sd_disk_attrs, | 252 | .dev_attrs = sd_disk_attrs, |
| 243 | }; | 253 | }; |
| 244 | 254 | ||
| 245 | static struct scsi_driver sd_template = { | 255 | static struct scsi_driver sd_template = { |
| @@ -297,7 +307,7 @@ static struct scsi_disk *__scsi_disk_get(struct gendisk *disk) | |||
| 297 | if (disk->private_data) { | 307 | if (disk->private_data) { |
| 298 | sdkp = scsi_disk(disk); | 308 | sdkp = scsi_disk(disk); |
| 299 | if (scsi_device_get(sdkp->device) == 0) | 309 | if (scsi_device_get(sdkp->device) == 0) |
| 300 | class_device_get(&sdkp->cdev); | 310 | get_device(&sdkp->dev); |
| 301 | else | 311 | else |
| 302 | sdkp = NULL; | 312 | sdkp = NULL; |
| 303 | } | 313 | } |
| @@ -331,7 +341,7 @@ static void scsi_disk_put(struct scsi_disk *sdkp) | |||
| 331 | struct scsi_device *sdev = sdkp->device; | 341 | struct scsi_device *sdev = sdkp->device; |
| 332 | 342 | ||
| 333 | mutex_lock(&sd_ref_mutex); | 343 | mutex_lock(&sd_ref_mutex); |
| 334 | class_device_put(&sdkp->cdev); | 344 | put_device(&sdkp->dev); |
| 335 | scsi_device_put(sdev); | 345 | scsi_device_put(sdev); |
| 336 | mutex_unlock(&sd_ref_mutex); | 346 | mutex_unlock(&sd_ref_mutex); |
| 337 | } | 347 | } |
| @@ -1663,12 +1673,12 @@ static int sd_probe(struct device *dev) | |||
| 1663 | sdp->timeout = SD_MOD_TIMEOUT; | 1673 | sdp->timeout = SD_MOD_TIMEOUT; |
| 1664 | } | 1674 | } |
| 1665 | 1675 | ||
| 1666 | class_device_initialize(&sdkp->cdev); | 1676 | device_initialize(&sdkp->dev); |
| 1667 | sdkp->cdev.dev = &sdp->sdev_gendev; | 1677 | sdkp->dev.parent = &sdp->sdev_gendev; |
| 1668 | sdkp->cdev.class = &sd_disk_class; | 1678 | sdkp->dev.class = &sd_disk_class; |
| 1669 | strncpy(sdkp->cdev.class_id, sdp->sdev_gendev.bus_id, BUS_ID_SIZE); | 1679 | strncpy(sdkp->dev.bus_id, sdp->sdev_gendev.bus_id, BUS_ID_SIZE); |
| 1670 | 1680 | ||
| 1671 | if (class_device_add(&sdkp->cdev)) | 1681 | if (device_add(&sdkp->dev)) |
| 1672 | goto out_put; | 1682 | goto out_put; |
| 1673 | 1683 | ||
| 1674 | get_device(&sdp->sdev_gendev); | 1684 | get_device(&sdp->sdev_gendev); |
| @@ -1734,13 +1744,13 @@ static int sd_remove(struct device *dev) | |||
| 1734 | { | 1744 | { |
| 1735 | struct scsi_disk *sdkp = dev_get_drvdata(dev); | 1745 | struct scsi_disk *sdkp = dev_get_drvdata(dev); |
| 1736 | 1746 | ||
| 1737 | class_device_del(&sdkp->cdev); | 1747 | device_del(&sdkp->dev); |
| 1738 | del_gendisk(sdkp->disk); | 1748 | del_gendisk(sdkp->disk); |
| 1739 | sd_shutdown(dev); | 1749 | sd_shutdown(dev); |
| 1740 | 1750 | ||
| 1741 | mutex_lock(&sd_ref_mutex); | 1751 | mutex_lock(&sd_ref_mutex); |
| 1742 | dev_set_drvdata(dev, NULL); | 1752 | dev_set_drvdata(dev, NULL); |
| 1743 | class_device_put(&sdkp->cdev); | 1753 | put_device(&sdkp->dev); |
| 1744 | mutex_unlock(&sd_ref_mutex); | 1754 | mutex_unlock(&sd_ref_mutex); |
| 1745 | 1755 | ||
| 1746 | return 0; | 1756 | return 0; |
| @@ -1748,16 +1758,16 @@ static int sd_remove(struct device *dev) | |||
| 1748 | 1758 | ||
| 1749 | /** | 1759 | /** |
| 1750 | * scsi_disk_release - Called to free the scsi_disk structure | 1760 | * scsi_disk_release - Called to free the scsi_disk structure |
| 1751 | * @cdev: pointer to embedded class device | 1761 | * @dev: pointer to embedded class device |
| 1752 | * | 1762 | * |
| 1753 | * sd_ref_mutex must be held entering this routine. Because it is | 1763 | * sd_ref_mutex must be held entering this routine. Because it is |
| 1754 | * called on last put, you should always use the scsi_disk_get() | 1764 | * called on last put, you should always use the scsi_disk_get() |
| 1755 | * scsi_disk_put() helpers which manipulate the semaphore directly | 1765 | * scsi_disk_put() helpers which manipulate the semaphore directly |
| 1756 | * and never do a direct class_device_put(). | 1766 | * and never do a direct put_device. |
| 1757 | **/ | 1767 | **/ |
| 1758 | static void scsi_disk_release(struct class_device *cdev) | 1768 | static void scsi_disk_release(struct device *dev) |
| 1759 | { | 1769 | { |
| 1760 | struct scsi_disk *sdkp = to_scsi_disk(cdev); | 1770 | struct scsi_disk *sdkp = to_scsi_disk(dev); |
| 1761 | struct gendisk *disk = sdkp->disk; | 1771 | struct gendisk *disk = sdkp->disk; |
| 1762 | 1772 | ||
| 1763 | spin_lock(&sd_index_lock); | 1773 | spin_lock(&sd_index_lock); |
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index a6d96694d0a5..45df83b9d847 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c | |||
| @@ -107,7 +107,7 @@ static int ses_set_page2_descriptor(struct enclosure_device *edev, | |||
| 107 | unsigned char *desc) | 107 | unsigned char *desc) |
| 108 | { | 108 | { |
| 109 | int i, j, count = 0, descriptor = ecomp->number; | 109 | int i, j, count = 0, descriptor = ecomp->number; |
| 110 | struct scsi_device *sdev = to_scsi_device(edev->cdev.dev); | 110 | struct scsi_device *sdev = to_scsi_device(edev->edev.parent); |
| 111 | struct ses_device *ses_dev = edev->scratch; | 111 | struct ses_device *ses_dev = edev->scratch; |
| 112 | unsigned char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; | 112 | unsigned char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; |
| 113 | unsigned char *desc_ptr = ses_dev->page2 + 8; | 113 | unsigned char *desc_ptr = ses_dev->page2 + 8; |
| @@ -137,7 +137,7 @@ static unsigned char *ses_get_page2_descriptor(struct enclosure_device *edev, | |||
| 137 | struct enclosure_component *ecomp) | 137 | struct enclosure_component *ecomp) |
| 138 | { | 138 | { |
| 139 | int i, j, count = 0, descriptor = ecomp->number; | 139 | int i, j, count = 0, descriptor = ecomp->number; |
| 140 | struct scsi_device *sdev = to_scsi_device(edev->cdev.dev); | 140 | struct scsi_device *sdev = to_scsi_device(edev->edev.parent); |
| 141 | struct ses_device *ses_dev = edev->scratch; | 141 | struct ses_device *ses_dev = edev->scratch; |
| 142 | unsigned char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; | 142 | unsigned char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; |
| 143 | unsigned char *desc_ptr = ses_dev->page2 + 8; | 143 | unsigned char *desc_ptr = ses_dev->page2 + 8; |
| @@ -269,10 +269,10 @@ int ses_match_host(struct enclosure_device *edev, void *data) | |||
| 269 | struct ses_host_edev *sed = data; | 269 | struct ses_host_edev *sed = data; |
| 270 | struct scsi_device *sdev; | 270 | struct scsi_device *sdev; |
| 271 | 271 | ||
| 272 | if (!scsi_is_sdev_device(edev->cdev.dev)) | 272 | if (!scsi_is_sdev_device(edev->edev.parent)) |
| 273 | return 0; | 273 | return 0; |
| 274 | 274 | ||
| 275 | sdev = to_scsi_device(edev->cdev.dev); | 275 | sdev = to_scsi_device(edev->edev.parent); |
| 276 | 276 | ||
| 277 | if (sdev->host != sed->shost) | 277 | if (sdev->host != sed->shost) |
| 278 | return 0; | 278 | return 0; |
| @@ -407,10 +407,10 @@ static void ses_match_to_enclosure(struct enclosure_device *edev, | |||
| 407 | 407 | ||
| 408 | #define INIT_ALLOC_SIZE 32 | 408 | #define INIT_ALLOC_SIZE 32 |
| 409 | 409 | ||
| 410 | static int ses_intf_add(struct class_device *cdev, | 410 | static int ses_intf_add(struct device *cdev, |
| 411 | struct class_interface *intf) | 411 | struct class_interface *intf) |
| 412 | { | 412 | { |
| 413 | struct scsi_device *sdev = to_scsi_device(cdev->dev); | 413 | struct scsi_device *sdev = to_scsi_device(cdev->parent); |
| 414 | struct scsi_device *tmp_sdev; | 414 | struct scsi_device *tmp_sdev; |
| 415 | unsigned char *buf = NULL, *hdr_buf, *type_ptr, *desc_ptr = NULL, | 415 | unsigned char *buf = NULL, *hdr_buf, *type_ptr, *desc_ptr = NULL, |
| 416 | *addl_desc_ptr = NULL; | 416 | *addl_desc_ptr = NULL; |
| @@ -426,7 +426,7 @@ static int ses_intf_add(struct class_device *cdev, | |||
| 426 | edev = enclosure_find(&sdev->host->shost_gendev); | 426 | edev = enclosure_find(&sdev->host->shost_gendev); |
| 427 | if (edev) { | 427 | if (edev) { |
| 428 | ses_match_to_enclosure(edev, sdev); | 428 | ses_match_to_enclosure(edev, sdev); |
| 429 | class_device_put(&edev->cdev); | 429 | put_device(&edev->edev); |
| 430 | } | 430 | } |
| 431 | return -ENODEV; | 431 | return -ENODEV; |
| 432 | } | 432 | } |
| @@ -515,7 +515,7 @@ static int ses_intf_add(struct class_device *cdev, | |||
| 515 | if (!scomp) | 515 | if (!scomp) |
| 516 | goto err_free; | 516 | goto err_free; |
| 517 | 517 | ||
| 518 | edev = enclosure_register(cdev->dev, sdev->sdev_gendev.bus_id, | 518 | edev = enclosure_register(cdev->parent, sdev->sdev_gendev.bus_id, |
| 519 | components, &ses_enclosure_callbacks); | 519 | components, &ses_enclosure_callbacks); |
| 520 | if (IS_ERR(edev)) { | 520 | if (IS_ERR(edev)) { |
| 521 | err = PTR_ERR(edev); | 521 | err = PTR_ERR(edev); |
| @@ -625,17 +625,17 @@ static int ses_remove(struct device *dev) | |||
| 625 | return 0; | 625 | return 0; |
| 626 | } | 626 | } |
| 627 | 627 | ||
| 628 | static void ses_intf_remove(struct class_device *cdev, | 628 | static void ses_intf_remove(struct device *cdev, |
| 629 | struct class_interface *intf) | 629 | struct class_interface *intf) |
| 630 | { | 630 | { |
| 631 | struct scsi_device *sdev = to_scsi_device(cdev->dev); | 631 | struct scsi_device *sdev = to_scsi_device(cdev->parent); |
| 632 | struct enclosure_device *edev; | 632 | struct enclosure_device *edev; |
| 633 | struct ses_device *ses_dev; | 633 | struct ses_device *ses_dev; |
| 634 | 634 | ||
| 635 | if (!scsi_device_enclosure(sdev)) | 635 | if (!scsi_device_enclosure(sdev)) |
| 636 | return; | 636 | return; |
| 637 | 637 | ||
| 638 | edev = enclosure_find(cdev->dev); | 638 | edev = enclosure_find(cdev->parent); |
| 639 | if (!edev) | 639 | if (!edev) |
| 640 | return; | 640 | return; |
| 641 | 641 | ||
| @@ -649,13 +649,13 @@ static void ses_intf_remove(struct class_device *cdev, | |||
| 649 | 649 | ||
| 650 | kfree(edev->component[0].scratch); | 650 | kfree(edev->component[0].scratch); |
| 651 | 651 | ||
| 652 | class_device_put(&edev->cdev); | 652 | put_device(&edev->edev); |
| 653 | enclosure_unregister(edev); | 653 | enclosure_unregister(edev); |
| 654 | } | 654 | } |
| 655 | 655 | ||
| 656 | static struct class_interface ses_interface = { | 656 | static struct class_interface ses_interface = { |
| 657 | .add = ses_intf_add, | 657 | .add_dev = ses_intf_add, |
| 658 | .remove = ses_intf_remove, | 658 | .remove_dev = ses_intf_remove, |
| 659 | }; | 659 | }; |
| 660 | 660 | ||
| 661 | static struct scsi_driver ses_template = { | 661 | static struct scsi_driver ses_template = { |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index e5156aa6dd20..2029422bc04d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
| @@ -101,16 +101,16 @@ static int scatter_elem_sz_prev = SG_SCATTER_SZ; | |||
| 101 | #define SG_SECTOR_SZ 512 | 101 | #define SG_SECTOR_SZ 512 |
| 102 | #define SG_SECTOR_MSK (SG_SECTOR_SZ - 1) | 102 | #define SG_SECTOR_MSK (SG_SECTOR_SZ - 1) |
| 103 | 103 | ||
| 104 | static int sg_add(struct class_device *, struct class_interface *); | 104 | static int sg_add(struct device *, struct class_interface *); |
| 105 | static void sg_remove(struct class_device *, struct class_interface *); | 105 | static void sg_remove(struct device *, struct class_interface *); |
| 106 | 106 | ||
| 107 | static DEFINE_IDR(sg_index_idr); | 107 | static DEFINE_IDR(sg_index_idr); |
| 108 | static DEFINE_RWLOCK(sg_index_lock); /* Also used to lock | 108 | static DEFINE_RWLOCK(sg_index_lock); /* Also used to lock |
| 109 | file descriptor list for device */ | 109 | file descriptor list for device */ |
| 110 | 110 | ||
| 111 | static struct class_interface sg_interface = { | 111 | static struct class_interface sg_interface = { |
| 112 | .add = sg_add, | 112 | .add_dev = sg_add, |
| 113 | .remove = sg_remove, | 113 | .remove_dev = sg_remove, |
| 114 | }; | 114 | }; |
| 115 | 115 | ||
| 116 | typedef struct sg_scatter_hold { /* holding area for scsi scatter gather info */ | 116 | typedef struct sg_scatter_hold { /* holding area for scsi scatter gather info */ |
| @@ -1401,9 +1401,9 @@ static Sg_device *sg_alloc(struct gendisk *disk, struct scsi_device *scsidp) | |||
| 1401 | } | 1401 | } |
| 1402 | 1402 | ||
| 1403 | static int | 1403 | static int |
| 1404 | sg_add(struct class_device *cl_dev, struct class_interface *cl_intf) | 1404 | sg_add(struct device *cl_dev, struct class_interface *cl_intf) |
| 1405 | { | 1405 | { |
| 1406 | struct scsi_device *scsidp = to_scsi_device(cl_dev->dev); | 1406 | struct scsi_device *scsidp = to_scsi_device(cl_dev->parent); |
| 1407 | struct gendisk *disk; | 1407 | struct gendisk *disk; |
| 1408 | Sg_device *sdp = NULL; | 1408 | Sg_device *sdp = NULL; |
| 1409 | struct cdev * cdev = NULL; | 1409 | struct cdev * cdev = NULL; |
| @@ -1439,19 +1439,19 @@ sg_add(struct class_device *cl_dev, struct class_interface *cl_intf) | |||
| 1439 | 1439 | ||
| 1440 | sdp->cdev = cdev; | 1440 | sdp->cdev = cdev; |
| 1441 | if (sg_sysfs_valid) { | 1441 | if (sg_sysfs_valid) { |
| 1442 | struct class_device * sg_class_member; | 1442 | struct device *sg_class_member; |
| 1443 | 1443 | ||
| 1444 | sg_class_member = class_device_create(sg_sysfs_class, NULL, | 1444 | sg_class_member = device_create(sg_sysfs_class, cl_dev->parent, |
| 1445 | MKDEV(SCSI_GENERIC_MAJOR, sdp->index), | 1445 | MKDEV(SCSI_GENERIC_MAJOR, |
| 1446 | cl_dev->dev, "%s", | 1446 | sdp->index), |
| 1447 | disk->disk_name); | 1447 | "%s", disk->disk_name); |
| 1448 | if (IS_ERR(sg_class_member)) { | 1448 | if (IS_ERR(sg_class_member)) { |
| 1449 | printk(KERN_ERR "sg_add: " | 1449 | printk(KERN_ERR "sg_add: " |
| 1450 | "class_device_create failed\n"); | 1450 | "device_create failed\n"); |
| 1451 | error = PTR_ERR(sg_class_member); | 1451 | error = PTR_ERR(sg_class_member); |
| 1452 | goto cdev_add_err; | 1452 | goto cdev_add_err; |
| 1453 | } | 1453 | } |
| 1454 | class_set_devdata(sg_class_member, sdp); | 1454 | dev_set_drvdata(sg_class_member, sdp); |
| 1455 | error = sysfs_create_link(&scsidp->sdev_gendev.kobj, | 1455 | error = sysfs_create_link(&scsidp->sdev_gendev.kobj, |
| 1456 | &sg_class_member->kobj, "generic"); | 1456 | &sg_class_member->kobj, "generic"); |
| 1457 | if (error) | 1457 | if (error) |
| @@ -1464,7 +1464,7 @@ sg_add(struct class_device *cl_dev, struct class_interface *cl_intf) | |||
| 1464 | "Attached scsi generic sg%d type %d\n", sdp->index, | 1464 | "Attached scsi generic sg%d type %d\n", sdp->index, |
| 1465 | scsidp->type); | 1465 | scsidp->type); |
| 1466 | 1466 | ||
| 1467 | class_set_devdata(cl_dev, sdp); | 1467 | dev_set_drvdata(cl_dev, sdp); |
| 1468 | 1468 | ||
| 1469 | return 0; | 1469 | return 0; |
| 1470 | 1470 | ||
| @@ -1482,10 +1482,10 @@ out: | |||
| 1482 | } | 1482 | } |
| 1483 | 1483 | ||
| 1484 | static void | 1484 | static void |
| 1485 | sg_remove(struct class_device *cl_dev, struct class_interface *cl_intf) | 1485 | sg_remove(struct device *cl_dev, struct class_interface *cl_intf) |
| 1486 | { | 1486 | { |
| 1487 | struct scsi_device *scsidp = to_scsi_device(cl_dev->dev); | 1487 | struct scsi_device *scsidp = to_scsi_device(cl_dev->parent); |
| 1488 | Sg_device *sdp = class_get_devdata(cl_dev); | 1488 | Sg_device *sdp = dev_get_drvdata(cl_dev); |
| 1489 | unsigned long iflags; | 1489 | unsigned long iflags; |
| 1490 | Sg_fd *sfp; | 1490 | Sg_fd *sfp; |
| 1491 | Sg_fd *tsfp; | 1491 | Sg_fd *tsfp; |
| @@ -1528,7 +1528,7 @@ sg_remove(struct class_device *cl_dev, struct class_interface *cl_intf) | |||
| 1528 | write_unlock_irqrestore(&sg_index_lock, iflags); | 1528 | write_unlock_irqrestore(&sg_index_lock, iflags); |
| 1529 | 1529 | ||
| 1530 | sysfs_remove_link(&scsidp->sdev_gendev.kobj, "generic"); | 1530 | sysfs_remove_link(&scsidp->sdev_gendev.kobj, "generic"); |
| 1531 | class_device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, sdp->index)); | 1531 | device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, sdp->index)); |
| 1532 | cdev_del(sdp->cdev); | 1532 | cdev_del(sdp->cdev); |
| 1533 | sdp->cdev = NULL; | 1533 | sdp->cdev = NULL; |
| 1534 | put_disk(sdp->disk); | 1534 | put_disk(sdp->disk); |
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index df83bea2c620..a860c3a9ae99 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c | |||
| @@ -4108,9 +4108,9 @@ out_free_tape: | |||
| 4108 | if (STm->cdevs[j]) { | 4108 | if (STm->cdevs[j]) { |
| 4109 | if (cdev == STm->cdevs[j]) | 4109 | if (cdev == STm->cdevs[j]) |
| 4110 | cdev = NULL; | 4110 | cdev = NULL; |
| 4111 | class_device_destroy(st_sysfs_class, | 4111 | device_destroy(st_sysfs_class, |
| 4112 | MKDEV(SCSI_TAPE_MAJOR, | 4112 | MKDEV(SCSI_TAPE_MAJOR, |
| 4113 | TAPE_MINOR(i, mode, j))); | 4113 | TAPE_MINOR(i, mode, j))); |
| 4114 | cdev_del(STm->cdevs[j]); | 4114 | cdev_del(STm->cdevs[j]); |
| 4115 | } | 4115 | } |
| 4116 | } | 4116 | } |
| @@ -4148,9 +4148,9 @@ static int st_remove(struct device *dev) | |||
| 4148 | "tape"); | 4148 | "tape"); |
| 4149 | for (mode = 0; mode < ST_NBR_MODES; ++mode) { | 4149 | for (mode = 0; mode < ST_NBR_MODES; ++mode) { |
| 4150 | for (j=0; j < 2; j++) { | 4150 | for (j=0; j < 2; j++) { |
| 4151 | class_device_destroy(st_sysfs_class, | 4151 | device_destroy(st_sysfs_class, |
| 4152 | MKDEV(SCSI_TAPE_MAJOR, | 4152 | MKDEV(SCSI_TAPE_MAJOR, |
| 4153 | TAPE_MINOR(i, mode, j))); | 4153 | TAPE_MINOR(i, mode, j))); |
| 4154 | cdev_del(tpnt->modes[mode].cdevs[j]); | 4154 | cdev_del(tpnt->modes[mode].cdevs[j]); |
| 4155 | tpnt->modes[mode].cdevs[j] = NULL; | 4155 | tpnt->modes[mode].cdevs[j] = NULL; |
| 4156 | } | 4156 | } |
| @@ -4319,31 +4319,34 @@ static void do_remove_sysfs_files(void) | |||
| 4319 | 4319 | ||
| 4320 | 4320 | ||
| 4321 | /* The sysfs simple class interface */ | 4321 | /* The sysfs simple class interface */ |
| 4322 | static ssize_t st_defined_show(struct class_device *class_dev, char *buf) | 4322 | static ssize_t |
| 4323 | st_defined_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 4323 | { | 4324 | { |
| 4324 | struct st_modedef *STm = (struct st_modedef *)class_get_devdata(class_dev); | 4325 | struct st_modedef *STm = (struct st_modedef *)dev_get_drvdata(dev); |
| 4325 | ssize_t l = 0; | 4326 | ssize_t l = 0; |
| 4326 | 4327 | ||
| 4327 | l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined); | 4328 | l = snprintf(buf, PAGE_SIZE, "%d\n", STm->defined); |
| 4328 | return l; | 4329 | return l; |
| 4329 | } | 4330 | } |
| 4330 | 4331 | ||
| 4331 | CLASS_DEVICE_ATTR(defined, S_IRUGO, st_defined_show, NULL); | 4332 | DEVICE_ATTR(defined, S_IRUGO, st_defined_show, NULL); |
| 4332 | 4333 | ||
| 4333 | static ssize_t st_defblk_show(struct class_device *class_dev, char *buf) | 4334 | static ssize_t |
| 4335 | st_defblk_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 4334 | { | 4336 | { |
| 4335 | struct st_modedef *STm = (struct st_modedef *)class_get_devdata(class_dev); | 4337 | struct st_modedef *STm = (struct st_modedef *)dev_get_drvdata(dev); |
| 4336 | ssize_t l = 0; | 4338 | ssize_t l = 0; |
| 4337 | 4339 | ||
| 4338 | l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize); | 4340 | l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_blksize); |
| 4339 | return l; | 4341 | return l; |
| 4340 | } | 4342 | } |
| 4341 | 4343 | ||
| 4342 | CLASS_DEVICE_ATTR(default_blksize, S_IRUGO, st_defblk_show, NULL); | 4344 | DEVICE_ATTR(default_blksize, S_IRUGO, st_defblk_show, NULL); |
| 4343 | 4345 | ||
| 4344 | static ssize_t st_defdensity_show(struct class_device *class_dev, char *buf) | 4346 | static ssize_t |
| 4347 | st_defdensity_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 4345 | { | 4348 | { |
| 4346 | struct st_modedef *STm = (struct st_modedef *)class_get_devdata(class_dev); | 4349 | struct st_modedef *STm = (struct st_modedef *)dev_get_drvdata(dev); |
| 4347 | ssize_t l = 0; | 4350 | ssize_t l = 0; |
| 4348 | char *fmt; | 4351 | char *fmt; |
| 4349 | 4352 | ||
| @@ -4352,22 +4355,25 @@ static ssize_t st_defdensity_show(struct class_device *class_dev, char *buf) | |||
| 4352 | return l; | 4355 | return l; |
| 4353 | } | 4356 | } |
| 4354 | 4357 | ||
| 4355 | CLASS_DEVICE_ATTR(default_density, S_IRUGO, st_defdensity_show, NULL); | 4358 | DEVICE_ATTR(default_density, S_IRUGO, st_defdensity_show, NULL); |
| 4356 | 4359 | ||
| 4357 | static ssize_t st_defcompression_show(struct class_device *class_dev, char *buf) | 4360 | static ssize_t |
| 4361 | st_defcompression_show(struct device *dev, struct device_attribute *attr, | ||
| 4362 | char *buf) | ||
| 4358 | { | 4363 | { |
| 4359 | struct st_modedef *STm = (struct st_modedef *)class_get_devdata(class_dev); | 4364 | struct st_modedef *STm = (struct st_modedef *)dev_get_drvdata(dev); |
| 4360 | ssize_t l = 0; | 4365 | ssize_t l = 0; |
| 4361 | 4366 | ||
| 4362 | l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1); | 4367 | l = snprintf(buf, PAGE_SIZE, "%d\n", STm->default_compression - 1); |
| 4363 | return l; | 4368 | return l; |
| 4364 | } | 4369 | } |
| 4365 | 4370 | ||
| 4366 | CLASS_DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL); | 4371 | DEVICE_ATTR(default_compression, S_IRUGO, st_defcompression_show, NULL); |
| 4367 | 4372 | ||
| 4368 | static ssize_t st_options_show(struct class_device *class_dev, char *buf) | 4373 | static ssize_t |
| 4374 | st_options_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
| 4369 | { | 4375 | { |
| 4370 | struct st_modedef *STm = (struct st_modedef *)class_get_devdata(class_dev); | 4376 | struct st_modedef *STm = (struct st_modedef *)dev_get_drvdata(dev); |
| 4371 | struct scsi_tape *STp; | 4377 | struct scsi_tape *STp; |
| 4372 | int i, j, options; | 4378 | int i, j, options; |
| 4373 | ssize_t l = 0; | 4379 | ssize_t l = 0; |
| @@ -4403,13 +4409,13 @@ static ssize_t st_options_show(struct class_device *class_dev, char *buf) | |||
| 4403 | return l; | 4409 | return l; |
| 4404 | } | 4410 | } |
| 4405 | 4411 | ||
| 4406 | CLASS_DEVICE_ATTR(options, S_IRUGO, st_options_show, NULL); | 4412 | DEVICE_ATTR(options, S_IRUGO, st_options_show, NULL); |
| 4407 | 4413 | ||
| 4408 | static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode) | 4414 | static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode) |
| 4409 | { | 4415 | { |
| 4410 | int i, rew, error; | 4416 | int i, rew, error; |
| 4411 | char name[10]; | 4417 | char name[10]; |
| 4412 | struct class_device *st_class_member; | 4418 | struct device *st_class_member; |
| 4413 | 4419 | ||
| 4414 | for (rew=0; rew < 2; rew++) { | 4420 | for (rew=0; rew < 2; rew++) { |
| 4415 | /* Make sure that the minor numbers corresponding to the four | 4421 | /* Make sure that the minor numbers corresponding to the four |
| @@ -4418,32 +4424,32 @@ static int do_create_class_files(struct scsi_tape *STp, int dev_num, int mode) | |||
| 4418 | snprintf(name, 10, "%s%s%s", rew ? "n" : "", | 4424 | snprintf(name, 10, "%s%s%s", rew ? "n" : "", |
| 4419 | STp->disk->disk_name, st_formats[i]); | 4425 | STp->disk->disk_name, st_formats[i]); |
| 4420 | st_class_member = | 4426 | st_class_member = |
| 4421 | class_device_create(st_sysfs_class, NULL, | 4427 | device_create(st_sysfs_class, &STp->device->sdev_gendev, |
| 4422 | MKDEV(SCSI_TAPE_MAJOR, | 4428 | MKDEV(SCSI_TAPE_MAJOR, |
| 4423 | TAPE_MINOR(dev_num, mode, rew)), | 4429 | TAPE_MINOR(dev_num, mode, rew)), |
| 4424 | &STp->device->sdev_gendev, "%s", name); | 4430 | "%s", name); |
| 4425 | if (IS_ERR(st_class_member)) { | 4431 | if (IS_ERR(st_class_member)) { |
| 4426 | printk(KERN_WARNING "st%d: class_device_create failed\n", | 4432 | printk(KERN_WARNING "st%d: device_create failed\n", |
| 4427 | dev_num); | 4433 | dev_num); |
| 4428 | error = PTR_ERR(st_class_member); | 4434 | error = PTR_ERR(st_class_member); |
| 4429 | goto out; | 4435 | goto out; |
| 4430 | } | 4436 | } |
| 4431 | class_set_devdata(st_class_member, &STp->modes[mode]); | 4437 | dev_set_drvdata(st_class_member, &STp->modes[mode]); |
| 4432 | 4438 | ||
| 4433 | error = class_device_create_file(st_class_member, | 4439 | error = device_create_file(st_class_member, |
| 4434 | &class_device_attr_defined); | 4440 | &dev_attr_defined); |
| 4435 | if (error) goto out; | 4441 | if (error) goto out; |
| 4436 | error = class_device_create_file(st_class_member, | 4442 | error = device_create_file(st_class_member, |
| 4437 | &class_device_attr_default_blksize); | 4443 | &dev_attr_default_blksize); |
| 4438 | if (error) goto out; | 4444 | if (error) goto out; |
| 4439 | error = class_device_create_file(st_class_member, | 4445 | error = device_create_file(st_class_member, |
| 4440 | &class_device_attr_default_density); | 4446 | &dev_attr_default_density); |
| 4441 | if (error) goto out; | 4447 | if (error) goto out; |
| 4442 | error = class_device_create_file(st_class_member, | 4448 | error = device_create_file(st_class_member, |
| 4443 | &class_device_attr_default_compression); | 4449 | &dev_attr_default_compression); |
| 4444 | if (error) goto out; | 4450 | if (error) goto out; |
| 4445 | error = class_device_create_file(st_class_member, | 4451 | error = device_create_file(st_class_member, |
| 4446 | &class_device_attr_options); | 4452 | &dev_attr_options); |
| 4447 | if (error) goto out; | 4453 | if (error) goto out; |
| 4448 | 4454 | ||
| 4449 | if (mode == 0 && rew == 0) { | 4455 | if (mode == 0 && rew == 0) { |
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index c32c1ca75f63..a9ca03ead3e5 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
| @@ -2422,7 +2422,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *port) | |||
| 2422 | */ | 2422 | */ |
| 2423 | tty_dev = tty_register_device(drv->tty_driver, port->line, port->dev); | 2423 | tty_dev = tty_register_device(drv->tty_driver, port->line, port->dev); |
| 2424 | if (likely(!IS_ERR(tty_dev))) { | 2424 | if (likely(!IS_ERR(tty_dev))) { |
| 2425 | device_can_wakeup(tty_dev) = 1; | 2425 | device_init_wakeup(tty_dev, 1); |
| 2426 | device_set_wakeup_enable(tty_dev, 0); | 2426 | device_set_wakeup_enable(tty_dev, 0); |
| 2427 | } else | 2427 | } else |
| 2428 | printk(KERN_ERR "Cannot register tty device on line %d\n", | 2428 | printk(KERN_ERR "Cannot register tty device on line %d\n", |
diff --git a/drivers/uio/Kconfig b/drivers/uio/Kconfig index b778ed71f636..a4aaab9c7ddc 100644 --- a/drivers/uio/Kconfig +++ b/drivers/uio/Kconfig | |||
| @@ -1,8 +1,6 @@ | |||
| 1 | menu "Userspace I/O" | 1 | menuconfig UIO |
| 2 | depends on !S390 | ||
| 3 | |||
| 4 | config UIO | ||
| 5 | tristate "Userspace I/O drivers" | 2 | tristate "Userspace I/O drivers" |
| 3 | depends on !S390 | ||
| 6 | default n | 4 | default n |
| 7 | help | 5 | help |
| 8 | Enable this to allow the userspace driver core code to be | 6 | Enable this to allow the userspace driver core code to be |
| @@ -13,6 +11,8 @@ config UIO | |||
| 13 | 11 | ||
| 14 | If you don't know what to do here, say N. | 12 | If you don't know what to do here, say N. |
| 15 | 13 | ||
| 14 | if UIO | ||
| 15 | |||
| 16 | config UIO_CIF | 16 | config UIO_CIF |
| 17 | tristate "generic Hilscher CIF Card driver" | 17 | tristate "generic Hilscher CIF Card driver" |
| 18 | depends on UIO && PCI | 18 | depends on UIO && PCI |
| @@ -26,4 +26,17 @@ config UIO_CIF | |||
| 26 | To compile this driver as a module, choose M here: the module | 26 | To compile this driver as a module, choose M here: the module |
| 27 | will be called uio_cif. | 27 | will be called uio_cif. |
| 28 | 28 | ||
| 29 | endmenu | 29 | config UIO_SMX |
| 30 | tristate "SMX cryptengine UIO interface" | ||
| 31 | depends on UIO | ||
| 32 | default n | ||
| 33 | help | ||
| 34 | Userspace IO interface to the Cryptography engine found on the | ||
| 35 | Nias Digital SMX boards. These will be available from Q4 2008 | ||
| 36 | from http://www.niasdigital.com. The userspace part of this | ||
| 37 | driver will be released under the GPL at the same time as the | ||
| 38 | hardware and will be able to be downloaded from the same site. | ||
| 39 | |||
| 40 | If you compile this as a module, it will be called uio_smx. | ||
| 41 | |||
| 42 | endif | ||
diff --git a/drivers/uio/Makefile b/drivers/uio/Makefile index 7fecfb459da5..18c45662431e 100644 --- a/drivers/uio/Makefile +++ b/drivers/uio/Makefile | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | obj-$(CONFIG_UIO) += uio.o | 1 | obj-$(CONFIG_UIO) += uio.o |
| 2 | obj-$(CONFIG_UIO_CIF) += uio_cif.o | 2 | obj-$(CONFIG_UIO_CIF) += uio_cif.o |
| 3 | obj-$(CONFIG_UIO_SMX) += uio_smx.o | ||
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c index 11759080ca54..55cc7b80422a 100644 --- a/drivers/uio/uio.c +++ b/drivers/uio/uio.c | |||
| @@ -301,23 +301,33 @@ static int uio_open(struct inode *inode, struct file *filep) | |||
| 301 | if (!idev) | 301 | if (!idev) |
| 302 | return -ENODEV; | 302 | return -ENODEV; |
| 303 | 303 | ||
| 304 | if (!try_module_get(idev->owner)) | ||
| 305 | return -ENODEV; | ||
| 306 | |||
| 304 | listener = kmalloc(sizeof(*listener), GFP_KERNEL); | 307 | listener = kmalloc(sizeof(*listener), GFP_KERNEL); |
| 305 | if (!listener) | 308 | if (!listener) { |
| 306 | return -ENOMEM; | 309 | ret = -ENOMEM; |
| 310 | goto err_alloc_listener; | ||
| 311 | } | ||
| 307 | 312 | ||
| 308 | listener->dev = idev; | 313 | listener->dev = idev; |
| 309 | listener->event_count = atomic_read(&idev->event); | 314 | listener->event_count = atomic_read(&idev->event); |
| 310 | filep->private_data = listener; | 315 | filep->private_data = listener; |
| 311 | 316 | ||
| 312 | if (idev->info->open) { | 317 | if (idev->info->open) { |
| 313 | if (!try_module_get(idev->owner)) | ||
| 314 | return -ENODEV; | ||
| 315 | ret = idev->info->open(idev->info, inode); | 318 | ret = idev->info->open(idev->info, inode); |
| 316 | module_put(idev->owner); | 319 | if (ret) |
| 320 | goto err_infoopen; | ||
| 317 | } | 321 | } |
| 318 | 322 | ||
| 319 | if (ret) | 323 | return 0; |
| 320 | kfree(listener); | 324 | |
| 325 | err_infoopen: | ||
| 326 | |||
| 327 | kfree(listener); | ||
| 328 | err_alloc_listener: | ||
| 329 | |||
| 330 | module_put(idev->owner); | ||
| 321 | 331 | ||
| 322 | return ret; | 332 | return ret; |
| 323 | } | 333 | } |
| @@ -336,12 +346,11 @@ static int uio_release(struct inode *inode, struct file *filep) | |||
| 336 | struct uio_listener *listener = filep->private_data; | 346 | struct uio_listener *listener = filep->private_data; |
| 337 | struct uio_device *idev = listener->dev; | 347 | struct uio_device *idev = listener->dev; |
| 338 | 348 | ||
| 339 | if (idev->info->release) { | 349 | if (idev->info->release) |
| 340 | if (!try_module_get(idev->owner)) | ||
| 341 | return -ENODEV; | ||
| 342 | ret = idev->info->release(idev->info, inode); | 350 | ret = idev->info->release(idev->info, inode); |
| 343 | module_put(idev->owner); | 351 | |
| 344 | } | 352 | module_put(idev->owner); |
| 353 | |||
| 345 | if (filep->f_flags & FASYNC) | 354 | if (filep->f_flags & FASYNC) |
| 346 | ret = uio_fasync(-1, filep, 0); | 355 | ret = uio_fasync(-1, filep, 0); |
| 347 | kfree(listener); | 356 | kfree(listener); |
| @@ -510,10 +519,7 @@ static int uio_mmap(struct file *filep, struct vm_area_struct *vma) | |||
| 510 | return -EINVAL; | 519 | return -EINVAL; |
| 511 | 520 | ||
| 512 | if (idev->info->mmap) { | 521 | if (idev->info->mmap) { |
| 513 | if (!try_module_get(idev->owner)) | ||
| 514 | return -ENODEV; | ||
| 515 | ret = idev->info->mmap(idev->info, vma); | 522 | ret = idev->info->mmap(idev->info, vma); |
| 516 | module_put(idev->owner); | ||
| 517 | return ret; | 523 | return ret; |
| 518 | } | 524 | } |
| 519 | 525 | ||
diff --git a/drivers/uio/uio_cif.c b/drivers/uio/uio_cif.c index 838bae460831..57376060b978 100644 --- a/drivers/uio/uio_cif.c +++ b/drivers/uio/uio_cif.c | |||
| @@ -15,10 +15,6 @@ | |||
| 15 | 15 | ||
| 16 | #include <asm/io.h> | 16 | #include <asm/io.h> |
| 17 | 17 | ||
| 18 | #ifndef PCI_DEVICE_ID_PLX_9030 | ||
| 19 | #define PCI_DEVICE_ID_PLX_9030 0x9030 | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define PLX9030_INTCSR 0x4C | 18 | #define PLX9030_INTCSR 0x4C |
| 23 | #define INTSCR_INT1_ENABLE 0x01 | 19 | #define INTSCR_INT1_ENABLE 0x01 |
| 24 | #define INTSCR_INT1_STATUS 0x04 | 20 | #define INTSCR_INT1_STATUS 0x04 |
| @@ -116,7 +112,7 @@ static void hilscher_pci_remove(struct pci_dev *dev) | |||
| 116 | kfree (info); | 112 | kfree (info); |
| 117 | } | 113 | } |
| 118 | 114 | ||
| 119 | static struct pci_device_id hilscher_pci_ids[] = { | 115 | static struct pci_device_id hilscher_pci_ids[] __devinitdata = { |
| 120 | { | 116 | { |
| 121 | .vendor = PCI_VENDOR_ID_PLX, | 117 | .vendor = PCI_VENDOR_ID_PLX, |
| 122 | .device = PCI_DEVICE_ID_PLX_9030, | 118 | .device = PCI_DEVICE_ID_PLX_9030, |
diff --git a/drivers/uio/uio_smx.c b/drivers/uio/uio_smx.c new file mode 100644 index 000000000000..44054a650a8a --- /dev/null +++ b/drivers/uio/uio_smx.c | |||
| @@ -0,0 +1,140 @@ | |||
| 1 | /* | ||
| 2 | * UIO SMX Cryptengine driver. | ||
| 3 | * | ||
| 4 | * (C) 2008 Nias Digital P/L <bn@niasdigital.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/device.h> | ||
| 13 | #include <linux/module.h> | ||
| 14 | #include <linux/platform_device.h> | ||
| 15 | #include <linux/uio_driver.h> | ||
| 16 | #include <linux/io.h> | ||
| 17 | |||
| 18 | #define DRV_NAME "smx-ce" | ||
| 19 | #define DRV_VERSION "0.03" | ||
| 20 | |||
| 21 | #define SMX_CSR 0x00000000 | ||
| 22 | #define SMX_EnD 0x00000001 | ||
| 23 | #define SMX_RUN 0x00000002 | ||
| 24 | #define SMX_DRDY 0x00000004 | ||
| 25 | #define SMX_ERR 0x00000008 | ||
| 26 | |||
| 27 | static irqreturn_t smx_handler(int irq, struct uio_info *dev_info) | ||
| 28 | { | ||
| 29 | void __iomem *csr = dev_info->mem[0].internal_addr + SMX_CSR; | ||
| 30 | |||
| 31 | u32 status = ioread32(csr); | ||
| 32 | |||
| 33 | if (!(status & SMX_DRDY)) | ||
| 34 | return IRQ_NONE; | ||
| 35 | |||
| 36 | /* Disable interrupt */ | ||
| 37 | iowrite32(status & ~SMX_DRDY, csr); | ||
| 38 | return IRQ_HANDLED; | ||
| 39 | } | ||
| 40 | |||
| 41 | static int __devinit smx_ce_probe(struct platform_device *dev) | ||
| 42 | { | ||
| 43 | |||
| 44 | int ret = -ENODEV; | ||
| 45 | struct uio_info *info; | ||
| 46 | struct resource *regs; | ||
| 47 | |||
| 48 | info = kzalloc(sizeof(struct uio_info), GFP_KERNEL); | ||
| 49 | if (!info) | ||
| 50 | return -ENOMEM; | ||
| 51 | |||
| 52 | regs = platform_get_resource(dev, IORESOURCE_MEM, 0); | ||
| 53 | if (!regs) { | ||
| 54 | dev_err(&dev->dev, "No memory resource specified\n"); | ||
| 55 | goto out_free; | ||
| 56 | } | ||
| 57 | |||
| 58 | info->mem[0].addr = regs->start; | ||
| 59 | if (!info->mem[0].addr) { | ||
| 60 | dev_err(&dev->dev, "Invalid memory resource\n"); | ||
| 61 | goto out_free; | ||
| 62 | } | ||
| 63 | |||
| 64 | info->mem[0].size = regs->end - regs->start + 1; | ||
| 65 | info->mem[0].internal_addr = ioremap(regs->start, info->mem[0].size); | ||
| 66 | |||
| 67 | if (!info->mem[0].internal_addr) { | ||
| 68 | dev_err(&dev->dev, "Can't remap memory address range\n"); | ||
| 69 | goto out_free; | ||
| 70 | } | ||
| 71 | |||
| 72 | info->mem[0].memtype = UIO_MEM_PHYS; | ||
| 73 | |||
| 74 | info->name = "smx-ce"; | ||
| 75 | info->version = "0.03"; | ||
| 76 | |||
| 77 | info->irq = platform_get_irq(dev, 0); | ||
| 78 | if (info->irq < 0) { | ||
| 79 | ret = info->irq; | ||
| 80 | dev_err(&dev->dev, "No (or invalid) IRQ resource specified\n"); | ||
| 81 | goto out_unmap; | ||
| 82 | } | ||
| 83 | |||
| 84 | info->irq_flags = IRQF_SHARED; | ||
| 85 | info->handler = smx_handler; | ||
| 86 | |||
| 87 | platform_set_drvdata(dev, info); | ||
| 88 | |||
| 89 | ret = uio_register_device(&dev->dev, info); | ||
| 90 | |||
| 91 | if (ret) | ||
| 92 | goto out_unmap; | ||
| 93 | |||
| 94 | return 0; | ||
| 95 | |||
| 96 | out_unmap: | ||
| 97 | iounmap(info->mem[0].internal_addr); | ||
| 98 | out_free: | ||
| 99 | kfree(info); | ||
| 100 | |||
| 101 | return ret; | ||
| 102 | } | ||
| 103 | |||
| 104 | static int __devexit smx_ce_remove(struct platform_device *dev) | ||
| 105 | { | ||
| 106 | struct uio_info *info = platform_get_drvdata(dev); | ||
| 107 | |||
| 108 | uio_unregister_device(info); | ||
| 109 | platform_set_drvdata(dev, NULL); | ||
| 110 | iounmap(info->mem[0].internal_addr); | ||
| 111 | |||
| 112 | kfree(info); | ||
| 113 | |||
| 114 | return 0; | ||
| 115 | } | ||
| 116 | |||
| 117 | static struct platform_driver smx_ce_driver = { | ||
| 118 | .probe = smx_ce_probe, | ||
| 119 | .remove = __devexit_p(smx_ce_remove), | ||
| 120 | .driver = { | ||
| 121 | .name = DRV_NAME, | ||
| 122 | .owner = THIS_MODULE, | ||
| 123 | }, | ||
| 124 | }; | ||
| 125 | |||
| 126 | static int __init smx_ce_init_module(void) | ||
| 127 | { | ||
| 128 | return platform_driver_register(&smx_ce_driver); | ||
| 129 | } | ||
| 130 | module_init(smx_ce_init_module); | ||
| 131 | |||
| 132 | static void __exit smx_ce_exit_module(void) | ||
| 133 | { | ||
| 134 | platform_driver_unregister(&smx_ce_driver); | ||
| 135 | } | ||
| 136 | module_exit(smx_ce_exit_module); | ||
| 137 | |||
| 138 | MODULE_LICENSE("GPL v2"); | ||
| 139 | MODULE_VERSION(DRV_VERSION); | ||
| 140 | MODULE_AUTHOR("Ben Nizette <bn@niasdigital.com>"); | ||
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 03f808c5b79d..6149e4b58c88 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
| @@ -473,6 +473,10 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev) | |||
| 473 | return 0; | 473 | return 0; |
| 474 | if (IS_ERR(state)) /* I/O error reading the partition table */ | 474 | if (IS_ERR(state)) /* I/O error reading the partition table */ |
| 475 | return -EIO; | 475 | return -EIO; |
| 476 | |||
| 477 | /* tell userspace that the media / partition table may have changed */ | ||
| 478 | kobject_uevent(&disk->dev.kobj, KOBJ_CHANGE); | ||
| 479 | |||
| 476 | for (p = 1; p < state->limit; p++) { | 480 | for (p = 1; p < state->limit; p++) { |
| 477 | sector_t size = state->parts[p].size; | 481 | sector_t size = state->parts[p].size; |
| 478 | sector_t from = state->parts[p].from; | 482 | sector_t from = state->parts[p].from; |
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index 4948d9bc405d..a1c3a1fab7f0 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/idr.h> | 20 | #include <linux/idr.h> |
| 21 | #include <linux/completion.h> | 21 | #include <linux/completion.h> |
| 22 | #include <linux/mutex.h> | 22 | #include <linux/mutex.h> |
| 23 | #include <linux/slab.h> | ||
| 23 | #include "sysfs.h" | 24 | #include "sysfs.h" |
| 24 | 25 | ||
| 25 | DEFINE_MUTEX(sysfs_mutex); | 26 | DEFINE_MUTEX(sysfs_mutex); |
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index baa663e69388..ade9a7e6a757 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/module.h> | 13 | #include <linux/module.h> |
| 14 | #include <linux/kobject.h> | 14 | #include <linux/kobject.h> |
| 15 | #include <linux/kallsyms.h> | 15 | #include <linux/kallsyms.h> |
| 16 | #include <linux/slab.h> | ||
| 16 | #include <linux/namei.h> | 17 | #include <linux/namei.h> |
| 17 | #include <linux/poll.h> | 18 | #include <linux/poll.h> |
| 18 | #include <linux/list.h> | 19 | #include <linux/list.h> |
| @@ -128,7 +129,7 @@ sysfs_read_file(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
| 128 | ssize_t retval = 0; | 129 | ssize_t retval = 0; |
| 129 | 130 | ||
| 130 | mutex_lock(&buffer->mutex); | 131 | mutex_lock(&buffer->mutex); |
| 131 | if (buffer->needs_read_fill) { | 132 | if (buffer->needs_read_fill || *ppos == 0) { |
| 132 | retval = fill_read_buffer(file->f_path.dentry,buffer); | 133 | retval = fill_read_buffer(file->f_path.dentry,buffer); |
| 133 | if (retval) | 134 | if (retval) |
| 134 | goto out; | 135 | goto out; |
| @@ -409,8 +410,7 @@ static int sysfs_release(struct inode *inode, struct file *filp) | |||
| 409 | * return POLLERR|POLLPRI, and select will return the fd whether | 410 | * return POLLERR|POLLPRI, and select will return the fd whether |
| 410 | * it is waiting for read, write, or exceptions. | 411 | * it is waiting for read, write, or exceptions. |
| 411 | * Once poll/select indicates that the value has changed, you | 412 | * Once poll/select indicates that the value has changed, you |
| 412 | * need to close and re-open the file, as simply seeking and reading | 413 | * need to close and re-open the file, or seek to 0 and read again. |
| 413 | * again will not get new data, or reset the state of 'poll'. | ||
| 414 | * Reminder: this only works for attributes which actively support | 414 | * Reminder: this only works for attributes which actively support |
| 415 | * it, and it is not possible to test an attribute from userspace | 415 | * it, and it is not possible to test an attribute from userspace |
| 416 | * to see if it supports poll (Neither 'poll' nor 'select' return | 416 | * to see if it supports poll (Neither 'poll' nor 'select' return |
diff --git a/include/linux/attribute_container.h b/include/linux/attribute_container.h index 574b201b99d8..794ad74b1d61 100644 --- a/include/linux/attribute_container.h +++ b/include/linux/attribute_container.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * class_container.h - a generic container for all classes | 2 | * attribute_container.h - a generic container for all classes |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com> | 4 | * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com> |
| 5 | * | 5 | * |
| @@ -18,7 +18,7 @@ struct attribute_container { | |||
| 18 | struct klist containers; | 18 | struct klist containers; |
| 19 | struct class *class; | 19 | struct class *class; |
| 20 | struct attribute_group *grp; | 20 | struct attribute_group *grp; |
| 21 | struct class_device_attribute **attrs; | 21 | struct device_attribute **attrs; |
| 22 | int (*match)(struct attribute_container *, struct device *); | 22 | int (*match)(struct attribute_container *, struct device *); |
| 23 | #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 | 23 | #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 |
| 24 | unsigned long flags; | 24 | unsigned long flags; |
| @@ -41,31 +41,31 @@ int __must_check attribute_container_unregister(struct attribute_container *cont | |||
| 41 | void attribute_container_create_device(struct device *dev, | 41 | void attribute_container_create_device(struct device *dev, |
| 42 | int (*fn)(struct attribute_container *, | 42 | int (*fn)(struct attribute_container *, |
| 43 | struct device *, | 43 | struct device *, |
| 44 | struct class_device *)); | 44 | struct device *)); |
| 45 | void attribute_container_add_device(struct device *dev, | 45 | void attribute_container_add_device(struct device *dev, |
| 46 | int (*fn)(struct attribute_container *, | 46 | int (*fn)(struct attribute_container *, |
| 47 | struct device *, | 47 | struct device *, |
| 48 | struct class_device *)); | 48 | struct device *)); |
| 49 | void attribute_container_remove_device(struct device *dev, | 49 | void attribute_container_remove_device(struct device *dev, |
| 50 | void (*fn)(struct attribute_container *, | 50 | void (*fn)(struct attribute_container *, |
| 51 | struct device *, | 51 | struct device *, |
| 52 | struct class_device *)); | 52 | struct device *)); |
| 53 | void attribute_container_device_trigger(struct device *dev, | 53 | void attribute_container_device_trigger(struct device *dev, |
| 54 | int (*fn)(struct attribute_container *, | 54 | int (*fn)(struct attribute_container *, |
| 55 | struct device *, | 55 | struct device *, |
| 56 | struct class_device *)); | 56 | struct device *)); |
| 57 | void attribute_container_trigger(struct device *dev, | 57 | void attribute_container_trigger(struct device *dev, |
| 58 | int (*fn)(struct attribute_container *, | 58 | int (*fn)(struct attribute_container *, |
| 59 | struct device *)); | 59 | struct device *)); |
| 60 | int attribute_container_add_attrs(struct class_device *classdev); | 60 | int attribute_container_add_attrs(struct device *classdev); |
| 61 | int attribute_container_add_class_device(struct class_device *classdev); | 61 | int attribute_container_add_class_device(struct device *classdev); |
| 62 | int attribute_container_add_class_device_adapter(struct attribute_container *cont, | 62 | int attribute_container_add_class_device_adapter(struct attribute_container *cont, |
| 63 | struct device *dev, | 63 | struct device *dev, |
| 64 | struct class_device *classdev); | 64 | struct device *classdev); |
| 65 | void attribute_container_remove_attrs(struct class_device *classdev); | 65 | void attribute_container_remove_attrs(struct device *classdev); |
| 66 | void attribute_container_class_device_del(struct class_device *classdev); | 66 | void attribute_container_class_device_del(struct device *classdev); |
| 67 | struct attribute_container *attribute_container_classdev_to_container(struct class_device *); | 67 | struct attribute_container *attribute_container_classdev_to_container(struct device *); |
| 68 | struct class_device *attribute_container_find_class_device(struct attribute_container *, struct device *); | 68 | struct device *attribute_container_find_class_device(struct attribute_container *, struct device *); |
| 69 | struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev); | 69 | struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev); |
| 70 | 70 | ||
| 71 | #endif | 71 | #endif |
diff --git a/include/linux/bsg.h b/include/linux/bsg.h index 60e377b520f8..e8406c55c6d3 100644 --- a/include/linux/bsg.h +++ b/include/linux/bsg.h | |||
| @@ -55,7 +55,7 @@ struct sg_io_v4 { | |||
| 55 | 55 | ||
| 56 | #if defined(CONFIG_BLK_DEV_BSG) | 56 | #if defined(CONFIG_BLK_DEV_BSG) |
| 57 | struct bsg_class_device { | 57 | struct bsg_class_device { |
| 58 | struct class_device *class_dev; | 58 | struct device *class_dev; |
| 59 | struct device *dev; | 59 | struct device *dev; |
| 60 | int minor; | 60 | int minor; |
| 61 | struct request_queue *queue; | 61 | struct request_queue *queue; |
diff --git a/include/linux/device.h b/include/linux/device.h index c79b93e56fa0..1a060265acea 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -429,7 +429,6 @@ struct device { | |||
| 429 | struct kobject kobj; | 429 | struct kobject kobj; |
| 430 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ | 430 | char bus_id[BUS_ID_SIZE]; /* position on parent bus */ |
| 431 | struct device_type *type; | 431 | struct device_type *type; |
| 432 | unsigned is_registered:1; | ||
| 433 | unsigned uevent_suppress:1; | 432 | unsigned uevent_suppress:1; |
| 434 | 433 | ||
| 435 | struct semaphore sem; /* semaphore to synchronize calls to | 434 | struct semaphore sem; /* semaphore to synchronize calls to |
| @@ -475,6 +474,9 @@ struct device { | |||
| 475 | void (*release)(struct device *dev); | 474 | void (*release)(struct device *dev); |
| 476 | }; | 475 | }; |
| 477 | 476 | ||
| 477 | /* Get the wakeup routines, which depend on struct device */ | ||
| 478 | #include <linux/pm_wakeup.h> | ||
| 479 | |||
| 478 | #ifdef CONFIG_NUMA | 480 | #ifdef CONFIG_NUMA |
| 479 | static inline int dev_to_node(struct device *dev) | 481 | static inline int dev_to_node(struct device *dev) |
| 480 | { | 482 | { |
| @@ -506,7 +508,7 @@ static inline void dev_set_drvdata(struct device *dev, void *data) | |||
| 506 | 508 | ||
| 507 | static inline int device_is_registered(struct device *dev) | 509 | static inline int device_is_registered(struct device *dev) |
| 508 | { | 510 | { |
| 509 | return dev->is_registered; | 511 | return dev->kobj.state_in_sysfs; |
| 510 | } | 512 | } |
| 511 | 513 | ||
| 512 | void driver_init(void); | 514 | void driver_init(void); |
| @@ -543,20 +545,6 @@ extern struct device *device_create(struct class *cls, struct device *parent, | |||
| 543 | dev_t devt, const char *fmt, ...) | 545 | dev_t devt, const char *fmt, ...) |
| 544 | __attribute__((format(printf, 4, 5))); | 546 | __attribute__((format(printf, 4, 5))); |
| 545 | extern void device_destroy(struct class *cls, dev_t devt); | 547 | extern void device_destroy(struct class *cls, dev_t devt); |
| 546 | #ifdef CONFIG_PM_SLEEP | ||
| 547 | extern void destroy_suspended_device(struct class *cls, dev_t devt); | ||
| 548 | extern void device_pm_schedule_removal(struct device *); | ||
| 549 | #else /* !CONFIG_PM_SLEEP */ | ||
| 550 | static inline void destroy_suspended_device(struct class *cls, dev_t devt) | ||
| 551 | { | ||
| 552 | device_destroy(cls, devt); | ||
| 553 | } | ||
| 554 | |||
| 555 | static inline void device_pm_schedule_removal(struct device *dev) | ||
| 556 | { | ||
| 557 | device_unregister(dev); | ||
| 558 | } | ||
| 559 | #endif /* !CONFIG_PM_SLEEP */ | ||
| 560 | 548 | ||
| 561 | /* | 549 | /* |
| 562 | * Platform "fixup" functions - allow the platform to have their say | 550 | * Platform "fixup" functions - allow the platform to have their say |
| @@ -608,21 +596,16 @@ extern const char *dev_driver_string(struct device *dev); | |||
| 608 | #define dev_dbg(dev, format, arg...) \ | 596 | #define dev_dbg(dev, format, arg...) \ |
| 609 | dev_printk(KERN_DEBUG , dev , format , ## arg) | 597 | dev_printk(KERN_DEBUG , dev , format , ## arg) |
| 610 | #else | 598 | #else |
| 611 | static inline int __attribute__ ((format (printf, 2, 3))) | 599 | #define dev_dbg(dev, format, arg...) \ |
| 612 | dev_dbg(struct device *dev, const char *fmt, ...) | 600 | ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; }) |
| 613 | { | ||
| 614 | return 0; | ||
| 615 | } | ||
| 616 | #endif | 601 | #endif |
| 617 | 602 | ||
| 618 | #ifdef VERBOSE_DEBUG | 603 | #ifdef VERBOSE_DEBUG |
| 619 | #define dev_vdbg dev_dbg | 604 | #define dev_vdbg dev_dbg |
| 620 | #else | 605 | #else |
| 621 | static inline int __attribute__ ((format (printf, 2, 3))) | 606 | |
| 622 | dev_vdbg(struct device *dev, const char *fmt, ...) | 607 | #define dev_vdbg(dev, format, arg...) \ |
| 623 | { | 608 | ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; }) |
| 624 | return 0; | ||
| 625 | } | ||
| 626 | #endif | 609 | #endif |
| 627 | 610 | ||
| 628 | /* Create alias, so I can be autoloaded. */ | 611 | /* Create alias, so I can be autoloaded. */ |
diff --git a/include/linux/enclosure.h b/include/linux/enclosure.h index a5978f18ca40..4332442b1b57 100644 --- a/include/linux/enclosure.h +++ b/include/linux/enclosure.h | |||
| @@ -82,7 +82,8 @@ struct enclosure_component_callbacks { | |||
| 82 | 82 | ||
| 83 | struct enclosure_component { | 83 | struct enclosure_component { |
| 84 | void *scratch; | 84 | void *scratch; |
| 85 | struct class_device cdev; | 85 | struct device cdev; |
| 86 | struct device *dev; | ||
| 86 | enum enclosure_component_type type; | 87 | enum enclosure_component_type type; |
| 87 | int number; | 88 | int number; |
| 88 | int fault; | 89 | int fault; |
| @@ -94,20 +95,20 @@ struct enclosure_component { | |||
| 94 | struct enclosure_device { | 95 | struct enclosure_device { |
| 95 | void *scratch; | 96 | void *scratch; |
| 96 | struct list_head node; | 97 | struct list_head node; |
| 97 | struct class_device cdev; | 98 | struct device edev; |
| 98 | struct enclosure_component_callbacks *cb; | 99 | struct enclosure_component_callbacks *cb; |
| 99 | int components; | 100 | int components; |
| 100 | struct enclosure_component component[0]; | 101 | struct enclosure_component component[0]; |
| 101 | }; | 102 | }; |
| 102 | 103 | ||
| 103 | static inline struct enclosure_device * | 104 | static inline struct enclosure_device * |
| 104 | to_enclosure_device(struct class_device *dev) | 105 | to_enclosure_device(struct device *dev) |
| 105 | { | 106 | { |
| 106 | return container_of(dev, struct enclosure_device, cdev); | 107 | return container_of(dev, struct enclosure_device, edev); |
| 107 | } | 108 | } |
| 108 | 109 | ||
| 109 | static inline struct enclosure_component * | 110 | static inline struct enclosure_component * |
| 110 | to_enclosure_component(struct class_device *dev) | 111 | to_enclosure_component(struct device *dev) |
| 111 | { | 112 | { |
| 112 | return container_of(dev, struct enclosure_component, cdev); | 113 | return container_of(dev, struct enclosure_component, cdev); |
| 113 | } | 114 | } |
diff --git a/include/linux/hw_random.h b/include/linux/hw_random.h index 42131820bb89..85d11916e9ea 100644 --- a/include/linux/hw_random.h +++ b/include/linux/hw_random.h | |||
| @@ -44,15 +44,7 @@ struct hwrng { | |||
| 44 | /** Register a new Hardware Random Number Generator driver. */ | 44 | /** Register a new Hardware Random Number Generator driver. */ |
| 45 | extern int hwrng_register(struct hwrng *rng); | 45 | extern int hwrng_register(struct hwrng *rng); |
| 46 | /** Unregister a Hardware Random Number Generator driver. */ | 46 | /** Unregister a Hardware Random Number Generator driver. */ |
| 47 | extern void __hwrng_unregister(struct hwrng *rng, bool suspended); | 47 | extern void hwrng_unregister(struct hwrng *rng); |
| 48 | static inline void hwrng_unregister(struct hwrng *rng) | ||
| 49 | { | ||
| 50 | __hwrng_unregister(rng, false); | ||
| 51 | } | ||
| 52 | static inline void hwrng_unregister_suspended(struct hwrng *rng) | ||
| 53 | { | ||
| 54 | __hwrng_unregister(rng, true); | ||
| 55 | } | ||
| 56 | 48 | ||
| 57 | #endif /* __KERNEL__ */ | 49 | #endif /* __KERNEL__ */ |
| 58 | #endif /* LINUX_HWRANDOM_H_ */ | 50 | #endif /* LINUX_HWRANDOM_H_ */ |
diff --git a/include/linux/iscsi_ibft.h b/include/linux/iscsi_ibft.h new file mode 100644 index 000000000000..6092487e2950 --- /dev/null +++ b/include/linux/iscsi_ibft.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2007 Red Hat, Inc. | ||
| 3 | * by Peter Jones <pjones@redhat.com> | ||
| 4 | * Copyright 2007 IBM, Inc. | ||
| 5 | * by Konrad Rzeszutek <konradr@linux.vnet.ibm.com> | ||
| 6 | * Copyright 2008 | ||
| 7 | * by Konrad Rzeszutek <ketuzsezr@darnok.org> | ||
| 8 | * | ||
| 9 | * This code exposes the iSCSI Boot Format Table to userland via sysfs. | ||
| 10 | * | ||
| 11 | * This program is free software; you can redistribute it and/or modify | ||
| 12 | * it under the terms of the GNU General Public License v2.0 as published by | ||
| 13 | * the Free Software Foundation | ||
| 14 | * | ||
| 15 | * This program is distributed in the hope that it will be useful, | ||
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | * GNU General Public License for more details. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef ISCSI_IBFT_H | ||
| 22 | #define ISCSI_IBFT_H | ||
| 23 | |||
| 24 | struct ibft_table_header { | ||
| 25 | char signature[4]; | ||
| 26 | u32 length; | ||
| 27 | u8 revision; | ||
| 28 | u8 checksum; | ||
| 29 | char oem_id[6]; | ||
| 30 | char oem_table_id[8]; | ||
| 31 | char reserved[24]; | ||
| 32 | } __attribute__((__packed__)); | ||
| 33 | |||
| 34 | /* | ||
| 35 | * Logical location of iSCSI Boot Format Table. | ||
| 36 | * If the value is NULL there is no iBFT on the machine. | ||
| 37 | */ | ||
| 38 | extern struct ibft_table_header *ibft_addr; | ||
| 39 | |||
| 40 | /* | ||
| 41 | * Routine used to find and reserve the iSCSI Boot Format Table. The | ||
| 42 | * mapped address is set in the ibft_addr variable. | ||
| 43 | */ | ||
| 44 | #ifdef CONFIG_ISCSI_IBFT_FIND | ||
| 45 | extern void __init reserve_ibft_region(void); | ||
| 46 | #else | ||
| 47 | static inline void reserve_ibft_region(void) { } | ||
| 48 | #endif | ||
| 49 | |||
| 50 | #endif /* ISCSI_IBFT_H */ | ||
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 2df44e773270..cd6d02cf854d 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -293,10 +293,8 @@ extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type, | |||
| 293 | #define pr_debug(fmt, arg...) \ | 293 | #define pr_debug(fmt, arg...) \ |
| 294 | printk(KERN_DEBUG fmt, ##arg) | 294 | printk(KERN_DEBUG fmt, ##arg) |
| 295 | #else | 295 | #else |
| 296 | static inline int __attribute__ ((format (printf, 1, 2))) pr_debug(const char * fmt, ...) | 296 | #define pr_debug(fmt, arg...) \ |
| 297 | { | 297 | ({ if (0) printk(KERN_DEBUG fmt, ##arg); 0; }) |
| 298 | return 0; | ||
| 299 | } | ||
| 300 | #endif | 298 | #endif |
| 301 | 299 | ||
| 302 | /* | 300 | /* |
diff --git a/include/linux/leds.h b/include/linux/leds.h index 0201f6f51cea..b07e3d400bd6 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h | |||
| @@ -59,15 +59,7 @@ struct led_classdev { | |||
| 59 | 59 | ||
| 60 | extern int led_classdev_register(struct device *parent, | 60 | extern int led_classdev_register(struct device *parent, |
| 61 | struct led_classdev *led_cdev); | 61 | struct led_classdev *led_cdev); |
| 62 | extern void __led_classdev_unregister(struct led_classdev *led_cdev, bool sus); | 62 | extern void led_classdev_unregister(struct led_classdev *lcd); |
| 63 | static inline void led_classdev_unregister(struct led_classdev *lcd) | ||
| 64 | { | ||
| 65 | __led_classdev_unregister(lcd, false); | ||
| 66 | } | ||
| 67 | static inline void led_classdev_unregister_suspended(struct led_classdev *lcd) | ||
| 68 | { | ||
| 69 | __led_classdev_unregister(lcd, true); | ||
| 70 | } | ||
| 71 | extern void led_classdev_suspend(struct led_classdev *led_cdev); | 63 | extern void led_classdev_suspend(struct led_classdev *led_cdev); |
| 72 | extern void led_classdev_resume(struct led_classdev *led_cdev); | 64 | extern void led_classdev_resume(struct led_classdev *led_cdev); |
| 73 | 65 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index 165734a2dd47..07ed56f7a767 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -443,7 +443,7 @@ enum link_pm { | |||
| 443 | MAX_PERFORMANCE, | 443 | MAX_PERFORMANCE, |
| 444 | MEDIUM_POWER, | 444 | MEDIUM_POWER, |
| 445 | }; | 445 | }; |
| 446 | extern struct class_device_attribute class_device_attr_link_power_management_policy; | 446 | extern struct device_attribute dev_attr_link_power_management_policy; |
| 447 | 447 | ||
| 448 | #ifdef CONFIG_ATA_SFF | 448 | #ifdef CONFIG_ATA_SFF |
| 449 | struct ata_ioports { | 449 | struct ata_ioports { |
diff --git a/include/linux/memory.h b/include/linux/memory.h index 54d7866d9c0e..f80e0e331cb7 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <linux/sysdev.h> | 18 | #include <linux/sysdev.h> |
| 19 | #include <linux/node.h> | 19 | #include <linux/node.h> |
| 20 | #include <linux/compiler.h> | 20 | #include <linux/compiler.h> |
| 21 | #include <linux/semaphore.h> | 21 | #include <linux/mutex.h> |
| 22 | 22 | ||
| 23 | struct memory_block { | 23 | struct memory_block { |
| 24 | unsigned long phys_index; | 24 | unsigned long phys_index; |
| @@ -29,7 +29,7 @@ struct memory_block { | |||
| 29 | * created long after the critical areas during | 29 | * created long after the critical areas during |
| 30 | * initialization. | 30 | * initialization. |
| 31 | */ | 31 | */ |
| 32 | struct semaphore state_sem; | 32 | struct mutex state_mutex; |
| 33 | int phys_device; /* to which fru does this belong? */ | 33 | int phys_device; /* to which fru does this belong? */ |
| 34 | void *hw; /* optional pointer to fw/hw data */ | 34 | void *hw; /* optional pointer to fw/hw data */ |
| 35 | int (*phys_callback)(struct memory_block *); | 35 | int (*phys_callback)(struct memory_block *); |
diff --git a/include/linux/memstick.h b/include/linux/memstick.h index 3e686ec6a967..37a5cdb03918 100644 --- a/include/linux/memstick.h +++ b/include/linux/memstick.h | |||
| @@ -276,7 +276,7 @@ struct memstick_host { | |||
| 276 | #define MEMSTICK_CAP_PAR8 4 | 276 | #define MEMSTICK_CAP_PAR8 4 |
| 277 | 277 | ||
| 278 | struct work_struct media_checker; | 278 | struct work_struct media_checker; |
| 279 | struct class_device cdev; | 279 | struct device dev; |
| 280 | 280 | ||
| 281 | struct memstick_dev *card; | 281 | struct memstick_dev *card; |
| 282 | unsigned int retries; | 282 | unsigned int retries; |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 24b30b9b4f8a..26433ec520b3 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -43,15 +43,7 @@ struct miscdevice { | |||
| 43 | }; | 43 | }; |
| 44 | 44 | ||
| 45 | extern int misc_register(struct miscdevice * misc); | 45 | extern int misc_register(struct miscdevice * misc); |
| 46 | extern int __misc_deregister(struct miscdevice *misc, bool suspended); | 46 | extern int misc_deregister(struct miscdevice *misc); |
| 47 | static inline int misc_deregister(struct miscdevice *misc) | ||
| 48 | { | ||
| 49 | return __misc_deregister(misc, false); | ||
| 50 | } | ||
| 51 | static inline int misc_deregister_suspended(struct miscdevice *misc) | ||
| 52 | { | ||
| 53 | return __misc_deregister(misc, true); | ||
| 54 | } | ||
| 55 | 47 | ||
| 56 | #define MODULE_ALIAS_MISCDEV(minor) \ | 48 | #define MODULE_ALIAS_MISCDEV(minor) \ |
| 57 | MODULE_ALIAS("char-major-" __stringify(MISC_MAJOR) \ | 49 | MODULE_ALIAS("char-major-" __stringify(MISC_MAJOR) \ |
diff --git a/include/linux/pm.h b/include/linux/pm.h index 015b735811b4..1de72cbbe0d1 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -183,8 +183,9 @@ typedef struct pm_message { | |||
| 183 | struct dev_pm_info { | 183 | struct dev_pm_info { |
| 184 | pm_message_t power_state; | 184 | pm_message_t power_state; |
| 185 | unsigned can_wakeup:1; | 185 | unsigned can_wakeup:1; |
| 186 | #ifdef CONFIG_PM_SLEEP | ||
| 187 | unsigned should_wakeup:1; | 186 | unsigned should_wakeup:1; |
| 187 | bool sleeping:1; /* Owned by the PM core */ | ||
| 188 | #ifdef CONFIG_PM_SLEEP | ||
| 188 | struct list_head entry; | 189 | struct list_head entry; |
| 189 | #endif | 190 | #endif |
| 190 | }; | 191 | }; |
| @@ -197,11 +198,6 @@ extern void device_resume(void); | |||
| 197 | extern int device_suspend(pm_message_t state); | 198 | extern int device_suspend(pm_message_t state); |
| 198 | extern int device_prepare_suspend(pm_message_t state); | 199 | extern int device_prepare_suspend(pm_message_t state); |
| 199 | 200 | ||
| 200 | #define device_set_wakeup_enable(dev,val) \ | ||
| 201 | ((dev)->power.should_wakeup = !!(val)) | ||
| 202 | #define device_may_wakeup(dev) \ | ||
| 203 | (device_can_wakeup(dev) && (dev)->power.should_wakeup) | ||
| 204 | |||
| 205 | extern void __suspend_report_result(const char *function, void *fn, int ret); | 201 | extern void __suspend_report_result(const char *function, void *fn, int ret); |
| 206 | 202 | ||
| 207 | #define suspend_report_result(fn, ret) \ | 203 | #define suspend_report_result(fn, ret) \ |
| @@ -209,20 +205,6 @@ extern void __suspend_report_result(const char *function, void *fn, int ret); | |||
| 209 | __suspend_report_result(__FUNCTION__, fn, ret); \ | 205 | __suspend_report_result(__FUNCTION__, fn, ret); \ |
| 210 | } while (0) | 206 | } while (0) |
| 211 | 207 | ||
| 212 | /* | ||
| 213 | * Platform hook to activate device wakeup capability, if that's not already | ||
| 214 | * handled by enable_irq_wake() etc. | ||
| 215 | * Returns zero on success, else negative errno | ||
| 216 | */ | ||
| 217 | extern int (*platform_enable_wakeup)(struct device *dev, int is_on); | ||
| 218 | |||
| 219 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
| 220 | { | ||
| 221 | if (platform_enable_wakeup) | ||
| 222 | return (*platform_enable_wakeup)(dev, is_on); | ||
| 223 | return 0; | ||
| 224 | } | ||
| 225 | |||
| 226 | #else /* !CONFIG_PM_SLEEP */ | 208 | #else /* !CONFIG_PM_SLEEP */ |
| 227 | 209 | ||
| 228 | static inline int device_suspend(pm_message_t state) | 210 | static inline int device_suspend(pm_message_t state) |
| @@ -230,29 +212,10 @@ static inline int device_suspend(pm_message_t state) | |||
| 230 | return 0; | 212 | return 0; |
| 231 | } | 213 | } |
| 232 | 214 | ||
| 233 | #define device_set_wakeup_enable(dev,val) do{}while(0) | 215 | #define suspend_report_result(fn, ret) do {} while (0) |
| 234 | #define device_may_wakeup(dev) (0) | ||
| 235 | |||
| 236 | #define suspend_report_result(fn, ret) do { } while (0) | ||
| 237 | |||
| 238 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
| 239 | { | ||
| 240 | return 0; | ||
| 241 | } | ||
| 242 | 216 | ||
| 243 | #endif /* !CONFIG_PM_SLEEP */ | 217 | #endif /* !CONFIG_PM_SLEEP */ |
| 244 | 218 | ||
| 245 | /* changes to device_may_wakeup take effect on the next pm state change. | ||
| 246 | * by default, devices should wakeup if they can. | ||
| 247 | */ | ||
| 248 | #define device_can_wakeup(dev) \ | ||
| 249 | ((dev)->power.can_wakeup) | ||
| 250 | #define device_init_wakeup(dev,val) \ | ||
| 251 | do { \ | ||
| 252 | device_can_wakeup(dev) = !!(val); \ | ||
| 253 | device_set_wakeup_enable(dev,val); \ | ||
| 254 | } while(0) | ||
| 255 | |||
| 256 | /* | 219 | /* |
| 257 | * Global Power Management flags | 220 | * Global Power Management flags |
| 258 | * Used to keep APM and ACPI from both being active | 221 | * Used to keep APM and ACPI from both being active |
diff --git a/include/linux/pm_wakeup.h b/include/linux/pm_wakeup.h new file mode 100644 index 000000000000..f0d0b2cb8d20 --- /dev/null +++ b/include/linux/pm_wakeup.h | |||
| @@ -0,0 +1,90 @@ | |||
| 1 | /* | ||
| 2 | * pm_wakeup.h - Power management wakeup interface | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Alan Stern | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef _LINUX_PM_WAKEUP_H | ||
| 22 | #define _LINUX_PM_WAKEUP_H | ||
| 23 | |||
| 24 | #ifndef _DEVICE_H_ | ||
| 25 | # error "please don't include this file directly" | ||
| 26 | #endif | ||
| 27 | |||
| 28 | #ifdef CONFIG_PM | ||
| 29 | |||
| 30 | /* changes to device_may_wakeup take effect on the next pm state change. | ||
| 31 | * by default, devices should wakeup if they can. | ||
| 32 | */ | ||
| 33 | static inline void device_init_wakeup(struct device *dev, int val) | ||
| 34 | { | ||
| 35 | dev->power.can_wakeup = dev->power.should_wakeup = !!val; | ||
| 36 | } | ||
| 37 | |||
| 38 | static inline int device_can_wakeup(struct device *dev) | ||
| 39 | { | ||
| 40 | return dev->power.can_wakeup; | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline void device_set_wakeup_enable(struct device *dev, int val) | ||
| 44 | { | ||
| 45 | dev->power.should_wakeup = !!val; | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline int device_may_wakeup(struct device *dev) | ||
| 49 | { | ||
| 50 | return dev->power.can_wakeup & dev->power.should_wakeup; | ||
| 51 | } | ||
| 52 | |||
| 53 | /* | ||
| 54 | * Platform hook to activate device wakeup capability, if that's not already | ||
| 55 | * handled by enable_irq_wake() etc. | ||
| 56 | * Returns zero on success, else negative errno | ||
| 57 | */ | ||
| 58 | extern int (*platform_enable_wakeup)(struct device *dev, int is_on); | ||
| 59 | |||
| 60 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
| 61 | { | ||
| 62 | if (platform_enable_wakeup) | ||
| 63 | return (*platform_enable_wakeup)(dev, is_on); | ||
| 64 | return 0; | ||
| 65 | } | ||
| 66 | |||
| 67 | #else /* !CONFIG_PM */ | ||
| 68 | |||
| 69 | /* For some reason the next two routines work even without CONFIG_PM */ | ||
| 70 | static inline void device_init_wakeup(struct device *dev, int val) | ||
| 71 | { | ||
| 72 | dev->power.can_wakeup = !!val; | ||
| 73 | } | ||
| 74 | |||
| 75 | static inline int device_can_wakeup(struct device *dev) | ||
| 76 | { | ||
| 77 | return dev->power.can_wakeup; | ||
| 78 | } | ||
| 79 | |||
| 80 | #define device_set_wakeup_enable(dev, val) do {} while (0) | ||
| 81 | #define device_may_wakeup(dev) 0 | ||
| 82 | |||
| 83 | static inline int call_platform_enable_wakeup(struct device *dev, int is_on) | ||
| 84 | { | ||
| 85 | return 0; | ||
| 86 | } | ||
| 87 | |||
| 88 | #endif /* !CONFIG_PM */ | ||
| 89 | |||
| 90 | #endif /* _LINUX_PM_WAKEUP_H */ | ||
diff --git a/include/linux/raid_class.h b/include/linux/raid_class.h index d22ad392242a..6b537f1ac96c 100644 --- a/include/linux/raid_class.h +++ b/include/linux/raid_class.h | |||
| @@ -53,20 +53,20 @@ struct raid_data { | |||
| 53 | #define DEFINE_RAID_ATTRIBUTE(type, attr) \ | 53 | #define DEFINE_RAID_ATTRIBUTE(type, attr) \ |
| 54 | static inline void \ | 54 | static inline void \ |
| 55 | raid_set_##attr(struct raid_template *r, struct device *dev, type value) { \ | 55 | raid_set_##attr(struct raid_template *r, struct device *dev, type value) { \ |
| 56 | struct class_device *cdev = \ | 56 | struct device *device = \ |
| 57 | attribute_container_find_class_device(&r->raid_attrs.ac, dev);\ | 57 | attribute_container_find_class_device(&r->raid_attrs.ac, dev);\ |
| 58 | struct raid_data *rd; \ | 58 | struct raid_data *rd; \ |
| 59 | BUG_ON(!cdev); \ | 59 | BUG_ON(!device); \ |
| 60 | rd = class_get_devdata(cdev); \ | 60 | rd = dev_get_drvdata(device); \ |
| 61 | rd->attr = value; \ | 61 | rd->attr = value; \ |
| 62 | } \ | 62 | } \ |
| 63 | static inline type \ | 63 | static inline type \ |
| 64 | raid_get_##attr(struct raid_template *r, struct device *dev) { \ | 64 | raid_get_##attr(struct raid_template *r, struct device *dev) { \ |
| 65 | struct class_device *cdev = \ | 65 | struct device *device = \ |
| 66 | attribute_container_find_class_device(&r->raid_attrs.ac, dev);\ | 66 | attribute_container_find_class_device(&r->raid_attrs.ac, dev);\ |
| 67 | struct raid_data *rd; \ | 67 | struct raid_data *rd; \ |
| 68 | BUG_ON(!cdev); \ | 68 | BUG_ON(!device); \ |
| 69 | rd = class_get_devdata(cdev); \ | 69 | rd = dev_get_drvdata(device); \ |
| 70 | return rd->attr; \ | 70 | return rd->attr; \ |
| 71 | } | 71 | } |
| 72 | 72 | ||
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 802710438a9e..03378e3515b3 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -131,7 +131,6 @@ static inline int sysfs_create_dir(struct kobject *kobj) | |||
| 131 | 131 | ||
| 132 | static inline void sysfs_remove_dir(struct kobject *kobj) | 132 | static inline void sysfs_remove_dir(struct kobject *kobj) |
| 133 | { | 133 | { |
| 134 | ; | ||
| 135 | } | 134 | } |
| 136 | 135 | ||
| 137 | static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name) | 136 | static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name) |
| @@ -160,7 +159,6 @@ static inline int sysfs_chmod_file(struct kobject *kobj, | |||
| 160 | static inline void sysfs_remove_file(struct kobject *kobj, | 159 | static inline void sysfs_remove_file(struct kobject *kobj, |
| 161 | const struct attribute *attr) | 160 | const struct attribute *attr) |
| 162 | { | 161 | { |
| 163 | ; | ||
| 164 | } | 162 | } |
| 165 | 163 | ||
| 166 | static inline int sysfs_create_bin_file(struct kobject *kobj, | 164 | static inline int sysfs_create_bin_file(struct kobject *kobj, |
| @@ -169,10 +167,9 @@ static inline int sysfs_create_bin_file(struct kobject *kobj, | |||
| 169 | return 0; | 167 | return 0; |
| 170 | } | 168 | } |
| 171 | 169 | ||
| 172 | static inline int sysfs_remove_bin_file(struct kobject *kobj, | 170 | static inline void sysfs_remove_bin_file(struct kobject *kobj, |
| 173 | struct bin_attribute *attr) | 171 | struct bin_attribute *attr) |
| 174 | { | 172 | { |
| 175 | return 0; | ||
| 176 | } | 173 | } |
| 177 | 174 | ||
| 178 | static inline int sysfs_create_link(struct kobject *kobj, | 175 | static inline int sysfs_create_link(struct kobject *kobj, |
| @@ -183,7 +180,6 @@ static inline int sysfs_create_link(struct kobject *kobj, | |||
| 183 | 180 | ||
| 184 | static inline void sysfs_remove_link(struct kobject *kobj, const char *name) | 181 | static inline void sysfs_remove_link(struct kobject *kobj, const char *name) |
| 185 | { | 182 | { |
| 186 | ; | ||
| 187 | } | 183 | } |
| 188 | 184 | ||
| 189 | static inline int sysfs_create_group(struct kobject *kobj, | 185 | static inline int sysfs_create_group(struct kobject *kobj, |
| @@ -195,7 +191,6 @@ static inline int sysfs_create_group(struct kobject *kobj, | |||
| 195 | static inline void sysfs_remove_group(struct kobject *kobj, | 191 | static inline void sysfs_remove_group(struct kobject *kobj, |
| 196 | const struct attribute_group *grp) | 192 | const struct attribute_group *grp) |
| 197 | { | 193 | { |
| 198 | ; | ||
| 199 | } | 194 | } |
| 200 | 195 | ||
| 201 | static inline int sysfs_add_file_to_group(struct kobject *kobj, | 196 | static inline int sysfs_add_file_to_group(struct kobject *kobj, |
diff --git a/include/linux/transport_class.h b/include/linux/transport_class.h index 6696cf79c4f7..eaec1ea9558e 100644 --- a/include/linux/transport_class.h +++ b/include/linux/transport_class.h | |||
| @@ -17,11 +17,11 @@ struct transport_container; | |||
| 17 | struct transport_class { | 17 | struct transport_class { |
| 18 | struct class class; | 18 | struct class class; |
| 19 | int (*setup)(struct transport_container *, struct device *, | 19 | int (*setup)(struct transport_container *, struct device *, |
| 20 | struct class_device *); | 20 | struct device *); |
| 21 | int (*configure)(struct transport_container *, struct device *, | 21 | int (*configure)(struct transport_container *, struct device *, |
| 22 | struct class_device *); | 22 | struct device *); |
| 23 | int (*remove)(struct transport_container *, struct device *, | 23 | int (*remove)(struct transport_container *, struct device *, |
| 24 | struct class_device *); | 24 | struct device *); |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | #define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg) \ | 27 | #define DECLARE_TRANSPORT_CLASS(cls, nm, su, rm, cfg) \ |
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 95bf4bac44cb..2dcbecce3f61 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h | |||
| @@ -1051,7 +1051,7 @@ struct ib_device { | |||
| 1051 | struct ib_dma_mapping_ops *dma_ops; | 1051 | struct ib_dma_mapping_ops *dma_ops; |
| 1052 | 1052 | ||
| 1053 | struct module *owner; | 1053 | struct module *owner; |
| 1054 | struct class_device class_dev; | 1054 | struct device dev; |
| 1055 | struct kobject *ports_parent; | 1055 | struct kobject *ports_parent; |
| 1056 | struct list_head port_list; | 1056 | struct list_head port_list; |
| 1057 | 1057 | ||
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index ab7acbe80960..b8b19e2f57bb 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -156,8 +156,8 @@ struct scsi_device { | |||
| 156 | 156 | ||
| 157 | int timeout; | 157 | int timeout; |
| 158 | 158 | ||
| 159 | struct device sdev_gendev; | 159 | struct device sdev_gendev, |
| 160 | struct class_device sdev_classdev; | 160 | sdev_dev; |
| 161 | 161 | ||
| 162 | struct execute_work ew; /* used to get process context on put */ | 162 | struct execute_work ew; /* used to get process context on put */ |
| 163 | 163 | ||
| @@ -167,9 +167,9 @@ struct scsi_device { | |||
| 167 | #define to_scsi_device(d) \ | 167 | #define to_scsi_device(d) \ |
| 168 | container_of(d, struct scsi_device, sdev_gendev) | 168 | container_of(d, struct scsi_device, sdev_gendev) |
| 169 | #define class_to_sdev(d) \ | 169 | #define class_to_sdev(d) \ |
| 170 | container_of(d, struct scsi_device, sdev_classdev) | 170 | container_of(d, struct scsi_device, sdev_dev) |
| 171 | #define transport_class_to_sdev(class_dev) \ | 171 | #define transport_class_to_sdev(class_dev) \ |
| 172 | to_scsi_device(class_dev->dev) | 172 | to_scsi_device(class_dev->parent) |
| 173 | 173 | ||
| 174 | #define sdev_printk(prefix, sdev, fmt, a...) \ | 174 | #define sdev_printk(prefix, sdev, fmt, a...) \ |
| 175 | dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a) | 175 | dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a) |
| @@ -220,7 +220,7 @@ static inline struct scsi_target *scsi_target(struct scsi_device *sdev) | |||
| 220 | return to_scsi_target(sdev->sdev_gendev.parent); | 220 | return to_scsi_target(sdev->sdev_gendev.parent); |
| 221 | } | 221 | } |
| 222 | #define transport_class_to_starget(class_dev) \ | 222 | #define transport_class_to_starget(class_dev) \ |
| 223 | to_scsi_target(class_dev->dev) | 223 | to_scsi_target(class_dev->parent) |
| 224 | 224 | ||
| 225 | #define starget_printk(prefix, starget, fmt, a...) \ | 225 | #define starget_printk(prefix, starget, fmt, a...) \ |
| 226 | dev_printk(prefix, &(starget)->dev, fmt, ##a) | 226 | dev_printk(prefix, &(starget)->dev, fmt, ##a) |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 49132862bfaa..d967d6dc7a28 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -470,7 +470,7 @@ struct scsi_host_template { | |||
| 470 | /* | 470 | /* |
| 471 | * Pointer to the sysfs class properties for this host, NULL terminated. | 471 | * Pointer to the sysfs class properties for this host, NULL terminated. |
| 472 | */ | 472 | */ |
| 473 | struct class_device_attribute **shost_attrs; | 473 | struct device_attribute **shost_attrs; |
| 474 | 474 | ||
| 475 | /* | 475 | /* |
| 476 | * Pointer to the SCSI device properties for this host, NULL terminated. | 476 | * Pointer to the SCSI device properties for this host, NULL terminated. |
| @@ -655,8 +655,7 @@ struct Scsi_Host { | |||
| 655 | enum scsi_host_state shost_state; | 655 | enum scsi_host_state shost_state; |
| 656 | 656 | ||
| 657 | /* ldm bits */ | 657 | /* ldm bits */ |
| 658 | struct device shost_gendev; | 658 | struct device shost_gendev, shost_dev; |
| 659 | struct class_device shost_classdev; | ||
| 660 | 659 | ||
| 661 | /* | 660 | /* |
| 662 | * List of hosts per template. | 661 | * List of hosts per template. |
| @@ -683,7 +682,7 @@ struct Scsi_Host { | |||
| 683 | }; | 682 | }; |
| 684 | 683 | ||
| 685 | #define class_to_shost(d) \ | 684 | #define class_to_shost(d) \ |
| 686 | container_of(d, struct Scsi_Host, shost_classdev) | 685 | container_of(d, struct Scsi_Host, shost_dev) |
| 687 | 686 | ||
| 688 | #define shost_printk(prefix, shost, fmt, a...) \ | 687 | #define shost_printk(prefix, shost, fmt, a...) \ |
| 689 | dev_printk(prefix, &(shost)->shost_gendev, fmt, ##a) | 688 | dev_printk(prefix, &(shost)->shost_gendev, fmt, ##a) |
diff --git a/include/scsi/scsi_transport.h b/include/scsi/scsi_transport.h index 0dfef752f0e2..490bd13a634c 100644 --- a/include/scsi/scsi_transport.h +++ b/include/scsi/scsi_transport.h | |||
| @@ -80,7 +80,7 @@ struct scsi_transport_template { | |||
| 80 | }; | 80 | }; |
| 81 | 81 | ||
| 82 | #define transport_class_to_shost(tc) \ | 82 | #define transport_class_to_shost(tc) \ |
| 83 | dev_to_shost((tc)->dev) | 83 | dev_to_shost((tc)->parent) |
| 84 | 84 | ||
| 85 | 85 | ||
| 86 | /* Private area maintenance. The driver requested allocations come | 86 | /* Private area maintenance. The driver requested allocations come |
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 4769efd4db24..06f72bab9df0 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
| @@ -163,8 +163,8 @@ enum fc_tgtid_binding_type { | |||
| 163 | 163 | ||
| 164 | 164 | ||
| 165 | /* Macro for use in defining Virtual Port attributes */ | 165 | /* Macro for use in defining Virtual Port attributes */ |
| 166 | #define FC_VPORT_ATTR(_name,_mode,_show,_store) \ | 166 | #define FC_VPORT_ATTR(_name,_mode,_show,_store) \ |
| 167 | struct class_device_attribute class_device_attr_vport_##_name = \ | 167 | struct device_attribute dev_attr_vport_##_name = \ |
| 168 | __ATTR(_name,_mode,_show,_store) | 168 | __ATTR(_name,_mode,_show,_store) |
| 169 | 169 | ||
| 170 | 170 | ||
| @@ -234,8 +234,8 @@ struct fc_vport { | |||
| 234 | 234 | ||
| 235 | #define dev_to_vport(d) \ | 235 | #define dev_to_vport(d) \ |
| 236 | container_of(d, struct fc_vport, dev) | 236 | container_of(d, struct fc_vport, dev) |
| 237 | #define transport_class_to_vport(classdev) \ | 237 | #define transport_class_to_vport(dev) \ |
| 238 | dev_to_vport(classdev->dev) | 238 | dev_to_vport(dev->parent) |
| 239 | #define vport_to_shost(v) \ | 239 | #define vport_to_shost(v) \ |
| 240 | (v->shost) | 240 | (v->shost) |
| 241 | #define vport_to_shost_channel(v) \ | 241 | #define vport_to_shost_channel(v) \ |
| @@ -271,7 +271,7 @@ struct fc_rport_identifiers { | |||
| 271 | 271 | ||
| 272 | /* Macro for use in defining Remote Port attributes */ | 272 | /* Macro for use in defining Remote Port attributes */ |
| 273 | #define FC_RPORT_ATTR(_name,_mode,_show,_store) \ | 273 | #define FC_RPORT_ATTR(_name,_mode,_show,_store) \ |
| 274 | struct class_device_attribute class_device_attr_rport_##_name = \ | 274 | struct device_attribute dev_attr_rport_##_name = \ |
| 275 | __ATTR(_name,_mode,_show,_store) | 275 | __ATTR(_name,_mode,_show,_store) |
| 276 | 276 | ||
| 277 | 277 | ||
| @@ -341,8 +341,8 @@ struct fc_rport { /* aka fc_starget_attrs */ | |||
| 341 | 341 | ||
| 342 | #define dev_to_rport(d) \ | 342 | #define dev_to_rport(d) \ |
| 343 | container_of(d, struct fc_rport, dev) | 343 | container_of(d, struct fc_rport, dev) |
| 344 | #define transport_class_to_rport(classdev) \ | 344 | #define transport_class_to_rport(dev) \ |
| 345 | dev_to_rport(classdev->dev) | 345 | dev_to_rport(dev->parent) |
| 346 | #define rport_to_shost(r) \ | 346 | #define rport_to_shost(r) \ |
| 347 | dev_to_shost(r->dev.parent) | 347 | dev_to_shost(r->dev.parent) |
| 348 | 348 | ||
diff --git a/include/scsi/scsi_transport_sas.h b/include/scsi/scsi_transport_sas.h index 09125fa95b93..61ad3594aad6 100644 --- a/include/scsi/scsi_transport_sas.h +++ b/include/scsi/scsi_transport_sas.h | |||
| @@ -80,8 +80,8 @@ struct sas_phy { | |||
| 80 | 80 | ||
| 81 | #define dev_to_phy(d) \ | 81 | #define dev_to_phy(d) \ |
| 82 | container_of((d), struct sas_phy, dev) | 82 | container_of((d), struct sas_phy, dev) |
| 83 | #define transport_class_to_phy(cdev) \ | 83 | #define transport_class_to_phy(dev) \ |
| 84 | dev_to_phy((cdev)->dev) | 84 | dev_to_phy((dev)->parent) |
| 85 | #define phy_to_shost(phy) \ | 85 | #define phy_to_shost(phy) \ |
| 86 | dev_to_shost((phy)->dev.parent) | 86 | dev_to_shost((phy)->dev.parent) |
| 87 | 87 | ||
| @@ -96,8 +96,8 @@ struct sas_rphy { | |||
| 96 | 96 | ||
| 97 | #define dev_to_rphy(d) \ | 97 | #define dev_to_rphy(d) \ |
| 98 | container_of((d), struct sas_rphy, dev) | 98 | container_of((d), struct sas_rphy, dev) |
| 99 | #define transport_class_to_rphy(cdev) \ | 99 | #define transport_class_to_rphy(dev) \ |
| 100 | dev_to_rphy((cdev)->dev) | 100 | dev_to_rphy((dev)->parent) |
| 101 | #define rphy_to_shost(rphy) \ | 101 | #define rphy_to_shost(rphy) \ |
| 102 | dev_to_shost((rphy)->dev.parent) | 102 | dev_to_shost((rphy)->dev.parent) |
| 103 | #define target_to_rphy(targ) \ | 103 | #define target_to_rphy(targ) \ |
| @@ -152,8 +152,8 @@ struct sas_port { | |||
| 152 | 152 | ||
| 153 | #define dev_to_sas_port(d) \ | 153 | #define dev_to_sas_port(d) \ |
| 154 | container_of((d), struct sas_port, dev) | 154 | container_of((d), struct sas_port, dev) |
| 155 | #define transport_class_to_sas_port(cdev) \ | 155 | #define transport_class_to_sas_port(dev) \ |
| 156 | dev_to_sas_port((cdev)->dev) | 156 | dev_to_sas_port((dev)->parent) |
| 157 | 157 | ||
| 158 | struct sas_phy_linkrates { | 158 | struct sas_phy_linkrates { |
| 159 | enum sas_linkrate maximum_linkrate; | 159 | enum sas_linkrate maximum_linkrate; |
diff --git a/include/scsi/sd.h b/include/scsi/sd.h index 8ea9f7358ac1..4f032d48cb6e 100644 --- a/include/scsi/sd.h +++ b/include/scsi/sd.h | |||
| @@ -34,7 +34,7 @@ | |||
| 34 | struct scsi_disk { | 34 | struct scsi_disk { |
| 35 | struct scsi_driver *driver; /* always &sd_template */ | 35 | struct scsi_driver *driver; /* always &sd_template */ |
| 36 | struct scsi_device *device; | 36 | struct scsi_device *device; |
| 37 | struct class_device cdev; | 37 | struct device dev; |
| 38 | struct gendisk *disk; | 38 | struct gendisk *disk; |
| 39 | unsigned int openers; /* protected by BKL for now, yuck */ | 39 | unsigned int openers; /* protected by BKL for now, yuck */ |
| 40 | sector_t capacity; /* size in 512-byte sectors */ | 40 | sector_t capacity; /* size in 512-byte sectors */ |
| @@ -46,7 +46,7 @@ struct scsi_disk { | |||
| 46 | unsigned RCD : 1; /* state of disk RCD bit, unused */ | 46 | unsigned RCD : 1; /* state of disk RCD bit, unused */ |
| 47 | unsigned DPOFUA : 1; /* state of disk DPOFUA bit */ | 47 | unsigned DPOFUA : 1; /* state of disk DPOFUA bit */ |
| 48 | }; | 48 | }; |
| 49 | #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,cdev) | 49 | #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev) |
| 50 | 50 | ||
| 51 | #define sd_printk(prefix, sdsk, fmt, a...) \ | 51 | #define sd_printk(prefix, sdsk, fmt, a...) \ |
| 52 | (sdsk)->disk ? \ | 52 | (sdsk)->disk ? \ |
diff --git a/lib/kobject.c b/lib/kobject.c index 0d03252f87a8..2c6490370922 100644 --- a/lib/kobject.c +++ b/lib/kobject.c | |||
| @@ -58,11 +58,6 @@ static int create_dir(struct kobject *kobj) | |||
| 58 | return error; | 58 | return error; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | static inline struct kobject *to_kobj(struct list_head *entry) | ||
| 62 | { | ||
| 63 | return container_of(entry, struct kobject, entry); | ||
| 64 | } | ||
| 65 | |||
| 66 | static int get_kobj_path_length(struct kobject *kobj) | 61 | static int get_kobj_path_length(struct kobject *kobj) |
| 67 | { | 62 | { |
| 68 | int length = 1; | 63 | int length = 1; |
| @@ -592,8 +587,15 @@ static void kobject_release(struct kref *kref) | |||
| 592 | */ | 587 | */ |
| 593 | void kobject_put(struct kobject *kobj) | 588 | void kobject_put(struct kobject *kobj) |
| 594 | { | 589 | { |
| 595 | if (kobj) | 590 | if (kobj) { |
| 591 | if (!kobj->state_initialized) { | ||
| 592 | printk(KERN_WARNING "kobject: '%s' (%p): is not " | ||
| 593 | "initialized, yet kobject_put() is being " | ||
| 594 | "called.\n", kobject_name(kobj), kobj); | ||
| 595 | WARN_ON(1); | ||
| 596 | } | ||
| 596 | kref_put(&kobj->kref, kobject_release); | 597 | kref_put(&kobj->kref, kobject_release); |
| 598 | } | ||
| 597 | } | 599 | } |
| 598 | 600 | ||
| 599 | static void dynamic_kobj_release(struct kobject *kobj) | 601 | static void dynamic_kobj_release(struct kobject *kobj) |
| @@ -745,12 +747,11 @@ void kset_unregister(struct kset *k) | |||
| 745 | */ | 747 | */ |
| 746 | struct kobject *kset_find_obj(struct kset *kset, const char *name) | 748 | struct kobject *kset_find_obj(struct kset *kset, const char *name) |
| 747 | { | 749 | { |
| 748 | struct list_head *entry; | 750 | struct kobject *k; |
| 749 | struct kobject *ret = NULL; | 751 | struct kobject *ret = NULL; |
| 750 | 752 | ||
| 751 | spin_lock(&kset->list_lock); | 753 | spin_lock(&kset->list_lock); |
| 752 | list_for_each(entry, &kset->list) { | 754 | list_for_each_entry(k, &kset->list, entry) { |
| 753 | struct kobject *k = to_kobj(entry); | ||
| 754 | if (kobject_name(k) && !strcmp(kobject_name(k), name)) { | 755 | if (kobject_name(k) && !strcmp(kobject_name(k), name)) { |
| 755 | ret = kobject_get(k); | 756 | ret = kobject_get(k); |
| 756 | break; | 757 | break; |
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 7469c503580d..0fb330271271 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
| @@ -208,7 +208,7 @@ int online_pages(unsigned long pfn, unsigned long nr_pages) | |||
| 208 | /* | 208 | /* |
| 209 | * This doesn't need a lock to do pfn_to_page(). | 209 | * This doesn't need a lock to do pfn_to_page(). |
| 210 | * The section can't be removed here because of the | 210 | * The section can't be removed here because of the |
| 211 | * memory_block->state_sem. | 211 | * memory_block->state_mutex. |
| 212 | */ | 212 | */ |
| 213 | zone = page_zone(pfn_to_page(pfn)); | 213 | zone = page_zone(pfn_to_page(pfn)); |
| 214 | pgdat_resize_lock(zone->zone_pgdat, &flags); | 214 | pgdat_resize_lock(zone->zone_pgdat, &flags); |
diff --git a/Documentation/firmware_class/firmware_sample_driver.c b/samples/firmware_class/firmware_sample_driver.c index 6865cbe075ec..165cff98032e 100644 --- a/Documentation/firmware_class/firmware_sample_driver.c +++ b/samples/firmware_class/firmware_sample_driver.c | |||
| @@ -12,8 +12,7 @@ | |||
| 12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
| 13 | #include <linux/device.h> | 13 | #include <linux/device.h> |
| 14 | #include <linux/string.h> | 14 | #include <linux/string.h> |
| 15 | 15 | #include <linux/firmware.h> | |
| 16 | #include "linux/firmware.h" | ||
| 17 | 16 | ||
| 18 | static struct device ghost_device = { | 17 | static struct device ghost_device = { |
| 19 | .bus_id = "ghost0", | 18 | .bus_id = "ghost0", |
| @@ -31,38 +30,44 @@ static void sample_firmware_load(char *firmware, int size) | |||
| 31 | static void sample_probe_default(void) | 30 | static void sample_probe_default(void) |
| 32 | { | 31 | { |
| 33 | /* uses the default method to get the firmware */ | 32 | /* uses the default method to get the firmware */ |
| 34 | const struct firmware *fw_entry; | 33 | const struct firmware *fw_entry; |
| 35 | printk(KERN_INFO "firmware_sample_driver: a ghost device got inserted :)\n"); | 34 | int retval; |
| 35 | |||
| 36 | printk(KERN_INFO "firmware_sample_driver: " | ||
| 37 | "a ghost device got inserted :)\n"); | ||
| 36 | 38 | ||
| 37 | if(request_firmware(&fw_entry, "sample_driver_fw", &ghost_device)!=0) | 39 | retval = request_firmware(&fw_entry, "sample_driver_fw", &ghost_device); |
| 38 | { | 40 | if (retval) { |
| 39 | printk(KERN_ERR | 41 | printk(KERN_ERR |
| 40 | "firmware_sample_driver: Firmware not available\n"); | 42 | "firmware_sample_driver: Firmware not available\n"); |
| 41 | return; | 43 | return; |
| 42 | } | 44 | } |
| 43 | 45 | ||
| 44 | sample_firmware_load(fw_entry->data, fw_entry->size); | 46 | sample_firmware_load(fw_entry->data, fw_entry->size); |
| 45 | 47 | ||
| 46 | release_firmware(fw_entry); | 48 | release_firmware(fw_entry); |
| 47 | 49 | ||
| 48 | /* finish setting up the device */ | 50 | /* finish setting up the device */ |
| 49 | } | 51 | } |
| 52 | |||
| 50 | static void sample_probe_specific(void) | 53 | static void sample_probe_specific(void) |
| 51 | { | 54 | { |
| 55 | int retval; | ||
| 52 | /* Uses some specific hotplug support to get the firmware from | 56 | /* Uses some specific hotplug support to get the firmware from |
| 53 | * userspace directly into the hardware, or via some sysfs file */ | 57 | * userspace directly into the hardware, or via some sysfs file */ |
| 54 | 58 | ||
| 55 | /* NOTE: This currently doesn't work */ | 59 | /* NOTE: This currently doesn't work */ |
| 56 | 60 | ||
| 57 | printk(KERN_INFO "firmware_sample_driver: a ghost device got inserted :)\n"); | 61 | printk(KERN_INFO "firmware_sample_driver: " |
| 62 | "a ghost device got inserted :)\n"); | ||
| 58 | 63 | ||
| 59 | if(request_firmware(NULL, "sample_driver_fw", &ghost_device)!=0) | 64 | retval = request_firmware(NULL, "sample_driver_fw", &ghost_device); |
| 60 | { | 65 | if (retval) { |
| 61 | printk(KERN_ERR | 66 | printk(KERN_ERR |
| 62 | "firmware_sample_driver: Firmware load failed\n"); | 67 | "firmware_sample_driver: Firmware load failed\n"); |
| 63 | return; | 68 | return; |
| 64 | } | 69 | } |
| 65 | 70 | ||
| 66 | /* request_firmware blocks until userspace finished, so at | 71 | /* request_firmware blocks until userspace finished, so at |
| 67 | * this point the firmware should be already in the device */ | 72 | * this point the firmware should be already in the device */ |
| 68 | 73 | ||
| @@ -70,7 +75,7 @@ static void sample_probe_specific(void) | |||
| 70 | } | 75 | } |
| 71 | static void sample_probe_async_cont(const struct firmware *fw, void *context) | 76 | static void sample_probe_async_cont(const struct firmware *fw, void *context) |
| 72 | { | 77 | { |
| 73 | if(!fw){ | 78 | if (!fw) { |
| 74 | printk(KERN_ERR | 79 | printk(KERN_ERR |
| 75 | "firmware_sample_driver: firmware load failed\n"); | 80 | "firmware_sample_driver: firmware load failed\n"); |
| 76 | return; | 81 | return; |
| @@ -80,19 +85,18 @@ static void sample_probe_async_cont(const struct firmware *fw, void *context) | |||
| 80 | (char *)context); | 85 | (char *)context); |
| 81 | sample_firmware_load(fw->data, fw->size); | 86 | sample_firmware_load(fw->data, fw->size); |
| 82 | } | 87 | } |
| 88 | |||
| 83 | static void sample_probe_async(void) | 89 | static void sample_probe_async(void) |
| 84 | { | 90 | { |
| 85 | /* Let's say that I can't sleep */ | 91 | /* Let's say that I can't sleep */ |
| 86 | int error; | 92 | int error; |
| 87 | error = request_firmware_nowait (THIS_MODULE, FW_ACTION_NOHOTPLUG, | 93 | error = request_firmware_nowait(THIS_MODULE, FW_ACTION_NOHOTPLUG, |
| 88 | "sample_driver_fw", &ghost_device, | 94 | "sample_driver_fw", &ghost_device, |
| 89 | "my device pointer", | 95 | "my device pointer", |
| 90 | sample_probe_async_cont); | 96 | sample_probe_async_cont); |
| 91 | if(error){ | 97 | if (error) |
| 92 | printk(KERN_ERR | 98 | printk(KERN_ERR "firmware_sample_driver:" |
| 93 | "firmware_sample_driver:" | ||
| 94 | " request_firmware_nowait failed\n"); | 99 | " request_firmware_nowait failed\n"); |
| 95 | } | ||
| 96 | } | 100 | } |
| 97 | 101 | ||
| 98 | static int sample_init(void) | 102 | static int sample_init(void) |
| @@ -105,11 +109,12 @@ static int sample_init(void) | |||
| 105 | sample_probe_async(); | 109 | sample_probe_async(); |
| 106 | return 0; | 110 | return 0; |
| 107 | } | 111 | } |
| 112 | |||
| 108 | static void __exit sample_exit(void) | 113 | static void __exit sample_exit(void) |
| 109 | { | 114 | { |
| 110 | } | 115 | } |
| 111 | 116 | ||
| 112 | module_init (sample_init); | 117 | module_init(sample_init); |
| 113 | module_exit (sample_exit); | 118 | module_exit(sample_exit); |
| 114 | 119 | ||
| 115 | MODULE_LICENSE("GPL"); | 120 | MODULE_LICENSE("GPL"); |
diff --git a/Documentation/firmware_class/firmware_sample_firmware_class.c b/samples/firmware_class/firmware_sample_firmware_class.c index 2de62854f0e5..9392116e47b0 100644 --- a/Documentation/firmware_class/firmware_sample_firmware_class.c +++ b/samples/firmware_class/firmware_sample_firmware_class.c | |||
| @@ -25,30 +25,27 @@ MODULE_LICENSE("GPL"); | |||
| 25 | 25 | ||
| 26 | static inline struct class_device *to_class_dev(struct kobject *obj) | 26 | static inline struct class_device *to_class_dev(struct kobject *obj) |
| 27 | { | 27 | { |
| 28 | return container_of(obj,struct class_device,kobj); | 28 | return container_of(obj, struct class_device, kobj); |
| 29 | } | 29 | } |
| 30 | |||
| 30 | static inline | 31 | static inline |
| 31 | struct class_device_attribute *to_class_dev_attr(struct attribute *_attr) | 32 | struct class_device_attribute *to_class_dev_attr(struct attribute *_attr) |
| 32 | { | 33 | { |
| 33 | return container_of(_attr,struct class_device_attribute,attr); | 34 | return container_of(_attr, struct class_device_attribute, attr); |
| 34 | } | 35 | } |
| 35 | 36 | ||
| 36 | int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr); | ||
| 37 | int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr); | ||
| 38 | |||
| 39 | struct firmware_priv { | 37 | struct firmware_priv { |
| 40 | char fw_id[FIRMWARE_NAME_MAX]; | 38 | char fw_id[FIRMWARE_NAME_MAX]; |
| 41 | s32 loading:2; | 39 | s32 loading:2; |
| 42 | u32 abort:1; | 40 | u32 abort:1; |
| 43 | }; | 41 | }; |
| 44 | 42 | ||
| 45 | extern struct class firmware_class; | ||
| 46 | |||
| 47 | static ssize_t firmware_loading_show(struct class_device *class_dev, char *buf) | 43 | static ssize_t firmware_loading_show(struct class_device *class_dev, char *buf) |
| 48 | { | 44 | { |
| 49 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); | 45 | struct firmware_priv *fw_priv = class_get_devdata(class_dev); |
| 50 | return sprintf(buf, "%d\n", fw_priv->loading); | 46 | return sprintf(buf, "%d\n", fw_priv->loading); |
| 51 | } | 47 | } |
| 48 | |||
| 52 | static ssize_t firmware_loading_store(struct class_device *class_dev, | 49 | static ssize_t firmware_loading_store(struct class_device *class_dev, |
| 53 | const char *buf, size_t count) | 50 | const char *buf, size_t count) |
| 54 | { | 51 | { |
| @@ -56,8 +53,8 @@ static ssize_t firmware_loading_store(struct class_device *class_dev, | |||
| 56 | int prev_loading = fw_priv->loading; | 53 | int prev_loading = fw_priv->loading; |
| 57 | 54 | ||
| 58 | fw_priv->loading = simple_strtol(buf, NULL, 10); | 55 | fw_priv->loading = simple_strtol(buf, NULL, 10); |
| 59 | 56 | ||
| 60 | switch(fw_priv->loading){ | 57 | switch (fw_priv->loading) { |
| 61 | case -1: | 58 | case -1: |
| 62 | /* abort load an panic */ | 59 | /* abort load an panic */ |
| 63 | break; | 60 | break; |
| @@ -65,7 +62,7 @@ static ssize_t firmware_loading_store(struct class_device *class_dev, | |||
| 65 | /* setup load */ | 62 | /* setup load */ |
| 66 | break; | 63 | break; |
| 67 | case 0: | 64 | case 0: |
| 68 | if(prev_loading==1){ | 65 | if (prev_loading == 1) { |
| 69 | /* finish load and get the device back to working | 66 | /* finish load and get the device back to working |
| 70 | * state */ | 67 | * state */ |
| 71 | } | 68 | } |
| @@ -130,29 +127,29 @@ static int fw_setup_class_device(struct class_device *class_dev, | |||
| 130 | class_dev->class = &firmware_class, | 127 | class_dev->class = &firmware_class, |
| 131 | class_set_devdata(class_dev, fw_priv); | 128 | class_set_devdata(class_dev, fw_priv); |
| 132 | retval = class_device_register(class_dev); | 129 | retval = class_device_register(class_dev); |
| 133 | if (retval){ | 130 | if (retval) { |
| 134 | printk(KERN_ERR "%s: class_device_register failed\n", | 131 | printk(KERN_ERR "%s: class_device_register failed\n", |
| 135 | __FUNCTION__); | 132 | __func__); |
| 136 | goto error_free_fw_priv; | 133 | goto error_free_fw_priv; |
| 137 | } | 134 | } |
| 138 | 135 | ||
| 139 | retval = sysfs_create_bin_file(&class_dev->kobj, &firmware_attr_data); | 136 | retval = sysfs_create_bin_file(&class_dev->kobj, &firmware_attr_data); |
| 140 | if (retval){ | 137 | if (retval) { |
| 141 | printk(KERN_ERR "%s: sysfs_create_bin_file failed\n", | 138 | printk(KERN_ERR "%s: sysfs_create_bin_file failed\n", |
| 142 | __FUNCTION__); | 139 | __func__); |
| 143 | goto error_unreg_class_dev; | 140 | goto error_unreg_class_dev; |
| 144 | } | 141 | } |
| 145 | 142 | ||
| 146 | retval = class_device_create_file(class_dev, | 143 | retval = class_device_create_file(class_dev, |
| 147 | &class_device_attr_loading); | 144 | &class_device_attr_loading); |
| 148 | if (retval){ | 145 | if (retval) { |
| 149 | printk(KERN_ERR "%s: class_device_create_file failed\n", | 146 | printk(KERN_ERR "%s: class_device_create_file failed\n", |
| 150 | __FUNCTION__); | 147 | __func__); |
| 151 | goto error_remove_data; | 148 | goto error_remove_data; |
| 152 | } | 149 | } |
| 153 | 150 | ||
| 154 | goto out; | 151 | goto out; |
| 155 | 152 | ||
| 156 | error_remove_data: | 153 | error_remove_data: |
| 157 | sysfs_remove_bin_file(&class_dev->kobj, &firmware_attr_data); | 154 | sysfs_remove_bin_file(&class_dev->kobj, &firmware_attr_data); |
| 158 | error_unreg_class_dev: | 155 | error_unreg_class_dev: |
| @@ -183,16 +180,16 @@ static int __init firmware_sample_init(void) | |||
| 183 | 180 | ||
| 184 | device_initialize(&my_device); | 181 | device_initialize(&my_device); |
| 185 | class_dev = kmalloc(sizeof(struct class_device), GFP_KERNEL); | 182 | class_dev = kmalloc(sizeof(struct class_device), GFP_KERNEL); |
| 186 | if(!class_dev) | 183 | if (!class_dev) |
| 187 | return -ENOMEM; | 184 | return -ENOMEM; |
| 188 | 185 | ||
| 189 | error = fw_setup_class_device(class_dev, "my_firmware_image", | 186 | error = fw_setup_class_device(class_dev, "my_firmware_image", |
| 190 | &my_device); | 187 | &my_device); |
| 191 | if(error){ | 188 | if (error) { |
| 192 | kfree(class_dev); | 189 | kfree(class_dev); |
| 193 | return error; | 190 | return error; |
| 194 | } | 191 | } |
| 195 | return 0; | 192 | return 0; |
| 196 | 193 | ||
| 197 | } | 194 | } |
| 198 | static void __exit firmware_sample_exit(void) | 195 | static void __exit firmware_sample_exit(void) |
| @@ -202,6 +199,6 @@ static void __exit firmware_sample_exit(void) | |||
| 202 | kfree(fw_priv); | 199 | kfree(fw_priv); |
| 203 | kfree(class_dev); | 200 | kfree(class_dev); |
| 204 | } | 201 | } |
| 202 | |||
| 205 | module_init(firmware_sample_init); | 203 | module_init(firmware_sample_init); |
| 206 | module_exit(firmware_sample_exit); | 204 | module_exit(firmware_sample_exit); |
| 207 | |||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 348d8687b7c9..769b69db89c1 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
| @@ -328,19 +328,52 @@ static int do_pnp_entry(const char *filename, | |||
| 328 | return 1; | 328 | return 1; |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | /* looks like: "pnp:cCdD..." */ | 331 | /* looks like: "pnp:dD" for every device of the card */ |
| 332 | static int do_pnp_card_entry(const char *filename, | 332 | static void do_pnp_card_entries(void *symval, unsigned long size, |
| 333 | struct pnp_card_device_id *id, char *alias) | 333 | struct module *mod) |
| 334 | { | 334 | { |
| 335 | int i; | 335 | const unsigned long id_size = sizeof(struct pnp_card_device_id); |
| 336 | const unsigned int count = (size / id_size)-1; | ||
| 337 | const struct pnp_card_device_id *cards = symval; | ||
| 338 | unsigned int i; | ||
| 336 | 339 | ||
| 337 | sprintf(alias, "pnp:c%s", id->id); | 340 | device_id_check(mod->name, "pnp", size, id_size, symval); |
| 338 | for (i = 0; i < PNP_MAX_DEVICES; i++) { | 341 | |
| 339 | if (! *id->devs[i].id) | 342 | for (i = 0; i < count; i++) { |
| 340 | break; | 343 | unsigned int j; |
| 341 | sprintf(alias + strlen(alias), "d%s", id->devs[i].id); | 344 | const struct pnp_card_device_id *card = &cards[i]; |
| 345 | |||
| 346 | for (j = 0; j < PNP_MAX_DEVICES; j++) { | ||
| 347 | const char *id = (char *)card->devs[j].id; | ||
| 348 | int i2, j2; | ||
| 349 | int dup = 0; | ||
| 350 | |||
| 351 | if (!id[0]) | ||
| 352 | break; | ||
| 353 | |||
| 354 | /* find duplicate, already added value */ | ||
| 355 | for (i2 = 0; i2 < i && !dup; i2++) { | ||
| 356 | const struct pnp_card_device_id *card2 = &cards[i2]; | ||
| 357 | |||
| 358 | for (j2 = 0; j2 < PNP_MAX_DEVICES; j2++) { | ||
| 359 | const char *id2 = (char *)card2->devs[j2].id; | ||
| 360 | |||
| 361 | if (!id2[0]) | ||
| 362 | break; | ||
| 363 | |||
| 364 | if (!strcmp(id, id2)) { | ||
| 365 | dup = 1; | ||
| 366 | break; | ||
| 367 | } | ||
| 368 | } | ||
| 369 | } | ||
| 370 | |||
| 371 | /* add an individual alias for every device entry */ | ||
| 372 | if (!dup) | ||
| 373 | buf_printf(&mod->dev_table_buf, | ||
| 374 | "MODULE_ALIAS(\"pnp:d%s*\");\n", id); | ||
| 375 | } | ||
| 342 | } | 376 | } |
| 343 | return 1; | ||
| 344 | } | 377 | } |
| 345 | 378 | ||
| 346 | /* Looks like: pcmcia:mNcNfNfnNpfnNvaNvbNvcNvdN. */ | 379 | /* Looks like: pcmcia:mNcNfNfnNpfnNvaNvbNvcNvdN. */ |
| @@ -634,9 +667,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info, | |||
| 634 | sizeof(struct pnp_device_id), "pnp", | 667 | sizeof(struct pnp_device_id), "pnp", |
| 635 | do_pnp_entry, mod); | 668 | do_pnp_entry, mod); |
| 636 | else if (sym_is(symname, "__mod_pnp_card_device_table")) | 669 | else if (sym_is(symname, "__mod_pnp_card_device_table")) |
| 637 | do_table(symval, sym->st_size, | 670 | do_pnp_card_entries(symval, sym->st_size, mod); |
| 638 | sizeof(struct pnp_card_device_id), "pnp_card", | ||
| 639 | do_pnp_card_entry, mod); | ||
| 640 | else if (sym_is(symname, "__mod_pcmcia_device_table")) | 671 | else if (sym_is(symname, "__mod_pcmcia_device_table")) |
| 641 | do_table(symval, sym->st_size, | 672 | do_table(symval, sym->st_size, |
| 642 | sizeof(struct pcmcia_device_id), "pcmcia", | 673 | sizeof(struct pcmcia_device_id), "pcmcia", |
