Re: FAILED: patch "[PATCH] ARC: mm: fix build breakage with STRICT_MM_TYPECHECKS" failed to apply to 4.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]