提交 eefacf3b 编写于 作者: D David Graham 提交者: David S. Miller

e1000e: Add process name to WARN message when detecting Mutex contention

Adds process name of the current mutex holder to the WARN message output
when the e1000e driver attempts to acquire the nvm_mutex and finds that
it is already being held. With this patch the WARN message indicates
both the process name of the current mutex holder and the process name of
the attempted acquisition, which together will help to identify the
contending codepaths.
Signed-off-by: NDavid Graham <david.graham@intel.com>
Acked-by: NBruce Allan <bruce.w.allan@intel.com>
Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 e56e356b
...@@ -390,7 +390,8 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter) ...@@ -390,7 +390,8 @@ static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter)
} }
static DEFINE_MUTEX(nvm_mutex); static DEFINE_MUTEX(nvm_mutex);
static pid_t nvm_owner = -1; static pid_t nvm_owner_pid = -1;
static char nvm_owner_name[TASK_COMM_LEN] = "";
/** /**
* e1000_acquire_swflag_ich8lan - Acquire software control flag * e1000_acquire_swflag_ich8lan - Acquire software control flag
...@@ -408,11 +409,15 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw) ...@@ -408,11 +409,15 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw)
might_sleep(); might_sleep();
if (!mutex_trylock(&nvm_mutex)) { if (!mutex_trylock(&nvm_mutex)) {
WARN(1, KERN_ERR "e1000e mutex contention. Owned by pid %d\n", WARN(1, KERN_ERR "e1000e mutex contention. Owned by process "
nvm_owner); "%s (pid %d), required by process %s (pid %d)\n",
nvm_owner_name, nvm_owner_pid,
current->comm, current->pid);
mutex_lock(&nvm_mutex); mutex_lock(&nvm_mutex);
} }
nvm_owner = current->pid; nvm_owner_pid = current->pid;
strncpy(nvm_owner_name, current->comm, TASK_COMM_LEN);
while (timeout) { while (timeout) {
extcnf_ctrl = er32(EXTCNF_CTRL); extcnf_ctrl = er32(EXTCNF_CTRL);
...@@ -430,7 +435,8 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw) ...@@ -430,7 +435,8 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw)
hw_dbg(hw, "FW or HW has locked the resource for too long.\n"); hw_dbg(hw, "FW or HW has locked the resource for too long.\n");
extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG; extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
ew32(EXTCNF_CTRL, extcnf_ctrl); ew32(EXTCNF_CTRL, extcnf_ctrl);
nvm_owner = -1; nvm_owner_pid = -1;
strcpy(nvm_owner_name, "");
mutex_unlock(&nvm_mutex); mutex_unlock(&nvm_mutex);
return -E1000_ERR_CONFIG; return -E1000_ERR_CONFIG;
} }
...@@ -454,7 +460,8 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw) ...@@ -454,7 +460,8 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG; extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
ew32(EXTCNF_CTRL, extcnf_ctrl); ew32(EXTCNF_CTRL, extcnf_ctrl);
nvm_owner = -1; nvm_owner_pid = -1;
strcpy(nvm_owner_name, "");
mutex_unlock(&nvm_mutex); mutex_unlock(&nvm_mutex);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册