PCI: pciehp: fix irq initialization
Current pciehp driver gets irq number from pci_dev->irq. But because pciehp driver is a pci express port service driver, it should get irq number from pcie_device->irq. Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
committed by
Jesse Barnes
parent
c01156061b
commit
f7a10e32a1
@@ -87,6 +87,7 @@ struct controller {
|
|||||||
int num_slots; /* Number of slots on ctlr */
|
int num_slots; /* Number of slots on ctlr */
|
||||||
int slot_num_inc; /* 1 or -1 */
|
int slot_num_inc; /* 1 or -1 */
|
||||||
struct pci_dev *pci_dev;
|
struct pci_dev *pci_dev;
|
||||||
|
struct pcie_device *pcie; /* PCI Express port service */
|
||||||
struct list_head slot_list;
|
struct list_head slot_list;
|
||||||
struct hpc_ops *hpc_ops;
|
struct hpc_ops *hpc_ops;
|
||||||
wait_queue_head_t queue; /* sleep & wake process */
|
wait_queue_head_t queue; /* sleep & wake process */
|
||||||
|
@@ -223,7 +223,7 @@ static void start_int_poll_timer(struct controller *ctrl, int sec)
|
|||||||
|
|
||||||
static inline int pciehp_request_irq(struct controller *ctrl)
|
static inline int pciehp_request_irq(struct controller *ctrl)
|
||||||
{
|
{
|
||||||
int retval, irq = ctrl->pci_dev->irq;
|
int retval, irq = ctrl->pcie->irq;
|
||||||
|
|
||||||
/* Install interrupt polling timer. Start with 10 sec delay */
|
/* Install interrupt polling timer. Start with 10 sec delay */
|
||||||
if (pciehp_poll_mode) {
|
if (pciehp_poll_mode) {
|
||||||
@@ -244,7 +244,7 @@ static inline void pciehp_free_irq(struct controller *ctrl)
|
|||||||
if (pciehp_poll_mode)
|
if (pciehp_poll_mode)
|
||||||
del_timer_sync(&ctrl->poll_timer);
|
del_timer_sync(&ctrl->poll_timer);
|
||||||
else
|
else
|
||||||
free_irq(ctrl->pci_dev->irq, ctrl);
|
free_irq(ctrl->pcie->irq, ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pcie_poll_cmd(struct controller *ctrl)
|
static int pcie_poll_cmd(struct controller *ctrl)
|
||||||
@@ -1114,6 +1114,7 @@ struct controller *pcie_init(struct pcie_device *dev)
|
|||||||
}
|
}
|
||||||
INIT_LIST_HEAD(&ctrl->slot_list);
|
INIT_LIST_HEAD(&ctrl->slot_list);
|
||||||
|
|
||||||
|
ctrl->pcie = dev;
|
||||||
ctrl->pci_dev = pdev;
|
ctrl->pci_dev = pdev;
|
||||||
ctrl->cap_base = pci_find_capability(pdev, PCI_CAP_ID_EXP);
|
ctrl->cap_base = pci_find_capability(pdev, PCI_CAP_ID_EXP);
|
||||||
if (!ctrl->cap_base) {
|
if (!ctrl->cap_base) {
|
||||||
|
Reference in New Issue
Block a user