All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/7] PCI/DPC: Leave interrupts enabled while handling event
@ 2018-06-20 21:38 Keith Busch
  2018-06-20 21:38 ` [PATCH 2/7] PCI/DPC: Defer event handling to work queue Keith Busch
                   ` (8 more replies)
  0 siblings, 9 replies; 21+ messages in thread
From: Keith Busch @ 2018-06-20 21:38 UTC (permalink / raw)
  To: Linux PCI, Bjorn Helgaas; +Cc: Sinan Kaya, Oza Pawandeep, Keith Busch

Now that the DPC driver clears the interrupt status before exiting the
irq handler, we don't need to abuse the DPC control register to know if
a shared interrupt is for a new DPC event: a DPC port can not trigger
a second interrupt until the host clears the trigger status later in the
work queue handler.

Signed-off-by: Keith Busch <keith.busch@intel.com>
---
 drivers/pci/pcie/dpc.c | 23 +++++------------------
 1 file changed, 5 insertions(+), 18 deletions(-)

diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c
index 921ed979109d..972aac892846 100644
--- a/drivers/pci/pcie/dpc.c
+++ b/drivers/pci/pcie/dpc.c
@@ -77,7 +77,7 @@ static pci_ers_result_t dpc_reset_link(struct pci_dev *pdev)
 	struct dpc_dev *dpc;
 	struct pcie_device *pciedev;
 	struct device *devdpc;
-	u16 cap, ctl;
+	u16 cap;
 
 	/*
 	 * DPC disables the Link automatically in hardware, so it has
@@ -105,10 +105,6 @@ static pci_ers_result_t dpc_reset_link(struct pci_dev *pdev)
 	pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS,
 			      PCI_EXP_DPC_STATUS_TRIGGER);
 
-	pci_read_config_word(pdev, cap + PCI_EXP_DPC_CTL, &ctl);
-	pci_write_config_word(pdev, cap + PCI_EXP_DPC_CTL,
-			      ctl | PCI_EXP_DPC_CTL_INT_EN);
-
 	return PCI_ERS_RESULT_RECOVERED;
 }
 
@@ -183,16 +179,11 @@ static irqreturn_t dpc_irq(int irq, void *context)
 	struct dpc_dev *dpc = (struct dpc_dev *)context;
 	struct pci_dev *pdev = dpc->dev->port;
 	struct device *dev = &dpc->dev->device;
-	u16 cap = dpc->cap_pos, ctl, status, source, reason, ext_reason;
-
-	pci_read_config_word(pdev, cap + PCI_EXP_DPC_CTL, &ctl);
-
-	if (!(ctl & PCI_EXP_DPC_CTL_INT_EN) || ctl == (u16)(~0))
-		return IRQ_NONE;
+	u16 cap = dpc->cap_pos, status, source, reason, ext_reason;
 
 	pci_read_config_word(pdev, cap + PCI_EXP_DPC_STATUS, &status);
 
-	if (!(status & PCI_EXP_DPC_STATUS_INTERRUPT))
+	if (!(status & PCI_EXP_DPC_STATUS_INTERRUPT) || status == (u16)(~0))
 		return IRQ_NONE;
 
 	if (!(status & PCI_EXP_DPC_STATUS_TRIGGER)) {
@@ -201,9 +192,6 @@ static irqreturn_t dpc_irq(int irq, void *context)
 		return IRQ_HANDLED;
 	}
 
-	pci_write_config_word(pdev, cap + PCI_EXP_DPC_CTL,
-			      ctl & ~PCI_EXP_DPC_CTL_INT_EN);
-
 	pci_read_config_word(pdev, cap + PCI_EXP_DPC_SOURCE_ID,
 			     &source);
 
@@ -226,9 +214,8 @@ static irqreturn_t dpc_irq(int irq, void *context)
 
 	pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS,
 			      PCI_EXP_DPC_STATUS_INTERRUPT);
-
-	schedule_work(&dpc->work);
-
+	if (status & PCI_EXP_DPC_STATUS_TRIGGER)
+		schedule_work(&dpc->work);
 	return IRQ_HANDLED;
 }
 
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2018-07-16 22:37 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-20 21:38 [PATCH 1/7] PCI/DPC: Leave interrupts enabled while handling event Keith Busch
2018-06-20 21:38 ` [PATCH 2/7] PCI/DPC: Defer event handling to work queue Keith Busch
2018-06-21  7:27   ` Christoph Hellwig
2018-06-21  7:28     ` Christoph Hellwig
2018-06-21 13:58       ` Keith Busch
2018-06-20 21:38 ` [PATCH 3/7] PCI/DPC: Remove rp_pio_status from dpc struct Keith Busch
2018-06-20 21:38 ` [PATCH 4/7] PCI/AER: API for obtaining AER information Keith Busch
2018-06-20 21:38 ` [PATCH 5/7] PCI/DPC: Print AER status in DPC event handling Keith Busch
2018-06-21  9:16   ` poza
2018-06-21 14:05     ` Keith Busch
2018-06-22  5:25       ` poza
2018-06-22 10:11       ` poza
2018-06-22 14:10         ` Keith Busch
2018-06-20 21:38 ` [PATCH 6/7] PCI/DPC: Use threaded IRQ for bottom half handling Keith Busch
2018-06-21  7:29   ` Christoph Hellwig
2018-06-20 21:38 ` [PATCH 7/7] PCI/DPC: Remove indirection waiting for inactive link Keith Busch
2018-06-20 21:42 ` [PATCH 1/7] PCI/DPC: Leave interrupts enabled while handling event Sinan Kaya
2018-06-20 21:54   ` Keith Busch
2018-06-20 21:59     ` Sinan Kaya
2018-06-22  5:26 ` poza
2018-07-16 22:07 ` Bjorn Helgaas

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.