From owner-freebsd-mips@FreeBSD.ORG Fri Jun 11 11:14:58 2010 Return-Path: Delivered-To: mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BD9131065670 for ; Fri, 11 Jun 2010 11:14:58 +0000 (UTC) (envelope-from c.jayachandran@gmail.com) Received: from mail-vw0-f54.google.com (mail-vw0-f54.google.com [209.85.212.54]) by mx1.freebsd.org (Postfix) with ESMTP id 5C9FE8FC15 for ; Fri, 11 Jun 2010 11:14:58 +0000 (UTC) Received: by vws1 with SMTP id 1so1268839vws.13 for ; Fri, 11 Jun 2010 04:14:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=IgLhbNeodrjgtf8NODb/e+XjVNSyQtTGnaEN/H32IDo=; b=cS2tZnAsmvSMqKgYnmm0Ph8lP5NeDqpR7/qv58C5kGHQ/hVOxTVMC6VKKt17wTzgos G4nGARMJdS9qGlBN4/qotYs/RmVRzEBGHQ7Ms4Eg8tk8SflZlJdhA2WZ0Ys1UAPl4wCU eExDektL2TJRhFeF8UH1uZ05NX8hIiRpka/OY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=s3Mvrd9i8KsdT/1lFgTOWzzDEh3afrtua0PWncZIMspqCDjhhrfwrWTgr9Q4t/mXwt SmThaJSfpWbDBMjzbYw11IDPWo8NI08+lZHqfgTBDClV32DJ1NowOFL75TaIPcdxxnDA XqNNavpR530ezgKA31d8I5x3VAZkOpD9aQPkQ= MIME-Version: 1.0 Received: by 10.224.18.36 with SMTP id u36mr489138qaa.64.1276254897069; Fri, 11 Jun 2010 04:14:57 -0700 (PDT) Received: by 10.224.54.71 with HTTP; Fri, 11 Jun 2010 04:14:56 -0700 (PDT) In-Reply-To: References: <4C07E07B.9060802@cs.rice.edu> <4C09345F.9040300@cs.rice.edu> <4C0D2BEA.6060103@cs.rice.edu> <4C0D3F40.2070101@cs.rice.edu> <20100607202844.GU83316@deviant.kiev.zoral.com.ua> <4C0D64B7.7060604@cs.rice.edu> <4C0DE424.9080601@cs.rice.edu> Date: Fri, 11 Jun 2010 16:44:56 +0530 Message-ID: From: "Jayachandran C." To: Alan Cox Content-Type: multipart/mixed; boundary=00c09f899574c85e660488bf3fcf Cc: Kostik Belousov , mips@freebsd.org Subject: Re: svn commit: r208589 - head/sys/mips/mips X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Jun 2010 11:14:58 -0000 --00c09f899574c85e660488bf3fcf Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Wed, Jun 9, 2010 at 11:41 PM, Jayachandran C. wrote: > On Wed, Jun 9, 2010 at 11:20 AM, Jayachandran C. > wrote: >> On Wed, Jun 9, 2010 at 3:01 AM, Jayachandran C. >> wrote: >>> On Tue, Jun 8, 2010 at 12:03 PM, Alan Cox wrote: >>>> >>>> VM_FREEPOOL_DIRECT is used by at least amd64 and ia64 for page table p= ages >>>> and small kernel memory allocations. =A0Unlike mips, these machines do= n't have >>>> MMU support for a direct map. =A0Their direct maps are just a range of >>>> mappings in the regular (kernel) page table. =A0So, unlike mips, acces= ses >>>> through their direct map may still miss in the TLB and require a page = table >>>> walk. =A0VM_FREEPOOL_* is a way to increase the physical locality (or >>>> clustering) of page allocations, so that, for example, page table page >>>> accesses by the pmap on amd64 are less likely to miss in the TLB. =A0H= owever, >>>> it doesn't place a hard restriction on the range of physical addresses= that >>>> will be used, which you need for mips. >>>> >>>> The impact of this clustering can be significant. =A0For example, on a= md64 we >>>> use 2MB page mappings to implement the direct map. =A0However, old Opt= erons >>>> only had 8 data TLB entries for 2MB page mappings. =A0For a uniprocess= or >>>> kernel running on such an Opteron, I measured an 18% reduction in syst= em >>>> time during a buildworld with the introduction of VM_FREEPOOL_DIRECT. = =A0(See >>>> the commit logs for vm/vm_phys.c and the comment that precedes the >>>> VM_NFREEORDER definition on amd64.) >>>> >>>> Until such time as superpage support is ported to mips from the amd64/= i386 >>>> pmaps, I don't think there is a point in having more than one VM_FREEP= OOL_* >>>> on mips. =A0And then, the point would be to reduce fragmentation of th= e >>>> physical memory that could be caused by small allocations, such as pag= e >>>> table pages. >>> >>> Thanks for the detailed explanation. >>> >>> Also, after looking at the code again, =A0I think vm_phys_alloc_contig(= ) >>> can optimized not to look into segments which lie outside the area of >>> interest. The patch is: >> [...] >>> This change, along with the vmparam.h changes for HIGHMEM, I think we >>> should be able to use =A0vm_phys_alloc_contig() for page table pages (o= r >>> have I again missed something fundamental?). >> >> That patch was obviously wrong - many segments can map to a freelist >> as the comment right above my change noted. >> >> But the idea of eliminating freelists for which all the segments are >> outside (low,high) may still be useful, will look at this some more. > > I have attached a patch (also at > http://people.freebsd.org/~jchandra/pmap-with-HIGHMEM-freelist.patch) > which reverts most of the changes I did to convert the page table page > allocation to use UMA zone, and replaces it with an implementation > using vm_phys_alloc_contig() and vm_contig_grow_cache(). This creates > a new HIGHMEM freelist for mips for memory outside the KSEG0 area, and > makes a few changes in vm_phys_alloc_contig() to skip freelists for > which all the segments fall outside the address range requested. > > With this the buildworld perf on MIPS is similar to what I got with > the older code with zones. > > If this approach is okay, I will do another round of > testing(buildworld passes, but I haven't really tested the case where > grow_cache is called). =A0If the changes are not okay, I will add > another page allocator which takes freelist as argument as you had > suggested earlier, instead of the vm_phys_alloc_contig() changes. Here is the alternative patch (http://people.freebsd.org/~jchandra/pmap-with-HIGHMEM-freelist-alternate.p= atch). In this all the pmap.c changes are almost exactly same as the patch above, except that the call to vm_phys_alloc_contig() to allocate page table pages has been replaced with a new function vm_phys_page_alloc(). The patch also has changes in sys/vm/vm_phys.c to: - add vm_phys_page_alloc(int flind, int pool, int order) to allocate a page from a freelist - add vm_phys_alloc_freelist_pages(int flind, int pool, int order) - which will be called by vm_phys_page_alloc() and vm_phys_alloc_pages(), to dequeue a page of correct pool and order. - move out page initialization code of vm_phys_alloc_contig() to vm_page_alloc_init(), and use it in both vm_phys_page_alloc and vm_phys_alloc_contig I have been running buildworld on this for a few hours now (with code to add random alloc failuers), and it seems to hold up. Let me know you comments. Thanks, JC. --00c09f899574c85e660488bf3fcf Content-Type: text/plain; charset=US-ASCII; name="pmap-with-HIGHMEM-freelist-alternate.patch" Content-Disposition: attachment; filename="pmap-with-HIGHMEM-freelist-alternate.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gaax0day1 SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvdm1wYXJhbS5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz L2luY2x1ZGUvdm1wYXJhbS5oCShyZXZpc2lvbiAyMDg4OTApCisrKyBzeXMvbWlwcy9pbmNsdWRl L3ZtcGFyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw5IEBACiAjZGVmaW5lCVZN X01BWFVTRVJfQUREUkVTUwkoKHZtX29mZnNldF90KTB4ODAwMDAwMDApCiAjZGVmaW5lCVZNX01B WF9NTUFQX0FERFIJVk1fTUFYVVNFUl9BRERSRVNTCiAKLSNkZWZpbmUJVk1fTUlOX0tFUk5FTF9B RERSRVNTCQkoKHZtX29mZnNldF90KTB4QzAwMDAwMDApCi0jZGVmaW5lCVZNX01BWF9LRVJORUxf QUREUkVTUwkJKCh2bV9vZmZzZXRfdCkweEZGRkZDMDAwKQorI2RlZmluZQlWTV9NSU5fS0VSTkVM X0FERFJFU1MJKCh2bV9vZmZzZXRfdCkweEMwMDAwMDAwKQorI2RlZmluZQlWTV9NQVhfS0VSTkVM X0FERFJFU1MJKCh2bV9vZmZzZXRfdCkweEZGRkZDMDAwKQorI2RlZmluZQlWTV9ISUdITUVNX0FE RFJFU1MJKCh2bV9wYWRkcl90KTB4MjAwMDAwMDApCiAjaWYgMAogI2RlZmluZQlLRVJOQkFTRQkJ KFZNX01JTl9LRVJORUxfQUREUkVTUykKICNlbHNlCkBAIC0xNjgsMTMgKzE2OSwxNSBAQAogI2Rl ZmluZQlWTV9GUkVFUE9PTF9ESVJFQ1QJMQogCiAvKgotICogd2Ugc3VwcG9ydCAxIGZyZWUgbGlz dDoKKyAqIHdlIHN1cHBvcnQgMiBmcmVlIGxpc3RzOgogICoKLSAqCS0gREVGQVVMVCBmb3IgYWxs IHN5c3RlbXMKKyAqCS0gREVGQVVMVCBmb3IgZGlyZWN0IG1hcHBlZCAoS1NFRzApIHBhZ2VzCisg KgktIEhJR0hNRU0gZm9yIG90aGVyIHBhZ2VzIAogICovCiAKLSNkZWZpbmUJVk1fTkZSRUVMSVNU CQkxCi0jZGVmaW5lCVZNX0ZSRUVMSVNUX0RFRkFVTFQJMAorI2RlZmluZQlWTV9ORlJFRUxJU1QJ CTIKKyNkZWZpbmUJVk1fRlJFRUxJU1RfREVGQVVMVAkxCisjZGVmaW5lCVZNX0ZSRUVMSVNUX0hJ R0hNRU0JMAogCiAvKgogICogVGhlIGxhcmdlc3QgYWxsb2NhdGlvbiBzaXplIGlzIDFNQi4KSW5k ZXg6IHN5cy9taXBzL21pcHMvcG1hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBzL21pcHMvcG1h cC5jCShyZXZpc2lvbiAyMDg4OTApCisrKyBzeXMvbWlwcy9taXBzL3BtYXAuYwkod29ya2luZyBj b3B5KQpAQCAtMTg0LDggKzE4NCw2IEBACiBzdGF0aWMgaW50IGluaXRfcHRlX3Byb3Qodm1fb2Zm c2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCk7CiBzdGF0aWMgdm9pZCBwbWFw X1RMQl9pbnZhbGlkYXRlX2tlcm5lbCh2bV9vZmZzZXRfdCk7CiBzdGF0aWMgdm9pZCBwbWFwX1RM Ql91cGRhdGVfa2VybmVsKHZtX29mZnNldF90LCBwdF9lbnRyeV90KTsKLXN0YXRpYyB2bV9wYWdl X3QgcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwX3QsIHVuc2lnbmVkIGludCwgaW50LCB2bV9vZmZz ZXRfdCAqKTsKLXN0YXRpYyB2b2lkIHBtYXBfcmVsZWFzZV9wdGVfcGFnZSh2bV9wYWdlX3QpOwog CiAjaWZkZWYgU01QCiBzdGF0aWMgdm9pZCBwbWFwX2ludmFsaWRhdGVfcGFnZV9hY3Rpb24odm9p ZCAqYXJnKTsKQEAgLTE5MywxMCArMTkxLDYgQEAKIHN0YXRpYyB2b2lkIHBtYXBfdXBkYXRlX3Bh Z2VfYWN0aW9uKHZvaWQgKmFyZyk7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcG1hcF9wdHBnem9u ZV9kdG9yKHZvaWQgKm1lbSwgaW50IHNpemUsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgdm9pZCAqcG1h cF9wdHBnem9uZV9hbGxvY2YodW1hX3pvbmVfdCwgaW50LCB1X2ludDhfdCAqLCBpbnQpOwotc3Rh dGljIHVtYV96b25lX3QgcHRwZ3pvbmU7Ci0KIHN0cnVjdCBsb2NhbF9zeXNtYXBzIHsKIAlzdHJ1 Y3QgbXR4IGxvY2s7CiAJdm1fb2Zmc2V0X3QgYmFzZTsKQEAgLTMyOSw3ICszMjMsNyBAQAogfQog CiAvKgotICoJQm9vdHN0cmFwIHRoZSBzeXN0ZW0gZW5vdWdoIHRvIHJ1biB3aXRoIHZpcnR1YWwg bWVtb3J5LiAgVGhpcworICogQm9vdHN0cmFwIHRoZSBzeXN0ZW0gZW5vdWdoIHRvIHJ1biB3aXRo IHZpcnR1YWwgbWVtb3J5LiAgVGhpcwogICogYXNzdW1lcyB0aGF0IHRoZSBwaHlzX2F2YWlsIGFy cmF5IGhhcyBiZWVuIGluaXRpYWxpemVkLgogICovCiB2b2lkCkBAIC01MzUsMTAgKzUyOSw2IEBA CiAJcHZfZW50cnlfbWF4ID0gUE1BUF9TSFBHUEVSUFJPQyAqIG1heHByb2MgKyBjbnQudl9wYWdl X2NvdW50OwogCXB2X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2X2VudHJ5X21heCAvIDEwKTsK IAl1bWFfem9uZV9zZXRfb2JqKHB2em9uZSwgJnB2em9uZV9vYmosIHB2X2VudHJ5X21heCk7Ci0K LQlwdHBnem9uZSA9IHVtYV96Y3JlYXRlKCJQVCBFTlRSWSIsIFBBR0VfU0laRSwgTlVMTCwgcG1h cF9wdHBnem9uZV9kdG9yLAotCSAgICBOVUxMLCBOVUxMLCBQQUdFX1NJWkUgLSAxLCBVTUFfWk9O RV9OT0ZSRUUgfCBVTUFfWk9ORV9aSU5JVCk7Ci0JdW1hX3pvbmVfc2V0X2FsbG9jZihwdHBnem9u ZSwgcG1hcF9wdHBnem9uZV9hbGxvY2YpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04ODUsMTIgKzg3NSw4IEBACiAJLyoKIAkg KiBJZiB0aGUgcGFnZSBpcyBmaW5hbGx5IHVud2lyZWQsIHNpbXBseSBmcmVlIGl0LgogCSAqLwor CXZtX3BhZ2VfZnJlZV96ZXJvKG0pOwogCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNudC52X3dpcmVf Y291bnQsIDEpOwotCVBNQVBfVU5MT0NLKHBtYXApOwotCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygp OwotCXBtYXBfcmVsZWFzZV9wdGVfcGFnZShtKTsKLQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7Ci0J UE1BUF9MT0NLKHBtYXApOwogCXJldHVybiAoMSk7CiB9CiAKQEAgLTk0OSw5NiArOTM1LDM1IEBA CiAJYnplcm8oJnBtYXAtPnBtX3N0YXRzLCBzaXplb2YgcG1hcC0+cG1fc3RhdHMpOwogfQogCisK IHN0YXRpYyB2b2lkCi1wbWFwX3B0cGd6b25lX2R0b3Iodm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9p ZCAqYXJnKQorcG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hlKGludCB3YWl0KQogewotI2lmZGVmIElO VkFSSUFOVFMKLQlzdGF0aWMgY2hhciB6ZXJvcGFnZVtQQUdFX1NJWkVdOwotCi0JS0FTU0VSVChz aXplID09IFBBR0VfU0laRSwKLQkJKCJwbWFwX3B0cGd6b25lX2R0b3I6IGludmFsaWQgc2l6ZSAl ZCIsIHNpemUpKTsKLQlLQVNTRVJUKGJjbXAobWVtLCB6ZXJvcGFnZSwgUEFHRV9TSVpFKSA9PSAw LAotCQkoInBtYXBfcHRwZ3pvbmVfZHRvcjogZnJlZWluZyBhIG5vbi16ZXJvZWQgcGFnZSIpKTsK LSNlbmRpZgorCXByaW50ZigiWyVzXSB3YWl0ICV4XG4iLCBfX2Z1bmNfXywgd2FpdCk7CisJdm1f Y29udGlnX2dyb3dfY2FjaGUoMywgMCwgTUlQU19LU0VHMF9MQVJHRVNUX1BIWVMpOwogfQogCi1z dGF0aWMgdm9pZCAqCi1wbWFwX3B0cGd6b25lX2FsbG9jZih1bWFfem9uZV90IHpvbmUsIGludCBi eXRlcywgdV9pbnQ4X3QgKmZsYWdzLCBpbnQgd2FpdCkKLXsKLQl2bV9wYWdlX3QgbTsKLQl2bV9w YWRkcl90IHBhZGRyOwotCWludCB0cmllczsKLQkKLQlLQVNTRVJUKGJ5dGVzID09IFBBR0VfU0la RSwKLQkJKCJwbWFwX3B0cGd6b25lX2FsbG9jZjogaW52YWxpZCBhbGxvY2F0aW9uIHNpemUgJWQi LCBieXRlcykpOwogCi0JKmZsYWdzID0gVU1BX1NMQUJfUFJJVjsKLQl0cmllcyA9IDA7Ci1yZXRy eToKLQltID0gdm1fcGh5c19hbGxvY19jb250aWcoMSwgMCwgTUlQU19LU0VHMF9MQVJHRVNUX1BI WVMsCi0JICAgIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKLQlpZiAobSA9PSBOVUxMKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKHRyaWVzIDwgKCh3YWl0ICYgTV9OT1dBSVQpICE9IDAgPyAxIDogMykp IHsKLQkJCXZtX2NvbnRpZ19ncm93X2NhY2hlKHRyaWVzLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1Rf UEhZUyk7Ci0JCQl0cmllcysrOwotCQkJZ290byByZXRyeTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4g KE5VTEwpOwotCX0KLQotCXBhZGRyID0gVk1fUEFHRV9UT19QSFlTKG0pOwotCXJldHVybiAoKHZv aWQgKilNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIpKTsKLX0JCi0KIHN0YXRpYyB2bV9wYWdlX3QK LXBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcF90IHBtYXAsIHVuc2lnbmVkIGludCBpbmRleCwgaW50 IHdhaXQsIHZtX29mZnNldF90ICp2YXApCitwbWFwX2FsbG9jX3B0ZV9wYWdlKHVuc2lnbmVkIGlu dCBpbmRleCwgaW50IHdhaXQpCiB7Ci0Jdm1fcGFkZHJfdCBwYWRkcjsKLQl2b2lkICp2YTsKIAl2 bV9wYWdlX3QgbTsKLQlpbnQgbG9ja2VkOwogCi0JbG9ja2VkID0gbXR4X293bmVkKCZwbWFwLT5w bV9tdHgpOwotCWlmIChsb2NrZWQpIHsKLQkJbXR4X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgs IE1BX09XTkVEKTsKLQkJUE1BUF9VTkxPQ0socG1hcCk7Ci0JCXZtX3BhZ2VfdW5sb2NrX3F1ZXVl cygpOwotCX0KLQl2YSA9IHVtYV96YWxsb2MocHRwZ3pvbmUsIHdhaXQpOwotCWlmIChsb2NrZWQp IHsKLQkJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOwotCQlQTUFQX0xPQ0socG1hcCk7Ci0JfQotCWlm ICh2YSA9PSBOVUxMKQorCW0gPSB2bV9waHlzX3BhZ2VfYWxsb2MoVk1fRlJFRUxJU1RfREVGQVVM VCwgVk1fRlJFRVBPT0xfREVGQVVMVCwwKTsKKwlpZiAobSA9PSBOVUxMKQogCQlyZXR1cm4gKE5V TEwpOwogCi0JcGFkZHIgPSBNSVBTX0tTRUcwX1RPX1BIWVModmEpOwotCW0gPSBQSFlTX1RPX1ZN X1BBR0UocGFkZHIpOwotCQotCWlmICghbG9ja2VkKQotCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7 CisJaWYgKChtLT5mbGFncyAmIFBHX1pFUk8pID09IDApCisJCXBtYXBfemVyb19wYWdlKG0pOwor CiAJbS0+cGluZGV4ID0gaW5kZXg7CiAJbS0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOwotCW0t PndpcmVfY291bnQgPSAxOwotCWlmICghbG9ja2VkKQotCQl2bV9wYWdlX3VubG9ja19xdWV1ZXMo KTsKLQogCWF0b21pY19hZGRfaW50KCZjbnQudl93aXJlX2NvdW50LCAxKTsKLQkqdmFwID0gKHZt X29mZnNldF90KXZhOworCW0tPndpcmVfY291bnQgPSAxOwogCXJldHVybiAobSk7CiB9CiAKLXN0 YXRpYyB2b2lkCi1wbWFwX3JlbGVhc2VfcHRlX3BhZ2Uodm1fcGFnZV90IG0pCi17Ci0Jdm9pZCAq dmE7Ci0Jdm1fcGFkZHJfdCBwYWRkcjsKIAotCXBhZGRyID0gVk1fUEFHRV9UT19QSFlTKG0pOwot CXZhID0gKHZvaWQgKilNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIpOwotCXVtYV96ZnJlZShwdHBn em9uZSwgdmEpOwotfQotCiAvKgogICogSW5pdGlhbGl6ZSBhIHByZWFsbG9jYXRlZCBhbmQgemVy b2VkIHBtYXAgc3RydWN0dXJlLAogICogc3VjaCBhcyBvbmUgaW4gYSB2bXNwYWNlIHN0cnVjdHVy ZS4KQEAgLTEwNTUsMTAgKzk4MCwxMCBAQAogCS8qCiAJICogYWxsb2NhdGUgdGhlIHBhZ2UgZGly ZWN0b3J5IHBhZ2UKIAkgKi8KLQlwdGRwZyA9IHBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcCwgTlVT RVJQR1RCTFMsIE1fV0FJVE9LLCAmcHRkdmEpOwotCWlmIChwdGRwZyA9PSBOVUxMKQotCQlyZXR1 cm4gKDApOworCXdoaWxlICgocHRkcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKE5VU0VSUEdUQkxT LCBNX1dBSVRPSykpID09IE5VTEwpCisJICAgICAgIHBtYXBfZ3Jvd19wdGVfcGFnZV9jYWNoZShN X1dBSVRPSyk7CiAKKwlwdGR2YSA9IE1JUFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMo cHRkcGcpKTsKIAlwbWFwLT5wbV9zZWd0YWIgPSAocGRfZW50cnlfdCAqKXB0ZHZhOwogCXBtYXAt PnBtX2FjdGl2ZSA9IDA7CiAJcG1hcC0+cG1fcHRwaGludCA9IE5VTEw7CkBAIC0xMDg5LDE1ICsx MDE0LDI4IEBACiAJLyoKIAkgKiBGaW5kIG9yIGZhYnJpY2F0ZSBhIG5ldyBwYWdldGFibGUgcGFn ZQogCSAqLwotCW0gPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKHBtYXAsIHB0ZXBpbmRleCwgZmxhZ3Ms ICZwdGV2YSk7Ci0JaWYgKG0gPT0gTlVMTCkKKwlpZiAoKG0gPSBwbWFwX2FsbG9jX3B0ZV9wYWdl KHB0ZXBpbmRleCwgZmxhZ3MpKSA9PSBOVUxMKSB7CisJCWlmIChmbGFncyAmIE1fV0FJVE9LKSB7 CisJCQlQTUFQX1VOTE9DSyhwbWFwKTsKKwkJCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOworCQkJ cG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hlKGZsYWdzKTsKKwkJCXZtX3BhZ2VfbG9ja19xdWV1ZXMo KTsKKwkJCVBNQVBfTE9DSyhwbWFwKTsKKwkJfQorCisJCS8qCisJCSAqIEluZGljYXRlIHRoZSBu ZWVkIHRvIHJldHJ5LglXaGlsZSB3YWl0aW5nLCB0aGUgcGFnZQorCQkgKiB0YWJsZSBwYWdlIG1h eSBoYXZlIGJlZW4gYWxsb2NhdGVkLgorCQkgKi8KIAkJcmV0dXJuIChOVUxMKTsKKwl9CiAKIAkv KgogCSAqIE1hcCB0aGUgcGFnZXRhYmxlIHBhZ2UgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNzIHNw YWNlLCBpZiBpdAogCSAqIGlzbid0IGFscmVhZHkgdGhlcmUuCiAJICovCiAKKwlwdGV2YSA9IE1J UFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobSkpOwogCXBtYXAtPnBtX3N0YXRzLnJl c2lkZW50X2NvdW50Kys7CiAJcG1hcC0+cG1fc2VndGFiW3B0ZXBpbmRleF0gPSAocGRfZW50cnlf dClwdGV2YTsKIApAQCAtMTE5Myw3ICsxMTMxLDcgQEAKIAogCXB0ZHBnLT53aXJlX2NvdW50LS07 CiAJYXRvbWljX3N1YnRyYWN0X2ludCgmY250LnZfd2lyZV9jb3VudCwgMSk7Ci0JcG1hcF9yZWxl YXNlX3B0ZV9wYWdlKHB0ZHBnKTsKKwl2bV9wYWdlX2ZyZWVfemVybyhwdGRwZyk7CiAJUE1BUF9M T0NLX0RFU1RST1kocG1hcCk7CiB9CiAKQEAgLTEyMDMsNyArMTE0MSw2IEBACiB2b2lkCiBwbWFw X2dyb3drZXJuZWwodm1fb2Zmc2V0X3QgYWRkcikKIHsKLQl2bV9vZmZzZXRfdCBwYWdldmE7CiAJ dm1fcGFnZV90IG5rcGc7CiAJcHRfZW50cnlfdCAqcHRlOwogCWludCBpOwpAQCAtMTIzOCwxMyAr MTE3NSwxMyBAQAogCQkvKgogCQkgKiBUaGlzIGluZGV4IGlzIGJvZ3VzLCBidXQgb3V0IG9mIHRo ZSB3YXkKIAkJICovCi0JCW5rcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKGtlcm5lbF9wbWFwLCBu a3B0LCBNX05PV0FJVCwgJnBhZ2V2YSk7CisJCW5rcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKG5r cHQsIE1fTk9XQUlUKTsKIAogCQlpZiAoIW5rcGcpCiAJCQlwYW5pYygicG1hcF9ncm93a2VybmVs OiBubyBtZW1vcnkgdG8gZ3JvdyBrZXJuZWwiKTsKIAogCQlua3B0Kys7Ci0JCXB0ZSA9IChwdF9l bnRyeV90ICopcGFnZXZhOworCQlwdGUgPSAocHRfZW50cnlfdCAqKU1JUFNfUEhZU19UT19LU0VH MChWTV9QQUdFX1RPX1BIWVMobmtwZykpOwogCQlzZWd0YWJfcGRlKGtlcm5lbF9zZWdtYXAsIGtl cm5lbF92bV9lbmQpID0gKHBkX2VudHJ5X3QpcHRlOwogCiAJCS8qCkluZGV4OiBzeXMvdm0vdm1f cGh5cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHN5cy92bS92bV9waHlzLmMJKHJldmlzaW9uIDIwODg5MCkK KysrIHN5cy92bS92bV9waHlzLmMJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDEwIEBACiBz dGF0aWMgaW50IHZtX3BoeXNfcGFkZHJfdG9fc2VnaW5kKHZtX3BhZGRyX3QgcGEpOwogc3RhdGlj IHZvaWQgdm1fcGh5c19zcGxpdF9wYWdlcyh2bV9wYWdlX3QgbSwgaW50IG9pbmQsIHN0cnVjdCB2 bV9mcmVlbGlzdCAqZmwsCiAgICAgaW50IG9yZGVyKTsKK3N0YXRpYyB2bV9wYWdlX3Qgdm1fcGh5 c19hbGxvY19mcmVlbGlzdF9wYWdlcyhpbnQgZmxpbmQsIGludCBwb29sLCBpbnQgb3JkZXIpOwor c3RhdGljIHZvaWQgdm1fcGFnZV9hbGxvY19pbml0KHZtX3BhZ2VfdCBtLCBzdHJ1Y3Qgdm5vZGUg Kipkcm9wKTsKIAorCiAvKgogICogT3V0cHV0cyB0aGUgc3RhdGUgb2YgdGhlIHBoeXNpY2FsIG1l bW9yeSBhbGxvY2F0b3IsIHNwZWNpZmljYWxseSwKICAqIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwg bWVtb3J5IGluIGVhY2ggZnJlZSBsaXN0LgpAQCAtMjkzLDYgKzI5NiwyOSBAQAogfQogCiAvKgor ICogR3JhYiBhIHBhZ2UgZnJvbSB0aGUgc3BlY2lmaWVkIGZyZWVsaXN0IHdpdGggdGhlIGdpdmVu IHBvb2wgYW5kCisgKiBvcmRlci4KKyAqLwordm1fcGFnZV90Cit2bV9waHlzX3BhZ2VfYWxsb2Mo aW50IGZsaW5kLCBpbnQgcG9vbCwgaW50IG9yZGVyKQoreworCXN0cnVjdCB2bm9kZSAqZHJvcDsK Kwl2bV9wYWdlX3QgbTsKKworCW10eF9sb2NrKCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4KTsKKwlt ID0gdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhmbGluZCwgcG9vbCwgb3JkZXIpOworCWlm IChtID09IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJ CXJldHVybiAoTlVMTCk7CisJfQorCXZtX3BhZ2VfYWxsb2NfaW5pdChtLCAmZHJvcCk7CisJbXR4 X3VubG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJaWYgKGRyb3ApCisJCXZkcm9wKGRy b3ApOworCXJldHVybiAobSk7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSBhIGNvbnRpZ3VvdXMsIHBv d2VyIG9mIHR3by1zaXplZCBzZXQgb2YgcGh5c2ljYWwgcGFnZXMKICAqIGZyb20gdGhlIGZyZWUg bGlzdHMuCiAgKgpAQCAtMzAxLDQ5ICszMjcsNjggQEAKIHZtX3BhZ2VfdAogdm1fcGh5c19hbGxv Y19wYWdlcyhpbnQgcG9vbCwgaW50IG9yZGVyKQogeworCXZtX3BhZ2VfdCBtOworCWludCBmbGlu ZDsKKworCWZvciAoZmxpbmQgPSAwOyBmbGluZCA8IHZtX25mcmVlbGlzdHM7IGZsaW5kKyspIHsK KwkJbSA9IHZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXMoZmxpbmQsIHBvb2wsIG9yZGVyKTsK KwkJaWYgKG0gIT0gTlVMTCkKKwkJCXJldHVybiBtOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQor CisvKgorICogRmluZCBhbmQgZGVxdWV1ZSBhIGZyZWUgcGFnZSBvbiB0aGUgZ2l2ZW4gZnJlZSBs aXN0LCB3aXRoIHRoZSAKKyAqIHNwZWNpZmllZCBwb29sIGFuZCBvcmRlcgorICovCitzdGF0aWMg dm1fcGFnZV90Cit2bV9waHlzX2FsbG9jX2ZyZWVsaXN0X3BhZ2VzKGludCBmbGluZCwgaW50IHBv b2wsIGludCBvcmRlcikKK3sJCiAJc3RydWN0IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1f ZnJlZWxpc3QgKmFsdDsKLQlpbnQgZmxpbmQsIG9pbmQsIHBpbmQ7CisJaW50IG9pbmQsIHBpbmQ7 CiAJdm1fcGFnZV90IG07CiAKKwlLQVNTRVJUKGZsaW5kIDwgVk1fTkZSRUVMSVNULAorCSAgICAo InZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IGZyZWVsaXN0ICVkIGlzIG91dCBvZiByYW5n ZSIsIGZsaW5kKSk7CiAJS0FTU0VSVChwb29sIDwgVk1fTkZSRUVQT09MLAotCSAgICAoInZtX3Bo eXNfYWxsb2NfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcG9vbCkpOworCSAgICAo InZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwg cG9vbCkpOwogCUtBU1NFUlQob3JkZXIgPCBWTV9ORlJFRU9SREVSLAotCSAgICAoInZtX3BoeXNf YWxsb2NfcGFnZXM6IG9yZGVyICVkIGlzIG91dCBvZiByYW5nZSIsIG9yZGVyKSk7CisJICAgICgi dm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlczogb3JkZXIgJWQgaXMgb3V0IG9mIHJhbmdlIiwg b3JkZXIpKTsKIAltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4LCBNQV9PV05FRCk7 Ci0JZm9yIChmbGluZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykgewotCQlm bCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3Bvb2xdOwotCQlmb3IgKG9pbmQgPSBvcmRl cjsgb2luZCA8IFZNX05GUkVFT1JERVI7IG9pbmQrKykgewotCQkJbSA9IFRBSUxRX0ZJUlNUKCZm bFtvaW5kXS5wbCk7CisKKwlmbCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3Bvb2xdOwor CWZvciAob2luZCA9IG9yZGVyOyBvaW5kIDwgVk1fTkZSRUVPUkRFUjsgb2luZCsrKSB7CisJCW0g PSBUQUlMUV9GSVJTVCgmZmxbb2luZF0ucGwpOworCQlpZiAobSAhPSBOVUxMKSB7CisJCQlUQUlM UV9SRU1PVkUoJmZsW29pbmRdLnBsLCBtLCBwYWdlcSk7CisJCQlmbFtvaW5kXS5sY250LS07CisJ CQltLT5vcmRlciA9IFZNX05GUkVFT1JERVI7CisJCQl2bV9waHlzX3NwbGl0X3BhZ2VzKG0sIG9p bmQsIGZsLCBvcmRlcik7CisJCQlyZXR1cm4gKG0pOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUg Z2l2ZW4gcG9vbCB3YXMgZW1wdHkuICBGaW5kIHRoZSBsYXJnZXN0CisJICogY29udGlndW91cywg cG93ZXItb2YtdHdvLXNpemVkIHNldCBvZiBwYWdlcyBpbiBhbnkKKwkgKiBwb29sLiAgVHJhbnNm ZXIgdGhlc2UgcGFnZXMgdG8gdGhlIGdpdmVuIHBvb2wsIGFuZAorCSAqIHVzZSB0aGVtIHRvIHNh dGlzZnkgdGhlIGFsbG9jYXRpb24uCisJICovCisJZm9yIChvaW5kID0gVk1fTkZSRUVPUkRFUiAt IDE7IG9pbmQgPj0gb3JkZXI7IG9pbmQtLSkgeworCQlmb3IgKHBpbmQgPSAwOyBwaW5kIDwgVk1f TkZSRUVQT09MOyBwaW5kKyspIHsKKwkJCWFsdCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRd W3BpbmRdOworCQkJbSA9IFRBSUxRX0ZJUlNUKCZhbHRbb2luZF0ucGwpOwogCQkJaWYgKG0gIT0g TlVMTCkgewotCQkJCVRBSUxRX1JFTU9WRSgmZmxbb2luZF0ucGwsIG0sIHBhZ2VxKTsKLQkJCQlm bFtvaW5kXS5sY250LS07CisJCQkJVEFJTFFfUkVNT1ZFKCZhbHRbb2luZF0ucGwsIG0sIHBhZ2Vx KTsKKwkJCQlhbHRbb2luZF0ubGNudC0tOwogCQkJCW0tPm9yZGVyID0gVk1fTkZSRUVPUkRFUjsK KwkJCQl2bV9waHlzX3NldF9wb29sKHBvb2wsIG0sIG9pbmQpOwogCQkJCXZtX3BoeXNfc3BsaXRf cGFnZXMobSwgb2luZCwgZmwsIG9yZGVyKTsKIAkJCQlyZXR1cm4gKG0pOwogCQkJfQogCQl9Ci0K LQkJLyoKLQkJICogVGhlIGdpdmVuIHBvb2wgd2FzIGVtcHR5LiAgRmluZCB0aGUgbGFyZ2VzdAot CQkgKiBjb250aWd1b3VzLCBwb3dlci1vZi10d28tc2l6ZWQgc2V0IG9mIHBhZ2VzIGluIGFueQot CQkgKiBwb29sLiAgVHJhbnNmZXIgdGhlc2UgcGFnZXMgdG8gdGhlIGdpdmVuIHBvb2wsIGFuZAot CQkgKiB1c2UgdGhlbSB0byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uLgotCQkgKi8KLQkJZm9yIChv aW5kID0gVk1fTkZSRUVPUkRFUiAtIDE7IG9pbmQgPj0gb3JkZXI7IG9pbmQtLSkgewotCQkJZm9y IChwaW5kID0gMDsgcGluZCA8IFZNX05GUkVFUE9PTDsgcGluZCsrKSB7Ci0JCQkJYWx0ID0gdm1f cGh5c19mcmVlX3F1ZXVlc1tmbGluZF1bcGluZF07Ci0JCQkJbSA9IFRBSUxRX0ZJUlNUKCZhbHRb b2luZF0ucGwpOwotCQkJCWlmIChtICE9IE5VTEwpIHsKLQkJCQkJVEFJTFFfUkVNT1ZFKCZhbHRb b2luZF0ucGwsIG0sIHBhZ2VxKTsKLQkJCQkJYWx0W29pbmRdLmxjbnQtLTsKLQkJCQkJbS0+b3Jk ZXIgPSBWTV9ORlJFRU9SREVSOwotCQkJCQl2bV9waHlzX3NldF9wb29sKHBvb2wsIG0sIG9pbmQp OwotCQkJCQl2bV9waHlzX3NwbGl0X3BhZ2VzKG0sIG9pbmQsIGZsLCBvcmRlcik7Ci0JCQkJCXJl dHVybiAobSk7Ci0JCQkJfQotCQkJfQotCQl9CiAJfQogCXJldHVybiAoTlVMTCk7CiB9CkBAIC01 NzcsNiArNjIyLDU2IEBACiB9CiAKIC8qCisgKiBJbml0aWFsaXplZCBhIHBhZ2UgdGhhdCBoYXMg YmVlbiBmcmVzaGx5IGRlcXVldWVkIGZyb20gYSBmcmVlbGlzdAorICogdGhlIGNhbGxlciBoYXMg dG8gZHJvcCB0aGUgdm5vZGUgcmV0dW5lZCBpbiBkcm9wLCBpZiBpdCBpcyBub3QgTlVMTAorICoK KyAqIFRvIGJlIGNhbGxlZCB3aXRoIHZtX3BhZ2VfcXVldWVfZnJlZV9tdHggaGVsZC4KKyAqLwor c3RhdGljIHZvaWQKK3ZtX3BhZ2VfYWxsb2NfaW5pdCh2bV9wYWdlX3QgbSwgc3RydWN0IHZub2Rl ICoqZHJvcCkKK3sKKwl2bV9vYmplY3RfdCBtX29iamVjdDsKKworCUtBU1NFUlQobS0+cXVldWUg PT0gUFFfTk9ORSwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFnZSAlcCBoYXMgdW5l eHBlY3RlZCBxdWV1ZSAlZCIsCisJICAgIG0sIG0tPnF1ZXVlKSk7CisJS0FTU0VSVChtLT53aXJl X2NvdW50ID09IDAsCisJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgd2ly ZWQiLCBtKSk7CisJS0FTU0VSVChtLT5ob2xkX2NvdW50ID09IDAsCisJICAgICgidm1fcGh5c19h bGxvY19jb250aWc6IHBhZ2UgJXAgaXMgaGVsZCIsIG0pKTsKKwlLQVNTRVJUKG0tPmJ1c3kgPT0g MCwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFnZSAlcCBpcyBidXN5IiwgbSkpOwor CUtBU1NFUlQobS0+ZGlydHkgPT0gMCwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFn ZSAlcCBpcyBkaXJ0eSIsIG0pKTsKKwlLQVNTRVJUKHBtYXBfcGFnZV9nZXRfbWVtYXR0cihtKSA9 PSBWTV9NRU1BVFRSX0RFRkFVTFQsCisJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2Ug JXAgaGFzIHVuZXhwZWN0ZWQgbWVtYXR0ciAlZCIsCisJICAgIG0sIHBtYXBfcGFnZV9nZXRfbWVt YXR0cihtKSkpOworCW10eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfZnJlZV9tdHgsIE1BX09XTkVE KTsKKworCSpkcm9wID0gTlVMTDsKKwlpZiAoKG0tPmZsYWdzICYgUEdfQ0FDSEVEKSAhPSAwKSB7 CisJCW0tPnZhbGlkID0gMDsKKwkJbV9vYmplY3QgPSBtLT5vYmplY3Q7CisJCXZtX3BhZ2VfY2Fj aGVfcmVtb3ZlKG0pOworCQlpZiAobV9vYmplY3QtPnR5cGUgPT0gT0JKVF9WTk9ERSAmJgorCQkg ICAgbV9vYmplY3QtPmNhY2hlID09IE5VTEwpCisJCQkqZHJvcCA9IG1fb2JqZWN0LT5oYW5kbGU7 CisJfSBlbHNlIHsKKwkJS0FTU0VSVChWTV9QQUdFX0lTX0ZSRUUobSksCisJCSAgICAoInZtX3Bo eXNfYWxsb2NfY29udGlnOiBwYWdlICVwIGlzIG5vdCBmcmVlIiwgbSkpOworCQlLQVNTRVJUKG0t PnZhbGlkID09IDAsCisJCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBmcmVlIHBhZ2UgJXAg aXMgdmFsaWQiLCBtKSk7CisJCWNudC52X2ZyZWVfY291bnQtLTsKKwl9CisJaWYgKG0tPmZsYWdz ICYgUEdfWkVSTykKKwkJdm1fcGFnZV96ZXJvX2NvdW50LS07CisJLyogRG9uJ3QgY2xlYXIgdGhl IFBHX1pFUk8gZmxhZzsgd2UnbGwgbmVlZCBpdCBsYXRlci4gKi8KKwltLT5mbGFncyA9IFBHX1VO TUFOQUdFRCB8IChtLT5mbGFncyAmIFBHX1pFUk8pOworCW0tPm9mbGFncyA9IDA7CisJLyogVW5t YW5hZ2VkIHBhZ2VzIGRvbid0IHVzZSAiYWN0X2NvdW50Ii4gKi8KK30KKworLyoKICAqIEFsbG9j YXRlIGEgY29udGlndW91cyBzZXQgb2YgcGh5c2ljYWwgcGFnZXMgb2YgdGhlIGdpdmVuIHNpemUK ICAqICJucGFnZXMiIGZyb20gdGhlIGZyZWUgbGlzdHMuICBBbGwgb2YgdGhlIHBoeXNpY2FsIHBh Z2VzIG11c3QgYmUgYXQKICAqIG9yIGFib3ZlIHRoZSBnaXZlbiBwaHlzaWNhbCBhZGRyZXNzICJs b3ciIGFuZCBiZWxvdyB0aGUgZ2l2ZW4KQEAgLTU5MiwxMCArNjg3LDExIEBACiB7CiAJc3RydWN0 IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1fcGh5c19zZWcgKnNlZzsKLQl2bV9vYmplY3Rf dCBtX29iamVjdDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwOwogCXZtX3BhZGRyX3QgcGEsIHBhX2xhc3Qs IHNpemU7CiAJdm1fcGFnZV90IGRlZmVycmVkX3Zkcm9wX2xpc3QsIG0sIG1fcmV0OwogCWludCBm bGluZCwgaSwgb2luZCwgb3JkZXIsIHBpbmQ7CisJCiAKIAlzaXplID0gbnBhZ2VzIDw8IFBBR0Vf U0hJRlQ7CiAJS0FTU0VSVChzaXplICE9IDAsCkBAIC02ODcsNTAgKzc4MywyMCBAQAogCXZtX3Bo eXNfc3BsaXRfcGFnZXMobV9yZXQsIG9pbmQsIGZsLCBvcmRlcik7CiAJZm9yIChpID0gMDsgaSA8 IG5wYWdlczsgaSsrKSB7CiAJCW0gPSAmbV9yZXRbaV07Ci0JCUtBU1NFUlQobS0+cXVldWUgPT0g UFFfTk9ORSwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaGFzIHVuZXhw ZWN0ZWQgcXVldWUgJWQiLAotCQkgICAgbSwgbS0+cXVldWUpKTsKLQkJS0FTU0VSVChtLT53aXJl X2NvdW50ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBwYWdlICVwIGlzIHdp cmVkIiwgbSkpOwotCQlLQVNTRVJUKG0tPmhvbGRfY291bnQgPT0gMCwKLQkJICAgICgidm1fcGh5 c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgaGVsZCIsIG0pKTsKLQkJS0FTU0VSVChtLT5idXN5 ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBwYWdlICVwIGlzIGJ1c3kiLCBt KSk7Ci0JCUtBU1NFUlQobS0+ZGlydHkgPT0gMCwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250 aWc6IHBhZ2UgJXAgaXMgZGlydHkiLCBtKSk7Ci0JCUtBU1NFUlQocG1hcF9wYWdlX2dldF9tZW1h dHRyKG0pID09IFZNX01FTUFUVFJfREVGQVVMVCwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250 aWc6IHBhZ2UgJXAgaGFzIHVuZXhwZWN0ZWQgbWVtYXR0ciAlZCIsCi0JCSAgICBtLCBwbWFwX3Bh Z2VfZ2V0X21lbWF0dHIobSkpKTsKLQkJaWYgKChtLT5mbGFncyAmIFBHX0NBQ0hFRCkgIT0gMCkg ewotCQkJbS0+dmFsaWQgPSAwOwotCQkJbV9vYmplY3QgPSBtLT5vYmplY3Q7Ci0JCQl2bV9wYWdl X2NhY2hlX3JlbW92ZShtKTsKLQkJCWlmIChtX29iamVjdC0+dHlwZSA9PSBPQkpUX1ZOT0RFICYm Ci0JCQkgICAgbV9vYmplY3QtPmNhY2hlID09IE5VTEwpIHsKLQkJCQkvKgotCQkJCSAqIEVucXVl dWUgdGhlIHZub2RlIGZvciBkZWZlcnJlZCB2ZHJvcCgpLgotCQkJCSAqCi0JCQkJICogVW5tYW5h Z2VkIHBhZ2VzIGRvbid0IHVzZSAicGFnZXEiLCBzbyBpdAotCQkJCSAqIGNhbiBiZSBzYWZlbHkg YWJ1c2VkIHRvIGNvbnN0cnVjdCBhIHNob3J0LQotCQkJCSAqIGxpdmVkIHF1ZXVlIG9mIHZub2Rl cy4KLQkJCQkgKi8KLQkJCQltLT5wYWdlcS50cWVfcHJldiA9IG1fb2JqZWN0LT5oYW5kbGU7Ci0J CQkJbS0+cGFnZXEudHFlX25leHQgPSBkZWZlcnJlZF92ZHJvcF9saXN0OwotCQkJCWRlZmVycmVk X3Zkcm9wX2xpc3QgPSBtOwotCQkJfQotCQl9IGVsc2UgewotCQkJS0FTU0VSVChWTV9QQUdFX0lT X0ZSRUUobSksCi0JCQkgICAgKCJ2bV9waHlzX2FsbG9jX2NvbnRpZzogcGFnZSAlcCBpcyBub3Qg ZnJlZSIsIG0pKTsKLQkJCUtBU1NFUlQobS0+dmFsaWQgPT0gMCwKLQkJCSAgICAoInZtX3BoeXNf YWxsb2NfY29udGlnOiBmcmVlIHBhZ2UgJXAgaXMgdmFsaWQiLCBtKSk7Ci0JCQljbnQudl9mcmVl X2NvdW50LS07CisJCXZtX3BhZ2VfYWxsb2NfaW5pdChtLCAmdnApOworCQlpZiAodnAgIT0gTlVM TCkgeworCQkJLyoKKwkJCSAqIEVucXVldWUgdGhlIHZub2RlIGZvciBkZWZlcnJlZCB2ZHJvcCgp LgorCQkJICoKKwkJCSAqIFVubWFuYWdlZCBwYWdlcyBkb24ndCB1c2UgInBhZ2VxIiwgc28gaXQK KwkJCSAqIGNhbiBiZSBzYWZlbHkgYWJ1c2VkIHRvIGNvbnN0cnVjdCBhIHNob3J0LQorCQkJICog bGl2ZWQgcXVldWUgb2Ygdm5vZGVzLgorCQkJICovCisKKwkJCW0tPnBhZ2VxLnRxZV9wcmV2ID0g KHZvaWQgKil2cDsKKwkJCW0tPnBhZ2VxLnRxZV9uZXh0ID0gZGVmZXJyZWRfdmRyb3BfbGlzdDsK KwkJCWRlZmVycmVkX3Zkcm9wX2xpc3QgPSBtOwogCQl9Ci0JCWlmIChtLT5mbGFncyAmIFBHX1pF Uk8pCi0JCQl2bV9wYWdlX3plcm9fY291bnQtLTsKLQkJLyogRG9uJ3QgY2xlYXIgdGhlIFBHX1pF Uk8gZmxhZzsgd2UnbGwgbmVlZCBpdCBsYXRlci4gKi8KLQkJbS0+ZmxhZ3MgPSBQR19VTk1BTkFH RUQgfCAobS0+ZmxhZ3MgJiBQR19aRVJPKTsKLQkJbS0+b2ZsYWdzID0gMDsKLQkJLyogVW5tYW5h Z2VkIHBhZ2VzIGRvbid0IHVzZSAiYWN0X2NvdW50Ii4gKi8KIAl9CiAJZm9yICg7IGkgPCByb3Vu ZHVwMihucGFnZXMsIDEgPDwgaW1pbihvaW5kLCBvcmRlcikpOyBpKyspIHsKIAkJbSA9ICZtX3Jl dFtpXTsKSW5kZXg6IHN5cy92bS92bV9waHlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL3ZtL3ZtX3Bo eXMuaAkocmV2aXNpb24gMjA4ODkwKQorKysgc3lzL3ZtL3ZtX3BoeXMuaAkod29ya2luZyBjb3B5 KQpAQCAtNDQsNiArNDQsNyBAQAogdm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfY29udGlnKHVuc2ln bmVkIGxvbmcgbnBhZ2VzLAogICAgIHZtX3BhZGRyX3QgbG93LCB2bV9wYWRkcl90IGhpZ2gsCiAg ICAgdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQsIHVuc2lnbmVkIGxvbmcgYm91bmRhcnkpOwordm1f cGFnZV90IHZtX3BoeXNfcGFnZV9hbGxvYyhpbnQgZmxpbmQsIGludCBwb29sLCBpbnQgb3JkZXIp Owogdm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfcGFnZXMoaW50IHBvb2wsIGludCBvcmRlcik7CiB2 bV9wYWRkcl90IHZtX3BoeXNfYm9vdHN0cmFwX2FsbG9jKHZtX3NpemVfdCBzaXplLCB1bnNpZ25l ZCBsb25nIGFsaWdubWVudCk7CiB2b2lkIHZtX3BoeXNfZnJlZV9wYWdlcyh2bV9wYWdlX3QgbSwg aW50IG9yZGVyKTsK --00c09f899574c85e660488bf3fcf--