Message ID | 20220406075132.3263-8-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/16] dma-buf/drivers: make reserving a shared slot mandatory v4 | expand |
On Wed, Apr 06, 2022 at 09:51:23AM +0200, Christian König wrote: > Always wait for kernel fences before kmap and not only for UVD kmaps. > > Signed-off-by: Christian König <christian.koenig@amd.com> > --- > drivers/gpu/drm/radeon/radeon_object.c | 7 ++++++- > drivers/gpu/drm/radeon/radeon_uvd.c | 12 ++---------- > 2 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c > index cb5c4aa45cef..6c4a6802ca96 100644 > --- a/drivers/gpu/drm/radeon/radeon_object.c > +++ b/drivers/gpu/drm/radeon/radeon_object.c > @@ -219,7 +219,12 @@ int radeon_bo_create(struct radeon_device *rdev, > int radeon_bo_kmap(struct radeon_bo *bo, void **ptr) > { > bool is_iomem; > - int r; > + long r; > + > + r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_KERNEL, > + false, MAX_SCHEDULE_TIMEOUT); Maybe another reason why we should push this wait into ttm kmap helpers? Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> > + if (r < 0) > + return r; > > if (bo->kptr) { > if (ptr) { > diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c > index a50750740ab0..a2cda184b2b2 100644 > --- a/drivers/gpu/drm/radeon/radeon_uvd.c > +++ b/drivers/gpu/drm/radeon/radeon_uvd.c > @@ -470,24 +470,16 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo, > int32_t *msg, msg_type, handle; > unsigned img_size = 0; > void *ptr; > - long r; > - int i; > + int i, r; > > if (offset & 0x3F) { > DRM_ERROR("UVD messages must be 64 byte aligned!\n"); > return -EINVAL; > } > > - r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_WRITE, > - false, MAX_SCHEDULE_TIMEOUT); > - if (r <= 0) { > - DRM_ERROR("Failed waiting for UVD message (%ld)!\n", r); > - return r ? r : -ETIME; > - } > - > r = radeon_bo_kmap(bo, &ptr); > if (r) { > - DRM_ERROR("Failed mapping the UVD message (%ld)!\n", r); > + DRM_ERROR("Failed mapping the UVD message (%d)!\n", r); > return r; > } > > -- > 2.25.1 >
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index cb5c4aa45cef..6c4a6802ca96 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c @@ -219,7 +219,12 @@ int radeon_bo_create(struct radeon_device *rdev, int radeon_bo_kmap(struct radeon_bo *bo, void **ptr) { bool is_iomem; - int r; + long r; + + r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_KERNEL, + false, MAX_SCHEDULE_TIMEOUT); + if (r < 0) + return r; if (bo->kptr) { if (ptr) { diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c index a50750740ab0..a2cda184b2b2 100644 --- a/drivers/gpu/drm/radeon/radeon_uvd.c +++ b/drivers/gpu/drm/radeon/radeon_uvd.c @@ -470,24 +470,16 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo, int32_t *msg, msg_type, handle; unsigned img_size = 0; void *ptr; - long r; - int i; + int i, r; if (offset & 0x3F) { DRM_ERROR("UVD messages must be 64 byte aligned!\n"); return -EINVAL; } - r = dma_resv_wait_timeout(bo->tbo.base.resv, DMA_RESV_USAGE_WRITE, - false, MAX_SCHEDULE_TIMEOUT); - if (r <= 0) { - DRM_ERROR("Failed waiting for UVD message (%ld)!\n", r); - return r ? r : -ETIME; - } - r = radeon_bo_kmap(bo, &ptr); if (r) { - DRM_ERROR("Failed mapping the UVD message (%ld)!\n", r); + DRM_ERROR("Failed mapping the UVD message (%d)!\n", r); return r; }
Always wait for kernel fences before kmap and not only for UVD kmaps. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/radeon/radeon_object.c | 7 ++++++- drivers/gpu/drm/radeon/radeon_uvd.c | 12 ++---------- 2 files changed, 8 insertions(+), 11 deletions(-)