From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55717) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e1x2u-0001ZN-Lx for qemu-devel@nongnu.org; Tue, 10 Oct 2017 12:06:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e1x2p-0006Wz-NF for qemu-devel@nongnu.org; Tue, 10 Oct 2017 12:06:16 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:46976) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e1x2p-0006UL-EL for qemu-devel@nongnu.org; Tue, 10 Oct 2017 12:06:11 -0400 Date: Tue, 10 Oct 2017 12:05:44 -0400 From: Konrad Rzeszutek Wilk Message-ID: <20171010160544.GA1772@char.us.oracle.com> 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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170912031509.vufszbju3s2v2bw3@hz-desktop> 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: 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 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? > > One possible issue to use fw_cfg is how to avoid the conflict between > ACPI built by QEMU and ACPI built by hvmloader (e.g., both may use the > same table signature / device names / ...). In my current design, QEMU > will pass the table signatures and device names used in its ACPI to > Xen, and Xen can check the conflict with its own ACPI. Perhaps we can > add necessary functions in fw_cfg as well. Anyway, let me first look > at the code. > > Thanks, > Haozhong From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [RFC QEMU PATCH v3 00/10] Implement vNVDIMM for Xen HVM guest Date: Tue, 10 Oct 2017 12:05:44 -0400 Message-ID: <20171010160544.GA1772@char.us.oracle.com> 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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20170912031509.vufszbju3s2v2bw3@hz-desktop> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: 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 List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBTZXAgMTIsIDIwMTcgYXQgMTE6MTU6MDlBTSArMDgwMCwgSGFvemhvbmcgWmhhbmcg d3JvdGU6Cj4gT24gMDkvMTEvMTcgMTE6NTIgLTA3MDAsIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90 ZToKPiA+IENDJ2luZyB4ZW4tZGV2ZWwsIGFuZCB0aGUgWGVuIHRvb2xzIGFuZCB4ODYgbWFpbnRh aW5lcnMuCj4gPiAKPiA+IE9uIE1vbiwgMTEgU2VwIDIwMTcsIElnb3IgTWFtbWVkb3Ygd3JvdGU6 Cj4gPiA+IE9uIE1vbiwgMTEgU2VwIDIwMTcgMTI6NDE6NDcgKzA4MDAKPiA+ID4gSGFvemhvbmcg WmhhbmcgPGhhb3pob25nLnpoYW5nQGludGVsLmNvbT4gd3JvdGU6Cj4gPiA+IAo+ID4gPiA+IFRo aXMgaXMgdGhlIFFFTVUgcGFydCBwYXRjaGVzIHRoYXQgd29ya3Mgd2l0aCB0aGUgYXNzb2NpYXRl ZCBYZW4KPiA+ID4gPiBwYXRjaGVzIHRvIGVuYWJsZSB2TlZESU1NIHN1cHBvcnQgZm9yIFhlbiBI Vk0gZG9tYWlucy4gWGVuIHJlbGllcyBvbgo+ID4gPiA+IFFFTVUgdG8gYnVpbGQgZ3Vlc3QgTkZJ VCBhbmQgTlZESU1NIG5hbWVzcGFjZSBkZXZpY2VzLCBhbmQgYWxsb2NhdGUKPiA+ID4gPiBndWVz dCBhZGRyZXNzIHNwYWNlIGZvciB2TlZESU1NIGRldmljZXMuCj4gPiA+ID4gCj4gPiA+ID4gQWxs IHBhdGNoZXMgY2FuIGJlIGZvdW5kIGF0Cj4gPiA+ID4gICBYZW46ICBodHRwczovL2dpdGh1Yi5j b20vaHp6aGFuOS94ZW4uZ2l0IG52ZGltbS1yZmMtdjMKPiA+ID4gPiAgIFFFTVU6IGh0dHBzOi8v Z2l0aHViLmNvbS9oenpoYW45L3FlbXUuZ2l0IHhlbi1udmRpbW0tcmZjLXYzCj4gPiA+ID4gCj4g PiA+ID4gUGF0Y2ggMSBpcyB0byBhdm9pZCBkZXJlZmVyZW5jaW5nIHRoZSBOVUxMIHBvaW50ZXIg dG8gbm9uLWV4aXN0aW5nCj4gPiA+ID4gbGFiZWwgZGF0YSwgYXMgdGhlIFhlbiBzaWRlIHN1cHBv cnQgZm9yIGxhYmVscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Lgo+ID4gPiA+IAo+ID4gPiA+IFBh dGNoIDIgJiAzIGFkZCBhIG1lbW9yeSBiYWNrZW5kIGRlZGljYXRlZCBmb3IgWGVuIHVzYWdlIGFu ZCBhIGhvdHBsdWcKPiA+ID4gPiBtZW1vcnkgcmVnaW9uIGZvciBYZW4gZ3Vlc3QsIGluIG9yZGVy IHRvIG1ha2UgdGhlIGV4aXN0aW5nIG52ZGltbQo+ID4gPiA+IGRldmljZSBwbHVnZ2luZyBwYXRo IHdvcmsgb24gWGVuLgo+ID4gPiA+IAo+ID4gPiA+IFBhdGNoIDQgLSAxMCBidWlsZCBhbmQgY29v eSBORklUIGZyb20gUUVNVSB0byBYZW4gZ3Vlc3QsIHdoZW4gUUVNVSBpcwo+ID4gPiA+IHVzZWQg YXMgdGhlIFhlbiBkZXZpY2UgbW9kZWwuCj4gPiA+IAo+ID4gPiBJJ3ZlIHNraW1tZWQgb3ZlciBw YXRjaC1zZXQgYW5kIGNhbid0IHNheSB0aGF0IEknbSBoYXBweSB3aXRoCj4gPiA+IG51bWJlciBv ZiB4ZW5fZW5hYmxlZCgpIGludmFyaWFudHMgaXQgaW50cm9kdWNlZCBhcyB3ZWxsIGFzCj4gPiA+ IHdpdGggcGFydGlhbCBibG9icyBpdCBjcmVhdGVzLgo+ID4gCj4gPiBJIGhhdmUgbm90IHJlYWQg dGhlIHNlcmllcyAoSGFvemhvbmcsIHBsZWFzZSBDQyBtZSwgQW50aG9ueSBhbmQKPiA+IHhlbi1k ZXZlbCB0byB0aGUgd2hvbGUgc2VyaWVzIG5leHQgdGltZSksIGJ1dCB5ZXMsIGluZGVlZC4gTGV0 J3Mgbm90IGFkZAo+ID4gbW9yZSB4ZW5fZW5hYmxlZCgpIGlmIHBvc3NpYmxlLgo+ID4gCj4gPiBI YW96aG9uZywgd2FzIHRoZXJlIGEgZGVzaWduIGRvY3VtZW50IHRocmVhZCBvbiB4ZW4tZGV2ZWwg YWJvdXQgdGhpcz8gSWYKPiA+IHNvLCBkaWQgaXQgcmVhY2ggYSBjb25jbHVzaW9uPyBXYXMgdGhl IGRlc2lnbiBhY2NlcHRlZD8gSWYgc28sIHBsZWFzZQo+ID4gYWRkIGEgbGluayB0byB0aGUgZGVz aWduIGRvYyBpbiB0aGUgaW50cm9kdWN0b3J5IGVtYWlsLCBzbyB0aGF0Cj4gPiBldmVyeWJvZHkg Y2FuIHJlYWQgaXQgYW5kIGJlIG9uIHRoZSBzYW1lIHBhZ2UuCj4gCj4gWWVzLCB0aGVyZSBpcyBh IGRlc2lnbiBbMV0gZGlzY3Vzc2VkIGFuZCByZXZpZXdlZC4gU2VjdGlvbiA0LjMgZGlzY3Vzc2Vk Cj4gdGhlIGd1ZXN0IEFDUEkuCj4gCj4gWzFdIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv YXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNi0wNy9tc2cwMTkyMS5odG1sCgpJZ29yLCBkaWQg eW91IGhhdmUgYSBjaGFuY2UgdG8gcmVhZCBpdD8KCi4uIHNlZSBiZWxvdwo+IAo+ID4gCj4gPiAK PiA+ID4gSSdkIGxpa2UgdG8gcmVkdWNlIGFib3ZlIGFuZCBhIHdheSB0byBkbyB0aGlzIG1pZ2h0 IGJlIG1ha2luZyB4ZW4gCj4gPiA+ICAxLiB1c2UgZndfY2ZnCj4gPiA+ICAyLiBmZXRjaCBRRU1V IGJ1aWxkIGFjcGkgdGFibGVzIGZyb20gZndfY2ZnCj4gPiA+ICAzLiBleHRyYWN0IG52ZGltIHRh YmxlcyAod2hpY2ggaXMgdHJpdmlhbCkgYW5kIHVzZSB0aGVtCj4gPiA+IAo+ID4gPiBsb29raW5n IGF0IHhlbl9sb2FkX2xpbnV4KCksIGl0IHNlZW1zIHBvc3NpYmxlIHRvIHVzZSBmd19jZmcuCj4g PiA+IAo+ID4gPiBTbyB3aGF0J3Mgc3RvcHBpbmcgeGVuIGZyb20gdXNpbmcgaXQgZWxzZXdoZXJl PywKPiA+ID4gaW5zdGVhZCBvZiBhZGRpbmcgbW9yZSB4ZW4gc3BlY2lmaWMgY29kZSB0byBkbyAn dGhlIHNhbWUnCj4gPiA+IGpvYiBhbmQgbm90IHJldXNpbmcvc2hhcmluZyBjb21tb24gY29kZSB3 aXRoIHRjZy9rdm0uCj4gPiAKPiA+IFNvIGZhciwgQUNQSSB0YWJsZXMgaGF2ZSBub3QgYmVlbiBn ZW5lcmF0ZWQgYnkgUUVNVS4gWGVuIEhWTSBtYWNoaW5lcwo+ID4gcmVseSBvbiBhIGZpcm13YXJl LWxpa2UgYXBwbGljYXRpb24gY2FsbGVkICJodm1sb2FkZXIiIHRoYXQgcnVucyBpbgo+ID4gZ3Vl c3QgY29udGV4dCBhbmQgZ2VuZXJhdGVzIHRoZSBBQ1BJIHRhYmxlcy4gSSBoYXZlIG5vIG9waW5p b25zIG9uCj4gPiBodm1sb2FkZXIgYW5kIEknbGwgbGV0IHRoZSBYZW4gbWFpbnRhaW5lcnMgdGFs ayBhYm91dCBpdC4gSG93ZXZlciwga2VlcAo+ID4gaW4gbWluZCB0aGF0IHdpdGggYW4gSFZNIGd1 ZXN0IHNvbWUgZGV2aWNlcyBhcmUgZW11bGF0ZWQgYnkgWGVuIGFuZC9vcgo+ID4gYnkgb3RoZXIg ZGV2aWNlIGVtdWxhdG9ycyB0aGF0IGNhbiBydW4gYWxvbmdzaWRlIFFFTVUuIFFFTVUgZG9lc24n dCBoYXZlCj4gPiBhIGZ1bGwgZmV3IG9mIHRoZSBzeXN0ZW0uCj4gPiAKPiA+IEhlcmUgdGhlIHF1 ZXN0aW9uIGlzOiBkb2VzIGl0IGhhdmUgdG8gYmUgUUVNVSB0aGUgb25lIHRvIGdlbmVyYXRlIHRo ZQo+ID4gQUNQSSBibG9icyBmb3IgdGhlIG52ZGltbT8gSXQgd291bGQgYmUgbmljZXIgaWYgaXQg d2FzIHVwIHRvIGh2bWxvYWRlcgo+ID4gbGlrZSB0aGUgcmVzdCwgaW5zdGVhZCBvZiBpbnRyb2R1 Y2luZyB0aGlzIHNwbGl0LWJyYWluIGRlc2lnbiBhYm91dAo+ID4gQUNQSS4gV2UgbmVlZCB0byBz ZWUgYSBkZXNpZ24gZG9jIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhpcy4KPiA+Cj4gCj4gaHZtbG9h ZGVyIHJ1bnMgaW4gdGhlIGd1ZXN0IGFuZCBpcyByZXNwb25zaWJsZSB0byBidWlsZC9sb2FkIGd1 ZXN0Cj4gQUNQSS4gSG93ZXZlciwgaXQncyBub3QgY2FwYWJsZSB0byBidWlsZCBBTUwgYXQgcnVu dGltZSAoZm9yIHRoZSBsYWNrCj4gb2YgQU1MIGJ1aWxkZXIpLiBJZiBhbnkgZ3Vlc3QgQUNQSSBv YmplY3QgaXMgbmVlZGVkIChlLmcuIGJ5IGd1ZXN0Cj4gRFNEVCksIGl0IGhhcyB0byBiZSBnZW5l cmF0ZWQgZnJvbSBBU0wgYnkgaWFzbCBhdCBYZW4gY29tcGlsZSB0aW1lIGFuZAo+IHRoZW4gYmUg bG9hZGVkIGJ5IGh2bWxvYWRlciBhdCBydW50aW1lLgo+IAo+IFhlbiBpbmNsdWRlcyBhbiBPcGVy YXRpb25SZWdpb24gIkJJT1MiIGluIHRoZSBzdGF0aWMgZ2VuZXJhdGVkIGd1ZXN0Cj4gRFNEVCwg d2hvc2UgYWRkcmVzcyBpcyBoYXJkY29kZWQgYW5kIHdoaWNoIGNvbnRhaW5zIGEgbGlzdCBvZiB2 YWx1ZXMKPiBmaWxsZWQgYnkgaHZtbG9hZGVyIGF0IHJ1bnRpbWUuIE90aGVyIEFDUEkgb2JqZWN0 cyBjYW4gcmVmZXIgdG8gdGhvc2UKPiB2YWx1ZXMgKGUuZy4sIHRoZSBudW1iZXIgb2YgdkNQVXMp LiBCdXQgaXQncyBub3QgZW5vdWdoIGZvciBnZW5lcmF0aW5nCj4gZ3Vlc3QgTlZESU1NIEFDUEkg b2JqZWN0cyBhdCBjb21waWxlIHRpbWUgYW5kIHRoZW4gYmVpbmcgY3VzdG9taXplZAo+IGFuZCBs b2FkZWQgYnkgaHZtbG9hZCwgYmVjYXVzZSBpdHMgc3RydWN0dXJlIChpLmUuLCB0aGUgbnVtYmVy IG9mCj4gbmFtZXNwYWNlIGRldmljZXMpIGNhbm5vdCBiZSBkZWNpZGVkIHV0aWwgdGhlIGd1ZXN0 IGNvbmZpZyBpcyBrbm93bi4KPiAKPiBBbHRlcm5hdGl2ZWx5LCB3ZSBtYXkgaW50cm9kdWNlIGFu IEFNTCBidWlsZGVyIGluIGh2bWxvYWRlciBhbmQgYnVpbGQKPiBhbGwgZ3Vlc3QgQUNQSSBjb21w bGV0ZWx5IGluIGh2bWxvYWRlci4gTG9va2luZyBhdCB0aGUgc2ltaWxhcgo+IGltcGxlbWVudGF0 aW9uIGluIFFFTVUsIGl0IHdvdWxkIG5vdCBiZSBzbWFsbCwgY29tcGFyZWQgdG8gdGhlIGN1cnJl bnQKPiBzaXplIG9mIGh2bWxvYWRlci4gQmVzaWRlcywgSSdtIHN0aWxsIGdvaW5nIHRvIGxldCBR RU1VIGhhbmRsZSBndWVzdAo+IE5WRElNTSBfRFNNIGFuZCBfRklUIGNhbGxzLCB3aGljaCBpcyBh bm90aGVyIHJlYXNvbiBJIHVzZSBRRU1VIHRvCj4gYnVpbGQgTlZESU1NIEFDUEkuCj4gCj4gPiBJ ZiB0aGUgZGVzaWduIGRvYyB0aHJlYWQgbGVkIGludG8gdGhpbmtpbmcgdGhhdCBpdCBoYXMgdG8g YmUgUUVNVSB0bwo+ID4gZ2VuZXJhdGUgdGhlbSwgdGhlbiB3b3VsZCBpdCBtYWtlIHRoZSBjb2Rl IG5pY2VyIGlmIHdlIHVzZWQgZndfY2ZnIHRvCj4gPiBnZXQgdGhlIChmdWxsIG9yIHBhcnRpYWwp IHRhYmxlcyBmcm9tIFFFTVUsIGFzIElnb3Igc3VnZ2VzdGVkPwo+IAo+IEknbGwgaGF2ZSBhIGxv b2sgYXQgdGhlIGNvZGUgKHdoaWNoIEkgZGlkbid0IG5vdGljZSkgcG9pbnRlZCBieSBJZ29yLgoK QW5kIHRoZXJlIGlzIGEgc3BlYyB0b28hCgpodHRwczovL2dpdGh1Yi5jb20vcWVtdS9xZW11L2Js b2IvbWFzdGVyL2RvY3Mvc3BlY3MvZndfY2ZnLnR4dAoKSWdvciwgZGlkIHlvdSBoYXZlIGluIG1p bmQgdG8gdXNlIEZXX0NGR19GSUxFX0RJUiB0byByZXRyaWV2ZSB0aGUKQUNQSSBBTUwgY29kZT8K Cj4gCj4gT25lIHBvc3NpYmxlIGlzc3VlIHRvIHVzZSBmd19jZmcgaXMgaG93IHRvIGF2b2lkIHRo ZSBjb25mbGljdCBiZXR3ZWVuCj4gQUNQSSBidWlsdCBieSBRRU1VIGFuZCBBQ1BJIGJ1aWx0IGJ5 IGh2bWxvYWRlciAoZS5nLiwgYm90aCBtYXkgdXNlIHRoZQo+IHNhbWUgdGFibGUgc2lnbmF0dXJl IC8gZGV2aWNlIG5hbWVzIC8gLi4uKS4gSW4gbXkgY3VycmVudCBkZXNpZ24sIFFFTVUKPiB3aWxs IHBhc3MgdGhlIHRhYmxlIHNpZ25hdHVyZXMgYW5kIGRldmljZSBuYW1lcyB1c2VkIGluIGl0cyBB Q1BJIHRvCj4gWGVuLCBhbmQgWGVuIGNhbiBjaGVjayB0aGUgY29uZmxpY3Qgd2l0aCBpdHMgb3du IEFDUEkuIFBlcmhhcHMgd2UgY2FuCj4gYWRkIG5lY2Vzc2FyeSBmdW5jdGlvbnMgaW4gZndfY2Zn IGFzIHdlbGwuIEFueXdheSwgbGV0IG1lIGZpcnN0IGxvb2sKPiBhdCB0aGUgY29kZS4KPiAKPiBU aGFua3MsCj4gSGFvemhvbmcKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=