lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Sat, 13 Aug 2022 21:16:58 +0800
From:   kernel test robot <lkp@...el.com>
To:     Keith Busch <kbusch@...nel.org>
Cc:     kbuild-all@...ts.01.org, linux-kernel@...r.kernel.org
Subject: [kbusch:io_uring/dma-register-v3 8/8]
 drivers/nvme/host/pci.c:1920:34: warning: left shift count >= width of type

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/kbusch/linux.git io_uring/dma-register-v3
head:   e1c6d38d05e532b3aaf12a5ab8707929bcdc1180
commit: e1c6d38d05e532b3aaf12a5ab8707929bcdc1180 [8/8] nvme-pci: implement dma_map support
config: ia64-buildonly-randconfig-r004-20220804 (https://download.01.org/0day-ci/archive/20220813/202208132117.LrIKYDQx-lkp@intel.com/config)
compiler: ia64-linux-gcc (GCC) 12.1.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://git.kernel.org/pub/scm/linux/kernel/git/kbusch/linux.git/commit/?id=e1c6d38d05e532b3aaf12a5ab8707929bcdc1180
        git remote add kbusch https://git.kernel.org/pub/scm/linux/kernel/git/kbusch/linux.git
        git fetch --no-tags kbusch io_uring/dma-register-v3
        git checkout e1c6d38d05e532b3aaf12a5ab8707929bcdc1180
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash drivers/nvme/host/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@...el.com>

All warnings (new ones prefixed by >>):

   In file included from arch/ia64/include/asm/pgtable.h:153,
                    from include/linux/pgtable.h:6,
                    from arch/ia64/include/asm/uaccess.h:40,
                    from include/linux/uaccess.h:11,
                    from include/linux/sched/task.h:11,
                    from include/linux/sched/signal.h:9,
                    from include/linux/rcuwait.h:6,
                    from include/linux/percpu-rwsem.h:7,
                    from include/linux/fs.h:33,
                    from include/linux/highmem.h:5,
                    from include/linux/bvec.h:10,
                    from include/linux/blk_types.h:10,
                    from include/linux/blkdev.h:9,
                    from drivers/nvme/host/pci.c:10:
   arch/ia64/include/asm/mmu_context.h: In function 'reload_context':
   arch/ia64/include/asm/mmu_context.h:127:48: warning: variable 'old_rr4' set but not used [-Wunused-but-set-variable]
     127 |         unsigned long rr0, rr1, rr2, rr3, rr4, old_rr4;
         |                                                ^~~~~~~
   drivers/nvme/host/pci.c: In function 'nvme_pci_dma_map':
>> drivers/nvme/host/pci.c:1920:34: warning: left shift count >= width of type [-Wshift-count-overflow]
    1920 |         const int nvme_pages = 1 << (PAGE_SIZE - NVME_CTRL_PAGE_SIZE);
         |                                  ^~
   drivers/nvme/host/pci.c: In function 'nvme_pci_dma_unmap':
   drivers/nvme/host/pci.c:2000:34: warning: left shift count >= width of type [-Wshift-count-overflow]
    2000 |         const int nvme_pages = 1 << (PAGE_SIZE - NVME_CTRL_PAGE_SIZE);
         |                                  ^~


vim +1920 drivers/nvme/host/pci.c

  1912	
  1913	#ifdef CONFIG_HAS_DMA
  1914	/*
  1915	 * Important: bvec must be describing a virtually contiguous buffer.
  1916	 */
  1917	static void *nvme_pci_dma_map(struct request_queue *q,
  1918				       struct bio_vec *bvec, int nr_vecs)
  1919	{
> 1920		const int nvme_pages = 1 << (PAGE_SIZE - NVME_CTRL_PAGE_SIZE);
  1921		struct nvme_ns *ns = q->queuedata;
  1922		struct nvme_dev *dev = to_nvme_dev(ns->ctrl);
  1923		struct nvme_dma_mapping *mapping;
  1924		int i, j, k, size, ppv, ret = -ENOMEM;
  1925	
  1926		if (!nr_vecs)
  1927			return ERR_PTR(-EINVAL);
  1928	
  1929		mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
  1930		if (!mapping)
  1931			return ERR_PTR(-ENOMEM);
  1932	
  1933		mapping->nr_pages = nr_vecs * nvme_pages;
  1934		size = sizeof(*mapping->prps) * mapping->nr_pages;
  1935		mapping->prps = dma_alloc_coherent(dev->dev, size,
  1936					&mapping->prp_dma_addr, GFP_KERNEL);
  1937		if (!mapping->prps)
  1938			goto free_mapping;
  1939	
  1940		mapping->needs_sync = false;
  1941		for (i = 0, k = 0; i < nr_vecs; i++) {
  1942			struct bio_vec *bv = bvec + i;
  1943			dma_addr_t dma_addr;
  1944	
  1945			ppv = nvme_pages;
  1946			if (i == 0) {
  1947				mapping->offset = bv->bv_offset;
  1948				ppv -= mapping->offset >> NVME_CTRL_PAGE_SHIFT;
  1949			} else if (bv->bv_offset) {
  1950				ret = -EINVAL;
  1951				goto err;
  1952			}
  1953	
  1954			if (bv->bv_offset + bv->bv_len != PAGE_SIZE &&
  1955			    i < nr_vecs - 1) {
  1956				ret = -EINVAL;
  1957				goto err;
  1958			}
  1959	
  1960			dma_addr = dma_map_bvec(dev->dev, bv, 0, 0);
  1961			if (dma_mapping_error(dev->dev, dma_addr)) {
  1962				ret = -EIO;
  1963				goto err;
  1964			}
  1965	
  1966			if (i == 0)
  1967				dma_addr -= mapping->offset;
  1968	
  1969			if (dma_need_sync(dev->dev, dma_addr))
  1970				mapping->needs_sync = true;
  1971	
  1972			for (j = 0; j < ppv; j++)
  1973				mapping->prps[k++] = cpu_to_le64(dma_addr +
  1974							j * NVME_CTRL_PAGE_SIZE);
  1975		}
  1976	
  1977		get_device(dev->dev);
  1978		return mapping;
  1979	
  1980	err:
  1981		for (i = 0; i < k; i += ppv) {
  1982			__u64 dma_addr = le64_to_cpu(mapping->prps[i]);
  1983			ppv = nvme_pages;
  1984	
  1985			if (i == 0)
  1986				ppv -= mapping->offset >> NVME_CTRL_PAGE_SHIFT;
  1987			dma_unmap_page(dev->dev, dma_addr,
  1988				       PAGE_SIZE - offset_in_page(dma_addr), 0);
  1989		}
  1990	
  1991		dma_free_coherent(dev->dev, size, (void *)mapping->prps,
  1992				  mapping->prp_dma_addr);
  1993	free_mapping:
  1994		kfree(mapping);
  1995		return ERR_PTR(ret);
  1996	}
  1997	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