Re: [PATCH v15 5/5] kunit: Add tests for csum_ipv6_magic and ip_fast_csum

From: Guenter Roeck
Date: Mon Jan 22 2024 - 12:49:35 EST


On 1/22/24 08:52, David Laight wrote:
From: Guenter Roeck
Sent: 22 January 2024 16:40

Hi,

On Mon, Jan 08, 2024 at 03:57:06PM -0800, Charlie Jenkins wrote:
Supplement existing checksum tests with tests for csum_ipv6_magic and
ip_fast_csum.

Signed-off-by: Charlie Jenkins <charlie@xxxxxxxxxxxx>
---

With this patch in the tree, the arm:mps2-an385 qemu emulation gets a bad hiccup.

[ 1.839556] Unhandled exception: IPSR = 00000006 LR = fffffff1
[ 1.839804] CPU: 0 PID: 164 Comm: kunit_try_catch Tainted: G N 6.8.0-rc1 #1
[ 1.839948] Hardware name: Generic DT based system
[ 1.840062] PC is at __csum_ipv6_magic+0x8/0xb4
[ 1.840408] LR is at test_csum_ipv6_magic+0x3d/0xa4
[ 1.840493] pc : [<21212f34>] lr : [<21117fd5>] psr: 0100020b
[ 1.840586] sp : 2180bebc ip : 46c7f0d2 fp : 21275b38
[ 1.840664] r10: 21276b60 r9 : 21275b28 r8 : 21465cfc
[ 1.840751] r7 : 00003085 r6 : 21275b4e r5 : 2138702c r4 : 00000001
[ 1.840847] r3 : 2c000000 r2 : 1ac7f0d2 r1 : 21275b39 r0 : 21275b29
[ 1.840942] xPSR: 0100020b

This translates to:

PC is at __csum_ipv6_magic (arch/arm/lib/csumipv6.S:15)
LR is at test_csum_ipv6_magic (./arch/arm/include/asm/checksum.h:60
./arch/arm/include/asm/checksum.h:163 lib/checksum_kunit.c:617)

Obviously I can not say if this is a problem with qemu or a problem with
the Linux kernel. Given that, and the presumably low interest in
running mps2-an385 with Linux, I'll simply disable that test. Just take
it as a heads up that there _may_ be a problem with this on arm
nommu systems.

Can you drop in a disassembly of __csum_ipv6_magic ?
Actually I think it is:

It is, as per the PC pointer above. I don't know anything about arm assembler,
much less about its behavior with THUMB code.

ENTRY(__csum_ipv6_magic)
str lr, [sp, #-4]!
adds ip, r2, r3
ldmia r1, {r1 - r3, lr}

So the fault is (probably) a misaligned ldmia ?
Are they ever supported?


Good question. My primary guess is that this never worked. As I said,
this was just intended to be informational, (probably) no reason to bother.

Of course one might ask if it makes sense to even keep the arm nommu code
in the kernel, but that is of course a different question. I do wonder though
if anyone but me is running it.

Thanks,
Guenter

David

adcs ip, ip, r1
adcs ip, ip, r2
adcs ip, ip, r3
adcs ip, ip, lr
ldmia r0, {r0 - r3}
adcs r0, ip, r0
adcs r0, r0, r1
adcs r0, r0, r2
ldr r2, [sp, #4]
adcs r0, r0, r3
adcs r0, r0, r2
adcs r0, r0, #0
ldmfd sp!, {pc}
ENDPROC(__csum_ipv6_magic)

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)