[PATCH 3/4] cobalt/kernel: fix compile error for incompatible pointer type

Meng, Fino fino.meng at linux.intel.com
Mon Sep 21 13:32:00 CEST 2020


On Fri, Sep 18, 2020 at 03:05:28PM +0200, Jan Kiszka wrote:
> <no commit message>
> 
> On 18.09.20 08:32, Fino Meng wrote:
> > Signed-off-by: Fino Meng <fino.meng at linux.intel.com>
> > Signed-off-by: Mingliang Hu <mingliang.hu at intel.com>
> > ---
> >   include/cobalt/kernel/stat.h | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/include/cobalt/kernel/stat.h b/include/cobalt/kernel/stat.h
> > index b857cd19f..be529ad72 100644
> > --- a/include/cobalt/kernel/stat.h
> > +++ b/include/cobalt/kernel/stat.h
> > @@ -58,7 +58,7 @@ do { \
> >   #define xnstat_exectime_set_current(sched, new_account) \
> >   ({ \
> >   	xnstat_exectime_t *__prev; \
> > -	__prev = (xnstat_exectime_t *)atomic_long_xchg(&(sched)->current_account, (long)(new_account)); \
> > +	__prev = (xnstat_exectime_t *)atomic_long_xchg((atomic_long_t *)&(sched)->current_account, (long)(new_account)); \
> 
> Which upstream change made this necessary? Was the issue hidden behind too
> relaxed compiler warnings, or was there a real type change? If the latter,
> why is that cast OK?
> 
> Jan

due to this commit, atomic_long_xchg lost the force type conversion in
macro:

commit b5d47ef9ea5c5fe31d7eabeb79f697629bd9e2cb
Refs: v4.19-rc6-94-gb5d47ef9ea5c
Author:     Mark Rutland <mark.rutland at arm.com>
AuthorDate: Tue Sep 4 11:48:27 2018 +0100
Commit:     Ingo Molnar <mingo at kernel.org>
CommitDate: Thu Nov 1 11:00:55 2018 +0100

    locking/atomics: Switch to generated atomic-long

    As a step towards ensuring the atomic* APIs are consistent, let's switch
    to wrappers generated by gen-atomic-long.h, using the same table that
    gen-atomic-fallbacks.h uses to fill in gaps in the atomic_* and
    atomic64_* APIs.
    ...

include/asm-generic/atomic-long.h

in 4.19 kernel:

#define atomic_long_xchg(v, new) \
        (ATOMIC_LONG_PFX(_xchg)((ATOMIC_LONG_PFX(_t) *)(v), (new)))

#define ATOMIC_LONG_PFX(x)      atomic ## x

in 5.4 kernel:

static inline long
atomic_long_xchg(atomic_long_t *v, long i)
{
        return atomic_xchg(v, i);
}

BR fino

> 
> >   	__prev; \
> >   })
> > 
> 
> -- 
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE
> Corporate Competence Center Embedded Linux



More information about the Xenomai mailing list