Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1585424 > unrolled thread

[PATCH 1/2] Correct function definition for C++

Started byJoakim Tjernlund <joakim.tjernlund@infinera.com>
First post2017-02-21 16:40 +0100
Last post2017-03-01 02:00 +0100
Articles 6 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 1/2] Correct function definition for C++ Joakim Tjernlund <joakim.tjernlund@infinera.com> - 2017-02-21 16:40 +0100
    [PATCH 2/2] compiler.h: fix C++ uninitialized const issue Joakim Tjernlund <joakim.tjernlund@infinera.com> - 2017-02-21 16:40 +0100
    Re: [PATCH 1/2] Correct function definition for C++ Greg KH <greg@kroah.com> - 2017-02-22 08:20 +0100
      Re: [PATCH 1/2] Correct function definition for C++ "greg@kroah.com" <greg@kroah.com> - 2017-02-22 14:10 +0100
        Re: [PATCH 1/2] Correct function definition for C++ "greg@kroah.com" <greg@kroah.com> - 2017-02-22 15:30 +0100
      Re: [PATCH 1/2] Correct function definition for C++ Thomas Backlund <tmb@mageia.org> - 2017-03-01 02:00 +0100

#1585424 — [PATCH 1/2] Correct function definition for C++

FromJoakim Tjernlund <joakim.tjernlund@infinera.com>
Date2017-02-21 16:40 +0100
Subject[PATCH 1/2] Correct function definition for C++
Message-ID<tdkHM-4r9-27@gated-at.bofh.it>
C++ does does not like the extra extern before asmlinkage, remove it.

Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
---
 include/linux/printk.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/printk.h b/include/linux/printk.h
index 3472cc6..be823f5 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -139,7 +139,7 @@ struct va_format {
 })
 
 #ifdef CONFIG_EARLY_PRINTK
-extern asmlinkage __printf(1, 2)
+asmlinkage  __printf(1, 2)
 void early_printk(const char *fmt, ...);
 #else
 static inline __printf(1, 2) __cold
@@ -270,7 +270,7 @@ static inline void show_regs_print_info(const char *log_lvl)
 }
 #endif
 
-extern asmlinkage void dump_stack(void) __cold;
+asmlinkage void dump_stack(void) __cold;
 
 #ifndef pr_fmt
 #define pr_fmt(fmt) fmt
-- 
2.10.2

[toc] | [next] | [standalone]


#1585431 — [PATCH 2/2] compiler.h: fix C++ uninitialized const issue

FromJoakim Tjernlund <joakim.tjernlund@infinera.com>
Date2017-02-21 16:40 +0100
Subject[PATCH 2/2] compiler.h: fix C++ uninitialized const issue
Message-ID<tdkHN-4r9-53@gated-at.bofh.it>
In reply to#1585424
C++ does not like the union { typeof(x) __val; char __c[1]; } __u
construct for const types:
 error: uninitialized const member in
 'union atomic_read(const atomic_t*)::<anonymous>'
Address this by creating a C++ version of READ_ONCE where this union is
initialized: union { void _u(){}; typeof(x) __val; char __c[1]; } __u={0}

To please gcc 6.3.0 also add in a _u(){} as default ctor.

This makes C++ happy enough to build.

Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
---
 include/linux/compiler.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index cf0fa5d..0a047fd 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -300,6 +300,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
  * required ordering.
  */
 
+#ifndef __cplusplus
 #define __READ_ONCE(x, check)						\
 ({									\
 	union { typeof(x) __val; char __c[1]; } __u;			\
@@ -309,6 +310,17 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
 		__read_once_size_nocheck(&(x), __u.__c, sizeof(x));	\
 	__u.__val;							\
 })
