From: kernel test robot <lkp@intel.com>
To: Nicolin Chen <nicolinc@nvidia.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
linux-kernel@vger.kernel.org, Liu Yi L <yi.l.liu@intel.com>
Subject: [luxis1999-iommufd:iommufd-v5.17-rc4 25/30] drivers/vfio/vfio.c:1084:44: error: too many arguments to function call, expected single argument 'iommufd', have 2 arguments
Date: Tue, 1 Mar 2022 23:24:26 +0800 [thread overview]
Message-ID: <202203012325.0uoOqdIP-lkp@intel.com> (raw)
tree: https://github.com/luxis1999/iommufd iommufd-v5.17-rc4
head: 2bca5fa75dad57f41002a93861a950d35d55e568
commit: 4bc299c908a9e789a2514db95519046d795d1303 [25/30] vfio: Add iommufd VFIO compat support to group_fd
config: hexagon-randconfig-r041-20220301 (https://download.01.org/0day-ci/archive/20220301/202203012325.0uoOqdIP-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e)
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
# https://github.com/luxis1999/iommufd/commit/4bc299c908a9e789a2514db95519046d795d1303
git remote add luxis1999-iommufd https://github.com/luxis1999/iommufd
git fetch --no-tags luxis1999-iommufd iommufd-v5.17-rc4
git checkout 4bc299c908a9e789a2514db95519046d795d1303
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/vfio/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> drivers/vfio/vfio.c:1084:44: error: too many arguments to function call, expected single argument 'iommufd', have 2 arguments
vfio_group_unset_iommufd(group->iommufd, &group->device_list);
~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~
include/linux/iommufd.h:56:20: note: 'vfio_group_unset_iommufd' declared here
static inline void vfio_group_unset_iommufd(void *iommufd)
^
>> drivers/vfio/vfio.c:1161:26: error: too few arguments to function call, expected 3, have 2
&group->device_list);
^
include/linux/iommufd.h:50:19: note: 'vfio_group_set_iommufd' declared here
static inline int vfio_group_set_iommufd(int fd, struct iommu_group *group,
^
2 errors generated.
vim +/iommufd +1084 drivers/vfio/vfio.c
1074
1075 /*
1076 * VFIO Group fd, /dev/vfio/$GROUP
1077 */
1078 static void __vfio_group_unset_container(struct vfio_group *group)
1079 {
1080 struct vfio_container *container = group->container;
1081 struct vfio_iommu_driver *driver;
1082
1083 if (group->iommufd) {
> 1084 vfio_group_unset_iommufd(group->iommufd, &group->device_list);
1085 group->iommufd = NULL;
1086 return;
1087 }
1088
1089 down_write(&container->group_lock);
1090
1091 driver = container->iommu_driver;
1092 if (driver)
1093 driver->ops->detach_group(container->iommu_data,
1094 group->iommu_group);
1095
1096 iommu_group_release_dma_owner(group->iommu_group);
1097
1098 group->container = NULL;
1099 wake_up(&group->container_q);
1100 list_del(&group->container_next);
1101
1102 /* Detaching the last group deprivileges a container, remove iommu */
1103 if (driver && list_empty(&container->group_list)) {
1104 driver->ops->release(container->iommu_data);
1105 module_put(driver->ops->owner);
1106 container->iommu_driver = NULL;
1107 container->iommu_data = NULL;
1108 }
1109
1110 up_write(&container->group_lock);
1111
1112 vfio_container_put(container);
1113 }
1114
1115 /*
1116 * VFIO_GROUP_UNSET_CONTAINER should fail if there are other users or
1117 * if there was no container to unset. Since the ioctl is called on
1118 * the group, we know that still exists, therefore the only valid
1119 * transition here is 1->0.
1120 */
1121 static int vfio_group_unset_container(struct vfio_group *group)
1122 {
1123 int users = atomic_cmpxchg(&group->container_users, 1, 0);
1124
1125 if (!users)
1126 return -EINVAL;
1127 if (users != 1)
1128 return -EBUSY;
1129
1130 __vfio_group_unset_container(group);
1131
1132 return 0;
1133 }
1134
1135 /*
1136 * When removing container users, anything that removes the last user
1137 * implicitly removes the group from the container. That is, if the
1138 * group file descriptor is closed, as well as any device file descriptors,
1139 * the group is free.
1140 */
1141 static void vfio_group_try_dissolve_container(struct vfio_group *group)
1142 {
1143 if (0 == atomic_dec_if_positive(&group->container_users))
1144 __vfio_group_unset_container(group);
1145 }
1146
1147 static int vfio_group_set_container(struct vfio_group *group, int container_fd)
1148 {
1149 struct fd f;
1150 struct vfio_container *container;
1151 struct vfio_iommu_driver *driver;
1152 int ret = 0;
1153
1154 if (atomic_read(&group->container_users))
1155 return -EINVAL;
1156
1157 if (group->type == VFIO_NO_IOMMU && !capable(CAP_SYS_RAWIO))
1158 return -EPERM;
1159
1160 group->iommufd = vfio_group_set_iommufd(container_fd,
> 1161 &group->device_list);
1162 if (group->iommufd) {
1163 atomic_inc(&group->container_users);
1164 return ret;
1165 }
1166
1167 f = fdget(container_fd);
1168 if (!f.file)
1169 return -EBADF;
1170
1171 /* Sanity check, is this really our fd? */
1172 if (f.file->f_op != &vfio_fops) {
1173 fdput(f);
1174 return -EINVAL;
1175 }
1176
1177 container = f.file->private_data;
1178 WARN_ON(!container); /* fget ensures we don't race vfio_release */
1179
1180 down_write(&container->group_lock);
1181
1182 /* Real groups and fake groups cannot mix */
1183 if (!list_empty(&container->group_list) &&
1184 container->noiommu != (group->type == VFIO_NO_IOMMU)) {
1185 ret = -EPERM;
1186 goto unlock_out;
1187 }
1188
1189 ret = iommu_group_claim_dma_owner(group->iommu_group, f.file);
1190 if (ret)
1191 goto unlock_out;
1192
1193 driver = container->iommu_driver;
1194 if (driver) {
1195 ret = driver->ops->attach_group(container->iommu_data,
1196 group->iommu_group,
1197 group->type);
1198 if (ret) {
1199 iommu_group_release_dma_owner(group->iommu_group);
1200 goto unlock_out;
1201 }
1202 }
1203
1204 group->container = container;
1205 container->noiommu = (group->type == VFIO_NO_IOMMU);
1206 list_add(&group->container_next, &container->group_list);
1207
1208 /* Get a reference on the container and mark a user within the group */
1209 vfio_container_get(container);
1210 atomic_inc(&group->container_users);
1211
1212 unlock_out:
1213 up_write(&container->group_lock);
1214 fdput(f);
1215 return ret;
1216 }
1217
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
reply other threads:[~2022-03-01 15:25 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=202203012325.0uoOqdIP-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=nicolinc@nvidia.com \
--cc=yi.l.liu@intel.com \
/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.