Hi Yi, Thank you for the patch! Yet something to improve: [auto build test ERROR on vfio/next] [also build test ERROR on v5.6-rc6 next-20200320] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Liu-Yi-L/vfio-expose-virtual-Shared-Virtual-Addressing-to-VMs/20200322-213259 base: https://github.com/awilliam/linux-vfio.git next config: arm64-defconfig (attached as .config) compiler: aarch64-linux-gcc (GCC) 9.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=9.2.0 make.cross ARCH=arm64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot All errors (new ones prefixed by >>): drivers/vfio/vfio.c: In function 'vfio_create_mm': drivers/vfio/vfio.c:2149:8: error: implicit declaration of function 'ioasid_alloc_set'; did you mean 'ioasid_alloc'? [-Werror=implicit-function-declaration] 2149 | ret = ioasid_alloc_set((struct ioasid_set *) mm, | ^~~~~~~~~~~~~~~~ | ioasid_alloc drivers/vfio/vfio.c:2158:13: warning: assignment to 'long long unsigned int' from 'struct mm_struct *' makes integer from pointer without a cast [-Wint-conversion] 2158 | token->val = mm; | ^ drivers/vfio/vfio.c: In function 'vfio_mm_unlock_and_free': drivers/vfio/vfio.c:2170:2: error: implicit declaration of function 'ioasid_free_set'; did you mean 'ioasid_free'? [-Werror=implicit-function-declaration] 2170 | ioasid_free_set(vmm->ioasid_sid, true); | ^~~~~~~~~~~~~~~ | ioasid_free drivers/vfio/vfio.c: In function 'vfio_mm_pasid_alloc': >> drivers/vfio/vfio.c:2230:3: error: implicit declaration of function 'ioasid_adjust_set' [-Werror=implicit-function-declaration] 2230 | ioasid_adjust_set(vmm->ioasid_sid, quota); | ^~~~~~~~~~~~~~~~~ drivers/vfio/vfio.c:2233:26: warning: passing argument 1 of 'ioasid_alloc' makes pointer from integer without a cast [-Wint-conversion] 2233 | pasid = ioasid_alloc(vmm->ioasid_sid, min, max, NULL); | ~~~^~~~~~~~~~~~ | | | int In file included from include/linux/iommu.h:16, from drivers/vfio/vfio.c:20: include/linux/ioasid.h:45:56: note: expected 'struct ioasid_set *' but argument is of type 'int' 45 | static inline ioasid_t ioasid_alloc(struct ioasid_set *set, ioasid_t min, | ~~~~~~~~~~~~~~~~~~~^~~ drivers/vfio/vfio.c: In function 'vfio_mm_pasid_free': drivers/vfio/vfio.c:2252:25: warning: passing argument 1 of 'ioasid_find' makes pointer from integer without a cast [-Wint-conversion] 2252 | pdata = ioasid_find(vmm->ioasid_sid, pasid, NULL); | ~~~^~~~~~~~~~~~ | | | int In file included from include/linux/iommu.h:16, from drivers/vfio/vfio.c:20: include/linux/ioasid.h:55:52: note: expected 'struct ioasid_set *' but argument is of type 'int' 55 | static inline void *ioasid_find(struct ioasid_set *set, ioasid_t ioasid, | ~~~~~~~~~~~~~~~~~~~^~~ cc1: some warnings being treated as errors vim +/ioasid_adjust_set +2230 drivers/vfio/vfio.c 2133 2134 /** 2135 * VFIO_MM objects - create, release, get, put, search 2136 * Caller of the function should have held vfio.vfio_mm_lock. 2137 */ 2138 static struct vfio_mm *vfio_create_mm(struct mm_struct *mm) 2139 { 2140 struct vfio_mm *vmm; 2141 struct vfio_mm_token *token; 2142 int ret = 0; 2143 2144 vmm = kzalloc(sizeof(*vmm), GFP_KERNEL); 2145 if (!vmm) 2146 return ERR_PTR(-ENOMEM); 2147 2148 /* Per mm IOASID set used for quota control and group operations */ 2149 ret = ioasid_alloc_set((struct ioasid_set *) mm, 2150 VFIO_DEFAULT_PASID_QUOTA, &vmm->ioasid_sid); 2151 if (ret) { 2152 kfree(vmm); 2153 return ERR_PTR(ret); 2154 } 2155 2156 kref_init(&vmm->kref); 2157 token = &vmm->token; > 2158 token->val = mm; 2159 vmm->pasid_quota = VFIO_DEFAULT_PASID_QUOTA; 2160 mutex_init(&vmm->pasid_lock); 2161 2162 list_add(&vmm->vfio_next, &vfio.vfio_mm_list); 2163 2164 return vmm; 2165 } 2166 2167 static void vfio_mm_unlock_and_free(struct vfio_mm *vmm) 2168 { 2169 /* destroy the ioasid set */ 2170 ioasid_free_set(vmm->ioasid_sid, true); 2171 mutex_unlock(&vfio.vfio_mm_lock); 2172 kfree(vmm); 2173 } 2174 2175 /* called with vfio.vfio_mm_lock held */ 2176 static void vfio_mm_release(struct kref *kref) 2177 { 2178 struct vfio_mm *vmm = container_of(kref, struct vfio_mm, kref); 2179 2180 list_del(&vmm->vfio_next); 2181 vfio_mm_unlock_and_free(vmm); 2182 } 2183 2184 void vfio_mm_put(struct vfio_mm *vmm) 2185 { 2186 kref_put_mutex(&vmm->kref, vfio_mm_release, &vfio.vfio_mm_lock); 2187 } 2188 EXPORT_SYMBOL_GPL(vfio_mm_put); 2189 2190 /* Assume vfio_mm_lock or vfio_mm reference is held */ 2191 static void vfio_mm_get(struct vfio_mm *vmm) 2192 { 2193 kref_get(&vmm->kref); 2194 } 2195 2196 struct vfio_mm *vfio_mm_get_from_task(struct task_struct *task) 2197 { 2198 struct mm_struct *mm = get_task_mm(task); 2199 struct vfio_mm *vmm; 2200 unsigned long long val = (unsigned long long) mm; 2201 2202 mutex_lock(&vfio.vfio_mm_lock); 2203 list_for_each_entry(vmm, &vfio.vfio_mm_list, vfio_next) { 2204 if (vmm->token.val == val) { 2205 vfio_mm_get(vmm); 2206 goto out; 2207 } 2208 } 2209 2210 vmm = vfio_create_mm(mm); 2211 if (IS_ERR(vmm)) 2212 vmm = NULL; 2213 out: 2214 mutex_unlock(&vfio.vfio_mm_lock); 2215 mmput(mm); 2216 return vmm; 2217 } 2218 EXPORT_SYMBOL_GPL(vfio_mm_get_from_task); 2219 2220 int vfio_mm_pasid_alloc(struct vfio_mm *vmm, int quota, int min, int max) 2221 { 2222 ioasid_t pasid; 2223 int ret = -ENOSPC; 2224 2225 mutex_lock(&vmm->pasid_lock); 2226 2227 /* update quota as it is tunable by admin */ 2228 if (vmm->pasid_quota != quota) { 2229 vmm->pasid_quota = quota; > 2230 ioasid_adjust_set(vmm->ioasid_sid, quota); 2231 } 2232 2233 pasid = ioasid_alloc(vmm->ioasid_sid, min, max, NULL); 2234 if (pasid == INVALID_IOASID) { 2235 ret = -ENOSPC; 2236 goto out_unlock; 2237 } 2238 2239 ret = pasid; 2240 out_unlock: 2241 mutex_unlock(&vmm->pasid_lock); 2242 return ret; 2243 } 2244 EXPORT_SYMBOL_GPL(vfio_mm_pasid_alloc); 2245 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org