Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp4512285pxu; Mon, 21 Dec 2020 14:44:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJw96179QulPMuvDccaHtKLyY8f1WnlxgbkGFw4rJWMFvMO1XXEew7k6i4JTEqQnA2M0gGD2 X-Received: by 2002:a17:906:8617:: with SMTP id o23mr17343848ejx.274.1608590647248; Mon, 21 Dec 2020 14:44:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1608590647; cv=none; d=google.com; s=arc-20160816; b=ekCwxo65pcxSvROYpFJxmVChRVyMioVV6btDkbzSxHetuP4RfezX/c7/jW76Dni/Z8 d25Go5DVWPe5YjHEHmOLu6u7Zce0Nz4Z1wRonnWt6lk7HxBEe3VVDFh/TQTMnkk4dgi6 63TNipZA0bv6CQumr7G3rS8LwyGc7HlOCKN+n0jYAnUO+qOdtYzTcDjMSc48lyvNalmb /YGGVjnF1ovr46PvuAsWWPjk5158CWH0NVRo3uXPixQ2bsOIBIpoLNqTbyeQZhIACJ4Y 8YbtcAhiSKNQUoNMzCfBBDVss5n6BT7gm3iwkDhsvP9YD6x5CoJ21PpCagF6mGu48dxA WFUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from; bh=0XbSBuOv+ncaLFNsQdR85zlwltlfuhufOs6hXpLDjDw=; b=zy5Zjqk6+mJqRN+33+b/fmbn2BD72bTczVM8heOgKtlYOMggS40326iLmhbcf+Cm7E o8i/NggSXgmHFgOTJsz2o+r7XKS9fzfeFk376k9wp0QJ83YkYWEQIoN0u8av6ZvB/tiI FJatqiBINm1RS2spisZARghmW5hzvMl1djCMS50mtwk6doYQ3Qt/PeQr27Bopsyvgk+H R6QIo3l2mMf/g2+3YaNJ1DMWMnhAA85DzgEQZ7GfhYbdX+RMIKnLOHuEb/CT/Gf3Vfmp GfXxqNJLF+kNJw3/KPEeDJNCTEIIVhjWt/qG+GwQgBTnXCK+Zc/6aV8VSmQMyB5sFiKp xKkA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z4si9708083ejc.686.2020.12.21.14.43.44; Mon, 21 Dec 2020 14:44:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726080AbgLUWnQ (ORCPT + 99 others); Mon, 21 Dec 2020 17:43:16 -0500 Received: from szxga02-in.huawei.com ([45.249.212.188]:2918 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725938AbgLUWnQ (ORCPT ); Mon, 21 Dec 2020 17:43:16 -0500 Received: from DGGEMM402-HUB.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4D0Dws1wW0z57bw; Tue, 22 Dec 2020 06:41:49 +0800 (CST) Received: from dggemi709-chm.china.huawei.com (10.3.20.108) by DGGEMM402-HUB.china.huawei.com (10.3.20.210) with Microsoft SMTP Server (TLS) id 14.3.498.0; Tue, 22 Dec 2020 06:42:31 +0800 Received: from dggemi761-chm.china.huawei.com (10.1.198.147) by dggemi709-chm.china.huawei.com (10.3.20.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2106.2; Tue, 22 Dec 2020 06:42:31 +0800 Received: from dggemi761-chm.china.huawei.com ([10.9.49.202]) by dggemi761-chm.china.huawei.com ([10.9.49.202]) with mapi id 15.01.2106.002; Tue, 22 Dec 2020 06:42:31 +0800 From: "Song Bao Hua (Barry Song)" To: Vitaly Wool CC: Shakeel Butt , Minchan Kim , Mike Galbraith , LKML , linux-mm , Sebastian Andrzej Siewior , NitinGupta , Sergey Senozhatsky , Andrew Morton Subject: RE: [PATCH] zsmalloc: do not use bit_spin_lock Thread-Topic: [PATCH] zsmalloc: do not use bit_spin_lock Thread-Index: AQHW1mZAeBjE5clI7UKUuMSOCQsyuqoBSTyAgAAghwCAAAhXgIAAhndA//+NyICAAIW5IP//jYeAgACME8A= Date: Mon, 21 Dec 2020 22:42:31 +0000 Message-ID: References: <18669bd607ae9efbf4e00e36532c7aa167d0fa12.camel@gmx.de> <20201220002228.38697-1-vitaly.wool@konsulko.com> <8cc0e01fd03245a4994f2e0f54b264fa@hisilicon.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.126.200.103] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogVml0YWx5IFdvb2wgW21h aWx0bzp2aXRhbHkud29vbEBrb25zdWxrby5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVy IDIyLCAyMDIwIDExOjEyIEFNDQo+IFRvOiBTb25nIEJhbyBIdWEgKEJhcnJ5IFNvbmcpIDxzb25n LmJhby5odWFAaGlzaWxpY29uLmNvbT4NCj4gQ2M6IFNoYWtlZWwgQnV0dCA8c2hha2VlbGJAZ29v Z2xlLmNvbT47IE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5vcmc+OyBNaWtlDQo+IEdhbGJy YWl0aCA8ZWZhdWx0QGdteC5kZT47IExLTUwgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+ OyBsaW51eC1tbQ0KPiA8bGludXgtbW1Aa3ZhY2sub3JnPjsgU2ViYXN0aWFuIEFuZHJ6ZWogU2ll d2lvciA8YmlnZWFzeUBsaW51dHJvbml4LmRlPjsNCj4gTml0aW5HdXB0YSA8bmd1cHRhQHZmbGFy ZS5vcmc+OyBTZXJnZXkgU2Vub3poYXRza3kNCj4gPHNlcmdleS5zZW5vemhhdHNreS53b3JrQGdt YWlsLmNvbT47IEFuZHJldyBNb3J0b24NCj4gPGFrcG1AbGludXgtZm91bmRhdGlvbi5vcmc+DQo+ IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIHpzbWFsbG9jOiBkbyBub3QgdXNlIGJpdF9zcGluX2xvY2sN Cj4gDQo+IE9uIE1vbiwgRGVjIDIxLCAyMDIwIGF0IDEwOjMwIFBNIFNvbmcgQmFvIEh1YSAoQmFy cnkgU29uZykNCj4gPHNvbmcuYmFvLmh1YUBoaXNpbGljb24uY29tPiB3cm90ZToNCj4gPg0KPiA+ DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBTaGFr ZWVsIEJ1dHQgW21haWx0bzpzaGFrZWVsYkBnb29nbGUuY29tXQ0KPiA+ID4gU2VudDogVHVlc2Rh eSwgRGVjZW1iZXIgMjIsIDIwMjAgMTA6MDMgQU0NCj4gPiA+IFRvOiBTb25nIEJhbyBIdWEgKEJh cnJ5IFNvbmcpIDxzb25nLmJhby5odWFAaGlzaWxpY29uLmNvbT4NCj4gPiA+IENjOiBWaXRhbHkg V29vbCA8dml0YWx5Lndvb2xAa29uc3Vsa28uY29tPjsgTWluY2hhbiBLaW0NCj4gPG1pbmNoYW5A a2VybmVsLm9yZz47DQo+ID4gPiBNaWtlIEdhbGJyYWl0aCA8ZWZhdWx0QGdteC5kZT47IExLTUwg PGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+Ow0KPiBsaW51eC1tbQ0KPiA+ID4gPGxpbnV4 LW1tQGt2YWNrLm9yZz47IFNlYmFzdGlhbiBBbmRyemVqIFNpZXdpb3IgPGJpZ2Vhc3lAbGludXRy b25peC5kZT47DQo+ID4gPiBOaXRpbkd1cHRhIDxuZ3VwdGFAdmZsYXJlLm9yZz47IFNlcmdleSBT ZW5vemhhdHNreQ0KPiA+ID4gPHNlcmdleS5zZW5vemhhdHNreS53b3JrQGdtYWlsLmNvbT47IEFu ZHJldyBNb3J0b24NCj4gPiA+IDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPg0KPiA+ID4gU3Vi amVjdDogUmU6IFtQQVRDSF0genNtYWxsb2M6IGRvIG5vdCB1c2UgYml0X3NwaW5fbG9jaw0KPiA+ ID4NCj4gPiA+IE9uIE1vbiwgRGVjIDIxLCAyMDIwIGF0IDEyOjA2IFBNIFNvbmcgQmFvIEh1YSAo QmFycnkgU29uZykNCj4gPiA+IDxzb25nLmJhby5odWFAaGlzaWxpY29uLmNvbT4gd3JvdGU6DQo+ ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gPiA+ID4gPiBGcm9tOiBTaGFrZWVsIEJ1dHQgW21haWx0bzpzaGFrZWVsYkBnb29n bGUuY29tXQ0KPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDIyLCAyMDIwIDg6NTAg QU0NCj4gPiA+ID4gPiBUbzogVml0YWx5IFdvb2wgPHZpdGFseS53b29sQGtvbnN1bGtvLmNvbT4N Cj4gPiA+ID4gPiBDYzogTWluY2hhbiBLaW0gPG1pbmNoYW5Aa2VybmVsLm9yZz47IE1pa2UgR2Fs YnJhaXRoIDxlZmF1bHRAZ214LmRlPjsNCj4gTEtNTA0KPiA+ID4gPiA+IDxsaW51eC1rZXJuZWxA dmdlci5rZXJuZWwub3JnPjsgbGludXgtbW0gPGxpbnV4LW1tQGt2YWNrLm9yZz47IFNvbmcNCj4g QmFvDQo+ID4gPiBIdWENCj4gPiA+ID4gPiAoQmFycnkgU29uZykgPHNvbmcuYmFvLmh1YUBoaXNp bGljb24uY29tPjsgU2ViYXN0aWFuIEFuZHJ6ZWogU2lld2lvcg0KPiA+ID4gPiA+IDxiaWdlYXN5 QGxpbnV0cm9uaXguZGU+OyBOaXRpbkd1cHRhIDxuZ3VwdGFAdmZsYXJlLm9yZz47IFNlcmdleQ0K PiA+ID4gU2Vub3poYXRza3kNCj4gPiA+ID4gPiA8c2VyZ2V5LnNlbm96aGF0c2t5LndvcmtAZ21h aWwuY29tPjsgQW5kcmV3IE1vcnRvbg0KPiA+ID4gPiA+IDxha3BtQGxpbnV4LWZvdW5kYXRpb24u b3JnPg0KPiA+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIHpzbWFsbG9jOiBkbyBub3QgdXNl IGJpdF9zcGluX2xvY2sNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIE1vbiwgRGVjIDIxLCAyMDIw IGF0IDExOjIwIEFNIFZpdGFseSBXb29sIDx2aXRhbHkud29vbEBrb25zdWxrby5jb20+DQo+ID4g PiB3cm90ZToNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBPbiBNb24sIERlYyAyMSwgMjAyMCBh dCA2OjI0IFBNIE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5vcmc+IHdyb3RlOg0KPiA+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBPbiBTdW4sIERlYyAyMCwgMjAyMCBhdCAwMjoyMjoyOEFN ICswMjAwLCBWaXRhbHkgV29vbCB3cm90ZToNCj4gPiA+ID4gPiA+ID4gPiB6c21hbGxvYyB0YWtl cyBiaXQgc3BpbmxvY2sgaW4gaXRzIF9tYXAoKSBjYWxsYmFjayBhbmQgcmVsZWFzZXMNCj4gaXQN Cj4gPiA+ID4gPiA+ID4gPiBvbmx5IGluIHVubWFwKCkgd2hpY2ggaXMgdW5zYWZlIGFuZCBsZWFk cyB0byB6c3dhcCBjb21wbGFpbmluZw0KPiA+ID4gPiA+ID4gPiA+IGFib3V0IHNjaGVkdWxpbmcg aW4gYXRvbWljIGNvbnRleHQuDQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBUbyBm aXggdGhhdCBhbmQgdG8gaW1wcm92ZSBSVCBwcm9wZXJ0aWVzIG9mIHpzbWFsbG9jLCByZW1vdmUg dGhhdA0KPiA+ID4gPiA+ID4gPiA+IGJpdCBzcGlubG9jayBjb21wbGV0ZWx5IGFuZCB1c2UgYSBi aXQgZmxhZyBpbnN0ZWFkLg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBJIGRvbid0IHdh bnQgdG8gdXNlIHN1Y2ggb3BlbiBjb2RlIGZvciB0aGUgbG9jay4NCj4gPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gSSBzZWUgZnJvbSBNaWtlJ3MgcGF0Y2gsIHJlY2VudCB6c3dhcCBjaGFuZ2Ug aW50cm9kdWNlZCB0aGUgbG9ja2RlcA0KPiA+ID4gPiA+ID4gPiBzcGxhdCBidWcgYW5kIHlvdSB3 YW50IHRvIGltcHJvdmUgenNtYWxsb2MgdG8gZml4IHRoZSB6c3dhcCBidWcNCj4gYW5kDQo+ID4g PiA+ID4gPiA+IGludHJvZHVjZSB0aGlzIHBhdGNoIHdpdGggYWxsb3dpbmcgcHJlZW1wdGlvbiBl bmFibGluZy4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBUaGlzIHVuZGVyc3RhbmRpbmcgaXMg dXBzaWRlIGRvd24uIFRoZSBjb2RlIGluIHpzd2FwIHlvdSBhcmUgcmVmZXJyaW5nDQo+ID4gPiA+ ID4gPiB0byBpcyBub3QgYnVnZ3kuICBZb3UgbWF5IGNsYWltIHRoYXQgaXQgaXMgc3Vib3B0aW1h bCBidXQgdGhlcmUgaXMNCj4gPiA+ID4gPiA+IG5vdGhpbmcgd3JvbmcgaW4gdGFraW5nIGEgbXV0 ZXguDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSXMgdGhpcyBzdWJvcHRpbWFs IGZvciBhbGwgb3IganVzdCB0aGUgaGFyZHdhcmUgYWNjZWxlcmF0b3JzPyBTb3JyeSwNCj4gSQ0K PiA+ID4gPiA+IGFtIG5vdCB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIGNyeXB0byBBUEkuIElmIEkg c2VsZWN0IGx6byBvciBsejQgYXMNCj4gYQ0KPiA+ID4gPiA+IHpzd2FwIGNvbXByZXNzb3Igd2ls bCB0aGUgW2RlXWNvbXByZXNzaW9uIGJlIGFzeW5jIG9yIHN5bmM/DQo+ID4gPiA+DQo+ID4gPiA+ IFJpZ2h0IG5vdywgaW4gY3J5cHRvIHN1YnN5c3RlbSwgbmV3IGRyaXZlcnMgYXJlIHJlcXVpcmVk IHRvIHdyaXRlIGJhc2VkDQo+IG9uDQo+ID4gPiA+IGFzeW5jIEFQSXMuIFRoZSBvbGQgc3luYyBB UEkgY2FuJ3Qgd29yayBpbiBuZXcgYWNjZWxlcmF0b3IgZHJpdmVycyBhcw0KPiB0aGV5DQo+ID4g PiA+IGFyZSBub3Qgc3VwcG9ydGVkIGF0IGFsbC4NCj4gPiA+ID4NCj4gPiA+ID4gT2xkIGRyaXZl cnMgYXJlIHVzZWQgdG8gc3luYywgYnV0IHRoZXkndmUgZ290IGFzeW5jIHdyYXBwZXJzIHRvIHN1 cHBvcnQNCj4gYXN5bmMNCj4gPiA+ID4gQVBJcy4gRWcuDQo+ID4gPiA+IGNyeXB0bzogYWNvbXAg LSBhZGQgc3VwcG9ydCBmb3IgbHo0IHZpYSBzY29tcA0KPiA+ID4gPg0KPiA+ID4NCj4gaHR0cHM6 Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXgu Z2l0L2NvbW1pdC8NCj4gPiA+IGNyeXB0by9sejQuYz9pZD04Y2Q5MzMwZTBhNjE1YzkzMTAzN2Q0 ZGVmOThiNWNlMGQ1NDBmMDhkDQo+ID4gPiA+DQo+ID4gPiA+IGNyeXB0bzogYWNvbXAgLSBhZGQg c3VwcG9ydCBmb3IgbHpvIHZpYSBzY29tcA0KPiA+ID4gPg0KPiA+ID4NCj4gaHR0cHM6Ly9naXQu a2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0L2Nv bW1pdC8NCj4gPiA+IGNyeXB0by9sem8uYz9pZD1hYzlkMmM0YjM5ZTAyMmQyYzYxNDg2YmZjMzNi NzMwY2ZkMDI4OThlDQo+ID4gPiA+DQo+ID4gPiA+IHNvIHRoZXkgYXJlIHN1cHBvcnRpbmcgYXN5 bmMgQVBJcyBidXQgdGhleSBhcmUgc3RpbGwgd29ya2luZyBpbiBzeW5jIG1vZGUNCj4gPiA+IGFz DQo+ID4gPiA+IHRob3NlIG9sZCBkcml2ZXJzIGRvbid0IHNsZWVwLg0KPiA+ID4gPg0KPiA+ID4N Cj4gPiA+IEdvb2QgdG8ga25vdyB0aGF0IHRob3NlIGFyZSBzeW5jIGJlY2F1c2UgSSB3YW50IHRo ZW0gdG8gYmUgc3luYy4NCj4gPiA+IFBsZWFzZSBub3RlIHRoYXQgenN3YXAgaXMgYSBjYWNoZSBp biBmcm9udCBvZiBhIHJlYWwgc3dhcCBhbmQgdGhlIGxvYWQNCj4gPiA+IG9wZXJhdGlvbiBpcyBs YXRlbmN5IHNlbnNpdGl2ZSBhcyBpdCBjb21lcyBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoIGFuZA0K PiA+ID4gZGlyZWN0bHkgaW1wYWN0cyB0aGUgYXBwbGljYXRpb25zLiBJIGRvdWJ0IGRlY29tcHJl c3Npbmcgc3luY2hyb25vdXNseQ0KPiA+ID4gYSA0ayBwYWdlIG9uIGEgY3B1IHdpbGwgYmUgY29z dGxpZXIgdGhhbiBhc3luY2hyb25vdXNseSBkZWNvbXByZXNzaW5nDQo+ID4gPiB0aGUgc2FtZSBw YWdlIGZyb20gaGFyZHdhcmUgYWNjZWxlcmF0b3JzLg0KPiA+DQo+ID4gSWYgeW91IHJlYWQgdGhl IG9sZCBwYXBlcjoNCj4gPg0KPiBodHRwczovL3d3dy5pYm0uY29tL3N1cHBvcnQvcGFnZXMvbmV3 LWxpbnV4LXpzd2FwLWNvbXByZXNzaW9uLWZ1bmN0aW9uYWxpdA0KPiB5DQo+ID4gQmVjYXVzZSB0 aGUgaGFyZHdhcmUgYWNjZWxlcmF0b3Igc3BlZWRzIHVwIGNvbXByZXNzaW9uLCBsb29raW5nIGF0 IHRoZSB6c3dhcA0KPiA+IG1ldHJpY3Mgd2Ugb2JzZXJ2ZWQgdGhhdCB0aGVyZSB3ZXJlIG1vcmUg c3RvcmUgYW5kIGxvYWQgcmVxdWVzdHMgaW4gYSBnaXZlbg0KPiA+IGFtb3VudCBvZiB0aW1lLCB3 aGljaCBmaWxsZWQgdXAgdGhlIHpzd2FwIHBvb2wgZmFzdGVyIHRoYW4gYSBzb2Z0d2FyZQ0KPiA+ IGNvbXByZXNzaW9uIHJ1bi4gQmVjYXVzZSBvZiB0aGlzIGJlaGF2aW9yLCB3ZSBzZXQgdGhlIG1h eF9wb29sX3BlcmNlbnQNCj4gPiBwYXJhbWV0ZXIgdG8gMzAgZm9yIHRoZSBoYXJkd2FyZSBjb21w cmVzc2lvbiBydW5zIC0gdGhpcyBtZWFucyB0aGF0IHpzd2FwDQo+ID4gY2FuIHVzZSB1cCB0byAz MCUgb2YgdGhlIDEwR0Igb2YgdG90YWwgbWVtb3J5Lg0KPiA+DQo+ID4gU28gdXNpbmcgaGFyZHdh cmUgYWNjZWxlcmF0b3JzLCB3ZSBnZXQgYSBjaGFuY2UgdG8gc3BlZWQgdXAgY29tcHJlc3Npb24N Cj4gPiB3aGlsZSBkZWNyZWFzaW5nIGNwdSB1dGlsaXphdGlvbi4NCj4gPg0KPiA+IEJUVywgSWYg aXQgaXMgbm90IGVhc3kgdG8gY2hhbmdlIHpzbWFsbG9jLCBvbmUgcXVpY2sgd29ya2Fyb3VuZCB3 ZSBtaWdodCBkbw0KPiA+IGluIHpzd2FwIGlzIGFkZGluZyB0aGUgYmVsb3cgYWZ0ZXIgYXBwbHlp bmcgTWlrZSdzIG9yaWdpbmFsIHBhdGNoOg0KPiA+DQo+ID4gaWYoaW5fYXRvbWljKCkpIC8qIGZv ciB6c21hbGxvYyAqLw0KPiA+ICAgICAgICAgd2hpbGUoIXRyeV93YWl0X2Zvcl9jb21wbGV0aW9u KCZyZXEtPmRvbmUpOw0KPiA+IGVsc2UgLyogZm9yIHpidWQsIHozZm9sZCAqLw0KPiA+ICAgICAg ICAgY3J5cHRvX3dhaXRfcmVxKC4uLi4pOw0KPiANCj4gSSBkb24ndCB0aGluayBJJ20gZ29pbmcg dG8gYWNrIHRoaXMsIHNvcnJ5Lg0KPiANCg0KRmFpciBlbm91Z2guIEFuZCBJIGFtIGFsc28gdGhp bmtpbmcgaWYgd2UgY2FuIG1vdmUgenBvb2xfdW5tYXBfaGFuZGxlKCkNCnF1aXRlIGFmdGVyIHpw b29sX21hcF9oYW5kbGUoKSBhcyBiZWxvdzoNCg0KCWRsZW4gPSBQQUdFX1NJWkU7DQoJc3JjID0g enBvb2xfbWFwX2hhbmRsZShlbnRyeS0+cG9vbC0+enBvb2wsIGVudHJ5LT5oYW5kbGUsIFpQT09M X01NX1JPKTsNCglpZiAoenBvb2xfZXZpY3RhYmxlKGVudHJ5LT5wb29sLT56cG9vbCkpDQoJCXNy YyArPSBzaXplb2Yoc3RydWN0IHpzd2FwX2hlYWRlcik7DQorCXpwb29sX3VubWFwX2hhbmRsZShl bnRyeS0+cG9vbC0+enBvb2wsIGVudHJ5LT5oYW5kbGUpOw0KDQoJYWNvbXBfY3R4ID0gcmF3X2Nw dV9wdHIoZW50cnktPnBvb2wtPmFjb21wX2N0eCk7DQoJbXV0ZXhfbG9jayhhY29tcF9jdHgtPm11 dGV4KTsNCglzZ19pbml0X29uZSgmaW5wdXQsIHNyYywgZW50cnktPmxlbmd0aCk7DQoJc2dfaW5p dF90YWJsZSgmb3V0cHV0LCAxKTsNCglzZ19zZXRfcGFnZSgmb3V0cHV0LCBwYWdlLCBQQUdFX1NJ WkUsIDApOw0KCWFjb21wX3JlcXVlc3Rfc2V0X3BhcmFtcyhhY29tcF9jdHgtPnJlcSwgJmlucHV0 LCAmb3V0cHV0LCBlbnRyeS0+bGVuZ3RoLCBkbGVuKTsNCglyZXQgPSBjcnlwdG9fd2FpdF9yZXEo Y3J5cHRvX2Fjb21wX2RlY29tcHJlc3MoYWNvbXBfY3R4LT5yZXEpLCAmYWNvbXBfY3R4LT53YWl0 KTsNCgltdXRleF91bmxvY2soYWNvbXBfY3R4LT5tdXRleCk7DQoNCi0JenBvb2xfdW5tYXBfaGFu ZGxlKGVudHJ5LT5wb29sLT56cG9vbCwgZW50cnktPmhhbmRsZSk7DQoNClNpbmNlIHNyYyBpcyBh bHdheXMgbG93IG1lbW9yeSBhbmQgd2Ugb25seSBuZWVkIGl0cyB2aXJ0dWFsIGFkZHJlc3MNCnRv IGdldCB0aGUgcGFnZSBvZiBzcmMgaW4gc2dfaW5pdF9vbmUoKS4gV2UgZG9uJ3QgYWN0dWFsbHkg cmVhZCBpdA0KYnkgQ1BVIGFueXdoZXJlLg0KDQo+IEJlc3QgcmVnYXJkcywNCj4gICAgVml0YWx5 DQo+IA0KPiA+IGNyeXB0b193YWl0X3JlcSgpIGlzIGFjdHVhbGx5IGRvaW5nIHdhaXRfZm9yX2Nv bXBsZXRpb24oKToNCj4gPiBzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fd2FpdF9yZXEoaW50IGVy ciwgc3RydWN0IGNyeXB0b193YWl0ICp3YWl0KQ0KPiA+IHsNCj4gPiAgICAgICAgIHN3aXRjaCAo ZXJyKSB7DQo+ID4gICAgICAgICBjYXNlIC1FSU5QUk9HUkVTUzoNCj4gPiAgICAgICAgIGNhc2Ug LUVCVVNZOg0KPiA+ICAgICAgICAgICAgICAgICB3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0LT5j b21wbGV0aW9uKTsNCj4gPiAgICAgICAgICAgICAgICAgcmVpbml0X2NvbXBsZXRpb24oJndhaXQt PmNvbXBsZXRpb24pOw0KPiA+ICAgICAgICAgICAgICAgICBlcnIgPSB3YWl0LT5lcnI7DQo+ID4g ICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICAgICAgICAgfQ0KPiA+DQo+ID4gICAgICAgICBy ZXR1cm4gZXJyOw0KPiA+IH0NCj4gPg0KVGhhbmtzDQpCYXJyeQ0K