public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
* RE: [patch 2/2] acpi: add ability to derive irq when doing a surpriseremoval of an adapter
@ 2005-10-08  0:56 Li, Shaohua
  2005-10-10 17:48 ` Kristen Accardi
  2005-10-11 17:54 ` Kristen Accardi
  0 siblings, 2 replies; 10+ messages in thread
From: Li, Shaohua @ 2005-10-08  0:56 UTC (permalink / raw)
  To: Accardi, Kristen C, pcihpd-discuss, linux-kernel, acpi-devel
  Cc: Shah, Rajesh, greg, Brown, Len

Hi,
>
>If an adapter is surprise removed, the interrupt pin must be guessed,
as
>any attempts to read it would obviously be invalid.  cycle through all
>possible interrupt pin values until we can either lookup or derive the
>right irq to disable.
>
>Signed-off-by: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
>
>diff -uprN -X linux-2.6.14-rc2/Documentation/dontdiff linux-2.6.14-
>rc2/drivers/acpi/pci_irq.c linux-2.6.14-rc2-kca1/drivers/acpi/pci_irq.c
>--- linux-2.6.14-rc2/drivers/acpi/pci_irq.c	2005-09-27
>09:01:28.000000000 -0700
>+++ linux-2.6.14-rc2-kca1/drivers/acpi/pci_irq.c	2005-09-28
>10:40:57.000000000 -0700
>@@ -491,6 +491,79 @@ void __attribute__ ((weak)) acpi_unregis
> {
> }
>
>+
>+
>+/*
>+ * This function will be called only in the case of
>+ * a "surprise" hot plug removal.  For surprise removals,
>+ * the card has either already be yanked out of the slot, or
>+ * the slot's been powered off, so we have to brute force
>+ * our way through all the possible interrupt pins to derive
>+ * the GSI, then we double check with the value stored in the
>+ * pci_dev structure to make sure we have the GSI that belongs
>+ * to this IRQ.
>+ */
>+void acpi_pci_irq_disable_nodev(struct pci_dev *dev)
>+{
>+	int gsi = 0;
>+	u8  pin = 0;
>+	int edge_level = ACPI_LEVEL_SENSITIVE;
>+	int active_high_low = ACPI_ACTIVE_LOW;
>+	int irq;
>+
>+	/*
>+	 * since our device is not present, we
>+	 * can't just read the interrupt pin
>+	 * and use the value to derive the irq.
>+	 * in this case, we are going to check
>+	 * each returned irq value to make
>+	 * sure it matches our already assigned
>+	 * irq before we use it.
>+	 */
>+	for (pin = 0; pin < 4; pin++) {
>+		/*
>+	 	 * First we check the PCI IRQ routing table (PRT) for an
IRQ.
>+	 	 */
>+		gsi = acpi_pci_irq_lookup(dev->bus,
PCI_SLOT(dev->devfn), pin,
>+				  &edge_level, &active_high_low, NULL,
>+				  acpi_pci_free_irq);
acpi_pci_free_irq has side effect. In the link device case, it
deferences a count. The blind guess will mass the reference count. Could
you introduce something like 'acpi_pci_find_irq'?

Thanks,
Shaohua 

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

end of thread, other threads:[~2005-10-22  3:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-08  0:56 [patch 2/2] acpi: add ability to derive irq when doing a surpriseremoval of an adapter Li, Shaohua
2005-10-10 17:48 ` Kristen Accardi
2005-10-11 17:54 ` Kristen Accardi
2005-10-18 23:57   ` [Pcihpd-discuss] " Kristen Accardi
2005-10-19 15:29     ` [ACPI] " Bjorn Helgaas
2005-10-19 16:51       ` Kristen Accardi
2005-10-19 16:59         ` Greg KH
2005-10-21 21:28           ` Kristen Accardi
2005-10-22  3:14             ` Bjorn Helgaas
2005-10-19 17:06         ` Matthew Wilcox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox