All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <yury.norov@gmail.com>
To: Luo Jie <quic_luoj@quicinc.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Julia Lawall <Julia.Lawall@inria.fr>,
	Nicolas Palix <nicolas.palix@imag.fr>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
	Oliver Upton <oliver.upton@linux.dev>,
	Joey Gouly <joey.gouly@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Zenghui Yu <yuzenghui@huawei.com>,
	linux-kernel@vger.kernel.org, cocci@inria.fr,
	linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
	andrew@lunn.ch, quic_kkumarcs@quicinc.com,
	quic_linchen@quicinc.com, quic_leiwei@quicinc.com,
	quic_suruchia@quicinc.com, quic_pavir@quicinc.com
Subject: Re: [cocci] [PATCH v3 1/6] bitfield: Add FIELD_MODIFY() helper
Date: Fri, 18 Apr 2025 13:11:59 -0400	[thread overview]
Message-ID: <aAKH37xa1brIAXfs@yury> (raw)
In-Reply-To: <20250417-field_modify-v3-1-6f7992aafcb7@quicinc.com>

On Thu, Apr 17, 2025 at 06:47:08PM +0800, Luo Jie wrote:
> Add a helper for replacing the contents of bitfield in memory
> with the specified value.
> 
> Even though a helper xxx_replace_bits() is available, it is not
> well documented, and only reports errors at the run time, which
> will not be helpful to catch possible overflow errors due to
> incorrect parameter types used.
> 
> Add the helper FIELD_MODIFY() to the FIELD_XXX family of bitfield
> macros. It is functionally similar as xxx_replace_bits(), and in
> addition adds the compile time type checking.

This paragraph duplicates the above. I'll drop it and take this
patch to bitmap-for-next. Regarding the rest of the series - it's up
to ARM64 and Cocci maintainers if they want them or not.

Thanks for the work!

Thanks,
Yury
 
> FIELD_MODIFY(REG_FIELD_C, &reg, c) is the wrapper of the code below.
> reg &= ~REG_FIELD_C;
> reg |= FIELD_PREP(REG_FIELD_C, c);
> 
> Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
> ---
>  include/linux/bitfield.h | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h
> index 63928f173223..2eaefa76f759 100644
> --- a/include/linux/bitfield.h
> +++ b/include/linux/bitfield.h
> @@ -8,6 +8,7 @@
>  #define _LINUX_BITFIELD_H
>  
>  #include <linux/build_bug.h>
> +#include <linux/typecheck.h>
>  #include <asm/byteorder.h>
>  
>  /*
> @@ -38,8 +39,7 @@
>   *	  FIELD_PREP(REG_FIELD_D, 0x40);
>   *
>   * Modify:
> - *  reg &= ~REG_FIELD_C;
> - *  reg |= FIELD_PREP(REG_FIELD_C, c);
> + *  FIELD_MODIFY(REG_FIELD_C, &reg, c);
>   */
>  
>  #define __bf_shf(x) (__builtin_ffsll(x) - 1)
> @@ -156,6 +156,23 @@
>  		(typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask));	\
>  	})
>  
> +/**
> + * FIELD_MODIFY() - modify a bitfield element
> + * @_mask: shifted mask defining the field's length and position
> + * @_reg_p: pointer to the memory that should be updated
> + * @_val: value to store in the bitfield
> + *
> + * FIELD_MODIFY() modifies the set of bits in @_reg_p specified by @_mask,
> + * by replacing them with the bitfield value passed in as @_val.
> + */
> +#define FIELD_MODIFY(_mask, _reg_p, _val)				\
> +	({								\
> +		typecheck_pointer(_reg_p);				\
> +		__BF_FIELD_CHECK(_mask, *(_reg_p), _val, "FIELD_MODIFY: ");		\
> +		*(_reg_p) &= ~(_mask);							\
> +		*(_reg_p) |= (((typeof(_mask))(_val) << __bf_shf(_mask)) & (_mask));	\
> +	})
> +
>  extern void __compiletime_error("value doesn't fit into mask")
>  __field_overflow(void);
>  extern void __compiletime_error("bad bitfield mask")
> 
> -- 
> 2.34.1

