Commit 171df638 authored by Dongxiao Xu's avatar Dongxiao Xu Committed by Greg Kroah-Hartman

Staging: heci: fix wrong order of device_lock and file_lock

When the two locks are nested, the code should always first acquire file_lock,
and then acquire device_lock in order not to generate dead-lock race.
Signed-off-by: default avatarDongxiao Xu <dongxiao.xu@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 36e84467
...@@ -277,14 +277,16 @@ int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num, ...@@ -277,14 +277,16 @@ int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num,
} }
goto end; goto end;
} }
spin_unlock_bh(&dev->device_lock);
spin_lock(&file_ext->file_lock); spin_lock(&file_ext->file_lock);
spin_lock_bh(&dev->device_lock);
if (file_ext->state != HECI_FILE_CONNECTING) { if (file_ext->state != HECI_FILE_CONNECTING) {
rets = -ENODEV; rets = -ENODEV;
spin_unlock(&file_ext->file_lock);
spin_unlock_bh(&dev->device_lock); spin_unlock_bh(&dev->device_lock);
spin_unlock(&file_ext->file_lock);
goto end; goto end;
} }
spin_unlock(&file_ext->file_lock);
/* prepare the output buffer */ /* prepare the output buffer */
client = (struct heci_client *) res_msg.data; client = (struct heci_client *) res_msg.data;
client->max_msg_length = dev->me_clients[i].props.max_msg_length; client->max_msg_length = dev->me_clients[i].props.max_msg_length;
...@@ -312,6 +314,7 @@ int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num, ...@@ -312,6 +314,7 @@ int heci_ioctl_connect_client(struct iamt_heci_device *dev, int if_num,
&dev->ctrl_wr_list.heci_cb.cb_list); &dev->ctrl_wr_list.heci_cb.cb_list);
} }
spin_unlock_bh(&dev->device_lock); spin_unlock_bh(&dev->device_lock);
spin_unlock(&file_ext->file_lock);
err = wait_event_timeout(dev->wait_recvd_msg, err = wait_event_timeout(dev->wait_recvd_msg,
(HECI_FILE_CONNECTED == file_ext->state (HECI_FILE_CONNECTED == file_ext->state
|| HECI_FILE_DISCONNECTED == file_ext->state), || HECI_FILE_DISCONNECTED == file_ext->state),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment