[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-ia64-devel] Re: [Xen-devel] [PATCH 3/5] setup_irq/request_irq/free_irq fixups
On Tue, Feb 10, 2009 at 05:41:18AM +0000, Keir Fraser wrote: > On 09/02/2009 17:46, "Espen Skoglund" <espen.skoglund@xxxxxxxxxxxxx> wrote: > > > Cleanup naming for ia64 and x86 interrupt handling functions > > > > - Append '_IRQ' to AUTO_ASSIGN, NEVER_ASSIGN, and FREE_TO_ASSIGN > > - Rename {request,setup}_irq to {request,setup}_irq_vector > > - Rename free_irq to release_irq_vector > > - Add {request,setup,release}_irq wrappers for their > > {request,setup,release}_irq_vector counterparts > > - Added generic irq_to_vector inline for ia64 > > - Changed ia64 to use the new naming scheme > > > > Signed-off-by: Espen Skoglund <espen.skoglund@xxxxxxxxxxxxx> > > This needs an ack on the IA64 side. And perhaps a fixup patch since it > probably breaks their build if you couldn't test that. I cc'ed Isaku. Here is the additional patch to boot xen on ia64. [IA64] more fix tirivial compliation fix and fixes to boot xen on ia64. Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx> diff --git a/xen/arch/ia64/linux-xen/iosapic.c b/xen/arch/ia64/linux-xen/iosapic.c --- a/xen/arch/ia64/linux-xen/iosapic.c +++ b/xen/arch/ia64/linux-xen/iosapic.c @@ -93,6 +93,7 @@ #include <asm/ptrace.h> #include <asm/system.h> +#ifdef XEN static inline int iosapic_irq_to_vector (int irq) { return irq; @@ -100,6 +101,8 @@ static inline int iosapic_irq_to_vector #undef irq_to_vector #define irq_to_vector(irq) iosapic_irq_to_vector(irq) +#define AUTO_ASSIGN AUTO_ASSIGN_IRQ +#endif #undef DEBUG_INTERRUPT_ROUTING @@ -535,7 +538,7 @@ iosapic_reassign_vector (int vector) int new_vector; if (!list_empty(&iosapic_intr_info[vector].rtes)) { - new_vector = assign_irq_vector(AUTO_ASSIGN_IRQ); + new_vector = assign_irq_vector(AUTO_ASSIGN); if (new_vector < 0) panic("%s: out of interrupt vectors!\n", __FUNCTION__); printk(KERN_INFO "Reassigning vector %d to %d\n", vector, new_vector); @@ -771,7 +774,7 @@ again: spin_unlock_irqrestore(&iosapic_lock, flags); /* If vector is running out, we try to find a sharable vector */ - vector = assign_irq_vector(AUTO_ASSIGN_IRQ); + vector = assign_irq_vector(AUTO_ASSIGN); if (vector < 0) { vector = iosapic_find_sharable_vector(trigger, polarity); if (vector < 0) @@ -926,7 +929,7 @@ iosapic_register_platform_intr (u32 int_ delivery = IOSAPIC_PMI; break; case ACPI_INTERRUPT_INIT: - vector = assign_irq_vector(AUTO_ASSIGN_IRQ); + vector = assign_irq_vector(AUTO_ASSIGN); if (vector < 0) panic("%s: out of interrupt vectors!\n", __FUNCTION__); delivery = IOSAPIC_INIT; diff --git a/xen/arch/ia64/linux-xen/irq_ia64.c b/xen/arch/ia64/linux-xen/irq_ia64.c --- a/xen/arch/ia64/linux-xen/irq_ia64.c +++ b/xen/arch/ia64/linux-xen/irq_ia64.c @@ -250,6 +250,7 @@ void register_percpu_irq (ia64_vector vec, struct irqaction *action) { irq_desc_t *desc; +#ifndef XEN unsigned int irq; for (irq = 0; irq < NR_IRQS; ++irq) @@ -258,12 +259,15 @@ register_percpu_irq (ia64_vector vec, st desc->status |= IRQ_PER_CPU; desc->handler = &irq_type_ia64_lsapic; if (action) -#ifdef XEN - setup_vector(irq, action); + setup_irq(irq, action); + } #else - setup_irq_vector(irq, action); + desc = irq_descp(vec); + desc->status |= IRQ_PER_CPU; + desc->handler = &irq_type_ia64_lsapic; + if (action) + setup_vector(vec, action); #endif - } } #ifdef XEN diff --git a/xen/arch/ia64/linux-xen/mca.c b/xen/arch/ia64/linux-xen/mca.c --- a/xen/arch/ia64/linux-xen/mca.c +++ b/xen/arch/ia64/linux-xen/mca.c @@ -1930,12 +1930,18 @@ ia64_mca_late_init(void) if (cpe_vector >= 0) { /* If platform supports CPEI, enable the irq. */ cpe_poll_enabled = 0; +#ifndef XEN for (irq = 0; irq < NR_IRQS; ++irq) if (irq_to_vector(irq) == cpe_vector) { desc = irq_descp(irq); desc->status |= IRQ_PER_CPU; setup_vector(irq, &mca_cpe_irqaction); } +#else + desc = irq_descp(cpe_vector); + desc->status |= IRQ_PER_CPU; + setup_vector(cpe_vector, &mca_cpe_irqaction); +#endif ia64_mca_register_cpev(cpe_vector); IA64_MCA_DEBUG("%s: CPEI/P setup and enabled.\n", __FUNCTION__); } else { diff --git a/xen/arch/ia64/xen/hypercall.c b/xen/arch/ia64/xen/hypercall.c --- a/xen/arch/ia64/xen/hypercall.c +++ b/xen/arch/ia64/xen/hypercall.c @@ -543,7 +543,7 @@ long do_physdev_op(int cmd, XEN_GUEST_HA break; irq_status_query.flags = 0; /* Edge-triggered interrupts don't need an explicit unmask downcall. */ - if ( !strstr(irq_desc[irq_to_vector(irq)].handler->typename, "edge") ) + if ( !strstr(irq_descp(irq)->handler->typename, "edge") ) irq_status_query.flags |= XENIRQSTAT_needs_eoi; ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0; break; diff --git a/xen/arch/ia64/xen/irq.c b/xen/arch/ia64/xen/irq.c --- a/xen/arch/ia64/xen/irq.c +++ b/xen/arch/ia64/xen/irq.c @@ -262,7 +262,7 @@ int setup_irq_vector(unsigned int vec, s { int res; - if ( !vec ) + if ( vec == IA64_INVALID_VECTOR ) return -ENOSYS; /* Reserve the vector (and thus the irq). */ if (test_and_set_bit(vec, ia64_xen_vector)) @@ -276,7 +276,7 @@ void release_irq_vector(unsigned int vec unsigned long flags; irq_desc_t *desc; - if ( !vec ) + if ( vec == IA64_INVALID_VECTOR ) return; desc = irq_descp(vec); diff --git a/xen/include/asm-ia64/hvm/irq.h b/xen/include/asm-ia64/hvm/irq.h --- a/xen/include/asm-ia64/hvm/irq.h +++ b/xen/include/asm-ia64/hvm/irq.h @@ -90,10 +90,11 @@ struct hvm_irq { #define hvm_pci_intx_link(dev, intx) \ (((dev) + (intx)) & 3) -static inlint int irq_to_vector(int irq) +#define IA64_INVALID_VECTOR ((unsigned int)((int)-1)) +static inline unsigned int irq_to_vector(int irq) { int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); - int vector; + unsigned int vector; if ( acpi_gsi_to_irq(irq, &vector) < 0) return 0; -- yamahata _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |