[PATCH v4 1/1] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2024-01-14 Thread Dipam Turkar
Introduce unit tests for the drm_mode_create_dvi_i_properties() function to 
ensure
the proper creation of DVI-I specific connector properties and success if 
called 
multiple times.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/tests/drm_connector_test.c | 58 ++
 1 file changed, 58 insertions(+)

diff --git a/drivers/gpu/drm/tests/drm_connector_test.c 
b/drivers/gpu/drm/tests/drm_connector_test.c
index c66aa2dc8d9d..217c0988171e 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -4,6 +4,9 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 
@@ -70,7 +73,62 @@ static struct kunit_suite 
drm_get_tv_mode_from_name_test_suite = {
.test_cases = drm_get_tv_mode_from_name_tests,
 };
 
+/*
+ * Test that drm_mode_create_dvi_i_properties() succeeds and
+ * DVI-I subconnector and select subconectors properties have
+ * been created.
+ */
+static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
+{
+   struct drm_device *drm;
+   struct device *dev;
+
+   dev = drm_kunit_helper_alloc_device(test);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
+
+   drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, 
DRIVER_MODESET);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
+
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+   KUNIT_EXPECT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_select_subconnector_property);
+   KUNIT_EXPECT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_subconnector_property);
+}
+
+/*
+ * Test that drm_mode_create_dvi_i_properties() doesn't fail if called twice.
+ */
+static void drm_test_mode_create_dvi_i_properties_repeated(struct kunit *test)
+{
+   struct drm_device *drm;
+   struct device *dev;
+
+   dev = drm_kunit_helper_alloc_device(test);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
+
+   drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, 
DRIVER_MODESET);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
+
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+   KUNIT_EXPECT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_select_subconnector_property);
+   KUNIT_EXPECT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_subconnector_property);
+
+   /* Expect the function to return 0 if called twice. */
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+}
+
+static struct kunit_case drm_mode_create_dvi_i_properties_tests[] = {
+   KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
+   KUNIT_CASE(drm_test_mode_create_dvi_i_properties_repeated),
+   { }
+};
+
+static struct kunit_suite drm_mode_create_dvi_i_properties_test_suite = {
+   .name = "drm_mode_create_dvi_i_properties",
+   .test_cases = drm_mode_create_dvi_i_properties_tests,
+};
+
 kunit_test_suite(drm_get_tv_mode_from_name_test_suite);
+kunit_test_suite(drm_mode_create_dvi_i_properties_test_suite);
 
 MODULE_AUTHOR("Maxime Ripard ");
 MODULE_LICENSE("GPL");
-- 
2.34.1



[PATCH 1/1] Refactor radeon driver to use drm_gem_create_map_offset() instead of its custom implementation for associating GEM object with a fake offset. Since, we already have a generic implementatio

2024-01-06 Thread Dipam Turkar
Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/radeon/radeon_drv.c |  2 +-
 drivers/gpu/drm/radeon/radeon_gem.c | 24 ++--
 2 files changed, 3 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_drv.c 
b/drivers/gpu/drm/radeon/radeon_drv.c
index fa531493b111..f590ed65ffba 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -578,7 +578,7 @@ static const struct drm_driver kms_driver = {
.ioctls = radeon_ioctls_kms,
.num_ioctls = ARRAY_SIZE(radeon_ioctls_kms),
.dumb_create = radeon_mode_dumb_create,
-   .dumb_map_offset = radeon_mode_dumb_mmap,
+   .dumb_map_offset = drm_gem_dumb_map_offset,
.fops = &radeon_driver_kms_fops,
 
.gem_prime_import_sg_table = radeon_gem_prime_import_sg_table,
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c 
b/drivers/gpu/drm/radeon/radeon_gem.c
index 358d19242f4b..99794c550d2c 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -31,6 +31,7 @@
 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -480,33 +481,12 @@ int radeon_gem_set_domain_ioctl(struct drm_device *dev, 
void *data,
return r;
 }
 
-int radeon_mode_dumb_mmap(struct drm_file *filp,
- struct drm_device *dev,
- uint32_t handle, uint64_t *offset_p)
-{
-   struct drm_gem_object *gobj;
-   struct radeon_bo *robj;
-
-   gobj = drm_gem_object_lookup(filp, handle);
-   if (gobj == NULL) {
-   return -ENOENT;
-   }
-   robj = gem_to_radeon_bo(gobj);
-   if (radeon_ttm_tt_has_userptr(robj->rdev, robj->tbo.ttm)) {
-   drm_gem_object_put(gobj);
-   return -EPERM;
-   }
-   *offset_p = radeon_bo_mmap_offset(robj);
-   drm_gem_object_put(gobj);
-   return 0;
-}
-
 int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data,
  struct drm_file *filp)
 {
struct drm_radeon_gem_mmap *args = data;
 
-   return radeon_mode_dumb_mmap(filp, dev, args->handle, &args->addr_ptr);
+   return drm_gem_dumb_map_offset(filp, dev, args->handle, 
&args->addr_ptr);
 }
 
 int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
-- 
2.34.1



[PATCH v3 1/1] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2024-01-06 Thread Dipam Turkar
---
 drivers/gpu/drm/tests/drm_connector_test.c | 20 
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/tests/drm_connector_test.c 
b/drivers/gpu/drm/tests/drm_connector_test.c
index c66aa2dc8d9d..aad63839b5e5 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -4,6 +4,9 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 
@@ -58,10 +61,27 @@ static void drm_test_get_tv_mode_from_name_truncated(struct 
kunit *test)
KUNIT_EXPECT_LT(test, ret, 0);
 };
 
+static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
+{
+   struct drm_device *drm;
+   struct device *dev;
+
+   dev = drm_kunit_helper_alloc_device(test);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
+
+   drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, 
DRIVER_MODESET);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
+
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_select_subconnector_property);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_subconnector_property);
+}
+
 static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
 drm_get_tv_mode_from_name_valid_gen_params),
KUNIT_CASE(drm_test_get_tv_mode_from_name_truncated),
+   KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
{ }
 };
 
-- 
2.34.1



Re: [PATCH v2] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2023-12-23 Thread Dipam Turkar
I needed some help regarding introducing a separate test for testing if the
function still works if called a second time as suggested. Wouldn't we need
to call it on the same object we called in the first time. So, that will
bring redundancy in the two functions. Is this correct? Or am I
understanding this wrong?

Thanks and regards
Dipam Turkar

On Tue, Nov 28, 2023 at 8:39 PM Maxime Ripard  wrote:

> Hi,
>
> On Sat, Nov 11, 2023 at 12:54:53AM +0530, Dipam Turkar wrote:
> > Introduce unit tests for the drm_mode_create_dvi_i_properties() function
> to ensure
> > the proper creation of DVI-I specific connector properties.
> >
> > Signed-off-by: Dipam Turkar 
> > ---
> >  drivers/gpu/drm/tests/drm_connector_test.c | 38 ++
> >  1 file changed, 38 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/tests/drm_connector_test.c
> b/drivers/gpu/drm/tests/drm_connector_test.c
> > index c66aa2dc8d9d..9ac1fd32c579 100644
> > --- a/drivers/gpu/drm/tests/drm_connector_test.c
> > +++ b/drivers/gpu/drm/tests/drm_connector_test.c
> > @@ -4,6 +4,9 @@
> >   */
> >
> >  #include 
> > +#include 
> > +#include 
> > +#include 
> >
> >  #include 
> >
> > @@ -58,6 +61,30 @@ static void
> drm_test_get_tv_mode_from_name_truncated(struct kunit *test)
> >   KUNIT_EXPECT_LT(test, ret, 0);
> >  };
> >
> > +/*
> > + * Test that drm_mode_create_dvi_i_properties() succeeds and
> > + * DVI-I subconnector and select subconectors properties have
> > + * been created.
> > + */
> > +static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
> > +{
> > + struct drm_device *drm;
> > + struct device *dev;
> > +
> > + dev = drm_kunit_helper_alloc_device(test);
> > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
> > +
> > + drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm),
> 0, DRIVER_MODESET);
> > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
> > +
> > + KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
> > + KUNIT_EXPECT_NOT_ERR_OR_NULL(test,
> drm->mode_config.dvi_i_select_subconnector_property);
> > + KUNIT_EXPECT_NOT_ERR_OR_NULL(test,
> drm->mode_config.dvi_i_subconnector_property);
> > +
> > + // Expect the function to return 0 if called twice.
>
> This is not the proper comment format
>
> > + KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
>
> This should be in a separate test, with a separate description. We want
> to test two things: that the function works well, and that the function
> still works if we call it a second time.
>
> > +}
> > +
> >  static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
> >   KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
> >drm_get_tv_mode_from_name_valid_gen_params),
> > @@ -70,7 +97,18 @@ static struct kunit_suite
> drm_get_tv_mode_from_name_test_suite = {
> >   .test_cases = drm_get_tv_mode_from_name_tests,
> >  };
>
> The test should be next to the test suite definition
>
> > +static struct kunit_case drm_connector_tests[] = {
> > + KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
> > + { }
> > +};
> > +
> > +static struct kunit_suite drm_connector_test_suite = {
> > + .name = "drm_connector",
>
> That's too generic, the test suite is only about
> drm_mode_create_dvi_i_properties(), not drm_connector in general.
>
> > + .test_cases = drm_connector_tests,
> > +};
> > +
> >  kunit_test_suite(drm_get_tv_mode_from_name_test_suite);
> > +kunit_test_suite(drm_connector_test_suite);
>
> kunit_test_suites
>
> Maxime
>


Re: [PATCH v2] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2023-11-28 Thread Dipam Turkar
Will work on that.

Dipam Turkar

On Tue, Nov 28, 2023 at 8:39 PM Maxime Ripard  wrote:

> Hi,
>
> On Sat, Nov 11, 2023 at 12:54:53AM +0530, Dipam Turkar wrote:
> > Introduce unit tests for the drm_mode_create_dvi_i_properties() function
> to ensure
> > the proper creation of DVI-I specific connector properties.
> >
> > Signed-off-by: Dipam Turkar 
> > ---
> >  drivers/gpu/drm/tests/drm_connector_test.c | 38 ++
> >  1 file changed, 38 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/tests/drm_connector_test.c
> b/drivers/gpu/drm/tests/drm_connector_test.c
> > index c66aa2dc8d9d..9ac1fd32c579 100644
> > --- a/drivers/gpu/drm/tests/drm_connector_test.c
> > +++ b/drivers/gpu/drm/tests/drm_connector_test.c
> > @@ -4,6 +4,9 @@
> >   */
> >
> >  #include 
> > +#include 
> > +#include 
> > +#include 
> >
> >  #include 
> >
> > @@ -58,6 +61,30 @@ static void
> drm_test_get_tv_mode_from_name_truncated(struct kunit *test)
> >   KUNIT_EXPECT_LT(test, ret, 0);
> >  };
> >
> > +/*
> > + * Test that drm_mode_create_dvi_i_properties() succeeds and
> > + * DVI-I subconnector and select subconectors properties have
> > + * been created.
> > + */
> > +static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
> > +{
> > + struct drm_device *drm;
> > + struct device *dev;
> > +
> > + dev = drm_kunit_helper_alloc_device(test);
> > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
> > +
> > + drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm),
> 0, DRIVER_MODESET);
> > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
> > +
> > + KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
> > + KUNIT_EXPECT_NOT_ERR_OR_NULL(test,
> drm->mode_config.dvi_i_select_subconnector_property);
> > + KUNIT_EXPECT_NOT_ERR_OR_NULL(test,
> drm->mode_config.dvi_i_subconnector_property);
> > +
> > + // Expect the function to return 0 if called twice.
>
> This is not the proper comment format
>
> > + KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
>
> This should be in a separate test, with a separate description. We want
> to test two things: that the function works well, and that the function
> still works if we call it a second time.
>
> > +}
> > +
> >  static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
> >   KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
> >drm_get_tv_mode_from_name_valid_gen_params),
> > @@ -70,7 +97,18 @@ static struct kunit_suite
> drm_get_tv_mode_from_name_test_suite = {
> >   .test_cases = drm_get_tv_mode_from_name_tests,
> >  };
>
> The test should be next to the test suite definition
>
> > +static struct kunit_case drm_connector_tests[] = {
> > + KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
> > + { }
> > +};
> > +
> > +static struct kunit_suite drm_connector_test_suite = {
> > + .name = "drm_connector",
>
> That's too generic, the test suite is only about
> drm_mode_create_dvi_i_properties(), not drm_connector in general.
>
> > + .test_cases = drm_connector_tests,
> > +};
> > +
> >  kunit_test_suite(drm_get_tv_mode_from_name_test_suite);
> > +kunit_test_suite(drm_connector_test_suite);
>
> kunit_test_suites
>
> Maxime
>


Re: [PATCH v2] Remove custom dumb_map_offset implementation in msm driver

2023-11-15 Thread Dipam Turkar
They are not outdated, my bad. I went through the locks' code and saw that
they have been updated. But they are probably not necessary here as most of
the drivers do not use any form of locking in their implementations. The
generic implementations drm_gem_dumb_map_offset() and
drm_gem_ttm_dumb_map_offset() do not have any locking mechanisms either.

Thanks and regards
Dipam Turkar

On Thu, Nov 16, 2023 at 12:16 AM Dipam Turkar  wrote:

> They are not outdated, my bad. I went through the locks' code and saw that
> they have been updated. But they are probably not necessary here as most of
> the drivers do not use any form of locking in their implementations. The
> generic implementations drm_gem_dumb_map_offset() and
> drm_gem_ttm_dumb_map_offset() do not have any locking mechanisms either.
>
> Thanks and regards
> Dipam Turkar
>
> On Wed, Nov 15, 2023 at 8:37 PM Dmitry Baryshkov <
> dmitry.barysh...@linaro.org> wrote:
>
>> On Wed, 15 Nov 2023 at 16:30, Dipam Turkar  wrote:
>> >
>> > Make msm use drm_gem_create_map_offset() instead of its custom
>> > implementation for associating GEM object with a fake offset. Since,
>> > we already have this generic implementation, we don't need the custom
>> > implementation and it is better to standardize the code for GEM based
>> > drivers. This also removes the outdated locking leftovers.
>>
>> Why are they outdated?
>>
>> >
>> > Signed-off-by: Dipam Turkar 
>> > ---
>> >  drivers/gpu/drm/msm/msm_drv.c |  2 +-
>> >  drivers/gpu/drm/msm/msm_gem.c | 21 -
>> >  drivers/gpu/drm/msm/msm_gem.h |  2 --
>> >  3 files changed, 1 insertion(+), 24 deletions(-)
>> >
>> > Changes in v2:
>> > Modify commit message to include the absence of internal locking
>> leftovers
>> > around allocating a fake offset in msm_gem_mmap_offset() in the generic
>> > implementation drm_gem_create_map_offset().
>> >
>> > diff --git a/drivers/gpu/drm/msm/msm_drv.c
>> b/drivers/gpu/drm/msm/msm_drv.c
>> > index a428951ee539..86a15992c717 100644
>> > --- a/drivers/gpu/drm/msm/msm_drv.c
>> > +++ b/drivers/gpu/drm/msm/msm_drv.c
>> > @@ -1085,7 +1085,7 @@ static const struct drm_driver msm_driver = {
>> > .open   = msm_open,
>> > .postclose  = msm_postclose,
>> > .dumb_create= msm_gem_dumb_create,
>> > -   .dumb_map_offset= msm_gem_dumb_map_offset,
>> > +   .dumb_map_offset= drm_gem_dumb_map_offset,
>> > .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
>> >  #ifdef CONFIG_DEBUG_FS
>> > .debugfs_init   = msm_debugfs_init,
>> > diff --git a/drivers/gpu/drm/msm/msm_gem.c
>> b/drivers/gpu/drm/msm/msm_gem.c
>> > index db1e748daa75..489694ef79cb 100644
>> > --- a/drivers/gpu/drm/msm/msm_gem.c
>> > +++ b/drivers/gpu/drm/msm/msm_gem.c
>> > @@ -671,27 +671,6 @@ int msm_gem_dumb_create(struct drm_file *file,
>> struct drm_device *dev,
>> > MSM_BO_SCANOUT | MSM_BO_WC, &args->handle,
>> "dumb");
>> >  }
>> >
>> > -int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device
>> *dev,
>> > -   uint32_t handle, uint64_t *offset)
>> > -{
>> > -   struct drm_gem_object *obj;
>> > -   int ret = 0;
>> > -
>> > -   /* GEM does all our handle to object mapping */
>> > -   obj = drm_gem_object_lookup(file, handle);
>> > -   if (obj == NULL) {
>> > -   ret = -ENOENT;
>> > -   goto fail;
>> > -   }
>> > -
>> > -   *offset = msm_gem_mmap_offset(obj);
>> > -
>> > -   drm_gem_object_put(obj);
>> > -
>> > -fail:
>> > -   return ret;
>> > -}
>> > -
>> >  static void *get_vaddr(struct drm_gem_object *obj, unsigned madv)
>> >  {
>> > struct msm_gem_object *msm_obj = to_msm_bo(obj);
>> > diff --git a/drivers/gpu/drm/msm/msm_gem.h
>> b/drivers/gpu/drm/msm/msm_gem.h
>> > index 8ddef5443140..dc74a0ef865d 100644
>> > --- a/drivers/gpu/drm/msm/msm_gem.h
>> > +++ b/drivers/gpu/drm/msm/msm_gem.h
>> > @@ -139,8 +139,6 @@ struct page **msm_gem_pin_pages(struct
>> drm_gem_object *obj);
>> >  void msm_gem_unpin_pages(struct drm_gem_object *obj);
>> >  int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
>> > struct drm_mode_create_dumb *args);
>> > -int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device
>> *dev,
>> > -   uint32_t handle, uint64_t *offset);
>> >  void *msm_gem_get_vaddr_locked(struct drm_gem_object *obj);
>> >  void *msm_gem_get_vaddr(struct drm_gem_object *obj);
>> >  void *msm_gem_get_vaddr_active(struct drm_gem_object *obj);
>> > --
>> > 2.34.1
>> >
>>
>>
>> --
>> With best wishes
>> Dmitry
>>
>


Re: [PATCH v2] Remove custom dumb_map_offset implementation in msm driver

2023-11-15 Thread Dipam Turkar
They are not outdated, my bad. I went through the locks' code and saw that
they have been updated. But they are probably not necessary here as most of
the drivers do not use any form of locking in their implementations. The
generic implementations drm_gem_dumb_map_offset() and
drm_gem_ttm_dumb_map_offset() do not have any locking mechanisms either.

Thanks and regards
Dipam Turkar

On Wed, Nov 15, 2023 at 8:37 PM Dmitry Baryshkov <
dmitry.barysh...@linaro.org> wrote:

> On Wed, 15 Nov 2023 at 16:30, Dipam Turkar  wrote:
> >
> > Make msm use drm_gem_create_map_offset() instead of its custom
> > implementation for associating GEM object with a fake offset. Since,
> > we already have this generic implementation, we don't need the custom
> > implementation and it is better to standardize the code for GEM based
> > drivers. This also removes the outdated locking leftovers.
>
> Why are they outdated?
>
> >
> > Signed-off-by: Dipam Turkar 
> > ---
> >  drivers/gpu/drm/msm/msm_drv.c |  2 +-
> >  drivers/gpu/drm/msm/msm_gem.c | 21 -
> >  drivers/gpu/drm/msm/msm_gem.h |  2 --
> >  3 files changed, 1 insertion(+), 24 deletions(-)
> >
> > Changes in v2:
> > Modify commit message to include the absence of internal locking
> leftovers
> > around allocating a fake offset in msm_gem_mmap_offset() in the generic
> > implementation drm_gem_create_map_offset().
> >
> > diff --git a/drivers/gpu/drm/msm/msm_drv.c
> b/drivers/gpu/drm/msm/msm_drv.c
> > index a428951ee539..86a15992c717 100644
> > --- a/drivers/gpu/drm/msm/msm_drv.c
> > +++ b/drivers/gpu/drm/msm/msm_drv.c
> > @@ -1085,7 +1085,7 @@ static const struct drm_driver msm_driver = {
> > .open   = msm_open,
> > .postclose  = msm_postclose,
> > .dumb_create= msm_gem_dumb_create,
> > -   .dumb_map_offset= msm_gem_dumb_map_offset,
> > +   .dumb_map_offset= drm_gem_dumb_map_offset,
> > .gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
> >  #ifdef CONFIG_DEBUG_FS
> > .debugfs_init   = msm_debugfs_init,
> > diff --git a/drivers/gpu/drm/msm/msm_gem.c
> b/drivers/gpu/drm/msm/msm_gem.c
> > index db1e748daa75..489694ef79cb 100644
> > --- a/drivers/gpu/drm/msm/msm_gem.c
> > +++ b/drivers/gpu/drm/msm/msm_gem.c
> > @@ -671,27 +671,6 @@ int msm_gem_dumb_create(struct drm_file *file,
> struct drm_device *dev,
> > MSM_BO_SCANOUT | MSM_BO_WC, &args->handle,
> "dumb");
> >  }
> >
> > -int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device
> *dev,
> > -   uint32_t handle, uint64_t *offset)
> > -{
> > -   struct drm_gem_object *obj;
> > -   int ret = 0;
> > -
> > -   /* GEM does all our handle to object mapping */
> > -   obj = drm_gem_object_lookup(file, handle);
> > -   if (obj == NULL) {
> > -   ret = -ENOENT;
> > -   goto fail;
> > -   }
> > -
> > -   *offset = msm_gem_mmap_offset(obj);
> > -
> > -   drm_gem_object_put(obj);
> > -
> > -fail:
> > -   return ret;
> > -}
> > -
> >  static void *get_vaddr(struct drm_gem_object *obj, unsigned madv)
> >  {
> > struct msm_gem_object *msm_obj = to_msm_bo(obj);
> > diff --git a/drivers/gpu/drm/msm/msm_gem.h
> b/drivers/gpu/drm/msm/msm_gem.h
> > index 8ddef5443140..dc74a0ef865d 100644
> > --- a/drivers/gpu/drm/msm/msm_gem.h
> > +++ b/drivers/gpu/drm/msm/msm_gem.h
> > @@ -139,8 +139,6 @@ struct page **msm_gem_pin_pages(struct
> drm_gem_object *obj);
> >  void msm_gem_unpin_pages(struct drm_gem_object *obj);
> >  int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
> > struct drm_mode_create_dumb *args);
> > -int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device
> *dev,
> > -   uint32_t handle, uint64_t *offset);
> >  void *msm_gem_get_vaddr_locked(struct drm_gem_object *obj);
> >  void *msm_gem_get_vaddr(struct drm_gem_object *obj);
> >  void *msm_gem_get_vaddr_active(struct drm_gem_object *obj);
> > --
> > 2.34.1
> >
>
>
> --
> With best wishes
> Dmitry
>


[PATCH v2] Remove custom dumb_map_offset implementation in msm driver

2023-11-15 Thread Dipam Turkar
Make msm use drm_gem_create_map_offset() instead of its custom
implementation for associating GEM object with a fake offset. Since,
we already have this generic implementation, we don't need the custom
implementation and it is better to standardize the code for GEM based
drivers. This also removes the outdated locking leftovers.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/msm/msm_drv.c |  2 +-
 drivers/gpu/drm/msm/msm_gem.c | 21 -
 drivers/gpu/drm/msm/msm_gem.h |  2 --
 3 files changed, 1 insertion(+), 24 deletions(-)

Changes in v2:
Modify commit message to include the absence of internal locking leftovers
around allocating a fake offset in msm_gem_mmap_offset() in the generic
implementation drm_gem_create_map_offset().

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index a428951ee539..86a15992c717 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1085,7 +1085,7 @@ static const struct drm_driver msm_driver = {
.open   = msm_open,
.postclose  = msm_postclose,
.dumb_create= msm_gem_dumb_create,
-   .dumb_map_offset= msm_gem_dumb_map_offset,
+   .dumb_map_offset= drm_gem_dumb_map_offset,
.gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
 #ifdef CONFIG_DEBUG_FS
.debugfs_init   = msm_debugfs_init,
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index db1e748daa75..489694ef79cb 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -671,27 +671,6 @@ int msm_gem_dumb_create(struct drm_file *file, struct 
drm_device *dev,
MSM_BO_SCANOUT | MSM_BO_WC, &args->handle, "dumb");
 }
 
-int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
-   uint32_t handle, uint64_t *offset)
-{
-   struct drm_gem_object *obj;
-   int ret = 0;
-
-   /* GEM does all our handle to object mapping */
-   obj = drm_gem_object_lookup(file, handle);
-   if (obj == NULL) {
-   ret = -ENOENT;
-   goto fail;
-   }
-
-   *offset = msm_gem_mmap_offset(obj);
-
-   drm_gem_object_put(obj);
-
-fail:
-   return ret;
-}
-
 static void *get_vaddr(struct drm_gem_object *obj, unsigned madv)
 {
struct msm_gem_object *msm_obj = to_msm_bo(obj);
diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h
index 8ddef5443140..dc74a0ef865d 100644
--- a/drivers/gpu/drm/msm/msm_gem.h
+++ b/drivers/gpu/drm/msm/msm_gem.h
@@ -139,8 +139,6 @@ struct page **msm_gem_pin_pages(struct drm_gem_object *obj);
 void msm_gem_unpin_pages(struct drm_gem_object *obj);
 int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
struct drm_mode_create_dumb *args);
-int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
-   uint32_t handle, uint64_t *offset);
 void *msm_gem_get_vaddr_locked(struct drm_gem_object *obj);
 void *msm_gem_get_vaddr(struct drm_gem_object *obj);
 void *msm_gem_get_vaddr_active(struct drm_gem_object *obj);
-- 
2.34.1



