dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: Tomi Valkeinen <tomi.valkeinen@ti.com>,
	Robin Murphy <robin.murphy@arm.com>,
	dri-devel@lists.freedesktop.org,
	iommu@lists.linux-foundation.org, linaro-mm-sig@lists.linaro.org,
	linux-kernel@vger.kernel.org
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	David Airlie <airlied@linux.ie>,
	Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v9 14/32] drm: omapdrm: fix common struct sg_table related issues
Date: Fri, 4 Sep 2020 14:27:35 +0200	[thread overview]
Message-ID: <ee9f6526-3050-9624-f9ba-e39bacceb19e@samsung.com> (raw)
In-Reply-To: <c3173e34-7d78-4f39-8a64-bbbd4814b3c0@samsung.com>

Hi again,

On 04.09.2020 14:06, Marek Szyprowski wrote:
> Hi Tomi,
>
> On 02.09.2020 10:00, Tomi Valkeinen wrote:
>> On 01/09/2020 22:33, Robin Murphy wrote:
>>> On 2020-08-26 07:32, Marek Szyprowski wrote:
>>>> The Documentation/DMA-API-HOWTO.txt states that the dma_map_sg() 
>>>> function
>>>> returns the number of the created entries in the DMA address space.
>>>> However the subsequent calls to the dma_sync_sg_for_{device,cpu}() and
>>>> dma_unmap_sg must be called with the original number of the entries
>>>> passed to the dma_map_sg().
>>>>
>>>> struct sg_table is a common structure used for describing a 
>>>> non-contiguous
>>>> memory buffer, used commonly in the DRM and graphics subsystems. It
>>>> consists of a scatterlist with memory pages and DMA addresses (sgl 
>>>> entry),
>>>> as well as the number of scatterlist entries: CPU pages (orig_nents 
>>>> entry)
>>>> and DMA mapped pages (nents entry).
>>>>
>>>> It turned out that it was a common mistake to misuse nents and 
>>>> orig_nents
>>>> entries, calling DMA-mapping functions with a wrong number of 
>>>> entries or
>>>> ignoring the number of mapped entries returned by the dma_map_sg()
>>>> function.
>>>>
>>>> Fix the code to refer to proper nents or orig_nents entries. This 
>>>> driver
>>>> checks for a buffer contiguity in DMA address space, so it should test
>>>> sg_table->nents entry.
>>>>
>>>> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
>>>> ---
>>>>    drivers/gpu/drm/omapdrm/omap_gem.c | 6 +++---
>>>>    1 file changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c 
>>>> b/drivers/gpu/drm/omapdrm/omap_gem.c
>>>> index ff0c4b0c3fd0..a7a9a0afe2b6 100644
>>>> --- a/drivers/gpu/drm/omapdrm/omap_gem.c
>>>> +++ b/drivers/gpu/drm/omapdrm/omap_gem.c
>>>> @@ -48,7 +48,7 @@ struct omap_gem_object {
>>>>         *   OMAP_BO_MEM_DMA_API flag set)
>>>>         *
>>>>         * - buffers imported from dmabuf (with the 
>>>> OMAP_BO_MEM_DMABUF flag set)
>>>> -     *   if they are physically contiguous (when sgt->orig_nents 
>>>> == 1)
>>>> +     *   if they are physically contiguous (when sgt->nents == 1)
>>> Hmm, if this really does mean *physically* contiguous - i.e. if 
>>> buffers might be shared between
>>> DMA-translatable and non-DMA-translatable devices - then these 
>>> changes might not be appropriate. If
>>> not and it only actually means DMA-contiguous, then it would be good 
>>> to clarify the comments to that
>>> effect.
>>>
>>> Can anyone familiar with omapdrm clarify what exactly the case is 
>>> here? I know that IOMMUs might be
>>> involved to some degree, and I've skimmed the interconnect chapters 
>>> of enough OMAP TRMs to be scared
>>> by the reference to the tiler aperture in the context below :)
>> DSS (like many other IPs in OMAP) does not have any MMU/PAT, and can 
>> only use contiguous buffers
>> (contiguous in the RAM).
>>
>> There's a special case with TILER (which is not part of DSS but of 
>> the memory subsystem, but it's
>> still handled internally by the omapdrm driver), which has a PAT. PAT 
>> can create a contiguous view
>> of scattered pages, and DSS can then use this contiguous view ("tiler 
>> aperture", which to DSS looks
>> just like normal contiguous memory).
>>
>> Note that omapdrm does not use dma_map_sg() & co. mentioned in the 
>> patch description.
>>
>> If there's no MMU/PAT, is orig_nents always the same as nents? Or can 
>> we have multiple physically
>> contiguous pages listed separately in the sgt (so orig_nents > 1) but 
>> as the pages form one big
>> contiguous area, nents == 1?
>
> Well, when DMA-mapping API is properly used, the difference between 
> nents and orig_nents is only when the scatterlist have been mapped for 
> DMA.
>
> For the mentioned case, even if the creator of the buffer used only 
> the pages that are consecutive in the physical memory, he is free to 
> chose either to set nents/orig_nents to 1 and length to n*PAGE_SIZE or 
> set nents/orig_nents to n and length to PAGE_SIZE for each. Then the 
> buffer chunks might be merged, but this is done by the DMA-mapping 
> code. For your case, without any call to DMA-mapping, you can only 
> assume that the buffer is contiguous in physical memory if orig_nents 
> is 1.
>
> I've changed the use of nents to orig_nents to make things consistent 
> - this code operates only on the unmapped buffers. I want to ensure 
> that anyone who will potentially copy this code, won't make the 
> nents/orig_nents mistake in the future.

