Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0285-4.9.186-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3373 - (hide annotations) (download)
Thu Jul 25 14:48:18 2019 UTC (4 years, 9 months ago) by niro
File size: 166396 byte(s)
-linux-4.9.186
1 niro 3373 diff --git a/Documentation/devicetree/bindings/net/can/microchip,mcp251x.txt b/Documentation/devicetree/bindings/net/can/microchip,mcp251x.txt
2     index ee3723beb701..33b38716b77f 100644
3     --- a/Documentation/devicetree/bindings/net/can/microchip,mcp251x.txt
4     +++ b/Documentation/devicetree/bindings/net/can/microchip,mcp251x.txt
5     @@ -4,6 +4,7 @@ Required properties:
6     - compatible: Should be one of the following:
7     - "microchip,mcp2510" for MCP2510.
8     - "microchip,mcp2515" for MCP2515.
9     + - "microchip,mcp25625" for MCP25625.
10     - reg: SPI chip select.
11     - clocks: The clock feeding the CAN controller.
12     - interrupt-parent: The parent interrupt controller.
13     diff --git a/Makefile b/Makefile
14     index c80dad45334e..1ab22a85118f 100644
15     --- a/Makefile
16     +++ b/Makefile
17     @@ -1,6 +1,6 @@
18     VERSION = 4
19     PATCHLEVEL = 9
20     -SUBLEVEL = 185
21     +SUBLEVEL = 186
22     EXTRAVERSION =
23     NAME = Roaring Lionus
24    
25     diff --git a/arch/arc/kernel/unwind.c b/arch/arc/kernel/unwind.c
26     index 61fd1ce63c56..6bb9f8ea9291 100644
27     --- a/arch/arc/kernel/unwind.c
28     +++ b/arch/arc/kernel/unwind.c
29     @@ -185,11 +185,6 @@ static void *__init unw_hdr_alloc_early(unsigned long sz)
30     MAX_DMA_ADDRESS);
31     }
32    
33     -static void *unw_hdr_alloc(unsigned long sz)
34     -{
35     - return kmalloc(sz, GFP_KERNEL);
36     -}
37     -
38     static void init_unwind_table(struct unwind_table *table, const char *name,
39     const void *core_start, unsigned long core_size,
40     const void *init_start, unsigned long init_size,
41     @@ -370,6 +365,10 @@ ret_err:
42     }
43    
44     #ifdef CONFIG_MODULES
45     +static void *unw_hdr_alloc(unsigned long sz)
46     +{
47     + return kmalloc(sz, GFP_KERNEL);
48     +}
49    
50     static struct unwind_table *last_table;
51    
52     diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi
53     index 7839300fe46b..200d9082caa4 100644
54     --- a/arch/arm/boot/dts/imx6ul.dtsi
55     +++ b/arch/arm/boot/dts/imx6ul.dtsi
56     @@ -332,7 +332,7 @@
57     pwm1: pwm@02080000 {
58     compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
59     reg = <0x02080000 0x4000>;
60     - interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
61     + interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
62     clocks = <&clks IMX6UL_CLK_PWM1>,
63     <&clks IMX6UL_CLK_PWM1>;
64     clock-names = "ipg", "per";
65     @@ -343,7 +343,7 @@
66     pwm2: pwm@02084000 {
67     compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
68     reg = <0x02084000 0x4000>;
69     - interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
70     + interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
71     clocks = <&clks IMX6UL_CLK_PWM2>,
72     <&clks IMX6UL_CLK_PWM2>;
73     clock-names = "ipg", "per";
74     @@ -354,7 +354,7 @@
75     pwm3: pwm@02088000 {
76     compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
77     reg = <0x02088000 0x4000>;
78     - interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
79     + interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
80     clocks = <&clks IMX6UL_CLK_PWM3>,
81     <&clks IMX6UL_CLK_PWM3>;
82     clock-names = "ipg", "per";
83     @@ -365,7 +365,7 @@
84     pwm4: pwm@0208c000 {
85     compatible = "fsl,imx6ul-pwm", "fsl,imx27-pwm";
86     reg = <0x0208c000 0x4000>;
87     - interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
88     + interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
89     clocks = <&clks IMX6UL_CLK_PWM4>,
90     <&clks IMX6UL_CLK_PWM4>;
91     clock-names = "ipg", "per";
92     diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
93     index 8e4539f69fdc..3bdf0d588238 100644
94     --- a/arch/arm/mach-davinci/board-da850-evm.c
95     +++ b/arch/arm/mach-davinci/board-da850-evm.c
96     @@ -1479,6 +1479,8 @@ static __init void da850_evm_init(void)
97     if (ret)
98     pr_warn("%s: dsp/rproc registration failed: %d\n",
99     __func__, ret);
100     +
101     + regulator_has_full_constraints();
102     }
103    
104     #ifdef CONFIG_SERIAL_8250_CONSOLE
105     diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
106     index 9a22d40602aa..24779504f489 100644
107     --- a/arch/arm/mach-davinci/devices-da8xx.c
108     +++ b/arch/arm/mach-davinci/devices-da8xx.c
109     @@ -706,6 +706,9 @@ static struct platform_device da8xx_lcdc_device = {
110     .id = 0,
111     .num_resources = ARRAY_SIZE(da8xx_lcdc_resources),
112     .resource = da8xx_lcdc_resources,
113     + .dev = {
114     + .coherent_dma_mask = DMA_BIT_MASK(32),
115     + }
116     };
117    
118     int __init da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata)
119     diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c
120     index 718981bb80cd..0aec48c1736b 100644
121     --- a/arch/arm/mach-omap2/prm3xxx.c
122     +++ b/arch/arm/mach-omap2/prm3xxx.c
123     @@ -433,7 +433,7 @@ static void omap3_prm_reconfigure_io_chain(void)
124     * registers, and omap3xxx_prm_reconfigure_io_chain() must be called.
125     * No return value.
126     */
127     -static void __init omap3xxx_prm_enable_io_wakeup(void)
128     +static void omap3xxx_prm_enable_io_wakeup(void)
129     {
130     if (prm_features & PRM_HAS_IO_WAKEUP)
131     omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD,
132     diff --git a/arch/arm64/crypto/sha256-core.S b/arch/arm64/crypto/sha256-core.S
133     deleted file mode 100644
134     index 3ce82cc860bc..000000000000
135     --- a/arch/arm64/crypto/sha256-core.S
136     +++ /dev/null
137     @@ -1,2061 +0,0 @@
138     -// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
139     -//
140     -// Licensed under the OpenSSL license (the "License"). You may not use
141     -// this file except in compliance with the License. You can obtain a copy
142     -// in the file LICENSE in the source distribution or at
143     -// https://www.openssl.org/source/license.html
144     -
145     -// ====================================================================
146     -// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
147     -// project. The module is, however, dual licensed under OpenSSL and
148     -// CRYPTOGAMS licenses depending on where you obtain it. For further
149     -// details see http://www.openssl.org/~appro/cryptogams/.
150     -//
151     -// Permission to use under GPLv2 terms is granted.
152     -// ====================================================================
153     -//
154     -// SHA256/512 for ARMv8.
155     -//
156     -// Performance in cycles per processed byte and improvement coefficient
157     -// over code generated with "default" compiler:
158     -//
159     -// SHA256-hw SHA256(*) SHA512
160     -// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**))
161     -// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***))
162     -// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***))
163     -// Denver 2.01 10.5 (+26%) 6.70 (+8%)
164     -// X-Gene 20.0 (+100%) 12.8 (+300%(***))
165     -// Mongoose 2.36 13.0 (+50%) 8.36 (+33%)
166     -//
167     -// (*) Software SHA256 results are of lesser relevance, presented
168     -// mostly for informational purposes.
169     -// (**) The result is a trade-off: it's possible to improve it by
170     -// 10% (or by 1 cycle per round), but at the cost of 20% loss
171     -// on Cortex-A53 (or by 4 cycles per round).
172     -// (***) Super-impressive coefficients over gcc-generated code are
173     -// indication of some compiler "pathology", most notably code
174     -// generated with -mgeneral-regs-only is significanty faster
175     -// and the gap is only 40-90%.
176     -//
177     -// October 2016.
178     -//
179     -// Originally it was reckoned that it makes no sense to implement NEON
180     -// version of SHA256 for 64-bit processors. This is because performance
181     -// improvement on most wide-spread Cortex-A5x processors was observed
182     -// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was
183     -// observed that 32-bit NEON SHA256 performs significantly better than
184     -// 64-bit scalar version on *some* of the more recent processors. As
185     -// result 64-bit NEON version of SHA256 was added to provide best
186     -// all-round performance. For example it executes ~30% faster on X-Gene
187     -// and Mongoose. [For reference, NEON version of SHA512 is bound to
188     -// deliver much less improvement, likely *negative* on Cortex-A5x.
189     -// Which is why NEON support is limited to SHA256.]
190     -
191     -#ifndef __KERNEL__
192     -# include "arm_arch.h"
193     -#endif
194     -
195     -.text
196     -
197     -.extern OPENSSL_armcap_P
198     -.globl sha256_block_data_order
199     -.type sha256_block_data_order,%function
200     -.align 6
201     -sha256_block_data_order:
202     -#ifndef __KERNEL__
203     -# ifdef __ILP32__
204     - ldrsw x16,.LOPENSSL_armcap_P
205     -# else
206     - ldr x16,.LOPENSSL_armcap_P
207     -# endif
208     - adr x17,.LOPENSSL_armcap_P
209     - add x16,x16,x17
210     - ldr w16,[x16]
211     - tst w16,#ARMV8_SHA256
212     - b.ne .Lv8_entry
213     - tst w16,#ARMV7_NEON
214     - b.ne .Lneon_entry
215     -#endif
216     - stp x29,x30,[sp,#-128]!
217     - add x29,sp,#0
218     -
219     - stp x19,x20,[sp,#16]
220     - stp x21,x22,[sp,#32]
221     - stp x23,x24,[sp,#48]
222     - stp x25,x26,[sp,#64]
223     - stp x27,x28,[sp,#80]
224     - sub sp,sp,#4*4
225     -
226     - ldp w20,w21,[x0] // load context
227     - ldp w22,w23,[x0,#2*4]
228     - ldp w24,w25,[x0,#4*4]
229     - add x2,x1,x2,lsl#6 // end of input
230     - ldp w26,w27,[x0,#6*4]
231     - adr x30,.LK256
232     - stp x0,x2,[x29,#96]
233     -
234     -.Loop:
235     - ldp w3,w4,[x1],#2*4
236     - ldr w19,[x30],#4 // *K++
237     - eor w28,w21,w22 // magic seed
238     - str x1,[x29,#112]
239     -#ifndef __AARCH64EB__
240     - rev w3,w3 // 0
241     -#endif
242     - ror w16,w24,#6
243     - add w27,w27,w19 // h+=K[i]
244     - eor w6,w24,w24,ror#14
245     - and w17,w25,w24
246     - bic w19,w26,w24
247     - add w27,w27,w3 // h+=X[i]
248     - orr w17,w17,w19 // Ch(e,f,g)
249     - eor w19,w20,w21 // a^b, b^c in next round
250     - eor w16,w16,w6,ror#11 // Sigma1(e)
251     - ror w6,w20,#2
252     - add w27,w27,w17 // h+=Ch(e,f,g)
253     - eor w17,w20,w20,ror#9
254     - add w27,w27,w16 // h+=Sigma1(e)
255     - and w28,w28,w19 // (b^c)&=(a^b)
256     - add w23,w23,w27 // d+=h
257     - eor w28,w28,w21 // Maj(a,b,c)
258     - eor w17,w6,w17,ror#13 // Sigma0(a)
259     - add w27,w27,w28 // h+=Maj(a,b,c)
260     - ldr w28,[x30],#4 // *K++, w19 in next round
261     - //add w27,w27,w17 // h+=Sigma0(a)
262     -#ifndef __AARCH64EB__
263     - rev w4,w4 // 1
264     -#endif
265     - ldp w5,w6,[x1],#2*4
266     - add w27,w27,w17 // h+=Sigma0(a)
267     - ror w16,w23,#6
268     - add w26,w26,w28 // h+=K[i]
269     - eor w7,w23,w23,ror#14
270     - and w17,w24,w23
271     - bic w28,w25,w23
272     - add w26,w26,w4 // h+=X[i]
273     - orr w17,w17,w28 // Ch(e,f,g)
274     - eor w28,w27,w20 // a^b, b^c in next round
275     - eor w16,w16,w7,ror#11 // Sigma1(e)
276     - ror w7,w27,#2
277     - add w26,w26,w17 // h+=Ch(e,f,g)
278     - eor w17,w27,w27,ror#9
279     - add w26,w26,w16 // h+=Sigma1(e)
280     - and w19,w19,w28 // (b^c)&=(a^b)
281     - add w22,w22,w26 // d+=h
282     - eor w19,w19,w20 // Maj(a,b,c)
283     - eor w17,w7,w17,ror#13 // Sigma0(a)
284     - add w26,w26,w19 // h+=Maj(a,b,c)
285     - ldr w19,[x30],#4 // *K++, w28 in next round
286     - //add w26,w26,w17 // h+=Sigma0(a)
287     -#ifndef __AARCH64EB__
288     - rev w5,w5 // 2
289     -#endif
290     - add w26,w26,w17 // h+=Sigma0(a)
291     - ror w16,w22,#6
292     - add w25,w25,w19 // h+=K[i]
293     - eor w8,w22,w22,ror#14
294     - and w17,w23,w22
295     - bic w19,w24,w22
296     - add w25,w25,w5 // h+=X[i]
297     - orr w17,w17,w19 // Ch(e,f,g)
298     - eor w19,w26,w27 // a^b, b^c in next round
299     - eor w16,w16,w8,ror#11 // Sigma1(e)
300     - ror w8,w26,#2
301     - add w25,w25,w17 // h+=Ch(e,f,g)
302     - eor w17,w26,w26,ror#9
303     - add w25,w25,w16 // h+=Sigma1(e)
304     - and w28,w28,w19 // (b^c)&=(a^b)
305     - add w21,w21,w25 // d+=h
306     - eor w28,w28,w27 // Maj(a,b,c)
307     - eor w17,w8,w17,ror#13 // Sigma0(a)
308     - add w25,w25,w28 // h+=Maj(a,b,c)
309     - ldr w28,[x30],#4 // *K++, w19 in next round
310     - //add w25,w25,w17 // h+=Sigma0(a)
311     -#ifndef __AARCH64EB__
312     - rev w6,w6 // 3
313     -#endif
314     - ldp w7,w8,[x1],#2*4
315     - add w25,w25,w17 // h+=Sigma0(a)
316     - ror w16,w21,#6
317     - add w24,w24,w28 // h+=K[i]
318     - eor w9,w21,w21,ror#14
319     - and w17,w22,w21
320     - bic w28,w23,w21
321     - add w24,w24,w6 // h+=X[i]
322     - orr w17,w17,w28 // Ch(e,f,g)
323     - eor w28,w25,w26 // a^b, b^c in next round
324     - eor w16,w16,w9,ror#11 // Sigma1(e)
325     - ror w9,w25,#2
326     - add w24,w24,w17 // h+=Ch(e,f,g)
327     - eor w17,w25,w25,ror#9
328     - add w24,w24,w16 // h+=Sigma1(e)
329     - and w19,w19,w28 // (b^c)&=(a^b)
330     - add w20,w20,w24 // d+=h
331     - eor w19,w19,w26 // Maj(a,b,c)
332     - eor w17,w9,w17,ror#13 // Sigma0(a)
333     - add w24,w24,w19 // h+=Maj(a,b,c)
334     - ldr w19,[x30],#4 // *K++, w28 in next round
335     - //add w24,w24,w17 // h+=Sigma0(a)
336     -#ifndef __AARCH64EB__
337     - rev w7,w7 // 4
338     -#endif
339     - add w24,w24,w17 // h+=Sigma0(a)
340     - ror w16,w20,#6
341     - add w23,w23,w19 // h+=K[i]
342     - eor w10,w20,w20,ror#14
343     - and w17,w21,w20
344     - bic w19,w22,w20
345     - add w23,w23,w7 // h+=X[i]
346     - orr w17,w17,w19 // Ch(e,f,g)
347     - eor w19,w24,w25 // a^b, b^c in next round
348     - eor w16,w16,w10,ror#11 // Sigma1(e)
349     - ror w10,w24,#2
350     - add w23,w23,w17 // h+=Ch(e,f,g)
351     - eor w17,w24,w24,ror#9
352     - add w23,w23,w16 // h+=Sigma1(e)
353     - and w28,w28,w19 // (b^c)&=(a^b)
354     - add w27,w27,w23 // d+=h
355     - eor w28,w28,w25 // Maj(a,b,c)
356     - eor w17,w10,w17,ror#13 // Sigma0(a)
357     - add w23,w23,w28 // h+=Maj(a,b,c)
358     - ldr w28,[x30],#4 // *K++, w19 in next round
359     - //add w23,w23,w17 // h+=Sigma0(a)
360     -#ifndef __AARCH64EB__
361     - rev w8,w8 // 5
362     -#endif
363     - ldp w9,w10,[x1],#2*4
364     - add w23,w23,w17 // h+=Sigma0(a)
365     - ror w16,w27,#6
366     - add w22,w22,w28 // h+=K[i]
367     - eor w11,w27,w27,ror#14
368     - and w17,w20,w27
369     - bic w28,w21,w27
370     - add w22,w22,w8 // h+=X[i]
371     - orr w17,w17,w28 // Ch(e,f,g)
372     - eor w28,w23,w24 // a^b, b^c in next round
373     - eor w16,w16,w11,ror#11 // Sigma1(e)
374     - ror w11,w23,#2
375     - add w22,w22,w17 // h+=Ch(e,f,g)
376     - eor w17,w23,w23,ror#9
377     - add w22,w22,w16 // h+=Sigma1(e)
378     - and w19,w19,w28 // (b^c)&=(a^b)
379     - add w26,w26,w22 // d+=h
380     - eor w19,w19,w24 // Maj(a,b,c)
381     - eor w17,w11,w17,ror#13 // Sigma0(a)
382     - add w22,w22,w19 // h+=Maj(a,b,c)
383     - ldr w19,[x30],#4 // *K++, w28 in next round
384     - //add w22,w22,w17 // h+=Sigma0(a)
385     -#ifndef __AARCH64EB__
386     - rev w9,w9 // 6
387     -#endif
388     - add w22,w22,w17 // h+=Sigma0(a)
389     - ror w16,w26,#6
390     - add w21,w21,w19 // h+=K[i]
391     - eor w12,w26,w26,ror#14
392     - and w17,w27,w26
393     - bic w19,w20,w26
394     - add w21,w21,w9 // h+=X[i]
395     - orr w17,w17,w19 // Ch(e,f,g)
396     - eor w19,w22,w23 // a^b, b^c in next round
397     - eor w16,w16,w12,ror#11 // Sigma1(e)
398     - ror w12,w22,#2
399     - add w21,w21,w17 // h+=Ch(e,f,g)
400     - eor w17,w22,w22,ror#9
401     - add w21,w21,w16 // h+=Sigma1(e)
402     - and w28,w28,w19 // (b^c)&=(a^b)
403     - add w25,w25,w21 // d+=h
404     - eor w28,w28,w23 // Maj(a,b,c)
405     - eor w17,w12,w17,ror#13 // Sigma0(a)
406     - add w21,w21,w28 // h+=Maj(a,b,c)
407     - ldr w28,[x30],#4 // *K++, w19 in next round
408     - //add w21,w21,w17 // h+=Sigma0(a)
409     -#ifndef __AARCH64EB__
410     - rev w10,w10 // 7
411     -#endif
412     - ldp w11,w12,[x1],#2*4
413     - add w21,w21,w17 // h+=Sigma0(a)
414     - ror w16,w25,#6
415     - add w20,w20,w28 // h+=K[i]
416     - eor w13,w25,w25,ror#14
417     - and w17,w26,w25
418     - bic w28,w27,w25
419     - add w20,w20,w10 // h+=X[i]
420     - orr w17,w17,w28 // Ch(e,f,g)
421     - eor w28,w21,w22 // a^b, b^c in next round
422     - eor w16,w16,w13,ror#11 // Sigma1(e)
423     - ror w13,w21,#2
424     - add w20,w20,w17 // h+=Ch(e,f,g)
425     - eor w17,w21,w21,ror#9
426     - add w20,w20,w16 // h+=Sigma1(e)
427     - and w19,w19,w28 // (b^c)&=(a^b)
428     - add w24,w24,w20 // d+=h
429     - eor w19,w19,w22 // Maj(a,b,c)
430     - eor w17,w13,w17,ror#13 // Sigma0(a)
431     - add w20,w20,w19 // h+=Maj(a,b,c)
432     - ldr w19,[x30],#4 // *K++, w28 in next round
433     - //add w20,w20,w17 // h+=Sigma0(a)
434     -#ifndef __AARCH64EB__
435     - rev w11,w11 // 8
436     -#endif
437     - add w20,w20,w17 // h+=Sigma0(a)
438     - ror w16,w24,#6
439     - add w27,w27,w19 // h+=K[i]
440     - eor w14,w24,w24,ror#14
441     - and w17,w25,w24
442     - bic w19,w26,w24
443     - add w27,w27,w11 // h+=X[i]
444     - orr w17,w17,w19 // Ch(e,f,g)
445     - eor w19,w20,w21 // a^b, b^c in next round
446     - eor w16,w16,w14,ror#11 // Sigma1(e)
447     - ror w14,w20,#2
448     - add w27,w27,w17 // h+=Ch(e,f,g)
449     - eor w17,w20,w20,ror#9
450     - add w27,w27,w16 // h+=Sigma1(e)
451     - and w28,w28,w19 // (b^c)&=(a^b)
452     - add w23,w23,w27 // d+=h
453     - eor w28,w28,w21 // Maj(a,b,c)
454     - eor w17,w14,w17,ror#13 // Sigma0(a)
455     - add w27,w27,w28 // h+=Maj(a,b,c)
456     - ldr w28,[x30],#4 // *K++, w19 in next round
457     - //add w27,w27,w17 // h+=Sigma0(a)
458     -#ifndef __AARCH64EB__
459     - rev w12,w12 // 9
460     -#endif
461     - ldp w13,w14,[x1],#2*4
462     - add w27,w27,w17 // h+=Sigma0(a)
463     - ror w16,w23,#6
464     - add w26,w26,w28 // h+=K[i]
465     - eor w15,w23,w23,ror#14
466     - and w17,w24,w23
467     - bic w28,w25,w23
468     - add w26,w26,w12 // h+=X[i]
469     - orr w17,w17,w28 // Ch(e,f,g)
470     - eor w28,w27,w20 // a^b, b^c in next round
471     - eor w16,w16,w15,ror#11 // Sigma1(e)
472     - ror w15,w27,#2
473     - add w26,w26,w17 // h+=Ch(e,f,g)
474     - eor w17,w27,w27,ror#9
475     - add w26,w26,w16 // h+=Sigma1(e)
476     - and w19,w19,w28 // (b^c)&=(a^b)
477     - add w22,w22,w26 // d+=h
478     - eor w19,w19,w20 // Maj(a,b,c)
479     - eor w17,w15,w17,ror#13 // Sigma0(a)
480     - add w26,w26,w19 // h+=Maj(a,b,c)
481     - ldr w19,[x30],#4 // *K++, w28 in next round
482     - //add w26,w26,w17 // h+=Sigma0(a)
483     -#ifndef __AARCH64EB__
484     - rev w13,w13 // 10
485     -#endif
486     - add w26,w26,w17 // h+=Sigma0(a)
487     - ror w16,w22,#6
488     - add w25,w25,w19 // h+=K[i]
489     - eor w0,w22,w22,ror#14
490     - and w17,w23,w22
491     - bic w19,w24,w22
492     - add w25,w25,w13 // h+=X[i]
493     - orr w17,w17,w19 // Ch(e,f,g)
494     - eor w19,w26,w27 // a^b, b^c in next round
495     - eor w16,w16,w0,ror#11 // Sigma1(e)
496     - ror w0,w26,#2
497     - add w25,w25,w17 // h+=Ch(e,f,g)
498     - eor w17,w26,w26,ror#9
499     - add w25,w25,w16 // h+=Sigma1(e)
500     - and w28,w28,w19 // (b^c)&=(a^b)
501     - add w21,w21,w25 // d+=h
502     - eor w28,w28,w27 // Maj(a,b,c)
503     - eor w17,w0,w17,ror#13 // Sigma0(a)
504     - add w25,w25,w28 // h+=Maj(a,b,c)
505     - ldr w28,[x30],#4 // *K++, w19 in next round
506     - //add w25,w25,w17 // h+=Sigma0(a)
507     -#ifndef __AARCH64EB__
508     - rev w14,w14 // 11
509     -#endif
510     - ldp w15,w0,[x1],#2*4
511     - add w25,w25,w17 // h+=Sigma0(a)
512     - str w6,[sp,#12]
513     - ror w16,w21,#6
514     - add w24,w24,w28 // h+=K[i]
515     - eor w6,w21,w21,ror#14
516     - and w17,w22,w21
517     - bic w28,w23,w21
518     - add w24,w24,w14 // h+=X[i]
519     - orr w17,w17,w28 // Ch(e,f,g)
520     - eor w28,w25,w26 // a^b, b^c in next round
521     - eor w16,w16,w6,ror#11 // Sigma1(e)
522     - ror w6,w25,#2
523     - add w24,w24,w17 // h+=Ch(e,f,g)
524     - eor w17,w25,w25,ror#9
525     - add w24,w24,w16 // h+=Sigma1(e)
526     - and w19,w19,w28 // (b^c)&=(a^b)
527     - add w20,w20,w24 // d+=h
528     - eor w19,w19,w26 // Maj(a,b,c)
529     - eor w17,w6,w17,ror#13 // Sigma0(a)
530     - add w24,w24,w19 // h+=Maj(a,b,c)
531     - ldr w19,[x30],#4 // *K++, w28 in next round
532     - //add w24,w24,w17 // h+=Sigma0(a)
533     -#ifndef __AARCH64EB__
534     - rev w15,w15 // 12
535     -#endif
536     - add w24,w24,w17 // h+=Sigma0(a)
537     - str w7,[sp,#0]
538     - ror w16,w20,#6
539     - add w23,w23,w19 // h+=K[i]
540     - eor w7,w20,w20,ror#14
541     - and w17,w21,w20
542     - bic w19,w22,w20
543     - add w23,w23,w15 // h+=X[i]
544     - orr w17,w17,w19 // Ch(e,f,g)
545     - eor w19,w24,w25 // a^b, b^c in next round
546     - eor w16,w16,w7,ror#11 // Sigma1(e)
547     - ror w7,w24,#2
548     - add w23,w23,w17 // h+=Ch(e,f,g)
549     - eor w17,w24,w24,ror#9
550     - add w23,w23,w16 // h+=Sigma1(e)
551     - and w28,w28,w19 // (b^c)&=(a^b)
552     - add w27,w27,w23 // d+=h
553     - eor w28,w28,w25 // Maj(a,b,c)
554     - eor w17,w7,w17,ror#13 // Sigma0(a)
555     - add w23,w23,w28 // h+=Maj(a,b,c)
556     - ldr w28,[x30],#4 // *K++, w19 in next round
557     - //add w23,w23,w17 // h+=Sigma0(a)
558     -#ifndef __AARCH64EB__
559     - rev w0,w0 // 13
560     -#endif
561     - ldp w1,w2,[x1]
562     - add w23,w23,w17 // h+=Sigma0(a)
563     - str w8,[sp,#4]
564     - ror w16,w27,#6
565     - add w22,w22,w28 // h+=K[i]
566     - eor w8,w27,w27,ror#14
567     - and w17,w20,w27
568     - bic w28,w21,w27
569     - add w22,w22,w0 // h+=X[i]
570     - orr w17,w17,w28 // Ch(e,f,g)
571     - eor w28,w23,w24 // a^b, b^c in next round
572     - eor w16,w16,w8,ror#11 // Sigma1(e)
573     - ror w8,w23,#2
574     - add w22,w22,w17 // h+=Ch(e,f,g)
575     - eor w17,w23,w23,ror#9
576     - add w22,w22,w16 // h+=Sigma1(e)
577     - and w19,w19,w28 // (b^c)&=(a^b)
578     - add w26,w26,w22 // d+=h
579     - eor w19,w19,w24 // Maj(a,b,c)
580     - eor w17,w8,w17,ror#13 // Sigma0(a)
581     - add w22,w22,w19 // h+=Maj(a,b,c)
582     - ldr w19,[x30],#4 // *K++, w28 in next round
583     - //add w22,w22,w17 // h+=Sigma0(a)
584     -#ifndef __AARCH64EB__
585     - rev w1,w1 // 14
586     -#endif
587     - ldr w6,[sp,#12]
588     - add w22,w22,w17 // h+=Sigma0(a)
589     - str w9,[sp,#8]
590     - ror w16,w26,#6
591     - add w21,w21,w19 // h+=K[i]
592     - eor w9,w26,w26,ror#14
593     - and w17,w27,w26
594     - bic w19,w20,w26
595     - add w21,w21,w1 // h+=X[i]
596     - orr w17,w17,w19 // Ch(e,f,g)
597     - eor w19,w22,w23 // a^b, b^c in next round
598     - eor w16,w16,w9,ror#11 // Sigma1(e)
599     - ror w9,w22,#2
600     - add w21,w21,w17 // h+=Ch(e,f,g)
601     - eor w17,w22,w22,ror#9
602     - add w21,w21,w16 // h+=Sigma1(e)
603     - and w28,w28,w19 // (b^c)&=(a^b)
604     - add w25,w25,w21 // d+=h
605     - eor w28,w28,w23 // Maj(a,b,c)
606     - eor w17,w9,w17,ror#13 // Sigma0(a)
607     - add w21,w21,w28 // h+=Maj(a,b,c)
608     - ldr w28,[x30],#4 // *K++, w19 in next round
609     - //add w21,w21,w17 // h+=Sigma0(a)
610     -#ifndef __AARCH64EB__
611     - rev w2,w2 // 15
612     -#endif
613     - ldr w7,[sp,#0]
614     - add w21,w21,w17 // h+=Sigma0(a)
615     - str w10,[sp,#12]
616     - ror w16,w25,#6
617     - add w20,w20,w28 // h+=K[i]
618     - ror w9,w4,#7
619     - and w17,w26,w25
620     - ror w8,w1,#17
621     - bic w28,w27,w25
622     - ror w10,w21,#2
623     - add w20,w20,w2 // h+=X[i]
624     - eor w16,w16,w25,ror#11
625     - eor w9,w9,w4,ror#18
626     - orr w17,w17,w28 // Ch(e,f,g)
627     - eor w28,w21,w22 // a^b, b^c in next round
628     - eor w16,w16,w25,ror#25 // Sigma1(e)
629     - eor w10,w10,w21,ror#13
630     - add w20,w20,w17 // h+=Ch(e,f,g)
631     - and w19,w19,w28 // (b^c)&=(a^b)
632     - eor w8,w8,w1,ror#19
633     - eor w9,w9,w4,lsr#3 // sigma0(X[i+1])
634     - add w20,w20,w16 // h+=Sigma1(e)
635     - eor w19,w19,w22 // Maj(a,b,c)
636     - eor w17,w10,w21,ror#22 // Sigma0(a)
637     - eor w8,w8,w1,lsr#10 // sigma1(X[i+14])
638     - add w3,w3,w12
639     - add w24,w24,w20 // d+=h
640     - add w20,w20,w19 // h+=Maj(a,b,c)
641     - ldr w19,[x30],#4 // *K++, w28 in next round
642     - add w3,w3,w9
643     - add w20,w20,w17 // h+=Sigma0(a)
644     - add w3,w3,w8
645     -.Loop_16_xx:
646     - ldr w8,[sp,#4]
647     - str w11,[sp,#0]
648     - ror w16,w24,#6
649     - add w27,w27,w19 // h+=K[i]
650     - ror w10,w5,#7
651     - and w17,w25,w24
652     - ror w9,w2,#17
653     - bic w19,w26,w24
654     - ror w11,w20,#2
655     - add w27,w27,w3 // h+=X[i]
656     - eor w16,w16,w24,ror#11
657     - eor w10,w10,w5,ror#18
658     - orr w17,w17,w19 // Ch(e,f,g)
659     - eor w19,w20,w21 // a^b, b^c in next round
660     - eor w16,w16,w24,ror#25 // Sigma1(e)
661     - eor w11,w11,w20,ror#13
662     - add w27,w27,w17 // h+=Ch(e,f,g)
663     - and w28,w28,w19 // (b^c)&=(a^b)
664     - eor w9,w9,w2,ror#19
665     - eor w10,w10,w5,lsr#3 // sigma0(X[i+1])
666     - add w27,w27,w16 // h+=Sigma1(e)
667     - eor w28,w28,w21 // Maj(a,b,c)
668     - eor w17,w11,w20,ror#22 // Sigma0(a)
669     - eor w9,w9,w2,lsr#10 // sigma1(X[i+14])
670     - add w4,w4,w13
671     - add w23,w23,w27 // d+=h
672     - add w27,w27,w28 // h+=Maj(a,b,c)
673     - ldr w28,[x30],#4 // *K++, w19 in next round
674     - add w4,w4,w10
675     - add w27,w27,w17 // h+=Sigma0(a)
676     - add w4,w4,w9
677     - ldr w9,[sp,#8]
678     - str w12,[sp,#4]
679     - ror w16,w23,#6
680     - add w26,w26,w28 // h+=K[i]
681     - ror w11,w6,#7
682     - and w17,w24,w23
683     - ror w10,w3,#17
684     - bic w28,w25,w23
685     - ror w12,w27,#2
686     - add w26,w26,w4 // h+=X[i]
687     - eor w16,w16,w23,ror#11
688     - eor w11,w11,w6,ror#18
689     - orr w17,w17,w28 // Ch(e,f,g)
690     - eor w28,w27,w20 // a^b, b^c in next round
691     - eor w16,w16,w23,ror#25 // Sigma1(e)
692     - eor w12,w12,w27,ror#13
693     - add w26,w26,w17 // h+=Ch(e,f,g)
694     - and w19,w19,w28 // (b^c)&=(a^b)
695     - eor w10,w10,w3,ror#19
696     - eor w11,w11,w6,lsr#3 // sigma0(X[i+1])
697     - add w26,w26,w16 // h+=Sigma1(e)
698     - eor w19,w19,w20 // Maj(a,b,c)
699     - eor w17,w12,w27,ror#22 // Sigma0(a)
700     - eor w10,w10,w3,lsr#10 // sigma1(X[i+14])
701     - add w5,w5,w14
702     - add w22,w22,w26 // d+=h
703     - add w26,w26,w19 // h+=Maj(a,b,c)
704     - ldr w19,[x30],#4 // *K++, w28 in next round
705     - add w5,w5,w11
706     - add w26,w26,w17 // h+=Sigma0(a)
707     - add w5,w5,w10
708     - ldr w10,[sp,#12]
709     - str w13,[sp,#8]
710     - ror w16,w22,#6
711     - add w25,w25,w19 // h+=K[i]
712     - ror w12,w7,#7
713     - and w17,w23,w22
714     - ror w11,w4,#17
715     - bic w19,w24,w22
716     - ror w13,w26,#2
717     - add w25,w25,w5 // h+=X[i]
718     - eor w16,w16,w22,ror#11
719     - eor w12,w12,w7,ror#18
720     - orr w17,w17,w19 // Ch(e,f,g)
721     - eor w19,w26,w27 // a^b, b^c in next round
722     - eor w16,w16,w22,ror#25 // Sigma1(e)
723     - eor w13,w13,w26,ror#13
724     - add w25,w25,w17 // h+=Ch(e,f,g)
725     - and w28,w28,w19 // (b^c)&=(a^b)
726     - eor w11,w11,w4,ror#19
727     - eor w12,w12,w7,lsr#3 // sigma0(X[i+1])
728     - add w25,w25,w16 // h+=Sigma1(e)
729     - eor w28,w28,w27 // Maj(a,b,c)
730     - eor w17,w13,w26,ror#22 // Sigma0(a)
731     - eor w11,w11,w4,lsr#10 // sigma1(X[i+14])
732     - add w6,w6,w15
733     - add w21,w21,w25 // d+=h
734     - add w25,w25,w28 // h+=Maj(a,b,c)
735     - ldr w28,[x30],#4 // *K++, w19 in next round
736     - add w6,w6,w12
737     - add w25,w25,w17 // h+=Sigma0(a)
738     - add w6,w6,w11
739     - ldr w11,[sp,#0]
740     - str w14,[sp,#12]
741     - ror w16,w21,#6
742     - add w24,w24,w28 // h+=K[i]
743     - ror w13,w8,#7
744     - and w17,w22,w21
745     - ror w12,w5,#17
746     - bic w28,w23,w21
747     - ror w14,w25,#2
748     - add w24,w24,w6 // h+=X[i]
749     - eor w16,w16,w21,ror#11
750     - eor w13,w13,w8,ror#18
751     - orr w17,w17,w28 // Ch(e,f,g)
752     - eor w28,w25,w26 // a^b, b^c in next round
753     - eor w16,w16,w21,ror#25 // Sigma1(e)
754     - eor w14,w14,w25,ror#13
755     - add w24,w24,w17 // h+=Ch(e,f,g)
756     - and w19,w19,w28 // (b^c)&=(a^b)
757     - eor w12,w12,w5,ror#19
758     - eor w13,w13,w8,lsr#3 // sigma0(X[i+1])
759     - add w24,w24,w16 // h+=Sigma1(e)
760     - eor w19,w19,w26 // Maj(a,b,c)
761     - eor w17,w14,w25,ror#22 // Sigma0(a)
762     - eor w12,w12,w5,lsr#10 // sigma1(X[i+14])
763     - add w7,w7,w0
764     - add w20,w20,w24 // d+=h
765     - add w24,w24,w19 // h+=Maj(a,b,c)
766     - ldr w19,[x30],#4 // *K++, w28 in next round
767     - add w7,w7,w13
768     - add w24,w24,w17 // h+=Sigma0(a)
769     - add w7,w7,w12
770     - ldr w12,[sp,#4]
771     - str w15,[sp,#0]
772     - ror w16,w20,#6
773     - add w23,w23,w19 // h+=K[i]
774     - ror w14,w9,#7
775     - and w17,w21,w20
776     - ror w13,w6,#17
777     - bic w19,w22,w20
778     - ror w15,w24,#2
779     - add w23,w23,w7 // h+=X[i]
780     - eor w16,w16,w20,ror#11
781     - eor w14,w14,w9,ror#18
782     - orr w17,w17,w19 // Ch(e,f,g)
783     - eor w19,w24,w25 // a^b, b^c in next round
784     - eor w16,w16,w20,ror#25 // Sigma1(e)
785     - eor w15,w15,w24,ror#13
786     - add w23,w23,w17 // h+=Ch(e,f,g)
787     - and w28,w28,w19 // (b^c)&=(a^b)
788     - eor w13,w13,w6,ror#19
789     - eor w14,w14,w9,lsr#3 // sigma0(X[i+1])
790     - add w23,w23,w16 // h+=Sigma1(e)
791     - eor w28,w28,w25 // Maj(a,b,c)
792     - eor w17,w15,w24,ror#22 // Sigma0(a)
793     - eor w13,w13,w6,lsr#10 // sigma1(X[i+14])
794     - add w8,w8,w1
795     - add w27,w27,w23 // d+=h
796     - add w23,w23,w28 // h+=Maj(a,b,c)
797     - ldr w28,[x30],#4 // *K++, w19 in next round
798     - add w8,w8,w14
799     - add w23,w23,w17 // h+=Sigma0(a)
800     - add w8,w8,w13
801     - ldr w13,[sp,#8]
802     - str w0,[sp,#4]
803     - ror w16,w27,#6
804     - add w22,w22,w28 // h+=K[i]
805     - ror w15,w10,#7
806     - and w17,w20,w27
807     - ror w14,w7,#17
808     - bic w28,w21,w27
809     - ror w0,w23,#2
810     - add w22,w22,w8 // h+=X[i]
811     - eor w16,w16,w27,ror#11
812     - eor w15,w15,w10,ror#18
813     - orr w17,w17,w28 // Ch(e,f,g)
814     - eor w28,w23,w24 // a^b, b^c in next round
815     - eor w16,w16,w27,ror#25 // Sigma1(e)
816     - eor w0,w0,w23,ror#13
817     - add w22,w22,w17 // h+=Ch(e,f,g)
818     - and w19,w19,w28 // (b^c)&=(a^b)
819     - eor w14,w14,w7,ror#19
820     - eor w15,w15,w10,lsr#3 // sigma0(X[i+1])
821     - add w22,w22,w16 // h+=Sigma1(e)
822     - eor w19,w19,w24 // Maj(a,b,c)
823     - eor w17,w0,w23,ror#22 // Sigma0(a)
824     - eor w14,w14,w7,lsr#10 // sigma1(X[i+14])
825     - add w9,w9,w2
826     - add w26,w26,w22 // d+=h
827     - add w22,w22,w19 // h+=Maj(a,b,c)
828     - ldr w19,[x30],#4 // *K++, w28 in next round
829     - add w9,w9,w15
830     - add w22,w22,w17 // h+=Sigma0(a)
831     - add w9,w9,w14
832     - ldr w14,[sp,#12]
833     - str w1,[sp,#8]
834     - ror w16,w26,#6
835     - add w21,w21,w19 // h+=K[i]
836     - ror w0,w11,#7
837     - and w17,w27,w26
838     - ror w15,w8,#17
839     - bic w19,w20,w26
840     - ror w1,w22,#2
841     - add w21,w21,w9 // h+=X[i]
842     - eor w16,w16,w26,ror#11
843     - eor w0,w0,w11,ror#18
844     - orr w17,w17,w19 // Ch(e,f,g)
845     - eor w19,w22,w23 // a^b, b^c in next round
846     - eor w16,w16,w26,ror#25 // Sigma1(e)
847     - eor w1,w1,w22,ror#13
848     - add w21,w21,w17 // h+=Ch(e,f,g)
849     - and w28,w28,w19 // (b^c)&=(a^b)
850     - eor w15,w15,w8,ror#19
851     - eor w0,w0,w11,lsr#3 // sigma0(X[i+1])
852     - add w21,w21,w16 // h+=Sigma1(e)
853     - eor w28,w28,w23 // Maj(a,b,c)
854     - eor w17,w1,w22,ror#22 // Sigma0(a)
855     - eor w15,w15,w8,lsr#10 // sigma1(X[i+14])
856     - add w10,w10,w3
857     - add w25,w25,w21 // d+=h
858     - add w21,w21,w28 // h+=Maj(a,b,c)
859     - ldr w28,[x30],#4 // *K++, w19 in next round
860     - add w10,w10,w0
861     - add w21,w21,w17 // h+=Sigma0(a)
862     - add w10,w10,w15
863     - ldr w15,[sp,#0]
864     - str w2,[sp,#12]
865     - ror w16,w25,#6
866     - add w20,w20,w28 // h+=K[i]
867     - ror w1,w12,#7
868     - and w17,w26,w25
869     - ror w0,w9,#17
870     - bic w28,w27,w25
871     - ror w2,w21,#2
872     - add w20,w20,w10 // h+=X[i]
873     - eor w16,w16,w25,ror#11
874     - eor w1,w1,w12,ror#18
875     - orr w17,w17,w28 // Ch(e,f,g)
876     - eor w28,w21,w22 // a^b, b^c in next round
877     - eor w16,w16,w25,ror#25 // Sigma1(e)
878     - eor w2,w2,w21,ror#13
879     - add w20,w20,w17 // h+=Ch(e,f,g)
880     - and w19,w19,w28 // (b^c)&=(a^b)
881     - eor w0,w0,w9,ror#19
882     - eor w1,w1,w12,lsr#3 // sigma0(X[i+1])
883     - add w20,w20,w16 // h+=Sigma1(e)
884     - eor w19,w19,w22 // Maj(a,b,c)
885     - eor w17,w2,w21,ror#22 // Sigma0(a)
886     - eor w0,w0,w9,lsr#10 // sigma1(X[i+14])
887     - add w11,w11,w4
888     - add w24,w24,w20 // d+=h
889     - add w20,w20,w19 // h+=Maj(a,b,c)
890     - ldr w19,[x30],#4 // *K++, w28 in next round
891     - add w11,w11,w1
892     - add w20,w20,w17 // h+=Sigma0(a)
893     - add w11,w11,w0
894     - ldr w0,[sp,#4]
895     - str w3,[sp,#0]
896     - ror w16,w24,#6
897     - add w27,w27,w19 // h+=K[i]
898     - ror w2,w13,#7
899     - and w17,w25,w24
900     - ror w1,w10,#17
901     - bic w19,w26,w24
902     - ror w3,w20,#2
903     - add w27,w27,w11 // h+=X[i]
904     - eor w16,w16,w24,ror#11
905     - eor w2,w2,w13,ror#18
906     - orr w17,w17,w19 // Ch(e,f,g)
907     - eor w19,w20,w21 // a^b, b^c in next round
908     - eor w16,w16,w24,ror#25 // Sigma1(e)
909     - eor w3,w3,w20,ror#13
910     - add w27,w27,w17 // h+=Ch(e,f,g)
911     - and w28,w28,w19 // (b^c)&=(a^b)
912     - eor w1,w1,w10,ror#19
913     - eor w2,w2,w13,lsr#3 // sigma0(X[i+1])
914     - add w27,w27,w16 // h+=Sigma1(e)
915     - eor w28,w28,w21 // Maj(a,b,c)
916     - eor w17,w3,w20,ror#22 // Sigma0(a)
917     - eor w1,w1,w10,lsr#10 // sigma1(X[i+14])
918     - add w12,w12,w5
919     - add w23,w23,w27 // d+=h
920     - add w27,w27,w28 // h+=Maj(a,b,c)
921     - ldr w28,[x30],#4 // *K++, w19 in next round
922     - add w12,w12,w2
923     - add w27,w27,w17 // h+=Sigma0(a)
924     - add w12,w12,w1
925     - ldr w1,[sp,#8]
926     - str w4,[sp,#4]
927     - ror w16,w23,#6
928     - add w26,w26,w28 // h+=K[i]
929     - ror w3,w14,#7
930     - and w17,w24,w23
931     - ror w2,w11,#17
932     - bic w28,w25,w23
933     - ror w4,w27,#2
934     - add w26,w26,w12 // h+=X[i]
935     - eor w16,w16,w23,ror#11
936     - eor w3,w3,w14,ror#18
937     - orr w17,w17,w28 // Ch(e,f,g)
938     - eor w28,w27,w20 // a^b, b^c in next round
939     - eor w16,w16,w23,ror#25 // Sigma1(e)
940     - eor w4,w4,w27,ror#13
941     - add w26,w26,w17 // h+=Ch(e,f,g)
942     - and w19,w19,w28 // (b^c)&=(a^b)
943     - eor w2,w2,w11,ror#19
944     - eor w3,w3,w14,lsr#3 // sigma0(X[i+1])
945     - add w26,w26,w16 // h+=Sigma1(e)
946     - eor w19,w19,w20 // Maj(a,b,c)
947     - eor w17,w4,w27,ror#22 // Sigma0(a)
948     - eor w2,w2,w11,lsr#10 // sigma1(X[i+14])
949     - add w13,w13,w6
950     - add w22,w22,w26 // d+=h
951     - add w26,w26,w19 // h+=Maj(a,b,c)
952     - ldr w19,[x30],#4 // *K++, w28 in next round
953     - add w13,w13,w3
954     - add w26,w26,w17 // h+=Sigma0(a)
955     - add w13,w13,w2
956     - ldr w2,[sp,#12]
957     - str w5,[sp,#8]
958     - ror w16,w22,#6
959     - add w25,w25,w19 // h+=K[i]
960     - ror w4,w15,#7
961     - and w17,w23,w22
962     - ror w3,w12,#17
963     - bic w19,w24,w22
964     - ror w5,w26,#2
965     - add w25,w25,w13 // h+=X[i]
966     - eor w16,w16,w22,ror#11
967     - eor w4,w4,w15,ror#18
968     - orr w17,w17,w19 // Ch(e,f,g)
969     - eor w19,w26,w27 // a^b, b^c in next round
970     - eor w16,w16,w22,ror#25 // Sigma1(e)
971     - eor w5,w5,w26,ror#13
972     - add w25,w25,w17 // h+=Ch(e,f,g)
973     - and w28,w28,w19 // (b^c)&=(a^b)
974     - eor w3,w3,w12,ror#19
975     - eor w4,w4,w15,lsr#3 // sigma0(X[i+1])
976     - add w25,w25,w16 // h+=Sigma1(e)
977     - eor w28,w28,w27 // Maj(a,b,c)
978     - eor w17,w5,w26,ror#22 // Sigma0(a)
979     - eor w3,w3,w12,lsr#10 // sigma1(X[i+14])
980     - add w14,w14,w7
981     - add w21,w21,w25 // d+=h
982     - add w25,w25,w28 // h+=Maj(a,b,c)
983     - ldr w28,[x30],#4 // *K++, w19 in next round
984     - add w14,w14,w4
985     - add w25,w25,w17 // h+=Sigma0(a)
986     - add w14,w14,w3
987     - ldr w3,[sp,#0]
988     - str w6,[sp,#12]
989     - ror w16,w21,#6
990     - add w24,w24,w28 // h+=K[i]
991     - ror w5,w0,#7
992     - and w17,w22,w21
993     - ror w4,w13,#17
994     - bic w28,w23,w21
995     - ror w6,w25,#2
996     - add w24,w24,w14 // h+=X[i]
997     - eor w16,w16,w21,ror#11
998     - eor w5,w5,w0,ror#18
999     - orr w17,w17,w28 // Ch(e,f,g)
1000     - eor w28,w25,w26 // a^b, b^c in next round
1001     - eor w16,w16,w21,ror#25 // Sigma1(e)
1002     - eor w6,w6,w25,ror#13
1003     - add w24,w24,w17 // h+=Ch(e,f,g)
1004     - and w19,w19,w28 // (b^c)&=(a^b)
1005     - eor w4,w4,w13,ror#19
1006     - eor w5,w5,w0,lsr#3 // sigma0(X[i+1])
1007     - add w24,w24,w16 // h+=Sigma1(e)
1008     - eor w19,w19,w26 // Maj(a,b,c)
1009     - eor w17,w6,w25,ror#22 // Sigma0(a)
1010     - eor w4,w4,w13,lsr#10 // sigma1(X[i+14])
1011     - add w15,w15,w8
1012     - add w20,w20,w24 // d+=h
1013     - add w24,w24,w19 // h+=Maj(a,b,c)
1014     - ldr w19,[x30],#4 // *K++, w28 in next round
1015     - add w15,w15,w5
1016     - add w24,w24,w17 // h+=Sigma0(a)
1017     - add w15,w15,w4
1018     - ldr w4,[sp,#4]
1019     - str w7,[sp,#0]
1020     - ror w16,w20,#6
1021     - add w23,w23,w19 // h+=K[i]
1022     - ror w6,w1,#7
1023     - and w17,w21,w20
1024     - ror w5,w14,#17
1025     - bic w19,w22,w20
1026     - ror w7,w24,#2
1027     - add w23,w23,w15 // h+=X[i]
1028     - eor w16,w16,w20,ror#11
1029     - eor w6,w6,w1,ror#18
1030     - orr w17,w17,w19 // Ch(e,f,g)
1031     - eor w19,w24,w25 // a^b, b^c in next round
1032     - eor w16,w16,w20,ror#25 // Sigma1(e)
1033     - eor w7,w7,w24,ror#13
1034     - add w23,w23,w17 // h+=Ch(e,f,g)
1035     - and w28,w28,w19 // (b^c)&=(a^b)
1036     - eor w5,w5,w14,ror#19
1037     - eor w6,w6,w1,lsr#3 // sigma0(X[i+1])
1038     - add w23,w23,w16 // h+=Sigma1(e)
1039     - eor w28,w28,w25 // Maj(a,b,c)
1040     - eor w17,w7,w24,ror#22 // Sigma0(a)
1041     - eor w5,w5,w14,lsr#10 // sigma1(X[i+14])
1042     - add w0,w0,w9
1043     - add w27,w27,w23 // d+=h
1044     - add w23,w23,w28 // h+=Maj(a,b,c)
1045     - ldr w28,[x30],#4 // *K++, w19 in next round
1046     - add w0,w0,w6
1047     - add w23,w23,w17 // h+=Sigma0(a)
1048     - add w0,w0,w5
1049     - ldr w5,[sp,#8]
1050     - str w8,[sp,#4]
1051     - ror w16,w27,#6
1052     - add w22,w22,w28 // h+=K[i]
1053     - ror w7,w2,#7
1054     - and w17,w20,w27
1055     - ror w6,w15,#17
1056     - bic w28,w21,w27
1057     - ror w8,w23,#2
1058     - add w22,w22,w0 // h+=X[i]
1059     - eor w16,w16,w27,ror#11
1060     - eor w7,w7,w2,ror#18
1061     - orr w17,w17,w28 // Ch(e,f,g)
1062     - eor w28,w23,w24 // a^b, b^c in next round
1063     - eor w16,w16,w27,ror#25 // Sigma1(e)
1064     - eor w8,w8,w23,ror#13
1065     - add w22,w22,w17 // h+=Ch(e,f,g)
1066     - and w19,w19,w28 // (b^c)&=(a^b)
1067     - eor w6,w6,w15,ror#19
1068     - eor w7,w7,w2,lsr#3 // sigma0(X[i+1])
1069     - add w22,w22,w16 // h+=Sigma1(e)
1070     - eor w19,w19,w24 // Maj(a,b,c)
1071     - eor w17,w8,w23,ror#22 // Sigma0(a)
1072     - eor w6,w6,w15,lsr#10 // sigma1(X[i+14])
1073     - add w1,w1,w10
1074     - add w26,w26,w22 // d+=h
1075     - add w22,w22,w19 // h+=Maj(a,b,c)
1076     - ldr w19,[x30],#4 // *K++, w28 in next round
1077     - add w1,w1,w7
1078     - add w22,w22,w17 // h+=Sigma0(a)
1079     - add w1,w1,w6
1080     - ldr w6,[sp,#12]
1081     - str w9,[sp,#8]
1082     - ror w16,w26,#6
1083     - add w21,w21,w19 // h+=K[i]
1084     - ror w8,w3,#7
1085     - and w17,w27,w26
1086     - ror w7,w0,#17
1087     - bic w19,w20,w26
1088     - ror w9,w22,#2
1089     - add w21,w21,w1 // h+=X[i]
1090     - eor w16,w16,w26,ror#11
1091     - eor w8,w8,w3,ror#18
1092     - orr w17,w17,w19 // Ch(e,f,g)
1093     - eor w19,w22,w23 // a^b, b^c in next round
1094     - eor w16,w16,w26,ror#25 // Sigma1(e)
1095     - eor w9,w9,w22,ror#13
1096     - add w21,w21,w17 // h+=Ch(e,f,g)
1097     - and w28,w28,w19 // (b^c)&=(a^b)
1098     - eor w7,w7,w0,ror#19
1099     - eor w8,w8,w3,lsr#3 // sigma0(X[i+1])
1100     - add w21,w21,w16 // h+=Sigma1(e)
1101     - eor w28,w28,w23 // Maj(a,b,c)
1102     - eor w17,w9,w22,ror#22 // Sigma0(a)
1103     - eor w7,w7,w0,lsr#10 // sigma1(X[i+14])
1104     - add w2,w2,w11
1105     - add w25,w25,w21 // d+=h
1106     - add w21,w21,w28 // h+=Maj(a,b,c)
1107     - ldr w28,[x30],#4 // *K++, w19 in next round
1108     - add w2,w2,w8
1109     - add w21,w21,w17 // h+=Sigma0(a)
1110     - add w2,w2,w7
1111     - ldr w7,[sp,#0]
1112     - str w10,[sp,#12]
1113     - ror w16,w25,#6
1114     - add w20,w20,w28 // h+=K[i]
1115     - ror w9,w4,#7
1116     - and w17,w26,w25
1117     - ror w8,w1,#17
1118     - bic w28,w27,w25
1119     - ror w10,w21,#2
1120     - add w20,w20,w2 // h+=X[i]
1121     - eor w16,w16,w25,ror#11
1122     - eor w9,w9,w4,ror#18
1123     - orr w17,w17,w28 // Ch(e,f,g)
1124     - eor w28,w21,w22 // a^b, b^c in next round
1125     - eor w16,w16,w25,ror#25 // Sigma1(e)
1126     - eor w10,w10,w21,ror#13
1127     - add w20,w20,w17 // h+=Ch(e,f,g)
1128     - and w19,w19,w28 // (b^c)&=(a^b)
1129     - eor w8,w8,w1,ror#19
1130     - eor w9,w9,w4,lsr#3 // sigma0(X[i+1])
1131     - add w20,w20,w16 // h+=Sigma1(e)
1132     - eor w19,w19,w22 // Maj(a,b,c)
1133     - eor w17,w10,w21,ror#22 // Sigma0(a)
1134     - eor w8,w8,w1,lsr#10 // sigma1(X[i+14])
1135     - add w3,w3,w12
1136     - add w24,w24,w20 // d+=h
1137     - add w20,w20,w19 // h+=Maj(a,b,c)
1138     - ldr w19,[x30],#4 // *K++, w28 in next round
1139     - add w3,w3,w9
1140     - add w20,w20,w17 // h+=Sigma0(a)
1141     - add w3,w3,w8
1142     - cbnz w19,.Loop_16_xx
1143     -
1144     - ldp x0,x2,[x29,#96]
1145     - ldr x1,[x29,#112]
1146     - sub x30,x30,#260 // rewind
1147     -
1148     - ldp w3,w4,[x0]
1149     - ldp w5,w6,[x0,#2*4]
1150     - add x1,x1,#14*4 // advance input pointer
1151     - ldp w7,w8,[x0,#4*4]
1152     - add w20,w20,w3
1153     - ldp w9,w10,[x0,#6*4]
1154     - add w21,w21,w4
1155     - add w22,w22,w5
1156     - add w23,w23,w6
1157     - stp w20,w21,[x0]
1158     - add w24,w24,w7
1159     - add w25,w25,w8
1160     - stp w22,w23,[x0,#2*4]
1161     - add w26,w26,w9
1162     - add w27,w27,w10
1163     - cmp x1,x2
1164     - stp w24,w25,[x0,#4*4]
1165     - stp w26,w27,[x0,#6*4]
1166     - b.ne .Loop
1167     -
1168     - ldp x19,x20,[x29,#16]
1169     - add sp,sp,#4*4
1170     - ldp x21,x22,[x29,#32]
1171     - ldp x23,x24,[x29,#48]
1172     - ldp x25,x26,[x29,#64]
1173     - ldp x27,x28,[x29,#80]
1174     - ldp x29,x30,[sp],#128
1175     - ret
1176     -.size sha256_block_data_order,.-sha256_block_data_order
1177     -
1178     -.align 6
1179     -.type .LK256,%object
1180     -.LK256:
1181     - .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
1182     - .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
1183     - .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
1184     - .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
1185     - .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
1186     - .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
1187     - .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
1188     - .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
1189     - .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
1190     - .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
1191     - .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
1192     - .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
1193     - .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
1194     - .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
1195     - .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
1196     - .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
1197     - .long 0 //terminator
1198     -.size .LK256,.-.LK256
1199     -#ifndef __KERNEL__
1200     -.align 3
1201     -.LOPENSSL_armcap_P:
1202     -# ifdef __ILP32__
1203     - .long OPENSSL_armcap_P-.
1204     -# else
1205     - .quad OPENSSL_armcap_P-.
1206     -# endif
1207     -#endif
1208     -.asciz "SHA256 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
1209     -.align 2
1210     -#ifndef __KERNEL__
1211     -.type sha256_block_armv8,%function
1212     -.align 6
1213     -sha256_block_armv8:
1214     -.Lv8_entry:
1215     - stp x29,x30,[sp,#-16]!
1216     - add x29,sp,#0
1217     -
1218     - ld1 {v0.4s,v1.4s},[x0]
1219     - adr x3,.LK256
1220     -
1221     -.Loop_hw:
1222     - ld1 {v4.16b-v7.16b},[x1],#64
1223     - sub x2,x2,#1
1224     - ld1 {v16.4s},[x3],#16
1225     - rev32 v4.16b,v4.16b
1226     - rev32 v5.16b,v5.16b
1227     - rev32 v6.16b,v6.16b
1228     - rev32 v7.16b,v7.16b
1229     - orr v18.16b,v0.16b,v0.16b // offload
1230     - orr v19.16b,v1.16b,v1.16b
1231     - ld1 {v17.4s},[x3],#16
1232     - add v16.4s,v16.4s,v4.4s
1233     - .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1234     - orr v2.16b,v0.16b,v0.16b
1235     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1236     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1237     - .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1238     - ld1 {v16.4s},[x3],#16
1239     - add v17.4s,v17.4s,v5.4s
1240     - .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1241     - orr v2.16b,v0.16b,v0.16b
1242     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1243     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1244     - .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1245     - ld1 {v17.4s},[x3],#16
1246     - add v16.4s,v16.4s,v6.4s
1247     - .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1248     - orr v2.16b,v0.16b,v0.16b
1249     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1250     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1251     - .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1252     - ld1 {v16.4s},[x3],#16
1253     - add v17.4s,v17.4s,v7.4s
1254     - .inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1255     - orr v2.16b,v0.16b,v0.16b
1256     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1257     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1258     - .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1259     - ld1 {v17.4s},[x3],#16
1260     - add v16.4s,v16.4s,v4.4s
1261     - .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1262     - orr v2.16b,v0.16b,v0.16b
1263     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1264     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1265     - .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1266     - ld1 {v16.4s},[x3],#16
1267     - add v17.4s,v17.4s,v5.4s
1268     - .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1269     - orr v2.16b,v0.16b,v0.16b
1270     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1271     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1272     - .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1273     - ld1 {v17.4s},[x3],#16
1274     - add v16.4s,v16.4s,v6.4s
1275     - .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1276     - orr v2.16b,v0.16b,v0.16b
1277     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1278     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1279     - .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1280     - ld1 {v16.4s},[x3],#16
1281     - add v17.4s,v17.4s,v7.4s
1282     - .inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1283     - orr v2.16b,v0.16b,v0.16b
1284     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1285     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1286     - .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1287     - ld1 {v17.4s},[x3],#16
1288     - add v16.4s,v16.4s,v4.4s
1289     - .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b
1290     - orr v2.16b,v0.16b,v0.16b
1291     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1292     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1293     - .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b
1294     - ld1 {v16.4s},[x3],#16
1295     - add v17.4s,v17.4s,v5.4s
1296     - .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b
1297     - orr v2.16b,v0.16b,v0.16b
1298     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1299     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1300     - .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b
1301     - ld1 {v17.4s},[x3],#16
1302     - add v16.4s,v16.4s,v6.4s
1303     - .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b
1304     - orr v2.16b,v0.16b,v0.16b
1305     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1306     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1307     - .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b
1308     - ld1 {v16.4s},[x3],#16
1309     - add v17.4s,v17.4s,v7.4s
1310     - .inst 0x5e282887 //sha256su0 v7.16b,v4.16b
1311     - orr v2.16b,v0.16b,v0.16b
1312     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1313     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1314     - .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b
1315     - ld1 {v17.4s},[x3],#16
1316     - add v16.4s,v16.4s,v4.4s
1317     - orr v2.16b,v0.16b,v0.16b
1318     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1319     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1320     -
1321     - ld1 {v16.4s},[x3],#16
1322     - add v17.4s,v17.4s,v5.4s
1323     - orr v2.16b,v0.16b,v0.16b
1324     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1325     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1326     -
1327     - ld1 {v17.4s},[x3]
1328     - add v16.4s,v16.4s,v6.4s
1329     - sub x3,x3,#64*4-16 // rewind
1330     - orr v2.16b,v0.16b,v0.16b
1331     - .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s
1332     - .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s
1333     -
1334     - add v17.4s,v17.4s,v7.4s
1335     - orr v2.16b,v0.16b,v0.16b
1336     - .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s
1337     - .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s
1338     -
1339     - add v0.4s,v0.4s,v18.4s
1340     - add v1.4s,v1.4s,v19.4s
1341     -
1342     - cbnz x2,.Loop_hw
1343     -
1344     - st1 {v0.4s,v1.4s},[x0]
1345     -
1346     - ldr x29,[sp],#16
1347     - ret
1348     -.size sha256_block_armv8,.-sha256_block_armv8
1349     -#endif
1350     -#ifdef __KERNEL__
1351     -.globl sha256_block_neon
1352     -#endif
1353     -.type sha256_block_neon,%function
1354     -.align 4
1355     -sha256_block_neon:
1356     -.Lneon_entry:
1357     - stp x29, x30, [sp, #-16]!
1358     - mov x29, sp
1359     - sub sp,sp,#16*4
1360     -
1361     - adr x16,.LK256
1362     - add x2,x1,x2,lsl#6 // len to point at the end of inp
1363     -
1364     - ld1 {v0.16b},[x1], #16
1365     - ld1 {v1.16b},[x1], #16
1366     - ld1 {v2.16b},[x1], #16
1367     - ld1 {v3.16b},[x1], #16
1368     - ld1 {v4.4s},[x16], #16
1369     - ld1 {v5.4s},[x16], #16
1370     - ld1 {v6.4s},[x16], #16
1371     - ld1 {v7.4s},[x16], #16
1372     - rev32 v0.16b,v0.16b // yes, even on
1373     - rev32 v1.16b,v1.16b // big-endian
1374     - rev32 v2.16b,v2.16b
1375     - rev32 v3.16b,v3.16b
1376     - mov x17,sp
1377     - add v4.4s,v4.4s,v0.4s
1378     - add v5.4s,v5.4s,v1.4s
1379     - add v6.4s,v6.4s,v2.4s
1380     - st1 {v4.4s-v5.4s},[x17], #32
1381     - add v7.4s,v7.4s,v3.4s
1382     - st1 {v6.4s-v7.4s},[x17]
1383     - sub x17,x17,#32
1384     -
1385     - ldp w3,w4,[x0]
1386     - ldp w5,w6,[x0,#8]
1387     - ldp w7,w8,[x0,#16]
1388     - ldp w9,w10,[x0,#24]
1389     - ldr w12,[sp,#0]
1390     - mov w13,wzr
1391     - eor w14,w4,w5
1392     - mov w15,wzr
1393     - b .L_00_48
1394     -
1395     -.align 4
1396     -.L_00_48:
1397     - ext v4.16b,v0.16b,v1.16b,#4
1398     - add w10,w10,w12
1399     - add w3,w3,w15
1400     - and w12,w8,w7
1401     - bic w15,w9,w7
1402     - ext v7.16b,v2.16b,v3.16b,#4
1403     - eor w11,w7,w7,ror#5
1404     - add w3,w3,w13
1405     - mov d19,v3.d[1]
1406     - orr w12,w12,w15
1407     - eor w11,w11,w7,ror#19
1408     - ushr v6.4s,v4.4s,#7
1409     - eor w15,w3,w3,ror#11
1410     - ushr v5.4s,v4.4s,#3
1411     - add w10,w10,w12
1412     - add v0.4s,v0.4s,v7.4s
1413     - ror w11,w11,#6
1414     - sli v6.4s,v4.4s,#25
1415     - eor w13,w3,w4
1416     - eor w15,w15,w3,ror#20
1417     - ushr v7.4s,v4.4s,#18
1418     - add w10,w10,w11
1419     - ldr w12,[sp,#4]
1420     - and w14,w14,w13
1421     - eor v5.16b,v5.16b,v6.16b
1422     - ror w15,w15,#2
1423     - add w6,w6,w10
1424     - sli v7.4s,v4.4s,#14
1425     - eor w14,w14,w4
1426     - ushr v16.4s,v19.4s,#17
1427     - add w9,w9,w12
1428     - add w10,w10,w15
1429     - and w12,w7,w6
1430     - eor v5.16b,v5.16b,v7.16b
1431     - bic w15,w8,w6
1432     - eor w11,w6,w6,ror#5
1433     - sli v16.4s,v19.4s,#15
1434     - add w10,w10,w14
1435     - orr w12,w12,w15
1436     - ushr v17.4s,v19.4s,#10
1437     - eor w11,w11,w6,ror#19
1438     - eor w15,w10,w10,ror#11
1439     - ushr v7.4s,v19.4s,#19
1440     - add w9,w9,w12
1441     - ror w11,w11,#6
1442     - add v0.4s,v0.4s,v5.4s
1443     - eor w14,w10,w3
1444     - eor w15,w15,w10,ror#20
1445     - sli v7.4s,v19.4s,#13
1446     - add w9,w9,w11
1447     - ldr w12,[sp,#8]
1448     - and w13,w13,w14
1449     - eor v17.16b,v17.16b,v16.16b
1450     - ror w15,w15,#2
1451     - add w5,w5,w9
1452     - eor w13,w13,w3
1453     - eor v17.16b,v17.16b,v7.16b
1454     - add w8,w8,w12
1455     - add w9,w9,w15
1456     - and w12,w6,w5
1457     - add v0.4s,v0.4s,v17.4s
1458     - bic w15,w7,w5
1459     - eor w11,w5,w5,ror#5
1460     - add w9,w9,w13
1461     - ushr v18.4s,v0.4s,#17
1462     - orr w12,w12,w15
1463     - ushr v19.4s,v0.4s,#10
1464     - eor w11,w11,w5,ror#19
1465     - eor w15,w9,w9,ror#11
1466     - sli v18.4s,v0.4s,#15
1467     - add w8,w8,w12
1468     - ushr v17.4s,v0.4s,#19
1469     - ror w11,w11,#6
1470     - eor w13,w9,w10
1471     - eor v19.16b,v19.16b,v18.16b
1472     - eor w15,w15,w9,ror#20
1473     - add w8,w8,w11
1474     - sli v17.4s,v0.4s,#13
1475     - ldr w12,[sp,#12]
1476     - and w14,w14,w13
1477     - ror w15,w15,#2
1478     - ld1 {v4.4s},[x16], #16
1479     - add w4,w4,w8
1480     - eor v19.16b,v19.16b,v17.16b
1481     - eor w14,w14,w10
1482     - eor v17.16b,v17.16b,v17.16b
1483     - add w7,w7,w12
1484     - add w8,w8,w15
1485     - and w12,w5,w4
1486     - mov v17.d[1],v19.d[0]
1487     - bic w15,w6,w4
1488     - eor w11,w4,w4,ror#5
1489     - add w8,w8,w14
1490     - add v0.4s,v0.4s,v17.4s
1491     - orr w12,w12,w15
1492     - eor w11,w11,w4,ror#19
1493     - eor w15,w8,w8,ror#11
1494     - add v4.4s,v4.4s,v0.4s
1495     - add w7,w7,w12
1496     - ror w11,w11,#6
1497     - eor w14,w8,w9
1498     - eor w15,w15,w8,ror#20
1499     - add w7,w7,w11
1500     - ldr w12,[sp,#16]
1501     - and w13,w13,w14
1502     - ror w15,w15,#2
1503     - add w3,w3,w7
1504     - eor w13,w13,w9
1505     - st1 {v4.4s},[x17], #16
1506     - ext v4.16b,v1.16b,v2.16b,#4
1507     - add w6,w6,w12
1508     - add w7,w7,w15
1509     - and w12,w4,w3
1510     - bic w15,w5,w3
1511     - ext v7.16b,v3.16b,v0.16b,#4
1512     - eor w11,w3,w3,ror#5
1513     - add w7,w7,w13
1514     - mov d19,v0.d[1]
1515     - orr w12,w12,w15
1516     - eor w11,w11,w3,ror#19
1517     - ushr v6.4s,v4.4s,#7
1518     - eor w15,w7,w7,ror#11
1519     - ushr v5.4s,v4.4s,#3
1520     - add w6,w6,w12
1521     - add v1.4s,v1.4s,v7.4s
1522     - ror w11,w11,#6
1523     - sli v6.4s,v4.4s,#25
1524     - eor w13,w7,w8
1525     - eor w15,w15,w7,ror#20
1526     - ushr v7.4s,v4.4s,#18
1527     - add w6,w6,w11
1528     - ldr w12,[sp,#20]
1529     - and w14,w14,w13
1530     - eor v5.16b,v5.16b,v6.16b
1531     - ror w15,w15,#2
1532     - add w10,w10,w6
1533     - sli v7.4s,v4.4s,#14
1534     - eor w14,w14,w8
1535     - ushr v16.4s,v19.4s,#17
1536     - add w5,w5,w12
1537     - add w6,w6,w15
1538     - and w12,w3,w10
1539     - eor v5.16b,v5.16b,v7.16b
1540     - bic w15,w4,w10
1541     - eor w11,w10,w10,ror#5
1542     - sli v16.4s,v19.4s,#15
1543     - add w6,w6,w14
1544     - orr w12,w12,w15
1545     - ushr v17.4s,v19.4s,#10
1546     - eor w11,w11,w10,ror#19
1547     - eor w15,w6,w6,ror#11
1548     - ushr v7.4s,v19.4s,#19
1549     - add w5,w5,w12
1550     - ror w11,w11,#6
1551     - add v1.4s,v1.4s,v5.4s
1552     - eor w14,w6,w7
1553     - eor w15,w15,w6,ror#20
1554     - sli v7.4s,v19.4s,#13
1555     - add w5,w5,w11
1556     - ldr w12,[sp,#24]
1557     - and w13,w13,w14
1558     - eor v17.16b,v17.16b,v16.16b
1559     - ror w15,w15,#2
1560     - add w9,w9,w5
1561     - eor w13,w13,w7
1562     - eor v17.16b,v17.16b,v7.16b
1563     - add w4,w4,w12
1564     - add w5,w5,w15
1565     - and w12,w10,w9
1566     - add v1.4s,v1.4s,v17.4s
1567     - bic w15,w3,w9
1568     - eor w11,w9,w9,ror#5
1569     - add w5,w5,w13
1570     - ushr v18.4s,v1.4s,#17
1571     - orr w12,w12,w15
1572     - ushr v19.4s,v1.4s,#10
1573     - eor w11,w11,w9,ror#19
1574     - eor w15,w5,w5,ror#11
1575     - sli v18.4s,v1.4s,#15
1576     - add w4,w4,w12
1577     - ushr v17.4s,v1.4s,#19
1578     - ror w11,w11,#6
1579     - eor w13,w5,w6
1580     - eor v19.16b,v19.16b,v18.16b
1581     - eor w15,w15,w5,ror#20
1582     - add w4,w4,w11
1583     - sli v17.4s,v1.4s,#13
1584     - ldr w12,[sp,#28]
1585     - and w14,w14,w13
1586     - ror w15,w15,#2
1587     - ld1 {v4.4s},[x16], #16
1588     - add w8,w8,w4
1589     - eor v19.16b,v19.16b,v17.16b
1590     - eor w14,w14,w6
1591     - eor v17.16b,v17.16b,v17.16b
1592     - add w3,w3,w12
1593     - add w4,w4,w15
1594     - and w12,w9,w8
1595     - mov v17.d[1],v19.d[0]
1596     - bic w15,w10,w8
1597     - eor w11,w8,w8,ror#5
1598     - add w4,w4,w14
1599     - add v1.4s,v1.4s,v17.4s
1600     - orr w12,w12,w15
1601     - eor w11,w11,w8,ror#19
1602     - eor w15,w4,w4,ror#11
1603     - add v4.4s,v4.4s,v1.4s
1604     - add w3,w3,w12
1605     - ror w11,w11,#6
1606     - eor w14,w4,w5
1607     - eor w15,w15,w4,ror#20
1608     - add w3,w3,w11
1609     - ldr w12,[sp,#32]
1610     - and w13,w13,w14
1611     - ror w15,w15,#2
1612     - add w7,w7,w3
1613     - eor w13,w13,w5
1614     - st1 {v4.4s},[x17], #16
1615     - ext v4.16b,v2.16b,v3.16b,#4
1616     - add w10,w10,w12
1617     - add w3,w3,w15
1618     - and w12,w8,w7
1619     - bic w15,w9,w7
1620     - ext v7.16b,v0.16b,v1.16b,#4
1621     - eor w11,w7,w7,ror#5
1622     - add w3,w3,w13
1623     - mov d19,v1.d[1]
1624     - orr w12,w12,w15
1625     - eor w11,w11,w7,ror#19
1626     - ushr v6.4s,v4.4s,#7
1627     - eor w15,w3,w3,ror#11
1628     - ushr v5.4s,v4.4s,#3
1629     - add w10,w10,w12
1630     - add v2.4s,v2.4s,v7.4s
1631     - ror w11,w11,#6
1632     - sli v6.4s,v4.4s,#25
1633     - eor w13,w3,w4
1634     - eor w15,w15,w3,ror#20
1635     - ushr v7.4s,v4.4s,#18
1636     - add w10,w10,w11
1637     - ldr w12,[sp,#36]
1638     - and w14,w14,w13
1639     - eor v5.16b,v5.16b,v6.16b
1640     - ror w15,w15,#2
1641     - add w6,w6,w10
1642     - sli v7.4s,v4.4s,#14
1643     - eor w14,w14,w4
1644     - ushr v16.4s,v19.4s,#17
1645     - add w9,w9,w12
1646     - add w10,w10,w15
1647     - and w12,w7,w6
1648     - eor v5.16b,v5.16b,v7.16b
1649     - bic w15,w8,w6
1650     - eor w11,w6,w6,ror#5
1651     - sli v16.4s,v19.4s,#15
1652     - add w10,w10,w14
1653     - orr w12,w12,w15
1654     - ushr v17.4s,v19.4s,#10
1655     - eor w11,w11,w6,ror#19
1656     - eor w15,w10,w10,ror#11
1657     - ushr v7.4s,v19.4s,#19
1658     - add w9,w9,w12
1659     - ror w11,w11,#6
1660     - add v2.4s,v2.4s,v5.4s
1661     - eor w14,w10,w3
1662     - eor w15,w15,w10,ror#20
1663     - sli v7.4s,v19.4s,#13
1664     - add w9,w9,w11
1665     - ldr w12,[sp,#40]
1666     - and w13,w13,w14
1667     - eor v17.16b,v17.16b,v16.16b
1668     - ror w15,w15,#2
1669     - add w5,w5,w9
1670     - eor w13,w13,w3
1671     - eor v17.16b,v17.16b,v7.16b
1672     - add w8,w8,w12
1673     - add w9,w9,w15
1674     - and w12,w6,w5
1675     - add v2.4s,v2.4s,v17.4s
1676     - bic w15,w7,w5
1677     - eor w11,w5,w5,ror#5
1678     - add w9,w9,w13
1679     - ushr v18.4s,v2.4s,#17
1680     - orr w12,w12,w15
1681     - ushr v19.4s,v2.4s,#10
1682     - eor w11,w11,w5,ror#19
1683     - eor w15,w9,w9,ror#11
1684     - sli v18.4s,v2.4s,#15
1685     - add w8,w8,w12
1686     - ushr v17.4s,v2.4s,#19
1687     - ror w11,w11,#6
1688     - eor w13,w9,w10
1689     - eor v19.16b,v19.16b,v18.16b
1690     - eor w15,w15,w9,ror#20
1691     - add w8,w8,w11
1692     - sli v17.4s,v2.4s,#13
1693     - ldr w12,[sp,#44]
1694     - and w14,w14,w13
1695     - ror w15,w15,#2
1696     - ld1 {v4.4s},[x16], #16
1697     - add w4,w4,w8
1698     - eor v19.16b,v19.16b,v17.16b
1699     - eor w14,w14,w10
1700     - eor v17.16b,v17.16b,v17.16b
1701     - add w7,w7,w12
1702     - add w8,w8,w15
1703     - and w12,w5,w4
1704     - mov v17.d[1],v19.d[0]
1705     - bic w15,w6,w4
1706     - eor w11,w4,w4,ror#5
1707     - add w8,w8,w14
1708     - add v2.4s,v2.4s,v17.4s
1709     - orr w12,w12,w15
1710     - eor w11,w11,w4,ror#19
1711     - eor w15,w8,w8,ror#11
1712     - add v4.4s,v4.4s,v2.4s
1713     - add w7,w7,w12
1714     - ror w11,w11,#6
1715     - eor w14,w8,w9
1716     - eor w15,w15,w8,ror#20
1717     - add w7,w7,w11
1718     - ldr w12,[sp,#48]
1719     - and w13,w13,w14
1720     - ror w15,w15,#2
1721     - add w3,w3,w7
1722     - eor w13,w13,w9
1723     - st1 {v4.4s},[x17], #16
1724     - ext v4.16b,v3.16b,v0.16b,#4
1725     - add w6,w6,w12
1726     - add w7,w7,w15
1727     - and w12,w4,w3
1728     - bic w15,w5,w3
1729     - ext v7.16b,v1.16b,v2.16b,#4
1730     - eor w11,w3,w3,ror#5
1731     - add w7,w7,w13
1732     - mov d19,v2.d[1]
1733     - orr w12,w12,w15
1734     - eor w11,w11,w3,ror#19
1735     - ushr v6.4s,v4.4s,#7
1736     - eor w15,w7,w7,ror#11
1737     - ushr v5.4s,v4.4s,#3
1738     - add w6,w6,w12
1739     - add v3.4s,v3.4s,v7.4s
1740     - ror w11,w11,#6
1741     - sli v6.4s,v4.4s,#25
1742     - eor w13,w7,w8
1743     - eor w15,w15,w7,ror#20
1744     - ushr v7.4s,v4.4s,#18
1745     - add w6,w6,w11
1746     - ldr w12,[sp,#52]
1747     - and w14,w14,w13
1748     - eor v5.16b,v5.16b,v6.16b
1749     - ror w15,w15,#2
1750     - add w10,w10,w6
1751     - sli v7.4s,v4.4s,#14
1752     - eor w14,w14,w8
1753     - ushr v16.4s,v19.4s,#17
1754     - add w5,w5,w12
1755     - add w6,w6,w15
1756     - and w12,w3,w10
1757     - eor v5.16b,v5.16b,v7.16b
1758     - bic w15,w4,w10
1759     - eor w11,w10,w10,ror#5
1760     - sli v16.4s,v19.4s,#15
1761     - add w6,w6,w14
1762     - orr w12,w12,w15
1763     - ushr v17.4s,v19.4s,#10
1764     - eor w11,w11,w10,ror#19
1765     - eor w15,w6,w6,ror#11
1766     - ushr v7.4s,v19.4s,#19
1767     - add w5,w5,w12
1768     - ror w11,w11,#6
1769     - add v3.4s,v3.4s,v5.4s
1770     - eor w14,w6,w7
1771     - eor w15,w15,w6,ror#20
1772     - sli v7.4s,v19.4s,#13
1773     - add w5,w5,w11
1774     - ldr w12,[sp,#56]
1775     - and w13,w13,w14
1776     - eor v17.16b,v17.16b,v16.16b
1777     - ror w15,w15,#2
1778     - add w9,w9,w5
1779     - eor w13,w13,w7
1780     - eor v17.16b,v17.16b,v7.16b
1781     - add w4,w4,w12
1782     - add w5,w5,w15
1783     - and w12,w10,w9
1784     - add v3.4s,v3.4s,v17.4s
1785     - bic w15,w3,w9
1786     - eor w11,w9,w9,ror#5
1787     - add w5,w5,w13
1788     - ushr v18.4s,v3.4s,#17
1789     - orr w12,w12,w15
1790     - ushr v19.4s,v3.4s,#10
1791     - eor w11,w11,w9,ror#19
1792     - eor w15,w5,w5,ror#11
1793     - sli v18.4s,v3.4s,#15
1794     - add w4,w4,w12
1795     - ushr v17.4s,v3.4s,#19
1796     - ror w11,w11,#6
1797     - eor w13,w5,w6
1798     - eor v19.16b,v19.16b,v18.16b
1799     - eor w15,w15,w5,ror#20
1800     - add w4,w4,w11
1801     - sli v17.4s,v3.4s,#13
1802     - ldr w12,[sp,#60]
1803     - and w14,w14,w13
1804     - ror w15,w15,#2
1805     - ld1 {v4.4s},[x16], #16
1806     - add w8,w8,w4
1807     - eor v19.16b,v19.16b,v17.16b
1808     - eor w14,w14,w6
1809     - eor v17.16b,v17.16b,v17.16b
1810     - add w3,w3,w12
1811     - add w4,w4,w15
1812     - and w12,w9,w8
1813     - mov v17.d[1],v19.d[0]
1814     - bic w15,w10,w8
1815     - eor w11,w8,w8,ror#5
1816     - add w4,w4,w14
1817     - add v3.4s,v3.4s,v17.4s
1818     - orr w12,w12,w15
1819     - eor w11,w11,w8,ror#19
1820     - eor w15,w4,w4,ror#11
1821     - add v4.4s,v4.4s,v3.4s
1822     - add w3,w3,w12
1823     - ror w11,w11,#6
1824     - eor w14,w4,w5
1825     - eor w15,w15,w4,ror#20
1826     - add w3,w3,w11
1827     - ldr w12,[x16]
1828     - and w13,w13,w14
1829     - ror w15,w15,#2
1830     - add w7,w7,w3
1831     - eor w13,w13,w5
1832     - st1 {v4.4s},[x17], #16
1833     - cmp w12,#0 // check for K256 terminator
1834     - ldr w12,[sp,#0]
1835     - sub x17,x17,#64
1836     - bne .L_00_48
1837     -
1838     - sub x16,x16,#256 // rewind x16
1839     - cmp x1,x2
1840     - mov x17, #64
1841     - csel x17, x17, xzr, eq
1842     - sub x1,x1,x17 // avoid SEGV
1843     - mov x17,sp
1844     - add w10,w10,w12
1845     - add w3,w3,w15
1846     - and w12,w8,w7
1847     - ld1 {v0.16b},[x1],#16
1848     - bic w15,w9,w7
1849     - eor w11,w7,w7,ror#5
1850     - ld1 {v4.4s},[x16],#16
1851     - add w3,w3,w13
1852     - orr w12,w12,w15
1853     - eor w11,w11,w7,ror#19
1854     - eor w15,w3,w3,ror#11
1855     - rev32 v0.16b,v0.16b
1856     - add w10,w10,w12
1857     - ror w11,w11,#6
1858     - eor w13,w3,w4
1859     - eor w15,w15,w3,ror#20
1860     - add v4.4s,v4.4s,v0.4s
1861     - add w10,w10,w11
1862     - ldr w12,[sp,#4]
1863     - and w14,w14,w13
1864     - ror w15,w15,#2
1865     - add w6,w6,w10
1866     - eor w14,w14,w4
1867     - add w9,w9,w12
1868     - add w10,w10,w15
1869     - and w12,w7,w6
1870     - bic w15,w8,w6
1871     - eor w11,w6,w6,ror#5
1872     - add w10,w10,w14
1873     - orr w12,w12,w15
1874     - eor w11,w11,w6,ror#19
1875     - eor w15,w10,w10,ror#11
1876     - add w9,w9,w12
1877     - ror w11,w11,#6
1878     - eor w14,w10,w3
1879     - eor w15,w15,w10,ror#20
1880     - add w9,w9,w11
1881     - ldr w12,[sp,#8]
1882     - and w13,w13,w14
1883     - ror w15,w15,#2
1884     - add w5,w5,w9
1885     - eor w13,w13,w3
1886     - add w8,w8,w12
1887     - add w9,w9,w15
1888     - and w12,w6,w5
1889     - bic w15,w7,w5
1890     - eor w11,w5,w5,ror#5
1891     - add w9,w9,w13
1892     - orr w12,w12,w15
1893     - eor w11,w11,w5,ror#19
1894     - eor w15,w9,w9,ror#11
1895     - add w8,w8,w12
1896     - ror w11,w11,#6
1897     - eor w13,w9,w10
1898     - eor w15,w15,w9,ror#20
1899     - add w8,w8,w11
1900     - ldr w12,[sp,#12]
1901     - and w14,w14,w13
1902     - ror w15,w15,#2
1903     - add w4,w4,w8
1904     - eor w14,w14,w10
1905     - add w7,w7,w12
1906     - add w8,w8,w15
1907     - and w12,w5,w4
1908     - bic w15,w6,w4
1909     - eor w11,w4,w4,ror#5
1910     - add w8,w8,w14
1911     - orr w12,w12,w15
1912     - eor w11,w11,w4,ror#19
1913     - eor w15,w8,w8,ror#11
1914     - add w7,w7,w12
1915     - ror w11,w11,#6
1916     - eor w14,w8,w9
1917     - eor w15,w15,w8,ror#20
1918     - add w7,w7,w11
1919     - ldr w12,[sp,#16]
1920     - and w13,w13,w14
1921     - ror w15,w15,#2
1922     - add w3,w3,w7
1923     - eor w13,w13,w9
1924     - st1 {v4.4s},[x17], #16
1925     - add w6,w6,w12
1926     - add w7,w7,w15
1927     - and w12,w4,w3
1928     - ld1 {v1.16b},[x1],#16
1929     - bic w15,w5,w3
1930     - eor w11,w3,w3,ror#5
1931     - ld1 {v4.4s},[x16],#16
1932     - add w7,w7,w13
1933     - orr w12,w12,w15
1934     - eor w11,w11,w3,ror#19
1935     - eor w15,w7,w7,ror#11
1936     - rev32 v1.16b,v1.16b
1937     - add w6,w6,w12
1938     - ror w11,w11,#6
1939     - eor w13,w7,w8
1940     - eor w15,w15,w7,ror#20
1941     - add v4.4s,v4.4s,v1.4s
1942     - add w6,w6,w11
1943     - ldr w12,[sp,#20]
1944     - and w14,w14,w13
1945     - ror w15,w15,#2
1946     - add w10,w10,w6
1947     - eor w14,w14,w8
1948     - add w5,w5,w12
1949     - add w6,w6,w15
1950     - and w12,w3,w10
1951     - bic w15,w4,w10
1952     - eor w11,w10,w10,ror#5
1953     - add w6,w6,w14
1954     - orr w12,w12,w15
1955     - eor w11,w11,w10,ror#19
1956     - eor w15,w6,w6,ror#11
1957     - add w5,w5,w12
1958     - ror w11,w11,#6
1959     - eor w14,w6,w7
1960     - eor w15,w15,w6,ror#20
1961     - add w5,w5,w11
1962     - ldr w12,[sp,#24]
1963     - and w13,w13,w14
1964     - ror w15,w15,#2
1965     - add w9,w9,w5
1966     - eor w13,w13,w7
1967     - add w4,w4,w12
1968     - add w5,w5,w15
1969     - and w12,w10,w9
1970     - bic w15,w3,w9
1971     - eor w11,w9,w9,ror#5
1972     - add w5,w5,w13
1973     - orr w12,w12,w15
1974     - eor w11,w11,w9,ror#19
1975     - eor w15,w5,w5,ror#11
1976     - add w4,w4,w12
1977     - ror w11,w11,#6
1978     - eor w13,w5,w6
1979     - eor w15,w15,w5,ror#20
1980     - add w4,w4,w11
1981     - ldr w12,[sp,#28]
1982     - and w14,w14,w13
1983     - ror w15,w15,#2
1984     - add w8,w8,w4
1985     - eor w14,w14,w6
1986     - add w3,w3,w12
1987     - add w4,w4,w15
1988     - and w12,w9,w8
1989     - bic w15,w10,w8
1990     - eor w11,w8,w8,ror#5
1991     - add w4,w4,w14
1992     - orr w12,w12,w15
1993     - eor w11,w11,w8,ror#19
1994     - eor w15,w4,w4,ror#11
1995     - add w3,w3,w12
1996     - ror w11,w11,#6
1997     - eor w14,w4,w5
1998     - eor w15,w15,w4,ror#20
1999     - add w3,w3,w11
2000     - ldr w12,[sp,#32]
2001     - and w13,w13,w14
2002     - ror w15,w15,#2
2003     - add w7,w7,w3
2004     - eor w13,w13,w5
2005     - st1 {v4.4s},[x17], #16
2006     - add w10,w10,w12
2007     - add w3,w3,w15
2008     - and w12,w8,w7
2009     - ld1 {v2.16b},[x1],#16
2010     - bic w15,w9,w7
2011     - eor w11,w7,w7,ror#5
2012     - ld1 {v4.4s},[x16],#16
2013     - add w3,w3,w13
2014     - orr w12,w12,w15
2015     - eor w11,w11,w7,ror#19
2016     - eor w15,w3,w3,ror#11
2017     - rev32 v2.16b,v2.16b
2018     - add w10,w10,w12
2019     - ror w11,w11,#6
2020     - eor w13,w3,w4
2021     - eor w15,w15,w3,ror#20
2022     - add v4.4s,v4.4s,v2.4s
2023     - add w10,w10,w11
2024     - ldr w12,[sp,#36]
2025     - and w14,w14,w13
2026     - ror w15,w15,#2
2027     - add w6,w6,w10
2028     - eor w14,w14,w4
2029     - add w9,w9,w12
2030     - add w10,w10,w15
2031     - and w12,w7,w6
2032     - bic w15,w8,w6
2033     - eor w11,w6,w6,ror#5
2034     - add w10,w10,w14
2035     - orr w12,w12,w15
2036     - eor w11,w11,w6,ror#19
2037     - eor w15,w10,w10,ror#11
2038     - add w9,w9,w12
2039     - ror w11,w11,#6
2040     - eor w14,w10,w3
2041     - eor w15,w15,w10,ror#20
2042     - add w9,w9,w11
2043     - ldr w12,[sp,#40]
2044     - and w13,w13,w14
2045     - ror w15,w15,#2
2046     - add w5,w5,w9
2047     - eor w13,w13,w3
2048     - add w8,w8,w12
2049     - add w9,w9,w15
2050     - and w12,w6,w5
2051     - bic w15,w7,w5
2052     - eor w11,w5,w5,ror#5
2053     - add w9,w9,w13
2054     - orr w12,w12,w15
2055     - eor w11,w11,w5,ror#19
2056     - eor w15,w9,w9,ror#11
2057     - add w8,w8,w12
2058     - ror w11,w11,#6
2059     - eor w13,w9,w10
2060     - eor w15,w15,w9,ror#20
2061     - add w8,w8,w11
2062     - ldr w12,[sp,#44]
2063     - and w14,w14,w13
2064     - ror w15,w15,#2
2065     - add w4,w4,w8
2066     - eor w14,w14,w10
2067     - add w7,w7,w12
2068     - add w8,w8,w15
2069     - and w12,w5,w4
2070     - bic w15,w6,w4
2071     - eor w11,w4,w4,ror#5
2072     - add w8,w8,w14
2073     - orr w12,w12,w15
2074     - eor w11,w11,w4,ror#19
2075     - eor w15,w8,w8,ror#11
2076     - add w7,w7,w12
2077     - ror w11,w11,#6
2078     - eor w14,w8,w9
2079     - eor w15,w15,w8,ror#20
2080     - add w7,w7,w11
2081     - ldr w12,[sp,#48]
2082     - and w13,w13,w14
2083     - ror w15,w15,#2
2084     - add w3,w3,w7
2085     - eor w13,w13,w9
2086     - st1 {v4.4s},[x17], #16
2087     - add w6,w6,w12
2088     - add w7,w7,w15
2089     - and w12,w4,w3
2090     - ld1 {v3.16b},[x1],#16
2091     - bic w15,w5,w3
2092     - eor w11,w3,w3,ror#5
2093     - ld1 {v4.4s},[x16],#16
2094     - add w7,w7,w13
2095     - orr w12,w12,w15
2096     - eor w11,w11,w3,ror#19
2097     - eor w15,w7,w7,ror#11
2098     - rev32 v3.16b,v3.16b
2099     - add w6,w6,w12
2100     - ror w11,w11,#6
2101     - eor w13,w7,w8
2102     - eor w15,w15,w7,ror#20
2103     - add v4.4s,v4.4s,v3.4s
2104     - add w6,w6,w11
2105     - ldr w12,[sp,#52]
2106     - and w14,w14,w13
2107     - ror w15,w15,#2
2108     - add w10,w10,w6
2109     - eor w14,w14,w8
2110     - add w5,w5,w12
2111     - add w6,w6,w15
2112     - and w12,w3,w10
2113     - bic w15,w4,w10
2114     - eor w11,w10,w10,ror#5
2115     - add w6,w6,w14
2116     - orr w12,w12,w15
2117     - eor w11,w11,w10,ror#19
2118     - eor w15,w6,w6,ror#11
2119     - add w5,w5,w12
2120     - ror w11,w11,#6
2121     - eor w14,w6,w7
2122     - eor w15,w15,w6,ror#20
2123     - add w5,w5,w11
2124     - ldr w12,[sp,#56]
2125     - and w13,w13,w14
2126     - ror w15,w15,#2
2127     - add w9,w9,w5
2128     - eor w13,w13,w7
2129     - add w4,w4,w12
2130     - add w5,w5,w15
2131     - and w12,w10,w9
2132     - bic w15,w3,w9
2133     - eor w11,w9,w9,ror#5
2134     - add w5,w5,w13
2135     - orr w12,w12,w15
2136     - eor w11,w11,w9,ror#19
2137     - eor w15,w5,w5,ror#11
2138     - add w4,w4,w12
2139     - ror w11,w11,#6
2140     - eor w13,w5,w6
2141     - eor w15,w15,w5,ror#20
2142     - add w4,w4,w11
2143     - ldr w12,[sp,#60]
2144     - and w14,w14,w13
2145     - ror w15,w15,#2
2146     - add w8,w8,w4
2147     - eor w14,w14,w6
2148     - add w3,w3,w12
2149     - add w4,w4,w15
2150     - and w12,w9,w8
2151     - bic w15,w10,w8
2152     - eor w11,w8,w8,ror#5
2153     - add w4,w4,w14
2154     - orr w12,w12,w15
2155     - eor w11,w11,w8,ror#19
2156     - eor w15,w4,w4,ror#11
2157     - add w3,w3,w12
2158     - ror w11,w11,#6
2159     - eor w14,w4,w5
2160     - eor w15,w15,w4,ror#20
2161     - add w3,w3,w11
2162     - and w13,w13,w14
2163     - ror w15,w15,#2
2164     - add w7,w7,w3
2165     - eor w13,w13,w5
2166     - st1 {v4.4s},[x17], #16
2167     - add w3,w3,w15 // h+=Sigma0(a) from the past
2168     - ldp w11,w12,[x0,#0]
2169     - add w3,w3,w13 // h+=Maj(a,b,c) from the past
2170     - ldp w13,w14,[x0,#8]
2171     - add w3,w3,w11 // accumulate
2172     - add w4,w4,w12
2173     - ldp w11,w12,[x0,#16]
2174     - add w5,w5,w13
2175     - add w6,w6,w14
2176     - ldp w13,w14,[x0,#24]
2177     - add w7,w7,w11
2178     - add w8,w8,w12
2179     - ldr w12,[sp,#0]
2180     - stp w3,w4,[x0,#0]
2181     - add w9,w9,w13
2182     - mov w13,wzr
2183     - stp w5,w6,[x0,#8]
2184     - add w10,w10,w14
2185     - stp w7,w8,[x0,#16]
2186     - eor w14,w4,w5
2187     - stp w9,w10,[x0,#24]
2188     - mov w15,wzr
2189     - mov x17,sp
2190     - b.ne .L_00_48
2191     -
2192     - ldr x29,[x29]
2193     - add sp,sp,#16*4+16
2194     - ret
2195     -.size sha256_block_neon,.-sha256_block_neon
2196     -#ifndef __KERNEL__
2197     -.comm OPENSSL_armcap_P,4,4
2198     -#endif
2199     diff --git a/arch/arm64/crypto/sha512-core.S b/arch/arm64/crypto/sha512-core.S
2200     deleted file mode 100644
2201     index bd0f59f06c9d..000000000000
2202     --- a/arch/arm64/crypto/sha512-core.S
2203     +++ /dev/null
2204     @@ -1,1085 +0,0 @@
2205     -// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
2206     -//
2207     -// Licensed under the OpenSSL license (the "License"). You may not use
2208     -// this file except in compliance with the License. You can obtain a copy
2209     -// in the file LICENSE in the source distribution or at
2210     -// https://www.openssl.org/source/license.html
2211     -
2212     -// ====================================================================
2213     -// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
2214     -// project. The module is, however, dual licensed under OpenSSL and
2215     -// CRYPTOGAMS licenses depending on where you obtain it. For further
2216     -// details see http://www.openssl.org/~appro/cryptogams/.
2217     -//
2218     -// Permission to use under GPLv2 terms is granted.
2219     -// ====================================================================
2220     -//
2221     -// SHA256/512 for ARMv8.
2222     -//
2223     -// Performance in cycles per processed byte and improvement coefficient
2224     -// over code generated with "default" compiler:
2225     -//
2226     -// SHA256-hw SHA256(*) SHA512
2227     -// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**))
2228     -// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***))
2229     -// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***))
2230     -// Denver 2.01 10.5 (+26%) 6.70 (+8%)
2231     -// X-Gene 20.0 (+100%) 12.8 (+300%(***))
2232     -// Mongoose 2.36 13.0 (+50%) 8.36 (+33%)
2233     -//
2234     -// (*) Software SHA256 results are of lesser relevance, presented
2235     -// mostly for informational purposes.
2236     -// (**) The result is a trade-off: it's possible to improve it by
2237     -// 10% (or by 1 cycle per round), but at the cost of 20% loss
2238     -// on Cortex-A53 (or by 4 cycles per round).
2239     -// (***) Super-impressive coefficients over gcc-generated code are
2240     -// indication of some compiler "pathology", most notably code
2241     -// generated with -mgeneral-regs-only is significanty faster
2242     -// and the gap is only 40-90%.
2243     -//
2244     -// October 2016.
2245     -//
2246     -// Originally it was reckoned that it makes no sense to implement NEON
2247     -// version of SHA256 for 64-bit processors. This is because performance
2248     -// improvement on most wide-spread Cortex-A5x processors was observed
2249     -// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was
2250     -// observed that 32-bit NEON SHA256 performs significantly better than
2251     -// 64-bit scalar version on *some* of the more recent processors. As
2252     -// result 64-bit NEON version of SHA256 was added to provide best
2253     -// all-round performance. For example it executes ~30% faster on X-Gene
2254     -// and Mongoose. [For reference, NEON version of SHA512 is bound to
2255     -// deliver much less improvement, likely *negative* on Cortex-A5x.
2256     -// Which is why NEON support is limited to SHA256.]
2257     -
2258     -#ifndef __KERNEL__
2259     -# include "arm_arch.h"
2260     -#endif
2261     -
2262     -.text
2263     -
2264     -.extern OPENSSL_armcap_P
2265     -.globl sha512_block_data_order
2266     -.type sha512_block_data_order,%function
2267     -.align 6
2268     -sha512_block_data_order:
2269     - stp x29,x30,[sp,#-128]!
2270     - add x29,sp,#0
2271     -
2272     - stp x19,x20,[sp,#16]
2273     - stp x21,x22,[sp,#32]
2274     - stp x23,x24,[sp,#48]
2275     - stp x25,x26,[sp,#64]
2276     - stp x27,x28,[sp,#80]
2277     - sub sp,sp,#4*8
2278     -
2279     - ldp x20,x21,[x0] // load context
2280     - ldp x22,x23,[x0,#2*8]
2281     - ldp x24,x25,[x0,#4*8]
2282     - add x2,x1,x2,lsl#7 // end of input
2283     - ldp x26,x27,[x0,#6*8]
2284     - adr x30,.LK512
2285     - stp x0,x2,[x29,#96]
2286     -
2287     -.Loop:
2288     - ldp x3,x4,[x1],#2*8
2289     - ldr x19,[x30],#8 // *K++
2290     - eor x28,x21,x22 // magic seed
2291     - str x1,[x29,#112]
2292     -#ifndef __AARCH64EB__
2293     - rev x3,x3 // 0
2294     -#endif
2295     - ror x16,x24,#14
2296     - add x27,x27,x19 // h+=K[i]
2297     - eor x6,x24,x24,ror#23
2298     - and x17,x25,x24
2299     - bic x19,x26,x24
2300     - add x27,x27,x3 // h+=X[i]
2301     - orr x17,x17,x19 // Ch(e,f,g)
2302     - eor x19,x20,x21 // a^b, b^c in next round
2303     - eor x16,x16,x6,ror#18 // Sigma1(e)
2304     - ror x6,x20,#28
2305     - add x27,x27,x17 // h+=Ch(e,f,g)
2306     - eor x17,x20,x20,ror#5
2307     - add x27,x27,x16 // h+=Sigma1(e)
2308     - and x28,x28,x19 // (b^c)&=(a^b)
2309     - add x23,x23,x27 // d+=h
2310     - eor x28,x28,x21 // Maj(a,b,c)
2311     - eor x17,x6,x17,ror#34 // Sigma0(a)
2312     - add x27,x27,x28 // h+=Maj(a,b,c)
2313     - ldr x28,[x30],#8 // *K++, x19 in next round
2314     - //add x27,x27,x17 // h+=Sigma0(a)
2315     -#ifndef __AARCH64EB__
2316     - rev x4,x4 // 1
2317     -#endif
2318     - ldp x5,x6,[x1],#2*8
2319     - add x27,x27,x17 // h+=Sigma0(a)
2320     - ror x16,x23,#14
2321     - add x26,x26,x28 // h+=K[i]
2322     - eor x7,x23,x23,ror#23
2323     - and x17,x24,x23
2324     - bic x28,x25,x23
2325     - add x26,x26,x4 // h+=X[i]
2326     - orr x17,x17,x28 // Ch(e,f,g)
2327     - eor x28,x27,x20 // a^b, b^c in next round
2328     - eor x16,x16,x7,ror#18 // Sigma1(e)
2329     - ror x7,x27,#28
2330     - add x26,x26,x17 // h+=Ch(e,f,g)
2331     - eor x17,x27,x27,ror#5
2332     - add x26,x26,x16 // h+=Sigma1(e)
2333     - and x19,x19,x28 // (b^c)&=(a^b)
2334     - add x22,x22,x26 // d+=h
2335     - eor x19,x19,x20 // Maj(a,b,c)
2336     - eor x17,x7,x17,ror#34 // Sigma0(a)
2337     - add x26,x26,x19 // h+=Maj(a,b,c)
2338     - ldr x19,[x30],#8 // *K++, x28 in next round
2339     - //add x26,x26,x17 // h+=Sigma0(a)
2340     -#ifndef __AARCH64EB__
2341     - rev x5,x5 // 2
2342     -#endif
2343     - add x26,x26,x17 // h+=Sigma0(a)
2344     - ror x16,x22,#14
2345     - add x25,x25,x19 // h+=K[i]
2346     - eor x8,x22,x22,ror#23
2347     - and x17,x23,x22
2348     - bic x19,x24,x22
2349     - add x25,x25,x5 // h+=X[i]
2350     - orr x17,x17,x19 // Ch(e,f,g)
2351     - eor x19,x26,x27 // a^b, b^c in next round
2352     - eor x16,x16,x8,ror#18 // Sigma1(e)
2353     - ror x8,x26,#28
2354     - add x25,x25,x17 // h+=Ch(e,f,g)
2355     - eor x17,x26,x26,ror#5
2356     - add x25,x25,x16 // h+=Sigma1(e)
2357     - and x28,x28,x19 // (b^c)&=(a^b)
2358     - add x21,x21,x25 // d+=h
2359     - eor x28,x28,x27 // Maj(a,b,c)
2360     - eor x17,x8,x17,ror#34 // Sigma0(a)
2361     - add x25,x25,x28 // h+=Maj(a,b,c)
2362     - ldr x28,[x30],#8 // *K++, x19 in next round
2363     - //add x25,x25,x17 // h+=Sigma0(a)
2364     -#ifndef __AARCH64EB__
2365     - rev x6,x6 // 3
2366     -#endif
2367     - ldp x7,x8,[x1],#2*8
2368     - add x25,x25,x17 // h+=Sigma0(a)
2369     - ror x16,x21,#14
2370     - add x24,x24,x28 // h+=K[i]
2371     - eor x9,x21,x21,ror#23
2372     - and x17,x22,x21
2373     - bic x28,x23,x21
2374     - add x24,x24,x6 // h+=X[i]
2375     - orr x17,x17,x28 // Ch(e,f,g)
2376     - eor x28,x25,x26 // a^b, b^c in next round
2377     - eor x16,x16,x9,ror#18 // Sigma1(e)
2378     - ror x9,x25,#28
2379     - add x24,x24,x17 // h+=Ch(e,f,g)
2380     - eor x17,x25,x25,ror#5
2381     - add x24,x24,x16 // h+=Sigma1(e)
2382     - and x19,x19,x28 // (b^c)&=(a^b)
2383     - add x20,x20,x24 // d+=h
2384     - eor x19,x19,x26 // Maj(a,b,c)
2385     - eor x17,x9,x17,ror#34 // Sigma0(a)
2386     - add x24,x24,x19 // h+=Maj(a,b,c)
2387     - ldr x19,[x30],#8 // *K++, x28 in next round
2388     - //add x24,x24,x17 // h+=Sigma0(a)
2389     -#ifndef __AARCH64EB__
2390     - rev x7,x7 // 4
2391     -#endif
2392     - add x24,x24,x17 // h+=Sigma0(a)
2393     - ror x16,x20,#14
2394     - add x23,x23,x19 // h+=K[i]
2395     - eor x10,x20,x20,ror#23
2396     - and x17,x21,x20
2397     - bic x19,x22,x20
2398     - add x23,x23,x7 // h+=X[i]
2399     - orr x17,x17,x19 // Ch(e,f,g)
2400     - eor x19,x24,x25 // a^b, b^c in next round
2401     - eor x16,x16,x10,ror#18 // Sigma1(e)
2402     - ror x10,x24,#28
2403     - add x23,x23,x17 // h+=Ch(e,f,g)
2404     - eor x17,x24,x24,ror#5
2405     - add x23,x23,x16 // h+=Sigma1(e)
2406     - and x28,x28,x19 // (b^c)&=(a^b)
2407     - add x27,x27,x23 // d+=h
2408     - eor x28,x28,x25 // Maj(a,b,c)
2409     - eor x17,x10,x17,ror#34 // Sigma0(a)
2410     - add x23,x23,x28 // h+=Maj(a,b,c)
2411     - ldr x28,[x30],#8 // *K++, x19 in next round
2412     - //add x23,x23,x17 // h+=Sigma0(a)
2413     -#ifndef __AARCH64EB__
2414     - rev x8,x8 // 5
2415     -#endif
2416     - ldp x9,x10,[x1],#2*8
2417     - add x23,x23,x17 // h+=Sigma0(a)
2418     - ror x16,x27,#14
2419     - add x22,x22,x28 // h+=K[i]
2420     - eor x11,x27,x27,ror#23
2421     - and x17,x20,x27
2422     - bic x28,x21,x27
2423     - add x22,x22,x8 // h+=X[i]
2424     - orr x17,x17,x28 // Ch(e,f,g)
2425     - eor x28,x23,x24 // a^b, b^c in next round
2426     - eor x16,x16,x11,ror#18 // Sigma1(e)
2427     - ror x11,x23,#28
2428     - add x22,x22,x17 // h+=Ch(e,f,g)
2429     - eor x17,x23,x23,ror#5
2430     - add x22,x22,x16 // h+=Sigma1(e)
2431     - and x19,x19,x28 // (b^c)&=(a^b)
2432     - add x26,x26,x22 // d+=h
2433     - eor x19,x19,x24 // Maj(a,b,c)
2434     - eor x17,x11,x17,ror#34 // Sigma0(a)
2435     - add x22,x22,x19 // h+=Maj(a,b,c)
2436     - ldr x19,[x30],#8 // *K++, x28 in next round
2437     - //add x22,x22,x17 // h+=Sigma0(a)
2438     -#ifndef __AARCH64EB__
2439     - rev x9,x9 // 6
2440     -#endif
2441     - add x22,x22,x17 // h+=Sigma0(a)
2442     - ror x16,x26,#14
2443     - add x21,x21,x19 // h+=K[i]
2444     - eor x12,x26,x26,ror#23
2445     - and x17,x27,x26
2446     - bic x19,x20,x26
2447     - add x21,x21,x9 // h+=X[i]
2448     - orr x17,x17,x19 // Ch(e,f,g)
2449     - eor x19,x22,x23 // a^b, b^c in next round
2450     - eor x16,x16,x12,ror#18 // Sigma1(e)
2451     - ror x12,x22,#28
2452     - add x21,x21,x17 // h+=Ch(e,f,g)
2453     - eor x17,x22,x22,ror#5
2454     - add x21,x21,x16 // h+=Sigma1(e)
2455     - and x28,x28,x19 // (b^c)&=(a^b)
2456     - add x25,x25,x21 // d+=h
2457     - eor x28,x28,x23 // Maj(a,b,c)
2458     - eor x17,x12,x17,ror#34 // Sigma0(a)
2459     - add x21,x21,x28 // h+=Maj(a,b,c)
2460     - ldr x28,[x30],#8 // *K++, x19 in next round
2461     - //add x21,x21,x17 // h+=Sigma0(a)
2462     -#ifndef __AARCH64EB__
2463     - rev x10,x10 // 7
2464     -#endif
2465     - ldp x11,x12,[x1],#2*8
2466     - add x21,x21,x17 // h+=Sigma0(a)
2467     - ror x16,x25,#14
2468     - add x20,x20,x28 // h+=K[i]
2469     - eor x13,x25,x25,ror#23
2470     - and x17,x26,x25
2471     - bic x28,x27,x25
2472     - add x20,x20,x10 // h+=X[i]
2473     - orr x17,x17,x28 // Ch(e,f,g)
2474     - eor x28,x21,x22 // a^b, b^c in next round
2475     - eor x16,x16,x13,ror#18 // Sigma1(e)
2476     - ror x13,x21,#28
2477     - add x20,x20,x17 // h+=Ch(e,f,g)
2478     - eor x17,x21,x21,ror#5
2479     - add x20,x20,x16 // h+=Sigma1(e)
2480     - and x19,x19,x28 // (b^c)&=(a^b)
2481     - add x24,x24,x20 // d+=h
2482     - eor x19,x19,x22 // Maj(a,b,c)
2483     - eor x17,x13,x17,ror#34 // Sigma0(a)
2484     - add x20,x20,x19 // h+=Maj(a,b,c)
2485     - ldr x19,[x30],#8 // *K++, x28 in next round
2486     - //add x20,x20,x17 // h+=Sigma0(a)
2487     -#ifndef __AARCH64EB__
2488     - rev x11,x11 // 8
2489     -#endif
2490     - add x20,x20,x17 // h+=Sigma0(a)
2491     - ror x16,x24,#14
2492     - add x27,x27,x19 // h+=K[i]
2493     - eor x14,x24,x24,ror#23
2494     - and x17,x25,x24
2495     - bic x19,x26,x24
2496     - add x27,x27,x11 // h+=X[i]
2497     - orr x17,x17,x19 // Ch(e,f,g)
2498     - eor x19,x20,x21 // a^b, b^c in next round
2499     - eor x16,x16,x14,ror#18 // Sigma1(e)
2500     - ror x14,x20,#28
2501     - add x27,x27,x17 // h+=Ch(e,f,g)
2502     - eor x17,x20,x20,ror#5
2503     - add x27,x27,x16 // h+=Sigma1(e)
2504     - and x28,x28,x19 // (b^c)&=(a^b)
2505     - add x23,x23,x27 // d+=h
2506     - eor x28,x28,x21 // Maj(a,b,c)
2507     - eor x17,x14,x17,ror#34 // Sigma0(a)
2508     - add x27,x27,x28 // h+=Maj(a,b,c)
2509     - ldr x28,[x30],#8 // *K++, x19 in next round
2510     - //add x27,x27,x17 // h+=Sigma0(a)
2511     -#ifndef __AARCH64EB__
2512     - rev x12,x12 // 9
2513     -#endif
2514     - ldp x13,x14,[x1],#2*8
2515     - add x27,x27,x17 // h+=Sigma0(a)
2516     - ror x16,x23,#14
2517     - add x26,x26,x28 // h+=K[i]
2518     - eor x15,x23,x23,ror#23
2519     - and x17,x24,x23
2520     - bic x28,x25,x23
2521     - add x26,x26,x12 // h+=X[i]
2522     - orr x17,x17,x28 // Ch(e,f,g)
2523     - eor x28,x27,x20 // a^b, b^c in next round
2524     - eor x16,x16,x15,ror#18 // Sigma1(e)
2525     - ror x15,x27,#28
2526     - add x26,x26,x17 // h+=Ch(e,f,g)
2527     - eor x17,x27,x27,ror#5
2528     - add x26,x26,x16 // h+=Sigma1(e)
2529     - and x19,x19,x28 // (b^c)&=(a^b)
2530     - add x22,x22,x26 // d+=h
2531     - eor x19,x19,x20 // Maj(a,b,c)
2532     - eor x17,x15,x17,ror#34 // Sigma0(a)
2533     - add x26,x26,x19 // h+=Maj(a,b,c)
2534     - ldr x19,[x30],#8 // *K++, x28 in next round
2535     - //add x26,x26,x17 // h+=Sigma0(a)
2536     -#ifndef __AARCH64EB__
2537     - rev x13,x13 // 10
2538     -#endif
2539     - add x26,x26,x17 // h+=Sigma0(a)
2540     - ror x16,x22,#14
2541     - add x25,x25,x19 // h+=K[i]
2542     - eor x0,x22,x22,ror#23
2543     - and x17,x23,x22
2544     - bic x19,x24,x22
2545     - add x25,x25,x13 // h+=X[i]
2546     - orr x17,x17,x19 // Ch(e,f,g)
2547     - eor x19,x26,x27 // a^b, b^c in next round
2548     - eor x16,x16,x0,ror#18 // Sigma1(e)
2549     - ror x0,x26,#28
2550     - add x25,x25,x17 // h+=Ch(e,f,g)
2551     - eor x17,x26,x26,ror#5
2552     - add x25,x25,x16 // h+=Sigma1(e)
2553     - and x28,x28,x19 // (b^c)&=(a^b)
2554     - add x21,x21,x25 // d+=h
2555     - eor x28,x28,x27 // Maj(a,b,c)
2556     - eor x17,x0,x17,ror#34 // Sigma0(a)
2557     - add x25,x25,x28 // h+=Maj(a,b,c)
2558     - ldr x28,[x30],#8 // *K++, x19 in next round
2559     - //add x25,x25,x17 // h+=Sigma0(a)
2560     -#ifndef __AARCH64EB__
2561     - rev x14,x14 // 11
2562     -#endif
2563     - ldp x15,x0,[x1],#2*8
2564     - add x25,x25,x17 // h+=Sigma0(a)
2565     - str x6,[sp,#24]
2566     - ror x16,x21,#14
2567     - add x24,x24,x28 // h+=K[i]
2568     - eor x6,x21,x21,ror#23
2569     - and x17,x22,x21
2570     - bic x28,x23,x21
2571     - add x24,x24,x14 // h+=X[i]
2572     - orr x17,x17,x28 // Ch(e,f,g)
2573     - eor x28,x25,x26 // a^b, b^c in next round
2574     - eor x16,x16,x6,ror#18 // Sigma1(e)
2575     - ror x6,x25,#28
2576     - add x24,x24,x17 // h+=Ch(e,f,g)
2577     - eor x17,x25,x25,ror#5
2578     - add x24,x24,x16 // h+=Sigma1(e)
2579     - and x19,x19,x28 // (b^c)&=(a^b)
2580     - add x20,x20,x24 // d+=h
2581     - eor x19,x19,x26 // Maj(a,b,c)
2582     - eor x17,x6,x17,ror#34 // Sigma0(a)
2583     - add x24,x24,x19 // h+=Maj(a,b,c)
2584     - ldr x19,[x30],#8 // *K++, x28 in next round
2585     - //add x24,x24,x17 // h+=Sigma0(a)
2586     -#ifndef __AARCH64EB__
2587     - rev x15,x15 // 12
2588     -#endif
2589     - add x24,x24,x17 // h+=Sigma0(a)
2590     - str x7,[sp,#0]
2591     - ror x16,x20,#14
2592     - add x23,x23,x19 // h+=K[i]
2593     - eor x7,x20,x20,ror#23
2594     - and x17,x21,x20
2595     - bic x19,x22,x20
2596     - add x23,x23,x15 // h+=X[i]
2597     - orr x17,x17,x19 // Ch(e,f,g)
2598     - eor x19,x24,x25 // a^b, b^c in next round
2599     - eor x16,x16,x7,ror#18 // Sigma1(e)
2600     - ror x7,x24,#28
2601     - add x23,x23,x17 // h+=Ch(e,f,g)
2602     - eor x17,x24,x24,ror#5
2603     - add x23,x23,x16 // h+=Sigma1(e)
2604     - and x28,x28,x19 // (b^c)&=(a^b)
2605     - add x27,x27,x23 // d+=h
2606     - eor x28,x28,x25 // Maj(a,b,c)
2607     - eor x17,x7,x17,ror#34 // Sigma0(a)
2608     - add x23,x23,x28 // h+=Maj(a,b,c)
2609     - ldr x28,[x30],#8 // *K++, x19 in next round
2610     - //add x23,x23,x17 // h+=Sigma0(a)
2611     -#ifndef __AARCH64EB__
2612     - rev x0,x0 // 13
2613     -#endif
2614     - ldp x1,x2,[x1]
2615     - add x23,x23,x17 // h+=Sigma0(a)
2616     - str x8,[sp,#8]
2617     - ror x16,x27,#14
2618     - add x22,x22,x28 // h+=K[i]
2619     - eor x8,x27,x27,ror#23
2620     - and x17,x20,x27
2621     - bic x28,x21,x27
2622     - add x22,x22,x0 // h+=X[i]
2623     - orr x17,x17,x28 // Ch(e,f,g)
2624     - eor x28,x23,x24 // a^b, b^c in next round
2625     - eor x16,x16,x8,ror#18 // Sigma1(e)
2626     - ror x8,x23,#28
2627     - add x22,x22,x17 // h+=Ch(e,f,g)
2628     - eor x17,x23,x23,ror#5
2629     - add x22,x22,x16 // h+=Sigma1(e)
2630     - and x19,x19,x28 // (b^c)&=(a^b)
2631     - add x26,x26,x22 // d+=h
2632     - eor x19,x19,x24 // Maj(a,b,c)
2633     - eor x17,x8,x17,ror#34 // Sigma0(a)
2634     - add x22,x22,x19 // h+=Maj(a,b,c)
2635     - ldr x19,[x30],#8 // *K++, x28 in next round
2636     - //add x22,x22,x17 // h+=Sigma0(a)
2637     -#ifndef __AARCH64EB__
2638     - rev x1,x1 // 14
2639     -#endif
2640     - ldr x6,[sp,#24]
2641     - add x22,x22,x17 // h+=Sigma0(a)
2642     - str x9,[sp,#16]
2643     - ror x16,x26,#14
2644     - add x21,x21,x19 // h+=K[i]
2645     - eor x9,x26,x26,ror#23
2646     - and x17,x27,x26
2647     - bic x19,x20,x26
2648     - add x21,x21,x1 // h+=X[i]
2649     - orr x17,x17,x19 // Ch(e,f,g)
2650     - eor x19,x22,x23 // a^b, b^c in next round
2651     - eor x16,x16,x9,ror#18 // Sigma1(e)
2652     - ror x9,x22,#28
2653     - add x21,x21,x17 // h+=Ch(e,f,g)
2654     - eor x17,x22,x22,ror#5
2655     - add x21,x21,x16 // h+=Sigma1(e)
2656     - and x28,x28,x19 // (b^c)&=(a^b)
2657     - add x25,x25,x21 // d+=h
2658     - eor x28,x28,x23 // Maj(a,b,c)
2659     - eor x17,x9,x17,ror#34 // Sigma0(a)
2660     - add x21,x21,x28 // h+=Maj(a,b,c)
2661     - ldr x28,[x30],#8 // *K++, x19 in next round
2662     - //add x21,x21,x17 // h+=Sigma0(a)
2663     -#ifndef __AARCH64EB__
2664     - rev x2,x2 // 15
2665     -#endif
2666     - ldr x7,[sp,#0]
2667     - add x21,x21,x17 // h+=Sigma0(a)
2668     - str x10,[sp,#24]
2669     - ror x16,x25,#14
2670     - add x20,x20,x28 // h+=K[i]
2671     - ror x9,x4,#1
2672     - and x17,x26,x25
2673     - ror x8,x1,#19
2674     - bic x28,x27,x25
2675     - ror x10,x21,#28
2676     - add x20,x20,x2 // h+=X[i]
2677     - eor x16,x16,x25,ror#18
2678     - eor x9,x9,x4,ror#8
2679     - orr x17,x17,x28 // Ch(e,f,g)
2680     - eor x28,x21,x22 // a^b, b^c in next round
2681     - eor x16,x16,x25,ror#41 // Sigma1(e)
2682     - eor x10,x10,x21,ror#34
2683     - add x20,x20,x17 // h+=Ch(e,f,g)
2684     - and x19,x19,x28 // (b^c)&=(a^b)
2685     - eor x8,x8,x1,ror#61
2686     - eor x9,x9,x4,lsr#7 // sigma0(X[i+1])
2687     - add x20,x20,x16 // h+=Sigma1(e)
2688     - eor x19,x19,x22 // Maj(a,b,c)
2689     - eor x17,x10,x21,ror#39 // Sigma0(a)
2690     - eor x8,x8,x1,lsr#6 // sigma1(X[i+14])
2691     - add x3,x3,x12
2692     - add x24,x24,x20 // d+=h
2693     - add x20,x20,x19 // h+=Maj(a,b,c)
2694     - ldr x19,[x30],#8 // *K++, x28 in next round
2695     - add x3,x3,x9
2696     - add x20,x20,x17 // h+=Sigma0(a)
2697     - add x3,x3,x8
2698     -.Loop_16_xx:
2699     - ldr x8,[sp,#8]
2700     - str x11,[sp,#0]
2701     - ror x16,x24,#14
2702     - add x27,x27,x19 // h+=K[i]
2703     - ror x10,x5,#1
2704     - and x17,x25,x24
2705     - ror x9,x2,#19
2706     - bic x19,x26,x24
2707     - ror x11,x20,#28
2708     - add x27,x27,x3 // h+=X[i]
2709     - eor x16,x16,x24,ror#18
2710     - eor x10,x10,x5,ror#8
2711     - orr x17,x17,x19 // Ch(e,f,g)
2712     - eor x19,x20,x21 // a^b, b^c in next round
2713     - eor x16,x16,x24,ror#41 // Sigma1(e)
2714     - eor x11,x11,x20,ror#34
2715     - add x27,x27,x17 // h+=Ch(e,f,g)
2716     - and x28,x28,x19 // (b^c)&=(a^b)
2717     - eor x9,x9,x2,ror#61
2718     - eor x10,x10,x5,lsr#7 // sigma0(X[i+1])
2719     - add x27,x27,x16 // h+=Sigma1(e)
2720     - eor x28,x28,x21 // Maj(a,b,c)
2721     - eor x17,x11,x20,ror#39 // Sigma0(a)
2722     - eor x9,x9,x2,lsr#6 // sigma1(X[i+14])
2723     - add x4,x4,x13
2724     - add x23,x23,x27 // d+=h
2725     - add x27,x27,x28 // h+=Maj(a,b,c)
2726     - ldr x28,[x30],#8 // *K++, x19 in next round
2727     - add x4,x4,x10
2728     - add x27,x27,x17 // h+=Sigma0(a)
2729     - add x4,x4,x9
2730     - ldr x9,[sp,#16]
2731     - str x12,[sp,#8]
2732     - ror x16,x23,#14
2733     - add x26,x26,x28 // h+=K[i]
2734     - ror x11,x6,#1
2735     - and x17,x24,x23
2736     - ror x10,x3,#19
2737     - bic x28,x25,x23
2738     - ror x12,x27,#28
2739     - add x26,x26,x4 // h+=X[i]
2740     - eor x16,x16,x23,ror#18
2741     - eor x11,x11,x6,ror#8
2742     - orr x17,x17,x28 // Ch(e,f,g)
2743     - eor x28,x27,x20 // a^b, b^c in next round
2744     - eor x16,x16,x23,ror#41 // Sigma1(e)
2745     - eor x12,x12,x27,ror#34
2746     - add x26,x26,x17 // h+=Ch(e,f,g)
2747     - and x19,x19,x28 // (b^c)&=(a^b)
2748     - eor x10,x10,x3,ror#61
2749     - eor x11,x11,x6,lsr#7 // sigma0(X[i+1])
2750     - add x26,x26,x16 // h+=Sigma1(e)
2751     - eor x19,x19,x20 // Maj(a,b,c)
2752     - eor x17,x12,x27,ror#39 // Sigma0(a)
2753     - eor x10,x10,x3,lsr#6 // sigma1(X[i+14])
2754     - add x5,x5,x14
2755     - add x22,x22,x26 // d+=h
2756     - add x26,x26,x19 // h+=Maj(a,b,c)
2757     - ldr x19,[x30],#8 // *K++, x28 in next round
2758     - add x5,x5,x11
2759     - add x26,x26,x17 // h+=Sigma0(a)
2760     - add x5,x5,x10
2761     - ldr x10,[sp,#24]
2762     - str x13,[sp,#16]
2763     - ror x16,x22,#14
2764     - add x25,x25,x19 // h+=K[i]
2765     - ror x12,x7,#1
2766     - and x17,x23,x22
2767     - ror x11,x4,#19
2768     - bic x19,x24,x22
2769     - ror x13,x26,#28
2770     - add x25,x25,x5 // h+=X[i]
2771     - eor x16,x16,x22,ror#18
2772     - eor x12,x12,x7,ror#8
2773     - orr x17,x17,x19 // Ch(e,f,g)
2774     - eor x19,x26,x27 // a^b, b^c in next round
2775     - eor x16,x16,x22,ror#41 // Sigma1(e)
2776     - eor x13,x13,x26,ror#34
2777     - add x25,x25,x17 // h+=Ch(e,f,g)
2778     - and x28,x28,x19 // (b^c)&=(a^b)
2779     - eor x11,x11,x4,ror#61
2780     - eor x12,x12,x7,lsr#7 // sigma0(X[i+1])
2781     - add x25,x25,x16 // h+=Sigma1(e)
2782     - eor x28,x28,x27 // Maj(a,b,c)
2783     - eor x17,x13,x26,ror#39 // Sigma0(a)
2784     - eor x11,x11,x4,lsr#6 // sigma1(X[i+14])
2785     - add x6,x6,x15
2786     - add x21,x21,x25 // d+=h
2787     - add x25,x25,x28 // h+=Maj(a,b,c)
2788     - ldr x28,[x30],#8 // *K++, x19 in next round
2789     - add x6,x6,x12
2790     - add x25,x25,x17 // h+=Sigma0(a)
2791     - add x6,x6,x11
2792     - ldr x11,[sp,#0]
2793     - str x14,[sp,#24]
2794     - ror x16,x21,#14
2795     - add x24,x24,x28 // h+=K[i]
2796     - ror x13,x8,#1
2797     - and x17,x22,x21
2798     - ror x12,x5,#19
2799     - bic x28,x23,x21
2800     - ror x14,x25,#28
2801     - add x24,x24,x6 // h+=X[i]
2802     - eor x16,x16,x21,ror#18
2803     - eor x13,x13,x8,ror#8
2804     - orr x17,x17,x28 // Ch(e,f,g)
2805     - eor x28,x25,x26 // a^b, b^c in next round
2806     - eor x16,x16,x21,ror#41 // Sigma1(e)
2807     - eor x14,x14,x25,ror#34
2808     - add x24,x24,x17 // h+=Ch(e,f,g)
2809     - and x19,x19,x28 // (b^c)&=(a^b)
2810     - eor x12,x12,x5,ror#61
2811     - eor x13,x13,x8,lsr#7 // sigma0(X[i+1])
2812     - add x24,x24,x16 // h+=Sigma1(e)
2813     - eor x19,x19,x26 // Maj(a,b,c)
2814     - eor x17,x14,x25,ror#39 // Sigma0(a)
2815     - eor x12,x12,x5,lsr#6 // sigma1(X[i+14])
2816     - add x7,x7,x0
2817     - add x20,x20,x24 // d+=h
2818     - add x24,x24,x19 // h+=Maj(a,b,c)
2819     - ldr x19,[x30],#8 // *K++, x28 in next round
2820     - add x7,x7,x13
2821     - add x24,x24,x17 // h+=Sigma0(a)
2822     - add x7,x7,x12
2823     - ldr x12,[sp,#8]
2824     - str x15,[sp,#0]
2825     - ror x16,x20,#14
2826     - add x23,x23,x19 // h+=K[i]
2827     - ror x14,x9,#1
2828     - and x17,x21,x20
2829     - ror x13,x6,#19
2830     - bic x19,x22,x20
2831     - ror x15,x24,#28
2832     - add x23,x23,x7 // h+=X[i]
2833     - eor x16,x16,x20,ror#18
2834     - eor x14,x14,x9,ror#8
2835     - orr x17,x17,x19 // Ch(e,f,g)
2836     - eor x19,x24,x25 // a^b, b^c in next round
2837     - eor x16,x16,x20,ror#41 // Sigma1(e)
2838     - eor x15,x15,x24,ror#34
2839     - add x23,x23,x17 // h+=Ch(e,f,g)
2840     - and x28,x28,x19 // (b^c)&=(a^b)
2841     - eor x13,x13,x6,ror#61
2842     - eor x14,x14,x9,lsr#7 // sigma0(X[i+1])
2843     - add x23,x23,x16 // h+=Sigma1(e)
2844     - eor x28,x28,x25 // Maj(a,b,c)
2845     - eor x17,x15,x24,ror#39 // Sigma0(a)
2846     - eor x13,x13,x6,lsr#6 // sigma1(X[i+14])
2847     - add x8,x8,x1
2848     - add x27,x27,x23 // d+=h
2849     - add x23,x23,x28 // h+=Maj(a,b,c)
2850     - ldr x28,[x30],#8 // *K++, x19 in next round
2851     - add x8,x8,x14
2852     - add x23,x23,x17 // h+=Sigma0(a)
2853     - add x8,x8,x13
2854     - ldr x13,[sp,#16]
2855     - str x0,[sp,#8]
2856     - ror x16,x27,#14
2857     - add x22,x22,x28 // h+=K[i]
2858     - ror x15,x10,#1
2859     - and x17,x20,x27
2860     - ror x14,x7,#19
2861     - bic x28,x21,x27
2862     - ror x0,x23,#28
2863     - add x22,x22,x8 // h+=X[i]
2864     - eor x16,x16,x27,ror#18
2865     - eor x15,x15,x10,ror#8
2866     - orr x17,x17,x28 // Ch(e,f,g)
2867     - eor x28,x23,x24 // a^b, b^c in next round
2868     - eor x16,x16,x27,ror#41 // Sigma1(e)
2869     - eor x0,x0,x23,ror#34
2870     - add x22,x22,x17 // h+=Ch(e,f,g)
2871     - and x19,x19,x28 // (b^c)&=(a^b)
2872     - eor x14,x14,x7,ror#61
2873     - eor x15,x15,x10,lsr#7 // sigma0(X[i+1])
2874     - add x22,x22,x16 // h+=Sigma1(e)
2875     - eor x19,x19,x24 // Maj(a,b,c)
2876     - eor x17,x0,x23,ror#39 // Sigma0(a)
2877     - eor x14,x14,x7,lsr#6 // sigma1(X[i+14])
2878     - add x9,x9,x2
2879     - add x26,x26,x22 // d+=h
2880     - add x22,x22,x19 // h+=Maj(a,b,c)
2881     - ldr x19,[x30],#8 // *K++, x28 in next round
2882     - add x9,x9,x15
2883     - add x22,x22,x17 // h+=Sigma0(a)
2884     - add x9,x9,x14
2885     - ldr x14,[sp,#24]
2886     - str x1,[sp,#16]
2887     - ror x16,x26,#14
2888     - add x21,x21,x19 // h+=K[i]
2889     - ror x0,x11,#1
2890     - and x17,x27,x26
2891     - ror x15,x8,#19
2892     - bic x19,x20,x26
2893     - ror x1,x22,#28
2894     - add x21,x21,x9 // h+=X[i]
2895     - eor x16,x16,x26,ror#18
2896     - eor x0,x0,x11,ror#8
2897     - orr x17,x17,x19 // Ch(e,f,g)
2898     - eor x19,x22,x23 // a^b, b^c in next round
2899     - eor x16,x16,x26,ror#41 // Sigma1(e)
2900     - eor x1,x1,x22,ror#34
2901     - add x21,x21,x17 // h+=Ch(e,f,g)
2902     - and x28,x28,x19 // (b^c)&=(a^b)
2903     - eor x15,x15,x8,ror#61
2904     - eor x0,x0,x11,lsr#7 // sigma0(X[i+1])
2905     - add x21,x21,x16 // h+=Sigma1(e)
2906     - eor x28,x28,x23 // Maj(a,b,c)
2907     - eor x17,x1,x22,ror#39 // Sigma0(a)
2908     - eor x15,x15,x8,lsr#6 // sigma1(X[i+14])
2909     - add x10,x10,x3
2910     - add x25,x25,x21 // d+=h
2911     - add x21,x21,x28 // h+=Maj(a,b,c)
2912     - ldr x28,[x30],#8 // *K++, x19 in next round
2913     - add x10,x10,x0
2914     - add x21,x21,x17 // h+=Sigma0(a)
2915     - add x10,x10,x15
2916     - ldr x15,[sp,#0]
2917     - str x2,[sp,#24]
2918     - ror x16,x25,#14
2919     - add x20,x20,x28 // h+=K[i]
2920     - ror x1,x12,#1
2921     - and x17,x26,x25
2922     - ror x0,x9,#19
2923     - bic x28,x27,x25
2924     - ror x2,x21,#28
2925     - add x20,x20,x10 // h+=X[i]
2926     - eor x16,x16,x25,ror#18
2927     - eor x1,x1,x12,ror#8
2928     - orr x17,x17,x28 // Ch(e,f,g)
2929     - eor x28,x21,x22 // a^b, b^c in next round
2930     - eor x16,x16,x25,ror#41 // Sigma1(e)
2931     - eor x2,x2,x21,ror#34
2932     - add x20,x20,x17 // h+=Ch(e,f,g)
2933     - and x19,x19,x28 // (b^c)&=(a^b)
2934     - eor x0,x0,x9,ror#61
2935     - eor x1,x1,x12,lsr#7 // sigma0(X[i+1])
2936     - add x20,x20,x16 // h+=Sigma1(e)
2937     - eor x19,x19,x22 // Maj(a,b,c)
2938     - eor x17,x2,x21,ror#39 // Sigma0(a)
2939     - eor x0,x0,x9,lsr#6 // sigma1(X[i+14])
2940     - add x11,x11,x4
2941     - add x24,x24,x20 // d+=h
2942     - add x20,x20,x19 // h+=Maj(a,b,c)
2943     - ldr x19,[x30],#8 // *K++, x28 in next round
2944     - add x11,x11,x1
2945     - add x20,x20,x17 // h+=Sigma0(a)
2946     - add x11,x11,x0
2947     - ldr x0,[sp,#8]
2948     - str x3,[sp,#0]
2949     - ror x16,x24,#14
2950     - add x27,x27,x19 // h+=K[i]
2951     - ror x2,x13,#1
2952     - and x17,x25,x24
2953     - ror x1,x10,#19
2954     - bic x19,x26,x24
2955     - ror x3,x20,#28
2956     - add x27,x27,x11 // h+=X[i]
2957     - eor x16,x16,x24,ror#18
2958     - eor x2,x2,x13,ror#8
2959     - orr x17,x17,x19 // Ch(e,f,g)
2960     - eor x19,x20,x21 // a^b, b^c in next round
2961     - eor x16,x16,x24,ror#41 // Sigma1(e)
2962     - eor x3,x3,x20,ror#34
2963     - add x27,x27,x17 // h+=Ch(e,f,g)
2964     - and x28,x28,x19 // (b^c)&=(a^b)
2965     - eor x1,x1,x10,ror#61
2966     - eor x2,x2,x13,lsr#7 // sigma0(X[i+1])
2967     - add x27,x27,x16 // h+=Sigma1(e)
2968     - eor x28,x28,x21 // Maj(a,b,c)
2969     - eor x17,x3,x20,ror#39 // Sigma0(a)
2970     - eor x1,x1,x10,lsr#6 // sigma1(X[i+14])
2971     - add x12,x12,x5
2972     - add x23,x23,x27 // d+=h
2973     - add x27,x27,x28 // h+=Maj(a,b,c)
2974     - ldr x28,[x30],#8 // *K++, x19 in next round
2975     - add x12,x12,x2
2976     - add x27,x27,x17 // h+=Sigma0(a)
2977     - add x12,x12,x1
2978     - ldr x1,[sp,#16]
2979     - str x4,[sp,#8]
2980     - ror x16,x23,#14
2981     - add x26,x26,x28 // h+=K[i]
2982     - ror x3,x14,#1
2983     - and x17,x24,x23
2984     - ror x2,x11,#19
2985     - bic x28,x25,x23
2986     - ror x4,x27,#28
2987     - add x26,x26,x12 // h+=X[i]
2988     - eor x16,x16,x23,ror#18
2989     - eor x3,x3,x14,ror#8
2990     - orr x17,x17,x28 // Ch(e,f,g)
2991     - eor x28,x27,x20 // a^b, b^c in next round
2992     - eor x16,x16,x23,ror#41 // Sigma1(e)
2993     - eor x4,x4,x27,ror#34
2994     - add x26,x26,x17 // h+=Ch(e,f,g)
2995     - and x19,x19,x28 // (b^c)&=(a^b)
2996     - eor x2,x2,x11,ror#61
2997     - eor x3,x3,x14,lsr#7 // sigma0(X[i+1])
2998     - add x26,x26,x16 // h+=Sigma1(e)
2999     - eor x19,x19,x20 // Maj(a,b,c)
3000     - eor x17,x4,x27,ror#39 // Sigma0(a)
3001     - eor x2,x2,x11,lsr#6 // sigma1(X[i+14])
3002     - add x13,x13,x6
3003     - add x22,x22,x26 // d+=h
3004     - add x26,x26,x19 // h+=Maj(a,b,c)
3005     - ldr x19,[x30],#8 // *K++, x28 in next round
3006     - add x13,x13,x3
3007     - add x26,x26,x17 // h+=Sigma0(a)
3008     - add x13,x13,x2
3009     - ldr x2,[sp,#24]
3010     - str x5,[sp,#16]
3011     - ror x16,x22,#14
3012     - add x25,x25,x19 // h+=K[i]
3013     - ror x4,x15,#1
3014     - and x17,x23,x22
3015     - ror x3,x12,#19
3016     - bic x19,x24,x22
3017     - ror x5,x26,#28
3018     - add x25,x25,x13 // h+=X[i]
3019     - eor x16,x16,x22,ror#18
3020     - eor x4,x4,x15,ror#8
3021     - orr x17,x17,x19 // Ch(e,f,g)
3022     - eor x19,x26,x27 // a^b, b^c in next round
3023     - eor x16,x16,x22,ror#41 // Sigma1(e)
3024     - eor x5,x5,x26,ror#34
3025     - add x25,x25,x17 // h+=Ch(e,f,g)
3026     - and x28,x28,x19 // (b^c)&=(a^b)
3027     - eor x3,x3,x12,ror#61
3028     - eor x4,x4,x15,lsr#7 // sigma0(X[i+1])
3029     - add x25,x25,x16 // h+=Sigma1(e)
3030     - eor x28,x28,x27 // Maj(a,b,c)
3031     - eor x17,x5,x26,ror#39 // Sigma0(a)
3032     - eor x3,x3,x12,lsr#6 // sigma1(X[i+14])
3033     - add x14,x14,x7
3034     - add x21,x21,x25 // d+=h
3035     - add x25,x25,x28 // h+=Maj(a,b,c)
3036     - ldr x28,[x30],#8 // *K++, x19 in next round
3037     - add x14,x14,x4
3038     - add x25,x25,x17 // h+=Sigma0(a)
3039     - add x14,x14,x3
3040     - ldr x3,[sp,#0]
3041     - str x6,[sp,#24]
3042     - ror x16,x21,#14
3043     - add x24,x24,x28 // h+=K[i]
3044     - ror x5,x0,#1
3045     - and x17,x22,x21
3046     - ror x4,x13,#19
3047     - bic x28,x23,x21
3048     - ror x6,x25,#28
3049     - add x24,x24,x14 // h+=X[i]
3050     - eor x16,x16,x21,ror#18
3051     - eor x5,x5,x0,ror#8
3052     - orr x17,x17,x28 // Ch(e,f,g)
3053     - eor x28,x25,x26 // a^b, b^c in next round
3054     - eor x16,x16,x21,ror#41 // Sigma1(e)
3055     - eor x6,x6,x25,ror#34
3056     - add x24,x24,x17 // h+=Ch(e,f,g)
3057     - and x19,x19,x28 // (b^c)&=(a^b)
3058     - eor x4,x4,x13,ror#61
3059     - eor x5,x5,x0,lsr#7 // sigma0(X[i+1])
3060     - add x24,x24,x16 // h+=Sigma1(e)
3061     - eor x19,x19,x26 // Maj(a,b,c)
3062     - eor x17,x6,x25,ror#39 // Sigma0(a)
3063     - eor x4,x4,x13,lsr#6 // sigma1(X[i+14])
3064     - add x15,x15,x8
3065     - add x20,x20,x24 // d+=h
3066     - add x24,x24,x19 // h+=Maj(a,b,c)
3067     - ldr x19,[x30],#8 // *K++, x28 in next round
3068     - add x15,x15,x5
3069     - add x24,x24,x17 // h+=Sigma0(a)
3070     - add x15,x15,x4
3071     - ldr x4,[sp,#8]
3072     - str x7,[sp,#0]
3073     - ror x16,x20,#14
3074     - add x23,x23,x19 // h+=K[i]
3075     - ror x6,x1,#1
3076     - and x17,x21,x20
3077     - ror x5,x14,#19
3078     - bic x19,x22,x20
3079     - ror x7,x24,#28
3080     - add x23,x23,x15 // h+=X[i]
3081     - eor x16,x16,x20,ror#18
3082     - eor x6,x6,x1,ror#8
3083     - orr x17,x17,x19 // Ch(e,f,g)
3084     - eor x19,x24,x25 // a^b, b^c in next round
3085     - eor x16,x16,x20,ror#41 // Sigma1(e)
3086     - eor x7,x7,x24,ror#34
3087     - add x23,x23,x17 // h+=Ch(e,f,g)
3088     - and x28,x28,x19 // (b^c)&=(a^b)
3089     - eor x5,x5,x14,ror#61
3090     - eor x6,x6,x1,lsr#7 // sigma0(X[i+1])
3091     - add x23,x23,x16 // h+=Sigma1(e)
3092     - eor x28,x28,x25 // Maj(a,b,c)
3093     - eor x17,x7,x24,ror#39 // Sigma0(a)
3094     - eor x5,x5,x14,lsr#6 // sigma1(X[i+14])
3095     - add x0,x0,x9
3096     - add x27,x27,x23 // d+=h
3097     - add x23,x23,x28 // h+=Maj(a,b,c)
3098     - ldr x28,[x30],#8 // *K++, x19 in next round
3099     - add x0,x0,x6
3100     - add x23,x23,x17 // h+=Sigma0(a)
3101     - add x0,x0,x5
3102     - ldr x5,[sp,#16]
3103     - str x8,[sp,#8]
3104     - ror x16,x27,#14
3105     - add x22,x22,x28 // h+=K[i]
3106     - ror x7,x2,#1
3107     - and x17,x20,x27
3108     - ror x6,x15,#19
3109     - bic x28,x21,x27
3110     - ror x8,x23,#28
3111     - add x22,x22,x0 // h+=X[i]
3112     - eor x16,x16,x27,ror#18
3113     - eor x7,x7,x2,ror#8
3114     - orr x17,x17,x28 // Ch(e,f,g)
3115     - eor x28,x23,x24 // a^b, b^c in next round
3116     - eor x16,x16,x27,ror#41 // Sigma1(e)
3117     - eor x8,x8,x23,ror#34
3118     - add x22,x22,x17 // h+=Ch(e,f,g)
3119     - and x19,x19,x28 // (b^c)&=(a^b)
3120     - eor x6,x6,x15,ror#61
3121     - eor x7,x7,x2,lsr#7 // sigma0(X[i+1])
3122     - add x22,x22,x16 // h+=Sigma1(e)
3123     - eor x19,x19,x24 // Maj(a,b,c)
3124     - eor x17,x8,x23,ror#39 // Sigma0(a)
3125     - eor x6,x6,x15,lsr#6 // sigma1(X[i+14])
3126     - add x1,x1,x10
3127     - add x26,x26,x22 // d+=h
3128     - add x22,x22,x19 // h+=Maj(a,b,c)
3129     - ldr x19,[x30],#8 // *K++, x28 in next round
3130     - add x1,x1,x7
3131     - add x22,x22,x17 // h+=Sigma0(a)
3132     - add x1,x1,x6
3133     - ldr x6,[sp,#24]
3134     - str x9,[sp,#16]
3135     - ror x16,x26,#14
3136     - add x21,x21,x19 // h+=K[i]
3137     - ror x8,x3,#1
3138     - and x17,x27,x26
3139     - ror x7,x0,#19
3140     - bic x19,x20,x26
3141     - ror x9,x22,#28
3142     - add x21,x21,x1 // h+=X[i]
3143     - eor x16,x16,x26,ror#18
3144     - eor x8,x8,x3,ror#8
3145     - orr x17,x17,x19 // Ch(e,f,g)
3146     - eor x19,x22,x23 // a^b, b^c in next round
3147     - eor x16,x16,x26,ror#41 // Sigma1(e)
3148     - eor x9,x9,x22,ror#34
3149     - add x21,x21,x17 // h+=Ch(e,f,g)
3150     - and x28,x28,x19 // (b^c)&=(a^b)
3151     - eor x7,x7,x0,ror#61
3152     - eor x8,x8,x3,lsr#7 // sigma0(X[i+1])
3153     - add x21,x21,x16 // h+=Sigma1(e)
3154     - eor x28,x28,x23 // Maj(a,b,c)
3155     - eor x17,x9,x22,ror#39 // Sigma0(a)
3156     - eor x7,x7,x0,lsr#6 // sigma1(X[i+14])
3157     - add x2,x2,x11
3158     - add x25,x25,x21 // d+=h
3159     - add x21,x21,x28 // h+=Maj(a,b,c)
3160     - ldr x28,[x30],#8 // *K++, x19 in next round
3161     - add x2,x2,x8
3162     - add x21,x21,x17 // h+=Sigma0(a)
3163     - add x2,x2,x7
3164     - ldr x7,[sp,#0]
3165     - str x10,[sp,#24]
3166     - ror x16,x25,#14
3167     - add x20,x20,x28 // h+=K[i]
3168     - ror x9,x4,#1
3169     - and x17,x26,x25
3170     - ror x8,x1,#19
3171     - bic x28,x27,x25
3172     - ror x10,x21,#28
3173     - add x20,x20,x2 // h+=X[i]
3174     - eor x16,x16,x25,ror#18
3175     - eor x9,x9,x4,ror#8
3176     - orr x17,x17,x28 // Ch(e,f,g)
3177     - eor x28,x21,x22 // a^b, b^c in next round
3178     - eor x16,x16,x25,ror#41 // Sigma1(e)
3179     - eor x10,x10,x21,ror#34
3180     - add x20,x20,x17 // h+=Ch(e,f,g)
3181     - and x19,x19,x28 // (b^c)&=(a^b)
3182     - eor x8,x8,x1,ror#61
3183     - eor x9,x9,x4,lsr#7 // sigma0(X[i+1])
3184     - add x20,x20,x16 // h+=Sigma1(e)
3185     - eor x19,x19,x22 // Maj(a,b,c)
3186     - eor x17,x10,x21,ror#39 // Sigma0(a)
3187     - eor x8,x8,x1,lsr#6 // sigma1(X[i+14])
3188     - add x3,x3,x12
3189     - add x24,x24,x20 // d+=h
3190     - add x20,x20,x19 // h+=Maj(a,b,c)
3191     - ldr x19,[x30],#8 // *K++, x28 in next round
3192     - add x3,x3,x9
3193     - add x20,x20,x17 // h+=Sigma0(a)
3194     - add x3,x3,x8
3195     - cbnz x19,.Loop_16_xx
3196     -
3197     - ldp x0,x2,[x29,#96]
3198     - ldr x1,[x29,#112]
3199     - sub x30,x30,#648 // rewind
3200     -
3201     - ldp x3,x4,[x0]
3202     - ldp x5,x6,[x0,#2*8]
3203     - add x1,x1,#14*8 // advance input pointer
3204     - ldp x7,x8,[x0,#4*8]
3205     - add x20,x20,x3
3206     - ldp x9,x10,[x0,#6*8]
3207     - add x21,x21,x4
3208     - add x22,x22,x5
3209     - add x23,x23,x6
3210     - stp x20,x21,[x0]
3211     - add x24,x24,x7
3212     - add x25,x25,x8
3213     - stp x22,x23,[x0,#2*8]
3214     - add x26,x26,x9
3215     - add x27,x27,x10
3216     - cmp x1,x2
3217     - stp x24,x25,[x0,#4*8]
3218     - stp x26,x27,[x0,#6*8]
3219     - b.ne .Loop
3220     -
3221     - ldp x19,x20,[x29,#16]
3222     - add sp,sp,#4*8
3223     - ldp x21,x22,[x29,#32]
3224     - ldp x23,x24,[x29,#48]
3225     - ldp x25,x26,[x29,#64]
3226     - ldp x27,x28,[x29,#80]
3227     - ldp x29,x30,[sp],#128
3228     - ret
3229     -.size sha512_block_data_order,.-sha512_block_data_order
3230     -
3231     -.align 6
3232     -.type .LK512,%object
3233     -.LK512:
3234     - .quad 0x428a2f98d728ae22,0x7137449123ef65cd
3235     - .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
3236     - .quad 0x3956c25bf348b538,0x59f111f1b605d019
3237     - .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
3238     - .quad 0xd807aa98a3030242,0x12835b0145706fbe
3239     - .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
3240     - .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
3241     - .quad 0x9bdc06a725c71235,0xc19bf174cf692694
3242     - .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
3243     - .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
3244     - .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
3245     - .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
3246     - .quad 0x983e5152ee66dfab,0xa831c66d2db43210
3247     - .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
3248     - .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
3249     - .quad 0x06ca6351e003826f,0x142929670a0e6e70
3250     - .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
3251     - .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
3252     - .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
3253     - .quad 0x81c2c92e47edaee6,0x92722c851482353b
3254     - .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
3255     - .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
3256     - .quad 0xd192e819d6ef5218,0xd69906245565a910
3257     - .quad 0xf40e35855771202a,0x106aa07032bbd1b8
3258     - .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
3259     - .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
3260     - .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
3261     - .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
3262     - .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
3263     - .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
3264     - .quad 0x90befffa23631e28,0xa4506cebde82bde9
3265     - .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
3266     - .quad 0xca273eceea26619c,0xd186b8c721c0c207
3267     - .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
3268     - .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
3269     - .quad 0x113f9804bef90dae,0x1b710b35131c471b
3270     - .quad 0x28db77f523047d84,0x32caab7b40c72493
3271     - .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
3272     - .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
3273     - .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
3274     - .quad 0 // terminator
3275     -.size .LK512,.-.LK512
3276     -#ifndef __KERNEL__
3277     -.align 3
3278     -.LOPENSSL_armcap_P:
3279     -# ifdef __ILP32__
3280     - .long OPENSSL_armcap_P-.
3281     -# else
3282     - .quad OPENSSL_armcap_P-.
3283     -# endif
3284     -#endif
3285     -.asciz "SHA512 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
3286     -.align 2
3287     -#ifndef __KERNEL__
3288     -.comm OPENSSL_armcap_P,4,4
3289     -#endif
3290     diff --git a/arch/mips/include/uapi/asm/sgidefs.h b/arch/mips/include/uapi/asm/sgidefs.h
3291     index 876442fcfb32..5be81f8fd479 100644
3292     --- a/arch/mips/include/uapi/asm/sgidefs.h
3293     +++ b/arch/mips/include/uapi/asm/sgidefs.h
3294     @@ -10,14 +10,6 @@
3295     #ifndef __ASM_SGIDEFS_H
3296     #define __ASM_SGIDEFS_H
3297    
3298     -/*
3299     - * Using a Linux compiler for building Linux seems logic but not to
3300     - * everybody.
3301     - */
3302     -#ifndef __linux__
3303     -#error Use a Linux compiler or give up.
3304     -#endif
3305     -
3306     /*
3307     * Definitions for the ISA levels
3308     *
3309     diff --git a/arch/s390/include/asm/facility.h b/arch/s390/include/asm/facility.h
3310     index 5811e7849a2e..1df70a73dc5c 100644
3311     --- a/arch/s390/include/asm/facility.h
3312     +++ b/arch/s390/include/asm/facility.h
3313     @@ -61,6 +61,18 @@ static inline int test_facility(unsigned long nr)
3314     return __test_facility(nr, &S390_lowcore.stfle_fac_list);
3315     }
3316    
3317     +static inline unsigned long __stfle_asm(u64 *stfle_fac_list, int size)
3318     +{
3319     + register unsigned long reg0 asm("0") = size - 1;
3320     +
3321     + asm volatile(
3322     + ".insn s,0xb2b00000,0(%1)" /* stfle */
3323     + : "+d" (reg0)
3324     + : "a" (stfle_fac_list)
3325     + : "memory", "cc");
3326     + return reg0;
3327     +}
3328     +
3329     /**
3330     * stfle - Store facility list extended
3331     * @stfle_fac_list: array where facility list can be stored
3332     @@ -78,13 +90,8 @@ static inline void stfle(u64 *stfle_fac_list, int size)
3333     memcpy(stfle_fac_list, &S390_lowcore.stfl_fac_list, 4);
3334     if (S390_lowcore.stfl_fac_list & 0x01000000) {
3335     /* More facility bits available with stfle */
3336     - register unsigned long reg0 asm("0") = size - 1;
3337     -
3338     - asm volatile(".insn s,0xb2b00000,0(%1)" /* stfle */
3339     - : "+d" (reg0)
3340     - : "a" (stfle_fac_list)
3341     - : "memory", "cc");
3342     - nr = (reg0 + 1) * 8; /* # bytes stored by stfle */
3343     + nr = __stfle_asm(stfle_fac_list, size);
3344     + nr = min_t(unsigned long, (nr + 1) * 8, size * 8);
3345     }
3346     memset((char *) stfle_fac_list + nr, 0, size * 8 - nr);
3347     preempt_enable();
3348     diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
3349     index e497d374412a..8d20fb09722c 100644
3350     --- a/arch/x86/kernel/ptrace.c
3351     +++ b/arch/x86/kernel/ptrace.c
3352     @@ -23,6 +23,7 @@
3353     #include <linux/rcupdate.h>
3354     #include <linux/export.h>
3355     #include <linux/context_tracking.h>
3356     +#include <linux/nospec.h>
3357    
3358     #include <asm/uaccess.h>
3359     #include <asm/pgtable.h>
3360     @@ -650,9 +651,11 @@ static unsigned long ptrace_get_debugreg(struct task_struct *tsk, int n)
3361     {
3362     struct thread_struct *thread = &tsk->thread;
3363     unsigned long val = 0;
3364     + int index = n;
3365    
3366     if (n < HBP_NUM) {
3367     - struct perf_event *bp = thread->ptrace_bps[n];
3368     + struct perf_event *bp = thread->ptrace_bps[index];
3369     + index = array_index_nospec(index, HBP_NUM);
3370    
3371     if (bp)
3372     val = bp->hw.info.address;
3373     diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c
3374     index 9692a5e9fdab..b95693a73f12 100644
3375     --- a/arch/x86/kernel/tls.c
3376     +++ b/arch/x86/kernel/tls.c
3377     @@ -4,6 +4,7 @@
3378     #include <linux/user.h>
3379     #include <linux/regset.h>
3380     #include <linux/syscalls.h>
3381     +#include <linux/nospec.h>
3382    
3383     #include <asm/uaccess.h>
3384     #include <asm/desc.h>
3385     @@ -219,6 +220,7 @@ int do_get_thread_area(struct task_struct *p, int idx,
3386     struct user_desc __user *u_info)
3387     {
3388     struct user_desc info;
3389     + int index;
3390    
3391     if (idx == -1 && get_user(idx, &u_info->entry_number))
3392     return -EFAULT;
3393     @@ -226,8 +228,11 @@ int do_get_thread_area(struct task_struct *p, int idx,
3394     if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
3395     return -EINVAL;
3396    
3397     - fill_user_desc(&info, idx,
3398     - &p->thread.tls_array[idx - GDT_ENTRY_TLS_MIN]);
3399     + index = idx - GDT_ENTRY_TLS_MIN;
3400     + index = array_index_nospec(index,
3401     + GDT_ENTRY_TLS_MAX - GDT_ENTRY_TLS_MIN + 1);
3402     +
3403     + fill_user_desc(&info, idx, &p->thread.tls_array[index]);
3404    
3405     if (copy_to_user(u_info, &info, sizeof(info)))
3406     return -EFAULT;
3407     diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
3408     index 463033b4db1d..5a24a484ecc7 100644
3409     --- a/drivers/crypto/talitos.c
3410     +++ b/drivers/crypto/talitos.c
3411     @@ -2185,7 +2185,7 @@ static struct talitos_alg_template driver_algs[] = {
3412     .base = {
3413     .cra_name = "authenc(hmac(sha1),cbc(aes))",
3414     .cra_driver_name = "authenc-hmac-sha1-"
3415     - "cbc-aes-talitos",
3416     + "cbc-aes-talitos-hsna",
3417     .cra_blocksize = AES_BLOCK_SIZE,
3418     .cra_flags = CRYPTO_ALG_ASYNC,
3419     },
3420     @@ -2229,7 +2229,7 @@ static struct talitos_alg_template driver_algs[] = {
3421     .cra_name = "authenc(hmac(sha1),"
3422     "cbc(des3_ede))",
3423     .cra_driver_name = "authenc-hmac-sha1-"
3424     - "cbc-3des-talitos",
3425     + "cbc-3des-talitos-hsna",
3426     .cra_blocksize = DES3_EDE_BLOCK_SIZE,
3427     .cra_flags = CRYPTO_ALG_ASYNC,
3428     },
3429     @@ -2271,7 +2271,7 @@ static struct talitos_alg_template driver_algs[] = {
3430     .base = {
3431     .cra_name = "authenc(hmac(sha224),cbc(aes))",
3432     .cra_driver_name = "authenc-hmac-sha224-"
3433     - "cbc-aes-talitos",
3434     + "cbc-aes-talitos-hsna",
3435     .cra_blocksize = AES_BLOCK_SIZE,
3436     .cra_flags = CRYPTO_ALG_ASYNC,
3437     },
3438     @@ -2315,7 +2315,7 @@ static struct talitos_alg_template driver_algs[] = {
3439     .cra_name = "authenc(hmac(sha224),"
3440     "cbc(des3_ede))",
3441     .cra_driver_name = "authenc-hmac-sha224-"
3442     - "cbc-3des-talitos",
3443     + "cbc-3des-talitos-hsna",
3444     .cra_blocksize = DES3_EDE_BLOCK_SIZE,
3445     .cra_flags = CRYPTO_ALG_ASYNC,
3446     },
3447     @@ -2357,7 +2357,7 @@ static struct talitos_alg_template driver_algs[] = {
3448     .base = {
3449     .cra_name = "authenc(hmac(sha256),cbc(aes))",
3450     .cra_driver_name = "authenc-hmac-sha256-"
3451     - "cbc-aes-talitos",
3452     + "cbc-aes-talitos-hsna",
3453     .cra_blocksize = AES_BLOCK_SIZE,
3454     .cra_flags = CRYPTO_ALG_ASYNC,
3455     },
3456     @@ -2401,7 +2401,7 @@ static struct talitos_alg_template driver_algs[] = {
3457     .cra_name = "authenc(hmac(sha256),"
3458     "cbc(des3_ede))",
3459     .cra_driver_name = "authenc-hmac-sha256-"
3460     - "cbc-3des-talitos",
3461     + "cbc-3des-talitos-hsna",
3462     .cra_blocksize = DES3_EDE_BLOCK_SIZE,
3463     .cra_flags = CRYPTO_ALG_ASYNC,
3464     },
3465     @@ -2527,7 +2527,7 @@ static struct talitos_alg_template driver_algs[] = {
3466     .base = {
3467     .cra_name = "authenc(hmac(md5),cbc(aes))",
3468     .cra_driver_name = "authenc-hmac-md5-"
3469     - "cbc-aes-talitos",
3470     + "cbc-aes-talitos-hsna",
3471     .cra_blocksize = AES_BLOCK_SIZE,
3472     .cra_flags = CRYPTO_ALG_ASYNC,
3473     },
3474     @@ -2569,7 +2569,7 @@ static struct talitos_alg_template driver_algs[] = {
3475     .base = {
3476     .cra_name = "authenc(hmac(md5),cbc(des3_ede))",
3477     .cra_driver_name = "authenc-hmac-md5-"
3478     - "cbc-3des-talitos",
3479     + "cbc-3des-talitos-hsna",
3480     .cra_blocksize = DES3_EDE_BLOCK_SIZE,
3481     .cra_flags = CRYPTO_ALG_ASYNC,
3482     },
3483     diff --git a/drivers/input/keyboard/imx_keypad.c b/drivers/input/keyboard/imx_keypad.c
3484     index 2165f3dd328b..842c0235471d 100644
3485     --- a/drivers/input/keyboard/imx_keypad.c
3486     +++ b/drivers/input/keyboard/imx_keypad.c
3487     @@ -530,11 +530,12 @@ static int imx_keypad_probe(struct platform_device *pdev)
3488     return 0;
3489     }
3490    
3491     -static int __maybe_unused imx_kbd_suspend(struct device *dev)
3492     +static int __maybe_unused imx_kbd_noirq_suspend(struct device *dev)
3493     {
3494     struct platform_device *pdev = to_platform_device(dev);
3495     struct imx_keypad *kbd = platform_get_drvdata(pdev);
3496     struct input_dev *input_dev = kbd->input_dev;
3497     + unsigned short reg_val = readw(kbd->mmio_base + KPSR);
3498    
3499     /* imx kbd can wake up system even clock is disabled */
3500     mutex_lock(&input_dev->mutex);
3501     @@ -544,13 +545,20 @@ static int __maybe_unused imx_kbd_suspend(struct device *dev)
3502    
3503     mutex_unlock(&input_dev->mutex);
3504    
3505     - if (device_may_wakeup(&pdev->dev))
3506     + if (device_may_wakeup(&pdev->dev)) {
3507     + if (reg_val & KBD_STAT_KPKD)
3508     + reg_val |= KBD_STAT_KRIE;
3509     + if (reg_val & KBD_STAT_KPKR)
3510     + reg_val |= KBD_STAT_KDIE;
3511     + writew(reg_val, kbd->mmio_base + KPSR);
3512     +
3513     enable_irq_wake(kbd->irq);
3514     + }
3515    
3516     return 0;
3517     }
3518    
3519     -static int __maybe_unused imx_kbd_resume(struct device *dev)
3520     +static int __maybe_unused imx_kbd_noirq_resume(struct device *dev)
3521     {
3522     struct platform_device *pdev = to_platform_device(dev);
3523     struct imx_keypad *kbd = platform_get_drvdata(pdev);
3524     @@ -574,7 +582,9 @@ err_clk:
3525     return ret;
3526     }
3527    
3528     -static SIMPLE_DEV_PM_OPS(imx_kbd_pm_ops, imx_kbd_suspend, imx_kbd_resume);
3529     +static const struct dev_pm_ops imx_kbd_pm_ops = {
3530     + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(imx_kbd_noirq_suspend, imx_kbd_noirq_resume)
3531     +};
3532    
3533     static struct platform_driver imx_keypad_driver = {
3534     .driver = {
3535     diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
3536     index 38edf8f5bf8a..15be3ee6cc50 100644
3537     --- a/drivers/input/mouse/elantech.c
3538     +++ b/drivers/input/mouse/elantech.c
3539     @@ -1187,6 +1187,8 @@ static const char * const middle_button_pnp_ids[] = {
3540     "LEN2132", /* ThinkPad P52 */
3541     "LEN2133", /* ThinkPad P72 w/ NFC */
3542     "LEN2134", /* ThinkPad P72 */
3543     + "LEN0407",
3544     + "LEN0408",
3545     NULL
3546     };
3547    
3548     diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
3549     index 0aba34a7b3b3..727f9e571955 100644
3550     --- a/drivers/md/dm-verity-target.c
3551     +++ b/drivers/md/dm-verity-target.c
3552     @@ -218,8 +218,8 @@ static int verity_handle_err(struct dm_verity *v, enum verity_block_type type,
3553     BUG();
3554     }
3555    
3556     - DMERR("%s: %s block %llu is corrupted", v->data_dev->name, type_str,
3557     - block);
3558     + DMERR_LIMIT("%s: %s block %llu is corrupted", v->data_dev->name,
3559     + type_str, block);
3560    
3561     if (v->corrupted_errs == DM_VERITY_MAX_CORRUPTED_ERRS)
3562     DMERR("%s: reached maximum errors", v->data_dev->name);
3563     diff --git a/drivers/md/md.c b/drivers/md/md.c
3564     index 21698eb671d7..765a16dab2e5 100644
3565     --- a/drivers/md/md.c
3566     +++ b/drivers/md/md.c
3567     @@ -7296,9 +7296,9 @@ static void status_unused(struct seq_file *seq)
3568     static int status_resync(struct seq_file *seq, struct mddev *mddev)
3569     {
3570     sector_t max_sectors, resync, res;
3571     - unsigned long dt, db;
3572     - sector_t rt;
3573     - int scale;
3574     + unsigned long dt, db = 0;
3575     + sector_t rt, curr_mark_cnt, resync_mark_cnt;
3576     + int scale, recovery_active;
3577     unsigned int per_milli;
3578    
3579     if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
3580     @@ -7368,22 +7368,30 @@ static int status_resync(struct seq_file *seq, struct mddev *mddev)
3581     * db: blocks written from mark until now
3582     * rt: remaining time
3583     *
3584     - * rt is a sector_t, so could be 32bit or 64bit.
3585     - * So we divide before multiply in case it is 32bit and close
3586     - * to the limit.
3587     - * We scale the divisor (db) by 32 to avoid losing precision
3588     - * near the end of resync when the number of remaining sectors
3589     - * is close to 'db'.
3590     - * We then divide rt by 32 after multiplying by db to compensate.
3591     - * The '+1' avoids division by zero if db is very small.
3592     + * rt is a sector_t, which is always 64bit now. We are keeping
3593     + * the original algorithm, but it is not really necessary.
3594     + *
3595     + * Original algorithm:
3596     + * So we divide before multiply in case it is 32bit and close
3597     + * to the limit.
3598     + * We scale the divisor (db) by 32 to avoid losing precision
3599     + * near the end of resync when the number of remaining sectors
3600     + * is close to 'db'.
3601     + * We then divide rt by 32 after multiplying by db to compensate.
3602     + * The '+1' avoids division by zero if db is very small.
3603     */
3604     dt = ((jiffies - mddev->resync_mark) / HZ);
3605     if (!dt) dt++;
3606     - db = (mddev->curr_mark_cnt - atomic_read(&mddev->recovery_active))
3607     - - mddev->resync_mark_cnt;
3608     +
3609     + curr_mark_cnt = mddev->curr_mark_cnt;
3610     + recovery_active = atomic_read(&mddev->recovery_active);
3611     + resync_mark_cnt = mddev->resync_mark_cnt;
3612     +
3613     + if (curr_mark_cnt >= (recovery_active + resync_mark_cnt))
3614     + db = curr_mark_cnt - (recovery_active + resync_mark_cnt);
3615    
3616     rt = max_sectors - resync; /* number of remaining sectors */
3617     - sector_div(rt, db/32+1);
3618     + rt = div64_u64(rt, db/32+1);
3619     rt *= dt;
3620     rt >>= 5;
3621    
3622     diff --git a/drivers/misc/vmw_vmci/vmci_context.c b/drivers/misc/vmw_vmci/vmci_context.c
3623     index f866a4baecb5..b9da2c6cc981 100644
3624     --- a/drivers/misc/vmw_vmci/vmci_context.c
3625     +++ b/drivers/misc/vmw_vmci/vmci_context.c
3626     @@ -28,6 +28,9 @@
3627     #include "vmci_driver.h"
3628     #include "vmci_event.h"
3629    
3630     +/* Use a wide upper bound for the maximum contexts. */
3631     +#define VMCI_MAX_CONTEXTS 2000
3632     +
3633     /*
3634     * List of current VMCI contexts. Contexts can be added by
3635     * vmci_ctx_create() and removed via vmci_ctx_destroy().
3636     @@ -124,19 +127,22 @@ struct vmci_ctx *vmci_ctx_create(u32 cid, u32 priv_flags,
3637     /* Initialize host-specific VMCI context. */
3638     init_waitqueue_head(&context->host_context.wait_queue);
3639    
3640     - context->queue_pair_array = vmci_handle_arr_create(0);
3641     + context->queue_pair_array =
3642     + vmci_handle_arr_create(0, VMCI_MAX_GUEST_QP_COUNT);
3643     if (!context->queue_pair_array) {
3644     error = -ENOMEM;
3645     goto err_free_ctx;
3646     }
3647    
3648     - context->doorbell_array = vmci_handle_arr_create(0);
3649     + context->doorbell_array =
3650     + vmci_handle_arr_create(0, VMCI_MAX_GUEST_DOORBELL_COUNT);
3651     if (!context->doorbell_array) {
3652     error = -ENOMEM;
3653     goto err_free_qp_array;
3654     }
3655    
3656     - context->pending_doorbell_array = vmci_handle_arr_create(0);
3657     + context->pending_doorbell_array =
3658     + vmci_handle_arr_create(0, VMCI_MAX_GUEST_DOORBELL_COUNT);
3659     if (!context->pending_doorbell_array) {
3660     error = -ENOMEM;
3661     goto err_free_db_array;
3662     @@ -211,7 +217,7 @@ static int ctx_fire_notification(u32 context_id, u32 priv_flags)
3663     * We create an array to hold the subscribers we find when
3664     * scanning through all contexts.
3665     */
3666     - subscriber_array = vmci_handle_arr_create(0);
3667     + subscriber_array = vmci_handle_arr_create(0, VMCI_MAX_CONTEXTS);
3668     if (subscriber_array == NULL)
3669     return VMCI_ERROR_NO_MEM;
3670    
3671     @@ -630,20 +636,26 @@ int vmci_ctx_add_notification(u32 context_id, u32 remote_cid)
3672    
3673     spin_lock(&context->lock);
3674    
3675     - list_for_each_entry(n, &context->notifier_list, node) {
3676     - if (vmci_handle_is_equal(n->handle, notifier->handle)) {
3677     - exists = true;
3678     - break;
3679     + if (context->n_notifiers < VMCI_MAX_CONTEXTS) {
3680     + list_for_each_entry(n, &context->notifier_list, node) {
3681     + if (vmci_handle_is_equal(n->handle, notifier->handle)) {
3682     + exists = true;
3683     + break;
3684     + }
3685     }
3686     - }
3687    
3688     - if (exists) {
3689     - kfree(notifier);
3690     - result = VMCI_ERROR_ALREADY_EXISTS;
3691     + if (exists) {
3692     + kfree(notifier);
3693     + result = VMCI_ERROR_ALREADY_EXISTS;
3694     + } else {
3695     + list_add_tail_rcu(&notifier->node,
3696     + &context->notifier_list);
3697     + context->n_notifiers++;
3698     + result = VMCI_SUCCESS;
3699     + }
3700     } else {
3701     - list_add_tail_rcu(&notifier->node, &context->notifier_list);
3702     - context->n_notifiers++;
3703     - result = VMCI_SUCCESS;
3704     + kfree(notifier);
3705     + result = VMCI_ERROR_NO_MEM;
3706     }
3707    
3708     spin_unlock(&context->lock);
3709     @@ -728,8 +740,7 @@ static int vmci_ctx_get_chkpt_doorbells(struct vmci_ctx *context,
3710     u32 *buf_size, void **pbuf)
3711     {
3712     struct dbell_cpt_state *dbells;
3713     - size_t n_doorbells;
3714     - int i;
3715     + u32 i, n_doorbells;
3716    
3717     n_doorbells = vmci_handle_arr_get_size(context->doorbell_array);
3718     if (n_doorbells > 0) {
3719     @@ -867,7 +878,8 @@ int vmci_ctx_rcv_notifications_get(u32 context_id,
3720     spin_lock(&context->lock);
3721    
3722     *db_handle_array = context->pending_doorbell_array;
3723     - context->pending_doorbell_array = vmci_handle_arr_create(0);
3724     + context->pending_doorbell_array =
3725     + vmci_handle_arr_create(0, VMCI_MAX_GUEST_DOORBELL_COUNT);
3726     if (!context->pending_doorbell_array) {
3727     context->pending_doorbell_array = *db_handle_array;
3728     *db_handle_array = NULL;
3729     @@ -949,12 +961,11 @@ int vmci_ctx_dbell_create(u32 context_id, struct vmci_handle handle)
3730     return VMCI_ERROR_NOT_FOUND;
3731    
3732     spin_lock(&context->lock);
3733     - if (!vmci_handle_arr_has_entry(context->doorbell_array, handle)) {
3734     - vmci_handle_arr_append_entry(&context->doorbell_array, handle);
3735     - result = VMCI_SUCCESS;
3736     - } else {
3737     + if (!vmci_handle_arr_has_entry(context->doorbell_array, handle))
3738     + result = vmci_handle_arr_append_entry(&context->doorbell_array,
3739     + handle);
3740     + else
3741     result = VMCI_ERROR_DUPLICATE_ENTRY;
3742     - }
3743    
3744     spin_unlock(&context->lock);
3745     vmci_ctx_put(context);
3746     @@ -1090,15 +1101,16 @@ int vmci_ctx_notify_dbell(u32 src_cid,
3747     if (!vmci_handle_arr_has_entry(
3748     dst_context->pending_doorbell_array,
3749     handle)) {
3750     - vmci_handle_arr_append_entry(
3751     + result = vmci_handle_arr_append_entry(
3752     &dst_context->pending_doorbell_array,
3753     handle);
3754     -
3755     - ctx_signal_notify(dst_context);
3756     - wake_up(&dst_context->host_context.wait_queue);
3757     -
3758     + if (result == VMCI_SUCCESS) {
3759     + ctx_signal_notify(dst_context);
3760     + wake_up(&dst_context->host_context.wait_queue);
3761     + }
3762     + } else {
3763     + result = VMCI_SUCCESS;
3764     }
3765     - result = VMCI_SUCCESS;
3766     }
3767     spin_unlock(&dst_context->lock);
3768     }
3769     @@ -1125,13 +1137,11 @@ int vmci_ctx_qp_create(struct vmci_ctx *context, struct vmci_handle handle)
3770     if (context == NULL || vmci_handle_is_invalid(handle))
3771     return VMCI_ERROR_INVALID_ARGS;
3772    
3773     - if (!vmci_handle_arr_has_entry(context->queue_pair_array, handle)) {
3774     - vmci_handle_arr_append_entry(&context->queue_pair_array,
3775     - handle);
3776     - result = VMCI_SUCCESS;
3777     - } else {
3778     + if (!vmci_handle_arr_has_entry(context->queue_pair_array, handle))
3779     + result = vmci_handle_arr_append_entry(
3780     + &context->queue_pair_array, handle);
3781     + else
3782     result = VMCI_ERROR_DUPLICATE_ENTRY;
3783     - }
3784    
3785     return result;
3786     }
3787     diff --git a/drivers/misc/vmw_vmci/vmci_handle_array.c b/drivers/misc/vmw_vmci/vmci_handle_array.c
3788     index 344973a0fb0a..917e18a8af95 100644
3789     --- a/drivers/misc/vmw_vmci/vmci_handle_array.c
3790     +++ b/drivers/misc/vmw_vmci/vmci_handle_array.c
3791     @@ -16,24 +16,29 @@
3792     #include <linux/slab.h>
3793     #include "vmci_handle_array.h"
3794    
3795     -static size_t handle_arr_calc_size(size_t capacity)
3796     +static size_t handle_arr_calc_size(u32 capacity)
3797     {
3798     - return sizeof(struct vmci_handle_arr) +
3799     + return VMCI_HANDLE_ARRAY_HEADER_SIZE +
3800     capacity * sizeof(struct vmci_handle);
3801     }
3802    
3803     -struct vmci_handle_arr *vmci_handle_arr_create(size_t capacity)
3804     +struct vmci_handle_arr *vmci_handle_arr_create(u32 capacity, u32 max_capacity)
3805     {
3806     struct vmci_handle_arr *array;
3807    
3808     + if (max_capacity == 0 || capacity > max_capacity)
3809     + return NULL;
3810     +
3811     if (capacity == 0)
3812     - capacity = VMCI_HANDLE_ARRAY_DEFAULT_SIZE;
3813     + capacity = min((u32)VMCI_HANDLE_ARRAY_DEFAULT_CAPACITY,
3814     + max_capacity);
3815    
3816     array = kmalloc(handle_arr_calc_size(capacity), GFP_ATOMIC);
3817     if (!array)
3818     return NULL;
3819    
3820     array->capacity = capacity;
3821     + array->max_capacity = max_capacity;
3822     array->size = 0;
3823    
3824     return array;
3825     @@ -44,27 +49,34 @@ void vmci_handle_arr_destroy(struct vmci_handle_arr *array)
3826     kfree(array);
3827     }
3828    
3829     -void vmci_handle_arr_append_entry(struct vmci_handle_arr **array_ptr,
3830     - struct vmci_handle handle)
3831     +int vmci_handle_arr_append_entry(struct vmci_handle_arr **array_ptr,
3832     + struct vmci_handle handle)
3833     {
3834     struct vmci_handle_arr *array = *array_ptr;
3835    
3836     if (unlikely(array->size >= array->capacity)) {
3837     /* reallocate. */
3838     struct vmci_handle_arr *new_array;
3839     - size_t new_capacity = array->capacity * VMCI_ARR_CAP_MULT;
3840     - size_t new_size = handle_arr_calc_size(new_capacity);
3841     + u32 capacity_bump = min(array->max_capacity - array->capacity,
3842     + array->capacity);
3843     + size_t new_size = handle_arr_calc_size(array->capacity +
3844     + capacity_bump);
3845     +
3846     + if (array->size >= array->max_capacity)
3847     + return VMCI_ERROR_NO_MEM;
3848    
3849     new_array = krealloc(array, new_size, GFP_ATOMIC);
3850     if (!new_array)
3851     - return;
3852     + return VMCI_ERROR_NO_MEM;
3853    
3854     - new_array->capacity = new_capacity;
3855     + new_array->capacity += capacity_bump;
3856     *array_ptr = array = new_array;
3857     }
3858    
3859     array->entries[array->size] = handle;
3860     array->size++;
3861     +
3862     + return VMCI_SUCCESS;
3863     }
3864    
3865     /*
3866     @@ -74,7 +86,7 @@ struct vmci_handle vmci_handle_arr_remove_entry(struct vmci_handle_arr *array,
3867     struct vmci_handle entry_handle)
3868     {
3869     struct vmci_handle handle = VMCI_INVALID_HANDLE;
3870     - size_t i;
3871     + u32 i;
3872    
3873     for (i = 0; i < array->size; i++) {
3874     if (vmci_handle_is_equal(array->entries[i], entry_handle)) {
3875     @@ -109,7 +121,7 @@ struct vmci_handle vmci_handle_arr_remove_tail(struct vmci_handle_arr *array)
3876     * Handle at given index, VMCI_INVALID_HANDLE if invalid index.
3877     */
3878     struct vmci_handle
3879     -vmci_handle_arr_get_entry(const struct vmci_handle_arr *array, size_t index)
3880     +vmci_handle_arr_get_entry(const struct vmci_handle_arr *array, u32 index)
3881     {
3882     if (unlikely(index >= array->size))
3883     return VMCI_INVALID_HANDLE;
3884     @@ -120,7 +132,7 @@ vmci_handle_arr_get_entry(const struct vmci_handle_arr *array, size_t index)
3885     bool vmci_handle_arr_has_entry(const struct vmci_handle_arr *array,
3886     struct vmci_handle entry_handle)
3887     {
3888     - size_t i;
3889     + u32 i;
3890    
3891     for (i = 0; i < array->size; i++)
3892     if (vmci_handle_is_equal(array->entries[i], entry_handle))
3893     diff --git a/drivers/misc/vmw_vmci/vmci_handle_array.h b/drivers/misc/vmw_vmci/vmci_handle_array.h
3894     index b5f3a7f98cf1..0fc58597820e 100644
3895     --- a/drivers/misc/vmw_vmci/vmci_handle_array.h
3896     +++ b/drivers/misc/vmw_vmci/vmci_handle_array.h
3897     @@ -17,32 +17,41 @@
3898     #define _VMCI_HANDLE_ARRAY_H_
3899    
3900     #include <linux/vmw_vmci_defs.h>
3901     +#include <linux/limits.h>
3902     #include <linux/types.h>
3903    
3904     -#define VMCI_HANDLE_ARRAY_DEFAULT_SIZE 4
3905     -#define VMCI_ARR_CAP_MULT 2 /* Array capacity multiplier */
3906     -
3907     struct vmci_handle_arr {
3908     - size_t capacity;
3909     - size_t size;
3910     + u32 capacity;
3911     + u32 max_capacity;
3912     + u32 size;
3913     + u32 pad;
3914     struct vmci_handle entries[];
3915     };
3916    
3917     -struct vmci_handle_arr *vmci_handle_arr_create(size_t capacity);
3918     +#define VMCI_HANDLE_ARRAY_HEADER_SIZE \
3919     + offsetof(struct vmci_handle_arr, entries)
3920     +/* Select a default capacity that results in a 64 byte sized array */
3921     +#define VMCI_HANDLE_ARRAY_DEFAULT_CAPACITY 6
3922     +/* Make sure that the max array size can be expressed by a u32 */
3923     +#define VMCI_HANDLE_ARRAY_MAX_CAPACITY \
3924     + ((U32_MAX - VMCI_HANDLE_ARRAY_HEADER_SIZE - 1) / \
3925     + sizeof(struct vmci_handle))
3926     +
3927     +struct vmci_handle_arr *vmci_handle_arr_create(u32 capacity, u32 max_capacity);
3928     void vmci_handle_arr_destroy(struct vmci_handle_arr *array);
3929     -void vmci_handle_arr_append_entry(struct vmci_handle_arr **array_ptr,
3930     - struct vmci_handle handle);
3931     +int vmci_handle_arr_append_entry(struct vmci_handle_arr **array_ptr,
3932     + struct vmci_handle handle);
3933     struct vmci_handle vmci_handle_arr_remove_entry(struct vmci_handle_arr *array,
3934     struct vmci_handle
3935     entry_handle);
3936     struct vmci_handle vmci_handle_arr_remove_tail(struct vmci_handle_arr *array);
3937     struct vmci_handle
3938     -vmci_handle_arr_get_entry(const struct vmci_handle_arr *array, size_t index);
3939     +vmci_handle_arr_get_entry(const struct vmci_handle_arr *array, u32 index);
3940     bool vmci_handle_arr_has_entry(const struct vmci_handle_arr *array,
3941     struct vmci_handle entry_handle);
3942     struct vmci_handle *vmci_handle_arr_get_handles(struct vmci_handle_arr *array);
3943    
3944     -static inline size_t vmci_handle_arr_get_size(
3945     +static inline u32 vmci_handle_arr_get_size(
3946     const struct vmci_handle_arr *array)
3947     {
3948     return array->size;
3949     diff --git a/drivers/net/can/spi/Kconfig b/drivers/net/can/spi/Kconfig
3950     index 148cae5871a6..249d2db7d600 100644
3951     --- a/drivers/net/can/spi/Kconfig
3952     +++ b/drivers/net/can/spi/Kconfig
3953     @@ -2,9 +2,10 @@ menu "CAN SPI interfaces"
3954     depends on SPI
3955    
3956     config CAN_MCP251X
3957     - tristate "Microchip MCP251x SPI CAN controllers"
3958     + tristate "Microchip MCP251x and MCP25625 SPI CAN controllers"
3959     depends on HAS_DMA
3960     ---help---
3961     - Driver for the Microchip MCP251x SPI CAN controllers.
3962     + Driver for the Microchip MCP251x and MCP25625 SPI CAN
3963     + controllers.
3964    
3965     endmenu
3966     diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
3967     index f3f05fea8e1f..d8c448beab24 100644
3968     --- a/drivers/net/can/spi/mcp251x.c
3969     +++ b/drivers/net/can/spi/mcp251x.c
3970     @@ -1,5 +1,5 @@
3971     /*
3972     - * CAN bus driver for Microchip 251x CAN Controller with SPI Interface
3973     + * CAN bus driver for Microchip 251x/25625 CAN Controller with SPI Interface
3974     *
3975     * MCP2510 support and bug fixes by Christian Pellegrin
3976     * <chripell@evolware.org>
3977     @@ -41,7 +41,7 @@
3978     * static struct spi_board_info spi_board_info[] = {
3979     * {
3980     * .modalias = "mcp2510",
3981     - * // or "mcp2515" depending on your controller
3982     + * // "mcp2515" or "mcp25625" depending on your controller
3983     * .platform_data = &mcp251x_info,
3984     * .irq = IRQ_EINT13,
3985     * .max_speed_hz = 2*1000*1000,
3986     @@ -238,6 +238,7 @@ static const struct can_bittiming_const mcp251x_bittiming_const = {
3987     enum mcp251x_model {
3988     CAN_MCP251X_MCP2510 = 0x2510,
3989     CAN_MCP251X_MCP2515 = 0x2515,
3990     + CAN_MCP251X_MCP25625 = 0x25625,
3991     };
3992    
3993     struct mcp251x_priv {
3994     @@ -280,7 +281,6 @@ static inline int mcp251x_is_##_model(struct spi_device *spi) \
3995     }
3996    
3997     MCP251X_IS(2510);
3998     -MCP251X_IS(2515);
3999    
4000     static void mcp251x_clean(struct net_device *net)
4001     {
4002     @@ -640,7 +640,7 @@ static int mcp251x_hw_reset(struct spi_device *spi)
4003    
4004     /* Wait for oscillator startup timer after reset */
4005     mdelay(MCP251X_OST_DELAY_MS);
4006     -
4007     +
4008     reg = mcp251x_read_reg(spi, CANSTAT);
4009     if ((reg & CANCTRL_REQOP_MASK) != CANCTRL_REQOP_CONF)
4010     return -ENODEV;
4011     @@ -821,9 +821,8 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
4012     /* receive buffer 0 */
4013     if (intf & CANINTF_RX0IF) {
4014     mcp251x_hw_rx(spi, 0);
4015     - /*
4016     - * Free one buffer ASAP
4017     - * (The MCP2515 does this automatically.)
4018     + /* Free one buffer ASAP
4019     + * (The MCP2515/25625 does this automatically.)
4020     */
4021     if (mcp251x_is_2510(spi))
4022     mcp251x_write_bits(spi, CANINTF, CANINTF_RX0IF, 0x00);
4023     @@ -832,7 +831,7 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
4024     /* receive buffer 1 */
4025     if (intf & CANINTF_RX1IF) {
4026     mcp251x_hw_rx(spi, 1);
4027     - /* the MCP2515 does this automatically */
4028     + /* The MCP2515/25625 does this automatically. */
4029     if (mcp251x_is_2510(spi))
4030     clear_intf |= CANINTF_RX1IF;
4031     }
4032     @@ -1007,6 +1006,10 @@ static const struct of_device_id mcp251x_of_match[] = {
4033     .compatible = "microchip,mcp2515",
4034     .data = (void *)CAN_MCP251X_MCP2515,
4035     },
4036     + {
4037     + .compatible = "microchip,mcp25625",
4038     + .data = (void *)CAN_MCP251X_MCP25625,
4039     + },
4040     { }
4041     };
4042     MODULE_DEVICE_TABLE(of, mcp251x_of_match);
4043     @@ -1020,6 +1023,10 @@ static const struct spi_device_id mcp251x_id_table[] = {
4044     .name = "mcp2515",
4045     .driver_data = (kernel_ulong_t)CAN_MCP251X_MCP2515,
4046     },
4047     + {
4048     + .name = "mcp25625",
4049     + .driver_data = (kernel_ulong_t)CAN_MCP251X_MCP25625,
4050     + },
4051     { }
4052     };
4053     MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
4054     @@ -1260,5 +1267,5 @@ module_spi_driver(mcp251x_can_driver);
4055    
4056     MODULE_AUTHOR("Chris Elston <celston@katalix.com>, "
4057     "Christian Pellegrin <chripell@evolware.org>");
4058     -MODULE_DESCRIPTION("Microchip 251x CAN driver");
4059     +MODULE_DESCRIPTION("Microchip 251x/25625 CAN driver");
4060     MODULE_LICENSE("GPL v2");
4061     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
4062     index 8aecd8ef6542..15a0850e6bde 100644
4063     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
4064     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
4065     @@ -1562,7 +1562,8 @@ static int bnx2x_get_module_info(struct net_device *dev,
4066     }
4067    
4068     if (!sff8472_comp ||
4069     - (diag_type & SFP_EEPROM_DIAG_ADDR_CHANGE_REQ)) {
4070     + (diag_type & SFP_EEPROM_DIAG_ADDR_CHANGE_REQ) ||
4071     + !(diag_type & SFP_EEPROM_DDM_IMPLEMENTED)) {
4072     modinfo->type = ETH_MODULE_SFF_8079;
4073     modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
4074     } else {
4075     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
4076     index b7d251108c19..7115f5025664 100644
4077     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
4078     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h
4079     @@ -62,6 +62,7 @@
4080     #define SFP_EEPROM_DIAG_TYPE_ADDR 0x5c
4081     #define SFP_EEPROM_DIAG_TYPE_SIZE 1
4082     #define SFP_EEPROM_DIAG_ADDR_CHANGE_REQ (1<<2)
4083     +#define SFP_EEPROM_DDM_IMPLEMENTED (1<<6)
4084     #define SFP_EEPROM_SFF_8472_COMP_ADDR 0x5e
4085     #define SFP_EEPROM_SFF_8472_COMP_SIZE 1
4086    
4087     diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c
4088     index 345818193de9..56db37d92937 100644
4089     --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c
4090     +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c
4091     @@ -898,7 +898,7 @@ static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
4092     u64 *data)
4093     {
4094     struct be_adapter *adapter = netdev_priv(netdev);
4095     - int status;
4096     + int status, cnt;
4097     u8 link_status = 0;
4098    
4099     if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) {
4100     @@ -909,6 +909,9 @@ static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
4101    
4102     memset(data, 0, sizeof(u64) * ETHTOOL_TESTS_NUM);
4103    
4104     + /* check link status before offline tests */
4105     + link_status = netif_carrier_ok(netdev);
4106     +
4107     if (test->flags & ETH_TEST_FL_OFFLINE) {
4108     if (be_loopback_test(adapter, BE_MAC_LOOPBACK, &data[0]) != 0)
4109     test->flags |= ETH_TEST_FL_FAILED;
4110     @@ -929,13 +932,26 @@ static void be_self_test(struct net_device *netdev, struct ethtool_test *test,
4111     test->flags |= ETH_TEST_FL_FAILED;
4112     }
4113    
4114     - status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
4115     - if (status) {
4116     - test->flags |= ETH_TEST_FL_FAILED;
4117     - data[4] = -1;
4118     - } else if (!link_status) {
4119     + /* link status was down prior to test */
4120     + if (!link_status) {
4121     test->flags |= ETH_TEST_FL_FAILED;
4122     data[4] = 1;
4123     + return;
4124     + }
4125     +
4126     + for (cnt = 10; cnt; cnt--) {
4127     + status = be_cmd_link_status_query(adapter, NULL, &link_status,
4128     + 0);
4129     + if (status) {
4130     + test->flags |= ETH_TEST_FL_FAILED;
4131     + data[4] = -1;
4132     + break;
4133     + }
4134     +
4135     + if (link_status)
4136     + break;
4137     +
4138     + msleep_interruptible(500);
4139     }
4140     }
4141    
4142     diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
4143     index 8bbedfc9c48f..a0f97c5ab6ef 100644
4144     --- a/drivers/net/ethernet/intel/e1000e/netdev.c
4145     +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
4146     @@ -4212,7 +4212,7 @@ void e1000e_up(struct e1000_adapter *adapter)
4147     e1000_configure_msix(adapter);
4148     e1000_irq_enable(adapter);
4149    
4150     - netif_start_queue(adapter->netdev);
4151     + /* Tx queue started by watchdog timer when link is up */
4152    
4153     e1000e_trigger_lsc(adapter);
4154     }
4155     @@ -4588,6 +4588,7 @@ int e1000e_open(struct net_device *netdev)
4156     pm_runtime_get_sync(&pdev->dev);
4157    
4158     netif_carrier_off(netdev);
4159     + netif_stop_queue(netdev);
4160    
4161     /* allocate transmit descriptors */
4162     err = e1000e_setup_tx_resources(adapter->tx_ring);
4163     @@ -4648,7 +4649,6 @@ int e1000e_open(struct net_device *netdev)
4164     e1000_irq_enable(adapter);
4165    
4166     adapter->tx_hang_recheck = false;
4167     - netif_start_queue(netdev);
4168    
4169     hw->mac.get_link_status = true;
4170     pm_runtime_put(&pdev->dev);
4171     @@ -5271,6 +5271,7 @@ static void e1000_watchdog_task(struct work_struct *work)
4172     if (phy->ops.cfg_on_link_up)
4173     phy->ops.cfg_on_link_up(hw);
4174    
4175     + netif_wake_queue(netdev);
4176     netif_carrier_on(netdev);
4177    
4178     if (!test_bit(__E1000_DOWN, &adapter->state))
4179     @@ -5284,6 +5285,7 @@ static void e1000_watchdog_task(struct work_struct *work)
4180     /* Link status message must follow this format */
4181     pr_info("%s NIC Link is Down\n", adapter->netdev->name);
4182     netif_carrier_off(netdev);
4183     + netif_stop_queue(netdev);
4184     if (!test_bit(__E1000_DOWN, &adapter->state))
4185     mod_timer(&adapter->phy_info_timer,
4186     round_jiffies(jiffies + 2 * HZ));
4187     @@ -5291,13 +5293,8 @@ static void e1000_watchdog_task(struct work_struct *work)
4188     /* 8000ES2LAN requires a Rx packet buffer work-around
4189     * on link down event; reset the controller to flush
4190     * the Rx packet buffer.
4191     - *
4192     - * If the link is lost the controller stops DMA, but
4193     - * if there is queued Tx work it cannot be done. So
4194     - * reset the controller to flush the Tx packet buffers.
4195     */
4196     - if ((adapter->flags & FLAG_RX_NEEDS_RESTART) ||
4197     - e1000_desc_unused(tx_ring) + 1 < tx_ring->count)
4198     + if (adapter->flags & FLAG_RX_NEEDS_RESTART)
4199     adapter->flags |= FLAG_RESTART_NOW;
4200     else
4201     pm_schedule_suspend(netdev->dev.parent,
4202     @@ -5320,6 +5317,14 @@ link_up:
4203     adapter->gotc_old = adapter->stats.gotc;
4204     spin_unlock(&adapter->stats64_lock);
4205    
4206     + /* If the link is lost the controller stops DMA, but
4207     + * if there is queued Tx work it cannot be done. So
4208     + * reset the controller to flush the Tx packet buffers.
4209     + */
4210     + if (!netif_carrier_ok(netdev) &&
4211     + (e1000_desc_unused(tx_ring) + 1 < tx_ring->count))
4212     + adapter->flags |= FLAG_RESTART_NOW;
4213     +
4214     /* If reset is necessary, do it outside of interrupt context. */
4215     if (adapter->flags & FLAG_RESTART_NOW) {
4216     schedule_work(&adapter->reset_task);
4217     diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h
4218     index a01e6c0d0cd1..b2a745b579fd 100644
4219     --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h
4220     +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h
4221     @@ -935,7 +935,7 @@ static inline void mlxsw_reg_spaft_pack(char *payload, u8 local_port,
4222     MLXSW_REG_ZERO(spaft, payload);
4223     mlxsw_reg_spaft_local_port_set(payload, local_port);
4224     mlxsw_reg_spaft_allow_untagged_set(payload, allow_untagged);
4225     - mlxsw_reg_spaft_allow_prio_tagged_set(payload, true);
4226     + mlxsw_reg_spaft_allow_prio_tagged_set(payload, allow_untagged);
4227     mlxsw_reg_spaft_allow_tagged_set(payload, true);
4228     }
4229    
4230     diff --git a/drivers/net/ethernet/sis/sis900.c b/drivers/net/ethernet/sis/sis900.c
4231     index 6f85276376e8..ae9b983e8e5c 100644
4232     --- a/drivers/net/ethernet/sis/sis900.c
4233     +++ b/drivers/net/ethernet/sis/sis900.c
4234     @@ -1058,7 +1058,7 @@ sis900_open(struct net_device *net_dev)
4235     sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
4236    
4237     /* Enable all known interrupts by setting the interrupt mask. */
4238     - sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE);
4239     + sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
4240     sw32(cr, RxENA | sr32(cr));
4241     sw32(ier, IE);
4242    
4243     @@ -1581,7 +1581,7 @@ static void sis900_tx_timeout(struct net_device *net_dev)
4244     sw32(txdp, sis_priv->tx_ring_dma);
4245    
4246     /* Enable all known interrupts by setting the interrupt mask. */
4247     - sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE);
4248     + sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
4249     }
4250    
4251     /**
4252     @@ -1621,7 +1621,7 @@ sis900_start_xmit(struct sk_buff *skb, struct net_device *net_dev)
4253     spin_unlock_irqrestore(&sis_priv->lock, flags);
4254     return NETDEV_TX_OK;
4255     }
4256     - sis_priv->tx_ring[entry].cmdsts = (OWN | skb->len);
4257     + sis_priv->tx_ring[entry].cmdsts = (OWN | INTR | skb->len);
4258     sw32(cr, TxENA | sr32(cr));
4259    
4260     sis_priv->cur_tx ++;
4261     @@ -1677,7 +1677,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
4262     do {
4263     status = sr32(isr);
4264    
4265     - if ((status & (HIBERR|TxURN|TxERR|TxIDLE|RxORN|RxERR|RxOK)) == 0)
4266     + if ((status & (HIBERR|TxURN|TxERR|TxIDLE|TxDESC|RxORN|RxERR|RxOK)) == 0)
4267     /* nothing intresting happened */
4268     break;
4269     handled = 1;
4270     @@ -1687,7 +1687,7 @@ static irqreturn_t sis900_interrupt(int irq, void *dev_instance)
4271     /* Rx interrupt */
4272     sis900_rx(net_dev);
4273    
4274     - if (status & (TxURN | TxERR | TxIDLE))
4275     + if (status & (TxURN | TxERR | TxIDLE | TxDESC))
4276     /* Tx interrupt */
4277     sis900_finish_xmit(net_dev);
4278    
4279     @@ -1899,8 +1899,8 @@ static void sis900_finish_xmit (struct net_device *net_dev)
4280    
4281     if (tx_status & OWN) {
4282     /* The packet is not transmitted yet (owned by hardware) !
4283     - * Note: the interrupt is generated only when Tx Machine
4284     - * is idle, so this is an almost impossible case */
4285     + * Note: this is an almost impossible condition
4286     + * in case of TxDESC ('descriptor interrupt') */
4287     break;
4288     }
4289    
4290     @@ -2476,7 +2476,7 @@ static int sis900_resume(struct pci_dev *pci_dev)
4291     sis900_set_mode(sis_priv, HW_SPEED_10_MBPS, FDX_CAPABLE_HALF_SELECTED);
4292    
4293     /* Enable all known interrupts by setting the interrupt mask. */
4294     - sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE);
4295     + sw32(imr, RxSOVR | RxORN | RxERR | RxOK | TxURN | TxERR | TxIDLE | TxDESC);
4296     sw32(cr, RxENA | sr32(cr));
4297     sw32(ier, IE);
4298    
4299     diff --git a/drivers/net/ppp/ppp_mppe.c b/drivers/net/ppp/ppp_mppe.c
4300     index f60f7660b451..92f52a73ec0e 100644
4301     --- a/drivers/net/ppp/ppp_mppe.c
4302     +++ b/drivers/net/ppp/ppp_mppe.c
4303     @@ -63,6 +63,7 @@ MODULE_AUTHOR("Frank Cusack <fcusack@fcusack.com>");
4304     MODULE_DESCRIPTION("Point-to-Point Protocol Microsoft Point-to-Point Encryption support");
4305     MODULE_LICENSE("Dual BSD/GPL");
4306     MODULE_ALIAS("ppp-compress-" __stringify(CI_MPPE));
4307     +MODULE_SOFTDEP("pre: arc4");
4308     MODULE_VERSION("1.0.2");
4309    
4310     static unsigned int
4311     diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
4312     index 99ab20334d21..37c3cbe0ff2b 100644
4313     --- a/drivers/net/wireless/ath/carl9170/usb.c
4314     +++ b/drivers/net/wireless/ath/carl9170/usb.c
4315     @@ -128,6 +128,8 @@ static struct usb_device_id carl9170_usb_ids[] = {
4316     };
4317     MODULE_DEVICE_TABLE(usb, carl9170_usb_ids);
4318    
4319     +static struct usb_driver carl9170_driver;
4320     +
4321     static void carl9170_usb_submit_data_urb(struct ar9170 *ar)
4322     {
4323     struct urb *urb;
4324     @@ -966,32 +968,28 @@ err_out:
4325    
4326     static void carl9170_usb_firmware_failed(struct ar9170 *ar)
4327     {
4328     - struct device *parent = ar->udev->dev.parent;
4329     - struct usb_device *udev;
4330     -
4331     - /*
4332     - * Store a copy of the usb_device pointer locally.
4333     - * This is because device_release_driver initiates
4334     - * carl9170_usb_disconnect, which in turn frees our
4335     - * driver context (ar).
4336     + /* Store a copies of the usb_interface and usb_device pointer locally.
4337     + * This is because release_driver initiates carl9170_usb_disconnect,
4338     + * which in turn frees our driver context (ar).
4339     */
4340     - udev = ar->udev;
4341     + struct usb_interface *intf = ar->intf;
4342     + struct usb_device *udev = ar->udev;
4343    
4344     complete(&ar->fw_load_wait);
4345     + /* at this point 'ar' could be already freed. Don't use it anymore */
4346     + ar = NULL;
4347    
4348     /* unbind anything failed */
4349     - if (parent)
4350     - device_lock(parent);
4351     -
4352     - device_release_driver(&udev->dev);
4353     - if (parent)
4354     - device_unlock(parent);
4355     + usb_lock_device(udev);
4356     + usb_driver_release_interface(&carl9170_driver, intf);
4357     + usb_unlock_device(udev);
4358    
4359     - usb_put_dev(udev);
4360     + usb_put_intf(intf);
4361     }
4362    
4363     static void carl9170_usb_firmware_finish(struct ar9170 *ar)
4364     {
4365     + struct usb_interface *intf = ar->intf;
4366     int err;
4367    
4368     err = carl9170_parse_firmware(ar);
4369     @@ -1009,7 +1007,7 @@ static void carl9170_usb_firmware_finish(struct ar9170 *ar)
4370     goto err_unrx;
4371    
4372     complete(&ar->fw_load_wait);
4373     - usb_put_dev(ar->udev);
4374     + usb_put_intf(intf);
4375     return;
4376    
4377     err_unrx:
4378     @@ -1052,7 +1050,6 @@ static int carl9170_usb_probe(struct usb_interface *intf,
4379     return PTR_ERR(ar);
4380    
4381     udev = interface_to_usbdev(intf);
4382     - usb_get_dev(udev);
4383     ar->udev = udev;
4384     ar->intf = intf;
4385     ar->features = id->driver_info;
4386     @@ -1094,15 +1091,14 @@ static int carl9170_usb_probe(struct usb_interface *intf,
4387     atomic_set(&ar->rx_anch_urbs, 0);
4388     atomic_set(&ar->rx_pool_urbs, 0);
4389    
4390     - usb_get_dev(ar->udev);
4391     + usb_get_intf(intf);
4392    
4393     carl9170_set_state(ar, CARL9170_STOPPED);
4394    
4395     err = request_firmware_nowait(THIS_MODULE, 1, CARL9170FW_NAME,
4396     &ar->udev->dev, GFP_KERNEL, ar, carl9170_usb_firmware_step2);
4397     if (err) {
4398     - usb_put_dev(udev);
4399     - usb_put_dev(udev);
4400     + usb_put_intf(intf);
4401     carl9170_free(ar);
4402     }
4403     return err;
4404     @@ -1131,7 +1127,6 @@ static void carl9170_usb_disconnect(struct usb_interface *intf)
4405    
4406     carl9170_release_firmware(ar);
4407     carl9170_free(ar);
4408     - usb_put_dev(udev);
4409     }
4410    
4411     #ifdef CONFIG_PM
4412     diff --git a/drivers/net/wireless/intersil/p54/p54usb.c b/drivers/net/wireless/intersil/p54/p54usb.c
4413     index 043bd1c23c19..4a197a32d78c 100644
4414     --- a/drivers/net/wireless/intersil/p54/p54usb.c
4415     +++ b/drivers/net/wireless/intersil/p54/p54usb.c
4416     @@ -33,6 +33,8 @@ MODULE_ALIAS("prism54usb");
4417     MODULE_FIRMWARE("isl3886usb");
4418     MODULE_FIRMWARE("isl3887usb");
4419    
4420     +static struct usb_driver p54u_driver;
4421     +
4422     /*
4423     * Note:
4424     *
4425     @@ -921,9 +923,9 @@ static void p54u_load_firmware_cb(const struct firmware *firmware,
4426     {
4427     struct p54u_priv *priv = context;
4428     struct usb_device *udev = priv->udev;
4429     + struct usb_interface *intf = priv->intf;
4430     int err;
4431    
4432     - complete(&priv->fw_wait_load);
4433     if (firmware) {
4434     priv->fw = firmware;
4435     err = p54u_start_ops(priv);
4436     @@ -932,26 +934,22 @@ static void p54u_load_firmware_cb(const struct firmware *firmware,
4437     dev_err(&udev->dev, "Firmware not found.\n");
4438     }
4439    
4440     - if (err) {
4441     - struct device *parent = priv->udev->dev.parent;
4442     -
4443     - dev_err(&udev->dev, "failed to initialize device (%d)\n", err);
4444     -
4445     - if (parent)
4446     - device_lock(parent);
4447     + complete(&priv->fw_wait_load);
4448     + /*
4449     + * At this point p54u_disconnect may have already freed
4450     + * the "priv" context. Do not use it anymore!
4451     + */
4452     + priv = NULL;
4453    
4454     - device_release_driver(&udev->dev);
4455     - /*
4456     - * At this point p54u_disconnect has already freed
4457     - * the "priv" context. Do not use it anymore!
4458     - */
4459     - priv = NULL;
4460     + if (err) {
4461     + dev_err(&intf->dev, "failed to initialize device (%d)\n", err);
4462    
4463     - if (parent)
4464     - device_unlock(parent);
4465     + usb_lock_device(udev);
4466     + usb_driver_release_interface(&p54u_driver, intf);
4467     + usb_unlock_device(udev);
4468     }
4469    
4470     - usb_put_dev(udev);
4471     + usb_put_intf(intf);
4472     }
4473    
4474     static int p54u_load_firmware(struct ieee80211_hw *dev,
4475     @@ -972,14 +970,14 @@ static int p54u_load_firmware(struct ieee80211_hw *dev,
4476     dev_info(&priv->udev->dev, "Loading firmware file %s\n",
4477     p54u_fwlist[i].fw);
4478    
4479     - usb_get_dev(udev);
4480     + usb_get_intf(intf);
4481     err = request_firmware_nowait(THIS_MODULE, 1, p54u_fwlist[i].fw,
4482     device, GFP_KERNEL, priv,
4483     p54u_load_firmware_cb);
4484     if (err) {
4485     dev_err(&priv->udev->dev, "(p54usb) cannot load firmware %s "
4486     "(%d)!\n", p54u_fwlist[i].fw, err);
4487     - usb_put_dev(udev);
4488     + usb_put_intf(intf);
4489     }
4490    
4491     return err;
4492     @@ -1011,8 +1009,6 @@ static int p54u_probe(struct usb_interface *intf,
4493     skb_queue_head_init(&priv->rx_queue);
4494     init_usb_anchor(&priv->submitted);
4495    
4496     - usb_get_dev(udev);
4497     -
4498     /* really lazy and simple way of figuring out if we're a 3887 */
4499     /* TODO: should just stick the identification in the device table */
4500     i = intf->altsetting->desc.bNumEndpoints;
4501     @@ -1053,10 +1049,8 @@ static int p54u_probe(struct usb_interface *intf,
4502     priv->upload_fw = p54u_upload_firmware_net2280;
4503     }
4504     err = p54u_load_firmware(dev, intf);
4505     - if (err) {
4506     - usb_put_dev(udev);
4507     + if (err)
4508     p54_free_common(dev);
4509     - }
4510     return err;
4511     }
4512    
4513     @@ -1072,7 +1066,6 @@ static void p54u_disconnect(struct usb_interface *intf)
4514     wait_for_completion(&priv->fw_wait_load);
4515     p54_unregister_common(dev);
4516    
4517     - usb_put_dev(interface_to_usbdev(intf));
4518     release_firmware(priv->fw);
4519     p54_free_common(dev);
4520     }
4521     diff --git a/drivers/net/wireless/marvell/mwifiex/fw.h b/drivers/net/wireless/marvell/mwifiex/fw.h
4522     index 4b1894b4757f..395d6ece2cac 100644
4523     --- a/drivers/net/wireless/marvell/mwifiex/fw.h
4524     +++ b/drivers/net/wireless/marvell/mwifiex/fw.h
4525     @@ -1719,9 +1719,10 @@ struct mwifiex_ie_types_wmm_queue_status {
4526     struct ieee_types_vendor_header {
4527     u8 element_id;
4528     u8 len;
4529     - u8 oui[4]; /* 0~2: oui, 3: oui_type */
4530     - u8 oui_subtype;
4531     - u8 version;
4532     + struct {
4533     + u8 oui[3];
4534     + u8 oui_type;
4535     + } __packed oui;
4536     } __packed;
4537    
4538     struct ieee_types_wmm_parameter {
4539     @@ -1735,6 +1736,9 @@ struct ieee_types_wmm_parameter {
4540     * Version [1]
4541     */
4542     struct ieee_types_vendor_header vend_hdr;
4543     + u8 oui_subtype;
4544     + u8 version;
4545     +
4546     u8 qos_info_bitmap;
4547     u8 reserved;
4548     struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_NUM_ACS];
4549     @@ -1752,6 +1756,8 @@ struct ieee_types_wmm_info {
4550     * Version [1]
4551     */
4552     struct ieee_types_vendor_header vend_hdr;
4553     + u8 oui_subtype;
4554     + u8 version;
4555    
4556     u8 qos_info_bitmap;
4557     } __packed;
4558     diff --git a/drivers/net/wireless/marvell/mwifiex/ie.c b/drivers/net/wireless/marvell/mwifiex/ie.c
4559     index c488c3068abc..0f977dc556ca 100644
4560     --- a/drivers/net/wireless/marvell/mwifiex/ie.c
4561     +++ b/drivers/net/wireless/marvell/mwifiex/ie.c
4562     @@ -328,6 +328,8 @@ static int mwifiex_uap_parse_tail_ies(struct mwifiex_private *priv,
4563     struct ieee80211_vendor_ie *vendorhdr;
4564     u16 gen_idx = MWIFIEX_AUTO_IDX_MASK, ie_len = 0;
4565     int left_len, parsed_len = 0;
4566     + unsigned int token_len;
4567     + int err = 0;
4568    
4569     if (!info->tail || !info->tail_len)
4570     return 0;
4571     @@ -343,6 +345,12 @@ static int mwifiex_uap_parse_tail_ies(struct mwifiex_private *priv,
4572     */
4573     while (left_len > sizeof(struct ieee_types_header)) {
4574     hdr = (void *)(info->tail + parsed_len);
4575     + token_len = hdr->len + sizeof(struct ieee_types_header);
4576     + if (token_len > left_len) {
4577     + err = -EINVAL;
4578     + goto out;
4579     + }
4580     +
4581     switch (hdr->element_id) {
4582     case WLAN_EID_SSID:
4583     case WLAN_EID_SUPP_RATES:
4584     @@ -356,13 +364,16 @@ static int mwifiex_uap_parse_tail_ies(struct mwifiex_private *priv,
4585     case WLAN_EID_VENDOR_SPECIFIC:
4586     break;
4587     default:
4588     - memcpy(gen_ie->ie_buffer + ie_len, hdr,
4589     - hdr->len + sizeof(struct ieee_types_header));
4590     - ie_len += hdr->len + sizeof(struct ieee_types_header);
4591     + if (ie_len + token_len > IEEE_MAX_IE_SIZE) {
4592     + err = -EINVAL;
4593     + goto out;
4594     + }
4595     + memcpy(gen_ie->ie_buffer + ie_len, hdr, token_len);
4596     + ie_len += token_len;
4597     break;
4598     }
4599     - left_len -= hdr->len + sizeof(struct ieee_types_header);
4600     - parsed_len += hdr->len + sizeof(struct ieee_types_header);
4601     + left_len -= token_len;
4602     + parsed_len += token_len;
4603     }
4604    
4605     /* parse only WPA vendor IE from tail, WMM IE is configured by
4606     @@ -372,15 +383,17 @@ static int mwifiex_uap_parse_tail_ies(struct mwifiex_private *priv,
4607     WLAN_OUI_TYPE_MICROSOFT_WPA,
4608     info->tail, info->tail_len);
4609     if (vendorhdr) {
4610     - memcpy(gen_ie->ie_buffer + ie_len, vendorhdr,
4611     - vendorhdr->len + sizeof(struct ieee_types_header));
4612     - ie_len += vendorhdr->len + sizeof(struct ieee_types_header);
4613     + token_len = vendorhdr->len + sizeof(struct ieee_types_header);
4614     + if (ie_len + token_len > IEEE_MAX_IE_SIZE) {
4615     + err = -EINVAL;
4616     + goto out;
4617     + }
4618     + memcpy(gen_ie->ie_buffer + ie_len, vendorhdr, token_len);
4619     + ie_len += token_len;
4620     }
4621    
4622     - if (!ie_len) {
4623     - kfree(gen_ie);
4624     - return 0;
4625     - }
4626     + if (!ie_len)
4627     + goto out;
4628    
4629     gen_ie->ie_index = cpu_to_le16(gen_idx);
4630     gen_ie->mgmt_subtype_mask = cpu_to_le16(MGMT_MASK_BEACON |
4631     @@ -390,13 +403,15 @@ static int mwifiex_uap_parse_tail_ies(struct mwifiex_private *priv,
4632    
4633     if (mwifiex_update_uap_custom_ie(priv, gen_ie, &gen_idx, NULL, NULL,
4634     NULL, NULL)) {
4635     - kfree(gen_ie);
4636     - return -1;
4637     + err = -EINVAL;
4638     + goto out;
4639     }
4640    
4641     priv->gen_idx = gen_idx;
4642     +
4643     + out:
4644     kfree(gen_ie);
4645     - return 0;
4646     + return err;
4647     }
4648    
4649     /* This function parses different IEs-head & tail IEs, beacon IEs,
4650     diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
4651     index 78d59a67f7e1..97847eee2dfb 100644
4652     --- a/drivers/net/wireless/marvell/mwifiex/scan.c
4653     +++ b/drivers/net/wireless/marvell/mwifiex/scan.c
4654     @@ -1236,6 +1236,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4655     }
4656     switch (element_id) {
4657     case WLAN_EID_SSID:
4658     + if (element_len > IEEE80211_MAX_SSID_LEN)
4659     + return -EINVAL;
4660     bss_entry->ssid.ssid_len = element_len;
4661     memcpy(bss_entry->ssid.ssid, (current_ptr + 2),
4662     element_len);
4663     @@ -1245,6 +1247,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4664     break;
4665    
4666     case WLAN_EID_SUPP_RATES:
4667     + if (element_len > MWIFIEX_SUPPORTED_RATES)
4668     + return -EINVAL;
4669     memcpy(bss_entry->data_rates, current_ptr + 2,
4670     element_len);
4671     memcpy(bss_entry->supported_rates, current_ptr + 2,
4672     @@ -1254,6 +1258,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4673     break;
4674    
4675     case WLAN_EID_FH_PARAMS:
4676     + if (element_len + 2 < sizeof(*fh_param_set))
4677     + return -EINVAL;
4678     fh_param_set =
4679     (struct ieee_types_fh_param_set *) current_ptr;
4680     memcpy(&bss_entry->phy_param_set.fh_param_set,
4681     @@ -1262,6 +1268,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4682     break;
4683    
4684     case WLAN_EID_DS_PARAMS:
4685     + if (element_len + 2 < sizeof(*ds_param_set))
4686     + return -EINVAL;
4687     ds_param_set =
4688     (struct ieee_types_ds_param_set *) current_ptr;
4689    
4690     @@ -1273,6 +1281,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4691     break;
4692    
4693     case WLAN_EID_CF_PARAMS:
4694     + if (element_len + 2 < sizeof(*cf_param_set))
4695     + return -EINVAL;
4696     cf_param_set =
4697     (struct ieee_types_cf_param_set *) current_ptr;
4698     memcpy(&bss_entry->ss_param_set.cf_param_set,
4699     @@ -1281,6 +1291,8 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4700     break;
4701    
4702     case WLAN_EID_IBSS_PARAMS:
4703     + if (element_len + 2 < sizeof(*ibss_param_set))
4704     + return -EINVAL;
4705     ibss_param_set =
4706     (struct ieee_types_ibss_param_set *)
4707     current_ptr;
4708     @@ -1290,10 +1302,14 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4709     break;
4710    
4711     case WLAN_EID_ERP_INFO:
4712     + if (!element_len)
4713     + return -EINVAL;
4714     bss_entry->erp_flags = *(current_ptr + 2);
4715     break;
4716    
4717     case WLAN_EID_PWR_CONSTRAINT:
4718     + if (!element_len)
4719     + return -EINVAL;
4720     bss_entry->local_constraint = *(current_ptr + 2);
4721     bss_entry->sensed_11h = true;
4722     break;
4723     @@ -1336,15 +1352,22 @@ int mwifiex_update_bss_desc_with_ie(struct mwifiex_adapter *adapter,
4724     vendor_ie = (struct ieee_types_vendor_specific *)
4725     current_ptr;
4726    
4727     - if (!memcmp
4728     - (vendor_ie->vend_hdr.oui, wpa_oui,
4729     - sizeof(wpa_oui))) {
4730     + /* 802.11 requires at least 3-byte OUI. */
4731     + if (element_len < sizeof(vendor_ie->vend_hdr.oui.oui))
4732     + return -EINVAL;
4733     +
4734     + /* Not long enough for a match? Skip it. */
4735     + if (element_len < sizeof(wpa_oui))
4736     + break;
4737     +
4738     + if (!memcmp(&vendor_ie->vend_hdr.oui, wpa_oui,
4739     + sizeof(wpa_oui))) {
4740     bss_entry->bcn_wpa_ie =
4741     (struct ieee_types_vendor_specific *)
4742     current_ptr;
4743     bss_entry->wpa_offset = (u16)
4744     (current_ptr - bss_entry->beacon_buf);
4745     - } else if (!memcmp(vendor_ie->vend_hdr.oui, wmm_oui,
4746     + } else if (!memcmp(&vendor_ie->vend_hdr.oui, wmm_oui,
4747     sizeof(wmm_oui))) {
4748     if (total_ie_len ==
4749     sizeof(struct ieee_types_wmm_parameter) ||
4750     diff --git a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
4751     index 1532ac9cee0b..7f9645703d96 100644
4752     --- a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
4753     +++ b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
4754     @@ -1374,7 +1374,7 @@ mwifiex_set_gen_ie_helper(struct mwifiex_private *priv, u8 *ie_data_ptr,
4755     /* Test to see if it is a WPA IE, if not, then it is a
4756     * gen IE
4757     */
4758     - if (!memcmp(pvendor_ie->oui, wpa_oui,
4759     + if (!memcmp(&pvendor_ie->oui, wpa_oui,
4760     sizeof(wpa_oui))) {
4761     find_wpa_ie = 1;
4762     break;
4763     @@ -1383,7 +1383,7 @@ mwifiex_set_gen_ie_helper(struct mwifiex_private *priv, u8 *ie_data_ptr,
4764     /* Test to see if it is a WPS IE, if so, enable
4765     * wps session flag
4766     */
4767     - if (!memcmp(pvendor_ie->oui, wps_oui,
4768     + if (!memcmp(&pvendor_ie->oui, wps_oui,
4769     sizeof(wps_oui))) {
4770     priv->wps.session_enable = true;
4771     mwifiex_dbg(priv->adapter, MSG,
4772     diff --git a/drivers/net/wireless/marvell/mwifiex/wmm.c b/drivers/net/wireless/marvell/mwifiex/wmm.c
4773     index dea2fe671dfe..9843560e784f 100644
4774     --- a/drivers/net/wireless/marvell/mwifiex/wmm.c
4775     +++ b/drivers/net/wireless/marvell/mwifiex/wmm.c
4776     @@ -240,7 +240,7 @@ mwifiex_wmm_setup_queue_priorities(struct mwifiex_private *priv,
4777     mwifiex_dbg(priv->adapter, INFO,
4778     "info: WMM Parameter IE: version=%d,\t"
4779     "qos_info Parameter Set Count=%d, Reserved=%#x\n",
4780     - wmm_ie->vend_hdr.version, wmm_ie->qos_info_bitmap &
4781     + wmm_ie->version, wmm_ie->qos_info_bitmap &
4782     IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK,
4783     wmm_ie->reserved);
4784    
4785     diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
4786     index 35286907c636..d0090c5c88e7 100644
4787     --- a/drivers/s390/cio/qdio_setup.c
4788     +++ b/drivers/s390/cio/qdio_setup.c
4789     @@ -150,6 +150,7 @@ static int __qdio_allocate_qs(struct qdio_q **irq_ptr_qs, int nr_queues)
4790     return -ENOMEM;
4791     }
4792     irq_ptr_qs[i] = q;
4793     + INIT_LIST_HEAD(&q->entry);
4794     }
4795     return 0;
4796     }
4797     @@ -178,6 +179,7 @@ static void setup_queues_misc(struct qdio_q *q, struct qdio_irq *irq_ptr,
4798     q->mask = 1 << (31 - i);
4799     q->nr = i;
4800     q->handler = handler;
4801     + INIT_LIST_HEAD(&q->entry);
4802     }
4803    
4804     static void setup_storage_lists(struct qdio_q *q, struct qdio_irq *irq_ptr,
4805     diff --git a/drivers/s390/cio/qdio_thinint.c b/drivers/s390/cio/qdio_thinint.c
4806     index 30e9fbbff051..debe69adfc70 100644
4807     --- a/drivers/s390/cio/qdio_thinint.c
4808     +++ b/drivers/s390/cio/qdio_thinint.c
4809     @@ -80,7 +80,6 @@ void tiqdio_add_input_queues(struct qdio_irq *irq_ptr)
4810     mutex_lock(&tiq_list_lock);
4811     list_add_rcu(&irq_ptr->input_qs[0]->entry, &tiq_list);
4812     mutex_unlock(&tiq_list_lock);
4813     - xchg(irq_ptr->dsci, 1 << 7);
4814     }
4815    
4816     void tiqdio_remove_input_queues(struct qdio_irq *irq_ptr)
4817     @@ -88,14 +87,14 @@ void tiqdio_remove_input_queues(struct qdio_irq *irq_ptr)
4818     struct qdio_q *q;
4819    
4820     q = irq_ptr->input_qs[0];
4821     - /* if establish triggered an error */
4822     - if (!q || !q->entry.prev || !q->entry.next)
4823     + if (!q)
4824     return;
4825    
4826     mutex_lock(&tiq_list_lock);
4827     list_del_rcu(&q->entry);
4828     mutex_unlock(&tiq_list_lock);
4829     synchronize_rcu();
4830     + INIT_LIST_HEAD(&q->entry);
4831     }
4832    
4833     static inline int has_multiple_inq_on_dsci(struct qdio_irq *irq_ptr)
4834     diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c
4835     index 42945de31fe2..d23aa5d8e62a 100644
4836     --- a/drivers/staging/comedi/drivers/amplc_pci230.c
4837     +++ b/drivers/staging/comedi/drivers/amplc_pci230.c
4838     @@ -2337,7 +2337,8 @@ static irqreturn_t pci230_interrupt(int irq, void *d)
4839     devpriv->intr_running = false;
4840     spin_unlock_irqrestore(&devpriv->isr_spinlock, irqflags);
4841    
4842     - comedi_handle_events(dev, s_ao);
4843     + if (s_ao)
4844     + comedi_handle_events(dev, s_ao);
4845     comedi_handle_events(dev, s_ai);
4846    
4847     return IRQ_HANDLED;
4848     diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c
4849     index d5295bbdd28c..37133d54dda1 100644
4850     --- a/drivers/staging/comedi/drivers/dt282x.c
4851     +++ b/drivers/staging/comedi/drivers/dt282x.c
4852     @@ -566,7 +566,8 @@ static irqreturn_t dt282x_interrupt(int irq, void *d)
4853     }
4854     #endif
4855     comedi_handle_events(dev, s);
4856     - comedi_handle_events(dev, s_ao);
4857     + if (s_ao)
4858     + comedi_handle_events(dev, s_ao);
4859    
4860     return IRQ_RETVAL(handled);
4861     }
4862     diff --git a/drivers/staging/iio/cdc/ad7150.c b/drivers/staging/iio/cdc/ad7150.c
4863     index 50a5b0c2cc7b..7ab95efcf1dc 100644
4864     --- a/drivers/staging/iio/cdc/ad7150.c
4865     +++ b/drivers/staging/iio/cdc/ad7150.c
4866     @@ -6,6 +6,7 @@
4867     * Licensed under the GPL-2 or later.
4868     */
4869    
4870     +#include <linux/bitfield.h>
4871     #include <linux/interrupt.h>
4872     #include <linux/device.h>
4873     #include <linux/kernel.h>
4874     @@ -129,7 +130,7 @@ static int ad7150_read_event_config(struct iio_dev *indio_dev,
4875     {
4876     int ret;
4877     u8 threshtype;
4878     - bool adaptive;
4879     + bool thrfixed;
4880     struct ad7150_chip_info *chip = iio_priv(indio_dev);
4881    
4882     ret = i2c_smbus_read_byte_data(chip->client, AD7150_CFG);
4883     @@ -137,21 +138,23 @@ static int ad7150_read_event_config(struct iio_dev *indio_dev,
4884     return ret;
4885    
4886     threshtype = (ret >> 5) & 0x03;
4887     - adaptive = !!(ret & 0x80);
4888     +
4889     + /*check if threshold mode is fixed or adaptive*/
4890     + thrfixed = FIELD_GET(AD7150_CFG_FIX, ret);
4891    
4892     switch (type) {
4893     case IIO_EV_TYPE_MAG_ADAPTIVE:
4894     if (dir == IIO_EV_DIR_RISING)
4895     - return adaptive && (threshtype == 0x1);
4896     - return adaptive && (threshtype == 0x0);
4897     + return !thrfixed && (threshtype == 0x1);
4898     + return !thrfixed && (threshtype == 0x0);
4899     case IIO_EV_TYPE_THRESH_ADAPTIVE:
4900     if (dir == IIO_EV_DIR_RISING)
4901     - return adaptive && (threshtype == 0x3);
4902     - return adaptive && (threshtype == 0x2);
4903     + return !thrfixed && (threshtype == 0x3);
4904     + return !thrfixed && (threshtype == 0x2);
4905     case IIO_EV_TYPE_THRESH:
4906     if (dir == IIO_EV_DIR_RISING)
4907     - return !adaptive && (threshtype == 0x1);
4908     - return !adaptive && (threshtype == 0x0);
4909     + return thrfixed && (threshtype == 0x1);
4910     + return thrfixed && (threshtype == 0x0);
4911     default:
4912     break;
4913     }
4914     diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
4915     index 5b54439a8a9b..84474f06dbcf 100644
4916     --- a/drivers/tty/serial/8250/8250_port.c
4917     +++ b/drivers/tty/serial/8250/8250_port.c
4918     @@ -1814,8 +1814,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
4919    
4920     status = serial_port_in(port, UART_LSR);
4921    
4922     - if (status & (UART_LSR_DR | UART_LSR_BI) &&
4923     - iir & UART_IIR_RDI) {
4924     + if (status & (UART_LSR_DR | UART_LSR_BI)) {
4925     if (!up->dma || handle_rx_dma(up, iir))
4926     status = serial8250_rx_chars(up, status);
4927     }
4928     diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
4929     index 5d1bd13a56c1..d5fbc2352029 100644
4930     --- a/drivers/usb/gadget/function/u_ether.c
4931     +++ b/drivers/usb/gadget/function/u_ether.c
4932     @@ -198,11 +198,12 @@ rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
4933     out = dev->port_usb->out_ep;
4934     else
4935     out = NULL;
4936     - spin_unlock_irqrestore(&dev->lock, flags);
4937    
4938     if (!out)
4939     + {
4940     + spin_unlock_irqrestore(&dev->lock, flags);
4941     return -ENOTCONN;
4942     -
4943     + }
4944    
4945     /* Padding up to RX_EXTRA handles minor disagreements with host.
4946     * Normally we use the USB "terminate on short read" convention;
4947     @@ -223,6 +224,7 @@ rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
4948    
4949     if (dev->port_usb->is_fixed)
4950     size = max_t(size_t, size, dev->port_usb->fixed_out_len);
4951     + spin_unlock_irqrestore(&dev->lock, flags);
4952    
4953     skb = alloc_skb(size + NET_IP_ALIGN, gfp_flags);
4954     if (skb == NULL) {
4955     diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
4956     index 968ade5a35f5..696560529e6a 100644
4957     --- a/drivers/usb/renesas_usbhs/fifo.c
4958     +++ b/drivers/usb/renesas_usbhs/fifo.c
4959     @@ -821,9 +821,8 @@ static int __usbhsf_dma_map_ctrl(struct usbhs_pkt *pkt, int map)
4960     }
4961    
4962     static void usbhsf_dma_complete(void *arg);
4963     -static void xfer_work(struct work_struct *work)
4964     +static void usbhsf_dma_xfer_preparing(struct usbhs_pkt *pkt)
4965     {
4966     - struct usbhs_pkt *pkt = container_of(work, struct usbhs_pkt, work);
4967     struct usbhs_pipe *pipe = pkt->pipe;
4968     struct usbhs_fifo *fifo;
4969     struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
4970     @@ -831,12 +830,10 @@ static void xfer_work(struct work_struct *work)
4971     struct dma_chan *chan;
4972     struct device *dev = usbhs_priv_to_dev(priv);
4973     enum dma_transfer_direction dir;
4974     - unsigned long flags;
4975    
4976     - usbhs_lock(priv, flags);
4977     fifo = usbhs_pipe_to_fifo(pipe);
4978     if (!fifo)
4979     - goto xfer_work_end;
4980     + return;
4981    
4982     chan = usbhsf_dma_chan_get(fifo, pkt);
4983     dir = usbhs_pipe_is_dir_in(pipe) ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV;
4984     @@ -845,7 +842,7 @@ static void xfer_work(struct work_struct *work)
4985     pkt->trans, dir,
4986     DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
4987     if (!desc)
4988     - goto xfer_work_end;
4989     + return;
4990    
4991     desc->callback = usbhsf_dma_complete;
4992     desc->callback_param = pipe;
4993     @@ -853,7 +850,7 @@ static void xfer_work(struct work_struct *work)
4994     pkt->cookie = dmaengine_submit(desc);
4995     if (pkt->cookie < 0) {
4996     dev_err(dev, "Failed to submit dma descriptor\n");
4997     - goto xfer_work_end;
4998     + return;
4999     }
5000    
5001     dev_dbg(dev, " %s %d (%d/ %d)\n",
5002     @@ -864,8 +861,17 @@ static void xfer_work(struct work_struct *work)
5003     dma_async_issue_pending(chan);
5004     usbhsf_dma_start(pipe, fifo);
5005     usbhs_pipe_enable(pipe);
5006     +}
5007     +
5008     +static void xfer_work(struct work_struct *work)
5009     +{
5010     + struct usbhs_pkt *pkt = container_of(work, struct usbhs_pkt, work);
5011     + struct usbhs_pipe *pipe = pkt->pipe;
5012     + struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
5013     + unsigned long flags;
5014    
5015     -xfer_work_end:
5016     + usbhs_lock(priv, flags);
5017     + usbhsf_dma_xfer_preparing(pkt);
5018     usbhs_unlock(priv, flags);
5019     }
5020    
5021     @@ -918,8 +924,13 @@ static int usbhsf_dma_prepare_push(struct usbhs_pkt *pkt, int *is_done)
5022     pkt->trans = len;
5023    
5024     usbhsf_tx_irq_ctrl(pipe, 0);
5025     - INIT_WORK(&pkt->work, xfer_work);
5026     - schedule_work(&pkt->work);
5027     + /* FIXME: Workaound for usb dmac that driver can be used in atomic */
5028     + if (usbhs_get_dparam(priv, has_usb_dmac)) {
5029     + usbhsf_dma_xfer_preparing(pkt);
5030     + } else {
5031     + INIT_WORK(&pkt->work, xfer_work);
5032     + schedule_work(&pkt->work);
5033     + }
5034    
5035     return 0;
5036    
5037     @@ -1025,8 +1036,7 @@ static int usbhsf_dma_prepare_pop_with_usb_dmac(struct usbhs_pkt *pkt,
5038    
5039     pkt->trans = pkt->length;
5040    
5041     - INIT_WORK(&pkt->work, xfer_work);
5042     - schedule_work(&pkt->work);
5043     + usbhsf_dma_xfer_preparing(pkt);
5044    
5045     return 0;
5046    
5047     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
5048     index f54931aa7528..63ff1a4f2e41 100644
5049     --- a/drivers/usb/serial/ftdi_sio.c
5050     +++ b/drivers/usb/serial/ftdi_sio.c
5051     @@ -1024,6 +1024,7 @@ static const struct usb_device_id id_table_combined[] = {
5052     { USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) },
5053     /* EZPrototypes devices */
5054     { USB_DEVICE(EZPROTOTYPES_VID, HJELMSLUND_USB485_ISO_PID) },
5055     + { USB_DEVICE_INTERFACE_NUMBER(UNJO_VID, UNJO_ISODEBUG_V1_PID, 1) },
5056     { } /* Terminating entry */
5057     };
5058    
5059     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
5060     index 15d220eaf6e6..ed6b36674c15 100644
5061     --- a/drivers/usb/serial/ftdi_sio_ids.h
5062     +++ b/drivers/usb/serial/ftdi_sio_ids.h
5063     @@ -1542,3 +1542,9 @@
5064     #define CHETCO_SEASMART_DISPLAY_PID 0xA5AD /* SeaSmart NMEA2000 Display */
5065     #define CHETCO_SEASMART_LITE_PID 0xA5AE /* SeaSmart Lite USB Adapter */
5066     #define CHETCO_SEASMART_ANALOG_PID 0xA5AF /* SeaSmart Analog Adapter */
5067     +
5068     +/*
5069     + * Unjo AB
5070     + */
5071     +#define UNJO_VID 0x22B7
5072     +#define UNJO_ISODEBUG_V1_PID 0x150D
5073     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
5074     index 1effe74ec638..d7b31fdce94d 100644
5075     --- a/drivers/usb/serial/option.c
5076     +++ b/drivers/usb/serial/option.c
5077     @@ -1338,6 +1338,7 @@ static const struct usb_device_id option_ids[] = {
5078     .driver_info = RSVD(4) },
5079     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0414, 0xff, 0xff, 0xff) },
5080     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0417, 0xff, 0xff, 0xff) },
5081     + { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0601, 0xff) }, /* GosunCn ZTE WeLink ME3630 (RNDIS mode) */
5082     { USB_DEVICE_INTERFACE_CLASS(ZTE_VENDOR_ID, 0x0602, 0xff) }, /* GosunCn ZTE WeLink ME3630 (MBIM mode) */
5083     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff),
5084     .driver_info = RSVD(4) },
5085     diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
5086     index c160d2d0e18d..57a97b38a2fa 100644
5087     --- a/fs/crypto/policy.c
5088     +++ b/fs/crypto/policy.c
5089     @@ -114,6 +114,8 @@ int fscrypt_process_policy(struct file *filp,
5090     if (!inode_has_encryption_context(inode)) {
5091     if (!S_ISDIR(inode->i_mode))
5092     ret = -ENOTDIR;
5093     + else if (IS_DEADDIR(inode))
5094     + ret = -ENOENT;
5095     else if (!inode->i_sb->s_cop->empty_dir)
5096     ret = -EOPNOTSUPP;
5097     else if (!inode->i_sb->s_cop->empty_dir(inode))
5098     diff --git a/fs/udf/inode.c b/fs/udf/inode.c
5099     index fd817022cb9b..9e66d85021fc 100644
5100     --- a/fs/udf/inode.c
5101     +++ b/fs/udf/inode.c
5102     @@ -478,13 +478,15 @@ static struct buffer_head *udf_getblk(struct inode *inode, long block,
5103     return NULL;
5104     }
5105    
5106     -/* Extend the file by 'blocks' blocks, return the number of extents added */
5107     +/* Extend the file with new blocks totaling 'new_block_bytes',
5108     + * return the number of extents added
5109     + */
5110     static int udf_do_extend_file(struct inode *inode,
5111     struct extent_position *last_pos,
5112     struct kernel_long_ad *last_ext,
5113     - sector_t blocks)
5114     + loff_t new_block_bytes)
5115     {
5116     - sector_t add;
5117     + uint32_t add;
5118     int count = 0, fake = !(last_ext->extLength & UDF_EXTENT_LENGTH_MASK);
5119     struct super_block *sb = inode->i_sb;
5120     struct kernel_lb_addr prealloc_loc = {};
5121     @@ -494,7 +496,7 @@ static int udf_do_extend_file(struct inode *inode,
5122    
5123     /* The previous extent is fake and we should not extend by anything
5124     * - there's nothing to do... */
5125     - if (!blocks && fake)
5126     + if (!new_block_bytes && fake)
5127     return 0;
5128    
5129     iinfo = UDF_I(inode);
5130     @@ -525,13 +527,12 @@ static int udf_do_extend_file(struct inode *inode,
5131     /* Can we merge with the previous extent? */
5132     if ((last_ext->extLength & UDF_EXTENT_FLAG_MASK) ==
5133     EXT_NOT_RECORDED_NOT_ALLOCATED) {
5134     - add = ((1 << 30) - sb->s_blocksize -
5135     - (last_ext->extLength & UDF_EXTENT_LENGTH_MASK)) >>
5136     - sb->s_blocksize_bits;
5137     - if (add > blocks)
5138     - add = blocks;
5139     - blocks -= add;
5140     - last_ext->extLength += add << sb->s_blocksize_bits;
5141     + add = (1 << 30) - sb->s_blocksize -
5142     + (last_ext->extLength & UDF_EXTENT_LENGTH_MASK);
5143     + if (add > new_block_bytes)
5144     + add = new_block_bytes;
5145     + new_block_bytes -= add;
5146     + last_ext->extLength += add;
5147     }
5148    
5149     if (fake) {
5150     @@ -552,28 +553,27 @@ static int udf_do_extend_file(struct inode *inode,
5151     }
5152    
5153     /* Managed to do everything necessary? */
5154     - if (!blocks)
5155     + if (!new_block_bytes)
5156     goto out;
5157    
5158     /* All further extents will be NOT_RECORDED_NOT_ALLOCATED */
5159     last_ext->extLocation.logicalBlockNum = 0;
5160     last_ext->extLocation.partitionReferenceNum = 0;
5161     - add = (1 << (30-sb->s_blocksize_bits)) - 1;
5162     - last_ext->extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
5163     - (add << sb->s_blocksize_bits);
5164     + add = (1 << 30) - sb->s_blocksize;
5165     + last_ext->extLength = EXT_NOT_RECORDED_NOT_ALLOCATED | add;
5166    
5167     /* Create enough extents to cover the whole hole */
5168     - while (blocks > add) {
5169     - blocks -= add;
5170     + while (new_block_bytes > add) {
5171     + new_block_bytes -= add;
5172     err = udf_add_aext(inode, last_pos, &last_ext->extLocation,
5173     last_ext->extLength, 1);
5174     if (err)
5175     return err;
5176     count++;
5177     }
5178     - if (blocks) {
5179     + if (new_block_bytes) {
5180     last_ext->extLength = EXT_NOT_RECORDED_NOT_ALLOCATED |
5181     - (blocks << sb->s_blocksize_bits);
5182     + new_block_bytes;
5183     err = udf_add_aext(inode, last_pos, &last_ext->extLocation,
5184     last_ext->extLength, 1);
5185     if (err)
5186     @@ -604,6 +604,24 @@ out:
5187     return count;
5188     }
5189    
5190     +/* Extend the final block of the file to final_block_len bytes */
5191     +static void udf_do_extend_final_block(struct inode *inode,
5192     + struct extent_position *last_pos,
5193     + struct kernel_long_ad *last_ext,
5194     + uint32_t final_block_len)
5195     +{
5196     + struct super_block *sb = inode->i_sb;
5197     + uint32_t added_bytes;
5198     +
5199     + added_bytes = final_block_len -
5200     + (last_ext->extLength & (sb->s_blocksize - 1));
5201     + last_ext->extLength += added_bytes;
5202     + UDF_I(inode)->i_lenExtents += added_bytes;
5203     +
5204     + udf_write_aext(inode, last_pos, &last_ext->extLocation,
5205     + last_ext->extLength, 1);
5206     +}
5207     +
5208     static int udf_extend_file(struct inode *inode, loff_t newsize)
5209     {
5210    
5211     @@ -613,10 +631,12 @@ static int udf_extend_file(struct inode *inode, loff_t newsize)
5212     int8_t etype;
5213     struct super_block *sb = inode->i_sb;
5214     sector_t first_block = newsize >> sb->s_blocksize_bits, offset;
5215     + unsigned long partial_final_block;
5216     int adsize;
5217     struct udf_inode_info *iinfo = UDF_I(inode);
5218     struct kernel_long_ad extent;
5219     - int err;
5220     + int err = 0;
5221     + int within_final_block;
5222    
5223     if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
5224     adsize = sizeof(struct short_ad);
5225     @@ -626,18 +646,8 @@ static int udf_extend_file(struct inode *inode, loff_t newsize)
5226     BUG();
5227    
5228     etype = inode_bmap(inode, first_block, &epos, &eloc, &elen, &offset);
5229     + within_final_block = (etype != -1);
5230    
5231     - /* File has extent covering the new size (could happen when extending
5232     - * inside a block)? */
5233     - if (etype != -1)
5234     - return 0;
5235     - if (newsize & (sb->s_blocksize - 1))
5236     - offset++;
5237     - /* Extended file just to the boundary of the last file block? */
5238     - if (offset == 0)
5239     - return 0;
5240     -
5241     - /* Truncate is extending the file by 'offset' blocks */
5242     if ((!epos.bh && epos.offset == udf_file_entry_alloc_offset(inode)) ||
5243     (epos.bh && epos.offset == sizeof(struct allocExtDesc))) {
5244     /* File has no extents at all or has empty last
5245     @@ -651,7 +661,22 @@ static int udf_extend_file(struct inode *inode, loff_t newsize)
5246     &extent.extLength, 0);
5247     extent.extLength |= etype << 30;
5248     }
5249     - err = udf_do_extend_file(inode, &epos, &extent, offset);
5250     +
5251     + partial_final_block = newsize & (sb->s_blocksize - 1);
5252     +
5253     + /* File has extent covering the new size (could happen when extending
5254     + * inside a block)?
5255     + */
5256     + if (within_final_block) {
5257     + /* Extending file within the last file block */
5258     + udf_do_extend_final_block(inode, &epos, &extent,
5259     + partial_final_block);
5260     + } else {
5261     + loff_t add = ((loff_t)offset << sb->s_blocksize_bits) |
5262     + partial_final_block;
5263     + err = udf_do_extend_file(inode, &epos, &extent, add);
5264     + }
5265     +
5266     if (err < 0)
5267     goto out;
5268     err = 0;
5269     @@ -756,6 +781,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5270     /* Are we beyond EOF? */
5271     if (etype == -1) {
5272     int ret;
5273     + loff_t hole_len;
5274     isBeyondEOF = true;
5275     if (count) {
5276     if (c)
5277     @@ -771,7 +797,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5278     startnum = (offset > 0);
5279     }
5280     /* Create extents for the hole between EOF and offset */
5281     - ret = udf_do_extend_file(inode, &prev_epos, laarr, offset);
5282     + hole_len = (loff_t)offset << inode->i_blkbits;
5283     + ret = udf_do_extend_file(inode, &prev_epos, laarr, hole_len);
5284     if (ret < 0) {
5285     brelse(prev_epos.bh);
5286     brelse(cur_epos.bh);
5287     diff --git a/include/linux/vmw_vmci_defs.h b/include/linux/vmw_vmci_defs.h
5288     index 1bd31a38c51e..ce13d4677f1d 100644
5289     --- a/include/linux/vmw_vmci_defs.h
5290     +++ b/include/linux/vmw_vmci_defs.h
5291     @@ -75,9 +75,18 @@ enum {
5292    
5293     /*
5294     * A single VMCI device has an upper limit of 128MB on the amount of
5295     - * memory that can be used for queue pairs.
5296     + * memory that can be used for queue pairs. Since each queue pair
5297     + * consists of at least two pages, the memory limit also dictates the
5298     + * number of queue pairs a guest can create.
5299     */
5300     #define VMCI_MAX_GUEST_QP_MEMORY (128 * 1024 * 1024)
5301     +#define VMCI_MAX_GUEST_QP_COUNT (VMCI_MAX_GUEST_QP_MEMORY / PAGE_SIZE / 2)
5302     +
5303     +/*
5304     + * There can be at most PAGE_SIZE doorbells since there is one doorbell
5305     + * per byte in the doorbell bitmap page.
5306     + */
5307     +#define VMCI_MAX_GUEST_DOORBELL_COUNT PAGE_SIZE
5308    
5309     /*
5310     * Queues with pre-mapped data pages must be small, so that we don't pin
5311     diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h
5312     index 1b1cf33cbfb0..2b6abd046087 100644
5313     --- a/include/net/ip6_tunnel.h
5314     +++ b/include/net/ip6_tunnel.h
5315     @@ -149,9 +149,12 @@ static inline void ip6tunnel_xmit(struct sock *sk, struct sk_buff *skb,
5316     memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
5317     pkt_len = skb->len - skb_inner_network_offset(skb);
5318     err = ip6_local_out(dev_net(skb_dst(skb)->dev), sk, skb);
5319     - if (unlikely(net_xmit_eval(err)))
5320     - pkt_len = -1;
5321     - iptunnel_xmit_stats(dev, pkt_len);
5322     +
5323     + if (dev) {
5324     + if (unlikely(net_xmit_eval(err)))
5325     + pkt_len = -1;
5326     + iptunnel_xmit_stats(dev, pkt_len);
5327     + }
5328     }
5329     #endif
5330     #endif
5331     diff --git a/include/uapi/linux/nilfs2_ondisk.h b/include/uapi/linux/nilfs2_ondisk.h
5332     index 2a8a3addb675..f9b6b5be7ddf 100644
5333     --- a/include/uapi/linux/nilfs2_ondisk.h
5334     +++ b/include/uapi/linux/nilfs2_ondisk.h
5335     @@ -28,7 +28,7 @@
5336    
5337     #include <linux/types.h>
5338     #include <linux/magic.h>
5339     -
5340     +#include <asm/byteorder.h>
5341    
5342     #define NILFS_INODE_BMAP_SIZE 7
5343    
5344     @@ -532,19 +532,19 @@ enum {
5345     static inline void \
5346     nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
5347     { \
5348     - cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
5349     - (1UL << NILFS_CHECKPOINT_##flag)); \
5350     + cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) | \
5351     + (1UL << NILFS_CHECKPOINT_##flag)); \
5352     } \
5353     static inline void \
5354     nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
5355     { \
5356     - cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
5357     + cp->cp_flags = __cpu_to_le32(__le32_to_cpu(cp->cp_flags) & \
5358     ~(1UL << NILFS_CHECKPOINT_##flag)); \
5359     } \
5360     static inline int \
5361     nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
5362     { \
5363     - return !!(le32_to_cpu(cp->cp_flags) & \
5364     + return !!(__le32_to_cpu(cp->cp_flags) & \
5365     (1UL << NILFS_CHECKPOINT_##flag)); \
5366     }
5367    
5368     @@ -594,20 +594,20 @@ enum {
5369     static inline void \
5370     nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
5371     { \
5372     - su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
5373     + su->su_flags = __cpu_to_le32(__le32_to_cpu(su->su_flags) | \
5374     (1UL << NILFS_SEGMENT_USAGE_##flag));\
5375     } \
5376     static inline void \
5377     nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
5378     { \
5379     su->su_flags = \
5380     - cpu_to_le32(le32_to_cpu(su->su_flags) & \
5381     + __cpu_to_le32(__le32_to_cpu(su->su_flags) & \
5382     ~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
5383     } \
5384     static inline int \
5385     nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
5386     { \
5387     - return !!(le32_to_cpu(su->su_flags) & \
5388     + return !!(__le32_to_cpu(su->su_flags) & \
5389     (1UL << NILFS_SEGMENT_USAGE_##flag)); \
5390     }
5391    
5392     @@ -618,15 +618,15 @@ NILFS_SEGMENT_USAGE_FNS(ERROR, error)
5393     static inline void
5394     nilfs_segment_usage_set_clean(struct nilfs_segment_usage *su)
5395     {
5396     - su->su_lastmod = cpu_to_le64(0);
5397     - su->su_nblocks = cpu_to_le32(0);
5398     - su->su_flags = cpu_to_le32(0);
5399     + su->su_lastmod = __cpu_to_le64(0);
5400     + su->su_nblocks = __cpu_to_le32(0);
5401     + su->su_flags = __cpu_to_le32(0);
5402     }
5403    
5404     static inline int
5405     nilfs_segment_usage_clean(const struct nilfs_segment_usage *su)
5406     {
5407     - return !le32_to_cpu(su->su_flags);
5408     + return !__le32_to_cpu(su->su_flags);
5409     }
5410    
5411     /**
5412     diff --git a/kernel/events/core.c b/kernel/events/core.c
5413     index 7929526e96e2..93d7333c64d8 100644
5414     --- a/kernel/events/core.c
5415     +++ b/kernel/events/core.c
5416     @@ -5492,7 +5492,7 @@ static void perf_sample_regs_user(struct perf_regs *regs_user,
5417     if (user_mode(regs)) {
5418     regs_user->abi = perf_reg_abi(current);
5419     regs_user->regs = regs;
5420     - } else if (current->mm) {
5421     + } else if (!(current->flags & PF_KTHREAD)) {
5422     perf_get_regs_user(regs_user, regs, regs_user_copy);
5423     } else {
5424     regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE;
5425     diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
5426     index 1e1fa99b3243..0b53d1907e4a 100644
5427     --- a/net/ipv6/netfilter/nf_conntrack_reasm.c
5428     +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
5429     @@ -264,8 +264,14 @@ static int nf_ct_frag6_queue(struct frag_queue *fq, struct sk_buff *skb,
5430    
5431     prev = fq->q.fragments_tail;
5432     err = inet_frag_queue_insert(&fq->q, skb, offset, end);
5433     - if (err)
5434     + if (err) {
5435     + if (err == IPFRAG_DUP) {
5436     + /* No error for duplicates, pretend they got queued. */
5437     + kfree_skb(skb);
5438     + return -EINPROGRESS;
5439     + }
5440     goto insert_error;
5441     + }
5442    
5443     if (dev)
5444     fq->iif = dev->ifindex;
5445     @@ -292,15 +298,17 @@ static int nf_ct_frag6_queue(struct frag_queue *fq, struct sk_buff *skb,
5446     skb->_skb_refdst = 0UL;
5447     err = nf_ct_frag6_reasm(fq, skb, prev, dev);
5448     skb->_skb_refdst = orefdst;
5449     - return err;
5450     +
5451     + /* After queue has assumed skb ownership, only 0 or
5452     + * -EINPROGRESS must be returned.
5453     + */
5454     + return err ? -EINPROGRESS : 0;
5455     }
5456    
5457     skb_dst_drop(skb);
5458     return -EINPROGRESS;
5459    
5460     insert_error:
5461     - if (err == IPFRAG_DUP)
5462     - goto err;
5463     inet_frag_kill(&fq->q);
5464     err:
5465     skb_dst_drop(skb);
5466     @@ -480,12 +488,6 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
5467     ret = 0;
5468     }
5469    
5470     - /* after queue has assumed skb ownership, only 0 or -EINPROGRESS
5471     - * must be returned.
5472     - */
5473     - if (ret)
5474     - ret = -EINPROGRESS;
5475     -
5476     spin_unlock_bh(&fq->q.lock);
5477     inet_frag_put(&fq->q);
5478     return ret;
5479     diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
5480     index 8a690ebd7374..6708de10a3e5 100644
5481     --- a/net/mac80211/ieee80211_i.h
5482     +++ b/net/mac80211/ieee80211_i.h
5483     @@ -1403,7 +1403,7 @@ ieee80211_get_sband(struct ieee80211_sub_if_data *sdata)
5484     rcu_read_lock();
5485     chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
5486    
5487     - if (WARN_ON(!chanctx_conf)) {
5488     + if (WARN_ON_ONCE(!chanctx_conf)) {
5489     rcu_read_unlock();
5490     return NULL;
5491     }
5492     diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
5493     index b2a27263d6ff..5c347d3a92c9 100644
5494     --- a/net/mac80211/mesh.c
5495     +++ b/net/mac80211/mesh.c
5496     @@ -885,6 +885,7 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata)
5497    
5498     /* flush STAs and mpaths on this iface */
5499     sta_info_flush(sdata);
5500     + ieee80211_free_keys(sdata, true);
5501     mesh_path_flush_by_iface(sdata);
5502    
5503     /* stop the beacon */
5504     @@ -1135,7 +1136,8 @@ int ieee80211_mesh_finish_csa(struct ieee80211_sub_if_data *sdata)
5505     ifmsh->chsw_ttl = 0;
5506    
5507     /* Remove the CSA and MCSP elements from the beacon */
5508     - tmp_csa_settings = rcu_dereference(ifmsh->csa);
5509     + tmp_csa_settings = rcu_dereference_protected(ifmsh->csa,
5510     + lockdep_is_held(&sdata->wdev.mtx));
5511     RCU_INIT_POINTER(ifmsh->csa, NULL);
5512     if (tmp_csa_settings)
5513     kfree_rcu(tmp_csa_settings, rcu_head);
5514     @@ -1157,6 +1159,8 @@ int ieee80211_mesh_csa_beacon(struct ieee80211_sub_if_data *sdata,
5515     struct mesh_csa_settings *tmp_csa_settings;
5516     int ret = 0;
5517    
5518     + lockdep_assert_held(&sdata->wdev.mtx);
5519     +
5520     tmp_csa_settings = kmalloc(sizeof(*tmp_csa_settings),
5521     GFP_ATOMIC);
5522     if (!tmp_csa_settings)
5523     diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
5524     index 244eac1bd648..de18a463ac96 100644
5525     --- a/net/sunrpc/clnt.c
5526     +++ b/net/sunrpc/clnt.c
5527     @@ -2718,6 +2718,7 @@ int rpc_clnt_add_xprt(struct rpc_clnt *clnt,
5528     xprt = xprt_iter_xprt(&clnt->cl_xpi);
5529     if (xps == NULL || xprt == NULL) {
5530     rcu_read_unlock();
5531     + xprt_switch_put(xps);
5532     return -EAGAIN;
5533     }
5534     resvport = xprt->resvport;
5535     diff --git a/samples/bpf/bpf_load.c b/samples/bpf/bpf_load.c
5536     index 97913e109b14..99e5a2f63e76 100644
5537     --- a/samples/bpf/bpf_load.c
5538     +++ b/samples/bpf/bpf_load.c
5539     @@ -369,7 +369,7 @@ void read_trace_pipe(void)
5540     static char buf[4096];
5541     ssize_t sz;
5542    
5543     - sz = read(trace_fd, buf, sizeof(buf));
5544     + sz = read(trace_fd, buf, sizeof(buf) - 1);
5545     if (sz > 0) {
5546     buf[sz] = 0;
5547     puts(buf);
5548     diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c
5549     index 1ebbf233de9a..6d64b2cb02ab 100644
5550     --- a/virt/kvm/arm/vgic/vgic-its.c
5551     +++ b/virt/kvm/arm/vgic/vgic-its.c
5552     @@ -1466,6 +1466,7 @@ static void vgic_its_destroy(struct kvm_device *kvm_dev)
5553     mutex_unlock(&its->its_lock);
5554    
5555     kfree(its);
5556     + kfree(kvm_dev);/* alloc by kvm_ioctl_create_device, free by .destroy */
5557     }
5558    
5559     static int vgic_its_has_attr(struct kvm_device *dev,