Thread (128 messages) 128 messages, 13 authors, 2024-09-25

Re: [RFC PATCH 20/21] pci: Allow encrypted MMIO mapping via sysfs

From: Bjorn Helgaas <helgaas@kernel.org>
Date: 2024-09-03 21:46:06
Also in: kvm, linux-iommu, linux-pci

On Mon, Sep 02, 2024 at 06:22:00PM +1000, Alexey Kardashevskiy wrote:
On 24/8/24 08:37, Bjorn Helgaas wrote:
quoted
On Fri, Aug 23, 2024 at 11:21:34PM +1000, Alexey Kardashevskiy wrote:
quoted
Add another resource#d_enc to allow mapping MMIO as
an encrypted/private region.

Unlike resourceN_wc, the node is added always as ability to
map MMIO as private depends on negotiation with the TSM which
happens quite late.
quoted
quoted
@@ -46,6 +46,15 @@ int pci_mmap_resource_range(struct pci_dev *pdev, int bar,
  	vma->vm_ops = &pci_phys_vm_ops;
+	/*
+	 * Calling remap_pfn_range() directly as io_remap_pfn_range()
+	 * enforces shared mapping.
s/Calling/Call/

Needs some additional context about why io_remap_pfn_range() can't be
used here.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f8f6ae5d077a9bdaf5cbf2ac960a5d1a04b47482
added this.

"IO devices do not understand encryption, so this memory must always be
decrypted" it says.
Thanks for the pointer.  Given that hint, the pgprot_decrypted()
inside io_remap_pfn_range() is ... at least *there*, if not obvious.
io_remap_pfn_range() probably could benefit from a simple comment to
highlight that.
But devices do understand encryption so forcing decryption is not wanted.
What additional context is missing here, that "shared" means
"non-encrypted"? Thanks,
If "shared" means "non-encrypted", that would be useful.  That wasn't
obvious to me.

IIUC, in the "enc" case, you *want* the mapping to remain encrypted?
In that case, it would be helpful to say something like
"io_remap_pfn_range() always produces decrypted mappings, so use
remap_pfn_range() directly to avoid the decryption".

Renaming "enc" to "encrypted" would also be a nice hint.
quoted
quoted
+	 */
+	if (enc)
+		return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
+				       vma->vm_end - vma->vm_start,
+				       vma->vm_page_prot);
+
  	return io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
  				  vma->vm_end - vma->vm_start,
  				  vma->vm_page_prot);
-- 
Alexey
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help