From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Lalancette Subject: Re: [PATCH 5/5] Fix kdump under KVM. Date: Fri, 30 Oct 2009 16:28:01 +0100 Message-ID: <4AEB0601.10103@redhat.com> References: <1256661667-9298-1-git-send-email-clalance@redhat.com> <1256661667-9298-6-git-send-email-clalance@redhat.com> <20091027174246.GA10473@amt.cnet> <4AE81B36.5010104@redhat.com> <20091028124100.GA3063@amt.cnet> <4AEADADD.7070501@redhat.com> <20091030130712.GA2778@amt.cnet> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040406040601060403050901" Cc: kvm@vger.kernel.org, Avi Kivity To: Marcelo Tosatti Return-path: Received: from mx1.redhat.com ([209.132.183.28]:22374 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932350AbZJ3P16 (ORCPT ); Fri, 30 Oct 2009 11:27:58 -0400 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9UFS4Hf007945 for ; Fri, 30 Oct 2009 11:28:04 -0400 In-Reply-To: <20091030130712.GA2778@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------040406040601060403050901 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Marcelo Tosatti wrote: > On Fri, Oct 30, 2009 at 01:23:57PM +0100, Chris Lalancette wrote: >> Marcelo Tosatti wrote: >>> On Wed, Oct 28, 2009 at 11:21:42AM +0100, Chris Lalancette wrote: >>>> Marcelo Tosatti wrote: >>>>> On Tue, Oct 27, 2009 at 05:41:07PM +0100, Chris Lalancette wrote: >>>>>> This patch is the main point of the series. In order for >>>>>> kdump to properly work inside a KVM guest, we need to make >>>>>> sure that all VCPUs in virtual wire APIC mode get kicked >>>>>> to try and pick up the timer interrupts. To do this, >>>>>> we iterate over the CPUs and deliver interrupts to the >>>>>> proper VCPUs. >>>>>> >>>>>> I don't love the concept of doing kvm_irq_kick_vcpus() from >>>>>> within pit_timer_fn(). A PIT is not connected to a CPU at all, >>>>>> only to a PIC or APIC. However, if a CPU enters idle, this is >>>>>> the only way to wake it up to check for the interrupt. >>>>> The reason the PIT interrupt was fixed to BSP is: >>>>> >>>>> http://www.mail-archive.com/kvm-devel@lists.sourceforge.net/msg13250.html >>>>> >>>>> Perhaps enhancing ioapic_deliver's (irq == 0) check to bypass the >>>>> destination overwrite in case its programmed by the guest to >>>>> a single CPU would fix it? >>>> Ug, nasty. I definitely don't want to re-introduce that bug. What exactly do >>>> you mean by "fix it"? Do you mean fix the original RHEL-5.1 PAE issue, or fix >>>> the kdump issue? >>> The kdump issue. Something like: >>> >>> #ifdef CONFIG_X86 >>> /* Always delivery PIT interrupt to vcpu 0 */ >>> if (irq == 0 && dest_multiple_vcpus(entry)) { >>> irqe.dest_mode = 0; /* Physical mode. */ >>> /* need to read apic_id from apic regiest since >>> * it can be rewritten */ >>> irqe.dest_id = ioapic->kvm->bsp_vcpu->vcpu_id; >>> } >>> #endif >>> >>> The rest of the code should be ready to deal with it. >> Do you have any more information about how to reproduce that original issue? I >> tried installing a RHEL-5.1 i386 guest with a PAE kernel, and I was able to >> install and boot it just fine with or without the "always deliver irq 0 to vcpu >> 0" check above. Either there's something in particular I need to do to trigger >> the issue (hardware or software), or it's being solved another way. > > For VMX, the guests TSC's are now usually synchronized (which was not > the case before, when this patch was written). For AMD, they start out > of sync. > > Migration also causes them to be out of sync. So i'd prefer to postpone > the removal of this limitation until there is a guarantee the TSCs > are synchronized across vcpus. OK. I'll try to get on an unsynchronized TSC machine and see if I can reproduce there. > >> In the meantime, I've gotten the "set_irq from IRQ context" that Avi suggested >> working, and the fixing up of this IOAPIC check is the last bit to actually get >> kdump working. > > The kdump fix does not require that, I believe (although it is > useful/required for other things, please send the patch separately). > > The hrtimer will fire on vcpu0, then: > > kvm_inject_pit_interrupts -> ioapic_set_irq -> apic_deliver -> > kvm_vcpu_kick(vcpuN) > > As long as the dest-id = vcpu_id overwrite change is in place. Just to follow up here, I am taking your suggestion about testing for dest_id to multiple vcpus in the IOAPIC, and it seems to be working so far. However, that is not enough to fix kdump. We also need to remove the BSP assumptions in the i8254 code, otherwise we will never even attempt to deliver the interrupt to !vcpu0. That means that we need code for Avi's suggestion about kvm_set_irq for this to all work. Attached is the patch that I'm currently testing if anyone else wants to look at it. I obviously need to break it up into a nice series, but that will have to wait until next week. My "ioapic_dest_multiple_cpus()" function could do with a "popcnt", but I couldn't find a macro after a quick look around the tree. What's the recommended way to count bits in Linux? -- Chris Lalancette --------------040406040601060403050901 Content-Type: application/mbox; name="current.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="current.patch" Y29tbWl0IGJkNzQ0ZWM5YmU1NjM3NDFlZWIxMWQ0MzIxNDBkYTA1YmQ5MTg1ZmIKQXV0aG9y OiBDaHJpcyBMYWxhbmNldHRlIDxjbGFsYW5jZUByZWRoYXQuY29tPgpEYXRlOiAgIEZyaSBP Y3QgMzAgMDc6MDk6NDQgMjAwOSAtMDQwMAoKICAgIEFsbG93IGt2bV9zZXRfaXJxIHRvIGJl IGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LCBhbmQKICAgIGFsbG93IGtkdW1wIHRvIHdvcmsu ICBTdGlsbCBuZWVkcyB0byBiZSBzcGxpdCB1cCBhbmQKICAgIG5lZWRzIHRvIGJlIGRlYnVn Z2VkLgogICAgCiAgICBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBMYWxhbmNldHRlIDxjbGFsYW5j ZUByZWRoYXQuY29tPgoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZSBiL2Fy Y2gveDg2L2t2bS9NYWtlZmlsZQppbmRleCAzMWE3MDM1Li44ZDlhZGY2IDEwMDY0NAotLS0g YS9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCkBA IC0xMCw4ICsxMCw3IEBAIGt2bS15CQkJKz0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9r dm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vIFwKIAkJCQlhc3NpZ25lZC1kZXYubykKIGt2bS0k KENPTkZJR19JT01NVV9BUEkpCSs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywg aW9tbXUubykKIAota3ZtLXkJCQkrPSB4ODYubyBtbXUubyBlbXVsYXRlLm8gaTgyNTkubyBp cnEubyBsYXBpYy5vIFwKLQkJCSAgIGk4MjU0Lm8gdGltZXIubwora3ZtLXkJCQkrPSB4ODYu byBtbXUubyBlbXVsYXRlLm8gaTgyNTkubyBpcnEubyBsYXBpYy5vIGk4MjU0Lm8KIGt2bS1p bnRlbC15CQkrPSB2bXgubwoga3ZtLWFtZC15CQkrPSBzdm0ubwogCmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IGZhYjc0 NDAuLjk0NTU4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2Fy Y2gveDg2L2t2bS9pODI1NC5jCkBAIC0yMjcsMzcgKzIyNywxNSBAQCBzdGF0aWMgdm9pZCBw aXRfbGF0Y2hfc3RhdHVzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGNoYW5uZWwpCiAJfQogfQog Ci1pbnQgcGl0X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsK LQlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gdmNwdS0+a3ZtLT5hcmNoLnZwaXQ7Ci0KLQlpZiAo cGl0ICYmIGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSAmJiBwaXQtPnBpdF9zdGF0ZS5pcnFfYWNr KQotCQlyZXR1cm4gYXRvbWljX3JlYWQoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5k aW5nKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQga3ZtX3BpdF9hY2tfaXJxKHN0 cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbikKIHsKIAlzdHJ1Y3Qga3ZtX2twaXRf c3RhdGUgKnBzID0gY29udGFpbmVyX29mKGtpYW4sIHN0cnVjdCBrdm1fa3BpdF9zdGF0ZSwK IAkJCQkJCSBpcnFfYWNrX25vdGlmaWVyKTsKLQlzcGluX2xvY2soJnBzLT5pbmplY3RfbG9j ayk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpIDwg MCkKLQkJYXRvbWljX2luYygmcHMtPnBpdF90aW1lci5wZW5kaW5nKTsKLQlwcy0+aXJxX2Fj ayA9IDE7Ci0Jc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7Ci19CisJdW5zaWduZWQg bG9uZyBmbGFnczsKIAotdm9pZCBfX2t2bV9taWdyYXRlX3BpdF90aW1lcihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9waXQgKnBpdCA9IHZjcHUtPmt2bS0+YXJj aC52cGl0OwotCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKLQotCWlmICgha3ZtX3ZjcHVfaXNf YnNwKHZjcHUpIHx8ICFwaXQpCi0JCXJldHVybjsKLQotCXRpbWVyID0gJnBpdC0+cGl0X3N0 YXRlLnBpdF90aW1lci50aW1lcjsKLQlpZiAoaHJ0aW1lcl9jYW5jZWwodGltZXIpKQotCQlo cnRpbWVyX3N0YXJ0X2V4cGlyZXModGltZXIsIEhSVElNRVJfTU9ERV9BQlMpOworCXNwaW5f bG9ja19pcnFzYXZlKCZwcy0+aW5qZWN0X2xvY2ssIGZsYWdzKTsKKwlwcy0+aXJxX2FjayA9 IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHMtPmluamVjdF9sb2NrLCBmbGFncyk7 CiB9CiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcGl0X3RpbWVyKHN0cnVjdCBrdm1fdGltZXIg KnB0KQpAQCAtMjc3LDYgKzI1NSwzOCBAQCBzdGF0aWMgc3RydWN0IGt2bV90aW1lcl9vcHMg a3BpdF9vcHMgPSB7CiAJLmlzX3BlcmlvZGljID0ga3BpdF9pc19wZXJpb2RpYywKIH07CiAK K3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBwaXRfdGltZXJfZm4oc3RydWN0IGhydGlt ZXIgKmRhdGEpCit7CisJc3RydWN0IGt2bV90aW1lciAqa3RpbWVyID0gY29udGFpbmVyX29m KGRhdGEsIHN0cnVjdCBrdm1fdGltZXIsIHRpbWVyKTsKKwlzdHJ1Y3Qga3ZtICprdm0gPSBr dGltZXItPmt2bTsKKwlzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgKnBzID0gJmt2bS0+YXJjaC52 cGl0LT5waXRfc3RhdGU7CisJaW50IGluamVjdCA9IDA7CisKKwkvKgorCSAqIFRoZXJlIGlz IGEgcmFjZSB3aW5kb3cgYmV0d2VlbiByZWFkaW5nIGFuZCBpbmNyZW1lbnRpbmcsIGJ1dCB3 ZSBkbworCSAqIG5vdCBjYXJlIGFib3V0IHBvdGVudGlhbGx5IGxvc2luZyB0aW1lciBldmVu dHMgaW4gdGhlICFyZWluamVjdAorCSAqIGNhc2UgYW55d2F5LgorCSAqLworCXNwaW5fbG9j aygmcHMtPmluamVjdF9sb2NrKTsKKwlpZiAoa3RpbWVyLT5yZWluamVjdCAmJiBwcy0+aXJx X2FjaykgeworCQlwcy0+aXJxX2FjayA9IDA7CisJCWluamVjdCA9IDE7CisJfQorCXNwaW5f dW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCisJaWYgKGluamVjdCkgeworCQlrdm1fc2V0 X2lycShrdm0sIGt2bS0+YXJjaC52cGl0LT5pcnFfc291cmNlX2lkLCAwLCAxKTsKKwkJa3Zt X3NldF9pcnEoa3ZtLCBrdm0tPmFyY2gudnBpdC0+aXJxX3NvdXJjZV9pZCwgMCwgMCk7CisJ fQorCQkKKwlpZiAoa3RpbWVyLT50X29wcy0+aXNfcGVyaW9kaWMoa3RpbWVyKSkgeworCQlo cnRpbWVyX2FkZF9leHBpcmVzX25zKCZrdGltZXItPnRpbWVyLCBrdGltZXItPnBlcmlvZCk7 CisJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CisJfQorCWVsc2UKKwkJcmV0dXJuIEhSVElN RVJfTk9SRVNUQVJUOworfQorCiBzdGF0aWMgdm9pZCBjcmVhdGVfcGl0X3RpbWVyKHN0cnVj dCBrdm1fa3BpdF9zdGF0ZSAqcHMsIHUzMiB2YWwsIGludCBpc19wZXJpb2QpCiB7CiAJc3Ry dWN0IGt2bV90aW1lciAqcHQgPSAmcHMtPnBpdF90aW1lcjsKQEAgLTI5MSwxMiArMzAxLDEw IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9waXRfdGltZXIoc3RydWN0IGt2bV9rcGl0X3N0YXRl ICpwcywgdTMyIHZhbCwgaW50IGlzX3BlcmlvZCkKIAlwdC0+cGVyaW9kID0gaW50ZXJ2YWw7 CiAJcHMtPmlzX3BlcmlvZGljID0gaXNfcGVyaW9kOwogCi0JcHQtPnRpbWVyLmZ1bmN0aW9u ID0ga3ZtX3RpbWVyX2ZuOworCXB0LT50aW1lci5mdW5jdGlvbiA9IHBpdF90aW1lcl9mbjsK IAlwdC0+dF9vcHMgPSAma3BpdF9vcHM7CiAJcHQtPmt2bSA9IHBzLT5waXQtPmt2bTsKLQlw dC0+dmNwdSA9IHB0LT5rdm0tPmJzcF92Y3B1OwogCi0JYXRvbWljX3NldCgmcHQtPnBlbmRp bmcsIDApOwogCXBzLT5pcnFfYWNrID0gMTsKIAogCWhydGltZXJfc3RhcnQoJnB0LT50aW1l ciwga3RpbWVfYWRkX25zKGt0aW1lX2dldCgpLCBpbnRlcnZhbCksCkBAIC01NzYsMTcgKzU4 NCwxOCBAQCB2b2lkIGt2bV9waXRfcmVzZXQoc3RydWN0IGt2bV9waXQgKnBpdCkKIAl9CiAJ bXV0ZXhfdW5sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAotCWF0b21pY19zZXQoJnBp dC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5kaW5nLCAwKTsKIAlwaXQtPnBpdF9zdGF0ZS5p cnFfYWNrID0gMTsKIH0KIAogc3RhdGljIHZvaWQgcGl0X21hc2tfbm90aWZlcihzdHJ1Y3Qg a3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uLCBib29sIG1hc2spCiB7CiAJc3RydWN0IGt2 bV9waXQgKnBpdCA9IGNvbnRhaW5lcl9vZihraW1uLCBzdHJ1Y3Qga3ZtX3BpdCwgbWFza19u b3RpZmllcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghbWFzaykgewotCQlh dG9taWNfc2V0KCZwaXQtPnBpdF9zdGF0ZS5waXRfdGltZXIucGVuZGluZywgMCk7CisJCXNw aW5fbG9ja19pcnFzYXZlKCZwaXQtPnBpdF9zdGF0ZS5pbmplY3RfbG9jaywgZmxhZ3MpOwog CQlwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrID0gMTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcGl0LT5waXRfc3RhdGUuaW5qZWN0X2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTcw NCwyNyArNzEzLDMgQEAgc3RhdGljIHZvaWQgX19pbmplY3RfcGl0X3RpbWVyX2ludHIoc3Ry dWN0IGt2bSAqa3ZtKQogCQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pCiAJCQlr dm1fYXBpY19ubWlfd2RfZGVsaXZlcih2Y3B1KTsKIH0KLQotdm9pZCBrdm1faW5qZWN0X3Bp dF90aW1lcl9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlzdHJ1Y3Qga3ZtX3Bp dCAqcGl0ID0gdmNwdS0+a3ZtLT5hcmNoLnZwaXQ7Ci0Jc3RydWN0IGt2bSAqa3ZtID0gdmNw dS0+a3ZtOwotCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7Ci0KLQlpZiAocGl0KSB7Ci0J CWludCBpbmplY3QgPSAwOwotCQlwcyA9ICZwaXQtPnBpdF9zdGF0ZTsKLQotCQkvKiBUcnkg dG8gaW5qZWN0IHBlbmRpbmcgaW50ZXJydXB0cyB3aGVuCi0JCSAqIGxhc3Qgb25lIGhhcyBi ZWVuIGFja2VkLgotCQkgKi8KLQkJc3Bpbl9sb2NrKCZwcy0+aW5qZWN0X2xvY2spOwotCQlp ZiAoYXRvbWljX3JlYWQoJnBzLT5waXRfdGltZXIucGVuZGluZykgJiYgcHMtPmlycV9hY2sp IHsKLQkJCXBzLT5pcnFfYWNrID0gMDsKLQkJCWluamVjdCA9IDE7Ci0JCX0KLQkJc3Bpbl91 bmxvY2soJnBzLT5pbmplY3RfbG9jayk7Ci0JCWlmIChpbmplY3QpCi0JCQlfX2luamVjdF9w aXRfdGltZXJfaW50cihrdm0pOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9p ODI1NC5oIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKaW5kZXggZDRjMWM3Zi4uMDJhMWUzYSAx MDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmgKKysrIGIvYXJjaC94ODYva3ZtL2k4 MjU0LmgKQEAgLTQ5LDcgKzQ5LDYgQEAgc3RydWN0IGt2bV9waXQgewogI2RlZmluZSBLVk1f TUFYX1BJVF9JTlRSX0lOVEVSVkFMICAgSFogLyAxMDAKICNkZWZpbmUgS1ZNX1BJVF9DSEFO TkVMX01BU0sJICAgIDB4MwogCi12b2lkIGt2bV9pbmplY3RfcGl0X3RpbWVyX2lycXMoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3BpdF9sb2FkX2NvdW50KHN0cnVjdCBr dm0gKmt2bSwgaW50IGNoYW5uZWwsIHUzMiB2YWwsIGludCBocGV0X2xlZ2FjeV9zdGFydCk7 CiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIg ZmxhZ3MpOwogdm9pZCBrdm1fZnJlZV9waXQoc3RydWN0IGt2bSAqa3ZtKTsKZGlmZiAtLWdp dCBhL2FyY2gveDg2L2t2bS9pODI1OS5jIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKaW5kZXgg ZDA1N2MwYy4uMGQyNmY4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU5LmMKKysr IGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKQEAgLTUyLDEwICs1MiwxMiBAQCBzdGF0aWMgdm9p ZCBwaWNfY2xlYXJfaXNyKHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcywgaW50IGlycSkKIHZv aWQga3ZtX3BpY19jbGVhcl9pc3JfYWNrKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qg a3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7Ci0Jc3Bpbl9sb2NrKCZzLT5sb2NrKTsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ss IGZsYWdzKTsKIAlzLT5waWNzWzBdLmlzcl9hY2sgPSAweGZmOwogCXMtPnBpY3NbMV0uaXNy X2FjayA9IDB4ZmY7Ci0Jc3Bpbl91bmxvY2soJnMtPmxvY2spOworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTE1NiwyNCArMTU4LDI3 IEBAIHN0YXRpYyB2b2lkIHBpY191cGRhdGVfaXJxKHN0cnVjdCBrdm1fcGljICpzKQogCiB2 b2lkIGt2bV9waWNfdXBkYXRlX2lycShzdHJ1Y3Qga3ZtX3BpYyAqcykKIHsKLQlzcGluX2xv Y2soJnMtPmxvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCXBpY191cGRhdGVfaXJxKHMpOwotCXNwaW5fdW5s b2NrKCZzLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFn cyk7CiB9CiAKIGludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBp bnQgbGV2ZWwpCiB7CiAJc3RydWN0IGt2bV9waWMgKnMgPSBvcGFxdWU7CiAJaW50IHJldCA9 IC0xOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnMtPmxvY2spOwor CXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJaWYgKGlycSA+PSAwICYm IGlycSA8IFBJQ19OVU1fUElOUykgewogCQlyZXQgPSBwaWNfc2V0X2lycTEoJnMtPnBpY3Nb aXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CiAJCXBpY191cGRhdGVfaXJxKHMpOwogCQl0 cmFjZV9rdm1fcGljX3NldF9pcnEoaXJxID4+IDMsIGlycSAmIDcsIHMtPnBpY3NbaXJxID4+ IDNdLmVsY3IsCiAJCQkJICAgICAgcy0+cGljc1tpcnEgPj4gM10uaW1yLCByZXQgPT0gMCk7 CiAJfQotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZzLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAyLDggKzIwNyw5 IEBAIGludCBrdm1fcGljX3JlYWRfaXJxKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaXJx LCBpcnEyLCBpbnRubzsKIAlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmcy0+bG9jayk7CisJc3Bp bl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKIAlpcnEgPSBwaWNfZ2V0X2lycSgm cy0+cGljc1swXSk7CiAJaWYgKGlycSA+PSAwKSB7CiAJCXBpY19pbnRhY2soJnMtPnBpY3Nb MF0sIGlycSk7CkBAIC0yMjgsMTYgKzIzNCwxNCBAQCBpbnQga3ZtX3BpY19yZWFkX2lycShz dHJ1Y3Qga3ZtICprdm0pCiAJCWludG5vID0gcy0+cGljc1swXS5pcnFfYmFzZSArIGlycTsK IAl9CiAJcGljX3VwZGF0ZV9pcnEocyk7Ci0Jc3Bpbl91bmxvY2soJnMtPmxvY2spOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBpbnRu bzsKIH0KIAotdm9pZCBrdm1fcGljX3Jlc2V0KHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcykK K3N0YXRpYyB2b2lkIGt2bV9waWNfcmVzZXQoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzKQog ewogCWludCBpcnE7Ci0Jc3RydWN0IGt2bSAqa3ZtID0gcy0+cGljc19zdGF0ZS0+aXJxX3Jl cXVlc3Rfb3BhcXVlOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTAgPSBrdm0tPmJzcF92Y3B1 OwogCXU4IGlyciA9IHMtPmlyciwgaXNyID0gcy0+aW1yOwogCiAJcy0+bGFzdF9pcnIgPSAw OwpAQCAtMjU3LDEwICsyNjEsOCBAQCB2b2lkIGt2bV9waWNfcmVzZXQoc3RydWN0IGt2bV9r cGljX3N0YXRlICpzKQogCXMtPmluaXQ0ID0gMDsKIAogCWZvciAoaXJxID0gMDsgaXJxIDwg UElDX05VTV9QSU5TLzI7IGlycSsrKSB7Ci0JCWlmICh2Y3B1MCAmJiBrdm1fYXBpY19hY2Nl cHRfcGljX2ludHIodmNwdTApKQotCQkJaWYgKGlyciAmICgxIDw8IGlycSkgfHwgaXNyICYg KDEgPDwgaXJxKSkgewotCQkJCXBpY19jbGVhcl9pc3IocywgaXJxKTsKLQkJCX0KKwkJaWYg KGlyciAmICgxIDw8IGlycSkgfHwgaXNyICYgKDEgPDwgaXJxKSkKKwkJCXBpY19jbGVhcl9p c3IocywgaXJxKTsKIAl9CiB9CiAKQEAgLTQzNCw2ICs0MzYsOCBAQCBzdGF0aWMgaW50IHBp Y2Rldl93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKIHsKIAlzdHJ1Y3Qga3Zt X3BpYyAqcyA9IHRvX3BpYyh0aGlzKTsKIAl1bnNpZ25lZCBjaGFyIGRhdGEgPSAqKHVuc2ln bmVkIGNoYXIgKil2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICghcGljZGV2 X2luX3JhbmdlKGFkZHIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTQ0Miw3ICs0 NDYsNyBAQCBzdGF0aWMgaW50IHBpY2Rldl93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAq dGhpcywKIAkJCXByaW50ayhLRVJOX0VSUiAiUElDOiBub24gYnl0ZSB3cml0ZVxuIik7CiAJ CXJldHVybiAwOwogCX0KLQlzcGluX2xvY2soJnMtPmxvY2spOworCXNwaW5fbG9ja19pcnFz YXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJc3dpdGNoIChhZGRyKSB7CiAJY2FzZSAweDIwOgog CWNhc2UgMHgyMToKQEAgLTQ1NSw3ICs0NTksNyBAQCBzdGF0aWMgaW50IHBpY2Rldl93cml0 ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKIAkJZWxjcl9pb3BvcnRfd3JpdGUoJnMt PnBpY3NbYWRkciAmIDFdLCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CiAJfQotCXNwaW5fdW5s b2NrKCZzLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFn cyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ2NCw2ICs0NjgsOCBAQCBzdGF0aWMgaW50IHBp Y2Rldl9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAogewogCXN0cnVjdCBrdm1f cGljICpzID0gdG9fcGljKHRoaXMpOwogCXVuc2lnbmVkIGNoYXIgZGF0YSA9IDA7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwogCWlmICghcGljZGV2X2luX3JhbmdlKGFkZHIpKQogCQly ZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTQ3Miw3ICs0NzgsNyBAQCBzdGF0aWMgaW50IHBp Y2Rldl9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAogCQkJcHJpbnRrKEtFUk5f RVJSICJQSUM6IG5vbiBieXRlIHJlYWRcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0Jc3Bpbl9s b2NrKCZzLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwog CXN3aXRjaCAoYWRkcikgewogCWNhc2UgMHgyMDoKIAljYXNlIDB4MjE6CkBAIC00ODYsNyAr NDkyLDcgQEAgc3RhdGljIGludCBwaWNkZXZfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAq dGhpcywKIAkJYnJlYWs7CiAJfQogCSoodW5zaWduZWQgY2hhciAqKXZhbCA9IGRhdGE7Ci0J c3Bpbl91bmxvY2soJnMtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxv Y2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk2LDE0ICs1MDIsMTMgQEAgc3Rh dGljIGludCBwaWNkZXZfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKIHN0YXRp YyB2b2lkIHBpY19pcnFfcmVxdWVzdCh2b2lkICpvcGFxdWUsIGludCBsZXZlbCkKIHsKIAlz dHJ1Y3Qga3ZtICprdm0gPSBvcGFxdWU7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3Zt LT5ic3BfdmNwdTsKIAlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7CiAJ aW50IGlycSA9IHBpY19nZXRfaXJxKCZzLT5waWNzWzBdKTsKIAogCXMtPm91dHB1dCA9IGxl dmVsOwotCWlmICh2Y3B1ICYmIGxldmVsICYmIChzLT5waWNzWzBdLmlzcl9hY2sgJiAoMSA8 PCBpcnEpKSkgeworCWlmIChsZXZlbCAmJiAocy0+cGljc1swXS5pc3JfYWNrICYgKDEgPDwg aXJxKSkpIHsKIAkJcy0+cGljc1swXS5pc3JfYWNrICY9IH4oMSA8PCBpcnEpOwotCQlrdm1f dmNwdV9raWNrKHZjcHUpOworCQlrdm1faXJxX2tpY2tfdmNwdXMoa3ZtKTsKIAl9CiB9CiAK ZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuYyBiL2FyY2gveDg2L2t2bS9pcnEuYwpp bmRleCA5NmRmYmI2Li5iNWRiMGRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmMK KysrIGIvYXJjaC94ODYva3ZtL2lycS5jCkBAIC0zMiwxMiArMzIsNyBAQAogICovCiBpbnQg a3ZtX2NwdV9oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0J aW50IHJldDsKLQotCXJldCA9IHBpdF9oYXNfcGVuZGluZ190aW1lcih2Y3B1KTsKLQlyZXQg fD0gYXBpY19oYXNfcGVuZGluZ190aW1lcih2Y3B1KTsKLQotCXJldHVybiByZXQ7CisJcmV0 dXJuIGFwaWNfaGFzX3BlbmRpbmdfdGltZXIodmNwdSk7CiB9CiBFWFBPUlRfU1lNQk9MKGt2 bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIpOwogCkBAIC01Myw3ICs0OCw3IEBAIGludCBrdm1f Y3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KQogCQlyZXR1cm4gdi0+YXJj aC5pbnRlcnJ1cHQucGVuZGluZzsKIAogCWlmIChrdm1fYXBpY19oYXNfaW50ZXJydXB0KHYp ID09IC0xKSB7CS8qIExBUElDICovCi0JCWlmIChrdm1fYXBpY19hY2NlcHRfcGljX2ludHIo dikpIHsKKwkJaWYgKGt2bV9hcGljX2luX3ZpcnR1YWxfd2lyZV9tb2RlKHYpKSB7CiAJCQlz ID0gcGljX2lycWNoaXAodi0+a3ZtKTsJLyogUElDICovCiAJCQlyZXR1cm4gcy0+b3V0cHV0 OwogCQl9IGVsc2UKQEAgLTc2LDcgKzcxLDcgQEAgaW50IGt2bV9jcHVfZ2V0X2ludGVycnVw dChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCiAKIAl2ZWN0b3IgPSBrdm1fZ2V0X2FwaWNfaW50ZXJy dXB0KHYpOwkvKiBBUElDICovCiAJaWYgKHZlY3RvciA9PSAtMSkgewotCQlpZiAoa3ZtX2Fw aWNfYWNjZXB0X3BpY19pbnRyKHYpKSB7CisJCWlmIChrdm1fYXBpY19pbl92aXJ0dWFsX3dp cmVfbW9kZSh2KSkgewogCQkJcyA9IHBpY19pcnFjaGlwKHYtPmt2bSk7CiAJCQlzLT5vdXRw dXQgPSAwOwkJLyogUElDICovCiAJCQl2ZWN0b3IgPSBrdm1fcGljX3JlYWRfaXJxKHYtPmt2 bSk7CkBAIC04OSwxMyArODQsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2NwdV9nZXRf aW50ZXJydXB0KTsKIHZvaWQga3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXMoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQogewogCWt2bV9pbmplY3RfYXBpY190aW1lcl9pcnFzKHZjcHUp OwotCWt2bV9pbmplY3RfcGl0X3RpbWVyX2lycXModmNwdSk7Ci0JLyogVE9ETzogUElULCBS VEMgZXRjLiAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2luamVjdF9wZW5kaW5nX3Rp bWVyX2lycXMpOwogCiB2b2lkIF9fa3ZtX21pZ3JhdGVfdGltZXJzKHN0cnVjdCBrdm1fdmNw dSAqdmNwdSkKIHsKIAlfX2t2bV9taWdyYXRlX2FwaWNfdGltZXIodmNwdSk7Ci0JX19rdm1f bWlncmF0ZV9waXRfdGltZXIodmNwdSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0v aXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggYzAyNWEyMy4uY2JjOWM4YiAxMDA2 NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApA QCAtODksMTYgKzg5LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGlycWNoaXBfaW5fa2VybmVs KHN0cnVjdCBrdm0gKmt2bSkKIAlyZXR1cm4gcGljX2lycWNoaXAoa3ZtKSAhPSBOVUxMOwog fQogCi12b2lkIGt2bV9waWNfcmVzZXQoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzKTsKLQog dm9pZCBrdm1faW5qZWN0X3BlbmRpbmdfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUpOwogdm9pZCBrdm1faW5qZWN0X2FwaWNfdGltZXJfaXJxcyhzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpOwogdm9pZCBrdm1fYXBpY19ubWlfd2RfZGVsaXZlcihzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUpOwogdm9pZCBfX2t2bV9taWdyYXRlX2FwaWNfdGltZXIoc3RydWN0IGt2bV92Y3B1 ICp2Y3B1KTsKLXZvaWQgX19rdm1fbWlncmF0ZV9waXRfdGltZXIoc3RydWN0IGt2bV92Y3B1 ICp2Y3B1KTsKIHZvaWQgX19rdm1fbWlncmF0ZV90aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2 Y3B1KTsKIAotaW50IHBpdF9oYXNfcGVuZGluZ190aW1lcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUpOwogaW50IGFwaWNfaGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gv eDg2L2t2bS9sYXBpYy5jCmluZGV4IGNkNjBjMGIuLjAwMDU0MDkgMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC00MzUs NyArNDM1LDcgQEAgc3RhdGljIGludCBfX2FwaWNfYWNjZXB0X2lycShzdHJ1Y3Qga3ZtX2xh cGljICphcGljLCBpbnQgZGVsaXZlcnlfbW9kZSwKIAkJLyoKIAkJICogU2hvdWxkIG9ubHkg YmUgY2FsbGVkIGJ5IGt2bV9hcGljX2xvY2FsX2RlbGl2ZXIoKSB3aXRoIExWVDAsCiAJCSAq IGJlZm9yZSBOTUkgd2F0Y2hkb2cgd2FzIGVuYWJsZWQuIEFscmVhZHkgaGFuZGxlZCBieQot CQkgKiBrdm1fYXBpY19hY2NlcHRfcGljX2ludHIoKS4KKwkJICoga3ZtX2FwaWNfaW5fdmly dHVhbF93aXJlX21vZGUoKS4KIAkJICovCiAJCWJyZWFrOwogCkBAIC0xMDQwLDYgKzEwNDAs MzcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBhcGljX21taW9f b3BzID0gewogCS53cml0ZSAgICA9IGFwaWNfbW1pb193cml0ZSwKIH07CiAKK3N0YXRpYyBl bnVtIGhydGltZXJfcmVzdGFydCBsYXBpY190aW1lcl9mbihzdHJ1Y3QgaHJ0aW1lciAqZGF0 YSkKK3sKKwlzdHJ1Y3Qga3ZtX3RpbWVyICprdGltZXIgPSBjb250YWluZXJfb2YoZGF0YSwg c3RydWN0IGt2bV90aW1lciwgdGltZXIpOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlz dHJ1Y3Qga3ZtX2xhcGljICpsYXBpYzsKKworCXZjcHUgPSBrdGltZXItPnZjcHU7CisJaWYg KCF2Y3B1KQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlsYXBpYyA9IHZjcHUt PmFyY2guYXBpYzsKKworCS8qCisJICogVGhlcmUgaXMgYSByYWNlIHdpbmRvdyBiZXR3ZWVu IHJlYWRpbmcgYW5kIGluY3JlbWVudGluZywgYnV0IHdlIGRvCisJICogbm90IGNhcmUgYWJv dXQgcG90ZW50aWFsbHkgbG9zaW5nIHRpbWVyIGV2ZW50cyBpbiB0aGUgIXJlaW5qZWN0CisJ ICogY2FzZSBhbnl3YXkuCisJICovCisJaWYgKGt0aW1lci0+cmVpbmplY3QgfHwgIWF0b21p Y19yZWFkKCZrdGltZXItPnBlbmRpbmcpKQorCQlhdG9taWNfaW5jKCZrdGltZXItPnBlbmRp bmcpOworCisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnZjcHUtPndxKSkKKwkJd2FrZV91cF9p bnRlcnJ1cHRpYmxlKCZ2Y3B1LT53cSk7CisKKwlpZiAoa3RpbWVyLT50X29wcy0+aXNfcGVy aW9kaWMoa3RpbWVyKSkgeworCQlocnRpbWVyX2FkZF9leHBpcmVzX25zKCZrdGltZXItPnRp bWVyLCBrdGltZXItPnBlcmlvZCk7CisJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CisJfQor CWVsc2UKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworfQorCiBpbnQga3ZtX2NyZWF0 ZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9sYXBpYyAq YXBpYzsKQEAgLTEwNjUsNyArMTA5Niw3IEBAIGludCBrdm1fY3JlYXRlX2xhcGljKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKIAogCWhydGltZXJfaW5pdCgmYXBpYy0+bGFwaWNfdGltZXIu dGltZXIsIENMT0NLX01PTk9UT05JQywKIAkJICAgICBIUlRJTUVSX01PREVfQUJTKTsKLQlh cGljLT5sYXBpY190aW1lci50aW1lci5mdW5jdGlvbiA9IGt2bV90aW1lcl9mbjsKKwlhcGlj LT5sYXBpY190aW1lci50aW1lci5mdW5jdGlvbiA9IGxhcGljX3RpbWVyX2ZuOwogCWFwaWMt PmxhcGljX3RpbWVyLnRfb3BzID0gJmxhcGljX3RpbWVyX29wczsKIAlhcGljLT5sYXBpY190 aW1lci5rdm0gPSB2Y3B1LT5rdm07CiAJYXBpYy0+bGFwaWNfdGltZXIudmNwdSA9IHZjcHU7 CkBAIC0xMDk5LDE4ICsxMTMwLDE3IEBAIGludCBrdm1fYXBpY19oYXNfaW50ZXJydXB0KHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlyZXR1cm4gaGlnaGVzdF9pcnI7CiB9CiAKLWludCBr dm1fYXBpY19hY2NlcHRfcGljX2ludHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoraW50IGt2 bV9hcGljX2luX3ZpcnR1YWxfd2lyZV9tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsK IAl1MzIgbHZ0MCA9IGFwaWNfZ2V0X3JlZyh2Y3B1LT5hcmNoLmFwaWMsIEFQSUNfTFZUMCk7 CiAJaW50IHIgPSAwOwogCi0JaWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSkgewotCQlpZiAo IWFwaWNfaHdfZW5hYmxlZCh2Y3B1LT5hcmNoLmFwaWMpKQotCQkJciA9IDE7Ci0JCWlmICgo bHZ0MCAmIEFQSUNfTFZUX01BU0tFRCkgPT0gMCAmJgotCQkgICAgR0VUX0FQSUNfREVMSVZF UllfTU9ERShsdnQwKSA9PSBBUElDX01PREVfRVhUSU5UKQotCQkJciA9IDE7Ci0JfQorCWlm ICghYXBpY19od19lbmFibGVkKHZjcHUtPmFyY2guYXBpYykpCisJCXIgPSAxOworCWlmICgo bHZ0MCAmIEFQSUNfTFZUX01BU0tFRCkgPT0gMCAmJgorCSAgICBHRVRfQVBJQ19ERUxJVkVS WV9NT0RFKGx2dDApID09IEFQSUNfTU9ERV9FWFRJTlQpCisJCXIgPSAxOworCiAJcmV0dXJu IHI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5oIGIvYXJjaC94ODYv a3ZtL2xhcGljLmgKaW5kZXggNDAwMTBiMC4uY2U0Y2QyZCAxMDA2NDQKLS0tIGEvYXJjaC94 ODYva3ZtL2xhcGljLmgKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKQEAgLTIyLDcgKzIy LDcgQEAgaW50IGt2bV9jcmVhdGVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZv aWQga3ZtX2ZyZWVfbGFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogaW50IGt2bV9h cGljX2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBrdm1fYXBp Y19hY2NlcHRfcGljX2ludHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fYXBp Y19pbl92aXJ0dWFsX3dpcmVfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogaW50IGt2 bV9nZXRfYXBpY19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3Zt X2xhcGljX3Jlc2V0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB1NjQga3ZtX2xhcGljX2dl dF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2 bS90aW1lci5jIGIvYXJjaC94ODYva3ZtL3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGVlYTQwNDMuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva3ZtL3RpbWVyLmMK KysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgva3ZtX2hv c3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rdm0uaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVy Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgImt2bV90aW1lci5oIgot Ci1zdGF0aWMgaW50IF9fa3ZtX3RpbWVyX2ZuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3Ry dWN0IGt2bV90aW1lciAqa3RpbWVyKQotewotCWludCByZXN0YXJ0X3RpbWVyID0gMDsKLQl3 YWl0X3F1ZXVlX2hlYWRfdCAqcSA9ICZ2Y3B1LT53cTsKLQotCS8qCi0JICogVGhlcmUgaXMg YSByYWNlIHdpbmRvdyBiZXR3ZWVuIHJlYWRpbmcgYW5kIGluY3JlbWVudGluZywgYnV0IHdl IGRvCi0JICogbm90IGNhcmUgYWJvdXQgcG90ZW50aWFsbHkgbG9vc2luZyB0aW1lciBldmVu dHMgaW4gdGhlICFyZWluamVjdAotCSAqIGNhc2UgYW55d2F5LgotCSAqLwotCWlmIChrdGlt ZXItPnJlaW5qZWN0IHx8ICFhdG9taWNfcmVhZCgma3RpbWVyLT5wZW5kaW5nKSkgewotCQlh dG9taWNfaW5jKCZrdGltZXItPnBlbmRpbmcpOwotCQkvKiBGSVhNRTogdGhpcyBjb2RlIHNo b3VsZCBub3Qga25vdyBhbnl0aGluZyBhYm91dCB2Y3B1cyAqLwotCQlzZXRfYml0KEtWTV9S RVFfUEVORElOR19USU1FUiwgJnZjcHUtPnJlcXVlc3RzKTsKLQl9Ci0KLQlpZiAod2FpdHF1 ZXVlX2FjdGl2ZShxKSkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHEpOwotCi0JaWYgKGt0 aW1lci0+dF9vcHMtPmlzX3BlcmlvZGljKGt0aW1lcikpIHsKLQkJaHJ0aW1lcl9hZGRfZXhw aXJlc19ucygma3RpbWVyLT50aW1lciwga3RpbWVyLT5wZXJpb2QpOwotCQlyZXN0YXJ0X3Rp bWVyID0gMTsKLQl9Ci0KLQlyZXR1cm4gcmVzdGFydF90aW1lcjsKLX0KLQotZW51bSBocnRp bWVyX3Jlc3RhcnQga3ZtX3RpbWVyX2ZuKHN0cnVjdCBocnRpbWVyICpkYXRhKQotewotCWlu dCByZXN0YXJ0X3RpbWVyOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKLQlzdHJ1Y3Qga3Zt X3RpbWVyICprdGltZXIgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGt2bV90aW1lciwg dGltZXIpOwotCi0JdmNwdSA9IGt0aW1lci0+dmNwdTsKLQlpZiAoIXZjcHUpCi0JCXJldHVy biBIUlRJTUVSX05PUkVTVEFSVDsKLQotCXJlc3RhcnRfdGltZXIgPSBfX2t2bV90aW1lcl9m bih2Y3B1LCBrdGltZXIpOwotCWlmIChyZXN0YXJ0X3RpbWVyKQotCQlyZXR1cm4gSFJUSU1F Ul9SRVNUQVJUOwotCWVsc2UKLQkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwotfQotCmRp ZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5k ZXggMmVmMzkwNi4uOTNhNjViNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisr KyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzkwNiw3ICszOTA2LDYgQEAgc3RhdGljIGlu dCBfX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAkJaWYgKHIgPD0gMCkKIAkJ CWJyZWFrOwogCi0JCWNsZWFyX2JpdChLVk1fUkVRX1BFTkRJTkdfVElNRVIsICZ2Y3B1LT5y ZXF1ZXN0cyk7CiAJCWlmIChrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHZjcHUpKQogCQkJ a3ZtX2luamVjdF9wZW5kaW5nX3RpbWVyX2lycXModmNwdSk7CiAKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRl eCBiZDVhNjE2Li45NzViMGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0 LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0zMyw3ICszMyw2IEBACiAj ZGVmaW5lIEtWTV9SRVFfUkVQT1JUX1RQUl9BQ0NFU1MgIDIKICNkZWZpbmUgS1ZNX1JFUV9N TVVfUkVMT0FEICAgICAgICAgMwogI2RlZmluZSBLVk1fUkVRX1RSSVBMRV9GQVVMVCAgICAg ICA0Ci0jZGVmaW5lIEtWTV9SRVFfUEVORElOR19USU1FUiAgICAgIDUKICNkZWZpbmUgS1ZN X1JFUV9VTkhBTFQgICAgICAgICAgICAgNgogI2RlZmluZSBLVk1fUkVRX01NVV9TWU5DICAg ICAgICAgICA3CiAjZGVmaW5lIEtWTV9SRVFfS1ZNQ0xPQ0tfVVBEQVRFICAgIDgKQEAgLTU0 Myw2ICs1NDIsOCBAQCBpbnQga3ZtX3NldF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0s CiAJCQl1bnNpZ25lZCBmbGFncyk7CiB2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVj dCBrdm0gKmt2bSk7CiAKK3ZvaWQga3ZtX2lycV9raWNrX3ZjcHVzKHN0cnVjdCBrdm0gKmt2 bSk7CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fZnJlZV9pcnFfcm91dGlu ZyhzdHJ1Y3Qga3ZtICprdm0pIHt9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuYyBi L3ZpcnQva3ZtL2lvYXBpYy5jCmluZGV4IDM4YTJkMjAuLjJlYWQwZmQgMTAwNjQ0Ci0tLSBh L3ZpcnQva3ZtL2lvYXBpYy5jCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5jCkBAIC0xNDQsNiAr MTQ0LDE3IEBAIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3Zt X2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKQogCX0KIH0KIAorc3RhdGljIGludCBpb2FwaWNf ZGVzdF9tdWx0aXBsZV9jcHVzKHU4IGRlc3RfbW9kZSwgdTggZGVzdF9pZCkKK3sKKwlpbnQg bG9va3VwX3RhYmxlW10gPSB7IDAsMSwxLDIsMSwyLDIsMywxLDIsMiwzLDIsMywzLDQgfTsK KworCS8qIHBoeXNpY2FsIG1vZGUgaXMgYWx3YXlzIGRpcmVjdGVkIHRvIDEgY3B1ICovCisJ aWYgKGRlc3RfbW9kZSA9PSAwIHx8IGRlc3RfaWQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwly ZXR1cm4gKGxvb2t1cF90YWJsZVtkZXN0X2lkICYgMHgwZl0gKyBsb29rdXBfdGFibGVbKGRl c3RfaWQgPj4gNCkgJiAweDBmXSkgIT0gMTsKK30KKwogc3RhdGljIGludCBpb2FwaWNfZGVs aXZlcihzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxKQogewogCXVuaW9uIGt2 bV9pb2FwaWNfcmVkaXJlY3RfZW50cnkgKmVudHJ5ID0gJmlvYXBpYy0+cmVkaXJ0YmxbaXJx XTsKQEAgLTE2NCwxNCArMTc1LDE3IEBAIHN0YXRpYyBpbnQgaW9hcGljX2RlbGl2ZXIoc3Ry dWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSkKIAlpcnFlLnNob3J0aGFuZCA9IDA7 CiAKICNpZmRlZiBDT05GSUdfWDg2Ci0JLyogQWx3YXlzIGRlbGl2ZXJ5IFBJVCBpbnRlcnJ1 cHQgdG8gdmNwdSAwICovCi0JaWYgKGlycSA9PSAwKSB7CisJLyogSWYgdGhpcyBpcyB0aGUg UElUIGludGVycnVwdCBhbmQgdGhlIGRlc3RfaWQgaXMgbXVsdGlwbGUKKwkgKiB2Y3B1cywg cmUtd3JpdGUgdG8gYWx3YXlzIGdvIHRvIHZjcHUgMC4KKwkgKi8KKwlpZiAoaXJxID09IDAg JiYgaW9hcGljX2Rlc3RfbXVsdGlwbGVfY3B1cyhpcnFlLmRlc3RfbW9kZSwgaXJxZS5kZXN0 X2lkKSkgewogCQlpcnFlLmRlc3RfbW9kZSA9IDA7IC8qIFBoeXNpY2FsIG1vZGUuICovCi0J CS8qIG5lZWQgdG8gcmVhZCBhcGljX2lkIGZyb20gYXBpYyByZWdpZXN0IHNpbmNlCisJCS8q IG5lZWQgdG8gcmVhZCBhcGljX2lkIGZyb20gYXBpYyByZWdpc3RlciBzaW5jZQogCQkgKiBp dCBjYW4gYmUgcmV3cml0dGVuICovCiAJCWlycWUuZGVzdF9pZCA9IGlvYXBpYy0+a3ZtLT5i c3BfdmNwdS0+dmNwdV9pZDsKIAl9CiAjZW5kaWYKKwogCXJldHVybiBrdm1faXJxX2RlbGl2 ZXJ5X3RvX2FwaWMoaW9hcGljLT5rdm0sIE5VTEwsICZpcnFlKTsKIH0KIApAQCAtMTgxLDgg KzE5NSw5IEBAIGludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlv YXBpYywgaW50IGlycSwgaW50IGxldmVsKQogCXUzMiBtYXNrID0gMSA8PCBpcnE7CiAJdW5p b24ga3ZtX2lvYXBpY19yZWRpcmVjdF9lbnRyeSBlbnRyeTsKIAlpbnQgcmV0ID0gMTsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbXV0ZXhfbG9jaygmaW9hcGljLT5sb2NrKTsKKwlz cGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljLT5sb2NrLCBmbGFncyk7CiAJaWYgKGlycSA+PSAw ICYmIGlycSA8IElPQVBJQ19OVU1fUElOUykgewogCQllbnRyeSA9IGlvYXBpYy0+cmVkaXJ0 YmxbaXJxXTsKIAkJbGV2ZWwgXj0gZW50cnkuZmllbGRzLnBvbGFyaXR5OwpAQCAtMTk5LDEz ICsyMTQsMTMgQEAgaW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAq aW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiAJCX0KIAkJdHJhY2Vfa3ZtX2lvYXBpY19z ZXRfaXJxKGVudHJ5LmJpdHMsIGlycSwgcmV0ID09IDApOwogCX0KLQltdXRleF91bmxvY2so JmlvYXBpYy0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljLT5sb2Nr LCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2t2bV9pb2Fw aWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgdmVjdG9yLAot CQkJCSAgICAgaW50IHRyaWdnZXJfbW9kZSkKKwkJCQkgICAgaW50IHRyaWdnZXJfbW9kZSkK IHsKIAlpbnQgaTsKIApAQCAtMjIzLDkgKzIzOCw5IEBAIHN0YXRpYyB2b2lkIF9fa3ZtX2lv YXBpY191cGRhdGVfZW9pKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCB2ZWN0b3Is CiAJCSAqIGlzIGRyb3BwZWQgaXQgd2lsbCBiZSBwdXQgaW50byBpcnIgYW5kIHdpbGwgYmUg ZGVsaXZlcmVkCiAJCSAqIGFmdGVyIGFjayBub3RpZmllciByZXR1cm5zLgogCQkgKi8KLQkJ bXV0ZXhfdW5sb2NrKCZpb2FwaWMtPmxvY2spOworCQlzcGluX3VubG9jaygmaW9hcGljLT5s b2NrKTsKIAkJa3ZtX25vdGlmeV9hY2tlZF9pcnEoaW9hcGljLT5rdm0sIEtWTV9JUlFDSElQ X0lPQVBJQywgaSk7Ci0JCW11dGV4X2xvY2soJmlvYXBpYy0+bG9jayk7CisJCXNwaW5fbG9j aygmaW9hcGljLT5sb2NrKTsKIAogCQlpZiAodHJpZ2dlcl9tb2RlICE9IElPQVBJQ19MRVZF TF9UUklHKQogCQkJY29udGludWU7CkBAIC0yNDAsMTAgKzI1NSwxMSBAQCBzdGF0aWMgdm9p ZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBp bnQgdmVjdG9yLAogdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3Zt LCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKQogewogCXN0cnVjdCBrdm1faW9hcGlj ICppb2FwaWMgPSBrdm0tPmFyY2gudmlvYXBpYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwog Ci0JbXV0ZXhfbG9jaygmaW9hcGljLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9h cGljLT5sb2NrLCBmbGFncyk7CiAJX19rdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLCB2 ZWN0b3IsIHRyaWdnZXJfbW9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZpb2FwaWMtPmxvY2spOwor CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpYy0+bG9jaywgZmxhZ3MpOwogfQogCiBz dGF0aWMgaW5saW5lIHN0cnVjdCBrdm1faW9hcGljICp0b19pb2FwaWMoc3RydWN0IGt2bV9p b19kZXZpY2UgKmRldikKQEAgLTI2Miw2ICsyNzgsOCBAQCBzdGF0aWMgaW50IGlvYXBpY19t bWlvX3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsIGludCBs ZW4sCiB7CiAJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IHRvX2lvYXBpYyh0aGlzKTsK IAl1MzIgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoIWlvYXBpY19p bl9yYW5nZShpb2FwaWMsIGFkZHIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTI2 OSw3ICsyODcsNyBAQCBzdGF0aWMgaW50IGlvYXBpY19tbWlvX3JlYWQoc3RydWN0IGt2bV9p b19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsIGludCBsZW4sCiAJQVNTRVJUKCEoYWRkciAm IDB4ZikpOwkvKiBjaGVjayBhbGlnbm1lbnQgKi8KIAogCWFkZHIgJj0gMHhmZjsKLQltdXRl eF9sb2NrKCZpb2FwaWMtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWMtPmxv Y2ssIGZsYWdzKTsKIAlzd2l0Y2ggKGFkZHIpIHsKIAljYXNlIElPQVBJQ19SRUdfU0VMRUNU OgogCQlyZXN1bHQgPSBpb2FwaWMtPmlvcmVnc2VsOwpAQCAtMjgzLDcgKzMwMSw3IEBAIHN0 YXRpYyBpbnQgaW9hcGljX21taW9fcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywg Z3BhX3QgYWRkciwgaW50IGxlbiwKIAkJcmVzdWx0ID0gMDsKIAkJYnJlYWs7CiAJfQotCW11 dGV4X3VubG9jaygmaW9hcGljLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp b2FwaWMtPmxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAobGVuKSB7CiAJY2FzZSA4OgpAQCAt MzA1LDYgKzMyMyw4IEBAIHN0YXRpYyBpbnQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2 bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsIGludCBsZW4sCiB7CiAJc3RydWN0IGt2 bV9pb2FwaWMgKmlvYXBpYyA9IHRvX2lvYXBpYyh0aGlzKTsKIAl1MzIgZGF0YTsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCiAJaWYgKCFpb2FwaWNfaW5fcmFuZ2UoaW9hcGljLCBhZGRy KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC0zMjAsNyArMzQwLDcgQEAgc3RhdGlj IGludCBpb2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3Bh X3QgYWRkciwgaW50IGxlbiwKIAl9CiAKIAlhZGRyICY9IDB4ZmY7Ci0JbXV0ZXhfbG9jaygm aW9hcGljLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljLT5sb2NrLCBmbGFn cyk7CiAJc3dpdGNoIChhZGRyKSB7CiAJY2FzZSBJT0FQSUNfUkVHX1NFTEVDVDoKIAkJaW9h cGljLT5pb3JlZ3NlbCA9IGRhdGE7CkBAIC0zMzgsNyArMzU4LDcgQEAgc3RhdGljIGludCBp b2FwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRk ciwgaW50IGxlbiwKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZp b2FwaWMtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpYy0+bG9jaywg ZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0zNjcsNyArMzg3LDcgQEAgaW50IGt2bV9p b2FwaWNfaW5pdChzdHJ1Y3Qga3ZtICprdm0pCiAJaW9hcGljID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IGt2bV9pb2FwaWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlvYXBpYykKIAkJcmV0 dXJuIC1FTk9NRU07Ci0JbXV0ZXhfaW5pdCgmaW9hcGljLT5sb2NrKTsKKwlzcGluX2xvY2tf aW5pdCgmaW9hcGljLT5sb2NrKTsKIAlrdm0tPmFyY2gudmlvYXBpYyA9IGlvYXBpYzsKIAlr dm1faW9hcGljX3Jlc2V0KGlvYXBpYyk7CiAJa3ZtX2lvZGV2aWNlX2luaXQoJmlvYXBpYy0+ ZGV2LCAmaW9hcGljX21taW9fb3BzKTsKQEAgLTM4MiwyMyArNDAyLDI3IEBAIGludCBrdm1f aW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogaW50IGt2bV9nZXRfaW9hcGljKHN0cnVj dCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgKnN0YXRlKQogewogCXN0cnVj dCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChrdm0pOworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisKIAlpZiAoIWlvYXBpYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlt dXRleF9sb2NrKCZpb2FwaWMtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWMt PmxvY2ssIGZsYWdzKTsKIAltZW1jcHkoc3RhdGUsIGlvYXBpYywgc2l6ZW9mKHN0cnVjdCBr dm1faW9hcGljX3N0YXRlKSk7Ci0JbXV0ZXhfdW5sb2NrKCZpb2FwaWMtPmxvY2spOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAw OwogfQogCiBpbnQga3ZtX3NldF9pb2FwaWMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3Zt X2lvYXBpY19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9 IGlvYXBpY19pcnFjaGlwKGt2bSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmICgh aW9hcGljKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmlvYXBpYy0+bG9j ayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpYy0+bG9jaywgZmxhZ3MpOwogCW1lbWNw eShpb2FwaWMsIHN0YXRlLCBzaXplb2Yoc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUpKTsKLQlt dXRleF91bmxvY2soJmlvYXBpYy0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aW9hcGljLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS92aXJ0 L2t2bS9pb2FwaWMuaCBiL3ZpcnQva3ZtL2lvYXBpYy5oCmluZGV4IDQxOWM0M2IuLjViNGY3 NTYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5oCisrKyBiL3ZpcnQva3ZtL2lvYXBp Yy5oCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBrdm1faW9hcGljIHsKIAlzdHJ1Y3Qga3Zt X2lvX2RldmljZSBkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXZvaWQgKCphY2tfbm90aWZp ZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7Ci0Jc3RydWN0IG11dGV4IGxvY2s7CisJc3Bp bmxvY2tfdCBsb2NrOwogfTsKIAogI2lmZGVmIERFQlVHCmRpZmYgLS1naXQgYS92aXJ0L2t2 bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwppbmRleCAwZDQ1NGQzLi5jNzFj ZmViIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pcnFfY29tbS5jCisrKyBiL3ZpcnQva3ZtL2ly cV9jb21tLmMKQEAgLTk4LDYgKzk4LDcgQEAgaW50IGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBp YyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbGFwaWMgKnNyYywKIAkJCWlmIChyIDwg MCkKIAkJCQlyID0gMDsKIAkJCXIgKz0ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCBpcnEpOwor CQkJa3ZtX3ZjcHVfa2ljayh2Y3B1KTsKIAkJfSBlbHNlIHsKIAkJCWlmICghbG93ZXN0KQog CQkJCWxvd2VzdCA9IHZjcHU7CkBAIC0yOTMsNiArMjk0LDE4IEBAIHZvaWQga3ZtX2ZyZWVf aXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKQogCWtmcmVlKGt2bS0+aXJxX3JvdXRpbmcp OwogfQogCit2b2lkIGt2bV9pcnFfa2lja192Y3B1cyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJ aW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCisJa3ZtX2Zvcl9lYWNoX3ZjcHUo aSwgdmNwdSwga3ZtKSB7CisJCWlmIChrdm1fYXBpY19pbl92aXJ0dWFsX3dpcmVfbW9kZSh2 Y3B1KSkKKwkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ2Y3B1LT53cSkpCisJCQkJd2FrZV91 cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1LT53cSk7CisJfQorfQorCiBzdGF0aWMgaW50IHNldHVw X3JvdXRpbmdfZW50cnkoc3RydWN0IGt2bV9pcnFfcm91dGluZ190YWJsZSAqcnQsCiAJCQkg ICAgICAgc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgKmUsCiAJCQkgICAg ICAgY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUpCg== --------------040406040601060403050901--