I've just noticed that I've read my patch (the diff) in the reverse 
order, I'm sorry. The omapdrm code is right, this patch should be dropped.

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2020-09-04 12:27 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20200826063527eucas1p21ab50cf46bad1d9ea5d7f202dd6ec722@eucas1p2.samsung.com>
2020-08-26  6:32 ` [PATCH v9 00/32] DRM: fix struct sg_table nents vs. orig_nents misuse Marek Szyprowski
     [not found]   ` <CGME20200826063527eucas1p1d68954adf1c25e1d760b92ca0845ab48@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 01/32] drm: prime: add common helper to check scatterlist contiguity Marek Szyprowski
2020-09-01 17:23       ` Robin Murphy
     [not found]   ` <CGME20200826063528eucas1p1502c849c0fd337245541e1b31352d87f@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 02/32] drm: prime: use sgtable iterators in drm_prime_sg_to_page_addr_arrays() Marek Szyprowski
2020-09-01 17:24       ` Robin Murphy
     [not found]   ` <CGME20200826063529eucas1p19d797cf74bf653bf68b0a0e860806dbf@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 03/32] drm: core: fix common struct sg_table related issues Marek Szyprowski
2020-09-01 17:46       ` Robin Murphy
     [not found]   ` <CGME20200826063529eucas1p24a398fd2bacf53a33a14d7977a097f61@eucas1p2.samsung.com>
2020-08-26  6:32     ` [PATCH v9 04/32] drm: armada: " Marek Szyprowski
2020-09-01 18:26       ` Robin Murphy
     [not found]   ` <CGME20200826063530eucas1p16acb847d7da0ea734bef507688a76c5a@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 05/32] drm: etnaviv: " Marek Szyprowski
2020-09-01 18:39       ` Robin Murphy
     [not found]   ` <CGME20200826063531eucas1p21c9277fe2a91e632e40822fb04a2c095@eucas1p2.samsung.com>
2020-08-26  6:32     ` [PATCH v9 06/32] drm: exynos: use common helper for a scatterlist contiguity check Marek Szyprowski
     [not found]   ` <CGME20200826063531eucas1p18dbb3c42b2ecc490360e7a75cf579af6@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 07/32] drm: exynos: fix common struct sg_table related issues Marek Szyprowski
     [not found]   ` <CGME20200826063532eucas1p2a9e0215f483104d45af0560d5dbfa8e0@eucas1p2.samsung.com>
2020-08-26  6:32     ` [PATCH v9 08/32] drm: i915: " Marek Szyprowski
2020-09-01 18:42       ` Robin Murphy
2020-09-01 19:38       ` [Intel-gfx] " Ruhl, Michael J
2020-09-01 19:54         ` Robin Murphy
2020-09-01 20:32           ` Ruhl, Michael J
     [not found]   ` <CGME20200826063533eucas1p1e346ac4a683f929be8adc344b3fe9ea0@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 09/32] drm: lima: " Marek Szyprowski
     [not found]   ` <CGME20200826063533eucas1p1fad2f2afb117b026081468d2d840ab0f@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 10/32] drm: mediatek: use common helper for a scatterlist contiguity check Marek Szyprowski
2020-09-01 18:44       ` Robin Murphy
2020-09-01 22:59       ` Chun-Kuang Hu
     [not found]   ` <CGME20200826063534eucas1p2647f5e9679f79f568e184b092f743f8b@eucas1p2.samsung.com>
2020-08-26  6:32     ` [PATCH v9 11/32] drm: mediatek: use common helper for extracting pages array Marek Szyprowski
2020-09-01 18:54       ` Robin Murphy
2020-09-01 23:16         ` Chun-Kuang Hu
     [not found]   ` <CGME20200826063535eucas1p10cef37d8364216cf57c97e96d3959dd2@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 12/32] drm: msm: fix common struct sg_table related issues Marek Szyprowski
2020-08-26 13:26       ` kernel test robot
2020-09-01 19:14       ` Robin Murphy
2020-09-01 23:48         ` Rob Clark
     [not found]   ` <CGME20200826063535eucas1p1a98e3295a64f14d475371ac0b003782f@eucas1p1.samsung.com>
