diff mbox

Automatic device driver back-porting with media_build

Message ID 5672D5A6.8090505@free.fr (mailing list archive)
State New, archived
Headers show

Commit Message

Mason Dec. 17, 2015, 3:32 p.m. UTC
On 17/12/2015 15:55, Mauro Carvalho Chehab wrote:

> Em Thu, 17 Dec 2015 15:30:43 +0100
> Mason <slash.tmp@free.fr> escreveu:
> 
>> On 17/12/2015 15:08, Mauro Carvalho Chehab wrote:
>>
>>> Then I guess you're not using vanilla 3.4 Kernel, but some heavily
>>> modified version. You're on your own here.
>>
>> #ifdef NEED_KVFREE
>> #include <linux/mm.h>
>> static inline void kvfree(const void *addr)
>> {
>> 	if (is_vmalloc_addr(addr))
>> 		vfree(addr);
>> 	else
>> 		kfree(addr);
>> }
>> #endif
>>
>> /tmp/sandbox/media_build/v4l/compat.h: In function 'kvfree':
>> /tmp/sandbox/media_build/v4l/compat.h:1631:3: error: implicit declaration of function 'vfree' [-Werror=implicit-function-declaration]
>>    vfree(addr);
>>    ^
>>
>> vfree is declared in linux/vmalloc.h
>>
>> The fix is trivial:
>>
>> diff --git a/v4l/compat.h b/v4l/compat.h
>> index c225c07d6caa..7f3f1d5f9d11 100644
>> --- a/v4l/compat.h
>> +++ b/v4l/compat.h
>> @@ -1625,6 +1625,7 @@ static inline void eth_zero_addr(u8 *addr)
>>  
>>  #ifdef NEED_KVFREE
>>  #include <linux/mm.h>
>> +#include <linux/vmalloc.h>
>>  static inline void kvfree(const void *addr)
>>  {
>>         if (is_vmalloc_addr(addr))
>>
>>
> 
> Well, it doesn't hurt to add it to the media_build tree, since
> vmalloc.h exists at least since 2.6.11.
> 
> Added upstream.
> 
> Did the driver compile fine?

I wanted to fix the NEED_WRITEL_RELAXED warning, but I don't know Perl.

v4l/scripts/make_config_compat.pl

check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
incorrectly outputs
#define NEED_WRITEL_RELAXED 1


In file included from <command-line>:0:0:
/tmp/sandbox/media_build/v4l/compat.h:1568:0: warning: "writel_relaxed" redefined
 #define writel_relaxed writel
 ^
In file included from include/linux/scatterlist.h:10:0,
                 from /tmp/sandbox/media_build/v4l/compat.h:1255,
                 from <command-line>:0:
/tmp/sandbox/custom-linux-3.4/arch/arm/include/asm/io.h:235:0: note: this is the location of the previous definition
 #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
 ^

Shouldn't the script examine arch/$ARCH/include/asm/io.h instead of
include/asm-generic/io.h ? (Or perhaps both?)

Does make_config_compat.pl know about ARCH?

The following patch makes "#define NEED_WRITEL_RELAXED 1" go away,
but I'm looking for a general solution.


The next error is:

  CC [M]  /tmp/sandbox/media_build/v4l/dvb_net.o
/tmp/sandbox/media_build/v4l/dvb_net.c: In function 'dvb_net_add_if':
/tmp/sandbox/media_build/v4l/dvb_net.c:1244:38: error: macro "alloc_netdev" passed 4 arguments, but takes just 3
       NET_NAME_UNKNOWN, dvb_net_setup);
                                      ^
/tmp/sandbox/media_build/v4l/dvb_net.c:1243:8: error: 'alloc_netdev' undeclared (first use in this function)
  net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb",
        ^
/tmp/sandbox/media_build/v4l/dvb_net.c:1243:8: note: each undeclared identifier is reported only once for each function it appears in
/tmp/sandbox/media_build/v4l/dvb_net.c: At top level:
/tmp/sandbox/media_build/v4l/dvb_net.c:1205:13: warning: 'dvb_net_setup' defined but not used [-Wunused-function]
 static void dvb_net_setup(struct net_device *dev)

Will look into it.


Regards.



--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Mauro Carvalho Chehab Dec. 17, 2015, 4:09 p.m. UTC | #1
Em Thu, 17 Dec 2015 16:32:54 +0100
Mason <slash.tmp@free.fr> escreveu:

> On 17/12/2015 15:55, Mauro Carvalho Chehab wrote:
> 
> > Em Thu, 17 Dec 2015 15:30:43 +0100
> > Mason <slash.tmp@free.fr> escreveu:
> > 
> >> On 17/12/2015 15:08, Mauro Carvalho Chehab wrote:
> >>
> >>> Then I guess you're not using vanilla 3.4 Kernel, but some heavily
> >>> modified version. You're on your own here.
> >>
> >> #ifdef NEED_KVFREE
> >> #include <linux/mm.h>
> >> static inline void kvfree(const void *addr)
> >> {
> >> 	if (is_vmalloc_addr(addr))
> >> 		vfree(addr);
> >> 	else
> >> 		kfree(addr);
> >> }
> >> #endif
> >>
> >> /tmp/sandbox/media_build/v4l/compat.h: In function 'kvfree':
> >> /tmp/sandbox/media_build/v4l/compat.h:1631:3: error: implicit declaration of function 'vfree' [-Werror=implicit-function-declaration]
> >>    vfree(addr);
> >>    ^
> >>
> >> vfree is declared in linux/vmalloc.h
> >>
> >> The fix is trivial:
> >>
> >> diff --git a/v4l/compat.h b/v4l/compat.h
> >> index c225c07d6caa..7f3f1d5f9d11 100644
> >> --- a/v4l/compat.h
> >> +++ b/v4l/compat.h
> >> @@ -1625,6 +1625,7 @@ static inline void eth_zero_addr(u8 *addr)
> >>  
> >>  #ifdef NEED_KVFREE
> >>  #include <linux/mm.h>
> >> +#include <linux/vmalloc.h>
> >>  static inline void kvfree(const void *addr)
> >>  {
> >>         if (is_vmalloc_addr(addr))
> >>
> >>
> > 
> > Well, it doesn't hurt to add it to the media_build tree, since
> > vmalloc.h exists at least since 2.6.11.
> > 
> > Added upstream.
> > 
> > Did the driver compile fine?
> 
> I wanted to fix the NEED_WRITEL_RELAXED warning, but I don't know Perl.
> 
> v4l/scripts/make_config_compat.pl
> 
> check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
> incorrectly outputs
> #define NEED_WRITEL_RELAXED 1
> 
> 
> In file included from <command-line>:0:0:
> /tmp/sandbox/media_build/v4l/compat.h:1568:0: warning: "writel_relaxed" redefined
>  #define writel_relaxed writel
>  ^
> In file included from include/linux/scatterlist.h:10:0,
>                  from /tmp/sandbox/media_build/v4l/compat.h:1255,
>                  from <command-line>:0:
> /tmp/sandbox/custom-linux-3.4/arch/arm/include/asm/io.h:235:0: note: this is the location of the previous definition
>  #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
>  ^
> 
> Shouldn't the script examine arch/$ARCH/include/asm/io.h instead of
> include/asm-generic/io.h ? (Or perhaps both?)
> 
> Does make_config_compat.pl know about ARCH?

No to both. When you do a "make init" on the Kernel repository, it
will evaluate the ARCH vars.

This is also needed for the media build to work, as it needs to
check what CONFIG vars are enabled on the targeted Kernel.

> 
> The following patch makes "#define NEED_WRITEL_RELAXED 1" go away,
> but I'm looking for a general solution.
> 
> 
> The next error is:
> 
>   CC [M]  /tmp/sandbox/media_build/v4l/dvb_net.o
> /tmp/sandbox/media_build/v4l/dvb_net.c: In function 'dvb_net_add_if':
> /tmp/sandbox/media_build/v4l/dvb_net.c:1244:38: error: macro "alloc_netdev" passed 4 arguments, but takes just 3
>        NET_NAME_UNKNOWN, dvb_net_setup);
>                                       ^
> /tmp/sandbox/media_build/v4l/dvb_net.c:1243:8: error: 'alloc_netdev' undeclared (first use in this function)
>   net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb",
>         ^
> /tmp/sandbox/media_build/v4l/dvb_net.c:1243:8: note: each undeclared identifier is reported only once for each function it appears in
> /tmp/sandbox/media_build/v4l/dvb_net.c: At top level:
> /tmp/sandbox/media_build/v4l/dvb_net.c:1205:13: warning: 'dvb_net_setup' defined but not used [-Wunused-function]
>  static void dvb_net_setup(struct net_device *dev)
> 
> Will look into it.

As I said before, heavily patched Kernel. It seems that the network stack
was updated to some newer version. The media_build backport considers
only the upstream Kernels. In the specific case of 3.4, it is known
to build fine with Kernel linux-3.4.27. See:
	http://hverkuil.home.xs4all.nl/logs/Wednesday.log


