<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/arch/powerpc/include/asm/checksum.h, branch linux-7.0.y</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=linux-7.0.y</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=linux-7.0.y'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2022-05-08T12:15:40+00:00</updated>
<entry>
<title>powerpc: Use rol32() instead of opencoding in csum_fold()</title>
<updated>2022-05-08T12:15:40+00:00</updated>
<author>
<name>Christophe Leroy</name>
<email>christophe.leroy@csgroup.eu</email>
</author>
<published>2022-03-09T07:56:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=a1ae431705410fc7092790977bffd1b00c63c229'/>
<id>urn:sha1:a1ae431705410fc7092790977bffd1b00c63c229</id>
<content type='text'>
rol32(x, 16) will do the rotate using rlwinm.

No need to open code using inline assembly.

Signed-off-by: Christophe Leroy &lt;christophe.leroy@csgroup.eu&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
Link: https://lore.kernel.org/r/794337eff7bb803d2c4e67d9eee635390c4c48fe.1646812553.git.christophe.leroy@csgroup.eu

</content>
</entry>
<entry>
<title>powerpc: Reduce csum_add() complexity for PPC64</title>
<updated>2022-05-05T14:00:20+00:00</updated>
<author>
<name>Christophe Leroy</name>
<email>christophe.leroy@csgroup.eu</email>
</author>
<published>2022-02-12T07:36:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=f206fdd9d41bf7deb96219b8ca3499a5abd79b83'/>
<id>urn:sha1:f206fdd9d41bf7deb96219b8ca3499a5abd79b83</id>
<content type='text'>
PPC64 does everything in C, gcc is able to skip calculation
when one of the operands in zero.

Move the constant folding in PPC32 part.

This helps GCC and reduces ppc64_defconfig by 170 bytes.

Signed-off-by: Christophe Leroy &lt;christophe.leroy@csgroup.eu&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
Link: https://lore.kernel.org/r/a4ca63dd4c4b09e1906d08fb814af5a41d0f3fcb.1644651363.git.christophe.leroy@csgroup.eu

</content>
</entry>
<entry>
<title>powerpc/net: Implement powerpc specific csum_shift() to remove branch</title>
<updated>2022-03-11T10:57:22+00:00</updated>
<author>
<name>Christophe Leroy</name>
<email>christophe.leroy@csgroup.eu</email>
</author>
<published>2022-03-08T16:12:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=3af722cb735d212554027ec81e2aa2e6bf1ee34d'/>
<id>urn:sha1:3af722cb735d212554027ec81e2aa2e6bf1ee34d</id>
<content type='text'>
Today's implementation of csum_shift() leads to branching based on
parity of 'offset'

	000002f8 &lt;csum_block_add&gt;:
	     2f8:	70 a5 00 01 	andi.   r5,r5,1
	     2fc:	41 a2 00 08 	beq     304 &lt;csum_block_add+0xc&gt;
	     300:	54 84 c0 3e 	rotlwi  r4,r4,24
	     304:	7c 63 20 14 	addc    r3,r3,r4
	     308:	7c 63 01 94 	addze   r3,r3
	     30c:	4e 80 00 20 	blr

Use first bit of 'offset' directly as input of the rotation instead of
branching.

	000002f8 &lt;csum_block_add&gt;:
	     2f8:	54 a5 1f 38 	rlwinm  r5,r5,3,28,28
	     2fc:	20 a5 00 20 	subfic  r5,r5,32
	     300:	5c 84 28 3e 	rotlw   r4,r4,r5
	     304:	7c 63 20 14 	addc    r3,r3,r4
	     308:	7c 63 01 94 	addze   r3,r3
	     30c:	4e 80 00 20 	blr

And change to left shift instead of right shift to skip one more
instruction. This has no impact on the final sum.

	000002f8 &lt;csum_block_add&gt;:
	     2f8:	54 a5 1f 38 	rlwinm  r5,r5,3,28,28
	     2fc:	5c 84 28 3e 	rotlw   r4,r4,r5
	     300:	7c 63 20 14 	addc    r3,r3,r4
	     304:	7c 63 01 94 	addze   r3,r3
	     308:	4e 80 00 20 	blr

Seems like only powerpc benefits from a branchless implementation.
Other main architectures like ARM or X86 get better code with
the generic implementation and its branch.

