From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7AB55C636D7 for ; Wed, 22 Feb 2023 00:28:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229950AbjBVA2B (ORCPT ); Tue, 21 Feb 2023 19:28:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229688AbjBVA2A (ORCPT ); Tue, 21 Feb 2023 19:28:00 -0500 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E195A4; Tue, 21 Feb 2023 16:27:48 -0800 (PST) Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31M0RS5p002955; Wed, 22 Feb 2023 00:27:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=206/ENTYhpd8cRg/HRQOtIZa/mKOhxRJ+u795kVpeiQ=; b=Zr27zCvg8JKYoGzW/fp+UXjF1KxAcQFNI0YlIbtRm3v+ZPyHrYacO4JWRx/rrm1dJLnw DgKNByMMl7KpTZTe/w9nJuZB9EIiZ5ru61nn3KpMPH7WzUJMcSjTqmyqBPN5WrwtTJXX MjsOa3Bm6Jj3NNkqur1zeVqa123VbKZH1vpn3t8i/C5Vz0NNGGeKHoHJpbNJa1Fw69Nn m+PA2loU9kDGSS3/SX6BS+4MbLEc2+UEGGLrAgkPF4D0RVlMSQDDn5iS82bGZAbXJ/h/ VZLvo+x1KzHC3SUlHC89jwdGlEfaFNIVk6Yv2hkxOQKsY98hJuNqvj2buL2vQH4yyNjf AQ== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3nw8gnr02j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Feb 2023 00:27:28 +0000 Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 31M0RRoN025909 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Feb 2023 00:27:27 GMT Received: from [10.110.71.80] (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Tue, 21 Feb 2023 16:27:26 -0800 Message-ID: <05c4aab8-2d26-b944-adb6-624d67e4a11d@quicinc.com> Date: Tue, 21 Feb 2023 16:27:25 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v10 10/26] gunyah: vm_mgr: Introduce basic VM Manager Content-Language: en-US To: Srinivas Kandagatla , Alex Elder , Jonathan Corbet , Prakruthi Deepak Heragu CC: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , "Konrad Dybcio" , Arnd Bergmann , "Greg Kroah-Hartman" , Rob Herring , Krzysztof Kozlowski , Bagas Sanjaya , Catalin Marinas , Jassi Brar , , , , , References: <20230214211229.3239350-1-quic_eberman@quicinc.com> <20230214212356.3313181-1-quic_eberman@quicinc.com> From: Elliot Berman In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: HKKGuBqppjiiOzIkNHkllqlyyIafk3Jn X-Proofpoint-GUID: HKKGuBqppjiiOzIkNHkllqlyyIafk3Jn X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-21_13,2023-02-20_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 adultscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302220000 Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 2/21/2023 2:46 AM, Srinivas Kandagatla wrote: > > > On 14/02/2023 21:23, Elliot Berman wrote: >> >> 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 >> Signed-off-by: Prakruthi Deepak Heragu >> Signed-off-by: Elliot Berman >> --- >>   .../userspace-api/ioctl/ioctl-number.rst      |   1 + >>   drivers/virt/gunyah/Makefile                  |   2 +- >>   drivers/virt/gunyah/rsc_mgr.c                 |  37 +++++- >>   drivers/virt/gunyah/vm_mgr.c                  | 118 ++++++++++++++++++ >>   drivers/virt/gunyah/vm_mgr.h                  |  22 ++++ >>   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 2a47139873a8..73c5a6b7cbbc 100644 >> --- a/drivers/virt/gunyah/rsc_mgr.c >> +++ b/drivers/virt/gunyah/rsc_mgr.c >> @@ -16,8 +16,10 @@ >>   #include >>   #include >>   #include >> +#include >>   #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) >> @@ -103,6 +105,8 @@ struct gh_rm { >>       struct kmem_cache *cache; >>       struct mutex send_lock; >>       struct blocking_notifier_head nh; >> + >> +    struct miscdevice miscdev; >>   }; >>   static struct gh_rm_connection *gh_rm_alloc_connection(__le32 >> msg_id, u8 type) >> @@ -509,6 +513,21 @@ void put_gh_rm(struct gh_rm *rm) >>   } >>   EXPORT_SYMBOL_GPL(put_gh_rm); >> +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, int idx, struct gunyah_resource *ghrsc) >>   { >> @@ -567,7 +586,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; >> @@ -577,6 +611,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..fd890a57172e >> --- /dev/null >> +++ b/drivers/virt/gunyah/vm_mgr.c >> @@ -0,0 +1,118 @@ >> +// 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 >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> + >> +#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); >> +    } >> + >> +    get_gh_rm(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, > >> +    .compat_ioctl    = compat_ptr_ioctl, > > This line should go with the patch that adds real ioctl > Done. >> +    .llseek = noop_llseek, >> +}; >> + >> +static long gh_dev_ioctl_create_vm(struct gh_rm *rm, unsigned long arg) > Not sure what is the gain of this multiple levels of redirection. > > How about > > long gh_dev_create_vm(struct gh_rm *rm, unsigned long arg) > { > ... > } > > and rsc_mgr just call it as part of its ioctl call > > 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); > >     switch (cmd) { >     case GH_CREATE_VM: >         return gh_dev_create_vm(rm, arg); >     default: >         return -ENOIOCTLCMD; >     } > } > I'm anticipating we will add further /dev/gunyah ioctls and I thought it would be cleaner to have all that in vm_mgr.c itself. > >> +{ >> +    struct gh_vm *ghvm; >> +    struct file *file; >> +    int fd, err; >> + >> +    /* arg reserved for future use. */ >> +    if (arg) >> +        return -EINVAL; > > The only code path I see here is via GH_CREATE_VM ioctl which obviously > does not take any arguments, so if you are thinking of using the > argument for architecture-specific VM flags.  Then this needs to be > properly done by making the ABI aware of this. It is documented in Patch 17 (Document Gunyah VM Manager) +GH_CREATE_VM +~~~~~~~~~~~~ + +Creates a Gunyah VM. The argument is reserved for future use and must be 0. > > As you mentioned zero value arg imply an "unauthenticated VM" type, but > this was not properly encoded in the userspace ABI. Why not make it > future compatible. How about adding arguments to GH_CREATE_VM and pass > the required information correctly. > Note that once the ABI is accepted then you will not be able to change > it, other than adding a new one. > Does this means adding #define GH_VM_DEFAULT_ARG 0 ? I am not sure yet what arguments to add here. The ABI can add new "long" values to GH_CREATE_VM and that wouldn't break compatibility with old kernels; old kernels reject it as -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: >> +    kfree(ghvm); >> +    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..76954da706e9 >> --- /dev/null >> +++ b/drivers/virt/gunyah/vm_mgr.h >> @@ -0,0 +1,22 @@ >> +/* 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 >> + >> +#include >> + >> +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 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 >> +#include >> + >> +#define GH_IOCTL_TYPE            'G' >> + >> +/* >> + * ioctls for /dev/gunyah fds: >> + */ >> +#define GH_CREATE_VM            _IO(GH_IOCTL_TYPE, 0x0) /* Returns a >> Gunyah VM fd */ > > Can HLOS forcefully destroy a VM? > If so should we have a corresponding DESTROY IOCTL? It can forcefully destroy unauthenticated and protected virtual machines. I don't have a userspace usecase for a DESTROY ioctl yet, maybe this can be added later? By the way, the VM is forcefully destroyed when VM refcount is dropped to 0 (close(vm_fd) and any other relevant file descriptors). - Elliot From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B0389C636D7 for ; Wed, 22 Feb 2023 00:29:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=3M+IBBJFrdkg6OBuBsOXg5eTHBeMdqV21SxbiIzRe14=; b=FulciIklFghj8X jvOyeH9ouygkLkHwsxz9rUKaVWfpOAUf8FEJhT/8LDgvI3MDNwqCbYEm59+sdDrXY5+VRpQJtL9rs Rq7Z35zjTYdQLHPOVt5LqeG9laScHE8Wxs0zQCS9ZSiNNclVUVTDATFkjdePFLbhFT/mo7urCmHmu JbJW+6T/e1qJ8YaWGVUCd1B2vu2VmJdL2gDWujyEthKMuI0STS2zuHpQaIz07XAouxvNPzU5xc92F 3/QTmaNype0Ab0h7ML7uX/ju+DUfZtv9tonzzHeYb62oAfrb35CGpXr7LyY0irDuoCpIq2VZcE++y aoEiWTSvGUDFeW8Wcq6Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pUcz7-00AEJX-Mh; Wed, 22 Feb 2023 00:27:49 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pUcz3-00AEIV-Bn for linux-arm-kernel@lists.infradead.org; Wed, 22 Feb 2023 00:27:47 +0000 Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31M0RS5p002955; Wed, 22 Feb 2023 00:27:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=206/ENTYhpd8cRg/HRQOtIZa/mKOhxRJ+u795kVpeiQ=; b=Zr27zCvg8JKYoGzW/fp+UXjF1KxAcQFNI0YlIbtRm3v+ZPyHrYacO4JWRx/rrm1dJLnw DgKNByMMl7KpTZTe/w9nJuZB9EIiZ5ru61nn3KpMPH7WzUJMcSjTqmyqBPN5WrwtTJXX MjsOa3Bm6Jj3NNkqur1zeVqa123VbKZH1vpn3t8i/C5Vz0NNGGeKHoHJpbNJa1Fw69Nn m+PA2loU9kDGSS3/SX6BS+4MbLEc2+UEGGLrAgkPF4D0RVlMSQDDn5iS82bGZAbXJ/h/ VZLvo+x1KzHC3SUlHC89jwdGlEfaFNIVk6Yv2hkxOQKsY98hJuNqvj2buL2vQH4yyNjf AQ== Received: from nasanppmta01.qualcomm.com (i-global254.qualcomm.com [199.106.103.254]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3nw8gnr02j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Feb 2023 00:27:28 +0000 Received: from nasanex01b.na.qualcomm.com (nasanex01b.na.qualcomm.com [10.46.141.250]) by NASANPPMTA01.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 31M0RRoN025909 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 22 Feb 2023 00:27:27 GMT Received: from [10.110.71.80] (10.80.80.8) by nasanex01b.na.qualcomm.com (10.46.141.250) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Tue, 21 Feb 2023 16:27:26 -0800 Message-ID: <05c4aab8-2d26-b944-adb6-624d67e4a11d@quicinc.com> Date: Tue, 21 Feb 2023 16:27:25 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v10 10/26] gunyah: vm_mgr: Introduce basic VM Manager Content-Language: en-US To: Srinivas Kandagatla , Alex Elder , Jonathan Corbet , Prakruthi Deepak Heragu CC: Murali Nalajala , Trilok Soni , Srivatsa Vaddagiri , Carl van Schaik , Dmitry Baryshkov , Bjorn Andersson , "Konrad Dybcio" , Arnd Bergmann , "Greg Kroah-Hartman" , Rob Herring , Krzysztof Kozlowski , Bagas Sanjaya , Catalin Marinas , Jassi Brar , , , , , References: <20230214211229.3239350-1-quic_eberman@quicinc.com> <20230214212356.3313181-1-quic_eberman@quicinc.com> From: Elliot Berman In-Reply-To: X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nasanex01b.na.qualcomm.com (10.46.141.250) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: HKKGuBqppjiiOzIkNHkllqlyyIafk3Jn X-Proofpoint-GUID: HKKGuBqppjiiOzIkNHkllqlyyIafk3Jn X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-21_13,2023-02-20_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 adultscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 phishscore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2302220000 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230221_162745_460501_03B9D17F X-CRM114-Status: GOOD ( 42.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAyLzIxLzIwMjMgMjo0NiBBTSwgU3Jpbml2YXMgS2FuZGFnYXRsYSB3cm90ZToKPiAKPiAK PiBPbiAxNC8wMi8yMDIzIDIxOjIzLCBFbGxpb3QgQmVybWFuIHdyb3RlOgo+Pgo+PiBHdW55YWgg Vk0gbWFuYWdlciBpcyBhIGtlcm5lbCBtb2R1ZWwgd2hpY2ggZXhwb3NlcyBhbiBpbnRlcmZhY2Ug dG8KPj4gR3VueWFoIHVzZXJzcGFjZSB0byBsb2FkLCBydW4sIGFuZCBpbnRlcmFjdCB3aXRoIG90 aGVyIEd1bnlhaCB2aXJ0dWFsCj4+IG1hY2hpbmVzLiBUaGUgaW50ZXJmYWNlIGlzIGEgY2hhcmFj dGVyIGRldmljZSBhdCAvZGV2L2d1bnlhaC4KPj4KPj4gQWRkIGEgYmFzaWMgVk0gbWFuYWdlciBk cml2ZXIuIFVwY29taW5nIHBhdGNoZXMgd2lsbCBhZGQgbW9yZSBpb2N0bHMKPj4gaW50byB0aGlz IGRyaXZlci4KPj4KPj4gQ28tZGV2ZWxvcGVkLWJ5OiBQcmFrcnV0aGkgRGVlcGFrIEhlcmFndSA8 cXVpY19waGVyYWd1QHF1aWNpbmMuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBQcmFrcnV0aGkgRGVl cGFrIEhlcmFndSA8cXVpY19waGVyYWd1QHF1aWNpbmMuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBF bGxpb3QgQmVybWFuIDxxdWljX2ViZXJtYW5AcXVpY2luYy5jb20+Cj4+IC0tLQo+PiDCoCAuLi4v dXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1udW1iZXIucnN0wqDCoMKgwqDCoCB8wqDCoCAxICsK Pj4gwqAgZHJpdmVycy92aXJ0L2d1bnlhaC9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfMKgwqAgMiArLQo+PiDCoCBkcml2ZXJzL3ZpcnQvZ3VueWFoL3JzY19tZ3Iu Y8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzNyArKysrKy0KPj4gwqAgZHJp dmVycy92aXJ0L2d1bnlhaC92bV9tZ3IuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfCAxMTggKysrKysrKysrKysrKysrKysrCj4+IMKgIGRyaXZlcnMvdmlydC9ndW55YWgvdm1f bWdyLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyMiArKysrCj4+IMKg IGluY2x1ZGUvdWFwaS9saW51eC9ndW55YWguaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqAgMjMgKysrKwo+PiDCoCA2IGZpbGVzIGNoYW5nZWQsIDIwMSBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0 L2d1bnlhaC92bV9tZ3IuYwo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0L2d1 bnlhaC92bV9tZ3IuaAo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xpbnV4 L2d1bnlhaC5oCj4+Cj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkv aW9jdGwvaW9jdGwtbnVtYmVyLnJzdCAKPj4gYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkv aW9jdGwvaW9jdGwtbnVtYmVyLnJzdAo+PiBpbmRleCAwYTE4ODJlMjk2YWUuLjI1MTMzMjRhZTdi ZSAxMDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3Rs LW51bWJlci5yc3QKPj4gKysrIGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lv Y3RsLW51bWJlci5yc3QKPj4gQEAgLTEzNyw2ICsxMzcsNyBAQCBDb2RlwqAgU2VxI8KgwqDCoCBJ bmNsdWRlIAo+PiBGaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENvbW1lbnRzCj4+IMKg ICdGJ8KgwqAgRETCoMKgwqDCoCB2aWRlby9zc3RmYi5oICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAo+PiBjb25mbGljdCEKPj4gwqAgJ0cnwqDCoCAwMC0zRsKgIGRy aXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWxpYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+ IGNvbmZsaWN0IQo+PiDCoCAnRyfCoMKgIDAwLTBGwqAgeGVuL2dudGFsbG9jLmgsIHhlbi9nbnRk ZXYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPj4gY29uZmxpY3QhCj4+ICsnRyfCoMKg IDAwLTBmwqAgbGludXgvZ3VueWFoLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKPj4gY29uZmxpY3QhCj4+IMKgICdIJ8KgwqAgMDAtN0bCoCBsaW51eC9oaWRkZXYu aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo+PiBjb25mbGljdCEK Pj4gwqAgJ0gnwqDCoCAwMC0wRsKgIGxpbnV4L2hpZHJhdy5oICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCj4+IGNvbmZsaWN0IQo+PiDCoCAnSCfCoMKgIDAxwqDCoMKg wqAgbGludXgvbWVpLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKPj4gY29uZmxpY3QhCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvZ3VueWFoL01ha2Vm aWxlIGIvZHJpdmVycy92aXJ0L2d1bnlhaC9NYWtlZmlsZQo+PiBpbmRleCBkZTI5NzY5ZjJmM2Yu LjAzOTUxY2Y4MjAyMyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aXJ0L2d1bnlhaC9NYWtlZmls ZQo+PiArKysgYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL01ha2VmaWxlCj4+IEBAIC0yLDUgKzIsNSBA QAo+PiDCoCBvYmotJChDT05GSUdfR1VOWUFIKSArPSBndW55YWgubwo+PiAtZ3VueWFoX3JzY19t Z3IteSArPSByc2NfbWdyLm8gcnNjX21ncl9ycGMubwo+PiArZ3VueWFoX3JzY19tZ3IteSArPSBy c2NfbWdyLm8gcnNjX21ncl9ycGMubyB2bV9tZ3Iubwo+PiDCoCBvYmotJChDT05GSUdfR1VOWUFI KSArPSBndW55YWhfcnNjX21nci5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnQvZ3VueWFo L3JzY19tZ3IuYyAKPj4gYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL3JzY19tZ3IuYwo+PiBpbmRleCAy YTQ3MTM5ODczYTguLjczYzVhNmI3Y2JiYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy92aXJ0L2d1 bnlhaC9yc2NfbWdyLmMKPj4gKysrIGIvZHJpdmVycy92aXJ0L2d1bnlhaC9yc2NfbWdyLmMKPj4g QEAgLTE2LDggKzE2LDEwIEBACj4+IMKgICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Cj4+ IMKgICNpbmNsdWRlIDxsaW51eC9ndW55YWhfcnNjX21nci5oPgo+PiDCoCAjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgo+ PiDCoCAjaW5jbHVkZSAicnNjX21nci5oIgo+PiArI2luY2x1ZGUgInZtX21nci5oIgo+PiDCoCAj ZGVmaW5lIFJNX1JQQ19BUElfVkVSU0lPTl9NQVNLwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygzLCAw KQo+PiDCoCAjZGVmaW5lIFJNX1JQQ19IRUFERVJfV09SRFNfTUFTS8KgwqDCoCBHRU5NQVNLKDcs IDQpCj4+IEBAIC0xMDMsNiArMTA1LDggQEAgc3RydWN0IGdoX3JtIHsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGU7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IG11dGV4IHNlbmRf bG9jazsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBuaDsKPj4g Kwo+PiArwqDCoMKgIHN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXY7Cj4+IMKgIH07Cj4+IMKgIHN0 YXRpYyBzdHJ1Y3QgZ2hfcm1fY29ubmVjdGlvbiAqZ2hfcm1fYWxsb2NfY29ubmVjdGlvbihfX2xl MzIgCj4+IG1zZ19pZCwgdTggdHlwZSkKPj4gQEAgLTUwOSw2ICs1MTMsMjEgQEAgdm9pZCBwdXRf Z2hfcm0oc3RydWN0IGdoX3JtICpybSkKPj4gwqAgfQo+PiDCoCBFWFBPUlRfU1lNQk9MX0dQTChw dXRfZ2hfcm0pOwo+PiArc3RhdGljIGxvbmcgZ2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxw LCB1bnNpZ25lZCBpbnQgY21kLCAKPj4gdW5zaWduZWQgbG9uZyBhcmcpCj4+ICt7Cj4+ICvCoMKg wqAgc3RydWN0IG1pc2NkZXZpY2UgKm1pc2NkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Cj4+ICvC oMKgwqAgc3RydWN0IGdoX3JtICpybSA9IGNvbnRhaW5lcl9vZihtaXNjZGV2LCBzdHJ1Y3QgZ2hf cm0sIG1pc2NkZXYpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGdoX2Rldl92bV9tZ3JfaW9jdGwo cm0sIGNtZCwgYXJnKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgZ2hfZGV2X2ZvcHMgPSB7Cj4+ICvCoMKgwqAgLm93bmVywqDCoMKgwqDCoMKgwqAg PSBUSElTX01PRFVMRSwKPj4gK8KgwqDCoCAudW5sb2NrZWRfaW9jdGzCoMKgwqAgPSBnaF9kZXZf aW9jdGwsCj4+ICvCoMKgwqAgLmNvbXBhdF9pb2N0bMKgwqDCoCA9IGNvbXBhdF9wdHJfaW9jdGws Cj4+ICvCoMKgwqAgLmxsc2Vla8KgwqDCoMKgwqDCoMKgID0gbm9vcF9sbHNlZWssCj4+ICt9Owo+ PiArCj4+IMKgIHN0YXRpYyBpbnQgZ2hfbXNncV9wbGF0Zm9ybV9wcm9iZV9kaXJlY3Rpb24oc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAKPj4gKnBkZXYsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBib29sIHR4LCBpbnQgaWR4LCBzdHJ1Y3QgZ3VueWFoX3Jlc291 cmNlICpnaHJzYykKPj4gwqAgewo+PiBAQCAtNTY3LDcgKzU4NiwyMiBAQCBzdGF0aWMgaW50IGdo X3JtX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIAo+PiAqcGRldikKPj4gwqDCoMKg wqDCoCBybS0+bXNncV9jbGllbnQucnhfY2FsbGJhY2sgPSBnaF9ybV9tc2dxX3J4X2RhdGE7Cj4+ IMKgwqDCoMKgwqAgcm0tPm1zZ3FfY2xpZW50LnR4X2RvbmUgPSBnaF9ybV9tc2dxX3R4X2RvbmU7 Cj4+IC3CoMKgwqAgcmV0dXJuIGdoX21zZ3FfaW5pdCgmcGRldi0+ZGV2LCAmcm0tPm1zZ3EsICZy bS0+bXNncV9jbGllbnQsIAo+PiAmcm0tPnR4X2docnNjLCAmcm0tPnJ4X2docnNjKTsKPj4gK8Kg wqDCoCByZXQgPSBnaF9tc2dxX2luaXQoJnBkZXYtPmRldiwgJnJtLT5tc2dxLCAmcm0tPm1zZ3Ff Y2xpZW50LCAKPj4gJnJtLT50eF9naHJzYywgJnJtLT5yeF9naHJzYyk7Cj4+ICvCoMKgwqAgaWYg KHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2NhY2hlOwo+PiArCj4+ICvCoMKgwqAg cm0tPm1pc2NkZXYubmFtZSA9ICJndW55YWgiOwo+PiArwqDCoMKgIHJtLT5taXNjZGV2Lm1pbm9y ID0gTUlTQ19EWU5BTUlDX01JTk9SOwo+PiArwqDCoMKgIHJtLT5taXNjZGV2LmZvcHMgPSAmZ2hf ZGV2X2ZvcHM7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBtaXNjX3JlZ2lzdGVyKCZybS0+bWlzY2Rl dik7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX21zZ3E7 Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK2Vycl9tc2dxOgo+PiArwqDCoMKgIG1ib3hf ZnJlZV9jaGFubmVsKGdoX21zZ3FfY2hhbigmcm0tPm1zZ3EpKTsKPj4gK8KgwqDCoCBnaF9tc2dx X3JlbW92ZSgmcm0tPm1zZ3EpOwo+PiDCoCBlcnJfY2FjaGU6Cj4+IMKgwqDCoMKgwqAga21lbV9j YWNoZV9kZXN0cm95KHJtLT5jYWNoZSk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gQEAg LTU3Nyw2ICs2MTEsNyBAQCBzdGF0aWMgaW50IGdoX3JtX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAKPj4gKnBkZXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZ2hfcm0g KnJtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ICvCoMKgwqAgbWlzY19kZXJlZ2lz dGVyKCZybS0+bWlzY2Rldik7Cj4+IMKgwqDCoMKgwqAgbWJveF9mcmVlX2NoYW5uZWwoZ2hfbXNn cV9jaGFuKCZybS0+bXNncSkpOwo+PiDCoMKgwqDCoMKgIGdoX21zZ3FfcmVtb3ZlKCZybS0+bXNn cSk7Cj4+IMKgwqDCoMKgwqAga21lbV9jYWNoZV9kZXN0cm95KHJtLT5jYWNoZSk7Cj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3ZpcnQvZ3VueWFoL3ZtX21nci5jIGIvZHJpdmVycy92aXJ0L2d1bnlh aC92bV9tZ3IuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAu LmZkODkwYTU3MTcyZQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvdmlydC9ndW55 YWgvdm1fbWdyLmMKPj4gQEAgLTAsMCArMSwxMTggQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjItMjAy MyBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBBbGwgCj4+IHJpZ2h0cyByZXNlcnZl ZC4KPj4gKyAqLwo+PiArCj4+ICsjZGVmaW5lIHByX2ZtdChmbXQpICJnaF92bV9tZ3I6ICIgZm10 Cj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L2ZpbGUuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9ndW55YWhfcnNjX21nci5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K Pj4gKwo+PiArI2luY2x1ZGUgPHVhcGkvbGludXgvZ3VueWFoLmg+Cj4+ICsKPj4gKyNpbmNsdWRl ICJ2bV9tZ3IuaCIKPj4gKwo+PiArc3RhdGljIHZvaWQgZ2hfdm1fZnJlZShzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGdoX3ZtICpnaHZtID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCBnaF92bSwgZnJlZV93b3JrKTsKPj4gK8KgwqDCoCBpbnQgcmV0 Owo+PiArCj4+ICvCoMKgwqAgcmV0ID0gZ2hfcm1fZGVhbGxvY192bWlkKGdodm0tPnJtLCBnaHZt LT52bWlkKTsKPj4gK8KgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgcHJfd2Fybigi RmFpbGVkIHRvIGRlYWxsb2NhdGUgdm1pZDogJWRcbiIsIHJldCk7Cj4+ICsKPj4gK8KgwqDCoCBw dXRfZ2hfcm0oZ2h2bS0+cm0pOwo+PiArwqDCoMKgIGtmcmVlKGdodm0pOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgX19tdXN0X2NoZWNrIHN0cnVjdCBnaF92bSAqZ2hfdm1fYWxsb2Moc3RydWN0IGdo X3JtICpybSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZ2hfdm0gKmdodm07Cj4+ICvCoMKgwqAg aW50IHZtaWQ7Cj4+ICsKPj4gK8KgwqDCoCB2bWlkID0gZ2hfcm1fYWxsb2Nfdm1pZChybSwgMCk7 Cj4+ICvCoMKgwqAgaWYgKHZtaWQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9Q VFIodm1pZCk7Cj4+ICsKPj4gK8KgwqDCoCBnaHZtID0ga3phbGxvYyhzaXplb2YoKmdodm0pLCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIWdodm0pIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGdo X3JtX2RlYWxsb2Nfdm1pZChybSwgdm1pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBnZXRfZ2hfcm0ocm0p Owo+PiArCj4+ICvCoMKgwqAgZ2h2bS0+dm1pZCA9IHZtaWQ7Cj4+ICvCoMKgwqAgZ2h2bS0+cm0g PSBybTsKPj4gKwo+PiArwqDCoMKgIElOSVRfV09SSygmZ2h2bS0+ZnJlZV93b3JrLCBnaF92bV9m cmVlKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBnaHZtOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGdoX3ZtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAp Cj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGdoX3ZtICpnaHZtID0gZmlscC0+cHJpdmF0ZV9kYXRh Owo+PiArCj4+ICvCoMKgwqAgLyogVk0gd2lsbCBiZSByZXNldCBhbmQgbWFrZSBSTSBjYWxscyB3 aGljaCBjYW4gaW50ZXJydXB0aWJsZSBzbGVlcC4KPj4gK8KgwqDCoMKgICogRGVmZXIgdG8gYSB3 b3JrIHNvIHRoaXMgdGhyZWFkIGNhbiByZWNlaXZlIHNpZ25hbC4KPj4gK8KgwqDCoMKgICovCj4+ ICvCoMKgwqAgc2NoZWR1bGVfd29yaygmZ2h2bS0+ZnJlZV93b3JrKTsKPj4gK8KgwqDCoCByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg Z2hfdm1fZm9wcyA9IHsKPj4gK8KgwqDCoCAucmVsZWFzZSA9IGdoX3ZtX3JlbGVhc2UsCj4gCj4+ ICvCoMKgwqAgLmNvbXBhdF9pb2N0bMKgwqDCoCA9IGNvbXBhdF9wdHJfaW9jdGwsCj4gCj4gVGhp cyBsaW5lIHNob3VsZCBnbyB3aXRoIHRoZSBwYXRjaCB0aGF0IGFkZHMgcmVhbCBpb2N0bAo+IAoK RG9uZS4KCj4+ICvCoMKgwqAgLmxsc2VlayA9IG5vb3BfbGxzZWVrLAo+PiArfTsKPj4gKwo+PiAr c3RhdGljIGxvbmcgZ2hfZGV2X2lvY3RsX2NyZWF0ZV92bShzdHJ1Y3QgZ2hfcm0gKnJtLCB1bnNp Z25lZCBsb25nIGFyZykKPiBOb3Qgc3VyZSB3aGF0IGlzIHRoZSBnYWluIG9mIHRoaXMgbXVsdGlw bGUgbGV2ZWxzIG9mIHJlZGlyZWN0aW9uLgo+IAo+IEhvdyBhYm91dAo+IAo+IGxvbmcgZ2hfZGV2 X2NyZWF0ZV92bShzdHJ1Y3QgZ2hfcm0gKnJtLCB1bnNpZ25lZCBsb25nIGFyZykKPiB7Cj4gLi4u Cj4gfQo+IAo+IGFuZCByc2NfbWdyIGp1c3QgY2FsbCBpdCBhcyBwYXJ0IG9mIGl0cyBpb2N0bCBj YWxsCj4gCj4gc3RhdGljIGxvbmcgZ2hfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNp Z25lZCBpbnQgY21kLCB1bnNpZ25lZCAKPiBsb25nIGFyZykKPiB7Cj4gIMKgwqDCoMKgc3RydWN0 IG1pc2NkZXZpY2UgKm1pc2NkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Cj4gIMKgwqDCoMKgc3Ry dWN0IGdoX3JtICpybSA9IGNvbnRhaW5lcl9vZihtaXNjZGV2LCBzdHJ1Y3QgZ2hfcm0sIG1pc2Nk ZXYpOwo+IAo+ICDCoMKgwqDCoHN3aXRjaCAoY21kKSB7Cj4gIMKgwqDCoMKgY2FzZSBHSF9DUkVB VEVfVk06Cj4gIMKgwqDCoMKgwqDCoMKgIHJldHVybiBnaF9kZXZfY3JlYXRlX3ZtKHJtLCBhcmcp Owo+ICDCoMKgwqDCoGRlZmF1bHQ6Cj4gIMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PSU9DVExD TUQ7Cj4gIMKgwqDCoMKgfQo+IH0KPiAKCkknbSBhbnRpY2lwYXRpbmcgd2Ugd2lsbCBhZGQgZnVy dGhlciAvZGV2L2d1bnlhaCBpb2N0bHMgYW5kIEkgdGhvdWdodCBpdCAKd291bGQgYmUgY2xlYW5l ciB0byBoYXZlIGFsbCB0aGF0IGluIHZtX21nci5jIGl0c2VsZi4KCj4gCj4+ICt7Cj4+ICvCoMKg wqAgc3RydWN0IGdoX3ZtICpnaHZtOwo+PiArwqDCoMKgIHN0cnVjdCBmaWxlICpmaWxlOwo+PiAr wqDCoMKgIGludCBmZCwgZXJyOwo+PiArCj4+ICvCoMKgwqAgLyogYXJnIHJlc2VydmVkIGZvciBm dXR1cmUgdXNlLiAqLwo+PiArwqDCoMKgIGlmIChhcmcpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVJTlZBTDsKPiAKPiBUaGUgb25seSBjb2RlIHBhdGggSSBzZWUgaGVyZSBpcyB2aWEgR0hf Q1JFQVRFX1ZNIGlvY3RsIHdoaWNoIG9idmlvdXNseSAKPiBkb2VzIG5vdCB0YWtlIGFueSBhcmd1 bWVudHMsIHNvIGlmIHlvdSBhcmUgdGhpbmtpbmcgb2YgdXNpbmcgdGhlIAo+IGFyZ3VtZW50IGZv ciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgVk0gZmxhZ3MuwqAgVGhlbiB0aGlzIG5lZWRzIHRvIGJl IAo+IHByb3Blcmx5IGRvbmUgYnkgbWFraW5nIHRoZSBBQkkgYXdhcmUgb2YgdGhpcy4KCkl0IGlz IGRvY3VtZW50ZWQgaW4gUGF0Y2ggMTcgKERvY3VtZW50IEd1bnlhaCBWTSBNYW5hZ2VyKQoKK0dI X0NSRUFURV9WTQorfn5+fn5+fn5+fn5+CisKK0NyZWF0ZXMgYSBHdW55YWggVk0uIFRoZSBhcmd1 bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgbXVzdCBiZSAwLgoKPiAKPiBBcyB5 b3UgbWVudGlvbmVkIHplcm8gdmFsdWUgYXJnIGltcGx5IGFuICJ1bmF1dGhlbnRpY2F0ZWQgVk0i IHR5cGUsIGJ1dCAKPiB0aGlzIHdhcyBub3QgcHJvcGVybHkgZW5jb2RlZCBpbiB0aGUgdXNlcnNw YWNlIEFCSS4gV2h5IG5vdCBtYWtlIGl0IAo+IGZ1dHVyZSBjb21wYXRpYmxlLiBIb3cgYWJvdXQg YWRkaW5nIGFyZ3VtZW50cyB0byBHSF9DUkVBVEVfVk0gYW5kIHBhc3MgCj4gdGhlIHJlcXVpcmVk IGluZm9ybWF0aW9uIGNvcnJlY3RseS4KPiBOb3RlIHRoYXQgb25jZSB0aGUgQUJJIGlzIGFjY2Vw dGVkIHRoZW4geW91IHdpbGwgbm90IGJlIGFibGUgdG8gY2hhbmdlIAo+IGl0LCBvdGhlciB0aGFu IGFkZGluZyBhIG5ldyBvbmUuCj4gCgpEb2VzIHRoaXMgbWVhbnMgYWRkaW5nICNkZWZpbmUgR0hf Vk1fREVGQVVMVF9BUkcgMCA/IEkgYW0gbm90IHN1cmUgeWV0IAp3aGF0IGFyZ3VtZW50cyB0byBh ZGQgaGVyZS4KClRoZSBBQkkgY2FuIGFkZCBuZXcgImxvbmciIHZhbHVlcyB0byBHSF9DUkVBVEVf Vk0gYW5kIHRoYXQgd291bGRuJ3QgCmJyZWFrIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQga2VybmVs czsgb2xkIGtlcm5lbHMgcmVqZWN0IGl0IGFzIC1FSU5WQUwuCgo+PiArCj4+ICvCoMKgwqAgZ2h2 bSA9IGdoX3ZtX2FsbG9jKHJtKTsKPj4gK8KgwqDCoCBpZiAoSVNfRVJSKGdodm0pKQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoZ2h2bSk7Cj4+ICsKPj4gK8KgwqDCoCBmZCA9IGdl dF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKPj4gK8KgwqDCoCBpZiAoZmQgPCAwKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSBmZDsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2Rl c3Ryb3lfdm07Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgZmlsZSA9IGFub25faW5vZGVf Z2V0ZmlsZSgiZ3VueWFoLXZtIiwgJmdoX3ZtX2ZvcHMsIGdodm0sIE9fUkRXUik7Cj4+ICvCoMKg wqAgaWYgKElTX0VSUihmaWxlKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZXJyID0gUFRSX0VSUihm aWxlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX3B1dF9mZDsKPj4gK8KgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoCBmZF9pbnN0YWxsKGZkLCBmaWxlKTsKPj4gKwo+PiArwqDCoMKgIHJldHVy biBmZDsKPj4gKwo+PiArZXJyX3B1dF9mZDoKPj4gK8KgwqDCoCBwdXRfdW51c2VkX2ZkKGZkKTsK Pj4gK2Vycl9kZXN0cm95X3ZtOgo+PiArwqDCoMKgIGtmcmVlKGdodm0pOwo+PiArwqDCoMKgIHJl dHVybiBlcnI7Cj4+ICt9Cj4+ICsKPj4gK2xvbmcgZ2hfZGV2X3ZtX21ncl9pb2N0bChzdHJ1Y3Qg Z2hfcm0gKnJtLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCAKPj4gbG9uZyBhcmcpCj4+ICt7 Cj4+ICvCoMKgwqAgc3dpdGNoIChjbWQpIHsKPj4gK8KgwqDCoCBjYXNlIEdIX0NSRUFURV9WTToK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBnaF9kZXZfaW9jdGxfY3JlYXRlX3ZtKHJtLCBhcmcp Owo+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0lPQ1RM Q01EOwo+PiArwqDCoMKgIH0KPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydC9ndW55 YWgvdm1fbWdyLmggYi9kcml2ZXJzL3ZpcnQvZ3VueWFoL3ZtX21nci5oCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzY5NTRkYTcwNmU5Cj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy92aXJ0L2d1bnlhaC92bV9tZ3IuaAo+PiBAQCAtMCwwICsx LDIyIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4+ ICsvKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDIyLTIwMjMgUXVhbGNvbW0gSW5ub3ZhdGlvbiBD ZW50ZXIsIEluYy4gQWxsIAo+PiByaWdodHMgcmVzZXJ2ZWQuCj4+ICsgKi8KPj4gKwo+PiArI2lm bmRlZiBfR0hfUFJJVl9WTV9NR1JfSAo+PiArI2RlZmluZSBfR0hfUFJJVl9WTV9NR1JfSAo+PiAr Cj4+ICsjaW5jbHVkZSA8bGludXgvZ3VueWFoX3JzY19tZ3IuaD4KPj4gKwo+PiArI2luY2x1ZGUg PHVhcGkvbGludXgvZ3VueWFoLmg+Cj4+ICsKPj4gK2xvbmcgZ2hfZGV2X3ZtX21ncl9pb2N0bChz dHJ1Y3QgZ2hfcm0gKnJtLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCAKPj4gbG9uZyBhcmcp Owo+PiArCj4+ICtzdHJ1Y3QgZ2hfdm0gewo+PiArwqDCoMKgIHUxNiB2bWlkOwo+PiArwqDCoMKg IHN0cnVjdCBnaF9ybSAqcm07Cj4+ICsKPj4gK8KgwqDCoCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJl ZV93b3JrOwo+PiArfTsKPj4gKwo+PiArI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3Vh cGkvbGludXgvZ3VueWFoLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZ3VueWFoLmgKPj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xMGJhMzJkMmIwYTYKPj4gLS0t IC9kZXYvbnVsbAo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZ3VueWFoLmgKPj4gQEAgLTAs MCArMSwyMyBAQAo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSBX SVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLwo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAy Mi0yMDIzIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIEFsbCAKPj4gcmlnaHRzIHJl c2VydmVkLgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX1VBUElfTElOVVhfR1VOWUFICj4+ICsj ZGVmaW5lIF9VQVBJX0xJTlVYX0dVTllBSAo+PiArCj4+ICsvKgo+PiArICogVXNlcnNwYWNlIGlu dGVyZmFjZSBmb3IgL2Rldi9ndW55YWggLSBndW55YWggYmFzZWQgdmlydHVhbCBtYWNoaW5lCj4+ ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvaW9jdGwuaD4KPj4gKwo+PiArI2RlZmluZSBHSF9JT0NUTF9UWVBFwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAnRycKPj4gKwo+PiArLyoKPj4gKyAqIGlvY3RscyBmb3IgL2Rldi9ndW55YWggZmRz Ogo+PiArICovCj4+ICsjZGVmaW5lIEdIX0NSRUFURV9WTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg X0lPKEdIX0lPQ1RMX1RZUEUsIDB4MCkgLyogUmV0dXJucyBhIAo+PiBHdW55YWggVk0gZmQgKi8K PiAKPiBDYW4gSExPUyBmb3JjZWZ1bGx5IGRlc3Ryb3kgYSBWTT8KPiBJZiBzbyBzaG91bGQgd2Ug aGF2ZSBhIGNvcnJlc3BvbmRpbmcgREVTVFJPWSBJT0NUTD8KCkl0IGNhbiBmb3JjZWZ1bGx5IGRl c3Ryb3kgdW5hdXRoZW50aWNhdGVkIGFuZCBwcm90ZWN0ZWQgdmlydHVhbCAKbWFjaGluZXMuIEkg ZG9uJ3QgaGF2ZSBhIHVzZXJzcGFjZSB1c2VjYXNlIGZvciBhIERFU1RST1kgaW9jdGwgeWV0LCAK bWF5YmUgdGhpcyBjYW4gYmUgYWRkZWQgbGF0ZXI/IEJ5IHRoZSB3YXksIHRoZSBWTSBpcyBmb3Jj ZWZ1bGx5IApkZXN0cm95ZWQgd2hlbiBWTSByZWZjb3VudCBpcyBkcm9wcGVkIHRvIDAgKGNsb3Nl KHZtX2ZkKSBhbmQgYW55IG90aGVyIApyZWxldmFudCBmaWxlIGRlc2NyaXB0b3JzKS4KCi0gRWxs aW90CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==