* [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly
@ 2005-07-28 7:48 Kenji Kaneshige
2005-07-28 7:51 ` [PATCH 2.6.13-rc3 1/6] failure of acpi_register_gsi() should be handled properly - change acpi_register_gsi() interface Kenji Kaneshige
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:48 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
Hi,
Current acpi_register_gsi() function has no way to indicate errors to
its callers even though acpi_register_gsi() can fail to register gsi
because of some reasons (out of memory, lack of interrupt vectors,
incorrect BIOS, and so on). As a result, caller of acpi_register_gsi()
cannot handle the case that acpi_register_gsi() fails. I think failure
of acpi_register_gsi() should be handled properly.
This series of patches changes acpi_register_gsi() to return negative
value on error, and also changes callers of acpi_register_gsi() to
handle failure of acpi_register_gsi().
Thanks,
Kenji Kaneshige
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2.6.13-rc3 1/6] failure of acpi_register_gsi() should be handled properly - change acpi_register_gsi() interface
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
@ 2005-07-28 7:51 ` Kenji Kaneshige
2005-07-28 7:52 ` [PATCH 2.6.13-rc3 2/6] failure of acpi_register_gsi() should be handled properly - change acpi pci code Kenji Kaneshige
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:51 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
This patch changes the type of return value of acpi_register_gsi()
from "unsigned int" to "int" to indicate an error. If
acpi_register_gsi() fails to register gsi, it returns negative value.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
linux-2.6.13-rc3-kanesige/arch/i386/kernel/acpi/boot.c | 6 +++++-
linux-2.6.13-rc3-kanesige/arch/ia64/kernel/acpi.c | 6 +++++-
linux-2.6.13-rc3-kanesige/include/linux/acpi.h | 2 +-
3 files changed, 11 insertions(+), 3 deletions(-)
diff -puN arch/i386/kernel/acpi/boot.c~handle-error-acpi_register_gsi arch/i386/kernel/acpi/boot.c
--- linux-2.6.13-rc3/arch/i386/kernel/acpi/boot.c~handle-error-acpi_register_gsi 2005-07-28 01:01:14.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/arch/i386/kernel/acpi/boot.c 2005-07-28 01:01:14.000000000 +0900
@@ -484,7 +484,11 @@ int acpi_gsi_to_irq(u32 gsi, unsigned in
return 0;
}
-unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
+/*
+ * success: return IRQ number (>=0)
+ * failure: return < 0
+ */
+int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low)
{
unsigned int irq;
unsigned int plat_gsi = gsi;
diff -puN arch/ia64/kernel/acpi.c~handle-error-acpi_register_gsi arch/ia64/kernel/acpi.c
--- linux-2.6.13-rc3/arch/ia64/kernel/acpi.c~handle-error-acpi_register_gsi 2005-07-28 01:01:14.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/arch/ia64/kernel/acpi.c 2005-07-28 01:01:14.000000000 +0900
@@ -563,7 +563,11 @@ acpi_numa_arch_fixup (void)
}
#endif /* CONFIG_ACPI_NUMA */
-unsigned int
+/*
+ * success: return IRQ number (>=0)
+ * failure: return < 0
+ */
+int
acpi_register_gsi (u32 gsi, int edge_level, int active_high_low)
{
if (has_8259 && gsi < 16)
diff -puN include/linux/acpi.h~handle-error-acpi_register_gsi include/linux/acpi.h
--- linux-2.6.13-rc3/include/linux/acpi.h~handle-error-acpi_register_gsi 2005-07-28 01:01:14.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/include/linux/acpi.h 2005-07-28 01:01:14.000000000 +0900
@@ -445,7 +445,7 @@ static inline int acpi_boot_table_init(v
#endif /*!CONFIG_ACPI_BOOT*/
-unsigned int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low);
+int acpi_register_gsi (u32 gsi, int edge_level, int active_high_low);
int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
/*
_
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2.6.13-rc3 2/6] failure of acpi_register_gsi() should be handled properly - change acpi pci code
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
2005-07-28 7:51 ` [PATCH 2.6.13-rc3 1/6] failure of acpi_register_gsi() should be handled properly - change acpi_register_gsi() interface Kenji Kaneshige
@ 2005-07-28 7:52 ` Kenji Kaneshige
2005-07-28 7:53 ` [PATCH 2.6.13-rc3 3/6] failure of acpi_register_gsi() should be handled properly - change hpet driver Kenji Kaneshige
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:52 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
This patch adds the error check of acpi_register_gsi() into
acpi_pci_enable_irq().
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
linux-2.6.13-rc3-kanesige/drivers/acpi/pci_irq.c | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletion(-)
diff -puN drivers/acpi/pci_irq.c~handle-error-acpi_register_gsi-acpi_pci_enable_irq drivers/acpi/pci_irq.c
--- linux-2.6.13-rc3/drivers/acpi/pci_irq.c~handle-error-acpi_register_gsi-acpi_pci_enable_irq 2005-07-28 01:01:15.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/drivers/acpi/pci_irq.c 2005-07-28 01:01:15.000000000 +0900
@@ -392,6 +392,7 @@ acpi_pci_irq_enable (
int edge_level = ACPI_LEVEL_SENSITIVE;
int active_high_low = ACPI_ACTIVE_LOW;
char *link = NULL;
+ int rc;
ACPI_FUNCTION_TRACE("acpi_pci_irq_enable");
@@ -444,7 +445,13 @@ acpi_pci_irq_enable (
}
}
- dev->irq = acpi_register_gsi(irq, edge_level, active_high_low);
+ rc = acpi_register_gsi(irq, edge_level, active_high_low);
+ if (rc < 0) {
+ printk(KERN_WARNING PREFIX "PCI Interrupt %s[%c]: failed "
+ "to register GSI\n", pci_name(dev), ('A' + pin));
+ return_VALUE(rc);
+ }
+ dev->irq = rc;
printk(KERN_INFO PREFIX "PCI Interrupt %s[%c] -> ",
pci_name(dev), 'A' + pin);
_
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2.6.13-rc3 3/6] failure of acpi_register_gsi() should be handled properly - change hpet driver
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
2005-07-28 7:51 ` [PATCH 2.6.13-rc3 1/6] failure of acpi_register_gsi() should be handled properly - change acpi_register_gsi() interface Kenji Kaneshige
2005-07-28 7:52 ` [PATCH 2.6.13-rc3 2/6] failure of acpi_register_gsi() should be handled properly - change acpi pci code Kenji Kaneshige
@ 2005-07-28 7:53 ` Kenji Kaneshige
2005-07-28 7:54 ` [PATCH 2.6.13-rc3 4/6] failure of acpi_register_gsi() should be handled properly - change phpacpi driver Kenji Kaneshige
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:53 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
This patch adds the error check of acpi_register_gsi() into hpet
driver.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
linux-2.6.13-rc3-kanesige/drivers/char/hpet.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff -puN drivers/char/hpet.c~handle-error-acpi_register_gsi-hpet drivers/char/hpet.c
--- linux-2.6.13-rc3/drivers/char/hpet.c~handle-error-acpi_register_gsi-hpet 2005-07-28 01:01:16.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/drivers/char/hpet.c 2005-07-28 01:01:16.000000000 +0900
@@ -906,11 +906,15 @@ static acpi_status hpet_resources(struct
if (irqp->number_of_interrupts > 0) {
hdp->hd_nirqs = irqp->number_of_interrupts;
- for (i = 0; i < hdp->hd_nirqs; i++)
- hdp->hd_irq[i] =
+ for (i = 0; i < hdp->hd_nirqs; i++) {
+ int rc =
acpi_register_gsi(irqp->interrupts[i],
irqp->edge_level,
irqp->active_high_low);
+ if (rc < 0)
+ return AE_ERROR;
+ hdp->hd_irq[i] = rc;
+ }
}
}
_
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2.6.13-rc3 4/6] failure of acpi_register_gsi() should be handled properly - change phpacpi driver
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
` (2 preceding siblings ...)
2005-07-28 7:53 ` [PATCH 2.6.13-rc3 3/6] failure of acpi_register_gsi() should be handled properly - change hpet driver Kenji Kaneshige
@ 2005-07-28 7:54 ` Kenji Kaneshige
2005-07-28 7:56 ` [PATCH 2.6.13-rc3 5/6] failure of acpi_register_gsi() should be handled properly - change acpi based 8250 driver Kenji Kaneshige
2005-07-28 7:58 ` [PATCH 2.6.13-rc3 6/6] failure of acpi_register_gsi() should be handled properly - change ia64 iosapic code Kenji Kaneshige
5 siblings, 0 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:54 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
This patch adds the error check of acpi_register_gsi() into pnpacpi
driver.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
linux-2.6.13-rc3-kanesige/drivers/pnp/pnpacpi/rsparser.c | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
diff -puN drivers/pnp/pnpacpi/rsparser.c~handle-error-acpi_register_gsi-pnpacpi drivers/pnp/pnpacpi/rsparser.c
--- linux-2.6.13-rc3/drivers/pnp/pnpacpi/rsparser.c~handle-error-acpi_register_gsi-pnpacpi 2005-07-28 01:01:17.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/drivers/pnp/pnpacpi/rsparser.c 2005-07-28 01:01:17.000000000 +0900
@@ -81,7 +81,7 @@ pnpacpi_parse_allocated_irqresource(stru
i++;
if (i < PNP_MAX_IRQ) {
res->irq_resource[i].flags = IORESOURCE_IRQ; //Also clears _UNSET flag
- if (irq == -1) {
+ if (irq < 0) {
res->irq_resource[i].flags |= IORESOURCE_DISABLED;
return;
}
_
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2.6.13-rc3 5/6] failure of acpi_register_gsi() should be handled properly - change acpi based 8250 driver
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
` (3 preceding siblings ...)
2005-07-28 7:54 ` [PATCH 2.6.13-rc3 4/6] failure of acpi_register_gsi() should be handled properly - change phpacpi driver Kenji Kaneshige
@ 2005-07-28 7:56 ` Kenji Kaneshige
2005-07-28 7:58 ` [PATCH 2.6.13-rc3 6/6] failure of acpi_register_gsi() should be handled properly - change ia64 iosapic code Kenji Kaneshige
5 siblings, 0 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:56 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
This patch adds the error check of acpi_register_gsi() into ACPI based
8250 serial driver.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
linux-2.6.13-rc3-kanesige/drivers/serial/8250_acpi.c | 20 +++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff -puN drivers/serial/8250_acpi.c~handle-error-acpi_register_gsi-8250_acpi drivers/serial/8250_acpi.c
--- linux-2.6.13-rc3/drivers/serial/8250_acpi.c~handle-error-acpi_register_gsi-8250_acpi 2005-07-28 01:01:18.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/drivers/serial/8250_acpi.c 2005-07-28 01:01:18.000000000 +0900
@@ -47,18 +47,30 @@ static acpi_status acpi_serial_port(stru
static acpi_status acpi_serial_ext_irq(struct uart_port *port,
struct acpi_resource_ext_irq *ext_irq)
{
- if (ext_irq->number_of_interrupts > 0)
- port->irq = acpi_register_gsi(ext_irq->interrupts[0],
+ int rc;
+
+ if (ext_irq->number_of_interrupts > 0) {
+ rc = acpi_register_gsi(ext_irq->interrupts[0],
ext_irq->edge_level, ext_irq->active_high_low);
+ if (rc < 0)
+ return AE_ERROR;
+ port->irq = rc;
+ }
return AE_OK;
}
static acpi_status acpi_serial_irq(struct uart_port *port,
struct acpi_resource_irq *irq)
{
- if (irq->number_of_interrupts > 0)
- port->irq = acpi_register_gsi(irq->interrupts[0],
+ int rc;
+
+ if (irq->number_of_interrupts > 0) {
+ rc = acpi_register_gsi(irq->interrupts[0],
irq->edge_level, irq->active_high_low);
+ if (rc < 0)
+ return AE_ERROR;
+ port->irq = rc;
+ }
return AE_OK;
}
_
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2.6.13-rc3 6/6] failure of acpi_register_gsi() should be handled properly - change ia64 iosapic code
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
` (4 preceding siblings ...)
2005-07-28 7:56 ` [PATCH 2.6.13-rc3 5/6] failure of acpi_register_gsi() should be handled properly - change acpi based 8250 driver Kenji Kaneshige
@ 2005-07-28 7:58 ` Kenji Kaneshige
5 siblings, 0 replies; 7+ messages in thread
From: Kenji Kaneshige @ 2005-07-28 7:58 UTC (permalink / raw)
To: Andrew Morton, Linux Kernel Mailing List, linux-ia64; +Cc: Kenji Kaneshige
Change iosapic_register_intr(), which called by acpi_register_gsi(),
to return negative value on error instead of panic.
Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
---
linux-2.6.13-rc3-kanesige/arch/ia64/kernel/iosapic.c | 20 ++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
diff -puN arch/ia64/kernel/iosapic.c~handle-error-acpi_register_gsi-remove-panic-iosapic-ia64 arch/ia64/kernel/iosapic.c
--- linux-2.6.13-rc3/arch/ia64/kernel/iosapic.c~handle-error-acpi_register_gsi-remove-panic-iosapic-ia64 2005-07-28 01:01:19.000000000 +0900
+++ linux-2.6.13-rc3-kanesige/arch/ia64/kernel/iosapic.c 2005-07-28 01:01:19.000000000 +0900
@@ -561,7 +561,7 @@ static inline int vector_is_shared (int
return (iosapic_intr_info[vector].count > 1);
}
-static void
+static int
register_intr (unsigned int gsi, int vector, unsigned char delivery,
unsigned long polarity, unsigned long trigger)
{
@@ -576,7 +576,7 @@ register_intr (unsigned int gsi, int vec
index = find_iosapic(gsi);
if (index < 0) {
printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi);
- return;
+ return -ENODEV;
}
iosapic_address = iosapic_lists[index].addr;
@@ -587,7 +587,7 @@ register_intr (unsigned int gsi, int vec
rte = iosapic_alloc_rte();
if (!rte) {
printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__);
- return;
+ return -ENOMEM;
}
rte_index = gsi - gsi_base;
@@ -603,7 +603,7 @@ register_intr (unsigned int gsi, int vec
struct iosapic_intr_info *info = &iosapic_intr_info[vector];
if (info->trigger != trigger || info->polarity != polarity) {
printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__);
- return;
+ return -EINVAL;
}
}
@@ -623,6 +623,7 @@ register_intr (unsigned int gsi, int vec
__FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
idesc->handler = irq_type;
}
+ return 0;
}
static unsigned int
@@ -710,7 +711,7 @@ int
iosapic_register_intr (unsigned int gsi,
unsigned long polarity, unsigned long trigger)
{
- int vector, mask = 1;
+ int vector, mask = 1, err;
unsigned int dest;
unsigned long flags;
struct iosapic_rte_info *rte;
@@ -738,7 +739,7 @@ again:
if (vector < 0) {
vector = iosapic_find_sharable_vector(trigger, polarity);
if (vector < 0)
- panic("%s: out of interrupt vectors!\n", __FUNCTION__);
+ return -ENOSPC;
}
spin_lock_irqsave(&irq_descp(vector)->lock, flags);
@@ -753,8 +754,13 @@ again:
}
dest = get_target_cpu(gsi, vector);
- register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY,
+ err = register_intr(gsi, vector, IOSAPIC_LOWEST_PRIORITY,
polarity, trigger);
+ if (err < 0) {
+ spin_unlock(&iosapic_lock);
+ spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
+ return err;
+ }
/*
* If the vector is shared and already unmasked for
_
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2005-07-28 8:12 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-28 7:48 [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly Kenji Kaneshige
2005-07-28 7:51 ` [PATCH 2.6.13-rc3 1/6] failure of acpi_register_gsi() should be handled properly - change acpi_register_gsi() interface Kenji Kaneshige
2005-07-28 7:52 ` [PATCH 2.6.13-rc3 2/6] failure of acpi_register_gsi() should be handled properly - change acpi pci code Kenji Kaneshige
2005-07-28 7:53 ` [PATCH 2.6.13-rc3 3/6] failure of acpi_register_gsi() should be handled properly - change hpet driver Kenji Kaneshige
2005-07-28 7:54 ` [PATCH 2.6.13-rc3 4/6] failure of acpi_register_gsi() should be handled properly - change phpacpi driver Kenji Kaneshige
2005-07-28 7:56 ` [PATCH 2.6.13-rc3 5/6] failure of acpi_register_gsi() should be handled properly - change acpi based 8250 driver Kenji Kaneshige
2005-07-28 7:58 ` [PATCH 2.6.13-rc3 6/6] failure of acpi_register_gsi() should be handled properly - change ia64 iosapic code Kenji Kaneshige
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox