2020-08-14 04:13:54

by Xingxing Su

[permalink] [raw]
Subject: [PATCH v2] seqlock: Fix build errors

Fix the following build errors:

In file included from ./include/linux/time.h:6:0,
from ./include/linux/compat.h:10,
from arch/mips/kernel/asm-offsets.c:12:
./include/linux/seqlock.h: In function ‘write_seqcount_begin_nested’:
./include/linux/seqlock.h:286:2: error: implicit declaration of function
‘raw_smp_processor_id’ [-Werror=implicit-function-declaration]
lockdep_assert_preemption_disabled();
^
./arch/mips/include/asm/smp.h: At top level:
./arch/mips/include/asm/smp.h:28:19: error: static declaration of
‘raw_smp_processor_id’ follows non-static declaration
static inline int raw_smp_processor_id(void)
^
cc1: some warnings being treated as errors
scripts/Makefile.build:117: recipe for target 'arch/mips/kernel/asm-offsets.s' failed
make[1]: *** [arch/mips/kernel/asm-offsets.s] Error 1
arch/mips/Makefile:396: recipe for target 'archprepare' failed
make: *** [archprepare] Error 2


Signed-off-by: Xingxing Su <[email protected]>
---
v2: update the commit message

include/linux/seqlock.h | 1 +
1 file changed, 1 insertion(+)

diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
index 54bc204..4763c13 100644
--- a/include/linux/seqlock.h
+++ b/include/linux/seqlock.h
@@ -17,6 +17,7 @@
#include <linux/lockdep.h>
#include <linux/compiler.h>
#include <linux/kcsan-checks.h>
+#include <linux/smp.h>
#include <asm/processor.h>

/*
--
2.1.0


2020-08-14 08:40:47

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [PATCH v2] seqlock: Fix build errors

On Fri, Aug 14, 2020 at 12:12:38PM +0800, Xingxing Su wrote:
> Fix the following build errors:
>
> In file included from ./include/linux/time.h:6:0,
> from ./include/linux/compat.h:10,
> from arch/mips/kernel/asm-offsets.c:12:
> ./include/linux/seqlock.h: In function ‘write_seqcount_begin_nested’:
> ./include/linux/seqlock.h:286:2: error: implicit declaration of function
> ‘raw_smp_processor_id’ [-Werror=implicit-function-declaration]
> lockdep_assert_preemption_disabled();
> ^
> ./arch/mips/include/asm/smp.h: At top level:
> ./arch/mips/include/asm/smp.h:28:19: error: static declaration of
> ‘raw_smp_processor_id’ follows non-static declaration
> static inline int raw_smp_processor_id(void)
> ^
> cc1: some warnings being treated as errors
> scripts/Makefile.build:117: recipe for target 'arch/mips/kernel/asm-offsets.s' failed
> make[1]: *** [arch/mips/kernel/asm-offsets.s] Error 1
> arch/mips/Makefile:396: recipe for target 'archprepare' failed
> make: *** [archprepare] Error 2
>

What kernel are you building?

Commit 0cd39f4600ed ("locking/seqlock, headers: Untangle the spaghetti monster")

should have solved that I think.

>
> Signed-off-by: Xingxing Su <[email protected]>
> ---
> v2: update the commit message
>
> include/linux/seqlock.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
> index 54bc204..4763c13 100644
> --- a/include/linux/seqlock.h
> +++ b/include/linux/seqlock.h
> @@ -17,6 +17,7 @@
> #include <linux/lockdep.h>
> #include <linux/compiler.h>
> #include <linux/kcsan-checks.h>
> +#include <linux/smp.h>
> #include <asm/processor.h>

Wrong place, it's lockdep_assert_preemption_disabled() that requires
asm/percpu.h, and thus lockdep.h should include linux/smp. before
asm/percpu.h

2020-08-14 10:24:16

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH v2] seqlock: Fix build errors


* Peter Zijlstra <[email protected]> wrote:

> > Signed-off-by: Xingxing Su <[email protected]>
> > ---
> > v2: update the commit message
> >
> > include/linux/seqlock.h | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
> > index 54bc204..4763c13 100644
> > --- a/include/linux/seqlock.h
> > +++ b/include/linux/seqlock.h
> > @@ -17,6 +17,7 @@
> > #include <linux/lockdep.h>
> > #include <linux/compiler.h>
> > #include <linux/kcsan-checks.h>
> > +#include <linux/smp.h>
> > #include <asm/processor.h>
>
> Wrong place, it's lockdep_assert_preemption_disabled() that requires
> asm/percpu.h, and thus lockdep.h should include linux/smp. before
> asm/percpu.h

It already does that upstream:

#ifndef __LINUX_LOCKDEP_H
#define __LINUX_LOCKDEP_H

#include <linux/lockdep_types.h>
#include <linux/smp.h>
#include <asm/percpu.h>

So it would be interesting to know what kernel version the build error
occurs on.

Thanks,

Ingo

2020-08-14 10:33:13

by Xingxing Su

[permalink] [raw]
Subject: Re: [PATCH v2] seqlock: Fix build errors

On 08/14/2020 04:35 PM, Peter Zijlstra wrote:

> On Fri, Aug 14, 2020 at 12:12:38PM +0800, Xingxing Su wrote:
>> Fix the following build errors:
>>
>> In file included from ./include/linux/time.h:6:0,
>> from ./include/linux/compat.h:10,
>> from arch/mips/kernel/asm-offsets.c:12:
>> ./include/linux/seqlock.h: In function ‘write_seqcount_begin_nested’:
>> ./include/linux/seqlock.h:286:2: error: implicit declaration of function
>> ‘raw_smp_processor_id’ [-Werror=implicit-function-declaration]
>> lockdep_assert_preemption_disabled();
>> ^
>> ./arch/mips/include/asm/smp.h: At top level:
>> ./arch/mips/include/asm/smp.h:28:19: error: static declaration of
>> ‘raw_smp_processor_id’ follows non-static declaration
>> static inline int raw_smp_processor_id(void)
>> ^
>> cc1: some warnings being treated as errors
>> scripts/Makefile.build:117: recipe for target 'arch/mips/kernel/asm-offsets.s' failed
>> make[1]: *** [arch/mips/kernel/asm-offsets.s] Error 1
>> arch/mips/Makefile:396: recipe for target 'archprepare' failed
>> make: *** [archprepare] Error 2
>>
> What kernel are you building?
>
> Commit 0cd39f4600ed ("locking/seqlock, headers: Untangle the spaghetti monster")
>
> should have solved that I think.
>
>> Signed-off-by: Xingxing Su <[email protected]>
>> ---
>> v2: update the commit message
>>
>> include/linux/seqlock.h | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h
>> index 54bc204..4763c13 100644
>> --- a/include/linux/seqlock.h
>> +++ b/include/linux/seqlock.h
>> @@ -17,6 +17,7 @@
>> #include <linux/lockdep.h>
>> #include <linux/compiler.h>
>> #include <linux/kcsan-checks.h>
>> +#include <linux/smp.h>
>> #include <asm/processor.h>
> Wrong place, it's lockdep_assert_preemption_disabled() that requires
> asm/percpu.h, and thus lockdep.h should include linux/smp. before
> asm/percpu.h

Thanks for your reply, I will check it.