WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

To: Jan Beulich <JBeulich@xxxxxxxx>
Subject: Re: [Xen-devel] [PATCH 1/2] fold struct irq_cfg into struct irq_desc
From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Date: Wed, 19 Oct 2011 11:07:20 +0100
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 19 Oct 2011 03:10:19 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4E9E8BA1020000780005C13D@xxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4E9E8BA1020000780005C13D@xxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110921 Lightning/1.0b2 Thunderbird/3.1.15
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

<Prev in Thread] Current Thread [Next in Thread>