at 10:11 AM, Nadav Amit <namit@xxxxxxxxxx> wrote: > 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. Err.. This will not work. I think I will drop this patch, since I cannot find a proper yet simple assertion. Creating special path just for the assertion seems wrong.