Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1481974

[PATCH v2 4/8] PCI: pciehp: Don't re-read Slot Status when queuing hotplug event

From Bjorn Helgaas <bhelgaas@google.com>
Newsgroups linux.kernel
Subject [PATCH v2 4/8] PCI: pciehp: Don't re-read Slot Status when queuing hotplug event
Date 2016-09-12 23:10 +0200
Message-ID <sgGEh-uI-11@gated-at.bofh.it> (permalink)
References <sgGEh-uI-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Mayurkumar Patel <mayurkumar.patel@intel.com>

Previously we read Slot Status to learn about hotplug events, then cleared
the events, then re-read Slot Status to find out what happened.  But Slot
Status might have changed before the second read.

Capture the Slot Status once before clearing the events.  Also capture the
Link Status if we had a link status change.

[bhelgaas: changelog, split to separate patch]
Signed-off-by: Mayurkumar Patel <mayurkumar.patel@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
---
 drivers/pci/hotplug/pciehp_hpc.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index 625fa6a..fe99b45 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -566,6 +566,10 @@ static irqreturn_t pciehp_isr(int irq, void *dev_id)
 	if (!events)
 		return IRQ_NONE;
 
+	/* Capture link status before clearing interrupts */
+	if (events & PCI_EXP_SLTSTA_DLLSC)
+		link = pciehp_check_link_active(ctrl);
+
 	pcie_capability_write_word(pdev, PCI_EXP_SLTSTA, events);
 	ctrl_dbg(ctrl, "pending interrupts %#06x from Slot Status\n", events);
 
@@ -598,7 +602,7 @@ static irqreturn_t pciehp_isr(int irq, void *dev_id)
 
 	/* Check Presence Detect Changed */
 	if (events & PCI_EXP_SLTSTA_PDC) {
-		pciehp_get_adapter_status(slot, &present);
+		present = !!(status & PCI_EXP_SLTSTA_PDS);
 		ctrl_info(ctrl, "Card %spresent on Slot(%s)\n",
 			  present ? "" : "not ", slot_name(slot));
 		pciehp_queue_interrupt_event(slot, present ? INT_PRESENCE_ON :
@@ -613,7 +617,6 @@ static irqreturn_t pciehp_isr(int irq, void *dev_id)
 	}
 
 	if (events & PCI_EXP_SLTSTA_DLLSC) {
-		link = pciehp_check_link_active(ctrl);
 		ctrl_info(ctrl, "slot(%s): Link %s event\n",
 			  slot_name(slot), link ? "Up" : "Down");
 		pciehp_queue_interrupt_event(slot, link ? INT_LINK_UP :

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v2 0/8] PCI: pciehp: Rework hotplug interrupt routine Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:10 +0200
  [PATCH v2 1/8] PCI: pciehp: Rename pcie_isr() locals for clarity Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:10 +0200
    RE: [PATCH v2 1/8] PCI: pciehp: Rename pcie_isr() locals for clarity "Patel, Mayurkumar" <mayurkumar.patel@intel.com> - 2016-09-13 12:10 +0200
      Re: [PATCH v2 1/8] PCI: pciehp: Rename pcie_isr() locals for clarity Bjorn Helgaas <helgaas@kernel.org> - 2016-09-13 16:00 +0200
        RE: [PATCH v2 1/8] PCI: pciehp: Rename pcie_isr() locals for clarity "Patel, Mayurkumar" <mayurkumar.patel@intel.com> - 2016-09-13 18:10 +0200
  [PATCH v2 4/8] PCI: pciehp: Don't re-read Slot Status when queuing  hotplug event Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:10 +0200
  [PATCH v2 2/8] PCI: pciehp: Return IRQ_NONE when we can't read  interrupt status Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:10 +0200
  [PATCH v2 3/8] PCI: pciehp: Process all hotplug events before  looking for new ones Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:10 +0200
  [PATCH v2 5/8] PCI: pciehp: Don't re-read Slot Status when handling  surprise event Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:10 +0200
  [PATCH v2 8/8] PCI: pciehp: Remove useless  pciehp_get_latch_status() calls Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:20 +0200
  [PATCH v2 6/8] PCI: pciehp: Remove unnecessary guard Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:20 +0200
  [PATCH v2 7/8] PCI: pciehp: Clean up dmesg "Slot(%s)" messages Bjorn Helgaas <bhelgaas@google.com> - 2016-09-12 23:20 +0200
  Re: [PATCH v2 0/8] PCI: pciehp: Rework hotplug interrupt routine Lukas Wunner <lukas@wunner.de> - 2016-09-13 18:30 +0200
    Re: [PATCH v2 0/8] PCI: pciehp: Rework hotplug interrupt routine Bjorn Helgaas <helgaas@kernel.org> - 2016-09-13 20:30 +0200
  Re: [PATCH v2 0/8] PCI: pciehp: Rework hotplug interrupt routine Mika Westerberg <mika.westerberg@linux.intel.com> - 2016-09-14 10:50 +0200
    Re: [PATCH v2 0/8] PCI: pciehp: Rework hotplug interrupt routine Bjorn Helgaas <helgaas@kernel.org> - 2016-09-14 21:30 +0200
  Re: [PATCH v2 0/8] PCI: pciehp: Rework hotplug interrupt routine Bjorn Helgaas <helgaas@kernel.org> - 2016-09-14 23:30 +0200

csiph-web