Skip to content

Commit 2ba9f0d

Browse files
kvaneeshagraf
authored andcommitted
kvm: powerpc: book3s: Support building HV and PR KVM as module
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> [agraf: squash in compile fix] Signed-off-by: Alexander Graf <agraf@suse.de>
1 parent dba291f commit 2ba9f0d

File tree

11 files changed

+46
-9
lines changed

11 files changed

+46
-9
lines changed

arch/powerpc/kvm/Kconfig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ config KVM_BOOK3S_64
7373
If unsure, say N.
7474

7575
config KVM_BOOK3S_64_HV
76-
bool "KVM support for POWER7 and PPC970 using hypervisor mode in host"
76+
tristate "KVM support for POWER7 and PPC970 using hypervisor mode in host"
7777
depends on KVM_BOOK3S_64
7878
select KVM_BOOK3S_HV_POSSIBLE
7979
select MMU_NOTIFIER
@@ -94,8 +94,8 @@ config KVM_BOOK3S_64_HV
9494
If unsure, say N.
9595

9696
config KVM_BOOK3S_64_PR
97-
bool "KVM support without using hypervisor mode in host"
98-
depends on KVM_BOOK3S_64 && !KVM_BOOK3S_64_HV
97+
tristate "KVM support without using hypervisor mode in host"
98+
depends on KVM_BOOK3S_64
9999
select KVM_BOOK3S_PR_POSSIBLE
100100
---help---
101101
Support running guest kernels in virtual machines on processors

arch/powerpc/kvm/Makefile

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ kvm-objs-$(CONFIG_KVM_E500MC) := $(kvm-e500mc-objs)
5656
kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) := \
5757
book3s_64_vio_hv.o
5858

59-
kvm-book3s_64-objs-$(CONFIG_KVM_BOOK3S_64_PR) := \
59+
kvm-pr-y := \
6060
fpu.o \
6161
book3s_paired_singles.o \
6262
book3s_pr.o \
@@ -76,21 +76,23 @@ kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) += \
7676
book3s_rmhandlers.o
7777
endif
7878

79-
kvm-book3s_64-objs-$(CONFIG_KVM_BOOK3S_64_HV) += \
79+
kvm-hv-y += \
8080
book3s_hv.o \
8181
book3s_hv_interrupts.o \
8282
book3s_64_mmu_hv.o
8383

8484
kvm-book3s_64-builtin-xics-objs-$(CONFIG_KVM_XICS) := \
8585
book3s_hv_rm_xics.o
8686

87-
kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HV) += \
87+
ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
88+
kvm-book3s_64-builtin-objs-$(CONFIG_KVM_BOOK3S_64_HANDLER) += \
8889
book3s_hv_rmhandlers.o \
8990
book3s_hv_rm_mmu.o \
9091
book3s_hv_ras.o \
9192
book3s_hv_builtin.o \
9293
book3s_hv_cma.o \
9394
$(kvm-book3s_64-builtin-xics-objs-y)
95+
endif
9496

9597
kvm-book3s_64-objs-$(CONFIG_KVM_XICS) += \
9698
book3s_xics.o
@@ -131,4 +133,7 @@ obj-$(CONFIG_KVM_E500MC) += kvm.o
131133
obj-$(CONFIG_KVM_BOOK3S_64) += kvm.o
132134
obj-$(CONFIG_KVM_BOOK3S_32) += kvm.o
133135

136+
obj-$(CONFIG_KVM_BOOK3S_64_PR) += kvm-pr.o
137+
obj-$(CONFIG_KVM_BOOK3S_64_HV) += kvm-hv.o
138+
134139
obj-y += $(kvm-book3s_64-builtin-objs-y)

arch/powerpc/kvm/book3s.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,28 +170,32 @@ void kvmppc_book3s_queue_irqprio(struct kvm_vcpu *vcpu, unsigned int vec)
170170
printk(KERN_INFO "Queueing interrupt %x\n", vec);
171171
#endif
172172
}
173-
173+
EXPORT_SYMBOL_GPL(kvmppc_book3s_queue_irqprio);
174174

175175
void kvmppc_core_queue_program(struct kvm_vcpu *vcpu, ulong flags)
176176
{
177177
/* might as well deliver this straight away */
178178
kvmppc_inject_interrupt(vcpu, BOOK3S_INTERRUPT_PROGRAM, flags);
179179
}
180+
EXPORT_SYMBOL_GPL(kvmppc_core_queue_program);
180181

181182
void kvmppc_core_queue_dec(struct kvm_vcpu *vcpu)
182183
{
183184
kvmppc_book3s_queue_irqprio(vcpu, BOOK3S_INTERRUPT_DECREMENTER);
184185
}
186+
EXPORT_SYMBOL_GPL(kvmppc_core_queue_dec);
185187

