From af6d28024743b8b72ebb5b59affe5a1c248f3cea Mon Sep 17 00:00:00 2001 From: paul luse Date: Wed, 5 Jan 2022 14:38:52 -0700 Subject: [PATCH] idxd: disable the idxd device on shutdown Required by spec. Signed-off-by: paul luse Change-Id: Ib13ca2d7ab7045a87ddc483dc1f70e649b3b9294 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/10982 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: John Kariuki Reviewed-by: Monica Kenguva --- lib/idxd/idxd_user.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/idxd/idxd_user.c b/lib/idxd/idxd_user.c index 9e4e406db..27ff4e1a1 100644 --- a/lib/idxd/idxd_user.c +++ b/lib/idxd/idxd_user.c @@ -180,6 +180,18 @@ idxd_map_pci_bars(struct spdk_idxd_device *idxd) return 0; } +static void +idxd_disable_dev(struct spdk_idxd_device *idxd) +{ + int rc; + + _idxd_write_4(idxd, IDXD_CMD_OFFSET, IDXD_DISABLE_DEV << IDXD_CMD_SHIFT); + rc = idxd_wait_cmd(idxd, IDXD_REGISTER_TIMEOUT_US); + if (rc < 0) { + SPDK_ERRLOG("Error disabling device %u\n", rc); + } +} + static int idxd_reset_dev(struct spdk_idxd_device *idxd) { @@ -427,6 +439,8 @@ user_idxd_device_destruct(struct spdk_idxd_device *idxd) { struct spdk_user_idxd_device *user_idxd = __user_idxd(idxd); + idxd_disable_dev(idxd); + idxd_unmap_pci_bar(idxd, IDXD_MMIO_BAR); idxd_unmap_pci_bar(idxd, IDXD_WQ_BAR); free(idxd->groups);