Re: spinlock recursion when running q800 emulation in qemu

Geert Uytterhoeven
2024-03-12T08:00:09Z

On Tue, Mar 12, 2024 at 1:51 AM Michael Schmitz <schmitzmic@gmail.com> wrote:
> On 11/03/24 21:35, Finn Thain wrote:
> > I think spin_lock() reduces to preempt_disable() on UP.
> > In include/linux/spinlock_api_up.h it says,
> >
> > /*
> > * In the UP-nondebug case there's no real locking going on, so the
> > * only thing we have to do is to keep the preempt counts and irq
> > * flags straight, to suppress compiler warnings of unused lock
> > * variables, and to add the proper checker annotations:
> > */
>
> That's only true in the debug case - there, preempt_disable() is used
> inside the spin loop. But m68k is one of the last CONFIG_PREEMPT_NONE
> archs AFAIR, and preempt_disable() reduces to barrier() on those.

M68k does have experimental preempt support. I have been running
that for the last 5 months. Works fine most of the time, except for
the one BUG[1] that happens every 10 boots or so.

[1] https://lore.kernel.org/all/CAMuHMdUQ72KOPw5vxNfhjoTR-SsaELeKneBmyQPYEWa_o5OZZA@mail.gmail.com

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds