On Mon, Sep 14, 2020 at 2:55 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote: > > Yes it does generate better code, but I tried hard to spot a difference > in various metrics exposed by perf. It's all in the noise and I only > can spot a difference when the actual preemption check after the > decrement I'm somewhat more worried about the small-device case. That said, the diffstat certainly has its very clear charm, and I do agree that it makes things simpler. I'm just not convinced people should ever EVER do things like that "if (preemptible())" garbage. It sounds like somebody is doing seriously bad things. The chacha20poly1305 code does look fundamentally broken. But no, the fix is not to make "preemptible" work with spinlocks, the fix is to not *do* that kind of broken things. Those things would be broken even if you changed the semantics of preemptible. There's no way that it's valid to say "use this debug flag to decide if we should do atomic allocations or not". It smells like "I got a debug failure, so I'm papering it over by checking the thing the debug code checks for". The debug check is to catch the obvious bad cases. It's not the _only_ bad cases, so copying the debug check test is just completely wrong. Ard and Herbert added to participants: see chacha20poly1305_crypt_sg_inplace(), which does flags = SG_MITER_TO_SG; if (!preemptible()) flags |= SG_MITER_ATOMIC; introduced in commit d95312a3ccc0 ("crypto: lib/chacha20poly1305 - reimplement crypt_from_sg() routine"). You *fundamentally* cannot do that. Seriously. It's completely wrong. Pick one or the other, or have the caller *tell* you what the context is. Linus _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel