mhi: core: Use high priority workqueue for all MHI work

Boot-up and shutdown require faster scheduling of the PM state
worker. Use the high priority workqueue for processing any of
the PM state transitions to ensure faster boot-up or shutdown
handling on MHI host.

Change-Id: Ie311426344d9561d490aa2bf6616aa30b4333e9a
Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
This commit is contained in:
Bhaumik Bhatt 2020-06-05 11:41:20 -07:00
parent 0ea391bae1
commit 6989fadad4
4 changed files with 8 additions and 9 deletions

View File

@ -1579,9 +1579,9 @@ int of_register_mhi_controller(struct mhi_controller *mhi_cntrl)
INIT_WORK(&mhi_cntrl->st_worker, mhi_pm_st_worker);
init_waitqueue_head(&mhi_cntrl->state_event);
mhi_cntrl->special_wq = alloc_ordered_workqueue("mhi_special_w",
mhi_cntrl->wq = alloc_ordered_workqueue("mhi_w",
WQ_MEM_RECLAIM | WQ_HIGHPRI);
if (!mhi_cntrl->special_wq)
if (!mhi_cntrl->wq)
goto error_alloc_cmd;
INIT_WORK(&mhi_cntrl->special_work, mhi_special_purpose_work);
@ -1707,7 +1707,7 @@ int of_register_mhi_controller(struct mhi_controller *mhi_cntrl)
error_alloc_dev:
kfree(mhi_cntrl->mhi_cmd);
destroy_workqueue(mhi_cntrl->special_wq);
destroy_workqueue(mhi_cntrl->wq);
error_alloc_cmd:
vfree(mhi_cntrl->mhi_chan);

View File

@ -1705,7 +1705,7 @@ irqreturn_t mhi_intvec_handlr(int irq_number, void *dev)
MHI_VERB("Exit\n");
if (MHI_IN_MISSION_MODE(mhi_cntrl->ee))
queue_work(mhi_cntrl->special_wq, &mhi_cntrl->special_work);
queue_work(mhi_cntrl->wq, &mhi_cntrl->special_work);
return IRQ_WAKE_THREAD;
}

View File

@ -784,7 +784,7 @@ static int mhi_queue_disable_transition(
list_add_tail(&item->node, &mhi_cntrl->transition_list);
spin_unlock_irqrestore(&mhi_cntrl->transition_lock, flags);
schedule_work(&mhi_cntrl->st_worker);
queue_work(mhi_cntrl->wq, &mhi_cntrl->st_worker);
return 0;
}
@ -804,7 +804,7 @@ int mhi_queue_state_transition(struct mhi_controller *mhi_cntrl,
list_add_tail(&item->node, &mhi_cntrl->transition_list);
spin_unlock_irqrestore(&mhi_cntrl->transition_lock, flags);
schedule_work(&mhi_cntrl->st_worker);
queue_work(mhi_cntrl->wq, &mhi_cntrl->st_worker);
return 0;
}
@ -820,8 +820,7 @@ static void mhi_special_events_pending(struct mhi_controller *mhi_cntrl)
spin_lock_bh(&mhi_event->lock);
if (ev_ring->rp != mhi_to_virtual(ev_ring, er_ctxt->rp)) {
queue_work(mhi_cntrl->special_wq,
&mhi_cntrl->special_work);
queue_work(mhi_cntrl->wq, &mhi_cntrl->special_work);
spin_unlock_bh(&mhi_event->lock);
break;
}

View File

@ -357,7 +357,7 @@ struct mhi_controller {
/* worker for different state transitions */
struct work_struct st_worker;
struct work_struct special_work;
struct workqueue_struct *special_wq;
struct workqueue_struct *wq;
wait_queue_head_t state_event;