[PATCH v5 01/18] remoteproc: make rsc table support optional

kbuild test robot lkp at intel.com
Tue Jun 7 10:35:37 PDT 2016


Hi,

[auto build test WARNING on robh/for-next]
[also build test WARNING on v4.7-rc2 next-20160607]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Peter-Griffin/Add-support-for-FDMA-DMA-controller-and-slim-core-rproc-found-on-STi-chipsets/20160608-002710
base:   https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux for-next
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/remoteproc/remoteproc_core.c: In function '__rproc_boot':
>> drivers/remoteproc/remoteproc_core.c:887:20: warning: 'loaded_table' may be used uninitialized in this function [-Wmaybe-uninitialized]
      rproc->table_ptr = loaded_table;
      ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
   drivers/remoteproc/remoteproc_core.c:803:33: note: 'loaded_table' was declared here
     struct resource_table *table, *loaded_table;
                                    ^~~~~~~~~~~~
   drivers/remoteproc/remoteproc_core.c: In function 'rproc_trigger_recovery':
>> drivers/remoteproc/remoteproc_core.c:1012:9: warning: 'ret' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return ret;
            ^~~

vim +/loaded_table +887 drivers/remoteproc/remoteproc_core.c

a2b950ac Ohad Ben-Cohen       2013-04-07   881  	/*
a2b950ac Ohad Ben-Cohen       2013-04-07   882  	 * Update table_ptr so that all subsequent vring allocations and
a2b950ac Ohad Ben-Cohen       2013-04-07   883  	 * virtio fields manipulation update the actual loaded resource table
a2b950ac Ohad Ben-Cohen       2013-04-07   884  	 * in device memory.
a2b950ac Ohad Ben-Cohen       2013-04-07   885  	 */
ea76063f Peter Griffin        2016-06-07   886  	if (rproc->has_rsctable)
a2b950ac Ohad Ben-Cohen       2013-04-07  @887  		rproc->table_ptr = loaded_table;
a2b950ac Ohad Ben-Cohen       2013-04-07   888  
400e64df Ohad Ben-Cohen       2011-10-20   889  	rproc->state = RPROC_RUNNING;
400e64df Ohad Ben-Cohen       2011-10-20   890  
400e64df Ohad Ben-Cohen       2011-10-20   891  	dev_info(dev, "remote processor %s is now up\n", rproc->name);
400e64df Ohad Ben-Cohen       2011-10-20   892  
400e64df Ohad Ben-Cohen       2011-10-20   893  	return 0;
400e64df Ohad Ben-Cohen       2011-10-20   894  
400e64df Ohad Ben-Cohen       2011-10-20   895  clean_up:
400e64df Ohad Ben-Cohen       2011-10-20   896  	rproc_resource_cleanup(rproc);
400e64df Ohad Ben-Cohen       2011-10-20   897  	rproc_disable_iommu(rproc);
400e64df Ohad Ben-Cohen       2011-10-20   898  	return ret;
400e64df Ohad Ben-Cohen       2011-10-20   899  }
400e64df Ohad Ben-Cohen       2011-10-20   900  
400e64df Ohad Ben-Cohen       2011-10-20   901  /*
400e64df Ohad Ben-Cohen       2011-10-20   902   * take a firmware and look for virtio devices to register.
400e64df Ohad Ben-Cohen       2011-10-20   903   *
400e64df Ohad Ben-Cohen       2011-10-20   904   * Note: this function is called asynchronously upon registration of the
400e64df Ohad Ben-Cohen       2011-10-20   905   * remote processor (so we must wait until it completes before we try
400e64df Ohad Ben-Cohen       2011-10-20   906   * to unregister the device. one other option is just to use kref here,
400e64df Ohad Ben-Cohen       2011-10-20   907   * that might be cleaner).
400e64df Ohad Ben-Cohen       2011-10-20   908   */
400e64df Ohad Ben-Cohen       2011-10-20   909  static void rproc_fw_config_virtio(const struct firmware *fw, void *context)
400e64df Ohad Ben-Cohen       2011-10-20   910  {
400e64df Ohad Ben-Cohen       2011-10-20   911  	struct rproc *rproc = context;
1e3e2c7c Ohad Ben-Cohen       2012-02-13   912  	struct resource_table *table;
1e3e2c7c Ohad Ben-Cohen       2012-02-13   913  	int ret, tablesz;
400e64df Ohad Ben-Cohen       2011-10-20   914  
400e64df Ohad Ben-Cohen       2011-10-20   915  	if (rproc_fw_sanity_check(rproc, fw) < 0)
400e64df Ohad Ben-Cohen       2011-10-20   916  		goto out;
400e64df Ohad Ben-Cohen       2011-10-20   917  
1e3e2c7c Ohad Ben-Cohen       2012-02-13   918  	/* look for the resource table */
bd484984 Sjur Brændeland      2012-06-19   919  	table = rproc_find_rsc_table(rproc, fw,  &tablesz);
1e3e2c7c Ohad Ben-Cohen       2012-02-13   920  	if (!table)
1e3e2c7c Ohad Ben-Cohen       2012-02-13   921  		goto out;
1e3e2c7c Ohad Ben-Cohen       2012-02-13   922  
a2b950ac Ohad Ben-Cohen       2013-04-07   923  	rproc->table_csum = crc32(0, table, tablesz);
a2b950ac Ohad Ben-Cohen       2013-04-07   924  
a2b950ac Ohad Ben-Cohen       2013-04-07   925  	/*
a2b950ac Ohad Ben-Cohen       2013-04-07   926  	 * Create a copy of the resource table. When a virtio device starts
a2b950ac Ohad Ben-Cohen       2013-04-07   927  	 * and calls vring_new_virtqueue() the address of the allocated vring
a2b950ac Ohad Ben-Cohen       2013-04-07   928  	 * will be stored in the cached_table. Before the device is started,
a2b950ac Ohad Ben-Cohen       2013-04-07   929  	 * cached_table will be copied into devic memory.
a2b950ac Ohad Ben-Cohen       2013-04-07   930  	 */
95cee62c Thomas Meyer         2013-07-01   931  	rproc->cached_table = kmemdup(table, tablesz, GFP_KERNEL);
a2b950ac Ohad Ben-Cohen       2013-04-07   932  	if (!rproc->cached_table)
a2b950ac Ohad Ben-Cohen       2013-04-07   933  		goto out;
a2b950ac Ohad Ben-Cohen       2013-04-07   934  
a2b950ac Ohad Ben-Cohen       2013-04-07   935  	rproc->table_ptr = rproc->cached_table;
a2b950ac Ohad Ben-Cohen       2013-04-07   936  
ba7290e0 Sjur Brændeland      2013-02-21   937  	/* count the number of notify-ids */
ba7290e0 Sjur Brændeland      2013-02-21   938  	rproc->max_notifyid = -1;
172e6ab1 Suman Anna           2015-02-27   939  	ret = rproc_handle_resources(rproc, tablesz,
172e6ab1 Suman Anna           2015-02-27   940  				     rproc_count_vrings_handler);
1e3e2c7c Ohad Ben-Cohen       2012-02-13   941  	if (ret)
400e64df Ohad Ben-Cohen       2011-10-20   942  		goto out;
400e64df Ohad Ben-Cohen       2011-10-20   943  
a2b950ac Ohad Ben-Cohen       2013-04-07   944  	/* look for virtio devices and register them */
a2b950ac Ohad Ben-Cohen       2013-04-07   945  	ret = rproc_handle_resources(rproc, tablesz, rproc_vdev_handler);
a2b950ac Ohad Ben-Cohen       2013-04-07   946  
400e64df Ohad Ben-Cohen       2011-10-20   947  out:
400e64df Ohad Ben-Cohen       2011-10-20   948  	release_firmware(fw);
160e7c84 Ohad Ben-Cohen       2012-07-04   949  	/* allow rproc_del() contexts, if any, to proceed */
400e64df Ohad Ben-Cohen       2011-10-20   950  	complete_all(&rproc->firmware_loading_complete);
400e64df Ohad Ben-Cohen       2011-10-20   951  }
400e64df Ohad Ben-Cohen       2011-10-20   952  
70b85ef8 Fernando Guzman Lugo 2012-08-30   953  static int rproc_add_virtio_devices(struct rproc *rproc)
70b85ef8 Fernando Guzman Lugo 2012-08-30   954  {
70b85ef8 Fernando Guzman Lugo 2012-08-30   955  	int ret;
70b85ef8 Fernando Guzman Lugo 2012-08-30   956  
70b85ef8 Fernando Guzman Lugo 2012-08-30   957  	/* rproc_del() calls must wait until async loader completes */
70b85ef8 Fernando Guzman Lugo 2012-08-30   958  	init_completion(&rproc->firmware_loading_complete);
70b85ef8 Fernando Guzman Lugo 2012-08-30   959  
70b85ef8 Fernando Guzman Lugo 2012-08-30   960  	/*
70b85ef8 Fernando Guzman Lugo 2012-08-30   961  	 * We must retrieve early virtio configuration info from
70b85ef8 Fernando Guzman Lugo 2012-08-30   962  	 * the firmware (e.g. whether to register a virtio device,
70b85ef8 Fernando Guzman Lugo 2012-08-30   963  	 * what virtio features does it support, ...).
70b85ef8 Fernando Guzman Lugo 2012-08-30   964  	 *
70b85ef8 Fernando Guzman Lugo 2012-08-30   965  	 * We're initiating an asynchronous firmware loading, so we can
70b85ef8 Fernando Guzman Lugo 2012-08-30   966  	 * be built-in kernel code, without hanging the boot process.
70b85ef8 Fernando Guzman Lugo 2012-08-30   967  	 */
70b85ef8 Fernando Guzman Lugo 2012-08-30   968  	ret = request_firmware_nowait(THIS_MODULE, FW_ACTION_HOTPLUG,
70b85ef8 Fernando Guzman Lugo 2012-08-30   969  				      rproc->firmware, &rproc->dev, GFP_KERNEL,
70b85ef8 Fernando Guzman Lugo 2012-08-30   970  				      rproc, rproc_fw_config_virtio);
70b85ef8 Fernando Guzman Lugo 2012-08-30   971  	if (ret < 0) {
70b85ef8 Fernando Guzman Lugo 2012-08-30   972  		dev_err(&rproc->dev, "request_firmware_nowait err: %d\n", ret);
70b85ef8 Fernando Guzman Lugo 2012-08-30   973  		complete_all(&rproc->firmware_loading_complete);
70b85ef8 Fernando Guzman Lugo 2012-08-30   974  	}
70b85ef8 Fernando Guzman Lugo 2012-08-30   975  
70b85ef8 Fernando Guzman Lugo 2012-08-30   976  	return ret;
70b85ef8 Fernando Guzman Lugo 2012-08-30   977  }
70b85ef8 Fernando Guzman Lugo 2012-08-30   978  
70b85ef8 Fernando Guzman Lugo 2012-08-30   979  /**
70b85ef8 Fernando Guzman Lugo 2012-08-30   980   * rproc_trigger_recovery() - recover a remoteproc
70b85ef8 Fernando Guzman Lugo 2012-08-30   981   * @rproc: the remote processor
70b85ef8 Fernando Guzman Lugo 2012-08-30   982   *
70b85ef8 Fernando Guzman Lugo 2012-08-30   983   * The recovery is done by reseting all the virtio devices, that way all the
70b85ef8 Fernando Guzman Lugo 2012-08-30   984   * rpmsg drivers will be reseted along with the remote processor making the
70b85ef8 Fernando Guzman Lugo 2012-08-30   985   * remoteproc functional again.
70b85ef8 Fernando Guzman Lugo 2012-08-30   986   *
70b85ef8 Fernando Guzman Lugo 2012-08-30   987   * This function can sleep, so it cannot be called from atomic context.
70b85ef8 Fernando Guzman Lugo 2012-08-30   988   */
70b85ef8 Fernando Guzman Lugo 2012-08-30   989  int rproc_trigger_recovery(struct rproc *rproc)
70b85ef8 Fernando Guzman Lugo 2012-08-30   990  {
70b85ef8 Fernando Guzman Lugo 2012-08-30   991  	struct rproc_vdev *rvdev, *rvtmp;
ea76063f Peter Griffin        2016-06-07   992  	int ret;
70b85ef8 Fernando Guzman Lugo 2012-08-30   993  
70b85ef8 Fernando Guzman Lugo 2012-08-30   994  	dev_err(&rproc->dev, "recovering %s\n", rproc->name);
70b85ef8 Fernando Guzman Lugo 2012-08-30   995  
70b85ef8 Fernando Guzman Lugo 2012-08-30   996  	init_completion(&rproc->crash_comp);
70b85ef8 Fernando Guzman Lugo 2012-08-30   997  
70b85ef8 Fernando Guzman Lugo 2012-08-30   998  	/* clean up remote vdev entries */
70b85ef8 Fernando Guzman Lugo 2012-08-30   999  	list_for_each_entry_safe(rvdev, rvtmp, &rproc->rvdevs, node)
70b85ef8 Fernando Guzman Lugo 2012-08-30  1000  		rproc_remove_virtio_dev(rvdev);
70b85ef8 Fernando Guzman Lugo 2012-08-30  1001  
70b85ef8 Fernando Guzman Lugo 2012-08-30  1002  	/* wait until there is no more rproc users */
70b85ef8 Fernando Guzman Lugo 2012-08-30  1003  	wait_for_completion(&rproc->crash_comp);
70b85ef8 Fernando Guzman Lugo 2012-08-30  1004  
a2b950ac Ohad Ben-Cohen       2013-04-07  1005  	/* Free the copy of the resource table */
a2b950ac Ohad Ben-Cohen       2013-04-07  1006  	kfree(rproc->cached_table);
ea76063f Peter Griffin        2016-06-07  1007  	rproc->cached_table = NULL;
ea76063f Peter Griffin        2016-06-07  1008  
ea76063f Peter Griffin        2016-06-07  1009  	if (rproc->has_rsctable)
ea76063f Peter Griffin        2016-06-07  1010  		ret = rproc_add_virtio_devices(rproc);
a2b950ac Ohad Ben-Cohen       2013-04-07  1011  
ea76063f Peter Griffin        2016-06-07 @1012  	return ret;
70b85ef8 Fernando Guzman Lugo 2012-08-30  1013  }
70b85ef8 Fernando Guzman Lugo 2012-08-30  1014  
400e64df Ohad Ben-Cohen       2011-10-20  1015  /**

:::::: The code at line 887 was first introduced by commit
:::::: a2b950ac7b1e6442919ee9e79c4963e134698869 remoteproc: perserve resource table data

:::::: TO: Ohad Ben-Cohen <ohad at wizery.com>
:::::: CC: Ohad Ben-Cohen <ohad at wizery.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 55044 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160608/739d9c48/attachment-0001.obj>


More information about the linux-arm-kernel mailing list