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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 718FEC3DA79 for ; Mon, 15 Jan 2024 06:55:14 +0000 (UTC) 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:From:References:CC:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=84PDr1erHKrQXgVeQ0Q08l3pDIZO4PInEZ4czu6xBnY=; b=SFnWDFVvNZ9KQn O+hOqnHkmcpSHyJgGkdBmt00GhAjNrCb1llD7JM2DIUt9yhXss3p/pN15tGRk1b+Je0oprVjU1LD3 nDtckBnO2YNGCRNM9mbVHcq14sLk3c11SYwnj/j9JD7xK8HVIqaVPSSyNe6cEpc0cxG/zn/dTD2N0 6MzfeCpHV0WMibzIRsiQFML07awV06Cdka0gLDGBjlN6psjQThHVEpXJ8N/bIAJHX6W5L8tMQ+jeX tFd8InganYYlu27gKPvZvF+Md72zKJnHWfsT7cFf/7lYr8/qARzelU/Z4Mskt05bp6bfS6jMAk4Dj Vd+yuSNhRkNB6MqatWoQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rPGro-0080bk-0f; Mon, 15 Jan 2024 06:54:40 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rPGrj-0080Zo-0g for linux-arm-kernel@lists.infradead.org; Mon, 15 Jan 2024 06:54:38 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 40F6sJsD011020; Mon, 15 Jan 2024 00:54:19 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1705301659; bh=m1mxe8d7nT+K4Nm5wafkruzgsL9mWqgJvfnfAjVx5bc=; h=Date:Subject:To:CC:References:From:In-Reply-To; b=pX5IN/dnM20yIUV47TsLcK6qJnqVyVKTvGxCMRh8Z5GoZpTxa80TJnrIHqHhsMln+ npfGXl48WON3b56wn/Q4OnxbB8S0KFV7Hgw98JQtGhTZOdgADuNKmBJWpll09GR8+j N/kal71uJOiWl7WENtWAIrt9ikDDMFaWIXM6Mcg4= Received: from DLEE101.ent.ti.com (dlee101.ent.ti.com [157.170.170.31]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 40F6sIoI066956 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 15 Jan 2024 00:54:19 -0600 Received: from DLEE108.ent.ti.com (157.170.170.38) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Mon, 15 Jan 2024 00:54:18 -0600 Received: from lelvsmtp5.itg.ti.com (10.180.75.250) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Mon, 15 Jan 2024 00:54:18 -0600 Received: from [10.24.69.25] (danish-tpc.dhcp.ti.com [10.24.69.25]) by lelvsmtp5.itg.ti.com (8.15.2/8.15.2) with ESMTP id 40F6sCvS096901; Mon, 15 Jan 2024 00:54:13 -0600 Message-ID: Date: Mon, 15 Jan 2024 12:24:12 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net-next v4] net: ti: icssg_prueth: add TAPRIO offload support Content-Language: en-US To: Vladimir Oltean CC: Andrew Lunn , Roger Quadros , Vignesh Raghavendra , Richard Cochran , Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S. Miller" , Simon Horman , , , , , , Roger Quadros , Vinicius Costa Gomes References: <20231006102028.3831341-1-danishanwar@ti.com> <20231011102536.r65xyzmh5kap2cf2@skbuf> From: MD Danish Anwar In-Reply-To: <20231011102536.r65xyzmh5kap2cf2@skbuf> X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240114_225435_351611_10A938C2 X-CRM114-Status: GOOD ( 45.45 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgVmxhZGltaXIsCgpPbiAxMS8xMC8yMyAzOjU1IHBtLCBWbGFkaW1pciBPbHRlYW4gd3JvdGU6 Cj4gT24gRnJpLCBPY3QgMDYsIDIwMjMgYXQgMDM6NTA6MjhQTSArMDUzMCwgTUQgRGFuaXNoIEFu d2FyIHdyb3RlOgo+PiBGcm9tOiBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPgo+Pgo+PiBJ Q1NTRyBkdWFsLWVtYWMgZi93IHN1cHBvcnRzIEVuaGFuY2VkIFNjaGVkdWxlZCBUcmFmZmljIChF U1Qg4oCTIGRlZmluZWQKPj4gaW4gUDgwMi4xUWJ2L0QyLjIgdGhhdCBsYXRlciBnb3QgaW5jbHVk ZWQgaW4gSUVFRSA4MDIuMVEtMjAxOCkKPj4gY29uZmlndXJhdGlvbi4gRVNUIGFsbG93cyBleHBy ZXNzIHF1ZXVlIHRyYWZmaWMgdG8gYmUgc2NoZWR1bGVkCj4+IChwbGFjZWQpIG9uIHRoZSB3aXJl IGF0IHNwZWNpZmljIHJlcGVhdGFibGUgdGltZSBpbnRlcnZhbHMuIEluCj4+IExpbnV4IGtlcm5l bCwgRVNUIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB0aHJvdWdoIHRjIGNvbW1hbmQgYW5kCj4+IHRo ZSB0YXByaW8gc2NoZWR1bGVyIGluIHRoZSBuZXQgY29yZSBpbXBsZW1lbnRzIGEgc29mdHdhcmUg b25seQo+PiBzY2hlZHVsZXIgKFNDSF9UQVBSSU8pLiBJZiB0aGUgTklDIGlzIGNhcGFibGUgb2Yg RVNUIGNvbmZpZ3VyYXRpb24sCj4+IHVzZXIgaW5kaWNhdGUgImZsYWcgMiIgaW4gdGhlIGNvbW1h bmQgd2hpY2ggaXMgdGhlbiBwYXJzZWQgYnkKPj4gdGFwcmlvIHNjaGVkdWxlciBpbiBuZXQgY29y ZSBhbmQgaW5kaWNhdGUgdGhhdCB0aGUgY29tbWFuZCBpcyB0bwo+PiBiZSBvZmZsb2FkZWQgdG8g aC93LiB0YXByaW8gdGhlbiBvZmZsb2FkcyB0aGUgY29tbWFuZCB0byB0aGUKPj4gZHJpdmVyIGJ5 IGNhbGxpbmcgbmRvX3NldHVwX3RjKCkgbmRvIG9wcy4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzCj4+ IG5kb19zZXR1cF90YygpIHRvIG9mZmxvYWQgRVNUIGNvbmZpZ3VyYXRpb24gdG8gSUNTU0cuCj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+Cj4+IFNpZ25l ZC1vZmYtYnk6IFZpZ25lc2ggUmFnaGF2ZW5kcmEgPHZpZ25lc2hyQHRpLmNvbT4KPj4gU2lnbmVk LW9mZi1ieTogTUQgRGFuaXNoIEFud2FyIDxkYW5pc2hhbndhckB0aS5jb20+Cj4+IC0tLQo+PiBD YzogUm9nZXIgUXVhZHJvcyA8cm9nZXJxQHRpLmNvbT4KPj4gQ2M6IEFuZHJldyBMdW5uIDxhbmRy ZXdAbHVubi5jaD4KPj4gQ2M6IFZpbmljaXVzIENvc3RhIEdvbWVzIDx2aW5pY2l1cy5nb21lc0Bp bnRlbC5jb20+Cj4+IENjOiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgo+Pgo+PiBD aGFuZ2VzIGZyb20gdjMgdG8gdjQ6Cj4+ICopIFJlYmFzZWQgb24gdGhlIGxhdGVzdCBuZXh0LTIw MjMxMDA1IGxpbnV4LW5leHQuCj4gCj4gVGhlIHRyZWUgdGhhdCB0aGUgcGF0Y2ggd2lsbCBiZSBh cHBsaWVkIHRvIGlzCj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5l bC9naXQvbmV0ZGV2L25ldC1uZXh0LmdpdCwKPiBub3QgbGludXgtbmV4dC4KPiAKClN1cmUuIEkg d2lsbCByZWJhc2UgdGhpcyBvbiBuZXQtbmV4dCBhbmQgcmVzZW5kLgoKPj4gKikgQWRkcmVzc2Vk IFJvZ2VyIGFuZCBWaW5pY2l1cycgY29tbWVudHMgYW5kIG1vdmVkIGFsbCB0aGUgdmFsaWRhdGlv bnMgdG8KPj4gICAgZW1hY190YXByaW9fcmVwbGFjZSgpIEFQSS4KPj4gKikgTW9kaWZpZWQgZW1h Y19zZXR1cF90YXByaW8oKSBBUEkgdG8gdXNlIHN3aXRjaCBjYXNlIGJhc2VkIG9uIHRhcHJpby0+ Y21kCj4+ICAgIGFuZCBhZGRlZCBlbWFjX3RhcHJpb19kZXN0cm95KCkgYW5kIGVtYWNfdGFwcmlv X3JlcGxhY2UoKSBBUElzLgo+PiAqKSBNb2RpZmllZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiBzdHJ1 Y3RzIC8gZW51bXMgaW4gaWNzc2dfcW9zLmggYnkgdXNpbmcKPj4gICAgdGhlIGNvcnJlY3Qga2Rv YyBmb3JtYXQuCj4+Cj4+IENoYW5nZXMgZnJvbSB2MiB0byB2MzoKPj4gKikgUmViYXNlZCBvbiB0 aGUgbGF0ZXN0IG5leHQtMjAyMzA5MjggbGludXgtbmV4dC4KPj4gKikgUmV0YWluZWQgb3JpZ2lu YWwgYXV0aG9yc2hpcCBvZiB0aGUgcGF0Y2guCj4+ICopIEFkZHJlc3NlZCBSb2dlcidzIGNvbW1l bnRzIGFuZCBtb2RpZmllZCBlbWFjX3NldHVwX3RhcHJpbygpIGFuZAo+PiAgICBlbWFjX3NldF90 YXByaW8oKSBBUElzIGFjY29yZGluZ2x5Lgo+PiAqKSBSZW1vdmVkIG5ldGlmX3J1bm5pbmcoKSBj aGVjayBmcm9tIGVtYWNfc2V0dXBfdGFwcmlvKCkuCj4+ICopIEFkZHJlc3NlZCBWaW5pY2l1cycg Y29tbWVudHMgYW5kIGFkZGVkIGNoZWNrIGZvciBNSU4gYW5kIE1BWCBjeWNsZSB0aW1lLgo+PiAq KSBBZGRlZCBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIG9mIGVzdF9uZXcgaW4gZW1hY19z ZXR1cF90YXByaW8oKS4KPj4KPj4gQ2hhbmdlcyBmcm9tIHYxIHRvIHYyOgo+PiAqKSBSZWJhc2Vk IG9uIHRoZSBsYXRlc3QgbmV4dC0yMDIzMDkyMSBsaW51eC1uZXh0Lgo+PiAqKSBEcm9wcGVkIHRo ZSBSRkMgdGFnIGFzIG1lcmdlIHdpbmRvdyBpcyBvcGVuIG5vdy4KPj4gKikgU3BsaXR0ZWQgdGhp cyBwYXRjaCBmcm9tIHRoZSBzd2l0Y2ggbW9kZSBzZXJpZXMgW3YxXS4KPj4gKikgUmVtb3ZlZCBU T0RPIGNvbW1lbnQgYXMgYXNrZWQgYnkgQW5kcmV3IGFuZCBSb2dlci4KPj4gKikgQ2hhbmdlZCBD b3B5cmlnaHQgdG8gMjAyMyBhcyBhc2tlZCBieSBSb2dlci4KPj4KPj4gdjM6IGh0dHBzOi8vbG9y ZS5rZXJuZWwub3JnL2FsbC8yMDIzMDkyODEwMzAwMC4xODYzMDQtMS1kYW5pc2hhbndhckB0aS5j b20vCj4+IHYyOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyMzA5MjEwNzAwMzEuNzk1 Nzg4LTEtZGFuaXNoYW53YXJAdGkuY29tLwo+PiB2MTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcv YWxsLzIwMjMwODMwMTEwODQ3LjEyMTk1MTUtMS1kYW5pc2hhbndhckB0aS5jb20vCj4+Cj4+ICBk cml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQo+PiAg ZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgfCAgIDUgKy0KPj4g IGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIHwgICA2ICsKPj4g IGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jICAgIHwgMzAxICsrKysr KysrKysrKysrKysrKysKPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fv cy5oICAgIHwgMTEzICsrKysrKysKPj4gIDUgZmlsZXMgY2hhbmdlZCwgNDI2IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRo ZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9N YWtlZmlsZQo+PiBpbmRleCAzNGZkN2E3MTZiYTYuLjBkZjYwZGVkMWIyZCAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9uZXQv ZXRoZXJuZXQvdGkvTWFrZWZpbGUKPj4gQEAgLTM3LDUgKzM3LDYgQEAgaWNzc2ctcHJ1ZXRoLXkg Oj0gazMtY3BwaS1kZXNjLXBvb2wubyBcCj4+ICAJCSAgaWNzc2cvaWNzc2dfY29uZmlnLm8gXAo+ PiAgCQkgIGljc3NnL2ljc3NnX21paV9jZmcubyBcCj4+ICAJCSAgaWNzc2cvaWNzc2dfc3RhdHMu byBcCj4+IC0JCSAgaWNzc2cvaWNzc2dfZXRodG9vbC5vCj4+ICsJCSAgaWNzc2cvaWNzc2dfZXRo dG9vbC5vIFwKPj4gKwkJICBpY3NzZy9pY3NzZ19xb3Mubwo+PiAgb2JqLSQoQ09ORklHX1RJX0lD U1NfSUVQKSArPSBpY3NzZy9pY3NzX2llcC5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9l dGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Rp L2ljc3NnL2ljc3NnX3BydWV0aC5jCj4+IGluZGV4IDY2MzViMjhiYzY3Mi4uODljMzAxNzE2OTI2 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVl dGguYwo+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGgu Ywo+PiBAQCAtMTE2Niw3ICsxMTY2LDcgQEAgc3RhdGljIGludCBlbWFjX3BoeV9jb25uZWN0KHN0 cnVjdCBwcnVldGhfZW1hYyAqZW1hYykKPj4gIAlyZXR1cm4gMDsKPj4gIH0KPj4gIAo+PiAtc3Rh dGljIHU2NCBwcnVldGhfaWVwX2dldHRpbWUodm9pZCAqY2xvY2tvcHNfZGF0YSwgc3RydWN0IHB0 cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpCj4+ICt1NjQgcHJ1ZXRoX2llcF9nZXR0aW1lKHZvaWQg KmNsb2Nrb3BzX2RhdGEsIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQo+PiAgewo+ PiAgCXUzMiBoaV9yb2xsb3Zlcl9jb3VudCwgaGlfcm9sbG92ZXJfY291bnRfcjsKPj4gIAlzdHJ1 Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMgPSBjbG9ja29wc19kYXRhOwo+PiBAQCAtMTQwMyw2ICsxNDAz LDggQEAgc3RhdGljIGludCBlbWFjX25kb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQo+ PiAgCQluYXBpX2VuYWJsZSgmZW1hYy0+dHhfY2huc1tpXS5uYXBpX3R4KTsKPj4gIAluYXBpX2Vu YWJsZSgmZW1hYy0+bmFwaV9yeCk7Cj4+ICAKPj4gKwlpY3NzZ19xb3NfdGFzX2luaXQobmRldik7 Cj4gCj4gSSBiZWxpZXZlIHRoZSBpbnRlbnRpb24gaXMgZm9yIHRoaXMgY29kZSB0byBiZSBydW4g YmVmb3JlIGFueSB0YXByaW8KPiBvZmZsb2FkIGlzIGFkZGVkLCBjb3JyZWN0PyBCdXQgaXQgaXMg cG9zc2libGUgZm9yIHRoZSB1c2VyIHRvIGFkZCBhbgoKWWVzLCB0aGUgaW50ZW50aW9uIGhlcmUg aXMgdG8gcnVuIHRoaXMgY29kZSBiZWZvcmUgYW55IHRhcHJpbyBvZmZsb2FkIGlzCmFkZGVkLgoK PiBvZmZsb2FkZWQgUWRpc2MgZXZlbiB3aGlsZSB0aGUgbmV0ZGV2IGhhcyBub3QgeWV0IGJlZW4g YnJvdWdodCB1cC4KPiBJcyB0aGF0IGNhc2UgaGFuZGxlZCBjb3JyZWN0bHksIG9yIHdpbGwgaXQg c2ltcGx5IHJlc3VsdCBpbiBOVUxMIHBvaW50ZXIKPiBkZXJlZmVyZW5jZXMgKHRhcy0+Y29uZmln X2xpc3QpPwo+IAoKSW4gdGhhdCBjYXNlLCBpdCB3aWxsIGV2ZW50dWFsbHkgcmVzdWx0IGluIE5V TEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhcwp0YXMtPmNvbmZpZ19saXN0IHdpbGwgYmUgcG9pbnRp bmcgdG8gTlVMTC4gVG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5IHdlCmNhbiBhZGQgdGhlIGJlbG93 IGNoZWNrIGluIGVtYWNfdGFwcmlvX3JlcGxhY2UoKS4KCmlmICghbmRldl9ydW5uaW5nKG5kZXYp KSB7CgluZXRkZXZfZXJyKG5kZXYsICJEZXZpY2UgaXMgbm90IHJ1bm5pbmciKTsKCXJldHVybiAt RUlOVkFMOwp9Cgo+PiArCj4+ICAJLyogc3RhcnQgUEhZICovCj4+ICAJcGh5X3N0YXJ0KG5kZXYt PnBoeWRldik7Cj4+ICAKPj4gQEAgLTE2NjksNiArMTY3MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgbmV0X2RldmljZV9vcHMgZW1hY19uZXRkZXZfb3BzID0gewo+PiAgCS5uZG9fc2V0X3J4X21v ZGUgPSBlbWFjX25kb19zZXRfcnhfbW9kZSwKPj4gIAkubmRvX2V0aF9pb2N0bCA9IGVtYWNfbmRv X2lvY3RsLAo+PiAgCS5uZG9fZ2V0X3N0YXRzNjQgPSBlbWFjX25kb19nZXRfc3RhdHM2NCwKPj4g KwkubmRvX3NldHVwX3RjID0gaWNzc2dfcW9zX25kb19zZXR1cF90YywKPj4gIH07Cj4+ICAKPj4g IC8qIGdldCBlbWFjX3BvcnQgY29ycmVzcG9uZGluZyB0byBldGhfbm9kZSBuYW1lICovCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaCBi L2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oCj4+IGluZGV4IDhi NmQ2YjQ5NzAxMC4uN2NiZjBlNTYxOTA1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhl cm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguaAo+PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC90aS9pY3NzZy9pY3NzZ19wcnVldGguaAo+PiBAQCAtMzcsNiArMzcsNyBAQAo+PiAgI2luY2x1 ZGUgImljc3NnX2NvbmZpZy5oIgo+PiAgI2luY2x1ZGUgImljc3NfaWVwLmgiCj4+ICAjaW5jbHVk ZSAiaWNzc2dfc3dpdGNoX21hcC5oIgo+PiArI2luY2x1ZGUgImljc3NnX3Fvcy5oIgo+PiAgCj4+ ICAjZGVmaW5lIFBSVUVUSF9NQVhfTVRVICAgICAgICAgICgyMDAwIC0gRVRIX0hMRU4gLSBFVEhf RkNTX0xFTikKPj4gICNkZWZpbmUgUFJVRVRIX01JTl9QS1RfU0laRSAgICAgKFZMQU5fRVRIX1pM RU4pCj4+IEBAIC0xNzQsNiArMTc1LDggQEAgc3RydWN0IHBydWV0aF9lbWFjIHsKPj4gIAo+PiAg CXN0cnVjdCBwcnVzc19tZW1fcmVnaW9uIGRyYW07Cj4+ICAKPj4gKwlzdHJ1Y3QgcHJ1ZXRoX3Fv cyBxb3M7Cj4+ICsKPj4gIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7Cj4+ICAJdTY0 IHN0YXRzW0lDU1NHX05VTV9TVEFUU107Cj4+ICB9Owo+PiBAQCAtMjg1LDQgKzI4OCw3IEBAIHUz MiBpY3NzZ19xdWV1ZV9sZXZlbChzdHJ1Y3QgcHJ1ZXRoICpwcnVldGgsIGludCBxdWV1ZSk7Cj4+ ICB2b2lkIGVtYWNfc3RhdHNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7 Cj4+ICB2b2lkIGVtYWNfdXBkYXRlX2hhcmR3YXJlX3N0YXRzKHN0cnVjdCBwcnVldGhfZW1hYyAq ZW1hYyk7Cj4+ICBpbnQgZW1hY19nZXRfc3RhdF9ieV9uYW1lKHN0cnVjdCBwcnVldGhfZW1hYyAq ZW1hYywgY2hhciAqc3RhdF9uYW1lKTsKPj4gKwo+PiArdTY0IHBydWV0aF9pZXBfZ2V0dGltZSh2 b2lkICpjbG9ja29wc19kYXRhLCBzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnN0cyk7Cj4+ ICsKPj4gICNlbmRpZiAvKiBfX05FVF9USV9JQ1NTR19QUlVFVEhfSCAqLwo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcW9zLmMgYi9kcml2ZXJzL25l dC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiBpbmRleCAwMDAwMDAwMDAwMDAuLmM4YzQ0NTBjNDFiYgo+PiAtLS0gL2Rldi9udWxsCj4+ICsr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jCj4+IEBAIC0wLDAg KzEsMzAxIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyog VGV4YXMgSW5zdHJ1bWVudHMgSUNTU0cgUFJVRVRIIFFvUyBzdWJtb2R1bGUKPj4gKyAqIENvcHly aWdodCAoQykgMjAyMyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3 LnRpLmNvbS8KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+Cj4+ICsj aW5jbHVkZSAiaWNzc2dfcHJ1ZXRoLmgiCj4+ICsjaW5jbHVkZSAiaWNzc2dfc3dpdGNoX21hcC5o Igo+PiArCj4+ICtzdGF0aWMgdm9pZCB0YXNfdXBkYXRlX2Z3X2xpc3RfcG9pbnRlcnMoc3RydWN0 IHBydWV0aF9lbWFjICplbWFjKQo+PiArewo+PiArCXN0cnVjdCB0YXNfY29uZmlnICp0YXMgPSAm ZW1hYy0+cW9zLnRhcy5jb25maWc7Cj4+ICsKPj4gKwlpZiAoKHJlYWRiKHRhcy0+YWN0aXZlX2xp c3QpKSA9PSBUQVNfTElTVDApIHsKPj4gKwkJdGFzLT5md19hY3RpdmVfbGlzdCA9IGVtYWMtPmRy YW0udmEgKyBUQVNfR0FURV9NQVNLX0xJU1QwOwo+PiArCQl0YXMtPmZ3X3NoYWRvd19saXN0ID0g ZW1hYy0+ZHJhbS52YSArIFRBU19HQVRFX01BU0tfTElTVDE7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJ dGFzLT5md19hY3RpdmVfbGlzdCA9IGVtYWMtPmRyYW0udmEgKyBUQVNfR0FURV9NQVNLX0xJU1Qx Owo+PiArCQl0YXMtPmZ3X3NoYWRvd19saXN0ID0gZW1hYy0+ZHJhbS52YSArIFRBU19HQVRFX01B U0tfTElTVDA7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0YXNfdXBkYXRlX21h eHNkdV90YWJsZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRh c19jb25maWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwl1MTYgX19pb21lbSAq bWF4X3NkdV90YmxfcHRyOwo+PiArCXU4IGdhdGVfaWR4Owo+PiArCj4+ICsJLyogdXBkYXRlIHRo ZSBtYXhzZHUgdGFibGUgKi8KPj4gKwltYXhfc2R1X3RibF9wdHIgPSBlbWFjLT5kcmFtLnZhICsg VEFTX1FVRVVFX01BWF9TRFVfTElTVDsKPj4gKwo+PiArCWZvciAoZ2F0ZV9pZHggPSAwOyBnYXRl X2lkeCA8IFRBU19NQVhfTlVNX1FVRVVFUzsgZ2F0ZV9pZHgrKykKPj4gKwkJd3JpdGV3KHRhcy0+ bWF4X3NkdV90YWJsZS5tYXhfc2R1W2dhdGVfaWR4XSwgJm1heF9zZHVfdGJsX3B0cltnYXRlX2lk eF0pOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0YXNfcmVzZXQoc3RydWN0IHBydWV0aF9l bWFjICplbWFjKQo+PiArewo+PiArCXN0cnVjdCB0YXNfY29uZmlnICp0YXMgPSAmZW1hYy0+cW9z LnRhcy5jb25maWc7Cj4+ICsJaW50IGk7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgVEFTX01B WF9OVU1fUVVFVUVTOyBpKyspCj4+ICsJCXRhcy0+bWF4X3NkdV90YWJsZS5tYXhfc2R1W2ldID0g MjA0ODsKPj4gKwo+PiArCXRhc191cGRhdGVfbWF4c2R1X3RhYmxlKGVtYWMpOwo+PiArCj4+ICsJ d3JpdGViKFRBU19MSVNUMCwgdGFzLT5hY3RpdmVfbGlzdCk7Cj4+ICsKPj4gKwltZW1zZXRfaW8o dGFzLT5md19hY3RpdmVfbGlzdCwgMCwgc2l6ZW9mKCp0YXMtPmZ3X2FjdGl2ZV9saXN0KSk7Cj4+ ICsJbWVtc2V0X2lvKHRhcy0+Zndfc2hhZG93X2xpc3QsIDAsIHNpemVvZigqdGFzLT5md19zaGFk b3dfbGlzdCkpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRhc19zZXRfc3RhdGUoc3RydWN0 IHBydWV0aF9lbWFjICplbWFjLCBlbnVtIHRhc19zdGF0ZSBzdGF0ZSkKPj4gK3sKPj4gKwlzdHJ1 Y3QgdGFzX2NvbmZpZyAqdGFzID0gJmVtYWMtPnFvcy50YXMuY29uZmlnOwo+PiArCWludCByZXQ7 Cj4+ICsKPj4gKwlpZiAodGFzLT5zdGF0ZSA9PSBzdGF0ZSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsK Pj4gKwlzd2l0Y2ggKHN0YXRlKSB7Cj4+ICsJY2FzZSBUQVNfU1RBVEVfUkVTRVQ6Cj4+ICsJCXRh c19yZXNldChlbWFjKTsKPj4gKwkJcmV0ID0gZW1hY19zZXRfcG9ydF9zdGF0ZShlbWFjLCBJQ1NT R19FTUFDX1BPUlRfVEFTX1JFU0VUKTsKPj4gKwkJdGFzLT5zdGF0ZSA9IFRBU19TVEFURV9SRVNF VDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBUQVNfU1RBVEVfRU5BQkxFOgo+PiArCQlyZXQgPSBl bWFjX3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9UQVNfRU5BQkxFKTsKPj4g KwkJdGFzLT5zdGF0ZSA9IFRBU19TVEFURV9FTkFCTEU7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2Ug VEFTX1NUQVRFX0RJU0FCTEU6Cj4+ICsJCXJldCA9IGVtYWNfc2V0X3BvcnRfc3RhdGUoZW1hYywg SUNTU0dfRU1BQ19QT1JUX1RBU19ESVNBQkxFKTsKPj4gKwkJdGFzLT5zdGF0ZSA9IFRBU19TVEFU RV9ESVNBQkxFOwo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQluZXRkZXZfZXJyKGVt YWMtPm5kZXYsICIlczogdW5zdXBwb3J0ZWQgc3RhdGVcbiIsIF9fZnVuY19fKTsKPj4gKwkJcmV0 ID0gLUVJTlZBTDsKPj4gKwkJYnJlYWs7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKHJldCkKPj4gKwkJ bmV0ZGV2X2VycihlbWFjLT5uZGV2LCAiVEFTIHNldCBzdGF0ZSBmYWlsZWQgJWRcbiIsIHJldCk7 Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0YXNfc2V0X3RyaWdn ZXJfbGlzdF9jaGFuZ2Uoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKQo+PiArewo+PiArCXN0cnVj dCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICphZG1pbl9saXN0ID0gZW1hYy0+cW9zLnRhcy50YXBy aW9fYWRtaW47Cj4+ICsJc3RydWN0IHRhc19jb25maWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNv bmZpZzsKPj4gKwlzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgc3RzOwo+PiArCXUzMiBjaGFu Z2VfY3ljbGVfY291bnQ7Cj4+ICsJdTMyIGN5Y2xlX3RpbWU7Cj4+ICsJdTY0IGJhc2VfdGltZTsK Pj4gKwl1NjQgY3VyX3RpbWU7Cj4+ICsKPj4gKwlpZiAoYWRtaW5fbGlzdC0+Y3ljbGVfdGltZSA8 IFRBU19NSU5fQ1lDTEVfVElNRSkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gCj4gU2hvdWxkbid0 IHRoaXMgdmVyaWZpY2F0aW9uIGhhdmUgYmVlbiBwYXJ0IG9mIGVtYWNfdGFwcmlvX3JlcGxhY2Uo KSwgYW5kCj4gaGF2ZSBhIHByb3BlciBleHRhY2s/Cj4gCgpTdXJlLiBJJ2xsIG1vdmUgdGhpcyB0 byBlbWFjX3RhcHJpb19yZXBsYWNlKCkuCgo+PiArCj4+ICsJY3ljbGVfdGltZSA9IGFkbWluX2xp c3QtPmN5Y2xlX3RpbWUgLSA0OyAvKiAtNG5zIHRvIGNvbXBlbnNhdGUgZm9yIElFUCB3cmFwYXJv dW5kIHRpbWUgKi8KPiAKPiBEZXRhaWxzPyBEb2Vzbid0IHRoaXMgbWFrZSB0aGUgcGhhc2UgYWxp Z25tZW50IG9mIHRoZSBzY2hlZHVsZSBkaXZlcmdlCj4gZnJvbSB3aGF0IHRoZSB1c2VyIGV4cGVj dHM/Cgo0bnMgaXMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIElFUCB3cmFwYXJvdW5kIHRpbWUu IElFUCBpcyB0aGUgY2xvY2sKdXNlZCBieSBJQ1NTRyBkcml2ZXIuIElFUCB0aWNrIGlzIDRucyBh bmQgd2UgYWRqdXN0IHRoaXMgNG5zIHdoZW5ldmVyCmNhbGN1bGF0aW5nIGN5Y2xlX3RpbWUuIFlv dSBtYXkgcmVmZXIgdG8gWzFdIGZvciBkZXRhaWxzIG9uIElFUCBkcml2ZXIuCgo+IAo+PiArCWJh c2VfdGltZSA9IGFkbWluX2xpc3QtPmJhc2VfdGltZTsKPj4gKwljdXJfdGltZSA9IHBydWV0aF9p ZXBfZ2V0dGltZShlbWFjLCAmc3RzKTsKPj4gKwo+PiArCWlmIChiYXNlX3RpbWUgPiBjdXJfdGlt ZSkKPj4gKwkJY2hhbmdlX2N5Y2xlX2NvdW50ID0gRElWX1JPVU5EX1VQX1VMTChiYXNlX3RpbWUg LSBjdXJfdGltZSwgY3ljbGVfdGltZSk7Cj4+ICsJZWxzZQo+PiArCQljaGFuZ2VfY3ljbGVfY291 bnQgPSAxOwo+IAo+IEkgc2VlIHRoYXQgdGhlIGJhc2VfdGltZSBpcyBvbmx5IHVzZWQgdG8gY2Fs Y3VsYXRlIHRoZSBudW1iZXIgb2YgY3ljbGVzCj4gcmVsYXRpdmUgdG8gY3VyX3RpbWUuIFRhcHJp byB1c2VycyB3YW50IHRvIHNwZWNpZnkgYSBiYXNldGltZSB2YWx1ZQo+IHdoaWNoIGluZGljYXRl cyB0aGUgcGhhc2UgYWxpZ25tZW50IG9mIHRoZSBzY2hlZHVsZS4gVGhpcyBpcyBpbXBvcnRhbnQK PiB3aGVuIHRoZSBkZXZpY2UgaXMgc3luY2hyb25pemVkIG92ZXIgUFRQIHdpdGggb3RoZXIgc3dp dGNoZXMgaW4gdGhlCj4gbmV0d29yay4gQ2FuIHlvdSBleHBsYWluIGhvdyBpcyB0aGUgYmFzZXRp bWUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGluCj4geW91ciBpbXBsZW1lbnRhdGlvbj8KPiAK CkluIHRoaXMgaW1wbGVtZW50YXRpb24gYmFzZV90aW1lIGlzIHVzZWQgb25seSB0byBvYnRhaW4g dGhlCmNoYW5nZV9jeWNsZV9jb3VudCBhbmQgdG8gd3JpdGUgaXQgdG8gVEFTX0NPTkZJR19DSEFO R0VfQ1lDTEVfQ09VTlQuIEluCnRoaXMgaW1wbGVtZW50YXRpb24gYmFzZV90aW1lIGlzIG5vdCB1 c2VkIGZvciBhbnl0aGluZyBlbHNlLgoKPj4gKwo+PiArCXdyaXRlbChjeWNsZV90aW1lLCBlbWFj LT5kcmFtLnZhICsgVEFTX0FETUlOX0NZQ0xFX1RJTUUpOwo+PiArCXdyaXRlbChjaGFuZ2VfY3lj bGVfY291bnQsIGVtYWMtPmRyYW0udmEgKyBUQVNfQ09ORklHX0NIQU5HRV9DWUNMRV9DT1VOVCk7 Cj4+ICsJd3JpdGViKGFkbWluX2xpc3QtPm51bV9lbnRyaWVzLCBlbWFjLT5kcmFtLnZhICsgVEFT X0FETUlOX0xJU1RfTEVOR1RIKTsKPj4gKwo+PiArCS8qIGNvbmZpZ19jaGFuZ2UgY2xlYXJlZCBi eSBmL3cgdG8gYWNrIHJlY2VwdGlvbiBvZiBuZXcgc2hhZG93IGxpc3QgKi8KPj4gKwl3cml0ZWIo MSwgJnRhcy0+Y29uZmlnX2xpc3QtPmNvbmZpZ19jaGFuZ2UpOwo+PiArCS8qIGNvbmZpZ19wZW5k aW5nIGNsZWFyZWQgYnkgZi93IHdoZW4gbmV3IHNoYWRvdyBsaXN0IGlzIGNvcGllZCB0byBhY3Rp dmUgbGlzdCAqLwo+PiArCXdyaXRlYigxLCAmdGFzLT5jb25maWdfbGlzdC0+Y29uZmlnX3BlbmRp bmcpOwo+PiArCj4+ICsJcmV0dXJuIGVtYWNfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0dfRU1B Q19QT1JUX1RBU19UUklHR0VSKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0YXNfdXBkYXRl X29wZXJfbGlzdChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRj X3RhcHJpb19xb3B0X29mZmxvYWQgKmFkbWluX2xpc3QgPSBlbWFjLT5xb3MudGFzLnRhcHJpb19h ZG1pbjsKPj4gKwlzdHJ1Y3QgdGFzX2NvbmZpZyAqdGFzID0gJmVtYWMtPnFvcy50YXMuY29uZmln Owo+PiArCXUzMiB0YXNfYWNjX2dhdGVfY2xvc2VfdGltZSA9IDA7Cj4+ICsJdTggaWR4LCBnYXRl X2lkeCwgdmFsOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoYWRtaW5fbGlzdC0+Y3ljbGVf dGltZSA+IFRBU19NQVhfQ1lDTEVfVElNRSkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4g Kwl0YXNfdXBkYXRlX2Z3X2xpc3RfcG9pbnRlcnMoZW1hYyk7Cj4+ICsKPj4gKwlmb3IgKGlkeCA9 IDA7IGlkeCA8IGFkbWluX2xpc3QtPm51bV9lbnRyaWVzOyBpZHgrKykgewo+PiArCQl3cml0ZWIo YWRtaW5fbGlzdC0+ZW50cmllc1tpZHhdLmdhdGVfbWFzaywKPj4gKwkJICAgICAgICZ0YXMtPmZ3 X3NoYWRvd19saXN0LT5nYXRlX21hc2tfbGlzdFtpZHhdKTsKPj4gKwkJdGFzX2FjY19nYXRlX2Ns b3NlX3RpbWUgKz0gYWRtaW5fbGlzdC0+ZW50cmllc1tpZHhdLmludGVydmFsOwo+PiArCj4+ICsJ CS8qIGV4dGVuZCBsYXN0IGVudHJ5IHRpbGwgZW5kIG9mIGN5Y2xlIHRpbWUgKi8KPj4gKwkJaWYg KGlkeCA9PSBhZG1pbl9saXN0LT5udW1fZW50cmllcyAtIDEpCj4+ICsJCQl3cml0ZWwoYWRtaW5f bGlzdC0+Y3ljbGVfdGltZSwKPj4gKwkJCSAgICAgICAmdGFzLT5md19zaGFkb3dfbGlzdC0+d2lu X2VuZF90aW1lX2xpc3RbaWR4XSk7Cj4+ICsJCWVsc2UKPj4gKwkJCXdyaXRlbCh0YXNfYWNjX2dh dGVfY2xvc2VfdGltZSwKPj4gKwkJCSAgICAgICAmdGFzLT5md19zaGFkb3dfbGlzdC0+d2luX2Vu ZF90aW1lX2xpc3RbaWR4XSk7Cj4+ICsJfQo+PiArCj4+ICsJLyogY2xlYXIgcmVtYWluaW5nIGVu dHJpZXMgKi8KPj4gKwlmb3IgKGlkeCA9IGFkbWluX2xpc3QtPm51bV9lbnRyaWVzOyBpZHggPCBU QVNfTUFYX0NNRF9MSVNUUzsgaWR4KyspIHsKPj4gKwkJd3JpdGViKDAsICZ0YXMtPmZ3X3NoYWRv d19saXN0LT5nYXRlX21hc2tfbGlzdFtpZHhdKTsKPj4gKwkJd3JpdGVsKDAsICZ0YXMtPmZ3X3No YWRvd19saXN0LT53aW5fZW5kX3RpbWVfbGlzdFtpZHhdKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiB1 cGRhdGUgdGhlIEFycmF5IG9mIGdhdGUgY2xvc2UgdGltZSBmb3IgZWFjaCBxdWV1ZSBpbiBlYWNo IHdpbmRvdyAqLwo+PiArCWZvciAoaWR4ID0gMCA7IGlkeCA8IGFkbWluX2xpc3QtPm51bV9lbnRy aWVzOyBpZHgrKykgewo+PiArCQkvKiBPbiBMaW51eCwgb25seSBQUlVFVEhfTUFYX1RYX1FVRVVF UyBhcmUgc3VwcG9ydGVkIHBlciBwb3J0ICovCj4+ICsJCWZvciAoZ2F0ZV9pZHggPSAwOyBnYXRl X2lkeCA8IFBSVUVUSF9NQVhfVFhfUVVFVUVTOyBnYXRlX2lkeCsrKSB7Cj4+ICsJCQl1OCBnYXRl X21hc2tfbGlzdF9pZHggPSByZWFkYigmdGFzLT5md19zaGFkb3dfbGlzdC0+Z2F0ZV9tYXNrX2xp c3RbaWR4XSk7Cj4+ICsJCQl1MzIgZ2F0ZV9jbG9zZV90aW1lID0gMDsKPj4gKwo+PiArCQkJaWYg KGdhdGVfbWFza19saXN0X2lkeCAmIEJJVChnYXRlX2lkeCkpCj4+ICsJCQkJZ2F0ZV9jbG9zZV90 aW1lID0gcmVhZGwoJnRhcy0+Zndfc2hhZG93X2xpc3QtPndpbl9lbmRfdGltZV9saXN0W2lkeF0p Owo+PiArCj4+ICsJCQl3cml0ZWwoZ2F0ZV9jbG9zZV90aW1lLAo+PiArCQkJICAgICAgICZ0YXMt PmZ3X3NoYWRvd19saXN0LT5nYXRlX2Nsb3NlX3RpbWVfbGlzdFtpZHhdW2dhdGVfaWR4XSk7Cj4+ ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwkvKiB0ZWxsIGYvdyB0byBzd2FwIGFjdGl2ZSAmIHNoYWRv dyBsaXN0ICovCj4+ICsJcmV0ID0gdGFzX3NldF90cmlnZ2VyX2xpc3RfY2hhbmdlKGVtYWMpOwo+ PiArCWlmIChyZXQpIHsKPj4gKwkJbmV0ZGV2X2VycihlbWFjLT5uZGV2LCAiZmFpbGVkIHRvIHN3 YXAgZi93IGNvbmZpZyBsaXN0OiAlZFxuIiwgcmV0KTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9 Cj4+ICsKPj4gKwkvKiBXYWl0IGZvciBjb21wbGV0aW9uICovCj4+ICsJcmV0ID0gcmVhZGJfcG9s bF90aW1lb3V0KCZ0YXMtPmNvbmZpZ19saXN0LT5jb25maWdfY2hhbmdlLCB2YWwsICF2YWwsCj4+ ICsJCQkJIFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyk7Cj4+ICsJaWYgKHJldCkg ewo+PiArCQluZXRkZXZfZXJyKGVtYWMtPm5kZXYsICJUQVMgbGlzdCBjaGFuZ2UgY29tcGxldGlv biB0aW1lIG91dFxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJdGFzX3Vw ZGF0ZV9md19saXN0X3BvaW50ZXJzKGVtYWMpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkIGVtYWNfY3BfdGFwcmlvKHN0cnVjdCB0Y190YXByaW9fcW9wdF9v ZmZsb2FkICpmcm9tLAo+PiArCQkJICAgc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKnRv KQo+PiArewo+PiArCWludCBpOwo+PiArCj4+ICsJKnRvID0gKmZyb207Cj4+ICsJZm9yIChpID0g MDsgaSA8IGZyb20tPm51bV9lbnRyaWVzOyBpKyspCj4+ICsJCXRvLT5lbnRyaWVzW2ldID0gZnJv bS0+ZW50cmllc1tpXTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBlbWFjX3RhcHJpb19yZXBs YWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAo+PiArCQkJICAgICAgIHN0cnVjdCB0Y190YXBy aW9fcW9wdF9vZmZsb2FkICp0YXByaW8pCj4+ICt7Cj4+ICsJc3RydWN0IHBydWV0aF9lbWFjICpl bWFjID0gbmV0ZGV2X3ByaXYobmRldik7Cj4+ICsJc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxv YWQgKmVzdF9uZXc7Cj4+ICsJaW50IHJldCwgaWR4Owo+PiArCj4+ICsJaWYgKHRhcHJpby0+Y3lj bGVfdGltZV9leHRlbnNpb24pIHsKPj4gKwkJbmV0ZGV2X2VycihuZGV2LCAiRmFpbGVkIHRvIHNl dCBjeWNsZSB0aW1lIGV4dGVuc2lvbiIpOwo+IAo+ICJmYWlsZWQiIGltcGxpZXMgdGhhdCB0aGUg ZHJpdmVyIHRyaWVkIHRvIGRvIHNvbWV0aGluZywgYnV0IGl0IGRpZG4ndCB3b3JrLgo+IE1heWJl ICJDeWNsZSB0aW1lIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIj8gQWxzbywgTkxfU0VUX0VSUl9N U0dfTU9EKCkuCj4gCgpTdXJlLCBJJ2xsIGNoYW5nZSBpdCB0byBiZWxvdywKCmlmICh0YXByaW8t PmN5Y2xlX3RpbWVfZXh0ZW5zaW9uKSB7CglOTF9TRVRfRVJSX01TR19NT0QodGFwcmlvLT5leHRh Y2ssICJDeWNsZSB0aW1lIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIik7CglyZXR1cm4gLUVPUE5P VFNVUFA7Cn0KCj4+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAo dGFwcmlvLT5udW1fZW50cmllcyA9PSAwIHx8Cj4gCj4gQ2Fubm90IGhhcHBlbi4gU2VlIHNjaF90 YXByaW8uYzoKPiAKClN1cmUuIEknbGwgcmVtb3ZlIHRoaXMgY2hlY2suCgo+IAlpZiAobmV3X2Fk bWluLT5udW1fZW50cmllcyA9PSAwKSB7Cj4gCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICJUaGVy ZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIGVudHJ5IGluIHRoZSBzY2hlZHVsZSIpOwo+IAkJZXJy ID0gLUVJTlZBTDsKPiAJCWdvdG8gZnJlZV9zY2hlZDsKPiAJfQo+IAo+PiArCSAgICB0YXByaW8t Pm51bV9lbnRyaWVzID4gVEFTX01BWF9DTURfTElTVFMpIHsKPj4gKwkJTkxfU0VUX0VSUl9NU0df Rk1UX01PRCh0YXByaW8tPmV4dGFjaywgInVuc3VwcG9ydGVkIG51bV9lbnRyaWVzICVsZCBpbiB0 YXByaW8gY29uZmlnXG4iLAo+PiArCQkJCSAgICAgICB0YXByaW8tPm51bV9lbnRyaWVzKTsKPiAK PiBCZXR0ZXIgdG8gc2F5IHdoYXQncyB0aGUgaGFyZHdhcmUgbWF4aW11bSwgdGhhbiB0byByZXBv cnQgYmFjayBudW1fZW50cmllcwo+IGFzIGJlaW5nIG5vdCBzdXBwb3J0ZWQuCj4gCgpTdXJlLCBJ J2xsIGNoYW5nZSBpdCB0byBiZWxvdywKCmlmICh0YXByaW8tPm51bV9lbnRyaWVzID4gVEFTX01B WF9DTURfTElTVFMpIHsKCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QodGFwcmlvLT5leHRhY2ssICJu dW1fZW50cmllcyAlbGQgaXMgbW9yZSB0aGFuCm1heGltdW0gc3VwcG9ydGVkIGVudHJpZXMgJWxk IGluIHRhcHJpbyBjb25maWdcbiIsCgkJCQkgICAgICAgdGFwcmlvLT5udW1fZW50cmllcywgVEFT X01BWF9DTURfTElTVFMpOwoJcmV0dXJuIC1FSU5WQUw7Cn0KCj4+ICsJCXJldHVybiAtRUlOVkFM Owo+PiArCX0KPj4gKwo+PiArCS8qIElmIGFueSB0aW1lX2ludGVydmFsIGlzIDAgaW4gYmV0d2Vl biB0aGUgbGlzdCwgdGhlbiBleGl0ICovCj4+ICsJZm9yIChpZHggPSAwOyBpZHggPCB0YXByaW8t Pm51bV9lbnRyaWVzOyBpZHgrKykgewo+PiArCQlpZiAodGFwcmlvLT5lbnRyaWVzW2lkeF0uaW50 ZXJ2YWwgPT0gMCkgewo+PiArCQkJTkxfU0VUX0VSUl9NU0dfTU9EKHRhcHJpby0+ZXh0YWNrLCAi MCBpbnRlcnZhbCBpbiB0YXByaW8gY29uZmlnIG5vdCBzdXBwb3J0ZWRcbiIpOwo+PiArCQkJcmV0 dXJuIC1FSU5WQUw7Cj4+ICsJCX0KPj4gKwl9Cj4gCj4gQWxzbyBub3QgcG9zc2libGUsIHNlZSBm aWxsX3NjaGVkX2VudHJ5KCkKClN1cmUuIEknbGwgcmVtb3ZlIHRoaXMgY2hlY2suCgo+IAo+IAkv KiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGFsbG93IGF0IGxlYXN0IHRoZSBtaW5pbXVtIGV0aGVybmV0 Cj4gCSAqIGZyYW1lIHRvIGdvIG91dC4KPiAJICovCj4gCWlmIChpbnRlcnZhbCA8IG1pbl9kdXJh dGlvbikgewo+IAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAiSW52YWxpZCBpbnRlcnZhbCBmb3Ig c2NoZWR1bGUgZW50cnkiKTsKPiAJCXJldHVybiAtRUlOVkFMOwo+IAl9Cj4gCj4+ICsKPj4gKwlp ZiAoZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW4pCj4+ICsJCWRldm1fa2ZyZWUoJm5kZXYtPmRl diwgZW1hYy0+cW9zLnRhcy50YXByaW9fYWRtaW4pOwo+PiArCj4+ICsJZXN0X25ldyA9IGRldm1f a3phbGxvYygmbmRldi0+ZGV2LAo+PiArCQkJICAgICAgIHN0cnVjdF9zaXplKGVzdF9uZXcsIGVu dHJpZXMsIHRhcHJpby0+bnVtX2VudHJpZXMpLAo+PiArCQkJICAgICAgIEdGUF9LRVJORUwpOwo+ PiArCWlmICghZXN0X25ldykKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gCj4gWW91IGRvbid0IG5l ZWQgdG8gYWxsb2NhdGUgZXN0X25ldywgeW91IGNhbiBrZWVwIGEgcmVmZXJlbmNlIG9uIHRhcHJp bwo+IHVzaW5nIHRhcHJpb19vZmZsb2FkX2dldCgpLCBhbmQgY2FsbCB0YXByaW9fb2ZmbG9hZF9w dXQoKSB0byByZWxlYXNlIHRoZQo+IHJlZmVyZW5jZSB3aGVuIHlvdSdyZSBkb25lIHdpdGggaXQu Cj4gCgpTdXJlLiBJIHdpbGwgbm90IGFsbG9jYXRlIGVzdF9uZXcuIEluc3RlYWQgSSdsbCBzZXQg dGFwcmlvX2FkbWluIHRvCnRhcHJpb19vZmZsb2FkX2dldCh0YXByaW8pIGFuZCBjYWxsIHRhcHJp b19vZmZsb2FkX2ZyZWUodGFwcmlvKSB3aGVuCml0J3MgZG9uZS4KCj4+ICsKPj4gKwllbWFjX2Nw X3RhcHJpbyh0YXByaW8sIGVzdF9uZXcpOwo+PiArCWVtYWMtPnFvcy50YXMudGFwcmlvX2FkbWlu ID0gZXN0X25ldzsKPj4gKwlyZXQgPSB0YXNfdXBkYXRlX29wZXJfbGlzdChlbWFjKTsKPj4gKwlp ZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0ID0gIHRhc19zZXRfc3RhdGUo ZW1hYywgVEFTX1NUQVRFX0VOQUJMRSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2bV9rZnJlZSgm bmRldi0+ZGV2LCBlc3RfbmV3KTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9CgpCZWxvdyBp cyBob3cgdGhlIGNvZGUgd2lsbCBsb29rIGxpa2UuCgoJZW1hYy0+cW9zLnRhcy50YXByaW9fYWRt aW4gPSB0YXByaW9fb2ZmbG9hZF9nZXQodGFwcmlvKTsKCXJldCA9IHRhc191cGRhdGVfb3Blcl9s aXN0KGVtYWMpOwoJaWYgKHJldCkKCQlyZXR1cm4gcmV0OwoKCXJldCA9IHRhc19zZXRfc3RhdGUo ZW1hYywgVEFTX1NUQVRFX0VOQUJMRSk7CglpZiAocmV0KSB7CgkJZW1hYy0+cW9zLnRhcy50YXBy aW9fYWRtaW4gPSBOVUxMOwoJCXRhcHJpb19vZmZsb2FkX2ZyZWUodGFwcmlvKTsKCX0KCglyZXR1 cm4gcmV0OwoKUGxlYXNlIGxldCBtZSBrbm93IGlmIGFsbCBvZiB0aGVzZSBjaGFuZ2VzIGxvb2tz IG9rLCBJJ2xsIHJlc2VuZCB0aGUKcGF0Y2ggb25jZSB5b3UgY29uZmlybS4gVGhhbmtzIGZvciBy ZXZpZXdpbmcuCgpbMV0KaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5l bC9naXQvdG9ydmFsZHMvbGludXguZ2l0L3RyZWUvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNz c2cvaWNzc19pZXAuYz9oPXY2LjcKCi0tIApUaGFua3MgYW5kIFJlZ2FyZHMsCkRhbmlzaAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=