Эх сурвалжийг харах

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>
Kenji Kaneshige 16 жил өмнө
parent
commit
f7a10e32a1

+ 1 - 0
drivers/pci/hotplug/pciehp.h

@@ -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 */

+ 3 - 2
drivers/pci/hotplug/pciehp_hpc.c

@@ -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) {