linux-kbuild.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] kbuild: simplify access to the kernel's version
@ 2021-02-07 16:13 Sasha Levin
  2021-02-08  7:40 ` Greg KH
  2021-02-08 17:50 ` Christoph Hellwig
  0 siblings, 2 replies; 11+ messages in thread
From: Sasha Levin @ 2021-02-07 16:13 UTC (permalink / raw)
  To: masahiroy, michal.lkml; +Cc: linux-kbuild, linux-kernel, gregkh, Sasha Levin

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(-)

diff --git a/Makefile b/Makefile
index 157be50c691e5..8e002fb5cae7b 100644
--- a/Makefile
+++ b/Makefile
@@ -1266,7 +1266,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 e4c9627485aa5..989f15d9aa7d4 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
@@ -237,8 +237,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));
+		(u8)(LINUX_VERSION_MAJOR), (u8)(LINUX_VERSION_PATCHLEVEL),
+		(u16)(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 5646dad886e61..c71150f2c6390 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -575,8 +575,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 8bb46e50f02d4..b09fe21e88ff5 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1242,7 +1242,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


^ permalink raw reply related	[flat|nested] 11+ messages in thread
* [PATCH] kbuild: simplify access to the kernel's version
@ 2021-02-08  3:28 Sedat Dilek
  2021-02-08 18:17 ` Sasha Levin
  0 siblings, 1 reply; 11+ messages in thread
From: Sedat Dilek @ 2021-02-08  3:28 UTC (permalink / raw)
  To: Sasha Levin; +Cc: linux-kbuild, Masahiro Yamada

[ Please CC me directly ]

Hi Sasha,

I like that patch from [1].

What was the Linux-source base?

Searching in Linux v5.11-rc7:

$ git grep -E 'LINUX_VERSION_CODE >> (16|8)'
drivers/net/ethernet/mellanox/mlx5/core/main.c:
(u8)((LINUX_VERSION_CODE >> 16) & 0xff), (u8)((LINUX_VERSION_CODE >>
8) & 0xff),
drivers/scsi/gdth.c:        osv.version = (u8)(LINUX_VERSION_CODE >> 16);
drivers/scsi/gdth.c:        osv.subversion = (u8)(LINUX_VERSION_CODE >> 8);
drivers/usb/core/hcd.c:#define KERNEL_REL
bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
drivers/usb/core/hcd.c:#define KERNEL_VER
bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
drivers/usb/gadget/udc/aspeed-vhub/hub.c:#define KERNEL_REL
bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
drivers/usb/gadget/udc/aspeed-vhub/hub.c:#define KERNEL_VER
bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
include/linux/usb/composite.h:  bcdDevice =
bin2bcd((LINUX_VERSION_CODE >> 16 & 0xff)) << 8;
include/linux/usb/composite.h:  bcdDevice |=
bin2bcd((LINUX_VERSION_CODE >> 8 & 0xff));
kernel/sys.c:           v = ((LINUX_VERSION_CODE >> 8) & 0xff) + 60;

So, drivers/scsi/gdth.c file is missing in your list of file:

 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(-)

Thanks.

Regards,
- Sedat -

[1] https://marc.info/?l=linux-kbuild&m=161271450004520&w=2

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-02-12 16:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-07 16:13 [PATCH] kbuild: simplify access to the kernel's version Sasha Levin
2021-02-08  7:40 ` Greg KH
2021-02-08 17:50 ` Christoph Hellwig
2021-02-08 18:20   ` Sasha Levin
2021-02-11 20:18     ` Masahiro Yamada
2021-02-12  3:40       ` Masahiro Yamada
2021-02-12  3:41         ` Masahiro Yamada
2021-02-12 16:19           ` Sasha Levin
2021-02-08  3:28 Sedat Dilek
2021-02-08 18:17 ` Sasha Levin
2021-02-08 19:26   ` Sedat Dilek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).