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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 24DB0FA372A for ; Thu, 17 Oct 2019 10:49:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F04D120869 for ; Thu, 17 Oct 2019 10:49:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2409010AbfJQKtG (ORCPT ); Thu, 17 Oct 2019 06:49:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:6584 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2404935AbfJQKtF (ORCPT ); Thu, 17 Oct 2019 06:49:05 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 625A62E97D5; Thu, 17 Oct 2019 10:49:04 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-185.pek2.redhat.com [10.72.12.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5A5E55D721; Thu, 17 Oct 2019 10:48:39 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com, Jason Wang Subject: [PATCH V4 0/6] mdev based hardware virtio offloading support Date: Thu, 17 Oct 2019 18:48:30 +0800 Message-Id: <20191017104836.32464-1-jasowang@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 17 Oct 2019 10:49:04 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi all: There are hardwares that can do virtio datapath offloading while having its own control path. This path tries to implement a mdev based unified API to support using kernel virtio driver to drive those devices. This is done by introducing a new mdev transport for virtio (virtio_mdev) and register itself as a new kind of mdev driver. Then it provides a unified way for kernel virtio driver to talk with mdev device implementation. Though the series only contains kernel driver support, the goal is to make the transport generic enough to support userspace drivers. This means vhost-mdev[1] could be built on top as well by resuing the transport. A sample driver is also implemented which simulate a virito-net loopback ethernet device on top of vringh + workqueue. This could be used as a reference implementation for real hardware driver. Also a real ICF VF driver was also posted here[2] which is a good reference for vendors who is interested in their own virtio datapath offloading product. Consider mdev framework only support VFIO device and driver right now, this series also extend it to support other types. This is done through introducing class id to the device and pairing it with id_talbe claimed by the driver. On top, this seris also decouple device specific parents ops out of the common ones. Pktgen test was done with virito-net + mvnet loop back device. Please review. [1] https://lkml.org/lkml/2019/9/26/15 [2] https://lkml.org/lkml/2019/10/15/1226 Changes from V3: - document that class id (device ops) must be specified in create() - add WARN() when trying to set class_id when it has already set - add WARN() when class_id is not specified in create() and correctly return an error in this case - correct the prototype of mdev_set_class() in the doc - add documention of mdev_set_class() - remove the unnecessary "class_id_fail" label when class id is not specified in create() - convert id_table in vfio_mdev to const - move mdev_set_class and its friends after mdev_uuid() - suqash the patch of bus uevent into patch of introducing class id - tweak the words in the docs per Cornelia suggestion - tie class_id and device ops through class specific initialization routine like mdev_set_vfio_ops() - typos fixes in the docs of virtio-mdev callbacks - document the usage of virtqueues in struct virtio_mdev_device - remove the useless vqs array in struct virtio_mdev_device - rename MDEV_ID_XXX to MDEV_CLASS_ID_XXX Changes from V2: - fail when class_id is not specified - drop the vringh patch - match the doc to the code - tweak the commit log - move device_ops from parent to mdev device - remove the unused MDEV_ID_VHOST Changes from V1: - move virtio_mdev.c to drivers/virtio - store class_id in mdev_device instead of mdev_parent - store device_ops in mdev_device instead of mdev_parent - reorder the patch, vringh fix comes first - really silent compiling warnings - really switch to use u16 for class_id - uevent and modpost support for mdev class_id - vraious tweaks per comments from Parav Changes from RFC-V2: - silent compile warnings on some specific configuration - use u16 instead u8 for class id - reseve MDEV_ID_VHOST for future vhost-mdev work - introduce "virtio" type for mvnet and make "vhost" type for future work - add entries in MAINTAINER - tweak and typos fixes in commit log Changes from RFC-V1: - rename device id to class id - add docs for class id and device specific ops (device_ops) - split device_ops into seperate headers - drop the mdev_set_dma_ops() - use device_ops to implement the transport API, then it's not a part of UAPI any more - use GFP_ATOMIC in mvnet sample device and other tweaks - set_vring_base/get_vring_base support for mvnet device Jason Wang (6): mdev: class id support modpost: add support for mdev class id mdev: introduce device specific ops mdev: introduce virtio device and its device ops virtio: introduce a mdev based transport docs: sample driver to demonstrate how to implement virtio-mdev framework .../driver-api/vfio-mediated-device.rst | 22 +- MAINTAINERS | 2 + drivers/gpu/drm/i915/gvt/kvmgt.c | 17 +- drivers/s390/cio/vfio_ccw_ops.c | 17 +- drivers/s390/crypto/vfio_ap_ops.c | 13 +- drivers/vfio/mdev/mdev_core.c | 38 + drivers/vfio/mdev/mdev_driver.c | 22 + drivers/vfio/mdev/mdev_private.h | 2 + drivers/vfio/mdev/vfio_mdev.c | 45 +- drivers/virtio/Kconfig | 7 + drivers/virtio/Makefile | 1 + drivers/virtio/virtio_mdev.c | 409 +++++++++++ include/linux/mdev.h | 55 +- include/linux/mod_devicetable.h | 8 + include/linux/vfio_mdev.h | 52 ++ include/linux/virtio_mdev.h | 151 ++++ samples/Kconfig | 7 + samples/vfio-mdev/Makefile | 1 + samples/vfio-mdev/mbochs.c | 19 +- samples/vfio-mdev/mdpy.c | 19 +- samples/vfio-mdev/mtty.c | 17 +- samples/vfio-mdev/mvnet.c | 691 ++++++++++++++++++ scripts/mod/devicetable-offsets.c | 3 + scripts/mod/file2alias.c | 10 + 24 files changed, 1541 insertions(+), 87 deletions(-) create mode 100644 drivers/virtio/virtio_mdev.c create mode 100644 include/linux/vfio_mdev.h create mode 100644 include/linux/virtio_mdev.h create mode 100644 samples/vfio-mdev/mvnet.c -- 2.19.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V4 0/6] mdev based hardware virtio offloading support Date: Thu, 17 Oct 2019 18:48:30 +0800 Message-ID: <20191017104836.32464-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, kevin.tian@intel.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, zhi.a.wang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com List-Id: dri-devel@lists.freedesktop.org SGkgYWxsOgoKVGhlcmUgYXJlIGhhcmR3YXJlcyB0aGF0IGNhbiBkbyB2aXJ0aW8gZGF0YXBhdGgg b2ZmbG9hZGluZyB3aGlsZQpoYXZpbmcgaXRzIG93biBjb250cm9sIHBhdGguIFRoaXMgcGF0aCB0 cmllcyB0byBpbXBsZW1lbnQgYSBtZGV2IGJhc2VkCnVuaWZpZWQgQVBJIHRvIHN1cHBvcnQgdXNp bmcga2VybmVsIHZpcnRpbyBkcml2ZXIgdG8gZHJpdmUgdGhvc2UKZGV2aWNlcy4gVGhpcyBpcyBk b25lIGJ5IGludHJvZHVjaW5nIGEgbmV3IG1kZXYgdHJhbnNwb3J0IGZvciB2aXJ0aW8KKHZpcnRp b19tZGV2KSBhbmQgcmVnaXN0ZXIgaXRzZWxmIGFzIGEgbmV3IGtpbmQgb2YgbWRldiBkcml2ZXIu IFRoZW4KaXQgcHJvdmlkZXMgYSB1bmlmaWVkIHdheSBmb3Iga2VybmVsIHZpcnRpbyBkcml2ZXIg dG8gdGFsayB3aXRoIG1kZXYKZGV2aWNlIGltcGxlbWVudGF0aW9uLgoKVGhvdWdoIHRoZSBzZXJp ZXMgb25seSBjb250YWlucyBrZXJuZWwgZHJpdmVyIHN1cHBvcnQsIHRoZSBnb2FsIGlzIHRvCm1h a2UgdGhlIHRyYW5zcG9ydCBnZW5lcmljIGVub3VnaCB0byBzdXBwb3J0IHVzZXJzcGFjZSBkcml2 ZXJzLiBUaGlzCm1lYW5zIHZob3N0LW1kZXZbMV0gY291bGQgYmUgYnVpbHQgb24gdG9wIGFzIHdl bGwgYnkgcmVzdWluZyB0aGUKdHJhbnNwb3J0LgoKQSBzYW1wbGUgZHJpdmVyIGlzIGFsc28gaW1w bGVtZW50ZWQgd2hpY2ggc2ltdWxhdGUgYSB2aXJpdG8tbmV0Cmxvb3BiYWNrIGV0aGVybmV0IGRl dmljZSBvbiB0b3Agb2YgdnJpbmdoICsgd29ya3F1ZXVlLiBUaGlzIGNvdWxkIGJlCnVzZWQgYXMg YSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHJlYWwgaGFyZHdhcmUgZHJpdmVyLgoKQWxz byBhIHJlYWwgSUNGIFZGIGRyaXZlciB3YXMgYWxzbyBwb3N0ZWQgaGVyZVsyXSB3aGljaCBpcyBh IGdvb2QKcmVmZXJlbmNlIGZvciB2ZW5kb3JzIHdobyBpcyBpbnRlcmVzdGVkIGluIHRoZWlyIG93 biB2aXJ0aW8gZGF0YXBhdGgKb2ZmbG9hZGluZyBwcm9kdWN0LgoKQ29uc2lkZXIgbWRldiBmcmFt ZXdvcmsgb25seSBzdXBwb3J0IFZGSU8gZGV2aWNlIGFuZCBkcml2ZXIgcmlnaHQgbm93LAp0aGlz IHNlcmllcyBhbHNvIGV4dGVuZCBpdCB0byBzdXBwb3J0IG90aGVyIHR5cGVzLiBUaGlzIGlzIGRv bmUKdGhyb3VnaCBpbnRyb2R1Y2luZyBjbGFzcyBpZCB0byB0aGUgZGV2aWNlIGFuZCBwYWlyaW5n IGl0IHdpdGgKaWRfdGFsYmUgY2xhaW1lZCBieSB0aGUgZHJpdmVyLiBPbiB0b3AsIHRoaXMgc2Vy aXMgYWxzbyBkZWNvdXBsZQpkZXZpY2Ugc3BlY2lmaWMgcGFyZW50cyBvcHMgb3V0IG9mIHRoZSBj b21tb24gb25lcy4KClBrdGdlbiB0ZXN0IHdhcyBkb25lIHdpdGggdmlyaXRvLW5ldCArIG12bmV0 IGxvb3AgYmFjayBkZXZpY2UuCgpQbGVhc2UgcmV2aWV3LgoKWzFdIGh0dHBzOi8vbGttbC5vcmcv bGttbC8yMDE5LzkvMjYvMTUKWzJdIGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE5LzEwLzE1LzEy MjYKCkNoYW5nZXMgZnJvbSBWMzoKCi0gZG9jdW1lbnQgdGhhdCBjbGFzcyBpZCAoZGV2aWNlIG9w cykgbXVzdCBiZSBzcGVjaWZpZWQgaW4gY3JlYXRlKCkKLSBhZGQgV0FSTigpIHdoZW4gdHJ5aW5n IHRvIHNldCBjbGFzc19pZCB3aGVuIGl0IGhhcyBhbHJlYWR5IHNldAotIGFkZCBXQVJOKCkgd2hl biBjbGFzc19pZCBpcyBub3Qgc3BlY2lmaWVkIGluIGNyZWF0ZSgpIGFuZCBjb3JyZWN0bHkKICBy ZXR1cm4gYW4gZXJyb3IgaW4gdGhpcyBjYXNlCi0gY29ycmVjdCB0aGUgcHJvdG90eXBlIG9mIG1k ZXZfc2V0X2NsYXNzKCkgaW4gdGhlIGRvYwotIGFkZCBkb2N1bWVudGlvbiBvZiBtZGV2X3NldF9j bGFzcygpCi0gcmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeSAiY2xhc3NfaWRfZmFpbCIgbGFiZWwgd2hl biBjbGFzcyBpZCBpcyBub3QKICBzcGVjaWZpZWQgaW4gY3JlYXRlKCkKLSBjb252ZXJ0IGlkX3Rh YmxlIGluIHZmaW9fbWRldiB0byBjb25zdAotIG1vdmUgbWRldl9zZXRfY2xhc3MgYW5kIGl0cyBm cmllbmRzIGFmdGVyIG1kZXZfdXVpZCgpCi0gc3VxYXNoIHRoZSBwYXRjaCBvZiBidXMgdWV2ZW50 IGludG8gcGF0Y2ggb2YgaW50cm9kdWNpbmcgY2xhc3MgaWQKLSB0d2VhayB0aGUgd29yZHMgaW4g dGhlIGRvY3MgcGVyIENvcm5lbGlhIHN1Z2dlc3Rpb24KLSB0aWUgY2xhc3NfaWQgYW5kIGRldmlj ZSBvcHMgdGhyb3VnaCBjbGFzcyBzcGVjaWZpYyBpbml0aWFsaXphdGlvbgogIHJvdXRpbmUgbGlr ZSBtZGV2X3NldF92ZmlvX29wcygpCi0gdHlwb3MgZml4ZXMgaW4gdGhlIGRvY3Mgb2YgdmlydGlv LW1kZXYgY2FsbGJhY2tzCi0gZG9jdW1lbnQgdGhlIHVzYWdlIG9mIHZpcnRxdWV1ZXMgaW4gc3Ry dWN0IHZpcnRpb19tZGV2X2RldmljZQotIHJlbW92ZSB0aGUgdXNlbGVzcyB2cXMgYXJyYXkgaW4g c3RydWN0IHZpcnRpb19tZGV2X2RldmljZQotIHJlbmFtZSBNREVWX0lEX1hYWCB0byBNREVWX0NM QVNTX0lEX1hYWAoKQ2hhbmdlcyBmcm9tIFYyOgoKLSBmYWlsIHdoZW4gY2xhc3NfaWQgaXMgbm90 IHNwZWNpZmllZAotIGRyb3AgdGhlIHZyaW5naCBwYXRjaAotIG1hdGNoIHRoZSBkb2MgdG8gdGhl IGNvZGUKLSB0d2VhayB0aGUgY29tbWl0IGxvZwotIG1vdmUgZGV2aWNlX29wcyBmcm9tIHBhcmVu dCB0byBtZGV2IGRldmljZQotIHJlbW92ZSB0aGUgdW51c2VkIE1ERVZfSURfVkhPU1QKCkNoYW5n ZXMgZnJvbSBWMToKCi0gbW92ZSB2aXJ0aW9fbWRldi5jIHRvIGRyaXZlcnMvdmlydGlvCi0gc3Rv cmUgY2xhc3NfaWQgaW4gbWRldl9kZXZpY2UgaW5zdGVhZCBvZiBtZGV2X3BhcmVudAotIHN0b3Jl IGRldmljZV9vcHMgaW4gbWRldl9kZXZpY2UgaW5zdGVhZCBvZiBtZGV2X3BhcmVudAotIHJlb3Jk ZXIgdGhlIHBhdGNoLCB2cmluZ2ggZml4IGNvbWVzIGZpcnN0Ci0gcmVhbGx5IHNpbGVudCBjb21w aWxpbmcgd2FybmluZ3MKLSByZWFsbHkgc3dpdGNoIHRvIHVzZSB1MTYgZm9yIGNsYXNzX2lkCi0g dWV2ZW50IGFuZCBtb2Rwb3N0IHN1cHBvcnQgZm9yIG1kZXYgY2xhc3NfaWQKLSB2cmFpb3VzIHR3 ZWFrcyBwZXIgY29tbWVudHMgZnJvbSBQYXJhdgoKQ2hhbmdlcyBmcm9tIFJGQy1WMjoKCi0gc2ls ZW50IGNvbXBpbGUgd2FybmluZ3Mgb24gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uCi0gdXNl IHUxNiBpbnN0ZWFkIHU4IGZvciBjbGFzcyBpZAotIHJlc2V2ZSBNREVWX0lEX1ZIT1NUIGZvciBm dXR1cmUgdmhvc3QtbWRldiB3b3JrCi0gaW50cm9kdWNlICJ2aXJ0aW8iIHR5cGUgZm9yIG12bmV0 IGFuZCBtYWtlICJ2aG9zdCIgdHlwZSBmb3IgZnV0dXJlCiAgd29yawotIGFkZCBlbnRyaWVzIGlu IE1BSU5UQUlORVIKLSB0d2VhayBhbmQgdHlwb3MgZml4ZXMgaW4gY29tbWl0IGxvZwoKQ2hhbmdl cyBmcm9tIFJGQy1WMToKCi0gcmVuYW1lIGRldmljZSBpZCB0byBjbGFzcyBpZAotIGFkZCBkb2Nz IGZvciBjbGFzcyBpZCBhbmQgZGV2aWNlIHNwZWNpZmljIG9wcyAoZGV2aWNlX29wcykKLSBzcGxp dCBkZXZpY2Vfb3BzIGludG8gc2VwZXJhdGUgaGVhZGVycwotIGRyb3AgdGhlIG1kZXZfc2V0X2Rt YV9vcHMoKQotIHVzZSBkZXZpY2Vfb3BzIHRvIGltcGxlbWVudCB0aGUgdHJhbnNwb3J0IEFQSSwg dGhlbiBpdCdzIG5vdCBhIHBhcnQKICBvZiBVQVBJIGFueSBtb3JlCi0gdXNlIEdGUF9BVE9NSUMg aW4gbXZuZXQgc2FtcGxlIGRldmljZSBhbmQgb3RoZXIgdHdlYWtzCi0gc2V0X3ZyaW5nX2Jhc2Uv Z2V0X3ZyaW5nX2Jhc2Ugc3VwcG9ydCBmb3IgbXZuZXQgZGV2aWNlCgpKYXNvbiBXYW5nICg2KToK ICBtZGV2OiBjbGFzcyBpZCBzdXBwb3J0CiAgbW9kcG9zdDogYWRkIHN1cHBvcnQgZm9yIG1kZXYg Y2xhc3MgaWQKICBtZGV2OiBpbnRyb2R1Y2UgZGV2aWNlIHNwZWNpZmljIG9wcwogIG1kZXY6IGlu dHJvZHVjZSB2aXJ0aW8gZGV2aWNlIGFuZCBpdHMgZGV2aWNlIG9wcwogIHZpcnRpbzogaW50cm9k dWNlIGEgbWRldiBiYXNlZCB0cmFuc3BvcnQKICBkb2NzOiBzYW1wbGUgZHJpdmVyIHRvIGRlbW9u c3RyYXRlIGhvdyB0byBpbXBsZW1lbnQgdmlydGlvLW1kZXYKICAgIGZyYW1ld29yawoKIC4uLi9k cml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2aWNlLnJzdCAgICAgICB8ICAyMiArLQogTUFJTlRB SU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jICAgICAgICAgICAgICB8ICAxNyArLQogZHJpdmVycy9z MzkwL2Npby92ZmlvX2Njd19vcHMuYyAgICAgICAgICAgICAgIHwgIDE3ICstCiBkcml2ZXJzL3Mz OTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgICAgICAgICAgICAgfCAgMTMgKy0KIGRyaXZlcnMvdmZp by9tZGV2L21kZXZfY29yZS5jICAgICAgICAgICAgICAgICB8ICAzOCArCiBkcml2ZXJzL3ZmaW8v bWRldi9tZGV2X2RyaXZlci5jICAgICAgICAgICAgICAgfCAgMjIgKwogZHJpdmVycy92ZmlvL21k ZXYvbWRldl9wcml2YXRlLmggICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvdmZpby9tZGV2 L3ZmaW9fbWRldi5jICAgICAgICAgICAgICAgICB8ICA0NSArLQogZHJpdmVycy92aXJ0aW8vS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIGRyaXZlcnMvdmlydGlvL01ha2Vm aWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL3ZpcnRpby92aXJ0aW9f bWRldi5jICAgICAgICAgICAgICAgICAgfCA0MDkgKysrKysrKysrKysKIGluY2x1ZGUvbGludXgv bWRldi5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NSArLQogaW5jbHVkZS9saW51eC9t b2RfZGV2aWNldGFibGUuaCAgICAgICAgICAgICAgIHwgICA4ICsKIGluY2x1ZGUvbGludXgvdmZp b19tZGV2LmggICAgICAgICAgICAgICAgICAgICB8ICA1MiArKwogaW5jbHVkZS9saW51eC92aXJ0 aW9fbWRldi5oICAgICAgICAgICAgICAgICAgIHwgMTUxICsrKysKIHNhbXBsZXMvS2NvbmZpZyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBzYW1wbGVzL3ZmaW8tbWRldi9N YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc2FtcGxlcy92ZmlvLW1kZXYvbWJv Y2hzLmMgICAgICAgICAgICAgICAgICAgIHwgIDE5ICstCiBzYW1wbGVzL3ZmaW8tbWRldi9tZHB5 LmMgICAgICAgICAgICAgICAgICAgICAgfCAgMTkgKy0KIHNhbXBsZXMvdmZpby1tZGV2L210dHku YyAgICAgICAgICAgICAgICAgICAgICB8ICAxNyArLQogc2FtcGxlcy92ZmlvLW1kZXYvbXZuZXQu YyAgICAgICAgICAgICAgICAgICAgIHwgNjkxICsrKysrKysrKysrKysrKysrKwogc2NyaXB0cy9t b2QvZGV2aWNldGFibGUtb2Zmc2V0cy5jICAgICAgICAgICAgIHwgICAzICsKIHNjcmlwdHMvbW9k L2ZpbGUyYWxpYXMuYyAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiAyNCBmaWxlcyBjaGFu Z2VkLCAxNTQxIGluc2VydGlvbnMoKyksIDg3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdmlydGlvL3ZpcnRpb19tZGV2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL2xpbnV4L3ZmaW9fbWRldi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC92 aXJ0aW9fbWRldi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc2FtcGxlcy92ZmlvLW1kZXYvbXZuZXQu YwoKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs