x86: correct MSI_ADDR_DEST_ID_MASK
authorJan Beulich <jbeulich@suse.com>
Thu, 15 May 2014 13:27:37 +0000 (15:27 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 15 May 2014 13:27:37 +0000 (15:27 +0200)
This should only cover bits 12-19, in line with MSI_ADDR_DEST_ID_SHIFT.

Also replace a couple of open-coded uses of this shift and mask.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/hvm/irq.c
xen/drivers/passthrough/vtd/intremap.c
xen/drivers/passthrough/vtd/iommu.c
xen/include/asm-x86/msi.h

index 677fbcd548d72472db0a58d341ba6e60956d7f6a..cb34b21e1d22d42f89c369c8535494bedd8953ee 100644 (file)
@@ -283,7 +283,8 @@ void hvm_inject_msi(struct domain *d, uint64_t addr, uint32_t data)
 
     if ( !vector )
     {
-        int pirq = ((addr >> 32) & 0xffffff00) | ((addr >> 12) & 0xff);
+        int pirq = ((addr >> 32) & 0xffffff00) | dest;
+
         if ( pirq > 0 )
         {
             struct pirq *info = pirq_info(d, pirq);
index 2f8b9ebc23affa51e158813fb76f1bf9f3aeeca3..07c6dac80af278191ce991a671fec534260d8e38 100644 (file)
@@ -535,7 +535,7 @@ static int remap_entry_to_msi_msg(
         msg->dest32 = iremap_entry->lo.dst;
     else
         msg->dest32 = (iremap_entry->lo.dst >> 8) & 0xff;
-    msg->address_lo |= (msg->dest32 & 0xff) << MSI_ADDR_DEST_ID_SHIFT;
+    msg->address_lo |= MSI_ADDR_DEST_ID(msg->dest32);
 
     msg->data =
         MSI_DATA_TRIGGER_EDGE |
index 32e2035e216f6e01ea9bb7f205d76c10e9be753d..9a9c1b4d5c9bd5a1170e05696810191132a79014 100644 (file)
@@ -1044,7 +1044,7 @@ static void dma_msi_set_affinity(struct irq_desc *desc, const cpumask_t *mask)
     if (x2apic_enabled)
         msg.address_hi = dest & 0xFFFFFF00;
     msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK;
-    msg.address_lo |= MSI_ADDR_DEST_ID(dest & 0xff);
+    msg.address_lo |= MSI_ADDR_DEST_ID(dest);
     iommu->msi.msg = msg;
 
     spin_lock_irqsave(&iommu->register_lock, flags);
index 1dd0d8cd0d47bc9f8a9f5f59523250dea9f838ac..4c62a3a9fdcfc60b1600b2fc1a6297ab7401ec4a 100644 (file)
@@ -49,7 +49,7 @@
 #define MSI_ADDR_REDIRECTION_LOWPRI (1 << MSI_ADDR_REDIRECTION_SHIFT)
 
 #define MSI_ADDR_DEST_ID_SHIFT         12
-#define         MSI_ADDR_DEST_ID_MASK          0x00ffff0
+#define         MSI_ADDR_DEST_ID_MASK          0x00ff000
 #define  MSI_ADDR_DEST_ID(dest)                (((dest) << MSI_ADDR_DEST_ID_SHIFT) & MSI_ADDR_DEST_ID_MASK)
 
 /* MAX fixed pages reserved for mapping MSIX tables. */