From: Mahmoud Adam <mngyadam@amazon.de>
To: <kvm@vger.kernel.org>
Cc: <alex.williamson@redhat.com>, <jgg@ziepe.ca>,
<benh@kernel.crashing.org>, David Woodhouse <dwmw@amazon.co.uk>,
<pravkmr@amazon.de>, <nagy@khwaternagy.com>
Subject: [RFC PATCH 2/9] vfio: add transient ops to support vfio mmap mt
Date: Mon, 4 Aug 2025 12:39:55 +0200 [thread overview]
Message-ID: <20250804104012.87915-3-mngyadam@amazon.de> (raw)
In-Reply-To: <20250804104012.87915-1-mngyadam@amazon.de>
add a new transient operations for ioctl & mmap that allows using the
new mmap maple tree, since these operations are used extensively, it's
better to transition into new temporary ops, then after onboarding all
the users to the new ops we will drop the old legacy ops proto and
replace it with the new ones. Having new ops allows us to enforce the
vmmap existence check when mmap ops is called, and make the migration
more stable, and reviewable.
ioctl needs to have access over the whole mt to add/query entries when
needed, this allows inserting new range in the mt for example when
DEVICE_GET_REGION_INFO is called by the user, this also enabled us to
add other uapi to change mmap attrs in a certain range. When mmapping
there must be a vmmap entry for that offset otherwise return -EINVAL.
Signed-off-by: Mahmoud Adam <mngyadam@amazon.de>
---
This names is only used for the migration period that was I used 2 as a suffix,
maybe _vmmap could also be used or similar.
drivers/vfio/vfio_main.c | 12 ++++++++++++
include/linux/vfio.h | 4 ++++
2 files changed, 16 insertions(+)
diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
index 4c4af4de60d12..3275ff56eef47 100644
--- a/drivers/vfio/vfio_main.c
+++ b/drivers/vfio/vfio_main.c
@@ -1324,6 +1324,10 @@ static long vfio_device_fops_unl_ioctl(struct file *filep,
break;
default:
+ if (device->ops->ioctl2) {
+ ret = device->ops->ioctl2(device, cmd, arg, &df->mmap_mt);
+ break;
+ }
if (unlikely(!device->ops->ioctl))
ret = -EINVAL;
else
@@ -1372,11 +1376,19 @@ static int vfio_device_fops_mmap(struct file *filep, struct vm_area_struct *vma)
{
struct vfio_device_file *df = filep->private_data;
struct vfio_device *device = df->device;
+ struct vfio_mmap *vmmap;
/* Paired with smp_store_release() following vfio_df_open() */
if (!smp_load_acquire(&df->access_granted))
return -EINVAL;
+ if (device->ops->mmap2) {
+ vmmap = mtree_load(&df->mmap_mt, (vma->vm_pgoff << PAGE_SHIFT));
+ if (!vmmap)
+ return -EINVAL;
+ return device->ops->mmap2(device, vma, vmmap);
+ }
+
if (unlikely(!device->ops->mmap))
return -EINVAL;
diff --git a/include/linux/vfio.h b/include/linux/vfio.h
index 6e0aca05aa406..836ef72a38104 100644
--- a/include/linux/vfio.h
+++ b/include/linux/vfio.h
@@ -142,7 +142,11 @@ struct vfio_device_ops {
size_t count, loff_t *size);
long (*ioctl)(struct vfio_device *vdev, unsigned int cmd,
unsigned long arg);
+ long (*ioctl2)(struct vfio_device *vdev, unsigned int cmd,
+ unsigned long arg, struct maple_tree *mmap_mt);
int (*mmap)(struct vfio_device *vdev, struct vm_area_struct *vma);
+ int (*mmap2)(struct vfio_device *vdev, struct vm_area_struct *vma,
+ struct vfio_mmap *vmmap);
void (*request)(struct vfio_device *vdev, unsigned int count);
int (*match)(struct vfio_device *vdev, char *buf);
void (*dma_unmap)(struct vfio_device *vdev, u64 iova, u64 length);
--
2.47.3
Amazon Web Services Development Center Germany GmbH
Tamara-Danz-Str. 13
10243 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 257764 B
Sitz: Berlin
Ust-ID: DE 365 538 597
next prev parent reply other threads:[~2025-08-04 10:41 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-04 10:39 [RFC PATCH 0/9] vfio: Introduce mmap maple tree Mahmoud Adam
2025-08-04 10:39 ` [RFC PATCH 1/9] vfio: add mmap maple tree to vfio Mahmoud Adam
2025-08-04 10:39 ` Mahmoud Adam [this message]
2025-08-04 10:39 ` [RFC PATCH 3/9] vfio-pci-core: rename vm operations Mahmoud Adam
2025-08-04 10:39 ` [RFC PATCH 4/9] vfio-pci-core: remove redundant offset calculations Mahmoud Adam
2025-08-04 10:39 ` [RFC PATCH 5/9] vfio-pci-core: add vfio_pci_mmap & helpers Mahmoud Adam
2025-08-04 10:39 ` [RFC PATCH 6/9] vfio-pci-core: support the new vfio ops Mahmoud Adam
2025-08-04 10:40 ` [RFC PATCH 7/9] vfio-pci: use " Mahmoud Adam
2025-08-04 10:40 ` [RFC PATCH 8/9] vfio: UAPI for setting mmap attributes Mahmoud Adam
2025-08-04 10:40 ` [RFC PATCH 9/9] vfio_pci_core: support mmap attrs uapi & WC Mahmoud Adam
2025-08-04 18:49 ` [RFC PATCH 0/9] vfio: Introduce mmap maple tree Alex Williamson
2025-08-04 20:09 ` Mahmoud Nagy Adam
2025-08-05 14:31 ` Jason Gunthorpe
2025-08-05 15:48 ` Mahmoud Nagy Adam
2025-08-05 18:50 ` [RFC " Jason Gunthorpe
2025-08-05 19:00 ` Alex Williamson
[not found] ` <80dc87730f694b2d6e6aabbd29df49cf3c7c44fb.camel@amazon.com>
[not found] ` <20250806115224.GB377696@ziepe.ca>
2025-08-07 8:12 ` Herrenschmidt, Benjamin
2025-08-07 19:06 ` Alex Williamson
2025-08-11 15:55 ` Jason Gunthorpe
2025-08-11 22:07 ` Alex Williamson
2025-08-12 0:30 ` Jason Gunthorpe
2025-08-12 19:26 ` Alex Williamson
2025-08-13 0:17 ` Jason Gunthorpe
2025-08-14 8:39 ` Mahmoud Nagy Adam
2025-08-14 9:52 ` Mahmoud Nagy Adam
2025-08-14 17:52 ` Alex Williamson
2025-08-28 8:53 ` Mahmoud Nagy Adam
2025-08-28 19:17 ` Alex Williamson
2025-08-07 8:13 ` Benjamin Herrenschmidt
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=20250804104012.87915-3-mngyadam@amazon.de \
--to=mngyadam@amazon.de \
--cc=alex.williamson@redhat.com \
--cc=benh@kernel.crashing.org \
--cc=dwmw@amazon.co.uk \
--cc=jgg@ziepe.ca \
--cc=kvm@vger.kernel.org \
--cc=nagy@khwaternagy.com \
--cc=pravkmr@amazon.de \
/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.