All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/5] accel/amdxdna: honour the SYNC_BO range
@ 2026-08-11 23:13 Taimuraz Kaitmazov
  2026-08-11 23:13 ` [PATCH v2 1/5] accel/amdxdna: refuse an I/O memory mapping of an imported BO Taimuraz Kaitmazov
                   ` (5 more replies)
  0 siblings, 6 replies; 17+ messages in thread
From: Taimuraz Kaitmazov @ 2026-08-11 23:13 UTC (permalink / raw)
  To: mamin506, lizhi.hou, ogabbay
  Cc: dri-devel, linux-kernel, sumit.semwal, christian.koenig,
	linux-media, linaro-mm-sig, Taimuraz Kaitmazov

SYNC_BO carries an offset and a size, but amdxdna_flush_bo() honours them
only on the vmap path. An imported BO is tested for first and flushes its
whole scatterlist, so a sync costs what the BO is worth rather than what
the caller asked to maintain: on npu4 an imported 64 MiB BO cost 1056 us
to sync at every size from 4 KiB up. Patch 5 reorders the arms so the
vmap path is tried first, and indexes the page-array fallback from the
requested offset.

The four before it are the ground that has to be solid first. Patch 1
refuses an I/O memory mapping, which the driver currently stores as if it
were an ordinary kernel address. Patch 2 adds a probe that does not log,
so patch 5 does not make an exporter without a vmap op print on every
ioctl. Patches 3 and 4 fix two ways the ioctl mishandles its own range: a
zero length reaching drm_clflush_virt_range(), and an offset and size
added to the BO address without an overflow check, one level above a
function that checks the same arithmetic. All four stand on their own and
can be taken separately; only patch 5 depends on them.

v1 did not reach dri-devel, so this is the first version visible there.
It is on lore via the other lists it was copied to:
https://lore.kernel.org/lkml/20260811204556.875037-1-taimuraz@kaitmazov.com/

Changes in v2:
 - patch 2: take the device from the GEM object rather than abo->client.
   amdxdna_gem_obj_close() clears that pointer under abo->lock, which the
   pre-split code held across the log and the split did not.
 - new patch 3: return early from a zero-length flush.
 - new patch 4: check the sync range for overflow on a device BO.
 - patch 5: say why the persistent mapping adds no pin.

The measurements in patch 5 were taken with the equivalent change in
AMD's out-of-tree xdna-driver, where this merged as #1541. That version
and this one differ only in a page-array fallback mainline has no field
for, reached when the mapping fails and the BO is neither imported nor
shmem backed, and in the name of the mapping helper. The flush and the
helper are otherwise identical. This version is compile-tested; it has
not been booted.

Patch 1 is from inspection rather than a reproducer. The exporter I can
test against is amdgpu, and amdgpu is the case that cannot reach it: it
implements .pin, so a non peer to peer attachment like this driver's
forces the buffer to GTT before anything maps it. Reproducing it needs a
GPU whose exporter has no .pin, which I do not have paired with an NPU
here.

Taimuraz Kaitmazov (5):
  accel/amdxdna: refuse an I/O memory mapping of an imported BO
  accel/amdxdna: add a quiet variant of amdxdna_gem_vmap()
  accel/amdxdna: return early from a zero-length flush
  accel/amdxdna: check the sync range for overflow on a device BO
  accel/amdxdna: flush only the requested range in amdxdna_flush_bo

 drivers/accel/amdxdna/amdxdna_gem.c | 66 +++++++++++++++++++++--------
 1 file changed, 49 insertions(+), 17 deletions(-)

-- 
2.55.0


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2026-08-13 21:02 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-11 23:13 [PATCH v2 0/5] accel/amdxdna: honour the SYNC_BO range Taimuraz Kaitmazov
2026-08-11 23:13 ` [PATCH v2 1/5] accel/amdxdna: refuse an I/O memory mapping of an imported BO Taimuraz Kaitmazov
2026-08-11 23:13 ` [PATCH v2 2/5] accel/amdxdna: add a quiet variant of amdxdna_gem_vmap() Taimuraz Kaitmazov
2026-08-11 23:13 ` [PATCH v2 3/5] accel/amdxdna: return early from a zero-length flush Taimuraz Kaitmazov
2026-08-11 23:13 ` [PATCH v2 4/5] accel/amdxdna: check the sync range for overflow on a device BO Taimuraz Kaitmazov
2026-08-11 23:13 ` [PATCH v2 5/5] accel/amdxdna: flush only the requested range in amdxdna_flush_bo Taimuraz Kaitmazov
2026-08-12  8:57 ` [PATCH v2 0/5] accel/amdxdna: honour the SYNC_BO range Christian König
2026-08-12 15:45   ` Lizhi Hou
2026-08-13  7:44     ` Christian König
2026-08-13 18:08       ` Lizhi Hou
2026-08-13 18:29         ` Taimuraz Kaitmazov
2026-08-13 19:01           ` Lizhi Hou
2026-08-13 18:54         ` Alex Deucher
2026-08-13 19:50           ` Taimuraz Kaitmazov
2026-08-13 20:06             ` Alex Deucher
2026-08-13 20:14               ` Taimuraz Kaitmazov
2026-08-13 21:02                 ` Lizhi Hou

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.