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 8A9DCC00140 for ; Tue, 2 Aug 2022 15:56:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237215AbiHBP40 (ORCPT ); Tue, 2 Aug 2022 11:56:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237846AbiHBP4F (ORCPT ); Tue, 2 Aug 2022 11:56:05 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id E252549B47 for ; Tue, 2 Aug 2022 08:55:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1659455746; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CrN9dTcJ526THvYUpBUNsHyrLG3+8hg7Xx2pB/otObU=; b=IAcsyJLxPTUgR8RqssvrysJ9zlwIyuLTp7HBSiskHTe3DO8Q/srTRZTtg6KkPzEm1C0+Uc TSPFeDpH3oyB7q25l6EhL15vdE3uLXtHaBKv8kfdX3BXVyaUBQ7/lLizhXKCA7b7UqmVfU GWK84oNIpeDezxpfU5q+dK0K8mHS7lI= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-671-MofozQC7MSaWBPzxDfMUUw-1; Tue, 02 Aug 2022 11:55:45 -0400 X-MC-Unique: MofozQC7MSaWBPzxDfMUUw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6A9248037AF; Tue, 2 Aug 2022 15:55:45 +0000 (UTC) Received: from localhost (unknown [10.39.192.238]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 00AE1400DEF8; Tue, 2 Aug 2022 15:55:44 +0000 (UTC) From: Cornelia Huck To: Ricardo =?utf-8?Q?Ca=C3=B1uelo?= , linux-doc@vger.kernel.org Cc: mst@redhat.com, kernel@collabora.com, virtualization@lists.linux-foundation.org Subject: Re: [PATCH] docs: driver-api: virtio: virtio on Linux In-Reply-To: <20220802124222.3563378-1-ricardo.canuelo@collabora.com> Organization: Red Hat GmbH References: <20220802124222.3563378-1-ricardo.canuelo@collabora.com> User-Agent: Notmuch/0.36 (https://notmuchmail.org) Date: Tue, 02 Aug 2022 17:55:43 +0200 Message-ID: <87pmhi8wsg.fsf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On Tue, Aug 02 2022, Ricardo Ca=C3=B1uelo w= rote: > Basic doc about Virtio on Linux and a short tutorial on Virtio drivers. > Minor fixes to existing virtio kerneldocs. I think kerneldoc updates should be split out into a separate patch. [No proper review, just some things I noticed below.] > > Signed-off-by: Ricardo Ca=C3=B1uelo > --- > Documentation/driver-api/index.rst | 1 + > Documentation/driver-api/virtio/index.rst | 11 + > Documentation/driver-api/virtio/virtio.rst | 274 ++++++++++++++++++ > .../virtio/writing_virtio_drivers.rst | 190 ++++++++++++ > MAINTAINERS | 1 + > include/linux/virtio.h | 6 +- > include/linux/virtio_config.h | 6 +- > include/uapi/linux/virtio_ring.h | 16 +- > 8 files changed, 494 insertions(+), 11 deletions(-) > create mode 100644 Documentation/driver-api/virtio/index.rst > create mode 100644 Documentation/driver-api/virtio/virtio.rst > create mode 100644 Documentation/driver-api/virtio/writing_virtio_driver= s.rst > (...) > diff --git a/Documentation/driver-api/virtio/virtio.rst b/Documentation/d= river-api/virtio/virtio.rst > new file mode 100644 > index 000000000000..049a8aefad92 > --- /dev/null > +++ b/Documentation/driver-api/virtio/virtio.rst > @@ -0,0 +1,274 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +.. _virtio: > + > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +Virtio on Linux > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +Introduction > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +Virtio is an open standard interface for virtual machines to access There are devices that implement virtio in hardware. > +paravirtualized devices, ie. devices that aren't emulated by a > +hypervisor, but rather real host devices that are exposed by the > +hypervisor to the guest to achieve native performance. In other words, > +it provides a communication mechanism for a guest OS to use devices on > +the host machine. > + > +The concrete hardware details of the real host devices are abstracted in= the > +hypervisor, which provides a set of simplified virtual devices that > +implement the Virtio protocol. These devices are defined in the Virtio > +spec [1] and they're the devices that the guest OS will ultimately > +handle. So, in that regard, the guest OS knows it's running in a virtual > +environment and that it needs to use the appropriate Virtio drivers to > +handle the devices instead of the regular device drivers it'd use in a > +native or purely virtual environment (with emulated devices). > + > + > +Device - Driver communication: virtqueues > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +Although the Virtio devices are really an abstraction layer in the > +hypervisor, they're exposed to the guest as if they are physical devices > +either PCI or MMIO-based. We refer to that as the transport method and Please also mention CCW (s390 channel devices), as Linux supports it as well. > +it's orthogonal to the device itself. The Virtio spec defines these two > +and other transport methods in detail, including device discovery, > +capabilities and interrupt handling. (...) > +Device discovery and probing > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > + > +How a virtio device is found and configured by the kernel depends on how > +the hypervisor defines it. Taking the `QEMU virtio-console > +`__ > +device as an example, which uses PCI as a transport method, the device Should be the "virtio-console (...) device when using PCI...", I guess? > +will present itself in the PCI bus with vendor 0x1af4 (RedHat, Inc.) and > +device id 0x1003 (Virtio console), as defined in the spec, so the kernel > +will detect it as it would do with any other PCI device. (...) > +References > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +[1] Virtio Spec v1.1: > +https://docs.oasis-open.org/virtio/virtio/v1.1/virtio-v1.1.html v1.2 is out now :) (I think it would be better to refer to the base spec directory?) > + > +[2] Virtqueues and virtio ring: How the data travels > +https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-trave= ls > + > +.. rubric:: Footnotes > + > +.. [#f1] that's why they may be also referred as virtrings. > diff --git a/Documentation/driver-api/virtio/writing_virtio_drivers.rst b= /Documentation/driver-api/virtio/writing_virtio_drivers.rst > new file mode 100644 > index 000000000000..5cb088b817ae > --- /dev/null > +++ b/Documentation/driver-api/virtio/writing_virtio_drivers.rst > @@ -0,0 +1,190 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +.. _writing_virtio_drivers: > + > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +Writing Virtio Drivers > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +Introduction > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +The `Virtio spec > +`__ Chapter 5 ("Device Types") in the virtio specification [1] (and add the same reference as above in this file)? > +defines all the supported Virtio device types. Since these devices are, > +by definition, meant as abstractions for a wide variety of real > +hardware, the addition of new virtio drivers is not expected to be very > +frequent. Still, this document serves as a basic guideline for driver > +programmers that need to hack a new Virtio driver or understand the > +essentials of the existing ones. See :ref:`Virtio on Linux ` for > +a general overview of Virtio. Very important point here: Don't add a device driver for a device that has no reserved device id in the spec. Preferably, don't add a device driver if no spec is available (it is useful to develop devices/drivers/spec at the same time to avoid incompatibilities/fixups later; and you can consider a device spec "final" if it has been accepted into the spec, even if it isn't in a released version yet.) (...) > +This assumes the device is of a new virtio device type not defined > +before: ``VIRTIO_DEVICE_DUMMY``, which we should define in > +include/uapi/linux/virtio_ids.h. The device has only one virtqueue which Don't do that :) You need to make clear that VIRTIO_DEVICE_DUMMY is only a placeholder. > +is meant to be used to send data from the host to the guest. 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 smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 BC07CC00140 for ; Tue, 2 Aug 2022 15:55:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 036DD8144D; Tue, 2 Aug 2022 15:55:53 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 036DD8144D Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=IAcsyJLx X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pQm-Hp-vjwan; Tue, 2 Aug 2022 15:55:51 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 37E238130D; Tue, 2 Aug 2022 15:55:51 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 37E238130D Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 04222C0032; Tue, 2 Aug 2022 15:55:51 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6B443C002D for ; Tue, 2 Aug 2022 15:55:49 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 38DBA408B6 for ; Tue, 2 Aug 2022 15:55:49 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 38DBA408B6 Authentication-Results: smtp2.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=IAcsyJLx 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 711hv81lcJgK for ; Tue, 2 Aug 2022 15:55:48 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 1D49E401A4 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by smtp2.osuosl.org (Postfix) with ESMTPS id 1D49E401A4 for ; Tue, 2 Aug 2022 15:55:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1659455746; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CrN9dTcJ526THvYUpBUNsHyrLG3+8hg7Xx2pB/otObU=; b=IAcsyJLxPTUgR8RqssvrysJ9zlwIyuLTp7HBSiskHTe3DO8Q/srTRZTtg6KkPzEm1C0+Uc TSPFeDpH3oyB7q25l6EhL15vdE3uLXtHaBKv8kfdX3BXVyaUBQ7/lLizhXKCA7b7UqmVfU GWK84oNIpeDezxpfU5q+dK0K8mHS7lI= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-671-MofozQC7MSaWBPzxDfMUUw-1; Tue, 02 Aug 2022 11:55:45 -0400 X-MC-Unique: MofozQC7MSaWBPzxDfMUUw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 6A9248037AF; Tue, 2 Aug 2022 15:55:45 +0000 (UTC) Received: from localhost (unknown [10.39.192.238]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 00AE1400DEF8; Tue, 2 Aug 2022 15:55:44 +0000 (UTC) From: Cornelia Huck To: Ricardo =?utf-8?Q?Ca=C3=B1uelo?= , linux-doc@vger.kernel.org Subject: Re: [PATCH] docs: driver-api: virtio: virtio on Linux In-Reply-To: <20220802124222.3563378-1-ricardo.canuelo@collabora.com> Organization: Red Hat GmbH References: <20220802124222.3563378-1-ricardo.canuelo@collabora.com> User-Agent: Notmuch/0.36 (https://notmuchmail.org) Date: Tue, 02 Aug 2022 17:55:43 +0200 Message-ID: <87pmhi8wsg.fsf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 Cc: kernel@collabora.com, virtualization@lists.linux-foundation.org, mst@redhat.com 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" T24gVHVlLCBBdWcgMDIgMjAyMiwgUmljYXJkbyBDYcOxdWVsbyA8cmljYXJkby5jYW51ZWxvQGNv bGxhYm9yYS5jb20+IHdyb3RlOgoKPiBCYXNpYyBkb2MgYWJvdXQgVmlydGlvIG9uIExpbnV4IGFu ZCBhIHNob3J0IHR1dG9yaWFsIG9uIFZpcnRpbyBkcml2ZXJzLgo+IE1pbm9yIGZpeGVzIHRvIGV4 aXN0aW5nIHZpcnRpbyBrZXJuZWxkb2NzLgoKSSB0aGluayBrZXJuZWxkb2MgdXBkYXRlcyBzaG91 bGQgYmUgc3BsaXQgb3V0IGludG8gYSBzZXBhcmF0ZSBwYXRjaC4KCltObyBwcm9wZXIgcmV2aWV3 LCBqdXN0IHNvbWUgdGhpbmdzIEkgbm90aWNlZCBiZWxvdy5dCgo+Cj4gU2lnbmVkLW9mZi1ieTog UmljYXJkbyBDYcOxdWVsbyA8cmljYXJkby5jYW51ZWxvQGNvbGxhYm9yYS5jb20+Cj4gLS0tCj4g IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9pbmRleC5yc3QgICAgICAgICAgICB8ICAgMSArCj4g IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vaW5kZXgucnN0ICAgICB8ICAxMSArCj4g IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vdmlydGlvLnJzdCAgICB8IDI3NCArKysr KysrKysrKysrKysrKysKPiAgLi4uL3ZpcnRpby93cml0aW5nX3ZpcnRpb19kcml2ZXJzLnJzdCAg ICAgICAgIHwgMTkwICsrKysrKysrKysrKwo+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBpbmNsdWRlL2xpbnV4L3ZpcnRpby5oICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KPiAgaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmln LmggICAgICAgICAgICAgICAgIHwgICA2ICstCj4gIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9f cmluZy5oICAgICAgICAgICAgICB8ICAxNiArLQo+ICA4IGZpbGVzIGNoYW5nZWQsIDQ5NCBpbnNl cnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50 YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vaW5kZXgucnN0Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBE b2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmlydGlvL3ZpcnRpby5yc3QKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vd3JpdGluZ192aXJ0aW9fZHJp dmVycy5yc3QKPgoKKC4uLikKCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFw aS92aXJ0aW8vdmlydGlvLnJzdCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vdmly dGlvLnJzdAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNDlh OGFlZmFkOTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBp L3ZpcnRpby92aXJ0aW8ucnN0Cj4gQEAgLTAsMCArMSwyNzQgQEAKPiArLi4gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiArCj4gKy4uIF92aXJ0aW86Cj4gKwo+ICs9PT09PT09PT09 PT09PT0KPiArVmlydGlvIG9uIExpbnV4Cj4gKz09PT09PT09PT09PT09PQo+ICsKPiArSW50cm9k dWN0aW9uCj4gKz09PT09PT09PT09PQo+ICsKPiArVmlydGlvIGlzIGFuIG9wZW4gc3RhbmRhcmQg aW50ZXJmYWNlIGZvciB2aXJ0dWFsIG1hY2hpbmVzIHRvIGFjY2VzcwoKVGhlcmUgYXJlIGRldmlj ZXMgdGhhdCBpbXBsZW1lbnQgdmlydGlvIGluIGhhcmR3YXJlLgoKPiArcGFyYXZpcnR1YWxpemVk IGRldmljZXMsIGllLiBkZXZpY2VzIHRoYXQgYXJlbid0IGVtdWxhdGVkIGJ5IGEKPiAraHlwZXJ2 aXNvciwgYnV0IHJhdGhlciByZWFsIGhvc3QgZGV2aWNlcyB0aGF0IGFyZSBleHBvc2VkIGJ5IHRo ZQo+ICtoeXBlcnZpc29yIHRvIHRoZSBndWVzdCB0byBhY2hpZXZlIG5hdGl2ZSBwZXJmb3JtYW5j ZS4gSW4gb3RoZXIgd29yZHMsCj4gK2l0IHByb3ZpZGVzIGEgY29tbXVuaWNhdGlvbiBtZWNoYW5p c20gZm9yIGEgZ3Vlc3QgT1MgdG8gdXNlIGRldmljZXMgb24KPiArdGhlIGhvc3QgbWFjaGluZS4K PiArCj4gK1RoZSBjb25jcmV0ZSBoYXJkd2FyZSBkZXRhaWxzIG9mIHRoZSByZWFsIGhvc3QgZGV2 aWNlcyBhcmUgYWJzdHJhY3RlZCBpbiB0aGUKPiAraHlwZXJ2aXNvciwgd2hpY2ggcHJvdmlkZXMg YSBzZXQgb2Ygc2ltcGxpZmllZCB2aXJ0dWFsIGRldmljZXMgdGhhdAo+ICtpbXBsZW1lbnQgdGhl IFZpcnRpbyBwcm90b2NvbC4gVGhlc2UgZGV2aWNlcyBhcmUgZGVmaW5lZCBpbiB0aGUgVmlydGlv Cj4gK3NwZWMgWzFdIGFuZCB0aGV5J3JlIHRoZSBkZXZpY2VzIHRoYXQgdGhlIGd1ZXN0IE9TIHdp bGwgdWx0aW1hdGVseQo+ICtoYW5kbGUuIFNvLCBpbiB0aGF0IHJlZ2FyZCwgdGhlIGd1ZXN0IE9T IGtub3dzIGl0J3MgcnVubmluZyBpbiBhIHZpcnR1YWwKPiArZW52aXJvbm1lbnQgYW5kIHRoYXQg aXQgbmVlZHMgdG8gdXNlIHRoZSBhcHByb3ByaWF0ZSBWaXJ0aW8gZHJpdmVycyB0bwo+ICtoYW5k bGUgdGhlIGRldmljZXMgaW5zdGVhZCBvZiB0aGUgcmVndWxhciBkZXZpY2UgZHJpdmVycyBpdCdk IHVzZSBpbiBhCj4gK25hdGl2ZSBvciBwdXJlbHkgdmlydHVhbCBlbnZpcm9ubWVudCAod2l0aCBl bXVsYXRlZCBkZXZpY2VzKS4KPiArCj4gKwo+ICtEZXZpY2UgLSBEcml2ZXIgY29tbXVuaWNhdGlv bjogdmlydHF1ZXVlcwo+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQo+ICsKPiArQWx0aG91Z2ggdGhlIFZpcnRpbyBkZXZpY2VzIGFyZSByZWFsbHkgYW4gYWJzdHJh Y3Rpb24gbGF5ZXIgaW4gdGhlCj4gK2h5cGVydmlzb3IsIHRoZXkncmUgZXhwb3NlZCB0byB0aGUg Z3Vlc3QgYXMgaWYgdGhleSBhcmUgcGh5c2ljYWwgZGV2aWNlcwo+ICtlaXRoZXIgUENJIG9yIE1N SU8tYmFzZWQuIFdlIHJlZmVyIHRvIHRoYXQgYXMgdGhlIHRyYW5zcG9ydCBtZXRob2QgYW5kCgpQ bGVhc2UgYWxzbyBtZW50aW9uIENDVyAoczM5MCBjaGFubmVsIGRldmljZXMpLCBhcyBMaW51eCBz dXBwb3J0cyBpdCBhcwp3ZWxsLgoKPiAraXQncyBvcnRob2dvbmFsIHRvIHRoZSBkZXZpY2UgaXRz ZWxmLiBUaGUgVmlydGlvIHNwZWMgZGVmaW5lcyB0aGVzZSB0d28KPiArYW5kIG90aGVyIHRyYW5z cG9ydCBtZXRob2RzIGluIGRldGFpbCwgaW5jbHVkaW5nIGRldmljZSBkaXNjb3ZlcnksCj4gK2Nh cGFiaWxpdGllcyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLgoKKC4uLikKCj4gK0RldmljZSBkaXNj b3ZlcnkgYW5kIHByb2JpbmcKPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICsKPiAr SG93IGEgdmlydGlvIGRldmljZSBpcyBmb3VuZCBhbmQgY29uZmlndXJlZCBieSB0aGUga2VybmVs IGRlcGVuZHMgb24gaG93Cj4gK3RoZSBoeXBlcnZpc29yIGRlZmluZXMgaXQuIFRha2luZyB0aGUg YFFFTVUgdmlydGlvLWNvbnNvbGUKPiArPGh0dHBzOi8vZ2l0bGFiLmNvbS9xZW11LXByb2plY3Qv cWVtdS8tL2Jsb2IvbWFzdGVyL2h3L2NoYXIvdmlydGlvLWNvbnNvbGUuYz5gX18KPiArZGV2aWNl IGFzIGFuIGV4YW1wbGUsIHdoaWNoIHVzZXMgUENJIGFzIGEgdHJhbnNwb3J0IG1ldGhvZCwgdGhl IGRldmljZQoKU2hvdWxkIGJlIHRoZSAidmlydGlvLWNvbnNvbGUgKC4uLikgZGV2aWNlIHdoZW4g dXNpbmcgUENJLi4uIiwgSSBndWVzcz8KCj4gK3dpbGwgcHJlc2VudCBpdHNlbGYgaW4gdGhlIFBD SSBidXMgd2l0aCB2ZW5kb3IgMHgxYWY0IChSZWRIYXQsIEluYy4pIGFuZAo+ICtkZXZpY2UgaWQg MHgxMDAzIChWaXJ0aW8gY29uc29sZSksIGFzIGRlZmluZWQgaW4gdGhlIHNwZWMsIHNvIHRoZSBr ZXJuZWwKPiArd2lsbCBkZXRlY3QgaXQgYXMgaXQgd291bGQgZG8gd2l0aCBhbnkgb3RoZXIgUENJ IGRldmljZS4KCiguLi4pCgo+ICtSZWZlcmVuY2VzCj4gKz09PT09PT09PT0KPiArCj4gK1sxXSBW aXJ0aW8gU3BlYyB2MS4xOgo+ICtodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvdmlydGlvL3Zp cnRpby92MS4xL3ZpcnRpby12MS4xLmh0bWwKCnYxLjIgaXMgb3V0IG5vdyA6KQoKKEkgdGhpbmsg aXQgd291bGQgYmUgYmV0dGVyIHRvIHJlZmVyIHRvIHRoZSBiYXNlIHNwZWMgZGlyZWN0b3J5PykK Cj4gKwo+ICtbMl0gVmlydHF1ZXVlcyBhbmQgdmlydGlvIHJpbmc6IEhvdyB0aGUgZGF0YSB0cmF2 ZWxzCj4gK2h0dHBzOi8vd3d3LnJlZGhhdC5jb20vZW4vYmxvZy92aXJ0cXVldWVzLWFuZC12aXJ0 aW8tcmluZy1ob3ctZGF0YS10cmF2ZWxzCj4gKwo+ICsuLiBydWJyaWM6OiBGb290bm90ZXMKPiAr Cj4gKy4uIFsjZjFdIHRoYXQncyB3aHkgdGhleSBtYXkgYmUgYWxzbyByZWZlcnJlZCBhcyB2aXJ0 cmluZ3MuCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vd3Jp dGluZ192aXJ0aW9fZHJpdmVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmlydGlv L3dyaXRpbmdfdmlydGlvX2RyaXZlcnMucnN0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjVjYjA4OGI4MTdhZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1 bWVudGF0aW9uL2RyaXZlci1hcGkvdmlydGlvL3dyaXRpbmdfdmlydGlvX2RyaXZlcnMucnN0Cj4g QEAgLTAsMCArMSwxOTAgQEAKPiArLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArCj4gKy4uIF93cml0aW5nX3ZpcnRpb19kcml2ZXJzOgo+ICsKPiArPT09PT09PT09PT09PT09 PT09PT09PQo+ICtXcml0aW5nIFZpcnRpbyBEcml2ZXJzCj4gKz09PT09PT09PT09PT09PT09PT09 PT0KPiArCj4gK0ludHJvZHVjdGlvbgo+ICs9PT09PT09PT09PT0KPiArCj4gK1RoZSBgVmlydGlv IHNwZWMKPiArPGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy92aXJ0aW8vdmlydGlvL3YxLjEv Y3MwMS92aXJ0aW8tdjEuMS1jczAxLmh0bWwjeDEtMTkzMDAwNT5gX18KCkNoYXB0ZXIgNSAoIkRl dmljZSBUeXBlcyIpIGluIHRoZSB2aXJ0aW8gc3BlY2lmaWNhdGlvbiBbMV0KCihhbmQgYWRkIHRo ZSBzYW1lIHJlZmVyZW5jZSBhcyBhYm92ZSBpbiB0aGlzIGZpbGUpPwoKPiArZGVmaW5lcyBhbGwg dGhlIHN1cHBvcnRlZCBWaXJ0aW8gZGV2aWNlIHR5cGVzLiBTaW5jZSB0aGVzZSBkZXZpY2VzIGFy ZSwKPiArYnkgZGVmaW5pdGlvbiwgbWVhbnQgYXMgYWJzdHJhY3Rpb25zIGZvciBhIHdpZGUgdmFy aWV0eSBvZiByZWFsCj4gK2hhcmR3YXJlLCB0aGUgYWRkaXRpb24gb2YgbmV3IHZpcnRpbyBkcml2 ZXJzIGlzIG5vdCBleHBlY3RlZCB0byBiZSB2ZXJ5Cj4gK2ZyZXF1ZW50LiBTdGlsbCwgdGhpcyBk b2N1bWVudCBzZXJ2ZXMgYXMgYSBiYXNpYyBndWlkZWxpbmUgZm9yIGRyaXZlcgo+ICtwcm9ncmFt bWVycyB0aGF0IG5lZWQgdG8gaGFjayBhIG5ldyBWaXJ0aW8gZHJpdmVyIG9yIHVuZGVyc3RhbmQg dGhlCj4gK2Vzc2VudGlhbHMgb2YgdGhlIGV4aXN0aW5nIG9uZXMuIFNlZSA6cmVmOmBWaXJ0aW8g b24gTGludXggPHZpcnRpbz5gIGZvcgo+ICthIGdlbmVyYWwgb3ZlcnZpZXcgb2YgVmlydGlvLgoK VmVyeSBpbXBvcnRhbnQgcG9pbnQgaGVyZTogRG9uJ3QgYWRkIGEgZGV2aWNlIGRyaXZlciBmb3Ig YSBkZXZpY2UgdGhhdApoYXMgbm8gcmVzZXJ2ZWQgZGV2aWNlIGlkIGluIHRoZSBzcGVjLiBQcmVm ZXJhYmx5LCBkb24ndCBhZGQgYSBkZXZpY2UKZHJpdmVyIGlmIG5vIHNwZWMgaXMgYXZhaWxhYmxl IChpdCBpcyB1c2VmdWwgdG8gZGV2ZWxvcApkZXZpY2VzL2RyaXZlcnMvc3BlYyBhdCB0aGUgc2Ft ZSB0aW1lIHRvIGF2b2lkIGluY29tcGF0aWJpbGl0aWVzL2ZpeHVwcwpsYXRlcjsgYW5kIHlvdSBj YW4gY29uc2lkZXIgYSBkZXZpY2Ugc3BlYyAiZmluYWwiIGlmIGl0IGhhcyBiZWVuCmFjY2VwdGVk IGludG8gdGhlIHNwZWMsIGV2ZW4gaWYgaXQgaXNuJ3QgaW4gYSByZWxlYXNlZCB2ZXJzaW9uIHll dC4pCgooLi4uKQoKPiArVGhpcyBhc3N1bWVzIHRoZSBkZXZpY2UgaXMgb2YgYSBuZXcgdmlydGlv IGRldmljZSB0eXBlIG5vdCBkZWZpbmVkCj4gK2JlZm9yZTogYGBWSVJUSU9fREVWSUNFX0RVTU1Z YGAsIHdoaWNoIHdlIHNob3VsZCBkZWZpbmUgaW4KPiAraW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRp b19pZHMuaC4gVGhlIGRldmljZSBoYXMgb25seSBvbmUgdmlydHF1ZXVlIHdoaWNoCgpEb24ndCBk byB0aGF0IDopIFlvdSBuZWVkIHRvIG1ha2UgY2xlYXIgdGhhdCBWSVJUSU9fREVWSUNFX0RVTU1Z IGlzIG9ubHkKYSBwbGFjZWhvbGRlci4KCj4gK2lzIG1lYW50IHRvIGJlIHVzZWQgdG8gc2VuZCBk YXRhIGZyb20gdGhlIGhvc3QgdG8gdGhlIGd1ZXN0LgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1 YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhm b3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u