public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>,
	Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
	David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Subject: Re: [Intel-gfx] [RESEND PATCH] drm/i915: constify pointers to hwmon_channel_info
Date: Fri, 18 Aug 2023 14:03:19 +0300	[thread overview]
Message-ID: <87a5uo8vew.fsf@intel.com> (raw)
In-Reply-To: <87a5xskbny.fsf@intel.com>

On Thu, 25 May 2023, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> On Thu, 11 May 2023, Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote:
>> Statically allocated array of pointers to hwmon_channel_info can be made
>> const for safety.
>
> Btw if you want to further make things const, the compound literals
> defined by HWMON_CHANNEL_INFO() still end up mutable, even if they're
> only referenced inline using a const pointer. If possible, would be nice
> to add const there too.

Krzysztof, can I persuade you to follow up on this one? ;)

With HWMON_CHANNEL_INFO defined like this:

#define HWMON_CHANNEL_INFO(stype, ...)	\
	(&(struct hwmon_channel_info) {	\
		.type = hwmon_##stype,	\
		.config = (u32 []) {	\
			__VA_ARGS__, 0	\
		}			\
	})

and initializers like this all over the kernel:

static const struct hwmon_channel_info * const hwm_info[] = {
	HWMON_CHANNEL_INFO(in, HWMON_I_INPUT),
	HWMON_CHANNEL_INFO(power, HWMON_P_MAX | HWMON_P_RATED_MAX | HWMON_P_CRIT),
	HWMON_CHANNEL_INFO(energy, HWMON_E_INPUT),
	HWMON_CHANNEL_INFO(curr, HWMON_C_CRIT),
	NULL
};

You'll actually end up with *mutable non-const* struct
hwmon_channel_info's being allocated in .data sections, and having the
const pointers in the arrays point at the mutable stuff. Check with
readelf or objdump.

To put all of it in .rodata, you'd need to make the compound literals
const too:

 #define HWMON_CHANNEL_INFO(stype, ...)	\
-	(&(struct hwmon_channel_info) {	\
+	(&(const struct hwmon_channel_info) {	\
 		.type = hwmon_##stype,	\

But I'm not up for going throw all of the use sites to see if they can
all be const.


BR,
Jani.



>
> BR,
> Jani.
>
>>
>> Acked-by: Jani Nikula <jani.nikula@intel.com>
>> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>> ---
>>  drivers/gpu/drm/i915/i915_hwmon.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_hwmon.c b/drivers/gpu/drm/i915/i915_hwmon.c
>> index 8e7dccc8d3a0..e99e8c97ef01 100644
>> --- a/drivers/gpu/drm/i915/i915_hwmon.c
>> +++ b/drivers/gpu/drm/i915/i915_hwmon.c
>> @@ -267,7 +267,7 @@ static const struct attribute_group *hwm_groups[] = {
>>  	NULL
>>  };
>>  
>> -static const struct hwmon_channel_info *hwm_info[] = {
>> +static const struct hwmon_channel_info * const hwm_info[] = {
>>  	HWMON_CHANNEL_INFO(in, HWMON_I_INPUT),
>>  	HWMON_CHANNEL_INFO(power, HWMON_P_MAX | HWMON_P_RATED_MAX | HWMON_P_CRIT),
>>  	HWMON_CHANNEL_INFO(energy, HWMON_E_INPUT),
>> @@ -275,7 +275,7 @@ static const struct hwmon_channel_info *hwm_info[] = {
>>  	NULL
>>  };
>>  
>> -static const struct hwmon_channel_info *hwm_gt_info[] = {
>> +static const struct hwmon_channel_info * const hwm_gt_info[] = {
>>  	HWMON_CHANNEL_INFO(energy, HWMON_E_INPUT),
>>  	NULL
>>  };

-- 
Jani Nikula, Intel Open Source Graphics Center

      reply	other threads:[~2023-08-18 11:04 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-11 17:54 [RESEND PATCH] drm/i915: constify pointers to hwmon_channel_info Krzysztof Kozlowski
2023-05-17  9:28 ` Jani Nikula
2023-05-17  9:30   ` Krzysztof Kozlowski
2023-05-17  9:38     ` Jani Nikula
2023-05-23  9:49       ` Jani Nikula
2023-05-18 23:54 ` [Intel-gfx] " Andi Shyti
2023-05-25  9:22 ` Jani Nikula
2023-08-18 11:03   ` Jani Nikula [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87a5uo8vew.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=airlied@gmail.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=tvrtko.ursulin@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox