kunit: drm: make DRM buddy test compatible with other pages sizes

Message ID 20230418171524.274386-1-npache@redhat.com
State New
Headers
Series kunit: drm: make DRM buddy test compatible with other pages sizes |

Commit Message

Nico Pache April 18, 2023, 5:15 p.m. UTC
  The DRM buddy test uses a fixed 12 bit shift to covert from pages to 
bytes. This number is then used to confirm that (chunk_size < PAGE_SIZE)
which can lead to a failing drm_buddy_init on systems with PAGE_SIZE > 4k.

Fixes: 92937f170d3f ("drm/selftests: add drm buddy alloc range testcase")
Signed-off-by: Nico Pache <npache@redhat.com>
---
 drivers/gpu/drm/tests/drm_buddy_test.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

David Gow April 19, 2023, 8:27 a.m. UTC | #1
On Wed, 19 Apr 2023 at 01:15, Nico Pache <npache@redhat.com> wrote:
>
> The DRM buddy test uses a fixed 12 bit shift to covert from pages to
> bytes. This number is then used to confirm that (chunk_size < PAGE_SIZE)
> which can lead to a failing drm_buddy_init on systems with PAGE_SIZE > 4k.
>
> Fixes: 92937f170d3f ("drm/selftests: add drm buddy alloc range testcase")
> Signed-off-by: Nico Pache <npache@redhat.com>
> ---

Nice catch! This makes sense to me (and doesn't regress anything on my
various 4k-page machines, at least).

Reviewed-by: David Gow <davidgow@google.com>

Cheers,
-- David


>  drivers/gpu/drm/tests/drm_buddy_test.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/tests/drm_buddy_test.c b/drivers/gpu/drm/tests/drm_buddy_test.c
> index 09ee6f6af896..a62b2690d3c2 100644
> --- a/drivers/gpu/drm/tests/drm_buddy_test.c
> +++ b/drivers/gpu/drm/tests/drm_buddy_test.c
> @@ -318,8 +318,8 @@ static void mm_config(u64 *size, u64 *chunk_size)
>         s &= -ms;
>
>         /* Convert from pages to bytes */
> -       *chunk_size = (u64)ms << 12;
> -       *size = (u64)s << 12;
> +       *chunk_size = (u64)ms << PAGE_SHIFT;
> +       *size = (u64)s << PAGE_SHIFT;
>  }
>
>  static void drm_test_buddy_alloc_pathological(struct kunit *test)
> --
> 2.39.2
>
  
Christian König April 19, 2023, 8:30 a.m. UTC | #2
Am 18.04.23 um 19:15 schrieb Nico Pache:
> The DRM buddy test uses a fixed 12 bit shift to covert from pages to
> bytes. This number is then used to confirm that (chunk_size < PAGE_SIZE)
> which can lead to a failing drm_buddy_init on systems with PAGE_SIZE > 4k.

Since the buddy allocator is used for resources which are independent of 
the CPU PAGE size the later check is actually the broken one.

E.g. neither in the buddy allocator nor in it's test cases we should 
have any of PAGE_SHIFT or PAGE_SIZE.

Otherwise the allocator wouldn't work correctly on systems with a 
PAGE_SIZE different than 4k.

Regards,
Christian.

>
> Fixes: 92937f170d3f ("drm/selftests: add drm buddy alloc range testcase")
> Signed-off-by: Nico Pache <npache@redhat.com>
> ---
>   drivers/gpu/drm/tests/drm_buddy_test.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/tests/drm_buddy_test.c b/drivers/gpu/drm/tests/drm_buddy_test.c
> index 09ee6f6af896..a62b2690d3c2 100644
> --- a/drivers/gpu/drm/tests/drm_buddy_test.c
> +++ b/drivers/gpu/drm/tests/drm_buddy_test.c
> @@ -318,8 +318,8 @@ static void mm_config(u64 *size, u64 *chunk_size)
>   	s &= -ms;
>   
>   	/* Convert from pages to bytes */
> -	*chunk_size = (u64)ms << 12;
> -	*size = (u64)s << 12;
> +	*chunk_size = (u64)ms << PAGE_SHIFT;
> +	*size = (u64)s << PAGE_SHIFT;
>   }
>   
>   static void drm_test_buddy_alloc_pathological(struct kunit *test)
  
