From: Rajat Jain <rajatxjain@gmail.com>
To: Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Rajat Jain <rajatjain@juniper.net>,
Guenter Roeck <groeck@juniper.net>,
Alex Williamson <alex.williamson@redhat.com>,
Andrew Murray <amurray@embedded-bits.co.uk>,
Alexander Gordeev <agordeev@redhat.com>
Subject: [PATCH] pci: Allow hotplug service drivers to operate in polling mode
Date: Fri, 14 Mar 2014 09:32:01 -0700 [thread overview]
Message-ID: <53232F01.8040209@gmail.com> (raw)
Today the PCIe port bus driver disables the Hot-plug service if the
port device does not have the capability to generate interrupts.
However, drivers may have a polling method that can be used in this
case. In case of pciehp, user must be able to use the "pciehp_poll_mode"
parameter to use polling method in such a case. Today it is not
possible.
This patch allows a hotplug service driver to decide whether or not
it would like to continue in absense of interrupts. Also, the current
hotplug service driver (pciehp) is changed to check that either IRQs are
supported, or polling mode is to be used.
Signed-off-by: Rajat Jain <rajatxjain@gmail.com>
Signed-off-by: Rajat Jain <rajatjain@juniper.net>
Signed-off-by: Guenter Roeck <groeck@juniper.net>
---
drivers/pci/hotplug/pciehp_hpc.c | 8 ++++++++
drivers/pci/pcie/portdrv_core.c | 5 ++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index 1463412..65fc1ef 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -86,6 +86,14 @@ static inline int pciehp_request_irq(struct controller *ctrl)
init_timer(&ctrl->poll_timer);
start_int_poll_timer(ctrl, 10);
return 0;
+ } else if (irq == -1) {
+ /*
+ * Bail out if there is neither a way to generate
+ * interrupts, nor polling is to be used.
+ */
+ ctrl_err(ctrl,
+ "No way to generate IRQ. Use pciehp_poll_mode\n");
+ return -1;
}
/* Installs the interrupt handler */
diff --git a/drivers/pci/pcie/portdrv_core.c b/drivers/pci/pcie/portdrv_core.c
index 986f8ea..e92cd34 100644
--- a/drivers/pci/pcie/portdrv_core.c
+++ b/drivers/pci/pcie/portdrv_core.c
@@ -379,10 +379,13 @@ int pcie_port_device_register(struct pci_dev *dev)
/*
* Initialize service irqs. Don't use service devices that
* require interrupts if there is no way to generate them.
+ * However, some drivers (e.g. pciehp) may have a polling mode
+ * that can be used in absense of irqs. Allow them to determine
+ * if that is to be used.
*/
status = init_service_irqs(dev, irqs, capabilities);
if (status) {
- capabilities &= PCIE_PORT_SERVICE_VC;
+ capabilities &= PCIE_PORT_SERVICE_VC | PCIE_PORT_SERVICE_HP;
if (!capabilities)
goto error_disable;
}
--
1.7.9.5
reply other threads:[~2014-03-14 16:32 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53232F01.8040209@gmail.com \
--to=rajatxjain@gmail.com \
--cc=agordeev@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=amurray@embedded-bits.co.uk \
--cc=bhelgaas@google.com \
--cc=groeck@juniper.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=rajatjain@juniper.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).