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