Hello! Several places state that eBPF programs cannot be preempted by the kernel (e.g. https://docs.cilium.io/en/latest/bpf/toolchain), however, I did see a strange behavior where an eBPF percpu map gets overridden, and I'm trying to figure out if it's due to a bug in my program or some misunderstanding I have about eBPF. What caught my eye was a sentence in a LWN article (https://lwn.net/Articles/812503/) that says: "Alexei thankfully enlightened me recently over a beer that the real intent here is to guarantee that the program runs to completion on the same CPU where it started". So my question is - are BPF programs guaranteed to run from start to end without being interrupted at all or the only guarantee I get is that they run on the same CPU but IRQs (NMIs, soft irqs, whatever) can interrupt their run? If the only guarantee is no migration, it means that a percpu map cannot be safely used by two different BPF programs that can preempt each other (e.g. some kprobe and a network cgroup program).