On 09/09/2016 07:19 AM, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > On Tue, Sep 06, 2016 at 10:24:29AM -0700, Vineet Gupta wrote: >> On 09/05/2016 06:05 AM, gregkh@xxxxxxxxxxxxxxxxxxx wrote: >>> The patch below does not apply to the 4.4-stable tree. >>> If someone wants it applied there, or to any other stable or longterm >>> tree, then please email the backport, including the original git commit >>> id to <stable@xxxxxxxxxxxxxxx>. >>> >>> thanks, >>> >>> greg k-h >> There were 2 commits after 4.4 which prevent a clean backport. >> Reworked patch below. Please apply. >> >> ----------------> >> rom 54607da05b9c3d4c5ee23ce0f21d7f91b83b6c34 Mon Sep 17 00:00:00 2001 >> From: Vineet Gupta <vgupta@xxxxxxxxxxxx> >> Date: Tue, 16 Aug 2016 18:27:07 -0700 >> Subject: [PATCH] ARC: mm: fix build breakage with STRICT_MM_TYPECHECKS >> MIME-Version: 1.0 >> Content-Type: text/plain; charset=UTF-8 >> Content-Transfer-Encoding: 8bit >> >> | 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@xxxxxxxxxxxxxxx> #4.4+ >> Signed-off-by: Vineet Gupta <vgupta@xxxxxxxxxxxx> >> --- >> arch/arc/include/asm/pgtable.h | 3 +-- >> 1 file changed, 1 insertion(+), 2 deletions(-) >> >> diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h >> index 3cab04255ae0..e5fec320f158 100644 >> --- a/arch/arc/include/asm/pgtable.h >> +++ b/arch/arc/include/asm/pgtable.h >> @@ -277,8 +277,7 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) >> >> #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) >> #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) >> -#define pfn_pte(pfn, prot) (__pte(((pte_t)(pfn) << PAGE_SHIFT) | \ >> - pgprot_val(prot))) >> +#define pfn_pte(pfn, prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))) >> #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) >> >> /* > This doesn't apply either :( Sorry about that. I did verify that the patch was fine, I just clipped the leading 'F' when pasting in mailer. Can you please retry below - patch itself it is same as before -----------> >From 7e09fca4b721d81ce7538c6e75f87a9c9c74ef39 Mon Sep 17 00:00:00 2001 From: Vineet Gupta <vgupta@xxxxxxxxxxxx> Date: Tue, 16 Aug 2016 18:27:07 -0700 Subject: [PATCH] ARC: mm: fix build breakage with STRICT_MM_TYPECHECKS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit | 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@xxxxxxxxxxxxxxx> #4.4+ Signed-off-by: Vineet Gupta <vgupta@xxxxxxxxxxxx> --- arch/arc/include/asm/pgtable.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h index 3cab04255ae0..e5fec320f158 100644 --- a/arch/arc/include/asm/pgtable.h +++ b/arch/arc/include/asm/pgtable.h @@ -277,8 +277,7 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) #define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot) #define pte_pfn(pte) (pte_val(pte) >> PAGE_SHIFT) -#define pfn_pte(pfn, prot) (__pte(((pte_t)(pfn) << PAGE_SHIFT) | \ - pgprot_val(prot))) +#define pfn_pte(pfn, prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))) #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) /* -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html