Merge "msm: ipa3: Add wait queue for the adpl"

This commit is contained in:
qctecmdr 2021-10-21 05:00:39 -07:00 committed by Gerrit - the friendly Code Review server
commit 4bd53b8750
2 changed files with 7 additions and 5 deletions

View file

@ -250,6 +250,7 @@ int ipa3_send_adpl_msg(unsigned long skb_data)
list_add_tail(&msg->link, &ipa3_odl_ctx->adpl_msg_list); list_add_tail(&msg->link, &ipa3_odl_ctx->adpl_msg_list);
atomic_inc(&ipa3_odl_ctx->stats.numer_in_queue); atomic_inc(&ipa3_odl_ctx->stats.numer_in_queue);
mutex_unlock(&ipa3_odl_ctx->adpl_msg_lock); mutex_unlock(&ipa3_odl_ctx->adpl_msg_lock);
wake_up(&ipa3_odl_ctx->adpl_msg_waitq);
IPA_STATS_INC_CNT(ipa3_odl_ctx->stats.odl_rx_pkt); IPA_STATS_INC_CNT(ipa3_odl_ctx->stats.odl_rx_pkt);
return 0; return 0;
@ -534,7 +535,9 @@ static ssize_t ipa_adpl_read(struct file *filp, char __user *buf, size_t count,
int ret = 0; int ret = 0;
char __user *start = buf; char __user *start = buf;
struct ipa3_push_msg_odl *msg; struct ipa3_push_msg_odl *msg;
DEFINE_WAIT_FUNC(wait, woken_wake_function);
add_wait_queue(&ipa3_odl_ctx->adpl_msg_waitq, &wait);
while (1) { while (1) {
IPADBG_LOW("Writing message to adpl pipe\n"); IPADBG_LOW("Writing message to adpl pipe\n");
if (!ipa3_odl_ctx->odl_state.odl_open) if (!ipa3_odl_ctx->odl_state.odl_open)
@ -579,9 +582,6 @@ static ssize_t ipa_adpl_read(struct file *filp, char __user *buf, size_t count,
IPA_STATS_INC_CNT(ipa3_odl_ctx->stats.odl_tx_diag_pkt); IPA_STATS_INC_CNT(ipa3_odl_ctx->stats.odl_tx_diag_pkt);
kfree(msg); kfree(msg);
msg = NULL; msg = NULL;
} else {
ret = -EAGAIN;
break;
} }
ret = -EAGAIN; ret = -EAGAIN;
@ -594,9 +594,9 @@ static ssize_t ipa_adpl_read(struct file *filp, char __user *buf, size_t count,
if (start != buf) if (start != buf)
break; break;
wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
} }
remove_wait_queue(&ipa3_odl_ctx->adpl_msg_waitq, &wait);
if (start != buf && ret != -EFAULT) if (start != buf && ret != -EFAULT)
ret = buf - start; ret = buf - start;
@ -672,6 +672,7 @@ int ipa_odl_init(void)
odl_cdev = ipa3_odl_ctx->odl_cdev; odl_cdev = ipa3_odl_ctx->odl_cdev;
INIT_LIST_HEAD(&ipa3_odl_ctx->adpl_msg_list); INIT_LIST_HEAD(&ipa3_odl_ctx->adpl_msg_list);
init_waitqueue_head(&ipa3_odl_ctx->adpl_msg_waitq);
mutex_init(&ipa3_odl_ctx->adpl_msg_lock); mutex_init(&ipa3_odl_ctx->adpl_msg_lock);
mutex_init(&ipa3_odl_ctx->pipe_lock); mutex_init(&ipa3_odl_ctx->pipe_lock);

View file

@ -58,6 +58,7 @@ struct ipa_odl_context {
bool odl_ctl_msg_wq_flag; bool odl_ctl_msg_wq_flag;
struct ipa3_odlstats stats; struct ipa3_odlstats stats;
u32 odl_pm_hdl; u32 odl_pm_hdl;
wait_queue_head_t adpl_msg_waitq;
}; };
struct ipa3_push_msg_odl { struct ipa3_push_msg_odl {