Hi Vishal, [auto build test ERROR on linux-nvdimm/libnvdimm-for-next] [also build test ERROR on v4.4-rc5 next-20151218] url: https://github.com/0day-ci/linux/commits/vishal-kernel-org/Expose-known-poison-in-SPA-ranges-to-the-block-layer/20151220-172142 base: https://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-for-next config: x86_64-randconfig-x017-201551 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): drivers/nvdimm/pmem.c: In function 'pmem_add_badblock_range': >> drivers/nvdimm/pmem.c:201:9: error: implicit declaration of function 'disk_set_badblocks' [-Werror=implicit-function-declaration] rc = disk_set_badblocks(disk, s, done); ^ drivers/nvdimm/pmem.c: In function 'pmem_attach_disk': >> drivers/nvdimm/pmem.c:314:8: error: implicit declaration of function 'disk_alloc_badblocks' [-Werror=implicit-function-declaration] ret = disk_alloc_badblocks(disk); ^ cc1: some warnings being treated as errors vim +/disk_set_badblocks +201 drivers/nvdimm/pmem.c 195 sector_t s = start_sector; 196 int rc; 197 198 while (remaining) { 199 int done = min_t(u64, remaining, INT_MAX); 200 > 201 rc = disk_set_badblocks(disk, s, done); 202 if (rc) 203 return rc; 204 remaining -= done; 205 s += done; 206 } 207 return 0; 208 } else 209 return disk_set_badblocks(disk, start_sector, num_sectors); 210 } 211 212 /* 213 * The poison list generated during NFIT initialization may contain multiple, 214 * possibly overlapping ranges in the SPA (System Physical Address) space. 215 * Compare each of these ranges to the pmem namespace currently being 216 * initialized, and add badblocks for the sub-ranges that match 217 */ 218 static int pmem_add_poison(struct gendisk *disk, struct nvdimm_bus *nvdimm_bus) 219 { 220 struct pmem_device *pmem = disk->private_data; 221 struct list_head *poison_list; 222 struct nd_poison *pl; 223 int rc; 224 225 poison_list = nvdimm_bus_get_poison_list(nvdimm_bus); 226 if (list_empty(poison_list)) 227 return 0; 228 229 list_for_each_entry(pl, poison_list, list) { 230 u64 pl_end = pl->start + pl->length - 1; 231 u64 pmem_end = pmem->phys_addr + pmem->size - 1; 232 233 /* Discard intervals with no intersection */ 234 if (pl_end < pmem->phys_addr) 235 continue; 236 if (pl->start > pmem_end) 237 continue; 238 /* Deal with any overlap after start of the pmem range */ 239 if (pl->start >= pmem->phys_addr) { 240 u64 start = pl->start; 241 u64 len; 242 243 if (pl_end <= pmem_end) 244 len = pl->length; 245 else 246 len = pmem->phys_addr + pmem->size - pl->start; 247 248 rc = pmem_add_badblock_range(disk, start, len); 249 if (rc) 250 return rc; 251 dev_info(&nvdimm_bus->dev, 252 "Found a poison range (0x%llx, 0x%llx)\n", 253 start, len); 254 continue; 255 } 256 /* Deal with overlap for poison starting before pmem range */ 257 if (pl->start < pmem->phys_addr) { 258 u64 start = pmem->phys_addr; 259 u64 len; 260 261 if (pl_end < pmem_end) 262 len = pl->start + pl->length - pmem->phys_addr; 263 else 264 len = pmem->size; 265 266 rc = pmem_add_badblock_range(disk, start, len); 267 if (rc) 268 return rc; 269 dev_info(&nvdimm_bus->dev, 270 "Found a poison range (0x%llx, 0x%llx)\n", 271 start, len); 272 } 273 } 274 275 return 0; 276 } 277 278 static int pmem_attach_disk(struct device *dev, 279 struct nd_namespace_common *ndns, struct pmem_device *pmem) 280 { 281 struct nd_region *nd_region = to_nd_region(dev->parent); 282 struct nvdimm_bus *nvdimm_bus; 283 int nid = dev_to_node(dev); 284 struct gendisk *disk; 285 int ret; 286 287 pmem->pmem_queue = blk_alloc_queue_node(GFP_KERNEL, nid); 288 if (!pmem->pmem_queue) 289 return -ENOMEM; 290 291 blk_queue_make_request(pmem->pmem_queue, pmem_make_request); 292 blk_queue_physical_block_size(pmem->pmem_queue, PAGE_SIZE); 293 blk_queue_max_hw_sectors(pmem->pmem_queue, UINT_MAX); 294 blk_queue_bounce_limit(pmem->pmem_queue, BLK_BOUNCE_ANY); 295 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, pmem->pmem_queue); 296 297 disk = alloc_disk_node(0, nid); 298 if (!disk) { 299 blk_cleanup_queue(pmem->pmem_queue); 300 return -ENOMEM; 301 } 302 303 disk->major = pmem_major; 304 disk->first_minor = 0; 305 disk->fops = &pmem_fops; 306 disk->private_data = pmem; 307 disk->queue = pmem->pmem_queue; 308 disk->flags = GENHD_FL_EXT_DEVT; 309 nvdimm_namespace_disk_name(ndns, disk->disk_name); 310 disk->driverfs_dev = dev; 311 set_capacity(disk, (pmem->size - pmem->data_offset) / 512); 312 pmem->pmem_disk = disk; 313 > 314 ret = disk_alloc_badblocks(disk); 315 if (ret) 316 return ret; 317 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: Binary data