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 DD0A5CDB465 for ; Mon, 16 Oct 2023 09:14:22 +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=BnAr8jpWv+D3AawmbFMBMgBetOtxsy9aGsawzx1Dwgc=; b=ZPnAqyF9CLF+qa OBgVXAPJoC2teFNGKad9gKd3ZzLlCChdbL61FAAMknQPZAh1clX0a3KztymJs3RB8WzujaBU7xzdM wlSkidwAD0yK/Y01N0ecPAitFC7FQ2qObekaO5G2sm5nvuvnZRBmO5rJsSAyxeAYsKbBFo65dy3Xq sFEwVTWG56q1kUBv+8yHOhQBxunze3gwh84LE64R4iNajoELLdryIbH/OVwk8SSgfcV20Kki8gKfK 2EvzcrKah3sBQLjBpHDpkbqguwDeeUU5Yfgeu8zy00njyFy1NlRGDs8W9dfPBmj2zVnhCwoTiNlrN qbVjOh10QPylJ2DPERKA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qsJfZ-008x56-1i; Mon, 16 Oct 2023 09:13:49 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qsJfV-008x1J-0Y for linux-arm-kernel@lists.infradead.org; Mon, 16 Oct 2023 09:13:48 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 4EAE3B811B8; Mon, 16 Oct 2023 09:13:43 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CE8BCC433C8; Mon, 16 Oct 2023 09:13:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1697447622; bh=AnYgwbfzENYPhxzW6COwmO+W4wT7z9Ci1szmPRBxn7o=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=fx8xFUf9eH/YUe+8cRkTQnprJw7y6E3uQnK7Pn1Qu30n+UtDOoxPcEbDrsI6fSv0+ 0ydx7T8VfJ+A1CigGv5wkkjDtR13wA0yX+kIg3tNeTMXPKTVwxMYO9pgXEL+XsRF5f c3addaCysAM61WIgfjtLfFV9hJqC8lU0dUJ88zKok+wV63KEGRcM3YtNipC0CibNMB WwF3stPTMVEttElf9M0NQGhzJIAq5lnmEogi/KkgdYGd1bT6coNIMLNU2CRePr7pGh RYqSDMpQ+Nb7c9Un2ibxFO5MAcKaV/VwqQBpgGzRdU+MMbngHplV78Q0Sjl7fDD8+E zFJjbMmpzFx7w== Message-ID: <31422cbc-7848-4bc6-9f9c-ef1d8400123c@kernel.org> Date: Mon, 16 Oct 2023 12:13:35 +0300 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 , MD Danish Anwar Cc: Andrew Lunn , Vignesh Raghavendra , Richard Cochran , Paolo Abeni , Jakub Kicinski , Eric Dumazet , "David S. Miller" , Simon Horman , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, srk@ti.com, r-gunasekaran@ti.com, linux-arm-kernel@lists.infradead.org, Roger Quadros , Vinicius Costa Gomes References: <20231006102028.3831341-1-danishanwar@ti.com> <20231011102536.r65xyzmh5kap2cf2@skbuf> From: Roger Quadros In-Reply-To: <20231011102536.r65xyzmh5kap2cf2@skbuf> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231016_021345_837395_B276C777 X-CRM114-Status: GOOD ( 43.73 ) 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 CgpPbiAxMS8xMC8yMDIzIDEzOjI1LCBWbGFkaW1pciBPbHRlYW4gd3JvdGU6Cj4gT24gRnJpLCBP Y3QgMDYsIDIwMjMgYXQgMDM6NTA6MjhQTSArMDUzMCwgTUQgRGFuaXNoIEFud2FyIHdyb3RlOgo+ PiBGcm9tOiBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPgo+Pgo+PiBJQ1NTRyBkdWFsLWVt YWMgZi93IHN1cHBvcnRzIEVuaGFuY2VkIFNjaGVkdWxlZCBUcmFmZmljIChFU1Qg4oCTIGRlZmlu ZWQKPj4gaW4gUDgwMi4xUWJ2L0QyLjIgdGhhdCBsYXRlciBnb3QgaW5jbHVkZWQgaW4gSUVFRSA4 MDIuMVEtMjAxOCkKPj4gY29uZmlndXJhdGlvbi4gRVNUIGFsbG93cyBleHByZXNzIHF1ZXVlIHRy YWZmaWMgdG8gYmUgc2NoZWR1bGVkCj4+IChwbGFjZWQpIG9uIHRoZSB3aXJlIGF0IHNwZWNpZmlj IHJlcGVhdGFibGUgdGltZSBpbnRlcnZhbHMuIEluCj4+IExpbnV4IGtlcm5lbCwgRVNUIGNvbmZp Z3VyYXRpb24gaXMgZG9uZSB0aHJvdWdoIHRjIGNvbW1hbmQgYW5kCj4+IHRoZSB0YXByaW8gc2No ZWR1bGVyIGluIHRoZSBuZXQgY29yZSBpbXBsZW1lbnRzIGEgc29mdHdhcmUgb25seQo+PiBzY2hl ZHVsZXIgKFNDSF9UQVBSSU8pLiBJZiB0aGUgTklDIGlzIGNhcGFibGUgb2YgRVNUIGNvbmZpZ3Vy YXRpb24sCj4+IHVzZXIgaW5kaWNhdGUgImZsYWcgMiIgaW4gdGhlIGNvbW1hbmQgd2hpY2ggaXMg dGhlbiBwYXJzZWQgYnkKPj4gdGFwcmlvIHNjaGVkdWxlciBpbiBuZXQgY29yZSBhbmQgaW5kaWNh dGUgdGhhdCB0aGUgY29tbWFuZCBpcyB0bwo+PiBiZSBvZmZsb2FkZWQgdG8gaC93LiB0YXByaW8g dGhlbiBvZmZsb2FkcyB0aGUgY29tbWFuZCB0byB0aGUKPj4gZHJpdmVyIGJ5IGNhbGxpbmcgbmRv X3NldHVwX3RjKCkgbmRvIG9wcy4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzCj4+IG5kb19zZXR1cF90 YygpIHRvIG9mZmxvYWQgRVNUIGNvbmZpZ3VyYXRpb24gdG8gSUNTU0cuCj4+Cj4+IFNpZ25lZC1v ZmYtYnk6IFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFZp Z25lc2ggUmFnaGF2ZW5kcmEgPHZpZ25lc2hyQHRpLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogTUQg RGFuaXNoIEFud2FyIDxkYW5pc2hhbndhckB0aS5jb20+Cj4+IC0tLQo+PiBDYzogUm9nZXIgUXVh ZHJvcyA8cm9nZXJxQHRpLmNvbT4KPj4gQ2M6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4K Pj4gQ2M6IFZpbmljaXVzIENvc3RhIEdvbWVzIDx2aW5pY2l1cy5nb21lc0BpbnRlbC5jb20+Cj4+ IENjOiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgo+Pgo+PiBDaGFuZ2VzIGZyb20g djMgdG8gdjQ6Cj4+ICopIFJlYmFzZWQgb24gdGhlIGxhdGVzdCBuZXh0LTIwMjMxMDA1IGxpbnV4 LW5leHQuCj4gCj4gVGhlIHRyZWUgdGhhdCB0aGUgcGF0Y2ggd2lsbCBiZSBhcHBsaWVkIHRvIGlz Cj4gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbmV0ZGV2 L25ldC1uZXh0LmdpdCwKPiBub3QgbGludXgtbmV4dC4KPiAKPj4gKikgQWRkcmVzc2VkIFJvZ2Vy IGFuZCBWaW5pY2l1cycgY29tbWVudHMgYW5kIG1vdmVkIGFsbCB0aGUgdmFsaWRhdGlvbnMgdG8K Pj4gICAgZW1hY190YXByaW9fcmVwbGFjZSgpIEFQSS4KPj4gKikgTW9kaWZpZWQgZW1hY19zZXR1 cF90YXByaW8oKSBBUEkgdG8gdXNlIHN3aXRjaCBjYXNlIGJhc2VkIG9uIHRhcHJpby0+Y21kCj4+ ICAgIGFuZCBhZGRlZCBlbWFjX3RhcHJpb19kZXN0cm95KCkgYW5kIGVtYWNfdGFwcmlvX3JlcGxh Y2UoKSBBUElzLgo+PiAqKSBNb2RpZmllZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiBzdHJ1Y3RzIC8g ZW51bXMgaW4gaWNzc2dfcW9zLmggYnkgdXNpbmcKPj4gICAgdGhlIGNvcnJlY3Qga2RvYyBmb3Jt YXQuCj4+Cj4+IENoYW5nZXMgZnJvbSB2MiB0byB2MzoKPj4gKikgUmViYXNlZCBvbiB0aGUgbGF0 ZXN0IG5leHQtMjAyMzA5MjggbGludXgtbmV4dC4KPj4gKikgUmV0YWluZWQgb3JpZ2luYWwgYXV0 aG9yc2hpcCBvZiB0aGUgcGF0Y2guCj4+ICopIEFkZHJlc3NlZCBSb2dlcidzIGNvbW1lbnRzIGFu ZCBtb2RpZmllZCBlbWFjX3NldHVwX3RhcHJpbygpIGFuZAo+PiAgICBlbWFjX3NldF90YXByaW8o KSBBUElzIGFjY29yZGluZ2x5Lgo+PiAqKSBSZW1vdmVkIG5ldGlmX3J1bm5pbmcoKSBjaGVjayBm cm9tIGVtYWNfc2V0dXBfdGFwcmlvKCkuCj4+ICopIEFkZHJlc3NlZCBWaW5pY2l1cycgY29tbWVu dHMgYW5kIGFkZGVkIGNoZWNrIGZvciBNSU4gYW5kIE1BWCBjeWNsZSB0aW1lLgo+PiAqKSBBZGRl ZCBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIG9mIGVzdF9uZXcgaW4gZW1hY19zZXR1cF90 YXByaW8oKS4KPj4KPj4gQ2hhbmdlcyBmcm9tIHYxIHRvIHYyOgo+PiAqKSBSZWJhc2VkIG9uIHRo ZSBsYXRlc3QgbmV4dC0yMDIzMDkyMSBsaW51eC1uZXh0Lgo+PiAqKSBEcm9wcGVkIHRoZSBSRkMg dGFnIGFzIG1lcmdlIHdpbmRvdyBpcyBvcGVuIG5vdy4KPj4gKikgU3BsaXR0ZWQgdGhpcyBwYXRj aCBmcm9tIHRoZSBzd2l0Y2ggbW9kZSBzZXJpZXMgW3YxXS4KPj4gKikgUmVtb3ZlZCBUT0RPIGNv bW1lbnQgYXMgYXNrZWQgYnkgQW5kcmV3IGFuZCBSb2dlci4KPj4gKikgQ2hhbmdlZCBDb3B5cmln aHQgdG8gMjAyMyBhcyBhc2tlZCBieSBSb2dlci4KPj4KPj4gdjM6IGh0dHBzOi8vbG9yZS5rZXJu ZWwub3JnL2FsbC8yMDIzMDkyODEwMzAwMC4xODYzMDQtMS1kYW5pc2hhbndhckB0aS5jb20vCj4+ IHYyOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyMzA5MjEwNzAwMzEuNzk1Nzg4LTEt ZGFuaXNoYW53YXJAdGkuY29tLwo+PiB2MTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIw MjMwODMwMTEwODQ3LjEyMTk1MTUtMS1kYW5pc2hhbndhckB0aS5jb20vCj4+Cj4+ICBkcml2ZXJz L25ldC9ldGhlcm5ldC90aS9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQo+PiAgZHJpdmVy cy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMgfCAgIDUgKy0KPj4gIGRyaXZl cnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIHwgICA2ICsKPj4gIGRyaXZl cnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5jICAgIHwgMzAxICsrKysrKysrKysr KysrKysrKysKPj4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5oICAg IHwgMTEzICsrKysrKysKPj4gIDUgZmlsZXMgY2hhbmdlZCwgNDI2IGluc2VydGlvbnMoKyksIDIg ZGVsZXRpb25zKC0pCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQv dGkvaWNzc2cvaWNzc2dfcW9zLmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9l dGhlcm5ldC90aS9pY3NzZy9pY3NzZ19xb3MuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9NYWtlZmls ZQo+PiBpbmRleCAzNGZkN2E3MTZiYTYuLjBkZjYwZGVkMWIyZCAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvdGkvTWFrZWZpbGUKPj4gQEAgLTM3LDUgKzM3LDYgQEAgaWNzc2ctcHJ1ZXRoLXkgOj0gazMt Y3BwaS1kZXNjLXBvb2wubyBcCj4+ICAJCSAgaWNzc2cvaWNzc2dfY29uZmlnLm8gXAo+PiAgCQkg IGljc3NnL2ljc3NnX21paV9jZmcubyBcCj4+ICAJCSAgaWNzc2cvaWNzc2dfc3RhdHMubyBcCj4+ IC0JCSAgaWNzc2cvaWNzc2dfZXRodG9vbC5vCj4+ICsJCSAgaWNzc2cvaWNzc2dfZXRodG9vbC5v IFwKPj4gKwkJICBpY3NzZy9pY3NzZ19xb3Mubwo+PiAgb2JqLSQoQ09ORklHX1RJX0lDU1NfSUVQ KSArPSBpY3NzZy9pY3NzX2llcC5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5l dC90aS9pY3NzZy9pY3NzZ19wcnVldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3Nn L2ljc3NnX3BydWV0aC5jCj4+IGluZGV4IDY2MzViMjhiYzY3Mi4uODljMzAxNzE2OTI2IDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwo+ PiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYwo+PiBA QCAtMTE2Niw3ICsxMTY2LDcgQEAgc3RhdGljIGludCBlbWFjX3BoeV9jb25uZWN0KHN0cnVjdCBw cnVldGhfZW1hYyAqZW1hYykKPj4gIAlyZXR1cm4gMDsKPj4gIH0KPj4gIAo+PiAtc3RhdGljIHU2 NCBwcnVldGhfaWVwX2dldHRpbWUodm9pZCAqY2xvY2tvcHNfZGF0YSwgc3RydWN0IHB0cF9zeXN0 ZW1fdGltZXN0YW1wICpzdHMpCj4+ICt1NjQgcHJ1ZXRoX2llcF9nZXR0aW1lKHZvaWQgKmNsb2Nr b3BzX2RhdGEsIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKQo+PiAgewo+PiAgCXUz MiBoaV9yb2xsb3Zlcl9jb3VudCwgaGlfcm9sbG92ZXJfY291bnRfcjsKPj4gIAlzdHJ1Y3QgcHJ1 ZXRoX2VtYWMgKmVtYWMgPSBjbG9ja29wc19kYXRhOwo+PiBAQCAtMTQwMyw2ICsxNDAzLDggQEAg c3RhdGljIGludCBlbWFjX25kb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQo+PiAgCQlu YXBpX2VuYWJsZSgmZW1hYy0+dHhfY2huc1tpXS5uYXBpX3R4KTsKPj4gIAluYXBpX2VuYWJsZSgm ZW1hYy0+bmFwaV9yeCk7Cj4+ICAKPj4gKwlpY3NzZ19xb3NfdGFzX2luaXQobmRldik7Cj4gCj4g SSBiZWxpZXZlIHRoZSBpbnRlbnRpb24gaXMgZm9yIHRoaXMgY29kZSB0byBiZSBydW4gYmVmb3Jl IGFueSB0YXByaW8KPiBvZmZsb2FkIGlzIGFkZGVkLCBjb3JyZWN0PyBCdXQgaXQgaXMgcG9zc2li bGUgZm9yIHRoZSB1c2VyIHRvIGFkZCBhbgo+IG9mZmxvYWRlZCBRZGlzYyBldmVuIHdoaWxlIHRo ZSBuZXRkZXYgaGFzIG5vdCB5ZXQgYmVlbiBicm91Z2h0IHVwLgo+IElzIHRoYXQgY2FzZSBoYW5k bGVkIGNvcnJlY3RseSwgb3Igd2lsbCBpdCBzaW1wbHkgcmVzdWx0IGluIE5VTEwgcG9pbnRlcgo+ IGRlcmVmZXJlbmNlcyAodGFzLT5jb25maWdfbGlzdCk/Cj4gCj4+ICsKPj4gIAkvKiBzdGFydCBQ SFkgKi8KPj4gIAlwaHlfc3RhcnQobmRldi0+cGh5ZGV2KTsKPj4gIAo+PiBAQCAtMTY2OSw2ICsx NjcxLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbWFjX25ldGRldl9v cHMgPSB7Cj4+ICAJLm5kb19zZXRfcnhfbW9kZSA9IGVtYWNfbmRvX3NldF9yeF9tb2RlLAo+PiAg CS5uZG9fZXRoX2lvY3RsID0gZW1hY19uZG9faW9jdGwsCj4+ICAJLm5kb19nZXRfc3RhdHM2NCA9 IGVtYWNfbmRvX2dldF9zdGF0czY0LAo+PiArCS5uZG9fc2V0dXBfdGMgPSBpY3NzZ19xb3NfbmRv X3NldHVwX3RjLAo+PiAgfTsKPj4gIAo+PiAgLyogZ2V0IGVtYWNfcG9ydCBjb3JyZXNwb25kaW5n IHRvIGV0aF9ub2RlIG5hbWUgKi8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0 L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cv aWNzc2dfcHJ1ZXRoLmgKPj4gaW5kZXggOGI2ZDZiNDk3MDEwLi43Y2JmMGU1NjE5MDUgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oCj4+ ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5oCj4+IEBA IC0zNyw2ICszNyw3IEBACj4+ICAjaW5jbHVkZSAiaWNzc2dfY29uZmlnLmgiCj4+ICAjaW5jbHVk ZSAiaWNzc19pZXAuaCIKPj4gICNpbmNsdWRlICJpY3NzZ19zd2l0Y2hfbWFwLmgiCj4+ICsjaW5j bHVkZSAiaWNzc2dfcW9zLmgiCj4+ICAKPj4gICNkZWZpbmUgUFJVRVRIX01BWF9NVFUgICAgICAg ICAgKDIwMDAgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQo+PiAgI2RlZmluZSBQUlVFVEhfTUlO X1BLVF9TSVpFICAgICAoVkxBTl9FVEhfWkxFTikKPj4gQEAgLTE3NCw2ICsxNzUsOCBAQCBzdHJ1 Y3QgcHJ1ZXRoX2VtYWMgewo+PiAgCj4+ICAJc3RydWN0IHBydXNzX21lbV9yZWdpb24gZHJhbTsK Pj4gIAo+PiArCXN0cnVjdCBwcnVldGhfcW9zIHFvczsKPj4gKwo+PiAgCXN0cnVjdCBkZWxheWVk X3dvcmsgc3RhdHNfd29yazsKPj4gIAl1NjQgc3RhdHNbSUNTU0dfTlVNX1NUQVRTXTsKPj4gIH07 Cj4+IEBAIC0yODUsNCArMjg4LDcgQEAgdTMyIGljc3NnX3F1ZXVlX2xldmVsKHN0cnVjdCBwcnVl dGggKnBydWV0aCwgaW50IHF1ZXVlKTsKPj4gIHZvaWQgZW1hY19zdGF0c193b3JrX2hhbmRsZXIo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKPj4gIHZvaWQgZW1hY191cGRhdGVfaGFyZHdhcmVf c3RhdHMoc3RydWN0IHBydWV0aF9lbWFjICplbWFjKTsKPj4gIGludCBlbWFjX2dldF9zdGF0X2J5 X25hbWUoc3RydWN0IHBydWV0aF9lbWFjICplbWFjLCBjaGFyICpzdGF0X25hbWUpOwo+PiArCj4+ ICt1NjQgcHJ1ZXRoX2llcF9nZXR0aW1lKHZvaWQgKmNsb2Nrb3BzX2RhdGEsIHN0cnVjdCBwdHBf c3lzdGVtX3RpbWVzdGFtcCAqc3RzKTsKPj4gKwo+PiAgI2VuZGlmIC8qIF9fTkVUX1RJX0lDU1NH X1BSVUVUSF9IICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3Nz Zy9pY3NzZ19xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3Fvcy5j Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzhjNDQ1MGM0 MWJiCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNz c2cvaWNzc2dfcW9zLmMKPj4gQEAgLTAsMCArMSwzMDEgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKiBUZXhhcyBJbnN0cnVtZW50cyBJQ1NTRyBQUlVFVEgg UW9TIHN1Ym1vZHVsZQo+PiArICogQ29weXJpZ2h0IChDKSAyMDIzIFRleGFzIEluc3RydW1lbnRz IEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tLwo+PiArICovCj4+ICsKPj4gKyNpbmNs dWRlIDxsaW51eC9wcmludGsuaD4KPj4gKyNpbmNsdWRlICJpY3NzZ19wcnVldGguaCIKPj4gKyNp bmNsdWRlICJpY3NzZ19zd2l0Y2hfbWFwLmgiCj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRhc191cGRh dGVfZndfbGlzdF9wb2ludGVycyhzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCj4+ICt7Cj4+ICsJ c3RydWN0IHRhc19jb25maWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwo+PiAr CWlmICgocmVhZGIodGFzLT5hY3RpdmVfbGlzdCkpID09IFRBU19MSVNUMCkgewo+PiArCQl0YXMt PmZ3X2FjdGl2ZV9saXN0ID0gZW1hYy0+ZHJhbS52YSArIFRBU19HQVRFX01BU0tfTElTVDA7Cj4+ ICsJCXRhcy0+Zndfc2hhZG93X2xpc3QgPSBlbWFjLT5kcmFtLnZhICsgVEFTX0dBVEVfTUFTS19M SVNUMTsKPj4gKwl9IGVsc2Ugewo+PiArCQl0YXMtPmZ3X2FjdGl2ZV9saXN0ID0gZW1hYy0+ZHJh bS52YSArIFRBU19HQVRFX01BU0tfTElTVDE7Cj4+ICsJCXRhcy0+Zndfc2hhZG93X2xpc3QgPSBl bWFjLT5kcmFtLnZhICsgVEFTX0dBVEVfTUFTS19MSVNUMDsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIHRhc191cGRhdGVfbWF4c2R1X3RhYmxlKHN0cnVjdCBwcnVldGhfZW1hYyAq ZW1hYykKPj4gK3sKPj4gKwlzdHJ1Y3QgdGFzX2NvbmZpZyAqdGFzID0gJmVtYWMtPnFvcy50YXMu Y29uZmlnOwo+PiArCXUxNiBfX2lvbWVtICptYXhfc2R1X3RibF9wdHI7Cj4+ICsJdTggZ2F0ZV9p ZHg7Cj4+ICsKPj4gKwkvKiB1cGRhdGUgdGhlIG1heHNkdSB0YWJsZSAqLwo+PiArCW1heF9zZHVf dGJsX3B0ciA9IGVtYWMtPmRyYW0udmEgKyBUQVNfUVVFVUVfTUFYX1NEVV9MSVNUOwo+PiArCj4+ ICsJZm9yIChnYXRlX2lkeCA9IDA7IGdhdGVfaWR4IDwgVEFTX01BWF9OVU1fUVVFVUVTOyBnYXRl X2lkeCsrKQo+PiArCQl3cml0ZXcodGFzLT5tYXhfc2R1X3RhYmxlLm1heF9zZHVbZ2F0ZV9pZHhd LCAmbWF4X3NkdV90YmxfcHRyW2dhdGVfaWR4XSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IHRhc19yZXNldChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRh c19jb25maWcgKnRhcyA9ICZlbWFjLT5xb3MudGFzLmNvbmZpZzsKPj4gKwlpbnQgaTsKPj4gKwo+ PiArCWZvciAoaSA9IDA7IGkgPCBUQVNfTUFYX05VTV9RVUVVRVM7IGkrKykKPj4gKwkJdGFzLT5t YXhfc2R1X3RhYmxlLm1heF9zZHVbaV0gPSAyMDQ4Owo+PiArCj4+ICsJdGFzX3VwZGF0ZV9tYXhz ZHVfdGFibGUoZW1hYyk7Cj4+ICsKPj4gKwl3cml0ZWIoVEFTX0xJU1QwLCB0YXMtPmFjdGl2ZV9s aXN0KTsKPj4gKwo+PiArCW1lbXNldF9pbyh0YXMtPmZ3X2FjdGl2ZV9saXN0LCAwLCBzaXplb2Yo KnRhcy0+ZndfYWN0aXZlX2xpc3QpKTsKPj4gKwltZW1zZXRfaW8odGFzLT5md19zaGFkb3dfbGlz dCwgMCwgc2l6ZW9mKCp0YXMtPmZ3X3NoYWRvd19saXN0KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgdGFzX3NldF9zdGF0ZShzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVtYWMsIGVudW0gdGFzX3N0 YXRlIHN0YXRlKQo+PiArewo+PiArCXN0cnVjdCB0YXNfY29uZmlnICp0YXMgPSAmZW1hYy0+cW9z LnRhcy5jb25maWc7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICh0YXMtPnN0YXRlID09IHN0 YXRlKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCXN3aXRjaCAoc3RhdGUpIHsKPj4gKwljYXNl IFRBU19TVEFURV9SRVNFVDoKPj4gKwkJdGFzX3Jlc2V0KGVtYWMpOwo+PiArCQlyZXQgPSBlbWFj X3NldF9wb3J0X3N0YXRlKGVtYWMsIElDU1NHX0VNQUNfUE9SVF9UQVNfUkVTRVQpOwo+PiArCQl0 YXMtPnN0YXRlID0gVEFTX1NUQVRFX1JFU0VUOwo+PiArCQlicmVhazsKPj4gKwljYXNlIFRBU19T VEFURV9FTkFCTEU6Cj4+ICsJCXJldCA9IGVtYWNfc2V0X3BvcnRfc3RhdGUoZW1hYywgSUNTU0df RU1BQ19QT1JUX1RBU19FTkFCTEUpOwo+PiArCQl0YXMtPnN0YXRlID0gVEFTX1NUQVRFX0VOQUJM RTsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBUQVNfU1RBVEVfRElTQUJMRToKPj4gKwkJcmV0ID0g ZW1hY19zZXRfcG9ydF9zdGF0ZShlbWFjLCBJQ1NTR19FTUFDX1BPUlRfVEFTX0RJU0FCTEUpOwo+ PiArCQl0YXMtPnN0YXRlID0gVEFTX1NUQVRFX0RJU0FCTEU7Cj4+ICsJCWJyZWFrOwo+PiArCWRl ZmF1bHQ6Cj4+ICsJCW5ldGRldl9lcnIoZW1hYy0+bmRldiwgIiVzOiB1bnN1cHBvcnRlZCBzdGF0 ZVxuIiwgX19mdW5jX18pOwo+PiArCQlyZXQgPSAtRUlOVkFMOwo+PiArCQlicmVhazsKPj4gKwl9 Cj4+ICsKPj4gKwlpZiAocmV0KQo+PiArCQluZXRkZXZfZXJyKGVtYWMtPm5kZXYsICJUQVMgc2V0 IHN0YXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IHRhc19zZXRfdHJpZ2dlcl9saXN0X2NoYW5nZShzdHJ1Y3QgcHJ1ZXRoX2Vt YWMgKmVtYWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKmFkbWlu X2xpc3QgPSBlbWFjLT5xb3MudGFzLnRhcHJpb19hZG1pbjsKPj4gKwlzdHJ1Y3QgdGFzX2NvbmZp ZyAqdGFzID0gJmVtYWMtPnFvcy50YXMuY29uZmlnOwo+PiArCXN0cnVjdCBwdHBfc3lzdGVtX3Rp bWVzdGFtcCBzdHM7Cj4+ICsJdTMyIGNoYW5nZV9jeWNsZV9jb3VudDsKPj4gKwl1MzIgY3ljbGVf dGltZTsKPj4gKwl1NjQgYmFzZV90aW1lOwo+PiArCXU2NCBjdXJfdGltZTsKPj4gKwo+PiArCWlm IChhZG1pbl9saXN0LT5jeWNsZV90aW1lIDwgVEFTX01JTl9DWUNMRV9USU1FKQo+PiArCQlyZXR1 cm4gLUVJTlZBTDsKPiAKPiBTaG91bGRuJ3QgdGhpcyB2ZXJpZmljYXRpb24gaGF2ZSBiZWVuIHBh cnQgb2YgZW1hY190YXByaW9fcmVwbGFjZSgpLCBhbmQKPiBoYXZlIGEgcHJvcGVyIGV4dGFjaz8K PiAKPj4gKwo+PiArCWN5Y2xlX3RpbWUgPSBhZG1pbl9saXN0LT5jeWNsZV90aW1lIC0gNDsgLyog LTRucyB0byBjb21wZW5zYXRlIGZvciBJRVAgd3JhcGFyb3VuZCB0aW1lICovCj4gCj4gRGV0YWls cz8gRG9lc24ndCB0aGlzIG1ha2UgdGhlIHBoYXNlIGFsaWdubWVudCBvZiB0aGUgc2NoZWR1bGUg ZGl2ZXJnZQo+IGZyb20gd2hhdCB0aGUgdXNlciBleHBlY3RzPwo+IAo+PiArCWJhc2VfdGltZSA9 IGFkbWluX2xpc3QtPmJhc2VfdGltZTsKPj4gKwljdXJfdGltZSA9IHBydWV0aF9pZXBfZ2V0dGlt ZShlbWFjLCAmc3RzKTsKPj4gKwo+PiArCWlmIChiYXNlX3RpbWUgPiBjdXJfdGltZSkKPj4gKwkJ Y2hhbmdlX2N5Y2xlX2NvdW50ID0gRElWX1JPVU5EX1VQX1VMTChiYXNlX3RpbWUgLSBjdXJfdGlt ZSwgY3ljbGVfdGltZSk7Cj4+ICsJZWxzZQo+PiArCQljaGFuZ2VfY3ljbGVfY291bnQgPSAxOwo+ IAo+IEkgc2VlIHRoYXQgdGhlIGJhc2VfdGltZSBpcyBvbmx5IHVzZWQgdG8gY2FsY3VsYXRlIHRo ZSBudW1iZXIgb2YgY3ljbGVzCj4gcmVsYXRpdmUgdG8gY3VyX3RpbWUuIFRhcHJpbyB1c2VycyB3 YW50IHRvIHNwZWNpZnkgYSBiYXNldGltZSB2YWx1ZQo+IHdoaWNoIGluZGljYXRlcyB0aGUgcGhh c2UgYWxpZ25tZW50IG9mIHRoZSBzY2hlZHVsZS4gVGhpcyBpcyBpbXBvcnRhbnQKPiB3aGVuIHRo ZSBkZXZpY2UgaXMgc3luY2hyb25pemVkIG92ZXIgUFRQIHdpdGggb3RoZXIgc3dpdGNoZXMgaW4g dGhlCj4gbmV0d29yay4gQ2FuIHlvdSBleHBsYWluIGhvdyBpcyB0aGUgYmFzZXRpbWUgdGFrZW4g aW50byBjb25zaWRlcmF0aW9uIGluCj4geW91ciBpbXBsZW1lbnRhdGlvbj8KPiAKPj4gKwo+PiAr CXdyaXRlbChjeWNsZV90aW1lLCBlbWFjLT5kcmFtLnZhICsgVEFTX0FETUlOX0NZQ0xFX1RJTUUp Owo+PiArCXdyaXRlbChjaGFuZ2VfY3ljbGVfY291bnQsIGVtYWMtPmRyYW0udmEgKyBUQVNfQ09O RklHX0NIQU5HRV9DWUNMRV9DT1VOVCk7Cj4+ICsJd3JpdGViKGFkbWluX2xpc3QtPm51bV9lbnRy aWVzLCBlbWFjLT5kcmFtLnZhICsgVEFTX0FETUlOX0xJU1RfTEVOR1RIKTsKPj4gKwo+PiArCS8q IGNvbmZpZ19jaGFuZ2UgY2xlYXJlZCBieSBmL3cgdG8gYWNrIHJlY2VwdGlvbiBvZiBuZXcgc2hh ZG93IGxpc3QgKi8KPj4gKwl3cml0ZWIoMSwgJnRhcy0+Y29uZmlnX2xpc3QtPmNvbmZpZ19jaGFu Z2UpOwo+PiArCS8qIGNvbmZpZ19wZW5kaW5nIGNsZWFyZWQgYnkgZi93IHdoZW4gbmV3IHNoYWRv dyBsaXN0IGlzIGNvcGllZCB0byBhY3RpdmUgbGlzdCAqLwo+PiArCXdyaXRlYigxLCAmdGFzLT5j b25maWdfbGlzdC0+Y29uZmlnX3BlbmRpbmcpOwo+PiArCj4+ICsJcmV0dXJuIGVtYWNfc2V0X3Bv cnRfc3RhdGUoZW1hYywgSUNTU0dfRU1BQ19QT1JUX1RBU19UUklHR0VSKTsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCB0YXNfdXBkYXRlX29wZXJfbGlzdChzdHJ1Y3QgcHJ1ZXRoX2VtYWMgKmVt YWMpCj4+ICt7Cj4+ICsJc3RydWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKmFkbWluX2xpc3Qg PSBlbWFjLT5xb3MudGFzLnRhcHJpb19hZG1pbjsKPj4gKwlzdHJ1Y3QgdGFzX2NvbmZpZyAqdGFz ID0gJmVtYWMtPnFvcy50YXMuY29uZmlnOwo+PiArCXUzMiB0YXNfYWNjX2dhdGVfY2xvc2VfdGlt ZSA9IDA7Cj4+ICsJdTggaWR4LCBnYXRlX2lkeCwgdmFsOwo+PiArCWludCByZXQ7Cj4+ICsKPj4g KwlpZiAoYWRtaW5fbGlzdC0+Y3ljbGVfdGltZSA+IFRBU19NQVhfQ1lDTEVfVElNRSkKPj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwl0YXNfdXBkYXRlX2Z3X2xpc3RfcG9pbnRlcnMoZW1h Yyk7Cj4+ICsKPj4gKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGFkbWluX2xpc3QtPm51bV9lbnRyaWVz OyBpZHgrKykgewo+PiArCQl3cml0ZWIoYWRtaW5fbGlzdC0+ZW50cmllc1tpZHhdLmdhdGVfbWFz aywKPj4gKwkJICAgICAgICZ0YXMtPmZ3X3NoYWRvd19saXN0LT5nYXRlX21hc2tfbGlzdFtpZHhd KTsKPj4gKwkJdGFzX2FjY19nYXRlX2Nsb3NlX3RpbWUgKz0gYWRtaW5fbGlzdC0+ZW50cmllc1tp ZHhdLmludGVydmFsOwo+PiArCj4+ICsJCS8qIGV4dGVuZCBsYXN0IGVudHJ5IHRpbGwgZW5kIG9m IGN5Y2xlIHRpbWUgKi8KPj4gKwkJaWYgKGlkeCA9PSBhZG1pbl9saXN0LT5udW1fZW50cmllcyAt IDEpCj4+ICsJCQl3cml0ZWwoYWRtaW5fbGlzdC0+Y3ljbGVfdGltZSwKPj4gKwkJCSAgICAgICAm dGFzLT5md19zaGFkb3dfbGlzdC0+d2luX2VuZF90aW1lX2xpc3RbaWR4XSk7Cj4+ICsJCWVsc2UK Pj4gKwkJCXdyaXRlbCh0YXNfYWNjX2dhdGVfY2xvc2VfdGltZSwKPj4gKwkJCSAgICAgICAmdGFz LT5md19zaGFkb3dfbGlzdC0+d2luX2VuZF90aW1lX2xpc3RbaWR4XSk7Cj4+ICsJfQo+PiArCj4+ ICsJLyogY2xlYXIgcmVtYWluaW5nIGVudHJpZXMgKi8KPj4gKwlmb3IgKGlkeCA9IGFkbWluX2xp c3QtPm51bV9lbnRyaWVzOyBpZHggPCBUQVNfTUFYX0NNRF9MSVNUUzsgaWR4KyspIHsKPj4gKwkJ d3JpdGViKDAsICZ0YXMtPmZ3X3NoYWRvd19saXN0LT5nYXRlX21hc2tfbGlzdFtpZHhdKTsKPj4g KwkJd3JpdGVsKDAsICZ0YXMtPmZ3X3NoYWRvd19saXN0LT53aW5fZW5kX3RpbWVfbGlzdFtpZHhd KTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiB1cGRhdGUgdGhlIEFycmF5IG9mIGdhdGUgY2xvc2UgdGlt ZSBmb3IgZWFjaCBxdWV1ZSBpbiBlYWNoIHdpbmRvdyAqLwo+PiArCWZvciAoaWR4ID0gMCA7IGlk eCA8IGFkbWluX2xpc3QtPm51bV9lbnRyaWVzOyBpZHgrKykgewo+PiArCQkvKiBPbiBMaW51eCwg b25seSBQUlVFVEhfTUFYX1RYX1FVRVVFUyBhcmUgc3VwcG9ydGVkIHBlciBwb3J0ICovCj4+ICsJ CWZvciAoZ2F0ZV9pZHggPSAwOyBnYXRlX2lkeCA8IFBSVUVUSF9NQVhfVFhfUVVFVUVTOyBnYXRl X2lkeCsrKSB7Cj4+ICsJCQl1OCBnYXRlX21hc2tfbGlzdF9pZHggPSByZWFkYigmdGFzLT5md19z aGFkb3dfbGlzdC0+Z2F0ZV9tYXNrX2xpc3RbaWR4XSk7Cj4+ICsJCQl1MzIgZ2F0ZV9jbG9zZV90 aW1lID0gMDsKPj4gKwo+PiArCQkJaWYgKGdhdGVfbWFza19saXN0X2lkeCAmIEJJVChnYXRlX2lk eCkpCj4+ICsJCQkJZ2F0ZV9jbG9zZV90aW1lID0gcmVhZGwoJnRhcy0+Zndfc2hhZG93X2xpc3Qt Pndpbl9lbmRfdGltZV9saXN0W2lkeF0pOwo+PiArCj4+ICsJCQl3cml0ZWwoZ2F0ZV9jbG9zZV90 aW1lLAo+PiArCQkJICAgICAgICZ0YXMtPmZ3X3NoYWRvd19saXN0LT5nYXRlX2Nsb3NlX3RpbWVf bGlzdFtpZHhdW2dhdGVfaWR4XSk7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwkvKiB0ZWxsIGYv dyB0byBzd2FwIGFjdGl2ZSAmIHNoYWRvdyBsaXN0ICovCj4+ICsJcmV0ID0gdGFzX3NldF90cmln Z2VyX2xpc3RfY2hhbmdlKGVtYWMpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJbmV0ZGV2X2Vycihl bWFjLT5uZGV2LCAiZmFpbGVkIHRvIHN3YXAgZi93IGNvbmZpZyBsaXN0OiAlZFxuIiwgcmV0KTsK Pj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBXYWl0IGZvciBjb21wbGV0aW9u ICovCj4+ICsJcmV0ID0gcmVhZGJfcG9sbF90aW1lb3V0KCZ0YXMtPmNvbmZpZ19saXN0LT5jb25m aWdfY2hhbmdlLCB2YWwsICF2YWwsCj4+ICsJCQkJIFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19Q RVJfTVNFQyk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQluZXRkZXZfZXJyKGVtYWMtPm5kZXYsICJU QVMgbGlzdCBjaGFuZ2UgY29tcGxldGlvbiB0aW1lIG91dFxuIik7Cj4+ICsJCXJldHVybiByZXQ7 Cj4+ICsJfQo+PiArCj4+ICsJdGFzX3VwZGF0ZV9md19saXN0X3BvaW50ZXJzKGVtYWMpOwo+PiAr Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGVtYWNfY3BfdGFwcmlv KHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICpmcm9tLAo+PiArCQkJICAgc3RydWN0IHRj X3RhcHJpb19xb3B0X29mZmxvYWQgKnRvKQo+PiArewo+PiArCWludCBpOwo+PiArCj4+ICsJKnRv ID0gKmZyb207Cj4+ICsJZm9yIChpID0gMDsgaSA8IGZyb20tPm51bV9lbnRyaWVzOyBpKyspCj4+ ICsJCXRvLT5lbnRyaWVzW2ldID0gZnJvbS0+ZW50cmllc1tpXTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBlbWFjX3RhcHJpb19yZXBsYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAo+PiAr CQkJICAgICAgIHN0cnVjdCB0Y190YXByaW9fcW9wdF9vZmZsb2FkICp0YXByaW8pCj4+ICt7Cj4+ ICsJc3RydWN0IHBydWV0aF9lbWFjICplbWFjID0gbmV0ZGV2X3ByaXYobmRldik7Cj4+ICsJc3Ry dWN0IHRjX3RhcHJpb19xb3B0X29mZmxvYWQgKmVzdF9uZXc7Cj4+ICsJaW50IHJldCwgaWR4Owo+ PiArCj4+ICsJaWYgKHRhcHJpby0+Y3ljbGVfdGltZV9leHRlbnNpb24pIHsKPj4gKwkJbmV0ZGV2 X2VycihuZGV2LCAiRmFpbGVkIHRvIHNldCBjeWNsZSB0aW1lIGV4dGVuc2lvbiIpOwo+IAo+ICJm YWlsZWQiIGltcGxpZXMgdGhhdCB0aGUgZHJpdmVyIHRyaWVkIHRvIGRvIHNvbWV0aGluZywgYnV0 IGl0IGRpZG4ndCB3b3JrLgo+IE1heWJlICJDeWNsZSB0aW1lIGV4dGVuc2lvbiBub3Qgc3VwcG9y dGVkIj8gQWxzbywgTkxfU0VUX0VSUl9NU0dfTU9EKCkuCj4gCj4+ICsJCXJldHVybiAtRU9QTk9U U1VQUDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAodGFwcmlvLT5udW1fZW50cmllcyA9PSAwIHx8Cj4g Cj4gQ2Fubm90IGhhcHBlbi4gU2VlIHNjaF90YXByaW8uYzoKPiAKPiAJaWYgKG5ld19hZG1pbi0+ bnVtX2VudHJpZXMgPT0gMCkgewo+IAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAiVGhlcmUgc2hv dWxkIGJlIGF0IGxlYXN0IG9uZSBlbnRyeSBpbiB0aGUgc2NoZWR1bGUiKTsKPiAJCWVyciA9IC1F SU5WQUw7Cj4gCQlnb3RvIGZyZWVfc2NoZWQ7Cj4gCX0KPiAKPj4gKwkgICAgdGFwcmlvLT5udW1f ZW50cmllcyA+IFRBU19NQVhfQ01EX0xJU1RTKSB7Cj4+ICsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9N T0QodGFwcmlvLT5leHRhY2ssICJ1bnN1cHBvcnRlZCBudW1fZW50cmllcyAlbGQgaW4gdGFwcmlv IGNvbmZpZ1xuIiwKPj4gKwkJCQkgICAgICAgdGFwcmlvLT5udW1fZW50cmllcyk7Cj4gCj4gQmV0 dGVyIHRvIHNheSB3aGF0J3MgdGhlIGhhcmR3YXJlIG1heGltdW0sIHRoYW4gdG8gcmVwb3J0IGJh Y2sgbnVtX2VudHJpZXMKPiBhcyBiZWluZyBub3Qgc3VwcG9ydGVkLgo+IAo+PiArCQlyZXR1cm4g LUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBJZiBhbnkgdGltZV9pbnRlcnZhbCBpcyAwIGlu IGJldHdlZW4gdGhlIGxpc3QsIHRoZW4gZXhpdCAqLwo+PiArCWZvciAoaWR4ID0gMDsgaWR4IDwg dGFwcmlvLT5udW1fZW50cmllczsgaWR4KyspIHsKPj4gKwkJaWYgKHRhcHJpby0+ZW50cmllc1tp ZHhdLmludGVydmFsID09IDApIHsKPj4gKwkJCU5MX1NFVF9FUlJfTVNHX01PRCh0YXByaW8tPmV4 dGFjaywgIjAgaW50ZXJ2YWwgaW4gdGFwcmlvIGNvbmZpZyBub3Qgc3VwcG9ydGVkXG4iKTsKPj4g KwkJCXJldHVybiAtRUlOVkFMOwo+PiArCQl9Cj4+ICsJfQo+IAo+IEFsc28gbm90IHBvc3NpYmxl LCBzZWUgZmlsbF9zY2hlZF9lbnRyeSgpCj4gCj4gCS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxs b3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXQKPiAJICogZnJhbWUgdG8gZ28gb3V0Lgo+ IAkgKi8KPiAJaWYgKGludGVydmFsIDwgbWluX2R1cmF0aW9uKSB7Cj4gCQlOTF9TRVRfRVJSX01T RyhleHRhY2ssICJJbnZhbGlkIGludGVydmFsIGZvciBzY2hlZHVsZSBlbnRyeSIpOwo+IAkJcmV0 dXJuIC1FSU5WQUw7Cj4gCX0KPiAKPj4gKwo+PiArCWlmIChlbWFjLT5xb3MudGFzLnRhcHJpb19h ZG1pbikKPj4gKwkJZGV2bV9rZnJlZSgmbmRldi0+ZGV2LCBlbWFjLT5xb3MudGFzLnRhcHJpb19h ZG1pbik7Cj4+ICsKPj4gKwllc3RfbmV3ID0gZGV2bV9remFsbG9jKCZuZGV2LT5kZXYsCj4+ICsJ CQkgICAgICAgc3RydWN0X3NpemUoZXN0X25ldywgZW50cmllcywgdGFwcmlvLT5udW1fZW50cmll cyksCj4+ICsJCQkgICAgICAgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFlc3RfbmV3KQo+PiArCQly ZXR1cm4gLUVOT01FTTsKPiAKPiBZb3UgZG9uJ3QgbmVlZCB0byBhbGxvY2F0ZSBlc3RfbmV3LCB5 b3UgY2FuIGtlZXAgYSByZWZlcmVuY2Ugb24gdGFwcmlvCj4gdXNpbmcgdGFwcmlvX29mZmxvYWRf Z2V0KCksIGFuZCBjYWxsIHRhcHJpb19vZmZsb2FkX3B1dCgpIHRvIHJlbGVhc2UgdGhlCj4gcmVm ZXJlbmNlIHdoZW4geW91J3JlIGRvbmUgd2l0aCBpdC4KCnRhcHJpb19vZmZsb2FkX2ZyZWUoKSBh Y3R1YWxseS4KCkFsc28gbmVlZCBmaXggS2NvbmZpZyBkZXBlbmRlY3kgc28gdGhpcyBkcml2ZXIg ZGVwZW5kcyBvbiBORVRfU0NIX1RBUFJJTy4KCj4gCj4+ICsKPj4gKwllbWFjX2NwX3RhcHJpbyh0 YXByaW8sIGVzdF9uZXcpOwo+PiArCWVtYWMtPnFvcy50YXMudGFwcmlvX2FkbWluID0gZXN0X25l dzsKPj4gKwlyZXQgPSB0YXNfdXBkYXRlX29wZXJfbGlzdChlbWFjKTsKPj4gKwlpZiAocmV0KQo+ PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0ID0gIHRhc19zZXRfc3RhdGUoZW1hYywgVEFT X1NUQVRFX0VOQUJMRSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2bV9rZnJlZSgmbmRldi0+ZGV2 LCBlc3RfbmV3KTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9CgotLSAKY2hlZXJzLAotcm9n ZXIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4 LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFy bS1rZXJuZWwK