• Thomas Gleixner's avatar
    bpf, lpm: Make locking RT friendly · 66150d0d
    Thomas Gleixner authored
    The LPM trie map cannot be used in contexts like perf, kprobes and tracing
    as this map type dynamically allocates memory.
    
    The memory allocation happens with a raw spinlock held which is a truly
    spinning lock on a PREEMPT RT enabled kernel which disables preemption and
    interrupts.
    
    As RT does not allow memory allocation from such a section for various
    reasons, convert the raw spinlock to a regular spinlock.
    
    On a RT enabled kernel these locks are substituted by 'sleeping' spinlocks
    which provide the proper protection but keep the code preemptible.
    
    On a non-RT kernel regular spinlocks map to raw spinlocks, i.e. this does
    not cause any functional change.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200224145644.602129531@linutronix.de
    66150d0d
lpm_trie.c 21.1 KB