Re: [PATCH for review] [109/145] x86_64: Convert modlist_lock to be a raw spinlock

Andi Kleen
2006-08-13T06:54:11Z

On Sunday 13 August 2006 07:48, Andrew Morton wrote:
> On Thu, 10 Aug 2006 21:37:07 +0200 (CEST)
> Andi Kleen <ak@suse.de> wrote:
>
> > This is a preparationary patch for converting stacktrace over to the
> > new dwarf2 unwinder. lockdep uses stacktrace and the new unwinder
> > takes the modlist_lock so using a normal spinlock would cause a deadlock.
> > Use a raw lock instead.
> >
>
> It breaks the build on most architectures.

Hmm, I grepped and most architectures seem to have both __raw_spin_lock
and local_save_flags. I didn't actually compile them because crosstool
doesn't love me anymore since I use gcc 4.0.

What is the official portable interface to do a raw spinlock
if this one doesn't work?

> > - spin_lock_irqsave(&modlist_lock, flags);
> > + raw_local_save_flags(flags);
> > + __raw_spin_lock(&modlist_lock);
> > if (!__find_symbol(symbol, &owner, &crc, 1))
> > BUG();
> > module_put(owner);
> > - spin_unlock_irqrestore(&modlist_lock, flags);
> > + __raw_spin_unlock(&modlist_lock);
> > + raw_local_irq_restore(flags);
>
> That looks fairly hacky. Wouldn't it be better to implement
> raw_spin_lock_irqsave()?

Possible.

-Andi