[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [POWERPC][XEN] Stop sharing the MPIC between dom0 and Xen.
# HG changeset patch # User Hollis Blanchard <hollisb@xxxxxxxxxx> # Date 1183757110 18000 # Node ID 50fab2124ef0e745953b19692cd3cfcd30627037 # Parent abc2bd44e1dc689af0a1acc2e852c7d45e1d076f [POWERPC][XEN] Stop sharing the MPIC between dom0 and Xen. Xen is now the sole owner of the MPIC. Requires Xen Linux 2.6.18. Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx> --- xen/arch/powerpc/external.c | 85 +------------------------------------------ xen/arch/powerpc/mpic_init.c | 58 +++++------------------------ xen/arch/powerpc/mpic_init.h | 4 -- 3 files changed, 14 insertions(+), 133 deletions(-) diff -r abc2bd44e1dc -r 50fab2124ef0 xen/arch/powerpc/external.c --- a/xen/arch/powerpc/external.c Fri Jul 06 16:21:39 2007 -0500 +++ b/xen/arch/powerpc/external.c Fri Jul 06 16:25:10 2007 -0500 @@ -43,8 +43,6 @@ unsigned long io_apic_irqs; unsigned long io_apic_irqs; int ioapic_ack_new = 1; -static struct hw_interrupt_type *hc_irq; - /* deliver_ee: called with interrupts off when resuming every vcpu */ void deliver_ee(struct cpu_user_regs *regs) { @@ -81,6 +79,7 @@ void do_external(struct cpu_user_regs *r BUG_ON(mfmsr() & MSR_EE); vec = xen_mpic_get_irq(regs); + DBG(">HV: vec=%d, pc=0x%lx, msr=0x%lx\n", vec, regs->pc, regs->msr); if (irq_desc[vec].status & IRQ_PER_CPU) { /* x86 do_IRQ does not respect the per cpu flag. */ @@ -90,7 +89,6 @@ void do_external(struct cpu_user_regs *r desc->action->handler(vector_to_irq(vec), desc->action->dev_id, regs); desc->handler->end(vec); } else if (vec != -1) { - DBG("EE:0x%lx isrc: %d\n", regs->msr, vec); regs->entry_vector = vec; do_IRQ(regs); @@ -106,87 +104,9 @@ void do_external(struct cpu_user_regs *r } } -static int xen_local_irq(unsigned int irq) -{ - irq_desc_t *desc; - unsigned int vector; - - vector = irq_to_vector(irq); - desc = &irq_desc[vector]; - - return !(desc->status & IRQ_GUEST); -} - -static unsigned int xen_startup_irq(unsigned int irq) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - return hc_irq->startup(irq); - } - return 0; -} - -static void xen_shutdown_irq(unsigned int irq) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - hc_irq->shutdown(irq); - } -} - -static void xen_enable_irq(unsigned int irq) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - hc_irq->enable(irq); - } -} - -static void xen_disable_irq(unsigned int irq) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - hc_irq->disable(irq); - } -} - -static void xen_ack_irq(unsigned int irq) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - if (hc_irq->ack) hc_irq->ack(irq); - } -} - -static void xen_end_irq(unsigned int irq) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - hc_irq->end(irq); - } -} - -static void xen_set_affinity(unsigned int irq, cpumask_t mask) -{ - DBG("%s(%d)\n", __func__, irq); - if (xen_local_irq(irq)) { - if (hc_irq->set_affinity) hc_irq->set_affinity(irq, mask); - } -} - -static struct hw_interrupt_type xen_irq = { - .startup = xen_startup_irq, - .enable = xen_enable_irq, - .disable = xen_disable_irq, - .shutdown = xen_shutdown_irq, - .ack = xen_ack_irq, - .end = xen_end_irq, - .set_affinity = xen_set_affinity, -}; - void init_IRQ(void) { - hc_irq = xen_mpic_init(&xen_irq); + xen_mpic_init(); } void ack_APIC_irq(void) @@ -251,7 +171,6 @@ int ioapic_guest_read(unsigned long phys int ioapic_guest_read(unsigned long physbase, unsigned int reg, u32 *pval) { BUG_ON(pval != pval); - return 0; } diff -r abc2bd44e1dc -r 50fab2124ef0 xen/arch/powerpc/mpic_init.c --- a/xen/arch/powerpc/mpic_init.c Fri Jul 06 16:21:39 2007 -0500 +++ b/xen/arch/powerpc/mpic_init.c Fri Jul 06 16:25:10 2007 -0500 @@ -322,43 +322,6 @@ static int find_mpic(void) return rc; } -#ifdef CONFIG_SHARE_MPIC -static struct hw_interrupt_type hc_irq; - -static struct hw_interrupt_type *share_mpic( - struct hw_interrupt_type *mpic_irq, - struct hw_interrupt_type *xen_irq) -{ - hc_irq.startup = mpic_irq->startup; - mpic_irq->startup = xen_irq->startup; - - hc_irq.enable = mpic_irq->enable; - mpic_irq->enable = xen_irq->enable; - - hc_irq.disable = mpic_irq->disable; - mpic_irq->disable = xen_irq->disable; - - hc_irq.shutdown = mpic_irq->shutdown; - mpic_irq->shutdown = xen_irq->shutdown; - - hc_irq.ack = mpic_irq->ack; - mpic_irq->ack = xen_irq->ack; - - hc_irq.end = mpic_irq->end; - mpic_irq->end = xen_irq->end; - - hc_irq.set_affinity = mpic_irq->set_affinity; - mpic_irq->set_affinity = xen_irq->set_affinity; - - return &hc_irq; -} - -#else /* CONFIG_SHARE_MPIC */ - -#define share_mpic(M,X) (M) - -#endif - static unsigned int mpic_startup_ipi(unsigned int irq) { mpic->hc_ipi.enable(irq); @@ -395,7 +358,11 @@ int request_irq(unsigned int irq, return retval; } -struct hw_interrupt_type *xen_mpic_init(struct hw_interrupt_type *xen_irq) +static void dummy_ack(unsigned int irq) +{ +} + +void xen_mpic_init(void) { unsigned int isu_size; unsigned int irq_offset; @@ -403,7 +370,6 @@ struct hw_interrupt_type *xen_mpic_init( unsigned int ipi_offset; unsigned char *senses; unsigned int senses_count; - struct hw_interrupt_type *hit; printk("%s: start\n", __func__); @@ -420,7 +386,7 @@ struct hw_interrupt_type *xen_mpic_init( if (find_mpic()) { printk("%s: ERROR: Could not find open pic.\n", __func__); - return NULL; + return; } mpic = mpic_alloc(opic_addr, @@ -431,17 +397,15 @@ struct hw_interrupt_type *xen_mpic_init( BUG_ON(mpic == NULL); mpic_init(mpic); - hit = share_mpic(&mpic->hc_irq, xen_irq); - printk("%s: success\n", __func__); - mpic->hc_ipi.ack = xen_irq->ack; + mpic->hc_irq.ack = dummy_ack; + mpic->hc_ipi.ack = dummy_ack; mpic->hc_ipi.startup = mpic_startup_ipi; mpic_request_ipis(); - - return hit; -} - +} + +/* Note: reading the vector implicitly ACKs it in hardware. */ int xen_mpic_get_irq(struct cpu_user_regs *regs) { BUG_ON(mpic == NULL); diff -r abc2bd44e1dc -r 50fab2124ef0 xen/arch/powerpc/mpic_init.h --- a/xen/arch/powerpc/mpic_init.h Fri Jul 06 16:21:39 2007 -0500 +++ b/xen/arch/powerpc/mpic_init.h Fri Jul 06 16:25:10 2007 -0500 @@ -21,9 +21,7 @@ #ifndef _MPIC_INIT_H #define _MPIC_INIT_H -extern struct hw_interrupt_type *xen_mpic_init( - struct hw_interrupt_type *xen_irq); - +extern void xen_mpic_init(void); extern int xen_mpic_get_irq(struct cpu_user_regs *regs); #endif /* #ifndef _MPIC_INIT_H */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |