Jan Beulich
2011-Oct-19  06:34 UTC
[Xen-devel] [PATCH 1/2] fold struct irq_cfg into struct irq_desc
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@suse.com>
--- 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@hpl.hp.com>
+ *	Stephane Eranian <eranian@hpl.hp.com>
+ *
+ * 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@hpl.hp.com>
- *	Stephane Eranian <eranian@hpl.hp.com>
- *
- * 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@lists.xensource.com
http://lists.xensource.com/xen-devel
Andrew Cooper
2011-Oct-19  10:07 UTC
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@suse.com>Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>> --- 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@hpl.hp.com> > + * Stephane Eranian <eranian@hpl.hp.com> > + * > + * 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@hpl.hp.com> > - * Stephane Eranian <eranian@hpl.hp.com> > - * > - * 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@lists.xensource.com > 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@lists.xensource.com http://lists.xensource.com/xen-devel