x86/entry: Convert SMP system vectors to IDTENTRY_SYSVEC
Convert SMP system vectors to IDTENTRY_SYSVEC: - Implement the C entry point with DEFINE_IDTENTRY_SYSVEC - Emit the ASM stub with DECLARE_IDTENTRY_SYSVEC - Remove the ASM idtentries in 64-bit - Remove the BUILD_INTERRUPT entries in 32-bit - Remove the old prototypes No functional change. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Acked-by: Andy Lutomirski <luto@kernel.org> Link: https://lore.kernel.org/r/20200521202119.372234635@linutronix.de
This commit is contained in:
		
							parent
							
								
									db0338eec5
								
							
						
					
					
						commit
						582f919123
					
				| @ -956,11 +956,6 @@ apicinterrupt3 \num \sym \do_sym | ||||
| POP_SECTION_IRQENTRY | ||||
| .endm | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| apicinterrupt3 IRQ_MOVE_CLEANUP_VECTOR		irq_move_cleanup_interrupt	smp_irq_move_cleanup_interrupt | ||||
| apicinterrupt3 REBOOT_VECTOR			reboot_interrupt		smp_reboot_interrupt | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_X86_UV | ||||
| apicinterrupt3 UV_BAU_MESSAGE			uv_bau_message_intr1		uv_bau_message_interrupt | ||||
| #endif | ||||
| @ -984,8 +979,6 @@ apicinterrupt THERMAL_APIC_VECTOR		thermal_interrupt		smp_thermal_interrupt | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| apicinterrupt CALL_FUNCTION_SINGLE_VECTOR	call_function_single_interrupt	smp_call_function_single_interrupt | ||||
| apicinterrupt CALL_FUNCTION_VECTOR		call_function_interrupt		smp_call_function_interrupt | ||||
| apicinterrupt RESCHEDULE_VECTOR			reschedule_interrupt		smp_reschedule_interrupt | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -12,10 +12,6 @@ | ||||
|  */ | ||||
| #ifdef CONFIG_SMP | ||||
| BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR) | ||||
| BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR) | ||||
| BUILD_INTERRUPT(call_function_single_interrupt,CALL_FUNCTION_SINGLE_VECTOR) | ||||
| BUILD_INTERRUPT(irq_move_cleanup_interrupt, IRQ_MOVE_CLEANUP_VECTOR) | ||||
| BUILD_INTERRUPT(reboot_interrupt, REBOOT_VECTOR) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_HAVE_KVM | ||||
|  | ||||
| @ -38,14 +38,9 @@ extern asmlinkage void uv_bau_message_intr1(void); | ||||
| extern asmlinkage void thermal_interrupt(void); | ||||
| extern asmlinkage void reschedule_interrupt(void); | ||||
| 
 | ||||
| extern asmlinkage void irq_move_cleanup_interrupt(void); | ||||
| extern asmlinkage void reboot_interrupt(void); | ||||
| extern asmlinkage void threshold_interrupt(void); | ||||
| extern asmlinkage void deferred_error_interrupt(void); | ||||
| 
 | ||||
| extern asmlinkage void call_function_interrupt(void); | ||||
| extern asmlinkage void call_function_single_interrupt(void); | ||||
| 
 | ||||
| #ifdef	CONFIG_X86_LOCAL_APIC | ||||
| struct irq_data; | ||||
| struct pci_dev; | ||||
|  | ||||
| @ -599,6 +599,13 @@ DECLARE_IDTENTRY_SYSVEC(LOCAL_TIMER_VECTOR,		sysvec_apic_timer_interrupt); | ||||
| DECLARE_IDTENTRY_SYSVEC(X86_PLATFORM_IPI_VECTOR,	sysvec_x86_platform_ipi); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| DECLARE_IDTENTRY_SYSVEC(IRQ_MOVE_CLEANUP_VECTOR,	sysvec_irq_move_cleanup); | ||||
| DECLARE_IDTENTRY_SYSVEC(REBOOT_VECTOR,			sysvec_reboot); | ||||
| DECLARE_IDTENTRY_SYSVEC(CALL_FUNCTION_SINGLE_VECTOR,	sysvec_call_function_single); | ||||
| DECLARE_IDTENTRY_SYSVEC(CALL_FUNCTION_VECTOR,		sysvec_call_function); | ||||
| #endif | ||||
| 
 | ||||
| #undef X86_TRAP_OTHER | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -40,8 +40,6 @@ asmlinkage void smp_threshold_interrupt(struct pt_regs *regs); | ||||
| asmlinkage void smp_deferred_error_interrupt(struct pt_regs *regs); | ||||
| #endif | ||||
| 
 | ||||
| asmlinkage void smp_irq_move_cleanup_interrupt(void); | ||||
| 
 | ||||
| #ifdef CONFIG_VMAP_STACK | ||||
| void __noreturn handle_stack_overflow(const char *message, | ||||
| 				      struct pt_regs *regs, | ||||
|  | ||||
| @ -861,13 +861,13 @@ static void free_moved_vector(struct apic_chip_data *apicd) | ||||
| 	apicd->move_in_progress = 0; | ||||
| } | ||||
| 
 | ||||
