xref: /openbmc/linux/arch/powerpc/kernel/kvm.c (revision 7ff836f0)
1 /*
2  * Copyright (C) 2010 SUSE Linux Products GmbH. All rights reserved.
3  * Copyright 2010-2011 Freescale Semiconductor, Inc.
4  *
5  * Authors:
6  *     Alexander Graf <agraf@suse.de>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License, version 2, as
10  * published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21 
22 #include <linux/kvm_host.h>
23 #include <linux/init.h>
24 #include <linux/export.h>
25 #include <linux/kmemleak.h>
26 #include <linux/kvm_para.h>
27 #include <linux/slab.h>
28 #include <linux/of.h>
29 #include <linux/pagemap.h>
30 
31 #include <asm/reg.h>
32 #include <asm/sections.h>
33 #include <asm/cacheflush.h>
34 #include <asm/disassemble.h>
35 #include <asm/ppc-opcode.h>
36 #include <asm/epapr_hcalls.h>
37 
38 #define KVM_MAGIC_PAGE		(-4096L)
39 #define magic_var(x) KVM_MAGIC_PAGE + offsetof(struct kvm_vcpu_arch_shared, x)
40 
41 #define KVM_INST_LWZ		0x80000000
42 #define KVM_INST_STW		0x90000000
43 #define KVM_INST_LD		0xe8000000
44 #define KVM_INST_STD		0xf8000000
45 #define KVM_INST_NOP		0x60000000
46 #define KVM_INST_B		0x48000000
47 #define KVM_INST_B_MASK		0x03ffffff
48 #define KVM_INST_B_MAX		0x01ffffff
49 #define KVM_INST_LI		0x38000000
50 
51 #define KVM_MASK_RT		0x03e00000
52 #define KVM_RT_30		0x03c00000
53 #define KVM_MASK_RB		0x0000f800
54 #define KVM_INST_MFMSR		0x7c0000a6
55 
56 #define SPR_FROM		0
57 #define SPR_TO			0x100
58 
59 #define KVM_INST_SPR(sprn, moveto) (0x7c0002a6 | \
60 				    (((sprn) & 0x1f) << 16) | \
61 				    (((sprn) & 0x3e0) << 6) | \
62 				    (moveto))
63 
64 #define KVM_INST_MFSPR(sprn)	KVM_INST_SPR(sprn, SPR_FROM)
65 #define KVM_INST_MTSPR(sprn)	KVM_INST_SPR(sprn, SPR_TO)
66 
67 #define KVM_INST_TLBSYNC	0x7c00046c
68 #define KVM_INST_MTMSRD_L0	0x7c000164
69 #define KVM_INST_MTMSRD_L1	0x7c010164
70 #define KVM_INST_MTMSR		0x7c000124
71 
72 #define KVM_INST_WRTEE		0x7c000106
73 #define KVM_INST_WRTEEI_0	0x7c000146
74 #define KVM_INST_WRTEEI_1	0x7c008146
75 
76 #define KVM_INST_MTSRIN		0x7c0001e4
77 
78 static bool kvm_patching_worked = true;
79 char kvm_tmp[1024 * 1024];
80 static int kvm_tmp_index;
81 
82 static inline void kvm_patch_ins(u32 *inst, u32 new_inst)
83 {
84 	*inst = new_inst;
85 	flush_icache_range((ulong)inst, (ulong)inst + 4);
86 }
87 
88 static void kvm_patch_ins_ll(u32 *inst, long addr, u32 rt)
89 {
90 #ifdef CONFIG_64BIT
91 	kvm_patch_ins(inst, KVM_INST_LD | rt | (addr & 0x0000fffc));
92 #else
93 	kvm_patch_ins(inst, KVM_INST_LWZ | rt | (addr & 0x0000fffc));
94 #endif
95 }
96 
97 static void kvm_patch_ins_ld(u32 *inst, long addr, u32 rt)
98 {
99 #ifdef CONFIG_64BIT
100 	kvm_patch_ins(inst, KVM_INST_LD | rt | (addr & 0x0000fffc));
101 #else
102 	kvm_patch_ins(inst, KVM_INST_LWZ | rt | ((addr + 4) & 0x0000fffc));
103 #endif
104 }
105 
106 static void kvm_patch_ins_lwz(u32 *inst, long addr, u32 rt)
107 {
108 	kvm_patch_ins(inst, KVM_INST_LWZ | rt | (addr & 0x0000ffff));
109 }
110 
111 static void kvm_patch_ins_std(u32 *inst, long addr, u32 rt)
112 {
113 #ifdef CONFIG_64BIT
114 	kvm_patch_ins(inst, KVM_INST_STD | rt | (addr & 0x0000fffc));
115 #else
116 	kvm_patch_ins(inst, KVM_INST_STW | rt | ((addr + 4) & 0x0000fffc));
117 #endif
118 }
119 
120 static void kvm_patch_ins_stw(u32 *inst, long addr, u32 rt)
121 {
122 	kvm_patch_ins(inst, KVM_INST_STW | rt | (addr & 0x0000fffc));
123 }
124 
125 static void kvm_patch_ins_nop(u32 *inst)
126 {
127 	kvm_patch_ins(inst, KVM_INST_NOP);
128 }
129 
130 static void kvm_patch_ins_b(u32 *inst, int addr)
131 {
132 #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_PPC_BOOK3S)
133 	/* On relocatable kernels interrupts handlers and our code
134 	   can be in different regions, so we don't patch them */
135 
136 	if ((ulong)inst < (ulong)&__end_interrupts)
137 		return;
138 #endif
139 
140 	kvm_patch_ins(inst, KVM_INST_B | (addr & KVM_INST_B_MASK));
141 }
142 
143 static u32 *kvm_alloc(int len)
144 {
145 	u32 *p;
146 
147 	if ((kvm_tmp_index + len) > ARRAY_SIZE(kvm_tmp)) {
148 		printk(KERN_ERR "KVM: No more space (%d + %d)\n",
149 				kvm_tmp_index, len);
150 		kvm_patching_worked = false;
151 		return NULL;
152 	}
153 
154 	p = (void*)&kvm_tmp[kvm_tmp_index];
155 	kvm_tmp_index += len;
156 
157 	return p;
158 }
159 
160 extern u32 kvm_emulate_mtmsrd_branch_offs;
161 extern u32 kvm_emulate_mtmsrd_reg_offs;
162 extern u32 kvm_emulate_mtmsrd_orig_ins_offs;
163 extern u32 kvm_emulate_mtmsrd_len;
164 extern u32 kvm_emulate_mtmsrd[];
165 
166 static void kvm_patch_ins_mtmsrd(u32 *inst, u32 rt)
167 {
168 	u32 *p;
169 	int distance_start;
170 	int distance_end;
171 	ulong next_inst;
172 
173 	p = kvm_alloc(kvm_emulate_mtmsrd_len * 4);
174 	if (!p)
175 		return;
176 
177 	/* Find out where we are and put everything there */
178 	distance_start = (ulong)p - (ulong)inst;
179 	next_inst = ((ulong)inst + 4);
180 	distance_end = next_inst - (ulong)&p[kvm_emulate_mtmsrd_branch_offs];
181 
182 	/* Make sure we only write valid b instructions */
183 	if (distance_start > KVM_INST_B_MAX) {
184 		kvm_patching_worked = false;
185 		return;
186 	}
187 
188 	/* Modify the chunk to fit the invocation */
189 	memcpy(p, kvm_emulate_mtmsrd, kvm_emulate_mtmsrd_len * 4);
190 	p[kvm_emulate_mtmsrd_branch_offs] |= distance_end & KVM_INST_B_MASK;
191 	switch (get_rt(rt)) {
192 	case 30:
193 		kvm_patch_ins_ll(&p[kvm_emulate_mtmsrd_reg_offs],
194 				 magic_var(scratch2), KVM_RT_30);
195 		break;
196 	case 31:
197 		kvm_patch_ins_ll(&p[kvm_emulate_mtmsrd_reg_offs],
198 				 magic_var(scratch1), KVM_RT_30);
199 		break;
200 	default:
201 		p[kvm_emulate_mtmsrd_reg_offs] |= rt;
202 		break;
203 	}
204 
205 	p[kvm_emulate_mtmsrd_orig_ins_offs] = *inst;
206 	flush_icache_range((ulong)p, (ulong)p + kvm_emulate_mtmsrd_len * 4);
207 
208 	/* Patch the invocation */
209 	kvm_patch_ins_b(inst, distance_start);
210 }
211 
212 extern u32 kvm_emulate_mtmsr_branch_offs;
213 extern u32 kvm_emulate_mtmsr_reg1_offs;
214 extern u32 kvm_emulate_mtmsr_reg2_offs;
215 extern u32 kvm_emulate_mtmsr_orig_ins_offs;
216 extern u32 kvm_emulate_mtmsr_len;
217 extern u32 kvm_emulate_mtmsr[];
218 
219 static void kvm_patch_ins_mtmsr(u32 *inst, u32 rt)
220 {
221 	u32 *p;
222 	int distance_start;
223 	int distance_end;
224 	ulong next_inst;
225 
226 	p = kvm_alloc(kvm_emulate_mtmsr_len * 4);
227 	if (!p)
228 		return;
229 
230 	/* Find out where we are and put everything there */
231 	distance_start = (ulong)p - (ulong)inst;
232 	next_inst = ((ulong)inst + 4);
233 	distance_end = next_inst - (ulong)&p[kvm_emulate_mtmsr_branch_offs];
234 
235 	/* Make sure we only write valid b instructions */
236 	if (distance_start > KVM_INST_B_MAX) {
237 		kvm_patching_worked = false;
238 		return;
239 	}
240 
241 	/* Modify the chunk to fit the invocation */
242 	memcpy(p, kvm_emulate_mtmsr, kvm_emulate_mtmsr_len * 4);
243 	p[kvm_emulate_mtmsr_branch_offs] |= distance_end & KVM_INST_B_MASK;
244 
245 	/* Make clobbered registers work too */
246 	switch (get_rt(rt)) {
247 	case 30:
248 		kvm_patch_ins_ll(&p[kvm_emulate_mtmsr_reg1_offs],
249 				 magic_var(scratch2), KVM_RT_30);
250 		kvm_patch_ins_ll(&p[kvm_emulate_mtmsr_reg2_offs],
251 				 magic_var(scratch2), KVM_RT_30);
252 		break;
253 	case 31:
254 		kvm_patch_ins_ll(&p[kvm_emulate_mtmsr_reg1_offs],
255 				 magic_var(scratch1), KVM_RT_30);
256 		kvm_patch_ins_ll(&p[kvm_emulate_mtmsr_reg2_offs],
257 				 magic_var(scratch1), KVM_RT_30);
258 		break;
259 	default:
260 		p[kvm_emulate_mtmsr_reg1_offs] |= rt;
261 		p[kvm_emulate_mtmsr_reg2_offs] |= rt;
262 		break;
263 	}
264 
265 	p[kvm_emulate_mtmsr_orig_ins_offs] = *inst;
266 	flush_icache_range((ulong)p, (ulong)p + kvm_emulate_mtmsr_len * 4);
267 
268 	/* Patch the invocation */
269 	kvm_patch_ins_b(inst, distance_start);
270 }
271 
272 #ifdef CONFIG_BOOKE
273 
274 extern u32 kvm_emulate_wrtee_branch_offs;
275 extern u32 kvm_emulate_wrtee_reg_offs;
276 extern u32 kvm_emulate_wrtee_orig_ins_offs;
277 extern u32 kvm_emulate_wrtee_len;
278 extern u32 kvm_emulate_wrtee[];
279 
280 static void kvm_patch_ins_wrtee(u32 *inst, u32 rt, int imm_one)
281 {
282 	u32 *p;
283 	int distance_start;
284 	int distance_end;
285 	ulong next_inst;
286 
287 	p = kvm_alloc(kvm_emulate_wrtee_len * 4);
288 	if (!p)
289 		return;
290 
291 	/* Find out where we are and put everything there */
292 	distance_start = (ulong)p - (ulong)inst;
293 	next_inst = ((ulong)inst + 4);
294 	distance_end = next_inst - (ulong)&p[kvm_emulate_wrtee_branch_offs];
295 
296 	/* Make sure we only write valid b instructions */
297 	if (distance_start > KVM_INST_B_MAX) {
298 		kvm_patching_worked = false;
299 		return;
300 	}
301 
302 	/* Modify the chunk to fit the invocation */
303 	memcpy(p, kvm_emulate_wrtee, kvm_emulate_wrtee_len * 4);
304 	p[kvm_emulate_wrtee_branch_offs] |= distance_end & KVM_INST_B_MASK;
305 
306 	if (imm_one) {
307 		p[kvm_emulate_wrtee_reg_offs] =
308 			KVM_INST_LI | __PPC_RT(R30) | MSR_EE;
309 	} else {
310 		/* Make clobbered registers work too */
311 		switch (get_rt(rt)) {
312 		case 30:
313 			kvm_patch_ins_ll(&p[kvm_emulate_wrtee_reg_offs],
314 					 magic_var(scratch2), KVM_RT_30);
315 			break;
316 		case 31:
317 			kvm_patch_ins_ll(&p[kvm_emulate_wrtee_reg_offs],
318 					 magic_var(scratch1), KVM_RT_30);
319 			break;
320 		default:
321 			p[kvm_emulate_wrtee_reg_offs] |= rt;
322 			break;
323 		}
324 	}
325 
326 	p[kvm_emulate_wrtee_orig_ins_offs] = *inst;
327 	flush_icache_range((ulong)p, (ulong)p + kvm_emulate_wrtee_len * 4);
328 
329 	/* Patch the invocation */
330 	kvm_patch_ins_b(inst, distance_start);
331 }
332 
333 extern u32 kvm_emulate_wrteei_0_branch_offs;
334 extern u32 kvm_emulate_wrteei_0_len;
335 extern u32 kvm_emulate_wrteei_0[];
336 
337 static void kvm_patch_ins_wrteei_0(u32 *inst)
338 {
339 	u32 *p;
340 	int distance_start;
341 	int distance_end;
342 	ulong next_inst;
343 
344 	p = kvm_alloc(kvm_emulate_wrteei_0_len * 4);
345 	if (!p)
346 		return;
347 
348 	/* Find out where we are and put everything there */
349 	distance_start = (ulong)p - (ulong)inst;
350 	next_inst = ((ulong)inst + 4);
351 	distance_end = next_inst - (ulong)&p[kvm_emulate_wrteei_0_branch_offs];
352 
353 	/* Make sure we only write valid b instructions */
354 	if (distance_start > KVM_INST_B_MAX) {
355 		kvm_patching_worked = false;
356 		return;
357 	}
358 
359 	memcpy(p, kvm_emulate_wrteei_0, kvm_emulate_wrteei_0_len * 4);
360 	p[kvm_emulate_wrteei_0_branch_offs] |= distance_end & KVM_INST_B_MASK;
361 	flush_icache_range((ulong)p, (ulong)p + kvm_emulate_wrteei_0_len * 4);
362 
363 	/* Patch the invocation */
364 	kvm_patch_ins_b(inst, distance_start);
365 }
366 
367 #endif
368 
369 #ifdef CONFIG_PPC_BOOK3S_32
370 
371 extern u32 kvm_emulate_mtsrin_branch_offs;
372 extern u32 kvm_emulate_mtsrin_reg1_offs;
373 extern u32 kvm_emulate_mtsrin_reg2_offs;
374 extern u32 kvm_emulate_mtsrin_orig_ins_offs;
375 extern u32 kvm_emulate_mtsrin_len;
376 extern u32 kvm_emulate_mtsrin[];
377 
378 static void kvm_patch_ins_mtsrin(u32 *inst, u32 rt, u32 rb)
379 {
380 	u32 *p;
381 	int distance_start;
382 	int distance_end;
383 	ulong next_inst;
384 
385 	p = kvm_alloc(kvm_emulate_mtsrin_len * 4);
386 	if (!p)
387 		return;
388 
389 	/* Find out where we are and put everything there */
390 	distance_start = (ulong)p - (ulong)inst;
391 	next_inst = ((ulong)inst + 4);
392 	distance_end = next_inst - (ulong)&p[kvm_emulate_mtsrin_branch_offs];
393 
394 	/* Make sure we only write valid b instructions */
395 	if (distance_start > KVM_INST_B_MAX) {
396 		kvm_patching_worked = false;
397 		return;
398 	}
399 
400 	/* Modify the chunk to fit the invocation */
401 	memcpy(p, kvm_emulate_mtsrin, kvm_emulate_mtsrin_len * 4);
402 	p[kvm_emulate_mtsrin_branch_offs] |= distance_end & KVM_INST_B_MASK;
403 	p[kvm_emulate_mtsrin_reg1_offs] |= (rb << 10);
404 	p[kvm_emulate_mtsrin_reg2_offs] |= rt;
405 	p[kvm_emulate_mtsrin_orig_ins_offs] = *inst;
406 	flush_icache_range((ulong)p, (ulong)p + kvm_emulate_mtsrin_len * 4);
407 
408 	/* Patch the invocation */
409 	kvm_patch_ins_b(inst, distance_start);
410 }
411 
412 #endif
413 
414 static void kvm_map_magic_page(void *data)
415 {
416 	u32 *features = data;
417 
418 	ulong in[8] = {0};
419 	ulong out[8];
420 
421 	in[0] = KVM_MAGIC_PAGE;
422 	in[1] = KVM_MAGIC_PAGE | MAGIC_PAGE_FLAG_NOT_MAPPED_NX;
423 
424 	epapr_hypercall(in, out, KVM_HCALL_TOKEN(KVM_HC_PPC_MAP_MAGIC_PAGE));
425 
426 	*features = out[0];
427 }
428 
429 static void kvm_check_ins(u32 *inst, u32 features)
430 {
431 	u32 _inst = *inst;
432 	u32 inst_no_rt = _inst & ~KVM_MASK_RT;
433 	u32 inst_rt = _inst & KVM_MASK_RT;
434 
435 	switch (inst_no_rt) {
436 	/* Loads */
437 	case KVM_INST_MFMSR:
438 		kvm_patch_ins_ld(inst, magic_var(msr), inst_rt);
439 		break;
440 	case KVM_INST_MFSPR(SPRN_SPRG0):
441 		kvm_patch_ins_ld(inst, magic_var(sprg0), inst_rt);
442 		break;
443 	case KVM_INST_MFSPR(SPRN_SPRG1):
444 		kvm_patch_ins_ld(inst, magic_var(sprg1), inst_rt);
445 		break;
446 	case KVM_INST_MFSPR(SPRN_SPRG2):
447 		kvm_patch_ins_ld(inst, magic_var(sprg2), inst_rt);
448 		break;
449 	case KVM_INST_MFSPR(SPRN_SPRG3):
450 		kvm_patch_ins_ld(inst, magic_var(sprg3), inst_rt);
451 		break;
452 	case KVM_INST_MFSPR(SPRN_SRR0):
453 		kvm_patch_ins_ld(inst, magic_var(srr0), inst_rt);
454 		break;
455 	case KVM_INST_MFSPR(SPRN_SRR1):
456 		kvm_patch_ins_ld(inst, magic_var(srr1), inst_rt);
457 		break;
458 #ifdef CONFIG_BOOKE
459 	case KVM_INST_MFSPR(SPRN_DEAR):
460 #else
461 	case KVM_INST_MFSPR(SPRN_DAR):
462 #endif
463 		kvm_patch_ins_ld(inst, magic_var(dar), inst_rt);
464 		break;
465 	case KVM_INST_MFSPR(SPRN_DSISR):
466 		kvm_patch_ins_lwz(inst, magic_var(dsisr), inst_rt);
467 		break;
468 
469 #ifdef CONFIG_PPC_BOOK3E_MMU
470 	case KVM_INST_MFSPR(SPRN_MAS0):
471 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
472 			kvm_patch_ins_lwz(inst, magic_var(mas0), inst_rt);
473 		break;
474 	case KVM_INST_MFSPR(SPRN_MAS1):
475 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
476 			kvm_patch_ins_lwz(inst, magic_var(mas1), inst_rt);
477 		break;
478 	case KVM_INST_MFSPR(SPRN_MAS2):
479 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
480 			kvm_patch_ins_ld(inst, magic_var(mas2), inst_rt);
481 		break;
482 	case KVM_INST_MFSPR(SPRN_MAS3):
483 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
484 			kvm_patch_ins_lwz(inst, magic_var(mas7_3) + 4, inst_rt);
485 		break;
486 	case KVM_INST_MFSPR(SPRN_MAS4):
487 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
488 			kvm_patch_ins_lwz(inst, magic_var(mas4), inst_rt);
489 		break;
490 	case KVM_INST_MFSPR(SPRN_MAS6):
491 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
492 			kvm_patch_ins_lwz(inst, magic_var(mas6), inst_rt);
493 		break;
494 	case KVM_INST_MFSPR(SPRN_MAS7):
495 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
496 			kvm_patch_ins_lwz(inst, magic_var(mas7_3), inst_rt);
497 		break;
498 #endif /* CONFIG_PPC_BOOK3E_MMU */
499 
500 	case KVM_INST_MFSPR(SPRN_SPRG4):
501 #ifdef CONFIG_BOOKE
502 	case KVM_INST_MFSPR(SPRN_SPRG4R):
503 #endif
504 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
505 			kvm_patch_ins_ld(inst, magic_var(sprg4), inst_rt);
506 		break;
507 	case KVM_INST_MFSPR(SPRN_SPRG5):
508 #ifdef CONFIG_BOOKE
509 	case KVM_INST_MFSPR(SPRN_SPRG5R):
510 #endif
511 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
512 			kvm_patch_ins_ld(inst, magic_var(sprg5), inst_rt);
513 		break;
514 	case KVM_INST_MFSPR(SPRN_SPRG6):
515 #ifdef CONFIG_BOOKE
516 	case KVM_INST_MFSPR(SPRN_SPRG6R):
517 #endif
518 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
519 			kvm_patch_ins_ld(inst, magic_var(sprg6), inst_rt);
520 		break;
521 	case KVM_INST_MFSPR(SPRN_SPRG7):
522 #ifdef CONFIG_BOOKE
523 	case KVM_INST_MFSPR(SPRN_SPRG7R):
524 #endif
525 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
526 			kvm_patch_ins_ld(inst, magic_var(sprg7), inst_rt);
527 		break;
528 
529 #ifdef CONFIG_BOOKE
530 	case KVM_INST_MFSPR(SPRN_ESR):
531 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
532 			kvm_patch_ins_lwz(inst, magic_var(esr), inst_rt);
533 		break;
534 #endif
535 
536 	case KVM_INST_MFSPR(SPRN_PIR):
537 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
538 			kvm_patch_ins_lwz(inst, magic_var(pir), inst_rt);
539 		break;
540 
541 
542 	/* Stores */
543 	case KVM_INST_MTSPR(SPRN_SPRG0):
544 		kvm_patch_ins_std(inst, magic_var(sprg0), inst_rt);
545 		break;
546 	case KVM_INST_MTSPR(SPRN_SPRG1):
547 		kvm_patch_ins_std(inst, magic_var(sprg1), inst_rt);
548 		break;
549 	case KVM_INST_MTSPR(SPRN_SPRG2):
550 		kvm_patch_ins_std(inst, magic_var(sprg2), inst_rt);
551 		break;
552 	case KVM_INST_MTSPR(SPRN_SPRG3):
553 		kvm_patch_ins_std(inst, magic_var(sprg3), inst_rt);
554 		break;
555 	case KVM_INST_MTSPR(SPRN_SRR0):
556 		kvm_patch_ins_std(inst, magic_var(srr0), inst_rt);
557 		break;
558 	case KVM_INST_MTSPR(SPRN_SRR1):
559 		kvm_patch_ins_std(inst, magic_var(srr1), inst_rt);
560 		break;
561 #ifdef CONFIG_BOOKE
562 	case KVM_INST_MTSPR(SPRN_DEAR):
563 #else
564 	case KVM_INST_MTSPR(SPRN_DAR):
565 #endif
566 		kvm_patch_ins_std(inst, magic_var(dar), inst_rt);
567 		break;
568 	case KVM_INST_MTSPR(SPRN_DSISR):
569 		kvm_patch_ins_stw(inst, magic_var(dsisr), inst_rt);
570 		break;
571 #ifdef CONFIG_PPC_BOOK3E_MMU
572 	case KVM_INST_MTSPR(SPRN_MAS0):
573 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
574 			kvm_patch_ins_stw(inst, magic_var(mas0), inst_rt);
575 		break;
576 	case KVM_INST_MTSPR(SPRN_MAS1):
577 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
578 			kvm_patch_ins_stw(inst, magic_var(mas1), inst_rt);
579 		break;
580 	case KVM_INST_MTSPR(SPRN_MAS2):
581 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
582 			kvm_patch_ins_std(inst, magic_var(mas2), inst_rt);
583 		break;
584 	case KVM_INST_MTSPR(SPRN_MAS3):
585 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
586 			kvm_patch_ins_stw(inst, magic_var(mas7_3) + 4, inst_rt);
587 		break;
588 	case KVM_INST_MTSPR(SPRN_MAS4):
589 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
590 			kvm_patch_ins_stw(inst, magic_var(mas4), inst_rt);
591 		break;
592 	case KVM_INST_MTSPR(SPRN_MAS6):
593 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
594 			kvm_patch_ins_stw(inst, magic_var(mas6), inst_rt);
595 		break;
596 	case KVM_INST_MTSPR(SPRN_MAS7):
597 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
598 			kvm_patch_ins_stw(inst, magic_var(mas7_3), inst_rt);
599 		break;
600 #endif /* CONFIG_PPC_BOOK3E_MMU */
601 
602 	case KVM_INST_MTSPR(SPRN_SPRG4):
603 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
604 			kvm_patch_ins_std(inst, magic_var(sprg4), inst_rt);
605 		break;
606 	case KVM_INST_MTSPR(SPRN_SPRG5):
607 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
608 			kvm_patch_ins_std(inst, magic_var(sprg5), inst_rt);
609 		break;
610 	case KVM_INST_MTSPR(SPRN_SPRG6):
611 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
612 			kvm_patch_ins_std(inst, magic_var(sprg6), inst_rt);
613 		break;
614 	case KVM_INST_MTSPR(SPRN_SPRG7):
615 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
616 			kvm_patch_ins_std(inst, magic_var(sprg7), inst_rt);
617 		break;
618 
619 #ifdef CONFIG_BOOKE
620 	case KVM_INST_MTSPR(SPRN_ESR):
621 		if (features & KVM_MAGIC_FEAT_MAS0_TO_SPRG7)
622 			kvm_patch_ins_stw(inst, magic_var(esr), inst_rt);
623 		break;
624 #endif
625 
626 	/* Nops */
627 	case KVM_INST_TLBSYNC:
628 		kvm_patch_ins_nop(inst);
629 		break;
630 
631 	/* Rewrites */
632 	case KVM_INST_MTMSRD_L1:
633 		kvm_patch_ins_mtmsrd(inst, inst_rt);
634 		break;
635 	case KVM_INST_MTMSR:
636 	case KVM_INST_MTMSRD_L0:
637 		kvm_patch_ins_mtmsr(inst, inst_rt);
638 		break;
639 #ifdef CONFIG_BOOKE
640 	case KVM_INST_WRTEE:
641 		kvm_patch_ins_wrtee(inst, inst_rt, 0);
642 		break;
643 #endif
644 	}
645 
646 	switch (inst_no_rt & ~KVM_MASK_RB) {
647 #ifdef CONFIG_PPC_BOOK3S_32
648 	case KVM_INST_MTSRIN:
649 		if (features & KVM_MAGIC_FEAT_SR) {
650 			u32 inst_rb = _inst & KVM_MASK_RB;
651 			kvm_patch_ins_mtsrin(inst, inst_rt, inst_rb);
652 		}
653 		break;
654 #endif
655 	}
656 
657 	switch (_inst) {
658 #ifdef CONFIG_BOOKE
659 	case KVM_INST_WRTEEI_0:
660 		kvm_patch_ins_wrteei_0(inst);
661 		break;
662 
663 	case KVM_INST_WRTEEI_1:
664 		kvm_patch_ins_wrtee(inst, 0, 1);
665 		break;
666 #endif
667 	}
668 }
669 
670 extern u32 kvm_template_start[];
671 extern u32 kvm_template_end[];
672 
673 static void kvm_use_magic_page(void)
674 {
675 	u32 *p;
676 	u32 *start, *end;
677 	u32 features;
678 
679 	/* Tell the host to map the magic page to -4096 on all CPUs */
680 	on_each_cpu(kvm_map_magic_page, &features, 1);
681 
682 	/* Quick self-test to see if the mapping works */
683 	if (!fault_in_pages_readable((const char *)KVM_MAGIC_PAGE, sizeof(u32))) {
684 		kvm_patching_worked = false;
685 		return;
686 	}
687 
688 	/* Now loop through all code and find instructions */
689 	start = (void*)_stext;
690 	end = (void*)_etext;
691 
692 	/*
693 	 * Being interrupted in the middle of patching would
694 	 * be bad for SPRG4-7, which KVM can't keep in sync
695 	 * with emulated accesses because reads don't trap.
696 	 */
697 	local_irq_disable();
698 
699 	for (p = start; p < end; p++) {
700 		/* Avoid patching the template code */
701 		if (p >= kvm_template_start && p < kvm_template_end) {
702 			p = kvm_template_end - 1;
703 			continue;
704 		}
705 		kvm_check_ins(p, features);
706 	}
707 
708 	local_irq_enable();
709 
710 	printk(KERN_INFO "KVM: Live patching for a fast VM %s\n",
711 			 kvm_patching_worked ? "worked" : "failed");
712 }
713 
714 static __init void kvm_free_tmp(void)
715 {
716 	/*
717 	 * Inform kmemleak about the hole in the .bss section since the
718 	 * corresponding pages will be unmapped with DEBUG_PAGEALLOC=y.
719 	 */
720 	kmemleak_free_part(&kvm_tmp[kvm_tmp_index],
721 			   ARRAY_SIZE(kvm_tmp) - kvm_tmp_index);
722 	free_reserved_area(&kvm_tmp[kvm_tmp_index],
723 			   &kvm_tmp[ARRAY_SIZE(kvm_tmp)], -1, NULL);
724 }
725 
726 static int __init kvm_guest_init(void)
727 {
728 	if (!kvm_para_available())
729 		goto free_tmp;
730 
731 	if (!epapr_paravirt_enabled)
732 		goto free_tmp;
733 
734 	if (kvm_para_has_feature(KVM_FEATURE_MAGIC_PAGE))
735 		kvm_use_magic_page();
736 
737 #ifdef CONFIG_PPC_BOOK3S_64
738 	/* Enable napping */
739 	powersave_nap = 1;
740 #endif
741 
742 free_tmp:
743 	kvm_free_tmp();
744 
745 	return 0;
746 }
747 
748 postcore_initcall(kvm_guest_init);
749