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@xxxxxxx> Tested with Xe CI, Reviewed-by: Thomas Hellström <thomas.hellstrom@xxxxxxxxxxxxxxx> > --- > 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];