* drivers/vfio/group.c:400:48: warning: Parameter 'iommu_group' can be declared as pointer to const [constParameter]
@ 2023-02-02 13:07 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-02-02 13:07 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: 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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-02-02 13:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-02 13:07 drivers/vfio/group.c:400:48: warning: Parameter 'iommu_group' can be declared as pointer to const [constParameter] kernel test robot
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.