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

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

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 1/2] fold struct irq_cfg into struct irq_desc
From: "Jan Beulich" <JBeulich@xxxxxxxx>
Date: Wed, 19 Oct 2011 07:34:40 +0100
Delivery-date: Tue, 18 Oct 2011 23:36:41 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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>

--- 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

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