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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FF23FA3728 for ; Wed, 16 Oct 2019 16:52:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2B8AD21835 for ; Wed, 16 Oct 2019 16:52:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2406497AbfJPQwh convert rfc822-to-8bit (ORCPT ); Wed, 16 Oct 2019 12:52:37 -0400 Received: from out01.mta.xmission.com ([166.70.13.231]:39412 "EHLO out01.mta.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726263AbfJPQwh (ORCPT ); Wed, 16 Oct 2019 12:52:37 -0400 Received: from in01.mta.xmission.com ([166.70.13.51]) by out01.mta.xmission.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.87) (envelope-from ) id 1iKmXE-0003u2-SI; Wed, 16 Oct 2019 10:52:28 -0600 Received: from ip68-227-160-95.om.om.cox.net ([68.227.160.95] helo=x220.xmission.com) by in01.mta.xmission.com with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.87) (envelope-from ) id 1iKmXD-0006Rl-ON; Wed, 16 Oct 2019 10:52:28 -0600 From: ebiederm@xmission.com (Eric W. Biederman) To: lijiang Cc: Dave Young , linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, x86@kernel.org, bhe@redhat.com, jgross@suse.com, dhowells@redhat.com, Thomas.Lendacky@amd.com, vgoyal@redhat.com, kexec@lists.infradead.org References: <20191012022140.19003-1-lijiang@redhat.com> <20191012022140.19003-4-lijiang@redhat.com> <87d0f22oi5.fsf@x220.int.ebiederm.org> <20191012121625.GA11587@dhcp-128-65.nay.redhat.com> <87zhi51ers.fsf@x220.int.ebiederm.org> <72edff0b-9778-2e83-224b-7fe70dfb8d73@redhat.com> <8736fu1d8k.fsf@x220.int.ebiederm.org> <93e6713a-8027-3a7a-4445-9bee56b19f62@redhat.com> Date: Wed, 16 Oct 2019 11:51:33 -0500 In-Reply-To: <93e6713a-8027-3a7a-4445-9bee56b19f62@redhat.com> (lijiang's message of "Wed, 16 Oct 2019 22:30:15 +0800") Message-ID: <87eezczl9m.fsf@x220.int.ebiederm.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8BIT X-XM-SPF: eid=1iKmXD-0006Rl-ON;;;mid=<87eezczl9m.fsf@x220.int.ebiederm.org>;;;hst=in01.mta.xmission.com;;;ip=68.227.160.95;;;frm=ebiederm@xmission.com;;;spf=neutral X-XM-AID: U2FsdGVkX1+UqLKJeXTL8k7QmDIJbylA80uUSDQ/w/E= X-SA-Exim-Connect-IP: 68.227.160.95 X-SA-Exim-Mail-From: ebiederm@xmission.com Subject: Re: [PATCH 3/3 v3] x86/kdump: clean up all the code related to the backup region X-SA-Exim-Version: 4.2.1 (built Thu, 05 May 2016 13:38:54 -0600) X-SA-Exim-Scanned: Yes (on in01.mta.xmission.com) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org lijiang writes: > 在 2019年10月15日 19:04, Eric W. Biederman 写道: >> lijiang writes: >> >>> 在 2019年10月13日 11:54, Eric W. Biederman 写道: >>>> Dave Young writes: >>>> >>>>> Hi Eric, >>>>> >>>>> On 10/12/19 at 06:26am, Eric W. Biederman wrote: >>>>>> Lianbo Jiang writes: >>>>>> >>>>>>> When the crashkernel kernel command line option is specified, the >>>>>>> low 1MiB memory will always be reserved, which makes that the memory >>>>>>> allocated later won't fall into the low 1MiB area, thereby, it's not >>>>>>> necessary to create a backup region and also no need to copy the first >>>>>>> 640k content to a backup region. >>>>>>> >>>>>>> Currently, the code related to the backup region can be safely removed, >>>>>>> so lets clean up. >>>>>>> >>>>>>> Signed-off-by: Lianbo Jiang >>>>>>> --- >>>>>> >>>>>>> diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c >>>>>>> index eb651fbde92a..cc5774fc84c0 100644 >>>>>>> --- a/arch/x86/kernel/crash.c >>>>>>> +++ b/arch/x86/kernel/crash.c >>>>>>> @@ -173,8 +173,6 @@ void native_machine_crash_shutdown(struct pt_regs *regs) >>>>>>> >>>>>>> #ifdef CONFIG_KEXEC_FILE >>>>>>> >>>>>>> -static unsigned long crash_zero_bytes; >>>>>>> - >>>>>>> static int get_nr_ram_ranges_callback(struct resource *res, void *arg) >>>>>>> { >>>>>>> unsigned int *nr_ranges = arg; >>>>>>> @@ -234,9 +232,15 @@ static int prepare_elf64_ram_headers_callback(struct resource *res, void *arg) >>>>>>> { >>>>>>> struct crash_mem *cmem = arg; >>>>>>> >>>>>>> - cmem->ranges[cmem->nr_ranges].start = res->start; >>>>>>> - cmem->ranges[cmem->nr_ranges].end = res->end; >>>>>>> - cmem->nr_ranges++; >>>>>>> + if (res->start >= SZ_1M) { >>>>>>> + cmem->ranges[cmem->nr_ranges].start = res->start; >>>>>>> + cmem->ranges[cmem->nr_ranges].end = res->end; >>>>>>> + cmem->nr_ranges++; >>>>>>> + } else if (res->end > SZ_1M) { >>>>>>> + cmem->ranges[cmem->nr_ranges].start = SZ_1M; >>>>>>> + cmem->ranges[cmem->nr_ranges].end = res->end; >>>>>>> + cmem->nr_ranges++; >>>>>>> + } >>>>>> >>>>>> What is going on with this chunk? I can guess but this needs a clear >>>>>> comment. >>>>> >>>>> Indeed it needs some code comment, this is based on some offline >>>>> discussion. cat /proc/vmcore will give a warning because ioremap is >>>>> mapping the system ram. >>>>> >>>>> We pass the first 1M to kdump kernel in e820 as system ram so that 2nd >>>>> kernel can use the low 1M memory because for example the trampoline >>>>> code. >>>>> >>>>>> >>>>>>> >>>>>>> return 0; >>>>>>> } >>>>>> >>>>>>> @@ -356,9 +337,12 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params) >>>>>>> memset(&cmd, 0, sizeof(struct crash_memmap_data)); >>>>>>> cmd.params = params; >>>>>>> >>>>>>> - /* Add first 640K segment */ >>>>>>> - ei.addr = image->arch.backup_src_start; >>>>>>> - ei.size = image->arch.backup_src_sz; >>>>>>> + /* >>>>>>> + * Add the low memory range[0x1000, SZ_1M], skip >>>>>>> + * the first zero page. >>>>>>> + */ >>>>>>> + ei.addr = PAGE_SIZE; >>>>>>> + ei.size = SZ_1M - PAGE_SIZE; >>>>>>> ei.type = E820_TYPE_RAM; >>>>>>> add_e820_entry(params, &ei); >>>>>> >>>>>> Likewise here. Why do we need a special case? >>>>>> Why the magic with PAGE_SIZE? >>>>> >>>>> Good catch, the zero page part is useless, I think no other special >>>>> reason, just assumed zero page is not usable, but it should be ok to >>>>> remove the special handling, just pass 0 - 1M is good enough. >>>> >>>> But if we have stopped special casing the low 1M. Why do we need a >>>> special case here at all? >>>> >>> Here, need to pass the low memory range to kdump kernel, which will guarantee >>> the availability of low memory in kdump kernel, otherwise, kdump kernel won't >>> use the low memory region. >>> >>>> If you need the special case it is almost certainly wrong to say you >>>> have ram above 640KiB and below 1MiB. That is the legacy ROM and video >>>> MMIO area. >>>> >>>> There is a reason the original code said 640KiB. >>>> >>> Do you mean that the 640k region is good enough here instead of 1MiB? >> >> Reading through the code of crash_setup_memap_entries I see that what >> the code is doing now. The code is repeating the e820 memory map with >> the memory areas that were not reserved for the crash kernel removed. >> >> In which case what the code needs to be doing something like: >> >> cmd.type = E820_TYPE_RAM; >> flags = IORESOURCE_MEM; >> walk_iomem_res_desc(IORES_DESC_RESERVED, flags, 0, 1024*1024, &cmd, >> memmap_entry_callback); >> > The above code does not get the results what we expected, it gets the reserved > memory marked as 'IORES_DESC_RESERVED' in the low 1MiB range. > > Finally, kdump kernel happened the panic as follow: > ...... > [ 3.555662] Kernel panic - not syncing: Real mode trampoline was not allocated > [ 3.556660] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.0-rc3+ #4 > [ 3.556660] Hardware name: AMD Corporation Speedway/Speedway, BIOS RSW1009C 07/27/2018 > [ 3.556660] Call Trace: > [ 3.556660] dump_stack+0x46/0x60 > [ 3.556660] panic+0xfb/0x2d7 > [ 3.556660] ? hv_init_spinlocks+0x7f/0x7f > [ 3.556660] init_real_mode+0x27/0x1fa > [ 3.556660] ? hv_init_spinlocks+0x7f/0x7f > [ 3.556660] ? do_one_initcall+0x46/0x1e4 > [ 3.556660] ? proc_register+0xd0/0x130 > [ 3.556660] ? kernel_init_freeable+0xe2/0x242 > [ 3.556660] ? rest_init+0xaa/0xaa > [ 3.556660] ? kernel_init+0xa/0x106 > [ 3.556660] ? ret_from_fork+0x22/0x40 > [ 3.556660] Rebooting in 10 seconds.. > [ 3.556660] ACPI MEMORY or I/O RESET_REG. > > I modified the above code, and tested it. This can find out the system ram in > the low 1MiB range. And it worked well. > > @@ -356,11 +338,11 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params) > memset(&cmd, 0, sizeof(struct crash_memmap_data)); > cmd.params = params; > > + /* Add the low 1MiB */ > + cmd.type = E820_TYPE_RAM; > + flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; > + walk_iomem_res_desc(IORES_DESC_NONE, flags, 0, 1024*1024 - 1, &cmd, > + memmap_entry_callback); > That looks like a very reasonable fix. >> Depending on which bugs exist it might make sense to limit this to >> the low 640KiB. But finding something the kernel already recognizes >> as RAM should prevent most of those problems already. Barring bugs >> I admit it doesn't make sense to repeat the work that someone else >> has already done. >> >> This bit: >> /* Add e820 reserved ranges */ >> cmd.type = E820_TYPE_RESERVED; >> flags = IORESOURCE_MEM; >> walk_iomem_res_desc(IORES_DESC_RESERVED, flags, 0, -1, &cmd, >> memmap_entry_callback); >> >> Should probably start at 1MiB instead of 0. Just so we don't report the > If so, it can not find out the reserved memory marked as 'IORES_DESC_RESERVED' in > the low 1MiB range, finally, it doesn't pass the reserved memory in the low 1MiB to > kdump kernel, which could cause some problems, such as SME or PCI MMCONFIG issue. Good point. For some reason I was thinking IORESOURCE_MEM and IORESOURCE_SYSTEM_RAM were the same thing. It has been way to long since I have been in that part of the code. So yes let's leave that part alone. >> memory below 1MiB as unconditionally reserved. I don't properly >> understand the IORES_DESC_RESERVED flag, and how that differs from > I found three commits about 'IORES_DESC_RESERVED' flag, hope this helps. > 1.ae9e13d621d6 ("x86/e820, ioport: Add a new I/O resource descriptor IORES_DESC_RESERVED") > 2.5da04cc86d12 ("x86/mm: Rework ioremap resource mapping determination") > 3.980621daf368 ("x86/crash: Add e820 reserved ranges to kdump kernel's e820 table") > >> flags. So please test my suggestions to verify the code works as >> expected. >> > I have tested the two changes that you mentioned, please refer to the > reply above. Thank you. It looks like you have figured out how these things should work. Eric From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from out01.mta.xmission.com ([166.70.13.231]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iKmXh-0005SN-9x for kexec@lists.infradead.org; Wed, 16 Oct 2019 16:52:59 +0000 From: ebiederm@xmission.com (Eric W. Biederman) References: <20191012022140.19003-1-lijiang@redhat.com> <20191012022140.19003-4-lijiang@redhat.com> <87d0f22oi5.fsf@x220.int.ebiederm.org> <20191012121625.GA11587@dhcp-128-65.nay.redhat.com> <87zhi51ers.fsf@x220.int.ebiederm.org> <72edff0b-9778-2e83-224b-7fe70dfb8d73@redhat.com> <8736fu1d8k.fsf@x220.int.ebiederm.org> <93e6713a-8027-3a7a-4445-9bee56b19f62@redhat.com> Date: Wed, 16 Oct 2019 11:51:33 -0500 In-Reply-To: <93e6713a-8027-3a7a-4445-9bee56b19f62@redhat.com> (lijiang's message of "Wed, 16 Oct 2019 22:30:15 +0800") Message-ID: <87eezczl9m.fsf@x220.int.ebiederm.org> MIME-Version: 1.0 Subject: Re: [PATCH 3/3 v3] x86/kdump: clean up all the code related to the backup region List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: lijiang Cc: jgross@suse.com, Thomas.Lendacky@amd.com, bhe@redhat.com, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, dhowells@redhat.com, mingo@redhat.com, bp@alien8.de, hpa@zytor.com, tglx@linutronix.de, Dave Young , vgoyal@redhat.com bGlqaWFuZyA8bGlqaWFuZ0ByZWRoYXQuY29tPiB3cml0ZXM6Cgo+IOWcqCAyMDE55bm0MTDmnIgx NeaXpSAxOTowNCwgRXJpYyBXLiBCaWVkZXJtYW4g5YaZ6YGTOgo+PiBsaWppYW5nIDxsaWppYW5n QHJlZGhhdC5jb20+IHdyaXRlczoKPj4gCj4+PiDlnKggMjAxOeW5tDEw5pyIMTPml6UgMTE6NTQs IEVyaWMgVy4gQmllZGVybWFuIOWGmemBkzoKPj4+PiBEYXZlIFlvdW5nIDxkeW91bmdAcmVkaGF0 LmNvbT4gd3JpdGVzOgo+Pj4+Cj4+Pj4+IEhpIEVyaWMsCj4+Pj4+Cj4+Pj4+IE9uIDEwLzEyLzE5 IGF0IDA2OjI2YW0sIEVyaWMgVy4gQmllZGVybWFuIHdyb3RlOgo+Pj4+Pj4gTGlhbmJvIEppYW5n IDxsaWppYW5nQHJlZGhhdC5jb20+IHdyaXRlczoKPj4+Pj4+Cj4+Pj4+Pj4gV2hlbiB0aGUgY3Jh c2hrZXJuZWwga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUKPj4+ Pj4+PiBsb3cgMU1pQiBtZW1vcnkgd2lsbCBhbHdheXMgYmUgcmVzZXJ2ZWQsIHdoaWNoIG1ha2Vz IHRoYXQgdGhlIG1lbW9yeQo+Pj4+Pj4+IGFsbG9jYXRlZCBsYXRlciB3b24ndCBmYWxsIGludG8g dGhlIGxvdyAxTWlCIGFyZWEsIHRoZXJlYnksIGl0J3Mgbm90Cj4+Pj4+Pj4gbmVjZXNzYXJ5IHRv IGNyZWF0ZSBhIGJhY2t1cCByZWdpb24gYW5kIGFsc28gbm8gbmVlZCB0byBjb3B5IHRoZSBmaXJz dAo+Pj4+Pj4+IDY0MGsgY29udGVudCB0byBhIGJhY2t1cCByZWdpb24uCj4+Pj4+Pj4KPj4+Pj4+ PiBDdXJyZW50bHksIHRoZSBjb2RlIHJlbGF0ZWQgdG8gdGhlIGJhY2t1cCByZWdpb24gY2FuIGJl IHNhZmVseSByZW1vdmVkLAo+Pj4+Pj4+IHNvIGxldHMgY2xlYW4gdXAuCj4+Pj4+Pj4KPj4+Pj4+ PiBTaWduZWQtb2ZmLWJ5OiBMaWFuYm8gSmlhbmcgPGxpamlhbmdAcmVkaGF0LmNvbT4KPj4+Pj4+ PiAtLS0KPj4+Pj4+Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcmFzaC5j IGIvYXJjaC94ODYva2VybmVsL2NyYXNoLmMKPj4+Pj4+PiBpbmRleCBlYjY1MWZiZGU5MmEuLmNj NTc3NGZjODRjMCAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2guYwo+ Pj4+Pj4+ICsrKyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaC5jCj4+Pj4+Pj4gQEAgLTE3Myw4ICsx NzMsNiBAQCB2b2lkIG5hdGl2ZV9tYWNoaW5lX2NyYXNoX3NodXRkb3duKHN0cnVjdCBwdF9yZWdz ICpyZWdzKQo+Pj4+Pj4+ICAKPj4+Pj4+PiAgI2lmZGVmIENPTkZJR19LRVhFQ19GSUxFCj4+Pj4+ Pj4gIAo+Pj4+Pj4+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBjcmFzaF96ZXJvX2J5dGVzOwo+Pj4+ Pj4+IC0KPj4+Pj4+PiAgc3RhdGljIGludCBnZXRfbnJfcmFtX3Jhbmdlc19jYWxsYmFjayhzdHJ1 Y3QgcmVzb3VyY2UgKnJlcywgdm9pZCAqYXJnKQo+Pj4+Pj4+ICB7Cj4+Pj4+Pj4gIAl1bnNpZ25l ZCBpbnQgKm5yX3JhbmdlcyA9IGFyZzsKPj4+Pj4+PiBAQCAtMjM0LDkgKzIzMiwxNSBAQCBzdGF0 aWMgaW50IHByZXBhcmVfZWxmNjRfcmFtX2hlYWRlcnNfY2FsbGJhY2soc3RydWN0IHJlc291cmNl ICpyZXMsIHZvaWQgKmFyZykKPj4+Pj4+PiAgewo+Pj4+Pj4+ICAJc3RydWN0IGNyYXNoX21lbSAq Y21lbSA9IGFyZzsKPj4+Pj4+PiAgCj4+Pj4+Pj4gLQljbWVtLT5yYW5nZXNbY21lbS0+bnJfcmFu Z2VzXS5zdGFydCA9IHJlcy0+c3RhcnQ7Cj4+Pj4+Pj4gLQljbWVtLT5yYW5nZXNbY21lbS0+bnJf cmFuZ2VzXS5lbmQgPSByZXMtPmVuZDsKPj4+Pj4+PiAtCWNtZW0tPm5yX3JhbmdlcysrOwo+Pj4+ Pj4+ICsJaWYgKHJlcy0+c3RhcnQgPj0gU1pfMU0pIHsKPj4+Pj4+PiArCQljbWVtLT5yYW5nZXNb Y21lbS0+bnJfcmFuZ2VzXS5zdGFydCA9IHJlcy0+c3RhcnQ7Cj4+Pj4+Pj4gKwkJY21lbS0+cmFu Z2VzW2NtZW0tPm5yX3Jhbmdlc10uZW5kID0gcmVzLT5lbmQ7Cj4+Pj4+Pj4gKwkJY21lbS0+bnJf cmFuZ2VzKys7Cj4+Pj4+Pj4gKwl9IGVsc2UgaWYgKHJlcy0+ZW5kID4gU1pfMU0pIHsKPj4+Pj4+ PiArCQljbWVtLT5yYW5nZXNbY21lbS0+bnJfcmFuZ2VzXS5zdGFydCA9IFNaXzFNOwo+Pj4+Pj4+ ICsJCWNtZW0tPnJhbmdlc1tjbWVtLT5ucl9yYW5nZXNdLmVuZCA9IHJlcy0+ZW5kOwo+Pj4+Pj4+ ICsJCWNtZW0tPm5yX3JhbmdlcysrOwo+Pj4+Pj4+ICsJfQo+Pj4+Pj4KPj4+Pj4+IFdoYXQgaXMg Z29pbmcgb24gd2l0aCB0aGlzIGNodW5rPyAgSSBjYW4gZ3Vlc3MgYnV0IHRoaXMgbmVlZHMgYSBj bGVhcgo+Pj4+Pj4gY29tbWVudC4KPj4+Pj4KPj4+Pj4gSW5kZWVkIGl0IG5lZWRzIHNvbWUgY29k ZSBjb21tZW50LCB0aGlzIGlzIGJhc2VkIG9uIHNvbWUgb2ZmbGluZQo+Pj4+PiBkaXNjdXNzaW9u LiAgY2F0IC9wcm9jL3ZtY29yZSB3aWxsIGdpdmUgYSB3YXJuaW5nIGJlY2F1c2UgaW9yZW1hcCBp cwo+Pj4+PiBtYXBwaW5nIHRoZSBzeXN0ZW0gcmFtLgo+Pj4+Pgo+Pj4+PiBXZSBwYXNzIHRoZSBm aXJzdCAxTSB0byBrZHVtcCBrZXJuZWwgaW4gZTgyMCBhcyBzeXN0ZW0gcmFtIHNvIHRoYXQgMm5k Cj4+Pj4+IGtlcm5lbCBjYW4gdXNlIHRoZSBsb3cgMU0gbWVtb3J5IGJlY2F1c2UgZm9yIGV4YW1w bGUgdGhlIHRyYW1wb2xpbmUKPj4+Pj4gY29kZS4KPj4+Pj4KPj4+Pj4+Cj4+Pj4+Pj4gIAo+Pj4+ Pj4+ICAJcmV0dXJuIDA7Cj4+Pj4+Pj4gIH0KPj4+Pj4+Cj4+Pj4+Pj4gQEAgLTM1Niw5ICszMzcs MTIgQEAgaW50IGNyYXNoX3NldHVwX21lbW1hcF9lbnRyaWVzKHN0cnVjdCBraW1hZ2UgKmltYWdl LCBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnBhcmFtcykKPj4+Pj4+PiAgCW1lbXNldCgmY21kLCAwLCBz aXplb2Yoc3RydWN0IGNyYXNoX21lbW1hcF9kYXRhKSk7Cj4+Pj4+Pj4gIAljbWQucGFyYW1zID0g cGFyYW1zOwo+Pj4+Pj4+ICAKPj4+Pj4+PiAtCS8qIEFkZCBmaXJzdCA2NDBLIHNlZ21lbnQgKi8K Pj4+Pj4+PiAtCWVpLmFkZHIgPSBpbWFnZS0+YXJjaC5iYWNrdXBfc3JjX3N0YXJ0Owo+Pj4+Pj4+ IC0JZWkuc2l6ZSA9IGltYWdlLT5hcmNoLmJhY2t1cF9zcmNfc3o7Cj4+Pj4+Pj4gKwkvKgo+Pj4+ Pj4+ICsJICogQWRkIHRoZSBsb3cgbWVtb3J5IHJhbmdlWzB4MTAwMCwgU1pfMU1dLCBza2lwCj4+ Pj4+Pj4gKwkgKiB0aGUgZmlyc3QgemVybyBwYWdlLgo+Pj4+Pj4+ICsJICovCj4+Pj4+Pj4gKwll aS5hZGRyID0gUEFHRV9TSVpFOwo+Pj4+Pj4+ICsJZWkuc2l6ZSA9IFNaXzFNIC0gUEFHRV9TSVpF Owo+Pj4+Pj4+ICAJZWkudHlwZSA9IEU4MjBfVFlQRV9SQU07Cj4+Pj4+Pj4gIAlhZGRfZTgyMF9l bnRyeShwYXJhbXMsICZlaSk7Cj4+Pj4+Pgo+Pj4+Pj4gTGlrZXdpc2UgaGVyZS4gIFdoeSBkbyB3 ZSBuZWVkIGEgc3BlY2lhbCBjYXNlPwo+Pj4+Pj4gV2h5IHRoZSBtYWdpYyB3aXRoIFBBR0VfU0la RT8KPj4+Pj4KPj4+Pj4gR29vZCBjYXRjaCwgdGhlIHplcm8gcGFnZSBwYXJ0IGlzIHVzZWxlc3Ms IEkgdGhpbmsgbm8gb3RoZXIgc3BlY2lhbAo+Pj4+PiByZWFzb24sIGp1c3QgYXNzdW1lZCB6ZXJv IHBhZ2UgaXMgbm90IHVzYWJsZSwgYnV0IGl0IHNob3VsZCBiZSBvayB0bwo+Pj4+PiByZW1vdmUg dGhlIHNwZWNpYWwgaGFuZGxpbmcsIGp1c3QgcGFzcyAwIC0gMU0gaXMgZ29vZCBlbm91Z2guCj4+ Pj4KPj4+PiBCdXQgaWYgd2UgaGF2ZSBzdG9wcGVkIHNwZWNpYWwgY2FzaW5nIHRoZSBsb3cgMU0u ICBXaHkgZG8gd2UgbmVlZCBhCj4+Pj4gc3BlY2lhbCBjYXNlIGhlcmUgYXQgYWxsPwo+Pj4+Cj4+ PiBIZXJlLCBuZWVkIHRvIHBhc3MgdGhlIGxvdyBtZW1vcnkgcmFuZ2UgdG8ga2R1bXAga2VybmVs LCB3aGljaCB3aWxsIGd1YXJhbnRlZQo+Pj4gdGhlIGF2YWlsYWJpbGl0eSBvZiBsb3cgbWVtb3J5 IGluIGtkdW1wIGtlcm5lbCwgb3RoZXJ3aXNlLCBrZHVtcCBrZXJuZWwgd29uJ3QKPj4+IHVzZSB0 aGUgbG93IG1lbW9yeSByZWdpb24uCj4+Pgo+Pj4+IElmIHlvdSBuZWVkIHRoZSBzcGVjaWFsIGNh c2UgaXQgaXMgYWxtb3N0IGNlcnRhaW5seSB3cm9uZyB0byBzYXkgeW91Cj4+Pj4gaGF2ZSByYW0g YWJvdmUgNjQwS2lCIGFuZCBiZWxvdyAxTWlCLiAgVGhhdCBpcyB0aGUgbGVnYWN5IFJPTSBhbmQg dmlkZW8KPj4+PiBNTUlPIGFyZWEuCj4+Pj4KPj4+PiBUaGVyZSBpcyBhIHJlYXNvbiB0aGUgb3Jp Z2luYWwgY29kZSBzYWlkIDY0MEtpQi4KPj4+Pgo+Pj4gRG8geW91IG1lYW4gdGhhdCB0aGUgNjQw ayByZWdpb24gaXMgZ29vZCBlbm91Z2ggaGVyZSBpbnN0ZWFkIG9mIDFNaUI/Cj4+IAo+PiBSZWFk aW5nIHRocm91Z2ggdGhlIGNvZGUgb2YgY3Jhc2hfc2V0dXBfbWVtYXBfZW50cmllcyBJIHNlZSB0 aGF0IHdoYXQKPj4gdGhlIGNvZGUgaXMgZG9pbmcgbm93LiAgVGhlIGNvZGUgaXMgcmVwZWF0aW5n IHRoZSBlODIwIG1lbW9yeSBtYXAgd2l0aAo+PiB0aGUgbWVtb3J5IGFyZWFzIHRoYXQgd2VyZSBu b3QgcmVzZXJ2ZWQgZm9yIHRoZSBjcmFzaCBrZXJuZWwgcmVtb3ZlZC4KPj4gCj4+IEluIHdoaWNo IGNhc2Ugd2hhdCB0aGUgY29kZSBuZWVkcyB0byBiZSBkb2luZyBzb21ldGhpbmcgbGlrZToKPj4g Cj4+IAljbWQudHlwZSA9IEU4MjBfVFlQRV9SQU07Cj4+IAlmbGFncyA9IElPUkVTT1VSQ0VfTUVN Owo+PiAJd2Fsa19pb21lbV9yZXNfZGVzYyhJT1JFU19ERVNDX1JFU0VSVkVELCBmbGFncywgMCwg MTAyNCoxMDI0LCAmY21kLAo+PiAJCQkgICAgICAgbWVtbWFwX2VudHJ5X2NhbGxiYWNrKTsKPj4g Cj4gVGhlIGFib3ZlIGNvZGUgZG9lcyBub3QgZ2V0IHRoZSByZXN1bHRzIHdoYXQgd2UgZXhwZWN0 ZWQsIGl0IGdldHMgdGhlIHJlc2VydmVkCj4gbWVtb3J5IG1hcmtlZCBhcyAnSU9SRVNfREVTQ19S RVNFUlZFRCcgaW4gdGhlIGxvdyAxTWlCIHJhbmdlLgo+Cj4gRmluYWxseSwga2R1bXAga2VybmVs IGhhcHBlbmVkIHRoZSBwYW5pYyBhcyBmb2xsb3c6Cj4gLi4uLi4uCj4gWyAgICAzLjU1NTY2Ml0g S2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6IFJlYWwgbW9kZSB0cmFtcG9saW5lIHdhcyBub3Qg YWxsb2NhdGVkCj4gWyAgICAzLjU1NjY2MF0gQ1BVOiAwIFBJRDogMSBDb21tOiBzd2FwcGVyLzAg Tm90IHRhaW50ZWQgNS40LjAtcmMzKyAjNAo+IFsgICAgMy41NTY2NjBdIEhhcmR3YXJlIG5hbWU6 IEFNRCBDb3Jwb3JhdGlvbiBTcGVlZHdheS9TcGVlZHdheSwgQklPUyBSU1cxMDA5QyAwNy8yNy8y MDE4Cj4gWyAgICAzLjU1NjY2MF0gQ2FsbCBUcmFjZToKPiBbICAgIDMuNTU2NjYwXSAgZHVtcF9z dGFjaysweDQ2LzB4NjAKPiBbICAgIDMuNTU2NjYwXSAgcGFuaWMrMHhmYi8weDJkNwo+IFsgICAg My41NTY2NjBdICA/IGh2X2luaXRfc3BpbmxvY2tzKzB4N2YvMHg3Zgo+IFsgICAgMy41NTY2NjBd ICBpbml0X3JlYWxfbW9kZSsweDI3LzB4MWZhCj4gWyAgICAzLjU1NjY2MF0gID8gaHZfaW5pdF9z cGlubG9ja3MrMHg3Zi8weDdmCj4gWyAgICAzLjU1NjY2MF0gID8gZG9fb25lX2luaXRjYWxsKzB4 NDYvMHgxZTQKPiBbICAgIDMuNTU2NjYwXSAgPyBwcm9jX3JlZ2lzdGVyKzB4ZDAvMHgxMzAKPiBb ICAgIDMuNTU2NjYwXSAgPyBrZXJuZWxfaW5pdF9mcmVlYWJsZSsweGUyLzB4MjQyCj4gWyAgICAz LjU1NjY2MF0gID8gcmVzdF9pbml0KzB4YWEvMHhhYQo+IFsgICAgMy41NTY2NjBdICA/IGtlcm5l bF9pbml0KzB4YS8weDEwNgo+IFsgICAgMy41NTY2NjBdICA/IHJldF9mcm9tX2ZvcmsrMHgyMi8w eDQwCj4gWyAgICAzLjU1NjY2MF0gUmVib290aW5nIGluIDEwIHNlY29uZHMuLgo+IFsgICAgMy41 NTY2NjBdIEFDUEkgTUVNT1JZIG9yIEkvTyBSRVNFVF9SRUcuCj4KPiBJIG1vZGlmaWVkIHRoZSBh Ym92ZSBjb2RlLCBhbmQgdGVzdGVkIGl0LiBUaGlzIGNhbiBmaW5kIG91dCB0aGUgc3lzdGVtIHJh bSBpbgo+IHRoZSBsb3cgMU1pQiByYW5nZS4gQW5kIGl0IHdvcmtlZCB3ZWxsLgo+Cj4gQEAgLTM1 NiwxMSArMzM4LDExIEBAIGludCBjcmFzaF9zZXR1cF9tZW1tYXBfZW50cmllcyhzdHJ1Y3Qga2lt YWdlICppbWFnZSwgc3RydWN0IGJvb3RfcGFyYW1zICpwYXJhbXMpCj4gICAgICAgICBtZW1zZXQo JmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBjcmFzaF9tZW1tYXBfZGF0YSkpOwo+ICAgICAgICAgY21k LnBhcmFtcyA9IHBhcmFtczsKPiAgCj4gKyAgICAgICAvKiBBZGQgdGhlIGxvdyAxTWlCICovCj4g KyAgICAgICBjbWQudHlwZSA9IEU4MjBfVFlQRV9SQU07Cj4gKyAgICAgICBmbGFncyA9IElPUkVT T1VSQ0VfU1lTVEVNX1JBTSB8IElPUkVTT1VSQ0VfQlVTWTsKPiArICAgICAgIHdhbGtfaW9tZW1f cmVzX2Rlc2MoSU9SRVNfREVTQ19OT05FLCBmbGFncywgMCwgMTAyNCoxMDI0IC0gMSwgJmNtZCwK PiArICAgICAgICAgICAgICAgICAgICAgICBtZW1tYXBfZW50cnlfY2FsbGJhY2spOwo+CgpUaGF0 IGxvb2tzIGxpa2UgYSB2ZXJ5IHJlYXNvbmFibGUgZml4LgoKPj4gRGVwZW5kaW5nIG9uIHdoaWNo IGJ1Z3MgZXhpc3QgaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBsaW1pdCB0aGlzIHRvCj4+IHRoZSBs b3cgNjQwS2lCLiAgQnV0IGZpbmRpbmcgc29tZXRoaW5nIHRoZSBrZXJuZWwgYWxyZWFkeSByZWNv Z25pemVzCj4+IGFzIFJBTSBzaG91bGQgcHJldmVudCBtb3N0IG9mIHRob3NlIHByb2JsZW1zIGFs cmVhZHkuICBCYXJyaW5nIGJ1Z3MKPj4gSSBhZG1pdCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8g cmVwZWF0IHRoZSB3b3JrIHRoYXQgc29tZW9uZSBlbHNlCj4+IGhhcyBhbHJlYWR5IGRvbmUuCj4+ IAo+PiBUaGlzIGJpdDoKPj4gCS8qIEFkZCBlODIwIHJlc2VydmVkIHJhbmdlcyAqLwo+PiAJY21k LnR5cGUgPSBFODIwX1RZUEVfUkVTRVJWRUQ7Cj4+IAlmbGFncyA9IElPUkVTT1VSQ0VfTUVNOwo+ PiAJd2Fsa19pb21lbV9yZXNfZGVzYyhJT1JFU19ERVNDX1JFU0VSVkVELCBmbGFncywgMCwgLTEs ICZjbWQsCj4+IAkJCSAgIG1lbW1hcF9lbnRyeV9jYWxsYmFjayk7Cj4+IAo+PiBTaG91bGQgcHJv YmFibHkgc3RhcnQgYXQgMU1pQiBpbnN0ZWFkIG9mIDAuICBKdXN0IHNvIHdlIGRvbid0IHJlcG9y dCB0aGUKPiBJZiBzbywgaXQgY2FuIG5vdCBmaW5kIG91dCB0aGUgcmVzZXJ2ZWQgbWVtb3J5IG1h cmtlZCBhcyAnSU9SRVNfREVTQ19SRVNFUlZFRCcgaW4KPiB0aGUgbG93IDFNaUIgcmFuZ2UsIGZp bmFsbHksIGl0IGRvZXNuJ3QgcGFzcyB0aGUgcmVzZXJ2ZWQgbWVtb3J5IGluIHRoZSBsb3cgMU1p QiB0bwo+IGtkdW1wIGtlcm5lbCwgd2hpY2ggY291bGQgY2F1c2Ugc29tZSBwcm9ibGVtcywgc3Vj aCBhcyBTTUUgb3IgUENJIE1NQ09ORklHIGlzc3VlLgoKR29vZCBwb2ludC4gRm9yIHNvbWUgcmVh c29uIEkgd2FzIHRoaW5raW5nIElPUkVTT1VSQ0VfTUVNIGFuZApJT1JFU09VUkNFX1NZU1RFTV9S QU0gd2VyZSB0aGUgc2FtZSB0aGluZy4gIEl0IGhhcyBiZWVuIHdheSB0byBsb25nCnNpbmNlIEkg aGF2ZSBiZWVuIGluIHRoYXQgcGFydCBvZiB0aGUgY29kZS4KClNvIHllcyBsZXQncyBsZWF2ZSB0 aGF0IHBhcnQgYWxvbmUuCgo+PiBtZW1vcnkgYmVsb3cgMU1pQiBhcyB1bmNvbmRpdGlvbmFsbHkg cmVzZXJ2ZWQuICAgSSBkb24ndCBwcm9wZXJseQo+PiB1bmRlcnN0YW5kIHRoZSBJT1JFU19ERVND X1JFU0VSVkVEIGZsYWcsIGFuZCBob3cgdGhhdCBkaWZmZXJzIGZyb20KPiBJIGZvdW5kIHRocmVl IGNvbW1pdHMgYWJvdXQgJ0lPUkVTX0RFU0NfUkVTRVJWRUQnIGZsYWcsIGhvcGUgdGhpcyBoZWxw cy4KPiAxLmFlOWUxM2Q2MjFkNiAoIng4Ni9lODIwLCBpb3BvcnQ6IEFkZCBhIG5ldyBJL08gcmVz b3VyY2UgZGVzY3JpcHRvciBJT1JFU19ERVNDX1JFU0VSVkVEIikKPiAyLjVkYTA0Y2M4NmQxMiAo Ing4Ni9tbTogUmV3b3JrIGlvcmVtYXAgcmVzb3VyY2UgbWFwcGluZyBkZXRlcm1pbmF0aW9uIikK PiAzLjk4MDYyMWRhZjM2OCAoIng4Ni9jcmFzaDogQWRkIGU4MjAgcmVzZXJ2ZWQgcmFuZ2VzIHRv IGtkdW1wIGtlcm5lbCdzIGU4MjAgdGFibGUiKQo+Cj4+IGZsYWdzLiAgU28gcGxlYXNlIHRlc3Qg bXkgc3VnZ2VzdGlvbnMgdG8gdmVyaWZ5IHRoZSBjb2RlIHdvcmtzIGFzCj4+IGV4cGVjdGVkLgo+ PiAKPiBJIGhhdmUgdGVzdGVkIHRoZSB0d28gY2hhbmdlcyB0aGF0IHlvdSBtZW50aW9uZWQsIHBs ZWFzZSByZWZlciB0byB0aGUKPiByZXBseSBhYm92ZS4KClRoYW5rIHlvdS4gIEl0IGxvb2tzIGxp a2UgeW91IGhhdmUgZmlndXJlZCBvdXQgaG93IHRoZXNlIHRoaW5ncyBzaG91bGQKd29yay4KCkVy aWMKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprZXhl YyBtYWlsaW5nIGxpc3QKa2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2tleGVjCg==