Re: [PATCH 1/4] drm/i915/pmdemand: convert to_intel_pmdemand_state() to a function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Quoting Jani Nikula (2024-12-31 13:27:37-03:00)
>In preparation for making struct intel_pmdemand_state an opaque type,
>convert to_intel_pmdemand_state() to a function.
>
>Cc: Gustavo Sousa <gustavo.sousa@xxxxxxxxx>
>Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx>

This looks good to me, so

Reviewed-by: Gustavo Sousa <gustavo.sousa@xxxxxxxxx>

, but I'm also taking this opportunity to reply to your comment below.

>
>---
>
>This is the simplest change. There could be other alternatives.
>
>Outside of intel_pmdemand.c, this is only used to convert
>display.pmdemand.obj.state to struct intel_pmdemand_state *. Maybe we
>could just pass the global object or state pointer instead? Or we could
>have a function to get the current state from, say, struct
>intel_display? What we currently have is a bit cumbersome.

I like the idea of the exposed interface receiving only pointers to the
generic types and that we make the necessary conversion internally.

We currently are only using to_intel_pmdemand_state() to be able to pass
the correct argument to other functions exposed by the pmdemand header.
Not sure there is much benefit in doing that except for some level of
compile-time type-safety?

So, I would generally say:

- For functions that can operate directly on the display.*.obj member
  (e.g. hardware state readout), we just ask for the display struct
  pointer as a parameter.

- For functions that potentially add the global state to the atomic
  state, we also ask for the pointer to the atomic state.

- For functions that operate only on the state bits and that could be
  called for a state instance that could either be the current one (or
  old) or some new state during a commit, we ask for a pointer to the
  intel_global_state struct.

--
Gustavo Sousa

>---
> drivers/gpu/drm/i915/display/intel_pmdemand.c | 5 +++++
> drivers/gpu/drm/i915/display/intel_pmdemand.h | 3 +--
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_pmdemand.c b/drivers/gpu/drm/i915/display/intel_pmdemand.c
>index cdd314956a31..69b40b3735b3 100644
>--- a/drivers/gpu/drm/i915/display/intel_pmdemand.c
>+++ b/drivers/gpu/drm/i915/display/intel_pmdemand.c
>@@ -15,6 +15,11 @@
> #include "intel_pmdemand.h"
> #include "skl_watermark.h"
> 
>+struct intel_pmdemand_state *to_intel_pmdemand_state(struct intel_global_state *obj_state)
>+{
>+        return container_of(obj_state, struct intel_pmdemand_state, base);
>+}
>+
> static struct intel_global_state *
> intel_pmdemand_duplicate_state(struct intel_global_obj *obj)
> {
>diff --git a/drivers/gpu/drm/i915/display/intel_pmdemand.h b/drivers/gpu/drm/i915/display/intel_pmdemand.h
>index a1c49efdc493..89296364ec3b 100644
>--- a/drivers/gpu/drm/i915/display/intel_pmdemand.h
>+++ b/drivers/gpu/drm/i915/display/intel_pmdemand.h
>@@ -43,8 +43,7 @@ struct intel_pmdemand_state {
>         struct pmdemand_params params;
> };
> 
>-#define to_intel_pmdemand_state(global_state) \
>-        container_of_const((global_state), struct intel_pmdemand_state, base)
>+struct intel_pmdemand_state *to_intel_pmdemand_state(struct intel_global_state *obj_state);
> 
> void intel_pmdemand_init_early(struct drm_i915_private *i915);
> int intel_pmdemand_init(struct drm_i915_private *i915);
>-- 
>2.39.5
>




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux