From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC3DFC433FE for ; Tue, 8 Dec 2020 00:22:37 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 4A8DA23A04 for ; Tue, 8 Dec 2020 00:22:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4A8DA23A04 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 3A5E18D0002; Mon, 7 Dec 2020 19:22:36 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 356FF8D0001; Mon, 7 Dec 2020 19:22:36 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 245698D0002; Mon, 7 Dec 2020 19:22:36 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0114.hostedemail.com [216.40.44.114]) by kanga.kvack.org (Postfix) with ESMTP id 06CB58D0001 for ; Mon, 7 Dec 2020 19:22:36 -0500 (EST) Received: from smtpin17.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id C015D1EE6 for ; Tue, 8 Dec 2020 00:22:35 +0000 (UTC) X-FDA: 77568213870.17.woman31_4810ca3273e2 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin17.hostedemail.com (Postfix) with ESMTP id 918A9180D0181 for ; Tue, 8 Dec 2020 00:22:35 +0000 (UTC) X-HE-Tag: woman31_4810ca3273e2 X-Filterd-Recvd-Size: 21925 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by imf38.hostedemail.com (Postfix) with ESMTP for ; Tue, 8 Dec 2020 00:22:33 +0000 (UTC) IronPort-SDR: nw39zA6kv+a3ALKkAuJ+u/0d8kb2MDHpNEFyaOdaDsJgqw/5fywm/cbbhA2Vb5UXtbpJ+huWt4 n/0Ygsv3XvxA== X-IronPort-AV: E=McAfee;i="6000,8403,9828"; a="173916883" X-IronPort-AV: E=Sophos;i="5.78,401,1599548400"; d="gz'50?scan'50,208,50";a="173916883" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Dec 2020 16:22:32 -0800 IronPort-SDR: BPI7xOQIC0HmCNfI4fp4QlxbpNVPTlH5IJDnG1LnP91pDaHaTx8Hw2rgfnFzuTCXriBRU78CdZ yGupDHlsuwvw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,401,1599548400"; d="gz'50?scan'50,208,50";a="367476400" Received: from lkp-server01.sh.intel.com (HELO b44affb74af0) ([10.239.97.150]) by fmsmga004.fm.intel.com with ESMTP; 07 Dec 2020 16:22:29 -0800 Received: from kbuild by b44affb74af0 with local (Exim 4.92) (envelope-from ) id 1kmQlw-00000w-Dm; Tue, 08 Dec 2020 00:22:28 +0000 Date: Tue, 8 Dec 2020 08:22:01 +0800 From: kernel test robot To: ira.weiny@intel.com, Thomas Gleixner , Andrew Morton Cc: kbuild-all@lists.01.org, Linux Memory Management List , Ira Weiny , Joonas Lahtinen , Matthew Wilcox , Christoph Hellwig , Eric Biggers , Dan Williams , Al Viro Subject: Re: [PATCH V2 1/2] mm/highmem: Remove deprecated kmap_atomic Message-ID: <202012080811.M3M75EES-lkp@intel.com> References: <20201207225703.2033611-2-ira.weiny@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="opJtzjQTFsWo+cga" Content-Disposition: inline In-Reply-To: <20201207225703.2033611-2-ira.weiny@intel.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: --opJtzjQTFsWo+cga Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, I love your patch! Yet something to improve: [auto build test ERROR on hch-configfs/for-next] [also build test ERROR on linus/master hnaz-linux-mm/master v5.10-rc7] [cannot apply to next-20201207] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/ira-weiny-intel-com/Lift-memcpy_-to-from-_page-to-core/20201208-070017 base: git://git.infradead.org/users/hch/configfs.git for-next config: riscv-nommu_k210_defconfig (attached as .config) compiler: riscv64-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/5b7d78e2f4cba24149752129e0397d102c501433 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review ira-weiny-intel-com/Lift-memcpy_-to-from-_page-to-core/20201208-070017 git checkout 5b7d78e2f4cba24149752129e0397d102c501433 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=riscv If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All error/warnings (new ones prefixed by >>): In file included from drivers/char/mem.c:24: include/linux/highmem.h: In function 'clear_user_highpage': >> include/linux/highmem.h:229:15: error: implicit declaration of function 'kmap_local_page'; did you mean 'kmap_to_page'? [-Werror=implicit-function-declaration] 229 | void *addr = kmap_local_page(page); | ^~~~~~~~~~~~~~~ | kmap_to_page >> include/linux/highmem.h:229:15: warning: initialization of 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion] >> include/linux/highmem.h:231:2: error: implicit declaration of function 'kunmap_local' [-Werror=implicit-function-declaration] 231 | kunmap_local(addr); | ^~~~~~~~~~~~ include/linux/highmem.h: In function 'clear_highpage': include/linux/highmem.h:282:16: warning: initialization of 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 282 | void *kaddr = kmap_local_page(page); | ^~~~~~~~~~~~~~~ include/linux/highmem.h: In function 'zero_user_segments': include/linux/highmem.h:291:16: warning: initialization of 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 291 | void *kaddr = kmap_local_page(page); | ^~~~~~~~~~~~~~~ include/linux/highmem.h: In function 'copy_user_highpage': >> include/linux/highmem.h:324:8: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 324 | vfrom = kmap_local_page(from); | ^ include/linux/highmem.h:325:6: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 325 | vto = kmap_local_page(to); | ^ include/linux/highmem.h: In function 'copy_highpage': include/linux/highmem.h:339:8: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 339 | vfrom = kmap_local_page(from); | ^ include/linux/highmem.h:340:6: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 340 | vto = kmap_local_page(to); | ^ cc1: some warnings being treated as errors -- In file included from include/linux/pagemap.h:11, from include/linux/blkdev.h:14, from include/linux/blk-cgroup.h:23, from include/linux/writeback.h:14, from include/trace/events/random.h:8, from drivers/char/random.c:348: include/linux/highmem.h: In function 'clear_user_highpage': >> include/linux/highmem.h:229:15: error: implicit declaration of function 'kmap_local_page'; did you mean 'kmap_to_page'? [-Werror=implicit-function-declaration] 229 | void *addr = kmap_local_page(page); | ^~~~~~~~~~~~~~~ | kmap_to_page >> include/linux/highmem.h:229:15: warning: initialization of 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion] >> include/linux/highmem.h:231:2: error: implicit declaration of function 'kunmap_local' [-Werror=implicit-function-declaration] 231 | kunmap_local(addr); | ^~~~~~~~~~~~ include/linux/highmem.h: In function 'clear_highpage': include/linux/highmem.h:282:16: warning: initialization of 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 282 | void *kaddr = kmap_local_page(page); | ^~~~~~~~~~~~~~~ include/linux/highmem.h: In function 'zero_user_segments': include/linux/highmem.h:291:16: warning: initialization of 'void *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 291 | void *kaddr = kmap_local_page(page); | ^~~~~~~~~~~~~~~ include/linux/highmem.h: In function 'copy_user_highpage': >> include/linux/highmem.h:324:8: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 324 | vfrom = kmap_local_page(from); | ^ include/linux/highmem.h:325:6: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 325 | vto = kmap_local_page(to); | ^ include/linux/highmem.h: In function 'copy_highpage': include/linux/highmem.h:339:8: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 339 | vfrom = kmap_local_page(from); | ^ include/linux/highmem.h:340:6: warning: assignment to 'char *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 340 | vto = kmap_local_page(to); | ^ drivers/char/random.c: At top level: drivers/char/random.c:2296:6: warning: no previous prototype for 'add_hwgenerator_randomness' [-Wmissing-prototypes] 2296 | void add_hwgenerator_randomness(const char *buffer, size_t count, | ^~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +229 include/linux/highmem.h 223 224 225 /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ 226 #ifndef clear_user_highpage 227 static inline void clear_user_highpage(struct page *page, unsigned long vaddr) 228 { > 229 void *addr = kmap_local_page(page); 230 clear_user_page(addr, vaddr, page); > 231 kunmap_local(addr); 232 } 233 #endif 234 235 #ifndef __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE 236 /** 237 * __alloc_zeroed_user_highpage - Allocate a zeroed HIGHMEM page for a VMA with caller-specified movable GFP flags 238 * @movableflags: The GFP flags related to the pages future ability to move like __GFP_MOVABLE 239 * @vma: The VMA the page is to be allocated for 240 * @vaddr: The virtual address the page will be inserted into 241 * 242 * This function will allocate a page for a VMA but the caller is expected 243 * to specify via movableflags whether the page will be movable in the 244 * future or not 245 * 246 * An architecture may override this function by defining 247 * __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE and providing their own 248 * implementation. 249 */ 250 static inline struct page * 251 __alloc_zeroed_user_highpage(gfp_t movableflags, 252 struct vm_area_struct *vma, 253 unsigned long vaddr) 254 { 255 struct page *page = alloc_page_vma(GFP_HIGHUSER | movableflags, 256 vma, vaddr); 257 258 if (page) 259 clear_user_highpage(page, vaddr); 260 261 return page; 262 } 263 #endif 264 265 /** 266 * alloc_zeroed_user_highpage_movable - Allocate a zeroed HIGHMEM page for a VMA that the caller knows can move 267 * @vma: The VMA the page is to be allocated for 268 * @vaddr: The virtual address the page will be inserted into 269 * 270 * This function will allocate a page for a VMA that the caller knows will 271 * be able to migrate in the future using move_pages() or reclaimed 272 */ 273 static inline struct page * 274 alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma, 275 unsigned long vaddr) 276 { 277 return __alloc_zeroed_user_highpage(__GFP_MOVABLE, vma, vaddr); 278 } 279 280 static inline void clear_highpage(struct page *page) 281 { > 282 void *kaddr = kmap_local_page(page); 283 clear_page(kaddr); 284 kunmap_local(kaddr); 285 } 286 287 static inline void zero_user_segments(struct page *page, 288 unsigned start1, unsigned end1, 289 unsigned start2, unsigned end2) 290 { 291 void *kaddr = kmap_local_page(page); 292 293 BUG_ON(end1 > PAGE_SIZE || end2 > PAGE_SIZE); 294 295 if (end1 > start1) 296 memset(kaddr + start1, 0, end1 - start1); 297 298 if (end2 > start2) 299 memset(kaddr + start2, 0, end2 - start2); 300 301 kunmap_local(kaddr); 302 flush_dcache_page(page); 303 } 304 305 static inline void zero_user_segment(struct page *page, 306 unsigned start, unsigned end) 307 { 308 zero_user_segments(page, start, end, 0, 0); 309 } 310 311 static inline void zero_user(struct page *page, 312 unsigned start, unsigned size) 313 { 314 zero_user_segments(page, start, start + size, 0, 0); 315 } 316 317 #ifndef __HAVE_ARCH_COPY_USER_HIGHPAGE 318 319 static inline void copy_user_highpage(struct page *to, struct page *from, 320 unsigned long vaddr, struct vm_area_struct *vma) 321 { 322 char *vfrom, *vto; 323 > 324 vfrom = kmap_local_page(from); 325 vto = kmap_local_page(to); 326 copy_user_page(vto, vfrom, vaddr, to); 327 kunmap_local(vto); 328 kunmap_local(vfrom); 329 } 330 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org --opJtzjQTFsWo+cga Content-Type: application/gzip Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 TrFoSkVxYubCKyYrR8vpin9VsJcjC1sAAA== --opJtzjQTFsWo+cga--