Subject: Linux 2.6.22.12 From: Greg Kroah-Hartman Signed-off-by: Greg Kroah-Hartman Automatically created from "patches.kernel.org/patch-2.6.22.11-12" by xen-port-patches.py Index: 10.3-2007-11-26/arch/i386/kernel/io_apic-xen.c =================================================================== --- 10.3-2007-11-26.orig/arch/i386/kernel/io_apic-xen.c 2007-11-26 14:07:48.000000000 +0100 +++ 10.3-2007-11-26/arch/i386/kernel/io_apic-xen.c 2007-11-26 14:07:57.000000000 +0100 @@ -1313,12 +1313,15 @@ static struct irq_chip ioapic_chip; static void ioapic_register_intr(int irq, int vector, unsigned long trigger) { if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || - trigger == IOAPIC_LEVEL) + trigger == IOAPIC_LEVEL) { + irq_desc[irq].status |= IRQ_LEVEL; set_irq_chip_and_handler_name(irq, &ioapic_chip, handle_fasteoi_irq, "fasteoi"); - else + } else { + irq_desc[irq].status &= ~IRQ_LEVEL; set_irq_chip_and_handler_name(irq, &ioapic_chip, handle_edge_irq, "edge"); + } set_intr_gate(vector, interrupt[irq]); } #else Index: 10.3-2007-11-26/arch/x86_64/kernel/io_apic-xen.c =================================================================== --- 10.3-2007-11-26.orig/arch/x86_64/kernel/io_apic-xen.c 2007-11-26 14:07:48.000000000 +0100 +++ 10.3-2007-11-26/arch/x86_64/kernel/io_apic-xen.c 2007-11-26 14:07:57.000000000 +0100 @@ -758,12 +758,15 @@ static struct irq_chip ioapic_chip; static void ioapic_register_intr(int irq, unsigned long trigger) { - if (trigger) + if (trigger) { + irq_desc[irq].status |= IRQ_LEVEL; set_irq_chip_and_handler_name(irq, &ioapic_chip, handle_fasteoi_irq, "fasteoi"); - else + } else { + irq_desc[irq].status &= ~IRQ_LEVEL; set_irq_chip_and_handler_name(irq, &ioapic_chip, handle_edge_irq, "edge"); + } } #else #define ioapic_register_intr(irq,trigger) ((void)0) Index: 10.3-2007-11-26/arch/x86_64/mm/init-xen.c =================================================================== --- 10.3-2007-11-26.orig/arch/x86_64/mm/init-xen.c 2007-11-26 14:07:48.000000000 +0100 +++ 10.3-2007-11-26/arch/x86_64/mm/init-xen.c 2007-11-26 14:08:42.000000000 +0100 @@ -1217,11 +1217,3 @@ int in_gate_area_no_task(unsigned long a { return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END); } - -#ifndef CONFIG_XEN -void *alloc_bootmem_high_node(pg_data_t *pgdat, unsigned long size) -{ - return __alloc_bootmem_core(pgdat->bdata, size, - SMP_CACHE_BYTES, (4UL*1024*1024*1024), 0); -} -#endif Index: 10.3-2007-11-26/arch/x86_64/mm/pageattr-xen.c =================================================================== --- 10.3-2007-11-26.orig/arch/x86_64/mm/pageattr-xen.c 2007-11-26 14:07:48.000000000 +0100 +++ 10.3-2007-11-26/arch/x86_64/mm/pageattr-xen.c 2007-11-26 14:07:57.000000000 +0100 @@ -432,9 +432,14 @@ void global_flush_tlb(void) struct page *pg, *next; struct list_head l; - down_read(&init_mm.mmap_sem); + /* + * Write-protect the semaphore, to exclude two contexts + * doing a list_replace_init() call in parallel and to + * exclude new additions to the deferred_pages list: + */ + down_write(&init_mm.mmap_sem); list_replace_init(&deferred_pages, &l); - up_read(&init_mm.mmap_sem); + up_write(&init_mm.mmap_sem); flush_map(&l);