Hi Peter, On Thu, 2018-03-15 at 12:28 +0100, Peter Zijlstra wrote: > On Thu, Mar 15, 2018 at 09:12:09AM +0000, Alexey Brodkin wrote: > > On Thu, 2018-03-15 at 09:18 +0100, Peter Zijlstra wrote: > > > Also, it might make sense to stuff this implementation in some lib/ file > > > somewhere and make all platforms that need it use the same code, afaict > > > there really isn't anything platform specific to it. > > > > Not clear which part do you mean here. > > Are you talking about entire cmpxchg syscall implementation? > > Yep. Hm... new generic syscall doing something sane people are not supposed to do? Let's see who's going to express his/her excitement about that :) But even introduction of that new syscall is obviously not enough as we'll need to fix-up libc for affected arches accordingly... > > Do you think there're many users of that quite an inefficient > > [compared to proper HW version] atomic exchange? > > I think there's a bunch of architectures that are in the same boat. > m68k, arm, mips was mentioned. Sure, the moment an arch has hardware > support you don't need the syscall anymore. Here's a brief analysis: ARM: Looks like they got rid of that stuff in v4.4, see commit db695c0509d6 ("ARM: remove user cmpxchg syscall"). M68K: That's even uglier implementation which is really asking for a facelift, look at sys_atomic_cmpxchg_32() here: https://elixir.bootlin.com/linux/latest/source/arch/m68k/kernel/sys_m68k.c#L461 MIPS: They do it via special sysmips syscall which among other things might handle MIPS_ATOMIC_SET with mips_atomic_set() I don't immediately see if there're others but really I'm not sure if it even worth trying to clean-up all that since efforts might be spent pointlessly. > I was just thinking it would be good to have a common implementation (if > possible) rather than 4-5 different copies of basically the same thing. >From above I would conclude that only M68K might benefit from new library implementation. BTW M68K uses a bit different ABI compared to ARC for that syscall so it will be really atomic_cmpxchg_32() libfunction called from those syscalls, but now I think that's exactly what you meant initially, correct? -Alexey