diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c
index 0d7bac913de4d60bff453c15965864f5a59d3d40..5d926b60e8d94d910d5fad7931e9819f9143fb6e 100644
--- a/arch/ia64/kernel/acpi.c
+++ b/arch/ia64/kernel/acpi.c
@@ -626,6 +626,7 @@ acpi_boot_init (void)
 	return 0;
 }
 
+/* deprecated in favor of acpi_gsi_to_irq */
 int
 acpi_irq_to_vector (u32 gsi)
 {
@@ -635,6 +636,23 @@ acpi_irq_to_vector (u32 gsi)
 	return gsi_to_vector(gsi);
 }
 
+int
+acpi_gsi_to_irq (u32 gsi, unsigned int *irq)
+{
+	int vector;
+
+	if (has_8259 && gsi < 16)
+		*irq = isa_irq_to_vector(gsi);
+	else {
+		vector = gsi_to_vector(gsi);
+		if (vector == -1)
+			return -1;
+
+		*irq = vector;
+	}
+	return 0;
+}
+
 int
 acpi_register_irq (u32 gsi, u32 polarity, u32 trigger)
 {
diff --git a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h
index fd1b5061d72526d8e5acedd5f5a3e6cb40a06017..f98bb1cc5680b7413668bd19469ee92f31df2ae3 100644
--- a/include/asm-ia64/acpi.h
+++ b/include/asm-ia64/acpi.h
@@ -93,7 +93,8 @@ ia64_acpi_release_global_lock (unsigned int *lock)
 const char *acpi_get_sysname (void);
 int acpi_request_vector (u32 int_type);
 int acpi_register_irq (u32 gsi, u32 polarity, u32 trigger);
-int acpi_irq_to_vector (u32 irq);
+int acpi_irq_to_vector (u32 irq); /* deprecated in favor of acpi_gsi_to_irq */
+int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
 
 #ifdef CONFIG_ACPI_NUMA
 /* Proximity bitmap length; _PXM is at most 255 (8 bit)*/