diff options
author | Miquel van Smoorenburg <miquels@cistron.nl> | 2008-05-01 19:05:33 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-05-02 14:13:23 -0400 |
commit | c864cb145dc2218cfad9fe53d323b54b48dbab6c (patch) | |
tree | 4f75dabae6c4de4b1d938e2fc6baa4de107e95bf | |
parent | 33139b21013aba815924b421159fab35e5175483 (diff) |
[SCSI] dpt_i2o: use standard __init / __exit code
Update dpt_i2o.c to use the standard __init / __exit
code instead of the legacy '#include "scsi_module.c"' code.
This is needed in preparation of 64-bit support. scsi_module.c
calls scsi_add_host() with the device pointer set to NULL, and that
crashes code like arch/x64/kernel/pci-gart_64.c::need_iommu().
The reboot_notifier code is deleted because it wasn't compiled
in ever anyway, and it would be useless to duplicate it in
the new code.
Signed-off-by: Miquel van Smoorenburg <miquels@cistron.nl>
Acked-by: Mark Salyzyn <Mark_Salyzyn@adaptec.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r-- | drivers/scsi/dpt_i2o.c | 102 | ||||
-rw-r--r-- | drivers/scsi/dpti.h | 6 |
2 files changed, 51 insertions, 57 deletions
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c index c9dd8392aab2..30c741a12a62 100644 --- a/drivers/scsi/dpt_i2o.c +++ b/drivers/scsi/dpt_i2o.c | |||
@@ -121,15 +121,6 @@ static const struct file_operations adpt_fops = { | |||
121 | .release = adpt_close | 121 | .release = adpt_close |
122 | }; | 122 | }; |
123 | 123 | ||
124 | #ifdef REBOOT_NOTIFIER | ||
125 | static struct notifier_block adpt_reboot_notifier = | ||
126 | { | ||
127 | adpt_reboot_event, | ||
128 | NULL, | ||
129 | 0 | ||
130 | }; | ||
131 | #endif | ||
132 | |||
133 | /* Structures and definitions for synchronous message posting. | 124 | /* Structures and definitions for synchronous message posting. |
134 | * See adpt_i2o_post_wait() for description | 125 | * See adpt_i2o_post_wait() for description |
135 | * */ | 126 | * */ |
@@ -178,8 +169,6 @@ static int adpt_detect(struct scsi_host_template* sht) | |||
178 | struct pci_dev *pDev = NULL; | 169 | struct pci_dev *pDev = NULL; |
179 | adpt_hba* pHba; | 170 | adpt_hba* pHba; |
180 | 171 | ||
181 | adpt_init(); | ||
182 | |||
183 | PINFO("Detecting Adaptec I2O RAID controllers...\n"); | 172 | PINFO("Detecting Adaptec I2O RAID controllers...\n"); |
184 | 173 | ||
185 | /* search for all Adatpec I2O RAID cards */ | 174 | /* search for all Adatpec I2O RAID cards */ |
@@ -248,7 +237,7 @@ rebuild_sys_tab: | |||
248 | } | 237 | } |
249 | 238 | ||
250 | for (pHba = hba_chain; pHba; pHba = pHba->next) { | 239 | for (pHba = hba_chain; pHba; pHba = pHba->next) { |
251 | if( adpt_scsi_register(pHba,sht) < 0){ | 240 | if (adpt_scsi_host_alloc(pHba, sht) < 0){ |
252 | adpt_i2o_delete_hba(pHba); | 241 | adpt_i2o_delete_hba(pHba); |
253 | continue; | 242 | continue; |
254 | } | 243 | } |
@@ -861,27 +850,6 @@ static void adpt_i2o_sys_shutdown(void) | |||
861 | printk(KERN_INFO "Adaptec I2O controllers down.\n"); | 850 | printk(KERN_INFO "Adaptec I2O controllers down.\n"); |
862 | } | 851 | } |
863 | 852 | ||
864 | /* | ||
865 | * reboot/shutdown notification. | ||
866 | * | ||
867 | * - Quiesce each IOP in the system | ||
868 | * | ||
869 | */ | ||
870 | |||
871 | #ifdef REBOOT_NOTIFIER | ||
872 | static int adpt_reboot_event(struct notifier_block *n, ulong code, void *p) | ||
873 | { | ||
874 | |||
875 | if(code != SYS_RESTART && code != SYS_HALT && code != SYS_POWER_OFF) | ||
876 | return NOTIFY_DONE; | ||
877 | |||
878 | adpt_i2o_sys_shutdown(); | ||
879 | |||
880 | return NOTIFY_DONE; | ||
881 | } | ||
882 | #endif | ||
883 | |||
884 | |||
885 | static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev) | 853 | static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev) |
886 | { | 854 | { |
887 | 855 | ||
@@ -1080,18 +1048,6 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba) | |||
1080 | } | 1048 | } |
1081 | } | 1049 | } |
1082 | 1050 | ||
1083 | |||
1084 | static int adpt_init(void) | ||
1085 | { | ||
1086 | printk("Loading Adaptec I2O RAID: Version " DPT_I2O_VERSION "\n"); | ||
1087 | #ifdef REBOOT_NOTIFIER | ||
1088 | register_reboot_notifier(&adpt_reboot_notifier); | ||
1089 | #endif | ||
1090 | |||
1091 | return 0; | ||
1092 | } | ||
1093 | |||
1094 | |||
1095 | static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u32 lun) | 1051 | static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u32 lun) |
1096 | { | 1052 | { |
1097 | struct adpt_device* d; | 1053 | struct adpt_device* d; |
@@ -2177,13 +2133,13 @@ static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_d | |||
2177 | } | 2133 | } |
2178 | 2134 | ||
2179 | 2135 | ||
2180 | static s32 adpt_scsi_register(adpt_hba* pHba,struct scsi_host_template * sht) | 2136 | static s32 adpt_scsi_host_alloc(adpt_hba* pHba, struct scsi_host_template *sht) |
2181 | { | 2137 | { |
2182 | struct Scsi_Host *host = NULL; | 2138 | struct Scsi_Host *host; |
2183 | 2139 | ||
2184 | host = scsi_register(sht, sizeof(adpt_hba*)); | 2140 | host = scsi_host_alloc(sht, sizeof(adpt_hba*)); |
2185 | if (host == NULL) { | 2141 | if (host == NULL) { |
2186 | printk ("%s: scsi_register returned NULL\n",pHba->name); | 2142 | printk("%s: scsi_host_alloc returned NULL\n", pHba->name); |
2187 | return -1; | 2143 | return -1; |
2188 | } | 2144 | } |
2189 | host->hostdata[0] = (unsigned long)pHba; | 2145 | host->hostdata[0] = (unsigned long)pHba; |
@@ -3323,11 +3279,10 @@ static static void adpt_delay(int millisec) | |||
3323 | #endif | 3279 | #endif |
3324 | 3280 | ||
3325 | static struct scsi_host_template driver_template = { | 3281 | static struct scsi_host_template driver_template = { |
3282 | .module = THIS_MODULE, | ||
3326 | .name = "dpt_i2o", | 3283 | .name = "dpt_i2o", |
3327 | .proc_name = "dpt_i2o", | 3284 | .proc_name = "dpt_i2o", |
3328 | .proc_info = adpt_proc_info, | 3285 | .proc_info = adpt_proc_info, |
3329 | .detect = adpt_detect, | ||
3330 | .release = adpt_release, | ||
3331 | .info = adpt_info, | 3286 | .info = adpt_info, |
3332 | .queuecommand = adpt_queue, | 3287 | .queuecommand = adpt_queue, |
3333 | .eh_abort_handler = adpt_abort, | 3288 | .eh_abort_handler = adpt_abort, |
@@ -3341,5 +3296,48 @@ static struct scsi_host_template driver_template = { | |||
3341 | .cmd_per_lun = 1, | 3296 | .cmd_per_lun = 1, |
3342 | .use_clustering = ENABLE_CLUSTERING, | 3297 | .use_clustering = ENABLE_CLUSTERING, |
3343 | }; | 3298 | }; |
3344 | #include "scsi_module.c" | 3299 | |
3300 | static int __init adpt_init(void) | ||
3301 | { | ||
3302 | int error; | ||
3303 | adpt_hba *pHba, *next; | ||
3304 | |||
3305 | printk("Loading Adaptec I2O RAID: Version " DPT_I2O_VERSION "\n"); | ||
3306 | |||
3307 | error = adpt_detect(&driver_template); | ||
3308 | if (error < 0) | ||
3309 | return error; | ||
3310 | if (hba_chain == NULL) | ||
3311 | return -ENODEV; | ||
3312 | |||
3313 | for (pHba = hba_chain; pHba; pHba = pHba->next) { | ||
3314 | error = scsi_add_host(pHba->host, &pHba->pDev->dev); | ||
3315 | if (error) | ||
3316 | goto fail; | ||
3317 | scsi_scan_host(pHba->host); | ||
3318 | } | ||
3319 | return 0; | ||
3320 | fail: | ||
3321 | for (pHba = hba_chain; pHba; pHba = next) { | ||
3322 | next = pHba->next; | ||
3323 | scsi_remove_host(pHba->host); | ||
3324 | } | ||
3325 | return error; | ||
3326 | } | ||
3327 | |||
3328 | static void __exit adpt_exit(void) | ||
3329 | { | ||
3330 | adpt_hba *pHba, *next; | ||
3331 | |||
3332 | for (pHba = hba_chain; pHba; pHba = pHba->next) | ||
3333 | scsi_remove_host(pHba->host); | ||
3334 | for (pHba = hba_chain; pHba; pHba = next) { | ||
3335 | next = pHba->next; | ||
3336 | adpt_release(pHba->host); | ||
3337 | } | ||
3338 | } | ||
3339 | |||
3340 | module_init(adpt_init); | ||
3341 | module_exit(adpt_exit); | ||
3342 | |||
3345 | MODULE_LICENSE("GPL"); | 3343 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/scsi/dpti.h b/drivers/scsi/dpti.h index fd79068c5869..acc692915b4c 100644 --- a/drivers/scsi/dpti.h +++ b/drivers/scsi/dpti.h | |||
@@ -84,7 +84,6 @@ static int adpt_device_reset(struct scsi_cmnd* cmd); | |||
84 | #define PCI_DPT_DEVICE_ID (0xA501) // DPT PCI I2O Device ID | 84 | #define PCI_DPT_DEVICE_ID (0xA501) // DPT PCI I2O Device ID |
85 | #define PCI_DPT_RAPTOR_DEVICE_ID (0xA511) | 85 | #define PCI_DPT_RAPTOR_DEVICE_ID (0xA511) |
86 | 86 | ||
87 | //#define REBOOT_NOTIFIER 1 | ||
88 | /* Debugging macro from Linux Device Drivers - Rubini */ | 87 | /* Debugging macro from Linux Device Drivers - Rubini */ |
89 | #undef PDEBUG | 88 | #undef PDEBUG |
90 | #ifdef DEBUG | 89 | #ifdef DEBUG |
@@ -264,9 +263,6 @@ static void adpt_i2o_sys_shutdown(void); | |||
264 | static int adpt_init(void); | 263 | static int adpt_init(void); |
265 | static int adpt_i2o_build_sys_table(void); | 264 | static int adpt_i2o_build_sys_table(void); |
266 | static irqreturn_t adpt_isr(int irq, void *dev_id); | 265 | static irqreturn_t adpt_isr(int irq, void *dev_id); |
267 | #ifdef REBOOT_NOTIFIER | ||
268 | static int adpt_reboot_event(struct notifier_block *n, ulong code, void *p); | ||
269 | #endif | ||
270 | 266 | ||
271 | static void adpt_i2o_report_hba_unit(adpt_hba* pHba, struct i2o_device *d); | 267 | static void adpt_i2o_report_hba_unit(adpt_hba* pHba, struct i2o_device *d); |
272 | static int adpt_i2o_query_scalar(adpt_hba* pHba, int tid, | 268 | static int adpt_i2o_query_scalar(adpt_hba* pHba, int tid, |
@@ -289,7 +285,7 @@ static s32 adpt_i2o_init_outbound_q(adpt_hba* pHba); | |||
289 | static s32 adpt_i2o_hrt_get(adpt_hba* pHba); | 285 | static s32 adpt_i2o_hrt_get(adpt_hba* pHba); |
290 | static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_device* dptdevice); | 286 | static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_device* dptdevice); |
291 | static s32 adpt_i2o_to_scsi(void __iomem *reply, struct scsi_cmnd* cmd); | 287 | static s32 adpt_i2o_to_scsi(void __iomem *reply, struct scsi_cmnd* cmd); |
292 | static s32 adpt_scsi_register(adpt_hba* pHba,struct scsi_host_template * sht); | 288 | static s32 adpt_scsi_host_alloc(adpt_hba* pHba,struct scsi_host_template * sht); |
293 | static s32 adpt_hba_reset(adpt_hba* pHba); | 289 | static s32 adpt_hba_reset(adpt_hba* pHba); |
294 | static s32 adpt_i2o_reset_hba(adpt_hba* pHba); | 290 | static s32 adpt_i2o_reset_hba(adpt_hba* pHba); |
295 | static s32 adpt_rescan(adpt_hba* pHba); | 291 | static s32 adpt_rescan(adpt_hba* pHba); |