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 76332C77B7E for ; Thu, 27 Apr 2023 18:09:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244360AbjD0SJL (ORCPT ); Thu, 27 Apr 2023 14:09:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243708AbjD0SJK (ORCPT ); Thu, 27 Apr 2023 14:09:10 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7331C40F0; Thu, 27 Apr 2023 11:09:09 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 176DB63EFA; Thu, 27 Apr 2023 18:09:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C4A5C433D2; Thu, 27 Apr 2023 18:09:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1682618948; bh=QBydXWhrxQNK3CFJbJDwWowfRxr+Zi+M4F7Gcl55S/k=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=dZx9rn78ovZWadDWRrpeXNPkOUvJazxFz83IgAuJk82x4ouLrBB70Wk4gWvIHt3Tg 0/LiXVmF7Ev+EZ5kNnYjWg8qxTXqCudJFYnrhV3BdH3Xn8zd9yv+wzrRQf4ixqr/gA TyoXmX2i8pfKvINeXCwMP4EfVA40ZQg+mtMbgBlOn1ksvpXqSzlzrWYVMEA/7bKKfU XL8AB1tuk2ZUeezDSBlMbM4+QwCQ3z+LddGkewnOY3arrpEg5hP5zXuuxBocL3Jpdr USiDtdYlWL4igPY0VjljLBOPulu8ORWnAuHNrea1tWqB/ktQui0IvyOLSYbtMXFbpU LUToGs7f43mXQ== Date: Thu, 27 Apr 2023 13:09:06 -0500 From: Bjorn Helgaas To: Shunsuke Mie Cc: Lorenzo Pieralisi , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Manivannan Sadhasivam , Kishon Vijay Abraham I , Bjorn Helgaas , "Michael S. Tsirkin" , Jason Wang , Frank Li , Jon Mason , Randy Dunlap , Ren Zhijie , linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, virtualization@lists.linux-foundation.org Subject: Re: [RFC PATCH v2 3/3] PCI: endpoint: Add EP function driver to provide virtio-console functionality Message-ID: <20230427180906.GA261441@bhelgaas> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230427104428.862643-4-mie@igel.co.jp> Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Random typos and trivial things. No need to repost until somebody does a more substantive review. On Thu, Apr 27, 2023 at 07:44:28PM +0900, Shunsuke Mie wrote: > Add a new PCIe endpoint function driver that works as a pci virtio-console > device. The console connect to endpoint side console. It enables to > communicate PCIe host and endpoint. s/pci/PCI/ > Architecture is following: > > ┌────────────┐ ┌──────────────────────┬────────────┐ > │virtioe │ │ │virtio │ > │console drv │ ├───────────────┐ │console drv │ > ├────────────┤ │(virtio console│ ├────────────┤ > │ virtio bus │ │ device) │◄────►│ virtio bus │ > ├────────────┤ ├---------------┤ └────────────┤ > │ │ │ pci ep virtio │ │ > │ pci bus │ │ console drv │ │ > │ │ pcie ├───────────────┤ │ > │ │ ◄─────► │ pci ep Bus │ │ > └────────────┘ └───────────────┴───────────────────┘ > PCIe Root PCIe Endpoint s/virtioe/virtio/ s/pci/PCI/ s/pcie/PCIe/ s/ep/EP/ > +config PCI_EPF_VCON > + tristate "PCI Endpoint virito-console driver" s/virito/virtio/ > + depends on PCI_ENDPOINT > + select VHOST_RING > + select PCI_EPF_VIRTIO > + help > + PCIe Endpoint virtio-console function implementatino. This module > + enables to show the virtio-console as pci device to PCIe host side, and > + another virtual virtio-console device registers to endpoint system. > + Those devices are connected virtually and can communicate each other. s/implementatino/implementation/ s/pci/PCI/ s/can communicate/can communicate with/ > + * PCI Endpoint function driver to impliment virtio-console device > + * functionality. s/impliment/implement/ > +static int virtio_queue_size = 0x100; > +module_param(virtio_queue_size, int, 0444); > +MODULE_PARM_DESC(virtio_queue_size, "A length of virtqueue"); When and why would users need this parameter? Where is it documented? > + /* To access virtqueus of local host driver */ s/virtqueus/virtqueues/ > + /* To show a status whether this driver is ready and the remote is connected */ Make this fit in 80 columns. > + /* This is a minimum implementation. Doesn't support any features of > + * virtio console. It means driver and device use just 2 virtuque for tx > + * and rx. > + */ Use common multi-line comment style: /* * This is ... */ s/virtuque/virtqueues/ > +static void epf_vcon_raise_irq_handler(struct work_struct *work) > +{ > + struct epf_vcon *vcon = > + container_of(work, struct epf_vcon, raise_irq_work); Rewrap. > +static int epf_vcon_setup_common(struct epf_vcon *vcon) > +{ > + vcon->features = 0; > + vcon->connected = false; > + > + vcon->task_wq = > + alloc_workqueue("pci-epf-vcon/task-wq", Looks like this would fit on the previous line? > + WQ_MEM_RECLAIM | WQ_HIGHPRI | WQ_UNBOUND, 0); > +static void epf_vcon_initialize_complete(void *param) > +{ > + struct epf_vcon *vcon = param; > + > + pr_debug("Remote host has connected\n"); Is there any device info you could include here, e.g., with dev_dbg()? It's nice if users have a little context. > +static int epf_vcon_setup_ep_func(struct epf_vcon *vcon, struct pci_epf *epf) > +{ > + int err; > + struct epf_virtio *evio = &vcon->evio; > + unsigned int nvq = epf_vcon_get_nvq(vcon); > + > + vcon->rdev_iovs = > + kmalloc_array(nvq, sizeof(vcon->rdev_iovs[0]), GFP_KERNEL); Move the function name and as many parameters as fit in 80 columns to the previous line to match prevailing style. > + /* There is no config for virtio console because this console device > + * doesn't any support features > + */ Multi-line comment style. s/doesn't any support/doesn't support any/? Is that what you mean? > + /* Do nothing because this console device doesn't any support features */ Same. > +static void epf_vcon_vdev_set_status(struct virtio_device *vdev, u8 status) > +{ > + if (status & VIRTIO_CONFIG_S_FAILED) > + pr_debug("driver failed to setup this device\n"); dev_dbg() if possible. > + err = vringh_init_kern(&vcon->vdev_vrhs[i], vcon->features, > + virtio_queue_size, false, vring->desc, > + vring->avail, vring->used); > + if (err) { > + pr_err("failed to init vringh for vring %d\n", i); dev_err() if possible. > +static int epf_vcon_setup_vdev(struct epf_vcon *vcon, struct device *parent) > +{ > + int err; > + struct virtio_device *vdev = &vcon->vdev; > + const unsigned int nvq = epf_vcon_get_nvq(vcon); > + > + vcon->vdev_vrhs = > + kmalloc_array(nvq, sizeof(vcon->vdev_vrhs[0]), GFP_KERNEL); Rewrap. > + vcon->vdev_iovs = > + kmalloc_array(nvq, sizeof(vcon->vdev_iovs[0]), GFP_KERNEL); Rewrap. > + vcon->vdev_vqs = > + kmalloc_array(nvq, sizeof(vcon->vdev_vrhs[0]), GFP_KERNEL); Rewrap. > +static void epf_vcon_cleanup_vdev(struct epf_vcon *vcon) > +{ > + unregister_virtio_device(&vcon->vdev); > + /* Cleanup struct virtio_device that has kobject, otherwise error occures when > + * reregister the virtio device. > + */ Multi-line style and rewrap to fit in 80 columns. > +static int __init epf_vcon_init(void) > +{ > + int err; > + > + err = pci_epf_register_driver(&epf_vcon_drv); > + if (err) > + pr_err("Failed to register PCI EP virtio-console function\n"); dev_err() if possible (doesn't look like it *is* possible). Looks like this registers a *driver*, so maybe change the message from "function" to "driver"? Bjorn 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 smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.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 C709EC7EE21 for ; Thu, 27 Apr 2023 18:09:14 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 6F14941DD8; Thu, 27 Apr 2023 18:09:14 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 6F14941DD8 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=dZx9rn78 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id w3snCV4VPGoE; Thu, 27 Apr 2023 18:09:13 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id B67D1405DB; Thu, 27 Apr 2023 18:09:12 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org B67D1405DB Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 77EC9C0036; Thu, 27 Apr 2023 18:09:12 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3B871C002A for ; Thu, 27 Apr 2023 18:09:11 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 090BE40639 for ; Thu, 27 Apr 2023 18:09:11 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 090BE40639 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FsJRlhESW5Zw for ; Thu, 27 Apr 2023 18:09:10 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 1C474405DB Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by smtp2.osuosl.org (Postfix) with ESMTPS id 1C474405DB for ; Thu, 27 Apr 2023 18:09:10 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0D22D63EE7; Thu, 27 Apr 2023 18:09:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C4A5C433D2; Thu, 27 Apr 2023 18:09:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1682618948; bh=QBydXWhrxQNK3CFJbJDwWowfRxr+Zi+M4F7Gcl55S/k=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=dZx9rn78ovZWadDWRrpeXNPkOUvJazxFz83IgAuJk82x4ouLrBB70Wk4gWvIHt3Tg 0/LiXVmF7Ev+EZ5kNnYjWg8qxTXqCudJFYnrhV3BdH3Xn8zd9yv+wzrRQf4ixqr/gA TyoXmX2i8pfKvINeXCwMP4EfVA40ZQg+mtMbgBlOn1ksvpXqSzlzrWYVMEA/7bKKfU XL8AB1tuk2ZUeezDSBlMbM4+QwCQ3z+LddGkewnOY3arrpEg5hP5zXuuxBocL3Jpdr USiDtdYlWL4igPY0VjljLBOPulu8ORWnAuHNrea1tWqB/ktQui0IvyOLSYbtMXFbpU LUToGs7f43mXQ== Date: Thu, 27 Apr 2023 13:09:06 -0500 From: Bjorn Helgaas To: Shunsuke Mie Subject: Re: [RFC PATCH v2 3/3] PCI: endpoint: Add EP function driver to provide virtio-console functionality Message-ID: <20230427180906.GA261441@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20230427104428.862643-4-mie@igel.co.jp> Cc: Kishon Vijay Abraham I , Krzysztof =?utf-8?Q?Wilczy=C5=84ski?= , Randy Dunlap , "Michael S. Tsirkin" , linux-pci@vger.kernel.org, Lorenzo Pieralisi , Manivannan Sadhasivam , Frank Li , linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, Ren Zhijie , Jon Mason , Bjorn Helgaas X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" UmFuZG9tIHR5cG9zIGFuZCB0cml2aWFsIHRoaW5ncy4gIE5vIG5lZWQgdG8gcmVwb3N0IHVudGls IHNvbWVib2R5CmRvZXMgYSBtb3JlIHN1YnN0YW50aXZlIHJldmlldy4KCk9uIFRodSwgQXByIDI3 LCAyMDIzIGF0IDA3OjQ0OjI4UE0gKzA5MDAsIFNodW5zdWtlIE1pZSB3cm90ZToKPiBBZGQgYSBu ZXcgUENJZSBlbmRwb2ludCBmdW5jdGlvbiBkcml2ZXIgdGhhdCB3b3JrcyBhcyBhIHBjaSB2aXJ0 aW8tY29uc29sZQo+IGRldmljZS4gVGhlIGNvbnNvbGUgY29ubmVjdCB0byBlbmRwb2ludCBzaWRl IGNvbnNvbGUuIEl0IGVuYWJsZXMgdG8KPiBjb21tdW5pY2F0ZSBQQ0llIGhvc3QgYW5kIGVuZHBv aW50LgoKcy9wY2kvUENJLwoKPiBBcmNoaXRlY3R1cmUgaXMgZm9sbG93aW5nOgo+IAo+ICDilIzi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICDilIzilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKPiAg4pSCdmlydGlv ZSAgICAg4pSCICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgIOKUgnZpcnRpbyAgICAg IOKUggo+ICDilIJjb25zb2xlIGRydiDilIIgICAgICAgICDilJzilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICDilIJjb25zb2xlIGRydiDilIIKPiAg 4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkICAgICAgICAg4pSCKHZp cnRpbyBjb25zb2xl4pSCICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSkCj4gIOKUgiB2aXJ0aW8gYnVzIOKUgiAgICAgICAgIOKUgiBkZXZpY2UpICAgICAgIOKU guKXhOKUgOKUgOKUgOKUgOKWuuKUgiB2aXJ0aW8gYnVzIOKUggo+ICDilJzilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilKQgICAgICAgICDilJwtLS0tLS0tLS0tLS0tLS3ilKQg ICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKQKPiAg4pSCICAg ICAgICAgICAg4pSCICAgICAgICAg4pSCIHBjaSBlcCB2aXJ0aW8g4pSCICAgICAgICAgICAgICAg ICAgIOKUggo+ICDilIIgIHBjaSBidXMgICDilIIgICAgICAgICDilIIgIGNvbnNvbGUgZHJ2ICDi lIIgICAgICAgICAgICAgICAgICAg4pSCCj4gIOKUgiAgICAgICAgICAgIOKUgiAgcGNpZSAgIOKU nOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpCAgICAgICAg ICAgICAgICAgICDilIIKPiAg4pSCICAgICAgICAgICAg4pSCIOKXhOKUgOKUgOKUgOKUgOKUgOKW uiDilIIgIHBjaSBlcCBCdXMgICDilIIgICAgICAgICAgICAgICAgICAg4pSCCj4gIOKUlOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgIOKUlOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAo+ICAgIFBDSWUgUm9vdCAg ICAgICAgICAgICAgUENJZSBFbmRwb2ludAoKcy92aXJ0aW9lL3ZpcnRpby8Kcy9wY2kvUENJLwpz L3BjaWUvUENJZS8Kcy9lcC9FUC8KCj4gK2NvbmZpZyBQQ0lfRVBGX1ZDT04KPiArCXRyaXN0YXRl ICJQQ0kgRW5kcG9pbnQgdmlyaXRvLWNvbnNvbGUgZHJpdmVyIgoKcy92aXJpdG8vdmlydGlvLwoK PiArCWRlcGVuZHMgb24gUENJX0VORFBPSU5UCj4gKwlzZWxlY3QgVkhPU1RfUklORwo+ICsJc2Vs ZWN0IFBDSV9FUEZfVklSVElPCj4gKwloZWxwCj4gKwkgIFBDSWUgRW5kcG9pbnQgdmlydGlvLWNv bnNvbGUgZnVuY3Rpb24gaW1wbGVtZW50YXRpbm8uIFRoaXMgbW9kdWxlCj4gKwkgIGVuYWJsZXMg dG8gc2hvdyB0aGUgdmlydGlvLWNvbnNvbGUgYXMgcGNpIGRldmljZSB0byBQQ0llIGhvc3Qgc2lk ZSwgYW5kCj4gKwkgIGFub3RoZXIgdmlydHVhbCB2aXJ0aW8tY29uc29sZSBkZXZpY2UgcmVnaXN0 ZXJzIHRvIGVuZHBvaW50IHN5c3RlbS4KPiArCSAgVGhvc2UgZGV2aWNlcyBhcmUgY29ubmVjdGVk IHZpcnR1YWxseSBhbmQgY2FuIGNvbW11bmljYXRlIGVhY2ggb3RoZXIuCgpzL2ltcGxlbWVudGF0 aW5vL2ltcGxlbWVudGF0aW9uLwpzL3BjaS9QQ0kvCnMvY2FuIGNvbW11bmljYXRlL2NhbiBjb21t dW5pY2F0ZSB3aXRoLwoKPiArICogUENJIEVuZHBvaW50IGZ1bmN0aW9uIGRyaXZlciB0byBpbXBs aW1lbnQgdmlydGlvLWNvbnNvbGUgZGV2aWNlCj4gKyAqIGZ1bmN0aW9uYWxpdHkuCgpzL2ltcGxp bWVudC9pbXBsZW1lbnQvCgo+ICtzdGF0aWMgaW50IHZpcnRpb19xdWV1ZV9zaXplID0gMHgxMDA7 Cj4gK21vZHVsZV9wYXJhbSh2aXJ0aW9fcXVldWVfc2l6ZSwgaW50LCAwNDQ0KTsKPiArTU9EVUxF X1BBUk1fREVTQyh2aXJ0aW9fcXVldWVfc2l6ZSwgIkEgbGVuZ3RoIG9mIHZpcnRxdWV1ZSIpOwoK V2hlbiBhbmQgd2h5IHdvdWxkIHVzZXJzIG5lZWQgdGhpcyBwYXJhbWV0ZXI/ICBXaGVyZSBpcyBp dCBkb2N1bWVudGVkPwoKPiArCS8qIFRvIGFjY2VzcyB2aXJ0cXVldXMgb2YgbG9jYWwgaG9zdCBk cml2ZXIgKi8KCnMvdmlydHF1ZXVzL3ZpcnRxdWV1ZXMvCgo+ICsJLyogVG8gc2hvdyBhIHN0YXR1 cyB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIHJlYWR5IGFuZCB0aGUgcmVtb3RlIGlzIGNvbm5lY3Rl ZCAqLwoKTWFrZSB0aGlzIGZpdCBpbiA4MCBjb2x1bW5zLgoKPiArCS8qIFRoaXMgaXMgYSBtaW5p bXVtIGltcGxlbWVudGF0aW9uLiBEb2Vzbid0IHN1cHBvcnQgYW55IGZlYXR1cmVzIG9mCj4gKwkg KiB2aXJ0aW8gY29uc29sZS4gSXQgbWVhbnMgZHJpdmVyIGFuZCBkZXZpY2UgdXNlIGp1c3QgMiB2 aXJ0dXF1ZSBmb3IgdHgKPiArCSAqIGFuZCByeC4KPiArCSAqLwoKVXNlIGNvbW1vbiBtdWx0aS1s aW5lIGNvbW1lbnQgc3R5bGU6CgogIC8qCiAgICogVGhpcyBpcyAuLi4KICAgKi8KCnMvdmlydHVx dWUvdmlydHF1ZXVlcy8KCj4gK3N0YXRpYyB2b2lkIGVwZl92Y29uX3JhaXNlX2lycV9oYW5kbGVy KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IGVwZl92Y29uICp2Y29u ID0KPiArCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGVwZl92Y29uLCByYWlzZV9pcnFfd29y ayk7CgpSZXdyYXAuCgo+ICtzdGF0aWMgaW50IGVwZl92Y29uX3NldHVwX2NvbW1vbihzdHJ1Y3Qg ZXBmX3Zjb24gKnZjb24pCj4gK3sKPiArCXZjb24tPmZlYXR1cmVzID0gMDsKPiArCXZjb24tPmNv bm5lY3RlZCA9IGZhbHNlOwo+ICsKPiArCXZjb24tPnRhc2tfd3EgPQo+ICsJCWFsbG9jX3dvcmtx dWV1ZSgicGNpLWVwZi12Y29uL3Rhc2std3EiLAoKTG9va3MgbGlrZSB0aGlzIHdvdWxkIGZpdCBv biB0aGUgcHJldmlvdXMgbGluZT8KCj4gKwkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkg fCBXUV9VTkJPVU5ELCAwKTsKCj4gK3N0YXRpYyB2b2lkIGVwZl92Y29uX2luaXRpYWxpemVfY29t cGxldGUodm9pZCAqcGFyYW0pCj4gK3sKPiArCXN0cnVjdCBlcGZfdmNvbiAqdmNvbiA9IHBhcmFt Owo+ICsKPiArCXByX2RlYnVnKCJSZW1vdGUgaG9zdCBoYXMgY29ubmVjdGVkXG4iKTsKCklzIHRo ZXJlIGFueSBkZXZpY2UgaW5mbyB5b3UgY291bGQgaW5jbHVkZSBoZXJlLCBlLmcuLCB3aXRoIGRl dl9kYmcoKT8KSXQncyBuaWNlIGlmIHVzZXJzIGhhdmUgYSBsaXR0bGUgY29udGV4dC4KCj4gK3N0 YXRpYyBpbnQgZXBmX3Zjb25fc2V0dXBfZXBfZnVuYyhzdHJ1Y3QgZXBmX3Zjb24gKnZjb24sIHN0 cnVjdCBwY2lfZXBmICplcGYpCj4gK3sKPiArCWludCBlcnI7Cj4gKwlzdHJ1Y3QgZXBmX3ZpcnRp byAqZXZpbyA9ICZ2Y29uLT5ldmlvOwo+ICsJdW5zaWduZWQgaW50IG52cSA9IGVwZl92Y29uX2dl dF9udnEodmNvbik7Cj4gKwo+ICsJdmNvbi0+cmRldl9pb3ZzID0KPiArCQlrbWFsbG9jX2FycmF5 KG52cSwgc2l6ZW9mKHZjb24tPnJkZXZfaW92c1swXSksIEdGUF9LRVJORUwpOwoKTW92ZSB0aGUg ZnVuY3Rpb24gbmFtZSBhbmQgYXMgbWFueSBwYXJhbWV0ZXJzIGFzIGZpdCBpbiA4MCBjb2x1bW5z IHRvCnRoZSBwcmV2aW91cyBsaW5lIHRvIG1hdGNoIHByZXZhaWxpbmcgc3R5bGUuCgo+ICsJLyog VGhlcmUgaXMgbm8gY29uZmlnIGZvciB2aXJ0aW8gY29uc29sZSBiZWNhdXNlIHRoaXMgY29uc29s ZSBkZXZpY2UKPiArCSAqIGRvZXNuJ3QgYW55IHN1cHBvcnQgZmVhdHVyZXMKPiArCSAqLwoKTXVs dGktbGluZSBjb21tZW50IHN0eWxlLgoKcy9kb2Vzbid0IGFueSBzdXBwb3J0L2RvZXNuJ3Qgc3Vw cG9ydCBhbnkvPyAgSXMgdGhhdCB3aGF0IHlvdSBtZWFuPwoKPiArCS8qIERvIG5vdGhpbmcgYmVj YXVzZSB0aGlzIGNvbnNvbGUgZGV2aWNlIGRvZXNuJ3QgYW55IHN1cHBvcnQgZmVhdHVyZXMgKi8K ClNhbWUuCgo+ICtzdGF0aWMgdm9pZCBlcGZfdmNvbl92ZGV2X3NldF9zdGF0dXMoc3RydWN0IHZp cnRpb19kZXZpY2UgKnZkZXYsIHU4IHN0YXR1cykKPiArewo+ICsJaWYgKHN0YXR1cyAmIFZJUlRJ T19DT05GSUdfU19GQUlMRUQpCj4gKwkJcHJfZGVidWcoImRyaXZlciBmYWlsZWQgdG8gc2V0dXAg dGhpcyBkZXZpY2VcbiIpOwoKZGV2X2RiZygpIGlmIHBvc3NpYmxlLgoKPiArCQllcnIgPSB2cmlu Z2hfaW5pdF9rZXJuKCZ2Y29uLT52ZGV2X3ZyaHNbaV0sIHZjb24tPmZlYXR1cmVzLAo+ICsJCQkJ ICAgICAgIHZpcnRpb19xdWV1ZV9zaXplLCBmYWxzZSwgdnJpbmctPmRlc2MsCj4gKwkJCQkgICAg ICAgdnJpbmctPmF2YWlsLCB2cmluZy0+dXNlZCk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlwcl9l cnIoImZhaWxlZCB0byBpbml0IHZyaW5naCBmb3IgdnJpbmcgJWRcbiIsIGkpOwoKZGV2X2Vycigp IGlmIHBvc3NpYmxlLgoKPiArc3RhdGljIGludCBlcGZfdmNvbl9zZXR1cF92ZGV2KHN0cnVjdCBl cGZfdmNvbiAqdmNvbiwgc3RydWN0IGRldmljZSAqcGFyZW50KQo+ICt7Cj4gKwlpbnQgZXJyOwo+ ICsJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSAmdmNvbi0+dmRldjsKPiArCWNvbnN0IHVu c2lnbmVkIGludCBudnEgPSBlcGZfdmNvbl9nZXRfbnZxKHZjb24pOwo+ICsKPiArCXZjb24tPnZk ZXZfdnJocyA9Cj4gKwkJa21hbGxvY19hcnJheShudnEsIHNpemVvZih2Y29uLT52ZGV2X3ZyaHNb MF0pLCBHRlBfS0VSTkVMKTsKClJld3JhcC4KCj4gKwl2Y29uLT52ZGV2X2lvdnMgPQo+ICsJCWtt YWxsb2NfYXJyYXkobnZxLCBzaXplb2YodmNvbi0+dmRldl9pb3ZzWzBdKSwgR0ZQX0tFUk5FTCk7 CgpSZXdyYXAuCgo+ICsJdmNvbi0+dmRldl92cXMgPQo+ICsJCWttYWxsb2NfYXJyYXkobnZxLCBz aXplb2YodmNvbi0+dmRldl92cmhzWzBdKSwgR0ZQX0tFUk5FTCk7CgpSZXdyYXAuCgo+ICtzdGF0 aWMgdm9pZCBlcGZfdmNvbl9jbGVhbnVwX3ZkZXYoc3RydWN0IGVwZl92Y29uICp2Y29uKQo+ICt7 Cj4gKwl1bnJlZ2lzdGVyX3ZpcnRpb19kZXZpY2UoJnZjb24tPnZkZXYpOwo+ICsJLyogQ2xlYW51 cCBzdHJ1Y3QgdmlydGlvX2RldmljZSB0aGF0IGhhcyBrb2JqZWN0LCBvdGhlcndpc2UgZXJyb3Ig b2NjdXJlcyB3aGVuCj4gKwkgKiByZXJlZ2lzdGVyIHRoZSB2aXJ0aW8gZGV2aWNlLgo+ICsJICov CgpNdWx0aS1saW5lIHN0eWxlIGFuZCByZXdyYXAgdG8gZml0IGluIDgwIGNvbHVtbnMuCgo+ICtz dGF0aWMgaW50IF9faW5pdCBlcGZfdmNvbl9pbml0KHZvaWQpCj4gK3sKPiArCWludCBlcnI7Cj4g Kwo+ICsJZXJyID0gcGNpX2VwZl9yZWdpc3Rlcl9kcml2ZXIoJmVwZl92Y29uX2Rydik7Cj4gKwlp ZiAoZXJyKQo+ICsJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDSSBFUCB2aXJ0aW8tY29u c29sZSBmdW5jdGlvblxuIik7CgpkZXZfZXJyKCkgaWYgcG9zc2libGUgKGRvZXNuJ3QgbG9vayBs aWtlIGl0ICppcyogcG9zc2libGUpLgoKTG9va3MgbGlrZSB0aGlzIHJlZ2lzdGVycyBhICpkcml2 ZXIqLCBzbyBtYXliZSBjaGFuZ2UgdGhlIG1lc3NhZ2UgZnJvbQoiZnVuY3Rpb24iIHRvICJkcml2 ZXIiPwoKQmpvcm4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4 LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFu L2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u