static void idxd_device_evl_free(struct idxd_device *idxd)
 {
+       void *evl_log;
+       unsigned int evl_log_size;
+       dma_addr_t evl_dma;
        union gencfg_reg gencfg;
        union genctrl_reg genctrl;
        struct device *dev = &idxd->pdev->dev;
        iowrite64(0, idxd->reg_base + IDXD_EVLCFG_OFFSET);
        iowrite64(0, idxd->reg_base + IDXD_EVLCFG_OFFSET + 8);
 
-       dma_free_coherent(dev, evl->log_size, evl->log, evl->dma);
        bitmap_free(evl->bmap);
+       evl_log = evl->log;
+       evl_log_size = evl->log_size;
+       evl_dma = evl->dma;
        evl->log = NULL;
        evl->size = IDXD_EVL_SIZE_MIN;
        spin_unlock(&evl->lock);
+
+       dma_free_coherent(dev, evl_log_size, evl_log, evl_dma);
 }
 
 static void idxd_group_config_write(struct idxd_group *group)