From: Alex Williamson <alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Antonios Motakis
<a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
open list <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
will.deacon-5wv7dgnIgG8@public.gmane.org,
a.rigo-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org,
stuart.yoder-KZfg59tc24xl57MIdRCFDg@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org,
kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Subject: Re: [RFC PATCH v5 05/11] VFIO_PLATFORM: Initial skeleton of VFIO support for platform devices
Date: Mon, 28 Apr 2014 11:04:02 -0600 [thread overview]
Message-ID: <1398704642.24318.273.camel@ul30vt.home> (raw)
In-Reply-To: <1398700371-20096-6-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
On Mon, 2014-04-28 at 17:52 +0200, Antonios Motakis wrote:
> This patch forms the skeleton for platform devices support with VFIO.
>
> Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
> ---
> drivers/vfio/Kconfig | 1 +
> drivers/vfio/Makefile | 1 +
> drivers/vfio/platform/Kconfig | 9 ++
> drivers/vfio/platform/Makefile | 4 +
> drivers/vfio/platform/vfio_platform.c | 172 ++++++++++++++++++++++++++
> drivers/vfio/platform/vfio_platform_private.h | 22 ++++
> include/uapi/linux/vfio.h | 1 +
> 7 files changed, 210 insertions(+)
> create mode 100644 drivers/vfio/platform/Kconfig
> create mode 100644 drivers/vfio/platform/Makefile
> create mode 100644 drivers/vfio/platform/vfio_platform.c
> create mode 100644 drivers/vfio/platform/vfio_platform_private.h
>
> diff --git a/drivers/vfio/Kconfig b/drivers/vfio/Kconfig
> index 3a598ed..a484d72 100644
> --- a/drivers/vfio/Kconfig
> +++ b/drivers/vfio/Kconfig
> @@ -21,3 +21,4 @@ menuconfig VFIO
> If you don't know what to do here, say N.
>
> source "drivers/vfio/pci/Kconfig"
> +source "drivers/vfio/platform/Kconfig"
> diff --git a/drivers/vfio/Makefile b/drivers/vfio/Makefile
> index 72bfabc..b5e4a33 100644
> --- a/drivers/vfio/Makefile
> +++ b/drivers/vfio/Makefile
> @@ -2,3 +2,4 @@ obj-$(CONFIG_VFIO) += vfio.o
> obj-$(CONFIG_VFIO_IOMMU_TYPE1) += vfio_iommu_type1.o
> obj-$(CONFIG_VFIO_IOMMU_SPAPR_TCE) += vfio_iommu_spapr_tce.o
> obj-$(CONFIG_VFIO_PCI) += pci/
> +obj-$(CONFIG_VFIO_PLATFORM) += platform/
> diff --git a/drivers/vfio/platform/Kconfig b/drivers/vfio/platform/Kconfig
> new file mode 100644
> index 0000000..42b0022
> --- /dev/null
> +++ b/drivers/vfio/platform/Kconfig
> @@ -0,0 +1,9 @@
> +config VFIO_PLATFORM
> + tristate "VFIO support for platform devices"
> + depends on VFIO && EVENTFD
VFIO_PCI also depends on PCI, is there no CONFIG_PLATFORM? What benefit
would I get from this if I enable it on my x86 box?
> + help
> + Support for platform devices with VFIO. This is required to make
> + use of platform devices present on the system using the VFIO
> + framework.
> +
> + If you don't know what to do here, say N.
> diff --git a/drivers/vfio/platform/Makefile b/drivers/vfio/platform/Makefile
> new file mode 100644
> index 0000000..df3a014
> --- /dev/null
> +++ b/drivers/vfio/platform/Makefile
> @@ -0,0 +1,4 @@
> +
> +vfio-platform-y := vfio_platform.o
> +
> +obj-$(CONFIG_VFIO_PLATFORM) += vfio-platform.o
> diff --git a/drivers/vfio/platform/vfio_platform.c b/drivers/vfio/platform/vfio_platform.c
> new file mode 100644
> index 0000000..1661746
> --- /dev/null
> +++ b/drivers/vfio/platform/vfio_platform.c
> @@ -0,0 +1,172 @@
> +/*
> + * Copyright (C) 2013 - Virtual Open Systems
> + * Author: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License, version 2, as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/device.h>
> +#include <linux/eventfd.h>
> +#include <linux/interrupt.h>
> +#include <linux/iommu.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/notifier.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/slab.h>
> +#include <linux/types.h>
> +#include <linux/uaccess.h>
> +#include <linux/vfio.h>
> +#include <linux/io.h>
> +#include <linux/platform_device.h>
> +#include <linux/irq.h>
> +
> +#include "vfio_platform_private.h"
> +
> +#define DRIVER_VERSION "0.5"
> +#define DRIVER_AUTHOR "Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>"
> +#define DRIVER_DESC "VFIO for platform devices - User Level meta-driver"
> +
> +static void vfio_platform_release(void *device_data)
> +{
> + module_put(THIS_MODULE);
> +}
> +
> +static int vfio_platform_open(void *device_data)
> +{
> + if (!try_module_get(THIS_MODULE))
> + return -ENODEV;
> +
> + return 0;
> +}
> +
> +static long vfio_platform_ioctl(void *device_data,
> + unsigned int cmd, unsigned long arg)
> +{
> + struct vfio_platform_device *vdev = device_data;
> + unsigned long minsz;
> +
> + if (cmd == VFIO_DEVICE_GET_INFO) {
> + struct vfio_device_info info;
> +
> + minsz = offsetofend(struct vfio_device_info, num_irqs);
> +
> + if (copy_from_user(&info, (void __user *)arg, minsz))
> + return -EFAULT;
> +
> + if (info.argsz < minsz)
> + return -EINVAL;
> +
> + info.flags = VFIO_DEVICE_FLAGS_PLATFORM;
> + info.num_regions = 0;
> + info.num_irqs = 0;
> +
> + return copy_to_user((void __user *)arg, &info, minsz);
> +
> + } else if (cmd == VFIO_DEVICE_GET_REGION_INFO)
> + return -EINVAL;
> +
> + else if (cmd == VFIO_DEVICE_GET_IRQ_INFO)
> + return -EINVAL;
> +
> + else if (cmd == VFIO_DEVICE_SET_IRQS)
> + return -EINVAL;
> +
> + else if (cmd == VFIO_DEVICE_RESET)
> + return -EINVAL;
> +
> + return -ENOTTY;
> +}
> +
> +static ssize_t vfio_platform_read(void *device_data, char __user *buf,
> + size_t count, loff_t *ppos)
> +{
> + return 0;
> +}
> +
> +static ssize_t vfio_platform_write(void *device_data, const char __user *buf,
> + size_t count, loff_t *ppos)
> +{
> + return 0;
> +}
I know these are just stubs, but I suspect they should probably return
error. Thanks,
Alex
> +
> +static int vfio_platform_mmap(void *device_data, struct vm_area_struct *vma)
> +{
> + return -EINVAL;
> +}
> +
> +static const struct vfio_device_ops vfio_platform_ops = {
> + .name = "vfio-platform",
> + .open = vfio_platform_open,
> + .release = vfio_platform_release,
> + .ioctl = vfio_platform_ioctl,
> + .read = vfio_platform_read,
> + .write = vfio_platform_write,
> + .mmap = vfio_platform_mmap,
> +};
> +
> +static int vfio_platform_probe(struct platform_device *pdev)
> +{
> + struct vfio_platform_device *vdev;
> + struct iommu_group *group;
> + int ret;
> +
> + group = iommu_group_get(&pdev->dev);
> + if (!group) {
> + pr_err("VFIO: No IOMMU group for device %s\n", pdev->name);
> + return -EINVAL;
> + }
> +
> + vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
> + if (!vdev) {
> + iommu_group_put(group);
> + return -ENOMEM;
> + }
> +
> + vdev->pdev = pdev;
> +
> + ret = vfio_add_group_dev(&pdev->dev, &vfio_platform_ops, vdev);
> + if (ret) {
> + iommu_group_put(group);
> + kfree(vdev);
> + }
> +
> + return ret;
> +}
> +
> +static int vfio_platform_remove(struct platform_device *pdev)
> +{
> + struct vfio_platform_device *vdev;
> +
> + vdev = vfio_del_group_dev(&pdev->dev);
> + if (!vdev)
> + return -EINVAL;
> +
> + iommu_group_put(pdev->dev.iommu_group);
> + kfree(vdev);
> +
> + return 0;
> +}
> +
> +static struct platform_driver vfio_platform_driver = {
> + .probe = vfio_platform_probe,
> + .remove = vfio_platform_remove,
> + .driver = {
> + .name = "vfio-platform",
> + .owner = THIS_MODULE,
> + },
> +};
> +
> +module_platform_driver(vfio_platform_driver);
> +
> +MODULE_VERSION(DRIVER_VERSION);
> +MODULE_LICENSE("GPL v2");
> +MODULE_AUTHOR(DRIVER_AUTHOR);
> +MODULE_DESCRIPTION(DRIVER_DESC);
> diff --git a/drivers/vfio/platform/vfio_platform_private.h b/drivers/vfio/platform/vfio_platform_private.h
> new file mode 100644
> index 0000000..4ae88f8
> --- /dev/null
> +++ b/drivers/vfio/platform/vfio_platform_private.h
> @@ -0,0 +1,22 @@
> +/*
> + * Copyright (C) 2013 - Virtual Open Systems
> + * Author: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License, version 2, as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#ifndef VFIO_PLATFORM_PRIVATE_H
> +#define VFIO_PLATFORM_PRIVATE_H
> +
> +struct vfio_platform_device {
> + struct platform_device *pdev;
> +};
> +
> +#endif /* VFIO_PLATFORM_PRIVATE_H */
> diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> index 0847b29..b1a8de8 100644
> --- a/include/uapi/linux/vfio.h
> +++ b/include/uapi/linux/vfio.h
> @@ -155,6 +155,7 @@ struct vfio_device_info {
> __u32 flags;
> #define VFIO_DEVICE_FLAGS_RESET (1 << 0) /* Device supports reset */
> #define VFIO_DEVICE_FLAGS_PCI (1 << 1) /* vfio-pci device */
> +#define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2) /* vfio-platform device */
> __u32 num_regions; /* Max region index + 1 */
> __u32 num_irqs; /* Max IRQ index + 1 */
> };
next prev parent reply other threads:[~2014-04-28 17:04 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-28 15:52 [RFC PATCH v5 00/11] VFIO support for platform devices Antonios Motakis
[not found] ` <1398700371-20096-1-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 15:52 ` [RFC PATCH v5 01/11] driver core: platform: add device binding path 'driver_override' Antonios Motakis
2014-05-21 0:25 ` [RFC PATCH v5_v2 " Kim Phillips
[not found] ` <20140520192537.bab9fa2088c1cd5da3f92639-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-05-29 19:43 ` Alex Williamson
[not found] ` <1401392619.2412.102.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-05-29 21:24 ` Alexander Graf
2014-05-30 0:36 ` Stuart Yoder
2014-06-03 0:42 ` [PATCH] " Kim Phillips
[not found] ` <20140602194258.5135925bf3c71b9c010fb409-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2014-06-03 4:28 ` Greg KH
[not found] ` <20140603042842.GD14668-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-06-26 1:08 ` Kim Phillips
2014-07-07 21:19 ` Kim Phillips
2014-07-08 22:37 ` Greg KH
2014-04-28 15:52 ` [RFC PATCH v5 02/11] ARM SMMU: Add capability IOMMU_CAP_DMA_EXEC Antonios Motakis
[not found] ` <1398700371-20096-3-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 19:37 ` Will Deacon
[not found] ` <20140428193709.GE22135-5wv7dgnIgG8@public.gmane.org>
2014-04-28 20:20 ` Alex Williamson
2014-04-29 9:49 ` Antonios Motakis
2014-04-29 9:52 ` Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 03/11] VFIO_IOMMU_TYPE1 for platform bus devices on ARM Antonios Motakis
[not found] ` <1398700371-20096-4-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 16:43 ` Alex Williamson
[not found] ` <1398703421.24318.262.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-28 19:19 ` Will Deacon
[not found] ` <20140428191920.GC22135-5wv7dgnIgG8@public.gmane.org>
2014-04-28 20:08 ` Alex Williamson
[not found] ` <1398715690.24318.321.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-30 13:08 ` Will Deacon
2014-04-28 15:52 ` [RFC PATCH v5 04/11] VFIO_IOMMU_TYPE1: Introduce the VFIO_DMA_MAP_FLAG_EXEC flag Antonios Motakis
[not found] ` <1398700371-20096-5-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 16:53 ` Alex Williamson
[not found] ` <1398704036.24318.269.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-29 13:16 ` Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 05/11] VFIO_PLATFORM: Initial skeleton of VFIO support for platform devices Antonios Motakis
[not found] ` <1398700371-20096-6-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 17:04 ` Alex Williamson [this message]
[not found] ` <1398704642.24318.273.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-29 13:23 ` Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 06/11] VFIO_PLATFORM: Return info for device and its memory mapped IO regions Antonios Motakis
[not found] ` <1398700371-20096-7-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 17:16 ` Alex Williamson
[not found] ` <1398705389.24318.279.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-05-02 16:55 ` Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 07/11] VFIO_PLATFORM: Read and write support for the device fd Antonios Motakis
[not found] ` <1398700371-20096-8-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 17:24 ` Alex Williamson
[not found] ` <1398705857.24318.284.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-29 13:27 ` Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 08/11] VFIO_PLATFORM: Support MMAP of MMIO regions Antonios Motakis
[not found] ` <1398700371-20096-9-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 17:27 ` Alex Williamson
[not found] ` <1398706042.24318.287.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-29 13:28 ` Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 09/11] VFIO_PLATFORM: Return IRQ info Antonios Motakis
[not found] ` <1398700371-20096-10-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 17:33 ` Alex Williamson
2014-04-28 15:52 ` [RFC PATCH v5 10/11] VFIO_PLATFORM: Initial interrupts support Antonios Motakis
2014-04-28 15:52 ` [RFC PATCH v5 11/11] VFIO_PLATFORM: Support for maskable and automasked interrupts Antonios Motakis
[not found] ` <1398700371-20096-12-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-04-28 17:46 ` Alex Williamson
[not found] ` <1398707198.24318.293.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-05-02 17:25 ` Antonios Motakis
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=1398704642.24318.273.camel@ul30vt.home \
--to=alex.williamson-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=a.rigo-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
--cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=stuart.yoder-KZfg59tc24xl57MIdRCFDg@public.gmane.org \
--cc=tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
/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