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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 464FBF99C73 for ; Sat, 18 Apr 2026 09:08:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ABF726B01A8; Sat, 18 Apr 2026 05:08:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A97826B01AA; Sat, 18 Apr 2026 05:08:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9AE0F6B01AB; Sat, 18 Apr 2026 05:08:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 88E976B01A8 for ; Sat, 18 Apr 2026 05:08:48 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 3517AE4784 for ; Sat, 18 Apr 2026 09:08:48 +0000 (UTC) X-FDA: 84671101536.19.8A99942 Received: from mta21.hihonor.com (mta21.hihonor.com [81.70.160.142]) by imf01.hostedemail.com (Postfix) with ESMTP id F070940008 for ; Sat, 18 Apr 2026 09:08:44 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=honor.com; spf=pass (imf01.hostedemail.com: domain of wangzicheng@honor.com designates 81.70.160.142 as permitted sender) smtp.mailfrom=wangzicheng@honor.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1776503326; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NIMTWNtJu8NeCn1PYh8g6WSrtgNwctYYHjeSpwBaBpo=; b=R69pyqI/CIeGgAvne/ZwLVtYUsctHHyJwK9KtMMMgFFLzos/dLtjOVTws1k09e+N7EM3Sn RIrfjBU5skRoQj8YuMkFfRI+tss8vvsm6ZA6jhHTZevh0KicqXQkiBKV5DWobux+sN6JdK NkmeN1EvoCRjmLjz8gxBlPDJaliOoEc= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=honor.com; spf=pass (imf01.hostedemail.com: domain of wangzicheng@honor.com designates 81.70.160.142 as permitted sender) smtp.mailfrom=wangzicheng@honor.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1776503326; a=rsa-sha256; cv=none; b=6TfuOvE8NtV6GqFhHRt0A0q7fJVY72NXBxOXr/lej12ivw7tVQw68TJJvC/P68LIHyRSwt 8z+P/iOIESpvu1ksZvHjehtsJ16YtAiZy/UPTn5cxfe2RH3usPwQAlBKqIkjsTAIIa2A67 2R92UEZA+cPWnUtXf3/4DGm39YSmLU4= Received: from w012.hihonor.com (unknown [10.68.27.189]) by mta21.hihonor.com (SkyGuard) with ESMTPS id 4fyQr25JxgzYm6j3; Sat, 18 Apr 2026 17:07:30 +0800 (CST) Received: from TA009.hihonor.com (10.77.195.76) by w012.hihonor.com (10.68.27.189) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27; Sat, 18 Apr 2026 17:08:39 +0800 Received: from TA012.hihonor.com (10.77.228.68) by TA009.hihonor.com (10.77.195.76) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Sat, 18 Apr 2026 17:08:39 +0800 Received: from TA012.hihonor.com ([fe80::9e31:9fdb:69fb:928c]) by TA012.hihonor.com ([fe80::9e31:9fdb:69fb:928c%8]) with mapi id 15.02.2562.017; Sat, 18 Apr 2026 17:08:19 +0800 From: wangzicheng To: Kairui Song CC: wangxinyu19 , "devnull+kasong.tencent.com@kernel.org" , "akpm@linux-foundation.org" , "axelrasmussen@google.com" , "baohua@kernel.org" , "baolin.wang@linux.alibaba.com" , "chenridong@huaweicloud.com" , "chrisl@kernel.org" , "david@kernel.org" , "hannes@cmpxchg.org" , "kaleshsingh@google.com" , "laoar.shao@gmail.com" , "lenohou@gmail.com" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , "ljs@kernel.org" , "mhocko@kernel.org" , "qi.zheng@linux.dev" , "shakeel.butt@linux.dev" , "stevensd@google.com" , "surenb@google.com" , "vernon2gm@gmail.com" , "weixugc@google.com" , "yuanchu@google.com" , "yuzhao@google.com" , "zhengqi.arch@bytedance.com" , wangzhen , wangtao Subject: RE: [PATCH v5 00/14] mm/mglru: improve reclaim loop and dirty folio handling Thread-Topic: [PATCH v5 00/14] mm/mglru: improve reclaim loop and dirty folio handling Thread-Index: AQHcypwxcxsnTRgug0iAuixHwWXWW7XiDtKAgAJZVUD//5PkAIAAjIBA Date: Sat, 18 Apr 2026 09:08:19 +0000 Message-ID: <830980eb128a49c6adc55571b7015fab@honor.com> References: <20260413-mglru-reclaim-v5-0-8eaeacbddc44@tencent.com> <20260417025123.2971253-1-wxy2009nrrr@163.com> <3a28d9d327d84ae192fb3dcb925a0674@honor.com> In-Reply-To: Accept-Language: en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.163.18.229] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: F070940008 X-Stat-Signature: nfdesdfhngzmeq7bgf7wg4hte8fyhkjp X-HE-Tag: 1776503324-273953 X-HE-Meta: U2FsdGVkX19yNrOHuCgoZsfLo7VVtN/RIYJI5520v6JZD23T32uoy8nbQFnezrQmrQO8753R3k5d3Yw1Ay21TFqc6Z1VC1cDiwmHzigToMVd8Ac2vrXCd4S6McYD8FVsQ/ofWbnp8EqRPzhFQkuWjsJ5y6ulsidffrjFxA9op33qqBfbMIHh6v4jmhqkImxfD7/FWcLDXii/83obqTsq7wLP0rdlCvEj+xa9NTVYoiZkk/768rzxJsTxbaQ3kIhQo46Rv8bwL2+DSlZ34h6ZXIwow44c+OB6AtQLW5hXTsPEmPb7RboqSDpC7t3/TbmlXgc7+0QdM5zYezH1Jr22kBp91hrPBm8SCpjNjn+KFkQJKJuDZvocZFJaoGdIs6bHMz7U50LhWnRimuGKJZpg0nJEcpPAy0Bm3jHm1LtT7SqW7jj7EjlEZ+JsO3lg9s1sxNb1s1czxdhI1TskfRdJ08VUwagXjDyUU//Gjm/YDY8c+kTO/EMA+Eydyo0NiF9CJ2LPdhayACof7FTHVmJp+KWtKM5EDKexwHflfMX+kZgmuURDMdxhRwGTl8jtSzT1RTd7EuAGKH2bw7wTq+H0X5agDgI+Sulq5QBeHIfUaCX57wT3QMuo5z2dhV1AeTDu7XR1i/cDJTLzMJFhikANdBTy8+rxlsvrRW9QZ9ashXEq9+9NsfLfeGY55QGbsJSEhsg5RUFs2IR9ZppX4E/LTAw4Uf3WV1UmDnsKAThcnj3ez0k4zt92SYHPRpKuW+KV6TvdewcGvcfa2ZrWinsFSF9uFT6SCi1xAMEe/x7PEJGLvVZ1mCSOwurDVh7j4wsXWQQNMJk8eeVryfW8s5jvJazR9J9+93BBgF6X1RAA6gtWIy6qh2lQPWDh3TlurxyElNQPQd2aTyO1xRcfsesEkX2JW4Ccv6n15QXmVLymn9wIs6wS798YEzjsa5lvYR5FhK7ztVEDlwowhJXV/Sl r9+xnHAd KGUK5YfXKtDmxvmGB0Dvzk4UV6wQc8X6t2cfupx6obbpxqmiaxYhVYZxdIgt9h/SUm4eAqCDfCclwpr4/BfPKjeumoZWOHmqiBs0a2TVc9SdU6SjyHbNRqW/hTU7E+oJBZD1H39rq481mTYCP+F1cGUlKixzSya1X6pC1wb2B+SOo/8O/tGUoKNpcsdT2oTvyy12ADi5lorOg62H8zHaQGW6opFECXFSI5TxovLysjFlAKCzZVdyaIZ8oNWgXfu8RkRNue7U9R+lWyGKmdoWyAaD+TQ9IXV92SVuK3qRFfIq7hZ4GUyYJtAoAyWSL09ayL6obRcP/fyciJ59blRns6UpB/Ta9p/k74QduByJ/myMyLMNtzFGxfUvAKAFuGWdaWh7VFzOf+z2uVkzxNAi10e0fDWmZPy0dJxWZMsMjNumbxVFW2QA98ZiA37/Nch19YmY/jURraDmR1+A= Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: PiBPbiBTYXQsIEFwciAxOCwgMjAyNiBhdCAzOjM44oCvUE0gd2FuZ3ppY2hlbmcgPHdhbmd6aWNo ZW5nQGhvbm9yLmNvbT4NCj4gd3JvdGU6DQo+ID4NCj4gPiA+IEhpIEthaXJ1aSwNCj4gPiA+DQo+ ID4gPiBXZSBoYXZlIHRlc3RlZCB0aGlzIHBhdGNoIHNlcmllcyBvbiBBbmRyb2lkIGRldmljZSB1 bmRlciBhIHR5cGljYWwNCj4gc2NlbmFyaW8uDQo+ID4gPg0KPiA+ID4gVGhlIHRlc3QgY29uc2lz dGVkIG9mIGNvbGQtc3RhcnRpbmcgbXVsdGlwbGUgYXBwbGljYXRpb25zIHNlcXVlbnRpYWxseQ0K PiA+ID4gdW5kZXIgbW9kZXJhdGUgc3lzdGVtIGxvYWQgKHNvbWUgc2VydmljZXMgcnVubmluZyBv biB0aGUgYmFja2dyb3VuZCwNCj4gPiA+IHN1Y2ggYXMgbWFwIG5hdmlnYXRpbmcsIEFJIHZvaWNl LWFzc2lzdGFudCkuIEVhY2ggdGVzdCByb3VuZCBjb2xkLXN0YXJ0cw0KPiA+ID4gYSBmaXhlZCBz ZXQgb2YgYXBwcyBvbmUgYnkgb25lIGFuZCByZWNvcmRzIHRoZSBjb2xkIHN0YXJ0IGxhdGVuY3ku DQo+ID4gPiBBIHRvdGFsIG9mIDEwMCByb3VuZHMgd2VyZSBjb25kdWN0ZWQgdG8gZW5zdXJlIHN0 YXRpc3RpY2FsIHNpZ25pZmljYW5jZS4NCj4gPiA+DQo+ID4NCj4gPiBIaSBYaW55dSBhbmQgS2Fp cnVpLA0KPiA+DQo+ID4gV2UgaGF2ZSB0ZXN0IHRoZSBwYXRjaCB1bmRlciBhICoqaGVhdnkqKiBs b2FkIGJlbmNobWFyayBmb3IgY2FtZXJhLg0KPiA+DQo+ID4gPiBCZWZvcmU6DQo+ID4gPiAgIC9w cm9jL3Ztc3RhdCBpbmZvOg0KPiA+ID4gICAgIHBncGdpbiAyNjksMjI0DQo+ID4gPiAgICAgcGdw Z291dCAyMjYsMDc4DQo+ID4gPiAgICAgd29ya2luZ3NldF9yZWZhdWx0X2Fub24gMjM3DQo+ID4g PiAgICAgd29ya2luZ3NldF9yZWZhdWx0X2ZpbGUgMjc2ODkNCj4gPiA+DQo+ID4gPiAgIExhdW5j aCBUaW1lIFN1bW1hcnkgKGFsbCBhcHBzLCBhbGwgcnVucykNCj4gPiA+ICAgICBNZWFuIDg2OC4w bXMNCj4gPiA+ICAgICBQNTAgODg4LjBtcw0KPiA+ID4gICAgIFA5MCAxMjc0LjJtcw0KPiA+ID4g ICAgIFA5NSAxMzk5LjBtcw0KPiA+ID4NCj4gPiA+IEFmdGVyOg0KPiA+ID4gICAvcHJvYy92bXN0 YXQgaW5mbzoNCj4gPiA+ICAgICBwZ3BnaW4gMjIzLDgwMSAgICAgICAgICAgICAgICAoLTE2Ljkl KQ0KPiA+ID4gICAgIHBncGdvdXQgMzA4LDg3Mw0KPiA+ID4gICAgIHdvcmtpbmdzZXRfcmVmYXVs dF9hbm9uIDQ5OA0KPiA+ID4gICAgIHdvcmtpbmdzZXRfcmVmYXVsdF9maWxlIDE3MDc1ICgtMzgu MyUpDQo+ID4gPg0KPiA+ID4gICBMYXVuY2ggVGltZSBTdW1tYXJ5IChhbGwgYXBwcywgYWxsIHJ1 bnMpDQo+ID4gPiAgICAgTWVhbiA4NTAuNW1zICgtMi4wNyUpDQo+ID4gPiAgICAgUDUwIDg2MS41 bXMgICgtMy4wNCUpDQo+ID4gPiAgICAgUDkwIDExNzkuMG1zICgtOC4wNSUpDQo+ID4gPiAgICAg UDk1IDEyMjguMG1zICgtMTIuMiUpDQo+ID4gPg0KPiA+ID4gLS0NCj4gPiA+IEJlc3QgcmVnYXJk cywNCj4gPiA+IFhpbnl1DQo+ID4gPg0KPiA+DQo+ID4gV2UgZXZhbHVhdGVkIHRoZSBiYWNrcG9y dGVkIHBhdGNoZXMgb24gYW5kcm9pZDE2LTYuMTIgdXNpbmcgYQ0KPiAqKmhlYXZ5KioNCj4gDQo+ IEhpIFppY2hlbmcNCj4gDQo+IEknbSBub3Qgc3VyZSBob3cgeW91IGRpZCB0aGF0LCB0aGlzIHNl cmllcyBhcHBsaWVzIG9uIG1tLXVuc3RhYmxlIGFuZA0KPiB0aGVyZSBpcyBhIGxhcmdlIGdhcCBi ZXR3ZWVuIHRoYXQgYW5kIDYuMTIuDQo+IA0KPiA+IG1vYmlsZSB3b3JrbG9hZCBvbiBhIFF1YWxj b21tIDg4NTAgZGV2aWNlICgxNkdCIFJBTSArIDE2R0IgenJhbSkuDQo+ID4gKHZtc2NhbiBjb2Rl IGluIHRoaXMgdHJlZSBpcyBsYXJnZWx5IHNpbWlsYXIgdG8gdjYuMTgpDQo+ID4NClRoYW5rcyBm b3IgcG9pbnRpbmcgdGhhdCBvdXQuDQoNClRoZXJlIGlzIGluZGVlZCBhIHJlbGF0aXZlbHkgbGFy Z2UgZ2FwIGJldHdlZW4gbW0tdW5zdGFibGUgYW5kIG91cg0KYW5kcm9pZDE2LTYuMTIgdHJlZS4g VGhlIHNlcmllcyB3YXMgYmFja3BvcnRlZCBtYW51YWxseSBhbmQgd2Ugb25seQ0KYXBwbGllZCB0 aGUgY2hhbmdlcyByZXF1aXJlZCB0byBtYWtlIGl0IGJ1aWxkIGFuZCBydW4gaW4gb3VyIHRyZWUu DQoNCkJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgcG9zc2libGUgdGhhdCBzb21lIHJlbGF0ZWQgY2hh bmdlcyBmcm9tDQptbS11bnN0YWJsZSB3ZXJlIG5vdCBpbmNsdWRlZCwgd2hpY2ggbWF5IGhhdmUg YWZmZWN0ZWQgdGhlIGJlaGF2aW9yIG9yDQpwZXJmb3JtYW5jZSB3ZSBvYnNlcnZlZC4gSWYgdGhp cyBjYXVzZWQgbWlzbGVhZGluZyByZXN1bHRzLCB3ZQ0KYXBvbG9naXplIGZvciB0aGUgY29uZnVz aW9uLg0KDQpSZWdhcmRpbmcgdmVuZG9yIGhvb2tzLCBpbiBvdXIgdHJlZSB0aGVyZSBpcyBvbmx5 IG9uZSBob29rIGluDQpnZXRfbnJfdG9fc2NhbigpLiBXZSB0ZXN0ZWQgd2l0aCB0aGF0IGhvb2sg ZGlzYWJsZWQuDQoNClRoZSBwZXJmb3JtYW5jZSBkYXRhIHdhcyBjb2xsZWN0ZWQgdXNpbmcgUGVy ZmV0dG8gdHJhY2VzLg0KVW5mb3J0dW5hdGVseSB0aG9zZSB0cmFjZXMgY29udGFpbiBhIGxhcmdl IGFtb3VudCBvZiBydW50aW1lDQppbmZvcm1hdGlvbiBhbmQgYXJlIG5vdCBlYXN5IHRvIHNoYXJl IGV4dGVybmFsbHkuDQoNCklmIG5lZWRlZCwgd2UgY2FuIGFsc28gdHJ5IHRvIHJlcHJvZHVjZSB0 aGUgdGVzdCBvbiBhIHRyZWUgY2xvc2VyIHRvDQptbS11bnN0YWJsZSBvbmNlIG91ciBjaGlwc2V0 IHBsYXRmb3JtIGtlcm5lbCB0cmVlIGdldHMgdXBkYXRlZCB0bw0KYSBuZXdlciB2ZXJzaW9uLCB0 byBzZWUgd2hldGhlciB0aGUgYmVoYXZpb3Igc3RpbGwgcmVwcm9kdWNlcy4NCg0KQmVsb3cgaXMg dGhlIHBhdGNoIHdlIG1hbnVhbGx5IGFwcGxpZWQgZHVyaW5nIHRoZSBiYWNrcG9ydC4NCg0KDQoN Cg0KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMNCmluZGV4IGY3OGNmZTA1 OWYxNC4uNTAxMDljZDVlOTRjIDEwMDY0NA0KLS0tIGEvbW0vdm1zY2FuLmMNCisrKyBiL21tL3Zt c2Nhbi5jDQpAQCAtMTk4Nyw2ICsxOTg3LDQ0IEBAIHN0YXRpYyBpbnQgY3VycmVudF9tYXlfdGhy b3R0bGUodm9pZCkNCiAJcmV0dXJuICEoY3VycmVudC0+ZmxhZ3MgJiBQRl9MT0NBTF9USFJPVFRM RSk7DQogfQ0KIA0KK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25l ZCBsb25nIG5yX3Rha2VuLA0KKwkJCQkgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsDQor CQkJCSAgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsDQorCQkJCSAgICAgc3RydWN0IHJlY2xh aW1fc3RhdCAqc3RhdCkNCit7DQorCS8qDQorCSAqIElmIGRpcnR5IGZvbGlvcyBhcmUgc2Nhbm5l ZCB0aGF0IGFyZSBub3QgcXVldWVkIGZvciBJTywgaXQNCisJICogaW1wbGllcyB0aGF0IGZsdXNo ZXJzIGFyZSBub3QgZG9pbmcgdGhlaXIgam9iLiBUaGlzIGNhbg0KKwkgKiBoYXBwZW4gd2hlbiBt ZW1vcnkgcHJlc3N1cmUgcHVzaGVzIGRpcnR5IGZvbGlvcyB0byB0aGUgZW5kIG9mDQorCSAqIHRo ZSBMUlUgYmVmb3JlIHRoZSBkaXJ0eSBsaW1pdHMgYXJlIGJyZWFjaGVkIGFuZCB0aGUgZGlydHkN CisJICogZGF0YSBoYXMgZXhwaXJlZC4gSXQgY2FuIGFsc28gaGFwcGVuIHdoZW4gdGhlIHByb3Bv cnRpb24gb2YNCisJICogZGlydHkgZm9saW9zIGdyb3dzIG5vdCB0aHJvdWdoIHdyaXRlcyBidXQg dGhyb3VnaCBtZW1vcnkNCisJICogcHJlc3N1cmUgcmVjbGFpbWluZyBhbGwgdGhlIGNsZWFuIGNh Y2hlLiBBbmQgaW4gc29tZSBjYXNlcywNCisJICogdGhlIGZsdXNoZXJzIHNpbXBseSBjYW5ub3Qg a2VlcCB1cCB3aXRoIHRoZSBhbGxvY2F0aW9uDQorCSAqIHJhdGUuIE51ZGdlIHRoZSBmbHVzaGVy IHRocmVhZHMgaW4gY2FzZSB0aGV5IGFyZSBhc2xlZXAuDQorCSAqLw0KKwlpZiAoc3RhdC0+bnJf dW5xdWV1ZWRfZGlydHkgPT0gbnJfdGFrZW4gJiYgbnJfdGFrZW4pIHsNCisJCXdha2V1cF9mbHVz aGVyX3RocmVhZHMoV0JfUkVBU09OX1ZNU0NBTik7DQorCQkvKg0KKwkJICogRm9yIGNncm91cHYx IGRpcnR5IHRocm90dGxpbmcgaXMgYWNoaWV2ZWQgYnkgd2FraW5nIHVwDQorCQkgKiB0aGUga2Vy bmVsIGZsdXNoZXIgaGVyZSBhbmQgbGF0ZXIgd2FpdGluZyBvbiBmb2xpb3MNCisJCSAqIHdoaWNo IGFyZSBpbiB3cml0ZWJhY2sgdG8gZmluaXNoIChzZWUgc2hyaW5rX2ZvbGlvX2xpc3QoKSkuDQor CQkgKg0KKwkJICogRmx1c2hlciBtYXkgbm90IGJlIGFibGUgdG8gaXNzdWUgd3JpdGViYWNrIHF1 aWNrbHkNCisJCSAqIGVub3VnaCBmb3IgY2dyb3VwdjEgd3JpdGViYWNrIHRocm90dGxpbmcgdG8g d29yaw0KKwkJICogb24gYSBsYXJnZSBzeXN0ZW0uDQorCQkgKi8NCisJCWlmICghd3JpdGViYWNr X3Rocm90dGxpbmdfc2FuZShzYykpDQorCQkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FO X1RIUk9UVExFX1dSSVRFQkFDSyk7DQorCX0NCisNCisJc2MtPm5yLmRpcnR5ICs9IHN0YXQtPm5y X2RpcnR5Ow0KKwlzYy0+bnIuY29uZ2VzdGVkICs9IHN0YXQtPm5yX2Nvbmdlc3RlZDsNCisJc2Mt Pm5yLndyaXRlYmFjayArPSBzdGF0LT5ucl93cml0ZWJhY2s7DQorCXNjLT5uci5pbW1lZGlhdGUg Kz0gc3RhdC0+bnJfaW1tZWRpYXRlOw0KKwlzYy0+bnIudGFrZW4gKz0gbnJfdGFrZW47DQorfQ0K Kw0KIC8qDQogICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5r X25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlcg0KICAqIG9mIHJlY2xhaW1lZCBwYWdlcw0K QEAgLTIwNTQsNDEgKzIwOTIsMTUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0 aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLA0KIA0KIAlscnVfbm90ZV9jb3N0KGxy dXZlYywgZmlsZSwgc3RhdC5ucl9wYWdlb3V0LCBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTsN CiANCi0JLyoNCi0JICogSWYgZGlydHkgZm9saW9zIGFyZSBzY2FubmVkIHRoYXQgYXJlIG5vdCBx dWV1ZWQgZm9yIElPLCBpdA0KLQkgKiBpbXBsaWVzIHRoYXQgZmx1c2hlcnMgYXJlIG5vdCBkb2lu ZyB0aGVpciBqb2IuIFRoaXMgY2FuDQotCSAqIGhhcHBlbiB3aGVuIG1lbW9yeSBwcmVzc3VyZSBw dXNoZXMgZGlydHkgZm9saW9zIHRvIHRoZSBlbmQgb2YNCi0JICogdGhlIExSVSBiZWZvcmUgdGhl IGRpcnR5IGxpbWl0cyBhcmUgYnJlYWNoZWQgYW5kIHRoZSBkaXJ0eQ0KLQkgKiBkYXRhIGhhcyBl eHBpcmVkLiBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiB0aGUgcHJvcG9ydGlvbiBvZg0KLQkgKiBk aXJ0eSBmb2xpb3MgZ3Jvd3Mgbm90IHRocm91Z2ggd3JpdGVzIGJ1dCB0aHJvdWdoIG1lbW9yeQ0K LQkgKiBwcmVzc3VyZSByZWNsYWltaW5nIGFsbCB0aGUgY2xlYW4gY2FjaGUuIEFuZCBpbiBzb21l IGNhc2VzLA0KLQkgKiB0aGUgZmx1c2hlcnMgc2ltcGx5IGNhbm5vdCBrZWVwIHVwIHdpdGggdGhl IGFsbG9jYXRpb24NCi0JICogcmF0ZS4gTnVkZ2UgdGhlIGZsdXNoZXIgdGhyZWFkcyBpbiBjYXNl IHRoZXkgYXJlIGFzbGVlcC4NCi0JICovDQotCWlmIChzdGF0Lm5yX3VucXVldWVkX2RpcnR5ID09 IG5yX3Rha2VuKSB7DQotCQl3YWtldXBfZmx1c2hlcl90aHJlYWRzKFdCX1JFQVNPTl9WTVNDQU4p Ow0KLQkJLyoNCi0JCSAqIEZvciBjZ3JvdXB2MSBkaXJ0eSB0aHJvdHRsaW5nIGlzIGFjaGlldmVk IGJ5IHdha2luZyB1cA0KLQkJICogdGhlIGtlcm5lbCBmbHVzaGVyIGhlcmUgYW5kIGxhdGVyIHdh aXRpbmcgb24gZm9saW9zDQotCQkgKiB3aGljaCBhcmUgaW4gd3JpdGViYWNrIHRvIGZpbmlzaCAo c2VlIHNocmlua19mb2xpb19saXN0KCkpLg0KLQkJICoNCi0JCSAqIEZsdXNoZXIgbWF5IG5vdCBi ZSBhYmxlIHRvIGlzc3VlIHdyaXRlYmFjayBxdWlja2x5DQotCQkgKiBlbm91Z2ggZm9yIGNncm91 cHYxIHdyaXRlYmFjayB0aHJvdHRsaW5nIHRvIHdvcmsNCi0JCSAqIG9uIGEgbGFyZ2Ugc3lzdGVt Lg0KLQkJICovDQotCQlpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKQ0KLQkJCXJl Y2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9XUklURUJBQ0spOw0KLQl9DQor CQ0KKwkvLyBzYy0+bnIudW5xdWV1ZWRfZGlydHkgKz0gc3RhdC5ucl91bnF1ZXVlZF9kaXJ0eTsN CisJLy8gbGVhdmUgbnJfdW5xdWV1ZWRfZGlydHkgaW4gc2Nhbl9jb250cm9sIHRvIGtlZXAgaW50 ZWdyaXR5DQogDQotCXNjLT5uci5kaXJ0eSArPSBzdGF0Lm5yX2RpcnR5Ow0KLQlzYy0+bnIuY29u Z2VzdGVkICs9IHN0YXQubnJfY29uZ2VzdGVkOw0KLQlzYy0+bnIudW5xdWV1ZWRfZGlydHkgKz0g c3RhdC5ucl91bnF1ZXVlZF9kaXJ0eTsNCi0Jc2MtPm5yLndyaXRlYmFjayArPSBzdGF0Lm5yX3dy aXRlYmFjazsNCi0Jc2MtPm5yLmltbWVkaWF0ZSArPSBzdGF0Lm5yX2ltbWVkaWF0ZTsNCi0Jc2Mt Pm5yLnRha2VuICs9IG5yX3Rha2VuOw0KLQlpZiAoZmlsZSkNCi0JCXNjLT5uci5maWxlX3Rha2Vu ICs9IG5yX3Rha2VuOw0KKwkvLyBpZiAoZmlsZSkNCisJLy8gCXNjLT5uci5maWxlX3Rha2VuICs9 IG5yX3Rha2VuOw0KKwkvLyBsZWF2ZSBucl90YWtlbiBpbiBzY2FuX2NvbnRyb2wgdG8ga2VlcCBp bnRlZ3JpdHkNCiANCisJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwg c2MsICZzdGF0KTsNCiAJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQt Pm5vZGVfaWQsDQogCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmc3RhdCwgc2MtPnByaW9y aXR5LCBmaWxlKTsNCiAJcmV0dXJuIG5yX3JlY2xhaW1lZDsNCkBAIC0zMjkxLDcgKzMzMDMsNyBA QCBzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdl bikNCiB9DQogDQogLyogcHJvdGVjdCBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJv dWdoIGZpbGUgZGVzY3JpcHRvcnMgKi8NCi1zdGF0aWMgaW50IGZvbGlvX2luY19nZW4oc3RydWN0 IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1pbmcpDQor c3RhdGljIGludCBmb2xpb19pbmNfZ2VuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZv bGlvICpmb2xpbykNCiB7DQogCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pOw0K IAlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOw0KQEAgLTMz MTAsOSArMzMyMiw2IEBAIHN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICps cnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpDQogDQogCQluZXdfZmxhZ3Mg PSBvbGRfZmxhZ3MgJiB+KExSVV9HRU5fTUFTSyB8IExSVV9SRUZTX0ZMQUdTKTsNCiAJCW5ld19m bGFncyB8PSAobmV3X2dlbiArIDFVTCkgPDwgTFJVX0dFTl9QR09GRjsNCi0JCS8qIGZvciBmb2xp b19lbmRfd3JpdGViYWNrKCkgKi8NCi0JCWlmIChyZWNsYWltaW5nKQ0KLQkJCW5ld19mbGFncyB8 PSBCSVQoUEdfcmVjbGFpbSk7DQogCX0gd2hpbGUgKCF0cnlfY21weGNoZygmZm9saW8tPmZsYWdz LCAmb2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsNCiANCiAJbHJ1X2dlbl91cGRhdGVfc2l6ZShscnV2 ZWMsIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsNCkBAIC0zOTE4LDcgKzM5MjcsNyBAQCBzdGF0 aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQg c3dhcHBpbmVzcykNCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUo Zm9saW8pICE9IHR5cGUsIGZvbGlvKTsNCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9f em9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pOw0KIA0KLQkJCW5ld19nZW4gPSBmb2xpb19p bmNfZ2VuKGxydXZlYywgZm9saW8sIGZhbHNlKTsNCisJCQluZXdfZ2VuID0gZm9saW9faW5jX2dl bihscnV2ZWMsIGZvbGlvKTsNCiAJCQlsaXN0X21vdmVfdGFpbCgmZm9saW8tPmxydSwgJmxydWdl bi0+Zm9saW9zW25ld19nZW5dW3R5cGVdW3pvbmVdKTsNCiANCiAJCQkvKiBkb24ndCBjb3VudCB0 aGUgd29ya2luZ3NldCBiZWluZyBsYXppbHkgcHJvbW90ZWQgKi8NCkBAIC0zOTQxLDEwICszOTUw LDEwIEBAIHN0YXRpYyBib29sIGluY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50 IHR5cGUsIGludCBzd2FwcGluZXNzKQ0KIAlyZXR1cm4gdHJ1ZTsNCiB9DQogDQotc3RhdGljIGJv b2wgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5l c3MpDQorc3RhdGljIHZvaWQgdHJ5X3RvX2luY19taW5fc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZl YywgaW50IHN3YXBwaW5lc3MpDQogew0KIAlpbnQgZ2VuLCB0eXBlLCB6b25lOw0KLQlib29sIHN1 Y2Nlc3MgPSBmYWxzZTsNCisJYm9vbCBzZXFfaW5jX2ZsYWcgPSBmYWxzZTsNCiAJc3RydWN0IGxy dV9nZW5fZm9saW8gKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsNCiAJREVGSU5FX01JTl9TRVEo bHJ1dmVjKTsNCiANCkBAIC0zOTYxLDExICszOTcwLDE5IEBAIHN0YXRpYyBib29sIHRyeV90b19p bmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQ0KIAkJCX0N CiANCiAJCQltaW5fc2VxW3R5cGVdKys7DQorCQkJc2VxX2luY19mbGFnID0gdHJ1ZTsNCiAJCX0N CiBuZXh0Og0KIAkJOw0KIAl9DQogDQorCS8qDQorCSAqIElmIG1pbl9zZXFbdHlwZV0gb2YgYm90 aCBhbm9ueW1vdXMgYW5kIGZpbGUgaXMgbm90IGluY3JlYXNlZCwNCisJICogcmV0dXJuIGhlcmUg dG8gYXZvaWQgdW5uZWNlc3NhcnkgY2hlY2tpbmcgb3ZlcmhlYWQgbGF0ZXIuDQorIAkgKi8NCisJ aWYgKCFzZXFfaW5jX2ZsYWcpDQorCQlyZXR1cm47DQorDQogCS8qIHNlZSB0aGUgY29tbWVudCBv biBscnVfZ2VuX2ZvbGlvICovDQogCWlmIChzd2FwcGluZXNzICYmIHN3YXBwaW5lc3MgPD0gTUFY X1NXQVBQSU5FU1MpIHsNCiAJCXVuc2lnbmVkIGxvbmcgc2VxID0gbHJ1Z2VuLT5tYXhfc2VxIC0g TUlOX05SX0dFTlM7DQpAQCAtMzk4MiwxMCArMzk5OSw4IEBAIHN0YXRpYyBib29sIHRyeV90b19p bmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBzd2FwcGluZXNzKQ0KIA0KIAkJ cmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsNCiAJCVdSSVRFX09OQ0UobHJ1Z2Vu LT5taW5fc2VxW3R5cGVdLCBtaW5fc2VxW3R5cGVdKTsNCi0JCXN1Y2Nlc3MgPSB0cnVlOw0KIAl9 DQogDQotCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCiBzdGF0aWMgYm9vbCBpbmNfbWF4X3NlcShz dHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBpbnQgc3dhcHBpbmVzcykN CkBAIC00MTM3LDI3ICs0MTUyLDMzIEBAIHN0YXRpYyB2b2lkIHNldF9pbml0aWFsX3ByaW9yaXR5 KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wNCiAJc2MtPnBy aW9yaXR5ID0gY2xhbXAocHJpb3JpdHksIERFRl9QUklPUklUWSAvIDIsIERFRl9QUklPUklUWSk7 DQogfQ0KIA0KLXN0YXRpYyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1 dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3Mp DQogew0KIAlpbnQgZ2VuLCB0eXBlLCB6b25lOw0KLQl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsN Ci0JaW50IHN3YXBwaW5lc3MgPSBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKTsNCisJdW5zaWdu ZWQgbG9uZyBzZXEsIHRvdGFsID0gMDsNCiAJc3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9 ICZscnV2ZWMtPmxydWdlbjsNCi0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21l bWNnKGxydXZlYyk7DQogCURFRklORV9NQVhfU0VRKGxydXZlYyk7DQogCURFRklORV9NSU5fU0VR KGxydXZlYyk7DQogDQogCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKHR5cGUsIHN3YXBwaW5lc3Mp IHsNCi0JCXVuc2lnbmVkIGxvbmcgc2VxOw0KLQ0KIAkJZm9yIChzZXEgPSBtaW5fc2VxW3R5cGVd OyBzZXEgPD0gbWF4X3NlcTsgc2VxKyspIHsNCiAJCQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNl cSk7DQotDQogCQkJZm9yICh6b25lID0gMDsgem9uZSA8IE1BWF9OUl9aT05FUzsgem9uZSsrKQ0K IAkJCQl0b3RhbCArPSBtYXgoUkVBRF9PTkNFKGxydWdlbi0+bnJfcGFnZXNbZ2VuXVt0eXBlXVt6 b25lXSksIDBMKTsNCiAJCX0NCiAJfQ0KIA0KKwlyZXR1cm4gdG90YWw7DQorfQ0KKw0KK3N0YXRp YyBib29sIGxydXZlY19pc19zaXphYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNj YW5fY29udHJvbCAqc2MpDQorew0KKwl1bnNpZ25lZCBsb25nIHRvdGFsOw0KKwlpbnQgc3dhcHBp bmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpOw0KKwlzdHJ1Y3QgbWVtX2Nncm91cCAq bWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsNCisNCisJdG90YWwgPSBscnV2ZWNfZXZpY3Rh YmxlX3NpemUobHJ1dmVjLCBzd2FwcGluZXNzKTsNCisNCiAJLyogd2hldGhlciB0aGUgc2l6ZSBp cyBiaWcgZW5vdWdoIHRvIGJlIGhlbHBmdWwgKi8NCiAJcmV0dXJuIG1lbV9jZ3JvdXBfb25saW5l KG1lbWNnKSA/ICh0b3RhbCA+PiBzYy0+cHJpb3JpdHkpIDogdG90YWw7DQogfQ0KQEAgLTQ0NzUs NyArNDQ5Niw2IEBAIHN0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVj LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jDQogCQkgICAgICAgaW50IHRpZXJf aWR4KQ0KIHsNCiAJYm9vbCBzdWNjZXNzOw0KLQlib29sIGRpcnR5LCB3cml0ZWJhY2s7DQogCWlu dCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsNCiAJaW50IHR5cGUgPSBmb2xpb19pc19maWxl X2xydShmb2xpbyk7DQogCWludCB6b25lID0gZm9saW9fem9uZW51bShmb2xpbyk7DQpAQCAtNDUw NSw3ICs0NTI1LDcgQEAgc3RhdGljIGJvb2wgc29ydF9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzY2FuX2MNCiANCiAJLyogcHJvdGVjdGVk ICovDQogCWlmICh0aWVyID4gdGllcl9pZHggfHwgcmVmcyArIHdvcmtpbmdzZXQgPT0gQklUKExS VV9SRUZTX1dJRFRIKSArIDEpIHsNCi0JCWdlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xp bywgZmFsc2UpOw0KKwkJZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTsNCiAJCWxp c3RfbW92ZSgmZm9saW8tPmxydSwgJmxydWdlbi0+Zm9saW9zW2dlbl1bdHlwZV1bem9uZV0pOw0K IA0KIAkJLyogZG9uJ3QgY291bnQgdGhlIHdvcmtpbmdzZXQgYmVpbmcgbGF6aWx5IHByb21vdGVk ICovDQpAQCAtNDUyMCwyNiArNDU0MCwxMSBAQCBzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVj dCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fYw0KIA0K IAkvKiBpbmVsaWdpYmxlICovDQogCWlmICghZm9saW9fdGVzdF9scnUoZm9saW8pIHx8IHpvbmUg PiBzYy0+cmVjbGFpbV9pZHgpIHsNCi0JCWdlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xp bywgZmFsc2UpOw0KKwkJZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvKTsNCiAJCWxp c3RfbW92ZV90YWlsKCZmb2xpby0+bHJ1LCAmbHJ1Z2VuLT5mb2xpb3NbZ2VuXVt0eXBlXVt6b25l XSk7DQogCQlyZXR1cm4gdHJ1ZTsNCiAJfQ0KIA0KLQlkaXJ0eSA9IGZvbGlvX3Rlc3RfZGlydHko Zm9saW8pOw0KLQl3cml0ZWJhY2sgPSBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyk7DQotCWlm ICh0eXBlID09IExSVV9HRU5fRklMRSAmJiBkaXJ0eSkgew0KLQkJc2MtPm5yLmZpbGVfdGFrZW4g Kz0gZGVsdGE7DQotCQlpZiAoIXdyaXRlYmFjaykNCi0JCQlzYy0+bnIudW5xdWV1ZWRfZGlydHkg Kz0gZGVsdGE7DQotCX0NCi0NCi0JLyogd2FpdGluZyBmb3Igd3JpdGViYWNrICovDQotCWlmICh3 cml0ZWJhY2sgfHwgKHR5cGUgPT0gTFJVX0dFTl9GSUxFICYmIGRpcnR5KSkgew0KLQkJZ2VuID0g Zm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvLCB0cnVlKTsNCi0JCWxpc3RfbW92ZSgmZm9saW8t PmxydSwgJmxydWdlbi0+Zm9saW9zW2dlbl1bdHlwZV1bem9uZV0pOw0KLQkJcmV0dXJuIHRydWU7 DQotCX0NCi0NCiAJcmV0dXJuIGZhbHNlOw0KIH0NCiANCkBAIC00NTQ3LDEyICs0NTUyLDYgQEAg Ym9vbCBpc29sYXRlX2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpm b2xpbywgc3RydWN0IHNjYW5fY29udHINCiB7DQogCWJvb2wgc3VjY2VzczsNCiANCi0JLyogc3dh cCBjb25zdHJhaW5lZCAqLw0KLQlpZiAoIShzYy0+Z2ZwX21hc2sgJiBfX0dGUF9JTykgJiYNCi0J ICAgIChmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSB8fA0KLQkgICAgIChmb2xpb190ZXN0X2Fub24o Zm9saW8pICYmICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKSkNCi0JCXJldHVybiBmYWxz ZTsNCi0NCiAJLyogcmFjZWQgd2l0aCByZWxlYXNlX3BhZ2VzKCkgKi8NCiAJaWYgKCFmb2xpb190 cnlfZ2V0KGZvbGlvKSkNCiAJCXJldHVybiBmYWxzZTsNCkBAIC00NTY3LDggKzQ1NjYsNiBAQCBi b29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZv bGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cg0KIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xp bykpDQogCQlzZXRfbWFza19iaXRzKCZmb2xpby0+ZmxhZ3MsIExSVV9SRUZTX01BU0ssIDApOw0K IA0KLQkvKiBmb3Igc2hyaW5rX2ZvbGlvX2xpc3QoKSAqLw0KLQlmb2xpb19jbGVhcl9yZWNsYWlt KGZvbGlvKTsNCiANCiAJc3VjY2VzcyA9IGxydV9nZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8s IHRydWUpOw0KIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsNCkBAIC00 NTc3LDggKzQ1NzQsOSBAQCBib29sIGlzb2xhdGVfZm9saW8oc3RydWN0IGxydXZlYyAqbHJ1dmVj LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc2Nhbl9jb250cg0KIH0NCiBFWFBPUlRfU1lN Qk9MX0dQTChpc29sYXRlX2ZvbGlvKTsNCiANCi1zdGF0aWMgaW50IHNjYW5fZm9saW9zKHN0cnVj dCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsDQotCQkgICAgICAgaW50 IHR5cGUsIGludCB0aWVyLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQ0KK3N0YXRpYyBpbnQgc2Nh bl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMs IHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLA0KKwkJICAgICAgIGludCB0eXBlLCBpbnQgdGllciwg DQorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppc29sYXRlZHApDQogew0KIAlp bnQgaTsNCiAJaW50IGdlbjsNCkBAIC00NTg3LDEwICs0NTg1LDExIEBAIHN0YXRpYyBpbnQgc2Nh bl9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywN CiAJaW50IHNjYW5uZWQgPSAwOw0KIAlpbnQgaXNvbGF0ZWQgPSAwOw0KIAlpbnQgc2tpcHBlZCA9 IDA7DQotCWludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIOw0KKwl1bnNpZ25lZCBsb25nIHJl bWFpbmluZyA9IG5yX3RvX3NjYW47DQogCXN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSAm bHJ1dmVjLT5scnVnZW47DQogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1j ZyhscnV2ZWMpOw0KIA0KKwlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiA+IE1BWF9MUlVfQkFU Q0gpOw0KIAlWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpOw0KIA0KIAlpZiAoZ2V0 X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykNCkBAIC00NjQ3LDE2ICs0NjQ2 LDEyIEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1 Y3Qgc2Nhbl9jb250cm9sICpzYywNCiAJX19jb3VudF9tZW1jZ19ldmVudHMobWVtY2csIGl0ZW0s IGlzb2xhdGVkKTsNCiAJX19jb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUkVGSUxMLCBzb3J0 ZWQpOw0KIAlfX2NvdW50X3ZtX2V2ZW50cyhQR1NDQU5fQU5PTiArIHR5cGUsIGlzb2xhdGVkKTsN Ci0JdHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKHNjLT5yZWNsYWltX2lkeCwgc2MtPm9yZGVy LCBNQVhfTFJVX0JBVENILA0KKwl0cmFjZV9tbV92bXNjYW5fbHJ1X2lzb2xhdGUoc2MtPnJlY2xh aW1faWR4LCBzYy0+b3JkZXIsIG5yX3RvX3NjYW4sDQogCQkJCXNjYW5uZWQsIHNraXBwZWQsIGlz b2xhdGVkLA0KIAkJCQl0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5P Tik7DQotCWlmICh0eXBlID09IExSVV9HRU5fRklMRSkNCi0JCXNjLT5uci5maWxlX3Rha2VuICs9 IGlzb2xhdGVkOw0KLQkvKg0KLQkgKiBUaGVyZSBtaWdodCBub3QgYmUgZWxpZ2libGUgZm9saW9z IGR1ZSB0byByZWNsYWltX2lkeC4gQ2hlY2sgdGhlDQotCSAqIHJlbWFpbmluZyB0byBwcmV2ZW50 IGxpdmVsb2NrIGlmIGl0J3Mgbm90IG1ha2luZyBwcm9ncmVzcy4NCi0JICovDQotCXJldHVybiBp c29sYXRlZCB8fCAhcmVtYWluaW5nID8gc2Nhbm5lZCA6IDA7DQorDQorCSppc29sYXRlZHAgPSBp c29sYXRlZDsNCisJcmV0dXJuIHNjYW5uZWQ7DQogfQ0KIA0KIHN0YXRpYyBpbnQgZ2V0X3RpZXJf aWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpDQpAQCAtNDY5OCwzMyArNDY5Mywz NiBAQCBzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBp bnQgc3dhcHBpbmVzcykNCiAJcmV0dXJuIHBvc2l0aXZlX2N0cmxfZXJyKCZzcCwgJnB2KTsNCiB9 DQogDQotc3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0 cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywNCi0JCQkgIGludCAqdHlwZV9z Y2FubmVkLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQ0KK3N0YXRpYyBpbnQgaXNvbGF0ZV9mb2xp b3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVj dCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcywNCisJCQkgICBzdHJ1Y3QgbGlzdF9o ZWFkICpsaXN0LCBpbnQgKmlzb2xhdGVkLA0KKwkJCSAgaW50ICppc29sYXRlX3R5cGUsIGludCAq aXNvbGF0ZV9zY2FubmVkKQ0KIHsNCiAJaW50IGk7DQorCWludCBzY2FubmVkID0gMDsNCiAJaW50 IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7DQogDQogCWZvcl9l YWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsNCi0JCWludCBzY2FubmVkOw0KKwkJ aW50IHR5cGVfc2NhbjsNCiAJCWludCB0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZlYywgdHlwZSk7 DQogDQotCQkqdHlwZV9zY2FubmVkID0gdHlwZTsNCisJCXR5cGVfc2NhbiA9IHNjYW5fZm9saW9z KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsDQorCQkJCQl0eXBlLCB0aWVyLCBsaXN0LCBpc29sYXRl ZCk7DQogDQotCQlzY2FubmVkID0gc2Nhbl9mb2xpb3MobHJ1dmVjLCBzYywgdHlwZSwgdGllciwg bGlzdCk7DQotCQlpZiAoc2Nhbm5lZCkNCi0JCQlyZXR1cm4gc2Nhbm5lZDsNCisJCXNjYW5uZWQg Kz0gdHlwZV9zY2FuOw0KKwkJaWYgKCppc29sYXRlZCkgew0KKwkJCSppc29sYXRlX3R5cGUgPSB0 eXBlOw0KKwkJCSppc29sYXRlX3NjYW5uZWQgPSB0eXBlX3NjYW47DQorCQkJYnJlYWs7DQorCQl9 DQogDQogCQl0eXBlID0gIXR5cGU7DQogCX0NCiANCi0JcmV0dXJuIDA7DQorCXJldHVybiBzY2Fu bmVkOw0KIH0NCiANCi1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcykNCitzdGF0aWMgaW50 IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxy dXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQ0KIHsNCi0JaW50 IHR5cGU7DQotCWludCBzY2FubmVkOw0KLQlpbnQgcmVjbGFpbWVkOw0KIAlMSVNUX0hFQUQobGlz dCk7DQogCUxJU1RfSEVBRChjbGVhbik7DQogCXN0cnVjdCBmb2xpbyAqZm9saW87DQpAQCAtNDcz MiwxOSArNDczMCwyMyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICps cnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcA0KIAllbnVtIHZtX2V2ZW50 X2l0ZW0gaXRlbTsNCiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0Ow0KIAlzdHJ1Y3QgbHJ1X2dl bl9tbV93YWxrICp3YWxrOw0KKwlpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkOw0KKwlpbnQgaXNvbGF0 ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7DQogCWJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlOw0K LQlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOw0KIAlzdHJ1 Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsNCiAJc3RydWN0IHBn bGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOw0KIA0KIAlzcGluX2xvY2tf aXJxKCZscnV2ZWMtPmxydV9sb2NrKTsNCiANCi0Jc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKGxy dXZlYywgc2MsIHN3YXBwaW5lc3MsICZ0eXBlLCAmbGlzdCk7DQorCS8qIEluIGNhc2UgZm9saW8g ZGVsZXRpb24gbGVmdCBlbXB0eSBvbGQgZ2VucywgZmx1c2ggdGhlbSAqLw0KKwl0cnlfdG9faW5j X21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTsNCiANCi0Jc2Nhbm5lZCArPSB0cnlfdG9faW5j X21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTsNCisJc2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9z KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsDQorCQkJCSAmbGlzdCwgJmlzb2xh dGVkLCAmdHlwZSwgJnR5cGVfc2Nhbm5lZCk7DQogDQotCWlmIChldmljdGFibGVfbWluX3NlcShs cnVnZW4tPm1pbl9zZXEsIHN3YXBwaW5lc3MpICsgTUlOX05SX0dFTlMgPiBscnVnZW4tPm1heF9z ZXEpDQotCQlzY2FubmVkID0gMDsNCisJLyogSXNvbGF0aW9uIG1pZ2h0IGNyZWF0ZSBlbXB0eSBn ZW4sIGZsdXNoIHRoZW0gKi8NCisJaWYgKHNjYW5uZWQpDQorCQl0cnlfdG9faW5jX21pbl9zZXEo bHJ1dmVjLCBzd2FwcGluZXNzKTsNCiANCiAJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9s b2NrKTsNCiANCkBAIC00NzUyLDEwICs0NzU0LDEwIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9z KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2Fw DQogCQlyZXR1cm4gc2Nhbm5lZDsNCiByZXRyeToNCiAJcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlv X2xpc3QoJmxpc3QsIHBnZGF0LCBzYywgJnN0YXQsIGZhbHNlKTsNCi0Jc2MtPm5yLnVucXVldWVk X2RpcnR5ICs9IHN0YXQubnJfdW5xdWV1ZWRfZGlydHk7DQogCXNjLT5ucl9yZWNsYWltZWQgKz0g cmVjbGFpbWVkOw0KKwloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBz YywgJnN0YXQpOw0KIAl0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC0+ bm9kZV9pZCwNCi0JCQlzY2FubmVkLCByZWNsYWltZWQsICZzdGF0LCBzYy0+cHJpb3JpdHksDQor CQkJdHlwZV9zY2FubmVkLCByZWNsYWltZWQsICZzdGF0LCBzYy0+cHJpb3JpdHksDQogCQkJdHlw ZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOw0KIA0KIAlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgJmxpc3QsIGxydSkgew0KQEAg LTQ4MDQsNiArNDgwNiw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMg KmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwDQogDQogCWlmICghbGlz dF9lbXB0eSgmbGlzdCkpIHsNCiAJCXNraXBfcmV0cnkgPSB0cnVlOw0KKwkJaXNvbGF0ZWQgPSAw Ow0KIAkJZ290byByZXRyeTsNCiAJfQ0KIA0KQEAgLTQ4MTMsMjggKzQ4MTYsMTQgQEAgc3RhdGlj IGludCBldmljdF9mb2xpb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250 cm9sICpzYywgaW50IHN3YXANCiBzdGF0aWMgYm9vbCBzaG91bGRfcnVuX2FnaW5nKHN0cnVjdCBs cnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBtYXhfc2VxLA0KIAkJCSAgICAgaW50IHN3YXBw aW5lc3MsIHVuc2lnbmVkIGxvbmcgKm5yX3RvX3NjYW4pDQogew0KLQlpbnQgZ2VuLCB0eXBlLCB6 b25lOw0KLQl1bnNpZ25lZCBsb25nIHNpemUgPSAwOw0KLQlzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAq bHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOw0KIAlERUZJTkVfTUlOX1NFUShscnV2ZWMpOw0KIA0K LQkqbnJfdG9fc2NhbiA9IDA7DQogCS8qIGhhdmUgdG8gcnVuIGFnaW5nLCBzaW5jZSBldmljdGlv biBpcyBub3QgcG9zc2libGUgYW55bW9yZSAqLw0KIAlpZiAoZXZpY3RhYmxlX21pbl9zZXEobWlu X3NlcSwgc3dhcHBpbmVzcykgKyBNSU5fTlJfR0VOUyA+IG1heF9zZXEpDQogCQlyZXR1cm4gdHJ1 ZTsNCiANCi0JZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUodHlwZSwgc3dhcHBpbmVzcykgew0KLQkJ dW5zaWduZWQgbG9uZyBzZXE7DQotDQotCQlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSA8 PSBtYXhfc2VxOyBzZXErKykgew0KLQkJCWdlbiA9IGxydV9nZW5fZnJvbV9zZXEoc2VxKTsNCisJ Km5yX3RvX3NjYW4gPSBscnV2ZWNfZXZpY3RhYmxlX3NpemUobHJ1dmVjLCBzd2FwcGluZXNzKTsN CiANCi0JCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVTOyB6b25lKyspDQotCQkJ CXNpemUgKz0gbWF4KFJFQURfT05DRShscnVnZW4tPm5yX3BhZ2VzW2dlbl1bdHlwZV1bem9uZV0p LCAwTCk7DQotCQl9DQotCX0NCi0NCi0JKm5yX3RvX3NjYW4gPSBzaXplOw0KIAkvKiBiZXR0ZXIg dG8gcnVuIGFnaW5nIGV2ZW4gdGhvdWdoIGV2aWN0aW9uIGlzIHN0aWxsIHBvc3NpYmxlICovDQog CXJldHVybiBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKSArIE1JTl9OUl9H RU5TID09IG1heF9zZXE7DQogfQ0KQEAgLTQ4NDQsMjcgKzQ4MzMsNTUgQEAgc3RhdGljIGJvb2wg c2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4 X3NlcSwNCiAgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRv IHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZw0KICAqICAgIHJlY2xhaW0uDQogICovDQotc3RhdGlj IGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9j b250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpDQotew0KLQlib29sIHN1Y2Nlc3M7DQotCXVuc2ln bmVkIGxvbmcgbnJfdG9fc2NhbjsNCi0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVj X21lbWNnKGxydXZlYyk7DQotCURFRklORV9NQVhfU0VRKGxydXZlYyk7DQorLy8gc3RhdGljIGxv bmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250 cm9sICpzYywNCisvLyAJCQkgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBzd2FwcGlu ZXNzKQ0KKy8vIHsNCisvLyAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBldmljdGFibGU7DQor Ly8gCWJvb2wgYnlwYXNzID0gZmFsc2U7DQorLy8gCWJvb2wgeW91bmcgPSBmYWxzZTsNCisvLyAJ REVGSU5FX01BWF9TRVEobHJ1dmVjKTsNCisNCisvLyAJZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0 YWJsZV9zaXplKGxydXZlYywgc3dhcHBpbmVzcyk7DQorLy8gCW5yX3RvX3NjYW4gPSBldmljdGFi bGU7DQorDQorLy8gCS8qIHRyeSB0byBzY3JhcGUgYWxsIGl0cyBtZW1vcnkgaWYgdGhpcyBtZW1j ZyB3YXMgZGVsZXRlZCAqLw0KKy8vIAlpZiAoIW1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSkNCisv LyAJCXJldHVybiBucl90b19zY2FuOw0KKw0KKy8vIAkvLyBucl90b19zY2FuID0gYXBwbHlfcHJv cG9ydGlvbmFsX3Byb3RlY3Rpb24obWVtY2csIHNjLCBucl90b19zY2FuKTsNCisvLyAJLy8gbm90 IGV4aXN0IGluIHRoZSBhbmRyb2lkIGNvZGUNCisvLyAJbnJfdG9fc2NhbiA+Pj0gc2MtPnByaW9y aXR5Ow0KKw0KKy8vIAlpZiAoIW5yX3RvX3NjYW4gJiYgc2MtPnByaW9yaXR5IDwgREVGX1BSSU9S SVRZKQ0KKy8vIAkJbnJfdG9fc2NhbiA9IG1pbihldmljdGFibGUsIFNXQVBfQ0xVU1RFUl9NQVgp Ow0KKw0KKy8vIAl0cmFjZV9hbmRyb2lkX3ZoX21nbHJ1X2FnaW5nX2J5cGFzcyhscnV2ZWMsIG1h eF9zZXEsDQorLy8gCQlzd2FwcGluZXNzLCAmYnlwYXNzLCAmeW91bmcpOw0KKy8vIAlpZiAoYnlw YXNzKQ0KKy8vIAkJcmV0dXJuIHlvdW5nID8gLTEgOiAwOw0KKw0KKy8vIAlyZXR1cm4gbnJfdG9f c2NhbjsNCisvLyB9DQorc3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAq bHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywNCisJCQkgICBzdHJ1Y3QgbWVtX2Nncm91 cCAqbWVtY2csIGludCBzd2FwcGluZXNzKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBucl90b19zY2Fu LCBldmljdGFibGU7DQogCWJvb2wgYnlwYXNzID0gZmFsc2U7DQogCWJvb2wgeW91bmcgPSBmYWxz ZTsNCisJREVGSU5FX01BWF9TRVEobHJ1dmVjKTsNCiANCi0JaWYgKG1lbV9jZ3JvdXBfYmVsb3df bWluKHNjLT50YXJnZXRfbWVtX2Nncm91cCwgbWVtY2cpKQ0KLQkJcmV0dXJuIC0xOw0KLQ0KLQlz dWNjZXNzID0gc2hvdWxkX3J1bl9hZ2luZyhscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MsICZu cl90b19zY2FuKTsNCisJZXZpY3RhYmxlID0gbHJ1dmVjX2V2aWN0YWJsZV9zaXplKGxydXZlYywg c3dhcHBpbmVzcyk7DQorCW5yX3RvX3NjYW4gPSBldmljdGFibGU7DQogDQogCS8qIHRyeSB0byBz Y3JhcGUgYWxsIGl0cyBtZW1vcnkgaWYgdGhpcyBtZW1jZyB3YXMgZGVsZXRlZCAqLw0KLQlpZiAo bnJfdG9fc2NhbiAmJiAhbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKQ0KKwlpZiAoIW1lbV9jZ3Jv dXBfb25saW5lKG1lbWNnKSkNCiAJCXJldHVybiBucl90b19zY2FuOw0KIA0KKwlucl90b19zY2Fu ID4+PSBzYy0+cHJpb3JpdHk7DQorDQogCS8qIHRyeSB0byBnZXQgYXdheSB3aXRoIG5vdCBhZ2lu ZyBhdCB0aGUgZGVmYXVsdCBwcmlvcml0eSAqLw0KLQlpZiAoIXN1Y2Nlc3MgfHwgc2MtPnByaW9y aXR5ID09IERFRl9QUklPUklUWSkNCi0JCXJldHVybiBucl90b19zY2FuID4+IHNjLT5wcmlvcml0 eTsNCisJaWYgKCFucl90b19zY2FuICYmIHNjLT5wcmlvcml0eSA8IERFRl9QUklPUklUWSkNCisJ CW5yX3RvX3NjYW4gPSBtaW4oZXZpY3RhYmxlLCBTV0FQX0NMVVNURVJfTUFYKTsNCiANCiAJdHJh Y2VfYW5kcm9pZF92aF9tZ2xydV9hZ2luZ19ieXBhc3MobHJ1dmVjLCBtYXhfc2VxLA0KIAkJc3dh cHBpbmVzcywgJmJ5cGFzcywgJnlvdW5nKTsNCkBAIC00ODcyLDcgKzQ4ODksNyBAQCBzdGF0aWMg bG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjLCBpbnQgcw0KIAkJcmV0dXJuIHlvdW5nID8gLTEgOiAwOw0KIA0KIAkvKiBzdG9w IHNjYW5uaW5nIHRoaXMgbHJ1dmVjIGFzIGl0J3MgbG93IG9uIGNvbGQgZm9saW9zICovDQotCXJl dHVybiB0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxz ZSkgPyAtMSA6IDA7DQorCXJldHVybiBucl90b19zY2FuOw0KIH0NCiANCiBzdGF0aWMgYm9vbCBz aG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRy b2wgKnNjKQ0KQEAgLTQ5MDksNDcgKzQ5MjYsNTggQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0 X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykNCiAJ cmV0dXJuIHRydWU7DQogfQ0KIA0KKy8qDQorICogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zOg0K KyAqIDEuIERlZmVyIHRyeV90b19pbmNfbWF4X3NlcSgpIHRvIHdvcmtxdWV1ZXMgdG8gcmVkdWNl IGxhdGVuY3kgZm9yIG1lbWNnDQorICogICAgcmVjbGFpbS4NCisgKi8NCiBzdGF0aWMgYm9vbCB0 cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjKQ0KIHsNCi0JbG9uZyBucl90b19zY2FuOw0KLQl1bnNpZ25lZCBsb25nIHNjYW5u ZWQgPSAwOw0KKwlib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTsN CisJbG9uZyBucl9iYXRjaCwgbnJfdG9fc2NhbjsNCiAJaW50IHN3YXBwaW5lc3MgPSBnZXRfc3dh cHBpbmVzcyhscnV2ZWMsIHNjKTsNCisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVj X21lbWNnKGxydXZlYyk7DQogDQotCXdoaWxlICh0cnVlKSB7DQorCW5yX3RvX3NjYW4gPSBnZXRf bnJfdG9fc2NhbihscnV2ZWMsIHNjLCBtZW1jZywgc3dhcHBpbmVzcyk7DQorCWlmICghbnJfdG9f c2NhbikNCisJCW5lZWRfcm90YXRlID0gdHJ1ZTsNCisNCisJd2hpbGUgKG5yX3RvX3NjYW4gPiAw KSB7DQogCQlpbnQgZGVsdGE7DQorCQlERUZJTkVfTUFYX1NFUShscnV2ZWMpOw0KIA0KLQkJbnJf dG9fc2NhbiA9IGdldF9ucl90b19zY2FuKGxydXZlYywgc2MsIHN3YXBwaW5lc3MpOw0KLQkJaWYg KG5yX3RvX3NjYW4gPD0gMCkNCisJCWlmIChtZW1fY2dyb3VwX2JlbG93X21pbihzYy0+dGFyZ2V0 X21lbV9jZ3JvdXAsIG1lbWNnKSkgew0KKwkJCW5lZWRfcm90YXRlID0gdHJ1ZTsNCiAJCQlicmVh azsNCisJCX0NCiANCi0JCWRlbHRhID0gZXZpY3RfZm9saW9zKGxydXZlYywgc2MsIHN3YXBwaW5l c3MpOw0KKwkJaWYgKHNob3VsZF9ydW5fYWdpbmcobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNz LCAmbnJfdG9fc2NhbikpIHsNCisJCQlpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4 X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKQ0KKwkJCQluZWVkX3JvdGF0ZSA9IHRydWU7DQorCQkJ c2hvdWxkX2FnZSA9IHRydWU7DQorCQl9DQorDQorCQlucl9iYXRjaCA9IG1pbihucl90b19zY2Fu LCBNSU5fTFJVX0JBVENIKTsNCisJCWRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2 ZWMsIHNjLCBzd2FwcGluZXNzKTsNCiAJCWlmICghZGVsdGEpDQogCQkJYnJlYWs7DQogDQotCQlz Y2FubmVkICs9IGRlbHRhOw0KLQkJaWYgKHNjYW5uZWQgPj0gbnJfdG9fc2NhbikNCisJCWlmIChz aG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSkNCiAJCQlicmVhazsNCiANCi0JCWlmIChzaG91 bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSkNCisJCS8qIEZvciBjZ3JvdXAgcmVjbGFpbSwgZmFp cm5lc3MgaXMgaGFuZGxlZCBieSBpdGVyYXRvciwgbm90IHJvdGF0aW9uICovDQorCQlpZiAocm9v dF9yZWNsYWltKHNjKSAmJiBzaG91bGRfYWdlKQ0KIAkJCWJyZWFrOw0KIA0KIAkJY29uZF9yZXNj aGVkKCk7DQogCX0NCiANCi0JLyoNCi0JICogSWYgdG9vIG1hbnkgZmlsZSBjYWNoZSBpbiB0aGUg Y29sZGVzdCBnZW5lcmF0aW9uIGNhbid0IGJlIGV2aWN0ZWQNCi0JICogZHVlIHRvIGJlaW5nIGRp cnR5LCB3YWtlIHVwIHRoZSBmbHVzaGVyLg0KLQkgKi8NCi0JaWYgKHNjLT5uci51bnF1ZXVlZF9k aXJ0eSAmJiBzYy0+bnIudW5xdWV1ZWRfZGlydHkgPT0gc2MtPm5yLmZpbGVfdGFrZW4pDQotCQl3 YWtldXBfZmx1c2hlcl90aHJlYWRzKFdCX1JFQVNPTl9WTVNDQU4pOw0KLQ0KLQkvKiB3aGV0aGVy IHRoaXMgbHJ1dmVjIHNob3VsZCBiZSByb3RhdGVkICovDQotCXJldHVybiBucl90b19zY2FuIDwg MDsNCisJcmV0dXJuIG5lZWRfcm90YXRlOw0KIH0NCiANCiBzdGF0aWMgaW50IHNocmlua19vbmUo c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykNCiB7DQotCWJv b2wgc3VjY2VzczsNCisJYm9vbCBuZWVkX3JvdGF0ZTsNCiAJdW5zaWduZWQgbG9uZyBzY2FubmVk ID0gc2MtPm5yX3NjYW5uZWQ7DQogCXVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkID0gc2MtPm5yX3Jl Y2xhaW1lZDsNCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZl Yyk7DQpAQCAtNDk2Nyw3ICs0OTk1LDcgQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBs cnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpDQogCQltZW1jZ19tZW1vcnlf ZXZlbnQobWVtY2csIE1FTUNHX0xPVyk7DQogCX0NCiANCi0Jc3VjY2VzcyA9IHRyeV90b19zaHJp bmtfbHJ1dmVjKGxydXZlYywgc2MpOw0KKwluZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1 dmVjKGxydXZlYywgc2MpOw0KIA0KIAlzaHJpbmtfc2xhYihzYy0+Z2ZwX21hc2ssIHBnZGF0LT5u b2RlX2lkLCBtZW1jZywgc2MtPnByaW9yaXR5KTsNCiANCkBAIC00OTc3LDEwICs1MDA1LDEwIEBA IHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2Fu X2NvbnRyb2wgKnNjKQ0KIA0KIAlmbHVzaF9yZWNsYWltX3N0YXRlKHNjKTsNCiANCi0JaWYgKHN1 Y2Nlc3MgJiYgbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKQ0KKwlpZiAobmVlZF9yb3RhdGUgJiYg bWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKQ0KIAkJcmV0dXJuIE1FTUNHX0xSVV9ZT1VORzsNCiAN Ci0JaWYgKCFzdWNjZXNzICYmIGxydXZlY19pc19zaXphYmxlKGxydXZlYywgc2MpKQ0KKwlpZiAo IW5lZWRfcm90YXRlICYmIGxydXZlY19pc19zaXphYmxlKGxydXZlYywgc2MpKQ0KIAkJcmV0dXJu IDA7DQogDQogCS8qIG9uZSByZXRyeSBpZiBvZmZsaW5lZCBvciB0b28gc21hbGwgKi8NCkBAIC01 NTMyLDYgKzU1NjAsNyBAQCBzdGF0aWMgaW50IHJ1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLA0KIHN0YXRpYyBpbnQgcnVuX2V2aWN0aW9uKHN0cnVjdCBs cnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNj LA0KIAkJCWludCBzd2FwcGluZXNzLCB1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pDQogew0K KwlpbnQgbnJfYmF0Y2g7DQogCURFRklORV9NQVhfU0VRKGxydXZlYyk7DQogDQogCWlmIChzZXEg KyBNSU5fTlJfR0VOUyA+IG1heF9zZXEpDQpAQCAtNTU0OCw3ICs1NTc3LDggQEAgc3RhdGljIGlu dCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwg c3RydWN0IHNjYW5fY28NCiAJCWlmIChzYy0+bnJfcmVjbGFpbWVkID49IG5yX3RvX3JlY2xhaW0p DQogCQkJcmV0dXJuIDA7DQogDQotCQlpZiAoIWV2aWN0X2ZvbGlvcyhscnV2ZWMsIHNjLCBzd2Fw cGluZXNzKSkNCisJCW5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy0+bnJfcmVjbGFp bWVkLCBNQVhfTFJVX0JBVENIKTsNCisJCWlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2 ZWMsIHNjLCBzd2FwcGluZXNzKSkNCiAJCQlyZXR1cm4gMDsNCiANCiAJCWNvbmRfcmVzY2hlZCgp Ow0K