Skip to content
  • Geert Uytterhoeven's avatar
    m68k/uaccess: Fix asm constraints for userspace access · 631d8b67
    Geert Uytterhoeven authored
    
    
    When compiling a MMU kernel with CPU_HAS_ADDRESS_SPACES=n (e.g. "MMU=y
    allnoconfig": "echo CONFIG_MMU=y > allno.config && make KCONFIG_ALLCONFIG=1
    allnoconfig"), we use plain "move" instead of "moves", and I got:
    
      CC      arch/m68k/lib/uaccess.o
    {standard input}: Assembler messages:
    {standard input}:47: Error: operands mismatch -- statement `move.b %a0,(%a1)' ignored
    
    This happens because plain "move" doesn't support byte transfers between
    memory and address registers, while "moves" does.
    
    Fix the asm constraints for __generic_copy_from_user(),
    __generic_copy_to_user(), and __clear_user() to only use data registers
    when accessing userspace.
    
    Also, relax the asm constraints for 16-bit userspace accesses in
    __put_user() and __get_user(), as both "move" and "moves" do support
    such transfers between memory and address registers.
    
    Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    631d8b67