@@ -68,10 +68,11 @@ nouveau_gem_object_open(struct drm_gem_object *gem, struct drm_file *file_priv)
6868 struct nouveau_bo * nvbo = nouveau_gem_object (gem );
6969 struct nouveau_drm * drm = nouveau_bdev (nvbo -> bo .bdev );
7070 struct device * dev = drm -> dev -> dev ;
71+ struct nouveau_vmm * vmm = cli -> svm .cli ? & cli -> svm : & cli -> vmm ;
7172 struct nouveau_vma * vma ;
7273 int ret ;
7374
74- if (cli -> vmm . vmm .object .oclass < NVIF_CLASS_VMM_NV50 )
75+ if (vmm -> vmm .object .oclass < NVIF_CLASS_VMM_NV50 )
7576 return 0 ;
7677
7778 ret = ttm_bo_reserve (& nvbo -> bo , false, false, NULL );
@@ -82,7 +83,7 @@ nouveau_gem_object_open(struct drm_gem_object *gem, struct drm_file *file_priv)
8283 if (ret < 0 && ret != - EACCES )
8384 goto out ;
8485
85- ret = nouveau_vma_new (nvbo , & cli -> vmm , & vma );
86+ ret = nouveau_vma_new (nvbo , vmm , & vma );
8687 pm_runtime_mark_last_busy (dev );
8788 pm_runtime_put_autosuspend (dev );
8889out :
@@ -142,17 +143,18 @@ nouveau_gem_object_close(struct drm_gem_object *gem, struct drm_file *file_priv)
142143 struct nouveau_bo * nvbo = nouveau_gem_object (gem );
143144 struct nouveau_drm * drm = nouveau_bdev (nvbo -> bo .bdev );
144145 struct device * dev = drm -> dev -> dev ;
146+ struct nouveau_vmm * vmm = cli -> svm .cli ? & cli -> svm : & cli -> vmm ;
145147 struct nouveau_vma * vma ;
146148 int ret ;
147149
148- if (cli -> vmm . vmm .object .oclass < NVIF_CLASS_VMM_NV50 )
150+ if (vmm -> vmm .object .oclass < NVIF_CLASS_VMM_NV50 )
149151 return ;
150152
151153 ret = ttm_bo_reserve (& nvbo -> bo , false, false, NULL );
152154 if (ret )
153155 return ;
154156
155- vma = nouveau_vma_find (nvbo , & cli -> vmm );
157+ vma = nouveau_vma_find (nvbo , vmm );
156158 if (vma ) {
157159 if (-- vma -> refs == 0 ) {
158160 ret = pm_runtime_get_sync (dev );
@@ -219,6 +221,7 @@ nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem,
219221{
220222 struct nouveau_cli * cli = nouveau_cli (file_priv );
221223 struct nouveau_bo * nvbo = nouveau_gem_object (gem );
224+ struct nouveau_vmm * vmm = cli -> svm .cli ? & cli -> svm : & cli -> vmm ;
222225 struct nouveau_vma * vma ;
223226
224227 if (is_power_of_2 (nvbo -> valid_domains ))
@@ -228,8 +231,8 @@ nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem,
228231 else
229232 rep -> domain = NOUVEAU_GEM_DOMAIN_VRAM ;
230233 rep -> offset = nvbo -> bo .offset ;
231- if (cli -> vmm . vmm .object .oclass >= NVIF_CLASS_VMM_NV50 ) {
232- vma = nouveau_vma_find (nvbo , & cli -> vmm );
234+ if (vmm -> vmm .object .oclass >= NVIF_CLASS_VMM_NV50 ) {
235+ vma = nouveau_vma_find (nvbo , vmm );
233236 if (!vma )
234237 return - EINVAL ;
235238
@@ -321,7 +324,8 @@ struct validate_op {
321324};
322325
323326static void
324- validate_fini_no_ticket (struct validate_op * op , struct nouveau_fence * fence ,
327+ validate_fini_no_ticket (struct validate_op * op , struct nouveau_channel * chan ,
328+ struct nouveau_fence * fence ,
325329 struct drm_nouveau_gem_pushbuf_bo * pbbo )
326330{
327331 struct nouveau_bo * nvbo ;
@@ -332,13 +336,11 @@ validate_fini_no_ticket(struct validate_op *op, struct nouveau_fence *fence,
332336 b = & pbbo [nvbo -> pbbo_index ];
333337
334338 if (likely (fence )) {
335- struct nouveau_drm * drm = nouveau_bdev (nvbo -> bo .bdev );
336- struct nouveau_vma * vma ;
337-
338339 nouveau_bo_fence (nvbo , fence , !!b -> write_domains );
339340
340- if (drm -> client .vmm .vmm .object .oclass >= NVIF_CLASS_VMM_NV50 ) {
341- vma = (void * )(unsigned long )b -> user_priv ;
341+ if (chan -> vmm -> vmm .object .oclass >= NVIF_CLASS_VMM_NV50 ) {
342+ struct nouveau_vma * vma =
343+ (void * )(unsigned long )b -> user_priv ;
342344 nouveau_fence_unref (& vma -> fence );
343345 dma_fence_get (& fence -> base );
344346 vma -> fence = fence ;
@@ -358,10 +360,11 @@ validate_fini_no_ticket(struct validate_op *op, struct nouveau_fence *fence,
358360}
359361
360362static void
361- validate_fini (struct validate_op * op , struct nouveau_fence * fence ,
363+ validate_fini (struct validate_op * op , struct nouveau_channel * chan ,
364+ struct nouveau_fence * fence ,
362365 struct drm_nouveau_gem_pushbuf_bo * pbbo )
363366{
364- validate_fini_no_ticket (op , fence , pbbo );
367+ validate_fini_no_ticket (op , chan , fence , pbbo );
365368 ww_acquire_fini (& op -> ticket );
366369}
367370
@@ -416,7 +419,7 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv,
416419 list_splice_tail_init (& vram_list , & op -> list );
417420 list_splice_tail_init (& gart_list , & op -> list );
418421 list_splice_tail_init (& both_list , & op -> list );
419- validate_fini_no_ticket (op , NULL , NULL );
422+ validate_fini_no_ticket (op , chan , NULL , NULL );
420423 if (unlikely (ret == - EDEADLK )) {
421424 ret = ttm_bo_reserve_slowpath (& nvbo -> bo , true,
422425 & op -> ticket );
@@ -430,8 +433,8 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv,
430433 }
431434 }
432435
433- if (cli -> vmm . vmm .object .oclass >= NVIF_CLASS_VMM_NV50 ) {
434- struct nouveau_vmm * vmm = & cli -> vmm ;
436+ if (chan -> vmm -> vmm .object .oclass >= NVIF_CLASS_VMM_NV50 ) {
437+ struct nouveau_vmm * vmm = chan -> vmm ;
435438 struct nouveau_vma * vma = nouveau_vma_find (nvbo , vmm );
436439 if (!vma ) {
437440 NV_PRINTK (err , cli , "vma not found!\n" );
@@ -471,7 +474,7 @@ validate_init(struct nouveau_channel *chan, struct drm_file *file_priv,
471474 list_splice_tail (& gart_list , & op -> list );
472475 list_splice_tail (& both_list , & op -> list );
473476 if (ret )
474- validate_fini (op , NULL , NULL );
477+ validate_fini (op , chan , NULL , NULL );
475478 return ret ;
476479
477480}
@@ -563,7 +566,7 @@ nouveau_gem_pushbuf_validate(struct nouveau_channel *chan,
563566 if (unlikely (ret < 0 )) {
564567 if (ret != - ERESTARTSYS )
565568 NV_PRINTK (err , cli , "validating bo list\n" );
566- validate_fini (op , NULL , NULL );
569+ validate_fini (op , chan , NULL , NULL );
567570 return ret ;
568571 }
569572 * apply_relocs = ret ;
@@ -842,7 +845,7 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data,
842845 }
843846
844847out :
845- validate_fini (& op , fence , bo );
848+ validate_fini (& op , chan , fence , bo );
846849 nouveau_fence_unref (& fence );
847850
848851out_prevalid :
0 commit comments