Regards,
Mauro



> 
> 
> Regards.
> 
> diff --git a/v4l/scripts/make_config_compat.pl b/v4l/scripts/make_config_compat.pl
> index 641f55e9c137..30a004525c08 100644
> --- a/v4l/scripts/make_config_compat.pl
> +++ b/v4l/scripts/make_config_compat.pl
> @@ -664,7 +664,7 @@ sub check_other_dependencies()
>         check_files_for_func("DMA_ATTR_SKIP_CPU_SYNC", "NEED_DMA_ATTR_SKIP_CPU_SYNC", "include/linux/dma-attrs.h");
>         check_files_for_func("sign_extend32", "NEED_SIGN_EXTEND32", "include/linux/bitops.h");
>         check_files_for_func("netdev_dbg", "NEED_NETDEV_DBG", "include/linux/netdevice.h");
> -       check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
> +       check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "arch/arm/include/asm/io.h");
>         check_files_for_func("get_user_pages_unlocked", "NEED_GET_USER_PAGES_UNLOCKED", "include/linux/mm.h");
>         check_files_for_func("pr_warn_once", "NEED_PR_WARN_ONCE", "include/linux/printk.h");
>         check_files_for_func("DIV_ROUND_CLOSEST_ULL", "NEED_DIV_ROUND_CLOSEST_ULL", "include/linux/kernel.h");
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mason Dec. 17, 2015, 4:48 p.m. UTC | #2
On 17/12/2015 17:09, Mauro Carvalho Chehab wrote:
> Em Thu, 17 Dec 2015 16:32:54 +0100
> Mason <slash.tmp@free.fr> escreveu:
> 
>> I wanted to fix the NEED_WRITEL_RELAXED warning, but I don't know Perl.
>>
>> v4l/scripts/make_config_compat.pl
>>
>> check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
>> incorrectly outputs
>> #define NEED_WRITEL_RELAXED 1
>>
>>
>> In file included from <command-line>:0:0:
>> /tmp/sandbox/media_build/v4l/compat.h:1568:0: warning: "writel_relaxed" redefined
>>  #define writel_relaxed writel
>>  ^
>> In file included from include/linux/scatterlist.h:10:0,
>>                  from /tmp/sandbox/media_build/v4l/compat.h:1255,
>>                  from <command-line>:0:
>> /tmp/sandbox/custom-linux-3.4/arch/arm/include/asm/io.h:235:0: note: this is the location of the previous definition
>>  #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
>>  ^
>>
>> Shouldn't the script examine arch/$ARCH/include/asm/io.h instead of
>> include/asm-generic/io.h ? (Or perhaps both?)
>>
>> Does make_config_compat.pl know about ARCH?
> 
> No to both. When you do a "make init" on the Kernel repository, it
> will evaluate the ARCH vars.
> 
> This is also needed for the media build to work, as it needs to
> check what CONFIG vars are enabled on the targeted Kernel.

I downloaded the vanilla version of my custom kernel: linux-3.4.39.tar.xz

Even then, NEED_WRITEL_RELAXED is incorrectly defined.

How do you propose to fix this bug?

$ grep writel_relaxed arch/arm/include/asm/io.h
#define writel_relaxed(v,c)	((void)__raw_writel((__force u32) \
#define writel(v,c)		({ __iowmb(); writel_relaxed(v,c); })

$ grep writel_relaxed arch/x86/include/asm/io.h
$ grep -r writel_relaxed include

> As I said before, heavily patched Kernel. It seems that the network stack
> was updated to some newer version. The media_build backport considers
> only the upstream Kernels. In the specific case of 3.4, it is known
> to build fine with Kernel linux-3.4.27. See:
> 	http://hverkuil.home.xs4all.nl/logs/Wednesday.log

I will keep trying to get something to compile.

Regards.

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mason Dec. 17, 2015, 5:03 p.m. UTC | #3
On 17/12/2015 17:09, Mauro Carvalho Chehab wrote:

> As I said before, heavily patched Kernel. It seems that the network stack
> was updated to some newer version. The media_build backport considers
> only the upstream Kernels. In the specific case of 3.4, it is known
> to build fine with Kernel linux-3.4.27. See:
> 	http://hverkuil.home.xs4all.nl/logs/Wednesday.log

I don't think the network stack is different from vanilla...

I had a different idea:

The media_build process prints:

"Preparing to compile for kernel version 3.4.3913"

In fact, the custom kernel's Makefile contains:

VERSION = 3
PATCHLEVEL = 4
SUBLEVEL = 39
EXTRAVERSION = 13
NAME = Saber-toothed Squirrel

