From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755276AbcHSP2v (ORCPT ); Fri, 19 Aug 2016 11:28:51 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:20105 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754740AbcHSP2r (ORCPT ); Fri, 19 Aug 2016 11:28:47 -0400 Date: Fri, 19 Aug 2016 11:27:07 -0400 From: Konrad Rzeszutek Wilk To: One Thousand Gnomes Cc: Jan Beulich , Andrew Cooper , stefan.bader@canonical.com, david.vrabel@citrix.com, xen-devel , Boris Ostrovsky , chuck.anderson@oracle.com, Juergen Gross , linux-kernel@vger.kernel.org Subject: Re: [Xen-devel] XSA 154 and ISA region (640K -> 1MB) WB cache instead of UC Message-ID: <20160819152707.GC26577@char.us.oracle.com> References: <20160817203238.GA9408@char.us.oracle.com> <57B5A4C90200007800106FF2@prv-mh.provo.novell.com> <47fabc70-4500-1035-7dc7-7f0a3915471f@citrix.com> <57B5B4560200007800107092@prv-mh.provo.novell.com> <20160818163544.07c8a051@lxorguk.ukuu.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160818163544.07c8a051@lxorguk.ukuu.org.uk> User-Agent: Mutt/1.6.2 (2016-07-01) X-Source-IP: userv0021.oracle.com [156.151.31.71] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Aug 18, 2016 at 04:35:44PM +0100, One Thousand Gnomes wrote: > On Thu, 18 Aug 2016 05:12:54 -0600 > "Jan Beulich" wrote: > > > >>> On 18.08.16 at 12:16, wrote: > > > On 18/08/16 11:06, Jan Beulich wrote: > > >>>>> On 17.08.16 at 22:32, wrote: > > >>> Looking at the kernel it assumes that WB is ok for 640KB->1MB. > > >>> The comment says: > > >>> " /* Low ISA region is always mapped WB in page table. No need to track > > > *" > > >> As per above it's not clear to me what this comment is backed by. > > > > > > This states what is in the pagetables. Not the combined result with MTRRs. > > > > > > WB in the pagetables and WC/UB in the MTRRs is a legal combination which > > > functions correctly. > > > > True, but then again - haven't I been told multiple times that Linux > > nowadays prefers to run without using MTRRs? > > The BIOS sets up the fixed MTRR registers for the 640K-1MB window. Those > are separate to the variable range MTRR registers used for main memory > with specific mappings for segments A000 to BFFF then C000-C7FF / > C800-CFFF / etc up to FFFF. OK, so BIOS-inherited. Looking at the Intel SDM (figure 11-7), if the MTRR is UC for that, then having pagetables being either UC or WB are fine. Except Linux's use of the quirk (is_untracked_pat_range) ends up always requesting WB. And to combat the splat, the patch: >>From 5209635f23786fb88cf0ce77719da8acda63bf65 Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Fri, 19 Aug 2016 11:06:44 -0400 Subject: [PATCH] x86/xen: Add x86_platform.is_untracked_pat_range quirk to ignore ISA regions. On x86 whenever VMAs are setup, the 'is_ISA_range quirk' (which this patch re-implements) is used to figure whether to ignore the requested PAT type and always use WB (see 'reserve_memtype'). Specifically it forces the WB type for any region in the ISA space. >>From the Intel SDM, the combination of MTRR (UC, which is setup by the BIOS) and PAT (UC or WB) for the ISA region ends up with the same value - UC. However on Xen, due to XSA 154 we enforce that mappings that _ANY_ pagetable entry to MMIO ranges MUST have the same the same cachability mapping - and in this case we enforce UC. Which means that with XSA 154 (and without this patch) any application that maps /dev/mem to get SMBIOS information (like mcelog), and pokes in the ISA region will not have an PTE set. That is due to reserve_pfn_range returning -EINVAL which results in the PTE not being set. [These are debug entries added in 'reserve_pfn_range'] mcelog:2471 0xf0000->0xf1000, req_type=write-back new_type=write-back mcelog:2471 0xeb000->0xed000, req_type=write-back new_type=write-back .. above are successfull ones, but: mcelog:2471 0xeb000->0xed000, req_type=uncached new_type=uncached [again, a debug one:] mcelog:2471 want=uncached got=write-back strict 0x000eb000-0x000ecfff mcelog:2471 map pfn expected mapping type uncached for [mem 0x000eb000-0x000ecfff], got write-back ------------[ cut here ]------------ [] dump_stack+0x63/0x83 [] warn_slowpath_common+0x95/0xe0 [] warn_slowpath_null+0x1a/0x20 [] untrack_pfn+0x93/0xc0 [] unmap_single_vma+0xa9/0x100 [] unmap_vmas+0x54/0xa0 [] exit_mmap+0x9a/0x150 [] mmput+0x73/0x110 [] dup_mm+0x105/0x110 [] copy_process+0x11ed/0x1240 [] do_fork+0x79/0x280 [] ? syscall_trace_enter_phase1+0x153/0x180 [] SyS_clone+0x16/0x20 [] system_call_fastpath+0x12/0x71 results in that splat. The effective result of the function below is for 'reserver_memtype' to ignore the result from 'x86_platform.is_untracked_pat_range' quirk. Which means that the splat above does not happen. Signed-off-by: Konrad Rzeszutek Wilk --- arch/x86/xen/enlighten.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 8ffb089..3238d04 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -283,6 +283,27 @@ static void __init xen_banner(void) version >> 16, version & 0xffff, extra.extraversion, xen_feature(XENFEAT_mmu_pt_update_preserve_ad) ? " (preserve-AD)" : ""); } + +/* + * On x86 whenever VMAs are setup, the 'is_ISA_range quirk' (which we + * re-implement below) is used to figure whether to ignore the + * requested PAT type and always use WB (see 'reserve_memtype'). + * + * The combination of MTRR (UC) and PAT (UC or WB) for the ISA region ends + * up with the same value - UC. + * + * However on Xen, due to XSA 154 we enforce that mappings to _ANY_ MMIO + * range MUST have the same the same cachability mapping - and in this case + * we enforce UC for everything. + * + * The effective result of the function below is for 'reserver_memtype' + * to ignore the result from 'x86_platform.is_untracked_pat_range' quirk. + */ +static bool xen_ignore(u64 s, u64 e) +{ + return false; +} + /* Check if running on Xen version (major, minor) or later */ bool xen_running_on_version_or_later(unsigned int major, unsigned int minor) @@ -1730,6 +1751,8 @@ asmlinkage __visible void __init xen_start_kernel(void) x86_init.mpparse.get_smp_config = x86_init_uint_noop; xen_boot_params_init_edd(); + + x86_platform.is_untracked_pat_range = xen_ignore; } #ifdef CONFIG_PCI /* PCI BIOS service won't work from a PV guest. */ -- 2.5.5 > > Alan From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: XSA 154 and ISA region (640K -> 1MB) WB cache instead of UC Date: Fri, 19 Aug 2016 11:27:07 -0400 Message-ID: <20160819152707.GC26577@char.us.oracle.com> References: <20160817203238.GA9408@char.us.oracle.com> <57B5A4C90200007800106FF2@prv-mh.provo.novell.com> <47fabc70-4500-1035-7dc7-7f0a3915471f@citrix.com> <57B5B4560200007800107092@prv-mh.provo.novell.com> <20160818163544.07c8a051@lxorguk.ukuu.org.uk> 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 1balhW-00034n-II for xen-devel@lists.xenproject.org; Fri, 19 Aug 2016 15:27:18 +0000 Content-Disposition: inline In-Reply-To: <20160818163544.07c8a051@lxorguk.ukuu.org.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: One Thousand Gnomes Cc: Juergen Gross , chuck.anderson@oracle.com, Andrew Cooper , linux-kernel@vger.kernel.org, stefan.bader@canonical.com, david.vrabel@citrix.com, Jan Beulich , xen-devel , Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBBdWcgMTgsIDIwMTYgYXQgMDQ6MzU6NDRQTSArMDEwMCwgT25lIFRob3VzYW5kIEdu b21lcyB3cm90ZToKPiBPbiBUaHUsIDE4IEF1ZyAyMDE2IDA1OjEyOjU0IC0wNjAwCj4gIkphbiBC ZXVsaWNoIiA8SkJldWxpY2hAc3VzZS5jb20+IHdyb3RlOgo+IAo+ID4gPj4+IE9uIDE4LjA4LjE2 IGF0IDEyOjE2LCA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4gd3JvdGU6ICAKPiA+ID4gT24g MTgvMDgvMTYgMTE6MDYsIEphbiBCZXVsaWNoIHdyb3RlOiAgCj4gPiA+Pj4+PiBPbiAxNy4wOC4x NiBhdCAyMjozMiwgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+IHdyb3RlOiAgCj4gPiA+Pj4gICAg TG9va2luZyBhdCB0aGUga2VybmVsIGl0IGFzc3VtZXMgdGhhdCBXQiBpcyBvayBmb3IgNjQwS0It PjFNQi4KPiA+ID4+PiAgICBUaGUgY29tbWVudCBzYXlzOgo+ID4gPj4+ICAgICIgLyogTG93IElT QSByZWdpb24gaXMgYWx3YXlzIG1hcHBlZCBXQiBpbiBwYWdlIHRhYmxlLiBObyBuZWVkIHRvIHRy YWNrICAgCj4gPiA+ICoiICAKPiA+ID4+IEFzIHBlciBhYm92ZSBpdCdzIG5vdCBjbGVhciB0byBt ZSB3aGF0IHRoaXMgY29tbWVudCBpcyBiYWNrZWQgYnkuICAKPiA+ID4gCj4gPiA+IFRoaXMgc3Rh dGVzIHdoYXQgaXMgaW4gdGhlIHBhZ2V0YWJsZXMuICBOb3QgdGhlIGNvbWJpbmVkIHJlc3VsdCB3 aXRoIE1UUlJzLgo+ID4gPiAKPiA+ID4gV0IgaW4gdGhlIHBhZ2V0YWJsZXMgYW5kIFdDL1VCIGlu IHRoZSBNVFJScyBpcyBhIGxlZ2FsIGNvbWJpbmF0aW9uIHdoaWNoCj4gPiA+IGZ1bmN0aW9ucyBj b3JyZWN0bHkuICAKPiA+IAo+ID4gVHJ1ZSwgYnV0IHRoZW4gYWdhaW4gLSBoYXZlbid0IEkgYmVl biB0b2xkIG11bHRpcGxlIHRpbWVzIHRoYXQgTGludXgKPiA+IG5vd2FkYXlzIHByZWZlcnMgdG8g cnVuIHdpdGhvdXQgdXNpbmcgTVRSUnM/Cj4gCj4gVGhlIEJJT1Mgc2V0cyB1cCB0aGUgZml4ZWQg TVRSUiByZWdpc3RlcnMgZm9yIHRoZSA2NDBLLTFNQiB3aW5kb3cuIFRob3NlCj4gYXJlIHNlcGFy YXRlIHRvIHRoZSB2YXJpYWJsZSByYW5nZSBNVFJSIHJlZ2lzdGVycyB1c2VkIGZvciBtYWluIG1l bW9yeQo+IHdpdGggc3BlY2lmaWMgbWFwcGluZ3MgZm9yIHNlZ21lbnRzIEEwMDAgdG8gQkZGRiB0 aGVuIEMwMDAtQzdGRiAvCj4gQzgwMC1DRkZGIC8gZXRjIHVwIHRvIEZGRkYuCgpPSywgc28gQklP Uy1pbmhlcml0ZWQuCgpMb29raW5nIGF0IHRoZSBJbnRlbCBTRE0gKGZpZ3VyZSAxMS03KSwgaWYg dGhlIE1UUlIgaXMgVUMgZm9yIHRoYXQsIHRoZW4gCmhhdmluZyBwYWdldGFibGVzIGJlaW5nIGVp dGhlciBVQyBvciBXQiBhcmUgZmluZS4gRXhjZXB0IExpbnV4J3MgdXNlCm9mIHRoZSBxdWlyayAo aXNfdW50cmFja2VkX3BhdF9yYW5nZSkgZW5kcyB1cCBhbHdheXMgcmVxdWVzdGluZyBXQi4KCkFu ZCB0byBjb21iYXQgdGhlIHNwbGF0LCB0aGUgcGF0Y2g6CgoKRnJvbSA1MjA5NjM1ZjIzNzg2ZmI4 OGNmMGNlNzc3MTlkYThhY2RhNjNiZjY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBL b25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CkRhdGU6IEZyaSwg MTkgQXVnIDIwMTYgMTE6MDY6NDQgLTA0MDAKU3ViamVjdDogW1BBVENIXSB4ODYveGVuOiBBZGQg eDg2X3BsYXRmb3JtLmlzX3VudHJhY2tlZF9wYXRfcmFuZ2UgcXVpcmsgdG8KIGlnbm9yZSBJU0Eg cmVnaW9ucy4KCk9uIHg4NiB3aGVuZXZlciBWTUFzIGFyZSBzZXR1cCwgdGhlICdpc19JU0FfcmFu Z2UgcXVpcmsnICh3aGljaCB0aGlzCnBhdGNoIHJlLWltcGxlbWVudHMpIGlzIHVzZWQgdG8gZmln dXJlIHdoZXRoZXIgdG8gaWdub3JlIHRoZQpyZXF1ZXN0ZWQgUEFUIHR5cGUgYW5kIGFsd2F5cyB1 c2UgV0IgKHNlZSAncmVzZXJ2ZV9tZW10eXBlJykuClNwZWNpZmljYWxseSBpdCBmb3JjZXMgdGhl IFdCIHR5cGUgZm9yIGFueSByZWdpb24gaW4gdGhlIElTQSBzcGFjZS4KCkZyb20gdGhlIEludGVs IFNETSwgdGhlIGNvbWJpbmF0aW9uIG9mIE1UUlIgKFVDLCB3aGljaCBpcyBzZXR1cCBieQp0aGUg QklPUykgYW5kIFBBVCAoVUMgb3IgV0IpIGZvciB0aGUgSVNBIHJlZ2lvbiBlbmRzIHVwIHdpdGgg dGhlIHNhbWUKdmFsdWUgLSBVQy4KCkhvd2V2ZXIgb24gWGVuLCBkdWUgdG8gWFNBIDE1NCB3ZSBl bmZvcmNlIHRoYXQgbWFwcGluZ3MgdGhhdCBfQU5ZXwpwYWdldGFibGUgZW50cnkgdG8gTU1JTyBy YW5nZXMgTVVTVCBoYXZlIHRoZSBzYW1lIHRoZSBzYW1lIGNhY2hhYmlsaXR5Cm1hcHBpbmcgLSBh bmQgaW4gdGhpcyBjYXNlIHdlIGVuZm9yY2UgVUMuCgpXaGljaCBtZWFucyB0aGF0IHdpdGggWFNB IDE1NCAoYW5kIHdpdGhvdXQgdGhpcyBwYXRjaCkgYW55IGFwcGxpY2F0aW9uCnRoYXQgbWFwcyAv ZGV2L21lbSB0byBnZXQgU01CSU9TIGluZm9ybWF0aW9uIChsaWtlIG1jZWxvZyksIGFuZCBwb2tl cwppbiB0aGUgSVNBIHJlZ2lvbiB3aWxsIG5vdCBoYXZlIGFuIFBURSBzZXQuIFRoYXQgaXMgZHVl IHRvCnJlc2VydmVfcGZuX3JhbmdlIHJldHVybmluZyAtRUlOVkFMIHdoaWNoIHJlc3VsdHMgaW4g dGhlIFBURSBub3QgYmVpbmcgc2V0LgoKW1RoZXNlIGFyZSBkZWJ1ZyBlbnRyaWVzIGFkZGVkIGlu ICdyZXNlcnZlX3Bmbl9yYW5nZSddCm1jZWxvZzoyNDcxIDB4ZjAwMDAtPjB4ZjEwMDAsIHJlcV90 eXBlPXdyaXRlLWJhY2sgbmV3X3R5cGU9d3JpdGUtYmFjawptY2Vsb2c6MjQ3MSAweGViMDAwLT4w eGVkMDAwLCByZXFfdHlwZT13cml0ZS1iYWNrIG5ld190eXBlPXdyaXRlLWJhY2sKCi4uIGFib3Zl IGFyZSBzdWNjZXNzZnVsbCBvbmVzLCBidXQ6Cm1jZWxvZzoyNDcxIDB4ZWIwMDAtPjB4ZWQwMDAs IHJlcV90eXBlPXVuY2FjaGVkIG5ld190eXBlPXVuY2FjaGVkClthZ2FpbiwgYSBkZWJ1ZyBvbmU6 XQptY2Vsb2c6MjQ3MSB3YW50PXVuY2FjaGVkIGdvdD13cml0ZS1iYWNrIHN0cmljdCAweDAwMGVi MDAwLTB4MDAwZWNmZmYKbWNlbG9nOjI0NzEgbWFwIHBmbiBleHBlY3RlZCBtYXBwaW5nIHR5cGUg dW5jYWNoZWQgZm9yIFttZW0gMHgwMDBlYjAwMC0weDAwMGVjZmZmXSwgZ290IHdyaXRlLWJhY2sK IC0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLQoKIFs8ZmZmZmZmZmY4MTZjNjZm MD5dIGR1bXBfc3RhY2srMHg2My8weDgzCiBbPGZmZmZmZmZmODEwODQ3NDU+XSB3YXJuX3Nsb3dw YXRoX2NvbW1vbisweDk1LzB4ZTAKIFs8ZmZmZmZmZmY4MTA4NDdhYT5dIHdhcm5fc2xvd3BhdGhf bnVsbCsweDFhLzB4MjAKIFs8ZmZmZmZmZmY4MTA3MjVmMz5dIHVudHJhY2tfcGZuKzB4OTMvMHhj MAogWzxmZmZmZmZmZjgxMWI5MGY5Pl0gdW5tYXBfc2luZ2xlX3ZtYSsweGE5LzB4MTAwCiBbPGZm ZmZmZmZmODExYjk2NDQ+XSB1bm1hcF92bWFzKzB4NTQvMHhhMAogWzxmZmZmZmZmZjgxMWJmMGRh Pl0gZXhpdF9tbWFwKzB4OWEvMHgxNTAKIFs8ZmZmZmZmZmY4MTA4MjVkMz5dIG1tcHV0KzB4NzMv MHgxMTAKIFs8ZmZmZmZmZmY4MTA4Mjc3NT5dIGR1cF9tbSsweDEwNS8weDExMAogWzxmZmZmZmZm ZjgxMDgzYjFkPl0gY29weV9wcm9jZXNzKzB4MTFlZC8weDEyNDAKIFs8ZmZmZmZmZmY4MTA4NDAw OT5dIGRvX2ZvcmsrMHg3OS8weDI4MAogWzxmZmZmZmZmZjgxMDI1OWQzPl0gPyBzeXNjYWxsX3Ry YWNlX2VudGVyX3BoYXNlMSsweDE1My8weDE4MAogWzxmZmZmZmZmZjgxMDg0MjI2Pl0gU3lTX2Ns b25lKzB4MTYvMHgyMAogWzxmZmZmZmZmZjgxNmNiM2VlPl0gc3lzdGVtX2NhbGxfZmFzdHBhdGgr MHgxMi8weDcxCgpyZXN1bHRzIGluIHRoYXQgc3BsYXQuCgpUaGUgZWZmZWN0aXZlIHJlc3VsdCBv ZiB0aGUgZnVuY3Rpb24gYmVsb3cgaXMgZm9yICdyZXNlcnZlcl9tZW10eXBlJwp0byBpZ25vcmUg dGhlIHJlc3VsdCBmcm9tICd4ODZfcGxhdGZvcm0uaXNfdW50cmFja2VkX3BhdF9yYW5nZScgcXVp cmsuCldoaWNoIG1lYW5zIHRoYXQgdGhlIHNwbGF0IGFib3ZlIGRvZXMgbm90IGhhcHBlbi4KClNp Z25lZC1vZmYtYnk6IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNv bT4KLS0tCiBhcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgfCAyMyArKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9hcmNo L3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggOGZm YjA4OS4uMzIzOGQwNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBi L2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMjgzLDYgKzI4MywyNyBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgeGVuX2Jhbm5lcih2b2lkKQogCSAgICAgICB2ZXJzaW9uID4+IDE2LCB2ZXJzaW9u ICYgMHhmZmZmLCBleHRyYS5leHRyYXZlcnNpb24sCiAJICAgICAgIHhlbl9mZWF0dXJlKFhFTkZF QVRfbW11X3B0X3VwZGF0ZV9wcmVzZXJ2ZV9hZCkgPyAiIChwcmVzZXJ2ZS1BRCkiIDogIiIpOwog fQorCisvKgorICogT24geDg2IHdoZW5ldmVyIFZNQXMgYXJlIHNldHVwLCB0aGUgJ2lzX0lTQV9y YW5nZSBxdWlyaycgKHdoaWNoIHdlCisgKiByZS1pbXBsZW1lbnQgYmVsb3cpIGlzIHVzZWQgdG8g ZmlndXJlIHdoZXRoZXIgdG8gaWdub3JlIHRoZQorICogcmVxdWVzdGVkIFBBVCB0eXBlIGFuZCBh bHdheXMgdXNlIFdCIChzZWUgJ3Jlc2VydmVfbWVtdHlwZScpLgorICoKKyAqIFRoZSBjb21iaW5h dGlvbiBvZiBNVFJSIChVQykgYW5kIFBBVCAoVUMgb3IgV0IpIGZvciB0aGUgSVNBIHJlZ2lvbiBl bmRzCisgKiB1cCB3aXRoIHRoZSBzYW1lIHZhbHVlIC0gVUMuCisgKgorICogSG93ZXZlciBvbiBY ZW4sIGR1ZSB0byBYU0EgMTU0IHdlIGVuZm9yY2UgdGhhdCBtYXBwaW5ncyB0byBfQU5ZXyBNTUlP CisgKiByYW5nZSBNVVNUIGhhdmUgdGhlIHNhbWUgdGhlIHNhbWUgY2FjaGFiaWxpdHkgbWFwcGlu ZyAtIGFuZCBpbiB0aGlzIGNhc2UKKyAqIHdlIGVuZm9yY2UgVUMgZm9yIGV2ZXJ5dGhpbmcuCisg KgorICogVGhlIGVmZmVjdGl2ZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGJlbG93IGlzIGZvciAn cmVzZXJ2ZXJfbWVtdHlwZScKKyAqIHRvIGlnbm9yZSB0aGUgcmVzdWx0IGZyb20gJ3g4Nl9wbGF0 Zm9ybS5pc191bnRyYWNrZWRfcGF0X3JhbmdlJyBxdWlyay4KKyAqLworc3RhdGljIGJvb2wgeGVu X2lnbm9yZSh1NjQgcywgdTY0IGUpCit7CisJcmV0dXJuIGZhbHNlOworfQorCiAvKiBDaGVjayBp ZiBydW5uaW5nIG9uIFhlbiB2ZXJzaW9uIChtYWpvciwgbWlub3IpIG9yIGxhdGVyICovCiBib29s CiB4ZW5fcnVubmluZ19vbl92ZXJzaW9uX29yX2xhdGVyKHVuc2lnbmVkIGludCBtYWpvciwgdW5z aWduZWQgaW50IG1pbm9yKQpAQCAtMTczMCw2ICsxNzUxLDggQEAgYXNtbGlua2FnZSBfX3Zpc2li bGUgdm9pZCBfX2luaXQgeGVuX3N0YXJ0X2tlcm5lbCh2b2lkKQogCQl4ODZfaW5pdC5tcHBhcnNl LmdldF9zbXBfY29uZmlnID0geDg2X2luaXRfdWludF9ub29wOwogCiAJCXhlbl9ib290X3BhcmFt c19pbml0X2VkZCgpOworCisJCXg4Nl9wbGF0Zm9ybS5pc191bnRyYWNrZWRfcGF0X3JhbmdlID0g eGVuX2lnbm9yZTsKIAl9CiAjaWZkZWYgQ09ORklHX1BDSQogCS8qIFBDSSBCSU9TIHNlcnZpY2Ug d29uJ3Qgd29yayBmcm9tIGEgUFYgZ3Vlc3QuICovCi0tIAoyLjUuNQoKPiAKPiBBbGFuCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK