On Wed, Feb 14, 2018 at 08:46:46AM +0800, kbuild test robot wrote: > tree: https://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost.git vhost > head: 3d22d7c1190db3209b644b8a13a75a9802b4587f > commit: b3a8771f409b74c42deee28aee3092fc5d2c8dab [22/23] fw_cfg: write vmcoreinfo details > reproduce: > # apt-get install sparse > git checkout b3a8771f409b74c42deee28aee3092fc5d2c8dab > make ARCH=x86_64 allmodconfig > make C=1 CF=-D__CHECK_ENDIAN__ Please make sure there are no sparse warnings when you build a driver. > > sparse warnings: (new ones prefixed by >>) > > drivers/firmware/qemu_fw_cfg.c:108:28: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:108:28: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:108:28: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:108:28: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:108:28: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:108:28: sparse: cast to restricted __be32 > >> drivers/firmware/qemu_fw_cfg.c:130:36: sparse: incorrect type in initializer (different base types) @@ expected unsigned long long address @@ got gned] address @@ > drivers/firmware/qemu_fw_cfg.c:130:36: expected unsigned long long address > drivers/firmware/qemu_fw_cfg.c:130:36: got restricted __be64 > drivers/firmware/qemu_fw_cfg.c:131:27: sparse: incorrect type in initializer (different base types) @@ expected unsigned int length @@ got ed int length @@ > drivers/firmware/qemu_fw_cfg.c:131:27: expected unsigned int length > drivers/firmware/qemu_fw_cfg.c:131:27: got restricted __be32 <noident> > drivers/firmware/qemu_fw_cfg.c:132:28: sparse: incorrect type in initializer (different base types) @@ expected unsigned int control @@ got ed int control @@ > drivers/firmware/qemu_fw_cfg.c:132:28: expected unsigned int control > drivers/firmware/qemu_fw_cfg.c:132:28: got restricted __be32 <noident> > drivers/firmware/qemu_fw_cfg.c:142:13: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:142:13: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:142:13: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:142:13: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:142:13: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:142:13: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:96:33: sparse: restricted __be16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:52: sparse: restricted __le16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:33: sparse: restricted __be16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:52: sparse: restricted __le16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:33: sparse: restricted __be16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:52: sparse: restricted __le16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:33: sparse: restricted __be16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:52: sparse: restricted __le16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:660:17: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:660:17: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:660:17: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:660:17: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:660:17: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:660:17: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:96:33: sparse: restricted __be16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:52: sparse: restricted __le16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:670:31: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:670:31: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:670:31: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:670:31: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:670:31: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:670:31: sparse: cast to restricted __be32 > drivers/firmware/qemu_fw_cfg.c:671:33: sparse: cast to restricted __be16 > drivers/firmware/qemu_fw_cfg.c:671:33: sparse: cast to restricted __be16 > drivers/firmware/qemu_fw_cfg.c:671:33: sparse: cast to restricted __be16 > drivers/firmware/qemu_fw_cfg.c:671:33: sparse: cast to restricted __be16 > drivers/firmware/qemu_fw_cfg.c:96:33: sparse: restricted __be16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:96:52: sparse: restricted __le16 degrades to integer > drivers/firmware/qemu_fw_cfg.c:717:22: sparse: cast to restricted __le32 > > vim +130 drivers/firmware/qemu_fw_cfg.c > > 103 > 104 /* qemu fw_cfg device is sync today, but spec says it may become async */ > 105 static void fw_cfg_wait_for_control(struct fw_cfg_dma *d) > 106 { > 107 do { > > 108 u32 ctrl = be32_to_cpu(READ_ONCE(d->control)); > 109 > 110 if ((ctrl & ~FW_CFG_DMA_CTL_ERROR) == 0) > 111 return; > 112 > 113 usleep_range(50, 100); > 114 } while (true); > 115 } > 116 > 117 static ssize_t fw_cfg_dma_transfer(void *address, u32 length, u32 control) > 118 { > 119 phys_addr_t dma; > 120 struct fw_cfg_dma *d = NULL; > 121 ssize_t ret = length; > 122 > 123 d = kmalloc(sizeof(*d), GFP_KERNEL); > 124 if (!d) { > 125 ret = -ENOMEM; > 126 goto end; > 127 } > 128 > 129 *d = (struct fw_cfg_dma) { > > 130 .address = address ? cpu_to_be64(virt_to_phys(address)) : 0, > 131 .length = cpu_to_be32(length), > 132 .control = cpu_to_be32(control) > 133 }; > 134 > 135 dma = virt_to_phys(d); > 136 > 137 iowrite32be((u64)dma >> 32, fw_cfg_reg_dma); > 138 iowrite32be(dma, fw_cfg_reg_dma + 4); > 139 > 140 fw_cfg_wait_for_control(d); > 141 > 142 if (be32_to_cpu(READ_ONCE(d->control)) & FW_CFG_DMA_CTL_ERROR) { > 143 ret = -EIO; > 144 } > 145 > 146 end: > 147 kfree(d); > 148 > 149 return ret; > 150 } > 151 > > --- > 0-DAY kernel test infrastructure Open Source Technology Center > https://lists.01.org/pipermail/kbuild-all Intel Corporation