All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH mm/zswap 1/2] mm/zswap: add the flag can_sleep_mapped
Date: Wed, 20 Jan 2021 22:46:48 +0800	[thread overview]
Message-ID: <202101202247.eTZ4UdGZ-lkp@intel.com> (raw)
In-Reply-To: <1611035683-12732-2-git-send-email-tiantao6@hisilicon.com>

[-- Attachment #1: Type: text/plain, Size: 14608 bytes --]

Hi Tian,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.11-rc4]
[cannot apply to hnaz-linux-mm/master next-20210120]
[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/Tian-Tao/Fix-the-compatibility-of-zsmalloc-and-zswap/20210120-162712
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 45dfb8a5659ad286c28fa59008271dbc4e5e3f2d
config: s390-randconfig-r003-20210120 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 22b68440e1647e16b5ee24b924986207173c02d1)
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
        # install s390 cross compiling tool for clang build
        # apt-get install binutils-s390x-linux-gnu
        # https://github.com/0day-ci/linux/commit/d2ad619ba5016be9cd273292ae5dc40d8402fe4e
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Tian-Tao/Fix-the-compatibility-of-zsmalloc-and-zswap/20210120-162712
        git checkout d2ad619ba5016be9cd273292ae5dc40d8402fe4e
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

                              ^
   include/uapi/linux/swab.h:20:12: note: expanded from macro '___constant_swab32'
           (((__u32)(x) & (__u32)0x0000ff00UL) <<  8) |            \
                     ^
   In file included from mm/zswap.c:23:
   In file included from include/linux/frontswap.h:5:
   In file included from include/linux/swap.h:9:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:26:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:119:21: note: expanded from macro '__swab32'
           ___constant_swab32(x) :                 \
                              ^
   include/uapi/linux/swab.h:21:12: note: expanded from macro '___constant_swab32'
           (((__u32)(x) & (__u32)0x00ff0000UL) >>  8) |            \
                     ^
   In file included from mm/zswap.c:23:
   In file included from include/linux/frontswap.h:5:
   In file included from include/linux/swap.h:9:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:26:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:119:21: note: expanded from macro '__swab32'
           ___constant_swab32(x) :                 \
                              ^
   include/uapi/linux/swab.h:22:12: note: expanded from macro '___constant_swab32'
           (((__u32)(x) & (__u32)0xff000000UL) >> 24)))
                     ^
   In file included from mm/zswap.c:23:
   In file included from include/linux/frontswap.h:5:
   In file included from include/linux/swap.h:9:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:26:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:120:12: note: expanded from macro '__swab32'
           __fswab32(x))
                     ^
   In file included from mm/zswap.c:23:
   In file included from include/linux/frontswap.h:5:
   In file included from include/linux/swap.h:9:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:26:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:80:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writeb(value, PCI_IOBASE + addr);
                               ~~~~~~~~~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsb(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsw(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsl(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesb(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesw(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesl(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
>> mm/zswap.c:947:17: warning: variable 'entry' is uninitialized when used here [-Wuninitialized]
                   tmp = kmalloc(entry->length, GFP_ATOMIC);
                                 ^~~~~
   mm/zswap.c:933:27: note: initialize the variable 'entry' to silence this warning
           struct zswap_entry *entry;
                                    ^
                                     = NULL
>> mm/zswap.c:1271:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (!entry->length) {
               ^~~~~~~~~~~~~~
   mm/zswap.c:1322:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   mm/zswap.c:1271:2: note: remove the 'if' if its condition is always false
           if (!entry->length) {
           ^~~~~~~~~~~~~~~~~~~~~
   mm/zswap.c:1259:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   22 warnings generated.


vim +/entry +947 mm/zswap.c

   914	
   915	/*
   916	 * Attempts to free an entry by adding a page to the swap cache,
   917	 * decompressing the entry data into the page, and issuing a
   918	 * bio write to write the page back to the swap device.
   919	 *
   920	 * This can be thought of as a "resumed writeback" of the page
   921	 * to the swap device.  We are basically resuming the same swap
   922	 * writeback path that was intercepted with the frontswap_store()
   923	 * in the first place.  After the page has been decompressed into
   924	 * the swap cache, the compressed version stored by zswap can be
   925	 * freed.
   926	 */
   927	static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
   928	{
   929		struct zswap_header *zhdr;
   930		swp_entry_t swpentry;
   931		struct zswap_tree *tree;
   932		pgoff_t offset;
   933		struct zswap_entry *entry;
   934		struct page *page;
   935		struct scatterlist input, output;
   936		struct crypto_acomp_ctx *acomp_ctx;
   937	
   938		u8 *src, *tmp;
   939		unsigned int dlen;
   940		int ret;
   941		struct writeback_control wbc = {
   942			.sync_mode = WB_SYNC_NONE,
   943		};
   944	
   945		if (!zpool_can_sleep_mapped(pool)) {
   946	
 > 947			tmp = kmalloc(entry->length, GFP_ATOMIC);
   948			if (!tmp)
   949				return -ENOMEM;
   950		}
   951	
   952		/* extract swpentry from data */
   953		zhdr = zpool_map_handle(pool, handle, ZPOOL_MM_RO);
   954		swpentry = zhdr->swpentry; /* here */
   955		tree = zswap_trees[swp_type(swpentry)];
   956		offset = swp_offset(swpentry);
   957	
   958		/* find and ref zswap entry */
   959		spin_lock(&tree->lock);
   960		entry = zswap_entry_find_get(&tree->rbroot, offset);
   961		if (!entry) {
   962			/* entry was invalidated */
   963			spin_unlock(&tree->lock);
   964			zpool_unmap_handle(pool, handle);
   965			return 0;
   966		}
   967		spin_unlock(&tree->lock);
   968		BUG_ON(offset != entry->offset);
   969	
   970		/* try to allocate swap cache page */
   971		switch (zswap_get_swap_cache_page(swpentry, &page)) {
   972		case ZSWAP_SWAPCACHE_FAIL: /* no memory or invalidate happened */
   973			ret = -ENOMEM;
   974			goto fail;
   975	
   976		case ZSWAP_SWAPCACHE_EXIST:
   977			/* page is already in the swap cache, ignore for now */
   978			put_page(page);
   979			ret = -EEXIST;
   980			goto fail;
   981	
   982		case ZSWAP_SWAPCACHE_NEW: /* page is locked */
   983			/* decompress */
   984			acomp_ctx = raw_cpu_ptr(entry->pool->acomp_ctx);
   985	
   986			dlen = PAGE_SIZE;
   987			src = (u8 *)zhdr + sizeof(struct zswap_header);
   988	
   989			if (!zpool_can_sleep_mapped(pool)) {
   990	
   991				memcpy(tmp, src, entry->length);
   992				src = tmp;
   993	
   994				zpool_unmap_handle(pool, handle);
   995			}
   996	
   997			mutex_lock(acomp_ctx->mutex);
   998			sg_init_one(&input, src, entry->length);
   999			sg_init_table(&output, 1);
  1000			sg_set_page(&output, page, PAGE_SIZE, 0);
  1001			acomp_request_set_params(acomp_ctx->req, &input, &output, entry->length, dlen);
  1002			ret = crypto_wait_req(crypto_acomp_decompress(acomp_ctx->req), &acomp_ctx->wait);
  1003			dlen = acomp_ctx->req->dlen;
  1004			mutex_unlock(acomp_ctx->mutex);
  1005	
  1006			BUG_ON(ret);
  1007			BUG_ON(dlen != PAGE_SIZE);
  1008	
  1009			/* page is up to date */
  1010			SetPageUptodate(page);
  1011		}
  1012	
  1013		/* move it to the tail of the inactive list after end_writeback */
  1014		SetPageReclaim(page);
  1015	
  1016		/* start writeback */
  1017		__swap_writepage(page, &wbc, end_swap_bio_write);
  1018		put_page(page);
  1019		zswap_written_back_pages++;
  1020	
  1021		spin_lock(&tree->lock);
  1022		/* drop local reference */
  1023		zswap_entry_put(tree, entry);
  1024	
  1025		/*
  1026		* There are two possible situations for entry here:
  1027		* (1) refcount is 1(normal case),  entry is valid and on the tree
  1028		* (2) refcount is 0, entry is freed and not on the tree
  1029		*     because invalidate happened during writeback
  1030		*  search the tree and free the entry if find entry
  1031		*/
  1032		if (entry == zswap_rb_search(&tree->rbroot, offset))
  1033			zswap_entry_put(tree, entry);
  1034		spin_unlock(&tree->lock);
  1035	
  1036		goto end;
  1037	
  1038		/*
  1039		* if we get here due to ZSWAP_SWAPCACHE_EXIST
  1040		* a load may happening concurrently
  1041		* it is safe and okay to not free the entry
  1042		* if we free the entry in the following put
  1043		* it it either okay to return !0
  1044		*/
  1045	fail:
  1046		spin_lock(&tree->lock);
  1047		zswap_entry_put(tree, entry);
  1048		spin_unlock(&tree->lock);
  1049	
  1050	end:
  1051		if (zpool_can_sleep_mapped(pool))
  1052			zpool_unmap_handle(pool, handle);
  1053		else
  1054			kfree(tmp);
  1055	
  1056		return ret;
  1057	}
  1058	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 14752 bytes --]

  reply	other threads:[~2021-01-20 14:46 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-19  5:54 [PATCH mm/zswap 0/2] Fix the compatibility of zsmalloc and zswap Tian Tao
2021-01-19  5:54 ` [PATCH mm/zswap 1/2] mm/zswap: add the flag can_sleep_mapped Tian Tao
2021-01-20 14:46   ` kernel test robot [this message]
2021-01-19  5:54 ` [PATCH mm/zswap 2/2] mm: set the sleep_mapped to true for zbud and z3fold Tian Tao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202101202247.eTZ4UdGZ-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.