Message ID | 20240312105555.3065-1-christian.koenig@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/ttm: warn when resv objs are mixed in a bulk_move | expand |
On Tue, 2024-03-12 at 11:55 +0100, Christian König wrote: > The BOs in a bulk move must share all the same reservation object > to make sure that we lock the whole bulk during eviction. > > Actually document and enforce that with a warning. > > Signed-off-by: Christian König <christian.koenig@amd.com> Tested with Xe CI, Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > --- > drivers/gpu/drm/ttm/ttm_resource.c | 1 + > include/drm/ttm/ttm_resource.h | 3 +++ > 2 files changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/ttm/ttm_resource.c > b/drivers/gpu/drm/ttm/ttm_resource.c > index 65155f2013ca..be8d286513f9 100644 > --- a/drivers/gpu/drm/ttm/ttm_resource.c > +++ b/drivers/gpu/drm/ttm/ttm_resource.c > @@ -105,6 +105,7 @@ static void ttm_lru_bulk_move_add(struct > ttm_lru_bulk_move *bulk, > pos->first = res; > pos->last = res; > } else { > + WARN_ON(pos->first->bo->base.resv != res->bo- > >base.resv); > ttm_lru_bulk_move_pos_tail(pos, res); > } > } > diff --git a/include/drm/ttm/ttm_resource.h > b/include/drm/ttm/ttm_resource.h > index 7561023db43d..69769355139f 100644 > --- a/include/drm/ttm/ttm_resource.h > +++ b/include/drm/ttm/ttm_resource.h > @@ -251,6 +251,9 @@ struct ttm_lru_bulk_move_pos { > * > * Container for the current bulk move state. Should be used with > * ttm_lru_bulk_move_init() and ttm_bo_set_bulk_move(). > + * All BOs in a bulk_move structure need to share the same > reservation object to > + * ensure that the bulk as a whole is locked for eviction even if > only one BO of > + * the bulk is evicted. > */ > struct ttm_lru_bulk_move { > struct ttm_lru_bulk_move_pos > pos[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY];
diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c index 65155f2013ca..be8d286513f9 100644 --- a/drivers/gpu/drm/ttm/ttm_resource.c +++ b/drivers/gpu/drm/ttm/ttm_resource.c @@ -105,6 +105,7 @@ static void ttm_lru_bulk_move_add(struct ttm_lru_bulk_move *bulk, pos->first = res; pos->last = res; } else { + WARN_ON(pos->first->bo->base.resv != res->bo->base.resv); ttm_lru_bulk_move_pos_tail(pos, res); } } diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h index 7561023db43d..69769355139f 100644 --- a/include/drm/ttm/ttm_resource.h +++ b/include/drm/ttm/ttm_resource.h @@ -251,6 +251,9 @@ struct ttm_lru_bulk_move_pos { * * Container for the current bulk move state. Should be used with * ttm_lru_bulk_move_init() and ttm_bo_set_bulk_move(). + * All BOs in a bulk_move structure need to share the same reservation object to + * ensure that the bulk as a whole is locked for eviction even if only one BO of + * the bulk is evicted. */ struct ttm_lru_bulk_move { struct ttm_lru_bulk_move_pos pos[TTM_NUM_MEM_TYPES][TTM_MAX_BO_PRIORITY];
The BOs in a bulk move must share all the same reservation object to make sure that we lock the whole bulk during eviction. Actually document and enforce that with a warning. Signed-off-by: Christian König <christian.koenig@amd.com> --- drivers/gpu/drm/ttm/ttm_resource.c | 1 + include/drm/ttm/ttm_resource.h | 3 +++ 2 files changed, 4 insertions(+)