From: Aneesh Kumar K.V <aneesh.kumar@kernel.org>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Jiri Pirko <jiri@resnulli.us>,
dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org,
iommu@lists.linux.dev, linux-media@vger.kernel.org,
sumit.semwal@linaro.org, benjamin.gaignard@collabora.com,
Brian.Starkey@arm.com, jstultz@google.com, tjmercier@google.com,
christian.koenig@amd.com, m.szyprowski@samsung.com,
robin.murphy@arm.com, leon@kernel.org, sean.anderson@linux.dev,
ptesarik@suse.com, catalin.marinas@arm.com,
suzuki.poulose@arm.com, steven.price@arm.com,
thomas.lendacky@amd.com, john.allen@amd.com,
ashish.kalra@amd.com, suravee.suthikulpanit@amd.com,
linux-coco@lists.linux.dev
Subject: Re: [PATCH v5 1/2] dma-mapping: introduce DMA_ATTR_CC_SHARED for shared memory
Date: Fri, 22 May 2026 10:09:26 +0530 [thread overview]
Message-ID: <yq5aqzn45a81.fsf@kernel.org> (raw)
In-Reply-To: <20260521175420.GA7702@ziepe.ca>
Jason Gunthorpe <jgg@ziepe.ca> writes:
> On Thu, May 21, 2026 at 09:05:39PM +0530, Aneesh Kumar K.V wrote:
>> I am wondering whether this is better
>>
>> static inline dma_addr_t dma_direct_map_phys(struct device *dev,
>> phys_addr_t phys, size_t size, enum dma_data_direction dir,
>> unsigned long attrs, bool flush)
>> {
>> dma_addr_t dma_addr;
>>
>> /*
>> * For a device requiring unencrypted DMA, MMIO memory is treated
>> * as shared.
>> */
>> if (force_dma_unencrypted(dev) && (attrs & DMA_ATTR_MMIO))
>> attrs |= DMA_ATTR_CC_SHARED;
>
> It is an option, I would be happier if we went and fixed the few
> callers to properly pass the shared. CC did this with the
> pgprot_decrypted() stuff, same reasoning:
>
> diff --git a/block/blk-mq-dma.c b/block/blk-mq-dma.c
> index bfdb9ed7074116..e77f6404caa3db 100644
> --- a/block/blk-mq-dma.c
> +++ b/block/blk-mq-dma.c
> @@ -90,7 +90,7 @@ static bool blk_dma_map_direct(struct request *req, struct device *dma_dev,
> unsigned int attrs = 0;
>
> if (iter->p2pdma.map == PCI_P2PDMA_MAP_THRU_HOST_BRIDGE)
> - attrs |= DMA_ATTR_MMIO;
> + attrs |= iter->p2pdma.mem->dma_mapping_flags;
>
> iter->addr = dma_map_phys(dma_dev, vec->paddr, vec->len,
> rq_dma_dir(req), attrs);
> @@ -115,7 +115,7 @@ static bool blk_rq_dma_map_iova(struct request *req, struct device *dma_dev,
> iter->len = dma_iova_size(state);
>
> if (iter->p2pdma.map == PCI_P2PDMA_MAP_THRU_HOST_BRIDGE)
> - attrs |= DMA_ATTR_MMIO;
> + attrs |= iter->p2pdma.mem->dma_mapping_flags;
>
> do {
> error = dma_iova_link(dma_dev, state, vec->paddr, mapped,
> diff --git a/drivers/dma-buf/dma-buf-mapping.c b/drivers/dma-buf/dma-buf-mapping.c
> index 794acff2546a34..96022fadc48245 100644
> --- a/drivers/dma-buf/dma-buf-mapping.c
> +++ b/drivers/dma-buf/dma-buf-mapping.c
> @@ -147,7 +147,7 @@ struct sg_table *dma_buf_phys_vec_to_sgt(struct dma_buf_attachment *attach,
> ret = dma_iova_link(attach->dev, dma->state,
> phys_vec[i].paddr, 0,
> phys_vec[i].len, dir,
> - DMA_ATTR_MMIO);
> + provider->dma_mapping_flags);
> if (ret)
> goto err_unmap_dma;
>
> @@ -155,7 +155,7 @@ struct sg_table *dma_buf_phys_vec_to_sgt(struct dma_buf_attachment *attach,
> } else {
> addr = dma_map_phys(attach->dev, phys_vec[i].paddr,
> phys_vec[i].len, dir,
> - DMA_ATTR_MMIO);
> + provider->dma_mapping_flags);
> ret = dma_mapping_error(attach->dev, addr);
> if (ret)
> goto err_unmap_dma;
> diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
> index 7c898542af8d5e..e4229b4d35c767 100644
> --- a/drivers/pci/p2pdma.c
> +++ b/drivers/pci/p2pdma.c
> @@ -282,6 +282,8 @@ int pcim_p2pdma_init(struct pci_dev *pdev)
> continue;
>
> p2p->mem[i].owner = &pdev->dev;
> + p2p->mem[i].dma_mapping_flags =
> + DMA_ATTR_MMIO | DMA_ATTR_CC_SHARED;
> p2p->mem[i].bus_offset =
> pci_bus_address(pdev, i) - pci_resource_start(pdev, i);
> }
> diff --git a/include/linux/pci-p2pdma.h b/include/linux/pci-p2pdma.h
> index 873de20a224759..402dc5e5d62b0a 100644
> --- a/include/linux/pci-p2pdma.h
> +++ b/include/linux/pci-p2pdma.h
> @@ -21,10 +21,12 @@ struct scatterlist;
> *
> * A p2pdma provider is a range of MMIO address space available to the CPU.
> * @owner: Device to which this provider belongs.
> + * @dma_mapping_flags: DMA attributes to use for host bridge mappings.
> * @bus_offset: Bus offset for p2p communication.
> */
> struct p2pdma_provider {
> struct device *owner;
> + unsigned long dma_mapping_flags;
> u64 bus_offset;
> };
>
> diff --git a/mm/hmm.c b/mm/hmm.c
> index 5955f2f0c83db1..c3f445acddf873 100644
> --- a/mm/hmm.c
> +++ b/mm/hmm.c
> @@ -811,7 +811,7 @@ dma_addr_t hmm_dma_map_pfn(struct device *dev, struct hmm_dma_map *map,
> case PCI_P2PDMA_MAP_NONE:
> break;
> case PCI_P2PDMA_MAP_THRU_HOST_BRIDGE:
> - attrs |= DMA_ATTR_MMIO;
> + attrs |= p2pdma_state->mem->dma_mapping_flags;
> pfns[idx] |= HMM_PFN_P2PDMA;
> break;
> case PCI_P2PDMA_MAP_BUS_ADDR:
Can I convert this as an independent patch with your SOB?
-aneesh
next prev parent reply other threads:[~2026-05-22 4:39 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20260325192400eucas1p2ae38ff4c2b3ab35a7047cfd680d9fda3@eucas1p2.samsung.com>
2026-03-25 19:23 ` [PATCH v5 0/2] dma-buf: heaps: system: add an option to allocate explicitly shared/decrypted memory Jiri Pirko
2026-03-25 19:23 ` [PATCH v5 1/2] dma-mapping: introduce DMA_ATTR_CC_SHARED for shared memory Jiri Pirko
2026-03-31 15:08 ` Jason Gunthorpe
2026-04-20 6:34 ` Aneesh Kumar K.V
2026-04-20 9:29 ` Jiri Pirko
2026-04-21 9:42 ` Aneesh Kumar K.V
2026-04-21 11:53 ` Jiri Pirko
2026-04-21 12:10 ` Jason Gunthorpe
2026-04-22 7:51 ` Petr Tesarik
2026-04-22 9:18 ` Aneesh Kumar K.V
2026-04-24 22:55 ` Jason Gunthorpe
2026-04-26 13:05 ` Jason Gunthorpe
2026-05-21 15:35 ` Aneesh Kumar K.V
2026-05-21 17:54 ` Jason Gunthorpe
2026-05-22 4:39 ` Aneesh Kumar K.V [this message]
2026-03-25 19:23 ` [PATCH v5 2/2] dma-buf: heaps: system: add system_cc_shared heap for explicitly " Jiri Pirko
2026-03-27 19:43 ` T.J. Mercier
2026-03-31 15:08 ` Jason Gunthorpe
2026-04-02 12:23 ` Maxime Ripard
2026-04-02 12:56 ` Jiri Pirko
2026-03-27 9:38 ` [PATCH v5 0/2] dma-buf: heaps: system: add an option to allocate explicitly shared/decrypted memory Marek Szyprowski
2026-03-27 12:10 ` Jason Gunthorpe
2026-03-27 19:43 ` T.J. Mercier
2026-04-02 4:41 ` Sumit Semwal
2026-04-02 5:35 ` Marek Szyprowski
2026-04-02 9:52 ` Brian Starkey
2026-04-02 12:02 ` Jason Gunthorpe
2026-04-02 12:58 ` Jiri Pirko
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=yq5aqzn45a81.fsf@kernel.org \
--to=aneesh.kumar@kernel.org \
--cc=Brian.Starkey@arm.com \
--cc=ashish.kalra@amd.com \
--cc=benjamin.gaignard@collabora.com \
--cc=catalin.marinas@arm.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=iommu@lists.linux.dev \
--cc=jgg@ziepe.ca \
--cc=jiri@resnulli.us \
--cc=john.allen@amd.com \
--cc=jstultz@google.com \
--cc=leon@kernel.org \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-media@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=ptesarik@suse.com \
--cc=robin.murphy@arm.com \
--cc=sean.anderson@linux.dev \
--cc=steven.price@arm.com \
--cc=sumit.semwal@linaro.org \
--cc=suravee.suthikulpanit@amd.com \
--cc=suzuki.poulose@arm.com \
--cc=thomas.lendacky@amd.com \
--cc=tjmercier@google.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