All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com
Subject: drivers/vfio/group.c:400:48: warning: Parameter 'iommu_group' can be declared as pointer to const [constParameter]
Date: Thu, 2 Feb 2023 21:07:31 +0800	[thread overview]
Message-ID: <202302022144.V4v62TII-lkp@intel.com> (raw)

:::::: 
:::::: Manual check reason: "low confidence static check warning: drivers/vfio/group.c:400:48: warning: Parameter 'iommu_group' can be declared as pointer to const [constParameter]"
:::::: 

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Yi Liu <yi.l.liu@intel.com>
CC: Jason Gunthorpe <jgg@ziepe.ca>
CC: Kevin Tian <kevin.tian@intel.com>
CC: Alex Williamson <alex.williamson@redhat.com>

Hi Yi,

FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   9f266ccaa2f5228bfe67ad58a94ca4e0109b954a
commit: 9eefba8002c27d65ab52a533fd0611b099b73591 vfio: Move vfio group specific code into group.c
date:   8 weeks ago
:::::: branch date: 19 hours ago
:::::: commit date: 8 weeks ago
compiler: arc-elf-gcc (GCC) 12.1.0
reproduce (cppcheck warning):
        # apt-get install cppcheck
        git checkout 9eefba8002c27d65ab52a533fd0611b099b73591
        cppcheck --quiet --enable=style,performance,portability --template=gcc FILE

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>


cppcheck possible warnings: (new ones prefixed by >>, may not real problems)

>> drivers/vfio/group.c:400:48: warning: Parameter 'iommu_group' can be declared as pointer to const [constParameter]
   vfio_group_find_from_iommu(struct iommu_group *iommu_group)
                                                  ^
>> drivers/vfio/group.c:535:76: warning: Parameter 'dev' can be declared as pointer to const [constParameter]
   static bool vfio_group_has_device(struct vfio_group *group, struct device *dev)
                                                                              ^
   drivers/vfio/group.c:411:14: warning: Uninitialized variable: group->iommu_group [uninitvar]
     if (group->iommu_group == iommu_group)
                ^

vim +/iommu_group +400 drivers/vfio/group.c

