Clark, On Thu, 17 Oct 2019, Clark Williams wrote: > On Thu, 17 Oct 2019 23:54:07 +0200 (CEST) > Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > > #2) BPF does allocations in atomic contexts, which is a dubious decision > > even for non RT. That's related to #1 > > I guess my question here is, are the allocations done on behalf of an about-to-run > BPF program, or as a result of executing BPF code? Is it something we might be able > to satisfy from a pre-allocated pool rather than kmalloc()? Ok, I need to go dive > into BPF a bit deeper. Sebastion? > > #3) BPF uses the up_read_non_owner() hackery which was only invented to > > deal with already existing horrors and not meant to be proliferated. > > > > Yes, I know it's a existing facility .... > > I'm sure I'll regret asking this, but why is up_read_non_owner() a horror? I mean, > I get the fundamental wrongness of having someone that's not the owner of a semaphore > performing an 'up' on it, but is there an RT-specific reason that it's bad? Is it > totally a blocker for using BPF with RT or is it something we should fix over time? RT has strict locker == unlocker semantics simply because the owner (locker) is subject to priority inheritance and a non-owner unlock cannot undo PI on behalf of the locker sanely. Also exposing the locker to PI if the locker is not involved in unlocking is obviously a pointless exercise and potentially a source of unbound priority inversion. > I do think that we (RT) are going to have to co-exist with BPF, if only due to the > increased use of XDP. I also think that other sub-systems will start to > employ BPF for production purposes (as opposed to debug/analysis which is > how we generally look at tracing, packet sniffing, etc.). I think we *have* to > figure out how to co-exist. I'm not saying that RT does not want BPF, quite the contrary, but for the initial merge BPF is not a hard requirement, so disabling it was the straight forward path. I'm all ears to get pointers how to solve that right now. Thanks, tglx