On Thu, 2022-04-21 at 12:17 +0200, Christian König wrote: > ⚠ External Email > > Am 20.04.22 um 21:28 schrieb Zack Rusin: > > [SNIP] > > > To figure out what it is could you try the following code > > > fragment: > > > > > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c > > > b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c > > > index f46891012be3..a36f89d3f36d 100644 > > > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c > > > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_validation.c > > > @@ -288,7 +288,7 @@ int vmw_validation_add_bo(struct > > > vmw_validation_context *ctx, > > > val_buf->bo = ttm_bo_get_unless_zero(&vbo- > > > >base); > > > if (!val_buf->bo) > > > return -ESRCH; > > > - val_buf->num_shared = 0; > > > + val_buf->num_shared = 16; > > > list_add_tail(&val_buf->head, &ctx->bo_list); > > > bo_node->as_mob = as_mob; > > > bo_node->cpu_blit = cpu_blit; > > Fails the same BUG_ON with num_fences and max_fences == 0. > > Thanks for testing this. > > So the buffer object is not reserved through > vmw_validation_bo_reserve(), but comes from somewhere else. > Unfortunately I absolutely can't find where that's coming from. > > Do you have some documentation howto setup vmwgfx? E.g. sample VM > which > I can download somewhere etc.. I don't have an external machine to upload it to. Getting an external machine to run Mesa CI on has been on our todo for a while, so I'll try to setup something next week. The issue here seems to be that vmwgfx always had some buffers that didn't immediately go through vmw_validation_bo_reserve. What's happening is that in vmwgfx_execbuf.c in vmw_execbuf_process we call vmw_validation_bo_reserve and after it we call vmw_validation_res_validate. Inside vmw_validation_res_validate (in vmwgfx_validation.c) we call vmw_resource_validate, which calls vmw_resource_do_validate . vmw_resource_do_validate has this code "ret = func->create(res);" which is an issue for vmwgfx_cotable.c . The func->create for cotable's is vmw_cotable_create which calls vmw_cotable_resize which creates, reserves and validates a new bo. In short a new bo is created in vmw_cotable_resize between ttm_eu_reserve_buffers and ttm_eu_fence_buffer_objects calls. z