9eefba8002c27d Yi Liu 2022-11-25  395  
9eefba8002c27d Yi Liu 2022-11-25  396  /*
9eefba8002c27d Yi Liu 2022-11-25  397   * Group objects - create, release, get, put, search
9eefba8002c27d Yi Liu 2022-11-25  398   */
9eefba8002c27d Yi Liu 2022-11-25  399  static struct vfio_group *
9eefba8002c27d Yi Liu 2022-11-25 @400  vfio_group_find_from_iommu(struct iommu_group *iommu_group)
9eefba8002c27d Yi Liu 2022-11-25  401  {
9eefba8002c27d Yi Liu 2022-11-25  402  	struct vfio_group *group;
9eefba8002c27d Yi Liu 2022-11-25  403  
9eefba8002c27d Yi Liu 2022-11-25  404  	lockdep_assert_held(&vfio.group_lock);
9eefba8002c27d Yi Liu 2022-11-25  405  
9eefba8002c27d Yi Liu 2022-11-25  406  	/*
9eefba8002c27d Yi Liu 2022-11-25  407  	 * group->iommu_group from the vfio.group_list cannot be NULL
9eefba8002c27d Yi Liu 2022-11-25  408  	 * under the vfio.group_lock.
9eefba8002c27d Yi Liu 2022-11-25  409  	 */
9eefba8002c27d Yi Liu 2022-11-25  410  	list_for_each_entry(group, &vfio.group_list, vfio_next) {
9eefba8002c27d Yi Liu 2022-11-25  411  		if (group->iommu_group == iommu_group)
9eefba8002c27d Yi Liu 2022-11-25  412  			return group;
9eefba8002c27d Yi Liu 2022-11-25  413  	}
9eefba8002c27d Yi Liu 2022-11-25  414  	return NULL;
9eefba8002c27d Yi Liu 2022-11-25  415  }
9eefba8002c27d Yi Liu 2022-11-25  416  
9eefba8002c27d Yi Liu 2022-11-25  417  static void vfio_group_release(struct device *dev)
9eefba8002c27d Yi Liu 2022-11-25  418  {
9eefba8002c27d Yi Liu 2022-11-25  419  	struct vfio_group *group = container_of(dev, struct vfio_group, dev);
9eefba8002c27d Yi Liu 2022-11-25  420  
9eefba8002c27d Yi Liu 2022-11-25  421  	mutex_destroy(&group->device_lock);
9eefba8002c27d Yi Liu 2022-11-25  422  	mutex_destroy(&group->group_lock);
9eefba8002c27d Yi Liu 2022-11-25  423  	WARN_ON(group->iommu_group);
9eefba8002c27d Yi Liu 2022-11-25  424  	ida_free(&vfio.group_ida, MINOR(group->dev.devt));
9eefba8002c27d Yi Liu 2022-11-25  425  	kfree(group);
9eefba8002c27d Yi Liu 2022-11-25  426  }
9eefba8002c27d Yi Liu 2022-11-25  427  
9eefba8002c27d Yi Liu 2022-11-25  428  static struct vfio_group *vfio_group_alloc(struct iommu_group *iommu_group,
9eefba8002c27d Yi Liu 2022-11-25  429  					   enum vfio_group_type type)
9eefba8002c27d Yi Liu 2022-11-25  430  {
9eefba8002c27d Yi Liu 2022-11-25  431  	struct vfio_group *group;
9eefba8002c27d Yi Liu 2022-11-25  432  	int minor;
9eefba8002c27d Yi Liu 2022-11-25  433  
9eefba8002c27d Yi Liu 2022-11-25  434  	group = kzalloc(sizeof(*group), GFP_KERNEL);
9eefba8002c27d Yi Liu 2022-11-25  435  	if (!group)
9eefba8002c27d Yi Liu 2022-11-25  436  		return ERR_PTR(-ENOMEM);
9eefba8002c27d Yi Liu 2022-11-25  437  
9eefba8002c27d Yi Liu 2022-11-25  438  	minor = ida_alloc_max(&vfio.group_ida, MINORMASK, GFP_KERNEL);
9eefba8002c27d Yi Liu 2022-11-25  439  	if (minor < 0) {
9eefba8002c27d Yi Liu 2022-11-25  440  		kfree(group);
9eefba8002c27d Yi Liu 2022-11-25  441  		return ERR_PTR(minor);
9eefba8002c27d Yi Liu 2022-11-25  442  	}
9eefba8002c27d Yi Liu 2022-11-25  443  
9eefba8002c27d Yi Liu 2022-11-25  444  	device_initialize(&group->dev);
9eefba8002c27d Yi Liu 2022-11-25  445  	group->dev.devt = MKDEV(MAJOR(vfio.group_devt), minor);
9eefba8002c27d Yi Liu 2022-11-25  446  	group->dev.class = vfio.class;
9eefba8002c27d Yi Liu 2022-11-25  447  	group->dev.release = vfio_group_release;
9eefba8002c27d Yi Liu 2022-11-25  448  	cdev_init(&group->cdev, &vfio_group_fops);
9eefba8002c27d Yi Liu 2022-11-25  449  	group->cdev.owner = THIS_MODULE;
9eefba8002c27d Yi Liu 2022-11-25  450  
9eefba8002c27d Yi Liu 2022-11-25  451  	refcount_set(&group->drivers, 1);
9eefba8002c27d Yi Liu 2022-11-25  452  	mutex_init(&group->group_lock);
9eefba8002c27d Yi Liu 2022-11-25  453  	INIT_LIST_HEAD(&group->device_list);
9eefba8002c27d Yi Liu 2022-11-25  454  	mutex_init(&group->device_lock);
9eefba8002c27d Yi Liu 2022-11-25  455  	group->iommu_group = iommu_group;
9eefba8002c27d Yi Liu 2022-11-25  456  	/* put in vfio_group_release() */
9eefba8002c27d Yi Liu 2022-11-25  457  	iommu_group_ref_get(iommu_group);
9eefba8002c27d Yi Liu 2022-11-25  458  	group->type = type;
9eefba8002c27d Yi Liu 2022-11-25  459  	BLOCKING_INIT_NOTIFIER_HEAD(&group->notifier);
9eefba8002c27d Yi Liu 2022-11-25  460  
9eefba8002c27d Yi Liu 2022-11-25  461  	return group;
9eefba8002c27d Yi Liu 2022-11-25  462  }
9eefba8002c27d Yi Liu 2022-11-25  463  
9eefba8002c27d Yi Liu 2022-11-25  464  static struct vfio_group *vfio_create_group(struct iommu_group *iommu_group,
9eefba8002c27d Yi Liu 2022-11-25  465  		enum vfio_group_type type)
9eefba8002c27d Yi Liu 2022-11-25  466  {
9eefba8002c27d Yi Liu 2022-11-25  467  	struct vfio_group *group;
9eefba8002c27d Yi Liu 2022-11-25  468  	struct vfio_group *ret;
9eefba8002c27d Yi Liu 2022-11-25  469  	int err;
9eefba8002c27d Yi Liu 2022-11-25  470  
9eefba8002c27d Yi Liu 2022-11-25  471  	lockdep_assert_held(&vfio.group_lock);
9eefba8002c27d Yi Liu 2022-11-25  472  
9eefba8002c27d Yi Liu 2022-11-25  473  	group = vfio_group_alloc(iommu_group, type);
9eefba8002c27d Yi Liu 2022-11-25  474  	if (IS_ERR(group))
9eefba8002c27d Yi Liu 2022-11-25  475  		return group;
9eefba8002c27d Yi Liu 2022-11-25  476  
9eefba8002c27d Yi Liu 2022-11-25  477  	err = dev_set_name(&group->dev, "%s%d",
9eefba8002c27d Yi Liu 2022-11-25  478  			   group->type == VFIO_NO_IOMMU ? "noiommu-" : "",
9eefba8002c27d Yi Liu 2022-11-25  479  			   iommu_group_id(iommu_group));
9eefba8002c27d Yi Liu 2022-11-25  480  	if (err) {
9eefba8002c27d Yi Liu 2022-11-25  481  		ret = ERR_PTR(err);
9eefba8002c27d Yi Liu 2022-11-25  482  		goto err_put;
9eefba8002c27d Yi Liu 2022-11-25  483  	}
9eefba8002c27d Yi Liu 2022-11-25  484  
9eefba8002c27d Yi Liu 2022-11-25  485  	err = cdev_device_add(&group->cdev, &group->dev);
9eefba8002c27d Yi Liu 2022-11-25  486  	if (err) {
9eefba8002c27d Yi Liu 2022-11-25  487  		ret = ERR_PTR(err);
9eefba8002c27d Yi Liu 2022-11-25  488  		goto err_put;
9eefba8002c27d Yi Liu 2022-11-25  489  	}
9eefba8002c27d Yi Liu 2022-11-25  490  
9eefba8002c27d Yi Liu 2022-11-25  491  	list_add(&group->vfio_next, &vfio.group_list);
9eefba8002c27d Yi Liu 2022-11-25  492  
9eefba8002c27d Yi Liu 2022-11-25  493  	return group;
9eefba8002c27d Yi Liu 2022-11-25  494  
9eefba8002c27d Yi Liu 2022-11-25  495  err_put:
9eefba8002c27d Yi Liu 2022-11-25  496  	put_device(&group->dev);
9eefba8002c27d Yi Liu 2022-11-25  497  	return ret;
9eefba8002c27d Yi Liu 2022-11-25  498  }
9eefba8002c27d Yi Liu 2022-11-25  499  
9eefba8002c27d Yi Liu 2022-11-25  500  static struct vfio_group *vfio_noiommu_group_alloc(struct device *dev,
9eefba8002c27d Yi Liu 2022-11-25  501  		enum vfio_group_type type)
9eefba8002c27d Yi Liu 2022-11-25  502  {
9eefba8002c27d Yi Liu 2022-11-25  503  	struct iommu_group *iommu_group;
9eefba8002c27d Yi Liu 2022-11-25  504  	struct vfio_group *group;
9eefba8002c27d Yi Liu 2022-11-25  505  	int ret;
9eefba8002c27d Yi Liu 2022-11-25  506  
9eefba8002c27d Yi Liu 2022-11-25  507  	iommu_group = iommu_group_alloc();
9eefba8002c27d Yi Liu 2022-11-25  508  	if (IS_ERR(iommu_group))
9eefba8002c27d Yi Liu 2022-11-25  509  		return ERR_CAST(iommu_group);
9eefba8002c27d Yi Liu 2022-11-25  510  
9eefba8002c27d Yi Liu 2022-11-25  511  	ret = iommu_group_set_name(iommu_group, "vfio-noiommu");
9eefba8002c27d Yi Liu 2022-11-25  512  	if (ret)
9eefba8002c27d Yi Liu 2022-11-25  513  		goto out_put_group;
9eefba8002c27d Yi Liu 2022-11-25  514  	ret = iommu_group_add_device(iommu_group, dev);
9eefba8002c27d Yi Liu 2022-11-25  515  	if (ret)
9eefba8002c27d Yi Liu 2022-11-25  516  		goto out_put_group;
9eefba8002c27d Yi Liu 2022-11-25  517  
9eefba8002c27d Yi Liu 2022-11-25  518  	mutex_lock(&vfio.group_lock);
9eefba8002c27d Yi Liu 2022-11-25  519  	group = vfio_create_group(iommu_group, type);
9eefba8002c27d Yi Liu 2022-11-25  520  	mutex_unlock(&vfio.group_lock);
9eefba8002c27d Yi Liu 2022-11-25  521  	if (IS_ERR(group)) {
9eefba8002c27d Yi Liu 2022-11-25  522  		ret = PTR_ERR(group);
9eefba8002c27d Yi Liu 2022-11-25  523  		goto out_remove_device;
9eefba8002c27d Yi Liu 2022-11-25  524  	}
9eefba8002c27d Yi Liu 2022-11-25  525  	iommu_group_put(iommu_group);
9eefba8002c27d Yi Liu 2022-11-25  526  	return group;
9eefba8002c27d Yi Liu 2022-11-25  527  
9eefba8002c27d Yi Liu 2022-11-25  528  out_remove_device:
9eefba8002c27d Yi Liu 2022-11-25  529  	iommu_group_remove_device(dev);
9eefba8002c27d Yi Liu 2022-11-25  530  out_put_group:
9eefba8002c27d Yi Liu 2022-11-25  531  	iommu_group_put(iommu_group);
9eefba8002c27d Yi Liu 2022-11-25  532  	return ERR_PTR(ret);
9eefba8002c27d Yi Liu 2022-11-25  533  }
9eefba8002c27d Yi Liu 2022-11-25  534  
9eefba8002c27d Yi Liu 2022-11-25 @535  static bool vfio_group_has_device(struct vfio_group *group, struct device *dev)
9eefba8002c27d Yi Liu 2022-11-25  536  {
9eefba8002c27d Yi Liu 2022-11-25  537  	struct vfio_device *device;
9eefba8002c27d Yi Liu 2022-11-25  538  
9eefba8002c27d Yi Liu 2022-11-25  539  	mutex_lock(&group->device_lock);
9eefba8002c27d Yi Liu 2022-11-25  540  	list_for_each_entry(device, &group->device_list, group_next) {
9eefba8002c27d Yi Liu 2022-11-25  541  		if (device->dev == dev) {
9eefba8002c27d Yi Liu 2022-11-25  542  			mutex_unlock(&group->device_lock);
9eefba8002c27d Yi Liu 2022-11-25  543  			return true;
9eefba8002c27d Yi Liu 2022-11-25  544  		}
9eefba8002c27d Yi Liu 2022-11-25  545  	}
9eefba8002c27d Yi Liu 2022-11-25  546  	mutex_unlock(&group->device_lock);
9eefba8002c27d Yi Liu 2022-11-25  547  	return false;
9eefba8002c27d Yi Liu 2022-11-25  548  }
9eefba8002c27d Yi Liu 2022-11-25  549  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

                 reply	other threads:[~2023-02-02 13:08 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202302022144.V4v62TII-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.