Slide 46
Slide 46 text
46
46
トラブルシューティング
kobject_uevent_env のソース
kobject_uevent_env() 内の mutex_lock が競合していそうと推論した
int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
char *envp_ext[])
{
... snip
mutex_lock(&uevent_sock_mutex);
/* we will send an event, so request a new sequence number */
retval = add_uevent_var(env, "SEQNUM=%llu", ++uevent_seqnum);
if (retval) {
mutex_unlock(&uevent_sock_mutex);
goto exit;
}
retval = kobject_uevent_net_broadcast(kobj, env, action_string, ⚡
devpath);
mutex_unlock(&uevent_sock_mutex);
⚠ uevent_sock_mutex は Global Mutex ( static DEFINE_MUTEX(uevent_sock_mutex ) 。1タスクのみ実行可能なクリティカルセクションになる