Nico Pache June 26, 2023, 3:27 p.m. UTC | #3
Hi Christian,

Thanks for the information! I am not very familiar with the inner
workings of DRM, so I'm not really in a position to make any large or
systematic changes to the test regarding the points you made. I am
mainly trying to allow the tests to be run on more diverse hardware.
From the looks of it this test has been adapted from an older test, so
perhaps this rule was set in place in the past.

Either way, I dont think my changes are going to break anything, so
for the time being I think this small change is the best approach.
Please let me know if you think otherwise.

David, do you still have this on your radar? We've been carrying this
as a RHEL-only since I originally posted it and have not noticed any
issues due to it.

Cheers,
-- Nico

On Wed, Apr 19, 2023 at 4:30 AM Christian König
<christian.koenig@amd.com> wrote:
>
> Am 18.04.23 um 19:15 schrieb Nico Pache:
> > The DRM buddy test uses a fixed 12 bit shift to covert from pages to
> > bytes. This number is then used to confirm that (chunk_size < PAGE_SIZE)
> > which can lead to a failing drm_buddy_init on systems with PAGE_SIZE > 4k.
>
> Since the buddy allocator is used for resources which are independent of
> the CPU PAGE size the later check is actually the broken one.
>
> E.g. neither in the buddy allocator nor in it's test cases we should
> have any of PAGE_SHIFT or PAGE_SIZE.
>
> Otherwise the allocator wouldn't work correctly on systems with a
> PAGE_SIZE different than 4k.
>
> Regards,
> Christian.
>
> >
> > Fixes: 92937f170d3f ("drm/selftests: add drm buddy alloc range testcase")
> > Signed-off-by: Nico Pache <npache@redhat.com>
> > ---
> >   drivers/gpu/drm/tests/drm_buddy_test.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/tests/drm_buddy_test.c b/drivers/gpu/drm/tests/drm_buddy_test.c
> > index 09ee6f6af896..a62b2690d3c2 100644
> > --- a/drivers/gpu/drm/tests/drm_buddy_test.c
> > +++ b/drivers/gpu/drm/tests/drm_buddy_test.c
> > @@ -318,8 +318,8 @@ static void mm_config(u64 *size, u64 *chunk_size)
> >       s &= -ms;
> >
> >       /* Convert from pages to bytes */
> > -     *chunk_size = (u64)ms << 12;
> > -     *size = (u64)s << 12;
> > +     *chunk_size = (u64)ms << PAGE_SHIFT;
> > +     *size = (u64)s << PAGE_SHIFT;
> >   }
> >
> >   static void drm_test_buddy_alloc_pathological(struct kunit *test)
>
  

Patch

diff --git a/drivers/gpu/drm/tests/drm_buddy_test.c b/drivers/gpu/drm/tests/drm_buddy_test.c
index 09ee6f6af896..a62b2690d3c2 100644
--- a/drivers/gpu/drm/tests/drm_buddy_test.c
+++ b/drivers/gpu/drm/tests/drm_buddy_test.c
@@ -318,8 +318,8 @@  static void mm_config(u64 *size, u64 *chunk_size)
 	s &= -ms;
 
 	/* Convert from pages to bytes */
-	*chunk_size = (u64)ms << 12;
-	*size = (u64)s << 12;
+	*chunk_size = (u64)ms << PAGE_SHIFT;
+	*size = (u64)s << PAGE_SHIFT;
 }
 
 static void drm_test_buddy_alloc_pathological(struct kunit *test)