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 96F9FC00140 for ; Mon, 8 Aug 2022 13:47:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232257AbiHHNrP (ORCPT ); Mon, 8 Aug 2022 09:47:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53022 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235211AbiHHNrO (ORCPT ); Mon, 8 Aug 2022 09:47:14 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 201DC63A5 for ; Mon, 8 Aug 2022 06:47:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1659966432; 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=xOmT+Y+kg4OOX8DXm3hPII7bzcp2Gy2mpH7jSjdpTAw=; b=hUGyCD15sborL+wtrfoSC2CY5+4MFEbk8NRStpd3xgXdR9q5ooDAe66HDlkn5vqsJq33SA 0EEdXpVRsc8A8E776PCsAoyZPkL97aa9UAEPznt5GRy9DbT1KIuxqFnsjfoYUiRgg5dkrg eL/HNwJLzbs/bu29RDEccc/G1+SfGrs= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-636-ap1keKVIOP2oo58dy-zYew-1; Mon, 08 Aug 2022 09:47:09 -0400 X-MC-Unique: ap1keKVIOP2oo58dy-zYew-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AAA7F2999B2F; Mon, 8 Aug 2022 13:47:08 +0000 (UTC) Received: from localhost (unknown [10.39.193.46]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 57651C15BA8; Mon, 8 Aug 2022 13:47:08 +0000 (UTC) From: Cornelia Huck To: Ricardo =?utf-8?Q?Ca=C3=B1uelo?= , linux-doc@vger.kernel.org Cc: virtualization@lists.linux-foundation.org, mst@redhat.com, jasowang@redhat.com, kernel@collabora.com, bagasdotme@gmail.com, Ricardo =?utf-8?Q?Ca=C3=B1uelo?= Subject: Re: [PATCH v2 2/2] docs: driver-api: virtio: virtio on Linux In-Reply-To: <20220804105914.3707389-3-ricardo.canuelo@collabora.com> Organization: Red Hat GmbH References: <20220804105914.3707389-1-ricardo.canuelo@collabora.com> <20220804105914.3707389-3-ricardo.canuelo@collabora.com> User-Agent: Notmuch/0.36 (https://notmuchmail.org) Date: Mon, 08 Aug 2022 15:47:06 +0200 Message-ID: <87bksuetk5.fsf@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On Thu, Aug 04 2022, Ricardo Ca=C3=B1uelo w= rote: > Basic doc about Virtio on Linux and a short tutorial on Virtio drivers. > > 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 | 151 ++++++++++++++ > .../virtio/writing_virtio_drivers.rst | 189 ++++++++++++++++++ > MAINTAINERS | 1 + > 5 files changed, 353 insertions(+) > 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..4b73c705c94c > --- /dev/null > +++ b/Documentation/driver-api/virtio/virtio.rst > @@ -0,0 +1,151 @@ > +.. 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 > +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. Additionally, some devices also implement the virtio > +interface in hardware. > + > +For paravirtualized devices, 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 Chapter 5 ("Device Types") of 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). Hm... so I'm not quite happy with those two paragraphs, but I'm not sure how to make it better. - While the origins of virtio are hypervisor implementations, the standard is describing the mechanisms of device <-> driver communication, regardless whether the device is a hardware entity or something emulated by a hypervisor. - I'm not quite sure what you are referring to with "real host devices". We can have e.g. a real disk that is handed to a guest via virtio-blk as a whole, or we can have some kind of file that is exposed via virtio-blk. Other device types can also be completely emulated. - The OS picks the driver depending on what device is discovers; virtio device drivers are not any different from other device drivers in that regard. So I think the key pieces of virtio are the following: - it is an open standard - it describes a protocol, which can be used to implement a lot of different device types - those devices are exposed to the operating system via standard mechanisms such as PCI - virtio devices can be implemented in various ways, such as in hypervisors (more common) or as a real hardware device For the remainder of this document, it is probably fine to focus on the hypervisor use case. (...) > +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. When using PCI as a transport method, the device > +will present itself in the PCI bus with vendor 0x1af4 (RedHat, Inc.) and s/in/on/ ? s/RedHat/Red Hat/ :) > +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. (...) > 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..139c785a38ef > --- /dev/null > +++ b/Documentation/driver-api/virtio/writing_virtio_drivers.rst > @@ -0,0 +1,189 @@ > +.. 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 > + > +Chapter 5 ("Device Types") in the virtio specification [1] defines all > +the supported virtio device types. Since these devices are, by > +definition, meant as abstractions for a wide variety of real hardware, See my comments above, virtio devices can also be fully emulated or real hardware devices. > +the addition of new virtio drivers is not expected to be very > +frequent. Still, this document serves as a basic guideline for driver I think we should not make any statement regarding frequency of new additions; sometimes, there's a flurry of activity, sometimes, there's nothing for ages :) > +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. > + > + > +Driver boilerplate > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +As a bare minimum, a virtio driver should register in the virtio bus and s/should/needs to/ ? > +configure the virtqueues for the device according to its spec, the > +configuration of the virtqueues in the driver side must match the > +virtqueue definitions in the device. A basic driver skeleton could look > +like this:: (...) > +The device id ``VIRTIO_ID_DUMMY`` here is a placeholder, virtio > +drivers should be defined only for devices that are defined in the s/defined/added/ ? > +spec. See include/uapi/linux/virtio_ids.h. Maybe "Device ids need to be at least reserved in the virtio spec before being added to that file." ? 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 802F1C00140 for ; Mon, 8 Aug 2022 13:47:19 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 0FF5D82560; Mon, 8 Aug 2022 13:47:19 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 0FF5D82560 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=hUGyCD15 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 ESyV7XMKnCZd; Mon, 8 Aug 2022 13:47:17 +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 4FDE78254D; Mon, 8 Aug 2022 13:47:16 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 4FDE78254D Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 1EC5EC0032; Mon, 8 Aug 2022 13:47:16 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 179F3C002D for ; Mon, 8 Aug 2022 13:47:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D882460A46 for ; Mon, 8 Aug 2022 13:47:14 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org D882460A46 Authentication-Results: smtp3.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=hUGyCD15 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1n10U5PFT2NX for ; Mon, 8 Aug 2022 13:47:13 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 9104F60701 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id 9104F60701 for ; Mon, 8 Aug 2022 13:47:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1659966432; 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=xOmT+Y+kg4OOX8DXm3hPII7bzcp2Gy2mpH7jSjdpTAw=; b=hUGyCD15sborL+wtrfoSC2CY5+4MFEbk8NRStpd3xgXdR9q5ooDAe66HDlkn5vqsJq33SA 0EEdXpVRsc8A8E776PCsAoyZPkL97aa9UAEPznt5GRy9DbT1KIuxqFnsjfoYUiRgg5dkrg eL/HNwJLzbs/bu29RDEccc/G1+SfGrs= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-636-ap1keKVIOP2oo58dy-zYew-1; Mon, 08 Aug 2022 09:47:09 -0400 X-MC-Unique: ap1keKVIOP2oo58dy-zYew-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AAA7F2999B2F; Mon, 8 Aug 2022 13:47:08 +0000 (UTC) Received: from localhost (unknown [10.39.193.46]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 57651C15BA8; Mon, 8 Aug 2022 13:47:08 +0000 (UTC) From: Cornelia Huck To: Ricardo =?utf-8?Q?Ca=C3=B1uelo?= , linux-doc@vger.kernel.org Subject: Re: [PATCH v2 2/2] docs: driver-api: virtio: virtio on Linux In-Reply-To: <20220804105914.3707389-3-ricardo.canuelo@collabora.com> Organization: Red Hat GmbH References: <20220804105914.3707389-1-ricardo.canuelo@collabora.com> <20220804105914.3707389-3-ricardo.canuelo@collabora.com> User-Agent: Notmuch/0.36 (https://notmuchmail.org) Date: Mon, 08 Aug 2022 15:47:06 +0200 Message-ID: <87bksuetk5.fsf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 Cc: mst@redhat.com, virtualization@lists.linux-foundation.org, bagasdotme@gmail.com, kernel@collabora.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" T24gVGh1LCBBdWcgMDQgMjAyMiwgUmljYXJkbyBDYcOxdWVsbyA8cmljYXJkby5jYW51ZWxvQGNv bGxhYm9yYS5jb20+IHdyb3RlOgoKPiBCYXNpYyBkb2MgYWJvdXQgVmlydGlvIG9uIExpbnV4IGFu ZCBhIHNob3J0IHR1dG9yaWFsIG9uIFZpcnRpbyBkcml2ZXJzLgo+Cj4gU2lnbmVkLW9mZi1ieTog UmljYXJkbyBDYcOxdWVsbyA8cmljYXJkby5jYW51ZWxvQGNvbGxhYm9yYS5jb20+Cj4gLS0tCj4g IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9pbmRleC5yc3QgICAgICAgICAgICB8ICAgMSArCj4g IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vaW5kZXgucnN0ICAgICB8ICAxMSArCj4g IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vdmlydGlvLnJzdCAgICB8IDE1MSArKysr KysrKysrKysrKwo+ICAuLi4vdmlydGlvL3dyaXRpbmdfdmlydGlvX2RyaXZlcnMucnN0ICAgICAg ICAgfCAxODkgKysrKysrKysrKysrKysrKysrCj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIDUgZmlsZXMgY2hhbmdlZCwgMzUzIGluc2Vy dGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92 aXJ0aW8vaW5kZXgucnN0Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RyaXZl ci1hcGkvdmlydGlvL3ZpcnRpby5yc3QKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRp b24vZHJpdmVyLWFwaS92aXJ0aW8vd3JpdGluZ192aXJ0aW9fZHJpdmVycy5yc3QKCiguLi4pCgo+ IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmlydGlvL3ZpcnRpby5yc3Qg Yi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmlydGlvL3ZpcnRpby5yc3QKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGI3M2M3MDVjOTRjCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS92aXJ0aW8vdmlydGlvLnJzdAo+ IEBAIC0wLDAgKzEsMTUxIEBACj4gKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gKwo+ICsuLiBfdmlydGlvOgo+ICsKPiArPT09PT09PT09PT09PT09Cj4gK1ZpcnRpbyBvbiBM aW51eAo+ICs9PT09PT09PT09PT09PT0KPiArCj4gK0ludHJvZHVjdGlvbgo+ICs9PT09PT09PT09 PT0KPiArCj4gK1ZpcnRpbyBpcyBhbiBvcGVuIHN0YW5kYXJkIGludGVyZmFjZSBmb3IgdmlydHVh bCBtYWNoaW5lcyB0byBhY2Nlc3MKPiArcGFyYXZpcnR1YWxpemVkIGRldmljZXMsIGllLiBkZXZp Y2VzIHRoYXQgYXJlbid0IGVtdWxhdGVkIGJ5IGEKPiAraHlwZXJ2aXNvciBidXQgcmF0aGVyIHJl YWwgaG9zdCBkZXZpY2VzIHRoYXQgYXJlIGV4cG9zZWQgYnkgdGhlCj4gK2h5cGVydmlzb3IgdG8g dGhlIGd1ZXN0IHRvIGFjaGlldmUgbmF0aXZlIHBlcmZvcm1hbmNlLiBJbiBvdGhlciB3b3JkcywK PiAraXQgcHJvdmlkZXMgYSBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbSBmb3IgYSBndWVzdCBPUyB0 byB1c2UgZGV2aWNlcyBvbgo+ICt0aGUgaG9zdCBtYWNoaW5lLiBBZGRpdGlvbmFsbHksIHNvbWUg ZGV2aWNlcyBhbHNvIGltcGxlbWVudCB0aGUgdmlydGlvCj4gK2ludGVyZmFjZSBpbiBoYXJkd2Fy ZS4KPiArCj4gK0ZvciBwYXJhdmlydHVhbGl6ZWQgZGV2aWNlcywgdGhlIGNvbmNyZXRlIGhhcmR3 YXJlIGRldGFpbHMgb2YgdGhlIHJlYWwKPiAraG9zdCBkZXZpY2VzIGFyZSBhYnN0cmFjdGVkIGlu IHRoZSBoeXBlcnZpc29yLCB3aGljaCBwcm92aWRlcyBhIHNldCBvZgo+ICtzaW1wbGlmaWVkIHZp cnR1YWwgZGV2aWNlcyB0aGF0IGltcGxlbWVudCB0aGUgdmlydGlvIHByb3RvY29sLiBUaGVzZQo+ ICtkZXZpY2VzIGFyZSBkZWZpbmVkIGluIENoYXB0ZXIgNSAoIkRldmljZSBUeXBlcyIpIG9mIHRo ZSB2aXJ0aW8gc3BlYyBbMV0KPiArYW5kIHRoZXkncmUgdGhlIGRldmljZXMgdGhhdCB0aGUgZ3Vl c3QgT1Mgd2lsbCB1bHRpbWF0ZWx5IGhhbmRsZS4gU28sIGluCj4gK3RoYXQgcmVnYXJkLCB0aGUg Z3Vlc3QgT1Mga25vd3MgaXQncyBydW5uaW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudAo+ICth bmQgdGhhdCBpdCBuZWVkcyB0byB1c2UgdGhlIGFwcHJvcHJpYXRlIHZpcnRpbyBkcml2ZXJzIHRv IGhhbmRsZSB0aGUKPiArZGV2aWNlcyBpbnN0ZWFkIG9mIHRoZSByZWd1bGFyIGRldmljZSBkcml2 ZXJzIGl0J2QgdXNlIGluIGEgbmF0aXZlIG9yCj4gK3B1cmVseSB2aXJ0dWFsIGVudmlyb25tZW50 ICh3aXRoIGVtdWxhdGVkIGRldmljZXMpLgoKSG0uLi4gc28gSSdtIG5vdCBxdWl0ZSBoYXBweSB3 aXRoIHRob3NlIHR3byBwYXJhZ3JhcGhzLCBidXQgSSdtIG5vdCBzdXJlCmhvdyB0byBtYWtlIGl0 IGJldHRlci4KCi0gV2hpbGUgdGhlIG9yaWdpbnMgb2YgdmlydGlvIGFyZSBoeXBlcnZpc29yIGlt cGxlbWVudGF0aW9ucywgdGhlCiAgc3RhbmRhcmQgaXMgZGVzY3JpYmluZyB0aGUgbWVjaGFuaXNt cyBvZiBkZXZpY2UgPC0+IGRyaXZlcgogIGNvbW11bmljYXRpb24sIHJlZ2FyZGxlc3Mgd2hldGhl ciB0aGUgZGV2aWNlIGlzIGEgaGFyZHdhcmUgZW50aXR5IG9yCiAgc29tZXRoaW5nIGVtdWxhdGVk IGJ5IGEgaHlwZXJ2aXNvci4KLSBJJ20gbm90IHF1aXRlIHN1cmUgd2hhdCB5b3UgYXJlIHJlZmVy cmluZyB0byB3aXRoICJyZWFsIGhvc3QKICBkZXZpY2VzIi4gV2UgY2FuIGhhdmUgZS5nLiBhIHJl YWwgZGlzayB0aGF0IGlzIGhhbmRlZCB0byBhIGd1ZXN0IHZpYQogIHZpcnRpby1ibGsgYXMgYSB3 aG9sZSwgb3Igd2UgY2FuIGhhdmUgc29tZSBraW5kIG9mIGZpbGUgdGhhdCBpcwogIGV4cG9zZWQg dmlhIHZpcnRpby1ibGsuIE90aGVyIGRldmljZSB0eXBlcyBjYW4gYWxzbyBiZSBjb21wbGV0ZWx5 CiAgZW11bGF0ZWQuCi0gVGhlIE9TIHBpY2tzIHRoZSBkcml2ZXIgZGVwZW5kaW5nIG9uIHdoYXQg ZGV2aWNlIGlzIGRpc2NvdmVyczsgdmlydGlvCiAgZGV2aWNlIGRyaXZlcnMgYXJlIG5vdCBhbnkg ZGlmZmVyZW50IGZyb20gb3RoZXIgZGV2aWNlIGRyaXZlcnMgaW4gdGhhdAogIHJlZ2FyZC4KClNv IEkgdGhpbmsgdGhlIGtleSBwaWVjZXMgb2YgdmlydGlvIGFyZSB0aGUgZm9sbG93aW5nOgoKLSBp dCBpcyBhbiBvcGVuIHN0YW5kYXJkCi0gaXQgZGVzY3JpYmVzIGEgcHJvdG9jb2wsIHdoaWNoIGNh biBiZSB1c2VkIHRvIGltcGxlbWVudCBhIGxvdCBvZgogIGRpZmZlcmVudCBkZXZpY2UgdHlwZXMK LSB0aG9zZSBkZXZpY2VzIGFyZSBleHBvc2VkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZpYSBz dGFuZGFyZAogIG1lY2hhbmlzbXMgc3VjaCBhcyBQQ0kKLSB2aXJ0aW8gZGV2aWNlcyBjYW4gYmUg aW1wbGVtZW50ZWQgaW4gdmFyaW91cyB3YXlzLCBzdWNoIGFzIGluCiAgaHlwZXJ2aXNvcnMgKG1v cmUgY29tbW9uKSBvciBhcyBhIHJlYWwgaGFyZHdhcmUgZGV2aWNlCgpGb3IgdGhlIHJlbWFpbmRl ciBvZiB0aGlzIGRvY3VtZW50LCBpdCBpcyBwcm9iYWJseSBmaW5lIHRvIGZvY3VzIG9uIHRoZQpo eXBlcnZpc29yIHVzZSBjYXNlLgoKKC4uLikKCj4gK0hvdyBhIHZpcnRpbyBkZXZpY2UgaXMgZm91 bmQgYW5kIGNvbmZpZ3VyZWQgYnkgdGhlIGtlcm5lbCBkZXBlbmRzIG9uIGhvdwo+ICt0aGUgaHlw ZXJ2aXNvciBkZWZpbmVzIGl0LiBUYWtpbmcgdGhlIGBRRU1VIHZpcnRpby1jb25zb2xlCj4gKzxo dHRwczovL2dpdGxhYi5jb20vcWVtdS1wcm9qZWN0L3FlbXUvLS9ibG9iL21hc3Rlci9ody9jaGFy L3ZpcnRpby1jb25zb2xlLmM+YF9fCj4gK2RldmljZSBhcyBhbiBleGFtcGxlLiBXaGVuIHVzaW5n IFBDSSBhcyBhIHRyYW5zcG9ydCBtZXRob2QsIHRoZSBkZXZpY2UKPiArd2lsbCBwcmVzZW50IGl0 c2VsZiBpbiB0aGUgUENJIGJ1cyB3aXRoIHZlbmRvciAweDFhZjQgKFJlZEhhdCwgSW5jLikgYW5k CgpzL2luL29uLyA/CnMvUmVkSGF0L1JlZCBIYXQvIDopCgo+ICtkZXZpY2UgaWQgMHgxMDAzICh2 aXJ0aW8gY29uc29sZSksIGFzIGRlZmluZWQgaW4gdGhlIHNwZWMsIHNvIHRoZSBrZXJuZWwKPiAr d2lsbCBkZXRlY3QgaXQgYXMgaXQgd291bGQgZG8gd2l0aCBhbnkgb3RoZXIgUENJIGRldmljZS4K CiguLi4pCgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdmlydGlvL3dy aXRpbmdfdmlydGlvX2RyaXZlcnMucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZpcnRp by93cml0aW5nX3ZpcnRpb19kcml2ZXJzLnJzdAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMDAwMDAwLi4xMzljNzg1YTM4ZWYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvRG9j dW1lbnRhdGlvbi9kcml2ZXItYXBpL3ZpcnRpby93cml0aW5nX3ZpcnRpb19kcml2ZXJzLnJzdAo+ IEBAIC0wLDAgKzEsMTg5IEBACj4gKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4gKwo+ICsuLiBfd3JpdGluZ192aXJ0aW9fZHJpdmVyczoKPiArCj4gKz09PT09PT09PT09PT09 PT09PT09PT0KPiArV3JpdGluZyBWaXJ0aW8gRHJpdmVycwo+ICs9PT09PT09PT09PT09PT09PT09 PT09Cj4gKwo+ICtJbnRyb2R1Y3Rpb24KPiArPT09PT09PT09PT09Cj4gKwo+ICtDaGFwdGVyIDUg KCJEZXZpY2UgVHlwZXMiKSBpbiB0aGUgdmlydGlvIHNwZWNpZmljYXRpb24gWzFdIGRlZmluZXMg YWxsCj4gK3RoZSBzdXBwb3J0ZWQgdmlydGlvIGRldmljZSB0eXBlcy4gU2luY2UgdGhlc2UgZGV2 aWNlcyBhcmUsIGJ5Cj4gK2RlZmluaXRpb24sIG1lYW50IGFzIGFic3RyYWN0aW9ucyBmb3IgYSB3 aWRlIHZhcmlldHkgb2YgcmVhbCBoYXJkd2FyZSwKClNlZSBteSBjb21tZW50cyBhYm92ZSwgdmly dGlvIGRldmljZXMgY2FuIGFsc28gYmUgZnVsbHkgZW11bGF0ZWQgb3IgcmVhbApoYXJkd2FyZSBk ZXZpY2VzLgoKPiArdGhlIGFkZGl0aW9uIG9mIG5ldyB2aXJ0aW8gZHJpdmVycyBpcyBub3QgZXhw ZWN0ZWQgdG8gYmUgdmVyeQo+ICtmcmVxdWVudC4gU3RpbGwsIHRoaXMgZG9jdW1lbnQgc2VydmVz IGFzIGEgYmFzaWMgZ3VpZGVsaW5lIGZvciBkcml2ZXIKCkkgdGhpbmsgd2Ugc2hvdWxkIG5vdCBt YWtlIGFueSBzdGF0ZW1lbnQgcmVnYXJkaW5nIGZyZXF1ZW5jeSBvZiBuZXcKYWRkaXRpb25zOyBz b21ldGltZXMsIHRoZXJlJ3MgYSBmbHVycnkgb2YgYWN0aXZpdHksIHNvbWV0aW1lcywgdGhlcmUn cwpub3RoaW5nIGZvciBhZ2VzIDopCgo+ICtwcm9ncmFtbWVycyB0aGF0IG5lZWQgdG8gaGFjayBh IG5ldyB2aXJ0aW8gZHJpdmVyIG9yIHVuZGVyc3RhbmQgdGhlCj4gK2Vzc2VudGlhbHMgb2YgdGhl IGV4aXN0aW5nIG9uZXMuIFNlZSA6cmVmOmBWaXJ0aW8gb24gTGludXggPHZpcnRpbz5gIGZvcgo+ ICthIGdlbmVyYWwgb3ZlcnZpZXcgb2YgdmlydGlvLgo+ICsKPiArCj4gK0RyaXZlciBib2lsZXJw bGF0ZQo+ICs9PT09PT09PT09PT09PT09PT0KPiArCj4gK0FzIGEgYmFyZSBtaW5pbXVtLCBhIHZp cnRpbyBkcml2ZXIgc2hvdWxkIHJlZ2lzdGVyIGluIHRoZSB2aXJ0aW8gYnVzIGFuZAoKcy9zaG91 bGQvbmVlZHMgdG8vID8KCj4gK2NvbmZpZ3VyZSB0aGUgdmlydHF1ZXVlcyBmb3IgdGhlIGRldmlj ZSBhY2NvcmRpbmcgdG8gaXRzIHNwZWMsIHRoZQo+ICtjb25maWd1cmF0aW9uIG9mIHRoZSB2aXJ0 cXVldWVzIGluIHRoZSBkcml2ZXIgc2lkZSBtdXN0IG1hdGNoIHRoZQo+ICt2aXJ0cXVldWUgZGVm aW5pdGlvbnMgaW4gdGhlIGRldmljZS4gQSBiYXNpYyBkcml2ZXIgc2tlbGV0b24gY291bGQgbG9v awo+ICtsaWtlIHRoaXM6OgoKKC4uLikKCj4gK1RoZSBkZXZpY2UgaWQgYGBWSVJUSU9fSURfRFVN TVlgYCBoZXJlIGlzIGEgcGxhY2Vob2xkZXIsIHZpcnRpbwo+ICtkcml2ZXJzIHNob3VsZCBiZSBk ZWZpbmVkIG9ubHkgZm9yIGRldmljZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUKCnMvZGVmaW5l ZC9hZGRlZC8gPwoKPiArc3BlYy4gU2VlIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRzLmgu CgpNYXliZSAiRGV2aWNlIGlkcyBuZWVkIHRvIGJlIGF0IGxlYXN0IHJlc2VydmVkIGluIHRoZSB2 aXJ0aW8gc3BlYyBiZWZvcmUKYmVpbmcgYWRkZWQgdG8gdGhhdCBmaWxlLiIgPwoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFp bGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBz Oi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0 aW9u