Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0206-5.4.107-all-fixes.patch

Parent Directory Parent Directory | Revision Log 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)
-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, &reg);
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 = {