From owner-freebsd-mips@FreeBSD.ORG Sat Jun 5 22:40:18 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 99CA01065679; Sat, 5 Jun 2010 22:40:18 +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 2927E8FC17; Sat, 5 Jun 2010 22:40:17 +0000 (UTC) Received: by vws18 with SMTP id 18so881887vws.13 for ; Sat, 05 Jun 2010 15:40:17 -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=/IJy5u+tV2bOk5VSdahDX5aIvtos2GiULnpo8loUYMI=; b=ROCJh+kIWpPypXvqt9Q+6pqhRVn9ox2e696DNt6nhYVe6WdR078KRHv0o2GOSr2hpe 0l/mibjodHxx3BaCnTc145QAPyRh1aYmFZi7WFej+KYtubaPVq6zSCWbN4S4CvwemiYN VkEvq+N3UPsg1rEqDzG6/ykZ7LsPhIRQHspw0= 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=AjsKMXx9PM6QrVP8eEegirrHaPlKQaNSqwZZMqfys//iwsa4iiMXwn3CwS6z19pg7d EUCI/3S0fdYf/k6lWX/oMJ8coZGHGPYD4Fw2GfqefJSMbtc+xhry/3Ap7btRtJfZyCNY lFFFpa+fwx6cQdP6nUPPCuytZx1XBGeH1FA5I= MIME-Version: 1.0 Received: by 10.224.105.144 with SMTP id t16mr6908875qao.186.1275777617195; Sat, 05 Jun 2010 15:40:17 -0700 (PDT) Received: by 10.220.189.13 with HTTP; Sat, 5 Jun 2010 15:40:16 -0700 (PDT) In-Reply-To: <4C09345F.9040300@cs.rice.edu> References: <201005271005.o4RA5eVu032269@svn.freebsd.org> <4C058145.3000707@cs.rice.edu> <4C05F9BC.40409@cs.rice.edu> <4C0731A5.7090301@cs.rice.edu> <4C07E07B.9060802@cs.rice.edu> <4C09345F.9040300@cs.rice.edu> Date: Sun, 6 Jun 2010 04:10:16 +0530 Message-ID: From: "C. Jayachandran" To: Alan Cox Content-Type: multipart/mixed; boundary=00c09f83a1ccaf805d0488501fb1 Cc: "Jayachandran C." , Konstantin 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: Sat, 05 Jun 2010 22:40:18 -0000 --00c09f83a1ccaf805d0488501fb1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Fri, Jun 4, 2010 at 10:44 PM, Alan Cox wrote: > C. Jayachandran wrote: >> >> On Thu, Jun 3, 2010 at 10:33 PM, Alan Cox wrote: >> > > [snip] >> >>> Add a static counter to pmap_ptpgzone_allocf(). =A0When the counter rea= ches >>> some not-too-small prime number, don't call vm_phys_alloc_contig(), >>> instead >>> set "m" to NULL and reset the counter to zero. =A0Setting "m" to NULL >>> should >>> then trigger the vm_contig_grow_cache() call. =A0Make sense? >>> >> >> Is this to move the vm_contig_grow_cache() out of the >> pmap_ptpgzone_allocf() and into the function calling uma_zalloc()? =A0I >> am wondering why the prime number is needed. >> >> Another implementation I had thought about was to have a kernel >> process maintain a pool of direct mapped pages for MIPS. This will be >> woken up if the pool goes below a low water mark - any comments on >> this? >> >> > > Here is how the page table page allocation should be done. =A0It's not mu= ch > harder than the vm_contig_grow_cache() change. > > 1. Look at vm/vm_phys.c, in particular, vm_phys_init(). =A0Create a new > freelist, like =A0 =A0 =A0VM_FREELIST_ISADMA, for the direct-mapped memor= y on > MIPS. =A0Perhaps, call it VM_FREELIST_LOWMEM. =A0The controlling macros s= hould > be defined in mips/include/vmparam.h. > > 2. Trivially refactor vm_phys_alloc_pages(). =A0Specifically, take the bo= dy of > the outer for loop and make it a new function, vm_phys_alloc_freelist(), > =A0that takes the variable "flind" as a parameter. > > 3. Eliminate the UMA zone for page table pages. =A0In place of > vm_phys_alloc_contig() call your new function with VM_FREELIST_LOWMEM. = =A0(The > vm_contig_grow_cache() remains unchanged.) =A0Go back to calling > vm_page_free() to release page table pages. > > For the record, the changes that you made to start using a zone for page > table page allocation introduced at least one possible race condition > between pmap_remove_pages() and pmap_remove_all(). =A0Specifically, by > dropping and reacquiring the page queues and pmap lock when you free a pa= ge > table page, you allow a pmap_remove_all() call while pmap_remove_pages() = is > running to leave the variable "npv" in pmap_remove_pages() pointing at a > freed pv entry. My first attempt is attached, it comes up multiuser but crashes if I stress it a bit (panic: Bad link elm 0xc0078f00 prev->next !=3D elm). Will look at this tomorrow, and see if I can find the cause. In the meantime, it may be worth looking at the patch to see if this is in line with the approach you had suggested. I have tried to use VM_FREELIST_HIGHMEM which is already there, instead of adding VM_FREELIST_LOWMEM. JC. --00c09f83a1ccaf805d0488501fb1 Content-Type: application/octet-stream; name="vm_pagetable_pages.patch" Content-Disposition: attachment; filename="vm_pagetable_pages.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ga30gbg90 SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvdm1wYXJhbS5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz L2luY2x1ZGUvdm1wYXJhbS5oCShyZXZpc2lvbiAyMDg4NDgpCisrKyBzeXMvbWlwcy9pbmNsdWRl L3ZtcGFyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDggKzEwMyw5IEBACiAjZGVmaW5lCVZN X01BWFVTRVJfQUREUkVTUwkoKHZtX29mZnNldF90KTB4ODAwMDAwMDApCiAjZGVmaW5lCVZNX01B WF9NTUFQX0FERFIJVk1fTUFYVVNFUl9BRERSRVNTCiAKLSNkZWZpbmUJVk1fTUlOX0tFUk5FTF9B RERSRVNTCQkoKHZtX29mZnNldF90KTB4QzAwMDAwMDApCi0jZGVmaW5lCVZNX01BWF9LRVJORUxf QUREUkVTUwkJKCh2bV9vZmZzZXRfdCkweEZGRkZDMDAwKQorI2RlZmluZQlWTV9NSU5fS0VSTkVM X0FERFJFU1MJKCh2bV9vZmZzZXRfdCkweEMwMDAwMDAwKQorI2RlZmluZQlWTV9NQVhfS0VSTkVM X0FERFJFU1MJKCh2bV9vZmZzZXRfdCkweEZGRkZDMDAwKQorI2RlZmluZSBWTV9ISUdITUVNX0FE RFJFU1MJKCh2bV9wYWRkcl90KTB4MjAwMDAwMDApCiAjaWYgMAogI2RlZmluZQlLRVJOQkFTRQkJ KFZNX01JTl9LRVJORUxfQUREUkVTUykKICNlbHNlCkBAIC0xNjgsMTMgKzE2OSwxNSBAQAogI2Rl ZmluZQlWTV9GUkVFUE9PTF9ESVJFQ1QJMQogCiAvKgotICogd2Ugc3VwcG9ydCAxIGZyZWUgbGlz dDoKKyAqIHdlIHN1cHBvcnQgMiBmcmVlIGxpc3RzOgogICoKLSAqCS0gREVGQVVMVCBmb3IgYWxs IHN5c3RlbXMKKyAqCS0gTE9XTUVNIGZvciBEaXJlY3QgbWFwcGVkIChLU0VHMCkgcGFnZXMKKyAq CS0gREVGQVVMVCBmb3IgdGhlIHJlc3QKICAqLwogCi0jZGVmaW5lCVZNX05GUkVFTElTVAkJMQot I2RlZmluZQlWTV9GUkVFTElTVF9ERUZBVUxUCTAKKyNkZWZpbmUJVk1fTkZSRUVMSVNUCQkyCisj ZGVmaW5lCVZNX0ZSRUVMSVNUX0RFRkFVTFQJMQorI2RlZmluZQlWTV9GUkVFTElTVF9ISUdITUVN CTAKIAogLyoKICAqIFRoZSBsYXJnZXN0IGFsbG9jYXRpb24gc2l6ZSBpcyAxTUIuCkluZGV4OiBz eXMvbWlwcy9taXBzL3BtYXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbWlwcy9taXBzL3BtYXAuYwko cmV2aXNpb24gMjA4ODQ4KQorKysgc3lzL21pcHMvbWlwcy9wbWFwLmMJKHdvcmtpbmcgY29weSkK QEAgLTE4NCw4ICsxODQsNiBAQAogc3RhdGljIGludCBpbml0X3B0ZV9wcm90KHZtX29mZnNldF90 IHZhLCB2bV9wYWdlX3QgbSwgdm1fcHJvdF90IHByb3QpOwogc3RhdGljIHZvaWQgcG1hcF9UTEJf aW52YWxpZGF0ZV9rZXJuZWwodm1fb2Zmc2V0X3QpOwogc3RhdGljIHZvaWQgcG1hcF9UTEJfdXBk YXRlX2tlcm5lbCh2bV9vZmZzZXRfdCwgcHRfZW50cnlfdCk7Ci1zdGF0aWMgdm1fcGFnZV90IHBt YXBfYWxsb2NfcHRlX3BhZ2UocG1hcF90LCB1bnNpZ25lZCBpbnQsIGludCwgdm1fb2Zmc2V0X3Qg Kik7Ci1zdGF0aWMgdm9pZCBwbWFwX3JlbGVhc2VfcHRlX3BhZ2Uodm1fcGFnZV90KTsKIAogI2lm ZGVmIFNNUAogc3RhdGljIHZvaWQgcG1hcF9pbnZhbGlkYXRlX3BhZ2VfYWN0aW9uKHZvaWQgKmFy Zyk7CkBAIC0xOTMsMTAgKzE5MSw2IEBACiBzdGF0aWMgdm9pZCBwbWFwX3VwZGF0ZV9wYWdlX2Fj dGlvbih2b2lkICphcmcpOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHBtYXBfcHRwZ3pvbmVfZHRv cih2b2lkICptZW0sIGludCBzaXplLCB2b2lkICphcmcpOwotc3RhdGljIHZvaWQgKnBtYXBfcHRw Z3pvbmVfYWxsb2NmKHVtYV96b25lX3QsIGludCwgdV9pbnQ4X3QgKiwgaW50KTsKLXN0YXRpYyB1 bWFfem9uZV90IHB0cGd6b25lOwotCiBzdHJ1Y3QgbG9jYWxfc3lzbWFwcyB7CiAJc3RydWN0IG10 eCBsb2NrOwogCXZtX29mZnNldF90IGJhc2U7CkBAIC01MzUsMTAgKzUyOSw2IEBACiAJcHZfZW50 cnlfbWF4ID0gUE1BUF9TSFBHUEVSUFJPQyAqIG1heHByb2MgKyBjbnQudl9wYWdlX2NvdW50Owog CXB2X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2X2VudHJ5X21heCAvIDEwKTsKIAl1bWFfem9u ZV9zZXRfb2JqKHB2em9uZSwgJnB2em9uZV9vYmosIHB2X2VudHJ5X21heCk7Ci0KLQlwdHBnem9u ZSA9IHVtYV96Y3JlYXRlKCJQVCBFTlRSWSIsIFBBR0VfU0laRSwgTlVMTCwgcG1hcF9wdHBnem9u ZV9kdG9yLAotCSAgICBOVUxMLCBOVUxMLCBQQUdFX1NJWkUgLSAxLCBVTUFfWk9ORV9OT0ZSRUUg fCBVTUFfWk9ORV9aSU5JVCk7Ci0JdW1hX3pvbmVfc2V0X2FsbG9jZihwdHBnem9uZSwgcG1hcF9w dHBnem9uZV9hbGxvY2YpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCkBAIC04ODYsMTEgKzg3Niw3IEBACiAJICogSWYgdGhlIHBhZ2Ug aXMgZmluYWxseSB1bndpcmVkLCBzaW1wbHkgZnJlZSBpdC4KIAkgKi8KIAlhdG9taWNfc3VidHJh Y3RfaW50KCZjbnQudl93aXJlX2NvdW50LCAxKTsKLQlQTUFQX1VOTE9DSyhwbWFwKTsKLQl2bV9w YWdlX3VubG9ja19xdWV1ZXMoKTsKLQlwbWFwX3JlbGVhc2VfcHRlX3BhZ2UobSk7Ci0Jdm1fcGFn ZV9sb2NrX3F1ZXVlcygpOwotCVBNQVBfTE9DSyhwbWFwKTsKKwl2bV9wYWdlX2ZyZWVfemVybyht KTsKIAlyZXR1cm4gKDEpOwogfQogCkBAIC05NDksOTYgKzkzNSw1MCBAQAogCWJ6ZXJvKCZwbWFw LT5wbV9zdGF0cywgc2l6ZW9mIHBtYXAtPnBtX3N0YXRzKTsKIH0KIAotc3RhdGljIHZvaWQKLXBt YXBfcHRwZ3pvbmVfZHRvcih2b2lkICptZW0sIGludCBzaXplLCB2b2lkICphcmcpCitzdGF0aWMg dm1fcGFnZV90CitwbWFwX2FsbG9jX3B0ZV9wYWdlKHBtYXBfdCBwbWFwLCB1bnNpZ25lZCBpbnQg aW5kZXgsIGludCB3YWl0LCB2bV9vZmZzZXRfdCAqdmFwKQogewotI2lmZGVmIElOVkFSSUFOVFMK LQlzdGF0aWMgY2hhciB6ZXJvcGFnZVtQQUdFX1NJWkVdOwotCi0JS0FTU0VSVChzaXplID09IFBB R0VfU0laRSwKLQkJKCJwbWFwX3B0cGd6b25lX2R0b3I6IGludmFsaWQgc2l6ZSAlZCIsIHNpemUp KTsKLQlLQVNTRVJUKGJjbXAobWVtLCB6ZXJvcGFnZSwgUEFHRV9TSVpFKSA9PSAwLAotCQkoInBt YXBfcHRwZ3pvbmVfZHRvcjogZnJlZWluZyBhIG5vbi16ZXJvZWQgcGFnZSIpKTsKLSNlbmRpZgot fQotCi1zdGF0aWMgdm9pZCAqCi1wbWFwX3B0cGd6b25lX2FsbG9jZih1bWFfem9uZV90IHpvbmUs IGludCBieXRlcywgdV9pbnQ4X3QgKmZsYWdzLCBpbnQgd2FpdCkKLXsKLQl2bV9wYWdlX3QgbTsK IAl2bV9wYWRkcl90IHBhZGRyOwotCWludCB0cmllczsKLQkKLQlLQVNTRVJUKGJ5dGVzID09IFBB R0VfU0laRSwKLQkJKCJwbWFwX3B0cGd6b25lX2FsbG9jZjogaW52YWxpZCBhbGxvY2F0aW9uIHNp emUgJWQiLCBieXRlcykpOworCXZtX3BhZ2VfdCBtOworCWludCB0cmllcywgZmxhZ3M7CiAKLQkq ZmxhZ3MgPSBVTUFfU0xBQl9QUklWOwogCXRyaWVzID0gMDsKIHJldHJ5OgotCW0gPSB2bV9waHlz X2FsbG9jX2NvbnRpZygxLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUywKLQkgICAgUEFHRV9T SVpFLCBQQUdFX1NJWkUpOworCW0gPSB2bV9waHlzX2FsbG9jX2ZyZWVsaXN0X3BhZ2VzKFZNX0ZS RUVMSVNUX0RFRkFVTFQsCisJICAgIFZNX0ZSRUVQT09MX0RFRkFVTFQsIDApOworCWlmICh0cmll cyA+IDApCisJCXByaW50ZigiWyVkXSAlcyB3YWl0ICV4LCBnb3QgJXBcbiIsIHRyaWVzLCBfX2Z1 bmNfXywKKwkJICAgIHdhaXQsIG0pOwogCWlmIChtID09IE5VTEwpIHsKICAgICAgICAgICAgICAg ICBpZiAodHJpZXMgPCAoKHdhaXQgJiBNX05PV0FJVCkgIT0gMCA/IDEgOiAzKSkgewogCQkJdm1f Y29udGlnX2dyb3dfY2FjaGUodHJpZXMsIDAsIE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTKTsKIAkJ CXRyaWVzKys7CiAJCQlnb3RvIHJldHJ5OwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCXByaW50 ZigiWyVkXSAlcyB3YWl0ICV4LCBmYWlsIVxuIiwgdHJpZXMsIF9fZnVuY19fLAorCQkJICAgIHdh aXQpOwogCQkJcmV0dXJuIChOVUxMKTsKKwkJfQogCX0KIAogCXBhZGRyID0gVk1fUEFHRV9UT19Q SFlTKG0pOwotCXJldHVybiAoKHZvaWQgKilNSVBTX1BIWVNfVE9fS1NFRzAocGFkZHIpKTsKLX0J Ci0KLXN0YXRpYyB2bV9wYWdlX3QKLXBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcF90IHBtYXAsIHVu c2lnbmVkIGludCBpbmRleCwgaW50IHdhaXQsIHZtX29mZnNldF90ICp2YXApCi17Ci0Jdm1fcGFk ZHJfdCBwYWRkcjsKLQl2b2lkICp2YTsKLQl2bV9wYWdlX3QgbTsKLQlpbnQgbG9ja2VkOwotCi0J bG9ja2VkID0gbXR4X293bmVkKCZwbWFwLT5wbV9tdHgpOwotCWlmIChsb2NrZWQpIHsKLQkJbXR4 X2Fzc2VydCgmdm1fcGFnZV9xdWV1ZV9tdHgsIE1BX09XTkVEKTsKLQkJUE1BUF9VTkxPQ0socG1h cCk7Ci0JCXZtX3BhZ2VfdW5sb2NrX3F1ZXVlcygpOwotCX0KLQl2YSA9IHVtYV96YWxsb2MocHRw Z3pvbmUsIHdhaXQpOwotCWlmIChsb2NrZWQpIHsKLQkJdm1fcGFnZV9sb2NrX3F1ZXVlcygpOwot CQlQTUFQX0xPQ0socG1hcCk7Ci0JfQotCWlmICh2YSA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwp OwotCi0JcGFkZHIgPSBNSVBTX0tTRUcwX1RPX1BIWVModmEpOwotCW0gPSBQSFlTX1RPX1ZNX1BB R0UocGFkZHIpOwotCQotCWlmICghbG9ja2VkKQotCQl2bV9wYWdlX2xvY2tfcXVldWVzKCk7CiAJ bS0+cGluZGV4ID0gaW5kZXg7CiAJbS0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOwogCW0tPndp cmVfY291bnQgPSAxOwotCWlmICghbG9ja2VkKQotCQl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsK KwlpZiAobS0+ZmxhZ3MgJiBQR19aRVJPKQorCQl2bV9wYWdlX3plcm9fY291bnQtLTsKKwllbHNl IAorCQlwbWFwX3plcm9fcGFnZShtKTsKKyAJZmxhZ3MgPSBQR19aRVJPIHwgUEdfVU5NQU5BR0VE OworCW0tPmZsYWdzID0gZmxhZ3M7CisJbS0+b2ZsYWdzID0gMDsKKwltLT5hY3RfY291bnQgPSAw OwogCiAJYXRvbWljX2FkZF9pbnQoJmNudC52X3dpcmVfY291bnQsIDEpOwotCSp2YXAgPSAodm1f b2Zmc2V0X3QpdmE7CisJKnZhcCA9IE1JUFNfUEhZU19UT19LU0VHMChwYWRkcik7CiAJcmV0dXJu IChtKTsKIH0KIAotc3RhdGljIHZvaWQKLXBtYXBfcmVsZWFzZV9wdGVfcGFnZSh2bV9wYWdlX3Qg bSkKLXsKLQl2b2lkICp2YTsKLQl2bV9wYWRkcl90IHBhZGRyOwotCi0JcGFkZHIgPSBWTV9QQUdF X1RPX1BIWVMobSk7Ci0JdmEgPSAodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMChwYWRkcik7Ci0J dW1hX3pmcmVlKHB0cGd6b25lLCB2YSk7Ci19Ci0KIC8qCiAgKiBJbml0aWFsaXplIGEgcHJlYWxs b2NhdGVkIGFuZCB6ZXJvZWQgcG1hcCBzdHJ1Y3R1cmUsCiAgKiBzdWNoIGFzIG9uZSBpbiBhIHZt c3BhY2Ugc3RydWN0dXJlLgpAQCAtMTE5Myw3ICsxMTMzLDcgQEAKIAogCXB0ZHBnLT53aXJlX2Nv dW50LS07CiAJYXRvbWljX3N1YnRyYWN0X2ludCgmY250LnZfd2lyZV9jb3VudCwgMSk7Ci0JcG1h cF9yZWxlYXNlX3B0ZV9wYWdlKHB0ZHBnKTsKKwl2bV9wYWdlX2ZyZWVfemVybyhwdGRwZyk7CiAJ UE1BUF9MT0NLX0RFU1RST1kocG1hcCk7CiB9CiAKSW5kZXg6IHN5cy92bS92bV9waHlzLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gc3lzL3ZtL3ZtX3BoeXMuYwkocmV2aXNpb24gMjA4ODQ4KQorKysgc3lzL3Zt L3ZtX3BoeXMuYwkod29ya2luZyBjb3B5KQpAQCAtMzAxLDEwICszMDEsOCBAQAogdm1fcGFnZV90 CiB2bV9waHlzX2FsbG9jX3BhZ2VzKGludCBwb29sLCBpbnQgb3JkZXIpCiB7Ci0Jc3RydWN0IHZt X2ZyZWVsaXN0ICpmbDsKLQlzdHJ1Y3Qgdm1fZnJlZWxpc3QgKmFsdDsKLQlpbnQgZmxpbmQsIG9p bmQsIHBpbmQ7CiAJdm1fcGFnZV90IG07CisJaW50IGZsaW5kOwogCiAJS0FTU0VSVChwb29sIDwg Vk1fTkZSRUVQT09MLAogCSAgICAoInZtX3BoeXNfYWxsb2NfcGFnZXM6IHBvb2wgJWQgaXMgb3V0 IG9mIHJhbmdlIiwgcG9vbCkpOwpAQCAtMzEyLDM4ICszMTAsNTUgQEAKIAkgICAgKCJ2bV9waHlz X2FsbG9jX3BhZ2VzOiBvcmRlciAlZCBpcyBvdXQgb2YgcmFuZ2UiLCBvcmRlcikpOwogCW10eF9h c3NlcnQoJnZtX3BhZ2VfcXVldWVfZnJlZV9tdHgsIE1BX09XTkVEKTsKIAlmb3IgKGZsaW5kID0g MDsgZmxpbmQgPCB2bV9uZnJlZWxpc3RzOyBmbGluZCsrKSB7Ci0JCWZsID0gdm1fcGh5c19mcmVl X3F1ZXVlc1tmbGluZF1bcG9vbF07Ci0JCWZvciAob2luZCA9IG9yZGVyOyBvaW5kIDwgVk1fTkZS RUVPUkRFUjsgb2luZCsrKSB7Ci0JCQltID0gVEFJTFFfRklSU1QoJmZsW29pbmRdLnBsKTsKKwkJ bSA9IHZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXMoZmxpbmQsIHBvb2wsIG9yZGVyKTsKKwkJ aWYgKG0gIT0gTlVMTCkKKwkJCXJldHVybiBtOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCit2 bV9wYWdlX3QKK3ZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXMoaW50IGZsaW5kLCBpbnQgcG9v bCwgaW50IG9yZGVyKQorewkKKwlzdHJ1Y3Qgdm1fZnJlZWxpc3QgKmZsOworCXN0cnVjdCB2bV9m cmVlbGlzdCAqYWx0OworCWludCBvaW5kLCBwaW5kOworCXZtX3BhZ2VfdCBtOworCisJS0FTU0VS VChmbGluZCA8IFZNX05GUkVFTElTVCwKKwkgICAgKCJ2bV9waHlzX2FsbG9jX3BhZ2VzOiBmcmVl bGlzdCAlZCBpcyBvdXQgb2YgcmFuZ2UiLCBmbGluZCkpOworCisJZmwgPSB2bV9waHlzX2ZyZWVf cXVldWVzW2ZsaW5kXVtwb29sXTsKKwlmb3IgKG9pbmQgPSBvcmRlcjsgb2luZCA8IFZNX05GUkVF T1JERVI7IG9pbmQrKykgeworCQltID0gVEFJTFFfRklSU1QoJmZsW29pbmRdLnBsKTsKKwkJaWYg KG0gIT0gTlVMTCkgeworCQkJVEFJTFFfUkVNT1ZFKCZmbFtvaW5kXS5wbCwgbSwgcGFnZXEpOwor CQkJZmxbb2luZF0ubGNudC0tOworCQkJbS0+b3JkZXIgPSBWTV9ORlJFRU9SREVSOworCQkJdm1f cGh5c19zcGxpdF9wYWdlcyhtLCBvaW5kLCBmbCwgb3JkZXIpOworCQkJcmV0dXJuIChtKTsKKwkJ fQorCX0KKworCS8qCisJICogVGhlIGdpdmVuIHBvb2wgd2FzIGVtcHR5LiAgRmluZCB0aGUgbGFy Z2VzdAorCSAqIGNvbnRpZ3VvdXMsIHBvd2VyLW9mLXR3by1zaXplZCBzZXQgb2YgcGFnZXMgaW4g YW55CisJICogcG9vbC4gIFRyYW5zZmVyIHRoZXNlIHBhZ2VzIHRvIHRoZSBnaXZlbiBwb29sLCBh bmQKKwkgKiB1c2UgdGhlbSB0byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uLgorCSAqLworCWZvciAo b2luZCA9IFZNX05GUkVFT1JERVIgLSAxOyBvaW5kID49IG9yZGVyOyBvaW5kLS0pIHsKKwkJZm9y IChwaW5kID0gMDsgcGluZCA8IFZNX05GUkVFUE9PTDsgcGluZCsrKSB7CisJCQlhbHQgPSB2bV9w aHlzX2ZyZWVfcXVldWVzW2ZsaW5kXVtwaW5kXTsKKwkJCW0gPSBUQUlMUV9GSVJTVCgmYWx0W29p bmRdLnBsKTsKIAkJCWlmIChtICE9IE5VTEwpIHsKLQkJCQlUQUlMUV9SRU1PVkUoJmZsW29pbmRd LnBsLCBtLCBwYWdlcSk7Ci0JCQkJZmxbb2luZF0ubGNudC0tOworCQkJCVRBSUxRX1JFTU9WRSgm YWx0W29pbmRdLnBsLCBtLCBwYWdlcSk7CisJCQkJYWx0W29pbmRdLmxjbnQtLTsKIAkJCQltLT5v cmRlciA9IFZNX05GUkVFT1JERVI7CisJCQkJdm1fcGh5c19zZXRfcG9vbChwb29sLCBtLCBvaW5k KTsKIAkJCQl2bV9waHlzX3NwbGl0X3BhZ2VzKG0sIG9pbmQsIGZsLCBvcmRlcik7CiAJCQkJcmV0 dXJuIChtKTsKIAkJCX0KIAkJfQotCi0JCS8qCi0JCSAqIFRoZSBnaXZlbiBwb29sIHdhcyBlbXB0 eS4gIEZpbmQgdGhlIGxhcmdlc3QKLQkJICogY29udGlndW91cywgcG93ZXItb2YtdHdvLXNpemVk IHNldCBvZiBwYWdlcyBpbiBhbnkKLQkJICogcG9vbC4gIFRyYW5zZmVyIHRoZXNlIHBhZ2VzIHRv IHRoZSBnaXZlbiBwb29sLCBhbmQKLQkJICogdXNlIHRoZW0gdG8gc2F0aXNmeSB0aGUgYWxsb2Nh dGlvbi4KLQkJICovCi0JCWZvciAob2luZCA9IFZNX05GUkVFT1JERVIgLSAxOyBvaW5kID49IG9y ZGVyOyBvaW5kLS0pIHsKLQkJCWZvciAocGluZCA9IDA7IHBpbmQgPCBWTV9ORlJFRVBPT0w7IHBp bmQrKykgewotCQkJCWFsdCA9IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3BpbmRdOwotCQkJ CW0gPSBUQUlMUV9GSVJTVCgmYWx0W29pbmRdLnBsKTsKLQkJCQlpZiAobSAhPSBOVUxMKSB7Ci0J CQkJCVRBSUxRX1JFTU9WRSgmYWx0W29pbmRdLnBsLCBtLCBwYWdlcSk7Ci0JCQkJCWFsdFtvaW5k XS5sY250LS07Ci0JCQkJCW0tPm9yZGVyID0gVk1fTkZSRUVPUkRFUjsKLQkJCQkJdm1fcGh5c19z ZXRfcG9vbChwb29sLCBtLCBvaW5kKTsKLQkJCQkJdm1fcGh5c19zcGxpdF9wYWdlcyhtLCBvaW5k LCBmbCwgb3JkZXIpOwotCQkJCQlyZXR1cm4gKG0pOwotCQkJCX0KLQkJCX0KLQkJfQogCX0KIAly ZXR1cm4gKE5VTEwpOwogfQpJbmRleDogc3lzL3ZtL3ZtX3BoeXMuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz eXMvdm0vdm1fcGh5cy5oCShyZXZpc2lvbiAyMDg4NDgpCisrKyBzeXMvdm0vdm1fcGh5cy5oCSh3 b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiB2bV9wYWdlX3Qgdm1fcGh5c19hbGxvY19j b250aWcodW5zaWduZWQgbG9uZyBucGFnZXMsCiAgICAgdm1fcGFkZHJfdCBsb3csIHZtX3BhZGRy X3QgaGlnaCwKICAgICB1bnNpZ25lZCBsb25nIGFsaWdubWVudCwgdW5zaWduZWQgbG9uZyBib3Vu ZGFyeSk7Cit2bV9wYWdlX3Qgdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhpbnQgZmxpbmQs IGludCBwb29sLCBpbnQgb3JkZXIpOwogdm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfcGFnZXMoaW50 IHBvb2wsIGludCBvcmRlcik7CiB2bV9wYWRkcl90IHZtX3BoeXNfYm9vdHN0cmFwX2FsbG9jKHZt X3NpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWdubWVudCk7CiB2b2lkIHZtX3BoeXNfZnJl ZV9wYWdlcyh2bV9wYWdlX3QgbSwgaW50IG9yZGVyKTsK --00c09f83a1ccaf805d0488501fb1--