From: Lizhi Hou <lizhi.hou@amd.com>
To: David Zhang <yidong.zhang@amd.com>, <quic_jhugo@quicinc.com>,
<karol.wachowski@linux.intel.com>, <max.zhen@amd.com>,
<ogabbay@kernel.org>, <dri-devel@lists.freedesktop.org>,
<linux-kernel@vger.kernel.org>
Cc: <sonal.santan@amd.com>, <mario.limonciello@amd.com>
Subject: Re: [PATCH V4 15/19] accel/amdxdna: Make populate_range common for AIE2 and AIE4
Date: Wed, 14 Oct 2026 11:10:35 -0700 [thread overview]
Message-ID: <cbd18119-66e8-8183-d951-eccb1c8b3380@amd.com> (raw)
In-Reply-To: <20261009225343.3079074-16-yidong.zhang@amd.com>
On 10/9/26 15:53, David Zhang wrote:
> When a user mapping of a BO is invalidated, the MMU notifier sets
> map_invalid and command submission must fault the range back in
> before attaching the job fence. AIE2 does this in
> aie2_populate_range(), which AIE4 command submission also needs.
>
> Move aie2_populate_range() from aie2_ctx.c into amdxdna_gem.c as
> amdxdna_populate_range(), next to the MMU notifier code, and declare
> it in amdxdna_gem.h. No functional change for AIE2.
>
> Signed-off-by: David Zhang <yidong.zhang@amd.com>
> ---
> drivers/accel/amdxdna/aie2_ctx.c | 75 +----------------------------
> drivers/accel/amdxdna/amdxdna_gem.c | 73 ++++++++++++++++++++++++++++
> drivers/accel/amdxdna/amdxdna_gem.h | 1 +
> 3 files changed, 75 insertions(+), 74 deletions(-)
>
> diff --git a/drivers/accel/amdxdna/aie2_ctx.c b/drivers/accel/amdxdna/aie2_ctx.c
> index 8c1b29964f8f..05ed71e641c3 100644
> --- a/drivers/accel/amdxdna/aie2_ctx.c
> +++ b/drivers/accel/amdxdna/aie2_ctx.c
> @@ -1105,79 +1105,6 @@ int aie2_hwctx_sync_debug_bo(struct amdxdna_hwctx *hwctx, u32 debug_bo_hdl)
> return ret;
> }
>
> -static int aie2_populate_range(struct amdxdna_gem_obj *abo)
> -{
> - struct amdxdna_dev *xdna = to_xdna_dev(to_gobj(abo)->dev);
> - struct amdxdna_umap *mapp;
> - unsigned long timeout;
> - struct mm_struct *mm;
> - bool found;
> - int ret;
> -
> - timeout = msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT);
> -again:
> - found = false;
> - down_write(&xdna->notifier_lock);
> - list_for_each_entry(mapp, &abo->mem.umap_list, node) {
> - /*
> - * Skip entries that have already been unmapped.
> - *
> - * If userspace unmaps the address and later submits I/O using
> - * it, the IOMMU will reject the access and report a fault.
> - * Ignore such entries here.
> - */
> - if (mapp->unmapped)
> - continue;
> -
> - if (mapp->invalid && kref_get_unless_zero(&mapp->refcnt)) {
> - found = true;
> - break;
> - }
> - }
> -
> - if (!found) {
> - /*
> - * This also covers the case where all mappings have been
> - * removed. There are no invalid mappings left to process.
> - * Any subsequent I/O using the unmapped address will be
> - * rejected by the IOMMU.
> - */
> - abo->mem.map_invalid = false;
> - up_write(&xdna->notifier_lock);
> - return 0;
> - }
> -
> - up_write(&xdna->notifier_lock);
> -
> - mm = mapp->notifier.mm;
> - if (!mmget_not_zero(mm)) {
> - amdxdna_umap_put(mapp);
> - return -EFAULT;
> - }
> -
> - ret = hmm_range_fault_unlocked_timeout(&mapp->range, timeout);
> - if (ret)
> - goto put_mm;
> -
> - down_write(&xdna->notifier_lock);
> - if (mmu_interval_read_retry(&mapp->notifier, mapp->range.notifier_seq)) {
> - up_write(&xdna->notifier_lock);
> - amdxdna_umap_put(mapp);
> - mmput(mm);
> - goto again;
> - }
> - mapp->invalid = false;
> - up_write(&xdna->notifier_lock);
> - amdxdna_umap_put(mapp);
> - mmput(mm);
> - goto again;
> -
> -put_mm:
> - amdxdna_umap_put(mapp);
> - mmput(mm);
> - return ret == -EBUSY ? -ETIME : ret;
> -}
> -
> int aie2_cmd_submit(struct amdxdna_hwctx *hwctx, struct amdxdna_sched_job *job, u64 *seq)
> {
> struct amdxdna_dev *xdna = hwctx->client->xdna;
> @@ -1237,7 +1164,7 @@ int aie2_cmd_submit(struct amdxdna_hwctx *hwctx, struct amdxdna_sched_job *job,
> goto cleanup_job;
> }
>
> - ret = aie2_populate_range(abo);
> + ret = amdxdna_populate_range(abo);
> if (ret)
> goto cleanup_job;
> goto retry;
> diff --git a/drivers/accel/amdxdna/amdxdna_gem.c b/drivers/accel/amdxdna/amdxdna_gem.c
> index e1b72cef51bd..320604ec157f 100644
> --- a/drivers/accel/amdxdna/amdxdna_gem.c
> +++ b/drivers/accel/amdxdna/amdxdna_gem.c
> @@ -337,6 +337,79 @@ void amdxdna_umap_put(struct amdxdna_umap *mapp)
> kref_put(&mapp->refcnt, amdxdna_umap_release);
> }
>
> +int amdxdna_populate_range(struct amdxdna_gem_obj *abo)
> +{
> + struct amdxdna_dev *xdna = to_xdna_dev(to_gobj(abo)->dev);
> + struct amdxdna_umap *mapp;
> + unsigned long timeout;
> + struct mm_struct *mm;
> + bool found;
> + int ret;
> +
> + timeout = msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT);
> +again:
> + found = false;
> + down_write(&xdna->notifier_lock);
> + list_for_each_entry(mapp, &abo->mem.umap_list, node) {
> + /*
> + * Skip entries that have already been unmapped.
> + *
> + * If userspace unmaps the address and later submits I/O using
> + * it, the IOMMU will reject the access and report a fault.
> + * Ignore such entries here.
> + */
> + if (mapp->unmapped)
> + continue;
> +
> + if (mapp->invalid && kref_get_unless_zero(&mapp->refcnt)) {
> + found = true;
> + break;
> + }
> + }
> +
> + if (!found) {
> + /*
> + * This also covers the case where all mappings have been
> + * removed. There are no invalid mappings left to process.
> + * Any subsequent I/O using the unmapped address will be
> + * rejected by the IOMMU.
> + */
> + abo->mem.map_invalid = false;
> + up_write(&xdna->notifier_lock);
> + return 0;
> + }
> +
> + up_write(&xdna->notifier_lock);
> +
> + mm = mapp->notifier.mm;
> + if (!mmget_not_zero(mm)) {
> + amdxdna_umap_put(mapp);
> + return -EFAULT;
> + }
> +
> + ret = hmm_range_fault_unlocked_timeout(&mapp->range, timeout);
> + if (ret)
> + goto put_mm;
> +
> + down_write(&xdna->notifier_lock);
> + if (mmu_interval_read_retry(&mapp->notifier, mapp->range.notifier_seq)) {
> + up_write(&xdna->notifier_lock);
> + amdxdna_umap_put(mapp);
> + mmput(mm);
> + goto again;
> + }
> + mapp->invalid = false;
> + up_write(&xdna->notifier_lock);
> + amdxdna_umap_put(mapp);
> + mmput(mm);
> + goto again;
> +
> +put_mm:
> + amdxdna_umap_put(mapp);
> + mmput(mm);
> + return ret == -EBUSY ? -ETIME : ret;
> +}
> +
> static void amdxdna_hmm_unreg_work(struct work_struct *work)
> {
> struct amdxdna_gem_obj *abo = container_of(work, struct amdxdna_gem_obj,
> diff --git a/drivers/accel/amdxdna/amdxdna_gem.h b/drivers/accel/amdxdna/amdxdna_gem.h
> index 9b4aa21a37c9..977548e19ae4 100644
> --- a/drivers/accel/amdxdna/amdxdna_gem.h
> +++ b/drivers/accel/amdxdna/amdxdna_gem.h
> @@ -103,6 +103,7 @@ static inline u64 amdxdna_obj_dma_addr(struct amdxdna_gem_obj *abo)
> }
>
> void amdxdna_umap_put(struct amdxdna_umap *mapp);
> +int amdxdna_populate_range(struct amdxdna_gem_obj *abo);
Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
> void amdxdna_gem_heap_free(struct amdxdna_client *client, struct amdxdna_gem_obj *abo);
>
> struct drm_gem_object *
next prev parent reply other threads:[~2026-10-14 18:10 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-09 22:53 [PATCH V4 00/19] accel/amdxdna: Kernel submission and PM for AIE4 David Zhang
2026-10-09 22:53 ` [PATCH V4 01/19] accel/amdxdna: Rename NPU3 firmware files David Zhang
2026-10-09 22:53 ` [PATCH V4 02/19] accel/amdxdna: Remove mmap for doorbell David Zhang
2026-10-12 20:37 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 03/19] accel/amdxdna: Add CERT firmware version support David Zhang
2026-10-12 20:39 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 04/19] accel/amdxdna: Support firmware 6.0 David Zhang
2026-10-09 23:08 ` sashiko-bot
2026-10-12 20:41 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 05/19] accel/amdxdna: Add NPU3 classic device support David Zhang
2026-10-09 23:08 ` sashiko-bot
2026-10-12 20:41 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 06/19] accel/amdxdna: Add AIE version query to aie4_get_info David Zhang
2026-10-12 20:55 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 07/19] accel/amdxdna: Add get and set power_mode for AIE4 David Zhang
2026-10-12 21:29 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 08/19] accel/amdxdna: Add clock, DPM frequency, and resource info queries " David Zhang
2026-10-09 23:12 ` sashiko-bot
2026-10-12 22:58 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 09/19] accel/amdxdna: Add context switch hysteresis with debugfs control David Zhang
2026-10-13 18:29 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 10/19] accel/amdxdna: Refactor AIE4 hardware initialization sequence David Zhang
2026-10-13 18:33 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 11/19] accel/amdxdna: Decouple AIE4 doorbell and MSI-X notify transport hooks David Zhang
2026-10-13 18:38 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 12/19] accel/amdxdna: Implement AIE4 kernel queue lifecycle and memory layout David Zhang
2026-10-13 18:41 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 13/19] accel/amdxdna: Prepare for AIE4 command submission David Zhang
2026-10-13 18:42 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 14/19] accel/amdxdna: Move HMM invalidate wait into common GEM code David Zhang
2026-10-13 18:45 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 15/19] accel/amdxdna: Make populate_range common for AIE2 and AIE4 David Zhang
2026-10-09 23:06 ` sashiko-bot
2026-10-14 18:10 ` Lizhi Hou [this message]
2026-10-09 22:53 ` [PATCH V4 16/19] accel/amdxdna: Implement AIE4 command packet building and submission David Zhang
2026-10-14 18:15 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 17/19] accel/amdxdna: Enable AIE4 firmware logging to DRAM David Zhang
2026-10-09 23:14 ` sashiko-bot
2026-10-14 18:24 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 18/19] accel/amdxdna: Implement AIE4 suspend and resume David Zhang
2026-10-14 18:28 ` Lizhi Hou
2026-10-09 22:53 ` [PATCH V4 19/19] accel/amdxdna: Implement runtime suspend and resume support David Zhang
2026-10-09 23:17 ` sashiko-bot
2026-10-14 18:36 ` Lizhi Hou
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=cbd18119-66e8-8183-d951-eccb1c8b3380@amd.com \
--to=lizhi.hou@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=karol.wachowski@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=max.zhen@amd.com \
--cc=ogabbay@kernel.org \
--cc=quic_jhugo@quicinc.com \
--cc=sonal.santan@amd.com \
--cc=yidong.zhang@amd.com \
/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.