diff options
Diffstat (limited to 'drivers/scsi/ufs/ufs-qcom-ice.c')
-rw-r--r-- | drivers/scsi/ufs/ufs-qcom-ice.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c b/drivers/scsi/ufs/ufs-qcom-ice.c index 84765b17086c..d288e83ec9d7 100644 --- a/drivers/scsi/ufs/ufs-qcom-ice.c +++ b/drivers/scsi/ufs/ufs-qcom-ice.c @@ -27,6 +27,8 @@ #define UFS_QCOM_ICE_DEFAULT_DBG_PRINT_EN 0 +static struct workqueue_struct *ice_workqueue; + static void ufs_qcom_ice_dump_regs(struct ufs_qcom_host *qcom_host, int offset, int len, char *prefix) { @@ -224,6 +226,13 @@ int ufs_qcom_ice_init(struct ufs_qcom_host *qcom_host) } qcom_host->dbg_print_en |= UFS_QCOM_ICE_DEFAULT_DBG_PRINT_EN; + ice_workqueue = alloc_workqueue("ice-set-key", + WQ_MEM_RECLAIM | WQ_HIGHPRI, 0); + if (!ice_workqueue) { + dev_err(ufs_dev, "%s: workqueue allocation failed.\n", + __func__); + goto out; + } INIT_WORK(&qcom_host->ice_cfg_work, ufs_qcom_ice_cfg_work); out: @@ -284,7 +293,7 @@ int ufs_qcom_ice_req_setup(struct ufs_qcom_host *qcom_host, if (!qcom_host->work_pending) { qcom_host->req_pending = cmd->request; - if (!schedule_work( + if (!queue_work(ice_workqueue, &qcom_host->ice_cfg_work)) { qcom_host->req_pending = NULL; @@ -404,7 +413,7 @@ int ufs_qcom_ice_cfg_start(struct ufs_qcom_host *qcom_host, if (!qcom_host->work_pending) { qcom_host->req_pending = cmd->request; - if (!schedule_work( + if (!queue_work(ice_workqueue, &qcom_host->ice_cfg_work)) { qcom_host->req_pending = NULL; |