From 6989fadad4eec966157f5893944379420841e661 Mon Sep 17 00:00:00 2001 From: Bhaumik Bhatt Date: Fri, 5 Jun 2020 11:41:20 -0700 Subject: [PATCH] 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 --- drivers/bus/mhi/core/mhi_init.c | 6 +++--- drivers/bus/mhi/core/mhi_main.c | 2 +- drivers/bus/mhi/core/mhi_pm.c | 7 +++---- include/linux/mhi.h | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/bus/mhi/core/mhi_init.c b/drivers/bus/mhi/core/mhi_init.c index 41a18e224c94..8b886ca4e600 100644 --- a/drivers/bus/mhi/core/mhi_init.c +++ b/drivers/bus/mhi/core/mhi_init.c @@ -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 @@ error_add_dev: 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); diff --git a/drivers/bus/mhi/core/mhi_main.c b/drivers/bus/mhi/core/mhi_main.c index 510867b8857a..2081d7ce63df 100644 --- a/drivers/bus/mhi/core/mhi_main.c +++ b/drivers/bus/mhi/core/mhi_main.c @@ -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; } diff --git a/drivers/bus/mhi/core/mhi_pm.c b/drivers/bus/mhi/core/mhi_pm.c index c0404868f068..a30fd8c99fd0 100644 --- a/drivers/bus/mhi/core/mhi_pm.c +++ b/drivers/bus/mhi/core/mhi_pm.c @@ -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; } diff --git a/include/linux/mhi.h b/include/linux/mhi.h index dbcb34c91716..cf6b69b4c573 100644 --- a/include/linux/mhi.h +++ b/include/linux/mhi.h @@ -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;