WARNING: multiple messages have this Message-ID (diff)
From: Yury Norov <yury.norov@gmail.com>
To: Luo Jie <quic_luoj@quicinc.com>
Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Julia Lawall <Julia.Lawall@inria.fr>,
	Nicolas Palix <nicolas.palix@imag.fr>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
	Oliver Upton <oliver.upton@linux.dev>,
	Joey Gouly <joey.gouly@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Zenghui Yu <yuzenghui@huawei.com>,
	linux-kernel@vger.kernel.org, cocci@inria.fr,
	linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev,
	andrew@lunn.ch, quic_kkumarcs@quicinc.com,
	quic_linchen@quicinc.com, quic_leiwei@quicinc.com,
	quic_suruchia@quicinc.com, quic_pavir@quicinc.com
Subject: Re: [PATCH v3 1/6] bitfield: Add FIELD_MODIFY() helper
Date: Fri, 18 Apr 2025 13:11:59 -0400	[thread overview]
Message-ID: <aAKH37xa1brIAXfs@yury> (raw)
In-Reply-To: <20250417-field_modify-v3-1-6f7992aafcb7@quicinc.com>

On Thu, Apr 17, 2025 at 06:47:08PM +0800, Luo Jie wrote:
> Add a helper for replacing the contents of bitfield in memory
> with the specified value.
> 
> Even though a helper xxx_replace_bits() is available, it is not
> well documented, and only reports errors at the run time, which
> will not be helpful to catch possible overflow errors due to
> incorrect parameter types used.
> 
> Add the helper FIELD_MODIFY() to the FIELD_XXX family of bitfield
> macros. It is functionally similar as xxx_replace_bits(), and in
> addition adds the compile time type checking.

This paragraph duplicates the above. I'll drop it and take this
patch to bitmap-for-next. Regarding the rest of the series - it's up
to ARM64 and Cocci maintainers if they want them or not.

Thanks for the work!

Thanks,
Yury
 