+#else
+#define __READ_ONCE(x, check)						\
+({									\
+	union { void _u(){}; typeof(x) __val; char __c[1]; } __u={0};	\
+	if (check)							\
+		__read_once_size(&(x), __u.__c, sizeof(x));		\
+	else								\
+		__read_once_size_nocheck(&(x), __u.__c, sizeof(x));	\
+	__u.__val;							\
+})
+#endif
 #define READ_ONCE(x) __READ_ONCE(x, 1)
 
 /*
-- 
2.10.2

[toc] | [prev] | [next] | [standalone]


#1585959

FromGreg KH <greg@kroah.com>
Date2017-02-22 08:20 +0100
Message-ID<tdznr-6r0-9@gated-at.bofh.it>
In reply to#1585424
On Tue, Feb 21, 2017 at 04:24:04PM +0100, Joakim Tjernlund wrote:
> C++ does does not like the extra extern before asmlinkage, remove it.
> 
> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> ---
>  include/linux/printk.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index 3472cc6..be823f5 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h


Why are you building this file with a C++ compiler?

Also, this is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
for how to do this properly.

thanks,

greg k-h

[toc] | [prev] | [next] | [standalone]


#1586129

From"greg@kroah.com" <greg@kroah.com>
Date2017-02-22 14:10 +0100
Message-ID<tdEQa-27h-19@gated-at.bofh.it>
In reply to#1585959
On Wed, Feb 22, 2017 at 07:50:46AM +0000, Joakim Tjernlund wrote:
> On Wed, 2017-02-22 at 08:10 +0100, Greg KH wrote:
> > On Tue, Feb 21, 2017 at 04:24:04PM +0100, Joakim Tjernlund wrote:
> > > C++ does does not like the extra extern before asmlinkage, remove it.
> > > 
> > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > ---
> > >  include/linux/printk.h | 4 ++--
> > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/include/linux/printk.h b/include/linux/printk.h
> > > index 3472cc6..be823f5 100644
> > > --- a/include/linux/printk.h
> > > +++ b/include/linux/printk.h
> > 
> > 
> > Why are you building this file with a C++ compiler?
> 
> virtualbox uses C++ and includes various kernel headers and the build
> fails, virtualbox guest additions has not build for quite some time now and
> this is one of the problems.

Virtualbox is a horrid pile of crap.  You can quote me on that.  We
don't care about out-of-tree drivers, the authors should work to get
them merged properly if they do care.

Kernel code should be C, not C++, and if you do want to use C++, then
you are on your own, sorry.

> > Also, this is not the correct way to submit patches for inclusion in the
> > stable kernel tree.  Please read Documentation/stable_kernel_rules.txt
> > for how to do this properly.
> 
> Sorry, I was in a hurry(lazy:) so I just included stable directly as
> I know it needs to be fixed in 4.9 as well.

But that's not how to get a patch into the stable tree :(

sorry,

greg k-h

[toc] | [prev] | [next] | [standalone]


#1586201

From"greg@kroah.com" <greg@kroah.com>
Date2017-02-22 15:30 +0100
Message-ID<tdG5A-2Z4-31@gated-at.bofh.it>
In reply to#1586129
On Wed, Feb 22, 2017 at 02:00:53PM +0000, Joakim Tjernlund wrote:
> On Wed, 2017-02-22 at 14:03 +0100, greg@kroah.com wrote:
> > On Wed, Feb 22, 2017 at 07:50:46AM +0000, Joakim Tjernlund wrote:
> > > On Wed, 2017-02-22 at 08:10 +0100, Greg KH wrote:
> > > > On Tue, Feb 21, 2017 at 04:24:04PM +0100, Joakim Tjernlund wrote:
> > > > > C++ does does not like the extra extern before asmlinkage, remove it.
> > > > > 
> > > > > Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
> > > > > ---
> > > > >  include/linux/printk.h | 4 ++--
> > > > >  1 file changed, 2 insertions(+), 2 deletions(-)
> > > > > 
> > > > > diff --git a/include/linux/printk.h b/include/linux/printk.h
> > > > > index 3472cc6..be823f5 100644
> > > > > --- a/include/linux/printk.h
> > > > > +++ b/include/linux/printk.h
> > > > 
> > > > 
> > > > Why are you building this file with a C++ compiler?
> > > 
> > > virtualbox uses C++ and includes various kernel headers and the build
> > > fails, virtualbox guest additions has not build for quite some time now and
> > > this is one of the problems.
> > 
> > Virtualbox is a horrid pile of crap.  You can quote me on that.  We
> > don't care about out-of-tree drivers, the authors should work to get
> > them merged properly if they do care.
> 
> Sure, I believe you :)
>  
> But in this case it is not the kernel modules that fails, it is their
> guest additions/xf86 video driver. Seem like that these need to include some
> kernel herders there too.

Seems like their build system is broken, it should not be including non
uapi header files at all.

> > Kernel code should be C, not C++, and if you do want to use C++, then
> > you are on your own, sorry.
> 
> But there are already a lot of C++ adjustments!? Just grepping for __cplusplus shows
> plenty of hits and what is the point of asmlinkage then:
> #ifdef __cplusplus
> #define CPP_ASMLINKAGE extern "C"
> #else
> #define CPP_ASMLINKAGE
> #endif
> 
> #ifndef asmlinkage
> #define asmlinkage CPP_ASMLINKAGE
> #endif

The usages in include/uapi/ make a bit of sense, but not much.
Everything outside of there makes no sense at all (really just some drm
and one scsi file.)  They should be removed.

> I read all of this that C++ code should be able to at least include kernel headers
> without fatal errors. 

For uapi stuff, yes.  But that's not what you are doing here.  You are
trying to build kernel code with a c++ compiler.  That's not going to
work.

How is a C++ compiler supposed to parse the following line in device.h
	struct class;
(one of my most proud moments...)

thanks,

greg k-h

[toc] | [prev] | [next] | [standalone]


#1589917

FromThomas Backlund <tmb@mageia.org>
Date2017-03-01 02:00 +0100
Message-ID<tg0Mx-3uP-3@gated-at.bofh.it>
In reply to#1585959
Den 22.02.2017 kl. 09:50, skrev Joakim Tjernlund:
> On Wed, 2017-02-22 at 08:10 +0100, Greg KH wrote:
>> On Tue, Feb 21, 2017 at 04:24:04PM +0100, Joakim Tjernlund wrote:
>>> C++ does does not like the extra extern before asmlinkage, remove it.
>>>
>>> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
>>> ---
>>>  include/linux/printk.h | 4 ++--
>>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/include/linux/printk.h b/include/linux/printk.h
>>> index 3472cc6..be823f5 100644
>>> --- a/include/linux/printk.h
>>> +++ b/include/linux/printk.h
>>
>>
>> Why are you building this file with a C++ compiler?
>
> virtualbox uses C++ and includes various kernel headers and the build
> fails, virtualbox guest additions has not build for quite some time now and
> this is one of the problems.


You need this fix for virtualbox:

https://www.virtualbox.org/changeset/65874/vbox/trunk/configure

--

Thomas

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web