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 X-Spam-Level: X-Spam-Status: No, score=-12.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C8F8C43381 for ; Thu, 28 Mar 2019 14:34:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2441520823 for ; Thu, 28 Mar 2019 14:34:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="APj55UM2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726210AbfC1OeH (ORCPT ); Thu, 28 Mar 2019 10:34:07 -0400 Received: from mail-eopbgr110135.outbound.protection.outlook.com ([40.107.11.135]:43171 "EHLO GBR01-CWL-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725849AbfC1OeH (ORCPT ); Thu, 28 Mar 2019 10:34:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zapvIoP17IhE8G9W1YU/9GSk+5zGuU2LkBzMgIYo4Sc=; b=APj55UM2j/7/chmADdiFwuYL54W2TATjvxO9hB2TSlJlhtcFp5gTG/73iupBqTSkJZasim4kNkrGre/bDbPu0qwYF5a7mz2iIL8gVm6LWOXQlDCwl3xMH/W6gu0iGM3xzWsi4sV/L1kGSO22ou8064KPRmvscN2fcs6llOXMusk= Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (20.176.139.20) by LO2P265MB0493.GBRP265.PROD.OUTLOOK.COM (10.166.105.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.16; Thu, 28 Mar 2019 14:33:49 +0000 Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157]) by LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157%3]) with mapi id 15.20.1750.017; Thu, 28 Mar 2019 14:33:49 +0000 From: Gary Guo To: Anup Patel CC: Anup Patel , Palmer Dabbelt , Albert Ou , Atish Patra , Paul Walmsley , Christoph Hellwig , Mike Rapoport , "linux-riscv@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] RISC-V: Implement ASID allocator Thread-Topic: [PATCH v2] RISC-V: Implement ASID allocator Thread-Index: AQHU5TAIKaRDCttA7UazIjpcDaomMKYhDFQAgAAKGwCAAAWygA== Date: Thu, 28 Mar 2019 14:33:49 +0000 Message-ID: <449f865a-f224-776a-3a5e-04c4c212e682@garyguo.net> References: <20190328063211.13052-1-anup.patel@wdc.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LO2P265CA0451.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:e::31) To LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8c::20) authentication-results: spf=none (sender IP is ) smtp.mailfrom=gary@garyguo.net; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2001:630:212:238:3697:f6ff:fe55:55b1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1c897be9-4c6b-4cf0-63ee-08d6b38a6494 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020);SRVR:LO2P265MB0493; x-ms-traffictypediagnostic: LO2P265MB0493: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 0990C54589 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(396003)(39830400003)(366004)(136003)(346002)(376002)(189003)(199004)(55674003)(46003)(186003)(14444005)(966005)(36756003)(508600001)(6512007)(11346002)(53936002)(6116002)(6246003)(316002)(106356001)(256004)(6916009)(54906003)(31686004)(31696002)(25786009)(2616005)(30864003)(446003)(53546011)(7736002)(105586002)(486006)(2906002)(102836004)(386003)(68736007)(5660300002)(6306002)(8936002)(86362001)(6486002)(476003)(53946003)(97736004)(99286004)(305945005)(14454004)(71200400001)(7416002)(71190400001)(6506007)(81156014)(81166006)(8676002)(52116002)(4326008)(76176011)(6436002)(229853002);DIR:OUT;SFP:1102;SCL:1;SRVR:LO2P265MB0493;H:LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: garyguo.net does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: rNWeuW64QPmHvljzYtuW7flZzFOqjmoQBxhsNPFlXiAx6xd3JVQWdy2MDqX28GnpX9eOnllmTyA+6qL9Ft1P+9ShqIv1kyTL8xtM2duO6x+qLIC+JkiIFPJF6p/QofRq5kKmipV1P/T1cZhwJE8nSO+vff7dywLMVTn3akbHe+OQW9DW9BFI5oD5eQ+QVXkN9ijl5UZXdzJ5cB3lxPDrPtBE4YtMYAFWnbAKYUmYWBubo6vN149bYm/bjy8dYVJ3js/nEtCMiH9+9QxupVrZ4TKvRgV4ifUXamAcbdiS4JBrTjAPfZPZRdfedDjiP/cRD5ROuzwfZ/g6b6meZqhqOzk2jELe7PhewV+nArPBUygZ5rwIaLw6Exg0YmeJjMvSGMZ0LMQW7HR/8LNr18mGqt6JW0OE5MrqERRv0B20pfM= Content-Type: text/plain; charset="utf-8" Content-ID: <80AF79314FFE024997509E9EC34DEAAC@GBRP265.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 1c897be9-4c6b-4cf0-63ee-08d6b38a6494 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Mar 2019 14:33:49.6350 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB0493 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCk9uIDI4LzAzLzIwMTkgMTQ6MTMsIEFudXAgUGF0ZWwgd3JvdGU6DQo+IE9uIFRodSwgTWFy IDI4LCAyMDE5IGF0IDc6MDcgUE0gR2FyeSBHdW8gPGdhcnlAZ2FyeWd1by5uZXQ+IHdyb3RlOg0K Pj4NCj4+IEhpIEFudXAsDQo+Pg0KPj4gVGhlIGNvZGUgc3RpbGwgZG9lcyBub3QgdXNlIEFTSUQg aW4gVExCIGZsdXNoIHJvdXRpbmVzLiBXaXRob3V0IHRoaXMNCj4+IGFkZGVkIHRoZSBjb2RlIGRv ZXMgbm90IGJvb3Qgb24gc3lzdGVtcyB3aXRoIHRydWUgQVNJRCBzdXBwb3J0Lg0KPj4NCj4+IFdl IGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgY2FzZSBvZiBDT05URVhUSUQgb3ZlcmZsb3cgb24g MzItYml0DQo+PiBzeXN0ZW1zLiAzMi1iaXQgQ09OVEVYVElEIG1heSBvdmVyZmxvdyBpbiBhIG1v bnRoIHRpbWUuDQo+Pg0KPj4gUGxlYXNlIGFsbCBzZWUgbXkgaW5saW5lIGNvbW1lbnRzLg0KPj4N Cj4+IEJlc3QsDQo+PiBHYXJ5DQo+Pg0KPj4gT24gMjgvMDMvMjAxOSAwNjozMiwgQW51cCBQYXRl bCB3cm90ZToNCj4+PiBDdXJyZW50bHksIHdlIGRvIGxvY2FsIFRMQiBmbHVzaCBvbiBldmVyeSBN TSBzd2l0Y2guIFRoaXMgaXMgdmVyeSBoYXJzaA0KPj4+IG9uIHBlcmZvcm1hbmNlIGJlY2F1c2Ug d2UgYXJlIGZvcmNpbmcgcGFnZSB0YWJsZSB3YWxrcyBhZnRlciBldmVyeSBNTQ0KPj4+IHN3aXRj aC4NCj4+Pg0KPj4+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBBU0lEIGFsbG9jYXRvciBmb3IgYXNz aWduaW5nIGFuIEFTSUQgdG8gZXZlcnkgTU0NCj4+PiBjb250ZXh0LiBUaGUgbnVtYmVyIG9mIEFT SURzIGFyZSBsaW1pdGVkIGluIEhXIHNvIHdlIGNyZWF0ZSBhIGxvZ2ljYWwNCj4+PiBlbnRpdHkg bmFtZWQgQ09OVEVYVElEIGZvciBhc3NpZ25pbmcgdG8gTU0gY29udGV4dC4gVGhlIGxvd2VyIGJp dHMgb2YNCj4+PiBDT05URVhUSUQgYXJlIEFTSUQgYW5kIHVwcGVyIGJpdHMgYXJlIFZFUlNJT04g bnVtYmVyLiBUaGUgbnVtYmVyIG9mDQo+Pj4gdXNhYmxlIEFTSUQgYml0cyBzdXBwb3J0ZWQgYnkg SFcgYXJlIGRldGVjdGVkIGF0IGJvb3QtdGltZSBieSB3cml0aW5nDQo+Pj4gMXMgdG8gQVNJRCBi aXRzIGluIFNBVFAgQ1NSLiBUaGlzIG1lYW5zIGxhc3QgQVNJRCBpcyBhbHdheXMgcmVzZXJ2ZWQN Cj4+PiBiZWNhdXNlIGl0IGlzIHVzZWQgZm9yIGluaXRpYWwgTU0gY29udGV4dC4NCj4+Pg0KPj4+ IFdlIGFsbG9jYXRlIG5ldyBDT05URVhUSUQgb24gZmlyc3QgTU0gc3dpdGNoIGZvciBhIE1NIGNv bnRleHQgd2hlcmUNCj4+PiB0aGUgQVNJRCBpcyBhbGxvY2F0ZWQgZnJvbSBhbiBBU0lEIGJpdG1h cCBhbmQgVkVSU0lPTiBpcyBwcm92aWRlIGJ5DQo+Pj4gYW4gYXRvbWljIGNvdW50ZXIuIEF0IHRp bWUgb2YgYWxsb2NhdGluZyBuZXcgQ09OVEVYVElELCBpZiB3ZSBydW4gb3V0DQo+Pj4gb2YgYXZh aWxhYmxlIEFTSURzIHRoZW46DQo+Pj4gMS4gV2UgZmx1c2ggdGhlIEFTSUQgYml0bWFwDQo+Pj4g Mi4gSW5jcmVtZW50IGN1cnJlbnQgVkVSU0lPTiBhdG9taWMgY291bnRlcg0KPj4+IDMuIFJlLWFs bG9jYXRlIEFTSUQgZnJvbSBBU0lEIGJpdG1hcA0KPj4+IDQuIEZsdXNoIFRMQiBvbiBhbGwgQ1BV cw0KPj4+IDUuIFRyeSBDT05URVhUSUQgcmUtYXNzaWdubWVudCBvbiBhbGwgQ1BVcw0KPj4+DQo+ Pj4gVXNpbmcgYWJvdmUgYXBwcm9hY2gsIHdlIGhhdmUgdmlydHVhbGx5IGluZmluaXRlIENPTlRF WFRJRHMgb24tdG9wLW9mDQo+Pj4gbGltaXRlZCBudW1iZXIgb2YgSFcgQVNJRHMuIFRoaXMgYXBw cm9hY2ggaXMgaW5zcGlyZWQgZnJvbSBBU0lEIGFsbG9jYXRvcg0KPj4+IHVzZWQgZm9yIExpbnV4 IEFSTS9BUk02NCBidXQgd2UgaGF2ZSBhZGFwdGVkIGl0IGZvciBSSVNDLVYuIE92ZXJhbGwsDQo+ Pj4gdGhpcyBBU0lEIGFsbG9jYXRvciBoZWxwcyB1cyByZWR1Y2UgcmF0ZSBvZiBsb2NhbCBUTEIg Zmx1c2hlcyBvbiBldmVyeQ0KPj4+IENQVSB0aGVyZWJ5IGluY3JlYXNpbmcgcGVyZm9ybWFuY2Uu DQo+Pj4NCj4+PiBUaGlzIHBhdGNoIGlzIHRlc3RlZCBvbiBRRU1VL3ZpcnQgbWFjaGluZSBhbmQg U2lGaXZlIFVubGVhc2hlZCBib2FyZC4NCj4+PiBPbiBRRU1VL3ZpcnQgbWFjaGluZSwgd2Ugc2Vl IDEwJSAoYXBwcm94KSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3aXRoDQo+Pj4gU1cgZW11bGF0 ZWQgVExCcyBwcm92aWRlZCBieSBRRU1VLiBVbmZvcnR1bmF0ZWx5LCBBU0lEIGJpdHMgb2YgU0FU UCBDU1INCj4+PiBhcmUgbm90IGltcGxlbWVudGVkIG9uIFNpRml2ZSBVbmxlYXNoZWQgYm9hcmQg c28gd2UgZG9uJ3Qgc2VlIGFueSBjaGFuZ2UNCj4+PiBpbiBwZXJmb3JtYW5jZS4NCj4+Pg0KPj4+ IFNpZ25lZC1vZmYtYnk6IEdhcnkgR3VvIDxnYXJ5QGdhcnlndW8ubmV0Pg0KPj4gQ291bGQgeW91 IGFkZCBhIENvLWRldmVsb3BlZC1ieSBsaW5lIGluIGFkZGl0aW9uIHRvIFNpZ25lZC1vZmYtYnkg YXMNCj4+IHdlbGw/IFRoYW5rcy4NCj4+PiBTaWduZWQtb2ZmLWJ5OiBBbnVwIFBhdGVsIDxhbnVw LnBhdGVsQHdkYy5jb20+DQo+Pj4gLS0tDQo+Pj4gQ2hhbmdlcyBzaW5jZSB2MToNCj4+PiAtIFdl IGFkYXB0IGdvb2QgYXNwZWN0cyBmcm9tIEdhcnkgR3VvJ3MgQVNJRCBhbGxvY2F0b3IgaW1wbGVt ZW50YXRpb24NCj4+PiAgICAgYW5kIHByb3ZpZGUgZHVlIGNyZWRpdCB0byBoaW0gYnkgYWRkaW5n IGhpcyBTb0IuDQo+Pj4gLSBUcmFjayBBU0lEcyBhY3RpdmUgZHVyaW5nIGNvbnRleHQgZmx1c2gg YW5kIG1hcmsgdGhlbSBhcyByZXNlcnZlZA0KPj4+IC0gU2V0IEFTSUQgYml0cyB0byBhbGwgMXMg dG8gc2ltcGxpZnkgbnVtYmVyIG9mIEFTSUQgYml0IGRldGVjdGlvbg0KPj4+IC0gVXNlIGF0b21p Y19sb25nX3QgaW5zdGVhZCBvZiBhdG9taWM2NF90IGZvciBiZWluZyAzMmJpdCBmcmllbmRseQ0K Pj4+IC0gVXNlIHVuc2lnbmVkIGxvbmcgaW5zdGVhZCBvZiB1NjQgZm9yIGJlaW5nIDMyYml0IGZy aWVuZGx5DQo+Pj4gLSBVc2UgZmx1c2hfdGxiX2FsbCgpIGluc3RlYWQgb2YgbGF6eSBsb2NhbF90 bGJfZmx1c2hfYWxsKCkgYXQgdGltZQ0KPj4+ICAgICBvZiBjb250ZXh0IGZsdXNoDQo+Pj4NCj4+ PiBUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIExpbnV4LTUuMS1yYzIgYW5kIFRMQiBmbHVzaCBjbGVh bnVwIHBhdGNoZXMgdjQNCj4+PiBmcm9tIEdhcnkgR3VvLiBJdCBjYW4gYmUgYWxzbyBmb3VuZCBp biByaXNjdl9hc2lkX2FsbG9jYXRvcl92MiBicmFuY2gNCj4+PiBvZiBodHRwczovL2dpdGh1Yi5j b20vYXZwYXRlbC9saW51eC5naXQNCj4+PiAtLS0NCj4+PiAgICBhcmNoL3Jpc2N2L2luY2x1ZGUv YXNtL2Nzci5oICAgICAgICAgfCAgIDYgKw0KPj4+ICAgIGFyY2gvcmlzY3YvaW5jbHVkZS9hc20v bW11LmggICAgICAgICB8ICAgMSArDQo+Pj4gICAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9tbXVf Y29udGV4dC5oIHwgICAxICsNCj4+PiAgICBhcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMgICAgICAg ICAgICAgfCAgIDIgKw0KPj4+ICAgIGFyY2gvcmlzY3YvbW0vY29udGV4dC5jICAgICAgICAgICAg ICB8IDI0OSArKysrKysrKysrKysrKysrKysrKysrKysrLS0NCj4+PiAgICA1IGZpbGVzIGNoYW5n ZWQsIDI0NyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkNCj4+Pg0KPj4+IGRpZmYgLS1n aXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2Nzci5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2Fz bS9jc3IuaA0KPj4+IGluZGV4IDI4YTBkMWNiMzc0Yy4uY2UxOGFiOGY1M2VkIDEwMDY0NA0KPj4+ IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vY3NyLmgNCj4+PiArKysgYi9hcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL2Nzci5oDQo+Pj4gQEAgLTQ1LDEwICs0NSwxNiBAQA0KPj4+ICAgICNkZWZp bmUgU0FUUF9QUE4gICAgIF9BQygweDAwM0ZGRkZGLCBVTCkNCj4+PiAgICAjZGVmaW5lIFNBVFBf TU9ERV8zMiBfQUMoMHg4MDAwMDAwMCwgVUwpDQo+Pj4gICAgI2RlZmluZSBTQVRQX01PREUgICAg U0FUUF9NT0RFXzMyDQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX0JJVFMgICAgICAgOQ0KPj4+ICsj ZGVmaW5lIFNBVFBfQVNJRF9TSElGVCAgICAgIDIyDQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX01B U0sgICAgICAgX0FDKDB4MUZGLCBVTCkNCj4+PiAgICAjZWxzZQ0KPj4+ICAgICNkZWZpbmUgU0FU UF9QUE4gICAgIF9BQygweDAwMDAwRkZGRkZGRkZGRkYsIFVMKQ0KPj4+ICAgICNkZWZpbmUgU0FU UF9NT0RFXzM5IF9BQygweDgwMDAwMDAwMDAwMDAwMDAsIFVMKQ0KPj4+ICAgICNkZWZpbmUgU0FU UF9NT0RFICAgIFNBVFBfTU9ERV8zOQ0KPj4+ICsjZGVmaW5lIFNBVFBfQVNJRF9CSVRTICAgICAg IDE2DQo+Pj4gKyNkZWZpbmUgU0FUUF9BU0lEX1NISUZUICAgICAgNDQNCj4+PiArI2RlZmluZSBT QVRQX0FTSURfTUFTSyAgICAgICBfQUMoMHhGRkZGLCBVTCkNCj4+PiAgICAjZW5kaWYNCj4+Pg0K Pj4+ICAgIC8qIEludGVycnVwdCBFbmFibGUgYW5kIEludGVycnVwdCBQZW5kaW5nIGZsYWdzICov DQo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3Jp c2N2L2luY2x1ZGUvYXNtL21tdS5oDQo+Pj4gaW5kZXggNWRmMmRjY2RiYTEyLi40MmE5Y2EwZmUx ZmIgMTAwNjQ0DQo+Pj4gLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9tbXUuaA0KPj4+ICsr KyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11LmgNCj4+PiBAQCAtMTgsNiArMTgsNyBAQA0K Pj4+ICAgICNpZm5kZWYgX19BU1NFTUJMWV9fDQo+Pj4NCj4+PiAgICB0eXBlZGVmIHN0cnVjdCB7 DQo+Pj4gKyAgICAgYXRvbWljX2xvbmdfdCBpZDsNCj4+PiAgICAgICAgdm9pZCAqdmRzbzsNCj4+ PiAgICAjaWZkZWYgQ09ORklHX1NNUA0KPj4+ICAgICAgICAvKiBBIGxvY2FsIGljYWNoZSBmbHVz aCBpcyBuZWVkZWQgYmVmb3JlIHVzZXIgZXhlY3V0aW9uIGNhbiByZXN1bWUuICovDQo+Pj4gZGlm ZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvcmlz Y3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaA0KPj4+IGluZGV4IGJmNGYwOTdhOTA1MS4uYmE2 YWIzNWMxOGRjIDEwMDY0NA0KPj4+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2Nv bnRleHQuaA0KPj4+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaA0K Pj4+IEBAIC0zMCw2ICszMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihz dHJ1Y3QgbW1fc3RydWN0ICptbSwNCj4+PiAgICBzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19j b250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywNCj4+PiAgICAgICAgc3RydWN0IG1tX3N0 cnVjdCAqbW0pDQo+Pj4gICAgew0KPj4+ICsgICAgIGF0b21pY19sb25nX3NldCgmKG1tKS0+Y29u dGV4dC5pZCwgMCk7DQo+PiBQYXJlbnRoZXNpcyBhcm91bmQgbW0gaXNuJ3QgbmVjZXNzYXJ5DQo+ Pj4gICAgICAgIHJldHVybiAwOw0KPj4+ICAgIH0NCj4+Pg0KPj4+IGRpZmYgLS1naXQgYS9hcmNo L3Jpc2N2L2tlcm5lbC9oZWFkLlMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMNCj4+PiBpbmRl eCBmZTg4NGNkNjlhYmQuLmMzZjlhZGMwZDA1NCAxMDA2NDQNCj4+PiAtLS0gYS9hcmNoL3Jpc2N2 L2tlcm5lbC9oZWFkLlMNCj4+PiArKysgYi9hcmNoL3Jpc2N2L2tlcm5lbC9oZWFkLlMNCj4+PiBA QCAtOTUsNiArOTUsOCBAQCByZWxvY2F0ZToNCj4+PiAgICAgICAgbGEgYTIsIHN3YXBwZXJfcGdf ZGlyDQo+Pj4gICAgICAgIHNybCBhMiwgYTIsIFBBR0VfU0hJRlQNCj4+PiAgICAgICAgbGkgYTEs IFNBVFBfTU9ERQ0KPj4+ICsgICAgIGxpIGEwLCAoU0FUUF9BU0lEX01BU0sgPDwgU0FUUF9BU0lE X1NISUZUKQ0KPj4+ICsgICAgIG9yIGExLCBhMSwgYTANCj4+PiAgICAgICAgb3IgYTIsIGEyLCBh MQ0KPj4+DQo+Pj4gICAgICAgIC8qDQo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vY29u dGV4dC5jIGIvYXJjaC9yaXNjdi9tbS9jb250ZXh0LmMNCj4+PiBpbmRleCAwZjc4N2JjZDNhN2Eu LjEyMDVkMzNkMWIxYiAxMDA2NDQNCj4+PiAtLS0gYS9hcmNoL3Jpc2N2L21tL2NvbnRleHQuYw0K Pj4+ICsrKyBiL2FyY2gvcmlzY3YvbW0vY29udGV4dC5jDQo+Pj4gQEAgLTIsMTMgKzIsMjA5IEBA DQo+Pj4gICAgLyoNCj4+PiAgICAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhDQo+Pj4gICAgICogQ29weXJpZ2h0IChDKSAyMDE3IFNp Rml2ZQ0KPj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgV2VzdGVybiBEaWdpdGFsIENvcnBvcmF0 aW9uIG9yIGl0cyBhZmZpbGlhdGVzLg0KPj4+ICAgICAqLw0KPj4+DQo+Pj4gKyNpbmNsdWRlIDxs aW51eC9iaXRvcHMuaD4NCj4+PiAgICAjaW5jbHVkZSA8bGludXgvbW0uaD4NCj4+PiArI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4NCj4+Pg0KPj4+ICAgICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4N Cj4+PiAgICAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4NCj4+Pg0KPj4+ICtzdGF0aWMgYm9v bCB1c2VfYXNpZF9hbGxvY2F0b3I7DQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFzaWRfYml0 czsNCj4+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX2FzaWRzOw0KPj4+ICtzdGF0aWMgdW5z aWduZWQgbG9uZyBhc2lkX21hc2s7DQo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcnN0X3Zl cnNpb247DQo+Pj4gKw0KPj4+ICtzdGF0aWMgYXRvbWljX2xvbmdfdCBjdXJyZW50X3ZlcnNpb247 DQo+Pj4gKw0KPj4+ICtzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhjb250ZXh0X2xvY2spOw0K Pj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyAqY29udGV4dF9hc2lkX21hcDsNCj4+PiArDQo+Pj4g K3N0YXRpYyBERUZJTkVfUEVSX0NQVShhdG9taWNfbG9uZ190LCBhY3RpdmVfY29udGV4dCk7DQo+ Pj4gK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCByZXNlcnZlZF9jb250ZXh0 KTsNCj4+PiArDQo+Pj4gK3N0YXRpYyBib29sIGNoZWNrX3VwZGF0ZV9yZXNlcnZlZF9jb250ZXh0 KHVuc2lnbmVkIGxvbmcgY250eCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXdjbnR4KQ0KPj4+ICt7DQo+Pj4gKyAgICAgaW50IGNw dTsNCj4+PiArICAgICBib29sIGhpdCA9IGZhbHNlOw0KPj4+ICsNCj4+PiArICAgICAvKg0KPj4+ ICsgICAgICAqIEl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIHJlc2VydmVkIENPTlRFWFQgbG9va2lu ZyBmb3IgYSBtYXRjaC4NCj4+PiArICAgICAgKiBJZiB3ZSBmaW5kIG9uZSwgdGhlbiB3ZSBjYW4g dXBkYXRlIG91ciBtbSB0byB1c2UgbmV3IENPTlRFWFQNCj4+PiArICAgICAgKiAoaS5lLiB0aGUg c2FtZSBDT05URVhUIGluIHRoZSBjdXJyZW50X3ZlcnNpb24pIGJ1dCB3ZSBjYW4ndA0KPj4+ICsg ICAgICAqIGV4aXQgdGhlIGxvb3AgZWFybHksIHNpbmNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQg YWxsIGNvcGllcw0KPj4+ICsgICAgICAqIG9mIHRoZSBvbGQgQ09OVEVYVCBhcmUgdXBkYXRlZCB0 byByZWZsZWN0IHRoZSBtbS4gRmFpbHVyZSB0byBkbw0KPj4+ICsgICAgICAqIHNvIGNvdWxkIHJl c3VsdCBpbiB1cyBtaXNzaW5nIHRoZSByZXNlcnZlZCBDT05URVhUIGluIGEgZnV0dXJlDQo+Pj4g KyAgICAgICogdmVyc2lvbi4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBmb3JfZWFjaF9wb3Nz aWJsZV9jcHUoY3B1KSB7DQo+Pj4gKyAgICAgICAgICAgICBpZiAocGVyX2NwdShyZXNlcnZlZF9j b250ZXh0LCBjcHUpID09IGNudHgpIHsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgaGl0ID0g dHJ1ZTsNCj4+PiArICAgICAgICAgICAgICAgICAgICAgcGVyX2NwdShyZXNlcnZlZF9jb250ZXh0 LCBjcHUpID0gbmV3Y250eDsNCj4+PiArICAgICAgICAgICAgIH0NCj4+PiArICAgICB9DQo+Pj4g Kw0KPj4+ICsgICAgIHJldHVybiBoaXQ7DQo+Pj4gK30NCj4+PiArDQo+Pj4gKy8qIE5vdGU6IG11 c3QgYmUgY2FsbGVkIHdpdGggY29udGV4dF9sb2NrIGhlbGQgKi8NCj4+PiArc3RhdGljIHZvaWQg X19mbHVzaF9jb250ZXh0KHZvaWQpDQo+Pj4gK3sNCj4+PiArICAgICBpbnQgaTsNCj4+PiArICAg ICB1bnNpZ25lZCBsb25nIGNudHg7DQo+Pj4gKw0KPj4+ICsgICAgIC8qIFVwZGF0ZSB0aGUgbGlz dCBvZiByZXNlcnZlZCBBU0lEcyBhbmQgdGhlIEFTSUQgYml0bWFwLiAqLw0KPj4+ICsgICAgIGJp dG1hcF9jbGVhcihjb250ZXh0X2FzaWRfbWFwLCAwLCBudW1fYXNpZHMpOw0KPj4+ICsNCj4+PiAr ICAgICAvKiBNYXJrIGFscmVhZHkgYWNpdHZlIEFTSURzIGFzIHVzZWQgKi8NCj4+PiArICAgICBm b3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgew0KPj4+ICsgICAgICAgICAgICAgY250eCA9IGF0b21p Y19sb25nX3hjaGdfcmVsYXhlZCgmcGVyX2NwdShhY3RpdmVfY29udGV4dCwgaSksIDApOw0KPj4+ ICsgICAgICAgICAgICAgLyoNCj4+PiArICAgICAgICAgICAgICAqIElmIHRoaXMgQ1BVIGhhcyBh bHJlYWR5IGJlZW4gdGhyb3VnaCBhIHJvbGxvdmVyLCBidXQNCj4+PiArICAgICAgICAgICAgICAq IGhhc24ndCBydW4gYW5vdGhlciB0YXNrIGluIHRoZSBtZWFudGltZSwgd2UgbXVzdCBwcmVzZXJ2 ZQ0KPj4+ICsgICAgICAgICAgICAgICogaXRzIHJlc2VydmVkIENPTlRFWFQsIGFzIHRoaXMgaXMg dGhlIG9ubHkgdHJhY2Ugd2UgaGF2ZSBvZg0KPj4+ICsgICAgICAgICAgICAgICogdGhlIHByb2Nl c3MgaXQgaXMgc3RpbGwgcnVubmluZy4NCj4+PiArICAgICAgICAgICAgICAqLw0KPj4+ICsgICAg ICAgICAgICAgaWYgKGNudHggPT0gMCkNCj4+PiArICAgICAgICAgICAgICAgICAgICAgY250eCA9 IHBlcl9jcHUocmVzZXJ2ZWRfY29udGV4dCwgaSk7DQo+Pj4gKw0KPj4+ICsgICAgICAgICAgICAg X19zZXRfYml0KGNudHggJiBhc2lkX21hc2ssIGNvbnRleHRfYXNpZF9tYXApOw0KPj4+ICsgICAg ICAgICAgICAgcGVyX2NwdShyZXNlcnZlZF9jb250ZXh0LCBpKSA9IGNudHg7DQo+Pj4gKyAgICAg fQ0KPj4+ICsNCj4+PiArICAgICAvKiBNYXJrIGxhc3QgQVNJRCBhcyB1c2VkIGJlY2F1c2UgaXQg aXMgdXNlZCBhdCBib290LXRpbWUgKi8NCj4+PiArICAgICBfX3NldF9iaXQoYXNpZF9tYXNrLCBj b250ZXh0X2FzaWRfbWFwKTsNCj4+IExvb2tzIHVubmVjZXNzYXJ5IGFzIHdlIGFsd2F5cyBzdGFy dCBmaW5kX25leHRfemVyb19iaXQgZnJvbSBpZHggMS4NCj4+PiArfQ0KPj4+ICsNCj4+PiArLyog Tm90ZTogbXVzdCBiZSBjYWxsZWQgd2l0aCBjb250ZXh0X2xvY2sgaGVsZCAqLw0KPj4+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBfX25ld19jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0KPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5lZWRfdGxiX2ZsdXNoKQ0K Pj4+ICt7DQo+Pj4gKyAgICAgc3RhdGljIHUzMiBjdXJfaWR4ID0gMTsNCj4+PiArICAgICB1bnNp Z25lZCBsb25nIGNudHggPSBhdG9taWNfbG9uZ19yZWFkKCZtbS0+Y29udGV4dC5pZCk7DQo+Pj4g KyAgICAgdW5zaWduZWQgbG9uZyBhc2lkLCB2ZXIgPSBhdG9taWNfbG9uZ19yZWFkKCZjdXJyZW50 X3ZlcnNpb24pOw0KPj4+ICsNCj4+PiArICAgICBpZiAoY250eCAhPSAwKSB7DQo+Pj4gKyAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIG5ld2NudHggPSB2ZXIgfCAoY250eCAmIH5hc2lkX21hc2sp Ow0KPj4gU2hvdWxkbid0IHRoaXMgYmUgY250eCAmIGFzaWRfbWFzayA/DQo+Pj4gKw0KPj4+ICsg ICAgICAgICAgICAgLyoNCj4+PiArICAgICAgICAgICAgICAqIElmIG91ciBjdXJyZW50IENPTlRF WFQgd2FzIGFjdGl2ZSBkdXJpbmcgYSByb2xsb3Zlciwgd2UNCj4+PiArICAgICAgICAgICAgICAq IGNhbiBjb250aW51ZSB0byB1c2UgaXQgYW5kIHRoaXMgd2FzIGp1c3QgYSBmYWxzZSBhbGFybS4N Cj4+PiArICAgICAgICAgICAgICAqLw0KPj4+ICsgICAgICAgICAgICAgaWYgKGNoZWNrX3VwZGF0 ZV9yZXNlcnZlZF9jb250ZXh0KGNudHgsIG5ld2NudHgpKQ0KPj4+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbmV3Y250eDsNCj4+PiArDQo+Pj4gKyAgICAgICAgICAgICAvKg0KPj4+ICsg ICAgICAgICAgICAgICogV2UgaGFkIGEgdmFsaWQgQ09OVEVYVCBpbiBhIHByZXZpb3VzIGxpZmUs IHNvIHRyeSB0bw0KPj4+ICsgICAgICAgICAgICAgICogcmUtdXNlIGl0IGlmIHBvc3NpYmxlLg0K Pj4+ICsgICAgICAgICAgICAgICovDQo+Pj4gKyAgICAgICAgICAgICBpZiAoIV9fdGVzdF9hbmRf c2V0X2JpdChjbnR4ICYgYXNpZF9tYXNrLCBjb250ZXh0X2FzaWRfbWFwKSkNCj4+PiArICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIG5ld2NudHg7DQo+Pj4gKyAgICAgfQ0KPj4+ICsNCj4+PiAr ICAgICAvKg0KPj4+ICsgICAgICAqIEFsbG9jYXRlIGEgZnJlZSBBU0lELiBJZiB3ZSBjYW4ndCBm aW5kIG9uZSB0aGVuIGluY3JlbWVudA0KPj4+ICsgICAgICAqIGN1cnJlbnRfdmVyc2lvbiBhbmQg Zmx1c2ggYWxsIEFTSURzLg0KPj4+ICsgICAgICAqLw0KPj4+ICsgICAgIGFzaWQgPSBmaW5kX25l eHRfemVyb19iaXQoY29udGV4dF9hc2lkX21hcCwgbnVtX2FzaWRzLCBjdXJfaWR4KTsNCj4+PiAr ICAgICBpZiAoYXNpZCAhPSBudW1fYXNpZHMpDQo+Pj4gKyAgICAgICAgICAgICBnb3RvIHNldF9h c2lkOw0KPj4+ICsNCj4+PiArICAgICAvKiBXZSdyZSBvdXQgb2YgQVNJRHMsIHNvIGluY3JlbWVu dCBjdXJyZW50X3ZlcnNpb24gKi8NCj4+PiArICAgICB2ZXIgPSBhdG9taWNfbG9uZ19hZGRfcmV0 dXJuX3JlbGF4ZWQoZmlyc3RfdmVyc2lvbiwgJmN1cnJlbnRfdmVyc2lvbik7DQo+Pj4gKw0KPj4+ ICsgICAgIC8qIEZsdXNoIGV2ZXJ5dGhpbmcgICovDQo+Pj4gKyAgICAgX19mbHVzaF9jb250ZXh0 KCk7DQo+Pj4gKyAgICAgKm5lZWRfdGxiX2ZsdXNoID0gdHJ1ZTsNCj4+PiArDQo+Pj4gKyAgICAg LyogV2UgaGF2ZSBtb3JlIEFTSURzIHRoYW4gQ1BVcywgc28gdGhpcyB3aWxsIGFsd2F5cyBzdWNj ZWVkICovDQo+Pj4gKyAgICAgYXNpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChjb250ZXh0X2FzaWRf bWFwLCBudW1fYXNpZHMsIDEpOw0KPj4+ICsNCj4+PiArc2V0X2FzaWQ6DQo+Pj4gKyAgICAgX19z ZXRfYml0KGFzaWQsIGNvbnRleHRfYXNpZF9tYXApOw0KPj4+ICsgICAgIGN1cl9pZHggPSBhc2lk Ow0KPj4+ICsgICAgIHJldHVybiBhc2lkIHwgdmVyOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0 aWMgdm9pZCBzZXRfbW1fYXNpZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IGNw dSkNCj4+PiArew0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+Pj4gKyAgICAgYm9v bCBuZWVkX3RsYl9mbHVzaCA9IGZhbHNlOw0KPj4+ICsgICAgIHVuc2lnbmVkIGxvbmcgY250eCwg b2xkX2FjdGl2ZV9jbnR4Ow0KPj4+ICsNCj4+PiArICAgICBjbnR4ID0gYXRvbWljX2xvbmdfcmVh ZCgmbW0tPmNvbnRleHQuaWQpOw0KPj4+ICsNCj4+PiArICAgICAvKg0KPj4+ICsgICAgICAqIElm IG91ciBhY3RpdmVfY29udGV4dCBpcyBub24temVybyBhbmQgdGhlIGNvbnRleHQgbWF0Y2hlcyB0 aGUNCj4+PiArICAgICAgKiBjdXJyZW50X3ZlcnNpb24sIHRoZW4gd2UgdXBkYXRlIHRoZSBhY3Rp dmVfY29udGV4dCBlbnRyeSB3aXRoIGENCj4+PiArICAgICAgKiByZWxheGVkIGNtcHhjaGcuDQo+ Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiBGb2xsb3dpbmcgaXMgaG93IHdlIGhhbmRsZSByYWNp bmcgd2l0aCBhIGNvbmN1cnJlbnQgcm9sbG92ZXI6DQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAg KiAtIFdlIGdldCBhIHplcm8gYmFjayBmcm9tIHRoZSBjbXB4Y2hnIGFuZCBlbmQgdXAgd2FpdGlu ZyBvbiB0aGUNCj4+PiArICAgICAgKiAgIGxvY2suIFRha2luZyB0aGUgbG9jayBzeW5jaHJvbmlz ZXMgd2l0aCB0aGUgcm9sbG92ZXIgYW5kIHNvDQo+Pj4gKyAgICAgICogICB3ZSBhcmUgZm9yY2Vk IHRvIHNlZSB0aGUgdXBkYXRlZCB2ZXJpb24uDQo+Pj4gKyAgICAgICoNCj4+PiArICAgICAgKiAt IFdlIGdldCBhIHZhbGlkIGNvbnRleHQgYmFjayBmcm9tIHRoZSBjbXB4Y2hnIHRoZW4gd2UgY29u dGludWUNCj4+PiArICAgICAgKiAgIHVzaW5nIG9sZCBBU0lEIGJlY2F1c2UgX19mbHVzaF9jb250 ZXh0KCkgd291bGQgaGF2ZSBtYXJrZWQgQVNJRA0KPj4+ICsgICAgICAqICAgb2YgYWN0aXZlX2Nv bnRleHQgYXMgdXNlZCBhbmQgbmV4dCBjb250ZXh0IHN3aXRjaCB3ZSB3aWxsIGFsbG9jYXRlDQo+ Pj4gKyAgICAgICogICBuZXcgY29udGV4dC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBvbGRf YWN0aXZlX2NudHggPSBhdG9taWNfbG9uZ19yZWFkKCZwZXJfY3B1KGFjdGl2ZV9jb250ZXh0LCBj cHUpKTsNCj4+PiArICAgICBpZiAob2xkX2FjdGl2ZV9jbnR4ICYmDQo+Pj4gKyAgICAgICAgICEo KGNudHggXiBhdG9taWNfbG9uZ19yZWFkKCZjdXJyZW50X3ZlcnNpb24pKSA+PiBhc2lkX2JpdHMp ICYmDQo+PiBUaGlzIGxvb2tzIGhhcmQgdG8gcmVhZC4gUHJvYmFibHkNCj4+IChjbnR4ICZ+IGFz aWRfbWFzaykgPT0gYXRvbWljX2xvbmdfcmVhZCgmY3VycmVudF92ZXJzaW9uKQ0KPj4gaXMgY2xl YXJlci4NCj4+PiArICAgICAgICAgYXRvbWljX2xvbmdfY21weGNoZ19yZWxheGVkKCZwZXJfY3B1 KGFjdGl2ZV9jb250ZXh0LCBjcHUpLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb2xkX2FjdGl2ZV9jbnR4LCBjbnR4KSkNCj4+PiArICAgICAgICAgICAgIGdvdG8g c3dpdGNoX21tX2Zhc3Q7DQo+Pj4gKw0KPj4+ICsgICAgIHJhd19zcGluX2xvY2tfaXJxc2F2ZSgm Y29udGV4dF9sb2NrLCBmbGFncyk7DQo+PiBBbnkgcmVhc29uIHRoYXQgd2UgcHJlZmVyIHJhd18g aGVyZT8NCj4+PiArDQo+Pj4gKyAgICAgLyogQ2hlY2sgdGhhdCBvdXIgQVNJRCBiZWxvbmdzIHRv IHRoZSBjdXJyZW50X3ZlcnNpb24uICovDQo+Pj4gKyAgICAgY250eCA9IGF0b21pY19sb25nX3Jl YWQoJm1tLT5jb250ZXh0LmlkKTsNCj4+PiArICAgICBpZiAoKGNudHggXiBhdG9taWNfbG9uZ19y ZWFkKCZjdXJyZW50X3ZlcnNpb24pKSA+PiBhc2lkX2JpdHMpIHsNCj4+IFNhbWUgYXMgYWJvdmUs IHByb2JhYmx5DQo+PiAoY250eCAmfiBhc2lkX21hc2spICE9IGF0b21pY19sb25nX3JlYWQoJmN1 cnJlbnRfdmVyc2lvbikNCj4+IG1ha2VzIG1vcmUgc2Vuc2UuDQo+Pj4gKyAgICAgICAgICAgICBj bnR4ID0gX19uZXdfY29udGV4dChtbSwgJm5lZWRfdGxiX2ZsdXNoKTsNCj4+PiArICAgICAgICAg ICAgIGF0b21pY19sb25nX3NldCgmbW0tPmNvbnRleHQuaWQsIGNudHgpOw0KPj4+ICsgICAgIH0N Cj4+PiArDQo+Pj4gKyAgICAgYXRvbWljX2xvbmdfc2V0KCZwZXJfY3B1KGFjdGl2ZV9jb250ZXh0 LCBjcHUpLCBjbnR4KTsNCj4+PiArDQo+Pj4gKyAgICAgcmF3X3NwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmNvbnRleHRfbG9jaywgZmxhZ3MpOw0KPj4+ICsNCj4+PiArc3dpdGNoX21tX2Zhc3Q6DQo+ Pj4gKyAgICAgLyoNCj4+PiArICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQg b2YgdXNpbmcgdGhlIGN1cnJlbnQgc2F0cA0KPj4+ICsgICAgICAqIG5hbWUgdG8gc3VwcG9ydCBi aW51dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiArICAgICAgKiBw cml2aWxlZ2VkIElTQSAxLjEwIHlldC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBjc3Jfd3Jp dGUoc3B0YnIsIHZpcnRfdG9fcGZuKG1tLT5wZ2QpIHwNCj4+PiArICAgICAgICAgICAgICAgKChj bnR4ICYgYXNpZF9tYXNrKSA8PCBTQVRQX0FTSURfU0hJRlQpIHwNCj4+PiArICAgICAgICAgICAg ICAgU0FUUF9NT0RFKTsNCj4+PiArDQo+Pj4gKyAgICAgaWYgKG5lZWRfdGxiX2ZsdXNoKQ0KPj4+ ICsgICAgICAgICAgICAgZmx1c2hfdGxiX2FsbCgpOw0KPj4gSSB0aGluayB5b3VyIGludGVudGlv biBoZXJlIGlzIHRvIGF2b2lkIGNhbGxpbmcgZmx1c2hfdGxiX2FsbCB3aGVuIElSUXMNCj4+IGFy ZSBvZmYgaW4gdGhlIGNyaXRpY2FsIHJlZ2lvbi4gSG93ZXZlciwgc3dpdGNoX21tIHdpbGwgYmUg Y2FsbGVkIGZyb20NCj4+IHNjaGVkdWxlciBhcyB3ZWxsIHdoaWNoIGFsc28gdHVybiBpcnFzIG9m Ziwgc28gdGhpcyBzdGlsbCBjYXVzZSBpc3N1ZS4gSQ0KPj4gdGhpbmsgYSBiZXR0ZXIgd2F5IGlz IHRvIGZvcmNlIGZsdXNoX3RsYl9hbGwgdG8gdXNlIFNCSSB3aGVuIElSUXMgYXJlDQo+PiBvZmYu IFdoYXQgZG8geW91IHRoaW5rPw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICtzdGF0aWMgdm9pZCBzZXRf bW1fbm9hc2lkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQ0KPj4+ICt7DQo+Pj4gKyAgICAgLyoNCj4+ PiArICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQgb2YgdXNpbmcgdGhlIGN1 cnJlbnQgc2F0cA0KPj4+ICsgICAgICAqIG5hbWUgdG8gc3VwcG9ydCBiaW51dGlscyAyLjI5IHdo aWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiArICAgICAgKiBwcml2aWxlZ2VkIElTQSAx LjEwIHlldC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBjc3Jfd3JpdGUoc3B0YnIsIHZpcnRf dG9fcGZuKG1tLT5wZ2QpIHwgU0FUUF9NT0RFKTsNCj4+PiArDQo+Pj4gKyAgICAgLyoNCj4+PiAr ICAgICAgKiBzZmVuY2Uudm1hIGFmdGVyIFNBVFAgd3JpdGUuIFdlIGNhbGwgaXQgb24gTU0gY29u dGV4dCBpbnN0ZWFkIG9mDQo+Pj4gKyAgICAgICogY2FsbGluZyBsb2NhbF9mbHVzaF90bGJfYWxs IHRvIHByZXZlbnQgZ2xvYmFsIG1hcHBpbmdzIGZyb20gYmVpbmcNCj4+PiArICAgICAgKiBhZmZl Y3RlZC4NCj4+PiArICAgICAgKi8NCj4+PiArICAgICBsb2NhbF9mbHVzaF90bGJfbW0obW0pOw0K Pj4+ICt9DQo+Pj4gKw0KPj4+ICAgIC8qDQo+Pj4gICAgICogV2hlbiBuZWNlc3NhcnksIHBlcmZv cm1zIGEgZGVmZXJyZWQgaWNhY2hlIGZsdXNoIGZvciB0aGUgZ2l2ZW4gTU0gY29udGV4dCwNCj4+ PiAgICAgKiBvbiB0aGUgbG9jYWwgQ1BVLiAgUklTQy1WIGhhcyBubyBkaXJlY3QgbWVjaGFuaXNt IGZvciBpbnN0cnVjdGlvbiBjYWNoZQ0KPj4+IEBAIC01OCwyMCArMjU0LDQ5IEBAIHZvaWQgc3dp dGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsDQo+ Pj4gICAgICAgIGNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbW1fY3B1bWFzayhwcmV2KSk7DQo+Pj4g ICAgICAgIGNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobmV4dCkpOw0KPj4+DQo+Pj4g LSAgICAgLyoNCj4+PiAtICAgICAgKiBVc2UgdGhlIG9sZCBzcGJ0ciBuYW1lIGluc3RlYWQgb2Yg dXNpbmcgdGhlIGN1cnJlbnQgc2F0cA0KPj4+IC0gICAgICAqIG5hbWUgdG8gc3VwcG9ydCBiaW51 dGlscyAyLjI5IHdoaWNoIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUNCj4+PiAtICAgICAgKiBwcml2 aWxlZ2VkIElTQSAxLjEwIHlldC4NCj4+PiAtICAgICAgKi8NCj4+PiAtICAgICBjc3Jfd3JpdGUo c3B0YnIsIHZpcnRfdG9fcGZuKG5leHQtPnBnZCkgfCBTQVRQX01PREUpOw0KPj4+ICsgICAgIGlm ICh1c2VfYXNpZF9hbGxvY2F0b3IpDQo+Pj4gKyAgICAgICAgICAgICBzZXRfbW1fYXNpZChuZXh0 LCBjcHUpOw0KPj4+ICsgICAgIGVsc2UNCj4+PiArICAgICAgICAgICAgIHNldF9tbV9ub2FzaWQo bmV4dCk7DQo+Pj4gKw0KPj4+ICsgICAgIGZsdXNoX2ljYWNoZV9kZWZlcnJlZChuZXh0KTsNCj4+ PiArfQ0KPj4+ICsNCj4+PiArc3RhdGljIGludCBhc2lkc19pbml0KHZvaWQpDQo+Pj4gK3sNCj4+ PiArICAgICAvKiBGaWd1cmUtb3V0IG51bWJlciBvZiBBU0lEIGJpdHMgaW4gSFcgKi8NCj4+PiAr ICAgICBhc2lkX2JpdHMgPSAoY3NyX3JlYWQoc3B0YnIpID4+IFNBVFBfQVNJRF9TSElGVCkgJiBT QVRQX0FTSURfTUFTSzsNCj4+PiArICAgICBhc2lkX2JpdHMgPSBmbHNfbG9uZyhhc2lkX2JpdHMp Ow0KPj4+ICsNCj4+PiArICAgICAvKiBQcmUtY29tcHV0ZSBBU0lEIGRldGFpbHMgKi8NCj4+PiAr ICAgICBudW1fYXNpZHMgPSAxIDw8IGFzaWRfYml0czsNCj4+PiArICAgICBhc2lkX21hc2sgPSBu dW1fYXNpZHMgLSAxOw0KPj4+ICsgICAgIGZpcnN0X3ZlcnNpb24gPSBudW1fYXNpZHM7DQo+PiBJ cyB0aGVyZSBhbnkgcmVhc29uIHdlIHdhbnQgdG8gaGF2ZSB0d28gc2V0LW9uY2UgdmFyaWFibGVz IHdpdGggc2FtZSB2YWx1ZT8NCj4+Pg0KPj4+ICAgICAgICAvKg0KPj4+IC0gICAgICAqIHNmZW5j ZS52bWEgYWZ0ZXIgU0FUUCB3cml0ZS4gV2UgY2FsbCBpdCBvbiBNTSBjb250ZXh0IGluc3RlYWQg b2YNCj4+PiAtICAgICAgKiBjYWxsaW5nIGxvY2FsX2ZsdXNoX3RsYl9hbGwgdG8gcHJldmVudCBn bG9iYWwgbWFwcGluZ3MgZnJvbSBiZWluZw0KPj4+IC0gICAgICAqIGFmZmVjdGVkLg0KPj4+ICsg ICAgICAqIFVzZSBBU0lEIGFsbG9jYXRvciBvbmx5IGlmIG51bWJlciBvZiBIVyBBU0lEcyBhcmUN Cj4+PiArICAgICAgKiBhdC1sZWFzdCB0d2ljZSBtb3JlIHRoYW4gQ1BVcw0KPj4+ICAgICAgICAg Ki8NCj4+PiAtICAgICBsb2NhbF9mbHVzaF90bGJfbW0obmV4dCk7DQo+Pj4gKyAgICAgdXNlX2Fz aWRfYWxsb2NhdG9yID0NCj4+PiArICAgICAgICAgICAgIChudW1fYXNpZHMgPD0gKDIgKiBudW1f cG9zc2libGVfY3B1cygpKSkgPyBmYWxzZSA6IHRydWU7DQo+Pj4NCj4+PiAtICAgICBmbHVzaF9p Y2FjaGVfZGVmZXJyZWQobmV4dCk7DQo+Pj4gLX0NCj4+PiArICAgICAvKiBTZXR1cCBBU0lEIGFs bG9jYXRvciBpZiBhdmFpbGFibGUgKi8NCj4+PiArICAgICBpZiAodXNlX2FzaWRfYWxsb2NhdG9y KSB7DQo+Pj4gKyAgICAgICAgICAgICBhdG9taWNfbG9uZ19zZXQoJmN1cnJlbnRfdmVyc2lvbiwg Zmlyc3RfdmVyc2lvbik7DQo+Pj4NCj4+PiArICAgICAgICAgICAgIGNvbnRleHRfYXNpZF9tYXAg PSBrY2FsbG9jKEJJVFNfVE9fTE9OR1MobnVtX2FzaWRzKSwNCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoKmNvbnRleHRfYXNpZF9tYXApLCBHRlBfS0VSTkVMKTsN Cj4+PiArICAgICAgICAgICAgIGlmICghY29udGV4dF9hc2lkX21hcCkNCj4+PiArICAgICAgICAg ICAgICAgICAgICAgcGFuaWMoIkZhaWxlZCB0byBhbGxvY2F0ZSBiaXRtYXAgZm9yICVsdSBBU0lE c1xuIiwNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2FzaWRzKTsNCj4+PiAr DQo+Pj4gKyAgICAgICAgICAgICBfX3NldF9iaXQoYXNpZF9tYXNrLCBjb250ZXh0X2FzaWRfbWFw KTsNCj4+PiArDQo+Pj4gKyAgICAgICAgICAgICBwcl9pbmZvKCJBU0lEIGFsbG9jYXRvciB1c2lu ZyAlbHUgZW50cmllc1xuIiwgbnVtX2FzaWRzKTsNCj4+PiArICAgICB9IGVsc2Ugew0KPj4gSWYg d2UgZGVjaWRlIG5vdCB0byB1c2UgQVNJRCBhbGxvY2F0b3IsIHdlIHdpbGwgbmVlZCB0byBzZXQg QVNJRCBmaWVsZA0KPj4gdG8gemVybyBvbiAqYWxsIGhhcnRzKiBiZWZvcmUgd2UgZG8gb3VyIGZp cnN0IHN3aXRjaF9tbS4gT3RoZXJ3aXNlIHdlDQo+PiB3aWxsIGVuZCB1cCBhIGhhcnQgcnVubmlu ZyBub24temVybyBBU0lEIGFuZCBhbm90aGVyIHJ1bm5pbmcgemVybyBBU0lEDQo+PiB3aXRoIGRp ZmZlcmVudCBwYWdlIHRhYmxlLg0KPiANCj4gSSBmb3Jnb3QgdG8gYWRkcmVzcyB0aGlzIG9uZS4N Cj4gDQo+IEhvdyBhYm91dCB1c2luZyBTQVRQX0FTSURfTUFTSyBhcyBBU0lEIHdoZW4gd2UgYXJl IG5vdA0KPiB1c2luZyBBU0lEIGFsbG9jYXRvci4NCldlIGNhbid0LiBBU0lEIDAgaGFzIGEgc3Bl Y2lhbCBtZWFuaW5nIHdoaWNoIG1lYW5zIHRoYXQgd2UgZG9uJ3QgdXNlIA0KQVNJRC4gSWYgYW4g aW1wbGVtZW50YXRpb24gc3VwcG9ydHMgQVNJRCBidXQgaXQgZG9lcyBub3QgcHJvdmlkZSANCnN1 ZmZpY2llbnQgYml0cywgaWYgd2UgdXNlIHRoZSBsYXN0IEFTSUQgdGhlbiBpdCBjYXVzZXMgZGlm ZmVyZW50IGhhcnRzIA0KdG8gcnVuIGRpZmZlcmVudCBNTXMgd2l0aCB0aGUgc2FtZSBBU0lELCB2 aW9sYXRpbmcgdGhlIHNwZWMgd2hpY2ggc3RhdGVzIA0Kbm9uLXplcm8gQVNJRHMgbXVzdCBoYXZl IGNvbnNpc3RlbnQgbWVhbmluZyBhY3Jvc3MgaGFydHMuDQo+IA0KPiBVbmZvcnR1bmF0ZWx5LCB5 b3UgaGF2ZSBoYXJkY29kZWQgQVNJRCAjMCBpbiB5b3VyDQo+IGxvY2FsX3RsYl9mbHVzaF9tbSgp LiBXZSBuZWVkIGEgYmV0dGVyIEFQSSBzdWNoIGFzDQo+IGxvY2FsX3RsYl9mbHVzaF9hc2lkKCku DQo+IA0KV2VsbCwgdGhpcyBpcyB0aGUgQVBJIHJlcXVpcmVkIGJ5IExpbnV4LiBJZiB3ZSBjaGVj a291dCBteSBjb2RlIG9yIEFSTSdzIA0KY29kZSB5b3Ugd2lsbCBzZWUgdGhhdCB3ZSBuZWVkIGdl dCB0aGUgQVNJRCB3aXRoaW4gbG9jYWxfdGxiX2ZsdXNoX21tIA0KYW5kIGZsdXNoIHVzaW5nIHRo YXQgQVNJRC4NCj4+PiArICAgICAgICAgICAgIHByX2luZm8oIkFTSUQgYWxsb2NhdG9yIGRpc2Fi bGVkXG4iKTsNCj4+PiArICAgICB9DQo+Pj4gKw0KPj4+ICsgICAgIHJldHVybiAwOw0KPj4+ICt9 DQo+Pj4gK2Vhcmx5X2luaXRjYWxsKGFzaWRzX2luaXQpOw0KPj4+DQo= 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 X-Spam-Level: X-Spam-Status: No, score=-12.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9E40C43381 for ; Thu, 28 Mar 2019 14:33:58 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 7FE6F217F5 for ; Thu, 28 Mar 2019 14:33:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YqI96fKV"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="APj55UM2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7FE6F217F5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=garyguo.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:To:From:Reply-To:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ry6UpgKFsE7tiA1ilMBog/ZO316GDiL5y6iu2LFXEBE=; b=YqI96fKVb6DbP1 D9arstRt49qo7uLFTGvNwnUO4FSU3elc970B+l5c3LLhLo6Dauah2EfxfrNOzMmjXSLVOGVArS6Jx Y/Zwja2BO+gMrTpnDNRWC91XYnv4YTG6Ib181zXofaCjeAf7S6anooCzy/+1S9LK+oraoFfS9P04Z W3fiRt5tDXFAHQS7XdREn8G2RUuxHC6kE9XKfodlbyoimZzTGYExajysnZtVOAHxksutXS0eYCKaJ lEdlLkppRF0NzVWq4CLAiVZ0CZonHQUMtN824JjomPFOcBulJ9mE/0CD/hK5mkVi0miZBa+HLpBKL lwN0aI9XiY7xBmtLrglA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9W6P-0000Tg-GZ; Thu, 28 Mar 2019 14:33:57 +0000 Received: from mail-eopbgr110128.outbound.protection.outlook.com ([40.107.11.128] helo=GBR01-CWL-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9W6M-0000TG-26 for linux-riscv@lists.infradead.org; Thu, 28 Mar 2019 14:33:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zapvIoP17IhE8G9W1YU/9GSk+5zGuU2LkBzMgIYo4Sc=; b=APj55UM2j/7/chmADdiFwuYL54W2TATjvxO9hB2TSlJlhtcFp5gTG/73iupBqTSkJZasim4kNkrGre/bDbPu0qwYF5a7mz2iIL8gVm6LWOXQlDCwl3xMH/W6gu0iGM3xzWsi4sV/L1kGSO22ou8064KPRmvscN2fcs6llOXMusk= Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (20.176.139.20) by LO2P265MB0493.GBRP265.PROD.OUTLOOK.COM (10.166.105.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.16; Thu, 28 Mar 2019 14:33:49 +0000 Received: from LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157]) by LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM ([fe80::ed34:1290:4306:3157%3]) with mapi id 15.20.1750.017; Thu, 28 Mar 2019 14:33:49 +0000 From: Gary Guo To: Anup Patel Subject: Re: [PATCH v2] RISC-V: Implement ASID allocator Thread-Topic: [PATCH v2] RISC-V: Implement ASID allocator Thread-Index: AQHU5TAIKaRDCttA7UazIjpcDaomMKYhDFQAgAAKGwCAAAWygA== Date: Thu, 28 Mar 2019 14:33:49 +0000 Message-ID: <449f865a-f224-776a-3a5e-04c4c212e682@garyguo.net> References: <20190328063211.13052-1-anup.patel@wdc.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LO2P265CA0451.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:e::31) To LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:8c::20) authentication-results: spf=none (sender IP is ) smtp.mailfrom=gary@garyguo.net; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2001:630:212:238:3697:f6ff:fe55:55b1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1c897be9-4c6b-4cf0-63ee-08d6b38a6494 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7027125)(7023125)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020); SRVR:LO2P265MB0493; x-ms-traffictypediagnostic: LO2P265MB0493: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 0990C54589 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(39830400003)(366004)(136003)(346002)(376002)(189003)(199004)(55674003)(46003)(186003)(14444005)(966005)(36756003)(508600001)(6512007)(11346002)(53936002)(6116002)(6246003)(316002)(106356001)(256004)(6916009)(54906003)(31686004)(31696002)(25786009)(2616005)(30864003)(446003)(53546011)(7736002)(105586002)(486006)(2906002)(102836004)(386003)(68736007)(5660300002)(6306002)(8936002)(86362001)(6486002)(476003)(53946003)(97736004)(99286004)(305945005)(14454004)(71200400001)(7416002)(71190400001)(6506007)(81156014)(81166006)(8676002)(52116002)(4326008)(76176011)(6436002)(229853002); DIR:OUT; SFP:1102; SCL:1; SRVR:LO2P265MB0493; H:LO2P265MB0847.GBRP265.PROD.OUTLOOK.COM; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: garyguo.net does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: rNWeuW64QPmHvljzYtuW7flZzFOqjmoQBxhsNPFlXiAx6xd3JVQWdy2MDqX28GnpX9eOnllmTyA+6qL9Ft1P+9ShqIv1kyTL8xtM2duO6x+qLIC+JkiIFPJF6p/QofRq5kKmipV1P/T1cZhwJE8nSO+vff7dywLMVTn3akbHe+OQW9DW9BFI5oD5eQ+QVXkN9ijl5UZXdzJ5cB3lxPDrPtBE4YtMYAFWnbAKYUmYWBubo6vN149bYm/bjy8dYVJ3js/nEtCMiH9+9QxupVrZ4TKvRgV4ifUXamAcbdiS4JBrTjAPfZPZRdfedDjiP/cRD5ROuzwfZ/g6b6meZqhqOzk2jELe7PhewV+nArPBUygZ5rwIaLw6Exg0YmeJjMvSGMZ0LMQW7HR/8LNr18mGqt6JW0OE5MrqERRv0B20pfM= Content-ID: <80AF79314FFE024997509E9EC34DEAAC@GBRP265.PROD.OUTLOOK.COM> MIME-Version: 1.0 X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 1c897be9-4c6b-4cf0-63ee-08d6b38a6494 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Mar 2019 14:33:49.6350 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB0493 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190328_073354_252743_1203855D X-CRM114-Status: GOOD ( 20.53 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Palmer Dabbelt , Anup Patel , "linux-kernel@vger.kernel.org" , Mike Rapoport , Christoph Hellwig , Atish Patra , Albert Ou , Paul Walmsley , "linux-riscv@lists.infradead.org" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-riscv" Errors-To: linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org On 28/03/2019 14:13, Anup Patel wrote: > On Thu, Mar 28, 2019 at 7:07 PM Gary Guo wrote: >> >> Hi Anup, >> >> The code still does not use ASID in TLB flush routines. Without this >> added the code does not boot on systems with true ASID support. >> >> We also need to consider the case of CONTEXTID overflow on 32-bit >> systems. 32-bit CONTEXTID may overflow in a month time. >> >> Please all see my inline comments. >> >> Best, >> Gary >> >> On 28/03/2019 06:32, Anup Patel wrote: >>> Currently, we do local TLB flush on every MM switch. This is very harsh >>> on performance because we are forcing page table walks after every MM >>> switch. >>> >>> This patch implements ASID allocator for assigning an ASID to every MM >>> context. The number of ASIDs are limited in HW so we create a logical >>> entity named CONTEXTID for assigning to MM context. The lower bits of >>> CONTEXTID are ASID and upper bits are VERSION number. The number of >>> usable ASID bits supported by HW are detected at boot-time by writing >>> 1s to ASID bits in SATP CSR. This means last ASID is always reserved >>> because it is used for initial MM context. >>> >>> We allocate new CONTEXTID on first MM switch for a MM context where >>> the ASID is allocated from an ASID bitmap and VERSION is provide by >>> an atomic counter. At time of allocating new CONTEXTID, if we run out >>> of available ASIDs then: >>> 1. We flush the ASID bitmap >>> 2. Increment current VERSION atomic counter >>> 3. Re-allocate ASID from ASID bitmap >>> 4. Flush TLB on all CPUs >>> 5. Try CONTEXTID re-assignment on all CPUs >>> >>> Using above approach, we have virtually infinite CONTEXTIDs on-top-of >>> limited number of HW ASIDs. This approach is inspired from ASID allocator >>> used for Linux ARM/ARM64 but we have adapted it for RISC-V. Overall, >>> this ASID allocator helps us reduce rate of local TLB flushes on every >>> CPU thereby increasing performance. >>> >>> This patch is tested on QEMU/virt machine and SiFive Unleashed board. >>> On QEMU/virt machine, we see 10% (approx) performance improvement with >>> SW emulated TLBs provided by QEMU. Unfortunately, ASID bits of SATP CSR >>> are not implemented on SiFive Unleashed board so we don't see any change >>> in performance. >>> >>> Signed-off-by: Gary Guo >> Could you add a Co-developed-by line in addition to Signed-off-by as >> well? Thanks. >>> Signed-off-by: Anup Patel >>> --- >>> Changes since v1: >>> - We adapt good aspects from Gary Guo's ASID allocator implementation >>> and provide due credit to him by adding his SoB. >>> - Track ASIDs active during context flush and mark them as reserved >>> - Set ASID bits to all 1s to simplify number of ASID bit detection >>> - Use atomic_long_t instead of atomic64_t for being 32bit friendly >>> - Use unsigned long instead of u64 for being 32bit friendly >>> - Use flush_tlb_all() instead of lazy local_tlb_flush_all() at time >>> of context flush >>> >>> This patch is based on Linux-5.1-rc2 and TLB flush cleanup patches v4 >>> from Gary Guo. It can be also found in riscv_asid_allocator_v2 branch >>> of https://github.com/avpatel/linux.git >>> --- >>> arch/riscv/include/asm/csr.h | 6 + >>> arch/riscv/include/asm/mmu.h | 1 + >>> arch/riscv/include/asm/mmu_context.h | 1 + >>> arch/riscv/kernel/head.S | 2 + >>> arch/riscv/mm/context.c | 249 +++++++++++++++++++++++++-- >>> 5 files changed, 247 insertions(+), 12 deletions(-) >>> >>> diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h >>> index 28a0d1cb374c..ce18ab8f53ed 100644 >>> --- a/arch/riscv/include/asm/csr.h >>> +++ b/arch/riscv/include/asm/csr.h >>> @@ -45,10 +45,16 @@ >>> #define SATP_PPN _AC(0x003FFFFF, UL) >>> #define SATP_MODE_32 _AC(0x80000000, UL) >>> #define SATP_MODE SATP_MODE_32 >>> +#define SATP_ASID_BITS 9 >>> +#define SATP_ASID_SHIFT 22 >>> +#define SATP_ASID_MASK _AC(0x1FF, UL) >>> #else >>> #define SATP_PPN _AC(0x00000FFFFFFFFFFF, UL) >>> #define SATP_MODE_39 _AC(0x8000000000000000, UL) >>> #define SATP_MODE SATP_MODE_39 >>> +#define SATP_ASID_BITS 16 >>> +#define SATP_ASID_SHIFT 44 >>> +#define SATP_ASID_MASK _AC(0xFFFF, UL) >>> #endif >>> >>> /* Interrupt Enable and Interrupt Pending flags */ >>> diff --git a/arch/riscv/include/asm/mmu.h b/arch/riscv/include/asm/mmu.h >>> index 5df2dccdba12..42a9ca0fe1fb 100644 >>> --- a/arch/riscv/include/asm/mmu.h >>> +++ b/arch/riscv/include/asm/mmu.h >>> @@ -18,6 +18,7 @@ >>> #ifndef __ASSEMBLY__ >>> >>> typedef struct { >>> + atomic_long_t id; >>> void *vdso; >>> #ifdef CONFIG_SMP >>> /* A local icache flush is needed before user execution can resume. */ >>> diff --git a/arch/riscv/include/asm/mmu_context.h b/arch/riscv/include/asm/mmu_context.h >>> index bf4f097a9051..ba6ab35c18dc 100644 >>> --- a/arch/riscv/include/asm/mmu_context.h >>> +++ b/arch/riscv/include/asm/mmu_context.h >>> @@ -30,6 +30,7 @@ static inline void enter_lazy_tlb(struct mm_struct *mm, >>> static inline int init_new_context(struct task_struct *task, >>> struct mm_struct *mm) >>> { >>> + atomic_long_set(&(mm)->context.id, 0); >> Parenthesis around mm isn't necessary >>> return 0; >>> } >>> >>> diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S >>> index fe884cd69abd..c3f9adc0d054 100644 >>> --- a/arch/riscv/kernel/head.S >>> +++ b/arch/riscv/kernel/head.S >>> @@ -95,6 +95,8 @@ relocate: >>> la a2, swapper_pg_dir >>> srl a2, a2, PAGE_SHIFT >>> li a1, SATP_MODE >>> + li a0, (SATP_ASID_MASK << SATP_ASID_SHIFT) >>> + or a1, a1, a0 >>> or a2, a2, a1 >>> >>> /* >>> diff --git a/arch/riscv/mm/context.c b/arch/riscv/mm/context.c >>> index 0f787bcd3a7a..1205d33d1b1b 100644 >>> --- a/arch/riscv/mm/context.c >>> +++ b/arch/riscv/mm/context.c >>> @@ -2,13 +2,209 @@ >>> /* >>> * Copyright (C) 2012 Regents of the University of California >>> * Copyright (C) 2017 SiFive >>> + * Copyright (C) 2019 Western Digital Corporation or its affiliates. >>> */ >>> >>> +#include >>> #include >>> +#include >>> >>> #include >>> #include >>> >>> +static bool use_asid_allocator; >>> +static unsigned long asid_bits; >>> +static unsigned long num_asids; >>> +static unsigned long asid_mask; >>> +static unsigned long first_version; >>> + >>> +static atomic_long_t current_version; >>> + >>> +static DEFINE_RAW_SPINLOCK(context_lock); >>> +static unsigned long *context_asid_map; >>> + >>> +static DEFINE_PER_CPU(atomic_long_t, active_context); >>> +static DEFINE_PER_CPU(unsigned long, reserved_context); >>> + >>> +static bool check_update_reserved_context(unsigned long cntx, >>> + unsigned long newcntx) >>> +{ >>> + int cpu; >>> + bool hit = false; >>> + >>> + /* >>> + * Iterate over the set of reserved CONTEXT looking for a match. >>> + * If we find one, then we can update our mm to use new CONTEXT >>> + * (i.e. the same CONTEXT in the current_version) but we can't >>> + * exit the loop early, since we need to ensure that all copies >>> + * of the old CONTEXT are updated to reflect the mm. Failure to do >>> + * so could result in us missing the reserved CONTEXT in a future >>> + * version. >>> + */ >>> + for_each_possible_cpu(cpu) { >>> + if (per_cpu(reserved_context, cpu) == cntx) { >>> + hit = true; >>> + per_cpu(reserved_context, cpu) = newcntx; >>> + } >>> + } >>> + >>> + return hit; >>> +} >>> + >>> +/* Note: must be called with context_lock held */ >>> +static void __flush_context(void) >>> +{ >>> + int i; >>> + unsigned long cntx; >>> + >>> + /* Update the list of reserved ASIDs and the ASID bitmap. */ >>> + bitmap_clear(context_asid_map, 0, num_asids); >>> + >>> + /* Mark already acitve ASIDs as used */ >>> + for_each_possible_cpu(i) { >>> + cntx = atomic_long_xchg_relaxed(&per_cpu(active_context, i), 0); >>> + /* >>> + * If this CPU has already been through a rollover, but >>> + * hasn't run another task in the meantime, we must preserve >>> + * its reserved CONTEXT, as this is the only trace we have of >>> + * the process it is still running. >>> + */ >>> + if (cntx == 0) >>> + cntx = per_cpu(reserved_context, i); >>> + >>> + __set_bit(cntx & asid_mask, context_asid_map); >>> + per_cpu(reserved_context, i) = cntx; >>> + } >>> + >>> + /* Mark last ASID as used because it is used at boot-time */ >>> + __set_bit(asid_mask, context_asid_map); >> Looks unnecessary as we always start find_next_zero_bit from idx 1. >>> +} >>> + >>> +/* Note: must be called with context_lock held */ >>> +static unsigned long __new_context(struct mm_struct *mm, >>> + bool *need_tlb_flush) >>> +{ >>> + static u32 cur_idx = 1; >>> + unsigned long cntx = atomic_long_read(&mm->context.id); >>> + unsigned long asid, ver = atomic_long_read(¤t_version); >>> + >>> + if (cntx != 0) { >>> + unsigned long newcntx = ver | (cntx & ~asid_mask); >> Shouldn't this be cntx & asid_mask ? >>> + >>> + /* >>> + * If our current CONTEXT was active during a rollover, we >>> + * can continue to use it and this was just a false alarm. >>> + */ >>> + if (check_update_reserved_context(cntx, newcntx)) >>> + return newcntx; >>> + >>> + /* >>> + * We had a valid CONTEXT in a previous life, so try to >>> + * re-use it if possible. >>> + */ >>> + if (!__test_and_set_bit(cntx & asid_mask, context_asid_map)) >>> + return newcntx; >>> + } >>> + >>> + /* >>> + * Allocate a free ASID. If we can't find one then increment >>> + * current_version and flush all ASIDs. >>> + */ >>> + asid = find_next_zero_bit(context_asid_map, num_asids, cur_idx); >>> + if (asid != num_asids) >>> + goto set_asid; >>> + >>> + /* We're out of ASIDs, so increment current_version */ >>> + ver = atomic_long_add_return_relaxed(first_version, ¤t_version); >>> + >>> + /* Flush everything */ >>> + __flush_context(); >>> + *need_tlb_flush = true; >>> + >>> + /* We have more ASIDs than CPUs, so this will always succeed */ >>> + asid = find_next_zero_bit(context_asid_map, num_asids, 1); >>> + >>> +set_asid: >>> + __set_bit(asid, context_asid_map); >>> + cur_idx = asid; >>> + return asid | ver; >>> +} >>> + >>> +static void set_mm_asid(struct mm_struct *mm, unsigned int cpu) >>> +{ >>> + unsigned long flags; >>> + bool need_tlb_flush = false; >>> + unsigned long cntx, old_active_cntx; >>> + >>> + cntx = atomic_long_read(&mm->context.id); >>> + >>> + /* >>> + * If our active_context is non-zero and the context matches the >>> + * current_version, then we update the active_context entry with a >>> + * relaxed cmpxchg. >>> + * >>> + * Following is how we handle racing with a concurrent rollover: >>> + * >>> + * - We get a zero back from the cmpxchg and end up waiting on the >>> + * lock. Taking the lock synchronises with the rollover and so >>> + * we are forced to see the updated verion. >>> + * >>> + * - We get a valid context back from the cmpxchg then we continue >>> + * using old ASID because __flush_context() would have marked ASID >>> + * of active_context as used and next context switch we will allocate >>> + * new context. >>> + */ >>> + old_active_cntx = atomic_long_read(&per_cpu(active_context, cpu)); >>> + if (old_active_cntx && >>> + !((cntx ^ atomic_long_read(¤t_version)) >> asid_bits) && >> This looks hard to read. Probably >> (cntx &~ asid_mask) == atomic_long_read(¤t_version) >> is clearer. >>> + atomic_long_cmpxchg_relaxed(&per_cpu(active_context, cpu), >>> + old_active_cntx, cntx)) >>> + goto switch_mm_fast; >>> + >>> + raw_spin_lock_irqsave(&context_lock, flags); >> Any reason that we prefer raw_ here? >>> + >>> + /* Check that our ASID belongs to the current_version. */ >>> + cntx = atomic_long_read(&mm->context.id); >>> + if ((cntx ^ atomic_long_read(¤t_version)) >> asid_bits) { >> Same as above, probably >> (cntx &~ asid_mask) != atomic_long_read(¤t_version) >> makes more sense. >>> + cntx = __new_context(mm, &need_tlb_flush); >>> + atomic_long_set(&mm->context.id, cntx); >>> + } >>> + >>> + atomic_long_set(&per_cpu(active_context, cpu), cntx); >>> + >>> + raw_spin_unlock_irqrestore(&context_lock, flags); >>> + >>> +switch_mm_fast: >>> + /* >>> + * Use the old spbtr name instead of using the current satp >>> + * name to support binutils 2.29 which doesn't know about the >>> + * privileged ISA 1.10 yet. >>> + */ >>> + csr_write(sptbr, virt_to_pfn(mm->pgd) | >>> + ((cntx & asid_mask) << SATP_ASID_SHIFT) | >>> + SATP_MODE); >>> + >>> + if (need_tlb_flush) >>> + flush_tlb_all(); >> I think your intention here is to avoid calling flush_tlb_all when IRQs >> are off in the critical region. However, switch_mm will be called from >> scheduler as well which also turn irqs off, so this still cause issue. I >> think a better way is to force flush_tlb_all to use SBI when IRQs are >> off. What do you think? >>> +} >>> + >>> +static void set_mm_noasid(struct mm_struct *mm) >>> +{ >>> + /* >>> + * Use the old spbtr name instead of using the current satp >>> + * name to support binutils 2.29 which doesn't know about the >>> + * privileged ISA 1.10 yet. >>> + */ >>> + csr_write(sptbr, virt_to_pfn(mm->pgd) | SATP_MODE); >>> + >>> + /* >>> + * sfence.vma after SATP write. We call it on MM context instead of >>> + * calling local_flush_tlb_all to prevent global mappings from being >>> + * affected. >>> + */ >>> + local_flush_tlb_mm(mm); >>> +} >>> + >>> /* >>> * When necessary, performs a deferred icache flush for the given MM context, >>> * on the local CPU. RISC-V has no direct mechanism for instruction cache >>> @@ -58,20 +254,49 @@ void switch_mm(struct mm_struct *prev, struct mm_struct *next, >>> cpumask_clear_cpu(cpu, mm_cpumask(prev)); >>> cpumask_set_cpu(cpu, mm_cpumask(next)); >>> >>> - /* >>> - * Use the old spbtr name instead of using the current satp >>> - * name to support binutils 2.29 which doesn't know about the >>> - * privileged ISA 1.10 yet. >>> - */ >>> - csr_write(sptbr, virt_to_pfn(next->pgd) | SATP_MODE); >>> + if (use_asid_allocator) >>> + set_mm_asid(next, cpu); >>> + else >>> + set_mm_noasid(next); >>> + >>> + flush_icache_deferred(next); >>> +} >>> + >>> +static int asids_init(void) >>> +{ >>> + /* Figure-out number of ASID bits in HW */ >>> + asid_bits = (csr_read(sptbr) >> SATP_ASID_SHIFT) & SATP_ASID_MASK; >>> + asid_bits = fls_long(asid_bits); >>> + >>> + /* Pre-compute ASID details */ >>> + num_asids = 1 << asid_bits; >>> + asid_mask = num_asids - 1; >>> + first_version = num_asids; >> Is there any reason we want to have two set-once variables with same value? >>> >>> /* >>> - * sfence.vma after SATP write. We call it on MM context instead of >>> - * calling local_flush_tlb_all to prevent global mappings from being >>> - * affected. >>> + * Use ASID allocator only if number of HW ASIDs are >>> + * at-least twice more than CPUs >>> */ >>> - local_flush_tlb_mm(next); >>> + use_asid_allocator = >>> + (num_asids <= (2 * num_possible_cpus())) ? false : true; >>> >>> - flush_icache_deferred(next); >>> -} >>> + /* Setup ASID allocator if available */ >>> + if (use_asid_allocator) { >>> + atomic_long_set(¤t_version, first_version); >>> >>> + context_asid_map = kcalloc(BITS_TO_LONGS(num_asids), >>> + sizeof(*context_asid_map), GFP_KERNEL); >>> + if (!context_asid_map) >>> + panic("Failed to allocate bitmap for %lu ASIDs\n", >>> + num_asids); >>> + >>> + __set_bit(asid_mask, context_asid_map); >>> + >>> + pr_info("ASID allocator using %lu entries\n", num_asids); >>> + } else { >> If we decide not to use ASID allocator, we will need to set ASID field >> to zero on *all harts* before we do our first switch_mm. Otherwise we >> will end up a hart running non-zero ASID and another running zero ASID >> with different page table. > > I forgot to address this one. > > How about using SATP_ASID_MASK as ASID when we are not > using ASID allocator. We can't. ASID 0 has a special meaning which means that we don't use ASID. If an implementation supports ASID but it does not provide sufficient bits, if we use the last ASID then it causes different harts to run different MMs with the same ASID, violating the spec which states non-zero ASIDs must have consistent meaning across harts. > > Unfortunately, you have hardcoded ASID #0 in your > local_tlb_flush_mm(). We need a better API such as > local_tlb_flush_asid(). > Well, this is the API required by Linux. If we checkout my code or ARM's code you will see that we need get the ASID within local_tlb_flush_mm and flush using that ASID. >>> + pr_info("ASID allocator disabled\n"); >>> + } >>> + >>> + return 0; >>> +} >>> +early_initcall(asids_init); >>> _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv