From owner-freebsd-mips@FreeBSD.ORG Wed Jun 9 18:11: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 D9E671065674; Wed, 9 Jun 2010 18:11:58 +0000 (UTC) (envelope-from c.jayachandran@gmail.com) Received: from mail-pv0-f182.google.com (mail-pv0-f182.google.com [74.125.83.182]) by mx1.freebsd.org (Postfix) with ESMTP id 970ED8FC26; Wed, 9 Jun 2010 18:11:58 +0000 (UTC) Received: by pvb32 with SMTP id 32so646108pvb.13 for ; Wed, 09 Jun 2010 11:11:58 -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=bld56DLCQdUp+2cn3ejfAwMj5bx6mbhX2kgPrqPm6II=; b=kJKtVNdyTrO9rIOV7vCHSyZQFe9+I8SHd0lLtjj+Ve6HZpbhAE2ibmBI5WCjSh63Qh tUI4Dv8/9Nzlpzz0Oo9zWCRhkH9uq1nKIVFapG0bIviOPkH9N8rITml1MjfUJFsjrWgg s2aZ+1gvCR4NvONYY0rM4biv/cVl6wiwd1Sgo= 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=Dglkr71bj+97ixVBh6QhMIWWnVPptnALi1xygLxtp189NrnUXKaY5ZGO6XVAySv3We ePvCyU3sl+BI7Z8Y2vSRH5eaEIHsSe/aSs8CbwwVgyQZRUHErzw5yygRdeFBUDnEfwML Muf8SB2dGvk9taOt1kLxQeIjTpEtPIGkZNdbg= MIME-Version: 1.0 Received: by 10.229.237.144 with SMTP id ko16mr6467965qcb.68.1276107117297; Wed, 09 Jun 2010 11:11:57 -0700 (PDT) Received: by 10.220.189.13 with HTTP; Wed, 9 Jun 2010 11:11:57 -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: Wed, 9 Jun 2010 23:41:57 +0530 Message-ID: From: "Jayachandran C." To: Alan Cox Content-Type: multipart/mixed; boundary=0016364edd086c06ef04889cd7fe Cc: Kostik Belousov , "Jayachandran C." , 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: Wed, 09 Jun 2010 18:11:58 -0000 --0016364edd086c06ef04889cd7fe Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 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 pa= ges >>> and small kernel memory allocations. =A0Unlike mips, these machines don= '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, access= es >>> through their direct map may still miss in the TLB and require a page t= able >>> 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. =A0Ho= wever, >>> 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 am= d64 we >>> use 2MB page mappings to implement the direct map. =A0However, old Opte= rons >>> only had 8 data TLB entries for 2MB page mappings. =A0For a uniprocesso= r >>> kernel running on such an Opteron, I measured an 18% reduction in syste= m >>> 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/i= 386 >>> pmaps, I don't think there is a point in having more than one VM_FREEPO= OL_* >>> on mips. =A0And then, the point would be to reduce fragmentation of the >>> physical memory that could be caused by small allocations, such as page >>> 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 (or >> 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). If 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. Thanks, JC. --0016364edd086c06ef04889cd7fe Content-Type: application/octet-stream; name="pmap-with-HIGHMEM-freelist.patch" Content-Disposition: attachment; filename="pmap-with-HIGHMEM-freelist.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ga8h2ua20 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 UE1BUF9MT0NLKHBtYXApOwogCXJldHVybiAoMSk7CiB9CiAKQEAgLTk0OSw5NiArOTM1LDM2IEBA CiAJYnplcm8oJnBtYXAtPnBtX3N0YXRzLCBzaXplb2YgcG1hcC0+cG1fc3RhdHMpOwogfQogCisK IHN0YXRpYyB2b2lkCi1wbWFwX3B0cGd6b25lX2R0b3Iodm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9p ZCAqYXJnKQorcG1hcF9ncm93X3BhZ2VfY2FjaGUoaW50IHdhaXQpCiB7Ci0jaWZkZWYgSU5WQVJJ QU5UUwotCXN0YXRpYyBjaGFyIHplcm9wYWdlW1BBR0VfU0laRV07Ci0KLQlLQVNTRVJUKHNpemUg PT0gUEFHRV9TSVpFLAotCQkoInBtYXBfcHRwZ3pvbmVfZHRvcjogaW52YWxpZCBzaXplICVkIiwg c2l6ZSkpOwotCUtBU1NFUlQoYmNtcChtZW0sIHplcm9wYWdlLCBQQUdFX1NJWkUpID09IDAsCi0J CSgicG1hcF9wdHBnem9uZV9kdG9yOiBmcmVlaW5nIGEgbm9uLXplcm9lZCBwYWdlIikpOwotI2Vu ZGlmCisJcHJpbnRmKCJbJXNdIHdhaXQgJXhcbiIsIF9fZnVuY19fLCB3YWl0KTsKKwl2bV9jb250 aWdfZ3Jvd19jYWNoZSgzLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUyk7CiB9CiAKLXN0YXRp YyB2b2lkICoKLXBtYXBfcHRwZ3pvbmVfYWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVz LCB1X2ludDhfdCAqZmxhZ3MsIGludCB3YWl0KQotewotCXZtX3BhZ2VfdCBtOwotCXZtX3BhZGRy X3QgcGFkZHI7Ci0JaW50IHRyaWVzOwotCQotCUtBU1NFUlQoYnl0ZXMgPT0gUEFHRV9TSVpFLAot CQkoInBtYXBfcHRwZ3pvbmVfYWxsb2NmOiBpbnZhbGlkIGFsbG9jYXRpb24gc2l6ZSAlZCIsIGJ5 dGVzKSk7CiAKLQkqZmxhZ3MgPSBVTUFfU0xBQl9QUklWOwotCXRyaWVzID0gMDsKLXJldHJ5Ogot CW0gPSB2bV9waHlzX2FsbG9jX2NvbnRpZygxLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUywK LQkgICAgUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwotCWlmIChtID09IE5VTEwpIHsKLSAgICAgICAg ICAgICAgICBpZiAodHJpZXMgPCAoKHdhaXQgJiBNX05PV0FJVCkgIT0gMCA/IDEgOiAzKSkgewot CQkJdm1fY29udGlnX2dyb3dfY2FjaGUodHJpZXMsIDAsIE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlT KTsKLQkJCXRyaWVzKys7Ci0JCQlnb3RvIHJldHJ5OwotCQl9IGVsc2UKLQkJCXJldHVybiAoTlVM TCk7Ci0JfQotCi0JcGFkZHIgPSBWTV9QQUdFX1RPX1BIWVMobSk7Ci0JcmV0dXJuICgodm9pZCAq KU1JUFNfUEhZU19UT19LU0VHMChwYWRkcikpOwotfQkKLQogc3RhdGljIHZtX3BhZ2VfdAotcG1h cF9hbGxvY19wdGVfcGFnZShwbWFwX3QgcG1hcCwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgd2Fp dCwgdm1fb2Zmc2V0X3QgKnZhcCkKK3BtYXBfYWxsb2NfcHRlX3BhZ2UodW5zaWduZWQgaW50IGlu ZGV4LCBpbnQgd2FpdCkKIHsKLQl2bV9wYWRkcl90IHBhZGRyOwotCXZvaWQgKnZhOwogCXZtX3Bh Z2VfdCBtOwotCWludCBsb2NrZWQ7CiAKLQlsb2NrZWQgPSBtdHhfb3duZWQoJnBtYXAtPnBtX210 eCk7Ci0JaWYgKGxvY2tlZCkgewotCQltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX210eCwgTUFf T1dORUQpOwotCQlQTUFQX1VOTE9DSyhwbWFwKTsKLQkJdm1fcGFnZV91bmxvY2tfcXVldWVzKCk7 Ci0JfQotCXZhID0gdW1hX3phbGxvYyhwdHBnem9uZSwgd2FpdCk7Ci0JaWYgKGxvY2tlZCkgewot CQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7Ci0JCVBNQVBfTE9DSyhwbWFwKTsKLQl9Ci0JaWYgKHZh ID09IE5VTEwpCisJbSA9IHZtX3BoeXNfYWxsb2NfY29udGlnKDEsIDAsIE1JUFNfS1NFRzBfTEFS R0VTVF9QSFlTLAorCSAgICBQQUdFX1NJWkUsIDApOworCWlmIChtID09IE5VTEwpCiAJCXJldHVy biAoTlVMTCk7CiAKLQlwYWRkciA9IE1JUFNfS1NFRzBfVE9fUEhZUyh2YSk7Ci0JbSA9IFBIWVNf VE9fVk1fUEFHRShwYWRkcik7Ci0JCi0JaWYgKCFsb2NrZWQpCi0JCXZtX3BhZ2VfbG9ja19xdWV1 ZXMoKTsKKwlpZiAoKG0tPmZsYWdzICYgUEdfWkVSTykgPT0gMCkKKwkJcG1hcF96ZXJvX3BhZ2Uo bSk7CisKIAltLT5waW5kZXggPSBpbmRleDsKIAltLT52YWxpZCA9IFZNX1BBR0VfQklUU19BTEw7 Ci0JbS0+d2lyZV9jb3VudCA9IDE7Ci0JaWYgKCFsb2NrZWQpCi0JCXZtX3BhZ2VfdW5sb2NrX3F1 ZXVlcygpOwotCiAJYXRvbWljX2FkZF9pbnQoJmNudC52X3dpcmVfY291bnQsIDEpOwotCSp2YXAg PSAodm1fb2Zmc2V0X3QpdmE7CisJbS0+d2lyZV9jb3VudCA9IDE7CiAJcmV0dXJuIChtKTsKIH0K IAotc3RhdGljIHZvaWQKLXBtYXBfcmVsZWFzZV9wdGVfcGFnZSh2bV9wYWdlX3QgbSkKLXsKLQl2 b2lkICp2YTsKLQl2bV9wYWRkcl90IHBhZGRyOwogCi0JcGFkZHIgPSBWTV9QQUdFX1RPX1BIWVMo bSk7Ci0JdmEgPSAodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMChwYWRkcik7Ci0JdW1hX3pmcmVl KHB0cGd6b25lLCB2YSk7Ci19Ci0KIC8qCiAgKiBJbml0aWFsaXplIGEgcHJlYWxsb2NhdGVkIGFu ZCB6ZXJvZWQgcG1hcCBzdHJ1Y3R1cmUsCiAgKiBzdWNoIGFzIG9uZSBpbiBhIHZtc3BhY2Ugc3Ry dWN0dXJlLgpAQCAtMTA1NSwxMCArOTgxLDEwIEBACiAJLyoKIAkgKiBhbGxvY2F0ZSB0aGUgcGFn ZSBkaXJlY3RvcnkgcGFnZQogCSAqLwotCXB0ZHBnID0gcG1hcF9hbGxvY19wdGVfcGFnZShwbWFw LCBOVVNFUlBHVEJMUywgTV9XQUlUT0ssICZwdGR2YSk7Ci0JaWYgKHB0ZHBnID09IE5VTEwpCi0J CXJldHVybiAoMCk7CisJd2hpbGUgKChwdGRwZyA9IHBtYXBfYWxsb2NfcHRlX3BhZ2UoTlVTRVJQ R1RCTFMsIE1fV0FJVE9LKSkgPT0gTlVMTCkKKwkgICAgICAgcG1hcF9ncm93X3BhZ2VfY2FjaGUo TV9XQUlUT0spOwogCisJcHRkdmEgPSBNSVBTX1BIWVNfVE9fS1NFRzAoVk1fUEFHRV9UT19QSFlT KHB0ZHBnKSk7CiAJcG1hcC0+cG1fc2VndGFiID0gKHBkX2VudHJ5X3QgKilwdGR2YTsKIAlwbWFw LT5wbV9hY3RpdmUgPSAwOwogCXBtYXAtPnBtX3B0cGhpbnQgPSBOVUxMOwpAQCAtMTA4OSwxNSAr MTAxNSwyOCBAQAogCS8qCiAJICogRmluZCBvciBmYWJyaWNhdGUgYSBuZXcgcGFnZXRhYmxlIHBh Z2UKIAkgKi8KLQltID0gcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwLCBwdGVwaW5kZXgsIGZsYWdz LCAmcHRldmEpOwotCWlmIChtID09IE5VTEwpCisJaWYgKChtID0gcG1hcF9hbGxvY19wdGVfcGFn ZShwdGVwaW5kZXgsIGZsYWdzKSkgPT0gTlVMTCkgeworCQlpZiAoZmxhZ3MgJiBNX1dBSVRPSykg eworCQkJUE1BUF9VTkxPQ0socG1hcCk7CisJCQl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKKwkJ CXBtYXBfZ3Jvd19wYWdlX2NhY2hlKGZsYWdzKTsKKwkJCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsK KwkJCVBNQVBfTE9DSyhwbWFwKTsKKwkJfQorCisJCS8qCisJCSAqIEluZGljYXRlIHRoZSBuZWVk IHRvIHJldHJ5LglXaGlsZSB3YWl0aW5nLCB0aGUgcGFnZQorCQkgKiB0YWJsZSBwYWdlIG1heSBo YXZlIGJlZW4gYWxsb2NhdGVkLgorCQkgKi8KIAkJcmV0dXJuIChOVUxMKTsKKwl9CiAKIAkvKgog CSAqIE1hcCB0aGUgcGFnZXRhYmxlIHBhZ2UgaW50byB0aGUgcHJvY2VzcyBhZGRyZXNzIHNwYWNl LCBpZiBpdAogCSAqIGlzbid0IGFscmVhZHkgdGhlcmUuCiAJICovCiAKKwlwdGV2YSA9IE1JUFNf UEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobSkpOwogCXBtYXAtPnBtX3N0YXRzLnJlc2lk ZW50X2NvdW50Kys7CiAJcG1hcC0+cG1fc2VndGFiW3B0ZXBpbmRleF0gPSAocGRfZW50cnlfdClw dGV2YTsKIApAQCAtMTE5Myw3ICsxMTMyLDcgQEAKIAogCXB0ZHBnLT53aXJlX2NvdW50LS07CiAJ YXRvbWljX3N1YnRyYWN0X2ludCgmY250LnZfd2lyZV9jb3VudCwgMSk7Ci0JcG1hcF9yZWxlYXNl X3B0ZV9wYWdlKHB0ZHBnKTsKKwl2bV9wYWdlX2ZyZWVfemVybyhwdGRwZyk7CiAJUE1BUF9MT0NL X0RFU1RST1kocG1hcCk7CiB9CiAKQEAgLTEyMDMsNyArMTE0Miw2IEBACiB2b2lkCiBwbWFwX2dy b3drZXJuZWwodm1fb2Zmc2V0X3QgYWRkcikKIHsKLQl2bV9vZmZzZXRfdCBwYWdldmE7CiAJdm1f cGFnZV90IG5rcGc7CiAJcHRfZW50cnlfdCAqcHRlOwogCWludCBpOwpAQCAtMTIzOCwxMyArMTE3 NiwxMyBAQAogCQkvKgogCQkgKiBUaGlzIGluZGV4IGlzIGJvZ3VzLCBidXQgb3V0IG9mIHRoZSB3 YXkKIAkJICovCi0JCW5rcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKGtlcm5lbF9wbWFwLCBua3B0 LCBNX05PV0FJVCwgJnBhZ2V2YSk7CisJCW5rcGcgPSBwbWFwX2FsbG9jX3B0ZV9wYWdlKG5rcHQs IE1fTk9XQUlUKTsKIAogCQlpZiAoIW5rcGcpCiAJCQlwYW5pYygicG1hcF9ncm93a2VybmVsOiBu byBtZW1vcnkgdG8gZ3JvdyBrZXJuZWwiKTsKIAogCQlua3B0Kys7Ci0JCXB0ZSA9IChwdF9lbnRy eV90ICopcGFnZXZhOworCQlwdGUgPSAocHRfZW50cnlfdCAqKU1JUFNfUEhZU19UT19LU0VHMChW TV9QQUdFX1RPX1BIWVMobmtwZykpOwogCQlzZWd0YWJfcGRlKGtlcm5lbF9zZWdtYXAsIGtlcm5l bF92bV9lbmQpID0gKHBkX2VudHJ5X3QpcHRlOwogCiAJCS8qCkluZGV4OiBzeXMvdm0vdm1fcGh5 cy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHN5cy92bS92bV9waHlzLmMJKHJldmlzaW9uIDIwODg5MCkKKysr IHN5cy92bS92bV9waHlzLmMJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAKIAl2bV9w YWRkcl90CWVuZDsKIAl2bV9wYWdlX3QJZmlyc3RfcGFnZTsKIAlzdHJ1Y3Qgdm1fZnJlZWxpc3Qg KCpmcmVlX3F1ZXVlcylbVk1fTkZSRUVQT09MXVtWTV9ORlJFRU9SREVSXTsKKwlpbnQJCWZsaW5k OwogfTsKIAogc3RhdGljIHN0cnVjdCB2bV9waHlzX3NlZyB2bV9waHlzX3NlZ3NbVk1fUEhZU1NF R19NQVhdOwpAQCAtMTg4LDYgKzE4OSw3IEBACiAJc2VnID0gJnZtX3BoeXNfc2Vnc1t2bV9waHlz X25zZWdzKytdOwogCXNlZy0+c3RhcnQgPSBzdGFydDsKIAlzZWctPmVuZCA9IGVuZDsKKwlzZWct PmZsaW5kID0gZmxpbmQ7CiAjaWZkZWYgVk1fUEhZU1NFR19TUEFSU0UKIAlzZWctPmZpcnN0X3Bh Z2UgPSAmdm1fcGFnZV9hcnJheVtwYWdlc107CiAjZWxzZQpAQCAtNTk1LDcgKzU5Nyw4IEBACiAJ dm1fb2JqZWN0X3QgbV9vYmplY3Q7CiAJdm1fcGFkZHJfdCBwYSwgcGFfbGFzdCwgc2l6ZTsKIAl2 bV9wYWdlX3QgZGVmZXJyZWRfdmRyb3BfbGlzdCwgbSwgbV9yZXQ7Ci0JaW50IGZsaW5kLCBpLCBv aW5kLCBvcmRlciwgcGluZDsKKwlpbnQgZmxpbmQsIGksIG9pbmQsIG9yZGVyLCBwaW5kLCBzZWdp bmQ7CisJaW50IGZsX2dvb2RbVk1fTkZSRUVMSVNUXTsKIAogCXNpemUgPSBucGFnZXMgPDwgUEFH RV9TSElGVDsKIAlLQVNTRVJUKHNpemUgIT0gMCwKQEAgLTYwNywxMSArNjEwLDIyIEBACiAJZGVm ZXJyZWRfdmRyb3BfbGlzdCA9IE5VTEw7CiAJLyogQ29tcHV0ZSB0aGUgcXVldWUgdGhhdCBpcyB0 aGUgYmVzdCBmaXQgZm9yIG5wYWdlcy4gKi8KIAlmb3IgKG9yZGVyID0gMDsgKDEgPDwgb3JkZXIp IDwgbnBhZ2VzOyBvcmRlcisrKTsKKwkvKiBDb21wdXRlIHRoZSBmcmVlbGlzdHMgdGhhdCBzaG91 bGQgYmUgc2VhcmNoZWQgKi8KKwlmb3IgKGZsaW5kID0gMDsgZmxpbmQgPCB2bV9uZnJlZWxpc3Rz OyBmbGluZCsrKQorCQlmbF9nb29kW2ZsaW5kXSA9IDA7CisJZm9yIChzZWdpbmQgPSAwOyBzZWdp bmQgPCB2bV9waHlzX25zZWdzOyBzZWdpbmQrKykgeworCQlzZWcgPSAmdm1fcGh5c19zZWdzW3Nl Z2luZF07CisJCWlmIChsb3cgPCBzZWctPmVuZCAmJiBoaWdoID4gc2VnLT5zdGFydCkKKwkJCWZs X2dvb2Rbc2VnLT5mbGluZF0rKzsKKwl9CiAJbXR4X2xvY2soJnZtX3BhZ2VfcXVldWVfZnJlZV9t dHgpOwogI2lmIFZNX05SRVNFUlZMRVZFTCA+IDAKIHJldHJ5OgogI2VuZGlmCiAJZm9yIChmbGlu ZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykgeworCQlpZiAoZmxfZ29vZFtm bGluZF0gPT0gMCkKKwkJCWNvbnRpbnVlOworCiAJCWZvciAob2luZCA9IG1pbihvcmRlciwgVk1f TkZSRUVPUkRFUiAtIDEpOyBvaW5kIDwgVk1fTkZSRUVPUkRFUjsgb2luZCsrKSB7CiAJCQlmb3Ig KHBpbmQgPSAwOyBwaW5kIDwgVk1fTkZSRUVQT09MOyBwaW5kKyspIHsKIAkJCQlmbCA9IHZtX3Bo eXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3BpbmRdOwo= --0016364edd086c06ef04889cd7fe--