Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp494016yba; Wed, 24 Apr 2019 05:02:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqybC//ltlVCu2NCT1wZhG9EJKb/715TmCNNHgA5azybAdEprhPx4n7tZKfhILjDxI/2vaxM X-Received: by 2002:a63:f212:: with SMTP id v18mr28167891pgh.231.1556107345058; Wed, 24 Apr 2019 05:02:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556107345; cv=none; d=google.com; s=arc-20160816; b=WoBeEZjaGoWsm5Bbdz/qG2nElQqvBY3UkPgjkio9zp1ScoTOsKip84hmw+Y8KTLHum hUzorVZe1VX869JNWR2OwnjRvM7gUEUETwdsRgbhRUDgB1lIa4z6qrVpr5keJE2gMagG QIUF/YICkzoJYVJz5FZs+f4zNP+cF9BXXL22yzBRolil5GnBbBOb2zoOHiljL7nv+dny grA02Wy5LLVeSoE5hREmcyY6HCroZLVFSfRPXQFf2++coLEse+93SYrOhrFhbpKTZZ8X cLe1h7OrmuJCjC+M02mCxWorOotvj7sKrFjV5T91ZdZWjehx4GbcvOuggMez2RMXSBTh VW9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=IEr/6V19VpqUzT9Cp1wgcEldD8IODKgeaNXZKr2MDsw=; b=h4P4ZCikfd47ZRdnqM3plv+aYvtO7uQJunGbrkJpxWXaWAq2mqpawGWfuBnCYwoAPl N7A/qyLm7r/pGXIllwnRFyQdorLteI1lWHetS5sX6VVGDWqqGp3WmTefSpVkHzfVn1CN Of0gocvGRozPg0qneIsXXr/L55bTO+PTBDCBuDVMVQn1hAm6ygcI0JPvqtThadM1cW1D JJ/3vXwtgsvrw9VJpd56+UGRUZAJKKnf2QqZ7pmcRUrNwoxGFxkfsMlBLc4zFjllA9bw 1LlnJ+jayzA7knyO/IaWHt/DICY+UyyspD7PejA3JxfQTf276AxPQ6E4M+h1yjFzYZ6a v5+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@vmware.com header.s=selector1 header.b=mkMVGDVR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s78si19086920pfa.103.2019.04.24.05.02.07; Wed, 24 Apr 2019 05:02:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@vmware.com header.s=selector1 header.b=mkMVGDVR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=vmware.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729422AbfDXMAk (ORCPT + 99 others); Wed, 24 Apr 2019 08:00:40 -0400 Received: from mail-eopbgr710074.outbound.protection.outlook.com ([40.107.71.74]:43387 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726691AbfDXMAi (ORCPT ); Wed, 24 Apr 2019 08:00:38 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vmware.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IEr/6V19VpqUzT9Cp1wgcEldD8IODKgeaNXZKr2MDsw=; b=mkMVGDVRkwK5/0m20vNUolz0KkBWA33amLBsb7NAM9gfcZ8i7MKKVshzErODoIl9KePsOqFXj0B0sHnjcQYw7JQuAUvFi+O/zQIKpmqBhn2bZTjXslldnkWGXEDAp93eZKCVrX0lu3wY5AWA0SG2M3f2olntMSNLJ6OrJGOuawY= Received: from MN2PR05MB6141.namprd05.prod.outlook.com (20.178.241.217) by MN2PR05MB6687.namprd05.prod.outlook.com (20.178.249.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.7; Wed, 24 Apr 2019 12:00:19 +0000 Received: from MN2PR05MB6141.namprd05.prod.outlook.com ([fe80::441b:ef64:e316:b294]) by MN2PR05MB6141.namprd05.prod.outlook.com ([fe80::441b:ef64:e316:b294%5]) with mapi id 15.20.1835.010; Wed, 24 Apr 2019 12:00:19 +0000 From: Thomas Hellstrom To: Linux-graphics-maintainer , "dri-devel@lists.freedesktop.org" CC: Pv-drivers , "linux-kernel@vger.kernel.org" , Thomas Hellstrom , Andrew Morton , Matthew Wilcox , Will Deacon , Peter Zijlstra , Rik van Riel , Minchan Kim , Michal Hocko , Huang Ying , Souptick Joarder , =?utf-8?B?SsOpcsO0bWUgR2xpc3Nl?= , "linux-mm@kvack.org" , Ralph Campbell Subject: [PATCH 3/9] mm: Add write-protect and clean utilities for address space ranges v2 Thread-Topic: [PATCH 3/9] mm: Add write-protect and clean utilities for address space ranges v2 Thread-Index: AQHU+pVJVDvhhZ6C/UaopXjxOqfjAA== Date: Wed, 24 Apr 2019 12:00:19 +0000 Message-ID: <20190424115918.3380-4-thellstrom@vmware.com> References: <20190424115918.3380-1-thellstrom@vmware.com> In-Reply-To: <20190424115918.3380-1-thellstrom@vmware.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR07CA0208.eurprd07.prod.outlook.com (2603:10a6:802:3f::32) To MN2PR05MB6141.namprd05.prod.outlook.com (2603:10b6:208:c7::25) authentication-results: spf=none (sender IP is ) smtp.mailfrom=thellstrom@vmware.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [155.4.205.35] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0fc9cd56-49e8-4291-d86f-08d6c8ac6bea x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);SRVR:MN2PR05MB6687; x-ms-traffictypediagnostic: MN2PR05MB6687: x-ld-processed: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0,ExtAddr x-microsoft-antispam-prvs: x-forefront-prvs: 00179089FD x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(376002)(136003)(346002)(396003)(366004)(189003)(199004)(8676002)(81156014)(64756008)(66946007)(66556008)(52116002)(6506007)(53936002)(66476007)(68736007)(102836004)(8936002)(6116002)(66446008)(7416002)(30864003)(6512007)(36756003)(186003)(81166006)(26005)(73956011)(7736002)(305945005)(316002)(66066001)(2501003)(66574012)(50226002)(97736004)(3846002)(86362001)(1076003)(110136005)(5660300002)(2616005)(14454004)(11346002)(25786009)(486006)(2906002)(76176011)(71200400001)(71190400001)(99286004)(476003)(386003)(256004)(4326008)(446003)(14444005)(6486002)(6436002)(54906003)(478600001);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR05MB6687;H:MN2PR05MB6141.namprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: vmware.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: qHcMliZ9ohQeGmEajnYCtgoKfXcsneelizAm1tgZW73hB5LB5o+VPxkldPqBjSqOSKJzw22ltWLa022DLrO74lP7webasXFL8o2hDFj65XkwVztQZGyc5Pvwf7UXe7xG4+SEQSZKpGDO6g2fi/pbad9a0U7uv3v9wD9C2riLUxLX1zkceAVsTFt+TnzdVPX1TYEFmb6uXvKghzEtf0k/RUb8h0HctYomTivfZBNXYjBwgXKPqAX2Bknm2IczQhR1Hw3BSMqi8b892GTUyf8EqHf42vXtF9XRbhjGs5o3+rV15xYXtavcgOyr6JnHbi7Bu5+ELqO+wGeGYm8ufMnrDhuoUjWpAphxAE0d59WR+Mg4IoFlh1+1nWQTtHYBTsKQHr49zlXU/T6PCQOQkFv/F0sut2riW60dvJ7SZUPVlak= Content-Type: text/plain; charset="utf-8" Content-ID: <3A5E02C95498424EB49F87261DA93F4F@namprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: vmware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fc9cd56-49e8-4291-d86f-08d6c8ac6bea X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Apr 2019 12:00:19.6531 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b39138ca-3cee-4b4a-a4d6-cd83d9dd62f0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR05MB6687 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org QWRkIHR3byB1dGlsaXRpZXMgdG8gYSkgd3JpdGUtcHJvdGVjdCBhbmQgYikgY2xlYW4gYWxsIHB0 ZXMgcG9pbnRpbmcgaW50bw0KYSByYW5nZSBvZiBhbiBhZGRyZXNzIHNwYWNlDQpUaGUgdXRpbGl0 aWVzIGFyZSBpbnRlbmRlZCB0byBhaWQgaW4gdHJhY2tpbmcgZGlydHkgcGFnZXMgKGVpdGhlcg0K ZHJpdmVyLWFsbG9jYXRlZCBzeXN0ZW0gbWVtb3J5IG9yIHBjaSBkZXZpY2UgbWVtb3J5KS4NClRo ZSB3cml0ZS1wcm90ZWN0IHV0aWxpdHkgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0 aA0KcGFnZV9ta3dyaXRlKCkgYW5kIHBmbl9ta3dyaXRlKCkgdG8gdHJpZ2dlciB3cml0ZSBwYWdl LWZhdWx0cyBvbiBwYWdlDQphY2Nlc3Nlcy4gVHlwaWNhbGx5IG9uZSB3b3VsZCB3YW50IHRvIHVz ZSB0aGlzIG9uIHNwYXJzZSBhY2Nlc3NlcyBpbnRvDQpsYXJnZSBtZW1vcnkgcmVnaW9ucy4gVGhl IGNsZWFuIHV0aWxpdHkgc2hvdWxkIGJlIHVzZWQgdG8gdXRpbGl6ZQ0KaGFyZHdhcmUgZGlydHlp bmcgZnVuY3Rpb25hbGl0eSBhbmQgYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHBhZ2UtZmF1bHRzLA0K dHlwaWNhbGx5IG9uIGxhcmdlIGFjY2Vzc2VzIGludG8gc21hbGwgbWVtb3J5IHJlZ2lvbnMuDQoN ClRoZSBhZGRlZCBmaWxlICJhc19kaXJ0eV9oZWxwZXJzLmMiIGlzIGluaXRpYWxseSBsaXN0ZWQg YXMgbWFpbnRhaW5lZCBieQ0KVk13YXJlIHVuZGVyIG91ciBEUk0gZHJpdmVyLiBJZiBzb21lYm9k eSB3b3VsZCBsaWtlIGl0IGVsc2V3aGVyZSwNCnRoYXQncyBvZiBjb3Vyc2Ugbm8gcHJvYmxlbS4N Cg0KTm90YWJsZSBjaGFuZ2VzIHNpbmNlIFJGQzoNCi0gQWRkZWQgY29tbWVudHMgdG8gaGVscCBh dm9pZCB0aGUgdXNhZ2Ugb2YgdGhlc2UgZnVuY3Rpb24gZm9yIFZNQXMNCiAgaXQncyBub3QgaW50 ZW5kZWQgZm9yLiBXZSBhbHNvIGRvIGFkdmlzb3J5IGNoZWNrcyBvbiB0aGUgdm1fZmxhZ3MgYW5k DQogIHdhcm4gb24gaWxsZWdhbCB1c2FnZS4NCi0gUGVyZm9ybSB0aGUgcHRlIG1vZGlmaWNhdGlv bnMgdGhlIHNhbWUgd2F5IHNvZnRkaXJ0eSBkb2VzLg0KLSBBZGQgbW11X25vdGlmaWVyIHJhbmdl IGludmFsaWRhdGlvbiBjYWxscy4NCi0gQWRkIGEgY29uZmlnIG9wdGlvbiBzbyB0aGF0IHRoaXMg Y29kZSBpcyBub3QgdW5jb25kaXRpb25hbGx5IGluY2x1ZGVkLg0KLSBUZWxsIHRoZSBtbXVfZ2F0 aGVyIGNvZGUgYWJvdXQgcGVuZGluZyB0bGIgZmx1c2hlcy4NCg0KQ2M6IEFuZHJldyBNb3J0b24g PGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+DQpDYzogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGlu ZnJhZGVhZC5vcmc+DQpDYzogV2lsbCBEZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+DQpDYzog UGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPg0KQ2M6IFJpayB2YW4gUmllbCA8 cmllbEBzdXJyaWVsLmNvbT4NCkNjOiBNaW5jaGFuIEtpbSA8bWluY2hhbkBrZXJuZWwub3JnPg0K Q2M6IE1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY29tPg0KQ2M6IEh1YW5nIFlpbmcgPHlpbmcu aHVhbmdAaW50ZWwuY29tPg0KQ2M6IFNvdXB0aWNrIEpvYXJkZXIgPGpyZHIubGludXhAZ21haWwu Y29tPg0KQ2M6ICJKw6lyw7RtZSBHbGlzc2UiIDxqZ2xpc3NlQHJlZGhhdC5jb20+DQpDYzogbGlu dXgtbW1Aa3ZhY2sub3JnDQpDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZw0KDQpTaWdu ZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0cm9tIDx0aGVsbHN0cm9tQHZtd2FyZS5jb20+DQpSZXZp ZXdlZC1ieTogUmFscGggQ2FtcGJlbGwgPHJjYW1wYmVsbEBudmlkaWEuY29tPiAjdjENCi0tLQ0K djI6IEZpeCBmb3JtYXR0aW5nIGFuZCB0eXBvcy4NCiAgICBDaGFuZ2UgZmlsZS1uYW1lIG9mIHRo ZSBhZGRlZCBmaWxlLCBhbmQgZG9uJ3QgY29tcGlsZSBpdCB1bmxlc3MNCiAgICBjb25maWd1cmVk IHRvIGRvIHNvLg0KLS0tDQogTUFJTlRBSU5FUlMgICAgICAgICAgIHwgICAxICsNCiBpbmNsdWRl L2xpbnV4L21tLmggICAgfCAgIDkgKy0NCiBtbS9LY29uZmlnICAgICAgICAgICAgfCAgIDMgKw0K IG1tL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArDQogbW0vYXNfZGlydHlfaGVscGVycy5jIHwg Mjk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KIDUgZmlsZXMg Y2hhbmdlZCwgMzEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCiBjcmVhdGUgbW9kZSAx MDA2NDQgbW0vYXNfZGlydHlfaGVscGVycy5jDQoNCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBi L01BSU5UQUlORVJTDQppbmRleCAzNWU2MzU3ZjlkMzAuLjAxNWUxZTc1OGJmNiAxMDA2NDQNCi0t LSBhL01BSU5UQUlORVJTDQorKysgYi9NQUlOVEFJTkVSUw0KQEAgLTQ5NzEsNiArNDk3MSw3IEBA IFQ6CWdpdCBnaXQ6Ly9wZW9wbGUuZnJlZWRlc2t0b3Aub3JnL350aG9tYXNoL2xpbnV4DQogUzoJ U3VwcG9ydGVkDQogRjoJZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC8NCiBGOglpbmNsdWRlL3VhcGkv ZHJtL3Ztd2dmeF9kcm0uaA0KK0Y6CW1tL2FzX2RpcnR5X2hlbHBlcnMuYw0KIA0KIERSTSBEUklW RVJTDQogTToJRGF2aWQgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPg0KZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaA0KaW5kZXggYjdkZDRkZGQ2ZWZi Li42MmYyNGRkMGJmYTAgMTAwNjQ0DQotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgNCisrKyBiL2lu Y2x1ZGUvbGludXgvbW0uaA0KQEAgLTI2NDIsNyArMjY0MiwxNCBAQCBzdHJ1Y3QgcGZuX3Jhbmdl X2FwcGx5IHsNCiB9Ow0KIGV4dGVybiBpbnQgYXBwbHlfdG9fcGZuX3JhbmdlKHN0cnVjdCBwZm5f cmFuZ2VfYXBwbHkgKmNsb3N1cmUsDQogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1 bnNpZ25lZCBsb25nIHNpemUpOw0KLQ0KK3Vuc2lnbmVkIGxvbmcgYXBwbHlfYXNfd3Jwcm90ZWN0 KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLA0KKwkJCQkgcGdvZmZfdCBmaXJzdF9pbmRl eCwgcGdvZmZfdCBucik7DQordW5zaWduZWQgbG9uZyBhcHBseV9hc19jbGVhbihzdHJ1Y3QgYWRk cmVzc19zcGFjZSAqbWFwcGluZywNCisJCQkgICAgIHBnb2ZmX3QgZmlyc3RfaW5kZXgsIHBnb2Zm X3QgbnIsDQorCQkJICAgICBwZ29mZl90IGJpdG1hcF9wZ29mZiwNCisJCQkgICAgIHVuc2lnbmVk IGxvbmcgKmJpdG1hcCwNCisJCQkgICAgIHBnb2ZmX3QgKnN0YXJ0LA0KKwkJCSAgICAgcGdvZmZf dCAqZW5kKTsNCiAjaWZkZWYgQ09ORklHX1BBR0VfUE9JU09OSU5HDQogZXh0ZXJuIGJvb2wgcGFn ZV9wb2lzb25pbmdfZW5hYmxlZCh2b2lkKTsNCiBleHRlcm4gdm9pZCBrZXJuZWxfcG9pc29uX3Bh Z2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpOw0KZGlmZiAt LWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnDQppbmRleCAyNWM3MWViOGE3ZGIuLjgwZTQx Y2RiYjRhZSAxMDA2NDQNCi0tLSBhL21tL0tjb25maWcNCisrKyBiL21tL0tjb25maWcNCkBAIC03 NTgsNCArNzU4LDcgQEAgY29uZmlnIEdVUF9CRU5DSE1BUksNCiBjb25maWcgQVJDSF9IQVNfUFRF X1NQRUNJQUwNCiAJYm9vbA0KIA0KK2NvbmZpZyBBU19ESVJUWV9IRUxQRVJTDQorICAgICAgICBi b29sDQorDQogZW5kbWVudQ0KZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUN CmluZGV4IGQyMTBjYzlkNmY4MC4uNGJmMzk2YmEzYTAwIDEwMDY0NA0KLS0tIGEvbW0vTWFrZWZp bGUNCisrKyBiL21tL01ha2VmaWxlDQpAQCAtOTksMyArOTksNCBAQCBvYmotJChDT05GSUdfSEFS REVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm8NCiBvYmotJChDT05GSUdfUEVSQ1BVX1NUQVRT KSArPSBwZXJjcHUtc3RhdHMubw0KIG9iai0kKENPTkZJR19ITU0pICs9IGhtbS5vDQogb2JqLSQo Q09ORklHX01FTUZEX0NSRUFURSkgKz0gbWVtZmQubw0KK29iai0kKENPTkZJR19BU19ESVJUWV9I RUxQRVJTKSArPSBhc19kaXJ0eV9oZWxwZXJzLm8NCmRpZmYgLS1naXQgYS9tbS9hc19kaXJ0eV9o ZWxwZXJzLmMgYi9tbS9hc19kaXJ0eV9oZWxwZXJzLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwMDAwMDAuLjI2OTg0ODQxZDE4Zg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbW0v YXNfZGlydHlfaGVscGVycy5jDQpAQCAtMCwwICsxLDI5NyBAQA0KKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wDQorI2luY2x1ZGUgPGxpbnV4L21tLmg+DQorI2luY2x1ZGUgPGxp bnV4L21tX3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4NCisjaW5jbHVkZSA8 bGludXgvYml0b3BzLmg+DQorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPg0KKyNpbmNs dWRlIDxhc20vY2FjaGVmbHVzaC5oPg0KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4NCisNCisv KioNCisgKiBzdHJ1Y3QgYXBwbHlfYXMgLSBDbG9zdXJlIHN0cnVjdHVyZSBmb3IgYXBwbHlfYXNf cmFuZ2UNCisgKiBAYmFzZTogc3RydWN0IHBmbl9yYW5nZV9hcHBseSB3ZSBkZXJpdmUgZnJvbQ0K KyAqIEBzdGFydDogQWRkcmVzcyBvZiBmaXJzdCBtb2RpZmllZCBwdGUNCisgKiBAZW5kOiBBZGRy ZXNzIG9mIGxhc3QgbW9kaWZpZWQgcHRlICsgMQ0KKyAqIEB0b3RhbDogVG90YWwgbnVtYmVyIG9m IG1vZGlmaWVkIHB0ZXMNCisgKiBAdm1hOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3Qgd2UncmUgY3VycmVudGx5IG9wZXJhdGluZyBvbg0KKyAqLw0KK3N0cnVjdCBhcHBseV9h cyB7DQorCXN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkgYmFzZTsNCisJdW5zaWduZWQgbG9uZyBzdGFy dDsNCisJdW5zaWduZWQgbG9uZyBlbmQ7DQorCXVuc2lnbmVkIGxvbmcgdG90YWw7DQorCWNvbnN0 IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOw0KK307DQorDQorLyoqDQorICogYXBwbHlfcHRf d3Jwcm90ZWN0IC0gTGVhZiBwdGUgY2FsbGJhY2sgdG8gd3JpdGUtcHJvdGVjdCBhIHB0ZQ0KKyAq IEBwdGU6IFBvaW50ZXIgdG8gdGhlIHB0ZQ0KKyAqIEB0b2tlbjogUGFnZSB0YWJsZSB0b2tlbiwg c2VlIGFwcGx5X3RvX3Bmbl9yYW5nZSgpDQorICogQGFkZHI6IFRoZSB2aXJ0dWFsIHBhZ2UgYWRk cmVzcw0KKyAqIEBjbG9zdXJlOiBQb2ludGVyIHRvIGEgc3RydWN0IHBmbl9yYW5nZV9hcHBseSBl bWJlZGRlZCBpbiBhDQorICogc3RydWN0IGFwcGx5X2FzDQorICoNCisgKiBUaGUgZnVuY3Rpb24g d3JpdGUtcHJvdGVjdHMgYSBwdGUgYW5kIHJlY29yZHMgdGhlIHJhbmdlIGluDQorICogdmlydHVh bCBhZGRyZXNzIHNwYWNlIG9mIHRvdWNoZWQgcHRlcyBmb3IgZWZmaWNpZW50IHJhbmdlIFRMQiBm bHVzaGVzLg0KKyAqDQorICogUmV0dXJuOiBBbHdheXMgemVyby4NCisgKi8NCitzdGF0aWMgaW50 IGFwcGx5X3B0X3dycHJvdGVjdChwdGVfdCAqcHRlLCBwZ3RhYmxlX3QgdG9rZW4sDQorCQkJICAg ICAgdW5zaWduZWQgbG9uZyBhZGRyLA0KKwkJCSAgICAgIHN0cnVjdCBwZm5fcmFuZ2VfYXBwbHkg KmNsb3N1cmUpDQorew0KKwlzdHJ1Y3QgYXBwbHlfYXMgKmFhcyA9IGNvbnRhaW5lcl9vZihjbG9z dXJlLCB0eXBlb2YoKmFhcyksIGJhc2UpOw0KKwlwdGVfdCBwdGVudCA9ICpwdGU7DQorDQorCWlm IChwdGVfd3JpdGUocHRlbnQpKSB7DQorCQlwdGVudCA9IHB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQo Y2xvc3VyZS0+bW0sIGFkZHIsIHB0ZSk7DQorCQlwdGVudCA9IHB0ZV93cnByb3RlY3QocHRlbnQp Ow0KKwkJcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoY2xvc3VyZS0+bW0sIGFkZHIsIHB0ZSwgcHRl bnQpOw0KKwkJYWFzLT50b3RhbCsrOw0KKwkJYWFzLT5zdGFydCA9IG1pbihhYXMtPnN0YXJ0LCBh ZGRyKTsNCisJCWFhcy0+ZW5kID0gbWF4KGFhcy0+ZW5kLCBhZGRyICsgUEFHRV9TSVpFKTsNCisJ fQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogc3RydWN0IGFwcGx5X2FzX2NsZWFu IC0gQ2xvc3VyZSBzdHJ1Y3R1cmUgZm9yIGFwcGx5X2FzX2NsZWFuDQorICogQGJhc2U6IHN0cnVj dCBhcHBseV9hcyB3ZSBkZXJpdmUgZnJvbQ0KKyAqIEBiaXRtYXBfcGdvZmY6IEFkZHJlc3Nfc3Bh Y2UgUGFnZSBvZmZzZXQgb2YgdGhlIGZpcnN0IGJpdCBpbiBAYml0bWFwDQorICogQGJpdG1hcDog Qml0bWFwIHdpdGggb25lIGJpdCBmb3IgZWFjaCBwYWdlIG9mZnNldCBpbiB0aGUgYWRkcmVzc19z cGFjZSByYW5nZQ0KKyAqIGNvdmVyZWQuDQorICogQHN0YXJ0OiBBZGRyZXNzX3NwYWNlIHBhZ2Ug b2Zmc2V0IG9mIGZpcnN0IG1vZGlmaWVkIHB0ZSByZWxhdGl2ZQ0KKyAqIHRvIEBiaXRtYXBfcGdv ZmYNCisgKiBAZW5kOiBBZGRyZXNzX3NwYWNlIHBhZ2Ugb2Zmc2V0IG9mIGxhc3QgbW9kaWZpZWQg cHRlIHJlbGF0aXZlDQorICogdG8gQGJpdG1hcF9wZ29mZg0KKyAqLw0KK3N0cnVjdCBhcHBseV9h c19jbGVhbiB7DQorCXN0cnVjdCBhcHBseV9hcyBiYXNlOw0KKwlwZ29mZl90IGJpdG1hcF9wZ29m ZjsNCisJdW5zaWduZWQgbG9uZyAqYml0bWFwOw0KKwlwZ29mZl90IHN0YXJ0Ow0KKwlwZ29mZl90 IGVuZDsNCit9Ow0KKw0KKy8qKg0KKyAqIGFwcGx5X3B0X2NsZWFuIC0gTGVhZiBwdGUgY2FsbGJh Y2sgdG8gY2xlYW4gYSBwdGUNCisgKiBAcHRlOiBQb2ludGVyIHRvIHRoZSBwdGUNCisgKiBAdG9r ZW46IFBhZ2UgdGFibGUgdG9rZW4sIHNlZSBhcHBseV90b19wZm5fcmFuZ2UoKQ0KKyAqIEBhZGRy OiBUaGUgdmlydHVhbCBwYWdlIGFkZHJlc3MNCisgKiBAY2xvc3VyZTogUG9pbnRlciB0byBhIHN0 cnVjdCBwZm5fcmFuZ2VfYXBwbHkgZW1iZWRkZWQgaW4gYQ0KKyAqIHN0cnVjdCBhcHBseV9hc19j bGVhbg0KKyAqDQorICogVGhlIGZ1bmN0aW9uIGNsZWFucyBhIHB0ZSBhbmQgcmVjb3JkcyB0aGUg cmFuZ2UgaW4NCisgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdG91Y2hlZCBwdGVzIGZvciBl ZmZpY2llbnQgVExCIGZsdXNoZXMuDQorICogSXQgYWxzbyByZWNvcmRzIGRpcnR5IHB0ZXMgaW4g YSBiaXRtYXAgcmVwcmVzZW50aW5nIHBhZ2Ugb2Zmc2V0cw0KKyAqIGluIHRoZSBhZGRyZXNzX3Nw YWNlLCBhcyB3ZWxsIGFzIHRoZSBmaXJzdCBhbmQgbGFzdCBvZiB0aGUgYml0cw0KKyAqIHRvdWNo ZWQuDQorICoNCisgKiBSZXR1cm46IEFsd2F5cyB6ZXJvLg0KKyAqLw0KK3N0YXRpYyBpbnQgYXBw bHlfcHRfY2xlYW4ocHRlX3QgKnB0ZSwgcGd0YWJsZV90IHRva2VuLA0KKwkJCSAgdW5zaWduZWQg bG9uZyBhZGRyLA0KKwkJCSAgc3RydWN0IHBmbl9yYW5nZV9hcHBseSAqY2xvc3VyZSkNCit7DQor CXN0cnVjdCBhcHBseV9hcyAqYWFzID0gY29udGFpbmVyX29mKGNsb3N1cmUsIHR5cGVvZigqYWFz KSwgYmFzZSk7DQorCXN0cnVjdCBhcHBseV9hc19jbGVhbiAqY2xlYW4gPSBjb250YWluZXJfb2Yo YWFzLCB0eXBlb2YoKmNsZWFuKSwgYmFzZSk7DQorCXB0ZV90IHB0ZW50ID0gKnB0ZTsNCisNCisJ aWYgKHB0ZV9kaXJ0eShwdGVudCkpIHsNCisJCXBnb2ZmX3QgcGdvZmYgPSAoKGFkZHIgLSBhYXMt PnZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpICsNCisJCQlhYXMtPnZtYS0+dm1fcGdvZmYg LSBjbGVhbi0+Yml0bWFwX3Bnb2ZmOw0KKw0KKwkJcHRlbnQgPSBwdGVwX21vZGlmeV9wcm90X3N0 YXJ0KGNsb3N1cmUtPm1tLCBhZGRyLCBwdGUpOw0KKwkJcHRlbnQgPSBwdGVfbWtjbGVhbihwdGVu dCk7DQorCQlwdGVwX21vZGlmeV9wcm90X2NvbW1pdChjbG9zdXJlLT5tbSwgYWRkciwgcHRlLCBw dGVudCk7DQorDQorCQlhYXMtPnRvdGFsKys7DQorCQlhYXMtPnN0YXJ0ID0gbWluKGFhcy0+c3Rh cnQsIGFkZHIpOw0KKwkJYWFzLT5lbmQgPSBtYXgoYWFzLT5lbmQsIGFkZHIgKyBQQUdFX1NJWkUp Ow0KKw0KKwkJX19zZXRfYml0KHBnb2ZmLCBjbGVhbi0+Yml0bWFwKTsNCisJCWNsZWFuLT5zdGFy dCA9IG1pbihjbGVhbi0+c3RhcnQsIHBnb2ZmKTsNCisJCWNsZWFuLT5lbmQgPSBtYXgoY2xlYW4t PmVuZCwgcGdvZmYgKyAxKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICog YXBwbHlfYXNfcmFuZ2UgLSBBcHBseSBhIHB0ZSBjYWxsYmFjayB0byBhbGwgUFRFcyBwb2ludGlu ZyBpbnRvIGEgcmFuZ2UNCisgKiBvZiBhbiBhZGRyZXNzX3NwYWNlLg0KKyAqIEBtYXBwaW5nOiBQ b2ludGVyIHRvIHRoZSBzdHJ1Y3QgYWRkcmVzc19zcGFjZQ0KKyAqIEBhYXM6IENsb3N1cmUgc3Ry dWN0dXJlDQorICogQGZpcnN0X2luZGV4OiBGaXJzdCBwYWdlIG9mZnNldCBpbiB0aGUgYWRkcmVz c19zcGFjZQ0KKyAqIEBucjogTnVtYmVyIG9mIGluY3JlbWVudGFsIHBhZ2Ugb2Zmc2V0cyB0byBj b3Zlcg0KKyAqDQorICogUmV0dXJuOiBOdW1iZXIgb2YgcHRlcyB0b3VjaGVkLiBOb3RlIHRoYXQg dGhpcyBudW1iZXIgbWlnaHQgYmUgbGFyZ2VyDQorICogdGhhbiBAbnIgaWYgdGhlcmUgYXJlIG92 ZXJsYXBwaW5nIHZtYXMNCisgKi8NCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHBseV9hc19yYW5n ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywNCisJCQkJICAgIHN0cnVjdCBhcHBseV9h cyAqYWFzLA0KKwkJCQkgICAgcGdvZmZfdCBmaXJzdF9pbmRleCwgcGdvZmZfdCBucikNCit7DQor CXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOw0KKwlwZ29mZl90IHZiYSwgdmVhLCBjYmEsIGNl YTsNCisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyLCBlbmRfYWRkcjsNCisJc3RydWN0IG1tdV9u b3RpZmllcl9yYW5nZSByYW5nZTsNCisNCisJaV9tbWFwX2xvY2tfcmVhZChtYXBwaW5nKTsNCisJ dm1hX2ludGVydmFsX3RyZWVfZm9yZWFjaCh2bWEsICZtYXBwaW5nLT5pX21tYXAsIGZpcnN0X2lu ZGV4LA0KKwkJCQkgIGZpcnN0X2luZGV4ICsgbnIgLSAxKSB7DQorCQl1bnNpZ25lZCBsb25nIHZt X2ZsYWdzID0gUkVBRF9PTkNFKHZtYS0+dm1fZmxhZ3MpOw0KKw0KKwkJLyoNCisJCSAqIFdlIGNh biBvbmx5IGRvIGFkdmlzb3J5IGZsYWcgdGVzdHMgYmVsb3csIHNpbmNlIHdlIGNhbid0DQorCQkg KiByZXF1aXJlIHRoZSB2bSdzIG1tYXBfc2VtIHRvIGJlIGhlbGQgdG8gcHJvdGVjdCB0aGUgZmxh Z3MuDQorCQkgKiBUaGVyZWZvcmUsIGNhbGxlcnMgdGhhdCBzdHJpY3RseSBkZXBlbmQgb24gc3Bl Y2lmaWMgbW1hcA0KKwkJICogZmxhZ3MgdG8gcmVtYWluIGNvbnN0YW50IHRocm91Z2hvdXQgdGhl IG9wZXJhdGlvbiBtdXN0DQorCQkgKiBlaXRoZXIgZW5zdXJlIHRob3NlIGZsYWdzIGFyZSBpbW11 dGFibGUgZm9yIGFsbCByZWxldmFudA0KKwkJICogdm1hcyBvciBjYW4ndCB1c2UgdGhpcyBmdW5j dGlvbi4gRml4aW5nIHRoaXMgcHJvcGVybHkgd291bGQNCisJCSAqIHJlcXVpcmUgdGhlIHZtYTo6 dm1fZmxhZ3MgdG8gYmUgcHJvdGVjdGVkIGJ5IGEgc2VwYXJhdGUNCisJCSAqIGxvY2sgdGFrZW4g YWZ0ZXIgdGhlIGlfbW1hcF9sb2NrDQorCQkgKi8NCisNCisJCS8qIFNraXAgbm9uLWFwcGxpY2Fi bGUgVk1BcyAqLw0KKwkJaWYgKCh2bV9mbGFncyAmIChWTV9TSEFSRUQgfCBWTV9XUklURSkpICE9 DQorCQkgICAgKFZNX1NIQVJFRCB8IFZNX1dSSVRFKSkNCisJCQljb250aW51ZTsNCisNCisJCS8q IFdhcm4gb24gYW5kIHNraXAgVk1BcyB3aG9zZSBmbGFncyBpbmRpY2F0ZSBpbGxlZ2FsIHVzYWdl ICovDQorCQlpZiAoV0FSTl9PTigodm1fZmxhZ3MgJiAoVk1fSFVHRVRMQiB8IFZNX0lPKSkgIT0g Vk1fSU8pKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJLyogQ2xpcCB0byB0aGUgdm1hICovDQorCQl2 YmEgPSB2bWEtPnZtX3Bnb2ZmOw0KKwkJdmVhID0gdmJhICsgdm1hX3BhZ2VzKHZtYSk7DQorCQlj YmEgPSBmaXJzdF9pbmRleDsNCisJCWNiYSA9IG1heChjYmEsIHZiYSk7DQorCQljZWEgPSBmaXJz dF9pbmRleCArIG5yOw0KKwkJY2VhID0gbWluKGNlYSwgdmVhKTsNCisNCisJCS8qIFRyYW5zbGF0 ZSB0byB2aXJ0dWFsIGFkZHJlc3MgKi8NCisJCXN0YXJ0X2FkZHIgPSAoKGNiYSAtIHZiYSkgPDwg UEFHRV9TSElGVCkgKyB2bWEtPnZtX3N0YXJ0Ow0KKwkJZW5kX2FkZHIgPSAoKGNlYSAtIHZiYSkg PDwgUEFHRV9TSElGVCkgKyB2bWEtPnZtX3N0YXJ0Ow0KKwkJaWYgKHN0YXJ0X2FkZHIgPj0gZW5k X2FkZHIpDQorCQkJY29udGludWU7DQorDQorCQlhYXMtPmJhc2UubW0gPSB2bWEtPnZtX21tOw0K KwkJYWFzLT52bWEgPSB2bWE7DQorCQlhYXMtPnN0YXJ0ID0gZW5kX2FkZHI7DQorCQlhYXMtPmVu ZCA9IHN0YXJ0X2FkZHI7DQorDQorCQltbXVfbm90aWZpZXJfcmFuZ2VfaW5pdCgmcmFuZ2UsIHZt YS0+dm1fbW0sDQorCQkJCQlzdGFydF9hZGRyLCBlbmRfYWRkcik7DQorCQltbXVfbm90aWZpZXJf aW52YWxpZGF0ZV9yYW5nZV9zdGFydCgmcmFuZ2UpOw0KKw0KKwkJLyogTmVlZGVkIHdoZW4gd2Ug b25seSBjaGFuZ2UgcHJvdGVjdGlvbj8gKi8NCisJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3Rh cnRfYWRkciwgZW5kX2FkZHIpOw0KKw0KKwkJLyoNCisJCSAqIFdlJ3JlIG5vdCB1c2luZyB0bGJf Z2F0aGVyX21tdSgpIHNpbmNlIHR5cGljYWxseQ0KKwkJICogb25seSBhIHNtYWxsIHN1YnJhbmdl IG9mIFBURXMgYXJlIGFmZmVjdGVkLg0KKwkJICovDQorCQlpbmNfdGxiX2ZsdXNoX3BlbmRpbmco dm1hLT52bV9tbSk7DQorDQorCQkvKiBTaG91bGQgbm90IGVycm9yIHNpbmNlIGFhcy0+YmFzZS5h bGxvYyA9PSAwICovDQorCQlXQVJOX09OKGFwcGx5X3RvX3Bmbl9yYW5nZSgmYWFzLT5iYXNlLCBz dGFydF9hZGRyLA0KKwkJCQkJICAgZW5kX2FkZHIgLSBzdGFydF9hZGRyKSk7DQorCQlpZiAoYWFz LT5lbmQgPiBhYXMtPnN0YXJ0KQ0KKwkJCWZsdXNoX3RsYl9yYW5nZSh2bWEsIGFhcy0+c3RhcnQs IGFhcy0+ZW5kKTsNCisNCisJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmcmFu Z2UpOw0KKwkJZGVjX3RsYl9mbHVzaF9wZW5kaW5nKHZtYS0+dm1fbW0pOw0KKwl9DQorCWlfbW1h cF91bmxvY2tfcmVhZChtYXBwaW5nKTsNCisNCisJcmV0dXJuIGFhcy0+dG90YWw7DQorfQ0KKw0K Ky8qKg0KKyAqIGFwcGx5X2FzX3dycHJvdGVjdCAtIFdyaXRlLXByb3RlY3QgYWxsIHB0ZXMgaW4g YW4gYWRkcmVzc19zcGFjZSByYW5nZQ0KKyAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzc19zcGFjZSB3 ZSB3YW50IHRvIHdyaXRlIHByb3RlY3QNCisgKiBAZmlyc3RfaW5kZXg6IFRoZSBmaXJzdCBwYWdl IG9mZnNldCBpbiB0aGUgcmFuZ2UNCisgKiBAbnI6IE51bWJlciBvZiBpbmNyZW1lbnRhbCBwYWdl IG9mZnNldHMgdG8gY292ZXINCisgKg0KKyAqIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gc2hvdWxk IG9ubHkgYmUgdXNlZCBmb3IgYWRkcmVzcyBzcGFjZXMgdGhhdA0KKyAqIGNvbXBsZXRlbHkgb3du IHRoZSBwYWdlcyAvIG1lbW9yeSB0aGUgcGFnZSB0YWJsZSBwb2ludHMgdG8uIFR5cGljYWxseSBh DQorICogZGV2aWNlIGZpbGUuDQorICoNCisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcHRlcyBh Y3R1YWxseSB3cml0ZS1wcm90ZWN0ZWQuIE5vdGUgdGhhdA0KKyAqIGFscmVhZHkgd3JpdGUtcHJv dGVjdGVkIHB0ZXMgYXJlIG5vdCBjb3VudGVkLg0KKyAqLw0KK3Vuc2lnbmVkIGxvbmcgYXBwbHlf YXNfd3Jwcm90ZWN0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLA0KKwkJCQkgcGdvZmZf dCBmaXJzdF9pbmRleCwgcGdvZmZfdCBucikNCit7DQorCXN0cnVjdCBhcHBseV9hcyBhYXMgPSB7 DQorCQkuYmFzZSA9IHsNCisJCQkuYWxsb2MgPSAwLA0KKwkJCS5wdGVmbiA9IGFwcGx5X3B0X3dy cHJvdGVjdCwNCisJCX0sDQorCQkudG90YWwgPSAwLA0KKwl9Ow0KKw0KKwlyZXR1cm4gYXBwbHlf YXNfcmFuZ2UobWFwcGluZywgJmFhcywgZmlyc3RfaW5kZXgsIG5yKTsNCit9DQorRVhQT1JUX1NZ TUJPTChhcHBseV9hc193cnByb3RlY3QpOw0KKw0KKy8qKg0KKyAqIGFwcGx5X2FzX2NsZWFuIC0g Q2xlYW4gYWxsIHB0ZXMgaW4gYW4gYWRkcmVzc19zcGFjZSByYW5nZQ0KKyAqIEBtYXBwaW5nOiBU aGUgYWRkcmVzc19zcGFjZSB3ZSB3YW50IHRvIGNsZWFuDQorICogQGZpcnN0X2luZGV4OiBUaGUg Zmlyc3QgcGFnZSBvZmZzZXQgaW4gdGhlIHJhbmdlDQorICogQG5yOiBOdW1iZXIgb2YgaW5jcmVt ZW50YWwgcGFnZSBvZmZzZXRzIHRvIGNvdmVyDQorICogQGJpdG1hcF9wZ29mZjogVGhlIHBhZ2Ug b2Zmc2V0IG9mIHRoZSBmaXJzdCBiaXQgaW4gQGJpdG1hcA0KKyAqIEBiaXRtYXA6IFBvaW50ZXIg dG8gYSBiaXRtYXAgb2YgYXQgbGVhc3QgQG5yIGJpdHMuIFRoZSBiaXRtYXAgbmVlZHMgdG8NCisg KiBjb3ZlciB0aGUgd2hvbGUgcmFuZ2UgQGZpcnN0X2luZGV4Li5AZmlyc3RfaW5kZXggKyBAbnIu DQorICogQHN0YXJ0OiBQb2ludGVyIHRvIG51bWJlciBvZiB0aGUgZmlyc3Qgc2V0IGJpdCBpbiBA Yml0bWFwLg0KKyAqIGlzIG1vZGlmaWVkIGFzIG5ldyBiaXRzIGFyZSBzZXQgYnkgdGhlIGZ1bmN0 aW9uLg0KKyAqIEBlbmQ6IFBvaW50ZXIgdG8gdGhlIG51bWJlciBvZiB0aGUgbGFzdCBzZXQgYml0 IGluIEBiaXRtYXAuDQorICogbm9uZSBzZXQuIFRoZSB2YWx1ZSBpcyBtb2RpZmllZCBhcyBuZXcg Yml0cyBhcmUgc2V0IGJ5IHRoZSBmdW5jdGlvbi4NCisgKg0KKyAqIE5vdGU6IFdoZW4gdGhpcyBm dW5jdGlvbiByZXR1cm5zIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgQ1BVIGhhcw0KKyAq IG5vdCBhbHJlYWR5IGRpcnRpZWQgbmV3IHB0ZXMuIEhvd2V2ZXIgaXQgd2lsbCBub3QgY2xlYW4g YW55IHB0ZXMgbm90DQorICogcmVwb3J0ZWQgaW4gdGhlIGJpdG1hcC4NCisgKg0KKyAqIElmIGEg Y2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSBhbGwgZGlydHkgcHRlcyBhcmUgcGlja2VkIHVwIGFu ZCBub25lDQorICogYWRkaXRpb25hbCBhcmUgYWRkZWQsIGl0IGZpcnN0IG5lZWRzIHRvIHdyaXRl LXByb3RlY3QgdGhlIGFkZHJlc3Mtc3BhY2UNCisgKiByYW5nZSBhbmQgbWFrZSBzdXJlIG5ldyB3 cml0ZXJzIGFyZSBibG9ja2VkIGluIHBhZ2VfbWt3cml0ZSgpIG9yDQorICogcGZuX21rd3JpdGUo KS4gQW5kIHRoZW4gYWZ0ZXIgYSBUTEIgZmx1c2ggZm9sbG93aW5nIHRoZSB3cml0ZS1wcm90ZWN0 aW9uDQorICogcGljayB1cCBhbGwgZGlydHkgYml0cy4NCisgKg0KKyAqIFdBUk5JTkc6IFRoaXMg ZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgYWRkcmVzcyBzcGFjZXMgdGhhdA0KKyAq IGNvbXBsZXRlbHkgb3duIHRoZSBwYWdlcyAvIG1lbW9yeSB0aGUgcGFnZSB0YWJsZSBwb2ludHMg dG8uIFR5cGljYWxseSBhDQorICogZGV2aWNlIGZpbGUuDQorICoNCisgKiBSZXR1cm46IFRoZSBu dW1iZXIgb2YgZGlydHkgcHRlcyBhY3R1YWxseSBjbGVhbmVkLg0KKyAqLw0KK3Vuc2lnbmVkIGxv bmcgYXBwbHlfYXNfY2xlYW4oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsDQorCQkJICAg ICBwZ29mZl90IGZpcnN0X2luZGV4LCBwZ29mZl90IG5yLA0KKwkJCSAgICAgcGdvZmZfdCBiaXRt YXBfcGdvZmYsDQorCQkJICAgICB1bnNpZ25lZCBsb25nICpiaXRtYXAsDQorCQkJICAgICBwZ29m Zl90ICpzdGFydCwNCisJCQkgICAgIHBnb2ZmX3QgKmVuZCkNCit7DQorCWJvb2wgbm9uZV9zZXQg PSAoKnN0YXJ0ID49ICplbmQpOw0KKwlzdHJ1Y3QgYXBwbHlfYXNfY2xlYW4gY2xlYW4gPSB7DQor CQkuYmFzZSA9IHsNCisJCQkuYmFzZSA9IHsNCisJCQkJLmFsbG9jID0gMCwNCisJCQkJLnB0ZWZu ID0gYXBwbHlfcHRfY2xlYW4sDQorCQkJfSwNCisJCQkudG90YWwgPSAwLA0KKwkJfSwNCisJCS5i aXRtYXBfcGdvZmYgPSBiaXRtYXBfcGdvZmYsDQorCQkuYml0bWFwID0gYml0bWFwLA0KKwkJLnN0 YXJ0ID0gbm9uZV9zZXQgPyBuciA6ICpzdGFydCwNCisJCS5lbmQgPSBub25lX3NldCA/IDAgOiAq ZW5kLA0KKwl9Ow0KKwl1bnNpZ25lZCBsb25nIHJldCA9IGFwcGx5X2FzX3JhbmdlKG1hcHBpbmcs ICZjbGVhbi5iYXNlLCBmaXJzdF9pbmRleCwNCisJCQkJCSAgIG5yKTsNCisNCisJKnN0YXJ0ID0g Y2xlYW4uc3RhcnQ7DQorCSplbmQgPSBjbGVhbi5lbmQ7DQorCXJldHVybiByZXQ7DQorfQ0KK0VY UE9SVF9TWU1CT0woYXBwbHlfYXNfY2xlYW4pOw0KLS0gDQoyLjIwLjENCg0K