Is it possible that the build process gets confused by the EXTRAVERSION field?

Regards.

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mauro Carvalho Chehab Dec. 18, 2015, 10:37 a.m. UTC | #4
Em Thu, 17 Dec 2015 17:48:57 +0100
Mason <slash.tmp@free.fr> escreveu:

> On 17/12/2015 17:09, Mauro Carvalho Chehab wrote:
> > Em Thu, 17 Dec 2015 16:32:54 +0100
> > Mason <slash.tmp@free.fr> escreveu:
> > 
> >> I wanted to fix the NEED_WRITEL_RELAXED warning, but I don't know Perl.
> >>
> >> v4l/scripts/make_config_compat.pl
> >>
> >> check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
> >> incorrectly outputs
> >> #define NEED_WRITEL_RELAXED 1
> >>
> >>
> >> In file included from <command-line>:0:0:
> >> /tmp/sandbox/media_build/v4l/compat.h:1568:0: warning: "writel_relaxed" redefined
> >>  #define writel_relaxed writel
> >>  ^
> >> In file included from include/linux/scatterlist.h:10:0,
> >>                  from /tmp/sandbox/media_build/v4l/compat.h:1255,
> >>                  from <command-line>:0:
> >> /tmp/sandbox/custom-linux-3.4/arch/arm/include/asm/io.h:235:0: note: this is the location of the previous definition
> >>  #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
> >>  ^
> >>
> >> Shouldn't the script examine arch/$ARCH/include/asm/io.h instead of
> >> include/asm-generic/io.h ? (Or perhaps both?)
> >>
> >> Does make_config_compat.pl know about ARCH?
> > 
> > No to both. When you do a "make init" on the Kernel repository, it
> > will evaluate the ARCH vars.
> > 
> > This is also needed for the media build to work, as it needs to
> > check what CONFIG vars are enabled on the targeted Kernel.
> 
> I downloaded the vanilla version of my custom kernel: linux-3.4.39.tar.xz
> 
> Even then, NEED_WRITEL_RELAXED is incorrectly defined.

did you run a:
	make allmodconfig
	make init

for the vanilla version? Without that, the symlinks won't appear.

> How do you propose to fix this bug?
> 
> $ grep writel_relaxed arch/arm/include/asm/io.h
> #define writel_relaxed(v,c)	((void)__raw_writel((__force u32) \
> #define writel(v,c)		({ __iowmb(); writel_relaxed(v,c); })
> 
> $ grep writel_relaxed arch/x86/include/asm/io.h
> $ grep -r writel_relaxed include
> 
> > As I said before, heavily patched Kernel. It seems that the network stack
> > was updated to some newer version. The media_build backport considers
> > only the upstream Kernels. In the specific case of 3.4, it is known
> > to build fine with Kernel linux-3.4.27. See:
> > 	http://hverkuil.home.xs4all.nl/logs/Wednesday.log
> 
> I will keep trying to get something to compile.
> 
> Regards.
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mason Dec. 18, 2015, 11:01 a.m. UTC | #5
On 18/12/2015 11:37, Mauro Carvalho Chehab wrote:
> Em Thu, 17 Dec 2015 17:48:57 +0100
> Mason <slash.tmp@free.fr> escreveu:
> 
>> On 17/12/2015 17:09, Mauro Carvalho Chehab wrote:
>>> Em Thu, 17 Dec 2015 16:32:54 +0100
>>> Mason <slash.tmp@free.fr> escreveu:
>>>
>>>> I wanted to fix the NEED_WRITEL_RELAXED warning, but I don't know Perl.
>>>>
>>>> v4l/scripts/make_config_compat.pl
>>>>
>>>> check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
>>>> incorrectly outputs
>>>> #define NEED_WRITEL_RELAXED 1
>>>>
>>>>
>>>> In file included from <command-line>:0:0:
>>>> /tmp/sandbox/media_build/v4l/compat.h:1568:0: warning: "writel_relaxed" redefined
>>>>  #define writel_relaxed writel
>>>>  ^
>>>> In file included from include/linux/scatterlist.h:10:0,
>>>>                  from /tmp/sandbox/media_build/v4l/compat.h:1255,
>>>>                  from <command-line>:0:
>>>> /tmp/sandbox/custom-linux-3.4/arch/arm/include/asm/io.h:235:0: note: this is the location of the previous definition
>>>>  #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
>>>>  ^
>>>>
>>>> Shouldn't the script examine arch/$ARCH/include/asm/io.h instead of
>>>> include/asm-generic/io.h ? (Or perhaps both?)
>>>>
>>>> Does make_config_compat.pl know about ARCH?
>>>
>>> No to both. When you do a "make init" on the Kernel repository, it
>>> will evaluate the ARCH vars.
>>>
>>> This is also needed for the media build to work, as it needs to
>>> check what CONFIG vars are enabled on the targeted Kernel.
>>
>> I downloaded the vanilla version of my custom kernel: linux-3.4.39.tar.xz
>>
>> Even then, NEED_WRITEL_RELAXED is incorrectly defined.
> 
> did you run a:
> 	make allmodconfig
> 	make init
> 
> for the vanilla version? Without that, the symlinks won't appear.

/tmp/sandbox/linux-3.4.39$ make allmodconfig
scripts/kconfig/conf --allmodconfig Kconfig
#
# configuration written to .config
#
/tmp/sandbox/linux-3.4.39$ make menuconfig
scripts/kconfig/mconf Kconfig
.config:25:warning: symbol value '' invalid for PHYS_OFFSET
#
# configuration written to .config
#


*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

/tmp/sandbox/linux-3.4.39$ make init
scripts/kconfig/conf --silentoldconfig Kconfig
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CC kernel/bounds.s
GEN include/generated/bounds.h
CC arch/arm/kernel/asm-offsets.s
GEN include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
CC scripts/mod/empty.o
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
HOSTCC scripts/selinux/genheaders/genheaders
HOSTCC scripts/selinux/mdp/mdp
CC init/main.o
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
CC init/do_mounts.o
CC init/do_mounts_initrd.o
LD init/mounts.o
CC init/initramfs.o
CC init/calibrate.o
LD init/built-in.o

cd ../media_build/linux
make tar DIR=/tmp/sandbox/media_tree
make untar
cd ..
make release DIR=/tmp/sandbox/linux-3.4.39
make

make -C ../linux apply_patches
make[2]: Entering directory `/tmp/sandbox/media_build/linux'
Patches for 3.4.39. already applied.
make[2]: Leaving directory `/tmp/sandbox/media_build/linux'
make -C /tmp/sandbox/linux-3.4.39 SUBDIRS=/tmp/sandbox/media_build/v4l  modules
make[2]: Entering directory `/tmp/sandbox/linux-3.4.39'
  CC [M]  /tmp/sandbox/media_build/v4l/altera-lpt.o
In file included from <command-line>:0:0:
/tmp/sandbox/media_build/v4l/compat.h:1568:0: warning: "writel_relaxed" redefined
 #define writel_relaxed writel
 ^
In file included from include/linux/scatterlist.h:10:0,
                 from /tmp/sandbox/media_build/v4l/compat.h:1255,
                 from <command-line>:0:
/tmp/sandbox/linux-3.4.39/arch/arm/include/asm/io.h:235:0: note: this is the location of the previous definition
 #define writel_relaxed(v,c) ((void)__raw_writel((__force u32) \
 ^

$ grep -rn NEED_WRITEL_RELAXED
v4l/compat.h:1567:#ifdef NEED_WRITEL_RELAXED
v4l/scripts/make_config_compat.pl:667:	check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
v4l/config-compat.h:1888:#define NEED_WRITEL_RELAXED 1



--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/v4l/scripts/make_config_compat.pl b/v4l/scripts/make_config_compat.pl
index 641f55e9c137..30a004525c08 100644
--- a/v4l/scripts/make_config_compat.pl
+++ b/v4l/scripts/make_config_compat.pl
@@ -664,7 +664,7 @@  sub check_other_dependencies()
        check_files_for_func("DMA_ATTR_SKIP_CPU_SYNC", "NEED_DMA_ATTR_SKIP_CPU_SYNC", "include/linux/dma-attrs.h");
        check_files_for_func("sign_extend32", "NEED_SIGN_EXTEND32", "include/linux/bitops.h");
        check_files_for_func("netdev_dbg", "NEED_NETDEV_DBG", "include/linux/netdevice.h");
-       check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "include/asm-generic/io.h");
+       check_files_for_func("writel_relaxed", "NEED_WRITEL_RELAXED", "arch/arm/include/asm/io.h");
        check_files_for_func("get_user_pages_unlocked", "NEED_GET_USER_PAGES_UNLOCKED", "include/linux/mm.h");
        check_files_for_func("pr_warn_once", "NEED_PR_WARN_ONCE", "include/linux/printk.h");
        check_files_for_func("DIV_ROUND_CLOSEST_ULL", "NEED_DIV_ROUND_CLOSEST_ULL", "include/linux/kernel.h");