Hi Stephen, 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){}; } static inline int is_pmd_migration_entry(pmd_t pmd) 2. This is ugly but working. It works with GCC 4.9.3 and GCC 6.4.0. --- a/include/linux/swapops.h +++ b/include/linux/swapops.h @@ -219,7 +219,10 @@ 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){ 0 }; + pmd_t e; + memset(&e, 0, sizeof(pmd_t)); + return e; } static inline int is_pmd_migration_entry(pmd_t pmd) — Best Regards, Yan Zi On 1 Aug 2017, at 7:30, Zi Yan wrote: > Hi Stephen, > > The warning after removing __pmd() is caused by a gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119 > so (pmd_t) {0} causes warning in some GCC versions. > > __pmd() is defined in alpha, arm, arm64, frv, ia64, m32r, m68k, microblaze, mips, parisc, > powerpc, s390, sh, sparc, tile, um, x86, and asm-generic, according to > http://elixir.free-electrons.com/linux/latest/ident/__pmd > > I am not sure about whether arc, blackfin, c6x, cris, h8300, hexagon, metag, mn10300, nios2, score, > xtensa use __pmd() in asm-generic or not. > > I am looking for other workarounds for this warning now. > > > — > Best Regards, > Yan Zi > > On 1 Aug 2017, at 6:50, Stephen Rothwell wrote: > >> Hi all, >> >> On Tue, 1 Aug 2017 16:39:04 +1000 Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: >>> >>> After merging the akpm tree, today's linux-next build (sparc defconfig) >>> failed 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:9: error: implicit declaration of function '__pmd' [-Werror=implicit-function-declaration] >>> return __pmd(0); >>> ^ >>> include/linux/swapops.h:226:9: error: incompatible types when returning type 'int' but 'pmd_t {aka struct <anonymous>}' was expected >>> >>> Caused by commit >>> >>> 9bb18490758c ("mm-thp-enable-thp-migration-in-generic-path-fix") >>> >>> It looks like sparc 32 bit has no __pmd() ... >>> >>> I have reverted that commit for today. >> >> OK, that is a pain as it causes many build warnings some of which are >> treated as errors :-( (see e.g. >> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fkisskb.ellerman.id.au%2Fkisskb%2Fbuildresult%2F13112192%2F&data=02%7C01%7Czi.yan%40cs.rutgers.edu%7Cbf7a7ad57ad04505172f08d4d8cb31c5%7Cb92d2b234d35447093ff69aca6632ffe%7C1%7C0%7C636371814609835949&sdata=diTid245prNY3Jy1pPEaL5q8dSBifFVzliKRq54fXhk%3D&reserved=0). So maybe >> we need to fix sthe sparc32 build instead? Are there any other >> architectures/platforms that do not define __pmd() ? >> >> -- >> Cheers, >> Stephen Rothwell
Attachment:
signature.asc
Description: OpenPGP digital signature