public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH 00/10] drm/panthor: Add user submission
@ 2024-08-28 17:25 Mihail Atanassov
  2024-08-28 17:25 ` [PATCH 1/8] drm/panthor: Add uAPI to submit from user space Mihail Atanassov
                   ` (9 more replies)
  0 siblings, 10 replies; 28+ messages in thread
From: Mihail Atanassov @ 2024-08-28 17:25 UTC (permalink / raw)
  To: linux-kernel, Boris Brezillon, Liviu Dudau, Steven Price
  Cc: dri-devel, Daniel Vetter, David Airlie, Maarten Lankhorst,
	Maxime Ripard, Thomas Zimmermann, Alex Deucher,
	Christian König, Xinhui Pan, Shashank Sharma, Ketil Johnsen,
	Akash Goel, Mihail Atanassov

Hello all,

This series implements a mechanism to expose Mali CSF GPUs' queue
ringbuffers directly to userspace, along with paraphernalia to allow
userspace to control job synchronisation between the CPU and GPU.

The goal of these changes is to allow userspace to control work
submission to the FW/HW directly without kernel intervention in the
common case, thereby reducing context switching overhead. It also allows
for greater flexibility in the way work is enqueued in the ringbufs.
For example, the current kernel submit path only supports indirect
calls, which is inefficient for small command buffers. Userspace can
also skip unnecessary sync operations.

This is still a work-in-progress, there's an outstanding issue with
multiple processes using different submission flows triggering
scheduling bugs (e.g. the same group getting scheduled twice), but we'd
love to gather some feedback on the suitability of the approach in
general and see if there's a clear path to merging something like this
eventually.

I've also CCd AMD maintainers because they have in the past done
something similar[1], in case they want to chime in.

There are two uses of this new uAPI in Mesa, one in gallium/panfrost
(link TBD), and one in panvk [2].

The Gallium implementation is a naïve change just to switch the
submission model and exercise the new kernel code, and we don't plan
on pursuing this at this time.

The panvk driver changes are, however, a better representation of the
intent behind this new uAPI, so please consider that as the reference
userspace. It is still very much also a work in progress.

 * patch 1 adds all the uAPI changes;
 * patch 2 implements the GROUP_CREATE ioctl changes necessary to expose
   the required objects to userspace;
 * patch 3 maps the doorbell pages, similarly to how the user I/O page is
   mapped;
 * patch 4 implements GROUP_KICK, which lets userspace request an
   inactive group to be scheduled on the GPU;
 * patches 5 & 6 implement XGS queues, a way for userspace to
   synchronise GPU queue progress with DRM syncobjs;
 * patches 7 & 8 add notification mechanisms for user & kernel to signal
   changes to native GPU syncobjs.

[1] https://lore.kernel.org/amd-gfx/CADnq5_N61q_o+5WYUZsZ=qu7VmeXTFHQSxLwTco05gLzHaiswA@mail.gmail.com/t/#m116a36a598d8fad1329e053974ad37a4dc0f28ed
[2] https://gitlab.freedesktop.org/larsivsi/mesa/-/commits/panvk-v10-usersubmit?ref_type=heads

Ketil Johnsen (7):
  drm/panthor: Add uAPI to submit from user space
  drm/panthor: Extend GROUP_CREATE for user submission
  drm/panthor: Map doorbell pages
  drm/panthor: Add GROUP_KICK ioctl
  drm/panthor: Factor out syncobj handling
  drm/panthor: Implement XGS queues
  drm/panthor: Add SYNC_UPDATE ioctl

Mihail Atanassov (1):
  drm/panthor: Add sync_update eventfd handling

 drivers/gpu/drm/panthor/Makefile          |   4 +-
 drivers/gpu/drm/panthor/panthor_device.c  |  66 ++-
 drivers/gpu/drm/panthor/panthor_device.h  |  35 +-
 drivers/gpu/drm/panthor/panthor_drv.c     | 233 +++++++-
 drivers/gpu/drm/panthor/panthor_fw.c      |   2 +-
 drivers/gpu/drm/panthor/panthor_sched.c   | 408 +++++++++-----
 drivers/gpu/drm/panthor/panthor_sched.h   |   8 +-
 drivers/gpu/drm/panthor/panthor_syncobj.c | 167 ++++++
 drivers/gpu/drm/panthor/panthor_syncobj.h |  27 +
 drivers/gpu/drm/panthor/panthor_xgs.c     | 638 ++++++++++++++++++++++
 drivers/gpu/drm/panthor/panthor_xgs.h     |  42 ++
 include/uapi/drm/panthor_drm.h            | 243 +++++++-
 12 files changed, 1696 insertions(+), 177 deletions(-)
 create mode 100644 drivers/gpu/drm/panthor/panthor_syncobj.c
 create mode 100644 drivers/gpu/drm/panthor/panthor_syncobj.h
 create mode 100644 drivers/gpu/drm/panthor/panthor_xgs.c
 create mode 100644 drivers/gpu/drm/panthor/panthor_xgs.h

-- 
2.45.0


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

end of thread, other threads:[~2024-11-11 20:29 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-28 17:25 [RFC PATCH 00/10] drm/panthor: Add user submission Mihail Atanassov
2024-08-28 17:25 ` [PATCH 1/8] drm/panthor: Add uAPI to submit from user space Mihail Atanassov
2024-08-28 17:25 ` [PATCH 2/8] drm/panthor: Extend GROUP_CREATE for user submission Mihail Atanassov
2024-08-28 17:25 ` [PATCH 3/8] drm/panthor: Map doorbell pages Mihail Atanassov
2024-08-28 17:26 ` [PATCH 4/8] drm/panthor: Add GROUP_KICK ioctl Mihail Atanassov
2024-08-28 17:26 ` [PATCH 5/8] drm/panthor: Factor out syncobj handling Mihail Atanassov
2024-08-28 17:26 ` [PATCH 6/8] drm/panthor: Implement XGS queues Mihail Atanassov
2024-09-03 19:17   ` Simona Vetter
2024-08-28 17:26 ` [PATCH 7/8] drm/panthor: Add sync_update eventfd handling Mihail Atanassov
2024-08-28 17:26 ` [PATCH 8/8] drm/panthor: Add SYNC_UPDATE ioctl Mihail Atanassov
2024-08-29  9:40 ` [RFC PATCH 00/10] drm/panthor: Add user submission Christian König
2024-08-29 13:37   ` Steven Price
     [not found]     ` <96ef7ae3-4df1-4859-8672-453055bbfe96@amd.com>
2024-09-03 21:11       ` Simona Vetter
2024-09-04  7:49         ` Christian König
2024-09-04  9:31           ` Steven Price
2024-09-04 11:23             ` Boris Brezillon
     [not found]               ` <a5a53492-9651-403e-b613-91ef0b9e80b6@amd.com>
2024-09-04 12:46                 ` Steven Price
2024-09-04 13:20                   ` Boris Brezillon
2024-09-04 13:35                     ` Steven Price
2024-09-04 13:58                       ` Boris Brezillon
2024-09-04 13:36                   ` Christian König
2024-09-24  9:30                 ` Simona Vetter
2024-11-08 22:27                   ` Matthew Brost
2024-11-11 12:57                     ` Christian König
2024-11-11 20:29                       ` Matthew Brost
2024-09-04  9:43           ` Simona Vetter
2024-08-29 13:48   ` Ketil Johnsen
2024-09-03 12:27 ` Ketil Johnsen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox