Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 254353
b: refs/heads/master
c: b329aff
h: refs/heads/master
i:
  254351: 0f2eba0
v: v3
  • Loading branch information
Dan Williams committed Jul 3, 2011
1 parent d55b85c commit 21d2d04
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 52bed8eab5d392183b77426b96551011f3521ef8
refs/heads/master: b329aff107543c3c4db26c1572405034c3baf906
3 changes: 2 additions & 1 deletion trunk/drivers/scsi/isci/host.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,9 @@ irqreturn_t isci_intx_isr(int vec, void *data)
struct pci_dev *pdev = data;
struct isci_host *ihost;
irqreturn_t ret = IRQ_NONE;
int i;

for_each_isci_host(ihost, pdev) {
for_each_isci_host(i, ihost, pdev) {
struct scic_sds_controller *scic = ihost->core_controller;

if (scic_sds_controller_isr(scic)) {
Expand Down
10 changes: 5 additions & 5 deletions trunk/drivers/scsi/isci/host.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ struct isci_host {
struct list_head requests_to_complete;
struct list_head requests_to_abort;
spinlock_t scic_lock;
struct isci_host *next;
};


Expand All @@ -131,17 +130,18 @@ struct isci_host {
struct isci_pci_info {
struct msix_entry msix_entries[SCI_MAX_MSIX_INT];
int core_lib_array_index;
struct isci_host *hosts;
struct isci_host *hosts[SCI_MAX_CONTROLLERS];
};

static inline struct isci_pci_info *to_pci_info(struct pci_dev *pdev)
{
return pci_get_drvdata(pdev);
}

#define for_each_isci_host(isci_host, pdev) \
for (isci_host = to_pci_info(pdev)->hosts;\
isci_host; isci_host = isci_host->next)
#define for_each_isci_host(id, ihost, pdev) \
for (id = 0, ihost = to_pci_info(pdev)->hosts[id]; \
id < ARRAY_SIZE(to_pci_info(pdev)->hosts) && ihost; \
ihost = to_pci_info(pdev)->hosts[++id])

static inline
enum isci_status isci_host_get_state(
Expand Down
25 changes: 7 additions & 18 deletions trunk/drivers/scsi/isci/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,16 +285,6 @@ static int __devinit isci_pci_init(struct pci_dev *pdev)
return 0;
}

static struct isci_host *isci_host_by_id(struct pci_dev *pdev, int id)
{
struct isci_host *h;

for_each_isci_host(h, pdev)
if (h->id == id)
return h;
return NULL;
}

static int num_controllers(struct pci_dev *pdev)
{
/* bar size alone can tell us if we are running with a dual controller
Expand Down Expand Up @@ -332,7 +322,7 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
for (i = 0; i < num_msix; i++) {
int id = i / SCI_NUM_MSI_X_INT;
struct msix_entry *msix = &pci_info->msix_entries[i];
struct isci_host *isci_host = isci_host_by_id(pdev, id);
struct isci_host *isci_host = pci_info->hosts[id];
irq_handler_t isr;

/* odd numbered vectors are error interrupts */
Expand All @@ -351,7 +341,7 @@ static int isci_setup_interrupts(struct pci_dev *pdev)
dev_info(&pdev->dev, "msix setup failed falling back to intx\n");
while (i--) {
id = i / SCI_NUM_MSI_X_INT;
isci_host = isci_host_by_id(pdev, id);
isci_host = pci_info->hosts[id];
msix = &pci_info->msix_entries[i];
devm_free_irq(&pdev->dev, msix->vector, isci_host);
}
Expand Down Expand Up @@ -634,31 +624,30 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic
err = -ENOMEM;
goto err_host_alloc;
}

h->next = pci_info->hosts;
pci_info->hosts = h;
pci_info->hosts[i] = h;
}

err = isci_setup_interrupts(pdev);
if (err)
goto err_host_alloc;

for_each_isci_host(isci_host, pdev)
for_each_isci_host(i, isci_host, pdev)
scsi_scan_host(isci_host->shost);

return 0;

err_host_alloc:
for_each_isci_host(isci_host, pdev)
for_each_isci_host(i, isci_host, pdev)
isci_unregister_sas_ha(isci_host);
return err;
}

static void __devexit isci_pci_remove(struct pci_dev *pdev)
{
struct isci_host *isci_host;
int i;

for_each_isci_host(isci_host, pdev) {
for_each_isci_host(i, isci_host, pdev) {
isci_unregister_sas_ha(isci_host);
isci_host_deinit(isci_host);
scic_controller_disable_interrupts(isci_host->core_controller);
Expand Down

0 comments on commit 21d2d04

Please sign in to comment.