2021-03-10 13:56:27

by Jan Kardell

[permalink] [raw]
Subject: arm: lockdep complaining about locks allocations in static memory

Hi,

During work lift the software and kernel versions on our custom TI
am3352 board I started to see lockdep warnings after enabling
CONFIG_PREEMT. Lockdep seems to think the memory that previously was
initmem is static memory. I'm using linux 5.4, as that is what is used
in the next OpenWrt version.

[ 92.198989] WARNING: CPU: 0 PID: 2015 at kernel/locking/lockdep.c:1119
alloc_netdev_mqs+0xb4/0x3b0

I guess CONFIG_PREEMT just changes the timing of allocations, and is
otherwise irrelevant.

This was fixed for s390 in linux 5.2 commit
7a5da02de8d6eafba99556f8c98e5313edebb449 by adding the function
arch_is_kernel_initmem_freed(). Later a very similar change was made for
powerpc, and a different solution for x86. I now believe that is needed
for arm as well. Though I don't know the inner workings of arm memory
management so I don't know if an identical solution to s390 will do for
arm, but my experiments suggests it works for am335x. The commit message
for s390 says "virt == phys", but that seems not to be the case for my
arm system.

//Jan


2021-03-10 15:03:32

by Russell King (Oracle)

[permalink] [raw]
Subject: Re: arm: lockdep complaining about locks allocations in static memory

On Wed, Mar 10, 2021 at 02:54:30PM +0100, Jan Kardell wrote:
> Hi,
>
> During work lift the software and kernel versions on our custom TI am3352
> board I started to see lockdep warnings after enabling CONFIG_PREEMT.
> Lockdep seems to think the memory that previously was initmem is static
> memory. I'm using linux 5.4, as that is what is used in the next OpenWrt
> version.
>
> [ 92.198989] WARNING: CPU: 0 PID: 2015 at kernel/locking/lockdep.c:1119
> alloc_netdev_mqs+0xb4/0x3b0
>
> I guess CONFIG_PREEMT just changes the timing of allocations, and is
> otherwise irrelevant.
>
> This was fixed for s390 in linux 5.2 commit
> 7a5da02de8d6eafba99556f8c98e5313edebb449 by adding the function
> arch_is_kernel_initmem_freed(). Later a very similar change was made for
> powerpc, and a different solution for x86. I now believe that is needed for
> arm as well. Though I don't know the inner workings of arm memory management
> so I don't know if an identical solution to s390 will do for arm, but my
> experiments suggests it works for am335x. The commit message for s390 says
> "virt == phys", but that seems not to be the case for my arm system.

I don't see any reason this couldn't be added to arm, but it needs
someone to create and test a patch - which implies that they need to
have a problem that needs to be solved. As you seem to be experiencing
the problem, it seems you are well suited to this. Thanks.

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!