Merge tag 'dmaengine-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul...
[linux-block.git] / drivers / dma / idxd / device.c
index dd6a05eccb189600cb2eb479114dab1a555fc264..ff0ea60051f0c90e50463de27df0abf5b53f9e27 100644 (file)
@@ -715,18 +715,21 @@ static void idxd_device_wqs_clear_state(struct idxd_device *idxd)
        for (i = 0; i < idxd->max_wqs; i++) {
                struct idxd_wq *wq = idxd->wqs[i];
 
+               mutex_lock(&wq->wq_lock);
                if (wq->state == IDXD_WQ_ENABLED) {
-                       mutex_lock(&wq->wq_lock);
                        idxd_wq_disable_cleanup(wq);
-                       idxd_wq_device_reset_cleanup(wq);
                        wq->state = IDXD_WQ_DISABLED;
-                       mutex_unlock(&wq->wq_lock);
                }
+               idxd_wq_device_reset_cleanup(wq);
+               mutex_unlock(&wq->wq_lock);
        }
 }
 
 void idxd_device_clear_state(struct idxd_device *idxd)
 {
+       if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
+               return;
+
        idxd_device_wqs_clear_state(idxd);
        spin_lock(&idxd->dev_lock);
        idxd_groups_clear_state(idxd);