> FIELD_MODIFY(REG_FIELD_C, &reg, c) is the wrapper of the code below.
> reg &= ~REG_FIELD_C;
> reg |= FIELD_PREP(REG_FIELD_C, c);
> 
> Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
> ---
>  include/linux/bitfield.h | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h
> index 63928f173223..2eaefa76f759 100644
> --- a/include/linux/bitfield.h
> +++ b/include/linux/bitfield.h
> @@ -8,6 +8,7 @@
>  #define _LINUX_BITFIELD_H
>  
>  #include <linux/build_bug.h>
> +#include <linux/typecheck.h>
>  #include <asm/byteorder.h>
>  
>  /*
> @@ -38,8 +39,7 @@
>   *	  FIELD_PREP(REG_FIELD_D, 0x40);
>   *
>   * Modify:
> - *  reg &= ~REG_FIELD_C;
> - *  reg |= FIELD_PREP(REG_FIELD_C, c);
> + *  FIELD_MODIFY(REG_FIELD_C, &reg, c);
>   */
>  
>  #define __bf_shf(x) (__builtin_ffsll(x) - 1)
> @@ -156,6 +156,23 @@
>  		(typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask));	\
>  	})
>  
> +/**
> + * FIELD_MODIFY() - modify a bitfield element
> + * @_mask: shifted mask defining the field's length and position
> + * @_reg_p: pointer to the memory that should be updated
> + * @_val: value to store in the bitfield
> + *
> + * FIELD_MODIFY() modifies the set of bits in @_reg_p specified by @_mask,
> + * by replacing them with the bitfield value passed in as @_val.
> + */
> +#define FIELD_MODIFY(_mask, _reg_p, _val)				\
> +	({								\
> +		typecheck_pointer(_reg_p);				\
> +		__BF_FIELD_CHECK(_mask, *(_reg_p), _val, "FIELD_MODIFY: ");		\
> +		*(_reg_p) &= ~(_mask);							\
> +		*(_reg_p) |= (((typeof(_mask))(_val) << __bf_shf(_mask)) & (_mask));	\
> +	})
> +
>  extern void __compiletime_error("value doesn't fit into mask")
>  __field_overflow(void);
>  extern void __compiletime_error("bad bitfield mask")
> 
> -- 
> 2.34.1

  reply	other threads:[~2025-04-23  8:51 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-17 10:47 [cocci] [PATCH v3 0/6] Add FIELD_MODIFY() helper Luo Jie
2025-04-17 10:47 ` Luo Jie
2025-04-17 10:47 ` [cocci] [PATCH v3 1/6] bitfield: " Luo Jie
2025-04-17 10:47   ` Luo Jie
2025-04-18 17:11   ` Yury Norov [this message]
2025-04-18 17:11     ` Yury Norov
2025-04-23 13:05     ` [cocci] " Jie Luo
2025-04-23 13:05       ` Jie Luo
2025-04-17 10:47 ` [cocci] [PATCH v3 2/6] coccinelle: misc: Add field_modify script Luo Jie
2025-04-17 10:47   ` Luo Jie
2025-04-23 11:01   ` [cocci] " Markus Elfring
2025-04-23 13:04     ` Jie Luo
2025-04-23 16:35       ` Markus Elfring
2025-05-19 13:44         ` Luo Jie
2025-05-19 15:39           ` Julia Lawall
2025-04-17 10:47 ` [cocci] [PATCH v3 3/6] arm64: tlb: Convert the opencoded field modify Luo Jie
2025-04-17 10:47   ` Luo Jie
2025-04-17 18:11   ` [cocci] " Russell King (Oracle)
2025-04-17 18:11     ` Russell King (Oracle)
2025-04-23 13:15     ` [cocci] " Jie Luo
2025-04-23 13:15       ` Jie Luo
2025-04-24 15:24       ` [cocci] " Keller, Jacob E
2025-04-23 16:54     ` Keller, Jacob E
2025-04-17 10:47 ` [cocci] [PATCH v3 4/6] arm64: nvhe: " Luo Jie
2025-04-17 10:47   ` Luo Jie
2025-04-17 11:23   ` [cocci] " Marc Zyngier
2025-04-17 11:23     ` Marc Zyngier
2025-04-18 15:14     ` [cocci] " Yury Norov
2025-04-18 15:14       ` Yury Norov
2025-04-18 15:34       ` [cocci] " Marc Zyngier
2025-04-18 15:34         ` Marc Zyngier
2025-04-23 17:48       ` [cocci] " Russell King (Oracle)
2025-04-23 17:48         ` Russell King (Oracle)
2025-04-23 18:27         ` [cocci] " Yury Norov
2025-04-23 18:27           ` Yury Norov
2025-04-23 19:11           ` [cocci] " Russell King (Oracle)
2025-04-23 19:11             ` Russell King (Oracle)
2025-04-23 19:40             ` [cocci] " Yury Norov
2025-04-23 19:40               ` Yury Norov
2025-04-17 10:47 ` [cocci] [PATCH v3 5/6] arm64: kvm: " Luo Jie
2025-04-17 10:47   ` Luo Jie
2025-04-17 10:47 ` [cocci] [PATCH v3 6/6] arm64: mm: " Luo Jie
2025-04-17 10:47   ` Luo Jie
2025-04-17 11:10 ` [cocci] [PATCH v3 0/6] Add FIELD_MODIFY() helper Marc Zyngier
2025-04-17 11:10   ` Marc Zyngier
2025-04-17 17:22   ` [cocci] " Andrew Lunn
2025-04-17 17:22     ` Andrew Lunn
2025-04-17 17:45     ` [cocci] " Marc Zyngier
2025-04-17 17:45       ` Marc Zyngier
2025-04-18 15:08       ` [cocci] " Yury Norov
2025-04-18 15:08         ` Yury Norov
2025-04-18 15:35         ` [cocci] " Marc Zyngier
2025-04-18 15:35           ` Marc Zyngier
2025-04-18 17:04           ` [cocci] " Yury Norov
2025-04-18 17:04             ` Yury Norov
2025-04-23 13:19             ` [cocci] " Jie Luo
2025-04-23 13:19               ` Jie Luo
2025-04-23 17:44         ` [cocci] " Russell King (Oracle)
2025-04-23 17:44           ` Russell King (Oracle)
2025-04-23 18:44           ` [cocci] " Yury Norov
2025-04-23 18:44             ` Yury Norov

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=aAKH37xa1brIAXfs@yury \
    --to=yury.norov@gmail.com \
    --cc=Julia.Lawall@inria.fr \
    --cc=andrew@lunn.ch \
    --cc=catalin.marinas@arm.com \
    --cc=cocci@inria.fr \
    --cc=joey.gouly@arm.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=maz@kernel.org \
    --cc=nicolas.palix@imag.fr \
    --cc=oliver.upton@linux.dev \
    --cc=quic_kkumarcs@quicinc.com \
    --cc=quic_leiwei@quicinc.com \
    --cc=quic_linchen@quicinc.com \
    --cc=quic_luoj@quicinc.com \
    --cc=quic_pavir@quicinc.com \
    --cc=quic_suruchia@quicinc.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    --cc=yuzenghui@huawei.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.