Message ID | 20230206090532.95598-6-yi.l.liu@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add vfio_device cdev for iommufd support | expand |
> From: Liu, Yi L <yi.l.liu@intel.com> > Sent: Monday, February 6, 2023 5:05 PM > > This defines KVM_DEV_VFIO_FILE* and make alias with > KVM_DEV_VFIO_GROUP*. > Old userspace uses KVM_DEV_VFIO_GROUP* works as well. > > Signed-off-by: Yi Liu <yi.l.liu@intel.com> > --- > Documentation/virt/kvm/devices/vfio.rst | 40 ++++++++++++++----------- > include/uapi/linux/kvm.h | 16 +++++++--- > virt/kvm/vfio.c | 16 +++++----- > 3 files changed, 42 insertions(+), 30 deletions(-) > > diff --git a/Documentation/virt/kvm/devices/vfio.rst > b/Documentation/virt/kvm/devices/vfio.rst > index 2d20dc561069..7f84ec26ca4a 100644 > --- a/Documentation/virt/kvm/devices/vfio.rst > +++ b/Documentation/virt/kvm/devices/vfio.rst > @@ -9,23 +9,26 @@ Device types supported: > - KVM_DEV_TYPE_VFIO > > Only one VFIO instance may be created per VM. The created device > -tracks VFIO groups in use by the VM and features of those groups > -important to the correctness and acceleration of the VM. As groups > -are enabled and disabled for use by the VM, KVM should be updated > -about their presence. When registered with KVM, a reference to the > -VFIO-group is held by KVM. > +tracks VFIO files (group or device) in use by the VM and features > +of those groups/devices important to the correctness and acceleration > +of the VM. As groups/devices are enabled and disabled for use by the > +VM, KVM should be updated about their presence. When registered with > +KVM, a reference to the VFIO file is held by KVM. > > Groups: "Files" > - KVM_DEV_VFIO_GROUP > - > -KVM_DEV_VFIO_GROUP attributes: > - KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device > tracking > - kvm_device_attr.addr points to an int32_t file descriptor > - for the VFIO group. > - KVM_DEV_VFIO_GROUP_DEL: Remove a VFIO group from VFIO-KVM > device tracking > - kvm_device_attr.addr points to an int32_t file descriptor > - for the VFIO group. > - KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE: attaches a guest visible TCE > table > + KVM_DEV_VFIO_FILE > + - alias: KVM_DEV_VFIO_GROUP > + > +KVM_DEV_VFIO_FILE attributes: > + KVM_DEV_VFIO_FILE_ADD: Add a VFIO file (group/device) to VFIO-KVM > device > + tracking kvm_device_attr.addr points to an int32_t file descriptor "... device tracking" and "kvm_device.attr.addr points to..." are two sentences. They are deliberately arranged to be in different lines. > + for the VFIO file. > + - alias: KVM_DEV_VFIO_GROUP_ADD > + KVM_DEV_VFIO_FILE_DEL: Remove a VFIO file (group/device) from VFIO- > KVM > + device tracking kvm_device_attr.addr points to an int32_t file > + descriptor for the VFIO file. ditto > + - alias: KVM_DEV_VFIO_GROUP_DEL > + KVM_DEV_VFIO_FILE_SET_SPAPR_TCE: attaches a guest visible TCE table > allocated by sPAPR KVM. somehow here it should emphasize that the file can only be group > kvm_device_attr.addr points to a struct:: > > @@ -36,6 +39,7 @@ KVM_DEV_VFIO_GROUP attributes: > > where: > > - - @groupfd is a file descriptor for a VFIO group; > - - @tablefd is a file descriptor for a TCE table allocated via > - KVM_CREATE_SPAPR_TCE. > + *) @groupfd is a file descriptor for a VFIO group; > + *) @tablefd is a file descriptor for a TCE table allocated via why changing above two lines? > + KVM_CREATE_SPAPR_TCE. > + - alias: KVM_DEV_VFIO_FILE_SET_SPAPR_TCE GROUP
> From: Tian, Kevin <kevin.tian@intel.com> > Sent: Tuesday, February 7, 2023 11:37 AM > > > From: Liu, Yi L <yi.l.liu@intel.com> > > Sent: Monday, February 6, 2023 5:05 PM > > > > This defines KVM_DEV_VFIO_FILE* and make alias with > > KVM_DEV_VFIO_GROUP*. > > Old userspace uses KVM_DEV_VFIO_GROUP* works as well. > > > > Signed-off-by: Yi Liu <yi.l.liu@intel.com> > > --- > > Documentation/virt/kvm/devices/vfio.rst | 40 ++++++++++++++---------- > - > > include/uapi/linux/kvm.h | 16 +++++++--- > > virt/kvm/vfio.c | 16 +++++----- > > 3 files changed, 42 insertions(+), 30 deletions(-) > > > > diff --git a/Documentation/virt/kvm/devices/vfio.rst > > b/Documentation/virt/kvm/devices/vfio.rst > > index 2d20dc561069..7f84ec26ca4a 100644 > > --- a/Documentation/virt/kvm/devices/vfio.rst > > +++ b/Documentation/virt/kvm/devices/vfio.rst > > @@ -9,23 +9,26 @@ Device types supported: > > - KVM_DEV_TYPE_VFIO > > > > Only one VFIO instance may be created per VM. The created device > > -tracks VFIO groups in use by the VM and features of those groups > > -important to the correctness and acceleration of the VM. As groups > > -are enabled and disabled for use by the VM, KVM should be updated > > -about their presence. When registered with KVM, a reference to the > > -VFIO-group is held by KVM. > > +tracks VFIO files (group or device) in use by the VM and features > > +of those groups/devices important to the correctness and acceleration > > +of the VM. As groups/devices are enabled and disabled for use by the > > +VM, KVM should be updated about their presence. When registered > with > > +KVM, a reference to the VFIO file is held by KVM. > > > > Groups: > > "Files" It should be "Groups"
diff --git a/Documentation/virt/kvm/devices/vfio.rst b/Documentation/virt/kvm/devices/vfio.rst index 2d20dc561069..7f84ec26ca4a 100644 --- a/Documentation/virt/kvm/devices/vfio.rst +++ b/Documentation/virt/kvm/devices/vfio.rst @@ -9,23 +9,26 @@ Device types supported: - KVM_DEV_TYPE_VFIO Only one VFIO instance may be created per VM. The created device -tracks VFIO groups in use by the VM and features of those groups -important to the correctness and acceleration of the VM. As groups -are enabled and disabled for use by the VM, KVM should be updated -about their presence. When registered with KVM, a reference to the -VFIO-group is held by KVM. +tracks VFIO files (group or device) in use by the VM and features +of those groups/devices important to the correctness and acceleration +of the VM. As groups/devices are enabled and disabled for use by the +VM, KVM should be updated about their presence. When registered with +KVM, a reference to the VFIO file is held by KVM. Groups: - KVM_DEV_VFIO_GROUP - -KVM_DEV_VFIO_GROUP attributes: - KVM_DEV_VFIO_GROUP_ADD: Add a VFIO group to VFIO-KVM device tracking - kvm_device_attr.addr points to an int32_t file descriptor - for the VFIO group. - KVM_DEV_VFIO_GROUP_DEL: Remove a VFIO group from VFIO-KVM device tracking - kvm_device_attr.addr points to an int32_t file descriptor - for the VFIO group. - KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE: attaches a guest visible TCE table + KVM_DEV_VFIO_FILE + - alias: KVM_DEV_VFIO_GROUP + +KVM_DEV_VFIO_FILE attributes: + KVM_DEV_VFIO_FILE_ADD: Add a VFIO file (group/device) to VFIO-KVM device + tracking kvm_device_attr.addr points to an int32_t file descriptor + for the VFIO file. + - alias: KVM_DEV_VFIO_GROUP_ADD + KVM_DEV_VFIO_FILE_DEL: Remove a VFIO file (group/device) from VFIO-KVM + device tracking kvm_device_attr.addr points to an int32_t file + descriptor for the VFIO file. + - alias: KVM_DEV_VFIO_GROUP_DEL + KVM_DEV_VFIO_FILE_SET_SPAPR_TCE: attaches a guest visible TCE table allocated by sPAPR KVM. kvm_device_attr.addr points to a struct:: @@ -36,6 +39,7 @@ KVM_DEV_VFIO_GROUP attributes: where: - - @groupfd is a file descriptor for a VFIO group; - - @tablefd is a file descriptor for a TCE table allocated via - KVM_CREATE_SPAPR_TCE. + *) @groupfd is a file descriptor for a VFIO group; + *) @tablefd is a file descriptor for a TCE table allocated via + KVM_CREATE_SPAPR_TCE. + - alias: KVM_DEV_VFIO_FILE_SET_SPAPR_TCE diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 55155e262646..484a8133bc69 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -1401,10 +1401,18 @@ struct kvm_device_attr { __u64 addr; /* userspace address of attr data */ }; -#define KVM_DEV_VFIO_GROUP 1 -#define KVM_DEV_VFIO_GROUP_ADD 1 -#define KVM_DEV_VFIO_GROUP_DEL 2 -#define KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE 3 +#define KVM_DEV_VFIO_FILE 1 + +#define KVM_DEV_VFIO_FILE_ADD 1 +#define KVM_DEV_VFIO_FILE_DEL 2 +#define KVM_DEV_VFIO_FILE_SET_SPAPR_TCE 3 + +/* KVM_DEV_VFIO_GROUP aliases are for compile time uapi compatibility */ +#define KVM_DEV_VFIO_GROUP KVM_DEV_VFIO_FILE + +#define KVM_DEV_VFIO_GROUP_ADD KVM_DEV_VFIO_FILE_ADD +#define KVM_DEV_VFIO_GROUP_DEL KVM_DEV_VFIO_FILE_DEL +#define KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE KVM_DEV_VFIO_FILE_SET_SPAPR_TCE enum kvm_device_type { KVM_DEV_TYPE_FSL_MPIC_20 = 1, diff --git a/virt/kvm/vfio.c b/virt/kvm/vfio.c index 857d6ba349e1..d869913baafd 100644 --- a/virt/kvm/vfio.c +++ b/virt/kvm/vfio.c @@ -286,18 +286,18 @@ static int kvm_vfio_set_file(struct kvm_device *dev, long attr, int32_t fd; switch (attr) { - case KVM_DEV_VFIO_GROUP_ADD: + case KVM_DEV_VFIO_FILE_ADD: if (get_user(fd, argp)) return -EFAULT; return kvm_vfio_file_add(dev, fd); - case KVM_DEV_VFIO_GROUP_DEL: + case KVM_DEV_VFIO_FILE_DEL: if (get_user(fd, argp)) return -EFAULT; return kvm_vfio_file_del(dev, fd); #ifdef CONFIG_SPAPR_TCE_IOMMU - case KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE: + case KVM_DEV_VFIO_FILE_SET_SPAPR_TCE: return kvm_vfio_file_set_spapr_tce(dev, arg); #endif } @@ -309,7 +309,7 @@ static int kvm_vfio_set_attr(struct kvm_device *dev, struct kvm_device_attr *attr) { switch (attr->group) { - case KVM_DEV_VFIO_GROUP: + case KVM_DEV_VFIO_FILE: return kvm_vfio_set_file(dev, attr->attr, u64_to_user_ptr(attr->addr)); } @@ -321,12 +321,12 @@ static int kvm_vfio_has_attr(struct kvm_device *dev, struct kvm_device_attr *attr) { switch (attr->group) { - case KVM_DEV_VFIO_GROUP: + case KVM_DEV_VFIO_FILE: switch (attr->attr) { - case KVM_DEV_VFIO_GROUP_ADD: - case KVM_DEV_VFIO_GROUP_DEL: + case KVM_DEV_VFIO_FILE_ADD: + case KVM_DEV_VFIO_FILE_DEL: #ifdef CONFIG_SPAPR_TCE_IOMMU - case KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE: + case KVM_DEV_VFIO_FILE_SET_SPAPR_TCE: #endif return 0; }
This defines KVM_DEV_VFIO_FILE* and make alias with KVM_DEV_VFIO_GROUP*. Old userspace uses KVM_DEV_VFIO_GROUP* works as well. Signed-off-by: Yi Liu <yi.l.liu@intel.com> --- Documentation/virt/kvm/devices/vfio.rst | 40 ++++++++++++++----------- include/uapi/linux/kvm.h | 16 +++++++--- virt/kvm/vfio.c | 16 +++++----- 3 files changed, 42 insertions(+), 30 deletions(-)