[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 1/2] fold struct irq_cfg into struct irq_desc



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.