Blob Blame History Raw

# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1283154997 -3600
# Node ID ab1fb1b8b569ef78ac352a5ff4524d0fae80945a
# Parent 9ff9b57ddddfd3693698ece28ae44542fba6ee0f
Fix bind_irq_vector() destination

The "mask" covered all online cpus in the "domain". It should be used
as destination later, instead of using "domain" directly.

Signed-off-by: Sheng Yang <sheng@linux.intel.com>
xen-unstable: changeset:   3eb5127e4636
xen-unstable: date:        Thu Aug 26 11:16:14 2010 +0100

--- a/xen/arch/x86/irq.c	Mon Aug 30 08:56:07 2010 +0100
+++ b/xen/arch/x86/irq.c	Mon Aug 30 08:56:37 2010 +0100
@@ -90,14 +90,14 @@ static int __bind_irq_vector(int irq, in
     cpus_and(mask, domain, cpu_online_map);
     if (cpus_empty(mask))
         return -EINVAL;
-    if ((cfg->vector == vector) && cpus_equal(cfg->domain, domain))
+    if ((cfg->vector == vector) && cpus_equal(cfg->domain, mask))
         return 0;
     if (cfg->vector != IRQ_VECTOR_UNASSIGNED) 
         return -EBUSY;
     for_each_cpu_mask(cpu, mask)
         per_cpu(vector_irq, cpu)[vector] = irq;
     cfg->vector = vector;
-    cfg->domain = domain;
+    cfg->domain = mask;
     irq_status[irq] = IRQ_USED;
     if (IO_APIC_IRQ(irq))
         irq_vector[irq] = vector;


# HG changeset patch
# User Keir Fraser <keir.fraser@citrix.com>
# Date 1284396688 -3600
# Node ID 965d47d5d7c2e3d97ea1c70c9261ae76e2abf6ac
# Parent 208129cefcb30ae476af9a934008addf04e77cdc
Fix serial interrupt's destination

Lowest Priority can't use with invalid cpu_mask, and the default value
of CPU_MASK_ALL may cover CPU which wasn't online.

From: "Yang, Sheng" <sheng.yang@intel.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen-unstable changeset:   22148:a254d1236c1a
xen-unstable date:        Mon Sep 13 17:37:25 2010 +0100

--- a/xen/arch/x86/smpboot.c	Mon Sep 13 17:50:14 2010 +0100
+++ b/xen/arch/x86/smpboot.c	Mon Sep 13 17:51:28 2010 +0100
@@ -1602,7 +1602,7 @@ void __init smp_intr_init(void)
 		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].domain = (cpumask_t)CPU_MASK_ALL;
+		irq_cfg[irq].domain = cpu_online_map;
 	}
 
 	/* IPI for cleanuping vectors after irq move */