Re: [PATCH] bpf: defer printk() inside __bpf_prog_run()
From: Alexei Starovoitov
Date: Wed Jun 26 2024 - 19:52:50 EST
On Wed, Jun 26, 2024 at 4:09 PM Tetsuo Handa
<penguin-kernel@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On 2024/06/27 7:33, Steven Rostedt wrote:
> > So you are saying that because a BPF hook can attach to a tracepoint
> > that is called with rq locks held, it should always disable preemption
> > and call printk_deferred_enter(), because it *might* hit an error path
> > that will call printk?? In other words, how the BPF hook is used
> > determines if the rq lock is held or not when it is called.
>
> Yes.
>
> >
> > I can use that same argument for should_fail_ex(). Because how it is
> > used determines if the rq lock is held or not when it is called. And it
> > is the function that actually calls printk().
>
> Strictly speaking, KASAN/KMSAN/KCSAN etc. *might* call printk() at any location.
> In that aspect, just wrapping individual function that explicitly calls printk()
> might not be sufficient. We will need to widen section for deferring printk(),
> but we don't want to needlessly call migrate_disable()/preempt_disable()/
> printk_deferred_enter() due to performance reason. We need to find a balanced
> location for calling migrate_disable()/preempt_disable()/printk_deferred_enter().
> I consider __bpf_prog_run() as a balanced location.
Tetsuo,
your repeated invalid arguments are not making this thread productive.
Told you already that the same can happen without bpf in the picture.
> >
> > Sorry, but it makes no sense to put the burden of the
> > printk_deferred_enter() on the BPF hook logic. It should sit solely
> > with the code that actually calls printk().
>
> How do you respond to Petr Mladek's comment
>
> Yeah, converting printk() into printk_deferred() or using
> printk_deferred_enter() around particular code paths is a whac-a-mole
> game.
Exactly. wrapping bpf with printk_deferred_enter() is such a whac-a-mole.
It doesn't fix an issue.