From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8F6F1C433EF for ; Wed, 18 May 2022 03:04:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=ejTbLsvE3q2kaeeJPDbundWIJ2vbLQABBEDpSfDEuyI=; b=KAGHOEBXaVUzQ5ff6f6vNpi+Fp z8crkvQwZ3vahOOxpyu+9iJ+1r0pf2bZRb65u/b8279lpL+ramG9Mf+IHCbbGraKSJN8293okOdvw Poa7/OXVzSiyTIY2EG9Ur9hb9VtNQ06fzOjsmKFI16l8GG6Mc7drQsBfnyPKDN2rcdiS0s5oPsFlZ 73LFIPZid+OIKqDfmJYe2h+uDoWmHLpMC4vtbWm3U0nhtRxYUfT15UqoyWCNmBGURJl7nEBjENCLM QYB9QgLKmZqYjSBTKCbkUJ7AoH37ndxh+sfjSg/tGsOqxyBA9yzA+On8f0QgvgEBae2EfRVQwBVyG ztlhzuhQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9xG-00GmgN-CF; Wed, 18 May 2022 03:02:30 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9wb-00GmIb-6J for linux-arm-kernel@bombadil.infradead.org; Wed, 18 May 2022 03:01:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :Cc:To:From:Subject:References:Mime-Version:Message-Id:In-Reply-To:Date: Sender:Reply-To:Content-ID:Content-Description; bh=PTjd11WATlmfbdtQhfK897D7nFONbou6umNurqc2JZY=; b=bAvv+HJBu9EDsPiJHlyE+DFlhm XOl9VGQ5eAruC/fIg+UdPxv7PtrBPMYytXQk/7remMiOUn+3Q8tHBJ93al4a21ufWVMfAidvcMb0U MmYxqqJfzSodb74MzSzJyaDX28A/3H+0LZ9JpFScoVh2VGxcDEuif//UreWfbm7lFc1f18vgG/QCu 8gLLBh8RbO76guRkdZXSum96YzYPUjkldsn/Awl4W6tZ80vPlRG5B1J7F0xuxgqiWKqAdqovnWpj3 exKXIszC0Xus42YX0WyjQtSFQ4d7EgnKa8A/5beyEPmUXc5mtU9JXWqcSxeBfqu0VrvpURNjgO2e/ MICMbR+g==; Received: from mail-io1-xd49.google.com ([2607:f8b0:4864:20::d49]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr8mK-001Owv-6p for linux-arm-kernel@lists.infradead.org; Wed, 18 May 2022 01:47:14 +0000 Received: by mail-io1-xd49.google.com with SMTP id l9-20020a0566022dc900b0065df0aa8372so7632957iow.6 for ; Tue, 17 May 2022 18:47:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=PTjd11WATlmfbdtQhfK897D7nFONbou6umNurqc2JZY=; b=k7gwiy9FkEGpQ2cJPTc0CqF7ZhNg9eIRssfySwAeqT/QU/pZu+xcBXpGXhY16eEC+g /9Y5TExpblTU8rZxzrfxyJ0Pyp63osrSRKn7w1RqllWPKoCfe0jyvnQj750nWh4yCSbe sUmYDTC4lVmOF8FJ0kxkgu+JYIGx8+6CNwahInKDUuJAwLGt5ZfxrR4Vj4Sx9x8x/sMe 8TvShq4s8bgIUvnBrzYOcCAAtVrfihqujQxwPxxUkwhGmShdFsLP04seFDkfIXe96ojc otj7kBAULxcPC4x/i4YynKdyvxmVqOBb3oXTOb22VbGG2qfhystG6v09y15F+VCiEPxW qqOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=PTjd11WATlmfbdtQhfK897D7nFONbou6umNurqc2JZY=; b=xkM0NWjQ9fA+yJqTR+mC1ShIF9r4Ar1vXSHXc8jweIHGfvrzb+1IGLf0wlaJ0YLr6O IgVcNHQyQllz99gJiVhF5nHDOZ4Hv/t9fl2x1iOROsgpgQbL7IFPAfnzlQ6v/Gop1Ich 8l/WJN18olloy95cwlZI4LSt/NOJGAtPQ8XHm71kRClboBU43m5pYma+W8k0gTo4zXf6 U/v78GghSCmNuVsKrCXmcQ24fAON0pWXc3Fz7D25y4xPN8Xyd/fpT7LfLZF2UPprEyXk BRABRDNg8KrQaK+qWAdq3QEMSVD+56Dr21bwyUSCIsA5uAw5+2QZdwSIbSmLZ+U1Eopw TxWg== X-Gm-Message-State: AOAM5310/tl575uyUA0lizIj7Kr3W0DKcT8UAhtvuyCOCiaDgXcAjlNm qllqfvs3oBEfz7ezUQ6zbVzJXP3N4hE= X-Google-Smtp-Source: ABdhPJwk7Q4yUGqMOHyNREY9VJxifZTmzumohbyC4Q4FMtnQ2dLXH+B7ANRAGX4eThrtnxmA9J5/iIetGTw= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:f7bc:90c9:d86e:4ea8]) (user=yuzhao job=sendgmr) by 2002:a05:6602:2f06:b0:65a:cfe5:1778 with SMTP id q6-20020a0566022f0600b0065acfe51778mr11310389iow.192.1652838425868; Tue, 17 May 2022 18:47:05 -0700 (PDT) Date: Tue, 17 May 2022 19:46:27 -0600 In-Reply-To: <20220518014632.922072-1-yuzhao@google.com> Message-Id: <20220518014632.922072-9-yuzhao@google.com> Mime-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> X-Mailer: git-send-email 2.36.0.550.gb090851708-goog Subject: [PATCH v11 08/14] mm: multi-gen LRU: support page table walks From: Yu Zhao To: Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, Yu Zhao , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220518_024709_296016_177F960C X-CRM114-Status: GOOD ( 34.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VG8gZnVydGhlciBleHBsb2l0IHNwYXRpYWwgbG9jYWxpdHksIHRoZSBhZ2luZyBwcmVmZXJzIHRv IHdhbGsgcGFnZQp0YWJsZXMgdG8gc2VhcmNoIGZvciB5b3VuZyBQVEVzIGFuZCBwcm9tb3RlIGhv dCBwYWdlcy4gQSBraWxsIHN3aXRjaAp3aWxsIGJlIGFkZGVkIGluIHRoZSBuZXh0IHBhdGNoIHRv IGRpc2FibGUgdGhpcyBiZWhhdmlvci4gV2hlbgpkaXNhYmxlZCwgdGhlIGFnaW5nIHJlbGllcyBv biB0aGUgcm1hcCBvbmx5LgoKTkI6IHRoaXMgYmVoYXZpb3IgaGFzIG5vdGhpbmcgc2ltaWxhciB3 aXRoIHRoZSBwYWdlIHRhYmxlIHNjYW5uaW5nIGluCnRoZSAyLjQga2VybmVsIFsxXSwgd2hpY2gg c2VhcmNoZXMgcGFnZSB0YWJsZXMgZm9yIG9sZCBQVEVzLCBhZGRzIGNvbGQKcGFnZXMgdG8gc3dh cGNhY2hlIGFuZCB1bm1hcHMgdGhlbS4KClRvIGF2b2lkIGNvbmZ1c2lvbiwgdGhlIHRlcm0gIml0 ZXJhdGlvbiIgc3BlY2lmaWNhbGx5IG1lYW5zIHRoZQp0cmF2ZXJzYWwgb2YgYW4gZW50aXJlIG1t X3N0cnVjdCBsaXN0OyB0aGUgdGVybSAid2FsayIgd2lsbCBiZSBhcHBsaWVkCnRvIHBhZ2UgdGFi bGVzIGFuZCB0aGUgcm1hcCwgYXMgdXN1YWwuCgpBbiBtbV9zdHJ1Y3QgbGlzdCBpcyBtYWludGFp bmVkIGZvciBlYWNoIG1lbWNnLCBhbmQgYW4gbW1fc3RydWN0CmZvbGxvd3MgaXRzIG93bmVyIHRh c2sgdG8gdGhlIG5ldyBtZW1jZyB3aGVuIHRoaXMgdGFzayBpcyBtaWdyYXRlZC4KR2l2ZW4gYW4g bHJ1dmVjLCB0aGUgYWdpbmcgaXRlcmF0ZXMgbHJ1dmVjX21lbWNnKCktPm1tX2xpc3QgYW5kIGNh bGxzCndhbGtfcGFnZV9yYW5nZSgpIHdpdGggZWFjaCBtbV9zdHJ1Y3Qgb24gdGhpcyBsaXN0IHRv IHByb21vdGUgaG90CnBhZ2VzIGJlZm9yZSBpdCBpbmNyZW1lbnRzIG1heF9zZXEuCgpXaGVuIG11 bHRpcGxlIHBhZ2UgdGFibGUgd2Fsa2VycyBpdGVyYXRlIHRoZSBzYW1lIGxpc3QsIGVhY2ggb2Yg dGhlbQpnZXRzIGEgdW5pcXVlIG1tX3N0cnVjdDsgdGhlcmVmb3JlIHRoZXkgY2FuIHJ1biBjb25j dXJyZW50bHkuIFBhZ2UKdGFibGUgd2Fsa2VycyBpZ25vcmUgYW55IG1pc3BsYWNlZCBwYWdlcywg ZS5nLiwgaWYgYW4gbW1fc3RydWN0IHdhcwptaWdyYXRlZCwgcGFnZXMgaXQgbGVmdCBpbiB0aGUg cHJldmlvdXMgbWVtY2cgd2lsbCBub3QgYmUgcHJvbW90ZWQKd2hlbiBpdHMgY3VycmVudCBtZW1j ZyBpcyB1bmRlciByZWNsYWltLiBTaW1pbGFybHksIHBhZ2UgdGFibGUgd2Fsa2Vycwp3aWxsIG5v dCBwcm9tb3RlIHBhZ2VzIGZyb20gbm9kZXMgb3RoZXIgdGhhbiB0aGUgb25lIHVuZGVyIHJlY2xh aW0uCgpUaGlzIHBhdGNoIHVzZXMgdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb25zIHdoZW4gd2Fs a2luZyBwYWdlIHRhYmxlczoKMS4gSXQgdHJhY2tzIHRoZSB1c2FnZSBvZiBtbV9zdHJ1Y3QncyBi ZXR3ZWVuIGNvbnRleHQgc3dpdGNoZXMgc28gdGhhdAogICBwYWdlIHRhYmxlIHdhbGtlcnMgY2Fu IHNraXAgcHJvY2Vzc2VzIHRoYXQgaGF2ZSBiZWVuIHNsZWVwaW5nIHNpbmNlCiAgIHRoZSBsYXN0 IGl0ZXJhdGlvbi4KMi4gSXQgdXNlcyBnZW5lcmF0aW9uYWwgQmxvb20gZmlsdGVycyB0byByZWNv cmQgcG9wdWxhdGVkIGJyYW5jaGVzIHNvCiAgIHRoYXQgcGFnZSB0YWJsZSB3YWxrZXJzIGNhbiBy ZWR1Y2UgdGhlaXIgc2VhcmNoIHNwYWNlIGJhc2VkIG9uIHRoZQogICBxdWVyeSByZXN1bHRzLCBl LmcuLCB0byBza2lwIHBhZ2UgdGFibGVzIGNvbnRhaW5pbmcgbW9zdGx5IGhvbGVzIG9yCiAgIG1p c3BsYWNlZCBwYWdlcy4KMy4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBhY2Nlc3NlZCBiaXQg aW4gbm9uLWxlYWYgUE1EIGVudHJpZXMgd2hlbgogICBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9Q TURfWU9VTkc9eS4KNC4gSXQgZG9lcyBub3QgemlnemFnIGJldHdlZW4gYSBQR0QgdGFibGUgYW5k IHRoZSBzYW1lIFBNRCB0YWJsZQogICBzcGFubmluZyBtdWx0aXBsZSBWTUFzLiBJT1csIGl0IGZp bmlzaGVzIGFsbCB0aGUgVk1BcyB3aXRoaW4gdGhlCiAgIHJhbmdlIG9mIHRoZSBzYW1lIFBNRCB0 YWJsZSBiZWZvcmUgaXQgcmV0dXJucyB0byBhIFBHRCB0YWJsZS4gVGhpcwogICBpbXByb3ZlcyB0 aGUgY2FjaGUgcGVyZm9ybWFuY2UgZm9yIHdvcmtsb2FkcyB0aGF0IGhhdmUgbGFyZ2UKICAgbnVt YmVycyBvZiB0aW55IFZNQXMgWzJdLCBlc3BlY2lhbGx5IHdoZW4gQ09ORklHX1BHVEFCTEVfTEVW RUxTPTUuCgpTZXJ2ZXIgYmVuY2htYXJrIHJlc3VsdHM6CiAgU2luZ2xlIHdvcmtsb2FkOgogICAg ZmlvIChidWZmZXJlZCBJL08pOiBubyBjaGFuZ2UKCiAgU2luZ2xlIHdvcmtsb2FkOgogICAgbWVt Y2FjaGVkIChhbm9uKTogK1s4LCAxMF0lCiAgICAgICAgICAgICAgICBPcHMvc2VjICAgICAgS0Iv c2VjCiAgICAgIHBhdGNoMS03OiAxMTkzOTE4LjkzICAgNDY0MzguMTUKICAgICAgcGF0Y2gxLTg6 IDEzMDE5NTQuNDQgICA1MDY0MC4yNwoKICBDb25maWd1cmF0aW9uczoKICAgIG5vIGNoYW5nZQoK Q2xpZW50IGJlbmNobWFyayByZXN1bHRzOgogIGtzd2FwZCBwcm9maWxlczoKICAgIHBhdGNoMS03 CiAgICAgIDQ1LjkwJSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAgICAgOS4x NCUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgICA2LjgxJSAgX3Jhd19zcGluX3VubG9ja19p cnEKICAgICAgIDIuODAlICBwdGVwX2NsZWFyX2ZsdXNoCiAgICAgICAyLjM0JSAgX196cmFtX2J2 ZWNfd3JpdGUKICAgICAgIDIuMjklICBkb19yYXdfc3Bpbl9sb2NrCiAgICAgICAxLjg0JSAgbHJ1 X2dlbl9sb29rX2Fyb3VuZAogICAgICAgMS43OCUgIG1lbW1vdmUKICAgICAgIDEuNzQlICBvYmpf bWFsbG9jCiAgICAgICAxLjUwJSAgZnJlZV91bnJlZl9wYWdlX2xpc3QKCiAgICBwYXRjaDEtOAog ICAgICA0Ni45NiUgIGx6bzF4XzFfZG9fY29tcHJlc3MgKHJlYWwgd29yaykKICAgICAgIDcuNTUl ICBwYWdlX3ZtYV9tYXBwZWRfd2FsawogICAgICAgNS44OSUgIF9yYXdfc3Bpbl91bmxvY2tfaXJx CiAgICAgICAzLjMzJSAgd2Fsa19wdGVfcmFuZ2UKICAgICAgIDIuNjUlICBwdGVwX2NsZWFyX2Zs dXNoCiAgICAgICAyLjIzJSAgX196cmFtX2J2ZWNfd3JpdGUKICAgICAgIDIuMDglICBkb19yYXdf c3Bpbl9sb2NrCiAgICAgICAxLjgzJSAgbWVtbW92ZQogICAgICAgMS42NSUgIG9ial9tYWxsb2MK ICAgICAgIDEuNDclICBmcmVlX3VucmVmX3BhZ2VfbGlzdAoKICBDb25maWd1cmF0aW9uczoKICAg IG5vIGNoYW5nZQoKVGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgZGV2ZWxvcGVycyBmb3IgdGhlaXIg ZWZmb3J0cyBbM10uCiAga2VybmVsIHRlc3Qgcm9ib3QgPGxrcEBpbnRlbC5jb20+CgpbMV0gaHR0 cHM6Ly9sd24ubmV0L0FydGljbGVzLzIzNzMyLwpbMl0gaHR0cHM6Ly9zb3VyY2UuYW5kcm9pZC5j b20vZGV2aWNlcy90ZWNoL2RlYnVnL3NjdWRvClszXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9y LzIwMjIwNDE2MDgyNy5la0VBUldRby1sa3BAaW50ZWwuY29tLwoKU2lnbmVkLW9mZi1ieTogWXUg WmhhbyA8eXV6aGFvQGdvb2dsZS5jb20+CkFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZmb25A Z29vZ2xlLmNvbT4KQWNrZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGhl ZnRpZ0BhcmNobGludXgub3JnPgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFsZW5rbyA8b2xla3Nh bmRyQG5hdGFsZW5rby5uYW1lPgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBsaXF1 b3JpeC5uZXQ+CkFja2VkLWJ5OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1hbkBnb29nbGUuY29t PgpUZXN0ZWQtYnk6IERhbmllbCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpUZXN0ZWQtYnk6IERv bmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xnZXIgSG9mZnN0w6R0 dGUgPGhvbGdlckBhcHBsaWVkLWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6IEtvbnN0YW50aW4g S2hhcmxhbW92IDxIaS1BbmdlbEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6 aGFpMkBjcy5yb2NoZXN0ZXIuZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5oIDxzb2ZpYS50cmlu aEBlZGkud29ya3M+ClRlc3RlZC1ieTogVmFpYmhhdiBKYWluIDx2YWliaGF2QGxpbnV4LmlibS5j b20+Ci0tLQogZnMvZXhlYy5jICAgICAgICAgICAgICAgICAgfCAgIDIgKwogaW5jbHVkZS9saW51 eC9tZW1jb250cm9sLmggfCAgIDUgKwogaW5jbHVkZS9saW51eC9tbV90eXBlcy5oICAgfCAgNzcg KysrCiBpbmNsdWRlL2xpbnV4L21tem9uZS5oICAgICB8ICA2MSArKy0KIGluY2x1ZGUvbGludXgv c3dhcC5oICAgICAgIHwgICA0ICsKIGtlcm5lbC9leGl0LmMgICAgICAgICAgICAgIHwgICAxICsK IGtlcm5lbC9mb3JrLmMgICAgICAgICAgICAgIHwgICA5ICsKIGtlcm5lbC9zY2hlZC9jb3JlLmMg ICAgICAgIHwgICAxICsKIG1tL21lbWNvbnRyb2wuYyAgICAgICAgICAgIHwgIDI1ICsKIG1tL3Zt c2Nhbi5jICAgICAgICAgICAgICAgIHwgOTgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDExNTAgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGUzZTU1ZDVl MGJlMS4uYmJhOGZjNDQ5MjZmIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5j CkBAIC0xMDExLDYgKzEwMTEsNyBAQCBzdGF0aWMgaW50IGV4ZWNfbW1hcChzdHJ1Y3QgbW1fc3Ry dWN0ICptbSkKIAlhY3RpdmVfbW0gPSB0c2stPmFjdGl2ZV9tbTsKIAl0c2stPmFjdGl2ZV9tbSA9 IG1tOwogCXRzay0+bW0gPSBtbTsKKwlscnVfZ2VuX2FkZF9tbShtbSk7CiAJLyoKIAkgKiBUaGlz IHByZXZlbnRzIHByZWVtcHRpb24gd2hpbGUgYWN0aXZlX21tIGlzIGJlaW5nIGxvYWRlZCBhbmQK IAkgKiBpdCBhbmQgbW0gYXJlIGJlaW5nIHVwZGF0ZWQsIHdoaWNoIGNvdWxkIGNhdXNlIHByb2Js ZW1zIGZvcgpAQCAtMTAyMyw2ICsxMDI0LDcgQEAgc3RhdGljIGludCBleGVjX21tYXAoc3RydWN0 IG1tX3N0cnVjdCAqbW0pCiAJYWN0aXZhdGVfbW0oYWN0aXZlX21tLCBtbSk7CiAJaWYgKElTX0VO QUJMRUQoQ09ORklHX0FSQ0hfV0FOVF9JUlFTX09GRl9BQ1RJVkFURV9NTSkpCiAJCWxvY2FsX2ly cV9lbmFibGUoKTsKKwlscnVfZ2VuX3VzZV9tbShtbSk7CiAJdHNrLT5tbS0+dm1hY2FjaGVfc2Vx bnVtID0gMDsKIAl2bWFjYWNoZV9mbHVzaCh0c2spOwogCXRhc2tfdW5sb2NrKHRzayk7CmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29u dHJvbC5oCmluZGV4IDJiZmRjYzc3NjQ4YS4uY2MxNmJhMjYyNDY0IDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApA QCAtMzQ0LDYgKzM0NCwxMSBAQCBzdHJ1Y3QgbWVtX2Nncm91cCB7CiAJc3RydWN0IGRlZmVycmVk X3NwbGl0IGRlZmVycmVkX3NwbGl0X3F1ZXVlOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTFJV X0dFTgorCS8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqLworCXN0cnVjdCBscnVfZ2VuX21t X2xpc3QgbW1fbGlzdDsKKyNlbmRpZgorCiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKm5v ZGVpbmZvW107CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9p bmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggODgzNGUzOGMwNmE0Li5lZjQ2ZDViM2RhOWIg MTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4 L21tX3R5cGVzLmgKQEAgLTMsNiArMyw3IEBACiAjZGVmaW5lIF9MSU5VWF9NTV9UWVBFU19ICiAK ICNpbmNsdWRlIDxsaW51eC9tbV90eXBlc190YXNrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQu aD4KIAogI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4K QEAgLTE3LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLWxheW91dC5oPgog I2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4K KyNpbmNsdWRlIDxsaW51eC9tbWRlYnVnLmg+CiAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKQEAg LTY1NSw2ICs2NTcsMjIgQEAgc3RydWN0IG1tX3N0cnVjdCB7CiAjaWZkZWYgQ09ORklHX0lPTU1V X1NWQQogCQl1MzIgcGFzaWQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorCQlzdHJ1 Y3QgeworCQkJLyogdGhpcyBtbV9zdHJ1Y3QgaXMgb24gbHJ1X2dlbl9tbV9saXN0ICovCisJCQlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisjaWZkZWYgQ09ORklHX01FTUNHCisJCQkvKiBwb2ludHMg dG8gdGhlIG1lbWNnIG9mICJvd25lciIgYWJvdmUgKi8KKwkJCXN0cnVjdCBtZW1fY2dyb3VwICpt ZW1jZzsKKyNlbmRpZgorCQkJLyoKKwkJCSAqIFNldCB3aGVuIHN3aXRjaGluZyB0byB0aGlzIG1t X3N0cnVjdCwgYXMgYSBoaW50IG9mCisJCQkgKiB3aGV0aGVyIGl0IGhhcyBiZWVuIHVzZWQgc2lu Y2UgdGhlIGxhc3QgdGltZSBwZXItbm9kZQorCQkJICogcGFnZSB0YWJsZSB3YWxrZXJzIGNsZWFy ZWQgdGhlIGNvcnJlc3BvbmRpbmcgYml0cy4KKwkJCSAqLworCQkJdW5zaWduZWQgbG9uZyBiaXRt YXA7CisJCX0gbHJ1X2dlbjsKKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCX0gX19yYW5k b21pemVfbGF5b3V0OwogCiAJLyoKQEAgLTY4MSw2ICs2OTksNjUgQEAgc3RhdGljIGlubGluZSBj cHVtYXNrX3QgKm1tX2NwdW1hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJcmV0dXJuIChzdHJ1 Y3QgY3B1bWFzayAqKSZtbS0+Y3B1X2JpdG1hcDsKIH0KIAorI2lmZGVmIENPTkZJR19MUlVfR0VO CisKK3N0cnVjdCBscnVfZ2VuX21tX2xpc3QgeworCS8qIG1tX3N0cnVjdCBsaXN0IGZvciBwYWdl IHRhYmxlIHdhbGtlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm87CisJLyogcHJvdGVjdHMg dGhlIGxpc3QgYWJvdmUgKi8KKwlzcGlubG9ja190IGxvY2s7Cit9OworCit2b2lkIGxydV9nZW5f YWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK3ZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0 IG1tX3N0cnVjdCAqbW0pOworI2lmZGVmIENPTkZJR19NRU1DRwordm9pZCBscnVfZ2VuX21pZ3Jh dGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBscnVfZ2VuX2luaXRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJSU5JVF9MSVNUX0hF QUQoJm1tLT5scnVfZ2VuLmxpc3QpOworI2lmZGVmIENPTkZJR19NRU1DRworCW1tLT5scnVfZ2Vu Lm1lbWNnID0gTlVMTDsKKyNlbmRpZgorCW1tLT5scnVfZ2VuLmJpdG1hcCA9IDA7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sK KwkvKiB1bmxpa2VseSBidXQgbm90IGEgYnVnIHdoZW4gcmFjaW5nIHdpdGggbHJ1X2dlbl9taWdy YXRlX21tKCkgKi8KKwlWTV9XQVJOX09OX09OQ0UobGlzdF9lbXB0eSgmbW0tPmxydV9nZW4ubGlz dCkpOworCisJaWYgKCEoY3VycmVudC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKSkKKwkJV1JJVEVfT05D RShtbS0+bHJ1X2dlbi5iaXRtYXAsIC0xKTsKK30KKworI2Vsc2UgLyogIUNPTkZJR19MUlVfR0VO ICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0 ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKQoreworfQorCisjaWZkZWYgQ09ORklHX01FTUNHCitzdGF0aWMgaW5saW5l IHZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorI2Vu ZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbW0oc3RydWN0IG1tX3N0cnVj dCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3Qg bW1fc3RydWN0ICptbSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCisKIHN0 cnVjdCBtbXVfZ2F0aGVyOwogZXh0ZXJuIHZvaWQgdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tdV9n YXRoZXIgKnRsYiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJuIHZvaWQgdGxiX2dhdGhl cl9tbXVfZnVsbG1tKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1t KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21t em9uZS5oCmluZGV4IGYwYjk4MDM2MjE4Ni4uNmFhNzE1YTJmZWExIDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQwNyw3 ICs0MDcsNyBAQCBlbnVtIHsKICAqIG1pbl9zZXEgYmVoaW5kLgogICoKICAqIG5yX3BhZ2VzW10g YXJlIGV2ZW50dWFsbHkgY29uc2lzdGVudCBhbmQgdGhlcmVmb3JlIGNhbiBiZSB0cmFuc2llbnRs eQotICogbmVnYXRpdmUuCisgKiBuZWdhdGl2ZSB3aGVuIHJlc2V0X2JhdGNoX3NpemUoKSBpcyBw ZW5kaW5nLgogICovCiBzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgewogCS8qIHRoZSBhZ2luZyBpbmNy ZW1lbnRzIHRoZSB5b3VuZ2VzdCBnZW5lcmF0aW9uIG51bWJlciAqLwpAQCAtNDI5LDYgKzQyOSw1 OCBAQCBzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgewogCWF0b21pY19sb25nX3QgcmVmYXVsdGVkW05S X0hJU1RfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTsKIH07CiAKK2VudW0gewor CU1NX1BURV9UT1RBTCwJLyogdG90YWwgbGVhZiBlbnRyaWVzICovCisJTU1fUFRFX09MRCwJLyog b2xkIGxlYWYgZW50cmllcyAqLworCU1NX1BURV9ZT1VORywJLyogeW91bmcgbGVhZiBlbnRyaWVz ICovCisJTU1fUE1EX1RPVEFMLAkvKiB0b3RhbCBub24tbGVhZiBlbnRyaWVzICovCisJTU1fUE1E X0ZPVU5ELAkvKiBub24tbGVhZiBlbnRyaWVzIGZvdW5kIGluIEJsb29tIGZpbHRlcnMgKi8KKwlN TV9QTURfQURERUQsCS8qIG5vbi1sZWFmIGVudHJpZXMgYWRkZWQgdG8gQmxvb20gZmlsdGVycyAq LworCU5SX01NX1NUQVRTCit9OworCisvKiBtbmVtb25pYyBjb2RlcyBmb3IgdGhlIG1tIHN0YXRz IGFib3ZlICovCisjZGVmaW5lIE1NX1NUQVRfQ09ERVMJCSJ0b3lkZmEiCisKKy8qIGRvdWJsZS1i dWZmZXJpbmcgQmxvb20gZmlsdGVycyAqLworI2RlZmluZSBOUl9CTE9PTV9GSUxURVJTCTIKKwor c3RydWN0IGxydV9nZW5fbW1fc3RhdGUgeworCS8qIHNldCB0byBtYXhfc2VxIGFmdGVyIGVhY2gg aXRlcmF0aW9uICovCisJdW5zaWduZWQgbG9uZyBzZXE7CisJLyogd2hlcmUgdGhlIGN1cnJlbnQg aXRlcmF0aW9uIHN0YXJ0cyAoaW5jbHVzaXZlKSAqLworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7 CisJLyogd2hlcmUgdGhlIGxhc3QgaXRlcmF0aW9uIGVuZHMgKGV4Y2x1c2l2ZSkgKi8KKwlzdHJ1 Y3QgbGlzdF9oZWFkICp0YWlsOworCS8qIHRvIHdhaXQgZm9yIHRoZSBsYXN0IHBhZ2UgdGFibGUg d2Fsa2VyIHRvIGZpbmlzaCAqLworCXN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgd2FpdDsKKwkvKiBC bG9vbSBmaWx0ZXJzIGZsaXAgYWZ0ZXIgZWFjaCBpdGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25n ICpmaWx0ZXJzW05SX0JMT09NX0ZJTFRFUlNdOworCS8qIHRoZSBtbSBzdGF0cyBmb3IgZGVidWdn aW5nICovCisJdW5zaWduZWQgbG9uZyBzdGF0c1tOUl9ISVNUX0dFTlNdW05SX01NX1NUQVRTXTsK KwkvKiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrZXJzICovCisJaW50 IG5yX3dhbGtlcnM7Cit9OworCitzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHsKKwkvKiB0aGUgbHJ1 dmVjIHVuZGVyIHJlY2xhaW0gKi8KKwlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CisJLyogdW5zdGFi bGUgbWF4X3NlcSBmcm9tIGxydV9nZW5fc3RydWN0ICovCisJdW5zaWduZWQgbG9uZyBtYXhfc2Vx OworCS8qIHRoZSBuZXh0IGFkZHJlc3Mgd2l0aGluIGFuIG1tIHRvIHNjYW4gKi8KKwl1bnNpZ25l ZCBsb25nIG5leHRfYWRkcjsKKwkvKiB0byBiYXRjaCBwYWdlIHRhYmxlIGVudHJpZXMgKi8KKwl1 bnNpZ25lZCBsb25nIGJpdG1hcFtCSVRTX1RPX0xPTkdTKE1JTl9MUlVfQkFUQ0gpXTsKKwkvKiB0 byBiYXRjaCBwcm9tb3RlZCBwYWdlcyAqLworCWludCBucl9wYWdlc1tNQVhfTlJfR0VOU11bQU5P Tl9BTkRfRklMRV1bTUFYX05SX1pPTkVTXTsKKwkvKiB0byBiYXRjaCB0aGUgbW0gc3RhdHMgKi8K KwlpbnQgbW1fc3RhdHNbTlJfTU1fU1RBVFNdOworCS8qIHRvdGFsIGJhdGNoZWQgaXRlbXMgKi8K KwlpbnQgYmF0Y2hlZDsKKwlib29sIGNhbl9zd2FwOworCWJvb2wgZm9yY2Vfc2NhbjsKK307CisK IHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCBs cnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyk7CiAK QEAgLTQ3OSw2ICs1MzEsOCBAQCBzdHJ1Y3QgbHJ1dmVjIHsKICNpZmRlZiBDT05GSUdfTFJVX0dF TgogCS8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi8KIAlzdHJ1 Y3QgbHJ1X2dlbl9zdHJ1Y3QJCWxydWdlbjsKKwkvKiB0byBjb25jdXJyZW50bHkgaXRlcmF0ZSBs cnVfZ2VuX21tX2xpc3QgKi8KKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZQkJbW1fc3RhdGU7CiAj ZW5kaWYKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwpA QCAtMTA3Miw2ICsxMTI2LDExIEBAIHR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHsKIAogCXVu c2lnbmVkIGxvbmcJCWZsYWdzOwogCisjaWZkZWYgQ09ORklHX0xSVV9HRU4KKwkvKiBrc3dhcCBt bSB3YWxrIGRhdGEgKi8KKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrCW1tX3dhbGs7CisjZW5kaWYK KwogCVpPTkVfUEFERElORyhfcGFkMl8pCiAKIAkvKiBQZXItbm9kZSB2bXN0YXRzICovCmRpZmYg LS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4 IDI3MDkzYjQ3N2M1Zi4uN2JkZDdiY2IxMzVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3 YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMTM3LDYgKzEzNywxMCBAQCB1bmlv biBzd2FwX2hlYWRlciB7CiAgKi8KIHN0cnVjdCByZWNsYWltX3N0YXRlIHsKIAl1bnNpZ25lZCBs b25nIHJlY2xhaW1lZF9zbGFiOworI2lmZGVmIENPTkZJR19MUlVfR0VOCisJLyogcGVyLXRocmVh ZCBtbSB3YWxrIGRhdGEgKi8KKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICptbV93YWxrOworI2Vu ZGlmCiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBi L2tlcm5lbC9leGl0LmMKaW5kZXggZjA3Mjk1OWZjYWI3Li5mMmQ0ZDQ4ZWE3OTAgMTAwNjQ0Ci0t LSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNDY2LDYgKzQ2Niw3IEBA IHZvaWQgbW1fdXBkYXRlX25leHRfb3duZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJCWdvdG8g cmV0cnk7CiAJfQogCVdSSVRFX09OQ0UobW0tPm93bmVyLCBjKTsKKwlscnVfZ2VuX21pZ3JhdGVf bW0obW0pOwogCXRhc2tfdW5sb2NrKGMpOwogCXB1dF90YXNrX3N0cnVjdChjKTsKIH0KZGlmZiAt LWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDM1YTNiZWZmMTQwYi4u M2UzY2FiMjZlNjZjIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3Jr LmMKQEAgLTExNDksNiArMTE0OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0 KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCWdvdG8gZmFp bF9ub2NvbnRleHQ7CiAKIAltbS0+dXNlcl9ucyA9IGdldF91c2VyX25zKHVzZXJfbnMpOworCWxy dV9nZW5faW5pdF9tbShtbSk7CiAJcmV0dXJuIG1tOwogCiBmYWlsX25vY29udGV4dDoKQEAgLTEx OTEsNiArMTE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21tcHV0KHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tKQogCX0KIAlpZiAobW0tPmJpbmZtdCkKIAkJbW9kdWxlX3B1dChtbS0+YmluZm10LT5t b2R1bGUpOworCWxydV9nZW5fZGVsX21tKG1tKTsKIAltbWRyb3AobW0pOwogfQogCkBAIC0yNjYw LDYgKzI2NjIsMTMgQEAgcGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJn cyAqYXJncykKIAkJZ2V0X3Rhc2tfc3RydWN0KHApOwogCX0KIAorCWlmIChJU19FTkFCTEVEKENP TkZJR19MUlVfR0VOKSAmJiAhKGNsb25lX2ZsYWdzICYgQ0xPTkVfVk0pKSB7CisJCS8qIGxvY2sg dGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi8KKwkJdGFza19s b2NrKHApOworCQlscnVfZ2VuX2FkZF9tbShwLT5tbSk7CisJCXRhc2tfdW5sb2NrKHApOworCX0K KwogCXdha2VfdXBfbmV3X3Rhc2socCk7CiAKIAkvKiBmb3JraW5nIGNvbXBsZXRlIGFuZCBjaGls ZCBzdGFydGVkIHRvIHJ1biwgdGVsbCBwdHJhY2VyICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2No ZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBkNThjMDM4OWViMjMuLmE4Zjll NWViYjVkZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuYworKysgYi9rZXJuZWwvc2No ZWQvY29yZS5jCkBAIC01MDU3LDYgKzUwNTcsNyBAQCBjb250ZXh0X3N3aXRjaChzdHJ1Y3QgcnEg KnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCSAqIGZpbmlzaF90YXNrX3N3aXRjaCgp J3MgbW1kcm9wKCkuCiAJCSAqLwogCQlzd2l0Y2hfbW1faXJxc19vZmYocHJldi0+YWN0aXZlX21t LCBuZXh0LT5tbSwgbmV4dCk7CisJCWxydV9nZW5fdXNlX21tKG5leHQtPm1tKTsKIAogCQlpZiAo IXByZXYtPm1tKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBrZXJuZWwKIAkJCS8q IHdpbGwgbW1kcm9wKCkgaW4gZmluaXNoX3Rhc2tfc3dpdGNoKCkuICovCmRpZmYgLS1naXQgYS9t bS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOThhYTcyMGFjNjM5Li5mZjJi MGEwOWU2YzggMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9s LmMKQEAgLTYwOTMsNiArNjA5MywzMCBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfdGFz ayh2b2lkKQogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorc3RhdGljIHZvaWQg bWVtX2Nncm91cF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KQoreworCXN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzazsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOwor CisJLyogZmluZCB0aGUgZmlyc3QgbGVhZGVyIGlmIHRoZXJlIGlzIGFueSAqLworCWNncm91cF90 YXNrc2V0X2Zvcl9lYWNoX2xlYWRlcih0YXNrLCBjc3MsIHRzZXQpCisJCWJyZWFrOworCisJaWYg KCF0YXNrKQorCQlyZXR1cm47CisKKwl0YXNrX2xvY2sodGFzayk7CisJaWYgKHRhc2stPm1tICYm IHRhc2stPm1tLT5vd25lciA9PSB0YXNrKQorCQlscnVfZ2VuX21pZ3JhdGVfbW0odGFzay0+bW0p OworCXRhc2tfdW5sb2NrKHRhc2spOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBf YXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkKK3sKK30KKyNlbmRpZiAvKiBDT05G SUdfTFJVX0dFTiAqLworCiBzdGF0aWMgaW50IHNlcV9wdXRzX21lbWNnX3R1bmFibGUoc3RydWN0 IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCWlmICh2YWx1ZSA9PSBQQUdF X0NPVU5URVJfTUFYKQpAQCAtNjQzOCw2ICs2NDYyLDcgQEAgc3RydWN0IGNncm91cF9zdWJzeXMg bWVtb3J5X2NncnBfc3Vic3lzID0gewogCS5jc3NfcmVzZXQgPSBtZW1fY2dyb3VwX2Nzc19yZXNl dCwKIAkuY3NzX3JzdGF0X2ZsdXNoID0gbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gsCiAJLmNh bl9hdHRhY2ggPSBtZW1fY2dyb3VwX2Nhbl9hdHRhY2gsCisJLmF0dGFjaCA9IG1lbV9jZ3JvdXBf YXR0YWNoLAogCS5jYW5jZWxfYXR0YWNoID0gbWVtX2Nncm91cF9jYW5jZWxfYXR0YWNoLAogCS5w b3N0X2F0dGFjaCA9IG1lbV9jZ3JvdXBfbW92ZV90YXNrLAogCS5kZmxfY2Z0eXBlcyA9IG1lbW9y eV9maWxlcywKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggY2Y4 OWEyOGMzYjBlLi5mMjkyZTdlNzYxYjEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21t L3Ztc2Nhbi5jCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CiAj aW5jbHVkZSA8bGludXgvZGF4Lmg+CiAjaW5jbHVkZSA8bGludXgvcHNpLmg+CisjaW5jbHVkZSA8 bGludXgvcGFnZXdhbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogCiAjaW5jbHVk ZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC0zMDAwLDcgKzMw MDIsNyBAQCBzdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRh ICpwZ2RhdCwKIAkJZm9yICgodHlwZSkgPSAwOyAodHlwZSkgPCBBTk9OX0FORF9GSUxFOyAodHlw ZSkrKykJXAogCQkJZm9yICgoem9uZSkgPSAwOyAoem9uZSkgPCBNQVhfTlJfWk9ORVM7ICh6b25l KSsrKQogCi1zdGF0aWMgc3RydWN0IGxydXZlYyBfX21heWJlX3VudXNlZCAqZ2V0X2xydXZlYyhz dHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCitzdGF0aWMgc3RydWN0IGxydXZlYyAq Z2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpCiB7CiAJc3RydWN0 IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwogCkBAIC0zMDQ1LDYgKzMwNDcs Mzc1IEBAIHN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMpCiAJICAgICAgIGdldF9ucl9nZW5zKGxydXZlYywgTFJVX0dFTl9BTk9OKSA8 PSBNQVhfTlJfR0VOUzsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAg ICAgICAgICAgICAgICAgIG1tX3N0cnVjdCBsaXN0CisgKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor CitzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9j Z3JvdXAgKm1lbWNnKQoreworCXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3Qg PSB7CisJCS5maWZvID0gTElTVF9IRUFEX0lOSVQobW1fbGlzdC5maWZvKSwKKwkJLmxvY2sgPSBf X1NQSU5fTE9DS19VTkxPQ0tFRChtbV9saXN0LmxvY2spLAorCX07CisKKyNpZmRlZiBDT05GSUdf TUVNQ0cKKwlpZiAobWVtY2cpCisJCXJldHVybiAmbWVtY2ctPm1tX2xpc3Q7CisjZW5kaWYKKwlW TV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7CisKKwlyZXR1cm4gJm1tX2xp c3Q7Cit9CisKK3ZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJ aW50IG5pZDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9t X21tKG1tKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3Qo bWVtY2cpOworCisJVk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZtbS0+bHJ1X2dlbi5saXN0 KSk7CisjaWZkZWYgQ09ORklHX01FTUNHCisJVk1fV0FSTl9PTl9PTkNFKG1tLT5scnVfZ2VuLm1l bWNnKTsKKwltbS0+bHJ1X2dlbi5tZW1jZyA9IG1lbWNnOworI2VuZGlmCisJc3Bpbl9sb2NrKCZt bV9saXN0LT5sb2NrKTsKKworCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgewor CQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOworCisJCWlm ICghbHJ1dmVjKQorCQkJY29udGludWU7CisKKwkJaWYgKGxydXZlYy0+bW1fc3RhdGUudGFpbCA9 PSAmbW1fbGlzdC0+ZmlmbykKKwkJCWxydXZlYy0+bW1fc3RhdGUudGFpbCA9ICZtbS0+bHJ1X2dl bi5saXN0OworCX0KKworCWxpc3RfYWRkX3RhaWwoJm1tLT5scnVfZ2VuLmxpc3QsICZtbV9saXN0 LT5maWZvKTsKKworCXNwaW5fdW5sb2NrKCZtbV9saXN0LT5sb2NrKTsKK30KKwordm9pZCBscnVf Z2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpbnQgbmlkOworCXN0cnVjdCBs cnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Q7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVM TDsKKworCWlmIChsaXN0X2VtcHR5KCZtbS0+bHJ1X2dlbi5saXN0KSkKKwkJcmV0dXJuOworCisj aWZkZWYgQ09ORklHX01FTUNHCisJbWVtY2cgPSBtbS0+bHJ1X2dlbi5tZW1jZzsKKyNlbmRpZgor CW1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisKKwlzcGluX2xvY2soJm1tX2xpc3QtPmxv Y2spOworCisJZm9yX2VhY2hfbm9kZShuaWQpIHsKKwkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0g Z2V0X2xydXZlYyhtZW1jZywgbmlkKTsKKworCQlpZiAoIWxydXZlYykKKwkJCWNvbnRpbnVlOwor CisJCWlmIChscnV2ZWMtPm1tX3N0YXRlLnRhaWwgPT0gJm1tLT5scnVfZ2VuLmxpc3QpCisJCQls cnV2ZWMtPm1tX3N0YXRlLnRhaWwgPSBscnV2ZWMtPm1tX3N0YXRlLnRhaWwtPm5leHQ7CisKKwkJ aWYgKGxydXZlYy0+bW1fc3RhdGUuaGVhZCAhPSAmbW0tPmxydV9nZW4ubGlzdCkKKwkJCWNvbnRp bnVlOworCisJCWxydXZlYy0+bW1fc3RhdGUuaGVhZCA9IGxydXZlYy0+bW1fc3RhdGUuaGVhZC0+ bmV4dDsKKwkJaWYgKGxydXZlYy0+bW1fc3RhdGUuaGVhZCA9PSAmbW1fbGlzdC0+ZmlmbykKKwkJ CVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5zZXEsIGxydXZlYy0+bW1fc3RhdGUuc2VxICsg MSk7CisJfQorCisJbGlzdF9kZWxfaW5pdCgmbW0tPmxydV9nZW4ubGlzdCk7CisKKwlzcGluX3Vu bG9jaygmbW1fbGlzdC0+bG9jayk7CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwltZW1fY2dyb3Vw X3B1dChtbS0+bHJ1X2dlbi5tZW1jZyk7CisJbW0tPmxydV9nZW4ubWVtY2cgPSBOVUxMOworI2Vu ZGlmCit9CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKK3ZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKKworCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJm1tLT5vd25lci0+YWxsb2NfbG9jayk7CisKKwkvKiBmb3IgbW1f dXBkYXRlX25leHRfb3duZXIoKSAqLworCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCisJCXJl dHVybjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV90YXNr KHJjdV9kZXJlZmVyZW5jZShtbS0+b3duZXIpKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlpZiAo bWVtY2cgPT0gbW0tPmxydV9nZW4ubWVtY2cpCisJCXJldHVybjsKKworCVZNX1dBUk5fT05fT05D RSghbW0tPmxydV9nZW4ubWVtY2cpOworCVZNX1dBUk5fT05fT05DRShsaXN0X2VtcHR5KCZtbS0+ bHJ1X2dlbi5saXN0KSk7CisKKwlscnVfZ2VuX2RlbF9tbShtbSk7CisJbHJ1X2dlbl9hZGRfbW0o bW0pOworfQorI2VuZGlmCisKKy8qCisgKiBCbG9vbSBmaWx0ZXJzIHdpdGggbT0xPDwxNSwgaz0y IGFuZCB0aGUgZmFsc2UgcG9zaXRpdmUgcmF0ZXMgb2YgfjEvNSB3aGVuCisgKiBuPTEwLDAwMCBh bmQgfjEvMiB3aGVuIG49MjAsMDAwLCB3aGVyZSwgY29udmVudGlvbmFsbHksIG0gaXMgdGhlIG51 bWJlciBvZgorICogYml0cyBpbiBhIGJpdG1hcCwgayBpcyB0aGUgbnVtYmVyIG9mIGhhc2ggZnVu Y3Rpb25zIGFuZCBuIGlzIHRoZSBudW1iZXIgb2YKKyAqIGluc2VydGVkIGl0ZW1zLgorICoKKyAq IFBhZ2UgdGFibGUgd2Fsa2VycyB1c2Ugb25lIG9mIHRoZSB0d28gZmlsdGVycyB0byByZWR1Y2Ug dGhlaXIgc2VhcmNoIHNwYWNlLgorICogVG8gZ2V0IHJpZCBvZiBub24tbGVhZiBlbnRyaWVzIHRo YXQgbm8gbG9uZ2VyIGhhdmUgZW5vdWdoIGxlYWYgZW50cmllcywgdGhlCisgKiBhZ2luZyB1c2Vz IHRoZSBkb3VibGUtYnVmZmVyaW5nIHRlY2huaXF1ZSB0byBmbGlwIHRvIHRoZSBvdGhlciBmaWx0 ZXIgZWFjaAorICogdGltZSBpdCBwcm9kdWNlcyBhIG5ldyBnZW5lcmF0aW9uLiBGb3Igbm9uLWxl YWYgZW50cmllcyB0aGF0IGhhdmUgZW5vdWdoCisgKiBsZWFmIGVudHJpZXMsIHRoZSBhZ2luZyBj YXJyaWVzIHRoZW0gb3ZlciB0byB0aGUgbmV4dCBnZW5lcmF0aW9uIGluCisgKiB3YWxrX3BtZF9y YW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJt YXAKKyAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS4KKyAqCisgKiBGb3IgZnV0dXJlIG9wdGlt aXphdGlvbnM6CisgKiAxLiBJdCdzIG5vdCBuZWNlc3NhcnkgdG8ga2VlcCBib3RoIGZpbHRlcnMg YWxsIHRoZSB0aW1lLiBUaGUgc3BhcmUgb25lIGNhbiBiZQorICogICAgZnJlZWQgYWZ0ZXIgdGhl IFJDVSBncmFjZSBwZXJpb2QgYW5kIHJlYWxsb2NhdGVkIGlmIG5lZWRlZCBhZ2Fpbi4KKyAqIDIu IEFuZCB3aGVuIHJlYWxsb2NhdGluZywgaXQncyB3b3J0aCBzY2FsaW5nIGl0cyBzaXplIGFjY29y ZGluZyB0byB0aGUgbnVtYmVyCisgKiAgICBvZiBpbnNlcnRlZCBlbnRyaWVzIGluIHRoZSBvdGhl ciBmaWx0ZXIsIHRvIHJlZHVjZSB0aGUgbWVtb3J5IG92ZXJoZWFkIG9uCisgKiAgICBzbWFsbCBz eXN0ZW1zIGFuZCBmYWxzZSBwb3NpdGl2ZXMgb24gbGFyZ2Ugc3lzdGVtcy4KKyAqIDMuIEplbmtp bnMnIGhhc2ggZnVuY3Rpb24gaXMgYW4gYWx0ZXJuYXRpdmUgdG8gS251dGgncy4KKyAqLworI2Rl ZmluZSBCTE9PTV9GSUxURVJfU0hJRlQJMTUKKworc3RhdGljIGlubGluZSBpbnQgZmlsdGVyX2dl bl9mcm9tX3NlcSh1bnNpZ25lZCBsb25nIHNlcSkKK3sKKwlyZXR1cm4gc2VxICUgTlJfQkxPT01f RklMVEVSUzsKK30KKworc3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQgKml0ZW0sIGludCAq a2V5KQoreworCXUzMiBoYXNoID0gaGFzaF9wdHIoaXRlbSwgQkxPT01fRklMVEVSX1NISUZUICog Mik7CisKKwlCVUlMRF9CVUdfT04oQkxPT01fRklMVEVSX1NISUZUICogMiA+IEJJVFNfUEVSX1RZ UEUodTMyKSk7CisKKwlrZXlbMF0gPSBoYXNoICYgKEJJVChCTE9PTV9GSUxURVJfU0hJRlQpIC0g MSk7CisJa2V5WzFdID0gaGFzaCA+PiBCTE9PTV9GSUxURVJfU0hJRlQ7Cit9CisKK3N0YXRpYyB2 b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxv bmcgc2VxKQoreworCXVuc2lnbmVkIGxvbmcgKmZpbHRlcjsKKwlpbnQgZ2VuID0gZmlsdGVyX2dl bl9mcm9tX3NlcShzZXEpOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZ2V0X21tX2xpc3QobHJ1 dmVjX21lbWNnKGxydXZlYykpLT5sb2NrKTsKKworCWZpbHRlciA9IGxydXZlYy0+bW1fc3RhdGUu ZmlsdGVyc1tnZW5dOworCWlmIChmaWx0ZXIpIHsKKwkJYml0bWFwX2NsZWFyKGZpbHRlciwgMCwg QklUKEJMT09NX0ZJTFRFUl9TSElGVCkpOworCQlyZXR1cm47CisJfQorCisJZmlsdGVyID0gYml0 bWFwX3phbGxvYyhCSVQoQkxPT01fRklMVEVSX1NISUZUKSwgR0ZQX0FUT01JQyk7CisJV1JJVEVf T05DRShscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbZ2VuXSwgZmlsdGVyKTsKK30KKworc3RhdGlj IHZvaWQgdXBkYXRlX2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVk IGxvbmcgc2VxLCB2b2lkICppdGVtKQoreworCWludCBrZXlbMl07CisJdW5zaWduZWQgbG9uZyAq ZmlsdGVyOworCWludCBnZW4gPSBmaWx0ZXJfZ2VuX2Zyb21fc2VxKHNlcSk7CisKKwlmaWx0ZXIg PSBSRUFEX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5maWx0ZXJzW2dlbl0pOworCWlmICghZmlsdGVy KQorCQlyZXR1cm47CisKKwlnZXRfaXRlbV9rZXkoaXRlbSwga2V5KTsKKworCWlmICghdGVzdF9i aXQoa2V5WzBdLCBmaWx0ZXIpKQorCQlzZXRfYml0KGtleVswXSwgZmlsdGVyKTsKKwlpZiAoIXRl c3RfYml0KGtleVsxXSwgZmlsdGVyKSkKKwkJc2V0X2JpdChrZXlbMV0sIGZpbHRlcik7Cit9CisK K3N0YXRpYyBib29sIHRlc3RfYmxvb21fZmlsdGVyKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5z aWduZWQgbG9uZyBzZXEsIHZvaWQgKml0ZW0pCit7CisJaW50IGtleVsyXTsKKwl1bnNpZ25lZCBs b25nICpmaWx0ZXI7CisJaW50IGdlbiA9IGZpbHRlcl9nZW5fZnJvbV9zZXEoc2VxKTsKKworCWZp bHRlciA9IFJFQURfT05DRShscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbZ2VuXSk7CisJaWYgKCFm aWx0ZXIpCisJCXJldHVybiB0cnVlOworCisJZ2V0X2l0ZW1fa2V5KGl0ZW0sIGtleSk7CisKKwly ZXR1cm4gdGVzdF9iaXQoa2V5WzBdLCBmaWx0ZXIpICYmIHRlc3RfYml0KGtleVsxXSwgZmlsdGVy KTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfbW1fc3RhdHMoc3RydWN0IGxydXZlYyAqbHJ1dmVj LCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBib29sIGxhc3QpCit7CisJaW50IGk7CisJ aW50IGhpc3Q7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZnZXRfbW1fbGlzdChscnV2ZWNfbWVt Y2cobHJ1dmVjKSktPmxvY2spOworCisJaWYgKHdhbGspIHsKKwkJaGlzdCA9IGxydV9oaXN0X2Zy b21fc2VxKHdhbGstPm1heF9zZXEpOworCisJCWZvciAoaSA9IDA7IGkgPCBOUl9NTV9TVEFUUzsg aSsrKSB7CisJCQlXUklURV9PTkNFKGxydXZlYy0+bW1fc3RhdGUuc3RhdHNbaGlzdF1baV0sCisJ CQkJICAgbHJ1dmVjLT5tbV9zdGF0ZS5zdGF0c1toaXN0XVtpXSArIHdhbGstPm1tX3N0YXRzW2ld KTsKKwkJCXdhbGstPm1tX3N0YXRzW2ldID0gMDsKKwkJfQorCX0KKworCWlmIChOUl9ISVNUX0dF TlMgPiAxICYmIGxhc3QpIHsKKwkJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydXZlYy0+bW1f c3RhdGUuc2VxICsgMSk7CisKKwkJZm9yIChpID0gMDsgaSA8IE5SX01NX1NUQVRTOyBpKyspCisJ CQlXUklURV9PTkNFKGxydXZlYy0+bW1fc3RhdGUuc3RhdHNbaGlzdF1baV0sIDApOworCX0KK30K Kworc3RhdGljIGJvb2wgc2hvdWxkX3NraXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVj dCBscnVfZ2VuX21tX3dhbGsgKndhbGspCit7CisJaW50IHR5cGU7CisJdW5zaWduZWQgbG9uZyBz aXplID0gMDsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGst PmxydXZlYyk7CisJaW50IGtleSA9IHBnZGF0LT5ub2RlX2lkICUgQklUU19QRVJfVFlQRShtbS0+ bHJ1X2dlbi5iaXRtYXApOworCisJaWYgKCF3YWxrLT5mb3JjZV9zY2FuICYmIGNwdW1hc2tfZW1w dHkobW1fY3B1bWFzayhtbSkpICYmCisJICAgICF0ZXN0X2JpdChrZXksICZtbS0+bHJ1X2dlbi5i aXRtYXApKQorCQlyZXR1cm4gdHJ1ZTsKKworCWNsZWFyX2JpdChrZXksICZtbS0+bHJ1X2dlbi5i aXRtYXApOworCisJZm9yICh0eXBlID0gIXdhbGstPmNhbl9zd2FwOyB0eXBlIDwgQU5PTl9BTkRf RklMRTsgdHlwZSsrKSB7CisJCXNpemUgKz0gdHlwZSA/IGdldF9tbV9jb3VudGVyKG1tLCBNTV9G SUxFUEFHRVMpIDoKKwkJCSAgICAgICBnZXRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKSAr CisJCQkgICAgICAgZ2V0X21tX2NvdW50ZXIobW0sIE1NX1NITUVNUEFHRVMpOworCX0KKworCWlm IChzaXplIDwgTUlOX0xSVV9CQVRDSCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAobW1faXNfb29t X3ZpY3RpbShtbSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuICFtbWdldF9ub3RfemVybyht bSk7Cit9CisKK3N0YXRpYyBib29sIGl0ZXJhdGVfbW1fbGlzdChzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssCisJCQkgICAgc3RydWN0IG1tX3N0cnVj dCAqKml0ZXIpCit7CisJYm9vbCBmaXJzdCA9IGZhbHNlOworCWJvb2wgbGFzdCA9IHRydWU7CisJ c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9 IGxydXZlY19tZW1jZyhscnV2ZWMpOworCXN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3Qg PSBnZXRfbW1fbGlzdChtZW1jZyk7CisJc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRl ID0gJmxydXZlYy0+bW1fc3RhdGU7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBmb3VyIGludGVyZXN0 aW5nIGNhc2VzIGZvciB0aGlzIHBhZ2UgdGFibGUgd2Fsa2VyOgorCSAqIDEuIEl0IHRyaWVzIHRv IHN0YXJ0IGEgbmV3IGl0ZXJhdGlvbiBvZiBtbV9saXN0IHdpdGggYSBzdGFsZSBtYXhfc2VxOwor CSAqICAgIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZS4KKwkgKiAyLiBJdCdzIHRoZSBmaXJz dCBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uLCBhbmQgaXQgbmVlZHMgdG8gcmVzZXQKKwkgKiAg ICB0aGUgQmxvb20gZmlsdGVyIGZvciB0aGUgbmV4dCBnZW5lcmF0aW9uLgorCSAqIDMuIEl0IHJl YWNoZXMgdGhlIGVuZCBvZiBtbV9saXN0LCBhbmQgaXQgbmVlZHMgdG8gaW5jcmVtZW50CisJICog ICAgbW1fc3RhdGUtPnNlcTsgdGhlIGl0ZXJhdGlvbiBpcyBkb25lLgorCSAqIDQuIEl0J3MgdGhl IGxhc3Qgb2YgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgYW5kIGl0IG5lZWRzIHRvIHJlc2V0IHRo ZQorCSAqICAgIG1tIHN0YXRzIGNvdW50ZXJzIGZvciB0aGUgbmV4dCBnZW5lcmF0aW9uLgorCSAq LworCWlmICgqaXRlcikKKwkJbW1wdXRfYXN5bmMoKml0ZXIpOworCWVsc2UgaWYgKHdhbGstPm1h eF9zZXEgPD0gUkVBRF9PTkNFKG1tX3N0YXRlLT5zZXEpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlz cGluX2xvY2soJm1tX2xpc3QtPmxvY2spOworCisJVk1fV0FSTl9PTl9PTkNFKG1tX3N0YXRlLT5z ZXEgKyAxIDwgd2Fsay0+bWF4X3NlcSk7CisJVk1fV0FSTl9PTl9PTkNFKCppdGVyICYmIG1tX3N0 YXRlLT5zZXEgPiB3YWxrLT5tYXhfc2VxKTsKKwlWTV9XQVJOX09OX09OQ0UoKml0ZXIgJiYgIW1t X3N0YXRlLT5ucl93YWxrZXJzKTsKKworCWlmICh3YWxrLT5tYXhfc2VxIDw9IG1tX3N0YXRlLT5z ZXEpIHsKKwkJaWYgKCEqaXRlcikKKwkJCWxhc3QgPSBmYWxzZTsKKwkJZ290byBkb25lOworCX0K KworCWlmICghbW1fc3RhdGUtPm5yX3dhbGtlcnMpIHsKKwkJVk1fV0FSTl9PTl9PTkNFKG1tX3N0 YXRlLT5oZWFkICYmIG1tX3N0YXRlLT5oZWFkICE9ICZtbV9saXN0LT5maWZvKTsKKworCQltbV9z dGF0ZS0+aGVhZCA9IG1tX2xpc3QtPmZpZm8ubmV4dDsKKwkJZmlyc3QgPSB0cnVlOworCX0KKwor CXdoaWxlICghbW0gJiYgbW1fc3RhdGUtPmhlYWQgIT0gJm1tX2xpc3QtPmZpZm8pIHsKKwkJbW0g PSBsaXN0X2VudHJ5KG1tX3N0YXRlLT5oZWFkLCBzdHJ1Y3QgbW1fc3RydWN0LCBscnVfZ2VuLmxp c3QpOworCisJCW1tX3N0YXRlLT5oZWFkID0gbW1fc3RhdGUtPmhlYWQtPm5leHQ7CisKKwkJLyog Zm9yY2Ugc2NhbiBmb3IgdGhvc2UgYWRkZWQgYWZ0ZXIgdGhlIGxhc3QgaXRlcmF0aW9uICovCisJ CWlmICghbW1fc3RhdGUtPnRhaWwgfHwgbW1fc3RhdGUtPnRhaWwgPT0gJm1tLT5scnVfZ2VuLmxp c3QpIHsKKwkJCW1tX3N0YXRlLT50YWlsID0gbW1fc3RhdGUtPmhlYWQ7CisJCQl3YWxrLT5mb3Jj ZV9zY2FuID0gdHJ1ZTsKKwkJfQorCisJCWlmIChzaG91bGRfc2tpcF9tbShtbSwgd2FsaykpCisJ CQltbSA9IE5VTEw7CisJfQorCisJaWYgKG1tX3N0YXRlLT5oZWFkID09ICZtbV9saXN0LT5maWZv KQorCQlXUklURV9PTkNFKG1tX3N0YXRlLT5zZXEsIG1tX3N0YXRlLT5zZXEgKyAxKTsKK2RvbmU6 CisJaWYgKCppdGVyICYmICFtbSkKKwkJbW1fc3RhdGUtPm5yX3dhbGtlcnMtLTsKKwlpZiAoISpp dGVyICYmIG1tKQorCQltbV9zdGF0ZS0+bnJfd2Fsa2VycysrOworCisJaWYgKG1tX3N0YXRlLT5u cl93YWxrZXJzKQorCQlsYXN0ID0gZmFsc2U7CisKKwlpZiAobW0gJiYgZmlyc3QpCisJCXJlc2V0 X2Jsb29tX2ZpbHRlcihscnV2ZWMsIHdhbGstPm1heF9zZXEgKyAxKTsKKworCWlmICgqaXRlciB8 fCBsYXN0KQorCQlyZXNldF9tbV9zdGF0cyhscnV2ZWMsIHdhbGssIGxhc3QpOworCisJc3Bpbl91 bmxvY2soJm1tX2xpc3QtPmxvY2spOworCisJKml0ZXIgPSBtbTsKKworCXJldHVybiBsYXN0Owor fQorCitzdGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxKQoreworCWJvb2wgc3VjY2VzcyA9IGZhbHNlOwor CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOworCXN0cnVj dCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisJc3RydWN0 IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gJmxydXZlYy0+bW1fc3RhdGU7CisKKwlpZiAo bWF4X3NlcSA8PSBSRUFEX09OQ0UobW1fc3RhdGUtPnNlcSkpCisJCXJldHVybiBmYWxzZTsKKwor CXNwaW5fbG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlWTV9XQVJOX09OX09OQ0UobW1fc3RhdGUt PnNlcSArIDEgPCBtYXhfc2VxKTsKKworCWlmIChtYXhfc2VxID4gbW1fc3RhdGUtPnNlcSAmJiAh bW1fc3RhdGUtPm5yX3dhbGtlcnMpIHsKKwkJVk1fV0FSTl9PTl9PTkNFKG1tX3N0YXRlLT5oZWFk ICYmIG1tX3N0YXRlLT5oZWFkICE9ICZtbV9saXN0LT5maWZvKTsKKworCQlXUklURV9PTkNFKG1t X3N0YXRlLT5zZXEsIG1tX3N0YXRlLT5zZXEgKyAxKTsKKwkJcmVzZXRfbW1fc3RhdHMobHJ1dmVj LCBOVUxMLCB0cnVlKTsKKwkJc3VjY2VzcyA9IHRydWU7CisJfQorCisJc3Bpbl91bmxvY2soJm1t X2xpc3QtPmxvY2spOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZhdWx0IGZlZWRiYWNrIGxvb3AK ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMTkzLDYgKzM1NjQsNDc5IEBAIHN0YXRpYyBp bnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9s aW8sIGJvb2wgcmVjbGFpCiAJcmV0dXJuIG5ld19nZW47CiB9CiAKK3N0YXRpYyB2b2lkIHVwZGF0 ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAq Zm9saW8sCisJCQkgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4pCit7CisJaW50IHR5cGUg PSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CisJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZv bGlvKTsKKwlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CisKKwlWTV9XQVJOX09O X09OQ0Uob2xkX2dlbiA+PSBNQVhfTlJfR0VOUyk7CisJVk1fV0FSTl9PTl9PTkNFKG5ld19nZW4g Pj0gTUFYX05SX0dFTlMpOworCisJd2Fsay0+YmF0Y2hlZCsrOworCisJd2Fsay0+bnJfcGFnZXNb b2xkX2dlbl1bdHlwZV1bem9uZV0gLT0gZGVsdGE7CisJd2Fsay0+bnJfcGFnZXNbbmV3X2dlbl1b dHlwZV1bem9uZV0gKz0gZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2JhdGNoX3NpemUo c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKQorewor CWludCBnZW4sIHR5cGUsIHpvbmU7CisJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAm bHJ1dmVjLT5scnVnZW47CisKKwl3YWxrLT5iYXRjaGVkID0gMDsKKworCWZvcl9lYWNoX2dlbl90 eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKSB7CisJCWVudW0gbHJ1X2xpc3QgbHJ1ID0gdHlwZSAq IExSVV9JTkFDVElWRV9GSUxFOworCQlpbnQgZGVsdGEgPSB3YWxrLT5ucl9wYWdlc1tnZW5dW3R5 cGVdW3pvbmVdOworCisJCWlmICghZGVsdGEpCisJCQljb250aW51ZTsKKworCQl3YWxrLT5ucl9w YWdlc1tnZW5dW3R5cGVdW3pvbmVdID0gMDsKKwkJV1JJVEVfT05DRShscnVnZW4tPm5yX3BhZ2Vz W2dlbl1bdHlwZV1bem9uZV0sCisJCQkgICBscnVnZW4tPm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9u ZV0gKyBkZWx0YSk7CisKKwkJaWYgKGxydV9nZW5faXNfYWN0aXZlKGxydXZlYywgZ2VuKSkKKwkJ CWxydSArPSBMUlVfQUNUSVZFOworCQlfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgem9u ZSwgZGVsdGEpOworCX0KK30KKworc3RhdGljIGludCBzaG91bGRfc2tpcF92bWEodW5zaWduZWQg bG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICphcmdzKQorewor CXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hID0gYXJncy0+dm1hOworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLT5w cml2YXRlOworCisJaWYgKCF2bWFfaXNfYWNjZXNzaWJsZSh2bWEpIHx8IGlzX3ZtX2h1Z2V0bGJf cGFnZSh2bWEpIHx8CisJICAgICh2bWEtPnZtX2ZsYWdzICYgKFZNX0xPQ0tFRCB8IFZNX1NQRUNJ QUwgfCBWTV9TRVFfUkVBRCB8IFZNX1JBTkRfUkVBRCkpIHx8CisJICAgIHZtYSA9PSBnZXRfZ2F0 ZV92bWEodm1hLT52bV9tbSkpCisJCXJldHVybiB0cnVlOworCisJaWYgKHZtYV9pc19hbm9ueW1v dXModm1hKSkKKwkJcmV0dXJuICF3YWxrLT5jYW5fc3dhcDsKKworCWlmIChXQVJOX09OX09OQ0Uo IXZtYS0+dm1fZmlsZSB8fCAhdm1hLT52bV9maWxlLT5mX21hcHBpbmcpKQorCQlyZXR1cm4gdHJ1 ZTsKKworCW1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKKwlpZiAobWFwcGluZ191 bmV2aWN0YWJsZShtYXBwaW5nKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBjaGVjayByZWFkcGFn ZSB0byBleGNsdWRlIHNwZWNpYWwgbWFwcGluZ3MgbGlrZSBkYXgsIGV0Yy4gKi8KKwlyZXR1cm4g c2htZW1fbWFwcGluZyhtYXBwaW5nKSA/ICF3YWxrLT5jYW5fc3dhcCA6ICFtYXBwaW5nLT5hX29w cy0+cmVhZHBhZ2U7Cit9CisKKy8qCisgKiBTb21lIHVzZXJzcGFjZSBtZW1vcnkgYWxsb2NhdG9y cyBtYXAgbWFueSBzaW5nbGUtcGFnZSBWTUFzLiBJbnN0ZWFkIG9mCisgKiByZXR1cm5pbmcgYmFj ayB0byB0aGUgUEdEIHRhYmxlIGZvciBlYWNoIG9mIHN1Y2ggVk1BcywgZmluaXNoIGFuIGVudGly ZSBQTUQKKyAqIHRhYmxlIHRvIHJlZHVjZSB6aWd6YWdzIGFuZCBpbXByb3ZlIGNhY2hlIHBlcmZv cm1hbmNlLgorICovCitzdGF0aWMgYm9vbCBnZXRfbmV4dF92bWEodW5zaWduZWQgbG9uZyBtYXNr LCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtbV93YWxrICphcmdzLAorCQkJIHVuc2lnbmVk IGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpCit7CisJdW5zaWduZWQgbG9uZyBuZXh0 ID0gcm91bmRfdXAoKmVuZCwgc2l6ZSk7CisKKwlWTV9XQVJOX09OX09OQ0UobWFzayAmIHNpemUp OworCVZNX1dBUk5fT05fT05DRSgqc3RhcnQgPj0gKmVuZCk7CisJVk1fV0FSTl9PTl9PTkNFKChu ZXh0ICYgbWFzaykgIT0gKCpzdGFydCAmIG1hc2spKTsKKworCXdoaWxlIChhcmdzLT52bWEpIHsK KwkJaWYgKG5leHQgPj0gYXJncy0+dm1hLT52bV9lbmQpIHsKKwkJCWFyZ3MtPnZtYSA9IGFyZ3Mt PnZtYS0+dm1fbmV4dDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChuZXh0ICYgbWFzaykg IT0gKGFyZ3MtPnZtYS0+dm1fc3RhcnQgJiBtYXNrKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlp ZiAoc2hvdWxkX3NraXBfdm1hKGFyZ3MtPnZtYS0+dm1fc3RhcnQsIGFyZ3MtPnZtYS0+dm1fZW5k LCBhcmdzKSkgeworCQkJYXJncy0+dm1hID0gYXJncy0+dm1hLT52bV9uZXh0OworCQkJY29udGlu dWU7CisJCX0KKworCQkqc3RhcnQgPSBtYXgobmV4dCwgYXJncy0+dm1hLT52bV9zdGFydCk7CisJ CW5leHQgPSAobmV4dCB8IH5tYXNrKSArIDE7CisJCS8qIHJvdW5kZWQtdXAgYm91bmRhcmllcyBj YW4gd3JhcCB0byAwICovCisJCSplbmQgPSBuZXh0ICYmIG5leHQgPCBhcmdzLT52bWEtPnZtX2Vu ZCA/IG5leHQgOiBhcmdzLT52bWEtPnZtX2VuZDsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFs LCBpbnQgeW91bmcpCit7CisJaW50IG4gPSBjbGFtcF90KGludCwgY2FjaGVfbGluZV9zaXplKCkg LyBzaXplb2YocHRlX3QpLCAyLCA4KTsKKworCS8qIHN1aXRhYmxlIGlmIHRoZSBhdmVyYWdlIG51 bWJlciBvZiB5b3VuZyBQVEVzIHBlciBjYWNoZWxpbmUgaXMgPj0xICovCisJcmV0dXJuIHlvdW5n ICogbiA+PSB0b3RhbDsKK30KKworc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBt ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICBzdHJ1Y3Qg bW1fd2FsayAqYXJncykKK3sKKwlpbnQgaTsKKwlwdGVfdCAqcHRlOworCXNwaW5sb2NrX3QgKnB0 bDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IHRvdGFsID0gMDsKKwlpbnQgeW91bmcgPSAw OworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBhcmdzLT5wcml2YXRlOworCXN0cnVj dCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyh3YWxrLT5scnV2ZWMpOworCXN0cnVj dCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0+bHJ1dmVjKTsKKwlpbnQg b2xkX2dlbiwgbmV3X2dlbiA9IGxydV9nZW5fZnJvbV9zZXEod2Fsay0+bWF4X3NlcSk7CisKKwlW TV9XQVJOX09OX09OQ0UocG1kX2xlYWYoKnBtZCkpOworCisJcHRsID0gcHRlX2xvY2twdHIoYXJn cy0+bW0sIHBtZCk7CisJaWYgKCFzcGluX3RyeWxvY2socHRsKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcChw bWQsIHN0YXJ0ICYgUE1EX01BU0spOworcmVzdGFydDoKKwlmb3IgKGkgPSBwdGVfaW5kZXgoc3Rh cnQpLCBhZGRyID0gc3RhcnQ7IGFkZHIgIT0gZW5kOyBpKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7 CisJCXN0cnVjdCBmb2xpbyAqZm9saW87CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3Bmbihw dGVbaV0pOworCisJCVZNX1dBUk5fT05fT05DRShhZGRyIDwgYXJncy0+dm1hLT52bV9zdGFydCB8 fCBhZGRyID49IGFyZ3MtPnZtYS0+dm1fZW5kKTsKKworCQl0b3RhbCsrOworCQl3YWxrLT5tbV9z dGF0c1tNTV9QVEVfVE9UQUxdKys7CisKKwkJaWYgKCFwdGVfcHJlc2VudChwdGVbaV0pIHx8IGlz X3plcm9fcGZuKHBmbikpCisJCQljb250aW51ZTsKKworCQlpZiAoV0FSTl9PTl9PTkNFKHB0ZV9k ZXZtYXAocHRlW2ldKSB8fCBwdGVfc3BlY2lhbChwdGVbaV0pKSkKKwkJCWNvbnRpbnVlOworCisJ CWlmICghcHRlX3lvdW5nKHB0ZVtpXSkpIHsKKwkJCXdhbGstPm1tX3N0YXRzW01NX1BURV9PTERd Kys7CisJCQljb250aW51ZTsKKwkJfQorCisJCVZNX1dBUk5fT05fT05DRSghcGZuX3ZhbGlkKHBm bikpOworCQlpZiAocGZuIDwgcGdkYXQtPm5vZGVfc3RhcnRfcGZuIHx8IHBmbiA+PSBwZ2RhdF9l bmRfcGZuKHBnZGF0KSkKKwkJCWNvbnRpbnVlOworCisJCWZvbGlvID0gcGZuX2ZvbGlvKHBmbik7 CisJCWlmIChmb2xpb19uaWQoZm9saW8pICE9IHBnZGF0LT5ub2RlX2lkKQorCQkJY29udGludWU7 CisKKwkJaWYgKGZvbGlvX21lbWNnX3JjdShmb2xpbykgIT0gbWVtY2cpCisJCQljb250aW51ZTsK KworCQlpZiAoIWZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSAmJiAhd2Fsay0+Y2FuX3N3YXApCisJ CQljb250aW51ZTsKKworCQlpZiAoIXB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYXJncy0+dm1h LCBhZGRyLCBwdGUgKyBpKSkKKwkJCWNvbnRpbnVlOworCisJCXlvdW5nKys7CisJCXdhbGstPm1t X3N0YXRzW01NX1BURV9ZT1VOR10rKzsKKworCQlpZiAocHRlX2RpcnR5KHB0ZVtpXSkgJiYgIWZv bGlvX3Rlc3RfZGlydHkoZm9saW8pICYmCisJCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykg JiYgZm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmJgorCQkgICAgICAhZm9saW9fdGVzdF9z d2FwY2FjaGUoZm9saW8pKSkKKwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOworCisJCW9sZF9n ZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTsKKwkJaWYgKG9sZF9nZW4gPj0g MCAmJiBvbGRfZ2VuICE9IG5ld19nZW4pCisJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xp bywgb2xkX2dlbiwgbmV3X2dlbik7CisJfQorCisJaWYgKGkgPCBQVFJTX1BFUl9QVEUgJiYgZ2V0 X25leHRfdm1hKFBNRF9NQVNLLCBQQUdFX1NJWkUsIGFyZ3MsICZzdGFydCwgJmVuZCkpCisJCWdv dG8gcmVzdGFydDsKKworCXB0ZV91bm1hcChwdGUpOworCisJYXJjaF9sZWF2ZV9sYXp5X21tdV9t b2RlKCk7CisJc3Bpbl91bmxvY2socHRsKTsKKworCXJldHVybiBzdWl0YWJsZV90b19zY2FuKHRv dGFsLCB5b3VuZyk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFH RSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcpCitzdGF0aWMg dm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBuZXh0 LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgIHN0cnVjdCBtbV93YWxrICphcmdz LCB1bnNpZ25lZCBsb25nICpzdGFydCkKK3sKKwlpbnQgaTsKKwlwbWRfdCAqcG1kOworCXNwaW5s b2NrX3QgKnB0bDsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0+cHJpdmF0 ZTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cod2Fsay0+bHJ1dmVj KTsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KHdhbGstPmxydXZl Yyk7CisJaW50IG9sZF9nZW4sIG5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHdhbGstPm1heF9z ZXEpOworCisJVk1fV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKCpwdWQpKTsKKworCS8qIHRyeSB0byBi YXRjaCBhdCBtb3N0IDErTUlOX0xSVV9CQVRDSCsxIGVudHJpZXMgKi8KKwlpZiAoKnN0YXJ0ID09 IC0xKSB7CisJCSpzdGFydCA9IG5leHQ7CisJCXJldHVybjsKKwl9CisKKwlpID0gbmV4dCA9PSAt MSA/IDAgOiBwbWRfaW5kZXgobmV4dCkgLSBwbWRfaW5kZXgoKnN0YXJ0KTsKKwlpZiAoaSAmJiBp IDw9IE1JTl9MUlVfQkFUQ0gpIHsKKwkJX19zZXRfYml0KGkgLSAxLCB3YWxrLT5iaXRtYXApOwor CQlyZXR1cm47CisJfQorCisJcG1kID0gcG1kX29mZnNldChwdWQsICpzdGFydCk7CisKKwlwdGwg PSBwbWRfbG9ja3B0cihhcmdzLT5tbSwgcG1kKTsKKwlpZiAoIXNwaW5fdHJ5bG9jayhwdGwpKQor CQlnb3RvIGRvbmU7CisKKwlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKKworCWRvIHsKKwkJ c3RydWN0IGZvbGlvICpmb2xpbzsKKwkJdW5zaWduZWQgbG9uZyBwZm4gPSBwbWRfcGZuKHBtZFtp XSk7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IGkgPyAoKnN0YXJ0ICYgUE1EX01BU0spICsgaSAq IFBNRF9TSVpFIDogKnN0YXJ0OworCisJCVZNX1dBUk5fT05fT05DRShhZGRyIDwgdm1hLT52bV9z dGFydCB8fCBhZGRyID49IHZtYS0+dm1fZW5kKTsKKworCQlpZiAoIXBtZF9wcmVzZW50KHBtZFtp XSkgfHwgaXNfaHVnZV96ZXJvX3BtZChwbWRbaV0pKQorCQkJZ290byBuZXh0OworCisJCWlmIChX QVJOX09OX09OQ0UocG1kX2Rldm1hcChwbWRbaV0pKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAo IXBtZF90cmFuc19odWdlKHBtZFtpXSkpIHsKKwkJCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNI X0hBU19OT05MRUFGX1BNRF9ZT1VORykpCisJCQkJcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2 bWEsIGFkZHIsIHBtZCArIGkpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJVk1fV0FSTl9PTl9P TkNFKCFwZm5fdmFsaWQocGZuKSk7CisJCWlmIChwZm4gPCBwZ2RhdC0+bm9kZV9zdGFydF9wZm4g fHwgcGZuID49IHBnZGF0X2VuZF9wZm4ocGdkYXQpKQorCQkJZ290byBuZXh0OworCisJCWZvbGlv ID0gcGZuX2ZvbGlvKHBmbik7CisJCWlmIChmb2xpb19uaWQoZm9saW8pICE9IHBnZGF0LT5ub2Rl X2lkKQorCQkJZ290byBuZXh0OworCisJCWlmIChmb2xpb19tZW1jZ19yY3UoZm9saW8pICE9IG1l bWNnKQorCQkJZ290byBuZXh0OworCisJCWlmICghZm9saW9faXNfZmlsZV9scnUoZm9saW8pICYm ICF3YWxrLT5jYW5fc3dhcCkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAoIXBtZHBfdGVzdF9hbmRf Y2xlYXJfeW91bmcodm1hLCBhZGRyLCBwbWQgKyBpKSkKKwkJCWdvdG8gbmV4dDsKKworCQl3YWxr LT5tbV9zdGF0c1tNTV9QVEVfWU9VTkddKys7CisKKwkJaWYgKHBtZF9kaXJ0eShwbWRbaV0pICYm ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmJgorCQkgICAgIShmb2xpb190ZXN0X2Fub24oZm9s aW8pICYmIGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJiYKKwkJICAgICAgIWZvbGlvX3Rl c3Rfc3dhcGNhY2hlKGZvbGlvKSkpCisJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKKworCQlv bGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7CisJCWlmIChvbGRfZ2Vu ID49IDAgJiYgb2xkX2dlbiAhPSBuZXdfZ2VuKQorCQkJdXBkYXRlX2JhdGNoX3NpemUod2Fsaywg Zm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOworbmV4dDoKKwkJaSA9IGkgPiBNSU5fTFJVX0JBVENI ID8gMCA6CisJCSAgICBmaW5kX25leHRfYml0KHdhbGstPmJpdG1hcCwgTUlOX0xSVV9CQVRDSCwg aSkgKyAxOworCX0gd2hpbGUgKGkgPD0gTUlOX0xSVV9CQVRDSCk7CisKKwlhcmNoX2xlYXZlX2xh enlfbW11X21vZGUoKTsKKwlzcGluX3VubG9jayhwdGwpOworZG9uZToKKwkqc3RhcnQgPSAtMTsK KwliaXRtYXBfemVybyh3YWxrLT5iaXRtYXAsIE1JTl9MUlVfQkFUQ0gpOworfQorI2Vsc2UKK3N0 YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25n IG5leHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgc3RydWN0IG1tX3dhbGsg KmFyZ3MsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0KQoreworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lk IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVk IGxvbmcgZW5kLAorCQkJICAgc3RydWN0IG1tX3dhbGsgKmFyZ3MpCit7CisJaW50IGk7CisJcG1k X3QgKnBtZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgcG9zID0gLTE7CisJc3Ry dWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtPnByaXZhdGU7CisKKwlWTV9XQVJOX09O X09OQ0UocHVkX2xlYWYoKnB1ZCkpOworCisJLyoKKwkgKiBGaW5pc2ggYW4gZW50aXJlIFBNRCBp biB0d28gcGFzc2VzOiB0aGUgZmlyc3Qgb25seSByZWFjaGVzIHRvIFBURQorCSAqIHRhYmxlcyB0 byBhdm9pZCB0YWtpbmcgdGhlIFBNRCBsb2NrOyB0aGUgc2Vjb25kLCBpZiBuZWNlc3NhcnksIHRh a2VzCisJICogdGhlIFBNRCBsb2NrIHRvIGNsZWFyIHRoZSBhY2Nlc3NlZCBiaXQgaW4gUE1EIGVu dHJpZXMuCisJICovCisJcG1kID0gcG1kX29mZnNldChwdWQsIHN0YXJ0ICYgUFVEX01BU0spOwor cmVzdGFydDoKKwkvKiB3YWxrX3B0ZV9yYW5nZSgpIG1heSBjYWxsIGdldF9uZXh0X3ZtYSgpICov CisJdm1hID0gYXJncy0+dm1hOworCWZvciAoaSA9IHBtZF9pbmRleChzdGFydCksIGFkZHIgPSBz dGFydDsgYWRkciAhPSBlbmQ7IGkrKywgYWRkciA9IG5leHQpIHsKKwkJcG1kX3QgdmFsID0gcG1k X3JlYWRfYXRvbWljKHBtZCArIGkpOworCisJCS8qIGZvciBwbWRfcmVhZF9hdG9taWMoKSAqLwor CQliYXJyaWVyKCk7CisKKwkJbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCisJCWlm ICghcG1kX3ByZXNlbnQodmFsKSkgeworCQkJd2Fsay0+bW1fc3RhdHNbTU1fUFRFX1RPVEFMXSsr OworCQkJY29udGludWU7CisJCX0KKworI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFH RQorCQlpZiAocG1kX3RyYW5zX2h1Z2UodmFsKSkgeworCQkJdW5zaWduZWQgbG9uZyBwZm4gPSBw bWRfcGZuKHZhbCk7CisJCQlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0 KHdhbGstPmxydXZlYyk7CisKKwkJCXdhbGstPm1tX3N0YXRzW01NX1BURV9UT1RBTF0rKzsKKwor CQkJaWYgKGlzX2h1Z2VfemVyb19wbWQodmFsKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFw bWRfeW91bmcodmFsKSkgeworCQkJCXdhbGstPm1tX3N0YXRzW01NX1BURV9PTERdKys7CisJCQkJ Y29udGludWU7CisJCQl9CisKKwkJCWlmIChwZm4gPCBwZ2RhdC0+bm9kZV9zdGFydF9wZm4gfHwg cGZuID49IHBnZGF0X2VuZF9wZm4ocGdkYXQpKQorCQkJCWNvbnRpbnVlOworCisJCQl3YWxrX3Bt ZF9yYW5nZV9sb2NrZWQocHVkLCBhZGRyLCB2bWEsIGFyZ3MsICZwb3MpOworCQkJY29udGludWU7 CisJCX0KKyNlbmRpZgorCQl3YWxrLT5tbV9zdGF0c1tNTV9QTURfVE9UQUxdKys7CisKKyNpZmRl ZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcKKwkJaWYgKCFwbWRfeW91bmcodmFs KSkKKwkJCWNvbnRpbnVlOworCisJCXdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWQsIGFkZHIsIHZt YSwgYXJncywgJnBvcyk7CisjZW5kaWYKKwkJaWYgKCF3YWxrLT5mb3JjZV9zY2FuICYmICF0ZXN0 X2Jsb29tX2ZpbHRlcih3YWxrLT5scnV2ZWMsIHdhbGstPm1heF9zZXEsIHBtZCArIGkpKQorCQkJ Y29udGludWU7CisKKwkJd2Fsay0+bW1fc3RhdHNbTU1fUE1EX0ZPVU5EXSsrOworCisJCWlmICgh d2Fsa19wdGVfcmFuZ2UoJnZhbCwgYWRkciwgbmV4dCwgYXJncykpCisJCQljb250aW51ZTsKKwor CQl3YWxrLT5tbV9zdGF0c1tNTV9QTURfQURERURdKys7CisKKwkJLyogY2Fycnkgb3ZlciB0byB0 aGUgbmV4dCBnZW5lcmF0aW9uICovCisJCXVwZGF0ZV9ibG9vbV9maWx0ZXIod2Fsay0+bHJ1dmVj LCB3YWxrLT5tYXhfc2VxICsgMSwgcG1kICsgaSk7CisJfQorCisJd2Fsa19wbWRfcmFuZ2VfbG9j a2VkKHB1ZCwgLTEsIHZtYSwgYXJncywgJnBvcyk7CisKKwlpZiAoaSA8IFBUUlNfUEVSX1BNRCAm JiBnZXRfbmV4dF92bWEoUFVEX01BU0ssIFBNRF9TSVpFLCBhcmdzLCAmc3RhcnQsICZlbmQpKQor CQlnb3RvIHJlc3RhcnQ7Cit9CisKK3N0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0 ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgIHN0cnVjdCBt bV93YWxrICphcmdzKQoreworCWludCBpOworCXB1ZF90ICpwdWQ7CisJdW5zaWduZWQgbG9uZyBh ZGRyOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxr ID0gYXJncy0+cHJpdmF0ZTsKKworCVZNX1dBUk5fT05fT05DRShwNGRfbGVhZigqcDRkKSk7CisK KwlwdWQgPSBwdWRfb2Zmc2V0KHA0ZCwgc3RhcnQgJiBQNERfTUFTSyk7CityZXN0YXJ0OgorCWZv ciAoaSA9IHB1ZF9pbmRleChzdGFydCksIGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IGkrKywg YWRkciA9IG5leHQpIHsKKwkJcHVkX3QgdmFsID0gUkVBRF9PTkNFKHB1ZFtpXSk7CisKKwkJbmV4 dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCisJCWlmICghcHVkX3ByZXNlbnQodmFsKSB8 fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpCisJCQljb250aW51ZTsKKworCQl3YWxrX3Bt ZF9yYW5nZSgmdmFsLCBhZGRyLCBuZXh0LCBhcmdzKTsKKworCQlpZiAod2Fsay0+YmF0Y2hlZCA+ PSBNQVhfTFJVX0JBVENIKSB7CisJCQllbmQgPSAoYWRkciB8IH5QVURfTUFTSykgKyAxOworCQkJ Z290byBkb25lOworCQl9CisJfQorCisJaWYgKGkgPCBQVFJTX1BFUl9QVUQgJiYgZ2V0X25leHRf dm1hKFA0RF9NQVNLLCBQVURfU0laRSwgYXJncywgJnN0YXJ0LCAmZW5kKSkKKwkJZ290byByZXN0 YXJ0OworCisJZW5kID0gcm91bmRfdXAoZW5kLCBQNERfU0laRSk7Citkb25lOgorCS8qIHJvdW5k ZWQtdXAgYm91bmRhcmllcyBjYW4gd3JhcCB0byAwICovCisJd2Fsay0+bmV4dF9hZGRyID0gZW5k ICYmIGFyZ3MtPnZtYSA/IG1heChlbmQsIGFyZ3MtPnZtYS0+dm1fc3RhcnQpIDogMDsKKworCXJl dHVybiAtRUFHQUlOOworfQorCitzdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsp Cit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtbV93YWxrX29wcyA9IHsKKwkJ LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSwKKwkJLnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3Jh bmdlLAorCX07CisKKwlpbnQgZXJyOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZl Y19tZW1jZyhscnV2ZWMpOworCisJd2Fsay0+bmV4dF9hZGRyID0gRklSU1RfVVNFUl9BRERSRVNT OworCisJZG8geworCQllcnIgPSAtRUJVU1k7CisKKwkJLyogZm9saW9fdXBkYXRlX2dlbigpIHJl cXVpcmVzIHN0YWJsZSBmb2xpb19tZW1jZygpICovCisJCWlmICghbWVtX2Nncm91cF90cnlsb2Nr X3BhZ2VzKG1lbWNnKSkKKwkJCWJyZWFrOworCisJCS8qIHRoZSBjYWxsZXIgbWlnaHQgYmUgaG9s ZGluZyB0aGUgbG9jayBmb3Igd3JpdGUgKi8KKwkJaWYgKG1tYXBfcmVhZF90cnlsb2NrKG1tKSkg eworCQkJZXJyID0gd2Fsa19wYWdlX3JhbmdlKG1tLCB3YWxrLT5uZXh0X2FkZHIsIFVMT05HX01B WCwgJm1tX3dhbGtfb3BzLCB3YWxrKTsKKworCQkJbW1hcF9yZWFkX3VubG9jayhtbSk7CisKKwkJ CWlmICh3YWxrLT5iYXRjaGVkKSB7CisJCQkJc3Bpbl9sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9j ayk7CisJCQkJcmVzZXRfYmF0Y2hfc2l6ZShscnV2ZWMsIHdhbGspOworCQkJCXNwaW5fdW5sb2Nr X2lycSgmbHJ1dmVjLT5scnVfbG9jayk7CisJCQl9CisJCX0KKworCQltZW1fY2dyb3VwX3VubG9j a19wYWdlcygpOworCisJCWNvbmRfcmVzY2hlZCgpOworCX0gd2hpbGUgKGVyciA9PSAtRUFHQUlO ICYmIHdhbGstPm5leHRfYWRkciAmJiAhbW1faXNfb29tX3ZpY3RpbShtbSkpOworfQorCitzdGF0 aWMgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqYWxsb2NfbW1fd2Fsayh2b2lkKQoreworCWlmIChj dXJyZW50LT5yZWNsYWltX3N0YXRlICYmIGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGsp CisJCXJldHVybiBjdXJyZW50LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrOworCisJcmV0dXJuIGt6 YWxsb2Moc2l6ZW9mKHN0cnVjdCBscnVfZ2VuX21tX3dhbGspLAorCQkgICAgICAgX19HRlBfSElH SCB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pOworfQorCitzdGF0aWMgdm9pZCBm cmVlX21tX3dhbGsoc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaykKK3sKKwlpZiAoIWN1cnJl bnQtPnJlY2xhaW1fc3RhdGUgfHwgIWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGspCisJ CWtmcmVlKHdhbGspOworfQorCiBzdGF0aWMgdm9pZCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVj ICpscnV2ZWMsIGludCB0eXBlKQogewogCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0g JmxydXZlYy0+bHJ1Z2VuOwpAQCAtMzI0NCw3ICs0MDg4LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3Rv X2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBjYW5fc3dhcCkKIAlyZXR1 cm4gc3VjY2VzczsKIH0KIAotc3RhdGljIHZvaWQgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAq bHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsIGJvb2wgY2FuX3N3YXApCitzdGF0aWMgdm9p ZCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgY2FuX3N3YXApCiB7CiAJ aW50IHByZXYsIG5leHQ7CiAJaW50IHR5cGUsIHpvbmU7CkBAIC0zMjU0LDkgKzQwOTgsNiBAQCBz dGF0aWMgdm9pZCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxv bmcgbWF4X3NlcSwgYm9vbCBjYW5fcwogCiAJVk1fV0FSTl9PTl9PTkNFKCFzZXFfaXNfdmFsaWQo bHJ1dmVjKSk7CiAKLQlpZiAobWF4X3NlcSAhPSBscnVnZW4tPm1heF9zZXEpCi0JCWdvdG8gdW5s b2NrOwotCiAJZm9yICh0eXBlID0gMDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUrKykgewog CQlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUykKIAkJCWNvbnRp bnVlOwpAQCAtMzI5NCwxMCArNDEzNSw3MiBAQCBzdGF0aWMgdm9pZCBpbmNfbWF4X3NlcShzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgYm9vbCBjYW5fcwogCiAJ LyogbWFrZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqLwogCXNtcF9zdG9y ZV9yZWxlYXNlKCZscnVnZW4tPm1heF9zZXEsIGxydWdlbi0+bWF4X3NlcSArIDEpOwotdW5sb2Nr OgorCiAJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKIH0KIAorc3RhdGljIGJv b2wgdHJ5X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9u ZyBtYXhfc2VxLAorCQkJICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sIGNhbl9z d2FwKQoreworCWJvb2wgc3VjY2VzczsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOwor CXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxy dWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKworCVZNX1dBUk5fT05fT05DRShtYXhfc2VxID4gUkVB RF9PTkNFKGxydWdlbi0+bWF4X3NlcSkpOworCisJLyoKKwkgKiBJZiB0aGUgaGFyZHdhcmUgZG9l c24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFjaworCSAqIHRv IGxydV9nZW5fbG9va19hcm91bmQoKSwgd2hpY2ggb25seSBjbGVhcnMgdGhlIGFjY2Vzc2VkIGJp dCBpbiBhCisJICogaGFuZGZ1bCBvZiBQVEVzLiBTcHJlYWRpbmcgdGhlIHdvcmsgb3V0IG92ZXIg YSBwZXJpb2Qgb2YgdGltZSB1c3VhbGx5CisJICogaXMgbGVzcyBlZmZpY2llbnQsIGJ1dCBpdCBh dm9pZHMgYnVyc3R5IHBhZ2UgZmF1bHRzLgorCSAqLworCWlmICghYXJjaF9oYXNfaHdfcHRlX3lv dW5nKCkpIHsKKwkJc3VjY2VzcyA9IGl0ZXJhdGVfbW1fbGlzdF9ub3dhbGsobHJ1dmVjLCBtYXhf c2VxKTsKKwkJZ290byBkb25lOworCX0KKworCXdhbGsgPSBhbGxvY19tbV93YWxrKCk7CisJaWYg KCF3YWxrKSB7CisJCXN1Y2Nlc3MgPSBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKGxydXZlYywgbWF4 X3NlcSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwl3YWxrLT5scnV2ZWMgPSBscnV2ZWM7CisJd2Fs ay0+bWF4X3NlcSA9IG1heF9zZXE7CisJd2Fsay0+Y2FuX3N3YXAgPSBjYW5fc3dhcDsKKwl3YWxr LT5mb3JjZV9zY2FuID0gZmFsc2U7CisKKwlkbyB7CisJCXN1Y2Nlc3MgPSBpdGVyYXRlX21tX2xp c3QobHJ1dmVjLCB3YWxrLCAmbW0pOworCQlpZiAobW0pCisJCQl3YWxrX21tKGxydXZlYywgbW0s IHdhbGspOworCisJCWNvbmRfcmVzY2hlZCgpOworCX0gd2hpbGUgKG1tKTsKKworCWZyZWVfbW1f d2Fsayh3YWxrKTsKK2RvbmU6CisJaWYgKCFzdWNjZXNzKSB7CisJCWlmICghY3VycmVudF9pc19r c3dhcGQoKSAmJiAhc2MtPnByaW9yaXR5KQorCQkJd2FpdF9ldmVudF9raWxsYWJsZShscnV2ZWMt Pm1tX3N0YXRlLndhaXQsCisJCQkJCSAgICBtYXhfc2VxIDwgUkVBRF9PTkNFKGxydWdlbi0+bWF4 X3NlcSkpOworCisJCXJldHVybiBtYXhfc2VxIDwgUkVBRF9PTkNFKGxydWdlbi0+bWF4X3NlcSk7 CisJfQorCisJVk1fV0FSTl9PTl9PTkNFKG1heF9zZXEgIT0gUkVBRF9PTkNFKGxydWdlbi0+bWF4 X3NlcSkpOworCisJaW5jX21heF9zZXEobHJ1dmVjLCBjYW5fc3dhcCk7CisJLyogZWl0aGVyIHRo aXMgc2VlcyBhbnkgd2FpdGVycyBvciB0aGV5IHdpbGwgc2VlIHVwZGF0ZWQgbWF4X3NlcSAqLwor CWlmICh3cV9oYXNfc2xlZXBlcigmbHJ1dmVjLT5tbV9zdGF0ZS53YWl0KSkKKwkJd2FrZV91cF9h bGwoJmxydXZlYy0+bW1fc3RhdGUud2FpdCk7CisKKwl3YWtldXBfZmx1c2hlcl90aHJlYWRzKFdC X1JFQVNPTl9WTVNDQU4pOworCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBsb25nIGdldF9u cl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEs CiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgKm1pbl9zZXEsIGJvb2wgY2FuX3N3YXAsIGJvb2wgKm5l ZWRfYWdpbmcpCiB7CkBAIC0zMzc4LDcgKzQyODEsNyBAQCBzdGF0aWMgdm9pZCBhZ2VfbHJ1dmVj KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJCW5yX3Rv X3NjYW4rKzsKIAogCWlmIChucl90b19zY2FuICYmIG5lZWRfYWdpbmcpCi0JCWluY19tYXhfc2Vx KGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcyk7CisJCXRyeV90b19pbmNfbWF4X3NlcShscnV2 ZWMsIG1heF9zZXEsIHNjLCBzd2FwcGluZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9h Z2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpz YykKQEAgLTMzODcsNiArNDI5MCw4IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3Ry dWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAKIAlWTV9X QVJOX09OX09OQ0UoIWN1cnJlbnRfaXNfa3N3YXBkKCkpOwogCisJY3VycmVudC0+cmVjbGFpbV9z dGF0ZS0+bW1fd2FsayA9ICZwZ2RhdC0+bW1fd2FsazsKKwogCW1lbWNnID0gbWVtX2Nncm91cF9p dGVyKE5VTEwsIE5VTEwsIE5VTEwpOwogCWRvIHsKIAkJc3RydWN0IGxydXZlYyAqbHJ1dmVjID0g bWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKQEAgLTMzOTUsMTEgKzQzMDAsMTYgQEAg c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBz dHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCQljb25kX3Jlc2NoZWQoKTsKIAl9IHdoaWxlICgo bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7CisKKwljdXJyZW50 LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrID0gTlVMTDsKIH0KIAogLyoKICAqIFRoaXMgZnVuY3Rp b24gZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB3aGVuIHNocmlua19wYWdlX2xpc3QoKSB3YWxr cyB0aGUKLSAqIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRF IGFuZCBwcm9tb3RlcyBob3QgcGFnZXMuCisgKiBybWFwLiBJdCBzY2FucyB0aGUgYWRqYWNlbnQg UFRFcyBvZiBhIHlvdW5nIFBURSBhbmQgcHJvbW90ZXMgaG90IHBhZ2VzLiBJZgorICogdGhlIHNj YW4gd2FzIGRvbmUgY2FjaGVsaW5lIGVmZmljaWVudGx5LCBpdCBhZGRzIHRoZSBQTUQgZW50cnkg cG9pbnRpbmcgdG8KKyAqIHRoZSBQVEUgdGFibGUgdG8gdGhlIEJsb29tIGZpbHRlci4gVGhpcyBm b3JtcyBhIGZlZWRiYWNrIGxvb3AgYmV0d2VlbiB0aGUKKyAqIGV2aWN0aW9uIGFuZCB0aGUgYWdp bmcuCiAgKi8KIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVk X3dhbGsgKnB2bXcpCiB7CkBAIC0zNDA4LDYgKzQzMTgsOCBAQCB2b2lkIGxydV9nZW5fbG9va19h cm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCXVuc2lnbmVkIGxvbmcg c3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVj dCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CisJaW50IHlvdW5nID0gMDsKIAl1bnNpZ25lZCBsb25n IGJpdG1hcFtCSVRTX1RPX0xPTkdTKE1JTl9MUlVfQkFUQ0gpXSA9IHt9OwogCXN0cnVjdCBmb2xp byAqZm9saW8gPSBwZm5fZm9saW8ocHZtdy0+cGZuKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVt Y2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CkBAIC0zNDY5LDYgKzQzODEsOCBAQCB2b2lkIGxydV9n ZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCQlpZiAo IXB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcocHZtdy0+dm1hLCBhZGRyLCBwdGUgKyBpKSkKIAkJ CWNvbnRpbnVlOwogCisJCXlvdW5nKys7CisKIAkJaWYgKHB0ZV9kaXJ0eShwdGVbaV0pICYmICFm b2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmJgogCQkgICAgIShmb2xpb190ZXN0X2Fub24oZm9saW8p ICYmIGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJiYKIAkJICAgICAgIWZvbGlvX3Rlc3Rf c3dhcGNhY2hlKGZvbGlvKSkpCkBAIC0zNDg0LDcgKzQzOTgsMTMgQEAgdm9pZCBscnVfZ2VuX2xv b2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAlhcmNoX2xlYXZl X2xhenlfbW11X21vZGUoKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWlmIChiaXRtYXBfd2Vp Z2h0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCkgPCBQQUdFVkVDX1NJWkUpIHsKKwkvKiBmZWVkYmFj ayBmcm9tIHJtYXAgd2Fsa2VycyB0byBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KKwlpZiAoc3VpdGFi bGVfdG9fc2NhbihpLCB5b3VuZykpCisJCXVwZGF0ZV9ibG9vbV9maWx0ZXIobHJ1dmVjLCBtYXhf c2VxLCBwdm13LT5wbWQpOworCisJd2FsayA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPyBjdXJy ZW50LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrIDogTlVMTDsKKworCWlmICghd2FsayAmJiBiaXRt YXBfd2VpZ2h0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCkgPCBQQUdFVkVDX1NJWkUpIHsKIAkJZm9y X2VhY2hfc2V0X2JpdChpLCBiaXRtYXAsIE1JTl9MUlVfQkFUQ0gpIHsKIAkJCWZvbGlvID0gcGZu X2ZvbGlvKHB0ZV9wZm4ocHRlW2ldKSk7CiAJCQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CkBAIC0z NDk2LDggKzQ0MTYsMTAgQEAgdm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3Zt YV9tYXBwZWRfd2FsayAqcHZtdykKIAlpZiAoIW1lbV9jZ3JvdXBfdHJ5bG9ja19wYWdlcyhtZW1j ZykpCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwotCW5l d19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydXZlYy0+bHJ1Z2VuLm1heF9zZXEpOworCWlmICgh d2FsaykgeworCQlzcGluX2xvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKwkJbmV3X2dlbiA9 IGxydV9nZW5fZnJvbV9zZXEobHJ1dmVjLT5scnVnZW4ubWF4X3NlcSk7CisJfQogCiAJZm9yX2Vh Y2hfc2V0X2JpdChpLCBiaXRtYXAsIE1JTl9MUlVfQkFUQ0gpIHsKIAkJZm9saW8gPSBwZm5fZm9s aW8ocHRlX3BmbihwdGVbaV0pKTsKQEAgLTM1MDgsMTAgKzQ0MzAsMTQgQEAgdm9pZCBscnVfZ2Vu X2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdykKIAkJaWYgKG9s ZF9nZW4gPCAwIHx8IG9sZF9nZW4gPT0gbmV3X2dlbikKIAkJCWNvbnRpbnVlOwogCi0JCWxydV9n ZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CisJCWlmICh3 YWxrKQorCQkJdXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4p OworCQllbHNlCisJCQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywgZm9saW8sIG9sZF9nZW4s IG5ld19nZW4pOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7CisJ aWYgKCF3YWxrKQorCQlzcGluX3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOwogCiAJbWVt X2Nncm91cF91bmxvY2tfcGFnZXMoKTsKIH0KQEAgLTM3ODIsNiArNDcwOCw3IEBAIHN0YXRpYyBp bnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJv bCAqc2MsIGludCBzd2FwCiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAllbnVtIHZtX2V2ZW50X2l0 ZW0gaXRlbTsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CisJc3RydWN0IGxydV9nZW5fbW1f d2FsayAqd2FsazsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1 dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7 CiAKQEAgLTM4MjEsNiArNDc0OCwxMCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3Qg bHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcAogCiAJbW92 ZV9wYWdlc190b19scnUobHJ1dmVjLCAmbGlzdCk7CiAKKwl3YWxrID0gY3VycmVudC0+cmVjbGFp bV9zdGF0ZSA/IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGsgOiBOVUxMOworCWlmICh3 YWxrICYmIHdhbGstPmJhdGNoZWQpCisJCXJlc2V0X2JhdGNoX3NpemUobHJ1dmVjLCB3YWxrKTsK KwogCWl0ZW0gPSBjdXJyZW50X2lzX2tzd2FwZCgpID8gUEdTVEVBTF9LU1dBUEQgOiBQR1NURUFM X0RJUkVDVDsKIAlpZiAoIWNncm91cF9yZWNsYWltKHNjKSkKIAkJX19jb3VudF92bV9ldmVudHMo aXRlbSwgcmVjbGFpbWVkKTsKQEAgLTM4NzUsMjAgKzQ4MDYsMjUgQEAgc3RhdGljIGxvbmcgZ2V0 X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpz YywgYm9vbAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEs IGNhbl9zd2FwKTsKKwlpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc2Ms IGNhbl9zd2FwKSkKKwkJcmV0dXJuIG5yX3RvX3NjYW47CiAKLQlyZXR1cm4gbnJfdG9fc2NhbjsK KwlyZXR1cm4gbWluX3NlcVshY2FuX3N3YXBdICsgTUlOX05SX0dFTlMgPD0gbWF4X3NlcSA/IG5y X3RvX3NjYW4gOiAwOwogfQogCiBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3Ry dWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlzdHJ1Y3Qg YmxrX3BsdWcgcGx1ZzsKIAlsb25nIHNjYW5uZWQgPSAwOworCXN0cnVjdCBwZ2xpc3RfZGF0YSAq cGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAogCWxydV9hZGRfZHJhaW4oKTsKIAogCWJs a19zdGFydF9wbHVnKCZwbHVnKTsKIAorCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQljdXJy ZW50LT5yZWNsYWltX3N0YXRlLT5tbV93YWxrID0gJnBnZGF0LT5tbV93YWxrOworCiAJd2hpbGUg KHRydWUpIHsKIAkJaW50IGRlbHRhOwogCQlpbnQgc3dhcHBpbmVzczsKQEAgLTM5MTYsNiArNDg1 Miw5IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICps cnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjCiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAor CWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQorCQljdXJyZW50LT5yZWNsYWltX3N0YXRlLT5tbV93 YWxrID0gTlVMTDsKKwogCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiB9CiAKQEAgLTM5MzIsMTUg KzQ4NzEsMjEgQEAgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZl YykKIAogCWZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKQogCQlJTklUX0xJ U1RfSEVBRCgmbHJ1Z2VuLT5saXN0c1tnZW5dW3R5cGVdW3pvbmVdKTsKKworCWxydXZlYy0+bW1f c3RhdGUuc2VxID0gTUlOX05SX0dFTlM7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbHJ1dmVjLT5t bV9zdGF0ZS53YWl0KTsKIH0KIAogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBscnVfZ2VuX2lu aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogeworCUlOSVRfTElTVF9IRUFEKCZt ZW1jZy0+bW1fbGlzdC5maWZvKTsKKwlzcGluX2xvY2tfaW5pdCgmbWVtY2ctPm1tX2xpc3QubG9j ayk7CiB9CiAKIHZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1j ZykKIHsKKwlpbnQgaTsKIAlpbnQgbmlkOwogCiAJZm9yX2VhY2hfbm9kZShuaWQpIHsKQEAgLTM5 NDgsNiArNDg5MywxMSBAQCB2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91 cCAqbWVtY2cpCiAKIAkJVk1fV0FSTl9PTl9PTkNFKG1lbWNocl9pbnYobHJ1dmVjLT5scnVnZW4u bnJfcGFnZXMsIDAsCiAJCQkJCSAgIHNpemVvZihscnV2ZWMtPmxydWdlbi5ucl9wYWdlcykpKTsK KworCQlmb3IgKGkgPSAwOyBpIDwgTlJfQkxPT01fRklMVEVSUzsgaSsrKSB7CisJCQliaXRtYXBf ZnJlZShscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbaV0pOworCQkJbHJ1dmVjLT5tbV9zdGF0ZS5m aWx0ZXJzW2ldID0gTlVMTDsKKwkJfQogCX0KIH0KICNlbmRpZgpAQCAtMzk1Niw2ICs0OTA2LDcg QEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpCiB7CiAJQlVJTERfQlVHX09O KE1JTl9OUl9HRU5TICsgMSA+PSBNQVhfTlJfR0VOUyk7CiAJQlVJTERfQlVHX09OKEJJVChMUlVf R0VOX1dJRFRIKSA8PSBNQVhfTlJfR0VOUyk7CisJQlVJTERfQlVHX09OKHNpemVvZihNTV9TVEFU X0NPREVTKSAhPSBOUl9NTV9TVEFUUyArIDEpOwogCiAJcmV0dXJuIDA7CiB9OwotLSAKMi4zNi4w LjU1MC5nYjA5MDg1MTcwOC1nb29nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxt YW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=