linux 2.6.18: kill unneeded vector_lock
PATCH 5/10 linux 2.6.18: kill unneeded vector_lock
Slim down again the implementation on assign_irq_vector, as under Xen all serialization is done in the hypervisor.
Signed-off-by Jan Beulich <[email protected]>
arch/i386/kernel/io_apic-xen.c +5 -17
@@ -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_mosint 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
arch/x86_64/kernel/io_apic-xen.c +5 -17
@@ -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_mosint 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 );
Quoted 4 lines · Jan Beulich
Slim down again the implementation on
assign_irq_vector, as under Xen all serialization is done in the hypervisor.Signed-off-by Jan Beulich <[email protected]>
Takes us further from native for no benefit (not a hot path).
-- Keir