All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Alistair Popple" <apopple@nvidia.com>, dri-devel@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org, linux-rdma@vger.kernel.org,
	media-ci@linuxtv.org
Subject: Re: [PATCH 07/26] dma-buf: Add dma_buf_mapping_map() returning a type-tagged mapping
Date: Mon, 26 Oct 2026 07:56:35 +0000	[thread overview]
Message-ID: <sashiko-outbox-184667@kernel.org> (raw)
In-Reply-To: <20261026053623.202642-8-apopple@nvidia.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] dma-buf: do not clear prior attach->selected on error in dma_buf_mapping_map()
--

commit 03dc2c734a4965633dec9f21493634bacf3d9de7
Author: Alistair Popple <apopple@nvidia.com>

dma-buf: Add dma_buf_mapping_map() returning a type-tagged mapping

This commit introduces dma_buf_mapping_map() and dma_buf_mapping_unmap() so
importers supporting multiple mapping types can let the exporter select the
mapping type at map time and receive a type-tagged struct dma_buf_mapping. It
also wires up the SGT mapping type to these new operations via struct
dma_buf_sgt_mapping and dma_buf_sgt_mapping_table().

> diff --git a/drivers/dma-buf/dma-buf-mapping.c b/drivers/dma-buf/dma-buf-mapping.c
> index dbcd83b6dcff7..7a5a379a372e7 100644
> --- a/drivers/dma-buf/dma-buf-mapping.c
> +++ b/drivers/dma-buf/dma-buf-mapping.c
> @@ -366,6 +366,79 @@ int dma_buf_mapping_select(struct dma_buf_attachment *attach)
>  	return 0;
>  }
>  
> +/**
> + * dma_buf_mapping_map - Map an attachment with whichever type the exporter
> + *                       selects
> + * @attach: the attachment
> + * @dir: DMA direction
> + *
> + * For importers that listed more than one mapping type. The exporter picks the
> + * type from the possible matches and the result's &dma_buf_mapping.type records
> + * which was used. Must be called with the dma_resv lock held, and the lock must
> + * be held until the result has been acted on. Importers that listed a single
> + * type keep using that type's map function.
> + *
> + * Returns: a &struct dma_buf_mapping to pass to dma_buf_mapping_unmap(), or
> + * an ERR_PTR.
> + */
> +struct dma_buf_mapping *dma_buf_mapping_map(struct dma_buf_attachment *attach,
> +					    enum dma_data_direction dir)
> +{
> +	struct dma_buf_mapping *mapping;
> +	int ret;
> +
> +	might_sleep();
> +
> +	if (WARN_ON(!attach || !attach->dmabuf))
> +		return ERR_PTR(-EINVAL);
> +
> +	dma_resv_assert_held(attach->dmabuf->resv);
> +
> +	ret = dma_buf_mapping_select(attach);
> +	if (ret)
> +		return ERR_PTR(ret);
> +
> +	if (!attach->map_type.type->map) {
> +		ret = -EOPNOTSUPP;
> +		goto err_release;
> +	}
> +
> +	mapping = attach->map_type.type->map(attach, dir);
> +	if (IS_ERR(mapping)) {
> +		ret = PTR_ERR(mapping);
> +		goto err_release;
> +	}
> +
> +	return mapping;
> +
> +err_release:
> +	/* Nothing was established, so the choice may be made afresh */
> +	attach->selected = false;
> +	return ERR_PTR(ret);
> +}

[Severity: Medium]
Can jumping to err_release in dma_buf_mapping_map() corrupt an already
established selection state on attach?

If attach->selected is already true when dma_buf_mapping_map() is entered
(for instance, after dma_buf_pin(), after a prior map/unmap cycle without an
intervening dma_buf_invalidate_mappings(), or while another mapping on the
same attachment is still active), dma_buf_mapping_select() returns 0 without
making a new choice:

drivers/dma-buf/dma-buf-mapping.c:dma_buf_mapping_select() {
	if (attach->selected)
		return 0;
	...
	attach->map_type = *match;
	attach->selected = true;
	return 0;
}

If the subsequent map operation fails (such as kzalloc_obj() returning NULL
in dma_buf_sgt_type_map(), or sgt_exp_ops->map_dma_buf() failing in
__dma_buf_sgt_map_attachment()), err_release unconditionally sets
attach->selected = false.

A later call to dma_buf_mapping_select() can then invoke
dmabuf->ops->select_mapping(attach) again and overwrite attach->map_type
while the buffer is still pinned or has an active mapping. If an earlier SGT
mapping is still active and attach->map_type is changed to a non-SGT type,
unmapping that earlier mapping via:

dma_buf_mapping_unmap()
  -> dma_buf_sgt_type_unmap()
    -> dma_buf_unmap_attachment()

will find dma_buf_get_sgt_ops(attach) == NULL, trigger WARN_ON(!sgt_exp_ops),
and return early without unmapping or freeing mapping->sgt.

Additionally, when attach->selected was false on entry and
dma_buf_mapping_select() picked a match other than attach->matches[0],
clearing attach->selected on error leaves attach->map_type overwritten rather
than restored to attach->matches[0].

Should dma_buf_mapping_map() remember whether attach->selected was already
true before calling dma_buf_mapping_select(), and only reset attach->selected
(and restore attach->map_type) if this call actually performed the selection?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261026053623.202642-1-apopple@nvidia.com?part=7

  reply	other threads:[~2026-10-26  7:56 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 [this message]
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
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=sashiko-outbox-184667@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=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.