Annotation of /trunk/kernel-alx/patches-5.4/0206-5.4.107-all-fixes.patch
Parent Directory | Revision Log
Revision 3635 -
(hide annotations)
(download)
Mon Oct 24 12:34:12 2022 UTC (19 months, 1 week ago) by niro
File size: 118318 byte(s)
Mon Oct 24 12:34:12 2022 UTC (19 months, 1 week ago) by niro
File size: 118318 byte(s)
-sync kernel patches
1 | niro | 3635 | diff --git a/Makefile b/Makefile |
2 | index a333b378f1f71..43159b21a83f4 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,7 +1,7 @@ | ||
6 | # SPDX-License-Identifier: GPL-2.0 | ||
7 | VERSION = 5 | ||
8 | PATCHLEVEL = 4 | ||
9 | -SUBLEVEL = 106 | ||
10 | +SUBLEVEL = 107 | ||
11 | EXTRAVERSION = | ||
12 | NAME = Kleptomaniac Octopus | ||
13 | |||
14 | diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h | ||
15 | index 97f21cc666579..7f7fdb16bb968 100644 | ||
16 | --- a/arch/arm64/include/asm/kvm_hyp.h | ||
17 | +++ b/arch/arm64/include/asm/kvm_hyp.h | ||
18 | @@ -71,6 +71,9 @@ void __sysreg32_restore_state(struct kvm_vcpu *vcpu); | ||
19 | |||
20 | void __debug_switch_to_guest(struct kvm_vcpu *vcpu); | ||
21 | void __debug_switch_to_host(struct kvm_vcpu *vcpu); | ||
22 | +void __debug_save_host_buffers_nvhe(struct kvm_vcpu *vcpu); | ||
23 | +void __debug_restore_host_buffers_nvhe(struct kvm_vcpu *vcpu); | ||
24 | + | ||
25 | |||
26 | void __fpsimd_save_state(struct user_fpsimd_state *fp_regs); | ||
27 | void __fpsimd_restore_state(struct user_fpsimd_state *fp_regs); | ||
28 | diff --git a/arch/arm64/kvm/hyp/debug-sr.c b/arch/arm64/kvm/hyp/debug-sr.c | ||
29 | index 0fc9872a14671..aead8a5fbe919 100644 | ||
30 | --- a/arch/arm64/kvm/hyp/debug-sr.c | ||
31 | +++ b/arch/arm64/kvm/hyp/debug-sr.c | ||
32 | @@ -168,6 +168,21 @@ static void __hyp_text __debug_restore_state(struct kvm_vcpu *vcpu, | ||
33 | write_sysreg(ctxt->sys_regs[MDCCINT_EL1], mdccint_el1); | ||
34 | } | ||
35 | |||
36 | +void __hyp_text __debug_save_host_buffers_nvhe(struct kvm_vcpu *vcpu) | ||
37 | +{ | ||
38 | + /* | ||
39 | + * Non-VHE: Disable and flush SPE data generation | ||
40 | + * VHE: The vcpu can run, but it can't hide. | ||
41 | + */ | ||
42 | + __debug_save_spe_nvhe(&vcpu->arch.host_debug_state.pmscr_el1); | ||
43 | + | ||
44 | +} | ||
45 | + | ||
46 | +void __hyp_text __debug_restore_host_buffers_nvhe(struct kvm_vcpu *vcpu) | ||
47 | +{ | ||
48 | + __debug_restore_spe_nvhe(vcpu->arch.host_debug_state.pmscr_el1); | ||
49 | +} | ||
50 | + | ||
51 | void __hyp_text __debug_switch_to_guest(struct kvm_vcpu *vcpu) | ||
52 | { | ||
53 | struct kvm_cpu_context *host_ctxt; | ||
54 | @@ -175,13 +190,6 @@ void __hyp_text __debug_switch_to_guest(struct kvm_vcpu *vcpu) | ||
55 | struct kvm_guest_debug_arch *host_dbg; | ||
56 | struct kvm_guest_debug_arch *guest_dbg; | ||
57 | |||
58 | - /* | ||
59 | - * Non-VHE: Disable and flush SPE data generation | ||
60 | - * VHE: The vcpu can run, but it can't hide. | ||
61 | - */ | ||
62 | - if (!has_vhe()) | ||
63 | - __debug_save_spe_nvhe(&vcpu->arch.host_debug_state.pmscr_el1); | ||
64 | - | ||
65 | if (!(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY)) | ||
66 | return; | ||
67 | |||
68 | @@ -201,8 +209,6 @@ void __hyp_text __debug_switch_to_host(struct kvm_vcpu *vcpu) | ||
69 | struct kvm_guest_debug_arch *host_dbg; | ||
70 | struct kvm_guest_debug_arch *guest_dbg; | ||
71 | |||
72 | - if (!has_vhe()) | ||
73 | - __debug_restore_spe_nvhe(vcpu->arch.host_debug_state.pmscr_el1); | ||
74 | |||
75 | if (!(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY)) | ||
76 | return; | ||
77 | diff --git a/arch/arm64/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c | ||
78 | index 84964983198e2..14607fac7ca38 100644 | ||
79 | --- a/arch/arm64/kvm/hyp/switch.c | ||
80 | +++ b/arch/arm64/kvm/hyp/switch.c | ||
81 | @@ -682,6 +682,15 @@ int __hyp_text __kvm_vcpu_run_nvhe(struct kvm_vcpu *vcpu) | ||
82 | |||
83 | __sysreg_save_state_nvhe(host_ctxt); | ||
84 | |||
85 | + /* | ||
86 | + * We must flush and disable the SPE buffer for nVHE, as | ||
87 | + * the translation regime(EL1&0) is going to be loaded with | ||
88 | + * that of the guest. And we must do this before we change the | ||
89 | + * translation regime to EL2 (via MDCR_EL2_EPB == 0) and | ||
90 | + * before we load guest Stage1. | ||
91 | + */ | ||
92 | + __debug_save_host_buffers_nvhe(vcpu); | ||
93 | + | ||
94 | __activate_vm(kern_hyp_va(vcpu->kvm)); | ||
95 | __activate_traps(vcpu); | ||
96 | |||
97 | @@ -720,11 +729,13 @@ int __hyp_text __kvm_vcpu_run_nvhe(struct kvm_vcpu *vcpu) | ||
98 | if (vcpu->arch.flags & KVM_ARM64_FP_ENABLED) | ||
99 | __fpsimd_save_fpexc32(vcpu); | ||
100 | |||
101 | + __debug_switch_to_host(vcpu); | ||
102 | + | ||
103 | /* | ||
104 | * This must come after restoring the host sysregs, since a non-VHE | ||
105 | * system may enable SPE here and make use of the TTBRs. | ||
106 | */ | ||
107 | - __debug_switch_to_host(vcpu); | ||
108 | + __debug_restore_host_buffers_nvhe(vcpu); | ||
109 | |||
110 | if (pmu_switch_needed) | ||
111 | __pmu_switch_to_host(host_ctxt); | ||
112 | diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S | ||
113 | index 9afeb58c910eb..dd954d8db629b 100644 | ||
114 | --- a/arch/x86/crypto/aesni-intel_asm.S | ||
115 | +++ b/arch/x86/crypto/aesni-intel_asm.S | ||
116 | @@ -319,7 +319,7 @@ _initial_blocks_\@: | ||
117 | |||
118 | # Main loop - Encrypt/Decrypt remaining blocks | ||
119 | |||
120 | - cmp $0, %r13 | ||
121 | + test %r13, %r13 | ||
122 | je _zero_cipher_left_\@ | ||
123 | sub $64, %r13 | ||
124 | je _four_cipher_left_\@ | ||
125 | @@ -438,7 +438,7 @@ _multiple_of_16_bytes_\@: | ||
126 | |||
127 | mov PBlockLen(%arg2), %r12 | ||
128 | |||
129 | - cmp $0, %r12 | ||
130 | + test %r12, %r12 | ||
131 | je _partial_done\@ | ||
132 | |||
133 | GHASH_MUL %xmm8, %xmm13, %xmm9, %xmm10, %xmm11, %xmm5, %xmm6 | ||
134 | @@ -475,7 +475,7 @@ _T_8_\@: | ||
135 | add $8, %r10 | ||
136 | sub $8, %r11 | ||
137 | psrldq $8, %xmm0 | ||
138 | - cmp $0, %r11 | ||
139 | + test %r11, %r11 | ||
140 | je _return_T_done_\@ | ||
141 | _T_4_\@: | ||
142 | movd %xmm0, %eax | ||
143 | @@ -483,7 +483,7 @@ _T_4_\@: | ||
144 | add $4, %r10 | ||
145 | sub $4, %r11 | ||
146 | psrldq $4, %xmm0 | ||
147 | - cmp $0, %r11 | ||
148 | + test %r11, %r11 | ||
149 | je _return_T_done_\@ | ||
150 | _T_123_\@: | ||
151 | movd %xmm0, %eax | ||
152 | @@ -620,7 +620,7 @@ _get_AAD_blocks\@: | ||
153 | |||
154 | /* read the last <16B of AAD */ | ||
155 | _get_AAD_rest\@: | ||
156 | - cmp $0, %r11 | ||
157 | + test %r11, %r11 | ||
158 | je _get_AAD_done\@ | ||
159 | |||
160 | READ_PARTIAL_BLOCK %r10, %r11, \TMP1, \TMP7 | ||
161 | @@ -641,7 +641,7 @@ _get_AAD_done\@: | ||
162 | .macro PARTIAL_BLOCK CYPH_PLAIN_OUT PLAIN_CYPH_IN PLAIN_CYPH_LEN DATA_OFFSET \ | ||
163 | AAD_HASH operation | ||
164 | mov PBlockLen(%arg2), %r13 | ||
165 | - cmp $0, %r13 | ||
166 | + test %r13, %r13 | ||
167 | je _partial_block_done_\@ # Leave Macro if no partial blocks | ||
168 | # Read in input data without over reading | ||
169 | cmp $16, \PLAIN_CYPH_LEN | ||
170 | @@ -693,7 +693,7 @@ _no_extra_mask_1_\@: | ||
171 | PSHUFB_XMM %xmm2, %xmm3 | ||
172 | pxor %xmm3, \AAD_HASH | ||
173 | |||
174 | - cmp $0, %r10 | ||
175 | + test %r10, %r10 | ||
176 | jl _partial_incomplete_1_\@ | ||
177 | |||
178 | # GHASH computation for the last <16 Byte block | ||
179 | @@ -728,7 +728,7 @@ _no_extra_mask_2_\@: | ||
180 | PSHUFB_XMM %xmm2, %xmm9 | ||
181 | pxor %xmm9, \AAD_HASH | ||
182 | |||
183 | - cmp $0, %r10 | ||
184 | + test %r10, %r10 | ||
185 | jl _partial_incomplete_2_\@ | ||
186 | |||
187 | # GHASH computation for the last <16 Byte block | ||
188 | @@ -748,7 +748,7 @@ _encode_done_\@: | ||
189 | PSHUFB_XMM %xmm2, %xmm9 | ||
190 | .endif | ||
191 | # output encrypted Bytes | ||
192 | - cmp $0, %r10 | ||
193 | + test %r10, %r10 | ||
194 | jl _partial_fill_\@ | ||
195 | mov %r13, %r12 | ||
196 | mov $16, %r13 | ||
197 | @@ -1946,7 +1946,7 @@ ENTRY(aesni_set_key) | ||
198 | ENDPROC(aesni_set_key) | ||
199 | |||
200 | /* | ||
201 | - * void aesni_enc(struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src) | ||
202 | + * void aesni_enc(const void *ctx, u8 *dst, const u8 *src) | ||
203 | */ | ||
204 | ENTRY(aesni_enc) | ||
205 | FRAME_BEGIN | ||
206 | @@ -2137,7 +2137,7 @@ _aesni_enc4: | ||
207 | ENDPROC(_aesni_enc4) | ||
208 | |||
209 | /* | ||
210 | - * void aesni_dec (struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src) | ||
211 | + * void aesni_dec (const void *ctx, u8 *dst, const u8 *src) | ||
212 | */ | ||
213 | ENTRY(aesni_dec) | ||
214 | FRAME_BEGIN | ||
215 | @@ -2726,25 +2726,18 @@ ENDPROC(aesni_ctr_enc) | ||
216 | pxor CTR, IV; | ||
217 | |||
218 | /* | ||
219 | - * void aesni_xts_crypt8(struct crypto_aes_ctx *ctx, const u8 *dst, u8 *src, | ||
220 | - * bool enc, u8 *iv) | ||
221 | + * void aesni_xts_encrypt(const struct crypto_aes_ctx *ctx, u8 *dst, | ||
222 | + * const u8 *src, unsigned int len, le128 *iv) | ||
223 | */ | ||
224 | -ENTRY(aesni_xts_crypt8) | ||
225 | +ENTRY(aesni_xts_encrypt) | ||
226 | FRAME_BEGIN | ||
227 | - cmpb $0, %cl | ||
228 | - movl $0, %ecx | ||
229 | - movl $240, %r10d | ||
230 | - leaq _aesni_enc4, %r11 | ||
231 | - leaq _aesni_dec4, %rax | ||
232 | - cmovel %r10d, %ecx | ||
233 | - cmoveq %rax, %r11 | ||
234 | |||
235 | movdqa .Lgf128mul_x_ble_mask, GF128MUL_MASK | ||
236 | movups (IVP), IV | ||
237 | |||
238 | mov 480(KEYP), KLEN | ||
239 | - addq %rcx, KEYP | ||
240 | |||
241 | +.Lxts_enc_loop4: | ||
242 | movdqa IV, STATE1 | ||
243 | movdqu 0x00(INP), INC | ||
244 | pxor INC, STATE1 | ||
245 | @@ -2768,71 +2761,103 @@ ENTRY(aesni_xts_crypt8) | ||
246 | pxor INC, STATE4 | ||
247 | movdqu IV, 0x30(OUTP) | ||
248 | |||
249 | - CALL_NOSPEC %r11 | ||
250 | + call _aesni_enc4 | ||
251 | |||
252 | movdqu 0x00(OUTP), INC | ||
253 | pxor INC, STATE1 | ||
254 | movdqu STATE1, 0x00(OUTP) | ||
255 | |||
256 | - _aesni_gf128mul_x_ble() | ||
257 | - movdqa IV, STATE1 | ||
258 | - movdqu 0x40(INP), INC | ||
259 | - pxor INC, STATE1 | ||
260 | - movdqu IV, 0x40(OUTP) | ||
261 | - | ||
262 | movdqu 0x10(OUTP), INC | ||
263 | pxor INC, STATE2 | ||
264 | movdqu STATE2, 0x10(OUTP) | ||
265 | |||
266 | - _aesni_gf128mul_x_ble() | ||
267 | - movdqa IV, STATE2 | ||
268 | - movdqu 0x50(INP), INC | ||
269 | - pxor INC, STATE2 | ||
270 | - movdqu IV, 0x50(OUTP) | ||
271 | - | ||
272 | movdqu 0x20(OUTP), INC | ||
273 | pxor INC, STATE3 | ||
274 | movdqu STATE3, 0x20(OUTP) | ||
275 | |||
276 | - _aesni_gf128mul_x_ble() | ||
277 | - movdqa IV, STATE3 | ||
278 | - movdqu 0x60(INP), INC | ||
279 | - pxor INC, STATE3 | ||
280 | - movdqu IV, 0x60(OUTP) | ||
281 | - | ||
282 | movdqu 0x30(OUTP), INC | ||
283 | pxor INC, STATE4 | ||
284 | movdqu STATE4, 0x30(OUTP) | ||
285 | |||
286 | _aesni_gf128mul_x_ble() | ||
287 | - movdqa IV, STATE4 | ||
288 | - movdqu 0x70(INP), INC | ||
289 | - pxor INC, STATE4 | ||
290 | - movdqu IV, 0x70(OUTP) | ||
291 | |||
292 | - _aesni_gf128mul_x_ble() | ||
293 | + add $64, INP | ||
294 | + add $64, OUTP | ||
295 | + sub $64, LEN | ||
296 | + ja .Lxts_enc_loop4 | ||
297 | + | ||
298 | movups IV, (IVP) | ||
299 | |||
300 | - CALL_NOSPEC %r11 | ||
301 | + FRAME_END | ||
302 | + ret | ||
303 | +ENDPROC(aesni_xts_encrypt) | ||
304 | + | ||
305 | +/* | ||
306 | + * void aesni_xts_decrypt(const struct crypto_aes_ctx *ctx, u8 *dst, | ||
307 | + * const u8 *src, unsigned int len, le128 *iv) | ||
308 | + */ | ||
309 | +ENTRY(aesni_xts_decrypt) | ||
310 | + FRAME_BEGIN | ||
311 | + | ||
312 | + movdqa .Lgf128mul_x_ble_mask, GF128MUL_MASK | ||
313 | + movups (IVP), IV | ||
314 | + | ||
315 | + mov 480(KEYP), KLEN | ||
316 | + add $240, KEYP | ||
317 | |||
318 | - movdqu 0x40(OUTP), INC | ||
319 | +.Lxts_dec_loop4: | ||
320 | + movdqa IV, STATE1 | ||
321 | + movdqu 0x00(INP), INC | ||
322 | pxor INC, STATE1 | ||
323 | - movdqu STATE1, 0x40(OUTP) | ||
324 | + movdqu IV, 0x00(OUTP) | ||
325 | |||
326 | - movdqu 0x50(OUTP), INC | ||
327 | + _aesni_gf128mul_x_ble() | ||
328 | + movdqa IV, STATE2 | ||
329 | + movdqu 0x10(INP), INC | ||
330 | + pxor INC, STATE2 | ||
331 | + movdqu IV, 0x10(OUTP) | ||
332 | + | ||
333 | + _aesni_gf128mul_x_ble() | ||
334 | + movdqa IV, STATE3 | ||
335 | + movdqu 0x20(INP), INC | ||
336 | + pxor INC, STATE3 | ||
337 | + movdqu IV, 0x20(OUTP) | ||
338 | + | ||
339 | + _aesni_gf128mul_x_ble() | ||
340 | + movdqa IV, STATE4 | ||
341 | + movdqu 0x30(INP), INC | ||
342 | + pxor INC, STATE4 | ||
343 | + movdqu IV, 0x30(OUTP) | ||
344 | + | ||
345 | + call _aesni_dec4 | ||
346 | + | ||
347 | + movdqu 0x00(OUTP), INC | ||
348 | + pxor INC, STATE1 | ||
349 | + movdqu STATE1, 0x00(OUTP) | ||
350 | + | ||
351 | + movdqu 0x10(OUTP), INC | ||
352 | pxor INC, STATE2 | ||
353 | - movdqu STATE2, 0x50(OUTP) | ||
354 | + movdqu STATE2, 0x10(OUTP) | ||
355 | |||
356 | - movdqu 0x60(OUTP), INC | ||
357 | + movdqu 0x20(OUTP), INC | ||
358 | pxor INC, STATE3 | ||
359 | - movdqu STATE3, 0x60(OUTP) | ||
360 | + movdqu STATE3, 0x20(OUTP) | ||
361 | |||
362 | - movdqu 0x70(OUTP), INC | ||
363 | + movdqu 0x30(OUTP), INC | ||
364 | pxor INC, STATE4 | ||
365 | - movdqu STATE4, 0x70(OUTP) | ||
366 | + movdqu STATE4, 0x30(OUTP) | ||
367 | + | ||
368 | + _aesni_gf128mul_x_ble() | ||
369 | + | ||
370 | + add $64, INP | ||
371 | + add $64, OUTP | ||
372 | + sub $64, LEN | ||
373 | + ja .Lxts_dec_loop4 | ||
374 | + | ||
375 | + movups IV, (IVP) | ||
376 | |||
377 | FRAME_END | ||
378 | ret | ||
379 | -ENDPROC(aesni_xts_crypt8) | ||
380 | +ENDPROC(aesni_xts_decrypt) | ||
381 | |||
382 | #endif | ||
383 | diff --git a/arch/x86/crypto/aesni-intel_avx-x86_64.S b/arch/x86/crypto/aesni-intel_avx-x86_64.S | ||
384 | index 91c039ab56999..4e4d34956170b 100644 | ||
385 | --- a/arch/x86/crypto/aesni-intel_avx-x86_64.S | ||
386 | +++ b/arch/x86/crypto/aesni-intel_avx-x86_64.S | ||
387 | @@ -370,7 +370,7 @@ _initial_num_blocks_is_0\@: | ||
388 | |||
389 | |||
390 | _initial_blocks_encrypted\@: | ||
391 | - cmp $0, %r13 | ||
392 | + test %r13, %r13 | ||
393 | je _zero_cipher_left\@ | ||
394 | |||
395 | sub $128, %r13 | ||
396 | @@ -529,7 +529,7 @@ _multiple_of_16_bytes\@: | ||
397 | vmovdqu HashKey(arg2), %xmm13 | ||
398 | |||
399 | mov PBlockLen(arg2), %r12 | ||
400 | - cmp $0, %r12 | ||
401 | + test %r12, %r12 | ||
402 | je _partial_done\@ | ||
403 | |||
404 | #GHASH computation for the last <16 Byte block | ||
405 | @@ -574,7 +574,7 @@ _T_8\@: | ||
406 | add $8, %r10 | ||
407 | sub $8, %r11 | ||
408 | vpsrldq $8, %xmm9, %xmm9 | ||
409 | - cmp $0, %r11 | ||
410 | + test %r11, %r11 | ||
411 | je _return_T_done\@ | ||
412 | _T_4\@: | ||
413 | vmovd %xmm9, %eax | ||
414 | @@ -582,7 +582,7 @@ _T_4\@: | ||
415 | add $4, %r10 | ||
416 | sub $4, %r11 | ||
417 | vpsrldq $4, %xmm9, %xmm9 | ||
418 | - cmp $0, %r11 | ||
419 | + test %r11, %r11 | ||
420 | je _return_T_done\@ | ||
421 | _T_123\@: | ||
422 | vmovd %xmm9, %eax | ||
423 | @@ -626,7 +626,7 @@ _get_AAD_blocks\@: | ||
424 | cmp $16, %r11 | ||
425 | jge _get_AAD_blocks\@ | ||
426 | vmovdqu \T8, \T7 | ||
427 | - cmp $0, %r11 | ||
428 | + test %r11, %r11 | ||
429 | je _get_AAD_done\@ | ||
430 | |||
431 | vpxor \T7, \T7, \T7 | ||
432 | @@ -645,7 +645,7 @@ _get_AAD_rest8\@: | ||
433 | vpxor \T1, \T7, \T7 | ||
434 | jmp _get_AAD_rest8\@ | ||
435 | _get_AAD_rest4\@: | ||
436 | - cmp $0, %r11 | ||
437 | + test %r11, %r11 | ||
438 | jle _get_AAD_rest0\@ | ||
439 | mov (%r10), %eax | ||
440 | movq %rax, \T1 | ||
441 | @@ -750,7 +750,7 @@ _done_read_partial_block_\@: | ||
442 | .macro PARTIAL_BLOCK GHASH_MUL CYPH_PLAIN_OUT PLAIN_CYPH_IN PLAIN_CYPH_LEN DATA_OFFSET \ | ||
443 | AAD_HASH ENC_DEC | ||
444 | mov PBlockLen(arg2), %r13 | ||
445 | - cmp $0, %r13 | ||
446 | + test %r13, %r13 | ||
447 | je _partial_block_done_\@ # Leave Macro if no partial blocks | ||
448 | # Read in input data without over reading | ||
449 | cmp $16, \PLAIN_CYPH_LEN | ||
450 | @@ -802,7 +802,7 @@ _no_extra_mask_1_\@: | ||
451 | vpshufb %xmm2, %xmm3, %xmm3 | ||
452 | vpxor %xmm3, \AAD_HASH, \AAD_HASH | ||
453 | |||
454 | - cmp $0, %r10 | ||
455 | + test %r10, %r10 | ||
456 | jl _partial_incomplete_1_\@ | ||
457 | |||
458 | # GHASH computation for the last <16 Byte block | ||
459 | @@ -837,7 +837,7 @@ _no_extra_mask_2_\@: | ||
460 | vpshufb %xmm2, %xmm9, %xmm9 | ||
461 | vpxor %xmm9, \AAD_HASH, \AAD_HASH | ||
462 | |||
463 | - cmp $0, %r10 | ||
464 | + test %r10, %r10 | ||
465 | jl _partial_incomplete_2_\@ | ||
466 | |||
467 | # GHASH computation for the last <16 Byte block | ||
468 | @@ -857,7 +857,7 @@ _encode_done_\@: | ||
469 | vpshufb %xmm2, %xmm9, %xmm9 | ||
470 | .endif | ||
471 | # output encrypted Bytes | ||
472 | - cmp $0, %r10 | ||
473 | + test %r10, %r10 | ||
474 | jl _partial_fill_\@ | ||
475 | mov %r13, %r12 | ||
476 | mov $16, %r13 | ||
477 | diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c | ||
478 | index 88ad272aa2b46..18cfb76daa232 100644 | ||
479 | --- a/arch/x86/crypto/aesni-intel_glue.c | ||
480 | +++ b/arch/x86/crypto/aesni-intel_glue.c | ||
481 | @@ -83,10 +83,8 @@ struct gcm_context_data { | ||
482 | |||
483 | asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key, | ||
484 | unsigned int key_len); | ||
485 | -asmlinkage void aesni_enc(struct crypto_aes_ctx *ctx, u8 *out, | ||
486 | - const u8 *in); | ||
487 | -asmlinkage void aesni_dec(struct crypto_aes_ctx *ctx, u8 *out, | ||
488 | - const u8 *in); | ||
489 | +asmlinkage void aesni_enc(const void *ctx, u8 *out, const u8 *in); | ||
490 | +asmlinkage void aesni_dec(const void *ctx, u8 *out, const u8 *in); | ||
491 | asmlinkage void aesni_ecb_enc(struct crypto_aes_ctx *ctx, u8 *out, | ||
492 | const u8 *in, unsigned int len); | ||
493 | asmlinkage void aesni_ecb_dec(struct crypto_aes_ctx *ctx, u8 *out, | ||
494 | @@ -99,6 +97,12 @@ asmlinkage void aesni_cbc_dec(struct crypto_aes_ctx *ctx, u8 *out, | ||
495 | #define AVX_GEN2_OPTSIZE 640 | ||
496 | #define AVX_GEN4_OPTSIZE 4096 | ||
497 | |||
498 | +asmlinkage void aesni_xts_encrypt(const struct crypto_aes_ctx *ctx, u8 *out, | ||
499 | + const u8 *in, unsigned int len, u8 *iv); | ||
500 | + | ||
501 | +asmlinkage void aesni_xts_decrypt(const struct crypto_aes_ctx *ctx, u8 *out, | ||
502 | + const u8 *in, unsigned int len, u8 *iv); | ||
503 | + | ||
504 | #ifdef CONFIG_X86_64 | ||
505 | |||
506 | static void (*aesni_ctr_enc_tfm)(struct crypto_aes_ctx *ctx, u8 *out, | ||
507 | @@ -106,9 +110,6 @@ static void (*aesni_ctr_enc_tfm)(struct crypto_aes_ctx *ctx, u8 *out, | ||
508 | asmlinkage void aesni_ctr_enc(struct crypto_aes_ctx *ctx, u8 *out, | ||
509 | const u8 *in, unsigned int len, u8 *iv); | ||
510 | |||
511 | -asmlinkage void aesni_xts_crypt8(struct crypto_aes_ctx *ctx, u8 *out, | ||
512 | - const u8 *in, bool enc, u8 *iv); | ||
513 | - | ||
514 | /* asmlinkage void aesni_gcm_enc() | ||
515 | * void *ctx, AES Key schedule. Starts on a 16 byte boundary. | ||
516 | * struct gcm_context_data. May be uninitialized. | ||
517 | @@ -550,29 +551,24 @@ static int xts_aesni_setkey(struct crypto_skcipher *tfm, const u8 *key, | ||
518 | } | ||
519 | |||
520 | |||
521 | -static void aesni_xts_tweak(void *ctx, u8 *out, const u8 *in) | ||
522 | -{ | ||
523 | - aesni_enc(ctx, out, in); | ||
524 | -} | ||
525 | - | ||
526 | -static void aesni_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
527 | +static void aesni_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
528 | { | ||
529 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, GLUE_FUNC_CAST(aesni_enc)); | ||
530 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, aesni_enc); | ||
531 | } | ||
532 | |||
533 | -static void aesni_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
534 | +static void aesni_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
535 | { | ||
536 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, GLUE_FUNC_CAST(aesni_dec)); | ||
537 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, aesni_dec); | ||
538 | } | ||
539 | |||
540 | -static void aesni_xts_enc8(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
541 | +static void aesni_xts_enc32(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
542 | { | ||
543 | - aesni_xts_crypt8(ctx, (u8 *)dst, (const u8 *)src, true, (u8 *)iv); | ||
544 | + aesni_xts_encrypt(ctx, dst, src, 32 * AES_BLOCK_SIZE, (u8 *)iv); | ||
545 | } | ||
546 | |||
547 | -static void aesni_xts_dec8(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
548 | +static void aesni_xts_dec32(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
549 | { | ||
550 | - aesni_xts_crypt8(ctx, (u8 *)dst, (const u8 *)src, false, (u8 *)iv); | ||
551 | + aesni_xts_decrypt(ctx, dst, src, 32 * AES_BLOCK_SIZE, (u8 *)iv); | ||
552 | } | ||
553 | |||
554 | static const struct common_glue_ctx aesni_enc_xts = { | ||
555 | @@ -580,11 +576,11 @@ static const struct common_glue_ctx aesni_enc_xts = { | ||
556 | .fpu_blocks_limit = 1, | ||
557 | |||
558 | .funcs = { { | ||
559 | - .num_blocks = 8, | ||
560 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_enc8) } | ||
561 | + .num_blocks = 32, | ||
562 | + .fn_u = { .xts = aesni_xts_enc32 } | ||
563 | }, { | ||
564 | .num_blocks = 1, | ||
565 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_enc) } | ||
566 | + .fn_u = { .xts = aesni_xts_enc } | ||
567 | } } | ||
568 | }; | ||
569 | |||
570 | @@ -593,11 +589,11 @@ static const struct common_glue_ctx aesni_dec_xts = { | ||
571 | .fpu_blocks_limit = 1, | ||
572 | |||
573 | .funcs = { { | ||
574 | - .num_blocks = 8, | ||
575 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_dec8) } | ||
576 | + .num_blocks = 32, | ||
577 | + .fn_u = { .xts = aesni_xts_dec32 } | ||
578 | }, { | ||
579 | .num_blocks = 1, | ||
580 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(aesni_xts_dec) } | ||
581 | + .fn_u = { .xts = aesni_xts_dec } | ||
582 | } } | ||
583 | }; | ||
584 | |||
585 | @@ -606,8 +602,7 @@ static int xts_encrypt(struct skcipher_request *req) | ||
586 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
587 | struct aesni_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
588 | |||
589 | - return glue_xts_req_128bit(&aesni_enc_xts, req, | ||
590 | - XTS_TWEAK_CAST(aesni_xts_tweak), | ||
591 | + return glue_xts_req_128bit(&aesni_enc_xts, req, aesni_enc, | ||
592 | aes_ctx(ctx->raw_tweak_ctx), | ||
593 | aes_ctx(ctx->raw_crypt_ctx), | ||
594 | false); | ||
595 | @@ -618,8 +613,7 @@ static int xts_decrypt(struct skcipher_request *req) | ||
596 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
597 | struct aesni_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
598 | |||
599 | - return glue_xts_req_128bit(&aesni_dec_xts, req, | ||
600 | - XTS_TWEAK_CAST(aesni_xts_tweak), | ||
601 | + return glue_xts_req_128bit(&aesni_dec_xts, req, aesni_enc, | ||
602 | aes_ctx(ctx->raw_tweak_ctx), | ||
603 | aes_ctx(ctx->raw_crypt_ctx), | ||
604 | true); | ||
605 | diff --git a/arch/x86/crypto/camellia_aesni_avx2_glue.c b/arch/x86/crypto/camellia_aesni_avx2_glue.c | ||
606 | index a4f00128ea552..a8cc2c83fe1bb 100644 | ||
607 | --- a/arch/x86/crypto/camellia_aesni_avx2_glue.c | ||
608 | +++ b/arch/x86/crypto/camellia_aesni_avx2_glue.c | ||
609 | @@ -19,20 +19,17 @@ | ||
610 | #define CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS 32 | ||
611 | |||
612 | /* 32-way AVX2/AES-NI parallel cipher functions */ | ||
613 | -asmlinkage void camellia_ecb_enc_32way(struct camellia_ctx *ctx, u8 *dst, | ||
614 | - const u8 *src); | ||
615 | -asmlinkage void camellia_ecb_dec_32way(struct camellia_ctx *ctx, u8 *dst, | ||
616 | - const u8 *src); | ||
617 | +asmlinkage void camellia_ecb_enc_32way(const void *ctx, u8 *dst, const u8 *src); | ||
618 | +asmlinkage void camellia_ecb_dec_32way(const void *ctx, u8 *dst, const u8 *src); | ||
619 | |||
620 | -asmlinkage void camellia_cbc_dec_32way(struct camellia_ctx *ctx, u8 *dst, | ||
621 | - const u8 *src); | ||
622 | -asmlinkage void camellia_ctr_32way(struct camellia_ctx *ctx, u8 *dst, | ||
623 | - const u8 *src, le128 *iv); | ||
624 | +asmlinkage void camellia_cbc_dec_32way(const void *ctx, u8 *dst, const u8 *src); | ||
625 | +asmlinkage void camellia_ctr_32way(const void *ctx, u8 *dst, const u8 *src, | ||
626 | + le128 *iv); | ||
627 | |||
628 | -asmlinkage void camellia_xts_enc_32way(struct camellia_ctx *ctx, u8 *dst, | ||
629 | - const u8 *src, le128 *iv); | ||
630 | -asmlinkage void camellia_xts_dec_32way(struct camellia_ctx *ctx, u8 *dst, | ||
631 | - const u8 *src, le128 *iv); | ||
632 | +asmlinkage void camellia_xts_enc_32way(const void *ctx, u8 *dst, const u8 *src, | ||
633 | + le128 *iv); | ||
634 | +asmlinkage void camellia_xts_dec_32way(const void *ctx, u8 *dst, const u8 *src, | ||
635 | + le128 *iv); | ||
636 | |||
637 | static const struct common_glue_ctx camellia_enc = { | ||
638 | .num_funcs = 4, | ||
639 | @@ -40,16 +37,16 @@ static const struct common_glue_ctx camellia_enc = { | ||
640 | |||
641 | .funcs = { { | ||
642 | .num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS, | ||
643 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_enc_32way) } | ||
644 | + .fn_u = { .ecb = camellia_ecb_enc_32way } | ||
645 | }, { | ||
646 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
647 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_enc_16way) } | ||
648 | + .fn_u = { .ecb = camellia_ecb_enc_16way } | ||
649 | }, { | ||
650 | .num_blocks = 2, | ||
651 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk_2way) } | ||
652 | + .fn_u = { .ecb = camellia_enc_blk_2way } | ||
653 | }, { | ||
654 | .num_blocks = 1, | ||
655 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk) } | ||
656 | + .fn_u = { .ecb = camellia_enc_blk } | ||
657 | } } | ||
658 | }; | ||
659 | |||
660 | @@ -59,16 +56,16 @@ static const struct common_glue_ctx camellia_ctr = { | ||
661 | |||
662 | .funcs = { { | ||
663 | .num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS, | ||
664 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_ctr_32way) } | ||
665 | + .fn_u = { .ctr = camellia_ctr_32way } | ||
666 | }, { | ||
667 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
668 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_ctr_16way) } | ||
669 | + .fn_u = { .ctr = camellia_ctr_16way } | ||
670 | }, { | ||
671 | .num_blocks = 2, | ||
672 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr_2way) } | ||
673 | + .fn_u = { .ctr = camellia_crypt_ctr_2way } | ||
674 | }, { | ||
675 | .num_blocks = 1, | ||
676 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr) } | ||
677 | + .fn_u = { .ctr = camellia_crypt_ctr } | ||
678 | } } | ||
679 | }; | ||
680 | |||
681 | @@ -78,13 +75,13 @@ static const struct common_glue_ctx camellia_enc_xts = { | ||
682 | |||
683 | .funcs = { { | ||
684 | .num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS, | ||
685 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc_32way) } | ||
686 | + .fn_u = { .xts = camellia_xts_enc_32way } | ||
687 | }, { | ||
688 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
689 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc_16way) } | ||
690 | + .fn_u = { .xts = camellia_xts_enc_16way } | ||
691 | }, { | ||
692 | .num_blocks = 1, | ||
693 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc) } | ||
694 | + .fn_u = { .xts = camellia_xts_enc } | ||
695 | } } | ||
696 | }; | ||
697 | |||
698 | @@ -94,16 +91,16 @@ static const struct common_glue_ctx camellia_dec = { | ||
699 | |||
700 | .funcs = { { | ||
701 | .num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS, | ||
702 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_dec_32way) } | ||
703 | + .fn_u = { .ecb = camellia_ecb_dec_32way } | ||
704 | }, { | ||
705 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
706 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_dec_16way) } | ||
707 | + .fn_u = { .ecb = camellia_ecb_dec_16way } | ||
708 | }, { | ||
709 | .num_blocks = 2, | ||
710 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk_2way) } | ||
711 | + .fn_u = { .ecb = camellia_dec_blk_2way } | ||
712 | }, { | ||
713 | .num_blocks = 1, | ||
714 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk) } | ||
715 | + .fn_u = { .ecb = camellia_dec_blk } | ||
716 | } } | ||
717 | }; | ||
718 | |||
719 | @@ -113,16 +110,16 @@ static const struct common_glue_ctx camellia_dec_cbc = { | ||
720 | |||
721 | .funcs = { { | ||
722 | .num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS, | ||
723 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_cbc_dec_32way) } | ||
724 | + .fn_u = { .cbc = camellia_cbc_dec_32way } | ||
725 | }, { | ||
726 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
727 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_cbc_dec_16way) } | ||
728 | + .fn_u = { .cbc = camellia_cbc_dec_16way } | ||
729 | }, { | ||
730 | .num_blocks = 2, | ||
731 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_decrypt_cbc_2way) } | ||
732 | + .fn_u = { .cbc = camellia_decrypt_cbc_2way } | ||
733 | }, { | ||
734 | .num_blocks = 1, | ||
735 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_dec_blk) } | ||
736 | + .fn_u = { .cbc = camellia_dec_blk } | ||
737 | } } | ||
738 | }; | ||
739 | |||
740 | @@ -132,13 +129,13 @@ static const struct common_glue_ctx camellia_dec_xts = { | ||
741 | |||
742 | .funcs = { { | ||
743 | .num_blocks = CAMELLIA_AESNI_AVX2_PARALLEL_BLOCKS, | ||
744 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec_32way) } | ||
745 | + .fn_u = { .xts = camellia_xts_dec_32way } | ||
746 | }, { | ||
747 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
748 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec_16way) } | ||
749 | + .fn_u = { .xts = camellia_xts_dec_16way } | ||
750 | }, { | ||
751 | .num_blocks = 1, | ||
752 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec) } | ||
753 | + .fn_u = { .xts = camellia_xts_dec } | ||
754 | } } | ||
755 | }; | ||
756 | |||
757 | @@ -161,8 +158,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
758 | |||
759 | static int cbc_encrypt(struct skcipher_request *req) | ||
760 | { | ||
761 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(camellia_enc_blk), | ||
762 | - req); | ||
763 | + return glue_cbc_encrypt_req_128bit(camellia_enc_blk, req); | ||
764 | } | ||
765 | |||
766 | static int cbc_decrypt(struct skcipher_request *req) | ||
767 | @@ -180,8 +176,7 @@ static int xts_encrypt(struct skcipher_request *req) | ||
768 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
769 | struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
770 | |||
771 | - return glue_xts_req_128bit(&camellia_enc_xts, req, | ||
772 | - XTS_TWEAK_CAST(camellia_enc_blk), | ||
773 | + return glue_xts_req_128bit(&camellia_enc_xts, req, camellia_enc_blk, | ||
774 | &ctx->tweak_ctx, &ctx->crypt_ctx, false); | ||
775 | } | ||
776 | |||
777 | @@ -190,8 +185,7 @@ static int xts_decrypt(struct skcipher_request *req) | ||
778 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
779 | struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
780 | |||
781 | - return glue_xts_req_128bit(&camellia_dec_xts, req, | ||
782 | - XTS_TWEAK_CAST(camellia_enc_blk), | ||
783 | + return glue_xts_req_128bit(&camellia_dec_xts, req, camellia_enc_blk, | ||
784 | &ctx->tweak_ctx, &ctx->crypt_ctx, true); | ||
785 | } | ||
786 | |||
787 | diff --git a/arch/x86/crypto/camellia_aesni_avx_glue.c b/arch/x86/crypto/camellia_aesni_avx_glue.c | ||
788 | index f28d282779b87..31a82a79f4ac9 100644 | ||
789 | --- a/arch/x86/crypto/camellia_aesni_avx_glue.c | ||
790 | +++ b/arch/x86/crypto/camellia_aesni_avx_glue.c | ||
791 | @@ -18,41 +18,36 @@ | ||
792 | #define CAMELLIA_AESNI_PARALLEL_BLOCKS 16 | ||
793 | |||
794 | /* 16-way parallel cipher functions (avx/aes-ni) */ | ||
795 | -asmlinkage void camellia_ecb_enc_16way(struct camellia_ctx *ctx, u8 *dst, | ||
796 | - const u8 *src); | ||
797 | +asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src); | ||
798 | EXPORT_SYMBOL_GPL(camellia_ecb_enc_16way); | ||
799 | |||
800 | -asmlinkage void camellia_ecb_dec_16way(struct camellia_ctx *ctx, u8 *dst, | ||
801 | - const u8 *src); | ||
802 | +asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src); | ||
803 | EXPORT_SYMBOL_GPL(camellia_ecb_dec_16way); | ||
804 | |||
805 | -asmlinkage void camellia_cbc_dec_16way(struct camellia_ctx *ctx, u8 *dst, | ||
806 | - const u8 *src); | ||
807 | +asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src); | ||
808 | EXPORT_SYMBOL_GPL(camellia_cbc_dec_16way); | ||
809 | |||
810 | -asmlinkage void camellia_ctr_16way(struct camellia_ctx *ctx, u8 *dst, | ||
811 | - const u8 *src, le128 *iv); | ||
812 | +asmlinkage void camellia_ctr_16way(const void *ctx, u8 *dst, const u8 *src, | ||
813 | + le128 *iv); | ||
814 | EXPORT_SYMBOL_GPL(camellia_ctr_16way); | ||
815 | |||
816 | -asmlinkage void camellia_xts_enc_16way(struct camellia_ctx *ctx, u8 *dst, | ||
817 | - const u8 *src, le128 *iv); | ||
818 | +asmlinkage void camellia_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src, | ||
819 | + le128 *iv); | ||
820 | EXPORT_SYMBOL_GPL(camellia_xts_enc_16way); | ||
821 | |||
822 | -asmlinkage void camellia_xts_dec_16way(struct camellia_ctx *ctx, u8 *dst, | ||
823 | - const u8 *src, le128 *iv); | ||
824 | +asmlinkage void camellia_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src, | ||
825 | + le128 *iv); | ||
826 | EXPORT_SYMBOL_GPL(camellia_xts_dec_16way); | ||
827 | |||
828 | -void camellia_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
829 | +void camellia_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
830 | { | ||
831 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
832 | - GLUE_FUNC_CAST(camellia_enc_blk)); | ||
833 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, camellia_enc_blk); | ||
834 | } | ||
835 | EXPORT_SYMBOL_GPL(camellia_xts_enc); | ||
836 | |||
837 | -void camellia_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
838 | +void camellia_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
839 | { | ||
840 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
841 | - GLUE_FUNC_CAST(camellia_dec_blk)); | ||
842 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, camellia_dec_blk); | ||
843 | } | ||
844 | EXPORT_SYMBOL_GPL(camellia_xts_dec); | ||
845 | |||
846 | @@ -62,13 +57,13 @@ static const struct common_glue_ctx camellia_enc = { | ||
847 | |||
848 | .funcs = { { | ||
849 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
850 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_enc_16way) } | ||
851 | + .fn_u = { .ecb = camellia_ecb_enc_16way } | ||
852 | }, { | ||
853 | .num_blocks = 2, | ||
854 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk_2way) } | ||
855 | + .fn_u = { .ecb = camellia_enc_blk_2way } | ||
856 | }, { | ||
857 | .num_blocks = 1, | ||
858 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk) } | ||
859 | + .fn_u = { .ecb = camellia_enc_blk } | ||
860 | } } | ||
861 | }; | ||
862 | |||
863 | @@ -78,13 +73,13 @@ static const struct common_glue_ctx camellia_ctr = { | ||
864 | |||
865 | .funcs = { { | ||
866 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
867 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_ctr_16way) } | ||
868 | + .fn_u = { .ctr = camellia_ctr_16way } | ||
869 | }, { | ||
870 | .num_blocks = 2, | ||
871 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr_2way) } | ||
872 | + .fn_u = { .ctr = camellia_crypt_ctr_2way } | ||
873 | }, { | ||
874 | .num_blocks = 1, | ||
875 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr) } | ||
876 | + .fn_u = { .ctr = camellia_crypt_ctr } | ||
877 | } } | ||
878 | }; | ||
879 | |||
880 | @@ -94,10 +89,10 @@ static const struct common_glue_ctx camellia_enc_xts = { | ||
881 | |||
882 | .funcs = { { | ||
883 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
884 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc_16way) } | ||
885 | + .fn_u = { .xts = camellia_xts_enc_16way } | ||
886 | }, { | ||
887 | .num_blocks = 1, | ||
888 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_enc) } | ||
889 | + .fn_u = { .xts = camellia_xts_enc } | ||
890 | } } | ||
891 | }; | ||
892 | |||
893 | @@ -107,13 +102,13 @@ static const struct common_glue_ctx camellia_dec = { | ||
894 | |||
895 | .funcs = { { | ||
896 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
897 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_ecb_dec_16way) } | ||
898 | + .fn_u = { .ecb = camellia_ecb_dec_16way } | ||
899 | }, { | ||
900 | .num_blocks = 2, | ||
901 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk_2way) } | ||
902 | + .fn_u = { .ecb = camellia_dec_blk_2way } | ||
903 | }, { | ||
904 | .num_blocks = 1, | ||
905 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk) } | ||
906 | + .fn_u = { .ecb = camellia_dec_blk } | ||
907 | } } | ||
908 | }; | ||
909 | |||
910 | @@ -123,13 +118,13 @@ static const struct common_glue_ctx camellia_dec_cbc = { | ||
911 | |||
912 | .funcs = { { | ||
913 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
914 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_cbc_dec_16way) } | ||
915 | + .fn_u = { .cbc = camellia_cbc_dec_16way } | ||
916 | }, { | ||
917 | .num_blocks = 2, | ||
918 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_decrypt_cbc_2way) } | ||
919 | + .fn_u = { .cbc = camellia_decrypt_cbc_2way } | ||
920 | }, { | ||
921 | .num_blocks = 1, | ||
922 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_dec_blk) } | ||
923 | + .fn_u = { .cbc = camellia_dec_blk } | ||
924 | } } | ||
925 | }; | ||
926 | |||
927 | @@ -139,10 +134,10 @@ static const struct common_glue_ctx camellia_dec_xts = { | ||
928 | |||
929 | .funcs = { { | ||
930 | .num_blocks = CAMELLIA_AESNI_PARALLEL_BLOCKS, | ||
931 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec_16way) } | ||
932 | + .fn_u = { .xts = camellia_xts_dec_16way } | ||
933 | }, { | ||
934 | .num_blocks = 1, | ||
935 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(camellia_xts_dec) } | ||
936 | + .fn_u = { .xts = camellia_xts_dec } | ||
937 | } } | ||
938 | }; | ||
939 | |||
940 | @@ -165,8 +160,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
941 | |||
942 | static int cbc_encrypt(struct skcipher_request *req) | ||
943 | { | ||
944 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(camellia_enc_blk), | ||
945 | - req); | ||
946 | + return glue_cbc_encrypt_req_128bit(camellia_enc_blk, req); | ||
947 | } | ||
948 | |||
949 | static int cbc_decrypt(struct skcipher_request *req) | ||
950 | @@ -206,8 +200,7 @@ static int xts_encrypt(struct skcipher_request *req) | ||
951 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
952 | struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
953 | |||
954 | - return glue_xts_req_128bit(&camellia_enc_xts, req, | ||
955 | - XTS_TWEAK_CAST(camellia_enc_blk), | ||
956 | + return glue_xts_req_128bit(&camellia_enc_xts, req, camellia_enc_blk, | ||
957 | &ctx->tweak_ctx, &ctx->crypt_ctx, false); | ||
958 | } | ||
959 | |||
960 | @@ -216,8 +209,7 @@ static int xts_decrypt(struct skcipher_request *req) | ||
961 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
962 | struct camellia_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
963 | |||
964 | - return glue_xts_req_128bit(&camellia_dec_xts, req, | ||
965 | - XTS_TWEAK_CAST(camellia_enc_blk), | ||
966 | + return glue_xts_req_128bit(&camellia_dec_xts, req, camellia_enc_blk, | ||
967 | &ctx->tweak_ctx, &ctx->crypt_ctx, true); | ||
968 | } | ||
969 | |||
970 | diff --git a/arch/x86/crypto/camellia_glue.c b/arch/x86/crypto/camellia_glue.c | ||
971 | index 7c62db56ffe1b..5f3ed5af68d70 100644 | ||
972 | --- a/arch/x86/crypto/camellia_glue.c | ||
973 | +++ b/arch/x86/crypto/camellia_glue.c | ||
974 | @@ -18,19 +18,17 @@ | ||
975 | #include <asm/crypto/glue_helper.h> | ||
976 | |||
977 | /* regular block cipher functions */ | ||
978 | -asmlinkage void __camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst, | ||
979 | - const u8 *src, bool xor); | ||
980 | +asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src, | ||
981 | + bool xor); | ||
982 | EXPORT_SYMBOL_GPL(__camellia_enc_blk); | ||
983 | -asmlinkage void camellia_dec_blk(struct camellia_ctx *ctx, u8 *dst, | ||
984 | - const u8 *src); | ||
985 | +asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src); | ||
986 | EXPORT_SYMBOL_GPL(camellia_dec_blk); | ||
987 | |||
988 | /* 2-way parallel cipher functions */ | ||
989 | -asmlinkage void __camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst, | ||
990 | - const u8 *src, bool xor); | ||
991 | +asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src, | ||
992 | + bool xor); | ||
993 | EXPORT_SYMBOL_GPL(__camellia_enc_blk_2way); | ||
994 | -asmlinkage void camellia_dec_blk_2way(struct camellia_ctx *ctx, u8 *dst, | ||
995 | - const u8 *src); | ||
996 | +asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src); | ||
997 | EXPORT_SYMBOL_GPL(camellia_dec_blk_2way); | ||
998 | |||
999 | static void camellia_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
1000 | @@ -1267,8 +1265,10 @@ static int camellia_setkey_skcipher(struct crypto_skcipher *tfm, const u8 *key, | ||
1001 | return camellia_setkey(&tfm->base, key, key_len); | ||
1002 | } | ||
1003 | |||
1004 | -void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src) | ||
1005 | +void camellia_decrypt_cbc_2way(const void *ctx, u8 *d, const u8 *s) | ||
1006 | { | ||
1007 | + u128 *dst = (u128 *)d; | ||
1008 | + const u128 *src = (const u128 *)s; | ||
1009 | u128 iv = *src; | ||
1010 | |||
1011 | camellia_dec_blk_2way(ctx, (u8 *)dst, (u8 *)src); | ||
1012 | @@ -1277,9 +1277,11 @@ void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src) | ||
1013 | } | ||
1014 | EXPORT_SYMBOL_GPL(camellia_decrypt_cbc_2way); | ||
1015 | |||
1016 | -void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1017 | +void camellia_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
1018 | { | ||
1019 | be128 ctrblk; | ||
1020 | + u128 *dst = (u128 *)d; | ||
1021 | + const u128 *src = (const u128 *)s; | ||
1022 | |||
1023 | if (dst != src) | ||
1024 | *dst = *src; | ||
1025 | @@ -1291,9 +1293,11 @@ void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1026 | } | ||
1027 | EXPORT_SYMBOL_GPL(camellia_crypt_ctr); | ||
1028 | |||
1029 | -void camellia_crypt_ctr_2way(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1030 | +void camellia_crypt_ctr_2way(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
1031 | { | ||
1032 | be128 ctrblks[2]; | ||
1033 | + u128 *dst = (u128 *)d; | ||
1034 | + const u128 *src = (const u128 *)s; | ||
1035 | |||
1036 | if (dst != src) { | ||
1037 | dst[0] = src[0]; | ||
1038 | @@ -1315,10 +1319,10 @@ static const struct common_glue_ctx camellia_enc = { | ||
1039 | |||
1040 | .funcs = { { | ||
1041 | .num_blocks = 2, | ||
1042 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk_2way) } | ||
1043 | + .fn_u = { .ecb = camellia_enc_blk_2way } | ||
1044 | }, { | ||
1045 | .num_blocks = 1, | ||
1046 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_enc_blk) } | ||
1047 | + .fn_u = { .ecb = camellia_enc_blk } | ||
1048 | } } | ||
1049 | }; | ||
1050 | |||
1051 | @@ -1328,10 +1332,10 @@ static const struct common_glue_ctx camellia_ctr = { | ||
1052 | |||
1053 | .funcs = { { | ||
1054 | .num_blocks = 2, | ||
1055 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr_2way) } | ||
1056 | + .fn_u = { .ctr = camellia_crypt_ctr_2way } | ||
1057 | }, { | ||
1058 | .num_blocks = 1, | ||
1059 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(camellia_crypt_ctr) } | ||
1060 | + .fn_u = { .ctr = camellia_crypt_ctr } | ||
1061 | } } | ||
1062 | }; | ||
1063 | |||
1064 | @@ -1341,10 +1345,10 @@ static const struct common_glue_ctx camellia_dec = { | ||
1065 | |||
1066 | .funcs = { { | ||
1067 | .num_blocks = 2, | ||
1068 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk_2way) } | ||
1069 | + .fn_u = { .ecb = camellia_dec_blk_2way } | ||
1070 | }, { | ||
1071 | .num_blocks = 1, | ||
1072 | - .fn_u = { .ecb = GLUE_FUNC_CAST(camellia_dec_blk) } | ||
1073 | + .fn_u = { .ecb = camellia_dec_blk } | ||
1074 | } } | ||
1075 | }; | ||
1076 | |||
1077 | @@ -1354,10 +1358,10 @@ static const struct common_glue_ctx camellia_dec_cbc = { | ||
1078 | |||
1079 | .funcs = { { | ||
1080 | .num_blocks = 2, | ||
1081 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_decrypt_cbc_2way) } | ||
1082 | + .fn_u = { .cbc = camellia_decrypt_cbc_2way } | ||
1083 | }, { | ||
1084 | .num_blocks = 1, | ||
1085 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(camellia_dec_blk) } | ||
1086 | + .fn_u = { .cbc = camellia_dec_blk } | ||
1087 | } } | ||
1088 | }; | ||
1089 | |||
1090 | @@ -1373,8 +1377,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
1091 | |||
1092 | static int cbc_encrypt(struct skcipher_request *req) | ||
1093 | { | ||
1094 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(camellia_enc_blk), | ||
1095 | - req); | ||
1096 | + return glue_cbc_encrypt_req_128bit(camellia_enc_blk, req); | ||
1097 | } | ||
1098 | |||
1099 | static int cbc_decrypt(struct skcipher_request *req) | ||
1100 | diff --git a/arch/x86/crypto/cast6_avx_glue.c b/arch/x86/crypto/cast6_avx_glue.c | ||
1101 | index a8a38fffb4a98..da5297475f9ec 100644 | ||
1102 | --- a/arch/x86/crypto/cast6_avx_glue.c | ||
1103 | +++ b/arch/x86/crypto/cast6_avx_glue.c | ||
1104 | @@ -20,20 +20,17 @@ | ||
1105 | |||
1106 | #define CAST6_PARALLEL_BLOCKS 8 | ||
1107 | |||
1108 | -asmlinkage void cast6_ecb_enc_8way(struct cast6_ctx *ctx, u8 *dst, | ||
1109 | - const u8 *src); | ||
1110 | -asmlinkage void cast6_ecb_dec_8way(struct cast6_ctx *ctx, u8 *dst, | ||
1111 | - const u8 *src); | ||
1112 | - | ||
1113 | -asmlinkage void cast6_cbc_dec_8way(struct cast6_ctx *ctx, u8 *dst, | ||
1114 | - const u8 *src); | ||
1115 | -asmlinkage void cast6_ctr_8way(struct cast6_ctx *ctx, u8 *dst, const u8 *src, | ||
1116 | +asmlinkage void cast6_ecb_enc_8way(const void *ctx, u8 *dst, const u8 *src); | ||
1117 | +asmlinkage void cast6_ecb_dec_8way(const void *ctx, u8 *dst, const u8 *src); | ||
1118 | + | ||
1119 | +asmlinkage void cast6_cbc_dec_8way(const void *ctx, u8 *dst, const u8 *src); | ||
1120 | +asmlinkage void cast6_ctr_8way(const void *ctx, u8 *dst, const u8 *src, | ||
1121 | le128 *iv); | ||
1122 | |||
1123 | -asmlinkage void cast6_xts_enc_8way(struct cast6_ctx *ctx, u8 *dst, | ||
1124 | - const u8 *src, le128 *iv); | ||
1125 | -asmlinkage void cast6_xts_dec_8way(struct cast6_ctx *ctx, u8 *dst, | ||
1126 | - const u8 *src, le128 *iv); | ||
1127 | +asmlinkage void cast6_xts_enc_8way(const void *ctx, u8 *dst, const u8 *src, | ||
1128 | + le128 *iv); | ||
1129 | +asmlinkage void cast6_xts_dec_8way(const void *ctx, u8 *dst, const u8 *src, | ||
1130 | + le128 *iv); | ||
1131 | |||
1132 | static int cast6_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1133 | const u8 *key, unsigned int keylen) | ||
1134 | @@ -41,21 +38,21 @@ static int cast6_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1135 | return cast6_setkey(&tfm->base, key, keylen); | ||
1136 | } | ||
1137 | |||
1138 | -static void cast6_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1139 | +static void cast6_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
1140 | { | ||
1141 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
1142 | - GLUE_FUNC_CAST(__cast6_encrypt)); | ||
1143 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, __cast6_encrypt); | ||
1144 | } | ||
1145 | |||
1146 | -static void cast6_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1147 | +static void cast6_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
1148 | { | ||
1149 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
1150 | - GLUE_FUNC_CAST(__cast6_decrypt)); | ||
1151 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, __cast6_decrypt); | ||
1152 | } | ||
1153 | |||
1154 | -static void cast6_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1155 | +static void cast6_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
1156 | { | ||
1157 | be128 ctrblk; | ||
1158 | + u128 *dst = (u128 *)d; | ||
1159 | + const u128 *src = (const u128 *)s; | ||
1160 | |||
1161 | le128_to_be128(&ctrblk, iv); | ||
1162 | le128_inc(iv); | ||
1163 | @@ -70,10 +67,10 @@ static const struct common_glue_ctx cast6_enc = { | ||
1164 | |||
1165 | .funcs = { { | ||
1166 | .num_blocks = CAST6_PARALLEL_BLOCKS, | ||
1167 | - .fn_u = { .ecb = GLUE_FUNC_CAST(cast6_ecb_enc_8way) } | ||
1168 | + .fn_u = { .ecb = cast6_ecb_enc_8way } | ||
1169 | }, { | ||
1170 | .num_blocks = 1, | ||
1171 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__cast6_encrypt) } | ||
1172 | + .fn_u = { .ecb = __cast6_encrypt } | ||
1173 | } } | ||
1174 | }; | ||
1175 | |||
1176 | @@ -83,10 +80,10 @@ static const struct common_glue_ctx cast6_ctr = { | ||
1177 | |||
1178 | .funcs = { { | ||
1179 | .num_blocks = CAST6_PARALLEL_BLOCKS, | ||
1180 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(cast6_ctr_8way) } | ||
1181 | + .fn_u = { .ctr = cast6_ctr_8way } | ||
1182 | }, { | ||
1183 | .num_blocks = 1, | ||
1184 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(cast6_crypt_ctr) } | ||
1185 | + .fn_u = { .ctr = cast6_crypt_ctr } | ||
1186 | } } | ||
1187 | }; | ||
1188 | |||
1189 | @@ -96,10 +93,10 @@ static const struct common_glue_ctx cast6_enc_xts = { | ||
1190 | |||
1191 | .funcs = { { | ||
1192 | .num_blocks = CAST6_PARALLEL_BLOCKS, | ||
1193 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_enc_8way) } | ||
1194 | + .fn_u = { .xts = cast6_xts_enc_8way } | ||
1195 | }, { | ||
1196 | .num_blocks = 1, | ||
1197 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_enc) } | ||
1198 | + .fn_u = { .xts = cast6_xts_enc } | ||
1199 | } } | ||
1200 | }; | ||
1201 | |||
1202 | @@ -109,10 +106,10 @@ static const struct common_glue_ctx cast6_dec = { | ||
1203 | |||
1204 | .funcs = { { | ||
1205 | .num_blocks = CAST6_PARALLEL_BLOCKS, | ||
1206 | - .fn_u = { .ecb = GLUE_FUNC_CAST(cast6_ecb_dec_8way) } | ||
1207 | + .fn_u = { .ecb = cast6_ecb_dec_8way } | ||
1208 | }, { | ||
1209 | .num_blocks = 1, | ||
1210 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__cast6_decrypt) } | ||
1211 | + .fn_u = { .ecb = __cast6_decrypt } | ||
1212 | } } | ||
1213 | }; | ||
1214 | |||
1215 | @@ -122,10 +119,10 @@ static const struct common_glue_ctx cast6_dec_cbc = { | ||
1216 | |||
1217 | .funcs = { { | ||
1218 | .num_blocks = CAST6_PARALLEL_BLOCKS, | ||
1219 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(cast6_cbc_dec_8way) } | ||
1220 | + .fn_u = { .cbc = cast6_cbc_dec_8way } | ||
1221 | }, { | ||
1222 | .num_blocks = 1, | ||
1223 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__cast6_decrypt) } | ||
1224 | + .fn_u = { .cbc = __cast6_decrypt } | ||
1225 | } } | ||
1226 | }; | ||
1227 | |||
1228 | @@ -135,10 +132,10 @@ static const struct common_glue_ctx cast6_dec_xts = { | ||
1229 | |||
1230 | .funcs = { { | ||
1231 | .num_blocks = CAST6_PARALLEL_BLOCKS, | ||
1232 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_dec_8way) } | ||
1233 | + .fn_u = { .xts = cast6_xts_dec_8way } | ||
1234 | }, { | ||
1235 | .num_blocks = 1, | ||
1236 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(cast6_xts_dec) } | ||
1237 | + .fn_u = { .xts = cast6_xts_dec } | ||
1238 | } } | ||
1239 | }; | ||
1240 | |||
1241 | @@ -154,8 +151,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
1242 | |||
1243 | static int cbc_encrypt(struct skcipher_request *req) | ||
1244 | { | ||
1245 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__cast6_encrypt), | ||
1246 | - req); | ||
1247 | + return glue_cbc_encrypt_req_128bit(__cast6_encrypt, req); | ||
1248 | } | ||
1249 | |||
1250 | static int cbc_decrypt(struct skcipher_request *req) | ||
1251 | @@ -199,8 +195,7 @@ static int xts_encrypt(struct skcipher_request *req) | ||
1252 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
1253 | struct cast6_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1254 | |||
1255 | - return glue_xts_req_128bit(&cast6_enc_xts, req, | ||
1256 | - XTS_TWEAK_CAST(__cast6_encrypt), | ||
1257 | + return glue_xts_req_128bit(&cast6_enc_xts, req, __cast6_encrypt, | ||
1258 | &ctx->tweak_ctx, &ctx->crypt_ctx, false); | ||
1259 | } | ||
1260 | |||
1261 | @@ -209,8 +204,7 @@ static int xts_decrypt(struct skcipher_request *req) | ||
1262 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
1263 | struct cast6_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1264 | |||
1265 | - return glue_xts_req_128bit(&cast6_dec_xts, req, | ||
1266 | - XTS_TWEAK_CAST(__cast6_encrypt), | ||
1267 | + return glue_xts_req_128bit(&cast6_dec_xts, req, __cast6_encrypt, | ||
1268 | &ctx->tweak_ctx, &ctx->crypt_ctx, true); | ||
1269 | } | ||
1270 | |||
1271 | diff --git a/arch/x86/crypto/glue_helper.c b/arch/x86/crypto/glue_helper.c | ||
1272 | index d15b99397480b..d3d91a0abf88f 100644 | ||
1273 | --- a/arch/x86/crypto/glue_helper.c | ||
1274 | +++ b/arch/x86/crypto/glue_helper.c | ||
1275 | @@ -134,7 +134,8 @@ int glue_cbc_decrypt_req_128bit(const struct common_glue_ctx *gctx, | ||
1276 | src -= num_blocks - 1; | ||
1277 | dst -= num_blocks - 1; | ||
1278 | |||
1279 | - gctx->funcs[i].fn_u.cbc(ctx, dst, src); | ||
1280 | + gctx->funcs[i].fn_u.cbc(ctx, (u8 *)dst, | ||
1281 | + (const u8 *)src); | ||
1282 | |||
1283 | nbytes -= func_bytes; | ||
1284 | if (nbytes < bsize) | ||
1285 | @@ -188,7 +189,9 @@ int glue_ctr_req_128bit(const struct common_glue_ctx *gctx, | ||
1286 | |||
1287 | /* Process multi-block batch */ | ||
1288 | do { | ||
1289 | - gctx->funcs[i].fn_u.ctr(ctx, dst, src, &ctrblk); | ||
1290 | + gctx->funcs[i].fn_u.ctr(ctx, (u8 *)dst, | ||
1291 | + (const u8 *)src, | ||
1292 | + &ctrblk); | ||
1293 | src += num_blocks; | ||
1294 | dst += num_blocks; | ||
1295 | nbytes -= func_bytes; | ||
1296 | @@ -210,7 +213,8 @@ int glue_ctr_req_128bit(const struct common_glue_ctx *gctx, | ||
1297 | |||
1298 | be128_to_le128(&ctrblk, (be128 *)walk.iv); | ||
1299 | memcpy(&tmp, walk.src.virt.addr, nbytes); | ||
1300 | - gctx->funcs[gctx->num_funcs - 1].fn_u.ctr(ctx, &tmp, &tmp, | ||
1301 | + gctx->funcs[gctx->num_funcs - 1].fn_u.ctr(ctx, (u8 *)&tmp, | ||
1302 | + (const u8 *)&tmp, | ||
1303 | &ctrblk); | ||
1304 | memcpy(walk.dst.virt.addr, &tmp, nbytes); | ||
1305 | le128_to_be128((be128 *)walk.iv, &ctrblk); | ||
1306 | @@ -240,7 +244,8 @@ static unsigned int __glue_xts_req_128bit(const struct common_glue_ctx *gctx, | ||
1307 | |||
1308 | if (nbytes >= func_bytes) { | ||
1309 | do { | ||
1310 | - gctx->funcs[i].fn_u.xts(ctx, dst, src, | ||
1311 | + gctx->funcs[i].fn_u.xts(ctx, (u8 *)dst, | ||
1312 | + (const u8 *)src, | ||
1313 | walk->iv); | ||
1314 | |||
1315 | src += num_blocks; | ||
1316 | @@ -354,8 +359,8 @@ out: | ||
1317 | } | ||
1318 | EXPORT_SYMBOL_GPL(glue_xts_req_128bit); | ||
1319 | |||
1320 | -void glue_xts_crypt_128bit_one(void *ctx, u128 *dst, const u128 *src, le128 *iv, | ||
1321 | - common_glue_func_t fn) | ||
1322 | +void glue_xts_crypt_128bit_one(const void *ctx, u8 *dst, const u8 *src, | ||
1323 | + le128 *iv, common_glue_func_t fn) | ||
1324 | { | ||
1325 | le128 ivblk = *iv; | ||
1326 | |||
1327 | @@ -363,13 +368,13 @@ void glue_xts_crypt_128bit_one(void *ctx, u128 *dst, const u128 *src, le128 *iv, | ||
1328 | gf128mul_x_ble(iv, &ivblk); | ||
1329 | |||
1330 | /* CC <- T xor C */ | ||
1331 | - u128_xor(dst, src, (u128 *)&ivblk); | ||
1332 | + u128_xor((u128 *)dst, (const u128 *)src, (u128 *)&ivblk); | ||
1333 | |||
1334 | /* PP <- D(Key2,CC) */ | ||
1335 | - fn(ctx, (u8 *)dst, (u8 *)dst); | ||
1336 | + fn(ctx, dst, dst); | ||
1337 | |||
1338 | /* P <- T xor PP */ | ||
1339 | - u128_xor(dst, dst, (u128 *)&ivblk); | ||
1340 | + u128_xor((u128 *)dst, (u128 *)dst, (u128 *)&ivblk); | ||
1341 | } | ||
1342 | EXPORT_SYMBOL_GPL(glue_xts_crypt_128bit_one); | ||
1343 | |||
1344 | diff --git a/arch/x86/crypto/serpent_avx2_glue.c b/arch/x86/crypto/serpent_avx2_glue.c | ||
1345 | index 13fd8d3d2da00..f973ace44ad35 100644 | ||
1346 | --- a/arch/x86/crypto/serpent_avx2_glue.c | ||
1347 | +++ b/arch/x86/crypto/serpent_avx2_glue.c | ||
1348 | @@ -19,18 +19,16 @@ | ||
1349 | #define SERPENT_AVX2_PARALLEL_BLOCKS 16 | ||
1350 | |||
1351 | /* 16-way AVX2 parallel cipher functions */ | ||
1352 | -asmlinkage void serpent_ecb_enc_16way(struct serpent_ctx *ctx, u8 *dst, | ||
1353 | - const u8 *src); | ||
1354 | -asmlinkage void serpent_ecb_dec_16way(struct serpent_ctx *ctx, u8 *dst, | ||
1355 | - const u8 *src); | ||
1356 | -asmlinkage void serpent_cbc_dec_16way(void *ctx, u128 *dst, const u128 *src); | ||
1357 | +asmlinkage void serpent_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src); | ||
1358 | +asmlinkage void serpent_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src); | ||
1359 | +asmlinkage void serpent_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src); | ||
1360 | |||
1361 | -asmlinkage void serpent_ctr_16way(void *ctx, u128 *dst, const u128 *src, | ||
1362 | +asmlinkage void serpent_ctr_16way(const void *ctx, u8 *dst, const u8 *src, | ||
1363 | le128 *iv); | ||
1364 | -asmlinkage void serpent_xts_enc_16way(struct serpent_ctx *ctx, u8 *dst, | ||
1365 | - const u8 *src, le128 *iv); | ||
1366 | -asmlinkage void serpent_xts_dec_16way(struct serpent_ctx *ctx, u8 *dst, | ||
1367 | - const u8 *src, le128 *iv); | ||
1368 | +asmlinkage void serpent_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src, | ||
1369 | + le128 *iv); | ||
1370 | +asmlinkage void serpent_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src, | ||
1371 | + le128 *iv); | ||
1372 | |||
1373 | static int serpent_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1374 | const u8 *key, unsigned int keylen) | ||
1375 | @@ -44,13 +42,13 @@ static const struct common_glue_ctx serpent_enc = { | ||
1376 | |||
1377 | .funcs = { { | ||
1378 | .num_blocks = 16, | ||
1379 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_enc_16way) } | ||
1380 | + .fn_u = { .ecb = serpent_ecb_enc_16way } | ||
1381 | }, { | ||
1382 | .num_blocks = 8, | ||
1383 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_enc_8way_avx) } | ||
1384 | + .fn_u = { .ecb = serpent_ecb_enc_8way_avx } | ||
1385 | }, { | ||
1386 | .num_blocks = 1, | ||
1387 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_encrypt) } | ||
1388 | + .fn_u = { .ecb = __serpent_encrypt } | ||
1389 | } } | ||
1390 | }; | ||
1391 | |||
1392 | @@ -60,13 +58,13 @@ static const struct common_glue_ctx serpent_ctr = { | ||
1393 | |||
1394 | .funcs = { { | ||
1395 | .num_blocks = 16, | ||
1396 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_ctr_16way) } | ||
1397 | + .fn_u = { .ctr = serpent_ctr_16way } | ||
1398 | }, { | ||
1399 | .num_blocks = 8, | ||
1400 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_ctr_8way_avx) } | ||
1401 | + .fn_u = { .ctr = serpent_ctr_8way_avx } | ||
1402 | }, { | ||
1403 | .num_blocks = 1, | ||
1404 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(__serpent_crypt_ctr) } | ||
1405 | + .fn_u = { .ctr = __serpent_crypt_ctr } | ||
1406 | } } | ||
1407 | }; | ||
1408 | |||
1409 | @@ -76,13 +74,13 @@ static const struct common_glue_ctx serpent_enc_xts = { | ||
1410 | |||
1411 | .funcs = { { | ||
1412 | .num_blocks = 16, | ||
1413 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc_16way) } | ||
1414 | + .fn_u = { .xts = serpent_xts_enc_16way } | ||
1415 | }, { | ||
1416 | .num_blocks = 8, | ||
1417 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc_8way_avx) } | ||
1418 | + .fn_u = { .xts = serpent_xts_enc_8way_avx } | ||
1419 | }, { | ||
1420 | .num_blocks = 1, | ||
1421 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc) } | ||
1422 | + .fn_u = { .xts = serpent_xts_enc } | ||
1423 | } } | ||
1424 | }; | ||
1425 | |||
1426 | @@ -92,13 +90,13 @@ static const struct common_glue_ctx serpent_dec = { | ||
1427 | |||
1428 | .funcs = { { | ||
1429 | .num_blocks = 16, | ||
1430 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_dec_16way) } | ||
1431 | + .fn_u = { .ecb = serpent_ecb_dec_16way } | ||
1432 | }, { | ||
1433 | .num_blocks = 8, | ||
1434 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_dec_8way_avx) } | ||
1435 | + .fn_u = { .ecb = serpent_ecb_dec_8way_avx } | ||
1436 | }, { | ||
1437 | .num_blocks = 1, | ||
1438 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_decrypt) } | ||
1439 | + .fn_u = { .ecb = __serpent_decrypt } | ||
1440 | } } | ||
1441 | }; | ||
1442 | |||
1443 | @@ -108,13 +106,13 @@ static const struct common_glue_ctx serpent_dec_cbc = { | ||
1444 | |||
1445 | .funcs = { { | ||
1446 | .num_blocks = 16, | ||
1447 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_cbc_dec_16way) } | ||
1448 | + .fn_u = { .cbc = serpent_cbc_dec_16way } | ||
1449 | }, { | ||
1450 | .num_blocks = 8, | ||
1451 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_cbc_dec_8way_avx) } | ||
1452 | + .fn_u = { .cbc = serpent_cbc_dec_8way_avx } | ||
1453 | }, { | ||
1454 | .num_blocks = 1, | ||
1455 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__serpent_decrypt) } | ||
1456 | + .fn_u = { .cbc = __serpent_decrypt } | ||
1457 | } } | ||
1458 | }; | ||
1459 | |||
1460 | @@ -124,13 +122,13 @@ static const struct common_glue_ctx serpent_dec_xts = { | ||
1461 | |||
1462 | .funcs = { { | ||
1463 | .num_blocks = 16, | ||
1464 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec_16way) } | ||
1465 | + .fn_u = { .xts = serpent_xts_dec_16way } | ||
1466 | }, { | ||
1467 | .num_blocks = 8, | ||
1468 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec_8way_avx) } | ||
1469 | + .fn_u = { .xts = serpent_xts_dec_8way_avx } | ||
1470 | }, { | ||
1471 | .num_blocks = 1, | ||
1472 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec) } | ||
1473 | + .fn_u = { .xts = serpent_xts_dec } | ||
1474 | } } | ||
1475 | }; | ||
1476 | |||
1477 | @@ -146,8 +144,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
1478 | |||
1479 | static int cbc_encrypt(struct skcipher_request *req) | ||
1480 | { | ||
1481 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__serpent_encrypt), | ||
1482 | - req); | ||
1483 | + return glue_cbc_encrypt_req_128bit(__serpent_encrypt, req); | ||
1484 | } | ||
1485 | |||
1486 | static int cbc_decrypt(struct skcipher_request *req) | ||
1487 | @@ -166,8 +163,8 @@ static int xts_encrypt(struct skcipher_request *req) | ||
1488 | struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1489 | |||
1490 | return glue_xts_req_128bit(&serpent_enc_xts, req, | ||
1491 | - XTS_TWEAK_CAST(__serpent_encrypt), | ||
1492 | - &ctx->tweak_ctx, &ctx->crypt_ctx, false); | ||
1493 | + __serpent_encrypt, &ctx->tweak_ctx, | ||
1494 | + &ctx->crypt_ctx, false); | ||
1495 | } | ||
1496 | |||
1497 | static int xts_decrypt(struct skcipher_request *req) | ||
1498 | @@ -176,8 +173,8 @@ static int xts_decrypt(struct skcipher_request *req) | ||
1499 | struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1500 | |||
1501 | return glue_xts_req_128bit(&serpent_dec_xts, req, | ||
1502 | - XTS_TWEAK_CAST(__serpent_encrypt), | ||
1503 | - &ctx->tweak_ctx, &ctx->crypt_ctx, true); | ||
1504 | + __serpent_encrypt, &ctx->tweak_ctx, | ||
1505 | + &ctx->crypt_ctx, true); | ||
1506 | } | ||
1507 | |||
1508 | static struct skcipher_alg serpent_algs[] = { | ||
1509 | diff --git a/arch/x86/crypto/serpent_avx_glue.c b/arch/x86/crypto/serpent_avx_glue.c | ||
1510 | index 7d3dca38a5a2e..7806d1cbe8541 100644 | ||
1511 | --- a/arch/x86/crypto/serpent_avx_glue.c | ||
1512 | +++ b/arch/x86/crypto/serpent_avx_glue.c | ||
1513 | @@ -20,33 +20,35 @@ | ||
1514 | #include <asm/crypto/serpent-avx.h> | ||
1515 | |||
1516 | /* 8-way parallel cipher functions */ | ||
1517 | -asmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
1518 | +asmlinkage void serpent_ecb_enc_8way_avx(const void *ctx, u8 *dst, | ||
1519 | const u8 *src); | ||
1520 | EXPORT_SYMBOL_GPL(serpent_ecb_enc_8way_avx); | ||
1521 | |||
1522 | -asmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
1523 | +asmlinkage void serpent_ecb_dec_8way_avx(const void *ctx, u8 *dst, | ||
1524 | const u8 *src); | ||
1525 | EXPORT_SYMBOL_GPL(serpent_ecb_dec_8way_avx); | ||
1526 | |||
1527 | -asmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
1528 | +asmlinkage void serpent_cbc_dec_8way_avx(const void *ctx, u8 *dst, | ||
1529 | const u8 *src); | ||
1530 | EXPORT_SYMBOL_GPL(serpent_cbc_dec_8way_avx); | ||
1531 | |||
1532 | -asmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
1533 | - const u8 *src, le128 *iv); | ||
1534 | +asmlinkage void serpent_ctr_8way_avx(const void *ctx, u8 *dst, const u8 *src, | ||
1535 | + le128 *iv); | ||
1536 | EXPORT_SYMBOL_GPL(serpent_ctr_8way_avx); | ||
1537 | |||
1538 | -asmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
1539 | +asmlinkage void serpent_xts_enc_8way_avx(const void *ctx, u8 *dst, | ||
1540 | const u8 *src, le128 *iv); | ||
1541 | EXPORT_SYMBOL_GPL(serpent_xts_enc_8way_avx); | ||
1542 | |||
1543 | -asmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
1544 | +asmlinkage void serpent_xts_dec_8way_avx(const void *ctx, u8 *dst, | ||
1545 | const u8 *src, le128 *iv); | ||
1546 | EXPORT_SYMBOL_GPL(serpent_xts_dec_8way_avx); | ||
1547 | |||
1548 | -void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1549 | +void __serpent_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
1550 | { | ||
1551 | be128 ctrblk; | ||
1552 | + u128 *dst = (u128 *)d; | ||
1553 | + const u128 *src = (const u128 *)s; | ||
1554 | |||
1555 | le128_to_be128(&ctrblk, iv); | ||
1556 | le128_inc(iv); | ||
1557 | @@ -56,17 +58,15 @@ void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1558 | } | ||
1559 | EXPORT_SYMBOL_GPL(__serpent_crypt_ctr); | ||
1560 | |||
1561 | -void serpent_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1562 | +void serpent_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
1563 | { | ||
1564 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
1565 | - GLUE_FUNC_CAST(__serpent_encrypt)); | ||
1566 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, __serpent_encrypt); | ||
1567 | } | ||
1568 | EXPORT_SYMBOL_GPL(serpent_xts_enc); | ||
1569 | |||
1570 | -void serpent_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1571 | +void serpent_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
1572 | { | ||
1573 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
1574 | - GLUE_FUNC_CAST(__serpent_decrypt)); | ||
1575 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, __serpent_decrypt); | ||
1576 | } | ||
1577 | EXPORT_SYMBOL_GPL(serpent_xts_dec); | ||
1578 | |||
1579 | @@ -102,10 +102,10 @@ static const struct common_glue_ctx serpent_enc = { | ||
1580 | |||
1581 | .funcs = { { | ||
1582 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1583 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_enc_8way_avx) } | ||
1584 | + .fn_u = { .ecb = serpent_ecb_enc_8way_avx } | ||
1585 | }, { | ||
1586 | .num_blocks = 1, | ||
1587 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_encrypt) } | ||
1588 | + .fn_u = { .ecb = __serpent_encrypt } | ||
1589 | } } | ||
1590 | }; | ||
1591 | |||
1592 | @@ -115,10 +115,10 @@ static const struct common_glue_ctx serpent_ctr = { | ||
1593 | |||
1594 | .funcs = { { | ||
1595 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1596 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_ctr_8way_avx) } | ||
1597 | + .fn_u = { .ctr = serpent_ctr_8way_avx } | ||
1598 | }, { | ||
1599 | .num_blocks = 1, | ||
1600 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(__serpent_crypt_ctr) } | ||
1601 | + .fn_u = { .ctr = __serpent_crypt_ctr } | ||
1602 | } } | ||
1603 | }; | ||
1604 | |||
1605 | @@ -128,10 +128,10 @@ static const struct common_glue_ctx serpent_enc_xts = { | ||
1606 | |||
1607 | .funcs = { { | ||
1608 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1609 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc_8way_avx) } | ||
1610 | + .fn_u = { .xts = serpent_xts_enc_8way_avx } | ||
1611 | }, { | ||
1612 | .num_blocks = 1, | ||
1613 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_enc) } | ||
1614 | + .fn_u = { .xts = serpent_xts_enc } | ||
1615 | } } | ||
1616 | }; | ||
1617 | |||
1618 | @@ -141,10 +141,10 @@ static const struct common_glue_ctx serpent_dec = { | ||
1619 | |||
1620 | .funcs = { { | ||
1621 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1622 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_ecb_dec_8way_avx) } | ||
1623 | + .fn_u = { .ecb = serpent_ecb_dec_8way_avx } | ||
1624 | }, { | ||
1625 | .num_blocks = 1, | ||
1626 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_decrypt) } | ||
1627 | + .fn_u = { .ecb = __serpent_decrypt } | ||
1628 | } } | ||
1629 | }; | ||
1630 | |||
1631 | @@ -154,10 +154,10 @@ static const struct common_glue_ctx serpent_dec_cbc = { | ||
1632 | |||
1633 | .funcs = { { | ||
1634 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1635 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_cbc_dec_8way_avx) } | ||
1636 | + .fn_u = { .cbc = serpent_cbc_dec_8way_avx } | ||
1637 | }, { | ||
1638 | .num_blocks = 1, | ||
1639 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__serpent_decrypt) } | ||
1640 | + .fn_u = { .cbc = __serpent_decrypt } | ||
1641 | } } | ||
1642 | }; | ||
1643 | |||
1644 | @@ -167,10 +167,10 @@ static const struct common_glue_ctx serpent_dec_xts = { | ||
1645 | |||
1646 | .funcs = { { | ||
1647 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1648 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec_8way_avx) } | ||
1649 | + .fn_u = { .xts = serpent_xts_dec_8way_avx } | ||
1650 | }, { | ||
1651 | .num_blocks = 1, | ||
1652 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(serpent_xts_dec) } | ||
1653 | + .fn_u = { .xts = serpent_xts_dec } | ||
1654 | } } | ||
1655 | }; | ||
1656 | |||
1657 | @@ -186,8 +186,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
1658 | |||
1659 | static int cbc_encrypt(struct skcipher_request *req) | ||
1660 | { | ||
1661 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__serpent_encrypt), | ||
1662 | - req); | ||
1663 | + return glue_cbc_encrypt_req_128bit(__serpent_encrypt, req); | ||
1664 | } | ||
1665 | |||
1666 | static int cbc_decrypt(struct skcipher_request *req) | ||
1667 | @@ -206,8 +205,8 @@ static int xts_encrypt(struct skcipher_request *req) | ||
1668 | struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1669 | |||
1670 | return glue_xts_req_128bit(&serpent_enc_xts, req, | ||
1671 | - XTS_TWEAK_CAST(__serpent_encrypt), | ||
1672 | - &ctx->tweak_ctx, &ctx->crypt_ctx, false); | ||
1673 | + __serpent_encrypt, &ctx->tweak_ctx, | ||
1674 | + &ctx->crypt_ctx, false); | ||
1675 | } | ||
1676 | |||
1677 | static int xts_decrypt(struct skcipher_request *req) | ||
1678 | @@ -216,8 +215,8 @@ static int xts_decrypt(struct skcipher_request *req) | ||
1679 | struct serpent_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1680 | |||
1681 | return glue_xts_req_128bit(&serpent_dec_xts, req, | ||
1682 | - XTS_TWEAK_CAST(__serpent_encrypt), | ||
1683 | - &ctx->tweak_ctx, &ctx->crypt_ctx, true); | ||
1684 | + __serpent_encrypt, &ctx->tweak_ctx, | ||
1685 | + &ctx->crypt_ctx, true); | ||
1686 | } | ||
1687 | |||
1688 | static struct skcipher_alg serpent_algs[] = { | ||
1689 | diff --git a/arch/x86/crypto/serpent_sse2_glue.c b/arch/x86/crypto/serpent_sse2_glue.c | ||
1690 | index 5fdf1931d0690..4fed8d26b91a4 100644 | ||
1691 | --- a/arch/x86/crypto/serpent_sse2_glue.c | ||
1692 | +++ b/arch/x86/crypto/serpent_sse2_glue.c | ||
1693 | @@ -31,9 +31,11 @@ static int serpent_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1694 | return __serpent_setkey(crypto_skcipher_ctx(tfm), key, keylen); | ||
1695 | } | ||
1696 | |||
1697 | -static void serpent_decrypt_cbc_xway(void *ctx, u128 *dst, const u128 *src) | ||
1698 | +static void serpent_decrypt_cbc_xway(const void *ctx, u8 *d, const u8 *s) | ||
1699 | { | ||
1700 | u128 ivs[SERPENT_PARALLEL_BLOCKS - 1]; | ||
1701 | + u128 *dst = (u128 *)d; | ||
1702 | + const u128 *src = (const u128 *)s; | ||
1703 | unsigned int j; | ||
1704 | |||
1705 | for (j = 0; j < SERPENT_PARALLEL_BLOCKS - 1; j++) | ||
1706 | @@ -45,9 +47,11 @@ static void serpent_decrypt_cbc_xway(void *ctx, u128 *dst, const u128 *src) | ||
1707 | u128_xor(dst + (j + 1), dst + (j + 1), ivs + j); | ||
1708 | } | ||
1709 | |||
1710 | -static void serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1711 | +static void serpent_crypt_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
1712 | { | ||
1713 | be128 ctrblk; | ||
1714 | + u128 *dst = (u128 *)d; | ||
1715 | + const u128 *src = (const u128 *)s; | ||
1716 | |||
1717 | le128_to_be128(&ctrblk, iv); | ||
1718 | le128_inc(iv); | ||
1719 | @@ -56,10 +60,12 @@ static void serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1720 | u128_xor(dst, src, (u128 *)&ctrblk); | ||
1721 | } | ||
1722 | |||
1723 | -static void serpent_crypt_ctr_xway(void *ctx, u128 *dst, const u128 *src, | ||
1724 | +static void serpent_crypt_ctr_xway(const void *ctx, u8 *d, const u8 *s, | ||
1725 | le128 *iv) | ||
1726 | { | ||
1727 | be128 ctrblks[SERPENT_PARALLEL_BLOCKS]; | ||
1728 | + u128 *dst = (u128 *)d; | ||
1729 | + const u128 *src = (const u128 *)s; | ||
1730 | unsigned int i; | ||
1731 | |||
1732 | for (i = 0; i < SERPENT_PARALLEL_BLOCKS; i++) { | ||
1733 | @@ -79,10 +85,10 @@ static const struct common_glue_ctx serpent_enc = { | ||
1734 | |||
1735 | .funcs = { { | ||
1736 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1737 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_enc_blk_xway) } | ||
1738 | + .fn_u = { .ecb = serpent_enc_blk_xway } | ||
1739 | }, { | ||
1740 | .num_blocks = 1, | ||
1741 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_encrypt) } | ||
1742 | + .fn_u = { .ecb = __serpent_encrypt } | ||
1743 | } } | ||
1744 | }; | ||
1745 | |||
1746 | @@ -92,10 +98,10 @@ static const struct common_glue_ctx serpent_ctr = { | ||
1747 | |||
1748 | .funcs = { { | ||
1749 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1750 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_crypt_ctr_xway) } | ||
1751 | + .fn_u = { .ctr = serpent_crypt_ctr_xway } | ||
1752 | }, { | ||
1753 | .num_blocks = 1, | ||
1754 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(serpent_crypt_ctr) } | ||
1755 | + .fn_u = { .ctr = serpent_crypt_ctr } | ||
1756 | } } | ||
1757 | }; | ||
1758 | |||
1759 | @@ -105,10 +111,10 @@ static const struct common_glue_ctx serpent_dec = { | ||
1760 | |||
1761 | .funcs = { { | ||
1762 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1763 | - .fn_u = { .ecb = GLUE_FUNC_CAST(serpent_dec_blk_xway) } | ||
1764 | + .fn_u = { .ecb = serpent_dec_blk_xway } | ||
1765 | }, { | ||
1766 | .num_blocks = 1, | ||
1767 | - .fn_u = { .ecb = GLUE_FUNC_CAST(__serpent_decrypt) } | ||
1768 | + .fn_u = { .ecb = __serpent_decrypt } | ||
1769 | } } | ||
1770 | }; | ||
1771 | |||
1772 | @@ -118,10 +124,10 @@ static const struct common_glue_ctx serpent_dec_cbc = { | ||
1773 | |||
1774 | .funcs = { { | ||
1775 | .num_blocks = SERPENT_PARALLEL_BLOCKS, | ||
1776 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(serpent_decrypt_cbc_xway) } | ||
1777 | + .fn_u = { .cbc = serpent_decrypt_cbc_xway } | ||
1778 | }, { | ||
1779 | .num_blocks = 1, | ||
1780 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(__serpent_decrypt) } | ||
1781 | + .fn_u = { .cbc = __serpent_decrypt } | ||
1782 | } } | ||
1783 | }; | ||
1784 | |||
1785 | @@ -137,7 +143,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
1786 | |||
1787 | static int cbc_encrypt(struct skcipher_request *req) | ||
1788 | { | ||
1789 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(__serpent_encrypt), | ||
1790 | + return glue_cbc_encrypt_req_128bit(__serpent_encrypt, | ||
1791 | req); | ||
1792 | } | ||
1793 | |||
1794 | diff --git a/arch/x86/crypto/twofish_avx_glue.c b/arch/x86/crypto/twofish_avx_glue.c | ||
1795 | index d561c821788b7..3b36e97ec7abb 100644 | ||
1796 | --- a/arch/x86/crypto/twofish_avx_glue.c | ||
1797 | +++ b/arch/x86/crypto/twofish_avx_glue.c | ||
1798 | @@ -22,20 +22,17 @@ | ||
1799 | #define TWOFISH_PARALLEL_BLOCKS 8 | ||
1800 | |||
1801 | /* 8-way parallel cipher functions */ | ||
1802 | -asmlinkage void twofish_ecb_enc_8way(struct twofish_ctx *ctx, u8 *dst, | ||
1803 | - const u8 *src); | ||
1804 | -asmlinkage void twofish_ecb_dec_8way(struct twofish_ctx *ctx, u8 *dst, | ||
1805 | - const u8 *src); | ||
1806 | +asmlinkage void twofish_ecb_enc_8way(const void *ctx, u8 *dst, const u8 *src); | ||
1807 | +asmlinkage void twofish_ecb_dec_8way(const void *ctx, u8 *dst, const u8 *src); | ||
1808 | |||
1809 | -asmlinkage void twofish_cbc_dec_8way(struct twofish_ctx *ctx, u8 *dst, | ||
1810 | - const u8 *src); | ||
1811 | -asmlinkage void twofish_ctr_8way(struct twofish_ctx *ctx, u8 *dst, | ||
1812 | - const u8 *src, le128 *iv); | ||
1813 | +asmlinkage void twofish_cbc_dec_8way(const void *ctx, u8 *dst, const u8 *src); | ||
1814 | +asmlinkage void twofish_ctr_8way(const void *ctx, u8 *dst, const u8 *src, | ||
1815 | + le128 *iv); | ||
1816 | |||
1817 | -asmlinkage void twofish_xts_enc_8way(struct twofish_ctx *ctx, u8 *dst, | ||
1818 | - const u8 *src, le128 *iv); | ||
1819 | -asmlinkage void twofish_xts_dec_8way(struct twofish_ctx *ctx, u8 *dst, | ||
1820 | - const u8 *src, le128 *iv); | ||
1821 | +asmlinkage void twofish_xts_enc_8way(const void *ctx, u8 *dst, const u8 *src, | ||
1822 | + le128 *iv); | ||
1823 | +asmlinkage void twofish_xts_dec_8way(const void *ctx, u8 *dst, const u8 *src, | ||
1824 | + le128 *iv); | ||
1825 | |||
1826 | static int twofish_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1827 | const u8 *key, unsigned int keylen) | ||
1828 | @@ -43,22 +40,19 @@ static int twofish_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1829 | return twofish_setkey(&tfm->base, key, keylen); | ||
1830 | } | ||
1831 | |||
1832 | -static inline void twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst, | ||
1833 | - const u8 *src) | ||
1834 | +static inline void twofish_enc_blk_3way(const void *ctx, u8 *dst, const u8 *src) | ||
1835 | { | ||
1836 | __twofish_enc_blk_3way(ctx, dst, src, false); | ||
1837 | } | ||
1838 | |||
1839 | -static void twofish_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1840 | +static void twofish_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
1841 | { | ||
1842 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
1843 | - GLUE_FUNC_CAST(twofish_enc_blk)); | ||
1844 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, twofish_enc_blk); | ||
1845 | } | ||
1846 | |||
1847 | -static void twofish_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
1848 | +static void twofish_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv) | ||
1849 | { | ||
1850 | - glue_xts_crypt_128bit_one(ctx, dst, src, iv, | ||
1851 | - GLUE_FUNC_CAST(twofish_dec_blk)); | ||
1852 | + glue_xts_crypt_128bit_one(ctx, dst, src, iv, twofish_dec_blk); | ||
1853 | } | ||
1854 | |||
1855 | struct twofish_xts_ctx { | ||
1856 | @@ -93,13 +87,13 @@ static const struct common_glue_ctx twofish_enc = { | ||
1857 | |||
1858 | .funcs = { { | ||
1859 | .num_blocks = TWOFISH_PARALLEL_BLOCKS, | ||
1860 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_ecb_enc_8way) } | ||
1861 | + .fn_u = { .ecb = twofish_ecb_enc_8way } | ||
1862 | }, { | ||
1863 | .num_blocks = 3, | ||
1864 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_3way) } | ||
1865 | + .fn_u = { .ecb = twofish_enc_blk_3way } | ||
1866 | }, { | ||
1867 | .num_blocks = 1, | ||
1868 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk) } | ||
1869 | + .fn_u = { .ecb = twofish_enc_blk } | ||
1870 | } } | ||
1871 | }; | ||
1872 | |||
1873 | @@ -109,13 +103,13 @@ static const struct common_glue_ctx twofish_ctr = { | ||
1874 | |||
1875 | .funcs = { { | ||
1876 | .num_blocks = TWOFISH_PARALLEL_BLOCKS, | ||
1877 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_ctr_8way) } | ||
1878 | + .fn_u = { .ctr = twofish_ctr_8way } | ||
1879 | }, { | ||
1880 | .num_blocks = 3, | ||
1881 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_enc_blk_ctr_3way) } | ||
1882 | + .fn_u = { .ctr = twofish_enc_blk_ctr_3way } | ||
1883 | }, { | ||
1884 | .num_blocks = 1, | ||
1885 | - .fn_u = { .ctr = GLUE_CTR_FUNC_CAST(twofish_enc_blk_ctr) } | ||
1886 | + .fn_u = { .ctr = twofish_enc_blk_ctr } | ||
1887 | } } | ||
1888 | }; | ||
1889 | |||
1890 | @@ -125,10 +119,10 @@ static const struct common_glue_ctx twofish_enc_xts = { | ||
1891 | |||
1892 | .funcs = { { | ||
1893 | .num_blocks = TWOFISH_PARALLEL_BLOCKS, | ||
1894 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_enc_8way) } | ||
1895 | + .fn_u = { .xts = twofish_xts_enc_8way } | ||
1896 | }, { | ||
1897 | .num_blocks = 1, | ||
1898 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_enc) } | ||
1899 | + .fn_u = { .xts = twofish_xts_enc } | ||
1900 | } } | ||
1901 | }; | ||
1902 | |||
1903 | @@ -138,13 +132,13 @@ static const struct common_glue_ctx twofish_dec = { | ||
1904 | |||
1905 | .funcs = { { | ||
1906 | .num_blocks = TWOFISH_PARALLEL_BLOCKS, | ||
1907 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_ecb_dec_8way) } | ||
1908 | + .fn_u = { .ecb = twofish_ecb_dec_8way } | ||
1909 | }, { | ||
1910 | .num_blocks = 3, | ||
1911 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk_3way) } | ||
1912 | + .fn_u = { .ecb = twofish_dec_blk_3way } | ||
1913 | }, { | ||
1914 | .num_blocks = 1, | ||
1915 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk) } | ||
1916 | + .fn_u = { .ecb = twofish_dec_blk } | ||
1917 | } } | ||
1918 | }; | ||
1919 | |||
1920 | @@ -154,13 +148,13 @@ static const struct common_glue_ctx twofish_dec_cbc = { | ||
1921 | |||
1922 | .funcs = { { | ||
1923 | .num_blocks = TWOFISH_PARALLEL_BLOCKS, | ||
1924 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_cbc_dec_8way) } | ||
1925 | + .fn_u = { .cbc = twofish_cbc_dec_8way } | ||
1926 | }, { | ||
1927 | .num_blocks = 3, | ||
1928 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk_cbc_3way) } | ||
1929 | + .fn_u = { .cbc = twofish_dec_blk_cbc_3way } | ||
1930 | }, { | ||
1931 | .num_blocks = 1, | ||
1932 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk) } | ||
1933 | + .fn_u = { .cbc = twofish_dec_blk } | ||
1934 | } } | ||
1935 | }; | ||
1936 | |||
1937 | @@ -170,10 +164,10 @@ static const struct common_glue_ctx twofish_dec_xts = { | ||
1938 | |||
1939 | .funcs = { { | ||
1940 | .num_blocks = TWOFISH_PARALLEL_BLOCKS, | ||
1941 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_dec_8way) } | ||
1942 | + .fn_u = { .xts = twofish_xts_dec_8way } | ||
1943 | }, { | ||
1944 | .num_blocks = 1, | ||
1945 | - .fn_u = { .xts = GLUE_XTS_FUNC_CAST(twofish_xts_dec) } | ||
1946 | + .fn_u = { .xts = twofish_xts_dec } | ||
1947 | } } | ||
1948 | }; | ||
1949 | |||
1950 | @@ -189,8 +183,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
1951 | |||
1952 | static int cbc_encrypt(struct skcipher_request *req) | ||
1953 | { | ||
1954 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(twofish_enc_blk), | ||
1955 | - req); | ||
1956 | + return glue_cbc_encrypt_req_128bit(twofish_enc_blk, req); | ||
1957 | } | ||
1958 | |||
1959 | static int cbc_decrypt(struct skcipher_request *req) | ||
1960 | @@ -208,8 +201,7 @@ static int xts_encrypt(struct skcipher_request *req) | ||
1961 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
1962 | struct twofish_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1963 | |||
1964 | - return glue_xts_req_128bit(&twofish_enc_xts, req, | ||
1965 | - XTS_TWEAK_CAST(twofish_enc_blk), | ||
1966 | + return glue_xts_req_128bit(&twofish_enc_xts, req, twofish_enc_blk, | ||
1967 | &ctx->tweak_ctx, &ctx->crypt_ctx, false); | ||
1968 | } | ||
1969 | |||
1970 | @@ -218,8 +210,7 @@ static int xts_decrypt(struct skcipher_request *req) | ||
1971 | struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); | ||
1972 | struct twofish_xts_ctx *ctx = crypto_skcipher_ctx(tfm); | ||
1973 | |||
1974 | - return glue_xts_req_128bit(&twofish_dec_xts, req, | ||
1975 | - XTS_TWEAK_CAST(twofish_enc_blk), | ||
1976 | + return glue_xts_req_128bit(&twofish_dec_xts, req, twofish_enc_blk, | ||
1977 | &ctx->tweak_ctx, &ctx->crypt_ctx, true); | ||
1978 | } | ||
1979 | |||
1980 | diff --git a/arch/x86/crypto/twofish_glue_3way.c b/arch/x86/crypto/twofish_glue_3way.c | ||
1981 | index 1dc9e29f221e8..768af6075479c 100644 | ||
1982 | --- a/arch/x86/crypto/twofish_glue_3way.c | ||
1983 | +++ b/arch/x86/crypto/twofish_glue_3way.c | ||
1984 | @@ -25,21 +25,22 @@ static int twofish_setkey_skcipher(struct crypto_skcipher *tfm, | ||
1985 | return twofish_setkey(&tfm->base, key, keylen); | ||
1986 | } | ||
1987 | |||
1988 | -static inline void twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst, | ||
1989 | - const u8 *src) | ||
1990 | +static inline void twofish_enc_blk_3way(const void *ctx, u8 *dst, const u8 *src) | ||
1991 | { | ||
1992 | __twofish_enc_blk_3way(ctx, dst, src, false); | ||
1993 | } | ||
1994 | |||
1995 | -static inline void twofish_enc_blk_xor_3way(struct twofish_ctx *ctx, u8 *dst, | ||
1996 | +static inline void twofish_enc_blk_xor_3way(const void *ctx, u8 *dst, | ||
1997 | const u8 *src) | ||
1998 | { | ||
1999 | __twofish_enc_blk_3way(ctx, dst, src, true); | ||
2000 | } | ||
2001 | |||
2002 | -void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src) | ||
2003 | +void twofish_dec_blk_cbc_3way(const void *ctx, u8 *d, const u8 *s) | ||
2004 | { | ||
2005 | u128 ivs[2]; | ||
2006 | + u128 *dst = (u128 *)d; | ||
2007 | + const u128 *src = (const u128 *)s; | ||
2008 | |||
2009 | ivs[0] = src[0]; | ||
2010 | ivs[1] = src[1]; | ||
2011 | @@ -51,9 +52,11 @@ void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src) | ||
2012 | } | ||
2013 | EXPORT_SYMBOL_GPL(twofish_dec_blk_cbc_3way); | ||
2014 | |||
2015 | -void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
2016 | +void twofish_enc_blk_ctr(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
2017 | { | ||
2018 | be128 ctrblk; | ||
2019 | + u128 *dst = (u128 *)d; | ||
2020 | + const u128 *src = (const u128 *)s; | ||
2021 | |||
2022 | if (dst != src) | ||
2023 | *dst = *src; | ||
2024 | @@ -66,10 +69,11 @@ void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src, le128 *iv) | ||
2025 | } | ||
2026 | EXPORT_SYMBOL_GPL(twofish_enc_blk_ctr); | ||
2027 | |||
2028 | -void twofish_enc_blk_ctr_3way(void *ctx, u128 *dst, const u128 *src, | ||
2029 | - le128 *iv) | ||
2030 | +void twofish_enc_blk_ctr_3way(const void *ctx, u8 *d, const u8 *s, le128 *iv) | ||
2031 | { | ||
2032 | be128 ctrblks[3]; | ||
2033 | + u128 *dst = (u128 *)d; | ||
2034 | + const u128 *src = (const u128 *)s; | ||
2035 | |||
2036 | if (dst != src) { | ||
2037 | dst[0] = src[0]; | ||
2038 | @@ -94,10 +98,10 @@ static const struct common_glue_ctx twofish_enc = { | ||
2039 | |||
2040 | .funcs = { { | ||
2041 | .num_blocks = 3, | ||
2042 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_3way) } | ||
2043 | + .fn_u = { .ecb = twofish_enc_blk_3way } | ||
2044 | }, { | ||
2045 | .num_blocks = 1, | ||
2046 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk) } | ||
2047 | + .fn_u = { .ecb = twofish_enc_blk } | ||
2048 | } } | ||
2049 | }; | ||
2050 | |||
2051 | @@ -107,10 +111,10 @@ static const struct common_glue_ctx twofish_ctr = { | ||
2052 | |||
2053 | .funcs = { { | ||
2054 | .num_blocks = 3, | ||
2055 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_ctr_3way) } | ||
2056 | + .fn_u = { .ctr = twofish_enc_blk_ctr_3way } | ||
2057 | }, { | ||
2058 | .num_blocks = 1, | ||
2059 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_enc_blk_ctr) } | ||
2060 | + .fn_u = { .ctr = twofish_enc_blk_ctr } | ||
2061 | } } | ||
2062 | }; | ||
2063 | |||
2064 | @@ -120,10 +124,10 @@ static const struct common_glue_ctx twofish_dec = { | ||
2065 | |||
2066 | .funcs = { { | ||
2067 | .num_blocks = 3, | ||
2068 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk_3way) } | ||
2069 | + .fn_u = { .ecb = twofish_dec_blk_3way } | ||
2070 | }, { | ||
2071 | .num_blocks = 1, | ||
2072 | - .fn_u = { .ecb = GLUE_FUNC_CAST(twofish_dec_blk) } | ||
2073 | + .fn_u = { .ecb = twofish_dec_blk } | ||
2074 | } } | ||
2075 | }; | ||
2076 | |||
2077 | @@ -133,10 +137,10 @@ static const struct common_glue_ctx twofish_dec_cbc = { | ||
2078 | |||
2079 | .funcs = { { | ||
2080 | .num_blocks = 3, | ||
2081 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk_cbc_3way) } | ||
2082 | + .fn_u = { .cbc = twofish_dec_blk_cbc_3way } | ||
2083 | }, { | ||
2084 | .num_blocks = 1, | ||
2085 | - .fn_u = { .cbc = GLUE_CBC_FUNC_CAST(twofish_dec_blk) } | ||
2086 | + .fn_u = { .cbc = twofish_dec_blk } | ||
2087 | } } | ||
2088 | }; | ||
2089 | |||
2090 | @@ -152,8 +156,7 @@ static int ecb_decrypt(struct skcipher_request *req) | ||
2091 | |||
2092 | static int cbc_encrypt(struct skcipher_request *req) | ||
2093 | { | ||
2094 | - return glue_cbc_encrypt_req_128bit(GLUE_FUNC_CAST(twofish_enc_blk), | ||
2095 | - req); | ||
2096 | + return glue_cbc_encrypt_req_128bit(twofish_enc_blk, req); | ||
2097 | } | ||
2098 | |||
2099 | static int cbc_decrypt(struct skcipher_request *req) | ||
2100 | diff --git a/arch/x86/include/asm/crypto/camellia.h b/arch/x86/include/asm/crypto/camellia.h | ||
2101 | index a5d86fc0593f2..f1592619dd651 100644 | ||
2102 | --- a/arch/x86/include/asm/crypto/camellia.h | ||
2103 | +++ b/arch/x86/include/asm/crypto/camellia.h | ||
2104 | @@ -32,65 +32,60 @@ extern int xts_camellia_setkey(struct crypto_skcipher *tfm, const u8 *key, | ||
2105 | unsigned int keylen); | ||
2106 | |||
2107 | /* regular block cipher functions */ | ||
2108 | -asmlinkage void __camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst, | ||
2109 | - const u8 *src, bool xor); | ||
2110 | -asmlinkage void camellia_dec_blk(struct camellia_ctx *ctx, u8 *dst, | ||
2111 | - const u8 *src); | ||
2112 | +asmlinkage void __camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src, | ||
2113 | + bool xor); | ||
2114 | +asmlinkage void camellia_dec_blk(const void *ctx, u8 *dst, const u8 *src); | ||
2115 | |||
2116 | /* 2-way parallel cipher functions */ | ||
2117 | -asmlinkage void __camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst, | ||
2118 | - const u8 *src, bool xor); | ||
2119 | -asmlinkage void camellia_dec_blk_2way(struct camellia_ctx *ctx, u8 *dst, | ||
2120 | - const u8 *src); | ||
2121 | +asmlinkage void __camellia_enc_blk_2way(const void *ctx, u8 *dst, const u8 *src, | ||
2122 | + bool xor); | ||
2123 | +asmlinkage void camellia_dec_blk_2way(const void *ctx, u8 *dst, const u8 *src); | ||
2124 | |||
2125 | /* 16-way parallel cipher functions (avx/aes-ni) */ | ||
2126 | -asmlinkage void camellia_ecb_enc_16way(struct camellia_ctx *ctx, u8 *dst, | ||
2127 | - const u8 *src); | ||
2128 | -asmlinkage void camellia_ecb_dec_16way(struct camellia_ctx *ctx, u8 *dst, | ||
2129 | - const u8 *src); | ||
2130 | - | ||
2131 | -asmlinkage void camellia_cbc_dec_16way(struct camellia_ctx *ctx, u8 *dst, | ||
2132 | - const u8 *src); | ||
2133 | -asmlinkage void camellia_ctr_16way(struct camellia_ctx *ctx, u8 *dst, | ||
2134 | - const u8 *src, le128 *iv); | ||
2135 | - | ||
2136 | -asmlinkage void camellia_xts_enc_16way(struct camellia_ctx *ctx, u8 *dst, | ||
2137 | - const u8 *src, le128 *iv); | ||
2138 | -asmlinkage void camellia_xts_dec_16way(struct camellia_ctx *ctx, u8 *dst, | ||
2139 | - const u8 *src, le128 *iv); | ||
2140 | - | ||
2141 | -static inline void camellia_enc_blk(struct camellia_ctx *ctx, u8 *dst, | ||
2142 | - const u8 *src) | ||
2143 | +asmlinkage void camellia_ecb_enc_16way(const void *ctx, u8 *dst, const u8 *src); | ||
2144 | +asmlinkage void camellia_ecb_dec_16way(const void *ctx, u8 *dst, const u8 *src); | ||
2145 | + | ||
2146 | +asmlinkage void camellia_cbc_dec_16way(const void *ctx, u8 *dst, const u8 *src); | ||
2147 | +asmlinkage void camellia_ctr_16way(const void *ctx, u8 *dst, const u8 *src, | ||
2148 | + le128 *iv); | ||
2149 | + | ||
2150 | +asmlinkage void camellia_xts_enc_16way(const void *ctx, u8 *dst, const u8 *src, | ||
2151 | + le128 *iv); | ||
2152 | +asmlinkage void camellia_xts_dec_16way(const void *ctx, u8 *dst, const u8 *src, | ||
2153 | + le128 *iv); | ||
2154 | + | ||
2155 | +static inline void camellia_enc_blk(const void *ctx, u8 *dst, const u8 *src) | ||
2156 | { | ||
2157 | __camellia_enc_blk(ctx, dst, src, false); | ||
2158 | } | ||
2159 | |||
2160 | -static inline void camellia_enc_blk_xor(struct camellia_ctx *ctx, u8 *dst, | ||
2161 | - const u8 *src) | ||
2162 | +static inline void camellia_enc_blk_xor(const void *ctx, u8 *dst, const u8 *src) | ||
2163 | { | ||
2164 | __camellia_enc_blk(ctx, dst, src, true); | ||
2165 | } | ||
2166 | |||
2167 | -static inline void camellia_enc_blk_2way(struct camellia_ctx *ctx, u8 *dst, | ||
2168 | +static inline void camellia_enc_blk_2way(const void *ctx, u8 *dst, | ||
2169 | const u8 *src) | ||
2170 | { | ||
2171 | __camellia_enc_blk_2way(ctx, dst, src, false); | ||
2172 | } | ||
2173 | |||
2174 | -static inline void camellia_enc_blk_xor_2way(struct camellia_ctx *ctx, u8 *dst, | ||
2175 | +static inline void camellia_enc_blk_xor_2way(const void *ctx, u8 *dst, | ||
2176 | const u8 *src) | ||
2177 | { | ||
2178 | __camellia_enc_blk_2way(ctx, dst, src, true); | ||
2179 | } | ||
2180 | |||
2181 | /* glue helpers */ | ||
2182 | -extern void camellia_decrypt_cbc_2way(void *ctx, u128 *dst, const u128 *src); | ||
2183 | -extern void camellia_crypt_ctr(void *ctx, u128 *dst, const u128 *src, | ||
2184 | +extern void camellia_decrypt_cbc_2way(const void *ctx, u8 *dst, const u8 *src); | ||
2185 | +extern void camellia_crypt_ctr(const void *ctx, u8 *dst, const u8 *src, | ||
2186 | le128 *iv); | ||
2187 | -extern void camellia_crypt_ctr_2way(void *ctx, u128 *dst, const u128 *src, | ||
2188 | +extern void camellia_crypt_ctr_2way(const void *ctx, u8 *dst, const u8 *src, | ||
2189 | le128 *iv); | ||
2190 | |||
2191 | -extern void camellia_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv); | ||
2192 | -extern void camellia_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv); | ||
2193 | +extern void camellia_xts_enc(const void *ctx, u8 *dst, const u8 *src, | ||
2194 | + le128 *iv); | ||
2195 | +extern void camellia_xts_dec(const void *ctx, u8 *dst, const u8 *src, | ||
2196 | + le128 *iv); | ||
2197 | |||
2198 | #endif /* ASM_X86_CAMELLIA_H */ | ||
2199 | diff --git a/arch/x86/include/asm/crypto/glue_helper.h b/arch/x86/include/asm/crypto/glue_helper.h | ||
2200 | index 8d4a8e1226ee3..777c0f63418c8 100644 | ||
2201 | --- a/arch/x86/include/asm/crypto/glue_helper.h | ||
2202 | +++ b/arch/x86/include/asm/crypto/glue_helper.h | ||
2203 | @@ -11,18 +11,13 @@ | ||
2204 | #include <asm/fpu/api.h> | ||
2205 | #include <crypto/b128ops.h> | ||
2206 | |||
2207 | -typedef void (*common_glue_func_t)(void *ctx, u8 *dst, const u8 *src); | ||
2208 | -typedef void (*common_glue_cbc_func_t)(void *ctx, u128 *dst, const u128 *src); | ||
2209 | -typedef void (*common_glue_ctr_func_t)(void *ctx, u128 *dst, const u128 *src, | ||
2210 | +typedef void (*common_glue_func_t)(const void *ctx, u8 *dst, const u8 *src); | ||
2211 | +typedef void (*common_glue_cbc_func_t)(const void *ctx, u8 *dst, const u8 *src); | ||
2212 | +typedef void (*common_glue_ctr_func_t)(const void *ctx, u8 *dst, const u8 *src, | ||
2213 | le128 *iv); | ||
2214 | -typedef void (*common_glue_xts_func_t)(void *ctx, u128 *dst, const u128 *src, | ||
2215 | +typedef void (*common_glue_xts_func_t)(const void *ctx, u8 *dst, const u8 *src, | ||
2216 | le128 *iv); | ||
2217 | |||
2218 | -#define GLUE_FUNC_CAST(fn) ((common_glue_func_t)(fn)) | ||
2219 | -#define GLUE_CBC_FUNC_CAST(fn) ((common_glue_cbc_func_t)(fn)) | ||
2220 | -#define GLUE_CTR_FUNC_CAST(fn) ((common_glue_ctr_func_t)(fn)) | ||
2221 | -#define GLUE_XTS_FUNC_CAST(fn) ((common_glue_xts_func_t)(fn)) | ||
2222 | - | ||
2223 | struct common_glue_func_entry { | ||
2224 | unsigned int num_blocks; /* number of blocks that @fn will process */ | ||
2225 | union { | ||
2226 | @@ -116,7 +111,8 @@ extern int glue_xts_req_128bit(const struct common_glue_ctx *gctx, | ||
2227 | common_glue_func_t tweak_fn, void *tweak_ctx, | ||
2228 | void *crypt_ctx, bool decrypt); | ||
2229 | |||
2230 | -extern void glue_xts_crypt_128bit_one(void *ctx, u128 *dst, const u128 *src, | ||
2231 | - le128 *iv, common_glue_func_t fn); | ||
2232 | +extern void glue_xts_crypt_128bit_one(const void *ctx, u8 *dst, | ||
2233 | + const u8 *src, le128 *iv, | ||
2234 | + common_glue_func_t fn); | ||
2235 | |||
2236 | #endif /* _CRYPTO_GLUE_HELPER_H */ | ||
2237 | diff --git a/arch/x86/include/asm/crypto/serpent-avx.h b/arch/x86/include/asm/crypto/serpent-avx.h | ||
2238 | index db7c9cc322342..251c2c89d7cfe 100644 | ||
2239 | --- a/arch/x86/include/asm/crypto/serpent-avx.h | ||
2240 | +++ b/arch/x86/include/asm/crypto/serpent-avx.h | ||
2241 | @@ -15,26 +15,26 @@ struct serpent_xts_ctx { | ||
2242 | struct serpent_ctx crypt_ctx; | ||
2243 | }; | ||
2244 | |||
2245 | -asmlinkage void serpent_ecb_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
2246 | +asmlinkage void serpent_ecb_enc_8way_avx(const void *ctx, u8 *dst, | ||
2247 | const u8 *src); | ||
2248 | -asmlinkage void serpent_ecb_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
2249 | +asmlinkage void serpent_ecb_dec_8way_avx(const void *ctx, u8 *dst, | ||
2250 | const u8 *src); | ||
2251 | |||
2252 | -asmlinkage void serpent_cbc_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
2253 | +asmlinkage void serpent_cbc_dec_8way_avx(const void *ctx, u8 *dst, | ||
2254 | const u8 *src); | ||
2255 | -asmlinkage void serpent_ctr_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
2256 | - const u8 *src, le128 *iv); | ||
2257 | +asmlinkage void serpent_ctr_8way_avx(const void *ctx, u8 *dst, const u8 *src, | ||
2258 | + le128 *iv); | ||
2259 | |||
2260 | -asmlinkage void serpent_xts_enc_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
2261 | +asmlinkage void serpent_xts_enc_8way_avx(const void *ctx, u8 *dst, | ||
2262 | const u8 *src, le128 *iv); | ||
2263 | -asmlinkage void serpent_xts_dec_8way_avx(struct serpent_ctx *ctx, u8 *dst, | ||
2264 | +asmlinkage void serpent_xts_dec_8way_avx(const void *ctx, u8 *dst, | ||
2265 | const u8 *src, le128 *iv); | ||
2266 | |||
2267 | -extern void __serpent_crypt_ctr(void *ctx, u128 *dst, const u128 *src, | ||
2268 | +extern void __serpent_crypt_ctr(const void *ctx, u8 *dst, const u8 *src, | ||
2269 | le128 *iv); | ||
2270 | |||
2271 | -extern void serpent_xts_enc(void *ctx, u128 *dst, const u128 *src, le128 *iv); | ||
2272 | -extern void serpent_xts_dec(void *ctx, u128 *dst, const u128 *src, le128 *iv); | ||
2273 | +extern void serpent_xts_enc(const void *ctx, u8 *dst, const u8 *src, le128 *iv); | ||
2274 | +extern void serpent_xts_dec(const void *ctx, u8 *dst, const u8 *src, le128 *iv); | ||
2275 | |||
2276 | extern int xts_serpent_setkey(struct crypto_skcipher *tfm, const u8 *key, | ||
2277 | unsigned int keylen); | ||
2278 | diff --git a/arch/x86/include/asm/crypto/serpent-sse2.h b/arch/x86/include/asm/crypto/serpent-sse2.h | ||
2279 | index 1a345e8a7496c..860ca248914b1 100644 | ||
2280 | --- a/arch/x86/include/asm/crypto/serpent-sse2.h | ||
2281 | +++ b/arch/x86/include/asm/crypto/serpent-sse2.h | ||
2282 | @@ -9,25 +9,23 @@ | ||
2283 | |||
2284 | #define SERPENT_PARALLEL_BLOCKS 4 | ||
2285 | |||
2286 | -asmlinkage void __serpent_enc_blk_4way(struct serpent_ctx *ctx, u8 *dst, | ||
2287 | +asmlinkage void __serpent_enc_blk_4way(const struct serpent_ctx *ctx, u8 *dst, | ||
2288 | const u8 *src, bool xor); | ||
2289 | -asmlinkage void serpent_dec_blk_4way(struct serpent_ctx *ctx, u8 *dst, | ||
2290 | +asmlinkage void serpent_dec_blk_4way(const struct serpent_ctx *ctx, u8 *dst, | ||
2291 | const u8 *src); | ||
2292 | |||
2293 | -static inline void serpent_enc_blk_xway(struct serpent_ctx *ctx, u8 *dst, | ||
2294 | - const u8 *src) | ||
2295 | +static inline void serpent_enc_blk_xway(const void *ctx, u8 *dst, const u8 *src) | ||
2296 | { | ||
2297 | __serpent_enc_blk_4way(ctx, dst, src, false); | ||
2298 | } | ||
2299 | |||
2300 | -static inline void serpent_enc_blk_xway_xor(struct serpent_ctx *ctx, u8 *dst, | ||
2301 | - const u8 *src) | ||
2302 | +static inline void serpent_enc_blk_xway_xor(const struct serpent_ctx *ctx, | ||
2303 | + u8 *dst, const u8 *src) | ||
2304 | { | ||
2305 | __serpent_enc_blk_4way(ctx, dst, src, true); | ||
2306 | } | ||
2307 | |||
2308 | -static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst, | ||
2309 | - const u8 *src) | ||
2310 | +static inline void serpent_dec_blk_xway(const void *ctx, u8 *dst, const u8 *src) | ||
2311 | { | ||
2312 | serpent_dec_blk_4way(ctx, dst, src); | ||
2313 | } | ||
2314 | @@ -36,25 +34,23 @@ static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst, | ||
2315 | |||
2316 | #define SERPENT_PARALLEL_BLOCKS 8 | ||
2317 | |||
2318 | -asmlinkage void __serpent_enc_blk_8way(struct serpent_ctx *ctx, u8 *dst, | ||
2319 | +asmlinkage void __serpent_enc_blk_8way(const struct serpent_ctx *ctx, u8 *dst, | ||
2320 | const u8 *src, bool xor); | ||
2321 | -asmlinkage void serpent_dec_blk_8way(struct serpent_ctx *ctx, u8 *dst, | ||
2322 | +asmlinkage void serpent_dec_blk_8way(const struct serpent_ctx *ctx, u8 *dst, | ||
2323 | const u8 *src); | ||
2324 | |||
2325 | -static inline void serpent_enc_blk_xway(struct serpent_ctx *ctx, u8 *dst, | ||
2326 | - const u8 *src) | ||
2327 | +static inline void serpent_enc_blk_xway(const void *ctx, u8 *dst, const u8 *src) | ||
2328 | { | ||
2329 | __serpent_enc_blk_8way(ctx, dst, src, false); | ||
2330 | } | ||
2331 | |||
2332 | -static inline void serpent_enc_blk_xway_xor(struct serpent_ctx *ctx, u8 *dst, | ||
2333 | - const u8 *src) | ||
2334 | +static inline void serpent_enc_blk_xway_xor(const struct serpent_ctx *ctx, | ||
2335 | + u8 *dst, const u8 *src) | ||
2336 | { | ||
2337 | __serpent_enc_blk_8way(ctx, dst, src, true); | ||
2338 | } | ||
2339 | |||
2340 | -static inline void serpent_dec_blk_xway(struct serpent_ctx *ctx, u8 *dst, | ||
2341 | - const u8 *src) | ||
2342 | +static inline void serpent_dec_blk_xway(const void *ctx, u8 *dst, const u8 *src) | ||
2343 | { | ||
2344 | serpent_dec_blk_8way(ctx, dst, src); | ||
2345 | } | ||
2346 | diff --git a/arch/x86/include/asm/crypto/twofish.h b/arch/x86/include/asm/crypto/twofish.h | ||
2347 | index f618bf272b900..2c377a8042e17 100644 | ||
2348 | --- a/arch/x86/include/asm/crypto/twofish.h | ||
2349 | +++ b/arch/x86/include/asm/crypto/twofish.h | ||
2350 | @@ -7,22 +7,19 @@ | ||
2351 | #include <crypto/b128ops.h> | ||
2352 | |||
2353 | /* regular block cipher functions from twofish_x86_64 module */ | ||
2354 | -asmlinkage void twofish_enc_blk(struct twofish_ctx *ctx, u8 *dst, | ||
2355 | - const u8 *src); | ||
2356 | -asmlinkage void twofish_dec_blk(struct twofish_ctx *ctx, u8 *dst, | ||
2357 | - const u8 *src); | ||
2358 | +asmlinkage void twofish_enc_blk(const void *ctx, u8 *dst, const u8 *src); | ||
2359 | +asmlinkage void twofish_dec_blk(const void *ctx, u8 *dst, const u8 *src); | ||
2360 | |||
2361 | /* 3-way parallel cipher functions */ | ||
2362 | -asmlinkage void __twofish_enc_blk_3way(struct twofish_ctx *ctx, u8 *dst, | ||
2363 | - const u8 *src, bool xor); | ||
2364 | -asmlinkage void twofish_dec_blk_3way(struct twofish_ctx *ctx, u8 *dst, | ||
2365 | - const u8 *src); | ||
2366 | +asmlinkage void __twofish_enc_blk_3way(const void *ctx, u8 *dst, const u8 *src, | ||
2367 | + bool xor); | ||
2368 | +asmlinkage void twofish_dec_blk_3way(const void *ctx, u8 *dst, const u8 *src); | ||
2369 | |||
2370 | /* helpers from twofish_x86_64-3way module */ | ||
2371 | -extern void twofish_dec_blk_cbc_3way(void *ctx, u128 *dst, const u128 *src); | ||
2372 | -extern void twofish_enc_blk_ctr(void *ctx, u128 *dst, const u128 *src, | ||
2373 | +extern void twofish_dec_blk_cbc_3way(const void *ctx, u8 *dst, const u8 *src); | ||
2374 | +extern void twofish_enc_blk_ctr(const void *ctx, u8 *dst, const u8 *src, | ||
2375 | le128 *iv); | ||
2376 | -extern void twofish_enc_blk_ctr_3way(void *ctx, u128 *dst, const u128 *src, | ||
2377 | +extern void twofish_enc_blk_ctr_3way(const void *ctx, u8 *dst, const u8 *src, | ||
2378 | le128 *iv); | ||
2379 | |||
2380 | #endif /* ASM_X86_TWOFISH_H */ | ||
2381 | diff --git a/crypto/cast6_generic.c b/crypto/cast6_generic.c | ||
2382 | index a8248f8e2777e..85328522c5ca1 100644 | ||
2383 | --- a/crypto/cast6_generic.c | ||
2384 | +++ b/crypto/cast6_generic.c | ||
2385 | @@ -154,7 +154,7 @@ int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen) | ||
2386 | EXPORT_SYMBOL_GPL(cast6_setkey); | ||
2387 | |||
2388 | /*forward quad round*/ | ||
2389 | -static inline void Q(u32 *block, u8 *Kr, u32 *Km) | ||
2390 | +static inline void Q(u32 *block, const u8 *Kr, const u32 *Km) | ||
2391 | { | ||
2392 | u32 I; | ||
2393 | block[2] ^= F1(block[3], Kr[0], Km[0]); | ||
2394 | @@ -164,7 +164,7 @@ static inline void Q(u32 *block, u8 *Kr, u32 *Km) | ||
2395 | } | ||
2396 | |||
2397 | /*reverse quad round*/ | ||
2398 | -static inline void QBAR(u32 *block, u8 *Kr, u32 *Km) | ||
2399 | +static inline void QBAR(u32 *block, const u8 *Kr, const u32 *Km) | ||
2400 | { | ||
2401 | u32 I; | ||
2402 | block[3] ^= F1(block[0], Kr[3], Km[3]); | ||
2403 | @@ -173,13 +173,14 @@ static inline void QBAR(u32 *block, u8 *Kr, u32 *Km) | ||
2404 | block[2] ^= F1(block[3], Kr[0], Km[0]); | ||
2405 | } | ||
2406 | |||
2407 | -void __cast6_encrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf) | ||
2408 | +void __cast6_encrypt(const void *ctx, u8 *outbuf, const u8 *inbuf) | ||
2409 | { | ||
2410 | + const struct cast6_ctx *c = ctx; | ||
2411 | const __be32 *src = (const __be32 *)inbuf; | ||
2412 | __be32 *dst = (__be32 *)outbuf; | ||
2413 | u32 block[4]; | ||
2414 | - u32 *Km; | ||
2415 | - u8 *Kr; | ||
2416 | + const u32 *Km; | ||
2417 | + const u8 *Kr; | ||
2418 | |||
2419 | block[0] = be32_to_cpu(src[0]); | ||
2420 | block[1] = be32_to_cpu(src[1]); | ||
2421 | @@ -211,13 +212,14 @@ static void cast6_encrypt(struct crypto_tfm *tfm, u8 *outbuf, const u8 *inbuf) | ||
2422 | __cast6_encrypt(crypto_tfm_ctx(tfm), outbuf, inbuf); | ||
2423 | } | ||
2424 | |||
2425 | -void __cast6_decrypt(struct cast6_ctx *c, u8 *outbuf, const u8 *inbuf) | ||
2426 | +void __cast6_decrypt(const void *ctx, u8 *outbuf, const u8 *inbuf) | ||
2427 | { | ||
2428 | + const struct cast6_ctx *c = ctx; | ||
2429 | const __be32 *src = (const __be32 *)inbuf; | ||
2430 | __be32 *dst = (__be32 *)outbuf; | ||
2431 | u32 block[4]; | ||
2432 | - u32 *Km; | ||
2433 | - u8 *Kr; | ||
2434 | + const u32 *Km; | ||
2435 | + const u8 *Kr; | ||
2436 | |||
2437 | block[0] = be32_to_cpu(src[0]); | ||
2438 | block[1] = be32_to_cpu(src[1]); | ||
2439 | diff --git a/crypto/serpent_generic.c b/crypto/serpent_generic.c | ||
2440 | index 56fa665a4f010..492c1d0bfe068 100644 | ||
2441 | --- a/crypto/serpent_generic.c | ||
2442 | +++ b/crypto/serpent_generic.c | ||
2443 | @@ -449,8 +449,9 @@ int serpent_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen) | ||
2444 | } | ||
2445 | EXPORT_SYMBOL_GPL(serpent_setkey); | ||
2446 | |||
2447 | -void __serpent_encrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src) | ||
2448 | +void __serpent_encrypt(const void *c, u8 *dst, const u8 *src) | ||
2449 | { | ||
2450 | + const struct serpent_ctx *ctx = c; | ||
2451 | const u32 *k = ctx->expkey; | ||
2452 | const __le32 *s = (const __le32 *)src; | ||
2453 | __le32 *d = (__le32 *)dst; | ||
2454 | @@ -514,8 +515,9 @@ static void serpent_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
2455 | __serpent_encrypt(ctx, dst, src); | ||
2456 | } | ||
2457 | |||
2458 | -void __serpent_decrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src) | ||
2459 | +void __serpent_decrypt(const void *c, u8 *dst, const u8 *src) | ||
2460 | { | ||
2461 | + const struct serpent_ctx *ctx = c; | ||
2462 | const u32 *k = ctx->expkey; | ||
2463 | const __le32 *s = (const __le32 *)src; | ||
2464 | __le32 *d = (__le32 *)dst; | ||
2465 | diff --git a/drivers/gpu/drm/i915/gvt/display.c b/drivers/gpu/drm/i915/gvt/display.c | ||
2466 | index 59aa5e64acb04..21a562c2b1f50 100644 | ||
2467 | --- a/drivers/gpu/drm/i915/gvt/display.c | ||
2468 | +++ b/drivers/gpu/drm/i915/gvt/display.c | ||
2469 | @@ -172,21 +172,176 @@ static void emulate_monitor_status_change(struct intel_vgpu *vgpu) | ||
2470 | int pipe; | ||
2471 | |||
2472 | if (IS_BROXTON(dev_priv)) { | ||
2473 | + enum transcoder trans; | ||
2474 | + enum port port; | ||
2475 | + | ||
2476 | + /* Clear PIPE, DDI, PHY, HPD before setting new */ | ||
2477 | vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) &= ~(BXT_DE_PORT_HP_DDIA | | ||
2478 | BXT_DE_PORT_HP_DDIB | | ||
2479 | BXT_DE_PORT_HP_DDIC); | ||
2480 | |||
2481 | + for_each_pipe(dev_priv, pipe) { | ||
2482 | + vgpu_vreg_t(vgpu, PIPECONF(pipe)) &= | ||
2483 | + ~(PIPECONF_ENABLE | I965_PIPECONF_ACTIVE); | ||
2484 | + vgpu_vreg_t(vgpu, DSPCNTR(pipe)) &= ~DISPLAY_PLANE_ENABLE; | ||
2485 | + vgpu_vreg_t(vgpu, SPRCTL(pipe)) &= ~SPRITE_ENABLE; | ||
2486 | + vgpu_vreg_t(vgpu, CURCNTR(pipe)) &= ~MCURSOR_MODE; | ||
2487 | + vgpu_vreg_t(vgpu, CURCNTR(pipe)) |= MCURSOR_MODE_DISABLE; | ||
2488 | + } | ||
2489 | + | ||
2490 | + for (trans = TRANSCODER_A; trans <= TRANSCODER_EDP; trans++) { | ||
2491 | + vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(trans)) &= | ||
2492 | + ~(TRANS_DDI_BPC_MASK | TRANS_DDI_MODE_SELECT_MASK | | ||
2493 | + TRANS_DDI_PORT_MASK | TRANS_DDI_FUNC_ENABLE); | ||
2494 | + } | ||
2495 | + vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_A)) &= | ||
2496 | + ~(TRANS_DDI_BPC_MASK | TRANS_DDI_MODE_SELECT_MASK | | ||
2497 | + TRANS_DDI_PORT_MASK); | ||
2498 | + | ||
2499 | + for (port = PORT_A; port <= PORT_C; port++) { | ||
2500 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(port)) &= | ||
2501 | + ~BXT_PHY_LANE_ENABLED; | ||
2502 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(port)) |= | ||
2503 | + (BXT_PHY_CMNLANE_POWERDOWN_ACK | | ||
2504 | + BXT_PHY_LANE_POWERDOWN_ACK); | ||
2505 | + | ||
2506 | + vgpu_vreg_t(vgpu, BXT_PORT_PLL_ENABLE(port)) &= | ||
2507 | + ~(PORT_PLL_POWER_STATE | PORT_PLL_POWER_ENABLE | | ||
2508 | + PORT_PLL_REF_SEL | PORT_PLL_LOCK | | ||
2509 | + PORT_PLL_ENABLE); | ||
2510 | + | ||
2511 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(port)) &= | ||
2512 | + ~(DDI_INIT_DISPLAY_DETECTED | | ||
2513 | + DDI_BUF_CTL_ENABLE); | ||
2514 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(port)) |= DDI_BUF_IS_IDLE; | ||
2515 | + } | ||
2516 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= | ||
2517 | + ~(PORTA_HOTPLUG_ENABLE | PORTA_HOTPLUG_STATUS_MASK); | ||
2518 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= | ||
2519 | + ~(PORTB_HOTPLUG_ENABLE | PORTB_HOTPLUG_STATUS_MASK); | ||
2520 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= | ||
2521 | + ~(PORTC_HOTPLUG_ENABLE | PORTC_HOTPLUG_STATUS_MASK); | ||
2522 | + /* No hpd_invert set in vgpu vbt, need to clear invert mask */ | ||
2523 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= ~BXT_DDI_HPD_INVERT_MASK; | ||
2524 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) &= ~BXT_DE_PORT_HOTPLUG_MASK; | ||
2525 | + | ||
2526 | + vgpu_vreg_t(vgpu, BXT_P_CR_GT_DISP_PWRON) &= ~(BIT(0) | BIT(1)); | ||
2527 | + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY0)) &= | ||
2528 | + ~PHY_POWER_GOOD; | ||
2529 | + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY1)) &= | ||
2530 | + ~PHY_POWER_GOOD; | ||
2531 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY0)) &= ~BIT(30); | ||
2532 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY1)) &= ~BIT(30); | ||
2533 | + | ||
2534 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) &= ~SFUSE_STRAP_DDIB_DETECTED; | ||
2535 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) &= ~SFUSE_STRAP_DDIC_DETECTED; | ||
2536 | + | ||
2537 | + /* | ||
2538 | + * Only 1 PIPE enabled in current vGPU display and PIPE_A is | ||
2539 | + * tied to TRANSCODER_A in HW, so it's safe to assume PIPE_A, | ||
2540 | + * TRANSCODER_A can be enabled. PORT_x depends on the input of | ||
2541 | + * setup_virtual_dp_monitor. | ||
2542 | + */ | ||
2543 | + vgpu_vreg_t(vgpu, PIPECONF(PIPE_A)) |= PIPECONF_ENABLE; | ||
2544 | + vgpu_vreg_t(vgpu, PIPECONF(PIPE_A)) |= I965_PIPECONF_ACTIVE; | ||
2545 | + | ||
2546 | + /* | ||
2547 | + * Golden M/N are calculated based on: | ||
2548 | + * 24 bpp, 4 lanes, 154000 pixel clk (from virtual EDID), | ||
2549 | + * DP link clk 1620 MHz and non-constant_n. | ||
2550 | + * TODO: calculate DP link symbol clk and stream clk m/n. | ||
2551 | + */ | ||
2552 | + vgpu_vreg_t(vgpu, PIPE_DATA_M1(TRANSCODER_A)) = 63 << TU_SIZE_SHIFT; | ||
2553 | + vgpu_vreg_t(vgpu, PIPE_DATA_M1(TRANSCODER_A)) |= 0x5b425e; | ||
2554 | + vgpu_vreg_t(vgpu, PIPE_DATA_N1(TRANSCODER_A)) = 0x800000; | ||
2555 | + vgpu_vreg_t(vgpu, PIPE_LINK_M1(TRANSCODER_A)) = 0x3cd6e; | ||
2556 | + vgpu_vreg_t(vgpu, PIPE_LINK_N1(TRANSCODER_A)) = 0x80000; | ||
2557 | + | ||
2558 | + /* Enable per-DDI/PORT vreg */ | ||
2559 | if (intel_vgpu_has_monitor_on_port(vgpu, PORT_A)) { | ||
2560 | + vgpu_vreg_t(vgpu, BXT_P_CR_GT_DISP_PWRON) |= BIT(1); | ||
2561 | + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY1)) |= | ||
2562 | + PHY_POWER_GOOD; | ||
2563 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY1)) |= | ||
2564 | + BIT(30); | ||
2565 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_A)) |= | ||
2566 | + BXT_PHY_LANE_ENABLED; | ||
2567 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_A)) &= | ||
2568 | + ~(BXT_PHY_CMNLANE_POWERDOWN_ACK | | ||
2569 | + BXT_PHY_LANE_POWERDOWN_ACK); | ||
2570 | + vgpu_vreg_t(vgpu, BXT_PORT_PLL_ENABLE(PORT_A)) |= | ||
2571 | + (PORT_PLL_POWER_STATE | PORT_PLL_POWER_ENABLE | | ||
2572 | + PORT_PLL_REF_SEL | PORT_PLL_LOCK | | ||
2573 | + PORT_PLL_ENABLE); | ||
2574 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(PORT_A)) |= | ||
2575 | + (DDI_BUF_CTL_ENABLE | DDI_INIT_DISPLAY_DETECTED); | ||
2576 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(PORT_A)) &= | ||
2577 | + ~DDI_BUF_IS_IDLE; | ||
2578 | + vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_EDP)) |= | ||
2579 | + (TRANS_DDI_BPC_8 | TRANS_DDI_MODE_SELECT_DP_SST | | ||
2580 | + TRANS_DDI_FUNC_ENABLE); | ||
2581 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2582 | + PORTA_HOTPLUG_ENABLE; | ||
2583 | vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) |= | ||
2584 | BXT_DE_PORT_HP_DDIA; | ||
2585 | } | ||
2586 | |||
2587 | if (intel_vgpu_has_monitor_on_port(vgpu, PORT_B)) { | ||
2588 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) |= SFUSE_STRAP_DDIB_DETECTED; | ||
2589 | + vgpu_vreg_t(vgpu, BXT_P_CR_GT_DISP_PWRON) |= BIT(0); | ||
2590 | + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY0)) |= | ||
2591 | + PHY_POWER_GOOD; | ||
2592 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY0)) |= | ||
2593 | + BIT(30); | ||
2594 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_B)) |= | ||
2595 | + BXT_PHY_LANE_ENABLED; | ||
2596 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_B)) &= | ||
2597 | + ~(BXT_PHY_CMNLANE_POWERDOWN_ACK | | ||
2598 | + BXT_PHY_LANE_POWERDOWN_ACK); | ||
2599 | + vgpu_vreg_t(vgpu, BXT_PORT_PLL_ENABLE(PORT_B)) |= | ||
2600 | + (PORT_PLL_POWER_STATE | PORT_PLL_POWER_ENABLE | | ||
2601 | + PORT_PLL_REF_SEL | PORT_PLL_LOCK | | ||
2602 | + PORT_PLL_ENABLE); | ||
2603 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(PORT_B)) |= | ||
2604 | + DDI_BUF_CTL_ENABLE; | ||
2605 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(PORT_B)) &= | ||
2606 | + ~DDI_BUF_IS_IDLE; | ||
2607 | + vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_A)) |= | ||
2608 | + (TRANS_DDI_BPC_8 | TRANS_DDI_MODE_SELECT_DP_SST | | ||
2609 | + (PORT_B << TRANS_DDI_PORT_SHIFT) | | ||
2610 | + TRANS_DDI_FUNC_ENABLE); | ||
2611 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2612 | + PORTB_HOTPLUG_ENABLE; | ||
2613 | vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) |= | ||
2614 | BXT_DE_PORT_HP_DDIB; | ||
2615 | } | ||
2616 | |||
2617 | if (intel_vgpu_has_monitor_on_port(vgpu, PORT_C)) { | ||
2618 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) |= SFUSE_STRAP_DDIC_DETECTED; | ||
2619 | + vgpu_vreg_t(vgpu, BXT_P_CR_GT_DISP_PWRON) |= BIT(0); | ||
2620 | + vgpu_vreg_t(vgpu, BXT_PORT_CL1CM_DW0(DPIO_PHY0)) |= | ||
2621 | + PHY_POWER_GOOD; | ||
2622 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL_FAMILY(DPIO_PHY0)) |= | ||
2623 | + BIT(30); | ||
2624 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_C)) |= | ||
2625 | + BXT_PHY_LANE_ENABLED; | ||
2626 | + vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_C)) &= | ||
2627 | + ~(BXT_PHY_CMNLANE_POWERDOWN_ACK | | ||
2628 | + BXT_PHY_LANE_POWERDOWN_ACK); | ||
2629 | + vgpu_vreg_t(vgpu, BXT_PORT_PLL_ENABLE(PORT_C)) |= | ||
2630 | + (PORT_PLL_POWER_STATE | PORT_PLL_POWER_ENABLE | | ||
2631 | + PORT_PLL_REF_SEL | PORT_PLL_LOCK | | ||
2632 | + PORT_PLL_ENABLE); | ||
2633 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(PORT_C)) |= | ||
2634 | + DDI_BUF_CTL_ENABLE; | ||
2635 | + vgpu_vreg_t(vgpu, DDI_BUF_CTL(PORT_C)) &= | ||
2636 | + ~DDI_BUF_IS_IDLE; | ||
2637 | + vgpu_vreg_t(vgpu, TRANS_DDI_FUNC_CTL(TRANSCODER_A)) |= | ||
2638 | + (TRANS_DDI_BPC_8 | TRANS_DDI_MODE_SELECT_DP_SST | | ||
2639 | + (PORT_B << TRANS_DDI_PORT_SHIFT) | | ||
2640 | + TRANS_DDI_FUNC_ENABLE); | ||
2641 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2642 | + PORTC_HOTPLUG_ENABLE; | ||
2643 | vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) |= | ||
2644 | BXT_DE_PORT_HP_DDIC; | ||
2645 | } | ||
2646 | @@ -511,6 +666,63 @@ void intel_vgpu_emulate_hotplug(struct intel_vgpu *vgpu, bool connected) | ||
2647 | vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2648 | PORTD_HOTPLUG_STATUS_MASK; | ||
2649 | intel_vgpu_trigger_virtual_event(vgpu, DP_D_HOTPLUG); | ||
2650 | + } else if (IS_BROXTON(dev_priv)) { | ||
2651 | + if (intel_vgpu_has_monitor_on_port(vgpu, PORT_A)) { | ||
2652 | + if (connected) { | ||
2653 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) |= | ||
2654 | + BXT_DE_PORT_HP_DDIA; | ||
2655 | + } else { | ||
2656 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) &= | ||
2657 | + ~BXT_DE_PORT_HP_DDIA; | ||
2658 | + } | ||
2659 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_IIR) |= | ||
2660 | + BXT_DE_PORT_HP_DDIA; | ||
2661 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= | ||
2662 | + ~PORTA_HOTPLUG_STATUS_MASK; | ||
2663 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2664 | + PORTA_HOTPLUG_LONG_DETECT; | ||
2665 | + intel_vgpu_trigger_virtual_event(vgpu, DP_A_HOTPLUG); | ||
2666 | + } | ||
2667 | + if (intel_vgpu_has_monitor_on_port(vgpu, PORT_B)) { | ||
2668 | + if (connected) { | ||
2669 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) |= | ||
2670 | + BXT_DE_PORT_HP_DDIB; | ||
2671 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) |= | ||
2672 | + SFUSE_STRAP_DDIB_DETECTED; | ||
2673 | + } else { | ||
2674 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) &= | ||
2675 | + ~BXT_DE_PORT_HP_DDIB; | ||
2676 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) &= | ||
2677 | + ~SFUSE_STRAP_DDIB_DETECTED; | ||
2678 | + } | ||
2679 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_IIR) |= | ||
2680 | + BXT_DE_PORT_HP_DDIB; | ||
2681 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= | ||
2682 | + ~PORTB_HOTPLUG_STATUS_MASK; | ||
2683 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2684 | + PORTB_HOTPLUG_LONG_DETECT; | ||
2685 | + intel_vgpu_trigger_virtual_event(vgpu, DP_B_HOTPLUG); | ||
2686 | + } | ||
2687 | + if (intel_vgpu_has_monitor_on_port(vgpu, PORT_C)) { | ||
2688 | + if (connected) { | ||
2689 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) |= | ||
2690 | + BXT_DE_PORT_HP_DDIC; | ||
2691 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) |= | ||
2692 | + SFUSE_STRAP_DDIC_DETECTED; | ||
2693 | + } else { | ||
2694 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_ISR) &= | ||
2695 | + ~BXT_DE_PORT_HP_DDIC; | ||
2696 | + vgpu_vreg_t(vgpu, SFUSE_STRAP) &= | ||
2697 | + ~SFUSE_STRAP_DDIC_DETECTED; | ||
2698 | + } | ||
2699 | + vgpu_vreg_t(vgpu, GEN8_DE_PORT_IIR) |= | ||
2700 | + BXT_DE_PORT_HP_DDIC; | ||
2701 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) &= | ||
2702 | + ~PORTC_HOTPLUG_STATUS_MASK; | ||
2703 | + vgpu_vreg_t(vgpu, PCH_PORT_HOTPLUG) |= | ||
2704 | + PORTC_HOTPLUG_LONG_DETECT; | ||
2705 | + intel_vgpu_trigger_virtual_event(vgpu, DP_C_HOTPLUG); | ||
2706 | + } | ||
2707 | } | ||
2708 | } | ||
2709 | |||
2710 | diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c | ||
2711 | index 689b07bc91c47..245c20d36f1b2 100644 | ||
2712 | --- a/drivers/gpu/drm/i915/gvt/handlers.c | ||
2713 | +++ b/drivers/gpu/drm/i915/gvt/handlers.c | ||
2714 | @@ -1632,6 +1632,34 @@ static int edp_psr_imr_iir_write(struct intel_vgpu *vgpu, | ||
2715 | return 0; | ||
2716 | } | ||
2717 | |||
2718 | +/** | ||
2719 | + * FixMe: | ||
2720 | + * If guest fills non-priv batch buffer on ApolloLake/Broxton as Mesa i965 did: | ||
2721 | + * 717e7539124d (i965: Use a WC map and memcpy for the batch instead of pwrite.) | ||
2722 | + * Due to the missing flush of bb filled by VM vCPU, host GPU hangs on executing | ||
2723 | + * these MI_BATCH_BUFFER. | ||
2724 | + * Temporarily workaround this by setting SNOOP bit for PAT3 used by PPGTT | ||
2725 | + * PML4 PTE: PAT(0) PCD(1) PWT(1). | ||
2726 | + * The performance is still expected to be low, will need further improvement. | ||
2727 | + */ | ||
2728 | +static int bxt_ppat_low_write(struct intel_vgpu *vgpu, unsigned int offset, | ||
2729 | + void *p_data, unsigned int bytes) | ||
2730 | +{ | ||
2731 | + u64 pat = | ||
2732 | + GEN8_PPAT(0, CHV_PPAT_SNOOP) | | ||
2733 | + GEN8_PPAT(1, 0) | | ||
2734 | + GEN8_PPAT(2, 0) | | ||
2735 | + GEN8_PPAT(3, CHV_PPAT_SNOOP) | | ||
2736 | + GEN8_PPAT(4, CHV_PPAT_SNOOP) | | ||
2737 | + GEN8_PPAT(5, CHV_PPAT_SNOOP) | | ||
2738 | + GEN8_PPAT(6, CHV_PPAT_SNOOP) | | ||
2739 | + GEN8_PPAT(7, CHV_PPAT_SNOOP); | ||
2740 | + | ||
2741 | + vgpu_vreg(vgpu, offset) = lower_32_bits(pat); | ||
2742 | + | ||
2743 | + return 0; | ||
2744 | +} | ||
2745 | + | ||
2746 | static int mmio_read_from_hw(struct intel_vgpu *vgpu, | ||
2747 | unsigned int offset, void *p_data, unsigned int bytes) | ||
2748 | { | ||
2749 | @@ -2778,7 +2806,7 @@ static int init_broadwell_mmio_info(struct intel_gvt *gvt) | ||
2750 | |||
2751 | MMIO_DH(GEN6_PCODE_MAILBOX, D_BDW_PLUS, NULL, mailbox_write); | ||
2752 | |||
2753 | - MMIO_D(GEN8_PRIVATE_PAT_LO, D_BDW_PLUS); | ||
2754 | + MMIO_D(GEN8_PRIVATE_PAT_LO, D_BDW_PLUS & ~D_BXT); | ||
2755 | MMIO_D(GEN8_PRIVATE_PAT_HI, D_BDW_PLUS); | ||
2756 | |||
2757 | MMIO_D(GAMTARBMODE, D_BDW_PLUS); | ||
2758 | @@ -3104,7 +3132,7 @@ static int init_skl_mmio_info(struct intel_gvt *gvt) | ||
2759 | NULL, NULL); | ||
2760 | |||
2761 | MMIO_D(GAMT_CHKN_BIT_REG, D_KBL | D_CFL); | ||
2762 | - MMIO_D(GEN9_CTX_PREEMPT_REG, D_SKL_PLUS); | ||
2763 | + MMIO_D(GEN9_CTX_PREEMPT_REG, D_SKL_PLUS & ~D_BXT); | ||
2764 | |||
2765 | return 0; | ||
2766 | } | ||
2767 | @@ -3278,9 +3306,17 @@ static int init_bxt_mmio_info(struct intel_gvt *gvt) | ||
2768 | MMIO_D(GEN8_PUSHBUS_SHIFT, D_BXT); | ||
2769 | MMIO_D(GEN6_GFXPAUSE, D_BXT); | ||
2770 | MMIO_DFH(GEN8_L3SQCREG1, D_BXT, F_CMD_ACCESS, NULL, NULL); | ||
2771 | + MMIO_DFH(GEN8_L3CNTLREG, D_BXT, F_CMD_ACCESS, NULL, NULL); | ||
2772 | + MMIO_DFH(_MMIO(0x20D8), D_BXT, F_CMD_ACCESS, NULL, NULL); | ||
2773 | + MMIO_F(HSW_CS_GPR(0), 0x40, F_CMD_ACCESS, 0, 0, D_BXT, NULL, NULL); | ||
2774 | + MMIO_F(_MMIO(0x12600), 0x40, F_CMD_ACCESS, 0, 0, D_BXT, NULL, NULL); | ||
2775 | + MMIO_F(BCS_GPR(0), 0x40, F_CMD_ACCESS, 0, 0, D_BXT, NULL, NULL); | ||
2776 | + MMIO_F(_MMIO(0x1a600), 0x40, F_CMD_ACCESS, 0, 0, D_BXT, NULL, NULL); | ||
2777 | |||
2778 | MMIO_DFH(GEN9_CTX_PREEMPT_REG, D_BXT, F_CMD_ACCESS, NULL, NULL); | ||
2779 | |||
2780 | + MMIO_DH(GEN8_PRIVATE_PAT_LO, D_BXT, NULL, bxt_ppat_low_write); | ||
2781 | + | ||
2782 | return 0; | ||
2783 | } | ||
2784 | |||
2785 | diff --git a/drivers/gpu/drm/i915/gvt/mmio.c b/drivers/gpu/drm/i915/gvt/mmio.c | ||
2786 | index a55178884d67a..e0e7adc545a5b 100644 | ||
2787 | --- a/drivers/gpu/drm/i915/gvt/mmio.c | ||
2788 | +++ b/drivers/gpu/drm/i915/gvt/mmio.c | ||
2789 | @@ -271,6 +271,11 @@ void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu, bool dmlr) | ||
2790 | vgpu_vreg_t(vgpu, BXT_PHY_CTL(PORT_C)) |= | ||
2791 | BXT_PHY_CMNLANE_POWERDOWN_ACK | | ||
2792 | BXT_PHY_LANE_POWERDOWN_ACK; | ||
2793 | + vgpu_vreg_t(vgpu, SKL_FUSE_STATUS) |= | ||
2794 | + SKL_FUSE_DOWNLOAD_STATUS | | ||
2795 | + SKL_FUSE_PG_DIST_STATUS(SKL_PG0) | | ||
2796 | + SKL_FUSE_PG_DIST_STATUS(SKL_PG1) | | ||
2797 | + SKL_FUSE_PG_DIST_STATUS(SKL_PG2); | ||
2798 | } | ||
2799 | } else { | ||
2800 | #define GVT_GEN8_MMIO_RESET_OFFSET (0x44200) | ||
2801 | diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c | ||
2802 | index 32e57635709ad..4deb7fec5eb52 100644 | ||
2803 | --- a/drivers/gpu/drm/i915/gvt/vgpu.c | ||
2804 | +++ b/drivers/gpu/drm/i915/gvt/vgpu.c | ||
2805 | @@ -432,8 +432,9 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt, | ||
2806 | if (ret) | ||
2807 | goto out_clean_sched_policy; | ||
2808 | |||
2809 | - /*TODO: add more platforms support */ | ||
2810 | - if (IS_SKYLAKE(gvt->dev_priv) || IS_KABYLAKE(gvt->dev_priv)) | ||
2811 | + if (IS_BROADWELL(gvt->dev_priv) || IS_BROXTON(gvt->dev_priv)) | ||
2812 | + ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_B); | ||
2813 | + else | ||
2814 | ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_D); | ||
2815 | if (ret) | ||
2816 | goto out_clean_sched_policy; | ||
2817 | diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c | ||
2818 | index 0b1223f360d97..f35757b63ea78 100644 | ||
2819 | --- a/drivers/net/dsa/b53/b53_common.c | ||
2820 | +++ b/drivers/net/dsa/b53/b53_common.c | ||
2821 | @@ -514,6 +514,19 @@ void b53_imp_vlan_setup(struct dsa_switch *ds, int cpu_port) | ||
2822 | } | ||
2823 | EXPORT_SYMBOL(b53_imp_vlan_setup); | ||
2824 | |||
2825 | +static void b53_port_set_learning(struct b53_device *dev, int port, | ||
2826 | + bool learning) | ||
2827 | +{ | ||
2828 | + u16 reg; | ||
2829 | + | ||
2830 | + b53_read16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, ®); | ||
2831 | + if (learning) | ||
2832 | + reg &= ~BIT(port); | ||
2833 | + else | ||
2834 | + reg |= BIT(port); | ||
2835 | + b53_write16(dev, B53_CTRL_PAGE, B53_DIS_LEARNING, reg); | ||
2836 | +} | ||
2837 | + | ||
2838 | int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy) | ||
2839 | { | ||
2840 | struct b53_device *dev = ds->priv; | ||
2841 | @@ -527,6 +540,7 @@ int b53_enable_port(struct dsa_switch *ds, int port, struct phy_device *phy) | ||
2842 | cpu_port = ds->ports[port].cpu_dp->index; | ||
2843 | |||
2844 | b53_br_egress_floods(ds, port, true, true); | ||
2845 | + b53_port_set_learning(dev, port, false); | ||
2846 | |||
2847 | if (dev->ops->irq_enable) | ||
2848 | ret = dev->ops->irq_enable(dev, port); | ||
2849 | @@ -645,6 +659,7 @@ static void b53_enable_cpu_port(struct b53_device *dev, int port) | ||
2850 | b53_brcm_hdr_setup(dev->ds, port); | ||
2851 | |||
2852 | b53_br_egress_floods(dev->ds, port, true, true); | ||
2853 | + b53_port_set_learning(dev, port, false); | ||
2854 | } | ||
2855 | |||
2856 | static void b53_enable_mib(struct b53_device *dev) | ||
2857 | @@ -1704,6 +1719,8 @@ int b53_br_join(struct dsa_switch *ds, int port, struct net_device *br) | ||
2858 | b53_write16(dev, B53_PVLAN_PAGE, B53_PVLAN_PORT_MASK(port), pvlan); | ||
2859 | dev->ports[port].vlan_ctl_mask = pvlan; | ||
2860 | |||
2861 | + b53_port_set_learning(dev, port, true); | ||
2862 | + | ||
2863 | return 0; | ||
2864 | } | ||
2865 | EXPORT_SYMBOL(b53_br_join); | ||
2866 | @@ -1751,6 +1768,7 @@ void b53_br_leave(struct dsa_switch *ds, int port, struct net_device *br) | ||
2867 | vl->untag |= BIT(port) | BIT(cpu_port); | ||
2868 | b53_set_vlan_entry(dev, pvid, vl); | ||
2869 | } | ||
2870 | + b53_port_set_learning(dev, port, false); | ||
2871 | } | ||
2872 | EXPORT_SYMBOL(b53_br_leave); | ||
2873 | |||
2874 | diff --git a/drivers/net/dsa/b53/b53_regs.h b/drivers/net/dsa/b53/b53_regs.h | ||
2875 | index c90985c294a2e..b2c539a421545 100644 | ||
2876 | --- a/drivers/net/dsa/b53/b53_regs.h | ||
2877 | +++ b/drivers/net/dsa/b53/b53_regs.h | ||
2878 | @@ -115,6 +115,7 @@ | ||
2879 | #define B53_UC_FLOOD_MASK 0x32 | ||
2880 | #define B53_MC_FLOOD_MASK 0x34 | ||
2881 | #define B53_IPMC_FLOOD_MASK 0x36 | ||
2882 | +#define B53_DIS_LEARNING 0x3c | ||
2883 | |||
2884 | /* | ||
2885 | * Override Ports 0-7 State on devices with xMII interfaces (8 bit) | ||
2886 | diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c | ||
2887 | index 6dd29bad1609f..ca425c15953b1 100644 | ||
2888 | --- a/drivers/net/dsa/bcm_sf2.c | ||
2889 | +++ b/drivers/net/dsa/bcm_sf2.c | ||
2890 | @@ -172,11 +172,6 @@ static int bcm_sf2_port_setup(struct dsa_switch *ds, int port, | ||
2891 | reg &= ~P_TXQ_PSM_VDD(port); | ||
2892 | core_writel(priv, reg, CORE_MEM_PSM_VDD_CTRL); | ||
2893 | |||
2894 | - /* Enable learning */ | ||
2895 | - reg = core_readl(priv, CORE_DIS_LEARN); | ||
2896 | - reg &= ~BIT(port); | ||
2897 | - core_writel(priv, reg, CORE_DIS_LEARN); | ||
2898 | - | ||
2899 | /* Enable Broadcom tags for that port if requested */ | ||
2900 | if (priv->brcm_tag_mask & BIT(port)) | ||
2901 | b53_brcm_hdr_setup(ds, port); | ||
2902 | diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c | ||
2903 | index 08ca9441270d2..a352c1704042d 100644 | ||
2904 | --- a/fs/btrfs/block-group.c | ||
2905 | +++ b/fs/btrfs/block-group.c | ||
2906 | @@ -2048,8 +2048,17 @@ static u64 update_block_group_flags(struct btrfs_fs_info *fs_info, u64 flags) | ||
2907 | return flags; | ||
2908 | } | ||
2909 | |||
2910 | -int btrfs_inc_block_group_ro(struct btrfs_block_group_cache *cache) | ||
2911 | - | ||
2912 | +/* | ||
2913 | + * Mark one block group RO, can be called several times for the same block | ||
2914 | + * group. | ||
2915 | + * | ||
2916 | + * @cache: the destination block group | ||
2917 | + * @do_chunk_alloc: whether need to do chunk pre-allocation, this is to | ||
2918 | + * ensure we still have some free space after marking this | ||
2919 | + * block group RO. | ||
2920 | + */ | ||
2921 | +int btrfs_inc_block_group_ro(struct btrfs_block_group_cache *cache, | ||
2922 | + bool do_chunk_alloc) | ||
2923 | { | ||
2924 | struct btrfs_fs_info *fs_info = cache->fs_info; | ||
2925 | struct btrfs_trans_handle *trans; | ||
2926 | @@ -2079,25 +2088,29 @@ again: | ||
2927 | goto again; | ||
2928 | } | ||
2929 | |||
2930 | - /* | ||
2931 | - * if we are changing raid levels, try to allocate a corresponding | ||
2932 | - * block group with the new raid level. | ||
2933 | - */ | ||
2934 | - alloc_flags = update_block_group_flags(fs_info, cache->flags); | ||
2935 | - if (alloc_flags != cache->flags) { | ||
2936 | - ret = btrfs_chunk_alloc(trans, alloc_flags, CHUNK_ALLOC_FORCE); | ||
2937 | + if (do_chunk_alloc) { | ||
2938 | /* | ||
2939 | - * ENOSPC is allowed here, we may have enough space | ||
2940 | - * already allocated at the new raid level to | ||
2941 | - * carry on | ||
2942 | + * If we are changing raid levels, try to allocate a | ||
2943 | + * corresponding block group with the new raid level. | ||
2944 | */ | ||
2945 | - if (ret == -ENOSPC) | ||
2946 | - ret = 0; | ||
2947 | - if (ret < 0) | ||
2948 | - goto out; | ||
2949 | + alloc_flags = update_block_group_flags(fs_info, cache->flags); | ||
2950 | + if (alloc_flags != cache->flags) { | ||
2951 | + ret = btrfs_chunk_alloc(trans, alloc_flags, | ||
2952 | + CHUNK_ALLOC_FORCE); | ||
2953 | + /* | ||
2954 | + * ENOSPC is allowed here, we may have enough space | ||
2955 | + * already allocated at the new raid level to carry on | ||
2956 | + */ | ||
2957 | + if (ret == -ENOSPC) | ||
2958 | + ret = 0; | ||
2959 | + if (ret < 0) | ||
2960 | + goto out; | ||
2961 | + } | ||
2962 | } | ||
2963 | |||
2964 | - ret = inc_block_group_ro(cache, 0); | ||
2965 | + ret = inc_block_group_ro(cache, !do_chunk_alloc); | ||
2966 | + if (!do_chunk_alloc) | ||
2967 | + goto unlock_out; | ||
2968 | if (!ret) | ||
2969 | goto out; | ||
2970 | alloc_flags = btrfs_get_alloc_profile(fs_info, cache->space_info->flags); | ||
2971 | @@ -2112,6 +2125,7 @@ out: | ||
2972 | check_system_chunk(trans, alloc_flags); | ||
2973 | mutex_unlock(&fs_info->chunk_mutex); | ||
2974 | } | ||
2975 | +unlock_out: | ||
2976 | mutex_unlock(&fs_info->ro_block_group_mutex); | ||
2977 | |||
2978 | btrfs_end_transaction(trans); | ||
2979 | diff --git a/fs/btrfs/block-group.h b/fs/btrfs/block-group.h | ||
2980 | index c391800388dda..0758e6d52acba 100644 | ||
2981 | --- a/fs/btrfs/block-group.h | ||
2982 | +++ b/fs/btrfs/block-group.h | ||
2983 | @@ -205,7 +205,8 @@ int btrfs_read_block_groups(struct btrfs_fs_info *info); | ||
2984 | int btrfs_make_block_group(struct btrfs_trans_handle *trans, u64 bytes_used, | ||
2985 | u64 type, u64 chunk_offset, u64 size); | ||
2986 | void btrfs_create_pending_block_groups(struct btrfs_trans_handle *trans); | ||
2987 | -int btrfs_inc_block_group_ro(struct btrfs_block_group_cache *cache); | ||
2988 | +int btrfs_inc_block_group_ro(struct btrfs_block_group_cache *cache, | ||
2989 | + bool do_chunk_alloc); | ||
2990 | void btrfs_dec_block_group_ro(struct btrfs_block_group_cache *cache); | ||
2991 | int btrfs_start_dirty_block_groups(struct btrfs_trans_handle *trans); | ||
2992 | int btrfs_write_dirty_block_groups(struct btrfs_trans_handle *trans); | ||
2993 | diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c | ||
2994 | index 05b3e27b21d44..68b5d7c4aa491 100644 | ||
2995 | --- a/fs/btrfs/relocation.c | ||
2996 | +++ b/fs/btrfs/relocation.c | ||
2997 | @@ -4428,7 +4428,7 @@ int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start) | ||
2998 | rc->extent_root = extent_root; | ||
2999 | rc->block_group = bg; | ||
3000 | |||
3001 | - ret = btrfs_inc_block_group_ro(rc->block_group); | ||
3002 | + ret = btrfs_inc_block_group_ro(rc->block_group, true); | ||
3003 | if (ret) { | ||
3004 | err = ret; | ||
3005 | goto out; | ||
3006 | diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c | ||
3007 | index 93d7cb56e44b2..e5db948daa123 100644 | ||
3008 | --- a/fs/btrfs/scrub.c | ||
3009 | +++ b/fs/btrfs/scrub.c | ||
3010 | @@ -3560,7 +3560,26 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx, | ||
3011 | * -> btrfs_scrub_pause() | ||
3012 | */ | ||
3013 | scrub_pause_on(fs_info); | ||
3014 | - ret = btrfs_inc_block_group_ro(cache); | ||
3015 | + | ||
3016 | + /* | ||
3017 | + * Don't do chunk preallocation for scrub. | ||
3018 | + * | ||
3019 | + * This is especially important for SYSTEM bgs, or we can hit | ||
3020 | + * -EFBIG from btrfs_finish_chunk_alloc() like: | ||
3021 | + * 1. The only SYSTEM bg is marked RO. | ||
3022 | + * Since SYSTEM bg is small, that's pretty common. | ||
3023 | + * 2. New SYSTEM bg will be allocated | ||
3024 | + * Due to regular version will allocate new chunk. | ||
3025 | + * 3. New SYSTEM bg is empty and will get cleaned up | ||
3026 | + * Before cleanup really happens, it's marked RO again. | ||
3027 | + * 4. Empty SYSTEM bg get scrubbed | ||
3028 | + * We go back to 2. | ||
3029 | + * | ||
3030 | + * This can easily boost the amount of SYSTEM chunks if cleaner | ||
3031 | + * thread can't be triggered fast enough, and use up all space | ||
3032 | + * of btrfs_super_block::sys_chunk_array | ||
3033 | + */ | ||
3034 | + ret = btrfs_inc_block_group_ro(cache, false); | ||
3035 | if (!ret && sctx->is_dev_replace) { | ||
3036 | /* | ||
3037 | * If we are doing a device replace wait for any tasks | ||
3038 | diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h | ||
3039 | index e3688312e9f1b..43bacf0a6bd31 100644 | ||
3040 | --- a/fs/fuse/fuse_i.h | ||
3041 | +++ b/fs/fuse/fuse_i.h | ||
3042 | @@ -791,6 +791,7 @@ static inline u64 fuse_get_attr_version(struct fuse_conn *fc) | ||
3043 | |||
3044 | static inline void fuse_make_bad(struct inode *inode) | ||
3045 | { | ||
3046 | + remove_inode_hash(inode); | ||
3047 | set_bit(FUSE_I_BAD, &get_fuse_inode(inode)->state); | ||
3048 | } | ||
3049 | |||
3050 | diff --git a/include/crypto/cast6.h b/include/crypto/cast6.h | ||
3051 | index c71f6ef47f0f4..4c8d0c72f78d4 100644 | ||
3052 | --- a/include/crypto/cast6.h | ||
3053 | +++ b/include/crypto/cast6.h | ||
3054 | @@ -19,7 +19,7 @@ int __cast6_setkey(struct cast6_ctx *ctx, const u8 *key, | ||
3055 | unsigned int keylen, u32 *flags); | ||
3056 | int cast6_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen); | ||
3057 | |||
3058 | -void __cast6_encrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src); | ||
3059 | -void __cast6_decrypt(struct cast6_ctx *ctx, u8 *dst, const u8 *src); | ||
3060 | +void __cast6_encrypt(const void *ctx, u8 *dst, const u8 *src); | ||
3061 | +void __cast6_decrypt(const void *ctx, u8 *dst, const u8 *src); | ||
3062 | |||
3063 | #endif | ||
3064 | diff --git a/include/crypto/serpent.h b/include/crypto/serpent.h | ||
3065 | index 7dd780c5d0589..75c7eaa208535 100644 | ||
3066 | --- a/include/crypto/serpent.h | ||
3067 | +++ b/include/crypto/serpent.h | ||
3068 | @@ -22,7 +22,7 @@ int __serpent_setkey(struct serpent_ctx *ctx, const u8 *key, | ||
3069 | unsigned int keylen); | ||
3070 | int serpent_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int keylen); | ||
3071 | |||
3072 | -void __serpent_encrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src); | ||
3073 | -void __serpent_decrypt(struct serpent_ctx *ctx, u8 *dst, const u8 *src); | ||
3074 | +void __serpent_encrypt(const void *ctx, u8 *dst, const u8 *src); | ||
3075 | +void __serpent_decrypt(const void *ctx, u8 *dst, const u8 *src); | ||
3076 | |||
3077 | #endif | ||
3078 | diff --git a/include/crypto/xts.h b/include/crypto/xts.h | ||
3079 | index 75fd96ff976b7..15ae7fdc04789 100644 | ||
3080 | --- a/include/crypto/xts.h | ||
3081 | +++ b/include/crypto/xts.h | ||
3082 | @@ -8,8 +8,6 @@ | ||
3083 | |||
3084 | #define XTS_BLOCK_SIZE 16 | ||
3085 | |||
3086 | -#define XTS_TWEAK_CAST(x) ((void (*)(void *, u8*, const u8*))(x)) | ||
3087 | - | ||
3088 | static inline int xts_check_key(struct crypto_tfm *tfm, | ||
3089 | const u8 *key, unsigned int keylen) | ||
3090 | { | ||
3091 | diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c | ||
3092 | index e6a43c0fdee88..ab2a4b7dfca57 100644 | ||
3093 | --- a/kernel/bpf/verifier.c | ||
3094 | +++ b/kernel/bpf/verifier.c | ||
3095 | @@ -4268,10 +4268,14 @@ static int retrieve_ptr_limit(const struct bpf_reg_state *ptr_reg, | ||
3096 | { | ||
3097 | bool mask_to_left = (opcode == BPF_ADD && off_is_neg) || | ||
3098 | (opcode == BPF_SUB && !off_is_neg); | ||
3099 | - u32 off; | ||
3100 | + u32 off, max; | ||
3101 | |||
3102 | switch (ptr_reg->type) { | ||
3103 | case PTR_TO_STACK: | ||
3104 | + /* Offset 0 is out-of-bounds, but acceptable start for the | ||
3105 | + * left direction, see BPF_REG_FP. | ||
3106 | + */ | ||
3107 | + max = MAX_BPF_STACK + mask_to_left; | ||
3108 | /* Indirect variable offset stack access is prohibited in | ||
3109 | * unprivileged mode so it's not handled here. | ||
3110 | */ | ||
3111 | @@ -4279,16 +4283,17 @@ static int retrieve_ptr_limit(const struct bpf_reg_state *ptr_reg, | ||
3112 | if (mask_to_left) | ||
3113 | *ptr_limit = MAX_BPF_STACK + off; | ||
3114 | else | ||
3115 | - *ptr_limit = -off; | ||
3116 | - return 0; | ||
3117 | + *ptr_limit = -off - 1; | ||
3118 | + return *ptr_limit >= max ? -ERANGE : 0; | ||
3119 | case PTR_TO_MAP_VALUE: | ||
3120 | + max = ptr_reg->map_ptr->value_size; | ||
3121 | if (mask_to_left) { | ||
3122 | *ptr_limit = ptr_reg->umax_value + ptr_reg->off; | ||
3123 | } else { | ||
3124 | off = ptr_reg->smin_value + ptr_reg->off; | ||
3125 | - *ptr_limit = ptr_reg->map_ptr->value_size - off; | ||
3126 | + *ptr_limit = ptr_reg->map_ptr->value_size - off - 1; | ||
3127 | } | ||
3128 | - return 0; | ||
3129 | + return *ptr_limit >= max ? -ERANGE : 0; | ||
3130 | default: | ||
3131 | return -EINVAL; | ||
3132 | } | ||
3133 | @@ -4341,6 +4346,7 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env, | ||
3134 | u32 alu_state, alu_limit; | ||
3135 | struct bpf_reg_state tmp; | ||
3136 | bool ret; | ||
3137 | + int err; | ||
3138 | |||
3139 | if (can_skip_alu_sanitation(env, insn)) | ||
3140 | return 0; | ||
3141 | @@ -4356,10 +4362,13 @@ static int sanitize_ptr_alu(struct bpf_verifier_env *env, | ||
3142 | alu_state |= ptr_is_dst_reg ? | ||
3143 | BPF_ALU_SANITIZE_SRC : BPF_ALU_SANITIZE_DST; | ||
3144 | |||
3145 | - if (retrieve_ptr_limit(ptr_reg, &alu_limit, opcode, off_is_neg)) | ||
3146 | - return 0; | ||
3147 | - if (update_alu_sanitation_state(aux, alu_state, alu_limit)) | ||
3148 | - return -EACCES; | ||
3149 | + err = retrieve_ptr_limit(ptr_reg, &alu_limit, opcode, off_is_neg); | ||
3150 | + if (err < 0) | ||
3151 | + return err; | ||
3152 | + | ||
3153 | + err = update_alu_sanitation_state(aux, alu_state, alu_limit); | ||
3154 | + if (err < 0) | ||
3155 | + return err; | ||
3156 | do_sim: | ||
3157 | /* Simulate and find potential out-of-bounds access under | ||
3158 | * speculative execution from truncation as a result of | ||
3159 | @@ -4467,7 +4476,7 @@ static int adjust_ptr_min_max_vals(struct bpf_verifier_env *env, | ||
3160 | case BPF_ADD: | ||
3161 | ret = sanitize_ptr_alu(env, insn, ptr_reg, dst_reg, smin_val < 0); | ||
3162 | if (ret < 0) { | ||
3163 | - verbose(env, "R%d tried to add from different maps or paths\n", dst); | ||
3164 | + verbose(env, "R%d tried to add from different maps, paths, or prohibited types\n", dst); | ||
3165 | return ret; | ||
3166 | } | ||
3167 | /* We can take a fixed offset as long as it doesn't overflow | ||
3168 | @@ -4522,7 +4531,7 @@ static int adjust_ptr_min_max_vals(struct bpf_verifier_env *env, | ||
3169 | case BPF_SUB: | ||
3170 | ret = sanitize_ptr_alu(env, insn, ptr_reg, dst_reg, smin_val < 0); | ||
3171 | if (ret < 0) { | ||
3172 | - verbose(env, "R%d tried to sub from different maps or paths\n", dst); | ||
3173 | + verbose(env, "R%d tried to sub from different maps, paths, or prohibited types\n", dst); | ||
3174 | return ret; | ||
3175 | } | ||
3176 | if (dst_reg == off_reg) { | ||
3177 | @@ -9077,7 +9086,7 @@ static int fixup_bpf_calls(struct bpf_verifier_env *env) | ||
3178 | off_reg = issrc ? insn->src_reg : insn->dst_reg; | ||
3179 | if (isneg) | ||
3180 | *patch++ = BPF_ALU64_IMM(BPF_MUL, off_reg, -1); | ||
3181 | - *patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit - 1); | ||
3182 | + *patch++ = BPF_MOV32_IMM(BPF_REG_AX, aux->alu_limit); | ||
3183 | *patch++ = BPF_ALU64_REG(BPF_SUB, BPF_REG_AX, off_reg); | ||
3184 | *patch++ = BPF_ALU64_REG(BPF_OR, BPF_REG_AX, off_reg); | ||
3185 | *patch++ = BPF_ALU64_IMM(BPF_NEG, BPF_REG_AX, 0); | ||
3186 | diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c | ||
3187 | index d6619edd53e5a..edc505e07125b 100644 | ||
3188 | --- a/net/dsa/tag_mtk.c | ||
3189 | +++ b/net/dsa/tag_mtk.c | ||
3190 | @@ -13,6 +13,7 @@ | ||
3191 | #define MTK_HDR_LEN 4 | ||
3192 | #define MTK_HDR_XMIT_UNTAGGED 0 | ||
3193 | #define MTK_HDR_XMIT_TAGGED_TPID_8100 1 | ||
3194 | +#define MTK_HDR_XMIT_TAGGED_TPID_88A8 2 | ||
3195 | #define MTK_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0) | ||
3196 | #define MTK_HDR_XMIT_DP_BIT_MASK GENMASK(5, 0) | ||
3197 | #define MTK_HDR_XMIT_SA_DIS BIT(6) | ||
3198 | @@ -21,8 +22,8 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, | ||
3199 | struct net_device *dev) | ||
3200 | { | ||
3201 | struct dsa_port *dp = dsa_slave_to_port(dev); | ||
3202 | + u8 xmit_tpid; | ||
3203 | u8 *mtk_tag; | ||
3204 | - bool is_vlan_skb = true; | ||
3205 | unsigned char *dest = eth_hdr(skb)->h_dest; | ||
3206 | bool is_multicast_skb = is_multicast_ether_addr(dest) && | ||
3207 | !is_broadcast_ether_addr(dest); | ||
3208 | @@ -33,13 +34,20 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, | ||
3209 | * the both special and VLAN tag at the same time and then look up VLAN | ||
3210 | * table with VID. | ||
3211 | */ | ||
3212 | - if (!skb_vlan_tagged(skb)) { | ||
3213 | + switch (skb->protocol) { | ||
3214 | + case htons(ETH_P_8021Q): | ||
3215 | + xmit_tpid = MTK_HDR_XMIT_TAGGED_TPID_8100; | ||
3216 | + break; | ||
3217 | + case htons(ETH_P_8021AD): | ||
3218 | + xmit_tpid = MTK_HDR_XMIT_TAGGED_TPID_88A8; | ||
3219 | + break; | ||
3220 | + default: | ||
3221 | if (skb_cow_head(skb, MTK_HDR_LEN) < 0) | ||
3222 | return NULL; | ||
3223 | |||
3224 | + xmit_tpid = MTK_HDR_XMIT_UNTAGGED; | ||
3225 | skb_push(skb, MTK_HDR_LEN); | ||
3226 | memmove(skb->data, skb->data + MTK_HDR_LEN, 2 * ETH_ALEN); | ||
3227 | - is_vlan_skb = false; | ||
3228 | } | ||
3229 | |||
3230 | mtk_tag = skb->data + 2 * ETH_ALEN; | ||
3231 | @@ -47,8 +55,7 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, | ||
3232 | /* Mark tag attribute on special tag insertion to notify hardware | ||
3233 | * whether that's a combined special tag with 802.1Q header. | ||
3234 | */ | ||
3235 | - mtk_tag[0] = is_vlan_skb ? MTK_HDR_XMIT_TAGGED_TPID_8100 : | ||
3236 | - MTK_HDR_XMIT_UNTAGGED; | ||
3237 | + mtk_tag[0] = xmit_tpid; | ||
3238 | mtk_tag[1] = (1 << dp->index) & MTK_HDR_XMIT_DP_BIT_MASK; | ||
3239 | |||
3240 | /* Disable SA learning for multicast frames */ | ||
3241 | @@ -56,7 +63,7 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, | ||
3242 | mtk_tag[1] |= MTK_HDR_XMIT_SA_DIS; | ||
3243 | |||
3244 | /* Tag control information is kept for 802.1Q */ | ||
3245 | - if (!is_vlan_skb) { | ||
3246 | + if (xmit_tpid == MTK_HDR_XMIT_UNTAGGED) { | ||
3247 | mtk_tag[2] = 0; | ||
3248 | mtk_tag[3] = 0; | ||
3249 | } | ||
3250 | diff --git a/tools/testing/selftests/bpf/verifier/bounds_deduction.c b/tools/testing/selftests/bpf/verifier/bounds_deduction.c | ||
3251 | index 1fd07a4f27ac2..c162498a64fc6 100644 | ||
3252 | --- a/tools/testing/selftests/bpf/verifier/bounds_deduction.c | ||
3253 | +++ b/tools/testing/selftests/bpf/verifier/bounds_deduction.c | ||
3254 | @@ -6,8 +6,9 @@ | ||
3255 | BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3256 | BPF_EXIT_INSN(), | ||
3257 | }, | ||
3258 | - .result = REJECT, | ||
3259 | + .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types", | ||
3260 | .errstr = "R0 tried to subtract pointer from scalar", | ||
3261 | + .result = REJECT, | ||
3262 | }, | ||
3263 | { | ||
3264 | "check deducing bounds from const, 2", | ||
3265 | @@ -20,6 +21,8 @@ | ||
3266 | BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0), | ||
3267 | BPF_EXIT_INSN(), | ||
3268 | }, | ||
3269 | + .errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types", | ||
3270 | + .result_unpriv = REJECT, | ||
3271 | .result = ACCEPT, | ||
3272 | .retval = 1, | ||
3273 | }, | ||
3274 | @@ -31,8 +34,9 @@ | ||
3275 | BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3276 | BPF_EXIT_INSN(), | ||
3277 | }, | ||
3278 | - .result = REJECT, | ||
3279 | + .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types", | ||
3280 | .errstr = "R0 tried to subtract pointer from scalar", | ||
3281 | + .result = REJECT, | ||
3282 | }, | ||
3283 | { | ||
3284 | "check deducing bounds from const, 4", | ||
3285 | @@ -45,6 +49,8 @@ | ||
3286 | BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0), | ||
3287 | BPF_EXIT_INSN(), | ||
3288 | }, | ||
3289 | + .errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types", | ||
3290 | + .result_unpriv = REJECT, | ||
3291 | .result = ACCEPT, | ||
3292 | }, | ||
3293 | { | ||
3294 | @@ -55,8 +61,9 @@ | ||
3295 | BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3296 | BPF_EXIT_INSN(), | ||
3297 | }, | ||
3298 | - .result = REJECT, | ||
3299 | + .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types", | ||
3300 | .errstr = "R0 tried to subtract pointer from scalar", | ||
3301 | + .result = REJECT, | ||
3302 | }, | ||
3303 | { | ||
3304 | "check deducing bounds from const, 6", | ||
3305 | @@ -67,8 +74,9 @@ | ||
3306 | BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3307 | BPF_EXIT_INSN(), | ||
3308 | }, | ||
3309 | - .result = REJECT, | ||
3310 | + .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types", | ||
3311 | .errstr = "R0 tried to subtract pointer from scalar", | ||
3312 | + .result = REJECT, | ||
3313 | }, | ||
3314 | { | ||
3315 | "check deducing bounds from const, 7", | ||
3316 | @@ -80,8 +88,9 @@ | ||
3317 | offsetof(struct __sk_buff, mark)), | ||
3318 | BPF_EXIT_INSN(), | ||
3319 | }, | ||
3320 | - .result = REJECT, | ||
3321 | + .errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types", | ||
3322 | .errstr = "dereference of modified ctx ptr", | ||
3323 | + .result = REJECT, | ||
3324 | .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, | ||
3325 | }, | ||
3326 | { | ||
3327 | @@ -94,8 +103,9 @@ | ||
3328 | offsetof(struct __sk_buff, mark)), | ||
3329 | BPF_EXIT_INSN(), | ||
3330 | }, | ||
3331 | - .result = REJECT, | ||
3332 | + .errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types", | ||
3333 | .errstr = "dereference of modified ctx ptr", | ||
3334 | + .result = REJECT, | ||
3335 | .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS, | ||
3336 | }, | ||
3337 | { | ||
3338 | @@ -106,8 +116,9 @@ | ||
3339 | BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3340 | BPF_EXIT_INSN(), | ||
3341 | }, | ||
3342 | - .result = REJECT, | ||
3343 | + .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types", | ||
3344 | .errstr = "R0 tried to subtract pointer from scalar", | ||
3345 | + .result = REJECT, | ||
3346 | }, | ||
3347 | { | ||
3348 | "check deducing bounds from const, 10", | ||
3349 | @@ -119,6 +130,6 @@ | ||
3350 | BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3351 | BPF_EXIT_INSN(), | ||
3352 | }, | ||
3353 | - .result = REJECT, | ||
3354 | .errstr = "math between ctx pointer and register with unbounded min value is not allowed", | ||
3355 | + .result = REJECT, | ||
3356 | }, | ||
3357 | diff --git a/tools/testing/selftests/bpf/verifier/unpriv.c b/tools/testing/selftests/bpf/verifier/unpriv.c | ||
3358 | index 91bb77c24a2ef..0d621c841db14 100644 | ||
3359 | --- a/tools/testing/selftests/bpf/verifier/unpriv.c | ||
3360 | +++ b/tools/testing/selftests/bpf/verifier/unpriv.c | ||
3361 | @@ -495,7 +495,7 @@ | ||
3362 | .result = ACCEPT, | ||
3363 | }, | ||
3364 | { | ||
3365 | - "unpriv: adding of fp", | ||
3366 | + "unpriv: adding of fp, reg", | ||
3367 | .insns = { | ||
3368 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
3369 | BPF_MOV64_IMM(BPF_REG_1, 0), | ||
3370 | @@ -503,6 +503,19 @@ | ||
3371 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, -8), | ||
3372 | BPF_EXIT_INSN(), | ||
3373 | }, | ||
3374 | + .errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types", | ||
3375 | + .result_unpriv = REJECT, | ||
3376 | + .result = ACCEPT, | ||
3377 | +}, | ||
3378 | +{ | ||
3379 | + "unpriv: adding of fp, imm", | ||
3380 | + .insns = { | ||
3381 | + BPF_MOV64_IMM(BPF_REG_0, 0), | ||
3382 | + BPF_MOV64_REG(BPF_REG_1, BPF_REG_10), | ||
3383 | + BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 0), | ||
3384 | + BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, -8), | ||
3385 | + BPF_EXIT_INSN(), | ||
3386 | + }, | ||
3387 | .errstr_unpriv = "R1 stack pointer arithmetic goes out of range", | ||
3388 | .result_unpriv = REJECT, | ||
3389 | .result = ACCEPT, | ||
3390 | diff --git a/tools/testing/selftests/bpf/verifier/value_ptr_arith.c b/tools/testing/selftests/bpf/verifier/value_ptr_arith.c | ||
3391 | index a53d99cebd9ff..00b59d5d7a7f0 100644 | ||
3392 | --- a/tools/testing/selftests/bpf/verifier/value_ptr_arith.c | ||
3393 | +++ b/tools/testing/selftests/bpf/verifier/value_ptr_arith.c | ||
3394 | @@ -169,7 +169,7 @@ | ||
3395 | .fixup_map_array_48b = { 1 }, | ||
3396 | .result = ACCEPT, | ||
3397 | .result_unpriv = REJECT, | ||
3398 | - .errstr_unpriv = "R2 tried to add from different maps or paths", | ||
3399 | + .errstr_unpriv = "R2 tried to add from different maps, paths, or prohibited types", | ||
3400 | .retval = 0, | ||
3401 | }, | ||
3402 | { | ||
3403 | @@ -516,6 +516,27 @@ | ||
3404 | .result = ACCEPT, | ||
3405 | .retval = 0xabcdef12, | ||
3406 | }, | ||
3407 | +{ | ||
3408 | + "map access: value_ptr += N, value_ptr -= N known scalar", | ||
3409 | + .insns = { | ||
3410 | + BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), | ||
3411 | + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | ||
3412 | + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | ||
3413 | + BPF_LD_MAP_FD(BPF_REG_1, 0), | ||
3414 | + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), | ||
3415 | + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 6), | ||
3416 | + BPF_MOV32_IMM(BPF_REG_1, 0x12345678), | ||
3417 | + BPF_STX_MEM(BPF_W, BPF_REG_0, BPF_REG_1, 0), | ||
3418 | + BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 2), | ||
3419 | + BPF_MOV64_IMM(BPF_REG_1, 2), | ||
3420 | + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1), | ||
3421 | + BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, 0), | ||
3422 | + BPF_EXIT_INSN(), | ||
3423 | + }, | ||
3424 | + .fixup_map_array_48b = { 3 }, | ||
3425 | + .result = ACCEPT, | ||
3426 | + .retval = 0x12345678, | ||
3427 | +}, | ||
3428 | { | ||
3429 | "map access: unknown scalar += value_ptr, 1", | ||
3430 | .insns = { |