Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 28278
b: refs/heads/master
c: 9c64f97
h: refs/heads/master
v: v3
  • Loading branch information
Jan Beulich authored and Greg Kroah-Hartman committed Jun 19, 2006
1 parent 11af165 commit 1c1e973
Show file tree
Hide file tree
Showing 2 changed files with 21 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: 9df7fde52c33075b9f9148ee31215c03824fcc38
refs/heads/master: 9c64f9774805ba5d5ad4129899bdd822f61874e9
25 changes: 20 additions & 5 deletions trunk/drivers/pci/hotplug/pciehp_hpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1471,7 +1471,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
if (rc) {
err("%s : hp_register_read_word SLOT_CTRL failed\n", __FUNCTION__);
goto abort_free_ctlr;
goto abort_free_irq;
}

intr_enable = intr_enable | PRSN_DETECT_ENABLE;
Expand All @@ -1497,19 +1497,19 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
if (rc) {
err("%s : hp_register_write_word SLOT_CTRL failed\n", __FUNCTION__);
goto abort_free_ctlr;
goto abort_free_irq;
}
rc = hp_register_read_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), slot_status);
if (rc) {
err("%s : hp_register_read_word SLOT_STATUS failed\n", __FUNCTION__);
goto abort_free_ctlr;
goto abort_disable_intr;
}

temp_word = 0x1F; /* Clear all events */
rc = hp_register_write_word(php_ctlr->pci_dev, SLOT_STATUS(ctrl->cap_base), temp_word);
if (rc) {
err("%s : hp_register_write_word SLOT_STATUS failed\n", __FUNCTION__);
goto abort_free_ctlr;
goto abort_disable_intr;
}

if (pciehp_force) {
Expand All @@ -1518,7 +1518,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
} else {
rc = pciehp_get_hp_hw_control_from_firmware(ctrl->pci_dev);
if (rc)
goto abort_free_ctlr;
goto abort_disable_intr;
}

/* Add this HPC instance into the HPC list */
Expand All @@ -1545,6 +1545,21 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
return 0;

/* We end up here for the many possible ways to fail this API. */
abort_disable_intr:
rc = hp_register_read_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
if (!rc) {
temp_word &= ~(intr_enable | HP_INTR_ENABLE);
rc = hp_register_write_word(pdev, SLOT_CTRL(ctrl->cap_base), temp_word);
}
if (rc)
err("%s : disabling interrupts failed\n", __FUNCTION__);

abort_free_irq:
if (pciehp_poll_mode)
del_timer_sync(&php_ctlr->int_poll_timer);
else
free_irq(php_ctlr->irq, ctrl);

abort_free_ctlr:
pcie_cap_base = saved_cap_base;
kfree(php_ctlr);
Expand Down

0 comments on commit 1c1e973

Please sign in to comment.