--- x/kernel/bpf/lpm_trie.c +++ y/kernel/bpf/lpm_trie.c @@ -321,7 +321,7 @@ static long trie_update_elem(struct bpf_ if (key->prefixlen > trie->max_prefixlen) return -EINVAL; - spin_lock_irqsave(&trie->lock, irq_flags); + spin_lock_irqsave_nested(&trie->lock, irq_flags, 1); /* Allocate and fill a new node */ @@ -448,7 +448,7 @@ static long trie_delete_elem(struct bpf_ if (key->prefixlen > trie->max_prefixlen) return -EINVAL; - spin_lock_irqsave(&trie->lock, irq_flags); + spin_lock_irqsave_nested(&trie->lock, irq_flags, 2); /* Walk the tree looking for an exact key/length match and keeping * track of the path we traverse. We will need to know the node