aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/genx2apic_uv_x.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/genx2apic_uv_x.c')
-rw-r--r--arch/x86/kernel/genx2apic_uv_x.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/arch/x86/kernel/genx2apic_uv_x.c b/arch/x86/kernel/genx2apic_uv_x.c
index c915f750241e..3ca29cd8c23c 100644
--- a/arch/x86/kernel/genx2apic_uv_x.c
+++ b/arch/x86/kernel/genx2apic_uv_x.c
@@ -139,16 +139,31 @@ static unsigned int uv_cpu_mask_to_apicid(cpumask_t cpumask)
139 return BAD_APICID; 139 return BAD_APICID;
140} 140}
141 141
142static unsigned int uv_read_apic_id(void) 142static unsigned int get_apic_id(unsigned long x)
143{ 143{
144 unsigned int id; 144 unsigned int id;
145 145
146 WARN_ON(preemptible() && num_online_cpus() > 1); 146 WARN_ON(preemptible() && num_online_cpus() > 1);
147 id = apic_read(APIC_ID) | __get_cpu_var(x2apic_extra_bits); 147 id = x | __get_cpu_var(x2apic_extra_bits);
148 148
149 return id; 149 return id;
150} 150}
151 151
152static long set_apic_id(unsigned int id)
153{
154 unsigned long x;
155
156 /* maskout x2apic_extra_bits ? */
157 x = id;
158 return x;
159}
160
161static unsigned int uv_read_apic_id(void)
162{
163
164 return get_apic_id(apic_read(APIC_ID));
165}
166
152static unsigned int phys_pkg_id(int index_msb) 167static unsigned int phys_pkg_id(int index_msb)
153{ 168{
154 return uv_read_apic_id() >> index_msb; 169 return uv_read_apic_id() >> index_msb;
@@ -175,7 +190,9 @@ struct genapic apic_x2apic_uv_x = {
175 /* ZZZ.send_IPI_self = uv_send_IPI_self, */ 190 /* ZZZ.send_IPI_self = uv_send_IPI_self, */
176 .cpu_mask_to_apicid = uv_cpu_mask_to_apicid, 191 .cpu_mask_to_apicid = uv_cpu_mask_to_apicid,
177 .phys_pkg_id = phys_pkg_id, /* Fixme ZZZ */ 192 .phys_pkg_id = phys_pkg_id, /* Fixme ZZZ */
178 .read_apic_id = uv_read_apic_id, 193 .get_apic_id = get_apic_id,
194 .set_apic_id = set_apic_id,
195 .apic_id_mask = (0xFFFFFFFFu),
179}; 196};
180 197
181static __cpuinit void set_x2apic_extra_bits(int pnode) 198static __cpuinit void set_x2apic_extra_bits(int pnode)