diff mbox series

[3/3] drm/ttm: Change the meaning of the fields in the drm_mm_nodes structure from pfn to bytes v2

Message ID 20230214074238.65865-4-christian.koenig@amd.com (mailing list archive)
State New, archived
Headers show
Series [1/3] drm/amdgpu: use amdgpu_res_cursor in more places v2 | expand

Commit Message

Christian König Feb. 14, 2023, 7:42 a.m. UTC
From: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>

Change the ttm_range_man_alloc() allocation from pages to size in bytes.
Fix the dependent drm_mm_nodes start and size from pages to bytes.

v2 (chk): Change the drm_mm_node usage in amdgpu as well. re-order the
          patch to be independent of the resource->start change.

Signed-off-by: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c    | 15 ++++++++-------
 drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h |  8 ++++----
 drivers/gpu/drm/i915/i915_scatterlist.c        |  6 +++---
 drivers/gpu/drm/ttm/ttm_range_manager.c        | 17 ++++++++---------
 4 files changed, 23 insertions(+), 23 deletions(-)

Comments

Matthew Auld Feb. 14, 2023, 10:31 a.m. UTC | #1
On Tue, 14 Feb 2023 at 07:43, Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
>
> From: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
>
> Change the ttm_range_man_alloc() allocation from pages to size in bytes.
> Fix the dependent drm_mm_nodes start and size from pages to bytes.
>
> v2 (chk): Change the drm_mm_node usage in amdgpu as well. re-order the
>           patch to be independent of the resource->start change.
>
> Signed-off-by: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
> Reviewed-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c    | 15 ++++++++-------
>  drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h |  8 ++++----
>  drivers/gpu/drm/i915/i915_scatterlist.c        |  6 +++---
>  drivers/gpu/drm/ttm/ttm_range_manager.c        | 17 ++++++++---------
>  4 files changed, 23 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> index 44367f03316f..c90423cd1292 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> @@ -116,7 +116,6 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
>                               struct ttm_resource **res)
>  {
>         struct amdgpu_gtt_mgr *mgr = to_gtt_mgr(man);
> -       uint32_t num_pages = PFN_UP(tbo->base.size);
>         struct ttm_range_mgr_node *node;
>         int r;
>
> @@ -134,17 +133,19 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
>         if (place->lpfn) {
>                 spin_lock(&mgr->lock);
>                 r = drm_mm_insert_node_in_range(&mgr->mm, &node->mm_nodes[0],
> -                                               num_pages, tbo->page_alignment,
> -                                               0, place->fpfn, place->lpfn,
> +                                               tbo->base.size,
> +                                               tbo->page_alignment << PAGE_SHIFT, 0,
> +                                               place->fpfn << PAGE_SHIFT,
> +                                               place->lpfn << PAGE_SHIFT,
>                                                 DRM_MM_INSERT_BEST);
>                 spin_unlock(&mgr->lock);
>                 if (unlikely(r))
>                         goto err_free;
>
> -               node->base.start = node->mm_nodes[0].start;
> +               node->base.start = node->mm_nodes[0].start >> PAGE_SHIFT;
>         } else {
>                 node->mm_nodes[0].start = 0;
> -               node->mm_nodes[0].size = PFN_UP(node->base.size);
> +               node->mm_nodes[0].size = node->base.size;
>                 node->base.start = AMDGPU_BO_INVALID_OFFSET;
>         }
>
> @@ -285,8 +286,8 @@ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
>
>         ttm_resource_manager_init(man, &adev->mman.bdev, gtt_size);
>
> -       start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
> -       size = (adev->gmc.gart_size >> PAGE_SHIFT) - start;
> +       start = (AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS) << PAGE_SHIFT;
> +       size = adev->gmc.gart_size - start;
>         drm_mm_init(&mgr->mm, start, size);
>         spin_lock_init(&mgr->lock);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
> index 5c4f93ee0c57..5c78f0b09351 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
> @@ -94,8 +94,8 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
>                 while (start >= node->size << PAGE_SHIFT)
>                         start -= node++->size << PAGE_SHIFT;
>
> -               cur->start = (node->start << PAGE_SHIFT) + start;
> -               cur->size = min((node->size << PAGE_SHIFT) - start, size);
> +               cur->start = node->start + start;
> +               cur->size = min(node->size - start, size);
>                 cur->remaining = size;
>                 cur->node = node;
>                 break;
> @@ -155,8 +155,8 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
>                 node = cur->node;
>
>                 cur->node = ++node;
> -               cur->start = node->start << PAGE_SHIFT;
> -               cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
> +               cur->start = node->start;
> +               cur->size = min(node->size, cur->remaining);
>                 break;
>         default:
>                 return;
> diff --git a/drivers/gpu/drm/i915/i915_scatterlist.c b/drivers/gpu/drm/i915/i915_scatterlist.c
> index 756289e43dff..7defda1219d0 100644
> --- a/drivers/gpu/drm/i915/i915_scatterlist.c
> +++ b/drivers/gpu/drm/i915/i915_scatterlist.c
> @@ -94,7 +94,7 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,
>         if (!rsgt)
>                 return ERR_PTR(-ENOMEM);
>
> -       i915_refct_sgt_init(rsgt, node->size << PAGE_SHIFT);
> +       i915_refct_sgt_init(rsgt, node->size);
>         st = &rsgt->table;
>         /* restricted by sg_alloc_table */
>         if (WARN_ON(overflows_type(DIV_ROUND_UP_ULL(node->size, segment_pages),
> @@ -110,8 +110,8 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,
>         sg = st->sgl;
>         st->nents = 0;
>         prev_end = (resource_size_t)-1;
> -       block_size = node->size << PAGE_SHIFT;
> -       offset = node->start << PAGE_SHIFT;
> +       block_size = node->size;
> +       offset = node->start;
>
>         while (block_size) {
>                 u64 len;
> diff --git a/drivers/gpu/drm/ttm/ttm_range_manager.c b/drivers/gpu/drm/ttm/ttm_range_manager.c
> index 62fddcc59f02..9da6054f2955 100644
> --- a/drivers/gpu/drm/ttm/ttm_range_manager.c
> +++ b/drivers/gpu/drm/ttm/ttm_range_manager.c
> @@ -83,9 +83,10 @@ static int ttm_range_man_alloc(struct ttm_resource_manager *man,
>
>         spin_lock(&rman->lock);
>         ret = drm_mm_insert_node_in_range(mm, &node->mm_nodes[0],
> -                                         PFN_UP(node->base.size),
> -                                         bo->page_alignment, 0,
> -                                         place->fpfn, lpfn, mode);
> +                                         node->base.size,
> +                                         bo->page_alignment << PAGE_SHIFT, 0,
> +                                         place->fpfn << PAGE_SHIFT,

place->fpfn is only u32. I assume we need some (u64) cast or so?

> +                                         lpfn << PAGE_SHIFT, mode);
>         spin_unlock(&rman->lock);
>
>         if (unlikely(ret)) {
> @@ -94,7 +95,7 @@ static int ttm_range_man_alloc(struct ttm_resource_manager *man,
>                 return ret;
>         }
>
> -       node->base.start = node->mm_nodes[0].start;
> +       node->base.start = node->mm_nodes[0].start >> PAGE_SHIFT;
>         *res = &node->base;
>         return 0;
>  }
> @@ -119,11 +120,10 @@ static bool ttm_range_man_intersects(struct ttm_resource_manager *man,
>                                      size_t size)
>  {
>         struct drm_mm_node *node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
> -       u32 num_pages = PFN_UP(size);
>
>         /* Don't evict BOs outside of the requested placement range */
> -       if (place->fpfn >= (node->start + num_pages) ||
> -           (place->lpfn && place->lpfn <= node->start))
> +       if ((place->fpfn << PAGE_SHIFT) >= (node->start + size) ||
> +           (place->lpfn && (place->lpfn << PAGE_SHIFT) <= node->start))

Same here.

>                 return false;
>
>         return true;
> @@ -135,10 +135,9 @@ static bool ttm_range_man_compatible(struct ttm_resource_manager *man,
>                                      size_t size)
>  {
>         struct drm_mm_node *node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
> -       u32 num_pages = PFN_UP(size);
>
>         if (node->start < place->fpfn ||
> -           (place->lpfn && (node->start + num_pages) > place->lpfn))
> +           (place->lpfn && (node->start + size) > place->lpfn << PAGE_SHIFT))

And here.

>                 return false;
>
>         return true;
> --
> 2.34.1
>
Christian König Feb. 14, 2023, 10:37 a.m. UTC | #2
Am 14.02.23 um 11:31 schrieb Matthew Auld:
> On Tue, 14 Feb 2023 at 07:43, Christian König
> <ckoenig.leichtzumerken@gmail.com> wrote:
>> From: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
>>
>> Change the ttm_range_man_alloc() allocation from pages to size in bytes.
>> Fix the dependent drm_mm_nodes start and size from pages to bytes.
>>
>> v2 (chk): Change the drm_mm_node usage in amdgpu as well. re-order the
>>            patch to be independent of the resource->start change.
>>
>> Signed-off-by: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com>
>> Reviewed-by: Christian König <christian.koenig@amd.com>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c    | 15 ++++++++-------
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h |  8 ++++----
>>   drivers/gpu/drm/i915/i915_scatterlist.c        |  6 +++---
>>   drivers/gpu/drm/ttm/ttm_range_manager.c        | 17 ++++++++---------
>>   4 files changed, 23 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>> index 44367f03316f..c90423cd1292 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>> @@ -116,7 +116,6 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
>>                                struct ttm_resource **res)
>>   {
>>          struct amdgpu_gtt_mgr *mgr = to_gtt_mgr(man);
>> -       uint32_t num_pages = PFN_UP(tbo->base.size);
>>          struct ttm_range_mgr_node *node;
>>          int r;
>>
>> @@ -134,17 +133,19 @@ static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
>>          if (place->lpfn) {
>>                  spin_lock(&mgr->lock);
>>                  r = drm_mm_insert_node_in_range(&mgr->mm, &node->mm_nodes[0],
>> -                                               num_pages, tbo->page_alignment,
>> -                                               0, place->fpfn, place->lpfn,
>> +                                               tbo->base.size,
>> +                                               tbo->page_alignment << PAGE_SHIFT, 0,
>> +                                               place->fpfn << PAGE_SHIFT,
>> +                                               place->lpfn << PAGE_SHIFT,
>>                                                  DRM_MM_INSERT_BEST);
>>                  spin_unlock(&mgr->lock);
>>                  if (unlikely(r))
>>                          goto err_free;
>>
>> -               node->base.start = node->mm_nodes[0].start;
>> +               node->base.start = node->mm_nodes[0].start >> PAGE_SHIFT;
>>          } else {
>>                  node->mm_nodes[0].start = 0;
>> -               node->mm_nodes[0].size = PFN_UP(node->base.size);
>> +               node->mm_nodes[0].size = node->base.size;
>>                  node->base.start = AMDGPU_BO_INVALID_OFFSET;
>>          }
>>
>> @@ -285,8 +286,8 @@ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
>>
>>          ttm_resource_manager_init(man, &adev->mman.bdev, gtt_size);
>>
>> -       start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
>> -       size = (adev->gmc.gart_size >> PAGE_SHIFT) - start;
>> +       start = (AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS) << PAGE_SHIFT;
>> +       size = adev->gmc.gart_size - start;
>>          drm_mm_init(&mgr->mm, start, size);
>>          spin_lock_init(&mgr->lock);
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
>> index 5c4f93ee0c57..5c78f0b09351 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
>> @@ -94,8 +94,8 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
>>                  while (start >= node->size << PAGE_SHIFT)
>>                          start -= node++->size << PAGE_SHIFT;
>>
>> -               cur->start = (node->start << PAGE_SHIFT) + start;
>> -               cur->size = min((node->size << PAGE_SHIFT) - start, size);
>> +               cur->start = node->start + start;
>> +               cur->size = min(node->size - start, size);
>>                  cur->remaining = size;
>>                  cur->node = node;
>>                  break;
>> @@ -155,8 +155,8 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
>>                  node = cur->node;
>>
>>                  cur->node = ++node;
>> -               cur->start = node->start << PAGE_SHIFT;
>> -               cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
>> +               cur->start = node->start;
>> +               cur->size = min(node->size, cur->remaining);
>>                  break;
>>          default:
>>                  return;
>> diff --git a/drivers/gpu/drm/i915/i915_scatterlist.c b/drivers/gpu/drm/i915/i915_scatterlist.c
>> index 756289e43dff..7defda1219d0 100644
>> --- a/drivers/gpu/drm/i915/i915_scatterlist.c
>> +++ b/drivers/gpu/drm/i915/i915_scatterlist.c
>> @@ -94,7 +94,7 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,
>>          if (!rsgt)
>>                  return ERR_PTR(-ENOMEM);
>>
>> -       i915_refct_sgt_init(rsgt, node->size << PAGE_SHIFT);
>> +       i915_refct_sgt_init(rsgt, node->size);
>>          st = &rsgt->table;
>>          /* restricted by sg_alloc_table */
>>          if (WARN_ON(overflows_type(DIV_ROUND_UP_ULL(node->size, segment_pages),
>> @@ -110,8 +110,8 @@ struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,
>>          sg = st->sgl;
>>          st->nents = 0;
>>          prev_end = (resource_size_t)-1;
>> -       block_size = node->size << PAGE_SHIFT;
>> -       offset = node->start << PAGE_SHIFT;
>> +       block_size = node->size;
>> +       offset = node->start;
>>
>>          while (block_size) {
>>                  u64 len;
>> diff --git a/drivers/gpu/drm/ttm/ttm_range_manager.c b/drivers/gpu/drm/ttm/ttm_range_manager.c
>> index 62fddcc59f02..9da6054f2955 100644
>> --- a/drivers/gpu/drm/ttm/ttm_range_manager.c
>> +++ b/drivers/gpu/drm/ttm/ttm_range_manager.c
>> @@ -83,9 +83,10 @@ static int ttm_range_man_alloc(struct ttm_resource_manager *man,
>>
>>          spin_lock(&rman->lock);
>>          ret = drm_mm_insert_node_in_range(mm, &node->mm_nodes[0],
>> -                                         PFN_UP(node->base.size),
>> -                                         bo->page_alignment, 0,
>> -                                         place->fpfn, lpfn, mode);
>> +                                         node->base.size,
>> +                                         bo->page_alignment << PAGE_SHIFT, 0,
>> +                                         place->fpfn << PAGE_SHIFT,
> place->fpfn is only u32. I assume we need some (u64) cast or so?

Good point. I've already found a couple of those, but looks like I 
missed that one.

Going to fix that.

Thanks,
Christian.

>
>> +                                         lpfn << PAGE_SHIFT, mode);
>>          spin_unlock(&rman->lock);
>>
>>          if (unlikely(ret)) {
>> @@ -94,7 +95,7 @@ static int ttm_range_man_alloc(struct ttm_resource_manager *man,
>>                  return ret;
>>          }
>>
>> -       node->base.start = node->mm_nodes[0].start;
>> +       node->base.start = node->mm_nodes[0].start >> PAGE_SHIFT;
>>          *res = &node->base;
>>          return 0;
>>   }
>> @@ -119,11 +120,10 @@ static bool ttm_range_man_intersects(struct ttm_resource_manager *man,
>>                                       size_t size)
>>   {
>>          struct drm_mm_node *node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
>> -       u32 num_pages = PFN_UP(size);
>>
>>          /* Don't evict BOs outside of the requested placement range */
>> -       if (place->fpfn >= (node->start + num_pages) ||
>> -           (place->lpfn && place->lpfn <= node->start))
>> +       if ((place->fpfn << PAGE_SHIFT) >= (node->start + size) ||
>> +           (place->lpfn && (place->lpfn << PAGE_SHIFT) <= node->start))
> Same here.
>
>>                  return false;
>>
>>          return true;
>> @@ -135,10 +135,9 @@ static bool ttm_range_man_compatible(struct ttm_resource_manager *man,
>>                                       size_t size)
>>   {
>>          struct drm_mm_node *node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
>> -       u32 num_pages = PFN_UP(size);
>>
>>          if (node->start < place->fpfn ||
>> -           (place->lpfn && (node->start + num_pages) > place->lpfn))
>> +           (place->lpfn && (node->start + size) > place->lpfn << PAGE_SHIFT))
> And here.
>
>>                  return false;
>>
>>          return true;
>> --
>> 2.34.1
>>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
index 44367f03316f..c90423cd1292 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
@@ -116,7 +116,6 @@  static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
 			      struct ttm_resource **res)
 {
 	struct amdgpu_gtt_mgr *mgr = to_gtt_mgr(man);
-	uint32_t num_pages = PFN_UP(tbo->base.size);
 	struct ttm_range_mgr_node *node;
 	int r;
 
@@ -134,17 +133,19 @@  static int amdgpu_gtt_mgr_new(struct ttm_resource_manager *man,
 	if (place->lpfn) {
 		spin_lock(&mgr->lock);
 		r = drm_mm_insert_node_in_range(&mgr->mm, &node->mm_nodes[0],
-						num_pages, tbo->page_alignment,
-						0, place->fpfn, place->lpfn,
+						tbo->base.size,
+						tbo->page_alignment << PAGE_SHIFT, 0,
+						place->fpfn << PAGE_SHIFT,
+						place->lpfn << PAGE_SHIFT,
 						DRM_MM_INSERT_BEST);
 		spin_unlock(&mgr->lock);
 		if (unlikely(r))
 			goto err_free;
 
-		node->base.start = node->mm_nodes[0].start;
+		node->base.start = node->mm_nodes[0].start >> PAGE_SHIFT;
 	} else {
 		node->mm_nodes[0].start = 0;
-		node->mm_nodes[0].size = PFN_UP(node->base.size);
+		node->mm_nodes[0].size = node->base.size;
 		node->base.start = AMDGPU_BO_INVALID_OFFSET;
 	}
 
@@ -285,8 +286,8 @@  int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
 
 	ttm_resource_manager_init(man, &adev->mman.bdev, gtt_size);
 
-	start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
-	size = (adev->gmc.gart_size >> PAGE_SHIFT) - start;
+	start = (AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS) << PAGE_SHIFT;
+	size = adev->gmc.gart_size - start;
 	drm_mm_init(&mgr->mm, start, size);
 	spin_lock_init(&mgr->lock);
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
index 5c4f93ee0c57..5c78f0b09351 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
@@ -94,8 +94,8 @@  static inline void amdgpu_res_first(struct ttm_resource *res,
 		while (start >= node->size << PAGE_SHIFT)
 			start -= node++->size << PAGE_SHIFT;
 
-		cur->start = (node->start << PAGE_SHIFT) + start;
-		cur->size = min((node->size << PAGE_SHIFT) - start, size);
+		cur->start = node->start + start;
+		cur->size = min(node->size - start, size);
 		cur->remaining = size;
 		cur->node = node;
 		break;
@@ -155,8 +155,8 @@  static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
 		node = cur->node;
 
 		cur->node = ++node;
-		cur->start = node->start << PAGE_SHIFT;
-		cur->size = min(node->size << PAGE_SHIFT, cur->remaining);
+		cur->start = node->start;
+		cur->size = min(node->size, cur->remaining);
 		break;
 	default:
 		return;
diff --git a/drivers/gpu/drm/i915/i915_scatterlist.c b/drivers/gpu/drm/i915/i915_scatterlist.c
index 756289e43dff..7defda1219d0 100644
--- a/drivers/gpu/drm/i915/i915_scatterlist.c
+++ b/drivers/gpu/drm/i915/i915_scatterlist.c
@@ -94,7 +94,7 @@  struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,
 	if (!rsgt)
 		return ERR_PTR(-ENOMEM);
 
-	i915_refct_sgt_init(rsgt, node->size << PAGE_SHIFT);
+	i915_refct_sgt_init(rsgt, node->size);
 	st = &rsgt->table;
 	/* restricted by sg_alloc_table */
 	if (WARN_ON(overflows_type(DIV_ROUND_UP_ULL(node->size, segment_pages),
@@ -110,8 +110,8 @@  struct i915_refct_sgt *i915_rsgt_from_mm_node(const struct drm_mm_node *node,
 	sg = st->sgl;
 	st->nents = 0;
 	prev_end = (resource_size_t)-1;
-	block_size = node->size << PAGE_SHIFT;
-	offset = node->start << PAGE_SHIFT;
+	block_size = node->size;
+	offset = node->start;
 
 	while (block_size) {
 		u64 len;
diff --git a/drivers/gpu/drm/ttm/ttm_range_manager.c b/drivers/gpu/drm/ttm/ttm_range_manager.c
index 62fddcc59f02..9da6054f2955 100644
--- a/drivers/gpu/drm/ttm/ttm_range_manager.c
+++ b/drivers/gpu/drm/ttm/ttm_range_manager.c
@@ -83,9 +83,10 @@  static int ttm_range_man_alloc(struct ttm_resource_manager *man,
 
 	spin_lock(&rman->lock);
 	ret = drm_mm_insert_node_in_range(mm, &node->mm_nodes[0],
-					  PFN_UP(node->base.size),
-					  bo->page_alignment, 0,
-					  place->fpfn, lpfn, mode);
+					  node->base.size,
+					  bo->page_alignment << PAGE_SHIFT, 0,
+					  place->fpfn << PAGE_SHIFT,
+					  lpfn << PAGE_SHIFT, mode);
 	spin_unlock(&rman->lock);
 
 	if (unlikely(ret)) {
@@ -94,7 +95,7 @@  static int ttm_range_man_alloc(struct ttm_resource_manager *man,
 		return ret;
 	}
 
-	node->base.start = node->mm_nodes[0].start;
+	node->base.start = node->mm_nodes[0].start >> PAGE_SHIFT;
 	*res = &node->base;
 	return 0;
 }
@@ -119,11 +120,10 @@  static bool ttm_range_man_intersects(struct ttm_resource_manager *man,
 				     size_t size)
 {
 	struct drm_mm_node *node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
-	u32 num_pages = PFN_UP(size);
 
 	/* Don't evict BOs outside of the requested placement range */
-	if (place->fpfn >= (node->start + num_pages) ||
-	    (place->lpfn && place->lpfn <= node->start))
+	if ((place->fpfn << PAGE_SHIFT) >= (node->start + size) ||
+	    (place->lpfn && (place->lpfn << PAGE_SHIFT) <= node->start))
 		return false;
 
 	return true;
@@ -135,10 +135,9 @@  static bool ttm_range_man_compatible(struct ttm_resource_manager *man,
 				     size_t size)
 {
 	struct drm_mm_node *node = &to_ttm_range_mgr_node(res)->mm_nodes[0];
-	u32 num_pages = PFN_UP(size);
 
 	if (node->start < place->fpfn ||
-	    (place->lpfn && (node->start + num_pages) > place->lpfn))
+	    (place->lpfn && (node->start + size) > place->lpfn << PAGE_SHIFT))
 		return false;
 
 	return true;