diff mbox series

[v2] kbuild: simplify access to the kernel's version

Message ID 20210212162924.2269887-1-sashal@kernel.org (mailing list archive)
State New
Headers show
Series [v2] kbuild: simplify access to the kernel's version | expand

Commit Message

Sasha Levin Feb. 12, 2021, 4:29 p.m. UTC
Instead of storing the version in a single integer and having various
kernel (and userspace) code how it's constructed, export individual
(major, patchlevel, sublevel) components and simplify kernel code that
uses it.

This should also make it easier on userspace.

Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 Makefile                                       | 5 ++++-
 drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++--
 drivers/usb/core/hcd.c                         | 4 ++--
 drivers/usb/gadget/udc/aspeed-vhub/hub.c       | 4 ++--
 include/linux/usb/composite.h                  | 4 ++--
 kernel/sys.c                                   | 2 +-
 6 files changed, 13 insertions(+), 10 deletions(-)

Comments

Greg Kroah-Hartman Feb. 12, 2021, 4:37 p.m. UTC | #1
On Fri, Feb 12, 2021 at 11:29:24AM -0500, Sasha Levin wrote:
> Instead of storing the version in a single integer and having various
> kernel (and userspace) code how it's constructed, export individual
> (major, patchlevel, sublevel) components and simplify kernel code that
> uses it.
> 
> This should also make it easier on userspace.
> 
> Signed-off-by: Sasha Levin <sashal@kernel.org>

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Masahiro Yamada Feb. 13, 2021, 4:40 a.m. UTC | #2
On Sat, Feb 13, 2021 at 1:29 AM Sasha Levin <sashal@kernel.org> wrote:
>
> Instead of storing the version in a single integer and having various
> kernel (and userspace) code how it's constructed, export individual
> (major, patchlevel, sublevel) components and simplify kernel code that
> uses it.
>
> This should also make it easier on userspace.
>
> Signed-off-by: Sasha Levin <sashal@kernel.org>
> ---
>  Makefile                                       | 5 ++++-
>  drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++--
>  drivers/usb/core/hcd.c                         | 4 ++--
>  drivers/usb/gadget/udc/aspeed-vhub/hub.c       | 4 ++--
>  include/linux/usb/composite.h                  | 4 ++--
>  kernel/sys.c                                   | 2 +-
>  6 files changed, 13 insertions(+), 10 deletions(-)




Applied to linux-kbuild. Thanks.





> diff --git a/Makefile b/Makefile
> index 12607d3891487..1fdd44fe16590 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1255,7 +1255,10 @@ define filechk_version.h
>                 expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
>         fi;                                                              \
>         echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
> -       ((c) > 255 ? 255 : (c)))'
> +       ((c) > 255 ? 255 : (c)))';                                       \
> +       echo \#define LINUX_VERSION_MAJOR $(VERSION);                    \
> +       echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL);            \
> +       echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
>  endef
>
>  $(version_h): FORCE
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> index ca6f2fc39ea0a..29f886263dc52 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
> @@ -235,8 +235,8 @@ static void mlx5_set_driver_version(struct mlx5_core_dev *dev)
>         remaining_size = max_t(int, 0, driver_ver_sz - strlen(string));
>
>         snprintf(string + strlen(string), remaining_size, "%u.%u.%u",
> -                (u8)((LINUX_VERSION_CODE >> 16) & 0xff), (u8)((LINUX_VERSION_CODE >> 8) & 0xff),
> -                (u16)(LINUX_VERSION_CODE & 0xffff));
> +               LINUX_VERSION_MAJOR, LINUX_VERSION_PATCHLEVEL,
> +               LINUX_VERSION_SUBLEVEL);
>
>         /*Send the command*/
>         MLX5_SET(set_driver_version_in, in, opcode,
> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
> index ad5a0f405a75c..3f0381344221e 100644
> --- a/drivers/usb/core/hcd.c
> +++ b/drivers/usb/core/hcd.c
> @@ -111,8 +111,8 @@ DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
>   */
>
>  /*-------------------------------------------------------------------------*/
> -#define KERNEL_REL     bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
> -#define KERNEL_VER     bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
> +#define KERNEL_REL     bin2bcd(LINUX_VERSION_MAJOR)
> +#define KERNEL_VER     bin2bcd(LINUX_VERSION_PATCHLEVEL)
>
>  /* usb 3.1 root hub device descriptor */
>  static const u8 usb31_rh_dev_descriptor[18] = {
> diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> index bfd8e77788e29..5c7dea5e0ff16 100644
> --- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> +++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
> @@ -46,8 +46,8 @@
>   *    - Make vid/did overridable
>   *    - make it look like usb1 if usb1 mode forced
>   */
> -#define KERNEL_REL     bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
> -#define KERNEL_VER     bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
> +#define KERNEL_REL     bin2bcd(LINUX_VERSION_MAJOR)
> +#define KERNEL_VER     bin2bcd(LINUX_VERSION_PATCHLEVEL)
>
>  enum {
>         AST_VHUB_STR_INDEX_MAX = 4,
> diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
> index a2d229ab63ba5..7531ce7233747 100644
> --- a/include/linux/usb/composite.h
> +++ b/include/linux/usb/composite.h
> @@ -573,8 +573,8 @@ static inline u16 get_default_bcdDevice(void)
>  {
>         u16 bcdDevice;
>
> -       bcdDevice = bin2bcd((LINUX_VERSION_CODE >> 16 & 0xff)) << 8;
> -       bcdDevice |= bin2bcd((LINUX_VERSION_CODE >> 8 & 0xff));
> +       bcdDevice = bin2bcd(LINUX_VERSION_MAJOR) << 8;
> +       bcdDevice |= bin2bcd(LINUX_VERSION_PATCHLEVEL);
>         return bcdDevice;
>  }
>
> diff --git a/kernel/sys.c b/kernel/sys.c
> index 51f00fe20e4d1..c2225bd405d58 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -1243,7 +1243,7 @@ static int override_release(char __user *release, size_t len)
>                                 break;
>                         rest++;
>                 }
> -               v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 60;
> +               v = LINUX_VERSION_PATCHLEVEL + 60;
>                 copy = clamp_t(size_t, len, 1, sizeof(buf));
>                 copy = scnprintf(buf, copy, "2.6.%u%s", v, rest);
>                 ret = copy_to_user(release, buf, copy + 1);
> --
> 2.27.0
>
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 12607d3891487..1fdd44fe16590 100644
--- a/Makefile
+++ b/Makefile
@@ -1255,7 +1255,10 @@  define filechk_version.h
 		expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
 	fi;                                                              \
 	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) +  \
-	((c) > 255 ? 255 : (c)))'
+	((c) > 255 ? 255 : (c)))';                                       \
+	echo \#define LINUX_VERSION_MAJOR $(VERSION);                    \
+	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL);            \
+	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL)
 endef
 
 $(version_h): FORCE
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
index ca6f2fc39ea0a..29f886263dc52 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -235,8 +235,8 @@  static void mlx5_set_driver_version(struct mlx5_core_dev *dev)
 	remaining_size = max_t(int, 0, driver_ver_sz - strlen(string));
 
 	snprintf(string + strlen(string), remaining_size, "%u.%u.%u",
-		 (u8)((LINUX_VERSION_CODE >> 16) & 0xff), (u8)((LINUX_VERSION_CODE >> 8) & 0xff),
-		 (u16)(LINUX_VERSION_CODE & 0xffff));
+		LINUX_VERSION_MAJOR, LINUX_VERSION_PATCHLEVEL,
+		LINUX_VERSION_SUBLEVEL);
 
 	/*Send the command*/
 	MLX5_SET(set_driver_version_in, in, opcode,
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index ad5a0f405a75c..3f0381344221e 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -111,8 +111,8 @@  DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
  */
 
 /*-------------------------------------------------------------------------*/
-#define KERNEL_REL	bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
-#define KERNEL_VER	bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
+#define KERNEL_REL	bin2bcd(LINUX_VERSION_MAJOR)
+#define KERNEL_VER	bin2bcd(LINUX_VERSION_PATCHLEVEL)
 
 /* usb 3.1 root hub device descriptor */
 static const u8 usb31_rh_dev_descriptor[18] = {
diff --git a/drivers/usb/gadget/udc/aspeed-vhub/hub.c b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
index bfd8e77788e29..5c7dea5e0ff16 100644
--- a/drivers/usb/gadget/udc/aspeed-vhub/hub.c
+++ b/drivers/usb/gadget/udc/aspeed-vhub/hub.c
@@ -46,8 +46,8 @@ 
  *    - Make vid/did overridable
  *    - make it look like usb1 if usb1 mode forced
  */
-#define KERNEL_REL	bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
-#define KERNEL_VER	bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
+#define KERNEL_REL	bin2bcd(LINUX_VERSION_MAJOR)
+#define KERNEL_VER	bin2bcd(LINUX_VERSION_PATCHLEVEL)
 
 enum {
 	AST_VHUB_STR_INDEX_MAX = 4,
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index a2d229ab63ba5..7531ce7233747 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -573,8 +573,8 @@  static inline u16 get_default_bcdDevice(void)
 {
 	u16 bcdDevice;
 
-	bcdDevice = bin2bcd((LINUX_VERSION_CODE >> 16 & 0xff)) << 8;
-	bcdDevice |= bin2bcd((LINUX_VERSION_CODE >> 8 & 0xff));
+	bcdDevice = bin2bcd(LINUX_VERSION_MAJOR) << 8;
+	bcdDevice |= bin2bcd(LINUX_VERSION_PATCHLEVEL);
 	return bcdDevice;
 }
 
diff --git a/kernel/sys.c b/kernel/sys.c
index 51f00fe20e4d1..c2225bd405d58 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1243,7 +1243,7 @@  static int override_release(char __user *release, size_t len)
 				break;
 			rest++;
 		}
-		v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 60;
+		v = LINUX_VERSION_PATCHLEVEL + 60;
 		copy = clamp_t(size_t, len, 1, sizeof(buf));
 		copy = scnprintf(buf, copy, "2.6.%u%s", v, rest);
 		ret = copy_to_user(release, buf, copy + 1);