From: Jani Nikula <jani.nikula@linux.intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>,
Yury Norov <yury.norov@gmail.com>
Cc: intel-gfx@lists.freedesktop.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Subject: Re: [PATCH 1/3] bits: introduce fixed-type genmasks
Date: Wed, 24 Jan 2024 09:58:26 +0200 [thread overview]
Message-ID: <87v87jkvrx.fsf@intel.com> (raw)
In-Reply-To: <20240124050205.3646390-2-lucas.demarchi@intel.com>
On Tue, 23 Jan 2024, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> From: Yury Norov <yury.norov@gmail.com>
>
> Generalize __GENMASK() to support different types, and implement
> fixed-types versions of GENMASK() based on it. The fixed-type version
> allows more strict checks to the min/max values accepted, which is
> useful for defining registers like implemented by i915 and xe drivers
> with their REG_GENMASK*() macros.
Mmh, the commit message says the fixed-type version allows more strict
checks, but none are actually added. GENMASK_INPUT_CHECK() remains the
same.
Compared to the i915 and xe versions, this is more lax now. You could
specify GENMASK_U32(63,32) without complaints.
BR,
Jani.
>
> Signed-off-by: Yury Norov <yury.norov@gmail.com>
> ---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/include/linux/bitops.h b/include/linux/bitops.h
> index 2ba557e067fe..1db50c69cfdb 100644
> --- a/include/linux/bitops.h
> +++ b/include/linux/bitops.h
> @@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
> -#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index 7c0cf5031abe..cb94128171b2 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
> +#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> +
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
> @@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
> -#define __GENMASK(h, l) \
> - (((~UL(0)) - (UL(1) << (l)) + 1) & \
> - (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
> -#define GENMASK(h, l) \
> - (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
> +#define __GENMASK(t, h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + \
> + (((t)~0ULL - ((t)(1) << (l)) + 1) & \
> + ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
> -#define __GENMASK_ULL(h, l) \
> - (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
> - (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
> -#define GENMASK_ULL(h, l) \
> - (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
> +#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
> +#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
> +#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
> +#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
> +#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
> +#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
--
Jani Nikula, Intel
WARNING: multiple messages have this Message-ID (diff)
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>,
Yury Norov <yury.norov@gmail.com>
Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/3] bits: introduce fixed-type genmasks
Date: Wed, 24 Jan 2024 09:58:26 +0200 [thread overview]
Message-ID: <87v87jkvrx.fsf@intel.com> (raw)
In-Reply-To: <20240124050205.3646390-2-lucas.demarchi@intel.com>
On Tue, 23 Jan 2024, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> From: Yury Norov <yury.norov@gmail.com>
>
> Generalize __GENMASK() to support different types, and implement
> fixed-types versions of GENMASK() based on it. The fixed-type version
> allows more strict checks to the min/max values accepted, which is
> useful for defining registers like implemented by i915 and xe drivers
> with their REG_GENMASK*() macros.
Mmh, the commit message says the fixed-type version allows more strict
checks, but none are actually added. GENMASK_INPUT_CHECK() remains the
same.
Compared to the i915 and xe versions, this is more lax now. You could
specify GENMASK_U32(63,32) without complaints.
BR,
Jani.
>
> Signed-off-by: Yury Norov <yury.norov@gmail.com>
> ---
> include/linux/bitops.h | 1 -
> include/linux/bits.h | 22 ++++++++++++----------
> 2 files changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/include/linux/bitops.h b/include/linux/bitops.h
> index 2ba557e067fe..1db50c69cfdb 100644
> --- a/include/linux/bitops.h
> +++ b/include/linux/bitops.h
> @@ -15,7 +15,6 @@
> # define aligned_byte_mask(n) (~0xffUL << (BITS_PER_LONG - 8 - 8*(n)))
> #endif
>
> -#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> #define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long))
> #define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64))
> #define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
> diff --git a/include/linux/bits.h b/include/linux/bits.h
> index 7c0cf5031abe..cb94128171b2 100644
> --- a/include/linux/bits.h
> +++ b/include/linux/bits.h
> @@ -6,6 +6,8 @@
> #include <vdso/bits.h>
> #include <asm/bitsperlong.h>
>
> +#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
> +
> #define BIT_MASK(nr) (UL(1) << ((nr) % BITS_PER_LONG))
> #define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
> #define BIT_ULL_MASK(nr) (ULL(1) << ((nr) % BITS_PER_LONG_LONG))
> @@ -30,16 +32,16 @@
> #define GENMASK_INPUT_CHECK(h, l) 0
> #endif
>
> -#define __GENMASK(h, l) \
> - (((~UL(0)) - (UL(1) << (l)) + 1) & \
> - (~UL(0) >> (BITS_PER_LONG - 1 - (h))))
> -#define GENMASK(h, l) \
> - (GENMASK_INPUT_CHECK(h, l) + __GENMASK(h, l))
> +#define __GENMASK(t, h, l) \
> + (GENMASK_INPUT_CHECK(h, l) + \
> + (((t)~0ULL - ((t)(1) << (l)) + 1) & \
> + ((t)~0ULL >> (BITS_PER_TYPE(t) - 1 - (h)))))
>
> -#define __GENMASK_ULL(h, l) \
> - (((~ULL(0)) - (ULL(1) << (l)) + 1) & \
> - (~ULL(0) >> (BITS_PER_LONG_LONG - 1 - (h))))
> -#define GENMASK_ULL(h, l) \
> - (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l))
> +#define GENMASK(h, l) __GENMASK(unsigned long, h, l)
> +#define GENMASK_ULL(h, l) __GENMASK(unsigned long long, h, l)
> +#define GENMASK_U8(h, l) __GENMASK(u8, h, l)
> +#define GENMASK_U16(h, l) __GENMASK(u16, h, l)
> +#define GENMASK_U32(h, l) __GENMASK(u32, h, l)
> +#define GENMASK_U64(h, l) __GENMASK(u64, h, l)
>
> #endif /* __LINUX_BITS_H */
--
Jani Nikula, Intel
next prev parent reply other threads:[~2024-01-24 7:58 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-24 5:02 [PATCH 0/3] Fixed-type GENMASK/BIT Lucas De Marchi
2024-01-24 5:02 ` Lucas De Marchi
2024-01-24 5:02 ` [PATCH 1/3] bits: introduce fixed-type genmasks Lucas De Marchi
2024-01-24 5:02 ` Lucas De Marchi
2024-01-24 7:58 ` Jani Nikula [this message]
2024-01-24 7:58 ` Jani Nikula
2024-01-24 14:03 ` Lucas De Marchi
2024-01-24 14:03 ` Lucas De Marchi
2024-01-24 15:27 ` Yury Norov
2024-01-24 15:27 ` Yury Norov
2024-01-24 15:49 ` Gustavo Sousa
2024-01-24 15:49 ` Gustavo Sousa
2024-01-25 9:56 ` Jani Nikula
2024-01-25 9:56 ` Jani Nikula
2024-01-29 14:49 ` Lucas De Marchi
2024-01-29 14:49 ` Lucas De Marchi
2024-01-29 15:11 ` Yury Norov
2024-01-29 15:11 ` Yury Norov
2024-01-24 5:02 ` [PATCH 2/3] bits: Introduce fixed-type BIT Lucas De Marchi
2024-01-24 5:02 ` Lucas De Marchi
2024-02-09 16:48 ` Yury Norov
2024-01-24 5:02 ` [PATCH 3/3] drm/i915: Convert REG_GENMASK* to fixed-width GENMASK_* Lucas De Marchi
2024-01-24 5:02 ` Lucas De Marchi
2024-01-24 8:04 ` Jani Nikula
2024-01-24 8:04 ` Jani Nikula
2024-01-24 6:15 ` ✗ Fi.CI.CHECKPATCH: warning for Fixed-type GENMASK/BIT Patchwork
2024-01-24 6:15 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-01-24 6:15 ` ✓ Fi.CI.BAT: success " Patchwork
2024-01-24 6:16 ` ✓ CI.Patch_applied: " Patchwork
2024-01-24 6:16 ` ✗ CI.checkpatch: warning " Patchwork
2024-01-24 6:17 ` ✓ CI.KUnit: success " Patchwork
2024-01-24 6:24 ` ✓ CI.Build: " Patchwork
2024-01-24 6:25 ` ✓ CI.Hooks: " Patchwork
2024-01-24 6:26 ` ✗ CI.checksparse: warning " Patchwork
2024-01-24 6:49 ` ✓ CI.BAT: success " Patchwork
2024-01-24 13:46 ` ✗ Fi.CI.IGT: failure " Patchwork
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=87v87jkvrx.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lucas.demarchi@intel.com \
--cc=yury.norov@gmail.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.