• V
    ARC: mm: fix build breakage with STRICT_MM_TYPECHECKS · 1c3c9093
    Vineet Gupta 提交于
    |  CC      mm/memory.o
    | In file included from ../mm/memory.c:53:0:
    | ../include/linux/pfn_t.h: In function ‘pfn_t_pte’:
    | ../include/linux/pfn_t.h:78:2: error: conversion to non-scalar type requested
    |  return pfn_pte(pfn_t_to_pfn(pfn), pgprot);
    
    With STRICT_MM_TYPECHECKS pte_t is a struct and the offending code
    forces a cast which ends up shifting a struct and hence the gcc warning.
    
    Note that in recent past some of the arches (aarch64, s390) made
    STRICT_MM_TYPECHECKS default, but we don't for ARC as this leads to slightly
    worse generated code, given ARC ABI definition of returning structs
    (which pte_t would become)
    
    Quoting from ARC ABI...
    
      "Results of type struct are returned in a caller-supplied temporary
      variable whose address is passed in r0.
      For such functions, the arguments are shifted so that they are
      passed in r1 and up."
    
    So
     - struct to be returned would be allocated on stack requiring extra
       code at call sites
     - callee updates stack memory to facilitate the return (vs. simple
       MOV into return reg r0)
    
    Hence STRICT_MM_TYPECHECKS is not enabled by default for ARC
    
    Cc: <stable@vger.kernel.org>   #4.4+
    Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
    1c3c9093
pgtable.h 14.1 KB