CC: [email protected] CC: [email protected] TO: Luc Van Oostenryck <[email protected]> CC: Andrew Morton <[email protected]> CC: Linux Memory Management List <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: eec4df26e24e978e49ccf9bcf49ca0f2ccdaeffe commit: d991bb1c8da842a2a0b9dc83b1005e655783f861 include/linux/compiler-gcc.h: sparse can do constant folding of __builtin_bswap*() date: 8 months ago :::::: branch date: 25 hours ago :::::: commit date: 8 months ago config: s390-randconfig-m031-20211123 (https://download.01.org/0day-ci/archive/20211231/[email protected]/config) compiler: s390-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: drivers/mtd/ftl.c:220 build_maps() warn: should '(i + __builtin_bswap16(((part->header.FirstPhysicalEUN)))) << part->header.EraseUnitSize' be a 64 bit type? Old smatch warnings: drivers/mtd/ftl.c:347 erase_xfer() warn: should '1 << part->header.EraseUnitSize' be a 64 bit type? drivers/mtd/ftl.c:605 reclaim_block() warn: inconsistent indenting vim +220 drivers/mtd/ftl.c ^1da177e4c3f41 Linus Torvalds 2005-04-16 191 ^1da177e4c3f41 Linus Torvalds 2005-04-16 192 static int build_maps(partition_t *part) ^1da177e4c3f41 Linus Torvalds 2005-04-16 193 { ^1da177e4c3f41 Linus Torvalds 2005-04-16 194 erase_unit_header_t header; 3854be7712f7b4 David Woodhouse 2008-12-10 195 uint16_t xvalid, xtrans, i; 3854be7712f7b4 David Woodhouse 2008-12-10 196 unsigned blocks, j; ^1da177e4c3f41 Linus Torvalds 2005-04-16 197 int hdr_ok, ret = -1; ^1da177e4c3f41 Linus Torvalds 2005-04-16 198 ssize_t retval; ^1da177e4c3f41 Linus Torvalds 2005-04-16 199 loff_t offset; ^1da177e4c3f41 Linus Torvalds 2005-04-16 200 ^1da177e4c3f41 Linus Torvalds 2005-04-16 201 /* Set up erase unit maps */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 202 part->DataUnits = le16_to_cpu(part->header.NumEraseUnits) - ^1da177e4c3f41 Linus Torvalds 2005-04-16 203 part->header.NumTransferUnits; 6da2ec56059c3c Kees Cook 2018-06-12 204 part->EUNInfo = kmalloc_array(part->DataUnits, sizeof(struct eun_info_t), ^1da177e4c3f41 Linus Torvalds 2005-04-16 205 GFP_KERNEL); ^1da177e4c3f41 Linus Torvalds 2005-04-16 206 if (!part->EUNInfo) ^1da177e4c3f41 Linus Torvalds 2005-04-16 207 goto out; ^1da177e4c3f41 Linus Torvalds 2005-04-16 208 for (i = 0; i < part->DataUnits; i++) ^1da177e4c3f41 Linus Torvalds 2005-04-16 209 part->EUNInfo[i].Offset = 0xffffffff; ^1da177e4c3f41 Linus Torvalds 2005-04-16 210 part->XferInfo = 6da2ec56059c3c Kees Cook 2018-06-12 211 kmalloc_array(part->header.NumTransferUnits, 6da2ec56059c3c Kees Cook 2018-06-12 212 sizeof(struct xfer_info_t), ^1da177e4c3f41 Linus Torvalds 2005-04-16 213 GFP_KERNEL); ^1da177e4c3f41 Linus Torvalds 2005-04-16 214 if (!part->XferInfo) ^1da177e4c3f41 Linus Torvalds 2005-04-16 215 goto out_EUNInfo; ^1da177e4c3f41 Linus Torvalds 2005-04-16 216 ^1da177e4c3f41 Linus Torvalds 2005-04-16 217 xvalid = xtrans = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 218 for (i = 0; i < le16_to_cpu(part->header.NumEraseUnits); i++) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 219 offset = ((i + le16_to_cpu(part->header.FirstPhysicalEUN)) ^1da177e4c3f41 Linus Torvalds 2005-04-16 @220 << part->header.EraseUnitSize); 329ad399a9b3ad Artem Bityutskiy 2011-12-23 221 ret = mtd_read(part->mbd.mtd, offset, sizeof(header), &retval, ^1da177e4c3f41 Linus Torvalds 2005-04-16 222 (unsigned char *)&header); ^1da177e4c3f41 Linus Torvalds 2005-04-16 223 ^1da177e4c3f41 Linus Torvalds 2005-04-16 224 if (ret) ^1da177e4c3f41 Linus Torvalds 2005-04-16 225 goto out_XferInfo; ^1da177e4c3f41 Linus Torvalds 2005-04-16 226 ^1da177e4c3f41 Linus Torvalds 2005-04-16 227 ret = -1; ^1da177e4c3f41 Linus Torvalds 2005-04-16 228 /* Is this a transfer partition? */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 229 hdr_ok = (strcmp(header.DataOrgTuple+3, "FTL100") == 0); ^1da177e4c3f41 Linus Torvalds 2005-04-16 230 if (hdr_ok && (le16_to_cpu(header.LogicalEUN) < part->DataUnits) && ^1da177e4c3f41 Linus Torvalds 2005-04-16 231 (part->EUNInfo[le16_to_cpu(header.LogicalEUN)].Offset == 0xffffffff)) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 232 part->EUNInfo[le16_to_cpu(header.LogicalEUN)].Offset = offset; ^1da177e4c3f41 Linus Torvalds 2005-04-16 233 part->EUNInfo[le16_to_cpu(header.LogicalEUN)].EraseCount = ^1da177e4c3f41 Linus Torvalds 2005-04-16 234 le32_to_cpu(header.EraseCount); ^1da177e4c3f41 Linus Torvalds 2005-04-16 235 xvalid++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 236 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 237 if (xtrans == part->header.NumTransferUnits) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 238 printk(KERN_NOTICE "ftl_cs: format error: too many " ^1da177e4c3f41 Linus Torvalds 2005-04-16 239 "transfer units!\n"); ^1da177e4c3f41 Linus Torvalds 2005-04-16 240 goto out_XferInfo; ^1da177e4c3f41 Linus Torvalds 2005-04-16 241 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 242 if (hdr_ok && (le16_to_cpu(header.LogicalEUN) == 0xffff)) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 243 part->XferInfo[xtrans].state = XFER_PREPARED; ^1da177e4c3f41 Linus Torvalds 2005-04-16 244 part->XferInfo[xtrans].EraseCount = le32_to_cpu(header.EraseCount); ^1da177e4c3f41 Linus Torvalds 2005-04-16 245 } else { ^1da177e4c3f41 Linus Torvalds 2005-04-16 246 part->XferInfo[xtrans].state = XFER_UNKNOWN; ^1da177e4c3f41 Linus Torvalds 2005-04-16 247 /* Pick anything reasonable for the erase count */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 248 part->XferInfo[xtrans].EraseCount = ^1da177e4c3f41 Linus Torvalds 2005-04-16 249 le32_to_cpu(part->header.EraseCount); ^1da177e4c3f41 Linus Torvalds 2005-04-16 250 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 251 part->XferInfo[xtrans].Offset = offset; ^1da177e4c3f41 Linus Torvalds 2005-04-16 252 xtrans++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 253 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 254 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 255 /* Check for format trouble */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 256 header = part->header; ^1da177e4c3f41 Linus Torvalds 2005-04-16 257 if ((xtrans != header.NumTransferUnits) || ^1da177e4c3f41 Linus Torvalds 2005-04-16 258 (xvalid+xtrans != le16_to_cpu(header.NumEraseUnits))) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 259 printk(KERN_NOTICE "ftl_cs: format error: erase units " ^1da177e4c3f41 Linus Torvalds 2005-04-16 260 "don't add up!\n"); ^1da177e4c3f41 Linus Torvalds 2005-04-16 261 goto out_XferInfo; ^1da177e4c3f41 Linus Torvalds 2005-04-16 262 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 263 ^1da177e4c3f41 Linus Torvalds 2005-04-16 264 /* Set up virtual page map */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 265 blocks = le32_to_cpu(header.FormattedSize) >> header.BlockSize; 42bc47b35320e0 Kees Cook 2018-06-12 266 part->VirtualBlockMap = vmalloc(array_size(blocks, sizeof(uint32_t))); ^1da177e4c3f41 Linus Torvalds 2005-04-16 267 if (!part->VirtualBlockMap) ^1da177e4c3f41 Linus Torvalds 2005-04-16 268 goto out_XferInfo; ^1da177e4c3f41 Linus Torvalds 2005-04-16 269 3854be7712f7b4 David Woodhouse 2008-12-10 270 memset(part->VirtualBlockMap, 0xff, blocks * sizeof(uint32_t)); ^1da177e4c3f41 Linus Torvalds 2005-04-16 271 part->BlocksPerUnit = (1 << header.EraseUnitSize) >> header.BlockSize; ^1da177e4c3f41 Linus Torvalds 2005-04-16 272 6da2ec56059c3c Kees Cook 2018-06-12 273 part->bam_cache = kmalloc_array(part->BlocksPerUnit, sizeof(uint32_t), ^1da177e4c3f41 Linus Torvalds 2005-04-16 274 GFP_KERNEL); ^1da177e4c3f41 Linus Torvalds 2005-04-16 275 if (!part->bam_cache) ^1da177e4c3f41 Linus Torvalds 2005-04-16 276 goto out_VirtualBlockMap; ^1da177e4c3f41 Linus Torvalds 2005-04-16 277 ^1da177e4c3f41 Linus Torvalds 2005-04-16 278 part->bam_index = 0xffff; ^1da177e4c3f41 Linus Torvalds 2005-04-16 279 part->FreeTotal = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 280 ^1da177e4c3f41 Linus Torvalds 2005-04-16 281 for (i = 0; i < part->DataUnits; i++) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 282 part->EUNInfo[i].Free = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 283 part->EUNInfo[i].Deleted = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 284 offset = part->EUNInfo[i].Offset + le32_to_cpu(header.BAMOffset); ^1da177e4c3f41 Linus Torvalds 2005-04-16 285 329ad399a9b3ad Artem Bityutskiy 2011-12-23 286 ret = mtd_read(part->mbd.mtd, offset, 3854be7712f7b4 David Woodhouse 2008-12-10 287 part->BlocksPerUnit * sizeof(uint32_t), &retval, ^1da177e4c3f41 Linus Torvalds 2005-04-16 288 (unsigned char *)part->bam_cache); ^1da177e4c3f41 Linus Torvalds 2005-04-16 289 ^1da177e4c3f41 Linus Torvalds 2005-04-16 290 if (ret) ^1da177e4c3f41 Linus Torvalds 2005-04-16 291 goto out_bam_cache; ^1da177e4c3f41 Linus Torvalds 2005-04-16 292 ^1da177e4c3f41 Linus Torvalds 2005-04-16 293 for (j = 0; j < part->BlocksPerUnit; j++) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 294 if (BLOCK_FREE(le32_to_cpu(part->bam_cache[j]))) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 295 part->EUNInfo[i].Free++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 296 part->FreeTotal++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 297 } else if ((BLOCK_TYPE(le32_to_cpu(part->bam_cache[j])) == BLOCK_DATA) && ^1da177e4c3f41 Linus Torvalds 2005-04-16 298 (BLOCK_NUMBER(le32_to_cpu(part->bam_cache[j])) < blocks)) ^1da177e4c3f41 Linus Torvalds 2005-04-16 299 part->VirtualBlockMap[BLOCK_NUMBER(le32_to_cpu(part->bam_cache[j]))] = ^1da177e4c3f41 Linus Torvalds 2005-04-16 300 (i << header.EraseUnitSize) + (j << header.BlockSize); ^1da177e4c3f41 Linus Torvalds 2005-04-16 301 else if (BLOCK_DELETED(le32_to_cpu(part->bam_cache[j]))) ^1da177e4c3f41 Linus Torvalds 2005-04-16 302 part->EUNInfo[i].Deleted++; ^1da177e4c3f41 Linus Torvalds 2005-04-16 303 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 304 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 305 ^1da177e4c3f41 Linus Torvalds 2005-04-16 306 ret = 0; ^1da177e4c3f41 Linus Torvalds 2005-04-16 307 goto out; ^1da177e4c3f41 Linus Torvalds 2005-04-16 308 ^1da177e4c3f41 Linus Torvalds 2005-04-16 309 out_bam_cache: ^1da177e4c3f41 Linus Torvalds 2005-04-16 310 kfree(part->bam_cache); ^1da177e4c3f41 Linus Torvalds 2005-04-16 311 out_VirtualBlockMap: ^1da177e4c3f41 Linus Torvalds 2005-04-16 312 vfree(part->VirtualBlockMap); ^1da177e4c3f41 Linus Torvalds 2005-04-16 313 out_XferInfo: ^1da177e4c3f41 Linus Torvalds 2005-04-16 314 kfree(part->XferInfo); ^1da177e4c3f41 Linus Torvalds 2005-04-16 315 out_EUNInfo: ^1da177e4c3f41 Linus Torvalds 2005-04-16 316 kfree(part->EUNInfo); ^1da177e4c3f41 Linus Torvalds 2005-04-16 317 out: ^1da177e4c3f41 Linus Torvalds 2005-04-16 318 return ret; ^1da177e4c3f41 Linus Torvalds 2005-04-16 319 } /* build_maps */ ^1da177e4c3f41 Linus Torvalds 2005-04-16 320 :::::: The code at line 220 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2 :::::: TO: Linus Torvalds <[email protected]> :::::: CC: Linus Torvalds <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
