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

[Xen-changelog] [xen-unstable] ia64: Fix ia64 build issue introduced by

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] ia64: Fix ia64 build issue introduced by per-cpu vector changes.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 21 Aug 2009 09:20:29 -0700
Delivery-date: Fri, 21 Aug 2009 09:20:44 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1250871234 -3600
# Node ID 6e83b0ec2d70dca1538216d967dc5448a580191c
# Parent  5a23b38b970d0eb5b7909a9fa2890946670c1d03
ia64: Fix ia64 build issue introduced by per-cpu vector changes.

ia64 has no per-cpu vector support, so change the related APIs back
through defining macros.

Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
---
 xen/arch/ia64/xen/irq.c               |   14 +++++++++++++
 xen/drivers/passthrough/vtd/iommu.c   |   13 +++++++++++-
 xen/drivers/passthrough/vtd/x86/vtd.c |    1 
 xen/include/asm-ia64/msi.h            |   10 +++++++++
 xen/include/xen/irq.h                 |   36 +++++++++++++++++++++++++---------
 5 files changed, 64 insertions(+), 10 deletions(-)

diff -r 5a23b38b970d -r 6e83b0ec2d70 xen/arch/ia64/xen/irq.c
--- a/xen/arch/ia64/xen/irq.c   Fri Aug 21 17:13:17 2009 +0100
+++ b/xen/arch/ia64/xen/irq.c   Fri Aug 21 17:13:54 2009 +0100
@@ -80,6 +80,13 @@ irq_desc_t irq_desc[NR_IRQS] = {
                .handler = &no_irq_type,
                .lock = SPIN_LOCK_UNLOCKED
        }
+};
+
+struct irq_cfg irq_cfg[NR_IRQS] = {
+    [0 ... NR_IRQS-1] ={
+        .vector = -1,
+        .domain = CPU_MASK_ALL,
+}
 };
 
 void __do_IRQ_guest(int irq);
@@ -233,6 +240,7 @@ 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
@@ -250,6 +258,8 @@ 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;
        spin_unlock_irqrestore(&desc->lock,flags);
 
        return 0;
