Messages in this thread | | | Date | Thu, 27 Jan 2022 15:25:53 +0100 | From | Petr Mladek <> | Subject | Re: [PATCH 2/4] printk: disable optimistic spin during panic |
| |
On Thu 2022-01-27 13:49:44, John Ogness wrote: > On 2022-01-27, Petr Mladek <pmladek@suse.com> wrote: > > I mean that chance of dealock caused by the internal semaohore spin > > lock is super small. In compare, a lot of tricky code is guarded > > by console_sem. It looks like a big risk to ignore the semaphore > > early in panic(). > > Agreed. > > > A better solution would be to use raw_spin_trylock_irqsave() in > > down_trylock(). > > down_trylock() is attempting to decrement a semaphore. It should not > fail just because another CPU is also in the process of > decrementing/incrementing the semaphore.
IMHO, it does not matter. As you say, raw_spin_trylock_irqsave() fails only when another process is about to release or take the semaphore. The semaphore is usually taken for a long time. The tiny window when the counter is manipulated is negligible.
I mean, if down_trylock() fails because of raw_spin_trylock_irqsave() failure then it is few instructions from failing even with the lock.
> Maybe a down_trylock_cond() could be introduced where the trylock could > fail if a given condition is not met. The function would need to > implement its own internal trylock spin loop to check the condition. But > then we could pass in a condition for it to abort. For example, when in > panic and we are not the panic CPU.
This looks too complicated.
Another solution would be to introduce panic_down_trylock() variant of down_trylock() that will use raw_spin_trylock_irqsave(). The normal down_trylock() might still use the raw_spin_lock_irqsave().
Well, this should get discussed with the locking people.
Best Regards, Petr
| |