aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBorislav Petkov <bp@alien8.de>2018-09-11 05:15:10 -0400
committerIngo Molnar <mingo@kernel.org>2018-09-11 06:45:14 -0400
commit3637897b6c9bc2f12f38956d64724a6d0bbb56fd (patch)
treea4c916116722b08cc0834816fae3f63eb7902d70
parentb7a5eb6aafa95fce45fc4dcbc195cb232fa1b76d (diff)
x86/paravirt: Clean up native_patch()
When CONFIG_PARAVIRT_SPINLOCKS=n, it generates a warning: arch/x86/kernel/paravirt_patch_64.c: In function ‘native_patch’: arch/x86/kernel/paravirt_patch_64.c:89:1: warning: label ‘patch_site’ defined but not used [-Wunused-label] patch_site: ... but those labels can simply be removed by directly calling the respective functions there. Get rid of local variables too, while at it. Also, simplify function flow for better readability. Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Juergen Gross <jgross@suse.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: virtualization@lists.linux-foundation.org Link: http://lkml.kernel.org/r/20180911091510.GA12094@zn.tnic Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/kernel/paravirt_patch_32.c44
-rw-r--r--arch/x86/kernel/paravirt_patch_64.c46
2 files changed, 33 insertions, 57 deletions
diff --git a/arch/x86/kernel/paravirt_patch_32.c b/arch/x86/kernel/paravirt_patch_32.c
index d460cbcabcfe..6368c22fa1fa 100644
--- a/arch/x86/kernel/paravirt_patch_32.c
+++ b/arch/x86/kernel/paravirt_patch_32.c
@@ -34,14 +34,10 @@ extern bool pv_is_native_vcpu_is_preempted(void);
34 34
35unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len) 35unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
36{ 36{
37 const unsigned char *start, *end;
38 unsigned ret;
39
40#define PATCH_SITE(ops, x) \ 37#define PATCH_SITE(ops, x) \
41 case PARAVIRT_PATCH(ops.x): \ 38 case PARAVIRT_PATCH(ops.x): \
42 start = start_##ops##_##x; \ 39 return paravirt_patch_insns(ibuf, len, start_##ops##_##x, end_##ops##_##x)
43 end = end_##ops##_##x; \ 40
44 goto patch_site
45 switch (type) { 41 switch (type) {
46#ifdef CONFIG_PARAVIRT_XXL 42#ifdef CONFIG_PARAVIRT_XXL
47 PATCH_SITE(irq, irq_disable); 43 PATCH_SITE(irq, irq_disable);
@@ -54,32 +50,24 @@ unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
54 PATCH_SITE(mmu, write_cr3); 50 PATCH_SITE(mmu, write_cr3);
55#endif 51#endif
56#if defined(CONFIG_PARAVIRT_SPINLOCKS) 52#if defined(CONFIG_PARAVIRT_SPINLOCKS)
57 case PARAVIRT_PATCH(lock.queued_spin_unlock): 53 case PARAVIRT_PATCH(lock.queued_spin_unlock):
58 if (pv_is_native_spin_unlock()) { 54 if (pv_is_native_spin_unlock())
59 start = start_lock_queued_spin_unlock; 55 return paravirt_patch_insns(ibuf, len,
60 end = end_lock_queued_spin_unlock; 56 start_lock_queued_spin_unlock,
61 goto patch_site; 57 end_lock_queued_spin_unlock);
62 } 58 break;
63 goto patch_default;
64 59
65 case PARAVIRT_PATCH(lock.vcpu_is_preempted): 60 case PARAVIRT_PATCH(lock.vcpu_is_preempted):
66 if (pv_is_native_vcpu_is_preempted()) { 61 if (pv_is_native_vcpu_is_preempted())
67 start = start_lock_vcpu_is_preempted; 62 return paravirt_patch_insns(ibuf, len,
68 end = end_lock_vcpu_is_preempted; 63 start_lock_vcpu_is_preempted,
69 goto patch_site; 64 end_lock_vcpu_is_preempted);
70 } 65 break;
71 goto patch_default;
72#endif 66#endif
73 67
74 default: 68 default:
75patch_default: __maybe_unused
76 ret = paravirt_patch_default(type, ibuf, addr, len);
77 break;
78
79patch_site:
80 ret = paravirt_patch_insns(ibuf, len, start, end);
81 break; 69 break;
82 } 70 }
83#undef PATCH_SITE 71#undef PATCH_SITE
84 return ret; 72 return paravirt_patch_default(type, ibuf, addr, len);
85} 73}
diff --git a/arch/x86/kernel/paravirt_patch_64.c b/arch/x86/kernel/paravirt_patch_64.c
index 5ad5bcda9dc6..7ca9cb726f4d 100644
--- a/arch/x86/kernel/paravirt_patch_64.c
+++ b/arch/x86/kernel/paravirt_patch_64.c
@@ -42,15 +42,11 @@ extern bool pv_is_native_vcpu_is_preempted(void);
42 42
43unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len) 43unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
44{ 44{
45 const unsigned char *start, *end;
46 unsigned ret;
47
48#define PATCH_SITE(ops, x) \ 45#define PATCH_SITE(ops, x) \
49 case PARAVIRT_PATCH(ops.x): \ 46 case PARAVIRT_PATCH(ops.x): \
50 start = start_##ops##_##x; \ 47 return paravirt_patch_insns(ibuf, len, start_##ops##_##x, end_##ops##_##x)
51 end = end_##ops##_##x; \ 48
52 goto patch_site 49 switch (type) {
53 switch(type) {
54#ifdef CONFIG_PARAVIRT_XXL 50#ifdef CONFIG_PARAVIRT_XXL
55 PATCH_SITE(irq, restore_fl); 51 PATCH_SITE(irq, restore_fl);
56 PATCH_SITE(irq, save_fl); 52 PATCH_SITE(irq, save_fl);
@@ -64,32 +60,24 @@ unsigned native_patch(u8 type, void *ibuf, unsigned long addr, unsigned len)
64 PATCH_SITE(mmu, write_cr3); 60 PATCH_SITE(mmu, write_cr3);
65#endif 61#endif
66#if defined(CONFIG_PARAVIRT_SPINLOCKS) 62#if defined(CONFIG_PARAVIRT_SPINLOCKS)
67 case PARAVIRT_PATCH(lock.queued_spin_unlock): 63 case PARAVIRT_PATCH(lock.queued_spin_unlock):
68 if (pv_is_native_spin_unlock()) { 64 if (pv_is_native_spin_unlock())
69 start = start_lock_queued_spin_unlock; 65 return paravirt_patch_insns(ibuf, len,
70 end = end_lock_queued_spin_unlock; 66 start_lock_queued_spin_unlock,
71 goto patch_site; 67 end_lock_queued_spin_unlock);
72 } 68 break;
73 goto patch_default;
74 69
75 case PARAVIRT_PATCH(lock.vcpu_is_preempted): 70 case PARAVIRT_PATCH(lock.vcpu_is_preempted):
76 if (pv_is_native_vcpu_is_preempted()) { 71 if (pv_is_native_vcpu_is_preempted())
77 start = start_lock_vcpu_is_preempted; 72 return paravirt_patch_insns(ibuf, len,
78 end = end_lock_vcpu_is_preempted; 73 start_lock_vcpu_is_preempted,
79 goto patch_site; 74 end_lock_vcpu_is_preempted);
80 } 75 break;
81 goto patch_default;
82#endif 76#endif
83 77
84 default: 78 default:
85patch_default: __maybe_unused
86 ret = paravirt_patch_default(type, ibuf, addr, len);
87 break;
88
89patch_site:
90 ret = paravirt_patch_insns(ibuf, len, start, end);
91 break; 79 break;
92 } 80 }
93#undef PATCH_SITE 81#undef PATCH_SITE
94 return ret; 82 return paravirt_patch_default(type, ibuf, addr, len);
95} 83}