From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0749B130491; Tue, 16 Apr 2024 15:17:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713280642; cv=none; b=X+MxaiXJFkJBqhQHvDGjWwKdX50gnquO2vD5kFj9MH8qB3xmbxyjccFpXYXZroiEu870hMupAgg7XQj7LGXycOOX5rdwQg58vXCuG53QY6leT/TbhKVOTnW+vUld28rgvOcnjCgGkHEEj7EAtrKT7bf76JYGuNQusm6Sp+39sG4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713280642; c=relaxed/simple; bh=8N7kn/veswkPTZ2V4/nm3UuOUEsty6IwODyIV+m3odE=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qAwJfXAT06y71hhq05vpvO0b5MiiUe74DvC3ghPCoBFFEAxoAiD3MMmyQUqa+erV3xlbTLu1hm2V+mSQCY5OMppVChB+yZt153S4TTAec3CY0uhsp8iX+clQ5xanFxsp6TJySfdCeXRjurz1NMsknuVdY/1FmP8vQ04oXQvTRKk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=1rjHsmK8; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=xCB8nmTp; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="1rjHsmK8"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="xCB8nmTp" Date: Tue, 16 Apr 2024 17:17:13 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1713280636; 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=SS0ZeV6erFMkAKB6pTGu7Q4XhRszm7ibCxDeTjsPTw0=; b=1rjHsmK8SlMFbSBgC6CMkwF5pQ3o1WAoeOBxdKI2KXUeZCv77Tkk1pg+nNIBGBaESPYOd3 goSyvQIsvuouHfTftW95qJJ6ISPHnbNRPpDZFjcvyFEvfOJscQI36Ehdznj/fVqukxB/qb ZP+xBgdZSPWPfthYwCl1CDuhDY+Gj0ySpmNWubWGvYsmlq+zrukDyyF4r6gyu0NYNu27xy oNLNGVFaOddzjBk66FmUqtRE/VgdfS1SXYkJNiNM0h84xtjYXTqKFX/rw2VqFLyRuERLLL TEJ+JEnHS07rj6xJ4UfHit8VsoqbvIXIxDCOB2weRrdCr/KBv9bTSb5OFefHVQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1713280636; 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=SS0ZeV6erFMkAKB6pTGu7Q4XhRszm7ibCxDeTjsPTw0=; b=xCB8nmTpm7UCjnVOxsp+XAtGA73a7DsdqFIdCsNrCpoMIP5/uXiwG/ZCDCE+Trg6PUQTlp FzpA2pmR2XnIwGDQ== From: Nam Cao To: Mike Rapoport Cc: =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Christian Brauner , Andreas Dilger , Al Viro , linux-fsdevel , Jan Kara , Linux Kernel Mailing List , linux-riscv@lists.infradead.org, Theodore Ts'o , Ext4 Developers List , Conor Dooley , "Matthew Wilcox (Oracle)" , Anders Roxell , Alexandre Ghiti Subject: Re: riscv32 EXT4 splat, 6.8 regression? Message-ID: <20240416171713.7d76fe7d@namcao> In-Reply-To: References: <20240416-deppen-gasleitung-8098fcfd6bbd@brauner> <8734rlo9j7.fsf@all.your.base.are.belong.to.us> Precedence: bulk X-Mailing-List: linux-ext4@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 2024-04-16 Mike Rapoport wrote: > Hi, >=20 > On Tue, Apr 16, 2024 at 01:02:20PM +0200, Bj=C3=B6rn T=C3=B6pel wrote: > > Christian Brauner writes: > >=20 > > > [Adding Mike who's knowledgeable in this area] > >=20 > > >> > Further, it seems like riscv32 indeed inserts a page like that to = the > > >> > buddy allocator, when the memblock is free'd: > > >> >=20 > > >> > | [] __free_one_page+0x2a4/0x3ea > > >> > | [] __free_pages_ok+0x158/0x3cc > > >> > | [] __free_pages_core+0xe8/0x12c > > >> > | [] memblock_free_pages+0x1a/0x22 > > >> > | [] memblock_free_all+0x1ee/0x278 > > >> > | [] mem_init+0x10/0xa4 > > >> > | [] mm_core_init+0x11a/0x2da > > >> > | [] start_kernel+0x3c4/0x6de > > >> >=20 > > >> > Here, a page with VA 0xfffff000 is a added to the freelist. We wer= e just > > >> > lucky (unlucky?) that page was used for the page cache. > > >>=20 > > >> I just educated myself about memory mapping last night, so the below > > >> may be complete nonsense. Take it with a grain of salt. > > >>=20 > > >> In riscv's setup_bootmem(), we have this line: > > >> max_low_pfn =3D max_pfn =3D PFN_DOWN(phys_ram_end); > > >>=20 > > >> I think this is the root cause: max_low_pfn indicates the last page > > >> to be mapped. Problem is: nothing prevents PFN_DOWN(phys_ram_end) fr= om > > >> getting mapped to the last page (0xfffff000). If max_low_pfn is mapp= ed > > >> to the last page, we get the reported problem. > > >>=20 > > >> There seems to be some code to make sure the last page is not used > > >> (the call to memblock_set_current_limit() right above this line). It= is > > >> unclear to me why this still lets the problem slip through. > > >>=20 > > >> The fix is simple: never let max_low_pfn gets mapped to the last pag= e. > > >> The below patch fixes the problem for me. But I am not entirely sure= if > > >> this is the correct fix, further investigation needed. > > >>=20 > > >> Best regards, > > >> Nam > > >>=20 > > >> diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > > >> index fa34cf55037b..17cab0a52726 100644 > > >> --- a/arch/riscv/mm/init.c > > >> +++ b/arch/riscv/mm/init.c > > >> @@ -251,7 +251,8 @@ static void __init setup_bootmem(void) > > >> } > > >> =20 > > >> min_low_pfn =3D PFN_UP(phys_ram_base); > > >> - max_low_pfn =3D max_pfn =3D PFN_DOWN(phys_ram_end); > > >> + max_low_pfn =3D PFN_DOWN(memblock_get_current_limit()); > > >> + max_pfn =3D PFN_DOWN(phys_ram_end); > > >> high_memory =3D (void *)(__va(PFN_PHYS(max_low_pfn))); > > >> =20 > > >> dma32_phys_limit =3D min(4UL * SZ_1G, (unsigned long)PFN_PHYS(max_= low_pfn)); > >=20 > > Yeah, AFAIU memblock_set_current_limit() only limits the allocation from > > memblock. The "forbidden" page (PA 0xc03ff000 VA 0xfffff000) will still > > be allowed in the zone. > >=20 > > I think your patch requires memblock_set_current_limit() is > > unconditionally called, which currently is not done. > >=20 > > The hack I tried was (which seems to work): > >=20 > > -- > > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > > index fe8e159394d8..3a1f25d41794 100644 > > --- a/arch/riscv/mm/init.c > > +++ b/arch/riscv/mm/init.c > > @@ -245,8 +245,10 @@ static void __init setup_bootmem(void) > > */ > > if (!IS_ENABLED(CONFIG_64BIT)) { > > max_mapped_addr =3D __pa(~(ulong)0); > > - if (max_mapped_addr =3D=3D (phys_ram_end - 1)) > > + if (max_mapped_addr =3D=3D (phys_ram_end - 1)) { > > memblock_set_current_limit(max_mapped_addr - 40= 96); > > + phys_ram_end -=3D 4096; > > + } > > } >=20 > You can just memblock_reserve() the last page of the first gigabyte, e.g. "last page of the first gigabyte" - why first gigabyte? Do you mean last page of *last* gigabyte? > if (!IS_ENABLED(CONFIG_64BIT) > memblock_reserve(SZ_1G - PAGE_SIZE, PAGE_SIZE); >=20 > The page will still be mapped, but it will never make it to the page > allocator. >=20 > The nice thing about it is, that memblock lets you to reserve regions tha= t are > not necessarily populated, so there's no need to check where the actual R= AM > ends. I tried the suggested code, it didn't work. I think there are 2 mistakes: - last gigabyte, not first - memblock_reserve() takes physical addresses as arguments, not virtual addresses The below patch fixes the problem. Is this what you really meant? Best regards, Nam diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index fa34cf55037b..ac7efdd77be8 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -245,6 +245,7 @@ static void __init setup_bootmem(void) * be done as soon as the kernel mapping base address is determined. */ if (!IS_ENABLED(CONFIG_64BIT)) { + memblock_reserve(__pa(-PAGE_SIZE), __pa(PAGE_SIZE)); max_mapped_addr =3D __pa(~(ulong)0); if (max_mapped_addr =3D=3D (phys_ram_end - 1)) memblock_set_current_limit(max_mapped_addr - 4096); 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 BBC57C4345F for ; Tue, 16 Apr 2024 15:17:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=FDMhfvq0o3Wqx59X0DrgwD29GwjYSeoF4lsbqdjjZCw=; b=3P9LeCz+9UuAkt HToHN6YylNzSAyALTJdAmbj33Zx+KC8Id2sZmQWFIgLl6SmPpEPKFCh/Phcazz94hOhhjZPLATlQL IUaXfQKXgpdXsuGi1ZGnuLpw+Gd4gXVfGuShSXYgRo1hIuHNMpcGgdQ9bqDQziSrWHD3enbyiI+ls lEABFI6Yft4SwKQeLxHwsHEjJA5mcuKtI3Pr7POYkMwumTMTKPlDgKg3ZJtUSTLf5/M5rKbykGksQ WVTcJ8U53Lj073XZqs9ccSGApqKW8juDBBOXdqmjvgzBX1v950sJZyGlaT6Do9WblVpOdtTgbpwwf il/veZrTfqoQnMHTZuhg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwkYp-0000000ChsI-0pR6; Tue, 16 Apr 2024 15:17:27 +0000 Received: from galois.linutronix.de ([193.142.43.55]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwkYk-0000000Chq0-3RDY for linux-riscv@lists.infradead.org; Tue, 16 Apr 2024 15:17:25 +0000 Date: Tue, 16 Apr 2024 17:17:13 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1713280636; 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=SS0ZeV6erFMkAKB6pTGu7Q4XhRszm7ibCxDeTjsPTw0=; b=1rjHsmK8SlMFbSBgC6CMkwF5pQ3o1WAoeOBxdKI2KXUeZCv77Tkk1pg+nNIBGBaESPYOd3 goSyvQIsvuouHfTftW95qJJ6ISPHnbNRPpDZFjcvyFEvfOJscQI36Ehdznj/fVqukxB/qb ZP+xBgdZSPWPfthYwCl1CDuhDY+Gj0ySpmNWubWGvYsmlq+zrukDyyF4r6gyu0NYNu27xy oNLNGVFaOddzjBk66FmUqtRE/VgdfS1SXYkJNiNM0h84xtjYXTqKFX/rw2VqFLyRuERLLL TEJ+JEnHS07rj6xJ4UfHit8VsoqbvIXIxDCOB2weRrdCr/KBv9bTSb5OFefHVQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1713280636; 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=SS0ZeV6erFMkAKB6pTGu7Q4XhRszm7ibCxDeTjsPTw0=; b=xCB8nmTpm7UCjnVOxsp+XAtGA73a7DsdqFIdCsNrCpoMIP5/uXiwG/ZCDCE+Trg6PUQTlp FzpA2pmR2XnIwGDQ== From: Nam Cao To: Mike Rapoport Cc: =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Christian Brauner , Andreas Dilger , Al Viro , linux-fsdevel , Jan Kara , Linux Kernel Mailing List , linux-riscv@lists.infradead.org, Theodore Ts'o , Ext4 Developers List , Conor Dooley , "Matthew Wilcox (Oracle)" , Anders Roxell , Alexandre Ghiti Subject: Re: riscv32 EXT4 splat, 6.8 regression? Message-ID: <20240416171713.7d76fe7d@namcao> In-Reply-To: References: <20240416-deppen-gasleitung-8098fcfd6bbd@brauner> <8734rlo9j7.fsf@all.your.base.are.belong.to.us> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240416_081723_149611_0E8C33FB X-CRM114-Status: GOOD ( 40.77 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gMjAyNC0wNC0xNiBNaWtlIFJhcG9wb3J0IHdyb3RlOgo+IEhpLAo+IAo+IE9uIFR1ZSwgQXBy IDE2LCAyMDI0IGF0IDAxOjAyOjIwUE0gKzAyMDAsIEJqw7ZybiBUw7ZwZWwgd3JvdGU6Cj4gPiBD aHJpc3RpYW4gQnJhdW5lciA8YnJhdW5lckBrZXJuZWwub3JnPiB3cml0ZXM6Cj4gPiAKPiA+ID4g W0FkZGluZyBNaWtlIHdobydzIGtub3dsZWRnZWFibGUgaW4gdGhpcyBhcmVhXQo+ID4gCj4gPiA+ PiA+IEZ1cnRoZXIsIGl0IHNlZW1zIGxpa2UgcmlzY3YzMiBpbmRlZWQgaW5zZXJ0cyBhIHBhZ2Ug bGlrZSB0aGF0IHRvIHRoZQo+ID4gPj4gPiBidWRkeSBhbGxvY2F0b3IsIHdoZW4gdGhlIG1lbWJs b2NrIGlzIGZyZWUnZDoKPiA+ID4+ID4gCj4gPiA+PiA+ICAgfCBbPGMwMjQ5NjFjPl0gX19mcmVl X29uZV9wYWdlKzB4MmE0LzB4M2VhCj4gPiA+PiA+ICAgfCBbPGMwMjRhNDQ4Pl0gX19mcmVlX3Bh Z2VzX29rKzB4MTU4LzB4M2NjCj4gPiA+PiA+ICAgfCBbPGMwMjRiMWE0Pl0gX19mcmVlX3BhZ2Vz X2NvcmUrMHhlOC8weDEyYwo+ID4gPj4gPiAgIHwgWzxjMGMxNDM1YT5dIG1lbWJsb2NrX2ZyZWVf cGFnZXMrMHgxYS8weDIyCj4gPiA+PiA+ICAgfCBbPGMwYzE3Njc2Pl0gbWVtYmxvY2tfZnJlZV9h bGwrMHgxZWUvMHgyNzgKPiA+ID4+ID4gICB8IFs8YzBjMDUwYjA+XSBtZW1faW5pdCsweDEwLzB4 YTQKPiA+ID4+ID4gICB8IFs8YzBjMTQ0N2M+XSBtbV9jb3JlX2luaXQrMHgxMWEvMHgyZGEKPiA+ ID4+ID4gICB8IFs8YzBjMDBiYjY+XSBzdGFydF9rZXJuZWwrMHgzYzQvMHg2ZGUKPiA+ID4+ID4g Cj4gPiA+PiA+IEhlcmUsIGEgcGFnZSB3aXRoIFZBIDB4ZmZmZmYwMDAgaXMgYSBhZGRlZCB0byB0 aGUgZnJlZWxpc3QuIFdlIHdlcmUganVzdAo+ID4gPj4gPiBsdWNreSAodW5sdWNreT8pIHRoYXQg cGFnZSB3YXMgdXNlZCBmb3IgdGhlIHBhZ2UgY2FjaGUuCj4gPiA+PiAKPiA+ID4+IEkganVzdCBl ZHVjYXRlZCBteXNlbGYgYWJvdXQgbWVtb3J5IG1hcHBpbmcgbGFzdCBuaWdodCwgc28gdGhlIGJl bG93Cj4gPiA+PiBtYXkgYmUgY29tcGxldGUgbm9uc2Vuc2UuIFRha2UgaXQgd2l0aCBhIGdyYWlu IG9mIHNhbHQuCj4gPiA+PiAKPiA+ID4+IEluIHJpc2N2J3Mgc2V0dXBfYm9vdG1lbSgpLCB3ZSBo YXZlIHRoaXMgbGluZToKPiA+ID4+IAltYXhfbG93X3BmbiA9IG1heF9wZm4gPSBQRk5fRE9XTihw aHlzX3JhbV9lbmQpOwo+ID4gPj4gCj4gPiA+PiBJIHRoaW5rIHRoaXMgaXMgdGhlIHJvb3QgY2F1 c2U6IG1heF9sb3dfcGZuIGluZGljYXRlcyB0aGUgbGFzdCBwYWdlCj4gPiA+PiB0byBiZSBtYXBw ZWQuIFByb2JsZW0gaXM6IG5vdGhpbmcgcHJldmVudHMgUEZOX0RPV04ocGh5c19yYW1fZW5kKSBm cm9tCj4gPiA+PiBnZXR0aW5nIG1hcHBlZCB0byB0aGUgbGFzdCBwYWdlICgweGZmZmZmMDAwKS4g SWYgbWF4X2xvd19wZm4gaXMgbWFwcGVkCj4gPiA+PiB0byB0aGUgbGFzdCBwYWdlLCB3ZSBnZXQg dGhlIHJlcG9ydGVkIHByb2JsZW0uCj4gPiA+PiAKPiA+ID4+IFRoZXJlIHNlZW1zIHRvIGJlIHNv bWUgY29kZSB0byBtYWtlIHN1cmUgdGhlIGxhc3QgcGFnZSBpcyBub3QgdXNlZAo+ID4gPj4gKHRo ZSBjYWxsIHRvIG1lbWJsb2NrX3NldF9jdXJyZW50X2xpbWl0KCkgcmlnaHQgYWJvdmUgdGhpcyBs aW5lKS4gSXQgaXMKPiA+ID4+IHVuY2xlYXIgdG8gbWUgd2h5IHRoaXMgc3RpbGwgbGV0cyB0aGUg cHJvYmxlbSBzbGlwIHRocm91Z2guCj4gPiA+PiAKPiA+ID4+IFRoZSBmaXggaXMgc2ltcGxlOiBu ZXZlciBsZXQgbWF4X2xvd19wZm4gZ2V0cyBtYXBwZWQgdG8gdGhlIGxhc3QgcGFnZS4KPiA+ID4+ IFRoZSBiZWxvdyBwYXRjaCBmaXhlcyB0aGUgcHJvYmxlbSBmb3IgbWUuIEJ1dCBJIGFtIG5vdCBl bnRpcmVseSBzdXJlIGlmCj4gPiA+PiB0aGlzIGlzIHRoZSBjb3JyZWN0IGZpeCwgZnVydGhlciBp bnZlc3RpZ2F0aW9uIG5lZWRlZC4KPiA+ID4+IAo+ID4gPj4gQmVzdCByZWdhcmRzLAo+ID4gPj4g TmFtCj4gPiA+PiAKPiA+ID4+IGRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2luaXQuYyBiL2Fy Y2gvcmlzY3YvbW0vaW5pdC5jCj4gPiA+PiBpbmRleCBmYTM0Y2Y1NTAzN2IuLjE3Y2FiMGE1Mjcy NiAxMDA2NDQKPiA+ID4+IC0tLSBhL2FyY2gvcmlzY3YvbW0vaW5pdC5jCj4gPiA+PiArKysgYi9h cmNoL3Jpc2N2L21tL2luaXQuYwo+ID4gPj4gQEAgLTI1MSw3ICsyNTEsOCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgc2V0dXBfYm9vdG1lbSh2b2lkKQo+ID4gPj4gIAl9Cj4gPiA+PiAgCj4gPiA+PiAg CW1pbl9sb3dfcGZuID0gUEZOX1VQKHBoeXNfcmFtX2Jhc2UpOwo+ID4gPj4gLQltYXhfbG93X3Bm biA9IG1heF9wZm4gPSBQRk5fRE9XTihwaHlzX3JhbV9lbmQpOwo+ID4gPj4gKwltYXhfbG93X3Bm biA9IFBGTl9ET1dOKG1lbWJsb2NrX2dldF9jdXJyZW50X2xpbWl0KCkpOwo+ID4gPj4gKwltYXhf cGZuID0gUEZOX0RPV04ocGh5c19yYW1fZW5kKTsKPiA+ID4+ICAJaGlnaF9tZW1vcnkgPSAodm9p ZCAqKShfX3ZhKFBGTl9QSFlTKG1heF9sb3dfcGZuKSkpOwo+ID4gPj4gIAo+ID4gPj4gIAlkbWEz Ml9waHlzX2xpbWl0ID0gbWluKDRVTCAqIFNaXzFHLCAodW5zaWduZWQgbG9uZylQRk5fUEhZUyht YXhfbG93X3BmbikpOwo+ID4gCj4gPiBZZWFoLCBBRkFJVSBtZW1ibG9ja19zZXRfY3VycmVudF9s aW1pdCgpIG9ubHkgbGltaXRzIHRoZSBhbGxvY2F0aW9uIGZyb20KPiA+IG1lbWJsb2NrLiBUaGUg ImZvcmJpZGRlbiIgcGFnZSAoUEEgMHhjMDNmZjAwMCBWQSAweGZmZmZmMDAwKSB3aWxsIHN0aWxs Cj4gPiBiZSBhbGxvd2VkIGluIHRoZSB6b25lLgo+ID4gCj4gPiBJIHRoaW5rIHlvdXIgcGF0Y2gg cmVxdWlyZXMgbWVtYmxvY2tfc2V0X2N1cnJlbnRfbGltaXQoKSBpcwo+ID4gdW5jb25kaXRpb25h bGx5IGNhbGxlZCwgd2hpY2ggY3VycmVudGx5IGlzIG5vdCBkb25lLgo+ID4gCj4gPiBUaGUgaGFj ayBJIHRyaWVkIHdhcyAod2hpY2ggc2VlbXMgdG8gd29yayk6Cj4gPiAKPiA+IC0tCj4gPiBkaWZm IC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9pbml0LmMgYi9hcmNoL3Jpc2N2L21tL2luaXQuYwo+ID4g aW5kZXggZmU4ZTE1OTM5NGQ4Li4zYTFmMjVkNDE3OTQgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL3Jp c2N2L21tL2luaXQuYwo+ID4gKysrIGIvYXJjaC9yaXNjdi9tbS9pbml0LmMKPiA+IEBAIC0yNDUs OCArMjQ1LDEwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtKHZvaWQpCj4gPiAg ICAgICAgICAqLwo+ID4gICAgICAgICBpZiAoIUlTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkgewo+ ID4gICAgICAgICAgICAgICAgIG1heF9tYXBwZWRfYWRkciA9IF9fcGEofih1bG9uZykwKTsKPiA+ IC0gICAgICAgICAgICAgICBpZiAobWF4X21hcHBlZF9hZGRyID09IChwaHlzX3JhbV9lbmQgLSAx KSkKPiA+ICsgICAgICAgICAgICAgICBpZiAobWF4X21hcHBlZF9hZGRyID09IChwaHlzX3JhbV9l bmQgLSAxKSkgewo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmxvY2tfc2V0X2N1cnJl bnRfbGltaXQobWF4X21hcHBlZF9hZGRyIC0gNDA5Nik7Cj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBwaHlzX3JhbV9lbmQgLT0gNDA5NjsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiAgICAg ICAgIH0KPiAKPiBZb3UgY2FuIGp1c3QgbWVtYmxvY2tfcmVzZXJ2ZSgpIHRoZSBsYXN0IHBhZ2Ug b2YgdGhlIGZpcnN0IGdpZ2FieXRlLCBlLmcuCgoibGFzdCBwYWdlIG9mIHRoZSBmaXJzdCBnaWdh Ynl0ZSIgLSB3aHkgZmlyc3QgZ2lnYWJ5dGU/IERvIHlvdSBtZWFuCmxhc3QgcGFnZSBvZiAqbGFz dCogZ2lnYWJ5dGU/Cgo+IAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHXzY0QklUKQo+IAkJbWVtYmxv Y2tfcmVzZXJ2ZShTWl8xRyAtIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKPiAKPiBUaGUgcGFnZSB3 aWxsIHN0aWxsIGJlIG1hcHBlZCwgYnV0IGl0IHdpbGwgbmV2ZXIgbWFrZSBpdCB0byB0aGUgcGFn ZQo+IGFsbG9jYXRvci4KPiAKPiBUaGUgbmljZSB0aGluZyBhYm91dCBpdCBpcywgdGhhdCBtZW1i bG9jayBsZXRzIHlvdSB0byByZXNlcnZlIHJlZ2lvbnMgdGhhdCBhcmUKPiBub3QgbmVjZXNzYXJp bHkgcG9wdWxhdGVkLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhlIGFjdHVh bCBSQU0KPiBlbmRzLgoKSSB0cmllZCB0aGUgc3VnZ2VzdGVkIGNvZGUsIGl0IGRpZG4ndCB3b3Jr LiBJIHRoaW5rIHRoZXJlIGFyZSAyCm1pc3Rha2VzOgogLSBsYXN0IGdpZ2FieXRlLCBub3QgZmly c3QKIC0gbWVtYmxvY2tfcmVzZXJ2ZSgpIHRha2VzIHBoeXNpY2FsIGFkZHJlc3NlcyBhcyBhcmd1 bWVudHMsIG5vdAogICB2aXJ0dWFsIGFkZHJlc3NlcwoKVGhlIGJlbG93IHBhdGNoIGZpeGVzIHRo ZSBwcm9ibGVtLiBJcyB0aGlzIHdoYXQgeW91IHJlYWxseSBtZWFudD8KCkJlc3QgcmVnYXJkcywK TmFtCgpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9pbml0LmMgYi9hcmNoL3Jpc2N2L21tL2lu aXQuYwppbmRleCBmYTM0Y2Y1NTAzN2IuLmFjN2VmZGQ3N2JlOCAxMDA2NDQKLS0tIGEvYXJjaC9y aXNjdi9tbS9pbml0LmMKKysrIGIvYXJjaC9yaXNjdi9tbS9pbml0LmMKQEAgLTI0NSw2ICsyNDUs NyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdG1lbSh2b2lkKQogCSAqIGJlIGRvbmUg YXMgc29vbiBhcyB0aGUga2VybmVsIG1hcHBpbmcgYmFzZSBhZGRyZXNzIGlzIGRldGVybWluZWQu CiAJICovCiAJaWYgKCFJU19FTkFCTEVEKENPTkZJR182NEJJVCkpIHsKKwkJbWVtYmxvY2tfcmVz ZXJ2ZShfX3BhKC1QQUdFX1NJWkUpLCBfX3BhKFBBR0VfU0laRSkpOwogCQltYXhfbWFwcGVkX2Fk ZHIgPSBfX3BhKH4odWxvbmcpMCk7CiAJCWlmIChtYXhfbWFwcGVkX2FkZHIgPT0gKHBoeXNfcmFt X2VuZCAtIDEpKQogCQkJbWVtYmxvY2tfc2V0X2N1cnJlbnRfbGltaXQobWF4X21hcHBlZF9hZGRy IC0gNDA5Nik7CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNj dgo=