On 19/10/11 07:34, Jan Beulich wrote:
> fold struct irq_cfg into struct irq_desc
>
> struct irq_cfg really has become an architecture extension to struct
> irq_desc, and hence it should be treated as such (rather than as IRQ
> chip specific data, which it was meant to be originally).
>
> For a first step, only convert a subset of the uses; subsequent
> patches (partly to be sent later) will aim at fully eliminating the
> use of the old structure type.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> --- a/xen/arch/ia64/xen/irq.c
> +++ b/xen/arch/ia64/xen/irq.c
> @@ -79,16 +79,13 @@ irq_desc_t irq_desc[NR_IRQS] = {
> .status = IRQ_DISABLED,
> .handler = &no_irq_type,
> .lock = SPIN_LOCK_UNLOCKED
> + .arch = {
> + .vector = -1,
> + .cpu_mask = CPU_MASK_ALL,
> + }
> }
> };
>
> -struct irq_cfg irq_cfg[NR_IRQS] = {
> - [0 ... NR_IRQS-1] ={
> - .vector = -1,
> - .cpu_mask = CPU_MASK_ALL,
> -}
> -};
> -
> void __do_IRQ_guest(int irq);
>
> /*
> @@ -238,7 +235,6 @@ int setup_vector(unsigned int vector, st
> unsigned long flags;
> struct irqaction *old, **p;
> irq_desc_t *desc = irq_descp(vector);
> - struct irq_cfg *cfg = irq_cfg(vector);
>
> /*
> * The following block of code has to be executed atomically
> @@ -256,8 +252,7 @@ int setup_vector(unsigned int vector, st
> desc->status &= ~(IRQ_DISABLED | IRQ_INPROGRESS | IRQ_GUEST);
> desc->handler->startup(vector);
> desc->handler->enable(vector);
> - desc->chip_data = cfg;
> - cfg->vector = vector;
> + desc->arch.vector = vector;
> spin_unlock_irqrestore(&desc->lock,flags);
>
> return 0;
> @@ -283,13 +278,11 @@ void __init release_irq_vector(unsigned
> {
> unsigned long flags;
> irq_desc_t *desc;
> - struct irq_cfg *cfg;
>
> if ( vec == IA64_INVALID_VECTOR )
> return;
>
> desc = irq_descp(vec);
> - cfg = irq_cfg(vec);
>
> spin_lock_irqsave(&desc->lock, flags);
> clear_bit(vec, ia64_xen_vector);
> @@ -297,8 +290,7 @@ void __init release_irq_vector(unsigned
> desc->depth = 1;
> desc->status |= IRQ_DISABLED;
> desc->handler->shutdown(vec);
> - desc->chip_data = NULL;
> - cfg->vector = -1;
> + desc->arch.vector = -1;
> spin_unlock_irqrestore(&desc->lock, flags);
>
> while (desc->status & IRQ_INPROGRESS)
> --- a/xen/arch/x86/hpet.c
> +++ b/xen/arch/x86/hpet.c
> @@ -281,7 +281,6 @@ static void hpet_msi_set_affinity(struct
> {
> struct msi_msg msg;
> unsigned int dest;
> - struct irq_cfg *cfg= desc->chip_data;
>
> dest = set_desc_affinity(desc, mask);
> if (dest == BAD_APICID)
> @@ -289,7 +288,7 @@ static void hpet_msi_set_affinity(struct
>
> hpet_msi_read(desc->action->dev_id, &msg);
> msg.data &= ~MSI_DATA_VECTOR_MASK;
> - msg.data |= MSI_DATA_VECTOR(cfg->vector);
> + msg.data |= MSI_DATA_VECTOR(desc->arch.vector);
> msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
> msg.address_lo |= MSI_ADDR_DEST_ID(dest);
> hpet_msi_write(desc->action->dev_id, &msg);
> --- a/xen/arch/x86/i8259.c
> +++ b/xen/arch/x86/i8259.c
> @@ -395,12 +395,11 @@ void __init init_IRQ(void)
>
> for (irq = 0; platform_legacy_irq(irq); irq++) {
> struct irq_desc *desc = irq_to_desc(irq);
> - struct irq_cfg *cfg = desc->chip_data;
>
> desc->handler = &i8259A_irq_type;
> per_cpu(vector_irq, cpu)[FIRST_LEGACY_VECTOR + irq] = irq;
> - cfg->cpu_mask= cpumask_of_cpu(cpu);
> - cfg->vector = FIRST_LEGACY_VECTOR + irq;
> + cpumask_copy(&desc->arch.cpu_mask, cpumask_of(cpu));
> + desc->arch.vector = FIRST_LEGACY_VECTOR + irq;
> }
>
> per_cpu(vector_irq, cpu)[FIRST_HIPRIORITY_VECTOR] = 0;
> --- a/xen/arch/x86/io_apic.c
> +++ b/xen/arch/x86/io_apic.c
> @@ -552,7 +552,7 @@ fastcall void smp_irq_move_cleanup_inter
> if (!desc)
> continue;
>
> - cfg = desc->chip_data;
> + cfg = &desc->arch;
> spin_lock(&desc->lock);
> if (!cfg->move_cleanup_count)
> goto unlock;
> @@ -613,7 +613,7 @@ static void send_cleanup_vector(struct i
>
> void irq_complete_move(struct irq_desc *desc)
> {
> - struct irq_cfg *cfg = desc->chip_data;
> + struct irq_cfg *cfg = &desc->arch;
> unsigned vector, me;
>
> if (likely(!cfg->move_in_progress))
> @@ -638,7 +638,7 @@ unsigned int set_desc_affinity(struct ir
> return BAD_APICID;
>
> irq = desc->irq;
> - cfg = desc->chip_data;
> + cfg = &desc->arch;
>
> local_irq_save(flags);
> lock_vector_lock();
> @@ -661,11 +661,9 @@ set_ioapic_affinity_irq(struct irq_desc
> unsigned long flags;
> unsigned int dest;
> int pin, irq;
> - struct irq_cfg *cfg;
> struct irq_pin_list *entry;
>
> irq = desc->irq;
> - cfg = desc->chip_data;
>
> spin_lock_irqsave(&ioapic_lock, flags);
> dest = set_desc_affinity(desc, mask);
> @@ -682,7 +680,7 @@ set_ioapic_affinity_irq(struct irq_desc
> io_apic_write(entry->apic, 0x10 + 1 + pin*2, dest);
> data = io_apic_read(entry->apic, 0x10 + pin*2);
> data &= ~IO_APIC_REDIR_VECTOR_MASK;
> - data |= cfg->vector & 0xFF;
> + data |= desc->arch.vector & 0xFF;
> io_apic_modify(entry->apic, 0x10 + pin*2, data);
>
> if (!entry->next)
> @@ -2448,7 +2446,7 @@ int ioapic_guest_write(unsigned long phy
> return irq;
>
> desc = irq_to_desc(irq);
> - cfg = desc->chip_data;
> + cfg = &desc->arch;
>
> /*
> * Since PHYSDEVOP_alloc_irq_vector is dummy, rte.vector is the pirq
> --- a/xen/arch/x86/irq.c
> +++ b/xen/arch/x86/irq.c
> @@ -45,8 +45,6 @@ struct irq_desc __read_mostly *irq_desc
>
> static DECLARE_BITMAP(used_vectors, NR_VECTORS);
>
> -struct irq_cfg __read_mostly *irq_cfg = NULL;
> -
> static DEFINE_SPINLOCK(vector_lock);
>
> DEFINE_PER_CPU(vector_irq_t, vector_irq);
> @@ -156,7 +154,7 @@ static inline int find_unassigned_irq(vo
> int irq;
>
> for (irq = nr_irqs_gsi; irq < nr_irqs; irq++)
> - if (irq_cfg[irq].used == IRQ_UNUSED)
> + if (irq_to_desc(irq)->arch.used == IRQ_UNUSED)
> return irq;
> return -ENOSPC;
> }
> @@ -198,7 +196,7 @@ static void dynamic_irq_cleanup(unsigned
> desc->action = NULL;
> desc->msi_desc = NULL;
> desc->handler = &no_irq_type;
> - desc->chip_data->used_vectors=NULL;
> + desc->arch.used_vectors = NULL;
> cpus_setall(desc->affinity);
> spin_unlock_irqrestore(&desc->lock, flags);
>
> @@ -322,26 +320,22 @@ static void __init init_one_irq_cfg(stru
> int __init init_irq_data(void)
> {
> struct irq_desc *desc;
> - struct irq_cfg *cfg;
> int irq, vector;
>
> for (vector = 0; vector < NR_VECTORS; ++vector)
> this_cpu(vector_irq)[vector] = -1;
>
> irq_desc = xzalloc_array(struct irq_desc, nr_irqs);
> - irq_cfg = xzalloc_array(struct irq_cfg, nr_irqs);
> irq_vector = xzalloc_array(u8, nr_irqs_gsi);
>
> - if ( !irq_desc || !irq_cfg ||! irq_vector )
> + if ( !irq_desc || !irq_vector )
> return -ENOMEM;
>
> for (irq = 0; irq < nr_irqs; irq++) {
> desc = irq_to_desc(irq);
> - cfg = irq_cfg(irq);
> desc->irq = irq;
> - desc->chip_data = cfg;
> init_one_irq_desc(desc);
> - init_one_irq_cfg(cfg);
> + init_one_irq_cfg(&desc->arch);
> }
>
> /* Never allocate the hypercall vector or Linux/BSD fast-trap vector. */
> @@ -384,7 +378,7 @@ static vmask_t *irq_get_used_vector_mask
>
> ret = &global_used_vector_map;
>
> - if ( desc->chip_data->used_vectors )
> + if ( desc->arch.used_vectors )
> {
> printk(XENLOG_INFO "%s: Strange, unassigned irq %d already has
> used_vectors!\n",
> __func__, irq);
> @@ -526,7 +520,7 @@ int assign_irq_vector(int irq)
> {
> int ret;
> unsigned long flags;
> - struct irq_cfg *cfg = &irq_cfg[irq];
> + struct irq_cfg *cfg = irq_cfg(irq);
> struct irq_desc *desc = irq_to_desc(irq);
>
> BUG_ON(irq >= nr_irqs || irq <0);
> @@ -1736,15 +1730,15 @@ int map_domain_pirq(
> setup_msi_handler(desc, msi_desc);
>
> if ( opt_irq_vector_map == OPT_IRQ_VECTOR_MAP_PERDEV
> - && !desc->chip_data->used_vectors )
> + && !desc->arch.used_vectors )
> {
> - desc->chip_data->used_vectors = &pdev->info.used_vectors;
> - if ( desc->chip_data->vector != IRQ_VECTOR_UNASSIGNED )
> + desc->arch.used_vectors = &pdev->info.used_vectors;
> + if ( desc->arch.vector != IRQ_VECTOR_UNASSIGNED )
> {
> - int vector = desc->chip_data->vector;
> - ASSERT(!test_bit(vector, desc->chip_data->used_vectors));
> + int vector = desc->arch.vector;
> + ASSERT(!test_bit(vector, desc->arch.used_vectors));
>
> - set_bit(vector, desc->chip_data->used_vectors);
> + set_bit(vector, desc->arch.used_vectors);
> }
> }
>
> @@ -1858,7 +1852,6 @@ static void dump_irqs(unsigned char key)
> {
> int i, irq, pirq;
> struct irq_desc *desc;
> - struct irq_cfg *cfg;
> irq_guest_action_t *action;
> struct domain *d;
> const struct pirq *info;
> @@ -1870,7 +1863,6 @@ static void dump_irqs(unsigned char key)
> {
>
> desc = irq_to_desc(irq);
> - cfg = desc->chip_data;
>
> if ( !desc->handler || desc->handler == &no_irq_type )
> continue;
> @@ -1881,7 +1873,7 @@ static void dump_irqs(unsigned char key)
> desc->affinity);
> printk(" IRQ:%4d affinity:%s vec:%02x type=%-15s"
> " status=%08x ",
> - irq, keyhandler_scratch, cfg->vector,
> + irq, keyhandler_scratch, desc->arch.vector,
> desc->handler->typename, desc->status);
>
> if ( !(desc->status & IRQ_GUEST) )
> --- a/xen/arch/x86/msi.c
> +++ b/xen/arch/x86/msi.c
> @@ -123,16 +123,15 @@ static void msix_put_fixmap(struct pci_d
> void msi_compose_msg(struct irq_desc *desc, struct msi_msg *msg)
> {
> unsigned dest;
> - struct irq_cfg *cfg = desc->chip_data;
> - int vector = cfg->vector;
> + int vector = desc->arch.vector;
>
> - if ( cpus_empty(cfg->cpu_mask) ) {
> + if ( cpumask_empty(&desc->arch.cpu_mask) ) {
> dprintk(XENLOG_ERR,"%s, compose msi message error!!\n", __func__);
> return;
> }
>
> if ( vector ) {
> - dest = cpu_mask_to_apicid(&cfg->cpu_mask);
> + dest = cpu_mask_to_apicid(&desc->arch.cpu_mask);
>
> msg->address_hi = MSI_ADDR_BASE_HI;
> msg->address_lo =
> @@ -259,7 +258,6 @@ static void set_msi_affinity(struct irq_
> struct msi_msg msg;
> unsigned int dest;
> struct msi_desc *msi_desc = desc->msi_desc;
> - struct irq_cfg *cfg = desc->chip_data;
>
> dest = set_desc_affinity(desc, mask);
> if (dest == BAD_APICID || !msi_desc)
> @@ -271,7 +269,7 @@ static void set_msi_affinity(struct irq_
> read_msi_msg(msi_desc, &msg);
>
> msg.data &= ~MSI_DATA_VECTOR_MASK;
> - msg.data |= MSI_DATA_VECTOR(cfg->vector);
> + msg.data |= MSI_DATA_VECTOR(desc->arch.vector);
> msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
> msg.address_lo |= MSI_ADDR_DEST_ID(dest);
> msg.dest32 = dest;
> --- a/xen/arch/x86/smpboot.c
> +++ b/xen/arch/x86/smpboot.c
> @@ -1010,8 +1010,8 @@ void __init smp_intr_init(void)
> continue;
> irq_vector[irq] = FIRST_HIPRIORITY_VECTOR + seridx + 1;
> per_cpu(vector_irq, cpu)[FIRST_HIPRIORITY_VECTOR + seridx + 1] = irq;
> - irq_cfg[irq].vector = FIRST_HIPRIORITY_VECTOR + seridx + 1;
> - irq_cfg[irq].cpu_mask = cpu_online_map;
> + irq_to_desc(irq)->arch.vector = FIRST_HIPRIORITY_VECTOR + seridx + 1;
> + cpumask_copy(&irq_to_desc(irq)->arch.cpu_mask, &cpu_online_map);
> }
>
> /* IPI for cleanuping vectors after irq move */
> --- a/xen/drivers/passthrough/amd/iommu_init.c
> +++ b/xen/drivers/passthrough/amd/iommu_init.c
> @@ -348,7 +348,6 @@ static void iommu_msi_set_affinity(struc
> struct msi_msg msg;
> unsigned int dest;
> struct amd_iommu *iommu = desc->action->dev_id;
> - struct irq_cfg *cfg = desc->chip_data;
> u16 seg = iommu->seg;
> u8 bus = (iommu->bdf >> 8) & 0xff;
> u8 dev = PCI_SLOT(iommu->bdf & 0xff);
> @@ -363,7 +362,7 @@ static void iommu_msi_set_affinity(struc
> }
>
> memset(&msg, 0, sizeof(msg));
> - msg.data = MSI_DATA_VECTOR(cfg->vector) & 0xff;
> + msg.data = MSI_DATA_VECTOR(desc->arch.vector) & 0xff;
> msg.data |= 1 << 14;
> msg.data |= (INT_DELIVERY_MODE != dest_LowestPrio) ?
> MSI_DATA_DELIVERY_FIXED:
> --- a/xen/drivers/passthrough/vtd/iommu.c
> +++ b/xen/drivers/passthrough/vtd/iommu.c
> @@ -1001,7 +1001,6 @@ static void dma_msi_set_affinity(struct
> unsigned int dest;
> unsigned long flags;
> struct iommu *iommu = desc->action->dev_id;
> - struct irq_cfg *cfg = desc->chip_data;
>
> #ifdef CONFIG_X86
> dest = set_desc_affinity(desc, mask);
> @@ -1011,7 +1010,7 @@ static void dma_msi_set_affinity(struct
> }
>
> memset(&msg, 0, sizeof(msg));
> - msg.data = MSI_DATA_VECTOR(cfg->vector) & 0xff;
> + msg.data = MSI_DATA_VECTOR(desc->arch.vector) & 0xff;
> msg.data |= 1 << 14;
> msg.data |= (INT_DELIVERY_MODE != dest_LowestPrio) ?
> MSI_DATA_DELIVERY_FIXED:
> @@ -1029,7 +1028,7 @@ static void dma_msi_set_affinity(struct
> msg.address_lo |= MSI_ADDR_DEST_ID(dest & 0xff);
> #else
> memset(&msg, 0, sizeof(msg));
> - msg.data = cfg->vector & 0xff;
> + msg.data = desc->arch.vector & 0xff;
> msg.data |= 1 << 14;
> msg.address_lo = (MSI_ADDRESS_HEADER << (MSI_ADDRESS_HEADER_SHIFT + 8));
> msg.address_lo |= MSI_PHYSICAL_MODE << 2;
> --- a/xen/include/asm-ia64/linux-xen/asm/README.origin
> +++ b/xen/include/asm-ia64/linux-xen/asm/README.origin
> @@ -10,6 +10,7 @@ cache.h -> linux/include/asm-ia64/cach
> gcc_intrin.h -> linux/include/asm-ia64/gcc_intrin.h
> ia64regs.h -> linux/include/asm-ia64/ia64regs.h
> io.h -> linux/include/asm-ia64/io.h
> +irq.h -> linux/include/asm-ia64/irq.h
> hw_irq.h -> linux/include/asm-ia64/hw_irq.h
> kregs.h -> linux/include/asm-ia64/kregs.h
> mca_asm.h -> linux/include/asm-ia64/mca_asm.h
> --- /dev/null
> +++ b/xen/include/asm-ia64/linux-xen/asm/irq.h
> @@ -0,0 +1,73 @@
> +#ifndef _ASM_IA64_IRQ_H
> +#define _ASM_IA64_IRQ_H
> +
> +/*
> + * Copyright (C) 1999-2000, 2002 Hewlett-Packard Co
> + * David Mosberger-Tang <davidm@xxxxxxxxxx>
> + * Stephane Eranian <eranian@xxxxxxxxxx>
> + *
> + * 11/24/98 S.Eranian updated TIMER_IRQ and irq_canonicalize
> + * 01/20/99 S.Eranian added keyboard interrupt
> + * 02/29/00 D.Mosberger moved most things into hw_irq.h
> + */
> +
> +#define NR_VECTORS 256
> +#define NR_IRQS 256
> +
> +#ifdef XEN
> +struct irq_cfg {
> +#define arch_irq_desc irq_cfg
> + int vector;
> + cpumask_t cpu_mask;
> +};
> +#endif
> +
> +static __inline__ int
> +irq_canonicalize (int irq)
> +{
> + /*
> + * We do the legacy thing here of pretending that irqs < 16
> + * are 8259 irqs. This really shouldn't be necessary at all,
> + * but we keep it here as serial.c still uses it...
> + */
> + return ((irq == 2) ? 9 : irq);
> +}
> +
> +extern void disable_irq (unsigned int);
> +extern void disable_irq_nosync (unsigned int);
> +extern void enable_irq (unsigned int);
> +extern void set_irq_affinity_info (unsigned int irq, int dest, int redir);
> +
> +#ifdef CONFIG_SMP
> +extern void move_irq(int irq);
> +#else
> +#define move_irq(irq)
> +#endif
> +
> +struct irqaction;
> +struct pt_regs;
> +int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *);
> +
> +extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs
> *regs);
> +
> +#ifdef XEN
> +static inline unsigned int irq_to_vector(int);
> +extern int setup_irq_vector(unsigned int, struct irqaction *);
> +extern void release_irq_vector(unsigned int);
> +extern int request_irq_vector(unsigned int vector,
> + void (*handler)(int, void *, struct cpu_user_regs *),
> + unsigned long irqflags, const char * devname, void *dev_id);
> +
> +#define create_irq(x) assign_irq_vector(AUTO_ASSIGN_IRQ)
> +#define destroy_irq(x) free_irq_vector(x)
> +
> +#define irq_cfg(x) (&irq_desc[x].arch)
> +#define irq_to_desc(x) (&irq_desc[x]
> +
> +#define irq_complete_move(x) do {} \
> + while(!x)
> +
> +#define domain_pirq_to_irq(d, irq) domain_irq_to_vector(d, irq)
> +#endif
> +
> +#endif /* _ASM_IA64_IRQ_H */
> --- a/xen/include/asm-ia64/linux/asm/README.origin
> +++ b/xen/include/asm-ia64/linux/asm/README.origin
> @@ -19,7 +19,6 @@ fpu.h -> linux/include/asm-ia64/fpu.h
> hdreg.h -> linux/include/asm-ia64/hdreg.h
> intrinsics.h -> linux/include/asm-ia64/intrinsics.h
> ioctl.h -> linux/include/asm-ia64/ioctl.h
> -irq.h -> linux/include/asm-ia64/irq.h
> linkage.h -> linux/include/asm-ia64/linkage.h
> machvec_hpsim.h -> linux/include/asm-ia64/machvec_hpsim.h
> mca.h -> linux/include/asm-ia64/mca.h
> --- a/xen/include/asm-ia64/linux/asm/irq.h
> +++ /dev/null
> @@ -1,45 +0,0 @@
> -#ifndef _ASM_IA64_IRQ_H
> -#define _ASM_IA64_IRQ_H
> -
> -/*
> - * Copyright (C) 1999-2000, 2002 Hewlett-Packard Co
> - * David Mosberger-Tang <davidm@xxxxxxxxxx>
> - * Stephane Eranian <eranian@xxxxxxxxxx>
> - *
> - * 11/24/98 S.Eranian updated TIMER_IRQ and irq_canonicalize
> - * 01/20/99 S.Eranian added keyboard interrupt
> - * 02/29/00 D.Mosberger moved most things into hw_irq.h
> - */
> -
> -#define NR_VECTORS 256
> -#define NR_IRQS 256
> -
> -static __inline__ int
> -irq_canonicalize (int irq)
> -{
> - /*
> - * We do the legacy thing here of pretending that irqs < 16
> - * are 8259 irqs. This really shouldn't be necessary at all,
> - * but we keep it here as serial.c still uses it...
> - */
> - return ((irq == 2) ? 9 : irq);
> -}
> -
> -extern void disable_irq (unsigned int);
> -extern void disable_irq_nosync (unsigned int);
> -extern void enable_irq (unsigned int);
> -extern void set_irq_affinity_info (unsigned int irq, int dest, int redir);
> -
> -#ifdef CONFIG_SMP
> -extern void move_irq(int irq);
> -#else
> -#define move_irq(irq)
> -#endif
> -
> -struct irqaction;
> -struct pt_regs;
> -int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *);
> -
> -extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs
> *regs);
> -
> -#endif /* _ASM_IA64_IRQ_H */
> --- a/xen/include/asm-x86/irq.h
> +++ b/xen/include/asm-x86/irq.h
> @@ -21,7 +21,7 @@
> #define LEGACY_VECTOR(irq) ((irq) + FIRST_LEGACY_VECTOR)
>
> #define irq_to_desc(irq) (&irq_desc[irq])
> -#define irq_cfg(irq) (&irq_cfg[irq])
> +#define irq_cfg(irq) (&irq_desc[irq].arch)
>
> typedef struct {
> DECLARE_BITMAP(_bits,NR_VECTORS);
> @@ -30,6 +30,7 @@ typedef struct {
> struct irq_desc;
>
> struct irq_cfg {
> +#define arch_irq_desc irq_cfg
> s16 vector; /* vector itself is only 8 bits, */
> s16 old_vector; /* but we use -1 for unassigned */
> cpumask_t cpu_mask;
> @@ -46,8 +47,6 @@ struct irq_cfg {
>
> #define IRQ_VECTOR_UNASSIGNED (-1)
>
> -extern struct irq_cfg *irq_cfg;
> -
> typedef int vector_irq_t[NR_VECTORS];
> DECLARE_PER_CPU(vector_irq_t, vector_irq);
>
> --- a/xen/include/xen/irq.h
> +++ b/xen/include/xen/irq.h
> @@ -63,7 +63,6 @@ extern unsigned int nr_irqs;
> #endif
>
> struct msi_desc;
> -struct irq_cfg;
> /*
> * This is the "IRQ descriptor", which contains various information
> * about the irq, including what kind of hardware handling it has,
> @@ -74,9 +73,9 @@ typedef struct irq_desc {
> hw_irq_controller *handler;
> struct msi_desc *msi_desc;
> struct irqaction *action; /* IRQ action list */
> - struct irq_cfg *chip_data;
> int irq;
> spinlock_t lock;
> + struct arch_irq_desc arch;
> cpumask_t affinity;
> cpumask_t pending_mask; /* IRQ migration pending mask */
>
> @@ -97,32 +96,6 @@ extern irq_desc_t irq_desc[NR_VECTORS];
>
> #define request_irq(irq, handler, irqflags, devname, devid) \
> request_irq_vector(irq_to_vector(irq), handler, irqflags, devname, devid)
> -
> -static inline unsigned int irq_to_vector(int);
> -extern int setup_irq_vector(unsigned int, struct irqaction *);
> -extern void release_irq_vector(unsigned int);
> -extern int request_irq_vector(unsigned int vector,
> - void (*handler)(int, void *, struct cpu_user_regs *),
> - unsigned long irqflags, const char * devname, void *dev_id);
> -
> -#define create_irq(x) assign_irq_vector(AUTO_ASSIGN_IRQ)
> -#define destroy_irq(x) free_irq_vector(x)
> -
> -#define irq_cfg(x) &irq_cfg[(x)]
> -#define irq_to_desc(x) &irq_desc[(x)]
> -
> -#define irq_complete_move(x) do {} \
> - while(!x)
> -
> -#define domain_pirq_to_irq(d, irq) domain_irq_to_vector(d, irq)
> -
> -struct irq_cfg {
> - int vector;
> - cpumask_t cpu_mask;
> -};
> -
> -extern struct irq_cfg irq_cfg[];
> -
> #else
> extern int setup_irq(unsigned int irq, struct irqaction *);
> extern void release_irq(unsigned int irq);
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
--
Andrew Cooper - Dom0 Kernel Engineer, Citrix XenServer
T: +44 (0)1223 225 900, http://www.citrix.com
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|