diff -r 3f237000e59c xen/Makefile --- a/xen/Makefile Tue Nov 1 14:37:40 2005 +++ b/xen/Makefile Fri Nov 18 09:28:35 2005 @@ -48,7 +48,7 @@ rm -f include/asm-*/asm-offsets.h rm -f include/xen/acm_policy.h -$(TARGET): delete-unfresh-files +$(TARGET): #delete-unfresh-files $(MAKE) -C tools $(MAKE) include/xen/compile.h $(MAKE) include/xen/acm_policy.h diff -r 3f237000e59c xen/arch/ia64/Makefile --- a/xen/arch/ia64/Makefile Tue Nov 1 14:37:40 2005 +++ b/xen/arch/ia64/Makefile Fri Nov 18 09:28:35 2005 @@ -10,7 +10,7 @@ extable.o linuxextable.o sort.o xenirq.o xentime.o \ regionreg.o entry.o unaligned.o privop.o vcpu.o \ irq_ia64.o irq_lsapic.o vhpt.o xenasm.o hyperprivop.o dom_fw.o \ - grant_table.o sn_console.o + grant_table.o sn_console.o iosapic.o OBJS += vmx_init.o vmx_virt.o vmx_vcpu.o vmx_process.o vmx_vsa.o vmx_ivt.o\ vmx_phy_mode.o vmx_utility.o vmx_interrupt.o vmx_entry.o vmmu.o \ @@ -45,7 +45,7 @@ asm-xsi-offsets.s: asm-xsi-offsets.c $(CC) $(CFLAGS) -S -o $@ $< - + $(BASEDIR)/include/asm-ia64/asm-xsi-offsets.h: asm-xsi-offsets.s @(set -e; \ echo "/*"; \ diff -r 3f237000e59c xen/arch/ia64/xen/acpi.c --- a/xen/arch/ia64/xen/acpi.c Tue Nov 1 14:37:40 2005 +++ b/xen/arch/ia64/xen/acpi.c Fri Nov 18 09:28:35 2005 @@ -44,7 +44,7 @@ #include #include #include -//#include +#include #include #include #include @@ -121,14 +121,13 @@ #ifdef CONFIG_ACPI_BOOT #define ACPI_MAX_PLATFORM_INTERRUPTS 256 -#define NR_IOSAPICS 4 - -#if 0 + /* Array to record platform interrupt vectors for generic interrupt routing. */ int platform_intr_list[ACPI_MAX_PLATFORM_INTERRUPTS] = { [0 ... ACPI_MAX_PLATFORM_INTERRUPTS - 1] = -1 }; +#if 0 enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_IOSAPIC; /* @@ -247,9 +246,7 @@ acpi_table_print_madt_entry(header); -#if 0 iosapic_init(iosapic->address, iosapic->global_irq_base); -#endif return 0; } @@ -268,7 +265,6 @@ acpi_table_print_madt_entry(header); -#if 0 /* * Get vector assignment for this interrupt, set attributes, * and program the IOSAPIC routing table. @@ -282,7 +278,6 @@ (plintsrc->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); platform_intr_list[plintsrc->type] = vector; -#endif return 0; } @@ -300,11 +295,9 @@ acpi_table_print_madt_entry(header); -#if 0 iosapic_override_isa_irq(p->bus_irq, p->global_irq, (p->flags.polarity == 1) ? IOSAPIC_POL_HIGH : IOSAPIC_POL_LOW, (p->flags.trigger == 1) ? IOSAPIC_EDGE : IOSAPIC_LEVEL); -#endif return 0; } @@ -356,9 +349,7 @@ #else has_8259 = acpi_madt->flags.pcat_compat; #endif -#if 0 iosapic_system_init(has_8259); -#endif /* Get base address of IPI Message Block */ diff -r 3f237000e59c xen/arch/ia64/xen/irq.c --- a/xen/arch/ia64/xen/irq.c Tue Nov 1 14:37:40 2005 +++ b/xen/arch/ia64/xen/irq.c Fri Nov 18 09:28:35 2005 @@ -75,8 +75,15 @@ #ifdef XEN #include #define _irq_desc irq_desc -#define irq_descp(irq) &irq_desc[irq] +#define irq_descp(irq) (&irq_desc[irq]) #define apicid_to_phys_cpu_present(x) 1 + +/* Return !0 if IRQ is not used by xen. */ +int +is_not_xen_irq (unsigned int irq) +{ + return irq_descp(irq)->status & IRQ_DISABLED; +} #endif @@ -967,6 +974,7 @@ } #endif + printf ("setup irq %d\n", irq); /* * The following block of code has to be executed atomically */ diff -r 3f237000e59c xen/arch/ia64/xen/xenirq.c --- a/xen/arch/ia64/xen/xenirq.c Tue Nov 1 14:37:40 2005 +++ b/xen/arch/ia64/xen/xenirq.c Fri Nov 18 09:28:35 2005 @@ -35,7 +35,8 @@ int xen_do_IRQ(ia64_vector vector) { - if (vector != IA64_TIMER_VECTOR && vector != IA64_IPI_VECTOR) { + if (vector != IA64_TIMER_VECTOR && vector != IA64_IPI_VECTOR + && is_not_xen_irq (local_vector_to_irq(vector))) { extern void vcpu_pend_interrupt(void *, int); #if 0 if (firsttime[vector]) { diff -r 3f237000e59c xen/arch/ia64/xen/xensetup.c --- a/xen/arch/ia64/xen/xensetup.c Tue Nov 1 14:37:40 2005 +++ b/xen/arch/ia64/xen/xensetup.c Fri Nov 18 09:28:35 2005 @@ -22,6 +22,8 @@ #include #include +extern void initialize_keytable(void); + unsigned long xenheap_phys_end; char saved_command_line[COMMAND_LINE_SIZE]; @@ -299,6 +301,16 @@ do_initcalls(); printk("About to call sort_main_extable()\n"); sort_main_extable(); + + if (1) { + initialize_keytable(); + + local_irq_enable(); + + serial_init_postirq (); + + dump_iosapic (); + } /* Create initial domain 0. */ @@ -383,6 +395,10 @@ local_irq_enable(); + serial_init_postirq (); + + dump_iosapic (); + printf("About to call schedulers_start dom0=%p, idle0_dom=%p\n", dom0, &idle0_domain); schedulers_start(); diff -r 3f237000e59c xen/drivers/char/ns16550.c --- a/xen/drivers/char/ns16550.c Tue Nov 1 14:37:40 2005 +++ b/xen/drivers/char/ns16550.c Fri Nov 18 09:28:35 2005 @@ -186,11 +186,10 @@ if ( uart->irq <= 0 ) return; - serial_async_transmit(port); - uart->irqaction.handler = ns16550_interrupt; uart->irqaction.name = "ns16550"; uart->irqaction.dev_id = port; + printf ("init postirq: irq=%d\n", uart->irq); if ( (rc = setup_irq(uart->irq, &uart->irqaction)) != 0 ) printk("ERROR: Failed to allocate na16550 IRQ %d\n", uart->irq); @@ -198,7 +197,9 @@ ns_write_reg(uart, MCR, MCR_OUT2 | MCR_DTR | MCR_RTS); /* Enable receive and transmit interrupts. */ - ns_write_reg(uart, IER, IER_ERDAI | IER_ETHREI); + ns_write_reg(uart, IER, IER_ERDAI); // | IER_ETHREI); + + //serial_async_transmit(port); } #ifdef CONFIG_X86 diff -r 3f237000e59c xen/include/asm-ia64/config.h --- a/xen/include/asm-ia64/config.h Tue Nov 1 14:37:40 2005 +++ b/xen/include/asm-ia64/config.h Fri Nov 18 09:28:35 2005 @@ -305,6 +305,7 @@ #define __smp_processor_id() 0 #endif +#define CONFIG_IOSAPIC // FOLLOWING ADDED FOR XEN POST-NGIO and/or LINUX 2.6.7