On Thu, Feb 17, 2022 at 08:49:59AM +0100, Arnd Bergmann wrote: > Same here: architectures can already provide a __put_user_fn() > and __get_user_fn(), to get the generic versions of the interface, > but few architectures use that. You can actually get all the interfaces > by just providing raw_copy_from_user() and raw_copy_to_user(), > but the get_user/put_user versions you get from that are fairly > inefficient. FWIW, __{get,put}_user_{8,16,32,64} would probably make it easier to unify. That's where the really variable part tends to be, anyway. IMO __get_user_fn() had been a mistake. One thing I somewhat dislike about the series is the boilerplate in asm/uaccess.h instances - #include <asm-generic/access-ok.h> in a lot of them might make sense as a transitory state, but getting stuck with those indefinitely... BTW, do we need user_addr_max() anymore? The definition in asm-generic/access-ok.h is the only one, so ifndef around it is pointless.