aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/isci/host.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/isci/host.c')
-rw-r--r--drivers/scsi/isci/host.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c
index d8d6f67bd69c..1bc91f2b4f93 100644
--- a/drivers/scsi/isci/host.c
+++ b/drivers/scsi/isci/host.c
@@ -349,9 +349,14 @@ void isci_host_deinit(struct isci_host *ihost)
349 } 349 }
350 350
351 set_bit(IHOST_STOP_PENDING, &ihost->flags); 351 set_bit(IHOST_STOP_PENDING, &ihost->flags);
352
353 spin_lock_irq(&ihost->scic_lock);
352 scic_controller_stop(scic, SCIC_CONTROLLER_STOP_TIMEOUT); 354 scic_controller_stop(scic, SCIC_CONTROLLER_STOP_TIMEOUT);
355 spin_unlock_irq(&ihost->scic_lock);
356
353 wait_for_stop(ihost); 357 wait_for_stop(ihost);
354 scic_controller_reset(scic); 358 scic_controller_reset(scic);
359 isci_timer_list_destroy(ihost);
355} 360}
356 361
357static void __iomem *scu_base(struct isci_host *isci_host) 362static void __iomem *scu_base(struct isci_host *isci_host)
@@ -370,8 +375,6 @@ static void __iomem *smu_base(struct isci_host *isci_host)
370 return pcim_iomap_table(pdev)[SCI_SMU_BAR * 2] + SCI_SMU_BAR_SIZE * id; 375 return pcim_iomap_table(pdev)[SCI_SMU_BAR * 2] + SCI_SMU_BAR_SIZE * id;
371} 376}
372 377
373#define SCI_MAX_TIMER_COUNT 25
374
375int isci_host_init(struct isci_host *isci_host) 378int isci_host_init(struct isci_host *isci_host)
376{ 379{
377 int err = 0; 380 int err = 0;
@@ -382,11 +385,7 @@ int isci_host_init(struct isci_host *isci_host)
382 union scic_oem_parameters scic_oem_params; 385 union scic_oem_parameters scic_oem_params;
383 union scic_user_parameters scic_user_params; 386 union scic_user_parameters scic_user_params;
384 387
385 INIT_LIST_HEAD(&isci_host->timer_list_struct.timers); 388 isci_timer_list_construct(isci_host);
386 isci_timer_list_construct(
387 &isci_host->timer_list_struct,
388 SCI_MAX_TIMER_COUNT
389 );
390 389
391 controller = scic_controller_alloc(&isci_host->pdev->dev); 390 controller = scic_controller_alloc(&isci_host->pdev->dev);
392 391
@@ -473,7 +472,17 @@ int isci_host_init(struct isci_host *isci_host)
473 } 472 }
474 } 473 }
475 474
475 tasklet_init(&isci_host->completion_tasklet,
476 isci_host_completion_routine, (unsigned long)isci_host);
477
478 INIT_LIST_HEAD(&(isci_host->mdl_struct_list));
479
480 INIT_LIST_HEAD(&isci_host->requests_to_complete);
481 INIT_LIST_HEAD(&isci_host->requests_to_abort);
482
483 spin_lock_irq(&isci_host->scic_lock);
476 status = scic_controller_initialize(isci_host->core_controller); 484 status = scic_controller_initialize(isci_host->core_controller);
485 spin_unlock_irq(&isci_host->scic_lock);
477 if (status != SCI_SUCCESS) { 486 if (status != SCI_SUCCESS) {
478 dev_warn(&isci_host->pdev->dev, 487 dev_warn(&isci_host->pdev->dev,
479 "%s: scic_controller_initialize failed -" 488 "%s: scic_controller_initialize failed -"
@@ -482,17 +491,8 @@ int isci_host_init(struct isci_host *isci_host)
482 return -ENODEV; 491 return -ENODEV;
483 } 492 }
484 493
485 tasklet_init(&isci_host->completion_tasklet,
486 isci_host_completion_routine, (unsigned long)isci_host);
487
488 INIT_LIST_HEAD(&(isci_host->mdl_struct_list));
489
490 INIT_LIST_HEAD(&isci_host->requests_to_complete);
491 INIT_LIST_HEAD(&isci_host->requests_to_abort);
492
493 /* populate mdl with dma memory. scu_mdl_allocate_coherent() */ 494 /* populate mdl with dma memory. scu_mdl_allocate_coherent() */
494 err = isci_host_mdl_allocate_coherent(isci_host); 495 err = isci_host_mdl_allocate_coherent(isci_host);
495
496 if (err) 496 if (err)
497 return err; 497 return err;
498 498