Messages in this thread | | | Date | Tue, 6 Jul 2021 13:24:02 +0800 | From | kernel test robot <> | Subject | [jgunthorpe:vfio_reflck_cleanup 5/12] drivers/vfio/pci/vfio_pci.c:2218:2: warning: variable 'to_reset' is used uninitialized whenever 'for' loop exits because its condition is false |
| |
tree: https://github.com/jgunthorpe/linux vfio_reflck_cleanup head: 092133ba5f5e5101af30de3b9448693753131849 commit: 58e8550548d133d11ebdea41a627de87dacc4168 [5/12] vfio/pci: Change vfio_pci_try_bus_reset() to use the dev_set config: x86_64-randconfig-a011-20210705 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 873e8b96b1226d64e4f95083147d8592ba7bd5d8) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://github.com/jgunthorpe/linux/commit/58e8550548d133d11ebdea41a627de87dacc4168 git remote add jgunthorpe https://github.com/jgunthorpe/linux git fetch --no-tags jgunthorpe vfio_reflck_cleanup git checkout 58e8550548d133d11ebdea41a627de87dacc4168 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/vfio/pci/vfio_pci.c:2218:2: warning: variable 'to_reset' is used uninitialized whenever 'for' loop exits because its condition is false [-Wsometimes-uninitialized] list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:629:7: note: expanded from macro 'list_for_each_entry' !list_entry_is_head(pos, head, member); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/vfio/pci/vfio_pci.c:2224:7: note: uninitialized use occurs here if (!to_reset) ^~~~~~~~ drivers/vfio/pci/vfio_pci.c:2218:2: note: remove the condition if it is always true list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) { ^ include/linux/list.h:629:7: note: expanded from macro 'list_for_each_entry' !list_entry_is_head(pos, head, member); \ ^ drivers/vfio/pci/vfio_pci.c:2196:34: note: initialize the variable 'to_reset' to silence this warning struct vfio_pci_device *to_reset; ^ = NULL 1 warning generated.
vim +2218 drivers/vfio/pci/vfio_pci.c
2177 2178 /* 2179 * If a bus or slot reset is available for the provided device and: 2180 * - All of the devices affected by that bus or slot reset are unused 2181 * (!refcnt) 2182 * - At least one of the affected devices is marked dirty via 2183 * needs_reset (such as by lack of FLR support) 2184 * Then attempt to perform that bus or slot reset. Callers are required 2185 * to hold vdev->dev_set->lock, protecting the bus/slot reset group from 2186 * concurrent opens. 2187 * 2188 * NB: vfio-core considers a group to be viable even if some devices are 2189 * bound to drivers like pci-stub or pcieport. Here we require all devices 2190 * to be bound to vfio_pci since that's the only way we can be sure they 2191 * stay put. 2192 */ 2193 static void vfio_pci_try_bus_reset(struct vfio_pci_device *vdev) 2194 { 2195 struct vfio_device_set *dev_set = vdev->vdev.dev_set; 2196 struct vfio_pci_device *to_reset; 2197 struct vfio_pci_device *cur; 2198 int ret; 2199 2200 if (pci_probe_reset_slot(vdev->pdev->slot) || 2201 pci_probe_reset_bus(vdev->pdev->bus)) 2202 return; 2203 2204 lockdep_assert_held(&vdev->vdev.dev_set->lock); 2205 2206 /* All VFIO devices have a closed FD */ 2207 list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) 2208 if (cur->vdev.open_count) 2209 return; 2210 2211 /* All devices in the group to be reset need VFIO devices */ 2212 if (vfio_pci_for_each_slot_or_bus( 2213 vdev->pdev, vfio_pci_check_all_devices_bound, dev_set, 2214 !pci_probe_reset_slot(vdev->pdev->slot))) 2215 return; 2216 2217 /* Does at least one need a reset? */ > 2218 list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) { 2219 if (cur->needs_reset) { 2220 to_reset = cur; 2221 break; 2222 } 2223 } 2224 if (!to_reset) 2225 return; 2226 2227 ret = pci_reset_bus(to_reset->pdev); 2228 if (ret) 2229 return; 2230 2231 list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) { 2232 cur->needs_reset = false; 2233 2234 if (cur != to_reset && !disable_idle_d3) 2235 vfio_pci_set_power_state(cur, PCI_D3hot); 2236 } 2237 } 2238
--- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [unhandled content-type:application/gzip] | |