Merge "msm: ipa: Fix the problem with nested sleeping primitives"
This commit is contained in:
commit
1ccca4730a
2 changed files with 8 additions and 10 deletions
|
@ -541,15 +541,15 @@ ssize_t ipa_read(struct file *filp, char __user *buf, size_t count,
|
|||
char __user *start;
|
||||
struct ipa_push_msg *msg = NULL;
|
||||
int ret;
|
||||
DEFINE_WAIT(wait);
|
||||
DEFINE_WAIT_FUNC(wait, woken_wake_function);
|
||||
int locked;
|
||||
|
||||
start = buf;
|
||||
|
||||
add_wait_queue(&ipa_ctx->msg_waitq, &wait);
|
||||
while (1) {
|
||||
mutex_lock(&ipa_ctx->msg_lock);
|
||||
locked = 1;
|
||||
prepare_to_wait(&ipa_ctx->msg_waitq, &wait, TASK_INTERRUPTIBLE);
|
||||
if (!list_empty(&ipa_ctx->msg_list)) {
|
||||
msg = list_first_entry(&ipa_ctx->msg_list,
|
||||
struct ipa_push_msg, link);
|
||||
|
@ -601,10 +601,10 @@ ssize_t ipa_read(struct file *filp, char __user *buf, size_t count,
|
|||
|
||||
locked = 0;
|
||||
mutex_unlock(&ipa_ctx->msg_lock);
|
||||
schedule();
|
||||
wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
|
||||
}
|
||||
|
||||
finish_wait(&ipa_ctx->msg_waitq, &wait);
|
||||
remove_wait_queue(&ipa_ctx->msg_waitq, &wait);
|
||||
if (start != buf && ret != -EFAULT)
|
||||
ret = buf - start;
|
||||
|
||||
|
|
|
@ -546,17 +546,15 @@ ssize_t ipa3_read(struct file *filp, char __user *buf, size_t count,
|
|||
char __user *start;
|
||||
struct ipa3_push_msg *msg = NULL;
|
||||
int ret;
|
||||
DEFINE_WAIT(wait);
|
||||
DEFINE_WAIT_FUNC(wait, woken_wake_function);
|
||||
int locked;
|
||||
|
||||
start = buf;
|
||||
|
||||
add_wait_queue(&ipa3_ctx->msg_waitq, &wait);
|
||||
while (1) {
|
||||
mutex_lock(&ipa3_ctx->msg_lock);
|
||||
locked = 1;
|
||||
prepare_to_wait(&ipa3_ctx->msg_waitq,
|
||||
&wait,
|
||||
TASK_INTERRUPTIBLE);
|
||||
|
||||
if (!list_empty(&ipa3_ctx->msg_list)) {
|
||||
msg = list_first_entry(&ipa3_ctx->msg_list,
|
||||
|
@ -609,10 +607,10 @@ ssize_t ipa3_read(struct file *filp, char __user *buf, size_t count,
|
|||
|
||||
locked = 0;
|
||||
mutex_unlock(&ipa3_ctx->msg_lock);
|
||||
schedule();
|
||||
wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
|
||||
}
|
||||
|
||||
finish_wait(&ipa3_ctx->msg_waitq, &wait);
|
||||
remove_wait_queue(&ipa3_ctx->msg_waitq, &wait);
|
||||
if (start != buf && ret != -EFAULT)
|
||||
ret = buf - start;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue