673b189a2e
This uses feature sections to arrange that we always use HSPRG1 as the scratch register in the interrupt entry code rather than SPRG2 when we're running in hypervisor mode on POWER7. This will ensure that we don't trash the guest's SPRG2 when we are running KVM guests. To simplify the code, we define GET_SCRATCH0() and SET_SCRATCH0() macros like the GET_PACA/SET_PACA macros. Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
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); \
|
|
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); \
|
|
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 */
|