diff options
Diffstat (limited to 'arch/x86/kernel/alternative.c')
-rw-r--r-- | arch/x86/kernel/alternative.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index dff1c9e1c2ee..8cb5dbbd9c2e 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c | |||
@@ -63,11 +63,11 @@ __setup("noreplace-paravirt", setup_noreplace_paravirt); | |||
63 | /* Use inline assembly to define this because the nops are defined | 63 | /* Use inline assembly to define this because the nops are defined |
64 | as inline assembly strings in the include files and we cannot | 64 | as inline assembly strings in the include files and we cannot |
65 | get them easily into strings. */ | 65 | get them easily into strings. */ |
66 | asm("\t.data\nintelnops: " | 66 | asm("\t.section .rodata, \"a\"\nintelnops: " |
67 | GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6 | 67 | GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6 |
68 | GENERIC_NOP7 GENERIC_NOP8); | 68 | GENERIC_NOP7 GENERIC_NOP8); |
69 | extern unsigned char intelnops[]; | 69 | extern const unsigned char intelnops[]; |
70 | static unsigned char *intel_nops[ASM_NOP_MAX+1] = { | 70 | static const unsigned char *const intel_nops[ASM_NOP_MAX+1] = { |
71 | NULL, | 71 | NULL, |
72 | intelnops, | 72 | intelnops, |
73 | intelnops + 1, | 73 | intelnops + 1, |
@@ -81,11 +81,11 @@ static unsigned char *intel_nops[ASM_NOP_MAX+1] = { | |||
81 | #endif | 81 | #endif |
82 | 82 | ||
83 | #ifdef K8_NOP1 | 83 | #ifdef K8_NOP1 |
84 | asm("\t.data\nk8nops: " | 84 | asm("\t.section .rodata, \"a\"\nk8nops: " |
85 | K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6 | 85 | K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6 |
86 | K8_NOP7 K8_NOP8); | 86 | K8_NOP7 K8_NOP8); |
87 | extern unsigned char k8nops[]; | 87 | extern const unsigned char k8nops[]; |
88 | static unsigned char *k8_nops[ASM_NOP_MAX+1] = { | 88 | static const unsigned char *const k8_nops[ASM_NOP_MAX+1] = { |
89 | NULL, | 89 | NULL, |
90 | k8nops, | 90 | k8nops, |
91 | k8nops + 1, | 91 | k8nops + 1, |
@@ -99,11 +99,11 @@ static unsigned char *k8_nops[ASM_NOP_MAX+1] = { | |||
99 | #endif | 99 | #endif |
100 | 100 | ||
101 | #ifdef K7_NOP1 | 101 | #ifdef K7_NOP1 |
102 | asm("\t.data\nk7nops: " | 102 | asm("\t.section .rodata, \"a\"\nk7nops: " |
103 | K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6 | 103 | K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6 |
104 | K7_NOP7 K7_NOP8); | 104 | K7_NOP7 K7_NOP8); |
105 | extern unsigned char k7nops[]; | 105 | extern const unsigned char k7nops[]; |
106 | static unsigned char *k7_nops[ASM_NOP_MAX+1] = { | 106 | static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = { |
107 | NULL, | 107 | NULL, |
108 | k7nops, | 108 | k7nops, |
109 | k7nops + 1, | 109 | k7nops + 1, |
@@ -119,25 +119,25 @@ static unsigned char *k7_nops[ASM_NOP_MAX+1] = { | |||
119 | #ifdef CONFIG_X86_64 | 119 | #ifdef CONFIG_X86_64 |
120 | 120 | ||
121 | extern char __vsyscall_0; | 121 | extern char __vsyscall_0; |
122 | static inline unsigned char** find_nop_table(void) | 122 | static inline const unsigned char*const * find_nop_table(void) |
123 | { | 123 | { |
124 | return k8_nops; | 124 | return k8_nops; |
125 | } | 125 | } |
126 | 126 | ||
127 | #else /* CONFIG_X86_64 */ | 127 | #else /* CONFIG_X86_64 */ |
128 | 128 | ||
129 | static struct nop { | 129 | static const struct nop { |
130 | int cpuid; | 130 | int cpuid; |
131 | unsigned char **noptable; | 131 | const unsigned char *const *noptable; |
132 | } noptypes[] = { | 132 | } noptypes[] = { |
133 | { X86_FEATURE_K8, k8_nops }, | 133 | { X86_FEATURE_K8, k8_nops }, |
134 | { X86_FEATURE_K7, k7_nops }, | 134 | { X86_FEATURE_K7, k7_nops }, |
135 | { -1, NULL } | 135 | { -1, NULL } |
136 | }; | 136 | }; |
137 | 137 | ||
138 | static unsigned char** find_nop_table(void) | 138 | static const unsigned char*const * find_nop_table(void) |
139 | { | 139 | { |
140 | unsigned char **noptable = intel_nops; | 140 | const unsigned char *const *noptable = intel_nops; |
141 | int i; | 141 | int i; |
142 | 142 | ||
143 | for (i = 0; noptypes[i].cpuid >= 0; i++) { | 143 | for (i = 0; noptypes[i].cpuid >= 0; i++) { |
@@ -154,7 +154,7 @@ static unsigned char** find_nop_table(void) | |||
154 | /* Use this to add nops to a buffer, then text_poke the whole buffer. */ | 154 | /* Use this to add nops to a buffer, then text_poke the whole buffer. */ |
155 | static void add_nops(void *insns, unsigned int len) | 155 | static void add_nops(void *insns, unsigned int len) |
156 | { | 156 | { |
157 | unsigned char **noptable = find_nop_table(); | 157 | const unsigned char *const *noptable = find_nop_table(); |
158 | 158 | ||
159 | while (len > 0) { | 159 | while (len > 0) { |
160 | unsigned int noplen = len; | 160 | unsigned int noplen = len; |