Re: taking backports out of compat-*.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04/11/2013 04:44 PM, Johannes Berg wrote:
> On Wed, 2013-04-10 at 19:15 +0200, Johannes Berg wrote:
> 
>>> Sure, lets what's the idea or do you want to do that on another thread?
> 
> Let me give it a different subject :-)
> 
>> It's kinda half-baked and I'm not completely sure it's a good idea
>> (because we may have to follow header file renames, though they happen
>> rarely), but I was basically thinking this:
>>
>> Say there's
>>
>> void my_foo_function(struct foo *f);
>>
>> that we want to backport. Let's also say it's defined in <linux/foo.h>,
>> and that it was usually present starting from kernel 3.0, but for now
>> let's assume the "foo" subsystem always existed (i.e. <linux/foo.h>)
>>
>> Typically, we'd therefore add it to <linux/compat-3.0.h> and declare it
>> there, maybe with the LINUX_BACKPORT() wrapper, and then define it in
>> compat/compat-3.0.c.
>>
>> What I'm thinking is that we should maybe declare it in compat in
>> include/linux/foo.h instead, maybe like this:
>>
>> #ifndef __BACKPORT_FOO
>> #define __BACKPORT_FOO
>> #include_next <linux/foo.h>
>>
>> #if LINUX_VERSION < 3.0
>> #define my_foo_function LINUX_BACKPORT(my_foo_function)
>>
>> void my_foo_function(struct foo *f);
>> #endif
>>
>> #endif /* __BACKPORT_FOO */
>>
>>
>>
>> I'm a bit undecided. On the one hand I think it's nice that we can spot
>> in one place what's backported where in all the
>> include/linux/compat-xyz.h files, but on the other hand it's kinda
>> becoming a messy jumble of features across different subsystems, and
>> hard to determine what you have already and might need for a given
>> header file?
> 
> In addition to what I said, I just realized that we should probably do
> this, and do it consistently even for old things. That way, we can get
> rid of all the pr_fmt patches.
> 
> The reason for the pr_fmt patches is that typically, a source file would
> have
> 
> #define pr_fmt(fmt)           KBUILD_MODNAME ": " fmt
> #include <whatever, including somehow getting printk.h>
> 
> Now that we force them to include compat-2.6.h at the very beginning of
> the file, printk.h already gets included in some way through
> compat-2.6.h (there are of course MANY MANY paths to it.)
> 
> To avoid redefine warnings, we thus patch everything to be
> 
> #undef pr_fmt
> #define pr_fmt
> ...
> 
> which of course works, but it's pretty ugly (we have >1000 patchlines
> for this!)
> 
> 
> If we were able to get rid of compat-2.6.h and put all the backports
> into their appropriate headers (linux/foo.h) we could only force an
> include of compat_autoconf.h (which doesn't include printk.h of course)
> and then we'd be able to get rid of all these patches.

I had a similar same idea a year ago, but haven't found the time to
complete it, see [0]. I am still for this solution.

If linux/foo.h does not exist in recent kernel versions we have to add
it anyway, because the new code references it, so this is not a problem.

With this solution we would clean up the includes used when compiling
and we do not need the pr_fmt patch any more and hopefully some more.

Hauke

[0]:
https://lists.linuxfoundation.org/pipermail/lf_driver_backport/2012-April/000972.html
--
To unsubscribe from this list: send the line "unsubscribe backports" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux