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:
parent
0ea391bae1
commit
6989fadad4
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user