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.