From: Sasha Levin sashal@kernel.org
commit 88a686728b3739d3598851e729c0e81f194e5c53 upstream.
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 Signed-off-by: Masahiro Yamada masahiroy@kernel.org [jiaxun.yang@flygoat.com: Stable backport, fix geth as well.] Signed-off-by: Jiaxun Yang jiaxun.yang@flygoat.com --- Makefile | 5 ++++- drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 ++-- drivers/scsi/gdth.c | 6 +++--- drivers/usb/core/hcd.c | 4 ++-- include/linux/usb/composite.h | 4 ++-- kernel/sys.c | 2 +- 6 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/Makefile b/Makefile index addf1d22bf83..ebcc9a06ab5d 100644 --- a/Makefile +++ b/Makefile @@ -1169,7 +1169,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): $(srctree)/Makefile FORCE diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 049d9d19c66d..0622ae358df6 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c @@ -207,8 +207,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/scsi/gdth.c b/drivers/scsi/gdth.c index a4473356a9dc..bfd888e72f0f 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c @@ -4497,9 +4497,9 @@ static int gdth_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) { gdth_ioctl_osvers osv;
- osv.version = (u8)(LINUX_VERSION_CODE >> 16); - osv.subversion = (u8)(LINUX_VERSION_CODE >> 8); - osv.revision = (u16)(LINUX_VERSION_CODE & 0xff); + osv.version = LINUX_VERSION_MAJOR; + osv.subversion = LINUX_VERSION_PATCHLEVEL; + osv.revision = LINUX_VERSION_SUBLEVEL; if (copy_to_user(argp, &osv, sizeof(gdth_ioctl_osvers))) return -EFAULT; break; diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index d634db802fbd..9f8c1bef7c2b 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -126,8 +126,8 @@ static inline int is_root_hub(struct usb_device *udev) */
/*-------------------------------------------------------------------------*/ -#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/include/linux/usb/composite.h b/include/linux/usb/composite.h index a865698361c1..21a751e7f142 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h @@ -572,8 +572,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 65701dd2707e..1ba3378bc0e5 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1166,7 +1166,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);