On 7 Sep 2017, at 3:46, Andrew Morton wrote: > On Thu, 7 Sep 2017 15:23:55 +1000 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: > >> Hi all, >> >> On Wed, 2 Aug 2017 16:31:45 +1000 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: >>> >>> On Wed, 2 Aug 2017 15:45:54 +1000 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: >>>> >>>> On Tue, 01 Aug 2017 09:08:01 -0400 "Zi Yan" <zi.yan@xxxxxxxxxxxxxx> wrote: >>>>> >>>>> I found two possible fixes. >>>>> >>>>> 1. This uses C++ zero initializer, GCC is OK with it. >>>>> I tested with GCC 4.9.3 (has the initialization bug) and GCC 6.4.0. >>>>> >>>>> --- a/include/linux/swapops.h~a >>>>> +++ a/include/linux/swapops.h >>>>> @@ -217,7 +217,7 @@ static inline swp_entry_t pmd_to_swp_ent >>>>> >>>>> static inline pmd_t swp_entry_to_pmd(swp_entry_t entry) >>>>> { >>>>> - return (pmd_t){ 0 }; >>>>> + return (pmd_t){}; >>>>> } >>>> >>>> I have done that for today ... please decide which is best (or find >>>> something better - maybe every platform really needs to have a __pmd() >>>> definition) and submit a real fix patch to Andrew. >>> >>> OK, that failed for my compiler (gcc 5.2.0) like this: >>> >>> In file included from mm/vmscan.c:55:0: >>> include/linux/swapops.h: In function 'swp_entry_to_pmd': >>> include/linux/swapops.h:226:16: error: empty scalar initializer >>> return (pmd_t){}; >>> ^ >>> include/linux/swapops.h:226:16: note: (near initialization for '(anonymous)') >> >> This has reappeared today :-( (for the arm multi_v7_defconfig build at >> least) >> >>> So I used the other idea (on top of Andrew's current tree): >> >> The fix patch now looks like this: >> >> From: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> >> Date: Wed, 2 Aug 2017 15:55:02 +1000 >> Subject: [PATCH] mm-thp-enable-thp-migration-in-generic-path-fix-fix >> >> Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> >> --- >> include/linux/swapops.h | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/include/linux/swapops.h b/include/linux/swapops.h >> index 45b092aa6419..61cffa148a79 100644 >> --- a/include/linux/swapops.h >> +++ b/include/linux/swapops.h >> @@ -223,7 +223,9 @@ static inline swp_entry_t pmd_to_swp_entry(pmd_t pmd) >> >> static inline pmd_t swp_entry_to_pmd(swp_entry_t entry) >> { >> - return (pmd_t){}; >> + pmd_t e; >> + memset(&e, 0, sizeof(pmd_t)); >> + return e; >> } > > err, yeah. I didn't want to add that one :( > > At the very least we should add a good comment explaining why we had to > resort to this. Hi Andrew, I think __pmd(0) can be used now. I fixed __pmd() in sparc32 at commit 9157259d16a8ee8116a98d32f29b797689327e8d, which is in 4.13 now. I should have told you this earlier, sorry about that. Just wonder if any other reason prevents us using __pmd(). Thanks. — Best Regards, Yan Zi
Attachment:
signature.asc
Description: OpenPGP digital signature