Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 177339d7 authored by Paul Mackerras's avatar Paul Mackerras Committed by Avi Kivity
Browse files

KVM: PPC: Assemble book3s{,_hv}_rmhandlers.S separately



This makes arch/powerpc/kvm/book3s_rmhandlers.S and
arch/powerpc/kvm/book3s_hv_rmhandlers.S be assembled as
separate compilation units rather than having them #included in
arch/powerpc/kernel/exceptions-64s.S.  We no longer have any
conditional branches between the exception prologs in
exceptions-64s.S and the KVM handlers, so there is no need to
keep their contents close together in the vmlinux image.

In their current location, they are using up part of the limited
space between the first-level interrupt handlers and the firmware
NMI data area at offset 0x7000, and with some kernel configurations
this area will overflow (e.g. allyesconfig), leading to an
"attempt to .org backwards" error when compiling exceptions-64s.S.

Moving them out requires that we add some #includes that the
book3s_{,hv_}rmhandlers.S code was previously getting implicitly
via exceptions-64s.S.

Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
parent af8f38b3
Loading
Loading
Loading
Loading
+0 −10
Original line number Original line Diff line number Diff line
@@ -427,16 +427,6 @@ slb_miss_user_pseries:
	b	.				/* prevent spec. execution */
	b	.				/* prevent spec. execution */
#endif /* __DISABLED__ */
#endif /* __DISABLED__ */


/* KVM's trampoline code needs to be close to the interrupt handlers */

#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
#ifdef CONFIG_KVM_BOOK3S_PR
#include "../kvm/book3s_rmhandlers.S"
#else
#include "../kvm/book3s_hv_rmhandlers.S"
#endif
#endif

	.align	7
	.align	7
	.globl	__end_interrupts
	.globl	__end_interrupts
__end_interrupts:
__end_interrupts:
+3 −0
Original line number Original line Diff line number Diff line
@@ -50,12 +50,15 @@ kvm-book3s_64-objs-$(CONFIG_KVM_BOOK3S_64_PR) := \
	book3s_64_mmu_host.o \
	book3s_64_mmu_host.o \
	book3s_64_mmu.o \
	book3s_64_mmu.o \
	book3s_32_mmu.o
	book3s_32_mmu.o
kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_PR) := \
	book3s_rmhandlers.o


kvm-book3s_64-objs-$(CONFIG_KVM_BOOK3S_64_HV) := \
kvm-book3s_64-objs-$(CONFIG_KVM_BOOK3S_64_HV) := \
	book3s_hv.o \
	book3s_hv.o \
	book3s_hv_interrupts.o \
	book3s_hv_interrupts.o \
	book3s_64_mmu_hv.o
	book3s_64_mmu_hv.o
kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HV) := \
kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HV) := \
	book3s_hv_rmhandlers.o \
	book3s_hv_rm_mmu.o \
	book3s_hv_rm_mmu.o \
	book3s_64_vio_hv.o \
	book3s_64_vio_hv.o \
	book3s_hv_builtin.o
	book3s_hv_builtin.o
+3 −0
Original line number Original line Diff line number Diff line
@@ -20,7 +20,10 @@
#include <asm/ppc_asm.h>
#include <asm/ppc_asm.h>
#include <asm/kvm_asm.h>
#include <asm/kvm_asm.h>
#include <asm/reg.h>
#include <asm/reg.h>
#include <asm/mmu.h>
#include <asm/page.h>
#include <asm/page.h>
#include <asm/ptrace.h>
#include <asm/hvcall.h>
#include <asm/asm-offsets.h>
#include <asm/asm-offsets.h>
#include <asm/exception-64s.h>
#include <asm/exception-64s.h>


+3 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@
#include <asm/ppc_asm.h>
#include <asm/ppc_asm.h>
#include <asm/kvm_asm.h>
#include <asm/kvm_asm.h>
#include <asm/reg.h>
#include <asm/reg.h>
#include <asm/mmu.h>
#include <asm/page.h>
#include <asm/page.h>
#include <asm/asm-offsets.h>
#include <asm/asm-offsets.h>


@@ -39,6 +40,7 @@
#define MSR_NOIRQ		MSR_KERNEL & ~(MSR_IR | MSR_DR)
#define MSR_NOIRQ		MSR_KERNEL & ~(MSR_IR | MSR_DR)
#define FUNC(name) 		GLUE(.,name)
#define FUNC(name) 		GLUE(.,name)


	.globl	kvmppc_skip_interrupt
kvmppc_skip_interrupt:
kvmppc_skip_interrupt:
	/*
	/*
	 * Here all GPRs are unchanged from when the interrupt happened
	 * Here all GPRs are unchanged from when the interrupt happened
@@ -51,6 +53,7 @@ kvmppc_skip_interrupt:
	rfid
	rfid
	b	.
	b	.


	.globl	kvmppc_skip_Hinterrupt
kvmppc_skip_Hinterrupt:
kvmppc_skip_Hinterrupt:
	/*
	/*
	 * Here all GPRs are unchanged from when the interrupt happened
	 * Here all GPRs are unchanged from when the interrupt happened