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 140B9C00140 for ; Mon, 15 Aug 2022 07:38:14 +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=BjuL1LhS5+eP8rKwGZnZPLOS2faFyaT479zdIy1Jqjg=; b=Qno/ugst5klpW25MxA6f7m+it9 BoqCX6dzeE+0JCa33XIfYQjfWiD98x9LS+P68jykJvpUIJ2h3w0JI1mLTzHqoET/Ap7We/Ojdy7Ko irkq8TNLnKLPRCwlwJRNs6oPYCJo2c2Db6rMzVilROpme9S9Lphhk2iyaOAFzIKs23slvHEAdQN2X /SyCDXc+CTmHAau8Tx5lVoXDkydSmfNfGvM1X+plbhrCYCYrldceH07uKqtJH9ZrnLmRaiAM4HDse kTNRlFVAfPtYqs7ExK1B35cLfG/2/7OLV7/AuhQaWCi9YwdSSPJLX2RzZGI1tCD/Jnbz9o03AchXb dknsJ6+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oNUeF-00Cd2D-8q; Mon, 15 Aug 2022 07:36:31 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oNUdY-00Ccgk-L6 for linux-arm-kernel@bombadil.infradead.org; Mon, 15 Aug 2022 07:35:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; 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=TM21jdfcKqgM9bpuMCdSSNW4rhXF8c3CQP499OdnSbc=; b=hblSCZKgyyVgKQcicGEm223R90 iWh5yQuci2ZxV0sMVkYsJzXbGvaaefGzmbCXBHmYfelzYIEWxclGX5eQECwbxO6pMTDv8EEF1eSPO JnSpHOVnUhekZ0pK26oB/Vyd1btUL5EfNN1+Ot2cVc0jO3a38sPu10nFksEIJmT1xfOC2MiPSa2oK AxQZ5LBMGni/iZdvGtJIz9E/PXfnqI1VHUgmrHbRGCE8DwRw8fuqnqOaq1kaJUsS82LfoUHlMWnmr fmB7MZoKLO2SiwbmwUsem0YBxvyPKREsYKquGNgLTPi7Vwb73gzOfiXum2ySc/Esj5Fjywj7d1cCV Z+RIlIYw==; Received: from mail-io1-xd49.google.com ([2607:f8b0:4864:20::d49]) by casper.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oNUIx-005VcP-Tq for linux-arm-kernel@lists.infradead.org; Mon, 15 Aug 2022 07:14:36 +0000 Received: by mail-io1-xd49.google.com with SMTP id c5-20020a5ea805000000b00684468c5005so3746880ioa.15 for ; Mon, 15 Aug 2022 00:14:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=content-transfer-encoding:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:from:to:cc; bh=TM21jdfcKqgM9bpuMCdSSNW4rhXF8c3CQP499OdnSbc=; b=INcJQZuf4277XaEn+/p6Odua2o7YnbM187FZmscCbtB5ry/PK+eXCzFbwmikgkT7Ow YAA37/Fja2UyfMOSgKUtBkdEqOsTeVcthZ9/dBdCuX5St7shj2l76W2J2EVyLxz2kQYs p/r0NXMF8HEOknQ2sBFAuLLvyNgUJ1H3SZPWLkCqx/8m/8s/MheGqy9nDl1EWKUqaYwY SuF990H4MsW7T8BJp76k93nJZpSRmerMXLUO7XKx8hUd/bsiRkjIV30EmwLku4JB11ZH WNMLFkdQ/PMTuG2fcb/7i3Ca0ZoPXBnMZgfbw5UIImY6FdVWe7HvJYTH+HNSd6zHCt0D 36FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:x-gm-message-state:from:to :cc; bh=TM21jdfcKqgM9bpuMCdSSNW4rhXF8c3CQP499OdnSbc=; b=uCnlvXoqTfwO0Ue2bu+z0SGe1F7kmiW8zQeBR8CgUBxzGFPIH/J4joNfg+pUNeTiCr +yvw44csPL+ZmGmZ4N7fXyHRVr/5m4qT4017jLSIiBmXZBqd1IMz5+fnSEXNbFmJGU1D m9zqSxePHGvpWTULTKgbe4HgDDOcufitb8uLm4fYQogTzdmMZTYgsxIYhgRwnVh0KgLB pVwLMBuH9GUwM1RkZhfrP1nj+Rm6+dTlbd49kiofOjo9PcOeDmbvO6rXLUUC2/fhIoO/ iJt6Lfag28nMhN+9u02kJnAqrecvhIE0DfEEZa0FNsUaDVBGbhG2SasHCIhuEJyj7NeW Up8g== X-Gm-Message-State: ACgBeo0wTS3EUcvvSoNBU/b4lo8EbEyF/zF7DD1rGiPRioV1PBDw1zr3 t3BYgca/SKX6zT9K43HREazYvNJjLt4= X-Google-Smtp-Source: AA6agR40dbPKYqVVTNVHLnaRlP3yJdN76Ft5+4xF5YGBjxKWMeYtgK1+MkGUEUbiJrZSea5fVoQpOd/TSS4= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:d91:5887:ac93:ddf0]) (user=yuzhao job=sendgmr) by 2002:a05:6638:440b:b0:344:c317:82e6 with SMTP id bp11-20020a056638440b00b00344c31782e6mr3058384jab.21.1660547665345; Mon, 15 Aug 2022 00:14:25 -0700 (PDT) Date: Mon, 15 Aug 2022 01:13:27 -0600 In-Reply-To: <20220815071332.627393-1-yuzhao@google.com> Message-Id: <20220815071332.627393-9-yuzhao@google.com> Mime-Version: 1.0 References: <20220815071332.627393-1-yuzhao@google.com> X-Mailer: git-send-email 2.37.1.595.g718a3a8f04-goog Subject: [PATCH v14 08/14] mm: multi-gen LRU: support page table walks From: Yu Zhao To: Andrew Morton 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, linux-mm@kvack.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-20220815_081432_074637_CA38326C X-CRM114-Status: GOOD ( 28.77 ) 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 c2VjCiAgICAgIHBhdGNoMS03OiAxMTQ3Njk2LjU3ICAgNDQ2NDAuMjkKICAgICAgcGF0Y2gxLTg6 IDEyNDUyNzQuOTEgICA0ODQzNS42NgoKICBDb25maWd1cmF0aW9uczoKICAgIG5vIGNoYW5nZQoK Q2xpZW50IGJlbmNobWFyayByZXN1bHRzOgogIGtzd2FwZCBwcm9maWxlczoKICAgIHBhdGNoMS03 CiAgICAgIDQ4LjE2JSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAgICAgOC4y MCUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrIChvdmVyaGVhZCkKICAgICAgIDcuMDYlICBfcmF3X3Nw aW5fdW5sb2NrX2lycQogICAgICAgMi45MiUgIHB0ZXBfY2xlYXJfZmx1c2gKICAgICAgIDIuNTMl ICBfX3pyYW1fYnZlY193cml0ZQogICAgICAgMi4xMSUgIGRvX3Jhd19zcGluX2xvY2sKICAgICAg IDIuMDIlICBtZW1tb3ZlCiAgICAgICAxLjkzJSAgbHJ1X2dlbl9sb29rX2Fyb3VuZAogICAgICAg MS41NiUgIGZyZWVfdW5yZWZfcGFnZV9saXN0CiAgICAgICAxLjQwJSAgbWVtc2V0CgogICAgcGF0 Y2gxLTgKICAgICAgNDkuNDQlICBsem8xeF8xX2RvX2NvbXByZXNzIChyZWFsIHdvcmspCiAgICAg ICA2LjE5JSAgcGFnZV92bWFfbWFwcGVkX3dhbGsgKG92ZXJoZWFkKQogICAgICAgNS45NyUgIF9y YXdfc3Bpbl91bmxvY2tfaXJxCiAgICAgICAzLjEzJSAgZ2V0X3Bmbl9mb2xpbwogICAgICAgMi44 NSUgIHB0ZXBfY2xlYXJfZmx1c2gKICAgICAgIDIuNDIlICBfX3pyYW1fYnZlY193cml0ZQogICAg ICAgMi4wOCUgIGRvX3Jhd19zcGluX2xvY2sKICAgICAgIDEuOTIlICBtZW1tb3ZlCiAgICAgICAx LjQ0JSAgYWxsb2NfenNwYWdlCiAgICAgICAxLjM2JSAgbWVtc2V0CgogIENvbmZpZ3VyYXRpb25z OgogICAgbm8gY2hhbmdlCgpUaGFua3MgdG8gdGhlIGZvbGxvd2luZyBkZXZlbG9wZXJzIGZvciB0 aGVpciBlZmZvcnRzIFszXS4KICBrZXJuZWwgdGVzdCByb2JvdCA8bGtwQGludGVsLmNvbT4KClsx XSBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvMjM3MzIvClsyXSBodHRwczovL2xsdm0ub3JnL2Rv Y3MvU2N1ZG9IYXJkZW5lZEFsbG9jYXRvci5odG1sClszXSBodHRwczovL2xvcmUua2VybmVsLm9y Zy9yLzIwMjIwNDE2MDgyNy5la0VBUldRby1sa3BAaW50ZWwuY29tLwoKU2lnbmVkLW9mZi1ieTog WXUgWmhhbyA8eXV6aGFvQGdvb2dsZS5jb20+CkFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZm b25AZ29vZ2xlLmNvbT4KQWNrZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykg PGhlZnRpZ0BhcmNobGludXgub3JnPgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFsZW5rbyA8b2xl a3NhbmRyQG5hdGFsZW5rby5uYW1lPgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBs aXF1b3JpeC5uZXQ+CkFja2VkLWJ5OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1hbkBnb29nbGUu Y29tPgpUZXN0ZWQtYnk6IERhbmllbCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpUZXN0ZWQtYnk6 IERvbmFsZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xnZXIgSG9mZnN0 w6R0dGUgPGhvbGdlckBhcHBsaWVkLWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6IEtvbnN0YW50 aW4gS2hhcmxhbW92IDxIaS1BbmdlbEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1YW5nIFpoYWkg PHN6aGFpMkBjcy5yb2NoZXN0ZXIuZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5oIDxzb2ZpYS50 cmluaEBlZGkud29ya3M+ClRlc3RlZC1ieTogVmFpYmhhdiBKYWluIDx2YWliaGF2QGxpbnV4Lmli bS5jb20+Ci0tLQogZnMvZXhlYy5jICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGluY2x1ZGUv bGludXgvbWVtY29udHJvbC5oIHwgICAgNSArCiBpbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggICB8 ICAgNzcgKysrCiBpbmNsdWRlL2xpbnV4L21tem9uZS5oICAgICB8ICAgNTYgKy0KIGluY2x1ZGUv bGludXgvc3dhcC5oICAgICAgIHwgICAgNCArCiBrZXJuZWwvZXhpdC5jICAgICAgICAgICAgICB8 ICAgIDEgKwoga2VybmVsL2ZvcmsuYyAgICAgICAgICAgICAgfCAgICA5ICsKIGtlcm5lbC9zY2hl ZC9jb3JlLmMgICAgICAgIHwgICAgMSArCiBtbS9tZW1jb250cm9sLmMgICAgICAgICAgICB8ICAg MjUgKwogbW0vdm1zY2FuLmMgICAgICAgICAgICAgICAgfCAxMDEyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLQogMTAgZmlsZXMgY2hhbmdlZCwgMTE3NSBpbnNlcnRpb25zKCsp LCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5k ZXggZjc5MzIyMWY0ZWI2Li41ZmQ5OGNhNTY5ZmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysg Yi9mcy9leGVjLmMKQEAgLTEwMTQsNiArMTAxNCw3IEBAIHN0YXRpYyBpbnQgZXhlY19tbWFwKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCWFjdGl2ZV9tbSA9IHRzay0+YWN0aXZlX21tOwogCXRzay0+ YWN0aXZlX21tID0gbW07CiAJdHNrLT5tbSA9IG1tOworCWxydV9nZW5fYWRkX21tKG1tKTsKIAkv KgogCSAqIFRoaXMgcHJldmVudHMgcHJlZW1wdGlvbiB3aGlsZSBhY3RpdmVfbW0gaXMgYmVpbmcg bG9hZGVkIGFuZAogCSAqIGl0IGFuZCBtbSBhcmUgYmVpbmcgdXBkYXRlZCwgd2hpY2ggY291bGQg Y2F1c2UgcHJvYmxlbXMgZm9yCkBAIC0xMDI5LDYgKzEwMzAsNyBAQCBzdGF0aWMgaW50IGV4ZWNf bW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAl0c2stPm1tLT52bWFjYWNoZV9zZXFudW0gPSAw OwogCXZtYWNhY2hlX2ZsdXNoKHRzayk7CiAJdGFza191bmxvY2sodHNrKTsKKwlscnVfZ2VuX3Vz ZV9tbShtbSk7CiAKIAlpZiAodmZvcmspCiAJCXRpbWVuc19vbl9mb3JrKHRzay0+bnNwcm94eSwg dHNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9s aW51eC9tZW1jb250cm9sLmgKaW5kZXggNDc4MjlmMzc4ZmNiLi5lYTZhNzhiYjg5NmMgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVt Y29udHJvbC5oCkBAIC0zNTAsNiArMzUwLDExIEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKIAlzdHJ1 Y3QgZGVmZXJyZWRfc3BsaXQgZGVmZXJyZWRfc3BsaXRfcXVldWU7CiAjZW5kaWYKIAorI2lmZGVm IENPTkZJR19MUlVfR0VOCisJLyogcGVyLW1lbWNnIG1tX3N0cnVjdCBsaXN0ICovCisJc3RydWN0 IGxydV9nZW5fbW1fbGlzdCBtbV9saXN0OworI2VuZGlmCisKIAlzdHJ1Y3QgbWVtX2Nncm91cF9w ZXJfbm9kZSAqbm9kZWluZm9bXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1f dHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBjZjk3ZjM4ODRmZGEuLjE5 NTJlNzBlYzA5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2lu Y2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMyw2ICszLDcgQEAKICNkZWZpbmUgX0xJTlVYX01N X1RZUEVTX0gKIAogI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzX3Rhc2suaD4KKyNpbmNsdWRlIDxs aW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvYXV4dmVjLmg+CiAjaW5jbHVkZSA8bGlu dXgva3JlZi5oPgpAQCAtMTcsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3Mt bGF5b3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgv c2VxbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tZGVidWcuaD4KIAogI2luY2x1ZGUgPGFzbS9t bXUuaD4KIApAQCAtNjcyLDYgKzY3NCwyMiBAQCBzdHJ1Y3QgbW1fc3RydWN0IHsKIAkJICovCiAJ CXVuc2lnbmVkIGxvbmcga3NtX21lcmdpbmdfcGFnZXM7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdf TFJVX0dFTgorCQlzdHJ1Y3QgeworCQkJLyogdGhpcyBtbV9zdHJ1Y3QgaXMgb24gbHJ1X2dlbl9t bV9saXN0ICovCisJCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJCQkvKgorCQkJICogU2V0IHdo ZW4gc3dpdGNoaW5nIHRvIHRoaXMgbW1fc3RydWN0LCBhcyBhIGhpbnQgb2YKKwkJCSAqIHdoZXRo ZXIgaXQgaGFzIGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHBlci1ub2RlCisJCQkgKiBw YWdlIHRhYmxlIHdhbGtlcnMgY2xlYXJlZCB0aGUgY29ycmVzcG9uZGluZyBiaXRzLgorCQkJICov CisJCQl1bnNpZ25lZCBsb25nIGJpdG1hcDsKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwkJCS8qIHBv aW50cyB0byB0aGUgbWVtY2cgb2YgIm93bmVyIiBhYm92ZSAqLworCQkJc3RydWN0IG1lbV9jZ3Jv dXAgKm1lbWNnOworI2VuZGlmCisJCX0gbHJ1X2dlbjsKKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dF TiAqLwogCX0gX19yYW5kb21pemVfbGF5b3V0OwogCiAJLyoKQEAgLTY5OCw2ICs3MTYsNjUgQEAg c3RhdGljIGlubGluZSBjcHVtYXNrX3QgKm1tX2NwdW1hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0p CiAJcmV0dXJuIChzdHJ1Y3QgY3B1bWFzayAqKSZtbS0+Y3B1X2JpdG1hcDsKIH0KIAorI2lmZGVm IENPTkZJR19MUlVfR0VOCisKK3N0cnVjdCBscnVfZ2VuX21tX2xpc3QgeworCS8qIG1tX3N0cnVj dCBsaXN0IGZvciBwYWdlIHRhYmxlIHdhbGtlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm87 CisJLyogcHJvdGVjdHMgdGhlIGxpc3QgYWJvdmUgKi8KKwlzcGlubG9ja190IGxvY2s7Cit9Owor Cit2b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK3ZvaWQgbHJ1X2dl bl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2lmZGVmIENPTkZJR19NRU1DRwordm9p ZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2VuZGlmCisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7 CisJSU5JVF9MSVNUX0hFQUQoJm1tLT5scnVfZ2VuLmxpc3QpOworCW1tLT5scnVfZ2VuLmJpdG1h cCA9IDA7CisjaWZkZWYgQ09ORklHX01FTUNHCisJbW0tPmxydV9nZW4ubWVtY2cgPSBOVUxMOwor I2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX3VzZV9tbShzdHJ1Y3QgbW1f c3RydWN0ICptbSkKK3sKKwkvKiB1bmxpa2VseSBidXQgbm90IGEgYnVnIHdoZW4gcmFjaW5nIHdp dGggbHJ1X2dlbl9taWdyYXRlX21tKCkgKi8KKwlWTV9XQVJOX09OX09OQ0UobGlzdF9lbXB0eSgm bW0tPmxydV9nZW4ubGlzdCkpOworCisJaWYgKCEoY3VycmVudC0+ZmxhZ3MgJiBQRl9LVEhSRUFE KSkKKwkJV1JJVEVfT05DRShtbS0+bHJ1X2dlbi5iaXRtYXAsIC0xKTsKK30KKworI2Vsc2UgLyog IUNPTkZJR19MUlVfR0VOICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2FkZF9tbShz dHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5f ZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCisjaWZkZWYgQ09ORklHX01FTUNH CitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbW0o c3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2Vu X3VzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19M UlVfR0VOICovCisKIHN0cnVjdCBtbXVfZ2F0aGVyOwogZXh0ZXJuIHZvaWQgdGxiX2dhdGhlcl9t bXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogZXh0ZXJu IHZvaWQgdGxiX2dhdGhlcl9tbXVfZnVsbG1tKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9p bmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDg1MGM2MTcxYWY2OC4uNTFlNTIxNDY1NzQyIDEw MDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16 b25lLmgKQEAgLTQwOCw3ICs0MDgsNyBAQCBlbnVtIHsKICAqIG1pbl9zZXEgYmVoaW5kLgogICoK ICAqIFRoZSBudW1iZXIgb2YgcGFnZXMgaW4gZWFjaCBnZW5lcmF0aW9uIGlzIGV2ZW50dWFsbHkg Y29uc2lzdGVudCBhbmQgdGhlcmVmb3JlCi0gKiBjYW4gYmUgdHJhbnNpZW50bHkgbmVnYXRpdmUu CisgKiBjYW4gYmUgdHJhbnNpZW50bHkgbmVnYXRpdmUgd2hlbiByZXNldF9iYXRjaF9zaXplKCkg aXMgcGVuZGluZy4KICAqLwogc3RydWN0IGxydV9nZW5fc3RydWN0IHsKIAkvKiB0aGUgYWdpbmcg aW5jcmVtZW50cyB0aGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgKi8KQEAgLTQzMCw2ICs0 MzAsNTMgQEAgc3RydWN0IGxydV9nZW5fc3RydWN0IHsKIAlhdG9taWNfbG9uZ190IHJlZmF1bHRl ZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107CiB9OwogCitlbnVt IHsKKwlNTV9MRUFGX1RPVEFMLAkJLyogdG90YWwgbGVhZiBlbnRyaWVzICovCisJTU1fTEVBRl9P TEQsCQkvKiBvbGQgbGVhZiBlbnRyaWVzICovCisJTU1fTEVBRl9ZT1VORywJCS8qIHlvdW5nIGxl YWYgZW50cmllcyAqLworCU1NX05PTkxFQUZfVE9UQUwsCS8qIHRvdGFsIG5vbi1sZWFmIGVudHJp ZXMgKi8KKwlNTV9OT05MRUFGX0ZPVU5ELAkvKiBub24tbGVhZiBlbnRyaWVzIGZvdW5kIGluIEJs b29tIGZpbHRlcnMgKi8KKwlNTV9OT05MRUFGX0FEREVELAkvKiBub24tbGVhZiBlbnRyaWVzIGFk ZGVkIHRvIEJsb29tIGZpbHRlcnMgKi8KKwlOUl9NTV9TVEFUUworfTsKKworLyogZG91YmxlLWJ1 ZmZlcmluZyBCbG9vbSBmaWx0ZXJzICovCisjZGVmaW5lIE5SX0JMT09NX0ZJTFRFUlMJMgorCitz dHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSB7CisJLyogc2V0IHRvIG1heF9zZXEgYWZ0ZXIgZWFjaCBp dGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nIHNlcTsKKwkvKiB3aGVyZSB0aGUgY3VycmVudCBp dGVyYXRpb24gY29udGludWVzIChpbmNsdXNpdmUpICovCisJc3RydWN0IGxpc3RfaGVhZCAqaGVh ZDsKKwkvKiB3aGVyZSB0aGUgbGFzdCBpdGVyYXRpb24gZW5kZWQgKGV4Y2x1c2l2ZSkgKi8KKwlz dHJ1Y3QgbGlzdF9oZWFkICp0YWlsOworCS8qIHRvIHdhaXQgZm9yIHRoZSBsYXN0IHBhZ2UgdGFi bGUgd2Fsa2VyIHRvIGZpbmlzaCAqLworCXN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgd2FpdDsKKwkv KiBCbG9vbSBmaWx0ZXJzIGZsaXAgYWZ0ZXIgZWFjaCBpdGVyYXRpb24gKi8KKwl1bnNpZ25lZCBs b25nICpmaWx0ZXJzW05SX0JMT09NX0ZJTFRFUlNdOworCS8qIHRoZSBtbSBzdGF0cyBmb3IgZGVi dWdnaW5nICovCisJdW5zaWduZWQgbG9uZyBzdGF0c1tOUl9ISVNUX0dFTlNdW05SX01NX1NUQVRT XTsKKwkvKiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrZXJzICovCisJ aW50IG5yX3dhbGtlcnM7Cit9OworCitzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrIHsKKwkvKiB0aGUg bHJ1dmVjIHVuZGVyIHJlY2xhaW0gKi8KKwlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CisJLyogdW5z dGFibGUgbWF4X3NlcSBmcm9tIGxydV9nZW5fc3RydWN0ICovCisJdW5zaWduZWQgbG9uZyBtYXhf c2VxOworCS8qIHRoZSBuZXh0IGFkZHJlc3Mgd2l0aGluIGFuIG1tIHRvIHNjYW4gKi8KKwl1bnNp Z25lZCBsb25nIG5leHRfYWRkcjsKKwkvKiB0byBiYXRjaCBwcm9tb3RlZCBwYWdlcyAqLworCWlu dCBucl9wYWdlc1tNQVhfTlJfR0VOU11bQU5PTl9BTkRfRklMRV1bTUFYX05SX1pPTkVTXTsKKwkv KiB0byBiYXRjaCB0aGUgbW0gc3RhdHMgKi8KKwlpbnQgbW1fc3RhdHNbTlJfTU1fU1RBVFNdOwor CS8qIHRvdGFsIGJhdGNoZWQgaXRlbXMgKi8KKwlpbnQgYmF0Y2hlZDsKKwlib29sIGNhbl9zd2Fw OworCWJvb2wgZm9yY2Vfc2NhbjsKK307CisKIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1 Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdl X3ZtYV9tYXBwZWRfd2FsayAqcHZtdyk7CiAKQEAgLTQ4MCw2ICs1MjcsOCBAQCBzdHJ1Y3QgbHJ1 dmVjIHsKICNpZmRlZiBDT05GSUdfTFJVX0dFTgogCS8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVk IGludG8gZ2VuZXJhdGlvbnMgKi8KIAlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QJCWxydWdlbjsKKwkv KiB0byBjb25jdXJyZW50bHkgaXRlcmF0ZSBscnVfZ2VuX21tX2xpc3QgKi8KKwlzdHJ1Y3QgbHJ1 X2dlbl9tbV9zdGF0ZQkJbW1fc3RhdGU7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUVNQ0cKIAlz dHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwpAQCAtMTE3NCw2ICsxMjIzLDExIEBAIHR5cGVkZWYg c3RydWN0IHBnbGlzdF9kYXRhIHsKIAogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCisjaWZkZWYg Q09ORklHX0xSVV9HRU4KKwkvKiBrc3dhcCBtbSB3YWxrIGRhdGEgKi8KKwlzdHJ1Y3QgbHJ1X2dl bl9tbV93YWxrCW1tX3dhbGs7CisjZW5kaWYKKwogCVpPTkVfUEFERElORyhfcGFkMl8pCiAKIAkv KiBQZXItbm9kZSB2bXN0YXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBi L2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDQzMTUwYjliYmM1Yy4uNjMwODE1MGIyMzRhIDEw MDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAu aApAQCAtMTYyLDYgKzE2MiwxMCBAQCB1bmlvbiBzd2FwX2hlYWRlciB7CiAgKi8KIHN0cnVjdCBy ZWNsYWltX3N0YXRlIHsKIAl1bnNpZ25lZCBsb25nIHJlY2xhaW1lZF9zbGFiOworI2lmZGVmIENP TkZJR19MUlVfR0VOCisJLyogcGVyLXRocmVhZCBtbSB3YWxrIGRhdGEgKi8KKwlzdHJ1Y3QgbHJ1 X2dlbl9tbV93YWxrICptbV93YWxrOworI2VuZGlmCiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpk aWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggODQwMjFiMjRm NzllLi45OGEzM2JkN2MyNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVs L2V4aXQuYwpAQCAtNDY2LDYgKzQ2Niw3IEBAIHZvaWQgbW1fdXBkYXRlX25leHRfb3duZXIoc3Ry dWN0IG1tX3N0cnVjdCAqbW0pCiAJCWdvdG8gcmV0cnk7CiAJfQogCVdSSVRFX09OQ0UobW0tPm93 bmVyLCBjKTsKKwlscnVfZ2VuX21pZ3JhdGVfbW0obW0pOwogCXRhc2tfdW5sb2NrKGMpOwogCXB1 dF90YXNrX3N0cnVjdChjKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwv Zm9yay5jCmluZGV4IDkwYzg1YjE3YmY2OS4uZDJkYTA2NTQ0MmFmIDEwMDY0NAotLS0gYS9rZXJu ZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTExNTIsNiArMTE1Miw3IEBAIHN0YXRp YyBzdHJ1Y3QgbW1fc3RydWN0ICptbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnAsCiAJCWdvdG8gZmFpbF9ub2NvbnRleHQ7CiAKIAltbS0+dXNlcl9ucyA9 IGdldF91c2VyX25zKHVzZXJfbnMpOworCWxydV9nZW5faW5pdF9tbShtbSk7CiAJcmV0dXJuIG1t OwogCiBmYWlsX25vY29udGV4dDoKQEAgLTExOTQsNiArMTE5NSw3IEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBfX21tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCX0KIAlpZiAobW0tPmJpbmZtdCkK IAkJbW9kdWxlX3B1dChtbS0+YmluZm10LT5tb2R1bGUpOworCWxydV9nZW5fZGVsX21tKG1tKTsK IAltbWRyb3AobW0pOwogfQogCkBAIC0yNjk0LDYgKzI2OTYsMTMgQEAgcGlkX3Qga2VybmVsX2Ns b25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncykKIAkJZ2V0X3Rhc2tfc3RydWN0KHAp OwogCX0KIAorCWlmIChJU19FTkFCTEVEKENPTkZJR19MUlVfR0VOKSAmJiAhKGNsb25lX2ZsYWdz ICYgQ0xPTkVfVk0pKSB7CisJCS8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBt ZW1jZyBtaWdyYXRpb24gKi8KKwkJdGFza19sb2NrKHApOworCQlscnVfZ2VuX2FkZF9tbShwLT5t bSk7CisJCXRhc2tfdW5sb2NrKHApOworCX0KKwogCXdha2VfdXBfbmV3X3Rhc2socCk7CiAKIAkv KiBmb3JraW5nIGNvbXBsZXRlIGFuZCBjaGlsZCBzdGFydGVkIHRvIHJ1biwgdGVsbCBwdHJhY2Vy ICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUu YwppbmRleCA4ZmNjZDg3MjFiYjguLjJjNjA1YmRlZGU0NyAxMDA2NDQKLS0tIGEva2VybmVsL3Nj aGVkL2NvcmUuYworKysgYi9rZXJuZWwvc2NoZWQvY29yZS5jCkBAIC01MTgwLDYgKzUxODAsNyBA QCBjb250ZXh0X3N3aXRjaChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYs CiAJCSAqIGZpbmlzaF90YXNrX3N3aXRjaCgpJ3MgbW1kcm9wKCkuCiAJCSAqLwogCQlzd2l0Y2hf bW1faXJxc19vZmYocHJldi0+YWN0aXZlX21tLCBuZXh0LT5tbSwgbmV4dCk7CisJCWxydV9nZW5f dXNlX21tKG5leHQtPm1tKTsKIAogCQlpZiAoIXByZXYtPm1tKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgLy8gZnJvbSBrZXJuZWwKIAkJCS8qIHdpbGwgbW1kcm9wKCkgaW4gZmluaXNoX3Rhc2tf c3dpdGNoKCkuICovCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9s LmMKaW5kZXggODgyMTgwODY2ZTMxLi4yMTIxYTliY2JiNTQgMTAwNjQ0Ci0tLSBhL21tL21lbWNv bnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTYxOTksNiArNjE5OSwzMCBAQCBzdGF0 aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfdGFzayh2b2lkKQogfQogI2VuZGlmCiAKKyNpZmRlZiBD T05GSUdfTFJVX0dFTgorc3RhdGljIHZvaWQgbWVtX2Nncm91cF9hdHRhY2goc3RydWN0IGNncm91 cF90YXNrc2V0ICp0c2V0KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwlzdHJ1Y3Qg Y2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCisJLyogZmluZCB0aGUgZmlyc3QgbGVhZGVyIGlm IHRoZXJlIGlzIGFueSAqLworCWNncm91cF90YXNrc2V0X2Zvcl9lYWNoX2xlYWRlcih0YXNrLCBj c3MsIHRzZXQpCisJCWJyZWFrOworCisJaWYgKCF0YXNrKQorCQlyZXR1cm47CisKKwl0YXNrX2xv Y2sodGFzayk7CisJaWYgKHRhc2stPm1tICYmIHRhc2stPm1tLT5vd25lciA9PSB0YXNrKQorCQls cnVfZ2VuX21pZ3JhdGVfbW0odGFzay0+bW0pOworCXRhc2tfdW5sb2NrKHRhc2spOworfQorI2Vs c2UKK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAq dHNldCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLworCiBzdGF0aWMgaW50IHNl cV9wdXRzX21lbWNnX3R1bmFibGUoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nIHZh bHVlKQogewogCWlmICh2YWx1ZSA9PSBQQUdFX0NPVU5URVJfTUFYKQpAQCAtNjYwNCw2ICs2NjI4 LDcgQEAgc3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0gewogCS5jc3Nf cmVzZXQgPSBtZW1fY2dyb3VwX2Nzc19yZXNldCwKIAkuY3NzX3JzdGF0X2ZsdXNoID0gbWVtX2Nn cm91cF9jc3NfcnN0YXRfZmx1c2gsCiAJLmNhbl9hdHRhY2ggPSBtZW1fY2dyb3VwX2Nhbl9hdHRh Y2gsCisJLmF0dGFjaCA9IG1lbV9jZ3JvdXBfYXR0YWNoLAogCS5jYW5jZWxfYXR0YWNoID0gbWVt X2Nncm91cF9jYW5jZWxfYXR0YWNoLAogCS5wb3N0X2F0dGFjaCA9IG1lbV9jZ3JvdXBfbW92ZV90 YXNrLAogCS5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcywKZGlmZiAtLWdpdCBhL21tL3Ztc2Nh bi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZjM2NTM4NmViNDQxLi5kMWRmYzBhNzdiNmYgMTAwNjQ0 Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC00OSw2ICs0OSw4IEBACiAj aW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CiAjaW5jbHVkZSA8bGludXgvZGF4Lmg+CiAjaW5jbHVk ZSA8bGludXgvcHNpLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZXdhbGsuaD4KKyNpbmNsdWRlIDxs aW51eC9zaG1lbV9mcy5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8 YXNtL2RpdjY0Lmg+CkBAIC0zMDgyLDcgKzMwODQsNyBAQCBzdGF0aWMgYm9vbCBjYW5fYWdlX2Fu b25fcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAkJZm9yICgodHlwZSkgPSAwOyAo dHlwZSkgPCBBTk9OX0FORF9GSUxFOyAodHlwZSkrKykJXAogCQkJZm9yICgoem9uZSkgPSAwOyAo em9uZSkgPCBNQVhfTlJfWk9ORVM7ICh6b25lKSsrKQogCi1zdGF0aWMgc3RydWN0IGxydXZlYyBf X21heWJlX3VudXNlZCAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBu aWQpCitzdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAq bWVtY2csIGludCBuaWQpCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IE5PREVfREFU QShuaWQpOwogCkBAIC0zMTI3LDYgKzMxMjksMzcyIEBAIHN0YXRpYyBib29sIF9fbWF5YmVfdW51 c2VkIHNlcV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAJICAgICAgIGdldF9ucl9n ZW5zKGxydXZlYywgTFJVX0dFTl9BTk9OKSA8PSBNQVhfTlJfR0VOUzsKIH0KIAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgICAgICAgICAgIG1tX3N0cnVjdCBsaXN0 CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlz dCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQoreworCXN0YXRpYyBzdHJ1 Y3QgbHJ1X2dlbl9tbV9saXN0IG1tX2xpc3QgPSB7CisJCS5maWZvID0gTElTVF9IRUFEX0lOSVQo bW1fbGlzdC5maWZvKSwKKwkJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChtbV9saXN0Lmxv Y2spLAorCX07CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwlpZiAobWVtY2cpCisJCXJldHVybiAm bWVtY2ctPm1tX2xpc3Q7CisjZW5kaWYKKwlWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlz YWJsZWQoKSk7CisKKwlyZXR1cm4gJm1tX2xpc3Q7Cit9CisKK3ZvaWQgbHJ1X2dlbl9hZGRfbW0o c3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaW50IG5pZDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAq bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9s aXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpOworCisJVk1fV0FSTl9PTl9PTkNFKCFs aXN0X2VtcHR5KCZtbS0+bHJ1X2dlbi5saXN0KSk7CisjaWZkZWYgQ09ORklHX01FTUNHCisJVk1f V0FSTl9PTl9PTkNFKG1tLT5scnVfZ2VuLm1lbWNnKTsKKwltbS0+bHJ1X2dlbi5tZW1jZyA9IG1l bWNnOworI2VuZGlmCisJc3Bpbl9sb2NrKCZtbV9saXN0LT5sb2NrKTsKKworCWZvcl9lYWNoX25v ZGVfc3RhdGUobmlkLCBOX01FTU9SWSkgeworCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRf bHJ1dmVjKG1lbWNnLCBuaWQpOworCisJCWlmICghbHJ1dmVjKQorCQkJY29udGludWU7CisKKwkJ LyogdGhlIGZpcnN0IGFkZGl0aW9uIHNpbmNlIHRoZSBsYXN0IGl0ZXJhdGlvbiAqLworCQlpZiAo bHJ1dmVjLT5tbV9zdGF0ZS50YWlsID09ICZtbV9saXN0LT5maWZvKQorCQkJbHJ1dmVjLT5tbV9z dGF0ZS50YWlsID0gJm1tLT5scnVfZ2VuLmxpc3Q7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmbW0t PmxydV9nZW4ubGlzdCwgJm1tX2xpc3QtPmZpZm8pOworCisJc3Bpbl91bmxvY2soJm1tX2xpc3Qt PmxvY2spOworfQorCit2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQor eworCWludCBuaWQ7CisJc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdDsKKwlzdHJ1Y3Qg bWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMOworCisJaWYgKGxpc3RfZW1wdHkoJm1tLT5scnVfZ2Vu Lmxpc3QpKQorCQlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKKwltZW1jZyA9IG1tLT5s cnVfZ2VuLm1lbWNnOworI2VuZGlmCisJbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTsKKwor CXNwaW5fbG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlmb3JfZWFjaF9ub2RlKG5pZCkgeworCQlz dHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpOworCisJCWlmICgh bHJ1dmVjKQorCQkJY29udGludWU7CisKKwkJLyogd2hlcmUgdGhlIGxhc3QgaXRlcmF0aW9uIGVu ZGVkIChleGNsdXNpdmUpICovCisJCWlmIChscnV2ZWMtPm1tX3N0YXRlLnRhaWwgPT0gJm1tLT5s cnVfZ2VuLmxpc3QpCisJCQlscnV2ZWMtPm1tX3N0YXRlLnRhaWwgPSBscnV2ZWMtPm1tX3N0YXRl LnRhaWwtPm5leHQ7CisKKwkJLyogd2hlcmUgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGNvbnRpbnVl cyAoaW5jbHVzaXZlKSAqLworCQlpZiAobHJ1dmVjLT5tbV9zdGF0ZS5oZWFkICE9ICZtbS0+bHJ1 X2dlbi5saXN0KQorCQkJY29udGludWU7CisKKwkJbHJ1dmVjLT5tbV9zdGF0ZS5oZWFkID0gbHJ1 dmVjLT5tbV9zdGF0ZS5oZWFkLT5uZXh0OworCQkvKiB0aGUgZGVsZXRpb24gZW5kcyB0aGUgY3Vy cmVudCBpdGVyYXRpb24gKi8KKwkJaWYgKGxydXZlYy0+bW1fc3RhdGUuaGVhZCA9PSAmbW1fbGlz dC0+ZmlmbykKKwkJCVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5zZXEsIGxydXZlYy0+bW1f c3RhdGUuc2VxICsgMSk7CisJfQorCisJbGlzdF9kZWxfaW5pdCgmbW0tPmxydV9nZW4ubGlzdCk7 CisKKwlzcGluX3VubG9jaygmbW1fbGlzdC0+bG9jayk7CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cK KwltZW1fY2dyb3VwX3B1dChtbS0+bHJ1X2dlbi5tZW1jZyk7CisJbW0tPmxydV9nZW4ubWVtY2cg PSBOVUxMOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfTUVNQ0cKK3ZvaWQgbHJ1X2dlbl9t aWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICpt ZW1jZzsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1tLT5vd25lci0+YWxsb2NfbG9jayk7CisK KwkvKiBmb3IgbW1fdXBkYXRlX25leHRfb3duZXIoKSAqLworCWlmIChtZW1fY2dyb3VwX2Rpc2Fi bGVkKCkpCisJCXJldHVybjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwltZW1jZyA9IG1lbV9jZ3Jv dXBfZnJvbV90YXNrKHJjdV9kZXJlZmVyZW5jZShtbS0+b3duZXIpKTsKKwlyY3VfcmVhZF91bmxv Y2soKTsKKwlpZiAobWVtY2cgPT0gbW0tPmxydV9nZW4ubWVtY2cpCisJCXJldHVybjsKKworCVZN X1dBUk5fT05fT05DRSghbW0tPmxydV9nZW4ubWVtY2cpOworCVZNX1dBUk5fT05fT05DRShsaXN0 X2VtcHR5KCZtbS0+bHJ1X2dlbi5saXN0KSk7CisKKwlscnVfZ2VuX2RlbF9tbShtbSk7CisJbHJ1 X2dlbl9hZGRfbW0obW0pOworfQorI2VuZGlmCisKKy8qCisgKiBCbG9vbSBmaWx0ZXJzIHdpdGgg bT0xPDwxNSwgaz0yIGFuZCB0aGUgZmFsc2UgcG9zaXRpdmUgcmF0ZXMgb2YgfjEvNSB3aGVuCisg KiBuPTEwLDAwMCBhbmQgfjEvMiB3aGVuIG49MjAsMDAwLCB3aGVyZSwgY29udmVudGlvbmFsbHks IG0gaXMgdGhlIG51bWJlciBvZgorICogYml0cyBpbiBhIGJpdG1hcCwgayBpcyB0aGUgbnVtYmVy IG9mIGhhc2ggZnVuY3Rpb25zIGFuZCBuIGlzIHRoZSBudW1iZXIgb2YKKyAqIGluc2VydGVkIGl0 ZW1zLgorICoKKyAqIFBhZ2UgdGFibGUgd2Fsa2VycyB1c2Ugb25lIG9mIHRoZSB0d28gZmlsdGVy cyB0byByZWR1Y2UgdGhlaXIgc2VhcmNoIHNwYWNlLgorICogVG8gZ2V0IHJpZCBvZiBub24tbGVh ZiBlbnRyaWVzIHRoYXQgbm8gbG9uZ2VyIGhhdmUgZW5vdWdoIGxlYWYgZW50cmllcywgdGhlCisg KiBhZ2luZyB1c2VzIHRoZSBkb3VibGUtYnVmZmVyaW5nIHRlY2huaXF1ZSB0byBmbGlwIHRvIHRo ZSBvdGhlciBmaWx0ZXIgZWFjaAorICogdGltZSBpdCBwcm9kdWNlcyBhIG5ldyBnZW5lcmF0aW9u LiBGb3Igbm9uLWxlYWYgZW50cmllcyB0aGF0IGhhdmUgZW5vdWdoCisgKiBsZWFmIGVudHJpZXMs IHRoZSBhZ2luZyBjYXJyaWVzIHRoZW0gb3ZlciB0byB0aGUgbmV4dCBnZW5lcmF0aW9uIGluCisg KiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdh bGtpbmcgdGhlIHJtYXAKKyAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS4KKyAqCisgKiBGb3Ig ZnV0dXJlIG9wdGltaXphdGlvbnM6CisgKiAxLiBJdCdzIG5vdCBuZWNlc3NhcnkgdG8ga2VlcCBi b3RoIGZpbHRlcnMgYWxsIHRoZSB0aW1lLiBUaGUgc3BhcmUgb25lIGNhbiBiZQorICogICAgZnJl ZWQgYWZ0ZXIgdGhlIFJDVSBncmFjZSBwZXJpb2QgYW5kIHJlYWxsb2NhdGVkIGlmIG5lZWRlZCBh Z2Fpbi4KKyAqIDIuIEFuZCB3aGVuIHJlYWxsb2NhdGluZywgaXQncyB3b3J0aCBzY2FsaW5nIGl0 cyBzaXplIGFjY29yZGluZyB0byB0aGUgbnVtYmVyCisgKiAgICBvZiBpbnNlcnRlZCBlbnRyaWVz IGluIHRoZSBvdGhlciBmaWx0ZXIsIHRvIHJlZHVjZSB0aGUgbWVtb3J5IG92ZXJoZWFkIG9uCisg KiAgICBzbWFsbCBzeXN0ZW1zIGFuZCBmYWxzZSBwb3NpdGl2ZXMgb24gbGFyZ2Ugc3lzdGVtcy4K KyAqIDMuIEplbmtpbnMnIGhhc2ggZnVuY3Rpb24gaXMgYW4gYWx0ZXJuYXRpdmUgdG8gS251dGgn cy4KKyAqLworI2RlZmluZSBCTE9PTV9GSUxURVJfU0hJRlQJMTUKKworc3RhdGljIGlubGluZSBp bnQgZmlsdGVyX2dlbl9mcm9tX3NlcSh1bnNpZ25lZCBsb25nIHNlcSkKK3sKKwlyZXR1cm4gc2Vx ICUgTlJfQkxPT01fRklMVEVSUzsKK30KKworc3RhdGljIHZvaWQgZ2V0X2l0ZW1fa2V5KHZvaWQg Kml0ZW0sIGludCAqa2V5KQoreworCXUzMiBoYXNoID0gaGFzaF9wdHIoaXRlbSwgQkxPT01fRklM VEVSX1NISUZUICogMik7CisKKwlCVUlMRF9CVUdfT04oQkxPT01fRklMVEVSX1NISUZUICogMiA+ IEJJVFNfUEVSX1RZUEUodTMyKSk7CisKKwlrZXlbMF0gPSBoYXNoICYgKEJJVChCTE9PTV9GSUxU RVJfU0hJRlQpIC0gMSk7CisJa2V5WzFdID0gaGFzaCA+PiBCTE9PTV9GSUxURVJfU0hJRlQ7Cit9 CisKK3N0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMs IHVuc2lnbmVkIGxvbmcgc2VxKQoreworCXVuc2lnbmVkIGxvbmcgKmZpbHRlcjsKKwlpbnQgZ2Vu ID0gZmlsdGVyX2dlbl9mcm9tX3NlcShzZXEpOworCisJZmlsdGVyID0gbHJ1dmVjLT5tbV9zdGF0 ZS5maWx0ZXJzW2dlbl07CisJaWYgKGZpbHRlcikgeworCQliaXRtYXBfY2xlYXIoZmlsdGVyLCAw LCBCSVQoQkxPT01fRklMVEVSX1NISUZUKSk7CisJCXJldHVybjsKKwl9CisKKwlmaWx0ZXIgPSBi aXRtYXBfemFsbG9jKEJJVChCTE9PTV9GSUxURVJfU0hJRlQpLAorCQkJICAgICAgIF9fR0ZQX0hJ R0ggfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKTsKKwlXUklURV9PTkNFKGxydXZl Yy0+bW1fc3RhdGUuZmlsdGVyc1tnZW5dLCBmaWx0ZXIpOworfQorCitzdGF0aWMgdm9pZCB1cGRh dGVfYmxvb21fZmlsdGVyKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEs IHZvaWQgKml0ZW0pCit7CisJaW50IGtleVsyXTsKKwl1bnNpZ25lZCBsb25nICpmaWx0ZXI7CisJ aW50IGdlbiA9IGZpbHRlcl9nZW5fZnJvbV9zZXEoc2VxKTsKKworCWZpbHRlciA9IFJFQURfT05D RShscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbZ2VuXSk7CisJaWYgKCFmaWx0ZXIpCisJCXJldHVy bjsKKworCWdldF9pdGVtX2tleShpdGVtLCBrZXkpOworCisJaWYgKCF0ZXN0X2JpdChrZXlbMF0s IGZpbHRlcikpCisJCXNldF9iaXQoa2V5WzBdLCBmaWx0ZXIpOworCWlmICghdGVzdF9iaXQoa2V5 WzFdLCBmaWx0ZXIpKQorCQlzZXRfYml0KGtleVsxXSwgZmlsdGVyKTsKK30KKworc3RhdGljIGJv b2wgdGVzdF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25n IHNlcSwgdm9pZCAqaXRlbSkKK3sKKwlpbnQga2V5WzJdOworCXVuc2lnbmVkIGxvbmcgKmZpbHRl cjsKKwlpbnQgZ2VuID0gZmlsdGVyX2dlbl9mcm9tX3NlcShzZXEpOworCisJZmlsdGVyID0gUkVB RF9PTkNFKGxydXZlYy0+bW1fc3RhdGUuZmlsdGVyc1tnZW5dKTsKKwlpZiAoIWZpbHRlcikKKwkJ cmV0dXJuIHRydWU7CisKKwlnZXRfaXRlbV9rZXkoaXRlbSwga2V5KTsKKworCXJldHVybiB0ZXN0 X2JpdChrZXlbMF0sIGZpbHRlcikgJiYgdGVzdF9iaXQoa2V5WzFdLCBmaWx0ZXIpOworfQorCitz dGF0aWMgdm9pZCByZXNldF9tbV9zdGF0cyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBs cnVfZ2VuX21tX3dhbGsgKndhbGssIGJvb2wgbGFzdCkKK3sKKwlpbnQgaTsKKwlpbnQgaGlzdDsK KworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmdldF9tbV9saXN0KGxydXZlY19tZW1jZyhscnV2ZWMp KS0+bG9jayk7CisKKwlpZiAod2FsaykgeworCQloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEod2Fs ay0+bWF4X3NlcSk7CisKKwkJZm9yIChpID0gMDsgaSA8IE5SX01NX1NUQVRTOyBpKyspIHsKKwkJ CVdSSVRFX09OQ0UobHJ1dmVjLT5tbV9zdGF0ZS5zdGF0c1toaXN0XVtpXSwKKwkJCQkgICBscnV2 ZWMtPm1tX3N0YXRlLnN0YXRzW2hpc3RdW2ldICsgd2Fsay0+bW1fc3RhdHNbaV0pOworCQkJd2Fs ay0+bW1fc3RhdHNbaV0gPSAwOworCQl9CisJfQorCisJaWYgKE5SX0hJU1RfR0VOUyA+IDEgJiYg bGFzdCkgeworCQloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobHJ1dmVjLT5tbV9zdGF0ZS5zZXEg KyAxKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlJfTU1fU1RBVFM7IGkrKykKKwkJCVdSSVRFX09O Q0UobHJ1dmVjLT5tbV9zdGF0ZS5zdGF0c1toaXN0XVtpXSwgMCk7CisJfQorfQorCitzdGF0aWMg Ym9vbCBzaG91bGRfc2tpcF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5f bW1fd2FsayAqd2FsaykKK3sKKwlpbnQgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSAwOwor CXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQod2Fsay0+bHJ1dmVjKTsK KwlpbnQga2V5ID0gcGdkYXQtPm5vZGVfaWQgJSBCSVRTX1BFUl9UWVBFKG1tLT5scnVfZ2VuLmJp dG1hcCk7CisKKwlpZiAoIXdhbGstPmZvcmNlX3NjYW4gJiYgIXRlc3RfYml0KGtleSwgJm1tLT5s cnVfZ2VuLmJpdG1hcCkpCisJCXJldHVybiB0cnVlOworCisJY2xlYXJfYml0KGtleSwgJm1tLT5s cnVfZ2VuLmJpdG1hcCk7CisKKwlmb3IgKHR5cGUgPSAhd2Fsay0+Y2FuX3N3YXA7IHR5cGUgPCBB Tk9OX0FORF9GSUxFOyB0eXBlKyspIHsKKwkJc2l6ZSArPSB0eXBlID8gZ2V0X21tX2NvdW50ZXIo bW0sIE1NX0ZJTEVQQUdFUykgOgorCQkJICAgICAgIGdldF9tbV9jb3VudGVyKG1tLCBNTV9BTk9O UEFHRVMpICsKKwkJCSAgICAgICBnZXRfbW1fY291bnRlcihtbSwgTU1fU0hNRU1QQUdFUyk7CisJ fQorCisJaWYgKHNpemUgPCBNSU5fTFJVX0JBVENIKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmICht bV9pc19vb21fdmljdGltKG1tKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gIW1tZ2V0X25v dF96ZXJvKG1tKTsKK30KKworc3RhdGljIGJvb2wgaXRlcmF0ZV9tbV9saXN0KHN0cnVjdCBscnV2 ZWMgKmxydXZlYywgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaywKKwkJCSAgICBzdHJ1Y3Qg bW1fc3RydWN0ICoqaXRlcikKK3sKKwlib29sIGZpcnN0ID0gZmFsc2U7CisJYm9vbCBsYXN0ID0g dHJ1ZTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXAg Km1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CisJc3RydWN0IGxydV9nZW5fbW1fbGlzdCAq bW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAq bW1fc3RhdGUgPSAmbHJ1dmVjLT5tbV9zdGF0ZTsKKworCS8qCisJICogVGhlcmUgYXJlIGZvdXIg aW50ZXJlc3RpbmcgY2FzZXMgZm9yIHRoaXMgcGFnZSB0YWJsZSB3YWxrZXI6CisJICogMS4gSXQg dHJpZXMgdG8gc3RhcnQgYSBuZXcgaXRlcmF0aW9uIG9mIG1tX2xpc3Qgd2l0aCBhIHN0YWxlIG1h eF9zZXE7CisJICogICAgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGRvLgorCSAqIDIuIEl0J3Mg dGhlIGZpcnN0IG9mIHRoZSBjdXJyZW50IGdlbmVyYXRpb24sIGFuZCBpdCBuZWVkcyB0byByZXNl dAorCSAqICAgIHRoZSBCbG9vbSBmaWx0ZXIgZm9yIHRoZSBuZXh0IGdlbmVyYXRpb24uCisJICog My4gSXQgcmVhY2hlcyB0aGUgZW5kIG9mIG1tX2xpc3QsIGFuZCBpdCBuZWVkcyB0byBpbmNyZW1l bnQKKwkgKiAgICBtbV9zdGF0ZS0+c2VxOyB0aGUgaXRlcmF0aW9uIGlzIGRvbmUuCisJICogNC4g SXQncyB0aGUgbGFzdCBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uLCBhbmQgaXQgbmVlZHMgdG8g cmVzZXQgdGhlCisJICogICAgbW0gc3RhdHMgY291bnRlcnMgZm9yIHRoZSBuZXh0IGdlbmVyYXRp b24uCisJICovCisJc3Bpbl9sb2NrKCZtbV9saXN0LT5sb2NrKTsKKworCVZNX1dBUk5fT05fT05D RShtbV9zdGF0ZS0+c2VxICsgMSA8IHdhbGstPm1heF9zZXEpOworCVZNX1dBUk5fT05fT05DRSgq aXRlciAmJiBtbV9zdGF0ZS0+c2VxID4gd2Fsay0+bWF4X3NlcSk7CisJVk1fV0FSTl9PTl9PTkNF KCppdGVyICYmICFtbV9zdGF0ZS0+bnJfd2Fsa2Vycyk7CisKKwlpZiAod2Fsay0+bWF4X3NlcSA8 PSBtbV9zdGF0ZS0+c2VxKSB7CisJCWlmICghKml0ZXIpCisJCQlsYXN0ID0gZmFsc2U7CisJCWdv dG8gZG9uZTsKKwl9CisKKwlpZiAoIW1tX3N0YXRlLT5ucl93YWxrZXJzKSB7CisJCVZNX1dBUk5f T05fT05DRShtbV9zdGF0ZS0+aGVhZCAmJiBtbV9zdGF0ZS0+aGVhZCAhPSAmbW1fbGlzdC0+Zmlm byk7CisKKwkJbW1fc3RhdGUtPmhlYWQgPSBtbV9saXN0LT5maWZvLm5leHQ7CisJCWZpcnN0ID0g dHJ1ZTsKKwl9CisKKwl3aGlsZSAoIW1tICYmIG1tX3N0YXRlLT5oZWFkICE9ICZtbV9saXN0LT5m aWZvKSB7CisJCW1tID0gbGlzdF9lbnRyeShtbV9zdGF0ZS0+aGVhZCwgc3RydWN0IG1tX3N0cnVj dCwgbHJ1X2dlbi5saXN0KTsKKworCQltbV9zdGF0ZS0+aGVhZCA9IG1tX3N0YXRlLT5oZWFkLT5u ZXh0OworCisJCS8qIGZvcmNlIHNjYW4gZm9yIHRob3NlIGFkZGVkIGFmdGVyIHRoZSBsYXN0IGl0 ZXJhdGlvbiAqLworCQlpZiAoIW1tX3N0YXRlLT50YWlsIHx8IG1tX3N0YXRlLT50YWlsID09ICZt bS0+bHJ1X2dlbi5saXN0KSB7CisJCQltbV9zdGF0ZS0+dGFpbCA9IG1tX3N0YXRlLT5oZWFkOwor CQkJd2Fsay0+Zm9yY2Vfc2NhbiA9IHRydWU7CisJCX0KKworCQlpZiAoc2hvdWxkX3NraXBfbW0o bW0sIHdhbGspKQorCQkJbW0gPSBOVUxMOworCX0KKworCWlmIChtbV9zdGF0ZS0+aGVhZCA9PSAm bW1fbGlzdC0+ZmlmbykKKwkJV1JJVEVfT05DRShtbV9zdGF0ZS0+c2VxLCBtbV9zdGF0ZS0+c2Vx ICsgMSk7Citkb25lOgorCWlmICgqaXRlciAmJiAhbW0pCisJCW1tX3N0YXRlLT5ucl93YWxrZXJz LS07CisJaWYgKCEqaXRlciAmJiBtbSkKKwkJbW1fc3RhdGUtPm5yX3dhbGtlcnMrKzsKKworCWlm IChtbV9zdGF0ZS0+bnJfd2Fsa2VycykKKwkJbGFzdCA9IGZhbHNlOworCisJaWYgKCppdGVyIHx8 IGxhc3QpCisJCXJlc2V0X21tX3N0YXRzKGxydXZlYywgd2FsaywgbGFzdCk7CisKKwlzcGluX3Vu bG9jaygmbW1fbGlzdC0+bG9jayk7CisKKwlpZiAobW0gJiYgZmlyc3QpCisJCXJlc2V0X2Jsb29t X2ZpbHRlcihscnV2ZWMsIHdhbGstPm1heF9zZXEgKyAxKTsKKworCWlmICgqaXRlcikKKwkJbW1w dXRfYXN5bmMoKml0ZXIpOworCisJKml0ZXIgPSBtbTsKKworCXJldHVybiBsYXN0OworfQorCitz dGF0aWMgYm9vbCBpdGVyYXRlX21tX2xpc3Rfbm93YWxrKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg dW5zaWduZWQgbG9uZyBtYXhfc2VxKQoreworCWJvb2wgc3VjY2VzcyA9IGZhbHNlOworCXN0cnVj dCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOworCXN0cnVjdCBscnVf Z2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7CisJc3RydWN0IGxydV9n ZW5fbW1fc3RhdGUgKm1tX3N0YXRlID0gJmxydXZlYy0+bW1fc3RhdGU7CisKKwlzcGluX2xvY2so Jm1tX2xpc3QtPmxvY2spOworCisJVk1fV0FSTl9PTl9PTkNFKG1tX3N0YXRlLT5zZXEgKyAxIDwg bWF4X3NlcSk7CisKKwlpZiAobWF4X3NlcSA+IG1tX3N0YXRlLT5zZXEgJiYgIW1tX3N0YXRlLT5u cl93YWxrZXJzKSB7CisJCVZNX1dBUk5fT05fT05DRShtbV9zdGF0ZS0+aGVhZCAmJiBtbV9zdGF0 ZS0+aGVhZCAhPSAmbW1fbGlzdC0+Zmlmbyk7CisKKwkJV1JJVEVfT05DRShtbV9zdGF0ZS0+c2Vx LCBtbV9zdGF0ZS0+c2VxICsgMSk7CisJCXJlc2V0X21tX3N0YXRzKGxydXZlYywgTlVMTCwgdHJ1 ZSk7CisJCXN1Y2Nlc3MgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrKCZtbV9saXN0LT5sb2Nr KTsKKworCXJldHVybiBzdWNjZXNzOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVmYXVsdCBmZWVkYmFjayBsb29wCiAgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwpAQCAtMzI3Nyw2ICszNjQ1LDExOCBAQCBzdGF0aWMgaW50IGZvbGlvX2lu Y19nZW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJl Y2xhaQogCXJldHVybiBuZXdfZ2VuOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfYmF0Y2hfc2l6 ZShzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAorCQkJ ICAgICAgaW50IG9sZF9nZW4sIGludCBuZXdfZ2VuKQoreworCWludCB0eXBlID0gZm9saW9faXNf ZmlsZV9scnUoZm9saW8pOworCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7CisJaW50 IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOworCisJVk1fV0FSTl9PTl9PTkNFKG9sZF9n ZW4gPj0gTUFYX05SX0dFTlMpOworCVZNX1dBUk5fT05fT05DRShuZXdfZ2VuID49IE1BWF9OUl9H RU5TKTsKKworCXdhbGstPmJhdGNoZWQrKzsKKworCXdhbGstPm5yX3BhZ2VzW29sZF9nZW5dW3R5 cGVdW3pvbmVdIC09IGRlbHRhOworCXdhbGstPm5yX3BhZ2VzW25ld19nZW5dW3R5cGVdW3pvbmVd ICs9IGRlbHRhOworfQorCitzdGF0aWMgdm9pZCByZXNldF9iYXRjaF9zaXplKHN0cnVjdCBscnV2 ZWMgKmxydXZlYywgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaykKK3sKKwlpbnQgZ2VuLCB0 eXBlLCB6b25lOworCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1 Z2VuOworCisJd2Fsay0+YmF0Y2hlZCA9IDA7CisKKwlmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdl biwgdHlwZSwgem9uZSkgeworCQllbnVtIGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJ VkVfRklMRTsKKwkJaW50IGRlbHRhID0gd2Fsay0+bnJfcGFnZXNbZ2VuXVt0eXBlXVt6b25lXTsK KworCQlpZiAoIWRlbHRhKQorCQkJY29udGludWU7CisKKwkJd2Fsay0+bnJfcGFnZXNbZ2VuXVt0 eXBlXVt6b25lXSA9IDA7CisJCVdSSVRFX09OQ0UobHJ1Z2VuLT5ucl9wYWdlc1tnZW5dW3R5cGVd W3pvbmVdLAorCQkJICAgbHJ1Z2VuLT5ucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdICsgZGVsdGEp OworCisJCWlmIChscnVfZ2VuX2lzX2FjdGl2ZShscnV2ZWMsIGdlbikpCisJCQlscnUgKz0gTFJV X0FDVElWRTsKKwkJX191cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBscnUsIHpvbmUsIGRlbHRhKTsK Kwl9Cit9CisKK3N0YXRpYyBpbnQgc2hvdWxkX3NraXBfdm1hKHVuc2lnbmVkIGxvbmcgc3RhcnQs IHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqYXJncykKK3sKKwlzdHJ1Y3QgYWRk cmVzc19zcGFjZSAqbWFwcGluZzsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGFyZ3Mt PnZtYTsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJncy0+cHJpdmF0ZTsKKwor CWlmICghdm1hX2lzX2FjY2Vzc2libGUodm1hKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoaXNf dm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCXJldHVybiB0cnVlOworCisJaWYgKHZtYS0+dm1fZmxh Z3MgJiAoVk1fTE9DS0VEIHwgVk1fU1BFQ0lBTCB8IFZNX1NFUV9SRUFEIHwgVk1fUkFORF9SRUFE KSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAodm1hID09IGdldF9nYXRlX3ZtYSh2bWEtPnZtX21t KSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAodm1hX2lzX2Fub255bW91cyh2bWEpKQorCQlyZXR1 cm4gIXdhbGstPmNhbl9zd2FwOworCisJaWYgKFdBUk5fT05fT05DRSghdm1hLT52bV9maWxlIHx8 ICF2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZykpCisJCXJldHVybiB0cnVlOworCisJbWFwcGluZyA9 IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOworCWlmIChtYXBwaW5nX3VuZXZpY3RhYmxlKG1hcHBp bmcpKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKQorCQly ZXR1cm4gIXdhbGstPmNhbl9zd2FwOworCisJLyogdG8gZXhjbHVkZSBzcGVjaWFsIG1hcHBpbmdz IGxpa2UgZGF4LCBldGMuICovCisJcmV0dXJuICFtYXBwaW5nLT5hX29wcy0+cmVhZF9mb2xpbzsK K30KKworLyoKKyAqIFNvbWUgdXNlcnNwYWNlIG1lbW9yeSBhbGxvY2F0b3JzIG1hcCBtYW55IHNp bmdsZS1wYWdlIFZNQXMuIEluc3RlYWQgb2YKKyAqIHJldHVybmluZyBiYWNrIHRvIHRoZSBQR0Qg dGFibGUgZm9yIGVhY2ggb2Ygc3VjaCBWTUFzLCBmaW5pc2ggYW4gZW50aXJlIFBNRAorICogdGFi bGUgdG8gcmVkdWNlIHppZ3phZ3MgYW5kIGltcHJvdmUgY2FjaGUgcGVyZm9ybWFuY2UuCisgKi8K K3N0YXRpYyBib29sIGdldF9uZXh0X3ZtYSh1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxv bmcgc2l6ZSwgc3RydWN0IG1tX3dhbGsgKmFyZ3MsCisJCQkgdW5zaWduZWQgbG9uZyAqdm1fc3Rh cnQsIHVuc2lnbmVkIGxvbmcgKnZtX2VuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gcm91 bmRfdXAoKnZtX2VuZCwgc2l6ZSk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSAoc3RhcnQgfCB+bWFz aykgKyAxOworCisJVk1fV0FSTl9PTl9PTkNFKG1hc2sgJiBzaXplKTsKKwlWTV9XQVJOX09OX09O Q0UoKHN0YXJ0ICYgbWFzaykgIT0gKCp2bV9zdGFydCAmIG1hc2spKTsKKworCXdoaWxlIChhcmdz LT52bWEpIHsKKwkJaWYgKHN0YXJ0ID49IGFyZ3MtPnZtYS0+dm1fZW5kKSB7CisJCQlhcmdzLT52 bWEgPSBhcmdzLT52bWEtPnZtX25leHQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChlbmQg JiYgZW5kIDw9IGFyZ3MtPnZtYS0+dm1fc3RhcnQpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYg KHNob3VsZF9za2lwX3ZtYShhcmdzLT52bWEtPnZtX3N0YXJ0LCBhcmdzLT52bWEtPnZtX2VuZCwg YXJncykpIHsKKwkJCWFyZ3MtPnZtYSA9IGFyZ3MtPnZtYS0+dm1fbmV4dDsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJKnZtX3N0YXJ0ID0gbWF4KHN0YXJ0LCBhcmdzLT52bWEtPnZtX3N0YXJ0KTsK KwkJKnZtX2VuZCA9IG1pbihlbmQgLSAxLCBhcmdzLT52bWEtPnZtX2VuZCAtIDEpICsgMTsKKwor CQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyB1bnNpZ25l ZCBsb25nIGdldF9wdGVfcGZuKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEs IHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRl KTsKQEAgLTMyOTUsOCArMzc3NSwyOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcHRlX3Bm bihwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZAogCXJldHVy biBwZm47CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwg ZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcpCitzdGF0aWMgdW5zaWdu ZWQgbG9uZyBnZXRfcG1kX3BmbihwbWRfdCBwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h LCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwbWRfcGZuKHBt ZCk7CisKKwlWTV9XQVJOX09OX09OQ0UoYWRkciA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkciA+PSB2 bWEtPnZtX2VuZCk7CisKKwlpZiAoIXBtZF9wcmVzZW50KHBtZCkgfHwgaXNfaHVnZV96ZXJvX3Bt ZChwbWQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoV0FSTl9PTl9PTkNFKHBtZF9kZXZtYXAocG1k KSkpCisJCXJldHVybiAtMTsKKworCWlmIChXQVJOX09OX09OQ0UoIXBmbl92YWxpZChwZm4pKSkK KwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHBmbjsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0 IGZvbGlvICpnZXRfcGZuX2ZvbGlvKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgbWVtX2Nncm91 cCAqbWVtY2csCi0JCQkJICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKKwkJCQkgICBzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGNhbl9zd2FwKQogewogCXN0cnVjdCBmb2xpbyAq Zm9saW87CiAKQEAgLTMzMTEsOSArMzgxMSwzNzggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqZ2V0 X3Bmbl9mb2xpbyh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAog CWlmIChmb2xpb19tZW1jZ19yY3UoZm9saW8pICE9IG1lbWNnKQogCQlyZXR1cm4gTlVMTDsKIAor CS8qIGZpbGUgVk1BcyBjYW4gY29udGFpbiBhbm9uIHBhZ2VzIGZyb20gQ09XICovCisJaWYgKCFm b2xpb19pc19maWxlX2xydShmb2xpbykgJiYgIWNhbl9zd2FwKQorCQlyZXR1cm4gTlVMTDsKKwog CXJldHVybiBmb2xpbzsKIH0KIAorc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90 YWwsIGludCB5b3VuZykKK3sKKwlpbnQgbiA9IGNsYW1wX3QoaW50LCBjYWNoZV9saW5lX3NpemUo KSAvIHNpemVvZihwdGVfdCksIDIsIDgpOworCisJLyogc3VpdGFibGUgaWYgdGhlIGF2ZXJhZ2Ug bnVtYmVyIG9mIHlvdW5nIFBURXMgcGVyIGNhY2hlbGluZSBpcyA+PTEgKi8KKwlyZXR1cm4geW91 bmcgKiBuID49IHRvdGFsOworfQorCitzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAq cG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgIHN0cnVj dCBtbV93YWxrICphcmdzKQoreworCWludCBpOworCXB0ZV90ICpwdGU7CisJc3BpbmxvY2tfdCAq cHRsOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgdG90YWwgPSAwOworCWludCB5b3VuZyA9 IDA7CisJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsayA9IGFyZ3MtPnByaXZhdGU7CisJc3Ry dWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKHdhbGstPmxydXZlYyk7CisJc3Ry dWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdCh3YWxrLT5scnV2ZWMpOworCWlu dCBvbGRfZ2VuLCBuZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcSh3YWxrLT5tYXhfc2VxKTsKKwor CVZNX1dBUk5fT05fT05DRShwbWRfbGVhZigqcG1kKSk7CisKKwlwdGwgPSBwdGVfbG9ja3B0cihh cmdzLT5tbSwgcG1kKTsKKwlpZiAoIXNwaW5fdHJ5bG9jayhwdGwpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKKworCXB0ZSA9IHB0ZV9vZmZzZXRfbWFw KHBtZCwgc3RhcnQgJiBQTURfTUFTSyk7CityZXN0YXJ0OgorCWZvciAoaSA9IHB0ZV9pbmRleChz dGFydCksIGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IGkrKywgYWRkciArPSBQQUdFX1NJWkUp IHsKKwkJdW5zaWduZWQgbG9uZyBwZm47CisJCXN0cnVjdCBmb2xpbyAqZm9saW87CisKKwkJdG90 YWwrKzsKKwkJd2Fsay0+bW1fc3RhdHNbTU1fTEVBRl9UT1RBTF0rKzsKKworCQlwZm4gPSBnZXRf cHRlX3BmbihwdGVbaV0sIGFyZ3MtPnZtYSwgYWRkcik7CisJCWlmIChwZm4gPT0gLTEpCisJCQlj b250aW51ZTsKKworCQlpZiAoIXB0ZV95b3VuZyhwdGVbaV0pKSB7CisJCQl3YWxrLT5tbV9zdGF0 c1tNTV9MRUFGX09MRF0rKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9saW8gPSBnZXRfcGZu X2ZvbGlvKHBmbiwgbWVtY2csIHBnZGF0LCB3YWxrLT5jYW5fc3dhcCk7CisJCWlmICghZm9saW8p CisJCQljb250aW51ZTsKKworCQlpZiAoIXB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoYXJncy0+ dm1hLCBhZGRyLCBwdGUgKyBpKSkKKwkJCWNvbnRpbnVlOworCisJCXlvdW5nKys7CisJCXdhbGst Pm1tX3N0YXRzW01NX0xFQUZfWU9VTkddKys7CisKKwkJaWYgKHB0ZV9kaXJ0eShwdGVbaV0pICYm ICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmJgorCQkgICAgIShmb2xpb190ZXN0X2Fub24oZm9s aW8pICYmIGZvbGlvX3Rlc3Rfc3dhcGJhY2tlZChmb2xpbykgJiYKKwkJICAgICAgIWZvbGlvX3Rl c3Rfc3dhcGNhY2hlKGZvbGlvKSkpCisJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKKworCQlv bGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7CisJCWlmIChvbGRfZ2Vu ID49IDAgJiYgb2xkX2dlbiAhPSBuZXdfZ2VuKQorCQkJdXBkYXRlX2JhdGNoX3NpemUod2Fsaywg Zm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOworCX0KKworCWlmIChpIDwgUFRSU19QRVJfUFRFICYm IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCAmc3RhcnQsICZlbmQpKQor CQlnb3RvIHJlc3RhcnQ7CisKKwlwdGVfdW5tYXAocHRlKTsKKworCWFyY2hfbGVhdmVfbGF6eV9t bXVfbW9kZSgpOworCXNwaW5fdW5sb2NrKHB0bCk7CisKKwlyZXR1cm4gc3VpdGFibGVfdG9fc2Nh bih0b3RhbCwgeW91bmcpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVH RVBBR0UpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HKQorc3Rh dGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcg bmV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICBzdHJ1Y3QgbW1fd2FsayAq YXJncywgdW5zaWduZWQgbG9uZyAqYml0bWFwLCB1bnNpZ25lZCBsb25nICpzdGFydCkKK3sKKwlp bnQgaTsKKwlwbWRfdCAqcG1kOworCXNwaW5sb2NrX3QgKnB0bDsKKwlzdHJ1Y3QgbHJ1X2dlbl9t bV93YWxrICp3YWxrID0gYXJncy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cg PSBscnV2ZWNfbWVtY2cod2Fsay0+bHJ1dmVjKTsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0 ID0gbHJ1dmVjX3BnZGF0KHdhbGstPmxydXZlYyk7CisJaW50IG9sZF9nZW4sIG5ld19nZW4gPSBs cnVfZ2VuX2Zyb21fc2VxKHdhbGstPm1heF9zZXEpOworCisJVk1fV0FSTl9PTl9PTkNFKHB1ZF9s ZWFmKCpwdWQpKTsKKworCS8qIHRyeSB0byBiYXRjaCBhdCBtb3N0IDErTUlOX0xSVV9CQVRDSCsx IGVudHJpZXMgKi8KKwlpZiAoKnN0YXJ0ID09IC0xKSB7CisJCSpzdGFydCA9IG5leHQ7CisJCXJl dHVybjsKKwl9CisKKwlpID0gbmV4dCA9PSAtMSA/IDAgOiBwbWRfaW5kZXgobmV4dCkgLSBwbWRf aW5kZXgoKnN0YXJ0KTsKKwlpZiAoaSAmJiBpIDw9IE1JTl9MUlVfQkFUQ0gpIHsKKwkJX19zZXRf Yml0KGkgLSAxLCBiaXRtYXApOworCQlyZXR1cm47CisJfQorCisJcG1kID0gcG1kX29mZnNldChw dWQsICpzdGFydCk7CisKKwlwdGwgPSBwbWRfbG9ja3B0cihhcmdzLT5tbSwgcG1kKTsKKwlpZiAo IXNwaW5fdHJ5bG9jayhwdGwpKQorCQlnb3RvIGRvbmU7CisKKwlhcmNoX2VudGVyX2xhenlfbW11 X21vZGUoKTsKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBwZm47CisJCXN0cnVjdCBmb2xpbyAq Zm9saW87CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IGkgPyAoKnN0YXJ0ICYgUE1EX01BU0spICsg aSAqIFBNRF9TSVpFIDogKnN0YXJ0OworCisJCXBmbiA9IGdldF9wbWRfcGZuKHBtZFtpXSwgdm1h LCBhZGRyKTsKKwkJaWYgKHBmbiA9PSAtMSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAoIXBtZF90 cmFuc19odWdlKHBtZFtpXSkpIHsKKwkJCWlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19O T05MRUFGX1BNRF9ZT1VORykpCisJCQkJcG1kcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFk ZHIsIHBtZCArIGkpOworCQkJZ290byBuZXh0OworCQl9CisKKwkJZm9saW8gPSBnZXRfcGZuX2Zv bGlvKHBmbiwgbWVtY2csIHBnZGF0LCB3YWxrLT5jYW5fc3dhcCk7CisJCWlmICghZm9saW8pCisJ CQlnb3RvIG5leHQ7CisKKwkJaWYgKCFwbWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRk ciwgcG1kICsgaSkpCisJCQlnb3RvIG5leHQ7CisKKwkJd2Fsay0+bW1fc3RhdHNbTU1fTEVBRl9Z T1VOR10rKzsKKworCQlpZiAocG1kX2RpcnR5KHBtZFtpXSkgJiYgIWZvbGlvX3Rlc3RfZGlydHko Zm9saW8pICYmCisJCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJiYgZm9saW9fdGVzdF9z d2FwYmFja2VkKGZvbGlvKSAmJgorCQkgICAgICAhZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8p KSkKKwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOworCisJCW9sZF9nZW4gPSBmb2xpb191cGRh dGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTsKKwkJaWYgKG9sZF9nZW4gPj0gMCAmJiBvbGRfZ2VuICE9 IG5ld19nZW4pCisJCQl1cGRhdGVfYmF0Y2hfc2l6ZSh3YWxrLCBmb2xpbywgb2xkX2dlbiwgbmV3 X2dlbik7CituZXh0OgorCQlpID0gaSA+IE1JTl9MUlVfQkFUQ0ggPyAwIDogZmluZF9uZXh0X2Jp dChiaXRtYXAsIE1JTl9MUlVfQkFUQ0gsIGkpICsgMTsKKwl9IHdoaWxlIChpIDw9IE1JTl9MUlVf QkFUQ0gpOworCisJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CisJc3Bpbl91bmxvY2socHRs KTsKK2RvbmU6CisJKnN0YXJ0ID0gLTE7CisJYml0bWFwX3plcm8oYml0bWFwLCBNSU5fTFJVX0JB VENIKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3Qg KnB1ZCwgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJ CQkgIHN0cnVjdCBtbV93YWxrICphcmdzLCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVk IGxvbmcgKnN0YXJ0KQoreworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHdhbGtfcG1kX3Jhbmdl KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJ ICAgc3RydWN0IG1tX3dhbGsgKmFyZ3MpCit7CisJaW50IGk7CisJcG1kX3QgKnBtZDsKKwl1bnNp Z25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgcG9zID0gLTE7CisJc3RydWN0IGxydV9nZW5fbW1f d2FsayAqd2FsayA9IGFyZ3MtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBiaXRtYXBbQklUU19U T19MT05HUyhNSU5fTFJVX0JBVENIKV0gPSB7fTsKKworCVZNX1dBUk5fT05fT05DRShwdWRfbGVh ZigqcHVkKSk7CisKKwkvKgorCSAqIEZpbmlzaCBhbiBlbnRpcmUgUE1EIGluIHR3byBwYXNzZXM6 IHRoZSBmaXJzdCBvbmx5IHJlYWNoZXMgdG8gUFRFCisJICogdGFibGVzIHRvIGF2b2lkIHRha2lu ZyB0aGUgUE1EIGxvY2s7IHRoZSBzZWNvbmQsIGlmIG5lY2Vzc2FyeSwgdGFrZXMKKwkgKiB0aGUg UE1EIGxvY2sgdG8gY2xlYXIgdGhlIGFjY2Vzc2VkIGJpdCBpbiBQTUQgZW50cmllcy4KKwkgKi8K KwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgc3RhcnQgJiBQVURfTUFTSyk7CityZXN0YXJ0OgorCS8q IHdhbGtfcHRlX3JhbmdlKCkgbWF5IGNhbGwgZ2V0X25leHRfdm1hKCkgKi8KKwl2bWEgPSBhcmdz LT52bWE7CisJZm9yIChpID0gcG1kX2luZGV4KHN0YXJ0KSwgYWRkciA9IHN0YXJ0OyBhZGRyICE9 IGVuZDsgaSsrLCBhZGRyID0gbmV4dCkgeworCQlwbWRfdCB2YWwgPSBwbWRfcmVhZF9hdG9taWMo cG1kICsgaSk7CisKKwkJLyogZm9yIHBtZF9yZWFkX2F0b21pYygpICovCisJCWJhcnJpZXIoKTsK KworCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisKKwkJaWYgKCFwbWRfcHJlc2Vu dCh2YWwpIHx8IGlzX2h1Z2VfemVyb19wbWQodmFsKSkgeworCQkJd2Fsay0+bW1fc3RhdHNbTU1f TEVBRl9UT1RBTF0rKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKyNpZmRlZiBDT05GSUdfVFJBTlNQ QVJFTlRfSFVHRVBBR0UKKwkJaWYgKHBtZF90cmFuc19odWdlKHZhbCkpIHsKKwkJCXVuc2lnbmVk IGxvbmcgcGZuID0gcG1kX3Bmbih2YWwpOworCQkJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9 IGxydXZlY19wZ2RhdCh3YWxrLT5scnV2ZWMpOworCisJCQl3YWxrLT5tbV9zdGF0c1tNTV9MRUFG X1RPVEFMXSsrOworCisJCQlpZiAoIXBtZF95b3VuZyh2YWwpKSB7CisJCQkJd2Fsay0+bW1fc3Rh dHNbTU1fTEVBRl9PTERdKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIHRyeSB0byBh dm9pZCB1bm5lY2Vzc2FyeSBtZW1vcnkgbG9hZHMgKi8KKwkJCWlmIChwZm4gPCBwZ2RhdC0+bm9k ZV9zdGFydF9wZm4gfHwgcGZuID49IHBnZGF0X2VuZF9wZm4ocGdkYXQpKQorCQkJCWNvbnRpbnVl OworCisJCQl3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkLCBhZGRyLCB2bWEsIGFyZ3MsIGJpdG1h cCwgJnBvcyk7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisJCXdhbGstPm1tX3N0YXRzW01N X05PTkxFQUZfVE9UQUxdKys7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURf WU9VTkcKKwkJaWYgKCFwbWRfeW91bmcodmFsKSkKKwkJCWNvbnRpbnVlOworCisJCXdhbGtfcG1k X3JhbmdlX2xvY2tlZChwdWQsIGFkZHIsIHZtYSwgYXJncywgYml0bWFwLCAmcG9zKTsKKyNlbmRp ZgorCQlpZiAoIXdhbGstPmZvcmNlX3NjYW4gJiYgIXRlc3RfYmxvb21fZmlsdGVyKHdhbGstPmxy dXZlYywgd2Fsay0+bWF4X3NlcSwgcG1kICsgaSkpCisJCQljb250aW51ZTsKKworCQl3YWxrLT5t bV9zdGF0c1tNTV9OT05MRUFGX0ZPVU5EXSsrOworCisJCWlmICghd2Fsa19wdGVfcmFuZ2UoJnZh bCwgYWRkciwgbmV4dCwgYXJncykpCisJCQljb250aW51ZTsKKworCQl3YWxrLT5tbV9zdGF0c1tN TV9OT05MRUFGX0FEREVEXSsrOworCisJCS8qIGNhcnJ5IG92ZXIgdG8gdGhlIG5leHQgZ2VuZXJh dGlvbiAqLworCQl1cGRhdGVfYmxvb21fZmlsdGVyKHdhbGstPmxydXZlYywgd2Fsay0+bWF4X3Nl cSArIDEsIHBtZCArIGkpOworCX0KKworCXdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWQsIC0xLCB2 bWEsIGFyZ3MsIGJpdG1hcCwgJnBvcyk7CisKKwlpZiAoaSA8IFBUUlNfUEVSX1BNRCAmJiBnZXRf bmV4dF92bWEoUFVEX01BU0ssIFBNRF9TSVpFLCBhcmdzLCAmc3RhcnQsICZlbmQpKQorCQlnb3Rv IHJlc3RhcnQ7Cit9CisKK3N0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5z aWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgIHN0cnVjdCBtbV93YWxr ICphcmdzKQoreworCWludCBpOworCXB1ZF90ICpwdWQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOwor CXVuc2lnbmVkIGxvbmcgbmV4dDsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrID0gYXJn cy0+cHJpdmF0ZTsKKworCVZNX1dBUk5fT05fT05DRShwNGRfbGVhZigqcDRkKSk7CisKKwlwdWQg PSBwdWRfb2Zmc2V0KHA0ZCwgc3RhcnQgJiBQNERfTUFTSyk7CityZXN0YXJ0OgorCWZvciAoaSA9 IHB1ZF9pbmRleChzdGFydCksIGFkZHIgPSBzdGFydDsgYWRkciAhPSBlbmQ7IGkrKywgYWRkciA9 IG5leHQpIHsKKwkJcHVkX3QgdmFsID0gUkVBRF9PTkNFKHB1ZFtpXSk7CisKKwkJbmV4dCA9IHB1 ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCisJCWlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJO X09OX09OQ0UocHVkX2xlYWYodmFsKSkpCisJCQljb250aW51ZTsKKworCQl3YWxrX3BtZF9yYW5n ZSgmdmFsLCBhZGRyLCBuZXh0LCBhcmdzKTsKKworCQlpZiAobW1faXNfb29tX3ZpY3RpbShhcmdz LT5tbSkpCisJCQlyZXR1cm4gMTsKKworCQkvKiBhIHJhY3kgY2hlY2sgdG8gY3VydGFpbCB0aGUg d2FpdGluZyB0aW1lICovCisJCWlmICh3cV9oYXNfc2xlZXBlcigmd2Fsay0+bHJ1dmVjLT5tbV9z dGF0ZS53YWl0KSkKKwkJCXJldHVybiAxOworCisJCWlmIChuZWVkX3Jlc2NoZWQoKSB8fCB3YWxr LT5iYXRjaGVkID49IE1BWF9MUlVfQkFUQ0gpIHsKKwkJCWVuZCA9IChhZGRyIHwgflBVRF9NQVNL KSArIDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAoaSA8IFBUUlNfUEVSX1BVRCAm JiBnZXRfbmV4dF92bWEoUDREX01BU0ssIFBVRF9TSVpFLCBhcmdzLCAmc3RhcnQsICZlbmQpKQor CQlnb3RvIHJlc3RhcnQ7CisKKwllbmQgPSByb3VuZF91cChlbmQsIFA0RF9TSVpFKTsKK2RvbmU6 CisJaWYgKCFlbmQgfHwgIWFyZ3MtPnZtYSkKKwkJcmV0dXJuIDE7CisKKwl3YWxrLT5uZXh0X2Fk ZHIgPSBtYXgoZW5kLCBhcmdzLT52bWEtPnZtX3N0YXJ0KTsKKworCXJldHVybiAtRUFHQUlOOwor fQorCitzdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IG1t X3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspCit7CisJc3RhdGljIGNv bnN0IHN0cnVjdCBtbV93YWxrX29wcyBtbV93YWxrX29wcyA9IHsKKwkJLnRlc3Rfd2FsayA9IHNo b3VsZF9za2lwX3ZtYSwKKwkJLnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLAorCX07CisKKwlp bnQgZXJyOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMp OworCisJd2Fsay0+bmV4dF9hZGRyID0gRklSU1RfVVNFUl9BRERSRVNTOworCisJZG8geworCQll cnIgPSAtRUJVU1k7CisKKwkJLyogZm9saW9fdXBkYXRlX2dlbigpIHJlcXVpcmVzIHN0YWJsZSBm b2xpb19tZW1jZygpICovCisJCWlmICghbWVtX2Nncm91cF90cnlsb2NrX3BhZ2VzKG1lbWNnKSkK KwkJCWJyZWFrOworCisJCS8qIHRoZSBjYWxsZXIgbWlnaHQgYmUgaG9sZGluZyB0aGUgbG9jayBm b3Igd3JpdGUgKi8KKwkJaWYgKG1tYXBfcmVhZF90cnlsb2NrKG1tKSkgeworCQkJZXJyID0gd2Fs a19wYWdlX3JhbmdlKG1tLCB3YWxrLT5uZXh0X2FkZHIsIFVMT05HX01BWCwgJm1tX3dhbGtfb3Bz LCB3YWxrKTsKKworCQkJbW1hcF9yZWFkX3VubG9jayhtbSk7CisJCX0KKworCQltZW1fY2dyb3Vw X3VubG9ja19wYWdlcygpOworCisJCWlmICh3YWxrLT5iYXRjaGVkKSB7CisJCQlzcGluX2xvY2tf aXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKwkJCXJlc2V0X2JhdGNoX3NpemUobHJ1dmVjLCB3YWxr KTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7CisJCX0KKworCQljb25k X3Jlc2NoZWQoKTsKKwl9IHdoaWxlIChlcnIgPT0gLUVBR0FJTik7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgbHJ1X2dlbl9tbV93YWxrICpzZXRfbW1fd2FsayhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0 KQoreworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGsgPSBjdXJyZW50LT5yZWNsYWltX3N0 YXRlLT5tbV93YWxrOworCisJaWYgKHBnZGF0ICYmIGN1cnJlbnRfaXNfa3N3YXBkKCkpIHsKKwkJ Vk1fV0FSTl9PTl9PTkNFKHdhbGspOworCisJCXdhbGsgPSAmcGdkYXQtPm1tX3dhbGs7CisJfSBl bHNlIGlmICghcGdkYXQgJiYgIXdhbGspIHsKKwkJVk1fV0FSTl9PTl9PTkNFKGN1cnJlbnRfaXNf a3N3YXBkKCkpOworCisJCXdhbGsgPSBremFsbG9jKHNpemVvZigqd2FsayksIF9fR0ZQX0hJR0gg fCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKTsKKwl9CisKKwljdXJyZW50LT5yZWNs YWltX3N0YXRlLT5tbV93YWxrID0gd2FsazsKKworCXJldHVybiB3YWxrOworfQorCitzdGF0aWMg dm9pZCBjbGVhcl9tbV93YWxrKHZvaWQpCit7CisJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fs ayA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGs7CisKKwlWTV9XQVJOX09OX09OQ0Uo d2FsayAmJiBtZW1jaHJfaW52KHdhbGstPm5yX3BhZ2VzLCAwLCBzaXplb2Yod2Fsay0+bnJfcGFn ZXMpKSk7CisJVk1fV0FSTl9PTl9PTkNFKHdhbGsgJiYgbWVtY2hyX2ludih3YWxrLT5tbV9zdGF0 cywgMCwgc2l6ZW9mKHdhbGstPm1tX3N0YXRzKSkpOworCisJY3VycmVudC0+cmVjbGFpbV9zdGF0 ZS0+bW1fd2FsayA9IE5VTEw7CisKKwlpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkpCisJCWtmcmVl KHdhbGspOworfQorCiBzdGF0aWMgdm9pZCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIGludCB0eXBlKQogewogCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZl Yy0+bHJ1Z2VuOwpAQCAtMzM2NSw3ICs0MjM0LDcgQEAgc3RhdGljIGJvb2wgdHJ5X3RvX2luY19t aW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBjYW5fc3dhcCkKIAlyZXR1cm4gc3Vj Y2VzczsKIH0KIAotc3RhdGljIHZvaWQgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVj LCB1bnNpZ25lZCBsb25nIG1heF9zZXEsIGJvb2wgY2FuX3N3YXApCitzdGF0aWMgdm9pZCBpbmNf bWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgY2FuX3N3YXApCiB7CiAJaW50IHBy ZXYsIG5leHQ7CiAJaW50IHR5cGUsIHpvbmU7CkBAIC0zMzc1LDkgKzQyNDQsNiBAQCBzdGF0aWMg dm9pZCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4 X3NlcSwgYm9vbCBjYW5fcwogCiAJVk1fV0FSTl9PTl9PTkNFKCFzZXFfaXNfdmFsaWQobHJ1dmVj KSk7CiAKLQlpZiAobWF4X3NlcSAhPSBscnVnZW4tPm1heF9zZXEpCi0JCWdvdG8gdW5sb2NrOwot CiAJZm9yICh0eXBlID0gMDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUrKykgewogCQlpZiAo Z2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSAhPSBNQVhfTlJfR0VOUykKIAkJCWNvbnRpbnVlOwpA QCAtMzQxNSwxMCArNDI4MSw3NiBAQCBzdGF0aWMgdm9pZCBpbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSwgYm9vbCBjYW5fcwogCiAJLyogbWFr ZSBzdXJlIHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqLwogCXNtcF9zdG9yZV9yZWxl YXNlKCZscnVnZW4tPm1heF9zZXEsIGxydWdlbi0+bWF4X3NlcSArIDEpOwotdW5sb2NrOgorCiAJ c3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKIH0KIAorc3RhdGljIGJvb2wgdHJ5 X3RvX2luY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhf c2VxLAorCQkJICAgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sIGNhbl9zd2FwKQor eworCWJvb2wgc3VjY2VzczsKKwlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOworCXN0cnVj dCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9 ICZscnV2ZWMtPmxydWdlbjsKKworCVZNX1dBUk5fT05fT05DRShtYXhfc2VxID4gUkVBRF9PTkNF KGxydWdlbi0+bWF4X3NlcSkpOworCisJLyogc2VlIHRoZSBjb21tZW50IGluIGl0ZXJhdGVfbW1f bGlzdCgpICovCisJaWYgKG1heF9zZXEgPD0gUkVBRF9PTkNFKGxydXZlYy0+bW1fc3RhdGUuc2Vx KSkgeworCQlzdWNjZXNzID0gZmFsc2U7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIElm IHRoZSBoYXJkd2FyZSBkb2Vzbid0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQs IGZhbGxiYWNrCisJICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFy cyB0aGUgYWNjZXNzZWQgYml0IGluIGEKKwkgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0 aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHkKKwkgKiBpcyBsZXNzIGVm ZmljaWVudCwgYnV0IGl0IGF2b2lkcyBidXJzdHkgcGFnZSBmYXVsdHMuCisJICovCisJaWYgKCFh cmNoX2hhc19od19wdGVfeW91bmcoKSkgeworCQlzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0X25v d2FsayhscnV2ZWMsIG1heF9zZXEpOworCQlnb3RvIGRvbmU7CisJfQorCisJd2FsayA9IHNldF9t bV93YWxrKE5VTEwpOworCWlmICghd2FsaykgeworCQlzdWNjZXNzID0gaXRlcmF0ZV9tbV9saXN0 X25vd2FsayhscnV2ZWMsIG1heF9zZXEpOworCQlnb3RvIGRvbmU7CisJfQorCisJd2Fsay0+bHJ1 dmVjID0gbHJ1dmVjOworCXdhbGstPm1heF9zZXEgPSBtYXhfc2VxOworCXdhbGstPmNhbl9zd2Fw ID0gY2FuX3N3YXA7CisJd2Fsay0+Zm9yY2Vfc2NhbiA9IGZhbHNlOworCisJZG8geworCQlzdWNj ZXNzID0gaXRlcmF0ZV9tbV9saXN0KGxydXZlYywgd2FsaywgJm1tKTsKKwkJaWYgKG1tKQorCQkJ d2Fsa19tbShscnV2ZWMsIG1tLCB3YWxrKTsKKworCQljb25kX3Jlc2NoZWQoKTsKKwl9IHdoaWxl IChtbSk7Citkb25lOgorCWlmICghc3VjY2VzcykgeworCQlpZiAoc2MtPnByaW9yaXR5IDwgREVG X1BSSU9SSVRZIC0gMikKKwkJCXdhaXRfZXZlbnRfa2lsbGFibGUobHJ1dmVjLT5tbV9zdGF0ZS53 YWl0LAorCQkJCQkgICAgbWF4X3NlcSA8IFJFQURfT05DRShscnVnZW4tPm1heF9zZXEpKTsKKwor CQlyZXR1cm4gbWF4X3NlcSA8IFJFQURfT05DRShscnVnZW4tPm1heF9zZXEpOworCX0KKworCVZN X1dBUk5fT05fT05DRShtYXhfc2VxICE9IFJFQURfT05DRShscnVnZW4tPm1heF9zZXEpKTsKKwor CWluY19tYXhfc2VxKGxydXZlYywgY2FuX3N3YXApOworCS8qIGVpdGhlciB0aGlzIHNlZXMgYW55 IHdhaXRlcnMgb3IgdGhleSB3aWxsIHNlZSB1cGRhdGVkIG1heF9zZXEgKi8KKwlpZiAod3FfaGFz X3NsZWVwZXIoJmxydXZlYy0+bW1fc3RhdGUud2FpdCkpCisJCXdha2VfdXBfYWxsKCZscnV2ZWMt Pm1tX3N0YXRlLndhaXQpOworCisJd2FrZXVwX2ZsdXNoZXJfdGhyZWFkcyhXQl9SRUFTT05fVk1T Q0FOKTsKKworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbnJf ZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLAog CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm1pbl9zZXEsIGJvb2wgY2FuX3N3YXAsIGJvb2wgKm5l ZWRfYWdpbmcpCiB7CkBAIC0zNDk2LDcgKzQ0MjgsNyBAQCBzdGF0aWMgdm9pZCBhZ2VfbHJ1dmVj KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJbnJfdG9f c2NhbiA+Pj0gbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpID8gc2MtPnByaW9yaXR5IDogMDsKIAog CWlmIChucl90b19zY2FuICYmIG5lZWRfYWdpbmcpCi0JCWluY19tYXhfc2VxKGxydXZlYywgbWF4 X3NlcSwgc3dhcHBpbmVzcyk7CisJCXRyeV90b19pbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEs IHNjLCBzd2FwcGluZXNzKTsKIH0KIAogc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKQEAgLTM1MDUs NiArNDQzNyw4IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9k YXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAKIAlWTV9XQVJOX09OX09OQ0Uo IWN1cnJlbnRfaXNfa3N3YXBkKCkpOwogCisJc2V0X21tX3dhbGsocGdkYXQpOworCiAJbWVtY2cg PSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7CiAJZG8gewogCQlzdHJ1Y3QgbHJ1 dmVjICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOwpAQCAtMzUxMywx MSArNDQ0NywxNiBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3Rf ZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCiAJCWNvbmRfcmVzY2hlZCgp OwogCX0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBtZW1jZywgTlVMTCkp KTsKKworCWNsZWFyX21tX3dhbGsoKTsKIH0KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZXhwbG9p dHMgc3BhdGlhbCBsb2NhbGl0eSB3aGVuIHNocmlua19wYWdlX2xpc3QoKSB3YWxrcyB0aGUKLSAq IHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZCBwcm9t b3RlcyBob3QgcGFnZXMuCisgKiBybWFwLiBJdCBzY2FucyB0aGUgYWRqYWNlbnQgUFRFcyBvZiBh IHlvdW5nIFBURSBhbmQgcHJvbW90ZXMgaG90IHBhZ2VzLiBJZgorICogdGhlIHNjYW4gd2FzIGRv bmUgY2FjaGVsaW5lIGVmZmljaWVudGx5LCBpdCBhZGRzIHRoZSBQTUQgZW50cnkgcG9pbnRpbmcg dG8KKyAqIHRoZSBQVEUgdGFibGUgdG8gdGhlIEJsb29tIGZpbHRlci4gVGhpcyBmb3JtcyBhIGZl ZWRiYWNrIGxvb3AgYmV0d2VlbiB0aGUKKyAqIGV2aWN0aW9uIGFuZCB0aGUgYWdpbmcuCiAgKi8K IHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2 bXcpCiB7CkBAIC0zNTI2LDYgKzQ0NjUsOCBAQCB2b2lkIGxydV9nZW5fbG9va19hcm91bmQoc3Ry dWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJ dW5zaWduZWQgbG9uZyBlbmQ7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBscnVfZ2Vu X21tX3dhbGsgKndhbGs7CisJaW50IHlvdW5nID0gMDsKIAl1bnNpZ25lZCBsb25nIGJpdG1hcFtC SVRTX1RPX0xPTkdTKE1JTl9MUlVfQkFUQ0gpXSA9IHt9OwogCXN0cnVjdCBmb2xpbyAqZm9saW8g PSBwZm5fZm9saW8ocHZtdy0+cGZuKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBmb2xp b19tZW1jZyhmb2xpbyk7CkBAIC0zNTU1LDYgKzQ0OTYsNyBAQCB2b2lkIGxydV9nZW5fbG9va19h cm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCX0KIAogCXB0ZSA9IHB2 bXctPnB0ZSAtIChwdm13LT5hZGRyZXNzIC0gc3RhcnQpIC8gUEFHRV9TSVpFOworCXdhbGsgPSBj dXJyZW50LT5yZWNsYWltX3N0YXRlID8gY3VycmVudC0+cmVjbGFpbV9zdGF0ZS0+bW1fd2FsayA6 IE5VTEw7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7 CkBAIC0zNTY5LDEzICs0NTExLDE1IEBAIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3Qg cGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCWlmICghcHRlX3lvdW5nKHB0ZVtpXSkpCiAJ CQljb250aW51ZTsKIAotCQlmb2xpbyA9IGdldF9wZm5fZm9saW8ocGZuLCBtZW1jZywgcGdkYXQp OworCQlmb2xpbyA9IGdldF9wZm5fZm9saW8ocGZuLCBtZW1jZywgcGdkYXQsICF3YWxrIHx8IHdh bGstPmNhbl9zd2FwKTsKIAkJaWYgKCFmb2xpbykKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghcHRl cF90ZXN0X2FuZF9jbGVhcl95b3VuZyhwdm13LT52bWEsIGFkZHIsIHB0ZSArIGkpKQogCQkJY29u dGludWU7CiAKKwkJeW91bmcrKzsKKwogCQlpZiAocHRlX2RpcnR5KHB0ZVtpXSkgJiYgIWZvbGlv X3Rlc3RfZGlydHkoZm9saW8pICYmCiAJCSAgICAhKGZvbGlvX3Rlc3RfYW5vbihmb2xpbykgJiYg Zm9saW9fdGVzdF9zd2FwYmFja2VkKGZvbGlvKSAmJgogCQkgICAgICAhZm9saW9fdGVzdF9zd2Fw Y2FjaGUoZm9saW8pKSkKQEAgLTM1OTEsNyArNDUzNSwxMSBAQCB2b2lkIGxydV9nZW5fbG9va19h cm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCWFyY2hfbGVhdmVfbGF6 eV9tbXVfbW9kZSgpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaWYgKGJpdG1hcF93ZWlnaHQo Yml0bWFwLCBNSU5fTFJVX0JBVENIKSA8IFBBR0VWRUNfU0laRSkgeworCS8qIGZlZWRiYWNrIGZy b20gcm1hcCB3YWxrZXJzIHRvIHBhZ2UgdGFibGUgd2Fsa2VycyAqLworCWlmIChzdWl0YWJsZV90 b19zY2FuKGksIHlvdW5nKSkKKwkJdXBkYXRlX2Jsb29tX2ZpbHRlcihscnV2ZWMsIG1heF9zZXEs IHB2bXctPnBtZCk7CisKKwlpZiAoIXdhbGsgJiYgYml0bWFwX3dlaWdodChiaXRtYXAsIE1JTl9M UlVfQkFUQ0gpIDwgUEFHRVZFQ19TSVpFKSB7CiAJCWZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFw LCBNSU5fTFJVX0JBVENIKSB7CiAJCQlmb2xpbyA9IHBmbl9mb2xpbyhwdGVfcGZuKHB0ZVtpXSkp OwogCQkJZm9saW9fYWN0aXZhdGUoZm9saW8pOwpAQCAtMzYwMyw4ICs0NTUxLDEwIEBAIHZvaWQg bHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJ aWYgKCFtZW1fY2dyb3VwX3RyeWxvY2tfcGFnZXMobWVtY2cpKQogCQlyZXR1cm47CiAKLQlzcGlu X2xvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKLQluZXdfZ2VuID0gbHJ1X2dlbl9mcm9tX3Nl cShscnV2ZWMtPmxydWdlbi5tYXhfc2VxKTsKKwlpZiAoIXdhbGspIHsKKwkJc3Bpbl9sb2NrX2ly cSgmbHJ1dmVjLT5scnVfbG9jayk7CisJCW5ld19nZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydXZl Yy0+bHJ1Z2VuLm1heF9zZXEpOworCX0KIAogCWZvcl9lYWNoX3NldF9iaXQoaSwgYml0bWFwLCBN SU5fTFJVX0JBVENIKSB7CiAJCWZvbGlvID0gcGZuX2ZvbGlvKHB0ZV9wZm4ocHRlW2ldKSk7CkBA IC0zNjE1LDEwICs0NTY1LDE0IEBAIHZvaWQgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFn ZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCWlmIChvbGRfZ2VuIDwgMCB8fCBvbGRfZ2VuID09 IG5ld19nZW4pCiAJCQljb250aW51ZTsKIAotCQlscnVfZ2VuX3VwZGF0ZV9zaXplKGxydXZlYywg Zm9saW8sIG9sZF9nZW4sIG5ld19nZW4pOworCQlpZiAod2FsaykKKwkJCXVwZGF0ZV9iYXRjaF9z aXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKKwkJZWxzZQorCQkJbHJ1X2dlbl91 cGRhdGVfc2l6ZShscnV2ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKIAl9CiAKLQlzcGlu X3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOworCWlmICghd2FsaykKKwkJc3Bpbl91bmxv Y2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKIAogCW1lbV9jZ3JvdXBfdW5sb2NrX3BhZ2VzKCk7 CiB9CkBAIC0zOTAxLDYgKzQ4NTUsNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3Qg bHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcAogCXN0cnVj dCBmb2xpbyAqZm9saW87CiAJZW51bSB2bV9ldmVudF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xh aW1fc3RhdCBzdGF0OworCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CiAJc3RydWN0IG1l bV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9k YXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCkBAIC0zOTM3LDYgKzQ4OTIsMTAg QEAgc3RhdGljIGludCBldmljdF9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qg c2Nhbl9jb250cm9sICpzYywgaW50IHN3YXAKIAogCW1vdmVfcGFnZXNfdG9fbHJ1KGxydXZlYywg Jmxpc3QpOwogCisJd2FsayA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUtPm1tX3dhbGs7CisJaWYg KHdhbGsgJiYgd2Fsay0+YmF0Y2hlZCkKKwkJcmVzZXRfYmF0Y2hfc2l6ZShscnV2ZWMsIHdhbGsp OworCiAJaXRlbSA9IGN1cnJlbnRfaXNfa3N3YXBkKCkgPyBQR1NURUFMX0tTV0FQRCA6IFBHU1RF QUxfRElSRUNUOwogCWlmICghY2dyb3VwX3JlY2xhaW0oc2MpKQogCQlfX2NvdW50X3ZtX2V2ZW50 cyhpdGVtLCByZWNsYWltZWQpOwpAQCAtMzk1Myw2ICs0OTEyLDExIEBAIHN0YXRpYyBpbnQgZXZp Y3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2Ms IGludCBzd2FwCiAJcmV0dXJuIHNjYW5uZWQ7CiB9CiAKKy8qCisgKiBGb3IgZnV0dXJlIG9wdGlt aXphdGlvbnM6CisgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVz IHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZworICogICAgcmVjbGFpbS4KKyAqLwogc3RhdGlj IHVuc2lnbmVkIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1 Y3Qgc2Nhbl9jb250cm9sICpzYywKIAkJCQkgICAgYm9vbCBjYW5fc3dhcCwgdW5zaWduZWQgbG9u ZyByZWNsYWltZWQpCiB7CkBAIC0zOTk5LDcgKzQ5NjMsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9u ZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRy b2wgKgogCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQogCQlyZXR1cm4gMDsKIAotCWluY19tYXhf c2VxKGxydXZlYywgbWF4X3NlcSwgY2FuX3N3YXApOworCWlmICh0cnlfdG9faW5jX21heF9zZXEo bHJ1dmVjLCBtYXhfc2VxLCBzYywgY2FuX3N3YXApKQorCQlyZXR1cm4gbnJfdG9fc2NhbjsKIGRv bmU6CiAJcmV0dXJuIG1pbl9zZXFbIWNhbl9zd2FwXSArIE1JTl9OUl9HRU5TIDw9IG1heF9zZXEg PyBucl90b19zY2FuIDogMDsKIH0KQEAgLTQwMTQsNiArNDk3OSw4IEBAIHN0YXRpYyB2b2lkIGxy dV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjCiAKIAlibGtfc3RhcnRfcGx1ZygmcGx1Zyk7CiAKKwlzZXRfbW1fd2FsayhscnV2 ZWNfcGdkYXQobHJ1dmVjKSk7CisKIAl3aGlsZSAodHJ1ZSkgewogCQlpbnQgZGVsdGE7CiAJCWlu dCBzd2FwcGluZXNzOwpAQCAtNDA0MSw2ICs1MDA4LDggQEAgc3RhdGljIHZvaWQgbHJ1X2dlbl9z aHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAq c2MKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCisJY2xlYXJfbW1fd2FsaygpOworCiAJYmxrX2Zp bmlzaF9wbHVnKCZwbHVnKTsKIH0KIApAQCAtNDA1NywxNSArNTAyNiwyMSBAQCB2b2lkIGxydV9n ZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJZm9yX2VhY2hfZ2VuX3R5 cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpCiAJCUlOSVRfTElTVF9IRUFEKCZscnVnZW4tPmxpc3Rz W2dlbl1bdHlwZV1bem9uZV0pOworCisJbHJ1dmVjLT5tbV9zdGF0ZS5zZXEgPSBNSU5fTlJfR0VO UzsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZscnV2ZWMtPm1tX3N0YXRlLndhaXQpOwogfQogCiAj aWZkZWYgQ09ORklHX01FTUNHCiB2b2lkIGxydV9nZW5faW5pdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nn cm91cCAqbWVtY2cpCiB7CisJSU5JVF9MSVNUX0hFQUQoJm1lbWNnLT5tbV9saXN0LmZpZm8pOwor CXNwaW5fbG9ja19pbml0KCZtZW1jZy0+bW1fbGlzdC5sb2NrKTsKIH0KIAogdm9pZCBscnVfZ2Vu X2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogeworCWludCBpOwogCWludCBu aWQ7CiAKIAlmb3JfZWFjaF9ub2RlKG5pZCkgewpAQCAtNDA3Myw2ICs1MDQ4LDExIEBAIHZvaWQg bHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIAogCQlWTV9XQVJO X09OX09OQ0UobWVtY2hyX2ludihscnV2ZWMtPmxydWdlbi5ucl9wYWdlcywgMCwKIAkJCQkJICAg c2l6ZW9mKGxydXZlYy0+bHJ1Z2VuLm5yX3BhZ2VzKSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBO Ul9CTE9PTV9GSUxURVJTOyBpKyspIHsKKwkJCWJpdG1hcF9mcmVlKGxydXZlYy0+bW1fc3RhdGUu ZmlsdGVyc1tpXSk7CisJCQlscnV2ZWMtPm1tX3N0YXRlLmZpbHRlcnNbaV0gPSBOVUxMOworCQl9 CiAJfQogfQogI2VuZGlmCi0tIAoyLjM3LjEuNTk1Lmc3MThhM2E4ZjA0LWdvb2cKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVs IG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==