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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 72F16C41535 for ; Tue, 5 Oct 2021 13:57:28 +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 3B3896197A for ; Tue, 5 Oct 2021 13:57:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 3B3896197A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bluespec.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vqqlgl8fczPDTZl697Qb0x3DydfhApY3drXFYm+Rm5k=; b=PZxh81vCLqaT+A XVBYwYUiX8sjn1jj4FXAKs834vcPm0JwaysBCXPr7+YNPdZOP1CQEyV00SmPIW1FxMxak++hKcO6w 1fkUKA1hifv95RqnFrtSjwq6W6fI2bkw4UzbVPuy6jhsFHbcALp+/x6522Pc1QgscspR/s34lZUaP hwVZZq3RD+hL0TM3EqtZnD2Fbqf343mdzj7cMByO4FwABqXqSHlqgW3rZsVpcL1oKTlJMtELpLNYj C7DZVpq6yknGqmmH/7zVenbl9hfvRgzCQWpQzBM0m7a3QZsvq6QysuPlKkJJ57pjd1ttqXCOv7q3t /yjnG07Hm6aQkcYTiorQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mXkwa-00AijZ-EE; Tue, 05 Oct 2021 13:57:20 +0000 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mXkwS-00Aief-Oz for linux-riscv@lists.infradead.org; Tue, 05 Oct 2021 13:57:16 +0000 Received: by mail-qt1-x836.google.com with SMTP id d8so1876862qtd.5 for ; Tue, 05 Oct 2021 06:57:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bluespec-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=NfVK51vyrwzQypc0yAU+imlVZCK1KrIXqHieqWmh0ig=; b=E++B/WkJSG7ssKXKSvXKJm3qrtgEZYq/BSy1XZ+vnTgmIu+CCaPaJ6Hy/oMGS/76b/ ITakYEkCgmEtbJt6MdHADelt7482ZhVwq29WszCYB2AOm+PBf2MpTdnKKk8BBl0uk55m 61hsPHj6py0Hs1W2BQ4JALSTUyXIh9YV56MrrLcM36KPTNTgwO/Aid1EIoiV4k41X6nK E3v8tUcGdPv0X0yJhRdWqUnLQQE6TpfsMjT0EKg6jacXlML2Tngka6PAtaP6JoCsCPMJ 30hS26QAiUjYjgiis0346MY/oFalVce5W2SmruL1fKrTARp09ZsM79ay/fh0S3cPD5rI L+Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to; bh=NfVK51vyrwzQypc0yAU+imlVZCK1KrIXqHieqWmh0ig=; b=fwuxO0PqXVZWagh/rqt6EjU/rutC+lyIfKX01DPTTA3Die2GGOcnHtNSnxXRHXZ57o I41qA8AA9zGA8XPHRf5o8CivBsdPgrO4p0iiJwOG2FwuuMZhK2S/5MELWoZ4s9KgpOaF GGaUos95PKgHtL+RG+oLPinwc5soZpV848pAvK1DlUTx8Hn7S+6Bw/wE3yGGBzGREj33 zLbb5BCnfz8LD6j2wGe+uYBUFfNT7qPvBfwSzixmuNOcXc1GtzkqiI9OZRtG90Qqy7LU Wuk67RLUwbHaBEa4L2mz5bdJQ+XAz3IZCcOnl6NHUmN9gu72bSNNULnPzMWfYeWFF9SN uTvw== X-Gm-Message-State: AOAM533LOdWyjAZrRdgQyjp4wGcgj3P6u8x6NWXenP6BEKls7qRWnBzv bckZAN3689zHh4b49YhfNklW X-Google-Smtp-Source: ABdhPJy2lsji8qKVwRYEl4lwaVYbuWKJTuedOlImuSqAyKdDNOYfxVBm4dvXEbGtA2eLFT3FAGHzqw== X-Received: by 2002:a05:622a:2c4:: with SMTP id a4mr19485542qtx.92.1633442229371; Tue, 05 Oct 2021 06:57:09 -0700 (PDT) Received: from bruce.bluespec.com ([154.3.44.94]) by smtp.gmail.com with ESMTPSA id r17sm10397337qtx.17.2021.10.05.06.57.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Oct 2021 06:57:08 -0700 (PDT) Date: Tue, 5 Oct 2021 09:57:06 -0400 From: Darius Rad To: Greentime Hu Cc: linux-riscv , Linux Kernel Mailing List , Albert Ou , Palmer Dabbelt , Paul Walmsley , Vincent Chen Subject: Re: [RFC PATCH v8 09/21] riscv: Add task switch support for vector Message-ID: Mail-Followup-To: Greentime Hu , linux-riscv , Linux Kernel Mailing List , Albert Ou , Palmer Dabbelt , Paul Walmsley , Vincent Chen References: <0e65c165e3d54a38cbba01603f325dca727274de.1631121222.git.greentime.hu@sifive.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211005_065712_957074_84952E82 X-CRM114-Status: GOOD ( 61.61 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gTW9uLCBPY3QgMDQsIDIwMjEgYXQgMDg6MzY6MzBQTSArMDgwMCwgR3JlZW50aW1lIEh1IHdy b3RlOgo+IERhcml1cyBSYWQgPGRhcml1c0BibHVlc3BlYy5jb20+IOaWvCAyMDIx5bm0OeaciDI5 5pelIOmAseS4iSDkuIvljYg5OjI45a+r6YGT77yaCj4gPgo+ID4gT24gVHVlLCBTZXAgMjgsIDIw MjEgYXQgMTA6NTY6NTJQTSArMDgwMCwgR3JlZW50aW1lIEh1IHdyb3RlOgo+ID4gPiBEYXJpdXMg UmFkIDxkYXJpdXNAYmx1ZXNwZWMuY29tPiDmlrwgMjAyMeW5tDnmnIgxM+aXpSDpgLHkuIAg5LiL 5Y2IODoyMeWvq+mBk++8mgo+ID4gPiA+Cj4gPiA+ID4gT24gOS84LzIxIDE6NDUgUE0sIEdyZWVu dGltZSBIdSB3cm90ZToKPiA+ID4gPiA+IFRoaXMgcGF0Y2ggYWRkcyB0YXNrIHN3aXRjaCBzdXBw b3J0IGZvciB2ZWN0b3IuIEl0IHN1cHBvcnRzIHBhcnRpYWwgbGF6eQo+ID4gPiA+ID4gc2F2ZSBh bmQgcmVzdG9yZSBtZWNoYW5pc20uIEl0IGFsc28gc3VwcG9ydHMgYWxsIGxlbmd0aHMgb2Ygdmxl bi4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBbZ3VvcmVuQGxpbnV4LmFsaWJhYmEuY29tOiBGaXJzdCBh dmFpbGFibGUgcG9ydGluZyB0byBzdXBwb3J0IHZlY3Rvcgo+ID4gPiA+ID4gY29udGV4dCBzd2l0 Y2hpbmddCj4gPiA+ID4gPiBbbmljay5rbmlnaHRAc2lmaXZlLmNvbTogUmV3cml0ZSB2ZWN0b3Iu UyB0byBzdXBwb3J0IGR5bmFtaWMgdmxlbiwgeGxlbiBhbmQKPiA+ID4gPiA+IGNvZGUgcmVmaW5l XQo+ID4gPiA+ID4gW3ZpbmNlbnQuY2hlbkBzaWZpdmUuY286IEZpeCB0aGUgbWlnaHRfc2xlZXAg aXNzdWUgaW4gdnN0YXRlX3NhdmUsCj4gPiA+ID4gPiB2c3RhdGVfcmVzdG9yZV0KPiA+ID4gPiA+ IENvLWRldmVsb3BlZC1ieTogTmljayBLbmlnaHQgPG5pY2sua25pZ2h0QHNpZml2ZS5jb20+Cj4g PiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBOaWNrIEtuaWdodCA8bmljay5rbmlnaHRAc2lmaXZlLmNv bT4KPiA+ID4gPiA+IENvLWRldmVsb3BlZC1ieTogR3VvIFJlbiA8Z3VvcmVuQGxpbnV4LmFsaWJh YmEuY29tPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogR3VvIFJlbiA8Z3VvcmVuQGxpbnV4LmFs aWJhYmEuY29tPgo+ID4gPiA+ID4gQ28tZGV2ZWxvcGVkLWJ5OiBWaW5jZW50IENoZW4gPHZpbmNl bnQuY2hlbkBzaWZpdmUuY29tPgo+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogVmluY2VudCBDaGVu IDx2aW5jZW50LmNoZW5Ac2lmaXZlLmNvbT4KPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEdyZWVu dGltZSBIdSA8Z3JlZW50aW1lLmh1QHNpZml2ZS5jb20+Cj4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ ICAgYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9zd2l0Y2hfdG8uaCB8IDY2ICsrKysrKysrKysrKysr KysrKysrKysrCj4gPiA+ID4gPiAgIGFyY2gvcmlzY3Yva2VybmVsL01ha2VmaWxlICAgICAgICAg fCAgMSArCj4gPiA+ID4gPiAgIGFyY2gvcmlzY3Yva2VybmVsL3Byb2Nlc3MuYyAgICAgICAgfCAz OCArKysrKysrKysrKysrKwo+ID4gPiA+ID4gICBhcmNoL3Jpc2N2L2tlcm5lbC92ZWN0b3IuUyAg ICAgICAgIHwgODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ID4gPiAgIDQg ZmlsZXMgY2hhbmdlZCwgMTg5IGluc2VydGlvbnMoKykKPiA+ID4gPiA+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGFyY2gvcmlzY3Yva2VybmVsL3ZlY3Rvci5TCj4gPiA+ID4gPgo+ID4gPiA+ID4gZGlm ZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNoX3RvLmggYi9hcmNoL3Jpc2N2 L2luY2x1ZGUvYXNtL3N3aXRjaF90by5oCj4gPiA+ID4gPiBpbmRleCBlYzgzNzcwYjNkOTguLmRl MDU3M2RhZDc4ZiAxMDA2NDQKPiA+ID4gPiA+IC0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20v c3dpdGNoX3RvLmgKPiA+ID4gPiA+ICsrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vc3dpdGNo X3RvLmgKPiA+ID4gPiA+IEBAIC03LDEwICs3LDEyIEBACj4gPiA+ID4gPiAgICNkZWZpbmUgX0FT TV9SSVNDVl9TV0lUQ0hfVE9fSAo+ID4gPiA+ID4KPiA+ID4gPiA+ICAgI2luY2x1ZGUgPGxpbnV4 L2p1bXBfbGFiZWwuaD4KPiA+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gPiA+ ID4gICAjaW5jbHVkZSA8bGludXgvc2NoZWQvdGFza19zdGFjay5oPgo+ID4gPiA+ID4gICAjaW5j bHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgo+ID4gPiA+ID4gICAjaW5jbHVkZSA8YXNtL3B0cmFjZS5o Pgo+ID4gPiA+ID4gICAjaW5jbHVkZSA8YXNtL2Nzci5oPgo+ID4gPiA+ID4gKyNpbmNsdWRlIDxh c20vYXNtLW9mZnNldHMuaD4KPiA+ID4gPiA+Cj4gPiA+ID4gPiAgICNpZmRlZiBDT05GSUdfRlBV Cj4gPiA+ID4gPiAgIGV4dGVybiB2b2lkIF9fZnN0YXRlX3NhdmUoc3RydWN0IHRhc2tfc3RydWN0 ICpzYXZlX3RvKTsKPiA+ID4gPiA+IEBAIC02OCw2ICs3MCw2OCBAQCBzdGF0aWMgX19hbHdheXNf aW5saW5lIGJvb2wgaGFzX2ZwdSh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQo+ID4gPiA+ID4gICAj ZGVmaW5lIF9fc3dpdGNoX3RvX2ZwdShfX3ByZXYsIF9fbmV4dCkgZG8geyB9IHdoaWxlICgwKQo+ ID4gPiA+ID4gICAjZW5kaWYKPiA+ID4gPiA+Cj4gPiA+ID4gPiArI2lmZGVmIENPTkZJR19WRUNU T1IKPiA+ID4gPiA+ICtleHRlcm4gYm9vbCBoYXNfdmVjdG9yOwo+ID4gPiA+ID4gK2V4dGVybiB1 bnNpZ25lZCBsb25nIHJpc2N2X3ZzaXplOwo+ID4gPiA+ID4gK2V4dGVybiB2b2lkIF9fdnN0YXRl X3NhdmUoc3RydWN0IF9fcmlzY3Zfdl9zdGF0ZSAqc2F2ZV90bywgdm9pZCAqZGF0YXApOwo+ID4g PiA+ID4gK2V4dGVybiB2b2lkIF9fdnN0YXRlX3Jlc3RvcmUoc3RydWN0IF9fcmlzY3Zfdl9zdGF0 ZSAqcmVzdG9yZV9mcm9tLCB2b2lkICpkYXRhcCk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3Rh dGljIGlubGluZSB2b2lkIF9fdnN0YXRlX2NsZWFuKHN0cnVjdCBwdF9yZWdzICpyZWdzKQo+ID4g PiA+ID4gK3sKPiA+ID4gPiA+ICsgICAgIHJlZ3MtPnN0YXR1cyA9IChyZWdzLT5zdGF0dXMgJiB+ KFNSX1ZTKSkgfCBTUl9WU19DTEVBTjsKPiA+ID4gPiA+ICt9Cj4gPiA+ID4gPiArCj4gPiA+ID4g PiArc3RhdGljIGlubGluZSB2b2lkIHZzdGF0ZV9vZmYoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr LAo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpy ZWdzKQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsgICAgIHJlZ3MtPnN0YXR1cyA9IChyZWdzLT5z dGF0dXMgJiB+U1JfVlMpIHwgU1JfVlNfT0ZGOwo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ ID4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgdnN0YXRlX3NhdmUoc3RydWN0IHRhc2tfc3RydWN0 ICp0YXNrLAo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRf cmVncyAqcmVncykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArICAgICBpZiAoKHJlZ3MtPnN0YXR1 cyAmIFNSX1ZTKSA9PSBTUl9WU19ESVJUWSkgewo+ID4gPiA+ID4gKyAgICAgICAgICAgICBzdHJ1 Y3QgX19yaXNjdl92X3N0YXRlICp2c3RhdGUgPSAmKHRhc2stPnRocmVhZC52c3RhdGUpOwo+ID4g PiA+ID4gKwo+ID4gPiA+ID4gKyAgICAgICAgICAgICBfX3ZzdGF0ZV9zYXZlKHZzdGF0ZSwgdnN0 YXRlLT5kYXRhcCk7Cj4gPiA+ID4gPiArICAgICAgICAgICAgIF9fdnN0YXRlX2NsZWFuKHJlZ3Mp Owo+ID4gPiA+ID4gKyAgICAgfQo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtz dGF0aWMgaW5saW5lIHZvaWQgdnN0YXRlX3Jlc3RvcmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr LAo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVn cyAqcmVncykKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArICAgICBpZiAoKHJlZ3MtPnN0YXR1cyAm IFNSX1ZTKSAhPSBTUl9WU19PRkYpIHsKPiA+ID4gPiA+ICsgICAgICAgICAgICAgc3RydWN0IF9f cmlzY3Zfdl9zdGF0ZSAqdnN0YXRlID0gJih0YXNrLT50aHJlYWQudnN0YXRlKTsKPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ICsgICAgICAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHZlY3RvciBy ZWdpc3RlcnMuICovCj4gPiA+ID4gPiArICAgICAgICAgICAgIGlmICghdnN0YXRlLT5kYXRhcCkg ewo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZzdGF0ZS0+ZGF0YXAgPSBremFsbG9j KHJpc2N2X3ZzaXplLCBHRlBfQVRPTUlDKTsKPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICB2c3RhdGUtPnNpemUgPSByaXNjdl92c2l6ZTsKPiA+ID4gPiA+ICsgICAgICAgICAgICAgfQo+ ID4gPiA+ID4gKyAgICAgICAgICAgICBfX3ZzdGF0ZV9yZXN0b3JlKHZzdGF0ZSwgdnN0YXRlLT5k YXRhcCk7Cj4gPiA+ID4gPiArICAgICAgICAgICAgIF9fdnN0YXRlX2NsZWFuKHJlZ3MpOwo+ID4g PiA+ID4gKyAgICAgfQo+ID4gPiA+ID4gK30KPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICtzdGF0aWMg aW5saW5lIHZvaWQgX19zd2l0Y2hfdG9fdmVjdG9yKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwK PiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0 cnVjdCAqbmV4dCkKPiA+ID4gPiA+ICt7Cj4gPiA+ID4gPiArICAgICBzdHJ1Y3QgcHRfcmVncyAq cmVnczsKPiA+ID4gPiA+ICsKPiA+ID4gPiA+ICsgICAgIHJlZ3MgPSB0YXNrX3B0X3JlZ3MocHJl dik7Cj4gPiA+ID4gPiArICAgICBpZiAodW5saWtlbHkocmVncy0+c3RhdHVzICYgU1JfU0QpKQo+ ID4gPiA+ID4gKyAgICAgICAgICAgICB2c3RhdGVfc2F2ZShwcmV2LCByZWdzKTsKPiA+ID4gPiA+ ICsgICAgIHZzdGF0ZV9yZXN0b3JlKG5leHQsIHRhc2tfcHRfcmVncyhuZXh0KSk7Cj4gPiA+ID4g PiArfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKyNlbHNlCj4gPiA+ID4gPiArI2RlZmluZSBoYXNf dmVjdG9yIGZhbHNlCj4gPiA+ID4gPiArI2RlZmluZSB2c3RhdGVfc2F2ZSh0YXNrLCByZWdzKSBk byB7IH0gd2hpbGUgKDApCj4gPiA+ID4gPiArI2RlZmluZSB2c3RhdGVfcmVzdG9yZSh0YXNrLCBy ZWdzKSBkbyB7IH0gd2hpbGUgKDApCj4gPiA+ID4gPiArI2RlZmluZSBfX3N3aXRjaF90b192ZWN0 b3IoX19wcmV2LCBfX25leHQpIGRvIHsgfSB3aGlsZSAoMCkKPiA+ID4gPiA+ICsjZW5kaWYKPiA+ ID4gPiA+ICsKPiA+ID4gPiA+ICAgZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hf dG8oc3RydWN0IHRhc2tfc3RydWN0ICosCj4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICopOwo+ID4gPiA+ID4KPiA+ID4gPiA+ IEBAIC03Nyw2ICsxNDEsOCBAQCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiA+ICAgICAgIHN0cnVjdCB0YXNrX3N0cnVj dCAqX19uZXh0ID0gKG5leHQpOyAgICAgICAgICAgIFwKPiA+ID4gPiA+ICAgICAgIGlmIChoYXNf ZnB1KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gPiA+ICAgICAg ICAgICAgICAgX19zd2l0Y2hfdG9fZnB1KF9fcHJldiwgX19uZXh0KTsgICAgICAgIFwKPiA+ID4g PiA+ICsgICAgIGlmIChoYXNfdmVjdG9yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiA+ID4gPiA+ICsgICAgICAgICAgICAgX19zd2l0Y2hfdG9fdmVjdG9yKF9fcHJldiwgX19u ZXh0KTsgICAgIFwKPiA+ID4gPiA+ICAgICAgICgobGFzdCkgPSBfX3N3aXRjaF90byhfX3ByZXYs IF9fbmV4dCkpOyAgICAgICAgIFwKPiA+ID4gPiA+ICAgfSB3aGlsZSAoMCkKPiA+ID4gPiA+Cj4g PiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Jp c2N2L2tlcm5lbC9NYWtlZmlsZQo+ID4gPiA+ID4gaW5kZXggMzM5N2RkYWMxYTMwLi4zNDQwNzgw ODA4MzkgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9hcmNoL3Jpc2N2L2tlcm5lbC9NYWtlZmlsZQo+ ID4gPiA+ID4gKysrIGIvYXJjaC9yaXNjdi9rZXJuZWwvTWFrZWZpbGUKPiA+ID4gPiA+IEBAIC00 MCw2ICs0MCw3IEBAIG9iai0kKENPTkZJR19NTVUpICs9IHZkc28ubyB2ZHNvLwo+ID4gPiA+ID4K PiA+ID4gPiA+ICAgb2JqLSQoQ09ORklHX1JJU0NWX01fTU9ERSkgICs9IHRyYXBzX21pc2FsaWdu ZWQubwo+ID4gPiA+ID4gICBvYmotJChDT05GSUdfRlBVKSAgICAgICAgICAgKz0gZnB1Lm8KPiA+ ID4gPiA+ICtvYmotJChDT05GSUdfVkVDVE9SKSAgICAgICAgICs9IHZlY3Rvci5vCj4gPiA+ID4g PiAgIG9iai0kKENPTkZJR19TTVApICAgICAgICAgICArPSBzbXBib290Lm8KPiA+ID4gPiA+ICAg b2JqLSQoQ09ORklHX1NNUCkgICAgICAgICAgICs9IHNtcC5vCj4gPiA+ID4gPiAgIG9iai0kKENP TkZJR19TTVApICAgICAgICAgICArPSBjcHVfb3BzLm8KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9h cmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMK PiA+ID4gPiA+IGluZGV4IDAzYWMzYWE2MTFmNS4uMGI4NmU5ZTUzMWM5IDEwMDY0NAo+ID4gPiA+ ID4gLS0tIGEvYXJjaC9yaXNjdi9rZXJuZWwvcHJvY2Vzcy5jCj4gPiA+ID4gPiArKysgYi9hcmNo L3Jpc2N2L2tlcm5lbC9wcm9jZXNzLmMKPiA+ID4gPiA+IEBAIC05NSw2ICs5NSwxNiBAQCB2b2lk IHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBwYywKPiA+ ID4gPiA+ICAgICAgICAgICAgICAgICovCj4gPiA+ID4gPiAgICAgICAgICAgICAgIGZzdGF0ZV9y ZXN0b3JlKGN1cnJlbnQsIHJlZ3MpOwo+ID4gPiA+ID4gICAgICAgfQo+ID4gPiA+ID4gKwo+ID4g PiA+ID4gKyAgICAgaWYgKGhhc192ZWN0b3IpIHsKPiA+ID4gPiA+ICsgICAgICAgICAgICAgcmVn cy0+c3RhdHVzIHw9IFNSX1ZTX0lOSVRJQUw7Cj4gPiA+ID4gPiArICAgICAgICAgICAgIC8qCj4g PiA+ID4gPiArICAgICAgICAgICAgICAqIFJlc3RvcmUgdGhlIGluaXRpYWwgdmFsdWUgdG8gdGhl IHZlY3RvciByZWdpc3Rlcgo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgKiBiZWZvcmUgc3RhcnRp bmcgdGhlIHVzZXIgcHJvZ3JhbS4KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICovCj4gPiA+ID4g PiArICAgICAgICAgICAgIHZzdGF0ZV9yZXN0b3JlKGN1cnJlbnQsIHJlZ3MpOwo+ID4gPiA+ID4g KyAgICAgfQo+ID4gPiA+ID4gKwo+ID4gPiA+Cj4gPiA+ID4gU28gdGhpcyB3aWxsIHVuY29uZGl0 aW9uYWxseSBlbmFibGUgdmVjdG9yIGluc3RydWN0aW9ucywgYW5kIGFsbG9jYXRlCj4gPiA+ID4g bWVtb3J5IGZvciB2ZWN0b3Igc3RhdGUsIGZvciBhbGwgcHJvY2Vzc2VzLCByZWdhcmRsZXNzIG9m IHdoZXRoZXIgdmVjdG9yCj4gPiA+ID4gaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkPwo+ID4gPiA+Cj4g PiA+Cj4gPiA+IEhpIERhcml1cywKPiA+ID4KPiA+ID4gWWVzLCBpdCB3aWxsIGVuYWJsZSB2ZWN0 b3IgaWYgaGFzX3ZlY3RvcigpIGlzIHRydWUuIFRoZSByZWFzb24gdGhhdCB3ZQo+ID4gPiBjaG9v c2UgdG8gZW5hYmxlIGFuZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZXIgc3BhY2UgcHJvZ3JhbSBp cyBiZWNhdXNlCj4gPiA+IHdlIGFsc28gaW1wbGVtZW50IHNvbWUgY29tbW9uIGZ1bmN0aW9ucyBp biB0aGUgZ2xpYmMgc3VjaCBhcyBtZW1jcHkKPiA+ID4gdmVjdG9yIHZlcnNpb24gYW5kIGl0IGlz IGNhbGxlZCB2ZXJ5IG9mdGVuIGJ5IGV2ZXJ5IHByb2Nlc3MuIFNvIHRoYXQKPiA+ID4gd2UgYXNz dW1lIGlmIHRoZSB1c2VyIHByb2dyYW0gaXMgcnVubmluZyBpbiBhIENQVSB3aXRoIHZlY3RvciBJ U0EKPiA+ID4gd291bGQgbGlrZSB0byB1c2UgdmVjdG9yIGJ5IGRlZmF1bHQuIElmIHdlIGRpc2Fi bGUgaXQgYnkgZGVmYXVsdCBhbmQKPiA+ID4gbWFrZSBpdCB0cmlnZ2VyIHRoZSBpbGxlZ2FsIGlu c3RydWN0aW9uLCB0aGF0IG1pZ2h0IGJlIGEgYnVyZGVuIHNpbmNlCj4gPiA+IGFsbW9zdCBldmVy eSBwcm9jZXNzIHdpbGwgdXNlIHZlY3RvciBnbGliYyBtZW1jcHkgb3Igc29tZXRoaW5nIGxpa2UK PiA+ID4gdGhhdC4KPiA+Cj4gPiBEbyB5b3UgaGF2ZSBhbnkgZXZpZGVuY2UgdG8gc3VwcG9ydCB0 aGUgYXNzZXJ0aW9uIHRoYXQgYWxtb3N0IGV2ZXJ5IHByb2Nlc3MKPiA+IHdvdWxkIHVzZSB2ZWN0 b3Igb3BlcmF0aW9ucz8gIE9uZSBjb3VsZCBlYXNpbHkgYXJndWUgdGhhdCB0aGUgY29udmVyc2Ug aXMKPiA+IHRydWU6IG5vIGV4aXN0aW5nIHNvZnR3YXJlIHVzZXMgdGhlIHZlY3RvciBleHRlbnNp b24gbm93LCBzbyBtb3N0IGxpa2VseSBhCj4gPiBwcm9jZXNzIHdpbGwgbm90IGJlIHVzaW5nIGl0 Lgo+IAo+IEdsaWJjIHVzdHJlYW1pbmcgaXMganVzdCBzdGFydGluZyBzbyB5b3UgZGlkbid0IHNl ZSBzb2Z0d2FyZSB1c2luZyB0aGUKPiB2ZWN0b3IgZXh0ZW5zaW9uIG5vdyBhbmQgdGhpcyBwYXRj aHNldCBpcyB0ZXN0aW5nIGJhc2VkIG9uIHRob3NlCj4gb3B0aW1pemVkIGdsaWJjIHRvby4KPiBW aW5jZW50IENoZW4gaXMgd29ya2luZyBvbiB0aGUgZ2xpYmMgdmVjdG9yIHN1cHBvcnQgdXBzdHJl YW1pbmcgYW5kIHdlCj4gd2lsbCBhbHNvIHVwc3RyZWFtIHRoZSB2ZWN0b3IgdmVyc2lvbiBnbGli YyBtZW1jcHksIG1lbWNtcCwgbWVtY2hyLAo+IG1lbW1vdmUsIG1lbXNldCwgc3RyY21wLCBzdHJs ZW4uCj4gVGhlbiB3ZSB3aWxsIHNlZSBwbGF0Zm9ybSB3aXRoIHZlY3RvciBzdXBwb3J0IGNhbiB1 c2UgdmVjdG9yIHZlcnNpb24KPiBtZW0qIGFuZCBzdHIqIGZ1bmN0aW9ucyBhdXRvbWF0aWNhbGx5 IGJhc2VkIG9uIGlmdW5jIGFuZCBwbGF0Zm9ybQo+IHdpdGhvdXQgdmVjdG9yIHdpbGwgdXNlIHRo ZSBvcmlnaW5hbCBvbmUgYXV0b21hdGljYWxseS4gVGhlc2UgY291bGQgYmUKPiBkb25lIHRvIHNl bGVjdCB0aGUgY29ycmVjdCBvcHRpbWl6ZWQgZ2xpYmMgZnVuY3Rpb25zIGJ5IGlmdW5jCj4gbWVj aGFuaXNtLgo+IAo+ID4KPiA+ID4KPiA+ID4gPiBHaXZlbiB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9y IHN0YXRlIGFuZCBwb3RlbnRpYWwgcG93ZXIgYW5kIHBlcmZvcm1hbmNlCj4gPiA+ID4gaW1wbGlj YXRpb25zIG9mIGVuYWJsaW5nIHRoZSB2ZWN0b3IgZW5naW5lLCBpdCBzZWVtcyBsaWtlIHRoaXMg c2hvdWxkCj4gPiA+ID4gdHJlYXRlZCBzaW1pbGFybHkgdG8gSW50ZWwgQU1YIG9uIHg4Ni4gIFRo ZSBmdWxsIGRpc2N1c3Npb24gb2YgdGhhdCBpcwo+ID4gPiA+IGhlcmU6Cj4gPiA+ID4KPiA+ID4g PiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sL0NBTENFVHJXMlFIYTJUTHZuVXVWeEFBaGVx Y2JTWi01X1dSWHREU0FHY2JHOE4rZ3RkUS1Kc29Bd1VJc1hvc04rQnFROXJCRVVnQHB1YmxpYy5n bWFuZS5vcmcvCj4gPiA+ID4KPiA+ID4gPiBUaGUgY292ZXIgbGV0dGVyIGZvciByZWNlbnQgSW50 ZWwgQU1YIHBhdGNoZXMgaGFzIGEgc3VtbWFyeSBvZiB0aGUgeDg2Cj4gPiA+ID4gaW1wbGVtZW50 YXRpb246Cj4gPiA+ID4KPiA+ID4gPiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjEw ODI1MTU1NDEzLjE5NjczLTEtY2hhbmcuc2Vvay5iYWVAaW50ZWwuY29tLwo+ID4gPiA+Cj4gPiA+ ID4gSWYgUklTQy1WIHdlcmUgdG8gYWRvcHQgYSBzaW1pbGFyIGFwcHJvYWNoLCBJIHRoaW5rIHRo ZSBzaWduaWZpY2FudAo+ID4gPiA+IHBvaW50cyBhcmU6Cj4gPiA+ID4KPiA+ID4gPiAgIDEuIEEg cHJvY2VzcyAob3IgdGhyZWFkKSBtdXN0IHNwZWNpZmljYWxseSByZXF1ZXN0IHRoZSBkZXNpcmUg dG8gdXNlCj4gPiA+ID4gdmVjdG9yIGV4dGVuc2lvbnMgKHBlcmhhcHMgd2l0aCBzb21lIG5ldyBh cmNoX3ByY3RsKCkgQVBJKSwKPiA+ID4gPgo+ID4gPiA+ICAgMi4gVGhlIGtlcm5lbCBpcyBmcmVl IHRvIGRlbnkgcGVybWlzc2lvbiwgcGVyaGFwcyBiYXNlZCBvbgo+ID4gPiA+IGFkbWluaXN0cmF0 aXZlIHJ1bGVzIG9yIGZvciBvdGhlciByZWFzb25zLCBhbmQKPiA+ID4gPgo+ID4gPiA+ICAgMy4g SWYgYSBwcm9jZXNzIGF0dGVtcHRzIHRvIHVzZSB2ZWN0b3IgZXh0ZW5zaW9ucyBiZWZvcmUgZG9p bmcgdGhlCj4gPiA+ID4gYWJvdmUsIHRoZSBwcm9jZXNzIHdpbGwgZGllIGR1ZSB0byBhbiBpbGxl Z2FsIGluc3RydWN0aW9uLgo+ID4gPgo+ID4gPiBUaGFuayB5b3UgZm9yIHNoYXJpbmcgdGhpcywg YnV0IEkgYW0gbm90IHN1cmUgaWYgd2Ugc2hvdWxkIHRyZWF0Cj4gPiA+IHZlY3RvciBsaWtlIEFN WCBvbiB4ODYuIElNSE8sIGNvbXBpbGVyIG1pZ2h0IGdlbmVyYXRlIGNvZGUgd2l0aCB2ZWN0b3IK PiA+ID4gaW5zdHJ1Y3Rpb25zIGF1dG9tYXRpY2FsbHkgc29tZWRheSwgbWF5YmUgd2Ugc2hvdWxk IHRyZWF0IHZlY3Rvcgo+ID4gPiBleHRlbnNpb25zIGxpa2Ugb3RoZXIgZXh0ZW5zaW9ucy4KPiA+ ID4gSWYgdXNlciBrbm93cyB0aGUgdmVjdG9yIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhp cyBDUFUgYW5kIGhlCj4gPiA+IHdvdWxkIGxpa2UgdG8gdXNlIGl0LCBpdCBzZWVtcyB3ZSBzaG91 bGQgbGV0IHVzZXIgdXNlIGl0IGRpcmVjdGx5IGp1c3QKPiA+ID4gbGlrZSBvdGhlciBleHRlbnNp b25zLgo+ID4gPiBJZiB1c2VyIGRvbid0IGtub3cgaXQgZXhpc3RzIG9yIG5vdCwgdXNlciBzaG91 bGQgdXNlIHRoZSBsaWJyYXJ5IEFQSQo+ID4gPiB0cmFuc3BhcmVudGx5IGFuZCBsZXQgZ2xpYmMg b3Igb3RoZXIgbGlicmFyeSBkZWFsIHdpdGggaXQuIFRoZSBnbGliYwo+ID4gPiBpZnVuYyBmZWF0 dXJlIG9yIG11bHRpLWxpYiBzaG91bGQgYmUgYWJsZSB0byBjaG9vc2UgdGhlIGNvcnJlY3QKPiA+ ID4gaW1wbGVtZW50YXRpb24uCj4gPgo+ID4gV2hhdCBtYWtlcyBtZSB0aGluayB0aGF0IHRoZSB2 ZWN0b3IgZXh0ZW5zaW9uIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgQU1YIGlzCj4gPiB0aGF0IHRo ZXkgYm90aCAoMSkgaGF2ZSBhIHNpZ25pZmljYW50IGFtb3VudCBvZiBhcmNoaXRlY3R1cmFsIHN0 YXRlLCBhbmQKPiA+ICgyKSBsaWtlbHkgaGF2ZSBhIHNpZ25pZmljYW50IHBvd2VyIGFuZC9vciBh cmVhIGltcGFjdCBvbiAobm9uLWVtdWxhdGVkKQo+ID4gZGVzaWducy4KPiA+Cj4gPiBGb3IgZXhh bXBsZSwgSSB0aGluayBpdCBpcyBwb3NzaWJsZSwgbWF5YmUgZXZlbiBsaWtlbHksIHRoYXQgdmVj dG9yCj4gPiBpbXBsZW1lbnRhdGlvbnMgd2lsbCBoYXZlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xs b3dpbmcgYmVoYXZpb3JzOgo+ID4KPiA+ICAgMS4gQSBzaW5nbGUgdmVjdG9yIHVuaXQgc2hhcmVk IGFtb25nIHR3byBvciBtb3JlIGhhcnRzLAo+ID4KPiA+ICAgMi4gQWRkaXRpb25hbCBwb3dlciBj b25zdW1wdGlvbiB3aGVuIHRoZSB2ZWN0b3IgdW5pdCBpcyBlbmFibGVkIGFuZCBpZGxlCj4gPiB2 ZXJzdXMgbm90IGJlaW5nIGVuYWJsZWQgYXQgYWxsLAo+ID4KPiA+ICAgMy4gRm9yIGEgc3lzdGVt IHdoaWNoIHN1cHBvcnRzIHZhcmlhYmxlIG9wZXJhdGluZyBmcmVxdWVuY3ksIGEgcmVkdWN0aW9u Cj4gPiBpbiB0aGUgbWF4aW11bSBmcmVxdWVuY3kgd2hlbiB0aGUgdmVjdG9yIHVuaXQgaXMgZW5h YmxlZCwgYW5kL29yCj4gPgo+ID4gICA0LiBUaGUgaW5hYmlsaXR5IHRvIGVudGVyIGxvdyBwb3dl ciBzdGF0ZXMgYW5kL29yIGRlbGF5cyB0byBsb3cgcG93ZXIKPiA+IHN0YXRlcyB0cmFuc2l0aW9u cyB3aGVuIHRoZSB2ZWN0b3IgdW5pdCBpcyBlbmFibGVkLgo+ID4KPiA+IE5vbmUgb2YgdGhlIGFi b3ZlIGNvbnN0cmFpbnRzIGFwcGx5IHRvIG1vcmUgb3JkaW5hcnkgZXh0ZW5zaW9ucyBsaWtlCj4g PiBjb21wcmVzc2VkIG9yIHRoZSB2YXJpb3VzIGJpdCBtYW5pcHVsYXRpb24gZXh0ZW5zaW9ucy4K PiA+Cj4gPiBUaGUgZGlzY3Vzc2lvbiBJIGxpbmtlZCB0byBoYXMgc29tZSB3ZWxsIHJlYXNvbmVk IGFyZ3VtZW50cyBvbiB3aHkKPiA+IHN1YnN0YW50aWFsIGV4dGVuc2lvbnMgc2hvdWxkIGhhdmUg YSBtZWNoYW5pc20gdG8gcmVxdWVzdCB1c2luZyB0aGVtIGJ5Cj4gPiB1c2VyIHNwYWNlLiAgVGhl IGRpc2N1c3Npb24gd2FzIGluIHRoZSBjb250ZXh0IG9mIEludGVsIEFNWCwgYnV0IGFwcGxpZXMg dG8KPiA+IGZ1cnRoZXIgeDg2IGV4dGVuc2lvbnMsIGFuZCBJIHRoaW5rIHNob3VsZCBhbHNvIGFw cGx5IHRvIHNpbWlsYXIgZXh0ZW5zaW9ucwo+ID4gb24gUklTQy1WLCBsaWtlIHZlY3RvciBoZXJl Lgo+IAo+IEhhdmUgeW91IGV2ZXIgY2hlY2tlZCB0aGUgU1ZFL1NWRTIgb2YgQVJNNjQgaW1wbGVt ZW50YXRpb24gaW4gTGludXgga2VybmVsIHRvbz8KPiBJTUhPLCB0aGUgdmVjdG9yIG9mIFJJU0NW IHNob3VsZCBiZSBjbG9zZXIgdG8gdGhlIFNWRTIgb2YgQVJNNjQuCgpGb3IgU1ZFIG9uIGFybTY0 LCBtZW1vcnkgaXMgb25seSBhbGxvY2F0ZWQgYW5kIHRoZSBleHRlbnNpb24gaXMgb25seQplbmFi bGVkIHdoZW4gYSBwcm9jZXNzIGlzIGFjdGl2ZWx5IHVzaW5nIGl0LCB3aGljaCBpcyBub3Qgd2hh dCB0aGlzIHBhdGNoCnNldCBkb2VzLiAgSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzdGF0 ZSBtZW1vcnkgZmFpbHMsIGl0IHRyaWdnZXJzIGEKQlVHKCk7IHRoZXJlIGlzIG5vIGdyYWNlZnVs IHdheSB0byByZXBvcnQgdGhpcyB0byB0aGUgYXBwbGljYXRpb24uCgpUbyBkbyBzb21ldGhpbmcg c2ltaWxhciBmb3IgUklTQy1WLCB5b3Ugd2lsbCBuZWVkIHRvIHdyaXRlIGFuIGlsbGVnYWwKaW5z dHJ1Y3Rpb24gaGFuZGxlciB0byByZXRyaWV2ZSB0aGUgZmF1bHRpbmcgaW5zdHJ1Y3Rpb24gYW5k IHBhcnRpYWxseQpkZWNvZGUgaXQgZW5vdWdoIHRvIGRldGVybWluZSBpdCBpcyBhIHZlY3RvciBp bnN0cnVjdGlvbi4gIFRoYXQgc2VlbXMKbmVlZGxlc3NseSBjb21wbGljYXRlZCwgZG9lc24ndCBw cm92aWRlIGEgd2F5IHRvIGdyYWNlZnVsbHkgcmVwb3J0IGFuCmVycm9yIGlmIG1lbW9yeSBhbGxv Y2F0aW9uIGZhaWxzLCBhbmQgZG9lc24ndCBwcm92aWRlIGFueSBvZiB0aGUgb3RoZXIKYmVuZWZp dHMgdGhhdCBhIGRlZmluZWQgQVBJIHRvIHJlcXVlc3QgdXNlIG9mIHRoZSB2ZWN0b3IgZXh0ZW5z aW9uIHdvdWxkCnByb3ZpZGUuCgpEaWQgeW91IHJlYWQgdGhlIGRpc2N1c3Npb24gb24gSW50ZWwg QU1YIHN1cHBvcnQgdGhhdCBJIHByZXZpb3VzbHkgbGlua2VkCnRvPyAgVGhlcmUgYXJlIHdlbGwg cmVhc29uZWQgYXJndW1lbnRzIHdoeSBpdCBpcyBiZW5lZmljaWFsIHRvIHJlcXVpcmUgdGhhdAph IHByb2Nlc3MgcmVxdWVzdCBhY2Nlc3MgdG8gc3Vic3RhbnRpYWwgZXh0ZW5zaW9ucywgbGlrZSBS SVNDLVYgdmVjdG9yLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KbGludXgtcmlzY3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1y aXNjdgo= 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DBD23C433F5 for ; Tue, 5 Oct 2021 14:04:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C3DE76113D for ; Tue, 5 Oct 2021 14:04:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235319AbhJEOGh (ORCPT ); Tue, 5 Oct 2021 10:06:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38630 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234882AbhJEOGd (ORCPT ); Tue, 5 Oct 2021 10:06:33 -0400 Received: from mail-qt1-x82d.google.com (mail-qt1-x82d.google.com [IPv6:2607:f8b0:4864:20::82d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 53B06C02B862 for ; Tue, 5 Oct 2021 06:57:10 -0700 (PDT) Received: by mail-qt1-x82d.google.com with SMTP id t2so2115771qtx.8 for ; Tue, 05 Oct 2021 06:57:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bluespec-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=NfVK51vyrwzQypc0yAU+imlVZCK1KrIXqHieqWmh0ig=; b=E++B/WkJSG7ssKXKSvXKJm3qrtgEZYq/BSy1XZ+vnTgmIu+CCaPaJ6Hy/oMGS/76b/ ITakYEkCgmEtbJt6MdHADelt7482ZhVwq29WszCYB2AOm+PBf2MpTdnKKk8BBl0uk55m 61hsPHj6py0Hs1W2BQ4JALSTUyXIh9YV56MrrLcM36KPTNTgwO/Aid1EIoiV4k41X6nK E3v8tUcGdPv0X0yJhRdWqUnLQQE6TpfsMjT0EKg6jacXlML2Tngka6PAtaP6JoCsCPMJ 30hS26QAiUjYjgiis0346MY/oFalVce5W2SmruL1fKrTARp09ZsM79ay/fh0S3cPD5rI L+Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :content-transfer-encoding:in-reply-to; bh=NfVK51vyrwzQypc0yAU+imlVZCK1KrIXqHieqWmh0ig=; b=a++szkuPzMKZWgcHXbIwoKnHmPLKZjgMbUn2x4/xDy0jliQ+E3Thee+CJW+DuvTzFN Xj2B7t+84/i3OgC/ED/OmuGjyyIlpv/6nDLB9GBSVKLSoKadib5cAtlP8pHn+JfVCSF4 +nDYKXmIXuqnZ8x2WFCnC4wID52tqmZAwFnoMfD72Dvy7GeMkm/rEhWVrjpKykaaSJP1 0E2nQxYXMNhs7UdQxJGGU23vOnvz2flLQ/Hn30GY/0WxONI52PrvtxKOia5PvFeptlI5 SNqqPojeMfz3nviDdbHft/VxuaKuWxTDyzRUG/SR3+/ggdsxXSRXVJYYIao+bsBikfIo E6cg== X-Gm-Message-State: AOAM531vG2ntdoLruREtmesRUIUHohs/mNmKl1+LeUigCaw477gSnpyw 0hSxxp0YvBYmWG74VaBBCnLr X-Google-Smtp-Source: ABdhPJy2lsji8qKVwRYEl4lwaVYbuWKJTuedOlImuSqAyKdDNOYfxVBm4dvXEbGtA2eLFT3FAGHzqw== X-Received: by 2002:a05:622a:2c4:: with SMTP id a4mr19485542qtx.92.1633442229371; Tue, 05 Oct 2021 06:57:09 -0700 (PDT) Received: from bruce.bluespec.com ([154.3.44.94]) by smtp.gmail.com with ESMTPSA id r17sm10397337qtx.17.2021.10.05.06.57.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Oct 2021 06:57:08 -0700 (PDT) Date: Tue, 5 Oct 2021 09:57:06 -0400 From: Darius Rad To: Greentime Hu Cc: linux-riscv , Linux Kernel Mailing List , Albert Ou , Palmer Dabbelt , Paul Walmsley , Vincent Chen Subject: Re: [RFC PATCH v8 09/21] riscv: Add task switch support for vector Message-ID: Mail-Followup-To: Greentime Hu , linux-riscv , Linux Kernel Mailing List , Albert Ou , Palmer Dabbelt , Paul Walmsley , Vincent Chen References: <0e65c165e3d54a38cbba01603f325dca727274de.1631121222.git.greentime.hu@sifive.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Oct 04, 2021 at 08:36:30PM +0800, Greentime Hu wrote: > Darius Rad 於 2021年9月29日 週三 下午9:28寫道: > > > > On Tue, Sep 28, 2021 at 10:56:52PM +0800, Greentime Hu wrote: > > > Darius Rad 於 2021年9月13日 週一 下午8:21寫道: > > > > > > > > On 9/8/21 1:45 PM, Greentime Hu wrote: > > > > > This patch adds task switch support for vector. It supports partial lazy > > > > > save and restore mechanism. It also supports all lengths of vlen. > > > > > > > > > > [guoren@linux.alibaba.com: First available porting to support vector > > > > > context switching] > > > > > [nick.knight@sifive.com: Rewrite vector.S to support dynamic vlen, xlen and > > > > > code refine] > > > > > [vincent.chen@sifive.co: Fix the might_sleep issue in vstate_save, > > > > > vstate_restore] > > > > > Co-developed-by: Nick Knight > > > > > Signed-off-by: Nick Knight > > > > > Co-developed-by: Guo Ren > > > > > Signed-off-by: Guo Ren > > > > > Co-developed-by: Vincent Chen > > > > > Signed-off-by: Vincent Chen > > > > > Signed-off-by: Greentime Hu > > > > > --- > > > > > arch/riscv/include/asm/switch_to.h | 66 +++++++++++++++++++++++ > > > > > arch/riscv/kernel/Makefile | 1 + > > > > > arch/riscv/kernel/process.c | 38 ++++++++++++++ > > > > > arch/riscv/kernel/vector.S | 84 ++++++++++++++++++++++++++++++ > > > > > 4 files changed, 189 insertions(+) > > > > > create mode 100644 arch/riscv/kernel/vector.S > > > > > > > > > > diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h > > > > > index ec83770b3d98..de0573dad78f 100644 > > > > > --- a/arch/riscv/include/asm/switch_to.h > > > > > +++ b/arch/riscv/include/asm/switch_to.h > > > > > @@ -7,10 +7,12 @@ > > > > > #define _ASM_RISCV_SWITCH_TO_H > > > > > > > > > > #include > > > > > +#include > > > > > #include > > > > > #include > > > > > #include > > > > > #include > > > > > +#include > > > > > > > > > > #ifdef CONFIG_FPU > > > > > extern void __fstate_save(struct task_struct *save_to); > > > > > @@ -68,6 +70,68 @@ static __always_inline bool has_fpu(void) { return false; } > > > > > #define __switch_to_fpu(__prev, __next) do { } while (0) > > > > > #endif > > > > > > > > > > +#ifdef CONFIG_VECTOR > > > > > +extern bool has_vector; > > > > > +extern unsigned long riscv_vsize; > > > > > +extern void __vstate_save(struct __riscv_v_state *save_to, void *datap); > > > > > +extern void __vstate_restore(struct __riscv_v_state *restore_from, void *datap); > > > > > + > > > > > +static inline void __vstate_clean(struct pt_regs *regs) > > > > > +{ > > > > > + regs->status = (regs->status & ~(SR_VS)) | SR_VS_CLEAN; > > > > > +} > > > > > + > > > > > +static inline void vstate_off(struct task_struct *task, > > > > > + struct pt_regs *regs) > > > > > +{ > > > > > + regs->status = (regs->status & ~SR_VS) | SR_VS_OFF; > > > > > +} > > > > > + > > > > > +static inline void vstate_save(struct task_struct *task, > > > > > + struct pt_regs *regs) > > > > > +{ > > > > > + if ((regs->status & SR_VS) == SR_VS_DIRTY) { > > > > > + struct __riscv_v_state *vstate = &(task->thread.vstate); > > > > > + > > > > > + __vstate_save(vstate, vstate->datap); > > > > > + __vstate_clean(regs); > > > > > + } > > > > > +} > > > > > + > > > > > +static inline void vstate_restore(struct task_struct *task, > > > > > + struct pt_regs *regs) > > > > > +{ > > > > > + if ((regs->status & SR_VS) != SR_VS_OFF) { > > > > > + struct __riscv_v_state *vstate = &(task->thread.vstate); > > > > > + > > > > > + /* Allocate space for vector registers. */ > > > > > + if (!vstate->datap) { > > > > > + vstate->datap = kzalloc(riscv_vsize, GFP_ATOMIC); > > > > > + vstate->size = riscv_vsize; > > > > > + } > > > > > + __vstate_restore(vstate, vstate->datap); > > > > > + __vstate_clean(regs); > > > > > + } > > > > > +} > > > > > + > > > > > +static inline void __switch_to_vector(struct task_struct *prev, > > > > > + struct task_struct *next) > > > > > +{ > > > > > + struct pt_regs *regs; > > > > > + > > > > > + regs = task_pt_regs(prev); > > > > > + if (unlikely(regs->status & SR_SD)) > > > > > + vstate_save(prev, regs); > > > > > + vstate_restore(next, task_pt_regs(next)); > > > > > +} > > > > > + > > > > > +#else > > > > > +#define has_vector false > > > > > +#define vstate_save(task, regs) do { } while (0) > > > > > +#define vstate_restore(task, regs) do { } while (0) > > > > > +#define __switch_to_vector(__prev, __next) do { } while (0) > > > > > +#endif > > > > > + > > > > > extern struct task_struct *__switch_to(struct task_struct *, > > > > > struct task_struct *); > > > > > > > > > > @@ -77,6 +141,8 @@ do { \ > > > > > struct task_struct *__next = (next); \ > > > > > if (has_fpu()) \ > > > > > __switch_to_fpu(__prev, __next); \ > > > > > + if (has_vector) \ > > > > > + __switch_to_vector(__prev, __next); \ > > > > > ((last) = __switch_to(__prev, __next)); \ > > > > > } while (0) > > > > > > > > > > diff --git a/arch/riscv/kernel/Makefile b/arch/riscv/kernel/Makefile > > > > > index 3397ddac1a30..344078080839 100644 > > > > > --- a/arch/riscv/kernel/Makefile > > > > > +++ b/arch/riscv/kernel/Makefile > > > > > @@ -40,6 +40,7 @@ obj-$(CONFIG_MMU) += vdso.o vdso/ > > > > > > > > > > obj-$(CONFIG_RISCV_M_MODE) += traps_misaligned.o > > > > > obj-$(CONFIG_FPU) += fpu.o > > > > > +obj-$(CONFIG_VECTOR) += vector.o > > > > > obj-$(CONFIG_SMP) += smpboot.o > > > > > obj-$(CONFIG_SMP) += smp.o > > > > > obj-$(CONFIG_SMP) += cpu_ops.o > > > > > diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c > > > > > index 03ac3aa611f5..0b86e9e531c9 100644 > > > > > --- a/arch/riscv/kernel/process.c > > > > > +++ b/arch/riscv/kernel/process.c > > > > > @@ -95,6 +95,16 @@ void start_thread(struct pt_regs *regs, unsigned long pc, > > > > > */ > > > > > fstate_restore(current, regs); > > > > > } > > > > > + > > > > > + if (has_vector) { > > > > > + regs->status |= SR_VS_INITIAL; > > > > > + /* > > > > > + * Restore the initial value to the vector register > > > > > + * before starting the user program. > > > > > + */ > > > > > + vstate_restore(current, regs); > > > > > + } > > > > > + > > > > > > > > So this will unconditionally enable vector instructions, and allocate > > > > memory for vector state, for all processes, regardless of whether vector > > > > instructions are used? > > > > > > > > > > Hi Darius, > > > > > > Yes, it will enable vector if has_vector() is true. The reason that we > > > choose to enable and allocate memory for user space program is because > > > we also implement some common functions in the glibc such as memcpy > > > vector version and it is called very often by every process. So that > > > we assume if the user program is running in a CPU with vector ISA > > > would like to use vector by default. If we disable it by default and > > > make it trigger the illegal instruction, that might be a burden since > > > almost every process will use vector glibc memcpy or something like > > > that. > > > > Do you have any evidence to support the assertion that almost every process > > would use vector operations? One could easily argue that the converse is > > true: no existing software uses the vector extension now, so most likely a > > process will not be using it. > > Glibc ustreaming is just starting so you didn't see software using the > vector extension now and this patchset is testing based on those > optimized glibc too. > Vincent Chen is working on the glibc vector support upstreaming and we > will also upstream the vector version glibc memcpy, memcmp, memchr, > memmove, memset, strcmp, strlen. > Then we will see platform with vector support can use vector version > mem* and str* functions automatically based on ifunc and platform > without vector will use the original one automatically. These could be > done to select the correct optimized glibc functions by ifunc > mechanism. > > > > > > > > > > Given the size of the vector state and potential power and performance > > > > implications of enabling the vector engine, it seems like this should > > > > treated similarly to Intel AMX on x86. The full discussion of that is > > > > here: > > > > > > > > https://lore.kernel.org/lkml/CALCETrW2QHa2TLvnUuVxAAheqcbSZ-5_WRXtDSAGcbG8N+gtdQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org/ > > > > > > > > The cover letter for recent Intel AMX patches has a summary of the x86 > > > > implementation: > > > > > > > > https://lore.kernel.org/lkml/20210825155413.19673-1-chang.seok.bae@intel.com/ > > > > > > > > If RISC-V were to adopt a similar approach, I think the significant > > > > points are: > > > > > > > > 1. A process (or thread) must specifically request the desire to use > > > > vector extensions (perhaps with some new arch_prctl() API), > > > > > > > > 2. The kernel is free to deny permission, perhaps based on > > > > administrative rules or for other reasons, and > > > > > > > > 3. If a process attempts to use vector extensions before doing the > > > > above, the process will die due to an illegal instruction. > > > > > > Thank you for sharing this, but I am not sure if we should treat > > > vector like AMX on x86. IMHO, compiler might generate code with vector > > > instructions automatically someday, maybe we should treat vector > > > extensions like other extensions. > > > If user knows the vector extension is supported in this CPU and he > > > would like to use it, it seems we should let user use it directly just > > > like other extensions. > > > If user don't know it exists or not, user should use the library API > > > transparently and let glibc or other library deal with it. The glibc > > > ifunc feature or multi-lib should be able to choose the correct > > > implementation. > > > > What makes me think that the vector extension should be treated like AMX is > > that they both (1) have a significant amount of architectural state, and > > (2) likely have a significant power and/or area impact on (non-emulated) > > designs. > > > > For example, I think it is possible, maybe even likely, that vector > > implementations will have one or more of the following behaviors: > > > > 1. A single vector unit shared among two or more harts, > > > > 2. Additional power consumption when the vector unit is enabled and idle > > versus not being enabled at all, > > > > 3. For a system which supports variable operating frequency, a reduction > > in the maximum frequency when the vector unit is enabled, and/or > > > > 4. The inability to enter low power states and/or delays to low power > > states transitions when the vector unit is enabled. > > > > None of the above constraints apply to more ordinary extensions like > > compressed or the various bit manipulation extensions. > > > > The discussion I linked to has some well reasoned arguments on why > > substantial extensions should have a mechanism to request using them by > > user space. The discussion was in the context of Intel AMX, but applies to > > further x86 extensions, and I think should also apply to similar extensions > > on RISC-V, like vector here. > > Have you ever checked the SVE/SVE2 of ARM64 implementation in Linux kernel too? > IMHO, the vector of RISCV should be closer to the SVE2 of ARM64. For SVE on arm64, memory is only allocated and the extension is only enabled when a process is actively using it, which is not what this patch set does. If the memory allocation for state memory fails, it triggers a BUG(); there is no graceful way to report this to the application. To do something similar for RISC-V, you will need to write an illegal instruction handler to retrieve the faulting instruction and partially decode it enough to determine it is a vector instruction. That seems needlessly complicated, doesn't provide a way to gracefully report an error if memory allocation fails, and doesn't provide any of the other benefits that a defined API to request use of the vector extension would provide. Did you read the discussion on Intel AMX support that I previously linked to? There are well reasoned arguments why it is beneficial to require that a process request access to substantial extensions, like RISC-V vector.