On (23/03/30 20:45), Luis Chamberlain wrote: [..] > -static DEFINE_SEMAPHORE(console_sem); > +static DEFINE_MUTEX(console_sem); > HLIST_HEAD(console_list); > EXPORT_SYMBOL_GPL(console_list); > DEFINE_STATIC_SRCU(console_srcu); > @@ -309,7 +309,7 @@ EXPORT_SYMBOL(console_srcu_read_unlock); > * macros instead of functions so that _RET_IP_ contains useful information. > */ > #define down_console_sem() do { \ > - down(&console_sem);\ > + mutex_lock(&console_sem);\ > mutex_acquire(&console_lock_dep_map, 0, 0, _RET_IP_);\ > } while (0) > > @@ -324,7 +324,7 @@ static int __down_trylock_console_sem(unsigned long ip) > * deadlock in printk()->down_trylock_console_sem() otherwise. > */ > printk_safe_enter_irqsave(flags); > - lock_failed = down_trylock(&console_sem); > + lock_failed = !mutex_trylock(&console_sem); > printk_safe_exit_irqrestore(flags); > > if (lock_failed) > @@ -341,7 +341,7 @@ static void __up_console_sem(unsigned long ip) > mutex_release(&console_lock_dep_map, ip); > > printk_safe_enter_irqsave(flags); > - up(&console_sem); > + mutex_unlock(&console_sem); mutex_unlock() does not like when its called from IRQ, so this is not going to work very well.