Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 142108
b: refs/heads/master
c: 99946f8
h: refs/heads/master
v: v3
  • Loading branch information
Ed Lin authored and James Bottomley committed Apr 3, 2009
1 parent 3a4b22d commit 6581abb
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 6 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: f14981616205eedb6fe8b24a09ec103ed976e122
refs/heads/master: 99946f8141f65a8bd5034ac5b1a53237aec8743e
48 changes: 43 additions & 5 deletions trunk/drivers/scsi/stex.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,11 +292,15 @@ struct st_hba {
struct st_ccb *wait_ccb;

unsigned int mu_status;
int out_req_cnt;

unsigned int cardtype;
int msi_enabled;
int out_req_cnt;
};

static int msi;
module_param(msi, int, 0);
MODULE_PARM_DESC(msi, "Enable Message Signaled Interrupts(0=off, 1=on)");

static const char console_inq_page[] =
{
0x03,0x00,0x03,0x03,0xFA,0x00,0x00,0x30,
Expand Down Expand Up @@ -1041,6 +1045,40 @@ static int stex_set_dma_mask(struct pci_dev * pdev)
return ret;
}

static int stex_request_irq(struct st_hba *hba)
{
struct pci_dev *pdev = hba->pdev;
int status;

if (msi) {
status = pci_enable_msi(pdev);
if (status != 0)
printk(KERN_ERR DRV_NAME
"(%s): error %d setting up MSI\n",
pci_name(pdev), status);
else
hba->msi_enabled = 1;
} else
hba->msi_enabled = 0;

status = request_irq(pdev->irq, stex_intr, IRQF_SHARED, DRV_NAME, hba);

if (status != 0) {
if (hba->msi_enabled)
pci_disable_msi(pdev);
}
return status;
}

static void stex_free_irq(struct st_hba *hba)
{
struct pci_dev *pdev = hba->pdev;

free_irq(pdev->irq, hba);
if (hba->msi_enabled)
pci_disable_msi(pdev);
}

static int __devinit
stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{
Expand Down Expand Up @@ -1125,7 +1163,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
hba->host = host;
hba->pdev = pdev;

err = request_irq(pdev->irq, stex_intr, IRQF_SHARED, DRV_NAME, hba);
err = stex_request_irq(hba);
if (err) {
printk(KERN_ERR DRV_NAME "(%s): request irq failed\n",
pci_name(pdev));
Expand Down Expand Up @@ -1157,7 +1195,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
return 0;

out_free_irq:
free_irq(pdev->irq, hba);
stex_free_irq(hba);
out_pci_free:
dma_free_coherent(&pdev->dev, hba->dma_size,
hba->dma_mem, hba->dma_handle);
Expand Down Expand Up @@ -1216,7 +1254,7 @@ static void stex_hba_stop(struct st_hba *hba)

static void stex_hba_free(struct st_hba *hba)
{
free_irq(hba->pdev->irq, hba);
stex_free_irq(hba);

iounmap(hba->mmio_base);

Expand Down

0 comments on commit 6581abb

Please sign in to comment.