diff mbox series

[RFC,for-stable] kbuild: Define LINUX_VERSION_{MAJOR,PATCHLEVEL,SUBLEVEL}

Message ID 20220207115212.217744-1-jiaxun.yang@flygoat.com (mailing list archive)
State New, archived
Headers show
Series [RFC,for-stable] kbuild: Define LINUX_VERSION_{MAJOR,PATCHLEVEL,SUBLEVEL} | expand

Commit Message

Jiaxun Yang Feb. 7, 2022, 11:52 a.m. UTC
Since the SUBLEVEL overflowed LINUX_VERSION, we have no reliable
way to tell the current SUBLEVEL in source code.

This brings significant difficulties for backport works to deal
with changes in stable releases.

Define those macros so we can continue to get proper SUBLEVEL
in source without breaking stable ABI by refining KERNEL_VERSION
bit fields.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
For some context: https://lore.kernel.org/backports/bb0ae37aa770e016463706d557fec1c5205bc6a9.camel@sipsolutions.net/T/#t
---
 Makefile | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Greg Kroah-Hartman Feb. 7, 2022, 12:01 p.m. UTC | #1
On Mon, Feb 07, 2022 at 11:52:12AM +0000, Jiaxun Yang wrote:
> Since the SUBLEVEL overflowed LINUX_VERSION, we have no reliable
> way to tell the current SUBLEVEL in source code.

What in-kernel code needs to know the SUBLEVEL?

> This brings significant difficulties for backport works to deal
> with changes in stable releases.

What backport issues?

> Define those macros so we can continue to get proper SUBLEVEL
> in source without breaking stable ABI by refining KERNEL_VERSION
> bit fields.
> 
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> ---
> For some context: https://lore.kernel.org/backports/bb0ae37aa770e016463706d557fec1c5205bc6a9.camel@sipsolutions.net/T/#t
> ---
>  Makefile | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/Makefile b/Makefile
> index 99d37c23495e..8132f81d94d8 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1142,7 +1142,10 @@ endef
>  define filechk_version.h
>  	(echo \#define LINUX_VERSION_CODE $(shell                         \
>  	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
> -	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
> +	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
> +	echo \#define LINUX_VERSION_MAJOR $(VERSION); \
> +	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
> +	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL);)

This is already in Makefile, are you sure you just do not need to
backport a specific patch instead of making your own that does the same
thing?

thanks,

greg k-h
Jiaxun Yang Feb. 7, 2022, 12:47 p.m. UTC | #2
在 2022/2/7 12:01, Greg KH 写道:
> On Mon, Feb 07, 2022 at 11:52:12AM +0000, Jiaxun Yang wrote:
>> Since the SUBLEVEL overflowed LINUX_VERSION, we have no reliable
>> way to tell the current SUBLEVEL in source code.
> What in-kernel code needs to know the SUBLEVEL?
Hi,

Ah sorry, to clarification, backport here means "Backport Project"
(https://backports.wiki.kernel.org).

Though it is not in-tree, it is a vital part of kernel ecosystem to
deliver some new drivers to stable kernels.

It relies on KERNEL_VERSION macros to enable compat code.

>
>> This brings significant difficulties for backport works to deal
>> with changes in stable releases.
> What backport issues?
Context: 
https://lore.kernel.org/backports/bb0ae37aa770e016463706d557fec1c5205bc6a9.camel@sipsolutions.net/T/#t

We are nolonger able to detect linux version > 4.9.255 in source.
>
>> Define those macros so we can continue to get proper SUBLEVEL
>> in source without breaking stable ABI by refining KERNEL_VERSION
>> bit fields.
>>
>> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
>> ---
>> For some context: https://lore.kernel.org/backports/bb0ae37aa770e016463706d557fec1c5205bc6a9.camel@sipsolutions.net/T/#t
>> ---
>>   Makefile | 5 ++++-
>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/Makefile b/Makefile
>> index 99d37c23495e..8132f81d94d8 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -1142,7 +1142,10 @@ endef
>>   define filechk_version.h
>>   	(echo \#define LINUX_VERSION_CODE $(shell                         \
>>   	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
>> -	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
>> +	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
>> +	echo \#define LINUX_VERSION_MAJOR $(VERSION); \
>> +	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
>> +	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL);)
> This is already in Makefile, are you sure you just do not need to
> backport
I wish this can be a part of existing stable kernels so backport project
can maintain flawless build againt stable kernels.