[PATCH] Remove custom dumb_map_offset implementation in msm driver

2023-11-14 Thread Dipam Turkar
Make msm use drm_gem_create_map_offset() instead of its custom
implementation for associating GEM object with a fake offset. Since,
we already have this generic implementation, we don't need the custom
implementation and it is better to standardize the code for GEM based drivers.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/msm/msm_drv.c |  2 +-
 drivers/gpu/drm/msm/msm_gem.c | 21 -
 drivers/gpu/drm/msm/msm_gem.h |  2 --
 3 files changed, 1 insertion(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index a428951ee539..86a15992c717 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1085,7 +1085,7 @@ static const struct drm_driver msm_driver = {
.open   = msm_open,
.postclose  = msm_postclose,
.dumb_create= msm_gem_dumb_create,
-   .dumb_map_offset= msm_gem_dumb_map_offset,
+   .dumb_map_offset= drm_gem_dumb_map_offset,
.gem_prime_import_sg_table = msm_gem_prime_import_sg_table,
 #ifdef CONFIG_DEBUG_FS
.debugfs_init   = msm_debugfs_init,
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index db1e748daa75..489694ef79cb 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -671,27 +671,6 @@ int msm_gem_dumb_create(struct drm_file *file, struct 
drm_device *dev,
MSM_BO_SCANOUT | MSM_BO_WC, &args->handle, "dumb");
 }
 
-int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
-   uint32_t handle, uint64_t *offset)
-{
-   struct drm_gem_object *obj;
-   int ret = 0;
-
-   /* GEM does all our handle to object mapping */
-   obj = drm_gem_object_lookup(file, handle);
-   if (obj == NULL) {
-   ret = -ENOENT;
-   goto fail;
-   }
-
-   *offset = msm_gem_mmap_offset(obj);
-
-   drm_gem_object_put(obj);
-
-fail:
-   return ret;
-}
-
 static void *get_vaddr(struct drm_gem_object *obj, unsigned madv)
 {
struct msm_gem_object *msm_obj = to_msm_bo(obj);
diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h
index 8ddef5443140..dc74a0ef865d 100644
--- a/drivers/gpu/drm/msm/msm_gem.h
+++ b/drivers/gpu/drm/msm/msm_gem.h
@@ -139,8 +139,6 @@ struct page **msm_gem_pin_pages(struct drm_gem_object *obj);
 void msm_gem_unpin_pages(struct drm_gem_object *obj);
 int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
struct drm_mode_create_dumb *args);
-int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
-   uint32_t handle, uint64_t *offset);
 void *msm_gem_get_vaddr_locked(struct drm_gem_object *obj);
 void *msm_gem_get_vaddr(struct drm_gem_object *obj);
 void *msm_gem_get_vaddr_active(struct drm_gem_object *obj);
-- 
2.34.1



[PATCH v2] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2023-11-10 Thread Dipam Turkar
Introduce unit tests for the drm_mode_create_dvi_i_properties() function to 
ensure
the proper creation of DVI-I specific connector properties.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/tests/drm_connector_test.c | 38 ++
 1 file changed, 38 insertions(+)

diff --git a/drivers/gpu/drm/tests/drm_connector_test.c 
b/drivers/gpu/drm/tests/drm_connector_test.c
index c66aa2dc8d9d..9ac1fd32c579 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -4,6 +4,9 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 
@@ -58,6 +61,30 @@ static void drm_test_get_tv_mode_from_name_truncated(struct 
kunit *test)
KUNIT_EXPECT_LT(test, ret, 0);
 };
 
+/*
+ * Test that drm_mode_create_dvi_i_properties() succeeds and
+ * DVI-I subconnector and select subconectors properties have
+ * been created.
+ */
+static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
+{
+   struct drm_device *drm;
+   struct device *dev;
+
+   dev = drm_kunit_helper_alloc_device(test);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
+
+   drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, 
DRIVER_MODESET);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
+
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+   KUNIT_EXPECT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_select_subconnector_property);
+   KUNIT_EXPECT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_subconnector_property);
+
+   // Expect the function to return 0 if called twice.
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+}
+
 static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
 drm_get_tv_mode_from_name_valid_gen_params),
@@ -70,7 +97,18 @@ static struct kunit_suite 
drm_get_tv_mode_from_name_test_suite = {
.test_cases = drm_get_tv_mode_from_name_tests,
 };
 
+static struct kunit_case drm_connector_tests[] = {
+   KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
+   { }
+};
+
+static struct kunit_suite drm_connector_test_suite = {
+   .name = "drm_connector",
+   .test_cases = drm_connector_tests,
+};
+
 kunit_test_suite(drm_get_tv_mode_from_name_test_suite);
+kunit_test_suite(drm_connector_test_suite);
 
 MODULE_AUTHOR("Maxime Ripard ");
 MODULE_LICENSE("GPL");
-- 
2.34.1



[PATCH v2] Remove custom dumb_map_offset implementations in i915 driver

2023-11-10 Thread Dipam Turkar
Making i915 use drm_gem_create_mmap_offset() instead of its custom
implementations for associating GEM object with a fake offset.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 21 -
 drivers/gpu/drm/i915/gem/i915_gem_mman.h |  4 
 drivers/gpu/drm/i915/i915_driver.c   |  3 ++-
 3 files changed, 2 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index aa4d842d4c5a..71d621a1f249 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -771,27 +771,6 @@ __assign_mmap_offset_handle(struct drm_file *file,
return err;
 }
 