186188
int kvmppc_core_pending_dec(struct kvm_vcpu *vcpu)
187189
{
188190
return test_bit(BOOK3S_IRQPRIO_DECREMENTER, &vcpu->arch.pending_exceptions);
189191
}
192+
EXPORT_SYMBOL_GPL(kvmppc_core_pending_dec);
190193

191194
void kvmppc_core_dequeue_dec(struct kvm_vcpu *vcpu)
192195
{
193196
kvmppc_book3s_dequeue_irqprio(vcpu, BOOK3S_INTERRUPT_DECREMENTER);
194197
}
198+
EXPORT_SYMBOL_GPL(kvmppc_core_dequeue_dec);
195199

196200
void kvmppc_core_queue_external(struct kvm_vcpu *vcpu,
197201
struct kvm_interrupt *irq)
@@ -329,6 +333,7 @@ int kvmppc_core_prepare_to_enter(struct kvm_vcpu *vcpu)
329333

330334
return 0;
331335
}
336+
EXPORT_SYMBOL_GPL(kvmppc_core_prepare_to_enter);
332337

333338
pfn_t kvmppc_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn, bool writing,
334339
bool *writable)
@@ -354,6 +359,7 @@ pfn_t kvmppc_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn, bool writing,
354359

355360
return gfn_to_pfn_prot(vcpu->kvm, gfn, writing, writable);
356361
}
362+
EXPORT_SYMBOL_GPL(kvmppc_gfn_to_pfn);
357363

358364
static int kvmppc_xlate(struct kvm_vcpu *vcpu, ulong eaddr, bool data,
359365
bool iswrite, struct kvmppc_pte *pte)
@@ -421,6 +427,7 @@ int kvmppc_st(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr,
421427

422428
return EMULATE_DONE;
423429
}
430+
EXPORT_SYMBOL_GPL(kvmppc_st);
424431

425432
int kvmppc_ld(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr,
426433
bool data)
@@ -451,6 +458,7 @@ int kvmppc_ld(struct kvm_vcpu *vcpu, ulong *eaddr, int size, void *ptr,
451458
mmio:
452459
return EMULATE_DO_MMIO;
453460
}
461+
EXPORT_SYMBOL_GPL(kvmppc_ld);
454462

455463
int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
456464
{
@@ -706,6 +714,7 @@ void kvmppc_set_msr(struct kvm_vcpu *vcpu, u64 msr)
706714
{
707715
kvmppc_ops->set_msr(vcpu, msr);
708716
}
717+
EXPORT_SYMBOL_GPL(kvmppc_set_msr);
709718

710719
int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
711720
{
@@ -787,6 +796,7 @@ int kvm_unmap_hva(struct kvm *kvm, unsigned long hva)
787796
{
788797
return kvmppc_ops->unmap_hva(kvm, hva);
789798
}
799+
EXPORT_SYMBOL_GPL(kvm_unmap_hva);
790800

791801
int kvm_unmap_hva_range(struct kvm *kvm, unsigned long start, unsigned long end)
792802
{

arch/powerpc/kvm/book3s_emulate.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ int kvmppc_core_emulate_op_pr(struct kvm_run *run, struct kvm_vcpu *vcpu,
172172
vcpu->arch.mmu.tlbie(vcpu, addr, large);
173173
break;
174174
}
175-
#ifdef CONFIG_KVM_BOOK3S_64_PR
175+
#ifdef CONFIG_PPC_BOOK3S_64
176176
case OP_31_XOP_FAKE_SC1:
177177
{
178178
/* SC 1 papr hypercalls */

arch/powerpc/kvm/book3s_hv.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include <linux/vmalloc.h>
5353
#include <linux/highmem.h>
5454
#include <linux/hugetlb.h>
55+
#include <linux/module.h>
5556

5657
#include "book3s.h"
5758

@@ -2215,3 +2216,4 @@ static void kvmppc_book3s_exit_hv(void)
22152216

22162217
module_init(kvmppc_book3s_init_hv);
22172218
module_exit(kvmppc_book3s_exit_hv);
2219+
MODULE_LICENSE("GPL");

arch/powerpc/kvm/book3s_pr.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include <linux/sched.h>
4141
#include <linux/vmalloc.h>
4242
#include <linux/highmem.h>
43+
#include <linux/module.h>
4344

4445
#include "book3s.h"
4546

@@ -918,7 +919,7 @@ int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu,
918919
ulong cmd = kvmppc_get_gpr(vcpu, 3);
919920
int i;
920921

921-
#ifdef CONFIG_KVM_BOOK3S_64_PR
922+
#ifdef CONFIG_PPC_BOOK3S_64
922923
if (kvmppc_h_pr(vcpu, cmd) == EMULATE_DONE) {
923924
r = RESUME_GUEST;
924925
break;
@@ -1582,3 +1583,5 @@ static void kvmppc_book3s_exit_pr(void)
15821583

15831584
module_init(kvmppc_book3s_init_pr);
15841585
module_exit(kvmppc_book3s_exit_pr);
1586+
1587+
MODULE_LICENSE("GPL");

arch/powerpc/kvm/book3s_rtas.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ int kvmppc_rtas_hcall(struct kvm_vcpu *vcpu)
260260
*/
261261
return rc;
262262
}
263+
EXPORT_SYMBOL_GPL(kvmppc_rtas_hcall);
263264

264265
void kvmppc_rtas_tokens_free(struct kvm *kvm)
265266
{

arch/powerpc/kvm/book3s_xics.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,7 @@ int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 req)
840840

841841
return rc;
842842
}
843+
EXPORT_SYMBOL_GPL(kvmppc_xics_hcall);
843844

844845

845846
/* -- Initialisation code etc. -- */

arch/powerpc/kvm/emulate.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,3 +483,4 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
483483

484484
return emulated;
485485
}
486+
EXPORT_SYMBOL_GPL(kvmppc_emulate_instruction);

arch/powerpc/kvm/powerpc.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu)
126126

127127
return r;
128128
}
129+
EXPORT_SYMBOL_GPL(kvmppc_prepare_to_enter);
129130

