aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic/x2apic_cluster.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/apic/x2apic_cluster.c')
-rw-r--r--arch/x86/kernel/apic/x2apic_cluster.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
index 612622c47df..5f86f79335f 100644
--- a/arch/x86/kernel/apic/x2apic_cluster.c
+++ b/arch/x86/kernel/apic/x2apic_cluster.c
@@ -96,24 +96,26 @@ static void x2apic_send_IPI_all(int vector)
96 __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLINC); 96 __x2apic_send_IPI_mask(cpu_online_mask, vector, APIC_DEST_ALLINC);
97} 97}
98 98
99static unsigned int x2apic_cpu_mask_to_apicid(const struct cpumask *cpumask) 99static int
100x2apic_cpu_mask_to_apicid(const struct cpumask *cpumask, unsigned int *apicid)
100{ 101{
101 int cpu = cpumask_first(cpumask); 102 int cpu = cpumask_first(cpumask);
102 u32 dest = 0;
103 int i; 103 int i;
104 104
105 if (cpu > nr_cpu_ids) 105 if (cpu >= nr_cpu_ids)
106 return BAD_APICID; 106 return -EINVAL;
107 107
108 *apicid = 0;
108 for_each_cpu_and(i, cpumask, per_cpu(cpus_in_cluster, cpu)) 109 for_each_cpu_and(i, cpumask, per_cpu(cpus_in_cluster, cpu))
109 dest |= per_cpu(x86_cpu_to_logical_apicid, i); 110 *apicid |= per_cpu(x86_cpu_to_logical_apicid, i);
110 111
111 return dest; 112 return 0;
112} 113}
113 114
114static unsigned int 115static int
115x2apic_cpu_mask_to_apicid_and(const struct cpumask *cpumask, 116x2apic_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
116 const struct cpumask *andmask) 117 const struct cpumask *andmask,
118 unsigned int *apicid)
117{ 119{
118 u32 dest = 0; 120 u32 dest = 0;
119 u16 cluster; 121 u16 cluster;
@@ -128,7 +130,7 @@ x2apic_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
128 } 130 }
129 131
130 if (!dest) 132 if (!dest)
131 return BAD_APICID; 133 return -EINVAL;
132 134
133 for_each_cpu_and(i, cpumask, andmask) { 135 for_each_cpu_and(i, cpumask, andmask) {
134 if (!cpumask_test_cpu(i, cpu_online_mask)) 136 if (!cpumask_test_cpu(i, cpu_online_mask))
@@ -138,7 +140,9 @@ x2apic_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
138 dest |= per_cpu(x86_cpu_to_logical_apicid, i); 140 dest |= per_cpu(x86_cpu_to_logical_apicid, i);
139 } 141 }
140 142
141 return dest; 143 *apicid = dest;
144
145 return 0;
142} 146}
143 147
144static void init_x2apic_ldr(void) 148static void init_x2apic_ldr(void)