* [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled
@ 2005-07-28 7:48 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 0/6] failure of acpi_register_gsi() should be handled properly
@ 2005-07-28 7:48 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 1/6] failure of acpi_register_gsi() should be handled
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
-1 siblings, 0 replies; 14+ 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] 14+ 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:51 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 2/6] failure of acpi_register_gsi() should be handled
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:52 ` Kenji Kaneshige
-1 siblings, 0 replies; 14+ 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] 14+ 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:52 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 3/6] failure of acpi_register_gsi() should be handled
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:53 ` Kenji Kaneshige
-1 siblings, 0 replies; 14+ 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] 14+ 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:53 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 4/6] failure of acpi_register_gsi() should be handled
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:54 ` Kenji Kaneshige
-1 siblings, 0 replies; 14+ 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] 14+ 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:54 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 5/6] failure of acpi_register_gsi() should be handled
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:56 ` Kenji Kaneshige
-1 siblings, 0 replies; 14+ 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] 14+ 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:56 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
* [PATCH 2.6.13-rc3 6/6] failure of acpi_register_gsi() should be handled
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:58 ` Kenji Kaneshige
-1 siblings, 0 replies; 14+ 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] 14+ 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:58 ` Kenji Kaneshige
0 siblings, 0 replies; 14+ 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] 14+ messages in thread
end of thread, other threads:[~2005-07-28 8:12 UTC | newest]
Thread overview: 14+ 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 Kenji Kaneshige
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 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 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 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 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 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 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 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.