All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alistair Popple <apopple@nvidia.com>
To: sashiko-reviews@lists.linux.dev
Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
	 linux-rdma@vger.kernel.org, media-ci@linuxtv.org
Subject: Re: [PATCH 13/26] drm/xe/dma-buf: Use the SGT mapping type
Date: Tue, 27 Oct 2026 15:26:19 +1100	[thread overview]
Message-ID: <auAk6hXyZbvBIrVO@nvdebian.thelocal> (raw)
In-Reply-To: <sashiko-outbox-184673@kernel.org>

On 2026-10-26 at 19:34 +1100, sashiko-bot@kernel.org wrote...
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [Medium] drm/xe/dma-buf: xe_dma_buf_match_mapping() changes attach error to -EINVAL

I don't have access to Xe compatible hardware which is required to run
the kunit test, but this comment seems reasonable. Will fix by having
dma_buf_match_mapping() return -EOPNOTSUPP in the first patch.

> - [Medium] drm/xe: verbose pci_p2pdma_distance() check in xe_dma_buf_match_mapping()

This seems valid - fix is to make pci_p2pdma_distance() non-verbose when
introducing dma_buf_sgt_match() in "dma-buf: Add the SGT DMA mapping type".

Will fix this for v2.

 - Alistair

> --
> 
> commit d3c9a19b80db02efc0ef1143d9205eb0a3c2194e
> Author: Jason Gunthorpe <jgg@ziepe.ca>
> 
> drm/xe/dma-buf: Use the SGT mapping type
> 
> This commit converts the Xe dma-buf exporter to use the new SGT mapping type
> infrastructure by providing P2P and non-P2P SGT exporter matches in
> xe_dma_buf_match_mapping() and querying attachment mapping helpers during pin,
> map, and unmap.
> 
> > diff --git a/drivers/gpu/drm/xe/xe_dma_buf.c b/drivers/gpu/drm/xe/xe_dma_buf.c
> > index bf0728838ead5..3ca198da6ee87 100644
> > --- a/drivers/gpu/drm/xe/xe_dma_buf.c
> > +++ b/drivers/gpu/drm/xe/xe_dma_buf.c
> > @@ -27,13 +27,6 @@ static int xe_dma_buf_attach(struct dma_buf *dmabuf,
> >  {
> >  	struct drm_gem_object *obj = attach->dmabuf->priv;
> >  
> > -	if (attach->peer2peer &&
> > -	    pci_p2pdma_distance(to_pci_dev(obj->dev->dev), attach->dev, false) < 0)
> > -		attach->peer2peer = false;
> > -
> > -	if (!attach->peer2peer && !xe_bo_can_migrate(gem_to_xe_bo(obj), XE_PL_TT))
> > -		return -EOPNOTSUPP;
> > -
> >  	xe_pm_runtime_get(to_xe_device(obj->dev));
> >  	return 0;
> >  }
> 
> [ ... ]
> 
> > @@ -205,18 +205,38 @@ static void xe_dma_buf_release(struct dma_buf *dmabuf)
> >  	drm_gem_dmabuf_release(dmabuf);
> >  }
> >  
> > +static const struct dma_buf_mapping_sgt_exp_ops xe_dma_buf_sgt_ops = {
> > +	.map_dma_buf = xe_dma_buf_map,
> > +	.unmap_dma_buf = xe_dma_buf_unmap,
> > +};
> > +
> > +static int xe_dma_buf_match_mapping(struct dma_buf_match_args *args)
> > +{
> > +	struct drm_gem_object *obj = args->dmabuf->priv;
> > +	struct dma_buf_mapping_match sgt_match[2];
> > +	unsigned int num_match = 0;
> > +
> > +	sgt_match[num_match++] = DMA_BUF_EMAPPING_SGT_P2P(
> > +		&xe_dma_buf_sgt_ops, to_pci_dev(obj->dev->dev));
> 
> [Severity: Medium]
> Will offering DMA_BUF_EMAPPING_SGT_P2P() unconditionally first cause spurious
> pci_warn() and dev_warn() messages in dmesg when attaching migratable or
> system-memory-only BOs on systems without PCIe P2P support?
> 
> Previously, xe_dma_buf_attach() called pci_p2pdma_distance() with verbose set
> to false because P2P is optional when a BO resides in or can migrate to
> XE_PL_TT (similar to commit d0fa84f17477 ("drm/amdgpu: Disable verbose for p2p
> dist calc")).
> 
> With this change, dma_buf_match_mapping() evaluates sgt_match[0] first via
> dma_buf_sgt_match(), which calls pci_p2pdma_distance() with verbose set to
> true:
> 
> drivers/dma-buf/dma-buf-mapping.c:dma_buf_sgt_match() {
> 	if (exp->sgt_data.exporter_requires_p2p ==
> 	    DMA_SGT_EXPORTER_REQUIRES_P2P_DISTANCE) {
> 		if (!imp->sgt_data.importer_allows_p2p)
> 			return -EOPNOTSUPP;
> 		if (pci_p2pdma_distance(exp->sgt_data.exporting_p2p_device,
> 					imp->sgt_data.importing_dma_device,
> 					true) < 0)
> 			return -EOPNOTSUPP;
> 	}
> }
> 
> Whenever a P2P-capable importer attaches to an exported Xe dma-buf on a
> platform where P2P is unavailable (such as a non-PCI importer, non-whitelisted
> host bridge, or ACS redirect on PCIe switches), calc_map_type_and_dist() will
> log a warning even though sgt_match[1] (DMA_BUF_EMAPPING_SGT) immediately
> succeeds using system memory, or even when the BO was created as
> system-memory-only.
> 
> > +
> > +	if (xe_bo_can_migrate(gem_to_xe_bo(obj), XE_PL_TT))
> > +		sgt_match[num_match++] =
> > +			DMA_BUF_EMAPPING_SGT(&xe_dma_buf_sgt_ops);
> > +
> > +	return dma_buf_match_mapping(args, sgt_match, num_match);
> > +}
> 
> [Severity: Medium]
> Does replacing the check in xe_dma_buf_attach() with dma_buf_match_mapping()
> change the attach error code from -EOPNOTSUPP to -EINVAL and break the Xe
> dma-buf KUnit test suite?
> 
> When exporting a non-migratable VRAM-only BO (where xe_bo_can_migrate(bo,
> XE_PL_TT) is false) and attaching or importing it from an importer that does
> not support P2P (or where pci_p2pdma_distance() < 0), xe_dma_buf_attach()
> previously returned -EOPNOTSUPP.
> 
> Now, xe_dma_buf_match_mapping() only populates sgt_match[0] with
> DMA_BUF_EMAPPING_SGT_P2P() and calls dma_buf_match_mapping(). In
> drivers/dma-buf/dma-buf-mapping.c:dma_buf_match_mapping(), -EOPNOTSUPP from
> exp->type->match() is skipped, and -EINVAL is returned when no matches remain:
> 
> drivers/dma-buf/dma-buf-mapping.c:dma_buf_match_mapping() {
> 			if (exp->type->match) {
> 				ret = exp->type->match(args->dmabuf, exp, imp);
> 				if (ret == -EOPNOTSUPP)
> 					continue;
> 				if (ret != 0)
> 					return ret;
> 			}
> ...
> 	if (!nr)
> 		return -EINVAL;
> }
> 
> In drivers/gpu/drm/xe/tests/xe_dma_buf.c:xe_test_dmabuf_import_same_driver(),
> the KUnit test explicitly checks for -EOPNOTSUPP on import failure of a
> non-migratable VRAM BO without P2P:
> 
> 	} else if (PTR_ERR(import) != -EOPNOTSUPP) {
> 		/* Unexpected error code. */
> 		KUNIT_FAIL(test,
> 			   "xe_gem_prime_import failed with the wrong err=%ld\n",
> 			   PTR_ERR(import));
> 
> Should this path still return -EOPNOTSUPP when no mapping matches?
> 
> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/20261026053623.202642-1-apopple@nvidia.com?part=13

  reply	other threads:[~2026-10-27  4:26 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-26  5:35 [PATCH 00/26] DMA-buf mapping types Alistair Popple
2026-10-26  5:35 ` [PATCH 01/26] dma-buf: Introduce " Alistair Popple
2026-10-26  7:00   ` sashiko-bot
2026-10-26  5:35 ` [PATCH 02/26] dma-buf: Add the SGT DMA mapping type Alistair Popple
2026-10-26  7:04   ` sashiko-bot
2026-10-26  5:35 ` [PATCH 03/26] dma-buf: Add dma_buf_mapping_attach() Alistair Popple
2026-10-26  7:20   ` sashiko-bot
2026-10-26  5:35 ` [PATCH 04/26] dma-buf: Route SGT related actions through attach->map_type Alistair Popple
2026-10-26  7:29   ` sashiko-bot
2026-10-26  5:35 ` [PATCH 05/26] dma-buf: Let the exporter select mapping type at pin/map Alistair Popple
2026-10-26  7:39   ` sashiko-bot
2026-10-26  8:03   ` Karl Mehltretter
2026-10-27  5:46     ` Alistair Popple
2026-10-26  5:35 ` [PATCH 06/26] dma-buf: Add match set queries for exporter placement decisions Alistair Popple
2026-10-26  7:42   ` sashiko-bot
2026-10-26  5:35 ` [PATCH 07/26] dma-buf: Add dma_buf_mapping_map() returning a type-tagged mapping Alistair Popple
2026-10-26  7:56   ` sashiko-bot
2026-10-26  5:35 ` [PATCH 08/26] dma-buf: Allow single exporter drivers to avoid the match_mapping function Alistair Popple
2026-10-26  7:58   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 09/26] drm: Check the SGT ops for drm_gem_map_dma_buf() Alistair Popple
2026-10-26  8:02   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 10/26] dma-buf: Convert all the simple exporters to use SGT mapping type Alistair Popple
2026-10-26  8:12   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 11/26] drm/vmwgfx: Use match_mapping instead of dummy calls Alistair Popple
2026-10-26  8:13   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 12/26] accel/habanalabs: Use the SGT_P2P mapping type Alistair Popple
2026-10-26  8:18   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 13/26] drm/xe/dma-buf: Use the SGT " Alistair Popple
2026-10-26  8:34   ` sashiko-bot
2026-10-27  4:26     ` Alistair Popple [this message]
2026-10-26  5:36 ` [PATCH 14/26] drm/amdgpu: " Alistair Popple
2026-10-26  8:46   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 15/26] vfio/pci: Change the DMA-buf exporter to use mapping_type Alistair Popple
2026-10-26  9:00   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 16/26] RDMA/uverbs: Use the SGT_P2P mapping type Alistair Popple
2026-10-26  9:16   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 17/26] dma-buf: Update dma_buf_phys_vec_to_sgt() to use the SGT " Alistair Popple
2026-10-26  9:26   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 18/26] iio: buffer: convert " Alistair Popple
2026-10-26  9:28   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 19/26] functionfs: " Alistair Popple
2026-10-26  9:35   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 20/26] dma-buf: Remove unused SGT stuff from the common structures Alistair Popple
2026-10-26  9:39   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 21/26] treewide: Rename dma_buf_map_attachment(_unlocked) to dma_buf_sgt_ Alistair Popple
2026-10-26  9:49   ` sashiko-bot
2026-10-27 12:05   ` Christian König
2026-10-27 12:35     ` Jason Gunthorpe
2026-10-26  5:36 ` [PATCH 22/26] treewide: Rename dma_buf_unmap_attachment(_unlocked) to dma_buf_sgt_* Alistair Popple
2026-10-26  9:56   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 23/26] treewide: Rename dma_buf_attach() to dma_buf_sgt_attach() Alistair Popple
2026-10-26 10:01   ` sashiko-bot
2026-10-27  2:15   ` Karl Mehltretter
2026-10-27  3:42     ` Mikko Perttunen
2026-10-27 12:33       ` Jason Gunthorpe
2026-10-27 13:34         ` Mikko Perttunen
2026-10-27 13:43           ` Christian König
2026-10-27 12:11     ` Christian König
2026-10-27 12:31     ` Jason Gunthorpe
2026-10-27 12:07   ` Christian König
2026-10-27 12:38     ` Jason Gunthorpe
2026-10-27 13:17       ` Christian König
2026-10-27 14:08         ` Jason Gunthorpe
2026-10-27 14:28           ` Christian König
2026-10-27 14:44             ` Jason Gunthorpe
2026-10-27 14:54               ` Christian König
2026-10-26  5:36 ` [PATCH 24/26] treewide: Rename dma_buf_dynamic_attach() to dma_buf_sgt_dynamic_attach() Alistair Popple
2026-10-26 10:13   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 25/26] dma-buf: Add kunit tests for mapping type Alistair Popple
2026-10-26 10:19   ` sashiko-bot
2026-10-26  5:36 ` [PATCH 26/26] dma-buf: Add kunit tests for mapping type selection Alistair Popple
2026-10-26 10:22   ` sashiko-bot

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=auAk6hXyZbvBIrVO@nvdebian.thelocal \
    --to=apopple@nvidia.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=media-ci@linuxtv.org \
    --cc=sashiko-reviews@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.