[PATCH v2 11/16] KVM: introduce a 'mmap' method for KVM devices
David Gibson
david at gibson.dropbear.id.au
Mon Feb 25 14:33:09 AEDT 2019
On Fri, Feb 22, 2019 at 12:28:35PM +0100, Cédric Le Goater wrote:
> Some KVM devices will want to handle special mappings related to the
> underlying HW. For instance, the XIVE interrupt controller of the
> POWER9 processor has MMIO pages for thread interrupt management and
> for interrupt source control that need to be exposed to the guest when
> the OS has the required support.
>
> Signed-off-by: Cédric Le Goater <clg at kaod.org>
Ah, when I suggested mmap() on the base device fd, I hadn't realized
there wasn't a facility for that yet.
Have you discussed this with Paolo? We'll need some core KVM buy in
to merge this.
> ---
> include/linux/kvm_host.h | 1 +
> virt/kvm/kvm_main.c | 11 +++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
> index c38cc5eb7e73..cbf81487b69f 100644
> --- a/include/linux/kvm_host.h
> +++ b/include/linux/kvm_host.h
> @@ -1223,6 +1223,7 @@ struct kvm_device_ops {
> int (*has_attr)(struct kvm_device *dev, struct kvm_device_attr *attr);
> long (*ioctl)(struct kvm_device *dev, unsigned int ioctl,
> unsigned long arg);
> + int (*mmap)(struct kvm_device *dev, struct vm_area_struct *vma);
> };
>
> void kvm_device_get(struct kvm_device *dev);
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 585845203db8..84717d8cb5e4 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -2878,6 +2878,16 @@ static long kvm_vcpu_compat_ioctl(struct file *filp,
> }
> #endif
>
> +static int kvm_device_mmap(struct file *filp, struct vm_area_struct *vma)
> +{
> + struct kvm_device *dev = filp->private_data;
> +
> + if (dev->ops->mmap)
> + return dev->ops->mmap(dev, vma);
> +
> + return -ENODEV;
> +}
> +
> static int kvm_device_ioctl_attr(struct kvm_device *dev,
> int (*accessor)(struct kvm_device *dev,
> struct kvm_device_attr *attr),
> @@ -2927,6 +2937,7 @@ static const struct file_operations kvm_device_fops = {
> .unlocked_ioctl = kvm_device_ioctl,
> .release = kvm_device_release,
> KVM_COMPAT(kvm_device_ioctl),
> + .mmap = kvm_device_mmap,
> };
>
> struct kvm_device *kvm_device_from_filp(struct file *filp)
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20190225/8bd74ac6/attachment.sig>
More information about the Linuxppc-dev
mailing list