130131
int kvmppc_kvm_pv(struct kvm_vcpu *vcpu)
131132
{
@@ -179,6 +180,7 @@ int kvmppc_kvm_pv(struct kvm_vcpu *vcpu)
179180

180181
return r;
181182
}
183+
EXPORT_SYMBOL_GPL(kvmppc_kvm_pv);
182184

183185
int kvmppc_sanity_check(struct kvm_vcpu *vcpu)
184186
{
@@ -207,6 +209,7 @@ int kvmppc_sanity_check(struct kvm_vcpu *vcpu)
207209
vcpu->arch.sane = r;
208210
return r ? 0 : -EINVAL;
209211
}
212+
EXPORT_SYMBOL_GPL(kvmppc_sanity_check);
210213

211214
int kvmppc_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu)
212215
{
@@ -241,6 +244,7 @@ int kvmppc_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu)
241244

242245
return r;
243246
}
247+
EXPORT_SYMBOL_GPL(kvmppc_emulate_mmio);
244248

245249
int kvm_arch_hardware_enable(void *garbage)
246250
{
@@ -665,6 +669,7 @@ int kvmppc_handle_load(struct kvm_run *run, struct kvm_vcpu *vcpu,
665669

666670
return EMULATE_DO_MMIO;
667671
}
672+
EXPORT_SYMBOL_GPL(kvmppc_handle_load);
668673

669674
/* Same as above, but sign extends */
670675
int kvmppc_handle_loads(struct kvm_run *run, struct kvm_vcpu *vcpu,
@@ -726,6 +731,7 @@ int kvmppc_handle_store(struct kvm_run *run, struct kvm_vcpu *vcpu,
726731

727732
return EMULATE_DO_MMIO;
728733
}
734+
EXPORT_SYMBOL_GPL(kvmppc_handle_store);
729735

730736
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
731737
{
@@ -1074,22 +1080,26 @@ long kvmppc_alloc_lpid(void)
10741080

10751081
return lpid;
10761082
}
1083+
EXPORT_SYMBOL_GPL(kvmppc_alloc_lpid);
10771084

10781085
void kvmppc_claim_lpid(long lpid)
10791086
{
10801087
set_bit(lpid, lpid_inuse);
10811088
}
1089+
EXPORT_SYMBOL_GPL(kvmppc_claim_lpid);
10821090

10831091
void kvmppc_free_lpid(long lpid)
10841092
{
10851093
clear_bit(lpid, lpid_inuse);
10861094
}
1095+
EXPORT_SYMBOL_GPL(kvmppc_free_lpid);
10871096

10881097
void kvmppc_init_lpid(unsigned long nr_lpids_param)
10891098
{
10901099
nr_lpids = min_t(unsigned long, KVMPPC_NR_LPIDS, nr_lpids_param);
10911100
memset(lpid_inuse, 0, sizeof(lpid_inuse));
10921101
}
1102+
EXPORT_SYMBOL_GPL(kvmppc_init_lpid);
10931103

10941104
int kvm_arch_init(void *opaque)
10951105
{

0 commit comments

Comments
 (0)