From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36639) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e2cs6-0003Bf-WB for qemu-devel@nongnu.org; Thu, 12 Oct 2017 08:45:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e2cs2-0001fU-W2 for qemu-devel@nongnu.org; Thu, 12 Oct 2017 08:45:54 -0400 Received: from mga09.intel.com ([134.134.136.24]:44137) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e2cs2-0001ek-Jz for qemu-devel@nongnu.org; Thu, 12 Oct 2017 08:45:50 -0400 Date: Thu, 12 Oct 2017 20:45:44 +0800 From: Haozhong Zhang Message-ID: <20171012124544.dq3wyr65tefi3glk@hz-desktop> References: <20170911043820.14617-1-haozhong.zhang@intel.com> <20170911044157.15403-1-haozhong.zhang@intel.com> <20170911160818.1bd44a82@nial.brq.redhat.com> <20170912031509.vufszbju3s2v2bw3@hz-desktop> <20171010160544.GA1772@char.us.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171010160544.GA1772@char.us.oracle.com> Subject: Re: [Qemu-devel] [RFC QEMU PATCH v3 00/10] Implement vNVDIMM for Xen HVM guest List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Konrad Rzeszutek Wilk Cc: Stefano Stabellini , Igor Mammedov , qemu-devel@nongnu.org, xen-devel@lists.xen.org, Dan Williams , Chao Peng , Eduardo Habkost , "Michael S. Tsirkin" , Xiao Guangrong , Paolo Bonzini , Richard Henderson , Anthony Perard , xen-devel@lists.xenproject.org, ian.jackson@eu.citrix.com, wei.liu2@citrix.com, george.dunlap@citrix.com, JBeulich@suse.com, andrew.cooper3@citrix.com On 10/10/17 12:05 -0400, Konrad Rzeszutek Wilk wrote: > On Tue, Sep 12, 2017 at 11:15:09AM +0800, Haozhong Zhang wrote: > > On 09/11/17 11:52 -0700, Stefano Stabellini wrote: > > > CC'ing xen-devel, and the Xen tools and x86 maintainers. > > > > > > On Mon, 11 Sep 2017, Igor Mammedov wrote: > > > > On Mon, 11 Sep 2017 12:41:47 +0800 > > > > Haozhong Zhang wrote: > > > > > > > > > This is the QEMU part patches that works with the associated Xen > > > > > patches to enable vNVDIMM support for Xen HVM domains. Xen relies on > > > > > QEMU to build guest NFIT and NVDIMM namespace devices, and allocate > > > > > guest address space for vNVDIMM devices. > > > > > > > > > > All patches can be found at > > > > > Xen: https://github.com/hzzhan9/xen.git nvdimm-rfc-v3 > > > > > QEMU: https://github.com/hzzhan9/qemu.git xen-nvdimm-rfc-v3 > > > > > > > > > > Patch 1 is to avoid dereferencing the NULL pointer to non-existing > > > > > label data, as the Xen side support for labels is not implemented yet. > > > > > > > > > > Patch 2 & 3 add a memory backend dedicated for Xen usage and a hotplug > > > > > memory region for Xen guest, in order to make the existing nvdimm > > > > > device plugging path work on Xen. > > > > > > > > > > Patch 4 - 10 build and cooy NFIT from QEMU to Xen guest, when QEMU is > > > > > used as the Xen device model. > > > > > > > > I've skimmed over patch-set and can't say that I'm happy with > > > > number of xen_enabled() invariants it introduced as well as > > > > with partial blobs it creates. > > > > > > I have not read the series (Haozhong, please CC me, Anthony and > > > xen-devel to the whole series next time), but yes, indeed. Let's not add > > > more xen_enabled() if possible. > > > > > > Haozhong, was there a design document thread on xen-devel about this? If > > > so, did it reach a conclusion? Was the design accepted? If so, please > > > add a link to the design doc in the introductory email, so that > > > everybody can read it and be on the same page. > > > > Yes, there is a design [1] discussed and reviewed. Section 4.3 discussed > > the guest ACPI. > > > > [1] https://lists.xenproject.org/archives/html/xen-devel/2016-07/msg01921.html > > Igor, did you have a chance to read it? > > .. see below > > > > > > > > > > > > I'd like to reduce above and a way to do this might be making xen > > > > 1. use fw_cfg > > > > 2. fetch QEMU build acpi tables from fw_cfg > > > > 3. extract nvdim tables (which is trivial) and use them > > > > > > > > looking at xen_load_linux(), it seems possible to use fw_cfg. > > > > > > > > So what's stopping xen from using it elsewhere?, > > > > instead of adding more xen specific code to do 'the same' > > > > job and not reusing/sharing common code with tcg/kvm. > > > > > > So far, ACPI tables have not been generated by QEMU. Xen HVM machines > > > rely on a firmware-like application called "hvmloader" that runs in > > > guest context and generates the ACPI tables. I have no opinions on > > > hvmloader and I'll let the Xen maintainers talk about it. However, keep > > > in mind that with an HVM guest some devices are emulated by Xen and/or > > > by other device emulators that can run alongside QEMU. QEMU doesn't have > > > a full few of the system. > > > > > > Here the question is: does it have to be QEMU the one to generate the > > > ACPI blobs for the nvdimm? It would be nicer if it was up to hvmloader > > > like the rest, instead of introducing this split-brain design about > > > ACPI. We need to see a design doc to fully understand this. > > > > > > > hvmloader runs in the guest and is responsible to build/load guest > > ACPI. However, it's not capable to build AML at runtime (for the lack > > of AML builder). If any guest ACPI object is needed (e.g. by guest > > DSDT), it has to be generated from ASL by iasl at Xen compile time and > > then be loaded by hvmloader at runtime. > > > > Xen includes an OperationRegion "BIOS" in the static generated guest > > DSDT, whose address is hardcoded and which contains a list of values > > filled by hvmloader at runtime. Other ACPI objects can refer to those > > values (e.g., the number of vCPUs). But it's not enough for generating > > guest NVDIMM ACPI objects at compile time and then being customized > > and loaded by hvmload, because its structure (i.e., the number of > > namespace devices) cannot be decided util the guest config is known. > > > > Alternatively, we may introduce an AML builder in hvmloader and build > > all guest ACPI completely in hvmloader. Looking at the similar > > implementation in QEMU, it would not be small, compared to the current > > size of hvmloader. Besides, I'm still going to let QEMU handle guest > > NVDIMM _DSM and _FIT calls, which is another reason I use QEMU to > > build NVDIMM ACPI. > > > > > If the design doc thread led into thinking that it has to be QEMU to > > > generate them, then would it make the code nicer if we used fw_cfg to > > > get the (full or partial) tables from QEMU, as Igor suggested? > > > > I'll have a look at the code (which I didn't notice) pointed by Igor. > > And there is a spec too! > > https://github.com/qemu/qemu/blob/master/docs/specs/fw_cfg.txt > > Igor, did you have in mind to use FW_CFG_FILE_DIR to retrieve the > ACPI AML code? > Basically, QEMU builds two ROMs for guest, /rom@etc/acpi/tables and /rom@etc/table-loader. The former is unstructured to guest, and contains all data of guest ACPI. The latter is a BIOSLinkerLoader organized as a set of commands, which direct the guest (e.g., SeaBIOS on KVM/QEMU) to relocate data in the former file, recalculate checksum of specified area, and fill guest address in specified ACPI field. One part of my patches is to implement a mechanism to tell Xen which part of ACPI data is a table (NFIT), and which part defines a namespace device and what the device name is. I can add two new loader commands for them respectively. Because they just provide information and SeaBIOS in non-xen environment ignores unrecognized commands, they will not break SeaBIOS in non-xen environment. On QEMU side, most Xen-specific hacks in ACPI builder could be dropped, and replaced by adding the new loader commands (though they may be used only by Xen). On Xen side, a fw_cfg driver and a BIOSLinkerLoader command executor are needed in, perhaps, hvmloader. Haozhong From mboxrd@z Thu Jan 1 00:00:00 1970 From: Haozhong Zhang Subject: Re: [Qemu-devel] [RFC QEMU PATCH v3 00/10] Implement vNVDIMM for Xen HVM guest Date: Thu, 12 Oct 2017 20:45:44 +0800 Message-ID: <20171012124544.dq3wyr65tefi3glk@hz-desktop> References: <20170911043820.14617-1-haozhong.zhang@intel.com> <20170911044157.15403-1-haozhong.zhang@intel.com> <20170911160818.1bd44a82@nial.brq.redhat.com> <20170912031509.vufszbju3s2v2bw3@hz-desktop> <20171010160544.GA1772@char.us.oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e2cs4-0007IY-QK for xen-devel@lists.xenproject.org; Thu, 12 Oct 2017 12:45:52 +0000 Content-Disposition: inline In-Reply-To: <20171010160544.GA1772@char.us.oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Konrad Rzeszutek Wilk Cc: Stefano Stabellini , wei.liu2@citrix.com, Eduardo Habkost , "Michael S. Tsirkin" , andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, qemu-devel@nongnu.org, xen-devel@lists.xen.org, xen-devel@lists.xenproject.org, Paolo Bonzini , JBeulich@suse.com, Chao Peng , Anthony Perard , Igor Mammedov , Dan Williams , Richard Henderson , george.dunlap@citrix.com, Xiao Guangrong List-Id: xen-devel@lists.xenproject.org T24gMTAvMTAvMTcgMTI6MDUgLTA0MDAsIEtvbnJhZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPiBP biBUdWUsIFNlcCAxMiwgMjAxNyBhdCAxMToxNTowOUFNICswODAwLCBIYW96aG9uZyBaaGFuZyB3 cm90ZToKPiA+IE9uIDA5LzExLzE3IDExOjUyIC0wNzAwLCBTdGVmYW5vIFN0YWJlbGxpbmkgd3Jv dGU6Cj4gPiA+IENDJ2luZyB4ZW4tZGV2ZWwsIGFuZCB0aGUgWGVuIHRvb2xzIGFuZCB4ODYgbWFp bnRhaW5lcnMuCj4gPiA+IAo+ID4gPiBPbiBNb24sIDExIFNlcCAyMDE3LCBJZ29yIE1hbW1lZG92 IHdyb3RlOgo+ID4gPiA+IE9uIE1vbiwgMTEgU2VwIDIwMTcgMTI6NDE6NDcgKzA4MDAKPiA+ID4g PiBIYW96aG9uZyBaaGFuZyA8aGFvemhvbmcuemhhbmdAaW50ZWwuY29tPiB3cm90ZToKPiA+ID4g PiAKPiA+ID4gPiA+IFRoaXMgaXMgdGhlIFFFTVUgcGFydCBwYXRjaGVzIHRoYXQgd29ya3Mgd2l0 aCB0aGUgYXNzb2NpYXRlZCBYZW4KPiA+ID4gPiA+IHBhdGNoZXMgdG8gZW5hYmxlIHZOVkRJTU0g c3VwcG9ydCBmb3IgWGVuIEhWTSBkb21haW5zLiBYZW4gcmVsaWVzIG9uCj4gPiA+ID4gPiBRRU1V IHRvIGJ1aWxkIGd1ZXN0IE5GSVQgYW5kIE5WRElNTSBuYW1lc3BhY2UgZGV2aWNlcywgYW5kIGFs bG9jYXRlCj4gPiA+ID4gPiBndWVzdCBhZGRyZXNzIHNwYWNlIGZvciB2TlZESU1NIGRldmljZXMu Cj4gPiA+ID4gPiAKPiA+ID4gPiA+IEFsbCBwYXRjaGVzIGNhbiBiZSBmb3VuZCBhdAo+ID4gPiA+ ID4gICBYZW46ICBodHRwczovL2dpdGh1Yi5jb20vaHp6aGFuOS94ZW4uZ2l0IG52ZGltbS1yZmMt djMKPiA+ID4gPiA+ICAgUUVNVTogaHR0cHM6Ly9naXRodWIuY29tL2h6emhhbjkvcWVtdS5naXQg eGVuLW52ZGltbS1yZmMtdjMKPiA+ID4gPiA+IAo+ID4gPiA+ID4gUGF0Y2ggMSBpcyB0byBhdm9p ZCBkZXJlZmVyZW5jaW5nIHRoZSBOVUxMIHBvaW50ZXIgdG8gbm9uLWV4aXN0aW5nCj4gPiA+ID4g PiBsYWJlbCBkYXRhLCBhcyB0aGUgWGVuIHNpZGUgc3VwcG9ydCBmb3IgbGFiZWxzIGlzIG5vdCBp bXBsZW1lbnRlZCB5ZXQuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFBhdGNoIDIgJiAzIGFkZCBhIG1l bW9yeSBiYWNrZW5kIGRlZGljYXRlZCBmb3IgWGVuIHVzYWdlIGFuZCBhIGhvdHBsdWcKPiA+ID4g PiA+IG1lbW9yeSByZWdpb24gZm9yIFhlbiBndWVzdCwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgZXhp c3RpbmcgbnZkaW1tCj4gPiA+ID4gPiBkZXZpY2UgcGx1Z2dpbmcgcGF0aCB3b3JrIG9uIFhlbi4K PiA+ID4gPiA+IAo+ID4gPiA+ID4gUGF0Y2ggNCAtIDEwIGJ1aWxkIGFuZCBjb295IE5GSVQgZnJv bSBRRU1VIHRvIFhlbiBndWVzdCwgd2hlbiBRRU1VIGlzCj4gPiA+ID4gPiB1c2VkIGFzIHRoZSBY ZW4gZGV2aWNlIG1vZGVsLgo+ID4gPiA+IAo+ID4gPiA+IEkndmUgc2tpbW1lZCBvdmVyIHBhdGNo LXNldCBhbmQgY2FuJ3Qgc2F5IHRoYXQgSSdtIGhhcHB5IHdpdGgKPiA+ID4gPiBudW1iZXIgb2Yg eGVuX2VuYWJsZWQoKSBpbnZhcmlhbnRzIGl0IGludHJvZHVjZWQgYXMgd2VsbCBhcwo+ID4gPiA+ IHdpdGggcGFydGlhbCBibG9icyBpdCBjcmVhdGVzLgo+ID4gPiAKPiA+ID4gSSBoYXZlIG5vdCBy ZWFkIHRoZSBzZXJpZXMgKEhhb3pob25nLCBwbGVhc2UgQ0MgbWUsIEFudGhvbnkgYW5kCj4gPiA+ IHhlbi1kZXZlbCB0byB0aGUgd2hvbGUgc2VyaWVzIG5leHQgdGltZSksIGJ1dCB5ZXMsIGluZGVl ZC4gTGV0J3Mgbm90IGFkZAo+ID4gPiBtb3JlIHhlbl9lbmFibGVkKCkgaWYgcG9zc2libGUuCj4g PiA+IAo+ID4gPiBIYW96aG9uZywgd2FzIHRoZXJlIGEgZGVzaWduIGRvY3VtZW50IHRocmVhZCBv biB4ZW4tZGV2ZWwgYWJvdXQgdGhpcz8gSWYKPiA+ID4gc28sIGRpZCBpdCByZWFjaCBhIGNvbmNs dXNpb24/IFdhcyB0aGUgZGVzaWduIGFjY2VwdGVkPyBJZiBzbywgcGxlYXNlCj4gPiA+IGFkZCBh IGxpbmsgdG8gdGhlIGRlc2lnbiBkb2MgaW4gdGhlIGludHJvZHVjdG9yeSBlbWFpbCwgc28gdGhh dAo+ID4gPiBldmVyeWJvZHkgY2FuIHJlYWQgaXQgYW5kIGJlIG9uIHRoZSBzYW1lIHBhZ2UuCj4g PiAKPiA+IFllcywgdGhlcmUgaXMgYSBkZXNpZ24gWzFdIGRpc2N1c3NlZCBhbmQgcmV2aWV3ZWQu IFNlY3Rpb24gNC4zIGRpc2N1c3NlZAo+ID4gdGhlIGd1ZXN0IEFDUEkuCj4gPiAKPiA+IFsxXSBo dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTYt MDcvbXNnMDE5MjEuaHRtbAo+IAo+IElnb3IsIGRpZCB5b3UgaGF2ZSBhIGNoYW5jZSB0byByZWFk IGl0Pwo+IAo+IC4uIHNlZSBiZWxvdwo+ID4gCj4gPiA+IAo+ID4gPiAKPiA+ID4gPiBJJ2QgbGlr ZSB0byByZWR1Y2UgYWJvdmUgYW5kIGEgd2F5IHRvIGRvIHRoaXMgbWlnaHQgYmUgbWFraW5nIHhl biAKPiA+ID4gPiAgMS4gdXNlIGZ3X2NmZwo+ID4gPiA+ICAyLiBmZXRjaCBRRU1VIGJ1aWxkIGFj cGkgdGFibGVzIGZyb20gZndfY2ZnCj4gPiA+ID4gIDMuIGV4dHJhY3QgbnZkaW0gdGFibGVzICh3 aGljaCBpcyB0cml2aWFsKSBhbmQgdXNlIHRoZW0KPiA+ID4gPiAKPiA+ID4gPiBsb29raW5nIGF0 IHhlbl9sb2FkX2xpbnV4KCksIGl0IHNlZW1zIHBvc3NpYmxlIHRvIHVzZSBmd19jZmcuCj4gPiA+ ID4gCj4gPiA+ID4gU28gd2hhdCdzIHN0b3BwaW5nIHhlbiBmcm9tIHVzaW5nIGl0IGVsc2V3aGVy ZT8sCj4gPiA+ID4gaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSB4ZW4gc3BlY2lmaWMgY29kZSB0byBk byAndGhlIHNhbWUnCj4gPiA+ID4gam9iIGFuZCBub3QgcmV1c2luZy9zaGFyaW5nIGNvbW1vbiBj b2RlIHdpdGggdGNnL2t2bS4KPiA+ID4gCj4gPiA+IFNvIGZhciwgQUNQSSB0YWJsZXMgaGF2ZSBu b3QgYmVlbiBnZW5lcmF0ZWQgYnkgUUVNVS4gWGVuIEhWTSBtYWNoaW5lcwo+ID4gPiByZWx5IG9u IGEgZmlybXdhcmUtbGlrZSBhcHBsaWNhdGlvbiBjYWxsZWQgImh2bWxvYWRlciIgdGhhdCBydW5z IGluCj4gPiA+IGd1ZXN0IGNvbnRleHQgYW5kIGdlbmVyYXRlcyB0aGUgQUNQSSB0YWJsZXMuIEkg aGF2ZSBubyBvcGluaW9ucyBvbgo+ID4gPiBodm1sb2FkZXIgYW5kIEknbGwgbGV0IHRoZSBYZW4g bWFpbnRhaW5lcnMgdGFsayBhYm91dCBpdC4gSG93ZXZlciwga2VlcAo+ID4gPiBpbiBtaW5kIHRo YXQgd2l0aCBhbiBIVk0gZ3Vlc3Qgc29tZSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBieSBYZW4gYW5k L29yCj4gPiA+IGJ5IG90aGVyIGRldmljZSBlbXVsYXRvcnMgdGhhdCBjYW4gcnVuIGFsb25nc2lk ZSBRRU1VLiBRRU1VIGRvZXNuJ3QgaGF2ZQo+ID4gPiBhIGZ1bGwgZmV3IG9mIHRoZSBzeXN0ZW0u Cj4gPiA+IAo+ID4gPiBIZXJlIHRoZSBxdWVzdGlvbiBpczogZG9lcyBpdCBoYXZlIHRvIGJlIFFF TVUgdGhlIG9uZSB0byBnZW5lcmF0ZSB0aGUKPiA+ID4gQUNQSSBibG9icyBmb3IgdGhlIG52ZGlt bT8gSXQgd291bGQgYmUgbmljZXIgaWYgaXQgd2FzIHVwIHRvIGh2bWxvYWRlcgo+ID4gPiBsaWtl IHRoZSByZXN0LCBpbnN0ZWFkIG9mIGludHJvZHVjaW5nIHRoaXMgc3BsaXQtYnJhaW4gZGVzaWdu IGFib3V0Cj4gPiA+IEFDUEkuIFdlIG5lZWQgdG8gc2VlIGEgZGVzaWduIGRvYyB0byBmdWxseSB1 bmRlcnN0YW5kIHRoaXMuCj4gPiA+Cj4gPiAKPiA+IGh2bWxvYWRlciBydW5zIGluIHRoZSBndWVz dCBhbmQgaXMgcmVzcG9uc2libGUgdG8gYnVpbGQvbG9hZCBndWVzdAo+ID4gQUNQSS4gSG93ZXZl ciwgaXQncyBub3QgY2FwYWJsZSB0byBidWlsZCBBTUwgYXQgcnVudGltZSAoZm9yIHRoZSBsYWNr Cj4gPiBvZiBBTUwgYnVpbGRlcikuIElmIGFueSBndWVzdCBBQ1BJIG9iamVjdCBpcyBuZWVkZWQg KGUuZy4gYnkgZ3Vlc3QKPiA+IERTRFQpLCBpdCBoYXMgdG8gYmUgZ2VuZXJhdGVkIGZyb20gQVNM IGJ5IGlhc2wgYXQgWGVuIGNvbXBpbGUgdGltZSBhbmQKPiA+IHRoZW4gYmUgbG9hZGVkIGJ5IGh2 bWxvYWRlciBhdCBydW50aW1lLgo+ID4gCj4gPiBYZW4gaW5jbHVkZXMgYW4gT3BlcmF0aW9uUmVn aW9uICJCSU9TIiBpbiB0aGUgc3RhdGljIGdlbmVyYXRlZCBndWVzdAo+ID4gRFNEVCwgd2hvc2Ug YWRkcmVzcyBpcyBoYXJkY29kZWQgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbGlzdCBvZiB2YWx1ZXMK PiA+IGZpbGxlZCBieSBodm1sb2FkZXIgYXQgcnVudGltZS4gT3RoZXIgQUNQSSBvYmplY3RzIGNh biByZWZlciB0byB0aG9zZQo+ID4gdmFsdWVzIChlLmcuLCB0aGUgbnVtYmVyIG9mIHZDUFVzKS4g QnV0IGl0J3Mgbm90IGVub3VnaCBmb3IgZ2VuZXJhdGluZwo+ID4gZ3Vlc3QgTlZESU1NIEFDUEkg b2JqZWN0cyBhdCBjb21waWxlIHRpbWUgYW5kIHRoZW4gYmVpbmcgY3VzdG9taXplZAo+ID4gYW5k IGxvYWRlZCBieSBodm1sb2FkLCBiZWNhdXNlIGl0cyBzdHJ1Y3R1cmUgKGkuZS4sIHRoZSBudW1i ZXIgb2YKPiA+IG5hbWVzcGFjZSBkZXZpY2VzKSBjYW5ub3QgYmUgZGVjaWRlZCB1dGlsIHRoZSBn dWVzdCBjb25maWcgaXMga25vd24uCj4gPiAKPiA+IEFsdGVybmF0aXZlbHksIHdlIG1heSBpbnRy b2R1Y2UgYW4gQU1MIGJ1aWxkZXIgaW4gaHZtbG9hZGVyIGFuZCBidWlsZAo+ID4gYWxsIGd1ZXN0 IEFDUEkgY29tcGxldGVseSBpbiBodm1sb2FkZXIuIExvb2tpbmcgYXQgdGhlIHNpbWlsYXIKPiA+ IGltcGxlbWVudGF0aW9uIGluIFFFTVUsIGl0IHdvdWxkIG5vdCBiZSBzbWFsbCwgY29tcGFyZWQg dG8gdGhlIGN1cnJlbnQKPiA+IHNpemUgb2YgaHZtbG9hZGVyLiBCZXNpZGVzLCBJJ20gc3RpbGwg Z29pbmcgdG8gbGV0IFFFTVUgaGFuZGxlIGd1ZXN0Cj4gPiBOVkRJTU0gX0RTTSBhbmQgX0ZJVCBj YWxscywgd2hpY2ggaXMgYW5vdGhlciByZWFzb24gSSB1c2UgUUVNVSB0bwo+ID4gYnVpbGQgTlZE SU1NIEFDUEkuCj4gPiAKPiA+ID4gSWYgdGhlIGRlc2lnbiBkb2MgdGhyZWFkIGxlZCBpbnRvIHRo aW5raW5nIHRoYXQgaXQgaGFzIHRvIGJlIFFFTVUgdG8KPiA+ID4gZ2VuZXJhdGUgdGhlbSwgdGhl biB3b3VsZCBpdCBtYWtlIHRoZSBjb2RlIG5pY2VyIGlmIHdlIHVzZWQgZndfY2ZnIHRvCj4gPiA+ IGdldCB0aGUgKGZ1bGwgb3IgcGFydGlhbCkgdGFibGVzIGZyb20gUUVNVSwgYXMgSWdvciBzdWdn ZXN0ZWQ/Cj4gPiAKPiA+IEknbGwgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUgKHdoaWNoIEkgZGlk bid0IG5vdGljZSkgcG9pbnRlZCBieSBJZ29yLgo+IAo+IEFuZCB0aGVyZSBpcyBhIHNwZWMgdG9v IQo+IAo+IGh0dHBzOi8vZ2l0aHViLmNvbS9xZW11L3FlbXUvYmxvYi9tYXN0ZXIvZG9jcy9zcGVj cy9md19jZmcudHh0Cj4gCj4gSWdvciwgZGlkIHlvdSBoYXZlIGluIG1pbmQgdG8gdXNlIEZXX0NG R19GSUxFX0RJUiB0byByZXRyaWV2ZSB0aGUKPiBBQ1BJIEFNTCBjb2RlPwo+IAoKQmFzaWNhbGx5 LCBRRU1VIGJ1aWxkcyB0d28gUk9NcyBmb3IgZ3Vlc3QsIC9yb21AZXRjL2FjcGkvdGFibGVzIGFu ZAovcm9tQGV0Yy90YWJsZS1sb2FkZXIuIFRoZSBmb3JtZXIgaXMgdW5zdHJ1Y3R1cmVkIHRvIGd1 ZXN0LCBhbmQKY29udGFpbnMgYWxsIGRhdGEgb2YgZ3Vlc3QgQUNQSS4gVGhlIGxhdHRlciBpcyBh IEJJT1NMaW5rZXJMb2FkZXIKb3JnYW5pemVkIGFzIGEgc2V0IG9mIGNvbW1hbmRzLCB3aGljaCBk aXJlY3QgdGhlIGd1ZXN0IChlLmcuLCBTZWFCSU9TCm9uIEtWTS9RRU1VKSB0byByZWxvY2F0ZSBk YXRhIGluIHRoZSBmb3JtZXIgZmlsZSwgcmVjYWxjdWxhdGUgY2hlY2tzdW0Kb2Ygc3BlY2lmaWVk IGFyZWEsIGFuZCBmaWxsIGd1ZXN0IGFkZHJlc3MgaW4gc3BlY2lmaWVkIEFDUEkgZmllbGQuCgpP bmUgcGFydCBvZiBteSBwYXRjaGVzIGlzIHRvIGltcGxlbWVudCBhIG1lY2hhbmlzbSB0byB0ZWxs IFhlbiB3aGljaApwYXJ0IG9mIEFDUEkgZGF0YSBpcyBhIHRhYmxlIChORklUKSwgYW5kIHdoaWNo IHBhcnQgZGVmaW5lcyBhCm5hbWVzcGFjZSBkZXZpY2UgYW5kIHdoYXQgdGhlIGRldmljZSBuYW1l IGlzLiBJIGNhbiBhZGQgdHdvIG5ldyBsb2FkZXIKY29tbWFuZHMgZm9yIHRoZW0gcmVzcGVjdGl2 ZWx5LgoKQmVjYXVzZSB0aGV5IGp1c3QgcHJvdmlkZSBpbmZvcm1hdGlvbiBhbmQgU2VhQklPUyBp biBub24teGVuCmVudmlyb25tZW50IGlnbm9yZXMgdW5yZWNvZ25pemVkIGNvbW1hbmRzLCB0aGV5 IHdpbGwgbm90IGJyZWFrIFNlYUJJT1MKaW4gbm9uLXhlbiBlbnZpcm9ubWVudC4KCk9uIFFFTVUg c2lkZSwgbW9zdCBYZW4tc3BlY2lmaWMgaGFja3MgaW4gQUNQSSBidWlsZGVyIGNvdWxkIGJlCmRy b3BwZWQsIGFuZCByZXBsYWNlZCBieSBhZGRpbmcgdGhlIG5ldyBsb2FkZXIgY29tbWFuZHMgKHRo b3VnaCB0aGV5Cm1heSBiZSB1c2VkIG9ubHkgYnkgWGVuKS4KCk9uIFhlbiBzaWRlLCBhIGZ3X2Nm ZyBkcml2ZXIgYW5kIGEgQklPU0xpbmtlckxvYWRlciBjb21tYW5kIGV4ZWN1dG9yCmFyZSBuZWVk ZWQgaW4sIHBlcmhhcHMsIGh2bWxvYWRlci4KCgpIYW96aG9uZwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==