2020-08-26  6:32     ` [PATCH v9 13/32] drm: omapdrm: use common helper for extracting pages array Marek Szyprowski
2020-09-01 19:17       ` Robin Murphy
     [not found]   ` <CGME20200826063536eucas1p2e29d2b061b8b74c06c9ea61ad6737ba2@eucas1p2.samsung.com>
2020-08-26  6:32     ` [PATCH v9 14/32] drm: omapdrm: fix common struct sg_table related issues Marek Szyprowski
2020-09-01 19:33       ` Robin Murphy
2020-09-02  8:00         ` Tomi Valkeinen
2020-09-04 12:06           ` Marek Szyprowski
2020-09-04 12:27             ` Marek Szyprowski [this message]
     [not found]   ` <CGME20200826063536eucas1p2d9ea013228bcfbd5778959274aa01b78@eucas1p2.samsung.com>
2020-08-26  6:32     ` [PATCH v9 15/32] drm: panfrost: " Marek Szyprowski
     [not found]   ` <CGME20200826063537eucas1p1462d4761c8eb6d762fe5ea0fbd3b6e3b@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 16/32] drm: rockchip: use common helper for a scatterlist contiguity check Marek Szyprowski
2020-09-01 19:34       ` Robin Murphy
     [not found]   ` <CGME20200826063537eucas1p2d9a362f619920ad84c46f36cd13ec362@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 17/32] drm: rockchip: fix common struct sg_table related issues Marek Szyprowski
2020-09-01 20:00       ` Robin Murphy
     [not found]   ` <CGME20200826063538eucas1p2a9fe42c2ccee634c41ba9f3dd43dc3c4@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 18/32] drm: tegra: " Marek Szyprowski
2020-09-01 20:11       ` Robin Murphy
     [not found]   ` <CGME20200826063539eucas1p2ed946c6214cdb8574ab288350db22f1a@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 19/32] drm: v3d: " Marek Szyprowski
     [not found]   ` <CGME20200826063539eucas1p2cb72ff20abae82c3e027833f958fd7a1@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 20/32] drm: virtio: " Marek Szyprowski
     [not found]   ` <CGME20200826063540eucas1p2e9f9f9133322205269e50fd01bf64bcc@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 21/32] drm: vmwgfx: " Marek Szyprowski
     [not found]   ` <CGME20200826063540eucas1p2dc6829c66ae13b8e787ca40b9aede3df@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 22/32] drm: xen: " Marek Szyprowski
     [not found]   ` <CGME20200826063541eucas1p2ec5d8a396f52ce690641659b74819e60@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 23/32] xen: gntdev: " Marek Szyprowski
     [not found]   ` <CGME20200826063542eucas1p1713d37f4589ddaca27e1968b5fe44027@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 24/32] drm: host1x: " Marek Szyprowski
2020-09-01 20:13       ` Robin Murphy
     [not found]   ` <CGME20200826063542eucas1p18d9d201e3e26c08d26c3ea2a2b2a079d@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 25/32] drm: rcar-du: " Marek Szyprowski
     [not found]   ` <CGME20200826063543eucas1p1c2fde4802f125f25caa02f4453b8a284@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 26/32] dmabuf: " Marek Szyprowski
     [not found]   ` <CGME20200826063544eucas1p230abe33c28618e82608c5b40eb50fa87@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 27/32] staging: tegra-vde: " Marek Szyprowski
     [not found]   ` <CGME20200826063544eucas1p15980885bbdbc43e35f350f228994bee7@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 28/32] misc: fastrpc: " Marek Szyprowski
2020-09-01 20:14       ` Robin Murphy
     [not found]   ` <CGME20200826063545eucas1p22eb2c7a643a299f3e1696b4c5bae0694@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 29/32] rapidio: " Marek Szyprowski
2020-09-01 20:15       ` Robin Murphy
     [not found]   ` <CGME20200826063546eucas1p268558dcd08ac9b43843f9f5e23da227d@eucas1p2.samsung.com>
2020-08-26  6:33     ` [PATCH v9 30/32] samples: vfio-mdev/mbochs: " Marek Szyprowski
2020-09-01 20:16       ` Robin Murphy
     [not found]   ` <CGME20200826063629eucas1p1a3c9c93e281b4c432a6d9940e734e3c4@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 31/32] media: pci: fix common ALSA DMA-mapping related codes Marek Szyprowski
2020-09-01 20:24       ` Robin Murphy
     [not found]   ` <CGME20200826063629eucas1p194665c749b5a37c74e6445370fd7f7c4@eucas1p1.samsung.com>
2020-08-26  6:33     ` [PATCH v9 32/32] videobuf2: use sgtable-based scatterlist wrappers Marek Szyprowski
2020-09-01 20:19       ` Robin Murphy

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=ee9f6526-3050-9624-f9ba-e39bacceb19e@samsung.com \
    --to=m.szyprowski@samsung.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=airlied@linux.ie \
    --cc=b.zolnierkie@samsung.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=tomi.valkeinen@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).