-int
-i915_gem_dumb_mmap_offset(struct drm_file *file,
- struct drm_device *dev,
- u32 handle,
- u64 *offset)
-{
-   struct drm_i915_private *i915 = to_i915(dev);
-   enum i915_mmap_type mmap_type;
-
-   if (HAS_LMEM(to_i915(dev)))
-   mmap_type = I915_MMAP_TYPE_FIXED;
-   else if (pat_enabled())
-   mmap_type = I915_MMAP_TYPE_WC;
-   else if (!i915_ggtt_has_aperture(to_gt(i915)->ggtt))
-   return -ENODEV;
-   else
-   mmap_type = I915_MMAP_TYPE_GTT;
-
-   return __assign_mmap_offset_handle(file, handle, mmap_type, offset);
-}
-
 /**
  * i915_gem_mmap_offset_ioctl - prepare an object for GTT mmap'ing
  * @dev: DRM device
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.h 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.h
index 196417fd0f5c..253435795caf 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.h
@@ -20,10 +20,6 @@ struct mutex;
 int i915_gem_mmap_gtt_version(void);
 int i915_gem_mmap(struct file *filp, struct vm_area_struct *vma);
 
-int i915_gem_dumb_mmap_offset(struct drm_file *file_priv,
- struct drm_device *dev,
- u32 handle, u64 *offset);
-
 void __i915_gem_object_release_mmap_gtt(struct drm_i915_gem_object *obj);
 void i915_gem_object_release_mmap_gtt(struct drm_i915_gem_object *obj);
 
diff --git a/drivers/gpu/drm/i915/i915_driver.c 
b/drivers/gpu/drm/i915/i915_driver.c
index d50347e5773a..48d7e53c49d6 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -42,6 +42,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -1826,7 +1827,7 @@ static const struct drm_driver i915_drm_driver = {
.gem_prime_import = i915_gem_prime_import,
 
.dumb_create = i915_gem_dumb_create,
-   .dumb_map_offset = i915_gem_dumb_mmap_offset,
+   .dumb_map_offset = drm_gem_dumb_map_offset,
 
.ioctls = i915_ioctls,
.num_ioctls = ARRAY_SIZE(i915_ioctls),
-- 
2.34.1



[PATCH] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2023-11-10 Thread Dipam Turkar
Introduce unit tests for the drm_mode_create_dvi_i_properties() function to 
ensure
the proper creation of DVI-I specific connector properties.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/tests/drm_connector_test.c | 20 
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/tests/drm_connector_test.c 
b/drivers/gpu/drm/tests/drm_connector_test.c
index c66aa2dc8d9d..aad63839b5e5 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -4,6 +4,9 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 
@@ -58,10 +61,27 @@ static void drm_test_get_tv_mode_from_name_truncated(struct 
kunit *test)
KUNIT_EXPECT_LT(test, ret, 0);
 };
 
+static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
+{
+   struct drm_device *drm;
+   struct device *dev;
+
+   dev = drm_kunit_helper_alloc_device(test);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
+
+   drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, 
DRIVER_MODESET);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
+
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_select_subconnector_property);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_subconnector_property);
+}
+
 static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
 drm_get_tv_mode_from_name_valid_gen_params),
KUNIT_CASE(drm_test_get_tv_mode_from_name_truncated),
+   KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
{ }
 };
 
-- 
2.34.1



[PATCH] Remove custom dumb_map_offset implementations in i915 driver

2023-11-10 Thread Dipam Turkar
Making i915 use drm_gem_create_mmap_offset() instead of its custom
implementations for associating GEM object with a fake offset.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/i915/gem/i915_gem_mman.c | 192 ---
 drivers/gpu/drm/i915/gem/i915_gem_mman.h |   4 -
 drivers/gpu/drm/i915/i915_driver.c   |   3 +-
 3 files changed, 2 insertions(+), 197 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_mman.c 
b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
index aa4d842d4c5a..6b73fe509270 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_mman.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_mman.c
@@ -600,198 +600,6 @@ void i915_gem_object_release_mmap_offset(struct 
drm_i915_gem_object *obj)
spin_unlock(&obj->mmo.lock);
 }
 
-static struct i915_mmap_offset *
-lookup_mmo(struct drm_i915_gem_object *obj,
-  enum i915_mmap_type mmap_type)
-{
-   struct rb_node *rb;
-
-   spin_lock(&obj->mmo.lock);
-   rb = obj->mmo.offsets.rb_node;
-   while (rb) {
-   struct i915_mmap_offset *mmo =
-   rb_entry(rb, typeof(*mmo), offset);
-
-   if (mmo->mmap_type == mmap_type) {
-   spin_unlock(&obj->mmo.lock);
-   return mmo;
-   }
-
-   if (mmo->mmap_type < mmap_type)
-   rb = rb->rb_right;
-   else
-   rb = rb->rb_left;
-   }
-   spin_unlock(&obj->mmo.lock);
-
-   return NULL;
-}
-
-static struct i915_mmap_offset *
-insert_mmo(struct drm_i915_gem_object *obj, struct i915_mmap_offset *mmo)
-{
-   struct rb_node *rb, **p;
-
-   spin_lock(&obj->mmo.lock);
-   rb = NULL;
-   p = &obj->mmo.offsets.rb_node;
-   while (*p) {
-   struct i915_mmap_offset *pos;
-
-   rb = *p;
-   pos = rb_entry(rb, typeof(*pos), offset);
-
-   if (pos->mmap_type == mmo->mmap_type) {
-   spin_unlock(&obj->mmo.lock);
-   drm_vma_offset_remove(obj->base.dev->vma_offset_manager,
- &mmo->vma_node);
-   kfree(mmo);
-   return pos;
-   }
-
-   if (pos->mmap_type < mmo->mmap_type)
-   p = &rb->rb_right;
-   else
-   p = &rb->rb_left;
-   }
-   rb_link_node(&mmo->offset, rb, p);
-   rb_insert_color(&mmo->offset, &obj->mmo.offsets);
-   spin_unlock(&obj->mmo.lock);
-
-   return mmo;
-}
-
-static struct i915_mmap_offset *
-mmap_offset_attach(struct drm_i915_gem_object *obj,
-  enum i915_mmap_type mmap_type,
-  struct drm_file *file)
-{
-   struct drm_i915_private *i915 = to_i915(obj->base.dev);
-   struct i915_mmap_offset *mmo;
-   int err;
-
-   GEM_BUG_ON(obj->ops->mmap_offset || obj->ops->mmap_ops);
-
-   mmo = lookup_mmo(obj, mmap_type);
-   if (mmo)
-   goto out;
-
-   mmo = kmalloc(sizeof(*mmo), GFP_KERNEL);
-   if (!mmo)
-   return ERR_PTR(-ENOMEM);
-
-   mmo->obj = obj;
-   mmo->mmap_type = mmap_type;
-   drm_vma_node_reset(&mmo->vma_node);
-
-   err = drm_vma_offset_add(obj->base.dev->vma_offset_manager,
-&mmo->vma_node, obj->base.size / PAGE_SIZE);
-   if (likely(!err))
-   goto insert;
-
-   /* Attempt to reap some mmap space from dead objects */
-   err = intel_gt_retire_requests_timeout(to_gt(i915), 
MAX_SCHEDULE_TIMEOUT,
-  NULL);
-   if (err)
-   goto err;
-
-   i915_gem_drain_freed_objects(i915);
-   err = drm_vma_offset_add(obj->base.dev->vma_offset_manager,
-&mmo->vma_node, obj->base.size / PAGE_SIZE);
-   if (err)
-   goto err;
-
-insert:
-   mmo = insert_mmo(obj, mmo);
-   GEM_BUG_ON(lookup_mmo(obj, mmap_type) != mmo);
-out:
-   if (file)
-   drm_vma_node_allow_once(&mmo->vma_node, file);
-   return mmo;
-
-err:
-   kfree(mmo);
-   return ERR_PTR(err);
-}
-
-static int
-__assign_mmap_offset(struct drm_i915_gem_object *obj,
-enum i915_mmap_type mmap_type,
-u64 *offset, struct drm_file *file)
-{
-   struct i915_mmap_offset *mmo;
-
-   if (i915_gem_object_never_mmap(obj))
-   return -ENODEV;
-
-   if (obj->ops->mmap_offset)  {
-   if (mmap_type != I915_MMAP_TYPE_FIXED)
-   return -ENODEV;
-
-   *offset = obj->ops->mmap_offset(obj);
-   return 0;
-   }
-
-   if (mmap_type == I915_MMAP_TYPE_

[PATCH] drm/tests: Add KUnit tests for drm_mode_create_dvi_i_properties()

2023-10-28 Thread Dipam Turkar
Introduce unit tests for the drm_mode_create_dvi_i_properties() function to 
ensure
the proper creation of DVI-I specific connector properties.

Signed-off-by: Dipam Turkar 
---
 drivers/gpu/drm/tests/drm_connector_test.c | 20 
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/tests/drm_connector_test.c 
b/drivers/gpu/drm/tests/drm_connector_test.c
index c66aa2dc8d9d..aad63839b5e5 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -4,6 +4,9 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 
 #include 
 
@@ -58,10 +61,27 @@ static void drm_test_get_tv_mode_from_name_truncated(struct 
kunit *test)
KUNIT_EXPECT_LT(test, ret, 0);
 };
 
+static void drm_test_mode_create_dvi_i_properties(struct kunit *test)
+{
+   struct drm_device *drm;
+   struct device *dev;
+
+   dev = drm_kunit_helper_alloc_device(test);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
+
+   drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, 
DRIVER_MODESET);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
+
+   KUNIT_EXPECT_EQ(test, drm_mode_create_dvi_i_properties(drm), 0);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_select_subconnector_property);
+   KUNIT_ASSERT_NOT_ERR_OR_NULL(test, 
drm->mode_config.dvi_i_subconnector_property);
+}
+
 static struct kunit_case drm_get_tv_mode_from_name_tests[] = {
KUNIT_CASE_PARAM(drm_test_get_tv_mode_from_name_valid,
 drm_get_tv_mode_from_name_valid_gen_params),
KUNIT_CASE(drm_test_get_tv_mode_from_name_truncated),
+   KUNIT_CASE(drm_test_mode_create_dvi_i_properties),
{ }
 };
 
-- 
2.34.1