at 1:59 AM, Masami Hiramatsu <mhiramat@xxxxxxxxxx> wrote: > On Wed, 29 Aug 2018 01:11:42 -0700 > Nadav Amit <namit@xxxxxxxxxx> wrote: > >> Use lockdep to ensure that text_mutex is taken when text_poke() is >> called. >> >> Actually it is not always taken, specifically when it is called by kgdb, >> so take the lock in these cases. > > Can we really take a mutex in kgdb context? > > kgdb_arch_remove_breakpoint > <- dbg_deactivate_sw_breakpoints > <- kgdb_reenter_check > <- kgdb_handle_exception > <- __kgdb_notify > <- kgdb_ll_trap > <- do_int3 > <- kgdb_notify > <- die notifier > > kgdb_arch_set_breakpoint > <- dbg_activate_sw_breakpoints > <- kgdb_reenter_check > <- kgdb_handle_exception > ... > > Both seems called in exception context, so we can not take a mutex lock. > I think kgdb needs a special path. You are correct, but I don’t want a special path. Presumably text_mutex is guaranteed not to be taken according to the code. So I guess the only concern is lockdep. Do you see any problem if I change mutex_lock() into mutex_trylock()? It should always succeed, and I can add a warning and a failure path if it fails for some reason.