Slim down again the implementation on assign_irq_vector, as under Xen
all serialization is done in the hypervisor.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
Index: head-2007-02-27/arch/i386/kernel/io_apic-xen.c
===================================================================
--- head-2007-02-27.orig/arch/i386/kernel/io_apic-xen.c 2007-03-05
10:00:18.000000000 +0100
+++ head-2007-02-27/arch/i386/kernel/io_apic-xen.c 2007-02-27
16:27:37.000000000 +0100
@@ -90,7 +90,6 @@ atomic_t irq_mis_count;
static struct { int pin, apic; } ioapic_i8259 = { -1, -1 };
static DEFINE_SPINLOCK(ioapic_lock);
-static DEFINE_SPINLOCK(vector_lock);
int timer_over_8254 __initdata = 1;
@@ -1209,33 +1208,22 @@ u8 irq_vector[NR_IRQ_VECTORS] __read_mos
int assign_irq_vector(int irq)
{
- unsigned long flags;
- int vector;
struct physdev_irq irq_op;
BUG_ON(irq != AUTO_ASSIGN && (unsigned)irq >= NR_IRQ_VECTORS);
- spin_lock_irqsave(&vector_lock, flags);
-
- if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0) {
- spin_unlock_irqrestore(&vector_lock, flags);
+ if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0)
return IO_APIC_VECTOR(irq);
- }
irq_op.irq = irq;
- if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op)) {
- spin_unlock_irqrestore(&vector_lock, flags);
+ if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op))
return -ENOSPC;
- }
- vector = irq_op.vector;
- vector_irq[vector] = irq;
+ vector_irq[irq_op.vector] = irq;
if (irq != AUTO_ASSIGN)
- IO_APIC_VECTOR(irq) = vector;
-
- spin_unlock_irqrestore(&vector_lock, flags);
+ IO_APIC_VECTOR(irq) = irq_op.vector;
- return vector;
+ return irq_op.vector;
}
#ifndef CONFIG_XEN
Index: head-2007-02-27/arch/x86_64/kernel/io_apic-xen.c
===================================================================
--- head-2007-02-27.orig/arch/x86_64/kernel/io_apic-xen.c 2007-03-05
10:00:18.000000000 +0100
+++ head-2007-02-27/arch/x86_64/kernel/io_apic-xen.c 2007-02-27
16:27:37.000000000 +0100
@@ -58,7 +58,6 @@ static struct { int pin, apic; } ioapic_
#endif
static DEFINE_SPINLOCK(ioapic_lock);
-static DEFINE_SPINLOCK(vector_lock);
/*
* # of IRQ routing registers
@@ -888,33 +887,22 @@ u8 irq_vector[NR_IRQ_VECTORS] __read_mos
int assign_irq_vector(int irq)
{
- unsigned long flags;
- int vector;
struct physdev_irq irq_op;
BUG_ON(irq != AUTO_ASSIGN && (unsigned)irq >= NR_IRQ_VECTORS);
- spin_lock_irqsave(&vector_lock, flags);
-
- if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0) {
- spin_unlock_irqrestore(&vector_lock, flags);
+ if (irq != AUTO_ASSIGN && IO_APIC_VECTOR(irq) > 0)
return IO_APIC_VECTOR(irq);
- }
irq_op.irq = irq;
- if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op)) {
- spin_unlock_irqrestore(&vector_lock, flags);
+ if (HYPERVISOR_physdev_op(PHYSDEVOP_alloc_irq_vector, &irq_op))
return -ENOSPC;
- }
- vector = irq_op.vector;
- vector_irq[vector] = irq;
+ vector_irq[irq_op.vector] = irq;
if (irq != AUTO_ASSIGN)
- IO_APIC_VECTOR(irq) = vector;
-
- spin_unlock_irqrestore(&vector_lock, flags);
+ IO_APIC_VECTOR(irq) = irq_op.vector;
- return vector;
+ return irq_op.vector;
}
extern void (*interrupt[NR_IRQS])(void);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|