From: Dave Jiang <dave.jiang@intel.com>
To: Vinicius Costa Gomes <vinicius.gomes@intel.com>,
Vinod Koul <vkoul@kernel.org>,
Dan Williams <dan.j.williams@intel.com>,
Fenghua Yu <fenghuay@nvidia.com>
Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/9] dmaengine: idxd: Flush kernel workqueues on Field Level Reset
Date: Wed, 6 Aug 2025 10:12:00 -0700 [thread overview]
Message-ID: <0814df45-15b2-4dc3-98fd-8f30befc800a@intel.com> (raw)
In-Reply-To: <20250804-idxd-fix-flr-on-kernel-queues-v3-v1-4-4e020fbf52c1@intel.com>
On 8/4/25 6:27 PM, Vinicius Costa Gomes wrote:
> When a Field Level Reset (FLR) happens terminate the pending
> descriptors that were issued by in-kernel users and disable the
> interrupts associated with those. They will be re-enabled after FLR
> finishes.
>
> Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
> ---
> drivers/dma/idxd/device.c | 24 ++++++++++++++++++++++++
> drivers/dma/idxd/idxd.h | 1 +
> drivers/dma/idxd/irq.c | 5 +++++
> 3 files changed, 30 insertions(+)
>
> diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c
> index c599a902767ee9904d75a0510a911596e35a259b..287cf3bf1f5a2efdc9037968e9a4eed506e489c3 100644
> --- a/drivers/dma/idxd/device.c
> +++ b/drivers/dma/idxd/device.c
> @@ -1315,6 +1315,11 @@ void idxd_wq_free_irq(struct idxd_wq *wq)
>
> free_irq(ie->vector, ie);
> idxd_flush_pending_descs(ie);
> +
> + /* The interrupt might have been already released by FLR */
> + if (ie->int_handle == INVALID_INT_HANDLE)
> + return;
> +
> if (idxd->request_int_handles)
> idxd_device_release_int_handle(idxd, ie->int_handle, IDXD_IRQ_MSIX);
> idxd_device_clear_perm_entry(idxd, ie);
> @@ -1323,6 +1328,25 @@ void idxd_wq_free_irq(struct idxd_wq *wq)
> ie->pasid = IOMMU_PASID_INVALID;
> }
>
> +void idxd_wqs_flush_descs(struct idxd_device *idxd)
> +{
> + struct idxd_wq *wq;
> + int i;
> +
> + for (i = 0; i < idxd->max_wqs; i++) {
> + wq = idxd->wqs[i];
> + if (wq->state == IDXD_WQ_ENABLED && wq->type == IDXD_WQT_KERNEL) {
> + struct idxd_irq_entry *ie = &wq->ie;
> +
> + idxd_flush_pending_descs(ie);
> + if (idxd->request_int_handles)
> + idxd_device_release_int_handle(idxd, ie->int_handle, IDXD_IRQ_MSIX);
> + idxd_device_clear_perm_entry(idxd, ie);
> + ie->int_handle = INVALID_INT_HANDLE;
> + }
> + }
> +}
> +
> int idxd_wq_request_irq(struct idxd_wq *wq)
> {
> struct idxd_device *idxd = wq->idxd;
> diff --git a/drivers/dma/idxd/idxd.h b/drivers/dma/idxd/idxd.h
> index 74e6695881e6f1684512601ca2c2ee241aaf0a78..6ccca3c56556dbffe0a7c983a2f11f6c73ff2bfd 100644
> --- a/drivers/dma/idxd/idxd.h
> +++ b/drivers/dma/idxd/idxd.h
> @@ -737,6 +737,7 @@ static inline void idxd_desc_complete(struct idxd_desc *desc,
> int idxd_register_devices(struct idxd_device *idxd);
> void idxd_unregister_devices(struct idxd_device *idxd);
> void idxd_wqs_quiesce(struct idxd_device *idxd);
> +void idxd_wqs_flush_descs(struct idxd_device *idxd);
> bool idxd_queue_int_handle_resubmit(struct idxd_desc *desc);
> void multi_u64_to_bmap(unsigned long *bmap, u64 *val, int count);
> int idxd_load_iaa_device_defaults(struct idxd_device *idxd);
> diff --git a/drivers/dma/idxd/irq.c b/drivers/dma/idxd/irq.c
> index 74059fe43fafeb930f58db21d3824f62b095b968..26547586fcfaa1b9d244b678bf8e209b7b14d35a 100644
> --- a/drivers/dma/idxd/irq.c
> +++ b/drivers/dma/idxd/irq.c
> @@ -417,6 +417,11 @@ static irqreturn_t idxd_halt(struct idxd_device *idxd)
> } else if (gensts.reset_type == IDXD_DEVICE_RESET_FLR) {
> idxd->state = IDXD_DEV_HALTED;
> idxd_mask_error_interrupts(idxd);
> + /* Flush all pending descriptors, and disable
> + * interrupts, they will be re-enabled when FLR
> + * concludes.
> + */
> + idxd_wqs_flush_descs(idxd);
> dev_dbg(&idxd->pdev->dev,
> "idxd halted, doing FLR. After FLR, configs are restored\n");
> INIT_WORK(&idxd->work, idxd_device_flr);
>
next prev parent reply other threads:[~2025-08-06 17:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-05 1:27 [PATCH 0/9] dmaengine: idxd: Memory leak and FLR fixes Vinicius Costa Gomes
2025-08-05 1:27 ` [PATCH 1/9] dmaengine: idxd: Fix lockdep warnings when calling idxd_device_config() Vinicius Costa Gomes
2025-08-06 17:02 ` Dave Jiang
2025-08-06 20:25 ` Vinicius Costa Gomes
2025-08-05 1:27 ` [PATCH 2/9] dmaengine: idxd: Fix crash when the event log is disabled Vinicius Costa Gomes
2025-08-06 17:07 ` Dave Jiang
2025-08-05 1:27 ` [PATCH 3/9] dmaengine: idxd: Fix possible invalid memory access after FLR Vinicius Costa Gomes
2025-08-06 17:09 ` Dave Jiang
2025-08-15 19:26 ` Nathan Lynch
2025-08-15 22:45 ` Vinicius Costa Gomes
2025-08-05 1:27 ` [PATCH 4/9] dmaengine: idxd: Flush kernel workqueues on Field Level Reset Vinicius Costa Gomes
2025-08-06 17:12 ` Dave Jiang [this message]
2025-08-05 1:27 ` [PATCH 5/9] dmaengine: idxd: Allow DMA clients to empty the pending queue Vinicius Costa Gomes
2025-08-06 17:17 ` Dave Jiang
2025-08-06 20:30 ` Vinicius Costa Gomes
2025-08-05 1:27 ` [PATCH 6/9] dmaengine: idxd: Fix not releasing workqueue on .release() Vinicius Costa Gomes
2025-08-06 17:24 ` Dave Jiang
2025-08-05 1:27 ` [PATCH 7/9] dmaengine: idxd: Fix memory leak when a wq is reset Vinicius Costa Gomes
2025-08-06 17:25 ` Dave Jiang
2025-08-05 1:27 ` [PATCH 8/9] dmaengine: idxd: Fix freeing the allocated ida too late Vinicius Costa Gomes
2025-08-06 17:27 ` Dave Jiang
2025-08-05 1:28 ` [PATCH 9/9] dmaengine: idxd: Fix leaking event log memory Vinicius Costa Gomes
2025-08-06 17:29 ` Dave Jiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0814df45-15b2-4dc3-98fd-8f30befc800a@intel.com \
--to=dave.jiang@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dmaengine@vger.kernel.org \
--cc=fenghuay@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=vinicius.gomes@intel.com \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.