Hi Geert,

> > --- a/arch/m68k/Kconfig
> > +++ b/arch/m68k/Kconfig
> > @@ -20,7 +20,6 @@ config M68K
> >         select GENERIC_STRNLEN_USER if MMU
> >         select ARCH_WANT_IPC_PARSE_VERSION
> >         select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
> > -       select HAVE_FUTEX_CMPXCHG if MMU && FUTEX
>
> I guess it didn't really matter for !MMU?

I see that m68k uses generic futex.h, which doesn't depend on
MMU vs noMMU.

> > --- a/include/asm-generic/futex.h
> > +++ b/include/asm-generic/futex.h
> > @@ -136,6 +136,8 @@ arch_futex_atomic_op_inuser(int op, u32 oparg, int 
> > *oval, u32 __user *uaddr)
> >         return ret;
> >  }
> >
> > +#define arch_have_futex_cmpxchg() (0)
>
> This is for the SMP=y case only, right?

Yes, that's where generic implementation always returns -ENOSYS

> > --- a/kernel/futex.c
> > +++ b/kernel/futex.c
> > @@ -174,7 +174,11 @@
> >   * double_lock_hb() and double_unlock_hb(), respectively.
> >   */
> >
> > -#ifdef CONFIG_HAVE_FUTEX_CMPXCHG
> > +/*
> > + * Architectures should define this macro if 
> > futex_atomic_cmpxchg_inatomic()
> > + * may not be always working.
> > + */
> > +#ifdef arch_have_futex_cmpxchg
>
> Shouldn't this be #ifndef now...

Oops, thank you.
I thought I've build-tested both cases, but I obviously haven't...

> > @@ -3880,7 +3864,9 @@ static int __init futex_init(void)
> >                                                futex_hashsize, 
> > futex_hashsize);
> >         futex_hashsize = 1UL << futex_shift;
> >
> > -       futex_detect_cmpxchg();
> > +#ifdef arch_have_futex_cmpxchg
> > +       futex_cmpxchg_enabled = arch_have_futex_cmpxchg();
>
> ... else you're assigning to the constant:
>
>     error: lvalue required as left operand of assignment

Will send v2...

-- 
Thanks.
-- Max

Reply via email to