@@ -107,34 +107,34 @@ nouveau_uvmm_vmm_sparse_unref(struct nouveau_uvmm *uvmm,
107107
108108static int
109109nouveau_uvmm_vmm_get (struct nouveau_uvmm * uvmm ,
110- u64 addr , u64 range )
110+ u64 addr , u64 range , u8 page_shift )
111111{
112112 struct nvif_vmm * vmm = & uvmm -> vmm .vmm ;
113113
114- return nvif_vmm_raw_get (vmm , addr , range , PAGE_SHIFT );
114+ return nvif_vmm_raw_get (vmm , addr , range , page_shift );
115115}
116116
117117static int
118118nouveau_uvmm_vmm_put (struct nouveau_uvmm * uvmm ,
119- u64 addr , u64 range )
119+ u64 addr , u64 range , u8 page_shift )
120120{
121121 struct nvif_vmm * vmm = & uvmm -> vmm .vmm ;
122122
123- return nvif_vmm_raw_put (vmm , addr , range , PAGE_SHIFT );
123+ return nvif_vmm_raw_put (vmm , addr , range , page_shift );
124124}
125125
126126static int
127127nouveau_uvmm_vmm_unmap (struct nouveau_uvmm * uvmm ,
128- u64 addr , u64 range , bool sparse )
128+ u64 addr , u64 range , u8 page_shift , bool sparse )
129129{
130130 struct nvif_vmm * vmm = & uvmm -> vmm .vmm ;
131131
132- return nvif_vmm_raw_unmap (vmm , addr , range , PAGE_SHIFT , sparse );
132+ return nvif_vmm_raw_unmap (vmm , addr , range , page_shift , sparse );
133133}
134134
135135static int
136136nouveau_uvmm_vmm_map (struct nouveau_uvmm * uvmm ,
137- u64 addr , u64 range ,
137+ u64 addr , u64 range , u8 page_shift ,
138138 u64 bo_offset , u8 kind ,
139139 struct nouveau_mem * mem )
140140{
@@ -163,7 +163,7 @@ nouveau_uvmm_vmm_map(struct nouveau_uvmm *uvmm,
163163 return - ENOSYS ;
164164 }
165165
166- return nvif_vmm_raw_map (vmm , addr , range , PAGE_SHIFT ,
166+ return nvif_vmm_raw_map (vmm , addr , range , page_shift ,
167167 & args , argc ,
168168 & mem -> mem , bo_offset );
169169}
@@ -182,8 +182,9 @@ nouveau_uvma_vmm_put(struct nouveau_uvma *uvma)
182182{
183183 u64 addr = uvma -> va .va .addr ;
184184 u64 range = uvma -> va .va .range ;
185+ u8 page_shift = uvma -> page_shift ;
185186
186- return nouveau_uvmm_vmm_put (to_uvmm (uvma ), addr , range );
187+ return nouveau_uvmm_vmm_put (to_uvmm (uvma ), addr , range , page_shift );
187188}
188189
189190static int
@@ -193,22 +194,25 @@ nouveau_uvma_map(struct nouveau_uvma *uvma,
193194 u64 addr = uvma -> va .va .addr ;
194195 u64 offset = uvma -> va .gem .offset ;
195196 u64 range = uvma -> va .va .range ;
197+ u8 page_shift = uvma -> page_shift ;
196198
197199 return nouveau_uvmm_vmm_map (to_uvmm (uvma ), addr , range ,
198- offset , uvma -> kind , mem );
200+ page_shift , offset , uvma -> kind ,
201+ mem );
199202}
200203
201204static int
202205nouveau_uvma_unmap (struct nouveau_uvma * uvma )
203206{
204207 u64 addr = uvma -> va .va .addr ;
205208 u64 range = uvma -> va .va .range ;
209+ u8 page_shift = uvma -> page_shift ;
206210 bool sparse = !!uvma -> region ;
207211
208212 if (drm_gpuva_invalidated (& uvma -> va ))
209213 return 0 ;
210214
211- return nouveau_uvmm_vmm_unmap (to_uvmm (uvma ), addr , range , sparse );
215+ return nouveau_uvmm_vmm_unmap (to_uvmm (uvma ), addr , range , page_shift , sparse );
212216}
213217
214218static int
@@ -501,7 +505,8 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvmm,
501505
502506 if (vmm_get_range )
503507 nouveau_uvmm_vmm_put (uvmm , vmm_get_start ,
504- vmm_get_range );
508+ vmm_get_range ,
509+ PAGE_SHIFT );
505510 break ;
506511 }
507512 case DRM_GPUVA_OP_REMAP : {
@@ -528,6 +533,7 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvmm,
528533 u64 ustart = va -> va .addr ;
529534 u64 urange = va -> va .range ;
530535 u64 uend = ustart + urange ;
536+ u8 page_shift = uvma_from_va (va )-> page_shift ;
531537
532538 /* Nothing to do for mappings we merge with. */
533539 if (uend == vmm_get_start ||
@@ -538,7 +544,8 @@ nouveau_uvmm_sm_prepare_unwind(struct nouveau_uvmm *uvmm,
538544 u64 vmm_get_range = ustart - vmm_get_start ;
539545
540546 nouveau_uvmm_vmm_put (uvmm , vmm_get_start ,
541- vmm_get_range );
547+ vmm_get_range ,
548+ page_shift );
542549 }
543550 vmm_get_start = uend ;
544551 break ;
@@ -592,6 +599,7 @@ op_map_prepare(struct nouveau_uvmm *uvmm,
592599
593600 uvma -> region = args -> region ;
594601 uvma -> kind = args -> kind ;
602+ uvma -> page_shift = PAGE_SHIFT ;
595603
596604 drm_gpuva_map (& uvmm -> base , & uvma -> va , op );
597605
@@ -633,7 +641,8 @@ nouveau_uvmm_sm_prepare(struct nouveau_uvmm *uvmm,
633641
634642 if (vmm_get_range ) {
635643 ret = nouveau_uvmm_vmm_get (uvmm , vmm_get_start ,
636- vmm_get_range );
644+ vmm_get_range ,
645+ new -> map -> page_shift );
637646 if (ret ) {
638647 op_map_prepare_unwind (new -> map );
639648 goto unwind ;
@@ -689,6 +698,7 @@ nouveau_uvmm_sm_prepare(struct nouveau_uvmm *uvmm,
689698 u64 ustart = va -> va .addr ;
690699 u64 urange = va -> va .range ;
691700 u64 uend = ustart + urange ;
701+ u8 page_shift = uvma_from_va (va )-> page_shift ;
692702
693703 op_unmap_prepare (u );
694704
@@ -704,7 +714,7 @@ nouveau_uvmm_sm_prepare(struct nouveau_uvmm *uvmm,
704714 u64 vmm_get_range = ustart - vmm_get_start ;
705715
706716 ret = nouveau_uvmm_vmm_get (uvmm , vmm_get_start ,
707- vmm_get_range );
717+ vmm_get_range , page_shift );
708718 if (ret ) {
709719 op_unmap_prepare_unwind (va );
710720 goto unwind ;
@@ -799,10 +809,11 @@ op_unmap_range(struct drm_gpuva_op_unmap *u,
799809 u64 addr , u64 range )
800810{
801811 struct nouveau_uvma * uvma = uvma_from_va (u -> va );
812+ u8 page_shift = uvma -> page_shift ;
802813 bool sparse = !!uvma -> region ;
803814
804815 if (!drm_gpuva_invalidated (u -> va ))
805- nouveau_uvmm_vmm_unmap (to_uvmm (uvma ), addr , range , sparse );
816+ nouveau_uvmm_vmm_unmap (to_uvmm (uvma ), addr , range , page_shift , sparse );
806817}
807818
808819static void
@@ -882,6 +893,7 @@ nouveau_uvmm_sm_cleanup(struct nouveau_uvmm *uvmm,
882893 struct drm_gpuva_op_map * n = r -> next ;
883894 struct drm_gpuva * va = r -> unmap -> va ;
884895 struct nouveau_uvma * uvma = uvma_from_va (va );
896+ u8 page_shift = uvma -> page_shift ;
885897
886898 if (unmap ) {
887899 u64 addr = va -> va .addr ;
@@ -893,7 +905,7 @@ nouveau_uvmm_sm_cleanup(struct nouveau_uvmm *uvmm,
893905 if (n )
894906 end = n -> va .addr ;
895907
896- nouveau_uvmm_vmm_put (uvmm , addr , end - addr );
908+ nouveau_uvmm_vmm_put (uvmm , addr , end - addr , page_shift );
897909 }
898910
899911 nouveau_uvma_gem_put (uvma );
0 commit comments