@@ -275,11 +285,13 @@ void release_irq_vector(unsigned int vec
 {
        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);
@@ -287,6 +299,8 @@ void release_irq_vector(unsigned int vec
        desc->depth = 1;
        desc->status |= IRQ_DISABLED;
        desc->handler->shutdown(vec);
+    desc->chip_data = NULL;
+    cfg->vector = -1;
        spin_unlock_irqrestore(&desc->lock, flags);
 
        while (desc->status & IRQ_INPROGRESS)
diff -r 5a23b38b970d -r 6e83b0ec2d70 xen/drivers/passthrough/vtd/iommu.c
--- a/xen/drivers/passthrough/vtd/iommu.c       Fri Aug 21 17:13:17 2009 +0100
+++ b/xen/drivers/passthrough/vtd/iommu.c       Fri Aug 21 17:13:54 2009 +0100
@@ -827,12 +827,13 @@ static void dma_msi_set_affinity(unsigne
     struct irq_cfg *cfg = desc->chip_data;
 
     spin_lock_irqsave(&iommu->register_lock, flags);
+#ifdef CONFIG_X86
     dest = set_desc_affinity(desc, mask);
     if (dest == BAD_APICID){
         gdprintk(XENLOG_ERR VTDPREFIX, "Set iommu interrupt affinity 
error!\n");
         return;
     }
-    
+
     memset(&msg, 0, sizeof(msg)); 
     msg.data = MSI_DATA_VECTOR(cfg->vector) & 0xff;
     msg.data |= 1 << 14;
@@ -850,6 +851,16 @@ static void dma_msi_set_affinity(unsigne
                     MSI_ADDR_REDIRECTION_CPU:
                     MSI_ADDR_REDIRECTION_LOWPRI;
     msg.address_lo |= MSI_ADDR_DEST_ID(dest & 0xff);
+#else
+    memset(&msg, 0, sizeof(msg));
+    msg.data = cfg->vector & 0xff;
+    msg.data |= 1 << 14;
+    msg.address_lo = (MSI_ADDRESS_HEADER << (MSI_ADDRESS_HEADER_SHIFT + 8));
+    msg.address_lo |= MSI_PHYSICAL_MODE << 2;
+    msg.address_lo |= MSI_REDIRECTION_HINT_MODE << 3;
+    dest = cpu_physical_id(first_cpu(mask));
+    msg.address_lo |= dest << MSI_TARGET_CPU_SHIFT;
+#endif
 
     dmar_writel(iommu->reg, DMAR_FEDATA_REG, msg.data);
     dmar_writel(iommu->reg, DMAR_FEADDR_REG, msg.address_lo);
diff -r 5a23b38b970d -r 6e83b0ec2d70 xen/drivers/passthrough/vtd/x86/vtd.c
--- a/xen/drivers/passthrough/vtd/x86/vtd.c     Fri Aug 21 17:13:17 2009 +0100
+++ b/xen/drivers/passthrough/vtd/x86/vtd.c     Fri Aug 21 17:13:54 2009 +0100
@@ -161,3 +161,4 @@ void iommu_set_dom0_mapping(struct domai
             iommu_map_page(d, (i*tmp+j), (i*tmp+j));
     }
 }
+
diff -r 5a23b38b970d -r 6e83b0ec2d70 xen/include/asm-ia64/msi.h
--- a/xen/include/asm-ia64/msi.h        Fri Aug 21 17:13:17 2009 +0100
+++ b/xen/include/asm-ia64/msi.h        Fri Aug 21 17:13:54 2009 +0100
@@ -17,4 +17,14 @@
 #define MSI_LOGICAL_MODE               1
 #define MSI_REDIRECTION_HINT_MODE      0
 
+#define MSI_DATA_VECTOR_SHIFT          0
+#define  MSI_DATA_VECTOR_MASK          0x000000ff
+#define         MSI_DATA_VECTOR(v)             (((v) << MSI_DATA_VECTOR_SHIFT) 
& MSI_DATA_VECTOR_MASK)
+
+struct msi_msg {
+       u32     address_lo;     /* low 32 bits of msi message address */
+       u32     address_hi;     /* high 32 bits of msi message address */
+       u32     data;           /* 16 bits of msi message data */
+};
+
 #endif /* __ASM_MSI_H */
diff -r 5a23b38b970d -r 6e83b0ec2d70 xen/include/xen/irq.h
--- a/xen/include/xen/irq.h     Fri Aug 21 17:13:17 2009 +0100
+++ b/xen/include/xen/irq.h     Fri Aug 21 17:13:54 2009 +0100
@@ -50,6 +50,7 @@ typedef struct hw_interrupt_type hw_irq_
 #include <asm/irq.h>
 
 #ifdef NR_IRQS
+# define nr_irqs NR_IRQS
 # define nr_irqs_gsi NR_IRQS
 #else
 extern unsigned int nr_irqs_gsi;
@@ -57,6 +58,7 @@ 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,
@@ -70,9 +72,7 @@ typedef struct irq_desc{
     struct msi_desc   *msi_desc;
     struct irqaction *action;  /* IRQ action list */
     unsigned int depth;                /* nested irq disables */
-#if defined(__i386__) || defined(__x86_64__)
     struct irq_cfg *chip_data;
-#endif
     int irq;
     spinlock_t lock;
     cpumask_t affinity;
@@ -82,13 +82,35 @@ extern irq_desc_t irq_desc[NR_VECTORS];
 extern irq_desc_t irq_desc[NR_VECTORS];
 
 #define setup_irq(irq, action) \
-    setup_irq_vector(irq_to_vector(irq), action)
+    setup_irq_vector(irq, action)
 
 #define release_irq(irq) \
-    release_irq_vector(irq_to_vector(irq))
+    release_irq_vector(irq)
 
 #define request_irq(irq, handler, irqflags, devname, devid) \
-    request_irq_vector(irq_to_vector(irq), handler, irqflags, devname, devid)
+    request_irq_vector(irq, handler, irqflags, devname, devid)
+
+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 domain;
+};
+
+extern struct irq_cfg irq_cfg[];
 
 #else
 extern struct irq_desc *irq_desc;
@@ -119,11 +141,7 @@ static inline void set_native_irq_info(u
 
 static inline void set_irq_info(int irq, cpumask_t mask)
 {
-#if defined(__i386__) || defined(__x86_64__)
     set_native_irq_info(irq, mask);
-#else
-    set_native_irq_info(irq_to_vector(irq), mask);
-#endif
 }
 
 unsigned int set_desc_affinity(struct irq_desc *desc, cpumask_t mask);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] ia64: Fix ia64 build issue introduced by per-cpu vector changes., Xen patchbot-unstable <=