From: Daniel Vetter <daniel@ffwll.ch>
To: "Christian König" <ckoenig.leichtzumerken@gmail.com>
Cc: daniel.vetter@ffwll.ch,
"Christian König" <christian.koenig@amd.com>,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 20/23] dma-buf: add DMA_RESV_USAGE_BOOKKEEP v2
Date: Tue, 29 Mar 2022 18:06:47 +0200 [thread overview]
Message-ID: <YkMul8nO5CoxOSS3@phenom.ffwll.local> (raw)
In-Reply-To: <20220321135856.1331-20-christian.koenig@amd.com>
On Mon, Mar 21, 2022 at 02:58:53PM +0100, Christian König wrote:
> Add an usage for submissions independent of implicit sync but still
> interesting for memory management.
This fails to mention that you're hding the amdgpu vm optimization in
here. I'd split that out, but it really needs to be in the commit message.
> v2: cleanup the kerneldoc a bit
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/dma-buf/dma-resv.c | 2 +-
> drivers/dma-buf/st-dma-resv.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 4 ++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 +++---
> drivers/gpu/drm/i915/gem/i915_gem_lmem.c | 2 +-
> drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 2 +-
> drivers/gpu/drm/qxl/qxl_debugfs.c | 2 +-
> drivers/gpu/drm/radeon/radeon_gem.c | 2 +-
> drivers/gpu/drm/radeon/radeon_mn.c | 2 +-
> drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
> include/linux/dma-resv.h | 13 ++++++++++++-
> 15 files changed, 35 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
> index 10d70812373c..e05be4b52221 100644
> --- a/drivers/dma-buf/dma-resv.c
> +++ b/drivers/dma-buf/dma-resv.c
> @@ -544,7 +544,7 @@ int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src)
>
> list = NULL;
>
> - dma_resv_iter_begin(&cursor, src, DMA_RESV_USAGE_READ);
> + dma_resv_iter_begin(&cursor, src, DMA_RESV_USAGE_BOOKKEEP);
> dma_resv_for_each_fence_unlocked(&cursor, f) {
>
> if (dma_resv_iter_is_restarted(&cursor)) {
> diff --git a/drivers/dma-buf/st-dma-resv.c b/drivers/dma-buf/st-dma-resv.c
> index 062b57d63fa6..8ace9e84c845 100644
> --- a/drivers/dma-buf/st-dma-resv.c
> +++ b/drivers/dma-buf/st-dma-resv.c
> @@ -296,7 +296,7 @@ int dma_resv(void)
> int r;
>
> spin_lock_init(&fence_lock);
> - for (usage = DMA_RESV_USAGE_KERNEL; usage <= DMA_RESV_USAGE_READ;
> + for (usage = DMA_RESV_USAGE_KERNEL; usage <= DMA_RESV_USAGE_BOOKKEEP;
> ++usage) {
> r = subtests(tests, (void *)(unsigned long)usage);
> if (r)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> index ab5d6b630a49..b461c3aab877 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
> @@ -263,7 +263,7 @@ static int amdgpu_amdkfd_remove_eviction_fence(struct amdgpu_bo *bo,
> */
> replacement = dma_fence_get_stub();
> dma_resv_replace_fences(bo->tbo.base.resv, ef->base.context,
> - replacement, DMA_RESV_USAGE_READ);
> + replacement, DMA_RESV_USAGE_BOOKKEEP);
> dma_fence_put(replacement);
> return 0;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
> index 490d2a7a3e2b..ddf46802b1ff 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
> @@ -111,7 +111,7 @@ void amdgpu_pasid_free_delayed(struct dma_resv *resv,
> struct dma_fence *fence;
> int r;
>
> - r = dma_resv_get_singleton(resv, DMA_RESV_USAGE_READ, &fence);
> + r = dma_resv_get_singleton(resv, DMA_RESV_USAGE_BOOKKEEP, &fence);
> if (r)
> goto fallback;
>
> @@ -139,7 +139,7 @@ void amdgpu_pasid_free_delayed(struct dma_resv *resv,
> /* Not enough memory for the delayed delete, as last resort
> * block for all the fences to complete.
> */
> - dma_resv_wait_timeout(resv, DMA_RESV_USAGE_READ,
> + dma_resv_wait_timeout(resv, DMA_RESV_USAGE_BOOKKEEP,
> false, MAX_SCHEDULE_TIMEOUT);
> amdgpu_pasid_free(pasid);
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
> index 86f5248676b0..b86c0b8252a5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c
> @@ -75,7 +75,7 @@ static bool amdgpu_mn_invalidate_gfx(struct mmu_interval_notifier *mni,
>
> mmu_interval_set_seq(mni, cur_seq);
>
> - r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_READ,
> + r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_BOOKKEEP,
> false, MAX_SCHEDULE_TIMEOUT);
> mutex_unlock(&adev->notifier_lock);
> if (r <= 0)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> index 744e144e5fc2..11c46b3e4c60 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
> @@ -260,7 +260,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, struct amdgpu_sync *sync,
> return -EINVAL;
>
> /* TODO: Use DMA_RESV_USAGE_READ here */
> - dma_resv_for_each_fence(&cursor, resv, DMA_RESV_USAGE_READ, f) {
> + dma_resv_for_each_fence(&cursor, resv, DMA_RESV_USAGE_BOOKKEEP, f) {
> dma_fence_chain_for_each(f, f) {
> struct dma_fence *tmp = dma_fence_chain_contained(f);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 9ffd8c4c34a0..63d8569ebef3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1357,7 +1357,7 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
> * be resident to run successfully
> */
> dma_resv_for_each_fence(&resv_cursor, bo->base.resv,
> - DMA_RESV_USAGE_READ, f) {
> + DMA_RESV_USAGE_BOOKKEEP, f) {
> if (amdkfd_fence_check_mm(f, current->mm))
> return false;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index f3235aad7282..b4f0679f8797 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -2105,7 +2105,7 @@ static void amdgpu_vm_prt_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
> struct dma_resv_iter cursor;
> struct dma_fence *fence;
>
> - dma_resv_for_each_fence(&cursor, resv, DMA_RESV_USAGE_READ, fence) {
> + dma_resv_for_each_fence(&cursor, resv, DMA_RESV_USAGE_BOOKKEEP, fence) {
> /* Add a callback for each fence in the reservation object */
> amdgpu_vm_prt_get(adev);
> amdgpu_vm_add_prt_cb(adev, fence);
> @@ -2707,7 +2707,7 @@ bool amdgpu_vm_evictable(struct amdgpu_bo *bo)
> return true;
>
> /* Don't evict VM page tables while they are busy */
> - if (!dma_resv_test_signaled(bo->tbo.base.resv, DMA_RESV_USAGE_READ))
> + if (!dma_resv_test_signaled(bo->tbo.base.resv, DMA_RESV_USAGE_BOOKKEEP))
> return false;
>
> /* Try to block ongoing updates */
> @@ -2888,7 +2888,7 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t min_vm_size,
> long amdgpu_vm_wait_idle(struct amdgpu_vm *vm, long timeout)
> {
> timeout = dma_resv_wait_timeout(vm->root.bo->tbo.base.resv,
> - DMA_RESV_USAGE_READ,
> + DMA_RESV_USAGE_BOOKKEEP,
> true, timeout);
> if (timeout <= 0)
> return timeout;
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
> index a200d3e66573..4115a222a853 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
> @@ -66,7 +66,7 @@ bool __i915_gem_object_is_lmem(struct drm_i915_gem_object *obj)
> struct intel_memory_region *mr = READ_ONCE(obj->mm.region);
>
> #ifdef CONFIG_LOCKDEP
> - GEM_WARN_ON(dma_resv_test_signaled(obj->base.resv, DMA_RESV_USAGE_READ) &&
> + GEM_WARN_ON(dma_resv_test_signaled(obj->base.resv, DMA_RESV_USAGE_BOOKKEEP) &&
> i915_gem_object_evictable(obj));
> #endif
> return mr && (mr->type == INTEL_MEMORY_LOCAL ||
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> index 60feff9160de..1ddd81623691 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
> @@ -85,7 +85,7 @@ static bool i915_gem_userptr_invalidate(struct mmu_interval_notifier *mni,
> return true;
>
> /* we will unbind on next submission, still have userptr pins */
> - r = dma_resv_wait_timeout(obj->base.resv, DMA_RESV_USAGE_READ, false,
> + r = dma_resv_wait_timeout(obj->base.resv, DMA_RESV_USAGE_BOOKKEEP, false,
> MAX_SCHEDULE_TIMEOUT);
> if (r <= 0)
> drm_err(&i915->drm, "(%ld) failed to wait for idle\n", r);
> diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c b/drivers/gpu/drm/qxl/qxl_debugfs.c
> index 33e5889d6608..2d9ed3b94574 100644
> --- a/drivers/gpu/drm/qxl/qxl_debugfs.c
> +++ b/drivers/gpu/drm/qxl/qxl_debugfs.c
> @@ -62,7 +62,7 @@ qxl_debugfs_buffers_info(struct seq_file *m, void *data)
> int rel = 0;
>
> dma_resv_iter_begin(&cursor, bo->tbo.base.resv,
> - DMA_RESV_USAGE_READ);
> + DMA_RESV_USAGE_BOOKKEEP);
> dma_resv_for_each_fence_unlocked(&cursor, fence) {
> if (dma_resv_iter_is_restarted(&cursor))
> rel = 0;
> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
> index 71bf9299e45c..9587ab88bedd 100644
> --- a/drivers/gpu/drm/radeon/radeon_gem.c
> +++ b/drivers/gpu/drm/radeon/radeon_gem.c
> @@ -162,7 +162,7 @@ static int radeon_gem_set_domain(struct drm_gem_object *gobj,
> if (domain == RADEON_GEM_DOMAIN_CPU) {
> /* Asking for cpu access wait for object idle */
> r = dma_resv_wait_timeout(robj->tbo.base.resv,
> - DMA_RESV_USAGE_READ,
> + DMA_RESV_USAGE_BOOKKEEP,
> true, 30 * HZ);
> if (!r)
> r = -EBUSY;
> diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c
> index 68ebeb1bdfff..29fe8423bd90 100644
> --- a/drivers/gpu/drm/radeon/radeon_mn.c
> +++ b/drivers/gpu/drm/radeon/radeon_mn.c
> @@ -66,7 +66,7 @@ static bool radeon_mn_invalidate(struct mmu_interval_notifier *mn,
> return true;
> }
>
> - r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_READ,
> + r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_BOOKKEEP,
> false, MAX_SCHEDULE_TIMEOUT);
> if (r <= 0)
> DRM_ERROR("(%ld) failed to wait for user bo\n", r);
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 0f0aa96fb051..8fea9f88d118 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -272,7 +272,7 @@ static void ttm_bo_flush_all_fences(struct ttm_buffer_object *bo)
> struct dma_resv_iter cursor;
> struct dma_fence *fence;
>
> - dma_resv_iter_begin(&cursor, resv, DMA_RESV_USAGE_READ);
> + dma_resv_iter_begin(&cursor, resv, DMA_RESV_USAGE_BOOKKEEP);
> dma_resv_for_each_fence_unlocked(&cursor, fence) {
> if (!fence->ops->signaled)
> dma_fence_enable_sw_signaling(fence);
> @@ -301,7 +301,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo,
> struct dma_resv *resv = &bo->base._resv;
> int ret;
>
> - if (dma_resv_test_signaled(resv, DMA_RESV_USAGE_READ))
> + if (dma_resv_test_signaled(resv, DMA_RESV_USAGE_BOOKKEEP))
> ret = 0;
> else
> ret = -EBUSY;
> @@ -313,7 +313,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo,
> dma_resv_unlock(bo->base.resv);
> spin_unlock(&bo->bdev->lru_lock);
>
> - lret = dma_resv_wait_timeout(resv, DMA_RESV_USAGE_READ,
> + lret = dma_resv_wait_timeout(resv, DMA_RESV_USAGE_BOOKKEEP,
> interruptible,
> 30 * HZ);
>
> @@ -418,7 +418,7 @@ static void ttm_bo_release(struct kref *kref)
> * fences block for the BO to become idle
> */
> dma_resv_wait_timeout(bo->base.resv,
> - DMA_RESV_USAGE_READ, false,
> + DMA_RESV_USAGE_BOOKKEEP, false,
> 30 * HZ);
> }
>
> @@ -429,7 +429,7 @@ static void ttm_bo_release(struct kref *kref)
> ttm_mem_io_free(bdev, bo->resource);
> }
>
> - if (!dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_READ) ||
> + if (!dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP) ||
> !dma_resv_trylock(bo->base.resv)) {
> /* The BO is not idle, resurrect it for delayed destroy */
> ttm_bo_flush_all_fences(bo);
> @@ -1074,13 +1074,13 @@ int ttm_bo_wait(struct ttm_buffer_object *bo,
> long timeout = 15 * HZ;
>
> if (no_wait) {
> - if (dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_READ))
> + if (dma_resv_test_signaled(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP))
> return 0;
> else
> return -EBUSY;
> }
>
> - timeout = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_READ,
> + timeout = dma_resv_wait_timeout(bo->base.resv, DMA_RESV_USAGE_BOOKKEEP,
> interruptible, timeout);
> if (timeout < 0)
> return timeout;
> diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h
> index 8f4f406a5d02..f7b8ed0e40ad 100644
> --- a/include/linux/dma-resv.h
> +++ b/include/linux/dma-resv.h
> @@ -55,7 +55,7 @@ struct dma_resv_list;
> * This enum describes the different use cases for a dma_resv object and
> * controls which fences are returned when queried.
> *
> - * An important fact is that there is the order KERNEL<WRITE<READ and
> + * An important fact is that there is the order KERNEL<WRITE<READ<BOOKKEEP and
> * when the dma_resv object is asked for fences for one use case the fences
> * for the lower use case are returned as well.
> *
> @@ -93,6 +93,17 @@ enum dma_resv_usage {
> * an implicit read dependency.
> */
> DMA_RESV_USAGE_READ,
> +
> + /**
> + * @DMA_RESV_USAGE_BOOKKEEP: No implicit sync.
> + *
> + * This should be used by submissions which don't want to participate in
> + * implicit synchronization.
> + *
> + * The most common case are preemption fences as well as page table
> + * updates.
Maybe add here "... and their TLB flushes." Since we kinda screwed that up
a bit in i915 and scored a CVE for it :-)
I haven't checked whether you've really caught them all, but I guess we
can do that once more when this has all landed.
With or without the bikesheds:
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> + */
> + DMA_RESV_USAGE_BOOKKEEP
> };
>
> /**
> --
> 2.25.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
next prev parent reply other threads:[~2022-03-29 16:06 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-21 13:58 [PATCH 01/23] dma-buf: add dma_resv_replace_fences v2 Christian König
2022-03-21 13:58 ` [PATCH 02/23] dma-buf: finally make the dma_resv_list private v2 Christian König
2022-03-21 13:58 ` [PATCH 03/23] dma-buf: add dma_resv_get_singleton v2 Christian König
2022-04-01 8:21 ` Christian König
2022-04-01 15:57 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 04/23] RDMA: use dma_resv_wait() instead of extracting the fence Christian König
2022-03-21 13:58 ` Christian König
2022-03-23 13:22 ` Daniel Vetter
2022-03-23 13:22 ` Daniel Vetter
2022-03-23 16:32 ` Jason Gunthorpe
2022-03-23 16:32 ` Jason Gunthorpe
2022-03-23 17:34 ` Daniel Vetter
2022-03-23 17:34 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 05/23] drm/etnaviv: stop using dma_resv_excl_fence Christian König
2022-03-23 15:58 ` Lucas Stach
2022-03-21 13:58 ` [Nouveau] [PATCH 06/23] drm/nouveau: " Christian König
2022-03-21 13:58 ` Christian König
2022-04-03 15:59 ` [Nouveau] " Christian König
2022-04-03 15:59 ` Christian König
2022-04-04 11:47 ` [Nouveau] " Karol Herbst
2022-04-04 11:47 ` Karol Herbst
2022-04-05 7:25 ` [Nouveau] " Christian König
2022-04-05 7:25 ` Christian König
2022-03-21 13:58 ` [PATCH 07/23] drm/vmwgfx: " Christian König
2022-03-21 14:02 ` Zack Rusin
2022-03-21 14:12 ` Christian König
2022-03-21 15:11 ` Zack Rusin
2022-03-22 7:13 ` Christian König
2022-03-22 12:40 ` Zack Rusin
2022-03-21 13:58 ` [PATCH 08/23] drm/radeon: " Christian König
2022-03-21 13:58 ` [PATCH 09/23] drm/amdgpu: use dma_resv_for_each_fence for CS workaround Christian König
2022-03-21 13:58 ` [PATCH 10/23] dma-buf: finally make dma_resv_excl_fence private v2 Christian König
2022-03-23 13:36 ` Daniel Vetter
2022-04-05 7:58 ` Christian König
2022-03-21 13:58 ` [PATCH 11/23] dma-buf: drop the DAG approach for the dma_resv object v2 Christian König
2022-03-23 13:40 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 12/23] dma-buf/drivers: make reserving a shared slot mandatory v3 Christian König
2022-03-28 17:14 ` Daniel Vetter
2022-03-31 12:07 ` Christian König
2022-03-31 16:42 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 13/23] drm/atomic-helper: support more than one write fence in drm_gem_plane_helper_prepare_fb Christian König
2022-03-21 13:58 ` [Nouveau] [PATCH 14/23] drm/nouveau: support more than one write fence in fenv50_wndw_prepare_fb Christian König
2022-03-21 13:58 ` Christian König
2022-03-21 13:58 ` [PATCH 15/23] drm/amdgpu: use dma_resv_get_singleton in amdgpu_pasid_free_cb Christian König
2022-03-21 13:58 ` [PATCH 16/23] dma-buf: add enum dma_resv_usage v3 Christian König
2022-03-29 15:24 ` Daniel Vetter
2022-04-04 1:13 ` Bas Nieuwenhuizen
2022-03-21 13:58 ` [PATCH 17/23] dma-buf: specify usage while adding fences to dma_resv obj v5 Christian König
2022-03-29 15:43 ` Daniel Vetter
2022-04-01 15:01 ` Christian König
2022-04-01 16:16 ` Daniel Vetter
2022-04-02 22:16 ` Bas Nieuwenhuizen
2022-04-03 17:48 ` Christian König
2022-03-21 13:58 ` [PATCH 18/23] drm/amdgpu: remove dma_resv workaround Christian König
2022-03-29 15:47 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 19/23] dma-buf: add DMA_RESV_USAGE_KERNEL v2 Christian König
2022-03-29 15:53 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 20/23] dma-buf: add DMA_RESV_USAGE_BOOKKEEP v2 Christian König
2022-03-29 16:06 ` Daniel Vetter [this message]
2022-03-21 13:58 ` [PATCH 21/23] dma-buf: wait for map to complete for static attachments Christian König
2022-03-29 15:56 ` Daniel Vetter
2022-03-21 13:58 ` [Intel-gfx] [PATCH 22/23] drm/i915: drop bo->moving dependency Christian König
2022-03-21 13:58 ` Christian König
2022-03-29 15:57 ` [Intel-gfx] " Daniel Vetter
2022-03-29 15:57 ` Daniel Vetter
2022-03-21 13:58 ` [PATCH 23/23] drm/ttm: remove bo->moving Christian König
2022-03-29 16:02 ` Daniel Vetter
2022-04-05 9:25 ` Christian König
2022-04-05 12:51 ` Daniel Vetter
2022-03-21 14:03 ` [PATCH 01/23] dma-buf: add dma_resv_replace_fences v2 Christian König
2022-03-23 13:09 ` Daniel Vetter
2022-03-23 15:55 ` Felix Kuehling
2022-03-23 15:57 ` Christian König
-- strict thread matches above, loose matches on Subject: below --
2022-02-11 12:49 completely rework the dma_resv semantic Christian König
2022-02-11 12:50 ` [PATCH 20/23] dma-buf: add DMA_RESV_USAGE_BOOKKEEP v2 Christian König
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=YkMul8nO5CoxOSS3@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=christian.koenig@amd.com \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.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.