Signed-off-by: Christophe Leroy &lt;christophe.leroy@csgroup.eu&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>powerpc: Force inlining of csum_add()</title>
<updated>2021-06-15T14:16:47+00:00</updated>
<author>
<name>Christophe Leroy</name>
<email>christophe.leroy@csgroup.eu</email>
</author>
<published>2021-05-11T06:08:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=4423eff71ca6b8f2c5e0fc4cea33d8cdfe3c3740'/>
<id>urn:sha1:4423eff71ca6b8f2c5e0fc4cea33d8cdfe3c3740</id>
<content type='text'>
Commit 328e7e487a46 ("powerpc: force inlining of csum_partial() to
avoid multiple csum_partial() with GCC10") inlined csum_partial().

Now that csum_partial() is inlined, GCC outlines csum_add() when
called by csum_partial().

c064fb28 &lt;csum_add&gt;:
c064fb28:	7c 63 20 14 	addc    r3,r3,r4
c064fb2c:	7c 63 01 94 	addze   r3,r3
c064fb30:	4e 80 00 20 	blr

c0665fb8 &lt;csum_add&gt;:
c0665fb8:	7c 63 20 14 	addc    r3,r3,r4
c0665fbc:	7c 63 01 94 	addze   r3,r3
c0665fc0:	4e 80 00 20 	blr

c066719c:	7c 9a c0 2e 	lwzx    r4,r26,r24
c06671a0:	38 60 00 00 	li      r3,0
c06671a4:	7f 1a c2 14 	add     r24,r26,r24
c06671a8:	4b ff ee 11 	bl      c0665fb8 &lt;csum_add&gt;
c06671ac:	80 98 00 04 	lwz     r4,4(r24)
c06671b0:	4b ff ee 09 	bl      c0665fb8 &lt;csum_add&gt;
c06671b4:	80 98 00 08 	lwz     r4,8(r24)
c06671b8:	4b ff ee 01 	bl      c0665fb8 &lt;csum_add&gt;
c06671bc:	a0 98 00 0c 	lhz     r4,12(r24)
c06671c0:	4b ff ed f9 	bl      c0665fb8 &lt;csum_add&gt;
c06671c4:	7c 63 18 f8 	not     r3,r3
c06671c8:	81 3f 00 68 	lwz     r9,104(r31)
c06671cc:	81 5f 00 a0 	lwz     r10,160(r31)
c06671d0:	7d 29 18 14 	addc    r9,r9,r3
c06671d4:	7d 29 01 94 	addze   r9,r9
c06671d8:	91 3f 00 68 	stw     r9,104(r31)
c06671dc:	7d 1a 50 50 	subf    r8,r26,r10
c06671e0:	83 01 00 10 	lwz     r24,16(r1)
c06671e4:	83 41 00 18 	lwz     r26,24(r1)

The sum with 0 is useless, should have been skipped.
And there is even one completely unused instance of csum_add().

In file included from ./include/net/checksum.h:22,
                 from ./include/linux/skbuff.h:28,
                 from ./include/linux/icmp.h:16,
                 from net/ipv6/ip6_tunnel.c:23:
./arch/powerpc/include/asm/checksum.h: In function '__ip6_tnl_rcv':
./arch/powerpc/include/asm/checksum.h:94:22: warning: inlining failed in call to 'csum_add': call is unlikely and code size would grow [-Winline]
   94 | static inline __wsum csum_add(__wsum csum, __wsum addend)
      |                      ^~~~~~~~
./arch/powerpc/include/asm/checksum.h:172:31: note: called from here
  172 |                         sum = csum_add(sum, (__force __wsum)*(const u32 *)buff);
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./arch/powerpc/include/asm/checksum.h:94:22: warning: inlining failed in call to 'csum_add': call is unlikely and code size would grow [-Winline]
   94 | static inline __wsum csum_add(__wsum csum, __wsum addend)
      |                      ^~~~~~~~
./arch/powerpc/include/asm/checksum.h:177:31: note: called from here
  177 |                         sum = csum_add(sum, (__force __wsum)
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  178 |                                             *(const u32 *)(buff + 4));
      |                                             ~~~~~~~~~~~~~~~~~~~~~~~~~
./arch/powerpc/include/asm/checksum.h:94:22: warning: inlining failed in call to 'csum_add': call is unlikely and code size would grow [-Winline]
   94 | static inline __wsum csum_add(__wsum csum, __wsum addend)
      |                      ^~~~~~~~
./arch/powerpc/include/asm/checksum.h:183:31: note: called from here
  183 |                         sum = csum_add(sum, (__force __wsum)
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  184 |                                             *(const u32 *)(buff + 8));
      |                                             ~~~~~~~~~~~~~~~~~~~~~~~~~
./arch/powerpc/include/asm/checksum.h:94:22: warning: inlining failed in call to 'csum_add': call is unlikely and code size would grow [-Winline]
   94 | static inline __wsum csum_add(__wsum csum, __wsum addend)
      |                      ^~~~~~~~
./arch/powerpc/include/asm/checksum.h:186:31: note: called from here
  186 |                         sum = csum_add(sum, (__force __wsum)
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  187 |                                             *(const u16 *)(buff + 12));
      |                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~

Force inlining of csum_add().

     94c:	80 df 00 a0 	lwz     r6,160(r31)
     950:	7d 28 50 2e 	lwzx    r9,r8,r10
     954:	7d 48 52 14 	add     r10,r8,r10
     958:	80 aa 00 04 	lwz     r5,4(r10)
     95c:	80 ff 00 68 	lwz     r7,104(r31)
     960:	7d 29 28 14 	addc    r9,r9,r5
     964:	7d 29 01 94 	addze   r9,r9
     968:	7d 08 30 50 	subf    r8,r8,r6
     96c:	80 aa 00 08 	lwz     r5,8(r10)
     970:	a1 4a 00 0c 	lhz     r10,12(r10)
     974:	7d 29 28 14 	addc    r9,r9,r5
     978:	7d 29 01 94 	addze   r9,r9
     97c:	7d 29 50 14 	addc    r9,r9,r10
     980:	7d 29 01 94 	addze   r9,r9
     984:	7d 29 48 f8 	not     r9,r9
     988:	7c e7 48 14 	addc    r7,r7,r9
     98c:	7c e7 01 94 	addze   r7,r7
     990:	90 ff 00 68 	stw     r7,104(r31)

In the non-inlined version, the first sum with 0 was performed.
Here it is skipped.

Signed-off-by: Christophe Leroy &lt;christophe.leroy@csgroup.eu&gt;
Reviewed-by: Segher Boessenkool &lt;segher@kernel.crashing.org&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
Link: https://lore.kernel.org/r/f7f4d4e364de6e473da874468b903da6e5d97adc.1620713272.git.christophe.leroy@csgroup.eu

</content>
</entry>
<entry>
<title>powerpc: force inlining of csum_partial() to avoid multiple csum_partial() with GCC10</title>
<updated>2020-12-15T11:50:11+00:00</updated>
<author>
<name>Christophe Leroy</name>
<email>christophe.leroy@csgroup.eu</email>
</author>
<published>2020-10-15T10:52:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=328e7e487a464aad024fbde6663b7859df082b7b'/>
<id>urn:sha1:328e7e487a464aad024fbde6663b7859df082b7b</id>
<content type='text'>
	ppc-linux-objdump -d vmlinux | grep -e "&lt;csum_partial&gt;" -e "&lt;__csum_partial&gt;"

With gcc9 I get:

	c0017ef8 &lt;__csum_partial&gt;:
	c00182fc:	4b ff fb fd 	bl      c0017ef8 &lt;__csum_partial&gt;
	c0018478:	4b ff fa 80 	b       c0017ef8 &lt;__csum_partial&gt;
	c03e8458:	4b c2 fa a0 	b       c0017ef8 &lt;__csum_partial&gt;
	c03e8518:	4b c2 f9 e1 	bl      c0017ef8 &lt;__csum_partial&gt;
	c03ef410:	4b c2 8a e9 	bl      c0017ef8 &lt;__csum_partial&gt;
	c03f0b24:	4b c2 73 d5 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04279a4:	4b bf 05 55 	bl      c0017ef8 &lt;__csum_partial&gt;
	c0429820:	4b be e6 d9 	bl      c0017ef8 &lt;__csum_partial&gt;
	c0429944:	4b be e5 b5 	bl      c0017ef8 &lt;__csum_partial&gt;
	c042b478:	4b be ca 81 	bl      c0017ef8 &lt;__csum_partial&gt;
	c042b554:	4b be c9 a5 	bl      c0017ef8 &lt;__csum_partial&gt;
	c045f15c:	4b bb 8d 9d 	bl      c0017ef8 &lt;__csum_partial&gt;
	c0492190:	4b b8 5d 69 	bl      c0017ef8 &lt;__csum_partial&gt;
	c0492310:	4b b8 5b e9 	bl      c0017ef8 &lt;__csum_partial&gt;
	c0495594:	4b b8 29 65 	bl      c0017ef8 &lt;__csum_partial&gt;
	c049c420:	4b b7 ba d9 	bl      c0017ef8 &lt;__csum_partial&gt;
	c049c870:	4b b7 b6 89 	bl      c0017ef8 &lt;__csum_partial&gt;
	c049c930:	4b b7 b5 c9 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04a9ca0:	4b b6 e2 59 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04bdde4:	4b b5 a1 15 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04be480:	4b b5 9a 79 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04be710:	4b b5 97 e9 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04c969c:	4b b4 e8 5d 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04ca2fc:	4b b4 db fd 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04cf5bc:	4b b4 89 3d 	bl      c0017ef8 &lt;__csum_partial&gt;
	c04d0440:	4b b4 7a b9 	bl      c0017ef8 &lt;__csum_partial&gt;

With gcc10 I get:

	c0018d08 &lt;__csum_partial&gt;:
	c0019020 &lt;csum_partial&gt;:
	c0019020:	4b ff fc e8 	b       c0018d08 &lt;__csum_partial&gt;
	c001914c:	4b ff fe d4 	b       c0019020 &lt;csum_partial&gt;
	c0019250:	4b ff fd d1 	bl      c0019020 &lt;csum_partial&gt;
	c03e404c &lt;csum_partial&gt;:
	c03e404c:	4b c3 4c bc 	b       c0018d08 &lt;__csum_partial&gt;
	c03e4050:	4b ff ff fc 	b       c03e404c &lt;csum_partial&gt;
	c03e40fc:	4b ff ff 51 	bl      c03e404c &lt;csum_partial&gt;
	c03e6680:	4b ff d9 cd 	bl      c03e404c &lt;csum_partial&gt;
	c03e68c4:	4b ff d7 89 	bl      c03e404c &lt;csum_partial&gt;
	c03e7934:	4b ff c7 19 	bl      c03e404c &lt;csum_partial&gt;
	c03e7bf8:	4b ff c4 55 	bl      c03e404c &lt;csum_partial&gt;
	c03eb148:	4b ff 8f 05 	bl      c03e404c &lt;csum_partial&gt;
	c03ecf68:	4b c2 bd a1 	bl      c0018d08 &lt;__csum_partial&gt;
	c04275b8 &lt;csum_partial&gt;:
	c04275b8:	4b bf 17 50 	b       c0018d08 &lt;__csum_partial&gt;
	c0427884:	4b ff fd 35 	bl      c04275b8 &lt;csum_partial&gt;
	c0427b18:	4b ff fa a1 	bl      c04275b8 &lt;csum_partial&gt;
	c0427bd8:	4b ff f9 e1 	bl      c04275b8 &lt;csum_partial&gt;
	c0427cd4:	4b ff f8 e5 	bl      c04275b8 &lt;csum_partial&gt;
	c0427e34:	4b ff f7 85 	bl      c04275b8 &lt;csum_partial&gt;
	c045a1c0:	4b bb eb 49 	bl      c0018d08 &lt;__csum_partial&gt;
	c0489464 &lt;csum_partial&gt;:
	c0489464:	4b b8 f8 a4 	b       c0018d08 &lt;__csum_partial&gt;
	c04896b0:	4b ff fd b5 	bl      c0489464 &lt;csum_partial&gt;
	c048982c:	4b ff fc 39 	bl      c0489464 &lt;csum_partial&gt;
	c0490158:	4b b8 8b b1 	bl      c0018d08 &lt;__csum_partial&gt;
	c0492f0c &lt;csum_partial&gt;:
	c0492f0c:	4b b8 5d fc 	b       c0018d08 &lt;__csum_partial&gt;
	c049326c:	4b ff fc a1 	bl      c0492f0c &lt;csum_partial&gt;
	c049333c:	4b ff fb d1 	bl      c0492f0c &lt;csum_partial&gt;
	c0493b18:	4b ff f3 f5 	bl      c0492f0c &lt;csum_partial&gt;
	c0493f50:	4b ff ef bd 	bl      c0492f0c &lt;csum_partial&gt;
	c0493ffc:	4b ff ef 11 	bl      c0492f0c &lt;csum_partial&gt;
	c04a0f78:	4b b7 7d 91 	bl      c0018d08 &lt;__csum_partial&gt;
	c04b3e3c:	4b b6 4e cd 	bl      c0018d08 &lt;__csum_partial&gt;
	c04b40d0 &lt;csum_partial&gt;:
	c04b40d0:	4b b6 4c 38 	b       c0018d08 &lt;__csum_partial&gt;
	c04b4448:	4b ff fc 89 	bl      c04b40d0 &lt;csum_partial&gt;
	c04b46f4:	4b ff f9 dd 	bl      c04b40d0 &lt;csum_partial&gt;
	c04bf448:	4b b5 98 c0 	b       c0018d08 &lt;__csum_partial&gt;
	c04c5264:	4b b5 3a a5 	bl      c0018d08 &lt;__csum_partial&gt;
	c04c61e4:	4b b5 2b 25 	bl      c0018d08 &lt;__csum_partial&gt;

gcc10 defines multiple versions of csum_partial() which are just
an unconditionnal branch to __csum_partial().

To enforce inlining of that branch to __csum_partial(),
mark csum_partial() as __always_inline.

With this patch with gcc10:

	c0018d08 &lt;__csum_partial&gt;:
	c0019148:	4b ff fb c0 	b       c0018d08 &lt;__csum_partial&gt;
	c001924c:	4b ff fa bd 	bl      c0018d08 &lt;__csum_partial&gt;
	c03e40ec:	4b c3 4c 1d 	bl      c0018d08 &lt;__csum_partial&gt;
	c03e4120:	4b c3 4b e8 	b       c0018d08 &lt;__csum_partial&gt;
	c03eb004:	4b c2 dd 05 	bl      c0018d08 &lt;__csum_partial&gt;
	c03ecef4:	4b c2 be 15 	bl      c0018d08 &lt;__csum_partial&gt;
	c0427558:	4b bf 17 b1 	bl      c0018d08 &lt;__csum_partial&gt;
	c04286e4:	4b bf 06 25 	bl      c0018d08 &lt;__csum_partial&gt;
	c0428cd8:	4b bf 00 31 	bl      c0018d08 &lt;__csum_partial&gt;
	c0428d84:	4b be ff 85 	bl      c0018d08 &lt;__csum_partial&gt;
	c045a17c:	4b bb eb 8d 	bl      c0018d08 &lt;__csum_partial&gt;
	c0489450:	4b b8 f8 b9 	bl      c0018d08 &lt;__csum_partial&gt;
	c0491860:	4b b8 74 a9 	bl      c0018d08 &lt;__csum_partial&gt;
	c0492eec:	4b b8 5e 1d 	bl      c0018d08 &lt;__csum_partial&gt;
	c04a0eac:	4b b7 7e 5d 	bl      c0018d08 &lt;__csum_partial&gt;
	c04b3e34:	4b b6 4e d5 	bl      c0018d08 &lt;__csum_partial&gt;
	c04b426c:	4b b6 4a 9d 	bl      c0018d08 &lt;__csum_partial&gt;
	c04b463c:	4b b6 46 cd 	bl      c0018d08 &lt;__csum_partial&gt;
	c04c004c:	4b b5 8c bd 	bl      c0018d08 &lt;__csum_partial&gt;
	c04c0368:	4b b5 89 a1 	bl      c0018d08 &lt;__csum_partial&gt;
	c04c5254:	4b b5 3a b5 	bl      c0018d08 &lt;__csum_partial&gt;
	c04c60d4:	4b b5 2c 35 	bl      c0018d08 &lt;__csum_partial&gt;

Signed-off-by: Christophe Leroy &lt;christophe.leroy@csgroup.eu&gt;
Reviewed-by: Segher Boessenkool  &lt;segher@kernel.crashing.org&gt;
Signed-off-by: Michael Ellerman &lt;mpe@ellerman.id.au&gt;
Link: https://lore.kernel.org/r/a1d31f84ddb0926813b17fcd5cc7f3fa7b4deac2.1602759123.git.christophe.leroy@csgroup.eu
</content>
</entry>
<entry>
<title>ppc: propagate the calling conventions change down to csum_partial_copy_generic()</title>
<updated>2020-08-20T19:45:22+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2020-07-20T14:09:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=70d65cd555c5e43c613700f604a47f7ebcf7b6f1'/>
<id>urn:sha1:70d65cd555c5e43c613700f604a47f7ebcf7b6f1</id>
<content type='text'>
... and get rid of the pointless fallback in the wrappers.  On error it used
to zero the unwritten area and calculate the csum of the entire thing.  Not
wanting to do it in assembler part had been very reasonable; doing that in
the first place, OTOH...  In case of an error the caller discards the data
we'd copied, along with whatever checksum it might've had.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>saner calling conventions for csum_and_copy_..._user()</title>
<updated>2020-08-20T19:45:15+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2020-07-11T04:27:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=c693cc4676a055c4126e487b30b0a96ea7ec9936'/>
<id>urn:sha1:c693cc4676a055c4126e487b30b0a96ea7ec9936</id>
<content type='text'>
All callers of these primitives will
	* discard anything we might've copied in case of error
	* ignore the csum value in case of error
	* always pass 0xffffffff as the initial sum, so the
resulting csum value (in case of success, that is) will never be 0.

That suggest the following calling conventions:
	* don't pass err_ptr - just return 0 on error.
	* don't bother with zeroing destination, etc. in case of error
	* don't pass the initial sum - just use 0xffffffff.

This commit does the minimal conversion in the instances of csum_and_copy_...();
the changes of actual asm code behind them are done later in the series.
Note that this asm code is often shared with csum_partial_copy_nocheck();
the difference is that csum_partial_copy_nocheck() passes 0 for initial
sum while csum_and_copy_..._user() pass 0xffffffff.  Fortunately, we are
free to pass 0xffffffff in all cases and subsequent patches will use that
freedom without any special comments.

A part that could be split off: parisc and uml/i386 claimed to have
csum_and_copy_to_user() instances of their own, but those were identical
to the generic one, so we simply drop them.  Not sure if it's worth
a separate commit...

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>csum_partial_copy_nocheck(): drop the last argument</title>
<updated>2020-08-20T19:45:14+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2020-07-11T04:12:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=cc44c17baf7f3f833d36b2f2a1edb1cc0b6f2cc4'/>
<id>urn:sha1:cc44c17baf7f3f833d36b2f2a1edb1cc0b6f2cc4</id>
<content type='text'>
It's always 0.  Note that we theoretically could use ~0U as well -
result will be the same modulo 0xffff, _if_ the damn thing did the
right thing for any value of initial sum; later we'll make use of
that when convenient.

However, unlike csum_and_copy_..._user(), there are instances that
did not work for arbitrary initial sums; c6x is one such.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>unify generic instances of csum_partial_copy_nocheck()</title>
<updated>2020-08-20T19:45:14+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2020-07-23T02:14:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=6e41c585e38ff696de3a11509a0ad0a11150b0c3'/>
<id>urn:sha1:6e41c585e38ff696de3a11509a0ad0a11150b0c3</id>
<content type='text'>
quite a few architectures have the same csum_partial_copy_nocheck() -
simply memcpy() the data and then return the csum of the copy.

hexagon, parisc, ia64, s390, um: explicitly spelled out that way.

arc, arm64, csky, h8300, m68k/nommu, microblaze, mips/GENERIC_CSUM, nds32,
nios2, openrisc, riscv, unicore32: end up picking the same thing spelled
out in lib/checksum.h (with varying amounts of perversions along the way).

everybody else (alpha, arm, c6x, m68k/mmu, mips/!GENERIC_CSUM, powerpc,
sh, sparc, x86, xtensa) have non-generic variants.  For all except c6x
the declaration is in their asm/checksum.h.  c6x uses the wrapper
from asm-generic/checksum.h that would normally lead to the lib/checksum.h
instance, but in case of c6x we end up using an asm function from arch/c6x
instead.

Screw that mess - have architectures with private instances define
_HAVE_ARCH_CSUM_AND_COPY in their asm/checksum.h and have the default
one right in net/checksum.h conditional on _HAVE_ARCH_CSUM_AND_COPY
*not* defined.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152</title>
<updated>2019-05-30T18:26:32+00:00</updated>
<author>
<name>Thomas Gleixner</name>
<email>tglx@linutronix.de</email>
</author>
<published>2019-05-27T06:55:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=2874c5fd284268364ece81a7bd936f3c8168e567'/>
<id>urn:sha1:2874c5fd284268364ece81a7bd936f3c8168e567</id>
<content type='text'>
Based on 1 normalized pattern(s):

  this program is free software you can redistribute it and or modify
  it under the terms of the gnu general public license as published by
  the free software foundation either version 2 of the license or at
  your option any later version

extracted by the scancode license scanner the SPDX license identifier

  GPL-2.0-or-later

has been chosen to replace the boilerplate/reference in 3029 file(s).

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Reviewed-by: Allison Randal &lt;allison@lohutok.net&gt;
Cc: linux-spdx@vger.kernel.org
Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
</feed>
