Files
linux/include/linux
Thomas Hellström 7aba71dbc4 mm/mmu_notifier: Allow two-pass struct mmu_interval_notifiers
GPU use-cases for mmu_interval_notifiers with hmm often involve
starting a gpu operation and then waiting for it to complete.
These operations are typically context preemption or TLB flushing.

With single-pass notifiers per GPU this doesn't scale in
multi-gpu scenarios. In those scenarios we'd want to first start
preemption- or TLB flushing on all GPUs and as a second pass wait
for them to complete.

One can do this on per-driver basis multiplexing per-driver
notifiers but that would mean sharing the notifier "user" lock
across all GPUs and that doesn't scale well either, so adding support
for multi-pass in the core appears to be the right choice.

Implement two-pass capability in the mmu_interval_notifier. Use a
linked list for the final passes to minimize the impact for
use-cases that don't need the multi-pass functionality by avoiding
a second interval tree walk, and to be able to easily pass data
between the two passes.

v1:
- Restrict to two passes (Jason Gunthorpe)
- Improve on documentation (Jason Gunthorpe)
- Improve on function naming (Alistair Popple)
v2:
- Include the invalidate_finish() callback in the
  struct mmu_interval_notifier_ops.
- Update documentation (GitHub Copilot:claude-sonnet-4.6)
- Use lockless list for list management.
v3:
- Update kerneldoc for the struct mmu_interval_notifier_finish::list member
  (Matthew Brost)
- Add a WARN_ON_ONCE() checking for NULL invalidate_finish() op if
  if invalidate_start() is non-NULL. (Matthew Brost)
v4:
- Addressed documentation review comments by David Hildenbrand.

Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: David Hildenbrand <david@kernel.org>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Simona Vetter <simona.vetter@ffwll.ch>
Cc: Dave Airlie <airlied@gmail.com>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: <dri-devel@lists.freedesktop.org>
Cc: <linux-mm@kvack.org>
Cc: <linux-kernel@vger.kernel.org>

Assisted-by: GitHub Copilot:claude-sonnet-4.6 # Documentation only.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patch.msgid.link/20260305093909.43623-2-thomas.hellstrom@linux.intel.com
2026-03-11 09:32:58 +01:00
..
2025-10-22 07:54:33 +02:00
2025-11-11 10:01:30 +01:00
2025-11-18 22:26:02 +05:30
2025-10-13 11:27:52 +01:00
2025-09-05 15:06:03 +02:00
2025-07-21 18:18:51 +01:00
2025-12-12 12:36:44 -07:00
2025-04-29 15:58:38 -04:00
2025-07-31 11:28:03 -04:00
2025-12-04 07:19:26 -07:00
2025-12-09 23:29:42 -08:00
2025-09-24 02:48:05 -07:00
2025-11-21 11:21:31 +01:00
2025-10-27 09:56:27 -07:00
2025-05-21 13:39:45 +02:00
2025-08-14 10:37:33 -07:00
2025-11-04 12:36:57 +01:00
2025-09-23 11:13:22 +02:00
2025-10-22 07:55:00 +02:00
2025-11-01 12:44:49 -05:00
2025-12-13 20:04:32 +12:00
2025-12-16 00:57:29 -05:00
2025-08-21 13:58:07 +02:00
2025-07-16 14:28:21 +02:00
2025-05-22 11:07:05 +02:00
2025-10-29 18:28:29 -07:00
2025-09-13 17:32:44 -07:00
2025-08-29 13:39:53 -07:00
2025-11-04 12:36:02 +01:00
2025-08-02 12:06:10 -07:00
2025-10-22 07:53:15 +02:00
2025-09-23 11:13:22 +02:00
2025-06-11 11:57:14 -07:00
2025-07-02 17:18:01 +01:00
2025-10-24 21:39:27 +02:00
2025-07-17 06:01:16 -06:00
2025-11-23 12:30:40 +01:00
2025-11-20 13:43:59 -08:00
2025-07-09 22:41:56 -07:00
2025-09-17 15:58:29 -04:00
2025-06-17 18:18:46 -07:00
2025-11-04 19:10:33 -08:00
2025-09-23 13:28:20 -04:00
2025-11-05 23:58:20 +01:00
2025-11-03 17:41:17 +01:00
2025-11-11 10:01:30 +01:00
2025-05-21 16:46:37 +02:00
2025-09-13 16:55:07 -07:00
2025-06-19 14:28:24 +02:00
2025-06-19 14:28:24 +02:00
2025-08-24 11:41:11 -06:00
2025-07-01 12:29:29 +02:00
2025-10-30 18:35:26 +01:00
2025-10-24 21:39:27 +02:00
2025-10-31 10:16:23 +01:00
2025-11-27 14:24:30 -08:00
2025-05-03 12:02:04 +02:00
2025-11-18 17:52:54 +01:00
2025-05-11 17:54:09 -07:00
2025-05-06 11:11:45 -06:00
2025-11-11 13:18:56 +01:00
2025-11-28 09:21:18 -07:00
2025-08-28 13:14:50 +02:00
2025-11-27 14:22:31 +01:00
2025-11-20 17:57:40 -08:00
2025-11-03 17:41:18 +01:00
2025-11-03 19:27:41 -08:00
2025-08-17 12:46:25 +02:00
2025-11-25 10:07:42 +01:00
2025-09-09 10:27:01 -06:00
2025-11-03 17:41:18 +01:00
2025-10-01 07:24:55 -04:00
2025-11-24 15:08:54 -08:00
2025-07-17 11:26:56 +02:00
2025-11-12 09:38:34 +01:00