From: Elliot Berman <quic_eberman@quicinc.com> To: Alex Elder <elder@linaro.org>, Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Jonathan Corbet <corbet@lwn.net>, "Elliot Berman" <quic_eberman@quicinc.com>, Prakruthi Deepak Heragu <quic_pheragu@quicinc.com> Cc: Murali Nalajala <quic_mnalajal@quicinc.com>, Trilok Soni <quic_tsoni@quicinc.com>, Srivatsa Vaddagiri <quic_svaddagi@quicinc.com>, Carl van Schaik <quic_cvanscha@quicinc.com>, Dmitry Baryshkov <dmitry.baryshkov@linaro.org>, Bjorn Andersson <andersson@kernel.org>, "Konrad Dybcio" <konrad.dybcio@linaro.org>, Arnd Bergmann <arnd@arndb.de>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, Rob Herring <robh+dt@kernel.org>, Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>, Bagas Sanjaya <bagasdotme@gmail.com>, Will Deacon <will@kernel.org>, Andy Gross <agross@kernel.org>, Catalin Marinas <catalin.marinas@arm.com>, Jassi Brar <jassisinghbrar@gmail.com>, <linux-arm-msm@vger.kernel.org>, <devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-doc@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org> Subject: [PATCH v11 10/26] gunyah: vm_mgr: Introduce basic VM Manager Date: Fri, 3 Mar 2023 17:06:16 -0800 [thread overview] Message-ID: <20230304010632.2127470-11-quic_eberman@quicinc.com> (raw) In-Reply-To: <20230304010632.2127470-1-quic_eberman@quicinc.com> Gunyah VM manager is a kernel moduel which exposes an interface to Gunyah userspace to load, run, and interact with other Gunyah virtual machines. The interface is a character device at /dev/gunyah. Add a basic VM manager driver. Upcoming patches will add more ioctls into this driver. Co-developed-by: Prakruthi Deepak Heragu <quic_pheragu@quicinc.com> Signed-off-by: Prakruthi Deepak Heragu <quic_pheragu@quicinc.com> Signed-off-by: Elliot Berman <quic_eberman@quicinc.com> --- .../userspace-api/ioctl/ioctl-number.rst | 1 + drivers/virt/gunyah/Makefile | 2 +- drivers/virt/gunyah/rsc_mgr.c | 38 +++++- drivers/virt/gunyah/vm_mgr.c | 116 ++++++++++++++++++ drivers/virt/gunyah/vm_mgr.h | 23 ++++ include/uapi/linux/gunyah.h | 23 ++++ 6 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 drivers/virt/gunyah/vm_mgr.c create mode 100644 drivers/virt/gunyah/vm_mgr.h create mode 100644 include/uapi/linux/gunyah.h diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst index 0a1882e296ae..2513324ae7be 100644 --- a/Documentation/userspace-api/ioctl/ioctl-number.rst +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst @@ -137,6 +137,7 @@ Code Seq# Include File Comments 'F' DD video/sstfb.h conflict! 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict! 'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict! +'G' 00-0f linux/gunyah.h conflict! 'H' 00-7F linux/hiddev.h conflict! 'H' 00-0F linux/hidraw.h conflict! 'H' 01 linux/mei.h conflict! diff --git a/drivers/virt/gunyah/Makefile b/drivers/virt/gunyah/Makefile index de29769f2f3f..03951cf82023 100644 --- a/drivers/virt/gunyah/Makefile +++ b/drivers/virt/gunyah/Makefile @@ -2,5 +2,5 @@ obj-$(CONFIG_GUNYAH) += gunyah.o -gunyah_rsc_mgr-y += rsc_mgr.o rsc_mgr_rpc.o +gunyah_rsc_mgr-y += rsc_mgr.o rsc_mgr_rpc.o vm_mgr.o obj-$(CONFIG_GUNYAH) += gunyah_rsc_mgr.o diff --git a/drivers/virt/gunyah/rsc_mgr.c b/drivers/virt/gunyah/rsc_mgr.c index 67813c9a52db..d7ce692d0067 100644 --- a/drivers/virt/gunyah/rsc_mgr.c +++ b/drivers/virt/gunyah/rsc_mgr.c @@ -15,8 +15,10 @@ #include <linux/completion.h> #include <linux/gunyah_rsc_mgr.h> #include <linux/platform_device.h> +#include <linux/miscdevice.h> #include "rsc_mgr.h" +#include "vm_mgr.h" #define RM_RPC_API_VERSION_MASK GENMASK(3, 0) #define RM_RPC_HEADER_WORDS_MASK GENMASK(7, 4) @@ -129,6 +131,7 @@ struct gh_rm_connection { * @cache: cache for allocating Tx messages * @send_lock: synchronization to allow only one request to be sent at a time * @nh: notifier chain for clients interested in RM notification messages + * @miscdev: /dev/gunyah */ struct gh_rm { struct device *dev; @@ -145,6 +148,8 @@ struct gh_rm { struct kmem_cache *cache; struct mutex send_lock; struct blocking_notifier_head nh; + + struct miscdevice miscdev; }; /** @@ -593,6 +598,21 @@ void gh_rm_put(struct gh_rm *rm) } EXPORT_SYMBOL_GPL(gh_rm_put); +static long gh_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + struct miscdevice *miscdev = filp->private_data; + struct gh_rm *rm = container_of(miscdev, struct gh_rm, miscdev); + + return gh_dev_vm_mgr_ioctl(rm, cmd, arg); +} + +static const struct file_operations gh_dev_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = gh_dev_ioctl, + .compat_ioctl = compat_ptr_ioctl, + .llseek = noop_llseek, +}; + static int gh_msgq_platform_probe_direction(struct platform_device *pdev, bool tx, struct gh_resource *ghrsc) { @@ -651,7 +671,22 @@ static int gh_rm_drv_probe(struct platform_device *pdev) rm->msgq_client.rx_callback = gh_rm_msgq_rx_data; rm->msgq_client.tx_done = gh_rm_msgq_tx_done; - return gh_msgq_init(&pdev->dev, &rm->msgq, &rm->msgq_client, &rm->tx_ghrsc, &rm->rx_ghrsc); + ret = gh_msgq_init(&pdev->dev, &rm->msgq, &rm->msgq_client, &rm->tx_ghrsc, &rm->rx_ghrsc); + if (ret) + goto err_cache; + + rm->miscdev.name = "gunyah"; + rm->miscdev.minor = MISC_DYNAMIC_MINOR; + rm->miscdev.fops = &gh_dev_fops; + + ret = misc_register(&rm->miscdev); + if (ret) + goto err_msgq; + + return 0; +err_msgq: + mbox_free_channel(gh_msgq_chan(&rm->msgq)); + gh_msgq_remove(&rm->msgq); err_cache: kmem_cache_destroy(rm->cache); return ret; @@ -661,6 +696,7 @@ static int gh_rm_drv_remove(struct platform_device *pdev) { struct gh_rm *rm = platform_get_drvdata(pdev); + misc_deregister(&rm->miscdev); mbox_free_channel(gh_msgq_chan(&rm->msgq)); gh_msgq_remove(&rm->msgq); kmem_cache_destroy(rm->cache); diff --git a/drivers/virt/gunyah/vm_mgr.c b/drivers/virt/gunyah/vm_mgr.c new file mode 100644 index 000000000000..dbacf36af72d --- /dev/null +++ b/drivers/virt/gunyah/vm_mgr.c @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#define pr_fmt(fmt) "gh_vm_mgr: " fmt + +#include <linux/anon_inodes.h> +#include <linux/file.h> +#include <linux/gunyah_rsc_mgr.h> +#include <linux/miscdevice.h> +#include <linux/module.h> + +#include <uapi/linux/gunyah.h> + +#include "vm_mgr.h" + +static void gh_vm_free(struct work_struct *work) +{ + struct gh_vm *ghvm = container_of(work, struct gh_vm, free_work); + int ret; + + ret = gh_rm_dealloc_vmid(ghvm->rm, ghvm->vmid); + if (ret) + pr_warn("Failed to deallocate vmid: %d\n", ret); + + put_gh_rm(ghvm->rm); + kfree(ghvm); +} + +static __must_check struct gh_vm *gh_vm_alloc(struct gh_rm *rm) +{ + struct gh_vm *ghvm; + int vmid; + + vmid = gh_rm_alloc_vmid(rm, 0); + if (vmid < 0) + return ERR_PTR(vmid); + + ghvm = kzalloc(sizeof(*ghvm), GFP_KERNEL); + if (!ghvm) { + gh_rm_dealloc_vmid(rm, vmid); + return ERR_PTR(-ENOMEM); + } + + ghvm->parent = gh_rm_get(rm); + ghvm->vmid = vmid; + ghvm->rm = rm; + + INIT_WORK(&ghvm->free_work, gh_vm_free); + + return ghvm; +} + +static int gh_vm_release(struct inode *inode, struct file *filp) +{ + struct gh_vm *ghvm = filp->private_data; + + /* VM will be reset and make RM calls which can interruptible sleep. + * Defer to a work so this thread can receive signal. + */ + schedule_work(&ghvm->free_work); + return 0; +} + +static const struct file_operations gh_vm_fops = { + .release = gh_vm_release, + .llseek = noop_llseek, +}; + +static long gh_dev_ioctl_create_vm(struct gh_rm *rm, unsigned long arg) +{ + struct gh_vm *ghvm; + struct file *file; + int fd, err; + + /* arg reserved for future use. */ + if (arg) + return -EINVAL; + + ghvm = gh_vm_alloc(rm); + if (IS_ERR(ghvm)) + return PTR_ERR(ghvm); + + fd = get_unused_fd_flags(O_CLOEXEC); + if (fd < 0) { + err = fd; + goto err_destroy_vm; + } + + file = anon_inode_getfile("gunyah-vm", &gh_vm_fops, ghvm, O_RDWR); + if (IS_ERR(file)) { + err = PTR_ERR(file); + goto err_put_fd; + } + + fd_install(fd, file); + + return fd; + +err_put_fd: + put_unused_fd(fd); +err_destroy_vm: + gh_vm_free(&ghvm->free_work); + return err; +} + +long gh_dev_vm_mgr_ioctl(struct gh_rm *rm, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case GH_CREATE_VM: + return gh_dev_ioctl_create_vm(rm, arg); + default: + return -ENOIOCTLCMD; + } +} diff --git a/drivers/virt/gunyah/vm_mgr.h b/drivers/virt/gunyah/vm_mgr.h new file mode 100644 index 000000000000..4b22fbcac91c --- /dev/null +++ b/drivers/virt/gunyah/vm_mgr.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _GH_PRIV_VM_MGR_H +#define _GH_PRIV_VM_MGR_H + +#include <linux/gunyah_rsc_mgr.h> + +#include <uapi/linux/gunyah.h> + +long gh_dev_vm_mgr_ioctl(struct gh_rm *rm, unsigned int cmd, unsigned long arg); + +struct gh_vm { + u16 vmid; + struct gh_rm *rm; + struct device *parent; + + struct work_struct free_work; +}; + +#endif diff --git a/include/uapi/linux/gunyah.h b/include/uapi/linux/gunyah.h new file mode 100644 index 000000000000..10ba32d2b0a6 --- /dev/null +++ b/include/uapi/linux/gunyah.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ +/* + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _UAPI_LINUX_GUNYAH +#define _UAPI_LINUX_GUNYAH + +/* + * Userspace interface for /dev/gunyah - gunyah based virtual machine + */ + +#include <linux/types.h> +#include <linux/ioctl.h> + +#define GH_IOCTL_TYPE 'G' + +/* + * ioctls for /dev/gunyah fds: + */ +#define GH_CREATE_VM _IO(GH_IOCTL_TYPE, 0x0) /* Returns a Gunyah VM fd */ + +#endif -- 2.39.2
WARNING: multiple messages have this Message-ID (diff)
From: Elliot Berman <quic_eberman@quicinc.com> To: Alex Elder <elder@linaro.org>, Srinivas Kandagatla <srinivas.kandagatla@linaro.org>, Jonathan Corbet <corbet@lwn.net>, "Elliot Berman" <quic_eberman@quicinc.com>, Prakruthi Deepak Heragu <quic_pheragu@quicinc.com> Cc: Murali Nalajala <quic_mnalajal@quicinc.com>, Trilok Soni <quic_tsoni@quicinc.com>, Srivatsa Vaddagiri <quic_svaddagi@quicinc.com>, Carl van Schaik <quic_cvanscha@quicinc.com>, Dmitry Baryshkov <dmitry.baryshkov@linaro.org>, Bjorn Andersson <andersson@kernel.org>, "Konrad Dybcio" <konrad.dybcio@linaro.org>, Arnd Bergmann <arnd@arndb.de>, "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>, Rob Herring <robh+dt@kernel.org>, Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>, Bagas Sanjaya <bagasdotme@gmail.com>, Will Deacon <will@kernel.org>, Andy Gross <agross@kernel.org>, Catalin Marinas <catalin.marinas@arm.com>, Jassi Brar <jassisinghbrar@gmail.com>, <linux-arm-msm@vger.kernel.org>, <devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>, <linux-doc@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org> Subject: [PATCH v11 10/26] gunyah: vm_mgr: Introduce basic VM Manager Date: Fri, 3 Mar 2023 17:06:16 -0800 [thread overview] Message-ID: <20230304010632.2127470-11-quic_eberman@quicinc.com> (raw) In-Reply-To: <20230304010632.2127470-1-quic_eberman@quicinc.com> Gunyah VM manager is a kernel moduel which exposes an interface to Gunyah userspace to load, run, and interact with other Gunyah virtual machines. The interface is a character device at /dev/gunyah. Add a basic VM manager driver. Upcoming patches will add more ioctls into this driver. Co-developed-by: Prakruthi Deepak Heragu <quic_pheragu@quicinc.com> Signed-off-by: Prakruthi Deepak Heragu <quic_pheragu@quicinc.com> Signed-off-by: Elliot Berman <quic_eberman@quicinc.com> --- .../userspace-api/ioctl/ioctl-number.rst | 1 + drivers/virt/gunyah/Makefile | 2 +- drivers/virt/gunyah/rsc_mgr.c | 38 +++++- drivers/virt/gunyah/vm_mgr.c | 116 ++++++++++++++++++ drivers/virt/gunyah/vm_mgr.h | 23 ++++ include/uapi/linux/gunyah.h | 23 ++++ 6 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 drivers/virt/gunyah/vm_mgr.c create mode 100644 drivers/virt/gunyah/vm_mgr.h create mode 100644 include/uapi/linux/gunyah.h diff --git a/Documentation/userspace-api/ioctl/ioctl-number.rst b/Documentation/userspace-api/ioctl/ioctl-number.rst index 0a1882e296ae..2513324ae7be 100644 --- a/Documentation/userspace-api/ioctl/ioctl-number.rst +++ b/Documentation/userspace-api/ioctl/ioctl-number.rst @@ -137,6 +137,7 @@ Code Seq# Include File Comments 'F' DD video/sstfb.h conflict! 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict! 'G' 00-0F xen/gntalloc.h, xen/gntdev.h conflict! +'G' 00-0f linux/gunyah.h conflict! 'H' 00-7F linux/hiddev.h conflict! 'H' 00-0F linux/hidraw.h conflict! 'H' 01 linux/mei.h conflict! diff --git a/drivers/virt/gunyah/Makefile b/drivers/virt/gunyah/Makefile index de29769f2f3f..03951cf82023 100644 --- a/drivers/virt/gunyah/Makefile +++ b/drivers/virt/gunyah/Makefile @@ -2,5 +2,5 @@ obj-$(CONFIG_GUNYAH) += gunyah.o -gunyah_rsc_mgr-y += rsc_mgr.o rsc_mgr_rpc.o +gunyah_rsc_mgr-y += rsc_mgr.o rsc_mgr_rpc.o vm_mgr.o obj-$(CONFIG_GUNYAH) += gunyah_rsc_mgr.o diff --git a/drivers/virt/gunyah/rsc_mgr.c b/drivers/virt/gunyah/rsc_mgr.c index 67813c9a52db..d7ce692d0067 100644 --- a/drivers/virt/gunyah/rsc_mgr.c +++ b/drivers/virt/gunyah/rsc_mgr.c @@ -15,8 +15,10 @@ #include <linux/completion.h> #include <linux/gunyah_rsc_mgr.h> #include <linux/platform_device.h> +#include <linux/miscdevice.h> #include "rsc_mgr.h" +#include "vm_mgr.h" #define RM_RPC_API_VERSION_MASK GENMASK(3, 0) #define RM_RPC_HEADER_WORDS_MASK GENMASK(7, 4) @@ -129,6 +131,7 @@ struct gh_rm_connection { * @cache: cache for allocating Tx messages * @send_lock: synchronization to allow only one request to be sent at a time * @nh: notifier chain for clients interested in RM notification messages + * @miscdev: /dev/gunyah */ struct gh_rm { struct device *dev; @@ -145,6 +148,8 @@ struct gh_rm { struct kmem_cache *cache; struct mutex send_lock; struct blocking_notifier_head nh; + + struct miscdevice miscdev; }; /** @@ -593,6 +598,21 @@ void gh_rm_put(struct gh_rm *rm) } EXPORT_SYMBOL_GPL(gh_rm_put); +static long gh_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + struct miscdevice *miscdev = filp->private_data; + struct gh_rm *rm = container_of(miscdev, struct gh_rm, miscdev); + + return gh_dev_vm_mgr_ioctl(rm, cmd, arg); +} + +static const struct file_operations gh_dev_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = gh_dev_ioctl, + .compat_ioctl = compat_ptr_ioctl, + .llseek = noop_llseek, +}; + static int gh_msgq_platform_probe_direction(struct platform_device *pdev, bool tx, struct gh_resource *ghrsc) { @@ -651,7 +671,22 @@ static int gh_rm_drv_probe(struct platform_device *pdev) rm->msgq_client.rx_callback = gh_rm_msgq_rx_data; rm->msgq_client.tx_done = gh_rm_msgq_tx_done; - return gh_msgq_init(&pdev->dev, &rm->msgq, &rm->msgq_client, &rm->tx_ghrsc, &rm->rx_ghrsc); + ret = gh_msgq_init(&pdev->dev, &rm->msgq, &rm->msgq_client, &rm->tx_ghrsc, &rm->rx_ghrsc); + if (ret) + goto err_cache; + + rm->miscdev.name = "gunyah"; + rm->miscdev.minor = MISC_DYNAMIC_MINOR; + rm->miscdev.fops = &gh_dev_fops; + + ret = misc_register(&rm->miscdev); + if (ret) + goto err_msgq; + + return 0; +err_msgq: + mbox_free_channel(gh_msgq_chan(&rm->msgq)); + gh_msgq_remove(&rm->msgq); err_cache: kmem_cache_destroy(rm->cache); return ret; @@ -661,6 +696,7 @@ static int gh_rm_drv_remove(struct platform_device *pdev) { struct gh_rm *rm = platform_get_drvdata(pdev); + misc_deregister(&rm->miscdev); mbox_free_channel(gh_msgq_chan(&rm->msgq)); gh_msgq_remove(&rm->msgq); kmem_cache_destroy(rm->cache); diff --git a/drivers/virt/gunyah/vm_mgr.c b/drivers/virt/gunyah/vm_mgr.c new file mode 100644 index 000000000000..dbacf36af72d --- /dev/null +++ b/drivers/virt/gunyah/vm_mgr.c @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#define pr_fmt(fmt) "gh_vm_mgr: " fmt + +#include <linux/anon_inodes.h> +#include <linux/file.h> +#include <linux/gunyah_rsc_mgr.h> +#include <linux/miscdevice.h> +#include <linux/module.h> + +#include <uapi/linux/gunyah.h> + +#include "vm_mgr.h" + +static void gh_vm_free(struct work_struct *work) +{ + struct gh_vm *ghvm = container_of(work, struct gh_vm, free_work); + int ret; + + ret = gh_rm_dealloc_vmid(ghvm->rm, ghvm->vmid); + if (ret) + pr_warn("Failed to deallocate vmid: %d\n", ret); + + put_gh_rm(ghvm->rm); + kfree(ghvm); +} + +static __must_check struct gh_vm *gh_vm_alloc(struct gh_rm *rm) +{ + struct gh_vm *ghvm; + int vmid; + + vmid = gh_rm_alloc_vmid(rm, 0); + if (vmid < 0) + return ERR_PTR(vmid); + + ghvm = kzalloc(sizeof(*ghvm), GFP_KERNEL); + if (!ghvm) { + gh_rm_dealloc_vmid(rm, vmid); + return ERR_PTR(-ENOMEM); + } + + ghvm->parent = gh_rm_get(rm); + ghvm->vmid = vmid; + ghvm->rm = rm; + + INIT_WORK(&ghvm->free_work, gh_vm_free); + + return ghvm; +} + +static int gh_vm_release(struct inode *inode, struct file *filp) +{ + struct gh_vm *ghvm = filp->private_data; + + /* VM will be reset and make RM calls which can interruptible sleep. + * Defer to a work so this thread can receive signal. + */ + schedule_work(&ghvm->free_work); + return 0; +} + +static const struct file_operations gh_vm_fops = { + .release = gh_vm_release, + .llseek = noop_llseek, +}; + +static long gh_dev_ioctl_create_vm(struct gh_rm *rm, unsigned long arg) +{ + struct gh_vm *ghvm; + struct file *file; + int fd, err; + + /* arg reserved for future use. */ + if (arg) + return -EINVAL; + + ghvm = gh_vm_alloc(rm); + if (IS_ERR(ghvm)) + return PTR_ERR(ghvm); + + fd = get_unused_fd_flags(O_CLOEXEC); + if (fd < 0) { + err = fd; + goto err_destroy_vm; + } + + file = anon_inode_getfile("gunyah-vm", &gh_vm_fops, ghvm, O_RDWR); + if (IS_ERR(file)) { + err = PTR_ERR(file); + goto err_put_fd; + } + + fd_install(fd, file); + + return fd; + +err_put_fd: + put_unused_fd(fd); +err_destroy_vm: + gh_vm_free(&ghvm->free_work); + return err; +} + +long gh_dev_vm_mgr_ioctl(struct gh_rm *rm, unsigned int cmd, unsigned long arg) +{ + switch (cmd) { + case GH_CREATE_VM: + return gh_dev_ioctl_create_vm(rm, arg); + default: + return -ENOIOCTLCMD; + } +} diff --git a/drivers/virt/gunyah/vm_mgr.h b/drivers/virt/gunyah/vm_mgr.h new file mode 100644 index 000000000000..4b22fbcac91c --- /dev/null +++ b/drivers/virt/gunyah/vm_mgr.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _GH_PRIV_VM_MGR_H +#define _GH_PRIV_VM_MGR_H + +#include <linux/gunyah_rsc_mgr.h> + +#include <uapi/linux/gunyah.h> + +long gh_dev_vm_mgr_ioctl(struct gh_rm *rm, unsigned int cmd, unsigned long arg); + +struct gh_vm { + u16 vmid; + struct gh_rm *rm; + struct device *parent; + + struct work_struct free_work; +}; + +#endif diff --git a/include/uapi/linux/gunyah.h b/include/uapi/linux/gunyah.h new file mode 100644 index 000000000000..10ba32d2b0a6 --- /dev/null +++ b/include/uapi/linux/gunyah.h @@ -0,0 +1,23 @@ +/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ +/* + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef _UAPI_LINUX_GUNYAH +#define _UAPI_LINUX_GUNYAH + +/* + * Userspace interface for /dev/gunyah - gunyah based virtual machine + */ + +#include <linux/types.h> +#include <linux/ioctl.h> + +#define GH_IOCTL_TYPE 'G' + +/* + * ioctls for /dev/gunyah fds: + */ +#define GH_CREATE_VM _IO(GH_IOCTL_TYPE, 0x0) /* Returns a Gunyah VM fd */ + +#endif -- 2.39.2 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-03-04 1:08 UTC|newest] Thread overview: 168+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-03-04 1:06 [PATCH v11 00/26] Drivers for gunyah hypervisor Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 01/26] docs: gunyah: Introduce Gunyah Hypervisor Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 02/26] dt-bindings: Add binding for gunyah hypervisor Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 03/26] gunyah: Common types and error codes for Gunyah hypercalls Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 14:23 ` Srinivas Kandagatla 2023-03-21 14:23 ` Srinivas Kandagatla 2023-03-31 14:24 ` Alex Elder 2023-03-31 14:24 ` Alex Elder 2023-04-03 19:44 ` Elliot Berman 2023-04-03 19:44 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 04/26] virt: gunyah: Add hypercalls to identify Gunyah Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 14:22 ` Srinivas Kandagatla 2023-03-21 14:22 ` Srinivas Kandagatla 2023-03-31 14:24 ` Alex Elder 2023-03-31 14:24 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 05/26] virt: gunyah: Identify hypervisor version Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 15:48 ` Srinivas Kandagatla 2023-03-21 15:48 ` Srinivas Kandagatla 2023-03-31 14:24 ` Alex Elder 2023-03-31 14:24 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 06/26] virt: gunyah: msgq: Add hypercalls to send and receive messages Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 15:49 ` Srinivas Kandagatla 2023-03-21 15:49 ` Srinivas Kandagatla 2023-03-31 14:25 ` Alex Elder 2023-03-31 14:25 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 07/26] mailbox: Add Gunyah message queue mailbox Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 14:22 ` Srinivas Kandagatla 2023-03-21 14:22 ` Srinivas Kandagatla 2023-03-31 14:25 ` Alex Elder 2023-03-31 14:25 ` Alex Elder 2023-04-03 20:15 ` Elliot Berman 2023-04-03 20:15 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 08/26] gunyah: rsc_mgr: Add resource manager RPC core Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:25 ` Alex Elder 2023-03-31 14:25 ` Alex Elder 2023-04-03 20:34 ` Elliot Berman 2023-04-03 20:34 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 09/26] gunyah: rsc_mgr: Add VM lifecycle RPC Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:25 ` Alex Elder 2023-03-31 14:25 ` Alex Elder 2023-04-03 21:09 ` Elliot Berman 2023-04-03 21:09 ` Elliot Berman 2023-03-04 1:06 ` Elliot Berman [this message] 2023-03-04 1:06 ` [PATCH v11 10/26] gunyah: vm_mgr: Introduce basic VM Manager Elliot Berman 2023-03-21 14:23 ` Srinivas Kandagatla 2023-03-21 14:23 ` Srinivas Kandagatla 2023-03-31 14:25 ` Alex Elder 2023-03-31 14:25 ` Alex Elder 2023-04-11 20:48 ` Elliot Berman 2023-04-11 20:48 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 11/26] gunyah: rsc_mgr: Add RPC for sharing memory Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 12/26] gunyah: vm_mgr: Add/remove user memory regions Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-24 18:37 ` Will Deacon 2023-03-24 18:37 ` Will Deacon 2023-04-11 20:34 ` Elliot Berman 2023-04-11 20:34 ` Elliot Berman 2023-04-11 21:19 ` Will Deacon 2023-04-11 21:19 ` Will Deacon 2023-04-12 20:48 ` Elliot Berman 2023-04-12 20:48 ` Elliot Berman 2023-04-13 9:54 ` Will Deacon 2023-04-13 9:54 ` Will Deacon 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-04-11 21:04 ` Elliot Berman 2023-04-11 21:04 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 13/26] gunyah: vm_mgr: Add ioctls to support basic non-proxy VM boot Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 14:24 ` Srinivas Kandagatla 2023-03-21 14:24 ` Srinivas Kandagatla 2023-04-11 21:07 ` Elliot Berman 2023-04-11 21:07 ` Elliot Berman 2023-04-11 21:09 ` Alex Elder 2023-04-11 21:09 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-04-11 21:16 ` Elliot Berman 2023-04-11 21:16 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 14/26] samples: Add sample userspace Gunyah VM Manager Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 15/26] gunyah: rsc_mgr: Add platform ops on mem_lend/mem_reclaim Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 14:23 ` Srinivas Kandagatla 2023-03-21 14:23 ` Srinivas Kandagatla 2023-03-22 19:17 ` Elliot Berman 2023-03-22 19:17 ` Elliot Berman 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 16/26] firmware: qcom_scm: Register Gunyah platform ops Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-21 14:24 ` Srinivas Kandagatla 2023-03-21 14:24 ` Srinivas Kandagatla 2023-03-21 18:40 ` Elliot Berman 2023-03-21 18:40 ` Elliot Berman 2023-03-21 20:19 ` Srinivas Kandagatla 2023-03-21 20:19 ` Srinivas Kandagatla 2023-03-04 1:06 ` [PATCH v11 17/26] docs: gunyah: Document Gunyah VM Manager Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 18/26] virt: gunyah: Translate gh_rm_hyp_resource into gunyah_resource Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-04-18 0:25 ` Elliot Berman 2023-04-18 0:25 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 19/26] gunyah: vm_mgr: Add framework to add VM Functions Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:26 ` Alex Elder 2023-03-31 14:26 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 20/26] virt: gunyah: Add resource tickets Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:27 ` Alex Elder 2023-03-31 14:27 ` Alex Elder 2023-04-17 22:57 ` Elliot Berman 2023-04-17 22:57 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 21/26] virt: gunyah: Add IO handlers Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:27 ` Alex Elder 2023-03-31 14:27 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 22/26] virt: gunyah: Add proxy-scheduled vCPUs Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:27 ` Alex Elder 2023-03-31 14:27 ` Alex Elder 2023-04-17 22:41 ` Elliot Berman 2023-04-17 22:41 ` Elliot Berman 2023-04-18 12:46 ` Alex Elder 2023-04-18 12:46 ` Alex Elder 2023-04-18 17:18 ` Elliot Berman 2023-04-18 17:18 ` Elliot Berman 2023-04-18 17:31 ` Alex Elder 2023-04-18 17:31 ` Alex Elder 2023-04-18 18:35 ` Elliot Berman 2023-04-18 18:35 ` Elliot Berman 2023-03-04 1:06 ` [PATCH v11 23/26] virt: gunyah: Add hypercalls for sending doorbell Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:27 ` Alex Elder 2023-03-31 14:27 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 24/26] virt: gunyah: Add irqfd interface Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:27 ` Alex Elder 2023-03-31 14:27 ` Alex Elder 2023-04-17 22:55 ` Elliot Berman 2023-04-17 22:55 ` Elliot Berman 2023-04-18 12:55 ` Alex Elder 2023-04-18 12:55 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 25/26] virt: gunyah: Add ioeventfd Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:27 ` Alex Elder 2023-03-31 14:27 ` Alex Elder 2023-03-04 1:06 ` [PATCH v11 26/26] MAINTAINERS: Add Gunyah hypervisor drivers section Elliot Berman 2023-03-04 1:06 ` Elliot Berman 2023-03-31 14:24 ` [PATCH v11 00/26] Drivers for gunyah hypervisor Alex Elder 2023-03-31 14:24 ` Alex Elder
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=20230304010632.2127470-11-quic_eberman@quicinc.com \ --to=quic_eberman@quicinc.com \ --cc=agross@kernel.org \ --cc=andersson@kernel.org \ --cc=arnd@arndb.de \ --cc=bagasdotme@gmail.com \ --cc=catalin.marinas@arm.com \ --cc=corbet@lwn.net \ --cc=devicetree@vger.kernel.org \ --cc=dmitry.baryshkov@linaro.org \ --cc=elder@linaro.org \ --cc=gregkh@linuxfoundation.org \ --cc=jassisinghbrar@gmail.com \ --cc=konrad.dybcio@linaro.org \ --cc=krzysztof.kozlowski+dt@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-doc@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=quic_cvanscha@quicinc.com \ --cc=quic_mnalajal@quicinc.com \ --cc=quic_pheragu@quicinc.com \ --cc=quic_svaddagi@quicinc.com \ --cc=quic_tsoni@quicinc.com \ --cc=robh+dt@kernel.org \ --cc=srinivas.kandagatla@linaro.org \ --cc=will@kernel.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: linkBe 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.