| asmlinkage __visible void __irq_entry smp_irq_move_cleanup_interrupt(void) | ||||
| DEFINE_IDTENTRY_SYSVEC(sysvec_irq_move_cleanup) | ||||
| { | ||||
| 	struct hlist_head *clhead = this_cpu_ptr(&cleanup_list); | ||||
| 	struct apic_chip_data *apicd; | ||||
| 	struct hlist_node *tmp; | ||||
| 
 | ||||
| 	entering_ack_irq(); | ||||
| 	ack_APIC_irq(); | ||||
| 	/* Prevent vectors vanishing under us */ | ||||
| 	raw_spin_lock(&vector_lock); | ||||
| 
 | ||||
| @ -892,7 +892,6 @@ asmlinkage __visible void __irq_entry smp_irq_move_cleanup_interrupt(void) | ||||
| 	} | ||||
| 
 | ||||
| 	raw_spin_unlock(&vector_lock); | ||||
| 	exiting_irq(); | ||||
| } | ||||
| 
 | ||||
| static void __send_cleanup_vector(struct apic_chip_data *apicd) | ||||
|  | ||||
| @ -112,11 +112,11 @@ static const __initconst struct idt_data def_idts[] = { | ||||
|  */ | ||||
| static const __initconst struct idt_data apic_idts[] = { | ||||
| #ifdef CONFIG_SMP | ||||
| 	INTG(RESCHEDULE_VECTOR,		reschedule_interrupt), | ||||
| 	INTG(CALL_FUNCTION_VECTOR,	call_function_interrupt), | ||||
| 	INTG(CALL_FUNCTION_SINGLE_VECTOR, call_function_single_interrupt), | ||||
| 	INTG(IRQ_MOVE_CLEANUP_VECTOR,	irq_move_cleanup_interrupt), | ||||
| 	INTG(REBOOT_VECTOR,		reboot_interrupt), | ||||
| 	INTG(RESCHEDULE_VECTOR,			reschedule_interrupt), | ||||
| 	INTG(CALL_FUNCTION_VECTOR,		asm_sysvec_call_function), | ||||
| 	INTG(CALL_FUNCTION_SINGLE_VECTOR,	asm_sysvec_call_function_single), | ||||
| 	INTG(IRQ_MOVE_CLEANUP_VECTOR,		asm_sysvec_irq_move_cleanup), | ||||
| 	INTG(REBOOT_VECTOR,			asm_sysvec_reboot), | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_X86_THERMAL_VECTOR | ||||
|  | ||||
| @ -27,6 +27,7 @@ | ||||
| #include <asm/mmu_context.h> | ||||
| #include <asm/proto.h> | ||||
| #include <asm/apic.h> | ||||
| #include <asm/idtentry.h> | ||||
| #include <asm/nmi.h> | ||||
| #include <asm/mce.h> | ||||
| #include <asm/trace/irq_vectors.h> | ||||
| @ -130,13 +131,11 @@ static int smp_stop_nmi_callback(unsigned int val, struct pt_regs *regs) | ||||
| /*
 | ||||
|  * this function calls the 'stop' function on all other CPUs in the system. | ||||
|  */ | ||||
| 
 | ||||
| asmlinkage __visible void smp_reboot_interrupt(void) | ||||
| DEFINE_IDTENTRY_SYSVEC(sysvec_reboot) | ||||
| { | ||||
| 	ipi_entering_ack_irq(); | ||||
| 	ack_APIC_irq(); | ||||
| 	cpu_emergency_vmxoff(); | ||||
| 	stop_this_cpu(NULL); | ||||
| 	irq_exit(); | ||||
| } | ||||
| 
 | ||||
| static int register_stop_handler(void) | ||||
| @ -227,7 +226,6 @@ __visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs) | ||||
| { | ||||
| 	ack_APIC_irq(); | ||||
| 	inc_irq_stat(irq_resched_count); | ||||
| 	kvm_set_cpu_l1tf_flush_l1d(); | ||||
| 
 | ||||
| 	if (trace_resched_ipi_enabled()) { | ||||
| 		/*
 | ||||
| @ -244,24 +242,22 @@ __visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs) | ||||
| 	scheduler_ipi(); | ||||
| } | ||||
| 
 | ||||
| __visible void __irq_entry smp_call_function_interrupt(struct pt_regs *regs) | ||||
| DEFINE_IDTENTRY_SYSVEC(sysvec_call_function) | ||||
| { | ||||
| 	ipi_entering_ack_irq(); | ||||
| 	ack_APIC_irq(); | ||||
| 	trace_call_function_entry(CALL_FUNCTION_VECTOR); | ||||
| 	inc_irq_stat(irq_call_count); | ||||
| 	generic_smp_call_function_interrupt(); | ||||
| 	trace_call_function_exit(CALL_FUNCTION_VECTOR); | ||||
| 	exiting_irq(); | ||||
| } | ||||
| 
 | ||||
| __visible void __irq_entry smp_call_function_single_interrupt(struct pt_regs *r) | ||||
| DEFINE_IDTENTRY_SYSVEC(sysvec_call_function_single) | ||||
| { | ||||
| 	ipi_entering_ack_irq(); | ||||
| 	ack_APIC_irq(); | ||||
| 	trace_call_function_single_entry(CALL_FUNCTION_SINGLE_VECTOR); | ||||
| 	inc_irq_stat(irq_call_count); | ||||
| 	generic_smp_call_function_single_interrupt(); | ||||
| 	trace_call_function_single_exit(CALL_FUNCTION_SINGLE_VECTOR); | ||||
| 	exiting_irq(); | ||||
| } | ||||
| 
 | ||||
| static int __init nonmi_ipi_setup(char *str) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user