1 /* two abstractions specific to kernel/smpboot.c, mainly to cater to visws 2 * which needs to alter them. */ 3 smpboot_clear_io_apic_irqs(void)4static inline void smpboot_clear_io_apic_irqs(void) 5 { 6 #ifdef CONFIG_X86_IO_APIC 7 io_apic_irqs = 0; 8 #endif 9 } 10 smpboot_setup_warm_reset_vector(unsigned long start_eip)11static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) 12 { 13 CMOS_WRITE(0xa, 0xf); 14 local_flush_tlb(); 15 pr_debug("1.\n"); 16 *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) = 17 start_eip >> 4; 18 pr_debug("2.\n"); 19 *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) = 20 start_eip & 0xf; 21 pr_debug("3.\n"); 22 } 23 smpboot_restore_warm_reset_vector(void)24static inline void smpboot_restore_warm_reset_vector(void) 25 { 26 /* 27 * Install writable page 0 entry to set BIOS data area. 28 */ 29 local_flush_tlb(); 30 31 /* 32 * Paranoid: Set warm reset code and vector here back 33 * to default values. 34 */ 35 CMOS_WRITE(0, 0xf); 36 37 *((volatile long *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) = 0; 38 } 39 smpboot_setup_io_apic(void)40static inline void __init smpboot_setup_io_apic(void) 41 { 42 #ifdef CONFIG_X86_IO_APIC 43 /* 44 * Here we can be sure that there is an IO-APIC in the system. Let's 45 * go and set it up: 46 */ 47 if (!skip_ioapic_setup && nr_ioapics) 48 setup_IO_APIC(); 49 else { 50 nr_ioapics = 0; 51 localise_nmi_watchdog(); 52 } 53 #endif 54 } 55 smpboot_clear_io_apic(void)56static inline void smpboot_clear_io_apic(void) 57 { 58 #ifdef CONFIG_X86_IO_APIC 59 nr_ioapics = 0; 60 #endif 61 } 62