From: kernel test robot <lkp@intel.com>
To: Leon Romanovsky <leonro@nvidia.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev
Subject: [leon-rdma:dmabuf-vfio 18/24] drivers/pci/p2pdma.c:272:16: error: too few arguments to function call, expected 2, have 1
Date: Thu, 17 Jul 2025 21:56:05 +0800 [thread overview]
Message-ID: <202507172149.FRPx4fN0-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git dmabuf-vfio
head: 8662d1e1cc127e6b95c53b1258f0364d6c53ce44
commit: e2eef194f5c392d9f15b0d20938dd640f106ac28 [18/24] PCI/P2PDMA: Separate global to device p2p initialization logic
config: x86_64-buildonly-randconfig-003-20250717 (https://download.01.org/0day-ci/archive/20250717/202507172149.FRPx4fN0-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250717/202507172149.FRPx4fN0-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507172149.FRPx4fN0-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/pci/p2pdma.c:14:
include/linux/pci-p2pdma.h:30:8: error: must use 'struct' tag to refer to type 'p2pdma_provider'
30 | static p2pdma_provider *pci_p2pdma_enable(struct pci_dev *pdev);
| ^
| struct
>> drivers/pci/p2pdma.c:272:16: error: too few arguments to function call, expected 2, have 1
272 | devm_kfree(p2p);
| ~~~~~~~~~~ ^
include/linux/device/devres.h:79:6: note: 'devm_kfree' declared here
79 | void devm_kfree(struct device *dev, const void *p);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/pci/p2pdma.c:362:10: error: use of undeclared identifier 'free_pool'
362 | return free_pool;
| ^
>> drivers/pci/p2pdma.c:400:2: error: call to undeclared function 'sysfs_rmeove_group'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
400 | sysfs_rmeove_group(&pdev->dev.kobj, &p2pmem_group);
| ^
drivers/pci/p2pdma.c:400:2: note: did you mean 'sysfs_remove_group'?
include/linux/sysfs.h:450:6: note: 'sysfs_remove_group' declared here
450 | void sysfs_remove_group(struct kobject *kobj,
| ^
>> drivers/pci/p2pdma.c:401:19: error: use of undeclared identifier 'p2p'
401 | gen_pool_destroy(p2p->pool);
| ^
5 errors generated.
vim +272 drivers/pci/p2pdma.c
240
241 /**
242 * pci_p2pdma_enable - Enable peer-to-peer DMA support for a PCI device
243 * @pdev: The PCI device to enable P2PDMA for
244 *
245 * This function initializes the peer-to-peer DMA infrastructure for a PCI
246 * device. It allocates and sets up the necessary data structures to support
247 * P2PDMA operations, including memory pools and mapping type tracking.
248 */
249 struct p2pdma_provider *pci_p2pdma_enable(struct pci_dev *pdev)
250 {
251 struct pci_p2pdma *p2p;
252 int ret;
253
254 p2p = devm_kzalloc(&pdev->dev, sizeof(*p2p), GFP_KERNEL);
255 if (!p2p)
256 return ERR_PTR(-ENOMEM);
257
258 xa_init(&p2p->map_types);
259 p2p->mem.owner = &pdev->dev;
260 /* On all p2p platforms bus_offset is the same fo all BARs */
261 p2p->mem.bus_offset =
262 pci_bus_address(pdev, 0) - pci_resource_start(pdev, 0);
263
264 ret = devm_add_action_or_reset(&pdev->dev, pci_p2pdma_release, pdev);
265 if (ret)
266 goto out_p2p;
267
268 rcu_assign_pointer(pdev->p2pdma, p2p);
269 return &p2p->mem;
270
271 out_p2p:
> 272 devm_kfree(p2p);
273 return ERR_PTR(ret);
274 }
275 EXPORT_SYMBOL_GPL(pci_p2pdma_enable);
276
277 static int pci_p2pdma_setup_pool(struct pci_dev *pdev)
278 {
279 struct pci_p2pdma *p2pdma;
280 int ret;
281
282 p2pdma = rcu_dereference_protected(pdev->p2pdma, 1);
283 if (p2pdma->pool)
284 /* We already setup pools, do nothing, */
285 return 0;
286
287 p2pdma->pool = gen_pool_create(PAGE_SHIFT, dev_to_node(&pdev->dev));
288 if (!p2pdma->pool)
289 return -ENOMEM;
290
291 ret = sysfs_create_group(&pdev->dev.kobj, &p2pmem_group);
292 if (ret)
293 goto out_pool_destroy;
294
295 return 0;
296
297 out_pool_destroy:
298 gen_pool_destroy(p2pdma->pool);
299 p2pdma->pool = NULL;
300 return ret;
301 }
302
303 static void pci_p2pdma_unmap_mappings(void *data)
304 {
305 struct pci_p2pdma_pagemap *p2p_pgmap = data;
306
307 /*
308 * Removing the alloc attribute from sysfs will call
309 * unmap_mapping_range() on the inode, teardown any existing userspace
310 * mappings and prevent new ones from being created.
311 */
312 sysfs_remove_file_from_group(&p2p_pgmap->mem->owner->kobj,
313 &p2pmem_alloc_attr.attr,
314 p2pmem_group.name);
315 }
316
317 /**
318 * pci_p2pdma_add_resource - add memory for use as p2p memory
319 * @pdev: the device to add the memory to
320 * @bar: PCI BAR to add
321 * @size: size of the memory to add, may be zero to use the whole BAR
322 * @offset: offset into the PCI BAR
323 *
324 * The memory will be given ZONE_DEVICE struct pages so that it may
325 * be used with any DMA request.
326 */
327 int pci_p2pdma_add_resource(struct pci_dev *pdev, int bar, size_t size,
328 u64 offset)
329 {
330 struct pci_p2pdma_pagemap *p2p_pgmap;
331 struct p2pdma_provider *mem;
332 struct dev_pagemap *pgmap;
333 struct pci_p2pdma *p2pdma;
334 void *addr;
335 int error;
336
337 if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM))
338 return -EINVAL;
339
340 if (offset >= pci_resource_len(pdev, bar))
341 return -EINVAL;
342
343 if (!size)
344 size = pci_resource_len(pdev, bar) - offset;
345
346 if (size + offset > pci_resource_len(pdev, bar))
347 return -EINVAL;
348
349 p2pdma = rcu_dereference_protected(pdev->p2pdma, 1);
350 if (!p2pdma) {
351 mem = pci_p2pdma_enable(pdev);
352 if (IS_ERR(mem))
353 return PTR_ERR(mem);
354
355 error = pci_p2pdma_setup_pool(pdev);
356 if (error)
357 return error;
358 }
359
360 p2p_pgmap = devm_kzalloc(&pdev->dev, sizeof(*p2p_pgmap), GFP_KERNEL);
361 if (!p2p_pgmap)
> 362 return free_pool;
363
364 pgmap = &p2p_pgmap->pgmap;
365 pgmap->range.start = pci_resource_start(pdev, bar) + offset;
366 pgmap->range.end = pgmap->range.start + size - 1;
367 pgmap->nr_range = 1;
368 pgmap->type = MEMORY_DEVICE_PCI_P2PDMA;
369 pgmap->ops = &p2pdma_pgmap_ops;
370 p2p_pgmap->mem = mem;
371
372 addr = devm_memremap_pages(&pdev->dev, pgmap);
373 if (IS_ERR(addr)) {
374 error = PTR_ERR(addr);
375 goto pgmap_free;
376 }
377
378 error = devm_add_action_or_reset(&pdev->dev, pci_p2pdma_unmap_mappings,
379 p2p_pgmap);
380 if (error)
381 goto pages_free;
382
383 error = gen_pool_add_owner(p2pdma->pool, (unsigned long)addr,
384 pci_bus_address(pdev, bar) + offset,
385 range_len(&pgmap->range), dev_to_node(&pdev->dev),
386 &pgmap->ref);
387 if (error)
388 goto pages_free;
389
390 pci_info(pdev, "added peer-to-peer DMA memory %#llx-%#llx\n",
391 pgmap->range.start, pgmap->range.end);
392
393 return 0;
394
395 pages_free:
396 devm_memunmap_pages(&pdev->dev, pgmap);
397 pgmap_free:
398 devm_kfree(&pdev->dev, p2p_pgmap);
399 free_pool:
> 400 sysfs_rmeove_group(&pdev->dev.kobj, &p2pmem_group);
> 401 gen_pool_destroy(p2p->pool);
402 return error;
403 }
404 EXPORT_SYMBOL_GPL(pci_p2pdma_add_resource);
405
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2025-07-17 13:56 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=202507172149.FRPx4fN0-lkp@intel.com \
--to=lkp@intel.com \
--cc=leonro@nvidia.com \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@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.