Re: [PATCH v2 4/7] nvmem: increase the reference count of a gpio passed over config
From: kbuild test robot
Date: Wed Feb 19 2020 - 22:04:29 EST
Hi Bartosz,
I love your patch! Perhaps something to improve:
[auto build test WARNING on gpio/for-next]
[also build test WARNING on linus/master v5.6-rc2]
[cannot apply to next-20200219]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Bartosz-Golaszewski/nvmem-gpio-fix-resource-management/20200220-045651
base: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git for-next
config: nios2-3c120_defconfig (attached as .config)
compiler: nios2-linux-gcc (GCC) 7.5.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.5.0 make.cross ARCH=nios2
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>
All warnings (new ones prefixed by >>):
drivers/nvmem/core.c: In function 'nvmem_register':
drivers/nvmem/core.c:349:20: error: implicit declaration of function 'gpiod_ref'; did you mean 'gpiod_get'? [-Werror=implicit-function-declaration]
nvmem->wp_gpio = gpiod_ref(config->wp_gpio);
^~~~~~~~~
gpiod_get
>> drivers/nvmem/core.c:349:18: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
nvmem->wp_gpio = gpiod_ref(config->wp_gpio);
^
cc1: some warnings being treated as errors
vim +349 drivers/nvmem/core.c
322
323 /**
324 * nvmem_register() - Register a nvmem device for given nvmem_config.
325 * Also creates an binary entry in /sys/bus/nvmem/devices/dev-name/nvmem
326 *
327 * @config: nvmem device configuration with which nvmem device is created.
328 *
329 * Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device
330 * on success.
331 */
332
333 struct nvmem_device *nvmem_register(const struct nvmem_config *config)
334 {
335 struct nvmem_device *nvmem;
336 int rval;
337
338 if (!config->dev)
339 return ERR_PTR(-EINVAL);
340
341 nvmem = kzalloc(sizeof(*nvmem), GFP_KERNEL);
342 if (!nvmem)
343 return ERR_PTR(-ENOMEM);
344
345 rval = ida_simple_get(&nvmem_ida, 0, 0, GFP_KERNEL);
346 if (rval < 0)
347 goto err_free_nvmem;
348 if (config->wp_gpio)
> 349 nvmem->wp_gpio = gpiod_ref(config->wp_gpio);
350 else
351 nvmem->wp_gpio = gpiod_get_optional(config->dev, "wp",
352 GPIOD_OUT_HIGH);
353 if (IS_ERR(nvmem->wp_gpio))
354 goto err_ida_remove;
355
356
357 kref_init(&nvmem->refcnt);
358 INIT_LIST_HEAD(&nvmem->cells);
359
360 nvmem->id = rval;
361 nvmem->owner = config->owner;
362 if (!nvmem->owner && config->dev->driver)
363 nvmem->owner = config->dev->driver->owner;
364 nvmem->stride = config->stride ?: 1;
365 nvmem->word_size = config->word_size ?: 1;
366 nvmem->size = config->size;
367 nvmem->dev.type = &nvmem_provider_type;
368 nvmem->dev.bus = &nvmem_bus_type;
369 nvmem->dev.parent = config->dev;
370 nvmem->priv = config->priv;
371 nvmem->type = config->type;
372 nvmem->reg_read = config->reg_read;
373 nvmem->reg_write = config->reg_write;
374 if (!config->no_of_node)
375 nvmem->dev.of_node = config->dev->of_node;
376
377 if (config->id == -1 && config->name) {
378 dev_set_name(&nvmem->dev, "%s", config->name);
379 } else {
380 dev_set_name(&nvmem->dev, "%s%d",
381 config->name ? : "nvmem",
382 config->name ? config->id : nvmem->id);
383 }
384
385 nvmem->read_only = device_property_present(config->dev, "read-only") ||
386 config->read_only || !nvmem->reg_write;
387
388 nvmem->dev.groups = nvmem_sysfs_get_groups(nvmem, config);
389
390 device_initialize(&nvmem->dev);
391
392 dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
393
394 rval = device_add(&nvmem->dev);
395 if (rval)
396 goto err_put_device;
397
398 if (config->compat) {
399 rval = nvmem_sysfs_setup_compat(nvmem, config);
400 if (rval)
401 goto err_device_del;
402 }
403
404 if (config->cells) {
405 rval = nvmem_add_cells(nvmem, config->cells, config->ncells);
406 if (rval)
407 goto err_teardown_compat;
408 }
409
410 rval = nvmem_add_cells_from_table(nvmem);
411 if (rval)
412 goto err_remove_cells;
413
414 rval = nvmem_add_cells_from_of(nvmem);
415 if (rval)
416 goto err_remove_cells;
417
418 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_ADD, nvmem);
419
420 return nvmem;
421
422 err_remove_cells:
423 nvmem_device_remove_all_cells(nvmem);
424 err_teardown_compat:
425 if (config->compat)
426 nvmem_sysfs_remove_compat(nvmem, config);
427 err_device_del:
428 device_del(&nvmem->dev);
429 err_put_device:
430 put_device(&nvmem->dev);
431 err_ida_remove:
432 ida_simple_remove(&nvmem_ida, nvmem->id);
433 err_free_nvmem:
434 kfree(nvmem);
435
436 return ERR_PTR(rval);
437 }
438 EXPORT_SYMBOL_GPL(nvmem_register);
439
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip