From owner-freebsd-mips@FreeBSD.ORG Mon Jul 19 07:19:35 2010 Return-Path: Delivered-To: freebsd-mips@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 305E6106564A for ; Mon, 19 Jul 2010 07:19:35 +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 2B2F48FC12 for ; Mon, 19 Jul 2010 07:19:33 +0000 (UTC) Received: by vws19 with SMTP id 19so5429338vws.13 for ; Mon, 19 Jul 2010 00:19:33 -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=wZpykJ/7qYvFW6KAWuNxKlDeZ38akKiA6uyr18gxpw4=; b=nRa9GJV8orJQfQC0Ce6Q/pJJf3ZCcI3M6WSqVGs9+Zb2ho2L+Fj2zbH/s0S4bWCkCa oK63GCRfe8ZiwqLiXo1JPy2F21lor3Oa84iyVq1dyy8xDsO+BHmb7Y7NJDTWPXtp3zzh NY4U66yCIxNCxJbIkKahU4JTffQWraCZMSPgw= 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=X99GNEkipFSO9hclDD3T8W2npuJ0297bnBnXOxEzciQcjdAcvo78M/uwnAek0oTvG7 LkRrWhcu4zUd2qSXQivFpfO03jlZbGX9kOwbM5liLg61+YxGmF1VURAvYOxFo8gdYQ6O Q8y+W5FlDoqEkOezJuShlcJdX6uetRnvwjAko= MIME-Version: 1.0 Received: by 10.220.163.10 with SMTP id y10mr2763553vcx.63.1279523580911; Mon, 19 Jul 2010 00:13:00 -0700 (PDT) Received: by 10.220.188.138 with HTTP; Mon, 19 Jul 2010 00:13:00 -0700 (PDT) In-Reply-To: <4C3E0144.50402@cs.rice.edu> 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> <4C3E0144.50402@cs.rice.edu> Date: Mon, 19 Jul 2010 12:43:00 +0530 Message-ID: From: "Jayachandran C." To: Alan Cox Content-Type: multipart/mixed; boundary=0014853d013085a1e1048bb84c56 Cc: freebsd-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: Mon, 19 Jul 2010 07:19:35 -0000 --0014853d013085a1e1048bb84c56 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Wed, Jul 14, 2010 at 11:56 PM, Alan Cox wrote: [....] > This makes sense. =A0I have the following requests. =A0All but 1.a. are s= imple, > mechanical changes. > > 1. Move vm_phys_page_alloc() to vm_page.c and rename it to > vm_page_alloc_freelist(). > > 1.a. The new vm_page_alloc_freelist() should really have a "req" paramete= r > like vm_page_alloc() and duplicate the following from vm_page_alloc(): > > =A0 mtx_lock(&vm_page_queue_free_mtx); > =A0 if (cnt.v_free_count + cnt.v_cache_count > cnt.v_free_reserved || > =A0 =A0 =A0 (page_req =3D=3D VM_ALLOC_SYSTEM && > =A0 =A0 =A0 cnt.v_free_count + cnt.v_cache_count > cnt.v_interrupt_free_m= in) || > =A0 =A0 =A0 (page_req =3D=3D VM_ALLOC_INTERRUPT && > =A0 =A0 =A0 cnt.v_free_count + cnt.v_cache_count > 0)) { > > In essence, user page table page allocation shouldn't be allowed to alloc= ate > the last available page. =A0Only pmap_growkernel() should use > VM_ALLOC_INTERRUPT. =A0(See either the amd64 or i386 pmap.) > > You could also drop the "pool" parameter and pass VM_FREEPOOL_DIRECT to > vm_phys_alloc_freelist_pages() from vm_page_alloc_freelist(). =A0(This is > consistent with what vm_page_alloc() does for VM_ALLOC_NOOBJ.) > > 2. Move vm_page_alloc_init() to vm_page.c as well. =A0(And add it to > vm_page.h.) > > 3. Make vm_phys_alloc_freelist_pages() extern. > > >> Since I had originally added the UMA zone for =A0page table >> pages for MIPS, which has the issues you had noted, I would like to >> fix this... > > > The patch introduces a few unnecessary blank lines. =A0Can you please rem= ove > these: [...] > > FreeBSD style(9) requires parentheses around the "m": [...] > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return m; [freebsd-mips cc-ed, for comments on MIPS side] Here's is the updated patch with the review comments taken care of. I have been testing this on MIPS, could not see any regression so far. -- Redo the page table page allocation on MIPS, based on suggestion from alc@. The current UMA zone based allocation can be replaced by a scheme that creates a new free list for the KSEG0 region, and a new function in sys/vm to allocate pages from a specific free page list. The changes are : - Revert the earlier changes in MIPS pmap.c that added UMA zone for page table pages. - Add a new freelist VM_FREELIST_HIGHMEM to vmparam.h for memory that is not directly mapped (in 32bit compilation). Normal page allocations will first try the HIGHMEM freelist and then the default freelist (which is for the KSEG0 direct mapped memory). - Add a new function 'vm_page_t vm_page_alloc_freelist(int flind, int order, int req)' to vm/vm_page.c to allocate a page from a specified freelist. The MIPS page table pages will be allocated using this function from the KSEG0 freelist. - Move the page initialization code from vm_phys_alloc_contig() to a new function vm_page_alloc_init(), and use this function to initialize pages in vm_page_alloc_freelist() too. - Split the vm_phys_alloc_pages(pool, order) to create vm_phys_alloc_freelist_pages(int flind, int pool, int order), and use this function from both vm_page_alloc_freelist() and vm_phys_alloc_pages(). -- Thanks, JC. --0014853d013085a1e1048bb84c56 Content-Type: text/x-patch; charset=US-ASCII; name="pmap-pagetable-page-alloc.patch" Content-Disposition: attachment; filename="pmap-pagetable-page-alloc.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gbsz8bmo0 SW5kZXg6IHN5cy9taXBzL2luY2x1ZGUvdm1wYXJhbS5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9taXBz L2luY2x1ZGUvdm1wYXJhbS5oCShyZXZpc2lvbiAyMTAxNTcpCisrKyBzeXMvbWlwcy9pbmNsdWRl L3ZtcGFyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw3IEBACiAjZGVmaW5lCVZN X01BWFVTRVJfQUREUkVTUwkoKHZtX29mZnNldF90KTB4ODAwMDAwMDApCiAjZGVmaW5lCVZNX01J Tl9LRVJORUxfQUREUkVTUwkoKHZtX29mZnNldF90KTB4QzAwMDAwMDApCiAjZGVmaW5lCVZNX01B WF9LRVJORUxfQUREUkVTUwkoKHZtX29mZnNldF90KTB4RkZGRkMwMDApCisjZGVmaW5lCVZNX0hJ R0hNRU1fQUREUkVTUwkoKHZtX3BhZGRyX3QpMHgyMDAwMDAwMCkKICNlbmRpZgogI2lmIDAKICNk ZWZpbmUJS0VSTkJBU0UJCShWTV9NSU5fS0VSTkVMX0FERFJFU1MpCkBAIC0xMjUsNyArMTI2LDYg QEAKICNkZWZpbmUJVk1fTlJFU0VSVkxFVkVMCQkwCiAjZW5kaWYKIAotCiAvKiB2aXJ0dWFsIHNp emVzIChieXRlcykgZm9yIHZhcmlvdXMga2VybmVsIHN1Ym1hcHMgKi8KICNpZm5kZWYgVk1fS01F TV9TSVpFCiAjZGVmaW5lCVZNX0tNRU1fU0laRQkJKDEyICogMTAyNCAqIDEwMjQpCkBAIC0xNzQs MTMgKzE3NCwxOSBAQAogI2RlZmluZQlWTV9GUkVFUE9PTF9ESVJFQ1QJMQogCiAvKgotICogd2Ug c3VwcG9ydCAxIGZyZWUgbGlzdDoKKyAqIHdlIHN1cHBvcnQgMiBmcmVlIGxpc3RzOgogICoKLSAq CS0gREVGQVVMVCBmb3IgYWxsIHN5c3RlbXMKKyAqCS0gREVGQVVMVCBmb3IgZGlyZWN0IG1hcHBl ZCAoS1NFRzApIHBhZ2VzCisgKgktIEhJR0hNRU0gZm9yIG90aGVyIHBhZ2VzIAogICovCi0KKyNp ZmRlZiBfX21pcHNfbjY0CiAjZGVmaW5lCVZNX05GUkVFTElTVAkJMQogI2RlZmluZQlWTV9GUkVF TElTVF9ERUZBVUxUCTAKKyNlbHNlCisjZGVmaW5lCVZNX05GUkVFTElTVAkJMgorI2RlZmluZQlW TV9GUkVFTElTVF9ERUZBVUxUCTEKKyNkZWZpbmUJVk1fRlJFRUxJU1RfSElHSE1FTQkwCisjZW5k aWYKIAogLyoKICAqIFRoZSBsYXJnZXN0IGFsbG9jYXRpb24gc2l6ZSBpcyAxTUIuCkluZGV4OiBz eXMvbWlwcy9taXBzL3BtYXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbWlwcy9taXBzL3BtYXAuYwko cmV2aXNpb24gMjEwMTU3KQorKysgc3lzL21pcHMvbWlwcy9wbWFwLmMJKHdvcmtpbmcgY29weSkK QEAgLTE4Nyw4ICsxODcsOCBAQAogc3RhdGljIHZtX3BhZ2VfdCBfcG1hcF9hbGxvY3B0ZShwbWFw X3QgcG1hcCwgdW5zaWduZWQgcHRlcGluZGV4LCBpbnQgZmxhZ3MpOwogc3RhdGljIGludCBwbWFw X3VudXNlX3B0KHBtYXBfdCwgdm1fb2Zmc2V0X3QsIHZtX3BhZ2VfdCk7CiBzdGF0aWMgaW50IGlu aXRfcHRlX3Byb3Qodm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90X3QgcHJvdCk7 Ci1zdGF0aWMgdm1fcGFnZV90IHBtYXBfYWxsb2NfcHRlX3BhZ2UocG1hcF90LCB1bnNpZ25lZCBp bnQsIGludCwgdm1fb2Zmc2V0X3QgKik7Ci1zdGF0aWMgdm9pZCBwbWFwX3JlbGVhc2VfcHRlX3Bh Z2Uodm1fcGFnZV90KTsKK3N0YXRpYyB2bV9wYWdlX3QgcG1hcF9hbGxvY19wdGVfcGFnZSh1bnNp Z25lZCBpbnQgaW5kZXgsIGludCByZXEpOworc3RhdGljIHZvaWQgcG1hcF9ncm93X3B0ZV9wYWdl X2NhY2hlKHZvaWQpOwogCiAjaWZkZWYgU01QCiBzdGF0aWMgdm9pZCBwbWFwX2ludmFsaWRhdGVf cGFnZV9hY3Rpb24odm9pZCAqYXJnKTsKQEAgLTE5NiwxMCArMTk2LDYgQEAKIHN0YXRpYyB2b2lk IHBtYXBfdXBkYXRlX3BhZ2VfYWN0aW9uKHZvaWQgKmFyZyk7CiAjZW5kaWYKIAotc3RhdGljIHZv aWQgcG1hcF9wdHBnem9uZV9kdG9yKHZvaWQgKm1lbSwgaW50IHNpemUsIHZvaWQgKmFyZyk7Ci1z dGF0aWMgdm9pZCAqcG1hcF9wdHBnem9uZV9hbGxvY2YodW1hX3pvbmVfdCwgaW50LCB1X2ludDhf dCAqLCBpbnQpOwotc3RhdGljIHVtYV96b25lX3QgcHRwZ3pvbmU7Ci0KICNpZiAhZGVmaW5lZChf X21pcHNfbjY0KQogc3RydWN0IGxvY2FsX3N5c21hcHMgewogCXZtX29mZnNldF90IGJhc2U7CkBA IC01MzksMTAgKzUzNSw2IEBACiAJcHZfZW50cnlfbWF4ID0gUE1BUF9TSFBHUEVSUFJPQyAqIG1h eHByb2MgKyBjbnQudl9wYWdlX2NvdW50OwogCXB2X2VudHJ5X2hpZ2hfd2F0ZXIgPSA5ICogKHB2 X2VudHJ5X21heCAvIDEwKTsKIAl1bWFfem9uZV9zZXRfb2JqKHB2em9uZSwgJnB2em9uZV9vYmos IHB2X2VudHJ5X21heCk7Ci0KLQlwdHBnem9uZSA9IHVtYV96Y3JlYXRlKCJQVCBFTlRSWSIsIFBB R0VfU0laRSwgTlVMTCwgcG1hcF9wdHBnem9uZV9kdG9yLAotCSAgICBOVUxMLCBOVUxMLCBQQUdF X1NJWkUgLSAxLCBVTUFfWk9ORV9OT0ZSRUUgfCBVTUFfWk9ORV9aSU5JVCk7Ci0JdW1hX3pvbmVf c2V0X2FsbG9jZihwdHBnem9uZSwgcG1hcF9wdHBnem9uZV9hbGxvY2YpOwogfQogCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04ODIsMTIg Kzg3NCw4IEBACiAJLyoKIAkgKiBJZiB0aGUgcGFnZSBpcyBmaW5hbGx5IHVud2lyZWQsIHNpbXBs eSBmcmVlIGl0LgogCSAqLworCXZtX3BhZ2VfZnJlZV96ZXJvKG0pOwogCWF0b21pY19zdWJ0cmFj dF9pbnQoJmNudC52X3dpcmVfY291bnQsIDEpOwotCVBNQVBfVU5MT0NLKHBtYXApOwotCXZtX3Bh Z2VfdW5sb2NrX3F1ZXVlcygpOwotCXBtYXBfcmVsZWFzZV9wdGVfcGFnZShtKTsKLQl2bV9wYWdl X2xvY2tfcXVldWVzKCk7Ci0JUE1BUF9MT0NLKHBtYXApOwogCXJldHVybiAoMSk7CiB9CiAKQEAg LTk0Nyw5NSArOTM1LDMwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wbWFwX3B0cGd6b25lX2R0b3Io dm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9pZCAqYXJnKQorcG1hcF9ncm93X3B0ZV9wYWdlX2NhY2hl KCkKIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0Jc3RhdGljIGNoYXIgemVyb3BhZ2VbUEFHRV9TSVpF XTsKLQotCUtBU1NFUlQoc2l6ZSA9PSBQQUdFX1NJWkUsCi0JCSgicG1hcF9wdHBnem9uZV9kdG9y OiBpbnZhbGlkIHNpemUgJWQiLCBzaXplKSk7Ci0JS0FTU0VSVChiY21wKG1lbSwgemVyb3BhZ2Us IFBBR0VfU0laRSkgPT0gMCwKLQkJKCJwbWFwX3B0cGd6b25lX2R0b3I6IGZyZWVpbmcgYSBub24t emVyb2VkIHBhZ2UiKSk7Ci0jZW5kaWYKKwl2bV9jb250aWdfZ3Jvd19jYWNoZSgzLCAwLCBNSVBT X0tTRUcwX0xBUkdFU1RfUEhZUyk7CiB9CiAKLXN0YXRpYyB2b2lkICoKLXBtYXBfcHRwZ3pvbmVf YWxsb2NmKHVtYV96b25lX3Qgem9uZSwgaW50IGJ5dGVzLCB1X2ludDhfdCAqZmxhZ3MsIGludCB3 YWl0KQotewotCXZtX3BhZ2VfdCBtOwotCXZtX3BhZGRyX3QgcGFkZHI7Ci0JaW50IHRyaWVzOwot CQotCUtBU1NFUlQoYnl0ZXMgPT0gUEFHRV9TSVpFLAotCQkoInBtYXBfcHRwZ3pvbmVfYWxsb2Nm OiBpbnZhbGlkIGFsbG9jYXRpb24gc2l6ZSAlZCIsIGJ5dGVzKSk7Ci0KLQkqZmxhZ3MgPSBVTUFf U0xBQl9QUklWOwotCXRyaWVzID0gMDsKLXJldHJ5OgotCW0gPSB2bV9waHlzX2FsbG9jX2NvbnRp ZygxLCAwLCBNSVBTX0tTRUcwX0xBUkdFU1RfUEhZUywKLQkgICAgUEFHRV9TSVpFLCBQQUdFX1NJ WkUpOwotCWlmIChtID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAodHJpZXMgPCAoKHdh aXQgJiBNX05PV0FJVCkgIT0gMCA/IDEgOiAzKSkgewotCQkJdm1fY29udGlnX2dyb3dfY2FjaGUo dHJpZXMsIDAsIE1JUFNfS1NFRzBfTEFSR0VTVF9QSFlTKTsKLQkJCXRyaWVzKys7Ci0JCQlnb3Rv IHJldHJ5OwotCQl9IGVsc2UKLQkJCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JcGFkZHIgPSBWTV9Q QUdFX1RPX1BIWVMobSk7Ci0JcmV0dXJuICgodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMChwYWRk cikpOwotfQkKLQogc3RhdGljIHZtX3BhZ2VfdAotcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwX3Qg cG1hcCwgdW5zaWduZWQgaW50IGluZGV4LCBpbnQgd2FpdCwgdm1fb2Zmc2V0X3QgKnZhcCkKK3Bt YXBfYWxsb2NfcHRlX3BhZ2UodW5zaWduZWQgaW50IGluZGV4LCBpbnQgcmVxKQogewotCXZtX3Bh ZGRyX3QgcGFkZHI7Ci0Jdm9pZCAqdmE7CiAJdm1fcGFnZV90IG07Ci0JaW50IGxvY2tlZDsKIAot CWxvY2tlZCA9IG10eF9vd25lZCgmcG1hcC0+cG1fbXR4KTsKLQlpZiAobG9ja2VkKSB7Ci0JCW10 eF9hc3NlcnQoJnZtX3BhZ2VfcXVldWVfbXR4LCBNQV9PV05FRCk7Ci0JCVBNQVBfVU5MT0NLKHBt YXApOwotCQl2bV9wYWdlX3VubG9ja19xdWV1ZXMoKTsKLQl9Ci0JdmEgPSB1bWFfemFsbG9jKHB0 cGd6b25lLCB3YWl0KTsKLQlpZiAobG9ja2VkKSB7Ci0JCXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsK LQkJUE1BUF9MT0NLKHBtYXApOwotCX0KLQlpZiAodmEgPT0gTlVMTCkKKwltID0gdm1fcGFnZV9h bGxvY19mcmVlbGlzdChWTV9GUkVFTElTVF9ERUZBVUxULCAwLCByZXEpOworCWlmIChtID09IE5V TEwpCiAJCXJldHVybiAoTlVMTCk7CiAKLQlwYWRkciA9IE1JUFNfS1NFRzBfVE9fUEhZUyh2YSk7 Ci0JbSA9IFBIWVNfVE9fVk1fUEFHRShwYWRkcik7Ci0JCi0JaWYgKCFsb2NrZWQpCi0JCXZtX3Bh Z2VfbG9ja19xdWV1ZXMoKTsKKwlpZiAoKG0tPmZsYWdzICYgUEdfWkVSTykgPT0gMCkKKwkJcG1h cF96ZXJvX3BhZ2UobSk7CisKIAltLT5waW5kZXggPSBpbmRleDsKIAltLT52YWxpZCA9IFZNX1BB R0VfQklUU19BTEw7Ci0JbS0+d2lyZV9jb3VudCA9IDE7Ci0JaWYgKCFsb2NrZWQpCi0JCXZtX3Bh Z2VfdW5sb2NrX3F1ZXVlcygpOwotCiAJYXRvbWljX2FkZF9pbnQoJmNudC52X3dpcmVfY291bnQs IDEpOwotCSp2YXAgPSAodm1fb2Zmc2V0X3QpdmE7CisJbS0+d2lyZV9jb3VudCA9IDE7CiAJcmV0 dXJuIChtKTsKIH0KIAotc3RhdGljIHZvaWQKLXBtYXBfcmVsZWFzZV9wdGVfcGFnZSh2bV9wYWdl X3QgbSkKLXsKLQl2b2lkICp2YTsKLQl2bV9wYWRkcl90IHBhZGRyOwotCi0JcGFkZHIgPSBWTV9Q QUdFX1RPX1BIWVMobSk7Ci0JdmEgPSAodm9pZCAqKU1JUFNfUEhZU19UT19LU0VHMChwYWRkcik7 Ci0JdW1hX3pmcmVlKHB0cGd6b25lLCB2YSk7Ci19Ci0KIC8qCiAgKiBJbml0aWFsaXplIGEgcHJl YWxsb2NhdGVkIGFuZCB6ZXJvZWQgcG1hcCBzdHJ1Y3R1cmUsCiAgKiBzdWNoIGFzIG9uZSBpbiBh IHZtc3BhY2Ugc3RydWN0dXJlLgpAQCAtMTA1MiwxMCArOTc1LDEwIEBACiAJLyoKIAkgKiBhbGxv Y2F0ZSB0aGUgcGFnZSBkaXJlY3RvcnkgcGFnZQogCSAqLwotCXB0ZHBnID0gcG1hcF9hbGxvY19w dGVfcGFnZShwbWFwLCBOVVNFUlBHVEJMUywgTV9XQUlUT0ssICZwdGR2YSk7Ci0JaWYgKHB0ZHBn ID09IE5VTEwpCi0JCXJldHVybiAoMCk7CisJd2hpbGUgKChwdGRwZyA9IHBtYXBfYWxsb2NfcHRl X3BhZ2UoTlVTRVJQR1RCTFMsIFZNX0FMTE9DX05PUk1BTCkpID09IE5VTEwpCisJICAgICAgIHBt YXBfZ3Jvd19wdGVfcGFnZV9jYWNoZSgpOwogCisJcHRkdmEgPSBNSVBTX1BIWVNfVE9fS1NFRzAo Vk1fUEFHRV9UT19QSFlTKHB0ZHBnKSk7CiAJcG1hcC0+cG1fc2VndGFiID0gKHBkX2VudHJ5X3Qg KilwdGR2YTsKIAlwbWFwLT5wbV9hY3RpdmUgPSAwOwogCXBtYXAtPnBtX3B0cGhpbnQgPSBOVUxM OwpAQCAtMTA4NiwxNSArMTAwOSwyOCBAQAogCS8qCiAJICogRmluZCBvciBmYWJyaWNhdGUgYSBu ZXcgcGFnZXRhYmxlIHBhZ2UKIAkgKi8KLQltID0gcG1hcF9hbGxvY19wdGVfcGFnZShwbWFwLCBw dGVwaW5kZXgsIGZsYWdzLCAmcHRldmEpOwotCWlmIChtID09IE5VTEwpCisJaWYgKChtID0gcG1h cF9hbGxvY19wdGVfcGFnZShwdGVwaW5kZXgsIFZNX0FMTE9DX05PUk1BTCkpID09IE5VTEwpIHsK KwkJaWYgKGZsYWdzICYgTV9XQUlUT0spIHsKKwkJCVBNQVBfVU5MT0NLKHBtYXApOworCQkJdm1f cGFnZV91bmxvY2tfcXVldWVzKCk7CisJCQlwbWFwX2dyb3dfcHRlX3BhZ2VfY2FjaGUoKTsKKwkJ CXZtX3BhZ2VfbG9ja19xdWV1ZXMoKTsKKwkJCVBNQVBfTE9DSyhwbWFwKTsKKwkJfQorCisJCS8q CisJCSAqIEluZGljYXRlIHRoZSBuZWVkIHRvIHJldHJ5LglXaGlsZSB3YWl0aW5nLCB0aGUgcGFn ZQorCQkgKiB0YWJsZSBwYWdlIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkLgorCQkgKi8KIAkJcmV0 dXJuIChOVUxMKTsKKwl9CiAKIAkvKgogCSAqIE1hcCB0aGUgcGFnZXRhYmxlIHBhZ2UgaW50byB0 aGUgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLCBpZiBpdAogCSAqIGlzbid0IGFscmVhZHkgdGhlcmUu CiAJICovCiAKKwlwdGV2YSA9IE1JUFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobSkp OwogCXBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2NvdW50Kys7CiAJcG1hcC0+cG1fc2VndGFiW3B0 ZXBpbmRleF0gPSAocGRfZW50cnlfdClwdGV2YTsKIApAQCAtMTE5MCw3ICsxMTI2LDcgQEAKIAog CXB0ZHBnLT53aXJlX2NvdW50LS07CiAJYXRvbWljX3N1YnRyYWN0X2ludCgmY250LnZfd2lyZV9j b3VudCwgMSk7Ci0JcG1hcF9yZWxlYXNlX3B0ZV9wYWdlKHB0ZHBnKTsKKwl2bV9wYWdlX2ZyZWVf emVybyhwdGRwZyk7CiAJUE1BUF9MT0NLX0RFU1RST1kocG1hcCk7CiB9CiAKQEAgLTEyMDAsNyAr MTEzNiw2IEBACiB2b2lkCiBwbWFwX2dyb3drZXJuZWwodm1fb2Zmc2V0X3QgYWRkcikKIHsKLQl2 bV9vZmZzZXRfdCBwYWdldmE7CiAJdm1fcGFnZV90IG5rcGc7CiAJcHRfZW50cnlfdCAqcHRlOwog CWludCBpOwpAQCAtMTIzNSwxNCArMTE3MCwxMyBAQAogCQkvKgogCQkgKiBUaGlzIGluZGV4IGlz IGJvZ3VzLCBidXQgb3V0IG9mIHRoZSB3YXkKIAkJICovCi0JCW5rcGcgPSBwbWFwX2FsbG9jX3B0 ZV9wYWdlKGtlcm5lbF9wbWFwLCBua3B0LCBNX05PV0FJVCwgJnBhZ2V2YSk7Ci0KKyAJCW5rcGcg PSBwbWFwX2FsbG9jX3B0ZV9wYWdlKG5rcHQsIFZNX0FMTE9DX0lOVEVSUlVQVCk7CiAJCWlmICgh bmtwZykKIAkJCXBhbmljKCJwbWFwX2dyb3drZXJuZWw6IG5vIG1lbW9yeSB0byBncm93IGtlcm5l bCIpOwogCiAJCW5rcHQrKzsKLQkJcHRlID0gKHB0X2VudHJ5X3QgKilwYWdldmE7Ci0JCXNlZ3Rh Yl9wZGUoa2VybmVsX3NlZ21hcCwga2VybmVsX3ZtX2VuZCkgPSBwdGU7CisgCQlwdGUgPSAocHRf ZW50cnlfdCAqKU1JUFNfUEhZU19UT19LU0VHMChWTV9QQUdFX1RPX1BIWVMobmtwZykpOworICAJ CXNlZ3RhYl9wZGUoa2VybmVsX3NlZ21hcCwga2VybmVsX3ZtX2VuZCkgPSAocGRfZW50cnlfdClw dGU7CiAKIAkJLyoKIAkJICogVGhlIFJbNC03XT8wMCBzdG9yZXMgb25seSBvbmUgY29weSBvZiB0 aGUgR2xvYmFsIGJpdCBpbgpJbmRleDogc3lzL3ZtL3ZtX3BoeXMuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz eXMvdm0vdm1fcGh5cy5jCShyZXZpc2lvbiAyMTAxNTcpCisrKyBzeXMvdm0vdm1fcGh5cy5jCSh3 b3JraW5nIGNvcHkpCkBAIC0zMDEsNDkgKzMwMSw2NyBAQAogdm1fcGFnZV90CiB2bV9waHlzX2Fs bG9jX3BhZ2VzKGludCBwb29sLCBpbnQgb3JkZXIpCiB7CisJdm1fcGFnZV90IG07CisJaW50IGZs aW5kOworCisJZm9yIChmbGluZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykg eworCQltID0gdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhmbGluZCwgcG9vbCwgb3JkZXIp OworCQlpZiAobSAhPSBOVUxMKQorCQkJcmV0dXJuIChtKTsKKwl9CisJcmV0dXJuIChOVUxMKTsK K30KKworLyoKKyAqIEZpbmQgYW5kIGRlcXVldWUgYSBmcmVlIHBhZ2Ugb24gdGhlIGdpdmVuIGZy ZWUgbGlzdCwgd2l0aCB0aGUgCisgKiBzcGVjaWZpZWQgcG9vbCBhbmQgb3JkZXIKKyAqLwordm1f cGFnZV90Cit2bV9waHlzX2FsbG9jX2ZyZWVsaXN0X3BhZ2VzKGludCBmbGluZCwgaW50IHBvb2ws IGludCBvcmRlcikKK3sJCiAJc3RydWN0IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1fZnJl ZWxpc3QgKmFsdDsKLQlpbnQgZmxpbmQsIG9pbmQsIHBpbmQ7CisJaW50IG9pbmQsIHBpbmQ7CiAJ dm1fcGFnZV90IG07CiAKKwlLQVNTRVJUKGZsaW5kIDwgVk1fTkZSRUVMSVNULAorCSAgICAoInZt X3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IGZyZWVsaXN0ICVkIGlzIG91dCBvZiByYW5nZSIs IGZsaW5kKSk7CiAJS0FTU0VSVChwb29sIDwgVk1fTkZSRUVQT09MLAotCSAgICAoInZtX3BoeXNf YWxsb2NfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcG9vbCkpOworCSAgICAoInZt X3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXM6IHBvb2wgJWQgaXMgb3V0IG9mIHJhbmdlIiwgcG9v bCkpOwogCUtBU1NFUlQob3JkZXIgPCBWTV9ORlJFRU9SREVSLAotCSAgICAoInZtX3BoeXNfYWxs b2NfcGFnZXM6IG9yZGVyICVkIGlzIG91dCBvZiByYW5nZSIsIG9yZGVyKSk7CisJICAgICgidm1f cGh5c19hbGxvY19mcmVlbGlzdF9wYWdlczogb3JkZXIgJWQgaXMgb3V0IG9mIHJhbmdlIiwgb3Jk ZXIpKTsKIAltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4LCBNQV9PV05FRCk7Ci0J Zm9yIChmbGluZCA9IDA7IGZsaW5kIDwgdm1fbmZyZWVsaXN0czsgZmxpbmQrKykgewotCQlmbCA9 IHZtX3BoeXNfZnJlZV9xdWV1ZXNbZmxpbmRdW3Bvb2xdOwotCQlmb3IgKG9pbmQgPSBvcmRlcjsg b2luZCA8IFZNX05GUkVFT1JERVI7IG9pbmQrKykgewotCQkJbSA9IFRBSUxRX0ZJUlNUKCZmbFtv aW5kXS5wbCk7CisJZmwgPSB2bV9waHlzX2ZyZWVfcXVldWVzW2ZsaW5kXVtwb29sXTsKKwlmb3Ig KG9pbmQgPSBvcmRlcjsgb2luZCA8IFZNX05GUkVFT1JERVI7IG9pbmQrKykgeworCQltID0gVEFJ TFFfRklSU1QoJmZsW29pbmRdLnBsKTsKKwkJaWYgKG0gIT0gTlVMTCkgeworCQkJVEFJTFFfUkVN T1ZFKCZmbFtvaW5kXS5wbCwgbSwgcGFnZXEpOworCQkJZmxbb2luZF0ubGNudC0tOworCQkJbS0+ b3JkZXIgPSBWTV9ORlJFRU9SREVSOworCQkJdm1fcGh5c19zcGxpdF9wYWdlcyhtLCBvaW5kLCBm bCwgb3JkZXIpOworCQkJcmV0dXJuIChtKTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGdpdmVu IHBvb2wgd2FzIGVtcHR5LiAgRmluZCB0aGUgbGFyZ2VzdAorCSAqIGNvbnRpZ3VvdXMsIHBvd2Vy LW9mLXR3by1zaXplZCBzZXQgb2YgcGFnZXMgaW4gYW55CisJICogcG9vbC4gIFRyYW5zZmVyIHRo ZXNlIHBhZ2VzIHRvIHRoZSBnaXZlbiBwb29sLCBhbmQKKwkgKiB1c2UgdGhlbSB0byBzYXRpc2Z5 IHRoZSBhbGxvY2F0aW9uLgorCSAqLworCWZvciAob2luZCA9IFZNX05GUkVFT1JERVIgLSAxOyBv aW5kID49IG9yZGVyOyBvaW5kLS0pIHsKKwkJZm9yIChwaW5kID0gMDsgcGluZCA8IFZNX05GUkVF UE9PTDsgcGluZCsrKSB7CisJCQlhbHQgPSB2bV9waHlzX2ZyZWVfcXVldWVzW2ZsaW5kXVtwaW5k XTsKKwkJCW0gPSBUQUlMUV9GSVJTVCgmYWx0W29pbmRdLnBsKTsKIAkJCWlmIChtICE9IE5VTEwp IHsKLQkJCQlUQUlMUV9SRU1PVkUoJmZsW29pbmRdLnBsLCBtLCBwYWdlcSk7Ci0JCQkJZmxbb2lu ZF0ubGNudC0tOworCQkJCVRBSUxRX1JFTU9WRSgmYWx0W29pbmRdLnBsLCBtLCBwYWdlcSk7CisJ CQkJYWx0W29pbmRdLmxjbnQtLTsKIAkJCQltLT5vcmRlciA9IFZNX05GUkVFT1JERVI7CisJCQkJ dm1fcGh5c19zZXRfcG9vbChwb29sLCBtLCBvaW5kKTsKIAkJCQl2bV9waHlzX3NwbGl0X3BhZ2Vz KG0sIG9pbmQsIGZsLCBvcmRlcik7CiAJCQkJcmV0dXJuIChtKTsKIAkJCX0KIAkJfQotCi0JCS8q Ci0JCSAqIFRoZSBnaXZlbiBwb29sIHdhcyBlbXB0eS4gIEZpbmQgdGhlIGxhcmdlc3QKLQkJICog Y29udGlndW91cywgcG93ZXItb2YtdHdvLXNpemVkIHNldCBvZiBwYWdlcyBpbiBhbnkKLQkJICog cG9vbC4gIFRyYW5zZmVyIHRoZXNlIHBhZ2VzIHRvIHRoZSBnaXZlbiBwb29sLCBhbmQKLQkJICog dXNlIHRoZW0gdG8gc2F0aXNmeSB0aGUgYWxsb2NhdGlvbi4KLQkJICovCi0JCWZvciAob2luZCA9 IFZNX05GUkVFT1JERVIgLSAxOyBvaW5kID49IG9yZGVyOyBvaW5kLS0pIHsKLQkJCWZvciAocGlu ZCA9IDA7IHBpbmQgPCBWTV9ORlJFRVBPT0w7IHBpbmQrKykgewotCQkJCWFsdCA9IHZtX3BoeXNf ZnJlZV9xdWV1ZXNbZmxpbmRdW3BpbmRdOwotCQkJCW0gPSBUQUlMUV9GSVJTVCgmYWx0W29pbmRd LnBsKTsKLQkJCQlpZiAobSAhPSBOVUxMKSB7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmYWx0W29pbmRd LnBsLCBtLCBwYWdlcSk7Ci0JCQkJCWFsdFtvaW5kXS5sY250LS07Ci0JCQkJCW0tPm9yZGVyID0g Vk1fTkZSRUVPUkRFUjsKLQkJCQkJdm1fcGh5c19zZXRfcG9vbChwb29sLCBtLCBvaW5kKTsKLQkJ CQkJdm1fcGh5c19zcGxpdF9wYWdlcyhtLCBvaW5kLCBmbCwgb3JkZXIpOwotCQkJCQlyZXR1cm4g KG0pOwotCQkJCX0KLQkJCX0KLQkJfQogCX0KIAlyZXR1cm4gKE5VTEwpOwogfQpAQCAtNTkyLDcg KzYxMCw3IEBACiB7CiAJc3RydWN0IHZtX2ZyZWVsaXN0ICpmbDsKIAlzdHJ1Y3Qgdm1fcGh5c19z ZWcgKnNlZzsKLQl2bV9vYmplY3RfdCBtX29iamVjdDsKKwlzdHJ1Y3Qgdm5vZGUgKnZwOwogCXZt X3BhZGRyX3QgcGEsIHBhX2xhc3QsIHNpemU7CiAJdm1fcGFnZV90IGRlZmVycmVkX3Zkcm9wX2xp c3QsIG0sIG1fcmV0OwogCWludCBmbGluZCwgaSwgb2luZCwgb3JkZXIsIHBpbmQ7CkBAIC02ODcs NTAgKzcwNSwxOSBAQAogCXZtX3BoeXNfc3BsaXRfcGFnZXMobV9yZXQsIG9pbmQsIGZsLCBvcmRl cik7CiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CiAJCW0gPSAmbV9yZXRbaV07Ci0J CUtBU1NFUlQobS0+cXVldWUgPT0gUFFfTk9ORSwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250 aWc6IHBhZ2UgJXAgaGFzIHVuZXhwZWN0ZWQgcXVldWUgJWQiLAotCQkgICAgbSwgbS0+cXVldWUp KTsKLQkJS0FTU0VSVChtLT53aXJlX2NvdW50ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2Nf Y29udGlnOiBwYWdlICVwIGlzIHdpcmVkIiwgbSkpOwotCQlLQVNTRVJUKG0tPmhvbGRfY291bnQg PT0gMCwKLQkJICAgICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgaGVsZCIsIG0p KTsKLQkJS0FTU0VSVChtLT5idXN5ID09IDAsCi0JCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGln OiBwYWdlICVwIGlzIGJ1c3kiLCBtKSk7Ci0JCUtBU1NFUlQobS0+ZGlydHkgPT0gMCwKLQkJICAg ICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaXMgZGlydHkiLCBtKSk7Ci0JCUtBU1NF UlQocG1hcF9wYWdlX2dldF9tZW1hdHRyKG0pID09IFZNX01FTUFUVFJfREVGQVVMVCwKLQkJICAg ICgidm1fcGh5c19hbGxvY19jb250aWc6IHBhZ2UgJXAgaGFzIHVuZXhwZWN0ZWQgbWVtYXR0ciAl ZCIsCi0JCSAgICBtLCBwbWFwX3BhZ2VfZ2V0X21lbWF0dHIobSkpKTsKLQkJaWYgKChtLT5mbGFn cyAmIFBHX0NBQ0hFRCkgIT0gMCkgewotCQkJbS0+dmFsaWQgPSAwOwotCQkJbV9vYmplY3QgPSBt LT5vYmplY3Q7Ci0JCQl2bV9wYWdlX2NhY2hlX3JlbW92ZShtKTsKLQkJCWlmIChtX29iamVjdC0+ dHlwZSA9PSBPQkpUX1ZOT0RFICYmCi0JCQkgICAgbV9vYmplY3QtPmNhY2hlID09IE5VTEwpIHsK LQkJCQkvKgotCQkJCSAqIEVucXVldWUgdGhlIHZub2RlIGZvciBkZWZlcnJlZCB2ZHJvcCgpLgot CQkJCSAqCi0JCQkJICogVW5tYW5hZ2VkIHBhZ2VzIGRvbid0IHVzZSAicGFnZXEiLCBzbyBpdAot CQkJCSAqIGNhbiBiZSBzYWZlbHkgYWJ1c2VkIHRvIGNvbnN0cnVjdCBhIHNob3J0LQotCQkJCSAq IGxpdmVkIHF1ZXVlIG9mIHZub2Rlcy4KLQkJCQkgKi8KLQkJCQltLT5wYWdlcS50cWVfcHJldiA9 IG1fb2JqZWN0LT5oYW5kbGU7Ci0JCQkJbS0+cGFnZXEudHFlX25leHQgPSBkZWZlcnJlZF92ZHJv cF9saXN0OwotCQkJCWRlZmVycmVkX3Zkcm9wX2xpc3QgPSBtOwotCQkJfQotCQl9IGVsc2Ugewot CQkJS0FTU0VSVChWTV9QQUdFX0lTX0ZSRUUobSksCi0JCQkgICAgKCJ2bV9waHlzX2FsbG9jX2Nv bnRpZzogcGFnZSAlcCBpcyBub3QgZnJlZSIsIG0pKTsKLQkJCUtBU1NFUlQobS0+dmFsaWQgPT0g MCwKLQkJCSAgICAoInZtX3BoeXNfYWxsb2NfY29udGlnOiBmcmVlIHBhZ2UgJXAgaXMgdmFsaWQi LCBtKSk7Ci0JCQljbnQudl9mcmVlX2NvdW50LS07CisJCXZtX3BhZ2VfYWxsb2NfaW5pdChtLCAm dnApOworCQlpZiAodnAgIT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIEVucXVldWUgdGhlIHZub2Rl IGZvciBkZWZlcnJlZCB2ZHJvcCgpLgorCQkJICoKKwkJCSAqIFVubWFuYWdlZCBwYWdlcyBkb24n dCB1c2UgInBhZ2VxIiwgc28gaXQKKwkJCSAqIGNhbiBiZSBzYWZlbHkgYWJ1c2VkIHRvIGNvbnN0 cnVjdCBhIHNob3J0LQorCQkJICogbGl2ZWQgcXVldWUgb2Ygdm5vZGVzLgorCQkJICovCisJCQlt LT5wYWdlcS50cWVfcHJldiA9ICh2b2lkICopdnA7CisJCQltLT5wYWdlcS50cWVfbmV4dCA9IGRl ZmVycmVkX3Zkcm9wX2xpc3Q7CisJCQlkZWZlcnJlZF92ZHJvcF9saXN0ID0gbTsKIAkJfQotCQlp ZiAobS0+ZmxhZ3MgJiBQR19aRVJPKQotCQkJdm1fcGFnZV96ZXJvX2NvdW50LS07Ci0JCS8qIERv bid0IGNsZWFyIHRoZSBQR19aRVJPIGZsYWc7IHdlJ2xsIG5lZWQgaXQgbGF0ZXIuICovCi0JCW0t PmZsYWdzID0gUEdfVU5NQU5BR0VEIHwgKG0tPmZsYWdzICYgUEdfWkVSTyk7Ci0JCW0tPm9mbGFn cyA9IDA7Ci0JCS8qIFVubWFuYWdlZCBwYWdlcyBkb24ndCB1c2UgImFjdF9jb3VudCIuICovCiAJ fQogCWZvciAoOyBpIDwgcm91bmR1cDIobnBhZ2VzLCAxIDw8IGltaW4ob2luZCwgb3JkZXIpKTsg aSsrKSB7CiAJCW0gPSAmbV9yZXRbaV07CkluZGV4OiBzeXMvdm0vdm1fcGh5cy5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHN5cy92bS92bV9waHlzLmgJKHJldmlzaW9uIDIxMDE1NykKKysrIHN5cy92bS92bV9w aHlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICB2bV9wYWRkcl90IGxv dywgdm1fcGFkZHJfdCBoaWdoLAogICAgIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50LCB1bnNpZ25l ZCBsb25nIGJvdW5kYXJ5KTsKIHZtX3BhZ2VfdCB2bV9waHlzX2FsbG9jX3BhZ2VzKGludCBwb29s LCBpbnQgb3JkZXIpOwordm1fcGFnZV90IHZtX3BoeXNfYWxsb2NfZnJlZWxpc3RfcGFnZXMoaW50 IGZsaW5kLCBpbnQgcG9vbCwgaW50IG9yZGVyKTsKIHZtX3BhZGRyX3Qgdm1fcGh5c19ib290c3Ry YXBfYWxsb2Modm1fc2l6ZV90IHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50KTsKIHZvaWQg dm1fcGh5c19mcmVlX3BhZ2VzKHZtX3BhZ2VfdCBtLCBpbnQgb3JkZXIpOwogdm9pZCB2bV9waHlz X2luaXQodm9pZCk7CkluZGV4OiBzeXMvdm0vdm1fcGFnZS5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy92 bS92bV9wYWdlLmMJKHJldmlzaW9uIDIxMDE1NykKKysrIHN5cy92bS92bV9wYWdlLmMJKHdvcmtp bmcgY29weSkKQEAgLTEzNTUsNiArMTM1NSw5MyBAQAogfQogCiAvKgorICogSW5pdGlhbGl6ZSBh IHBhZ2UgdGhhdCBoYXMgYmVlbiBmcmVzaGx5IGRlcXVldWVkIGZyb20gYSBmcmVlbGlzdC4KKyAq IFRoZSBjYWxsZXIgaGFzIHRvIGRyb3AgdGhlIHZub2RlIHJldHVuZWQgaW4gZHJvcCwgaWYgaXQg aXMgbm90IE5VTEwuCisgKgorICogVG8gYmUgY2FsbGVkIHdpdGggdm1fcGFnZV9xdWV1ZV9mcmVl X210eCBoZWxkLgorICovCit2b2lkCit2bV9wYWdlX2FsbG9jX2luaXQodm1fcGFnZV90IG0sIHN0 cnVjdCB2bm9kZSAqKmRyb3ApCit7CisJdm1fb2JqZWN0X3QgbV9vYmplY3Q7CisKKwlLQVNTRVJU KG0tPnF1ZXVlID09IFBRX05PTkUsCisJICAgICgidm1fcGFnZV9hbGxvY19pbml0OiBwYWdlICVw IGhhcyB1bmV4cGVjdGVkIHF1ZXVlICVkIiwKKwkgICAgbSwgbS0+cXVldWUpKTsKKwlLQVNTRVJU KG0tPndpcmVfY291bnQgPT0gMCwKKwkgICAgKCJ2bV9wYWdlX2FsbG9jX2luaXQ6IHBhZ2UgJXAg aXMgd2lyZWQiLCBtKSk7CisJS0FTU0VSVChtLT5ob2xkX2NvdW50ID09IDAsCisJICAgICgidm1f cGFnZV9hbGxvY19pbml0OiBwYWdlICVwIGlzIGhlbGQiLCBtKSk7CisJS0FTU0VSVChtLT5idXN5 ID09IDAsCisJICAgICgidm1fcGFnZV9hbGxvY19pbml0OiBwYWdlICVwIGlzIGJ1c3kiLCBtKSk7 CisJS0FTU0VSVChtLT5kaXJ0eSA9PSAwLAorCSAgICAoInZtX3BhZ2VfYWxsb2NfaW5pdDogcGFn ZSAlcCBpcyBkaXJ0eSIsIG0pKTsKKwlLQVNTRVJUKHBtYXBfcGFnZV9nZXRfbWVtYXR0cihtKSA9 PSBWTV9NRU1BVFRSX0RFRkFVTFQsCisJICAgICgidm1fcGFnZV9hbGxvY19pbml0OiBwYWdlICVw IGhhcyB1bmV4cGVjdGVkIG1lbWF0dHIgJWQiLAorCSAgICBtLCBwbWFwX3BhZ2VfZ2V0X21lbWF0 dHIobSkpKTsKKwltdHhfYXNzZXJ0KCZ2bV9wYWdlX3F1ZXVlX2ZyZWVfbXR4LCBNQV9PV05FRCk7 CisJKmRyb3AgPSBOVUxMOworCWlmICgobS0+ZmxhZ3MgJiBQR19DQUNIRUQpICE9IDApIHsKKwkJ bS0+dmFsaWQgPSAwOworCQltX29iamVjdCA9IG0tPm9iamVjdDsKKwkJdm1fcGFnZV9jYWNoZV9y ZW1vdmUobSk7CisJCWlmIChtX29iamVjdC0+dHlwZSA9PSBPQkpUX1ZOT0RFICYmCisJCSAgICBt X29iamVjdC0+Y2FjaGUgPT0gTlVMTCkKKwkJCSpkcm9wID0gbV9vYmplY3QtPmhhbmRsZTsKKwl9 IGVsc2UgeworCQlLQVNTRVJUKFZNX1BBR0VfSVNfRlJFRShtKSwKKwkJICAgICgidm1fcGFnZV9h bGxvY19pbml0OiBwYWdlICVwIGlzIG5vdCBmcmVlIiwgbSkpOworCQlLQVNTRVJUKG0tPnZhbGlk ID09IDAsCisJCSAgICAoInZtX3BhZ2VfYWxsb2NfaW5pdDogZnJlZSBwYWdlICVwIGlzIHZhbGlk IiwgbSkpOworCQljbnQudl9mcmVlX2NvdW50LS07CisJfQorCWlmIChtLT5mbGFncyAmIFBHX1pF Uk8pCisJCXZtX3BhZ2VfemVyb19jb3VudC0tOworCS8qIERvbid0IGNsZWFyIHRoZSBQR19aRVJP IGZsYWc7IHdlJ2xsIG5lZWQgaXQgbGF0ZXIuICovCisJbS0+ZmxhZ3MgPSBQR19VTk1BTkFHRUQg fCAobS0+ZmxhZ3MgJiBQR19aRVJPKTsKKwltLT5vZmxhZ3MgPSAwOworCS8qIFVubWFuYWdlZCBw YWdlcyBkb24ndCB1c2UgImFjdF9jb3VudCIuICovCit9CisKKy8qCisgKiAJdm1fcGFnZV9hbGxv Y19mcmVlbGlzdDoKKyAqIAorICoJQWxsb2NhdGUgYSBwYWdlIGZyb20gdGhlIHNwZWNpZmllZCBm cmVlbGlzdCB3aXRoIHNwZWNpZmllZCBvcmRlci4KKyAqCU9ubHkgdGhlIEFMTE9DX0NMQVNTIHZh bHVlcyBpbiByZXEgYXJlIGhvbm9yZWQsIG90aGVyIHJlcXVlc3QgZmxhZ3MKKyAqCWFyZSBpZ25v cmVkLgorICovCit2bV9wYWdlX3QKK3ZtX3BhZ2VfYWxsb2NfZnJlZWxpc3QoaW50IGZsaW5kLCBp bnQgb3JkZXIsIGludCByZXEpCit7CisJc3RydWN0IHZub2RlICpkcm9wOworCXZtX3BhZ2VfdCBt OworCWludCBwYWdlX3JlcTsKKworCW0gPSBOVUxMOworCXBhZ2VfcmVxID0gcmVxICYgVk1fQUxM T0NfQ0xBU1NfTUFTSzsKKwltdHhfbG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJLyoK KwkgKiBEbyBub3QgYWxsb2NhdGUgcmVzZXJ2ZWQgcGFnZXMgdW5sZXNzIHRoZSByZXEgaGFzIGFz a2VkIGZvciBpdAorCSAqLworCWlmIChjbnQudl9mcmVlX2NvdW50ICsgY250LnZfY2FjaGVfY291 bnQgPiBjbnQudl9mcmVlX3Jlc2VydmVkIHx8CisJICAgIChwYWdlX3JlcSA9PSBWTV9BTExPQ19T WVNURU0gJiYgCisJICAgIGNudC52X2ZyZWVfY291bnQgKyBjbnQudl9jYWNoZV9jb3VudCA+IGNu dC52X2ludGVycnVwdF9mcmVlX21pbikgfHwKKwkgICAgKHBhZ2VfcmVxID09IFZNX0FMTE9DX0lO VEVSUlVQVCAmJgorCSAgICBjbnQudl9mcmVlX2NvdW50ICsgY250LnZfY2FjaGVfY291bnQgPiAw KSkgeworCQltID0gdm1fcGh5c19hbGxvY19mcmVlbGlzdF9wYWdlcyhmbGluZCwgVk1fRlJFRVBP T0xfRElSRUNULCBvcmRlcik7CisJfQorCWlmIChtID09IE5VTEwpIHsKKwkJbXR4X3VubG9jaygm dm1fcGFnZV9xdWV1ZV9mcmVlX210eCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXZtX3BhZ2Vf YWxsb2NfaW5pdChtLCAmZHJvcCk7CisJbXR4X3VubG9jaygmdm1fcGFnZV9xdWV1ZV9mcmVlX210 eCk7CisJaWYgKGRyb3ApCisJCXZkcm9wKGRyb3ApOworCXJldHVybiAobSk7Cit9CisKKy8qCiAg Kgl2bV93YWl0OgkoYWxzbyBzZWUgVk1fV0FJVCBtYWNybykKICAqCiAgKglCbG9jayB1bnRpbCBm cmVlIHBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24KSW5kZXg6IHN5cy92bS92bV9w YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc3lzL3ZtL3ZtX3BhZ2UuaAkocmV2aXNpb24gMjEwMTU3KQor Kysgc3lzL3ZtL3ZtX3BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBACiAg KgogICovCiAKK3N0cnVjdCB2bm9kZTsKIGV4dGVybiBpbnQgdm1fcGFnZV96ZXJvX2NvdW50Owog CiBleHRlcm4gdm1fcGFnZV90IHZtX3BhZ2VfYXJyYXk7CQkvKiBGaXJzdCByZXNpZGVudCBwYWdl IGluIHRhYmxlICovCkBAIC0zMzksNiArMzQwLDggQEAKIAogdm9pZCB2bV9wYWdlX2FjdGl2YXRl ICh2bV9wYWdlX3QpOwogdm1fcGFnZV90IHZtX3BhZ2VfYWxsb2MgKHZtX29iamVjdF90LCB2bV9w aW5kZXhfdCwgaW50KTsKK3ZtX3BhZ2VfdCB2bV9wYWdlX2FsbG9jX2ZyZWVsaXN0KGludCwgaW50 LCBpbnQpOwordm9pZCB2bV9wYWdlX2FsbG9jX2luaXQgKHZtX3BhZ2VfdCwgc3RydWN0IHZub2Rl ICoqKTsKIHZtX3BhZ2VfdCB2bV9wYWdlX2dyYWIgKHZtX29iamVjdF90LCB2bV9waW5kZXhfdCwg aW50KTsKIHZvaWQgdm1fcGFnZV9jYWNoZSh2bV9wYWdlX3QpOwogdm9pZCB2bV9wYWdlX2NhY2hl X2ZyZWUodm1fb2JqZWN0X3QsIHZtX3BpbmRleF90LCB2bV9waW5kZXhfdCk7Cg== --0014853d013085a1e1048bb84c56--