Thanks.
- Jiaxun

> a specific patch instead of making your own that does the same
> thing?
>
> thanks,
>
> greg k-h
Greg Kroah-Hartman Feb. 7, 2022, 1:15 p.m. UTC | #3
On Mon, Feb 07, 2022 at 12:47:41PM +0000, Jiaxun Yang wrote:
> 
> 
> 在 2022/2/7 12:01, Greg KH 写道:
> > On Mon, Feb 07, 2022 at 11:52:12AM +0000, Jiaxun Yang wrote:
> > > Since the SUBLEVEL overflowed LINUX_VERSION, we have no reliable
> > > way to tell the current SUBLEVEL in source code.
> > What in-kernel code needs to know the SUBLEVEL?
> Hi,
> 
> Ah sorry, to clarification, backport here means "Backport Project"
> (https://backports.wiki.kernel.org).
> 
> Though it is not in-tree, it is a vital part of kernel ecosystem to
> deliver some new drivers to stable kernels.
> 
> It relies on KERNEL_VERSION macros to enable compat code.
> 
> > 
> > > This brings significant difficulties for backport works to deal
> > > with changes in stable releases.
> > What backport issues?
> Context: https://lore.kernel.org/backports/bb0ae37aa770e016463706d557fec1c5205bc6a9.camel@sipsolutions.net/T/#t
> 
> We are nolonger able to detect linux version > 4.9.255 in source.

Why do you need to do so?

> > 
> > > Define those macros so we can continue to get proper SUBLEVEL
> > > in source without breaking stable ABI by refining KERNEL_VERSION
> > > bit fields.
> > > 
> > > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> > > ---
> > > For some context: https://lore.kernel.org/backports/bb0ae37aa770e016463706d557fec1c5205bc6a9.camel@sipsolutions.net/T/#t
> > > ---
> > >   Makefile | 5 ++++-
> > >   1 file changed, 4 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/Makefile b/Makefile
> > > index 99d37c23495e..8132f81d94d8 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -1142,7 +1142,10 @@ endef
> > >   define filechk_version.h
> > >   	(echo \#define LINUX_VERSION_CODE $(shell                         \
> > >   	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
> > > -	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
> > > +	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
> > > +	echo \#define LINUX_VERSION_MAJOR $(VERSION); \
> > > +	echo \#define LINUX_VERSION_PATCHLEVEL $(PATCHLEVEL); \
> > > +	echo \#define LINUX_VERSION_SUBLEVEL $(SUBLEVEL);)
> > This is already in Makefile, are you sure you just do not need to
> > backport
> I wish this can be a part of existing stable kernels so backport project
> can maintain flawless build againt stable kernels.

My point being that you should not try to duplicate changes that are
already in Linus's tree.  What I think you want is commit 88a686728b37
("kbuild: simplify access to the kernel's version") to be backported,
right?

If so, please provide a working backport for all affected kernels and we
will be glad to consider it.

thanks,

greg k-h
Jiaxun Yang Feb. 7, 2022, 1:33 p.m. UTC | #4
在 2022/2/7 13:15, Greg KH 写道:
> On Mon, Feb 07, 2022 at 12:47:41PM +0000, Jiaxun Yang wrote:
>
> 在 2022/2/7 12:01, Greg KH 写道:
>>> On Mon, Feb 07, 2022 at 11:52:12AM +0000, Jiaxun Yang wrote:
[...]
> Why do you need to do so?
4.9.297 brings build_bug.h and breaks part of our compat code.
> My point being that you should not try to duplicate changes that are
> already in Linus's tree.  What I think you want is commit 88a686728b37
> ("kbuild: simplify access to the kernel's version") to be backported,
> right?
>
> If so, please provide a working backport for all affected kernels and we
> will be glad to consider it.
Will do, thanks for pointing!

Thanks.
- Jiaxun
>
> thanks,
>
> greg k-h
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 99d37c23495e..8132f81d94d8 100644
--- a/Makefile
+++ b/Makefile
@@ -1142,7 +1142,10 @@  endef
 define filechk_version.h
 	(echo \#define LINUX_VERSION_CODE $(shell                         \
 	expr $(VERSION) \* 65536 + 0$(PATCHLEVEL) \* 256 + 255); \
-	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
+	echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (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