x2apic_phys.c revision 9ebd680bd029a9fc47399ca61c950f8b6730ac40
12d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <linux/threads.h>
22d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <linux/cpumask.h>
32d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <linux/string.h>
42d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <linux/kernel.h>
52d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <linux/ctype.h>
62d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <linux/init.h>
71b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu#include <linux/dmar.h>
81b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu
92d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha#include <asm/smp.h>
107b6aa335ca1a845c2262ec7a595b4521bca0f79dIngo Molnar#include <asm/apic.h>
11c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu#include <asm/ipi.h>
122d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
13ef1f87aa7ba6224bef1b750b3272ba281d8f43edSuresh Siddhaint x2apic_phys;
141b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu
151b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lustatic int set_x2apic_phys_mode(char *arg)
161b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu{
171b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu	x2apic_phys = 1;
181b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu	return 0;
191b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu}
201b9b89e7f163336ad84200b66a17284dbf26acedYinghai Luearly_param("x2apic_phys", set_x2apic_phys_mode);
211b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu
223cfba0892585d4c8e7b4122b5dc0d206a76936deMarcin Slusarzstatic int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
231b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu{
24ef1f87aa7ba6224bef1b750b3272ba281d8f43edSuresh Siddha	if (x2apic_phys)
25ef1f87aa7ba6224bef1b750b3272ba281d8f43edSuresh Siddha		return x2apic_enabled();
26ef1f87aa7ba6224bef1b750b3272ba281d8f43edSuresh Siddha	else
27ef1f87aa7ba6224bef1b750b3272ba281d8f43edSuresh Siddha		return 0;
281b9b89e7f163336ad84200b66a17284dbf26acedYinghai Lu}
292d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
30087d7e56deffb611a098e7e257388a41edbeef1fYinghai Lu/*
31087d7e56deffb611a098e7e257388a41edbeef1fYinghai Lu * need to use more than cpu 0, because we need more vectors when
32087d7e56deffb611a098e7e257388a41edbeef1fYinghai Lu * MSI-X are used.
33087d7e56deffb611a098e7e257388a41edbeef1fYinghai Lu */
34bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travisstatic const struct cpumask *x2apic_target_cpus(void)
352d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
36087d7e56deffb611a098e7e257388a41edbeef1fYinghai Lu	return cpu_online_mask;
372d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
382d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
39bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travisstatic void x2apic_vector_allocation_domain(int cpu, struct cpumask *retmask)
402d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
41bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travis	cpumask_clear(retmask);
42bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travis	cpumask_set_cpu(cpu, retmask);
432d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
442d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
452d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddhastatic void __x2apic_send_IPI_dest(unsigned int apicid, int vector,
462d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha				   unsigned int dest)
472d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
482d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	unsigned long cfg;
492d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
502d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	cfg = __prepare_ICR(0, vector, dest);
512d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
522d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	/*
532d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	 * send the IPI.
542d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	 */
55c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	native_x2apic_icr_write(cfg, apicid);
562d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
572d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
58bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travisstatic void x2apic_send_IPI_mask(const struct cpumask *mask, int vector)
592d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
602d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	unsigned long query_cpu;
61dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	unsigned long flags;
622d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
63ce4e240c279a31096f74afa6584a62d64a1ba8c8Suresh Siddha	x2apic_wrmsr_fence();
64ce4e240c279a31096f74afa6584a62d64a1ba8c8Suresh Siddha
652d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	local_irq_save(flags);
66bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travis	for_each_cpu(query_cpu, mask) {
672d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha		__x2apic_send_IPI_dest(per_cpu(x86_cpu_to_apicid, query_cpu),
682d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha				       vector, APIC_DEST_PHYSICAL);
692d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	}
702d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	local_irq_restore(flags);
712d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
722d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
73dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnarstatic void
74dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar x2apic_send_IPI_mask_allbutself(const struct cpumask *mask, int vector)
752d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
76e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	unsigned long this_cpu = smp_processor_id();
77dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	unsigned long query_cpu;
78dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	unsigned long flags;
79e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis
80ce4e240c279a31096f74afa6584a62d64a1ba8c8Suresh Siddha	x2apic_wrmsr_fence();
81ce4e240c279a31096f74afa6584a62d64a1ba8c8Suresh Siddha
82e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	local_irq_save(flags);
83bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travis	for_each_cpu(query_cpu, mask) {
84e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis		if (query_cpu != this_cpu)
85e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis			__x2apic_send_IPI_dest(
86e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis				per_cpu(x86_cpu_to_apicid, query_cpu),
87e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis				vector, APIC_DEST_PHYSICAL);
88e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	}
89e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	local_irq_restore(flags);
90e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis}
912d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
92e7986739a76cde5079da08809d8bbc6878387ae0Mike Travisstatic void x2apic_send_IPI_allbutself(int vector)
93e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis{
94e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	unsigned long this_cpu = smp_processor_id();
95dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	unsigned long query_cpu;
96dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	unsigned long flags;
972d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
98ce4e240c279a31096f74afa6584a62d64a1ba8c8Suresh Siddha	x2apic_wrmsr_fence();
99ce4e240c279a31096f74afa6584a62d64a1ba8c8Suresh Siddha
100e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	local_irq_save(flags);
101dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	for_each_online_cpu(query_cpu) {
102dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar		if (query_cpu == this_cpu)
103dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar			continue;
104dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar		__x2apic_send_IPI_dest(per_cpu(x86_cpu_to_apicid, query_cpu),
105dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar				       vector, APIC_DEST_PHYSICAL);
106dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	}
107e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	local_irq_restore(flags);
1082d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1092d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
1102d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddhastatic void x2apic_send_IPI_all(int vector)
1112d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
112bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travis	x2apic_send_IPI_mask(cpu_online_mask, vector);
1132d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1142d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
1152d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddhastatic int x2apic_apic_id_registered(void)
1162d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
1172d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	return 1;
1182d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1192d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
120bcda016eddd7a8b374bb371473c821a91ff1d8ccMike Travisstatic unsigned int x2apic_cpu_mask_to_apicid(const struct cpumask *cpumask)
1212d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
1222d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	/*
1232d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	 * We're using fixed IRQ delivery, can only return one phys APIC ID.
1242d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	 * May as well be the first.
1252d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	 */
126debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnar	int cpu = cpumask_first(cpumask);
127debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnar
128e7986739a76cde5079da08809d8bbc6878387ae0Mike Travis	if ((unsigned)cpu < nr_cpu_ids)
1292d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha		return per_cpu(x86_cpu_to_apicid, cpu);
1302d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	else
1312d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha		return BAD_APICID;
1322d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1332d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
134debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnarstatic unsigned int
135debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnarx2apic_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
136debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnar			      const struct cpumask *andmask)
13795d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis{
13895d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis	int cpu;
13995d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis
14095d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis	/*
14195d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis	 * We're using fixed IRQ delivery, can only return one phys APIC ID.
14295d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis	 * May as well be the first.
14395d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis	 */
144debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnar	for_each_cpu_and(cpu, cpumask, andmask) {
145a775a38b1353161a6d7af86b667d6523c12c1a37Mike Travis		if (cpumask_test_cpu(cpu, cpu_online_mask))
146a775a38b1353161a6d7af86b667d6523c12c1a37Mike Travis			break;
147debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnar	}
148debccb3e77be52cfc26c5a99e123c114c5c72aebIngo Molnar
14918374d89e5fe96772102f44f535efb1198d9be08Suresh Siddha	return per_cpu(x86_cpu_to_apicid, cpu);
15095d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis}
15195d313cf1c1ecedc8bec5727b09bdacbf67dfc45Mike Travis
152ca6c8ed4646f8ccaa4f7db618bf69b8b8fb49767Ingo Molnarstatic unsigned int x2apic_phys_get_apic_id(unsigned long x)
153f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lu{
154dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	return x;
155f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lu}
156f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lu
157f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lustatic unsigned long set_apic_id(unsigned int id)
158f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lu{
159dac5f4121df3c39fdb2ea57acd669a0ae19e46f8Ingo Molnar	return id;
160f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lu}
161f910a9dc7c865896815e2a95fe33363e9522f277Yinghai Lu
162d4c9a9f3d416cfa1f5ffbe09d864d069467fe693Ingo Molnarstatic int x2apic_phys_pkg_id(int initial_apicid, int index_msb)
1632d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
164d8c7eb34c2db6268909ae8c3958be63bde254292Yinghai Lu	return initial_apicid >> index_msb;
1652d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1662d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
1674d08d97f5262dab4482af5bc91b30af4ca02269eJaswinder Singh Rajputstatic void x2apic_send_IPI_self(int vector)
1682d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
1692d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha	apic_write(APIC_SELF_IPI, vector);
1702d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1712d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
1724d08d97f5262dab4482af5bc91b30af4ca02269eJaswinder Singh Rajputstatic void init_x2apic_ldr(void)
1732d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha{
1742d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha}
1752d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha
1769ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddhastatic int x2apic_phys_probe(void)
1779ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha{
1789ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha	if (x2apic_mode && x2apic_phys)
1799ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha		return 1;
1809ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha
1819ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha	return apic == &apic_x2apic_phys;
1829ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha}
1839ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha
184be163a159b223e94b3180afdd47a8d468eb9a492Ingo Molnarstruct apic apic_x2apic_phys = {
18505c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
18605c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.name				= "physical x2apic",
1879ebd680bd029a9fc47399ca61c950f8b6730ac40Suresh Siddha	.probe				= x2apic_phys_probe,
18805c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.acpi_madt_oem_check		= x2apic_acpi_madt_oem_check,
18905c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.apic_id_registered		= x2apic_apic_id_registered,
19005c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
191f8987a1093cc7a896137e264c24e04d4048e9f95Ingo Molnar	.irq_delivery_mode		= dest_Fixed,
1920b06e734bff7554c31eac4aad2fc9be4adb7c1c1Ingo Molnar	.irq_dest_mode			= 0, /* physical */
19305c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
19405c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.target_cpus			= x2apic_target_cpus,
19508125d3edab90644724652eedec3e219e3e0f2e7Ingo Molnar	.disable_esr			= 0,
196bdb1a9b62fc182d4da3143e346f7a0925d243352Ingo Molnar	.dest_logical			= 0,
19705c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.check_apicid_used		= NULL,
19805c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.check_apicid_present		= NULL,
19905c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
20005c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.vector_allocation_domain	= x2apic_vector_allocation_domain,
20105c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.init_apic_ldr			= init_x2apic_ldr,
20205c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
20305c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.ioapic_phys_id_map		= NULL,
20405c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.setup_apic_routing		= NULL,
20505c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.multi_timer_check		= NULL,
206a21769a4461801454930a06bc18bd8249cd9e993Ingo Molnar	.cpu_present_to_apicid		= default_cpu_present_to_apicid,
20705c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.apicid_to_cpu_present		= NULL,
20805c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.setup_portio_remap		= NULL,
209a27a621001f4c3e57caf47feff4b014577fd01c6Ingo Molnar	.check_phys_apicid_present	= default_check_phys_apicid_present,
21005c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.enable_apic_mode		= NULL,
211d4c9a9f3d416cfa1f5ffbe09d864d069467fe693Ingo Molnar	.phys_pkg_id			= x2apic_phys_pkg_id,
21205c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.mps_oem_check			= NULL,
21305c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
214ca6c8ed4646f8ccaa4f7db618bf69b8b8fb49767Ingo Molnar	.get_apic_id			= x2apic_phys_get_apic_id,
21505c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.set_apic_id			= set_apic_id,
21605c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.apic_id_mask			= 0xFFFFFFFFu,
21705c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
21805c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.cpu_mask_to_apicid		= x2apic_cpu_mask_to_apicid,
21905c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.cpu_mask_to_apicid_and		= x2apic_cpu_mask_to_apicid_and,
22005c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
22105c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.send_IPI_mask			= x2apic_send_IPI_mask,
22205c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.send_IPI_mask_allbutself	= x2apic_send_IPI_mask_allbutself,
22305c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.send_IPI_allbutself		= x2apic_send_IPI_allbutself,
22405c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.send_IPI_all			= x2apic_send_IPI_all,
22505c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.send_IPI_self			= x2apic_send_IPI_self,
22605c155c235c757329ec89ad591516538ed8352c0Ingo Molnar
227abfa584c8df8b691cf18f51c7d4af27e5b32be4aIngo Molnar	.trampoline_phys_low		= DEFAULT_TRAMPOLINE_PHYS_LOW,
228abfa584c8df8b691cf18f51c7d4af27e5b32be4aIngo Molnar	.trampoline_phys_high		= DEFAULT_TRAMPOLINE_PHYS_HIGH,
22905c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.wait_for_init_deassert		= NULL,
23005c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.smp_callin_clear_local_apic	= NULL,
23105c155c235c757329ec89ad591516538ed8352c0Ingo Molnar	.inquire_remote_apic		= NULL,
232c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu
233c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	.read				= native_apic_msr_read,
234c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	.write				= native_apic_msr_write,
235c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	.icr_read			= native_x2apic_icr_read,
236c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	.icr_write			= native_x2apic_icr_write,
237c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	.wait_icr_idle			= native_x2apic_wait_icr_idle,
238c1eeb2de41d7015678bdd412b48a5f071b84e29aYinghai Lu	.safe_wait_icr_idle		= native_safe_x2apic_wait_icr_idle,
2392d9579a124d746a3e0e0ba45e57d80800ee80807Suresh Siddha};
240