 b01c8b54a1
			
		
	
	
	b01c8b54a1
	
	
	
		
			
			Instead of branching out-of-line with the DO_KVM macro to check if we are in a KVM guest at the time of an interrupt, this moves the KVM check inline in the first-level interrupt handlers. This speeds up the non-KVM case and makes sure that none of the interrupt handlers are missing the check. Because the first-level interrupt handlers are now larger, some things had to be move out of line in exceptions-64s.S. This all necessitated some minor changes to the interrupt entry code in KVM. This also streamlines the book3s_32 KVM test. Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Alexander Graf <agraf@suse.de>
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _ASM_POWERPC_ISERIES_EXCEPTION_H
 | |
| #define _ASM_POWERPC_ISERIES_EXCEPTION_H
 | |
| /*
 | |
|  * Extracted from head_64.S
 | |
|  *
 | |
|  *  PowerPC version
 | |
|  *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
 | |
|  *
 | |
|  *  Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP
 | |
|  *    Copyright (C) 1996 Cort Dougan <cort@cs.nmt.edu>
 | |
|  *  Adapted for Power Macintosh by Paul Mackerras.
 | |
|  *  Low-level exception handlers and MMU support
 | |
|  *  rewritten by Paul Mackerras.
 | |
|  *    Copyright (C) 1996 Paul Mackerras.
 | |
|  *
 | |
|  *  Adapted for 64bit PowerPC by Dave Engebretsen, Peter Bergner, and
 | |
|  *    Mike Corrigan {engebret|bergner|mikejc}@us.ibm.com
 | |
|  *
 | |
|  *  This file contains the low-level support and setup for the
 | |
|  *  PowerPC-64 platform, including trap and interrupt dispatch.
 | |
|  *
 | |
|  *  This program is free software; you can redistribute it and/or
 | |
|  *  modify it under the terms of the GNU General Public License
 | |
|  *  as published by the Free Software Foundation; either version
 | |
|  *  2 of the License, or (at your option) any later version.
 | |
|  */
 | |
| #include <asm/exception-64s.h>
 | |
| 
 | |
| #define EXCEPTION_PROLOG_ISERIES_1					\
 | |
| 	mfmsr	r10;							\
 | |
| 	ld	r12,PACALPPACAPTR(r13);					\
 | |
| 	ld	r11,LPPACASRR0(r12);					\
 | |
| 	ld	r12,LPPACASRR1(r12);					\
 | |
| 	ori	r10,r10,MSR_RI;						\
 | |
| 	mtmsrd	r10,1
 | |
| 
 | |
| #define STD_EXCEPTION_ISERIES(label, area)				\
 | |
| 	.globl label##_iSeries;						\
 | |
| label##_iSeries:							\
 | |
| 	HMT_MEDIUM;							\
 | |
| 	mtspr	SPRN_SPRG_SCRATCH0,r13;	/* save r13 */			\
 | |
| 	EXCEPTION_PROLOG_1(area, NOTEST, 0);				\
 | |
| 	EXCEPTION_PROLOG_ISERIES_1;					\
 | |
| 	b	label##_common
 | |
| 
 | |
| #define MASKABLE_EXCEPTION_ISERIES(label)				\
 | |
| 	.globl label##_iSeries;						\
 | |
| label##_iSeries:							\
 | |
| 	HMT_MEDIUM;							\
 | |
| 	mtspr	SPRN_SPRG_SCRATCH0,r13;	/* save r13 */			\
 | |
| 	EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0);			\
 | |
| 	lbz	r10,PACASOFTIRQEN(r13);					\
 | |
| 	cmpwi	0,r10,0;						\
 | |
| 	beq-	label##_iSeries_masked;					\
 | |
| 	EXCEPTION_PROLOG_ISERIES_1;					\
 | |
| 	b	label##_common;						\
 | |
| 
 | |
| #endif	/* _ASM_POWERPC_ISERIES_EXCEPTION_H */
 |