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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9445AC43334 for ; Fri, 3 Jun 2022 05:38:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241196AbiFCFie (ORCPT ); Fri, 3 Jun 2022 01:38:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241168AbiFCFiY (ORCPT ); Fri, 3 Jun 2022 01:38:24 -0400 Received: from mail.sberdevices.ru (mail.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F03B38BE4; Thu, 2 Jun 2022 22:38:17 -0700 (PDT) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mail.sberdevices.ru (Postfix) with ESMTP id 54FE15FD02; Fri, 3 Jun 2022 08:38:15 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1654234695; bh=YpfLxtcbJeSU964yHCAfebUGWv+Ea5aAt8JOnKACLe4=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version; b=KkjxdlecRrz7iGfmG52kM7LQTNfx/CG8d54Efe9rPoQ/U2q+5N2hZgb24wsUvRMTr VFciRXyleCbTOgwdx4NuePYKlOWiBjJ32u16RTEA8FpgffFV6T+ussH4c7N7z1joPH etglWguQ2h6WxUVs2RLgGGpFjfrrM2dqzSUkVl89bcKqv3/p2yrW49lbIlOyQlVF7Z WYqNMMSZK7pDoJknponkTgY01i7ZVV+x6sI6/p3eq4bRLtF942pXVIHwfkFBS55KQy BjLJCt+lwTFMnK8wi+mleUbMGwbGSJPqb5awmn9ApNvNccu2JIT3vvenOCPGHv6N+v mjcF99zi+ohWQ== Received: from S-MS-EXCH02.sberdevices.ru (S-MS-EXCH02.sberdevices.ru [172.16.1.5]) by mail.sberdevices.ru (Postfix) with ESMTP; Fri, 3 Jun 2022 08:38:15 +0300 (MSK) From: Arseniy Krasnov To: Stefano Garzarella , Stefan Hajnoczi , "Michael S. Tsirkin" , Jason Wang , "David S. Miller" , "Jakub Kicinski" , Paolo Abeni CC: "linux-kernel@vger.kernel.org" , "kvm@vger.kernel.org" , "virtualization@lists.linux-foundation.org" , "netdev@vger.kernel.org" , kernel , Krasnov Arseniy , Arseniy Krasnov Subject: [RFC PATCH v2 4/8] virtio/vsock: add transport zerocopy callback Thread-Topic: [RFC PATCH v2 4/8] virtio/vsock: add transport zerocopy callback Thread-Index: AQHYdwwOHCM79Ul6bEOypwJFONJkYA== Date: Fri, 3 Jun 2022 05:37:48 +0000 Message-ID: <6f76eed7-decc-68d1-6ae7-7bafb09fdad3@sberdevices.ru> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.1.12] Content-Type: text/plain; charset="utf-8" Content-ID: <6D8F74365F197B41B0821431AFA294B4@sberdevices.ru> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2022/06/03 01:19:00 #19656765 X-KSMG-AntiVirus-Status: Clean, skipped Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org VGhpcyBhZGRzIHRyYW5zcG9ydCBjYWxsYmFjayB3aGljaCBwcm9jZXNzZXMgcngNCnF1ZXVlIG9m IHNvY2tldCBhbmQgaW5zdGVhZCBvZiBjb3B5aW5nIGRhdGEgdG8NCnVzZXIgcHJvdmlkZWQgYnVm ZmVyLCBpdCBpbnNlcnRzIGRhdGEgcGFnZXMgb2YNCmVhY2ggcGFja2V0IHRvIHVzZXIncyB2bSBh cmVhLg0KDQpTaWduZWQtb2ZmLWJ5OiBBcnNlbml5IEtyYXNub3YgPEFWS3Jhc25vdkBzYmVyZGV2 aWNlcy5ydT4NCi0tLQ0KIGluY2x1ZGUvbGludXgvdmlydGlvX3Zzb2NrLmggICAgICAgICAgICB8 ICAgNCArDQogaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb192c29jay5oICAgICAgIHwgICA2ICsN CiBuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgfCAyMDggKysrKysrKysr KysrKysrKysrKysrKystDQogMyBmaWxlcyBjaGFuZ2VkLCAyMTUgaW5zZXJ0aW9ucygrKSwgMyBk ZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX3Zzb2NrLmgg Yi9pbmNsdWRlL2xpbnV4L3ZpcnRpb192c29jay5oDQppbmRleCBkMDJjYjdhYTkyMmYuLjQ3YTY4 YTJlYTgzOCAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3Zzb2NrLmgNCisrKyBi L2luY2x1ZGUvbGludXgvdmlydGlvX3Zzb2NrLmgNCkBAIC01MSw2ICs1MSw3IEBAIHN0cnVjdCB2 aXJ0aW9fdnNvY2tfcGt0IHsNCiAJYm9vbCByZXBseTsNCiAJYm9vbCB0YXBfZGVsaXZlcmVkOw0K IAlib29sIHNsYWJfYnVmOw0KKwlib29sIHNwbGl0Ow0KIH07DQogDQogc3RydWN0IHZpcnRpb192 c29ja19wa3RfaW5mbyB7DQpAQCAtMTMxLDYgKzEzMiw5IEBAIGludCB2aXJ0aW9fdHJhbnNwb3J0 X2RncmFtX2JpbmQoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywNCiAJCQkJc3RydWN0IHNvY2thZGRy X3ZtICphZGRyKTsNCiBib29sIHZpcnRpb190cmFuc3BvcnRfZGdyYW1fYWxsb3codTMyIGNpZCwg dTMyIHBvcnQpOw0KIA0KK2ludCB2aXJ0aW9fdHJhbnNwb3J0X3plcm9jb3B5X2RlcXVldWUoc3Ry dWN0IHZzb2NrX3NvY2sgKnZzaywNCisJCQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEsDQorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcik7DQogaW50IHZpcnRpb190cmFuc3Bv cnRfY29ubmVjdChzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTsNCiANCiBpbnQgdmlydGlvX3RyYW5z cG9ydF9zaHV0ZG93bihzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCBpbnQgbW9kZSk7DQpkaWZmIC0t Z2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb192c29jay5oIGIvaW5jbHVkZS91YXBpL2xp bnV4L3ZpcnRpb192c29jay5oDQppbmRleCA2NDczODgzOGJlZTUuLjY3NzVjNmM0NGI1YiAxMDA2 NDQNCi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9fdnNvY2suaA0KKysrIGIvaW5jbHVk ZS91YXBpL2xpbnV4L3ZpcnRpb192c29jay5oDQpAQCAtNjYsNiArNjYsMTIgQEAgc3RydWN0IHZp cnRpb192c29ja19oZHIgew0KIAlfX2xlMzIJZndkX2NudDsNCiB9IF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOw0KIA0KK3N0cnVjdCB2aXJ0aW9fdnNvY2tfdXNyX2hkciB7DQorCXUzMiBmbGFnczsN CisJdTMyIGxlbjsNCisJdTMyIGNvcHlfbGVuOw0KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 DQorDQogZW51bSB2aXJ0aW9fdnNvY2tfdHlwZSB7DQogCVZJUlRJT19WU09DS19UWVBFX1NUUkVB TSA9IDEsDQogCVZJUlRJT19WU09DS19UWVBFX1NFUVBBQ0tFVCA9IDIsDQpkaWZmIC0tZ2l0IGEv bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92 aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jDQppbmRleCAyNzg1NjdmNzQ4ZjIuLjNhM2U4NDE3NmM3 NSAxMDA2NDQNCi0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYw0K KysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jDQpAQCAtMTIsNiAr MTIsNyBAQA0KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPg0KICNpbmNsdWRlIDxsaW51eC9saXN0 Lmg+DQogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb192c29jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9t bS5oPg0KICNpbmNsdWRlIDx1YXBpL2xpbnV4L3Zzb2NrbW9uLmg+DQogDQogI2luY2x1ZGUgPG5l dC9zb2NrLmg+DQpAQCAtMzQ3LDYgKzM0OCwxOTYgQEAgdmlydGlvX3RyYW5zcG9ydF9zdHJlYW1f ZG9fcGVlayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLA0KIAlyZXR1cm4gZXJyOw0KIH0NCiANCisj ZGVmaW5lIE1BWF9QQUdFU19UT19NQVAgMjU2DQorDQoraW50IHZpcnRpb190cmFuc3BvcnRfemVy b2NvcHlfZGVxdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLA0KKwkJCQkgICAgICBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwNCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQ0KK3sN CisJc3RydWN0IHZpcnRpb192c29ja19zb2NrICp2dnMgPSB2c2stPnRyYW5zOw0KKwlzdHJ1Y3Qg dmlydGlvX3Zzb2NrX3Vzcl9oZHIgKnVzcl9oZHJfYnVmZmVyOw0KKwl1bnNpZ25lZCBsb25nIG1h eF9wYWdlc190b19pbnNlcnQ7DQorCXVuc2lnbmVkIGxvbmcgdG1wX3BhZ2VzX2luc2VydGVkOw0K Kwl1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX2luc2VydDsNCisJc3RydWN0IHBhZ2UgKnVzcl9oZHJf cGFnZTsNCisJdW5zaWduZWQgbG9uZyB2bWFfc2l6ZTsNCisJc3RydWN0IHBhZ2UgKipwYWdlczsN CisJaW50IG1heF92bWFfcGFnZXM7DQorCWludCBtYXhfdXNyX2hkcnM7DQorCWludCByZXM7DQor CWludCBlcnI7DQorCWludCBpOw0KKw0KKwkvKiBPbmx5IHVzZSBWTUEgZnJvbSBmaXJzdCBwYWdl LiAqLw0KKwlpZiAodm1hLT52bV9zdGFydCAhPSBhZGRyKQ0KKwkJcmV0dXJuIC1FRkFVTFQ7DQor DQorCXZtYV9zaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0Ow0KKw0KKwkvKiBUb28g c21hbGwgdm1hKGF0IGxlYXN0IG9uZSBwYWdlIGZvciBoZWFkZXJzDQorCSAqIGFuZCBvbmUgcGFn ZSBmb3IgZGF0YSkuDQorCSAqLw0KKwlpZiAodm1hX3NpemUgPCAyICogUEFHRV9TSVpFKQ0KKwkJ cmV0dXJuIC1FRkFVTFQ7DQorDQorCS8qIFBhZ2UgZm9yIG1ldGEgZGF0YS4gKi8NCisJdXNyX2hk cl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsNCisNCisJaWYgKCF1c3JfaGRyX3BhZ2Up DQorCQlyZXR1cm4gLUVGQVVMVDsNCisNCisJcGFnZXMgPSBrbWFsbG9jX2FycmF5KE1BWF9QQUdF U19UT19NQVAsIHNpemVvZihwYWdlc1swXSksIEdGUF9LRVJORUwpOw0KKw0KKwlpZiAoIXBhZ2Vz KQ0KKwkJcmV0dXJuIC1FRkFVTFQ7DQorDQorCXBhZ2VzW3BhZ2VzX3RvX2luc2VydCsrXSA9IHVz cl9oZHJfcGFnZTsNCisNCisJdXNyX2hkcl9idWZmZXIgPSBwYWdlX3RvX3ZpcnQodXNyX2hkcl9w YWdlKTsNCisNCisJZXJyID0gMDsNCisNCisJLyogQXMgd2UgdXNlIGZpcnN0IHBhZ2UgZm9yIGhl YWRlcnMsIHNvIHRvdGFsIG51bWJlciBvZg0KKwkgKiBwYWdlcyBmb3IgdXNlciBpcyBtaW4gYmV0 d2VlbiBudW1iZXIgb2YgaGVhZGVycyBpbg0KKwkgKiBmaXJzdCBwYWdlIGFuZCBzaXplIG9mIHZt YShpbiBwYWdlcywgZXhjZXB0IGZpcnN0IHBhZ2UpLg0KKwkgKi8NCisJbWF4X3Vzcl9oZHJzID0g UEFHRV9TSVpFIC8gc2l6ZW9mKCp1c3JfaGRyX2J1ZmZlcik7DQorCW1heF92bWFfcGFnZXMgPSAo dm1hX3NpemUgLyBQQUdFX1NJWkUpIC0gMTsNCisJbWF4X3BhZ2VzX3RvX2luc2VydCA9IG1pbiht YXhfdXNyX2hkcnMsIG1heF92bWFfcGFnZXMpOw0KKw0KKwlpZiAobWF4X3BhZ2VzX3RvX2luc2Vy dCA+IE1BWF9QQUdFU19UT19NQVApDQorCQltYXhfcGFnZXNfdG9faW5zZXJ0ID0gTUFYX1BBR0VT X1RPX01BUDsNCisNCisJc3Bpbl9sb2NrX2JoKCZ2dnMtPnJ4X2xvY2spOw0KKw0KKwl3aGlsZSAo IWxpc3RfZW1wdHkoJnZ2cy0+cnhfcXVldWUpICYmDQorCSAgICAgICBwYWdlc190b19pbnNlcnQg PCBtYXhfcGFnZXNfdG9faW5zZXJ0KSB7DQorCQlzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCAqcGt0 Ow0KKwkJc3NpemVfdCByZXN0X2RhdGFfYnl0ZXM7DQorCQlzaXplX3QgbW92ZWRfZGF0YV9ieXRl czsNCisJCXVuc2lnbmVkIGxvbmcgcGdfb2ZmczsNCisNCisJCXBrdCA9IGxpc3RfZmlyc3RfZW50 cnkoJnZ2cy0+cnhfcXVldWUsDQorCQkJCSAgICAgICBzdHJ1Y3QgdmlydGlvX3Zzb2NrX3BrdCwg bGlzdCk7DQorDQorCQkvKiBCdWZmZXIgd2FzIGFsbG9jYXRlZCBieSAna21hbGxvYygpJy4gVGhp cyBjb3VsZA0KKwkJICogaGFwcGVuLCB3aGVuIHplcm9jb3B5IHdhcyBlbmFibGVkLCBidXQgd2Ug c3RpbGwNCisJCSAqIGhhdmUgcGVuZGluZyBwYWNrZXQgd2hpY2ggd2FzIGNyZWF0ZWQgYmVmb3Jl IGl0Lg0KKwkJICovDQorCQlpZiAocGt0LT5zbGFiX2J1Zikgew0KKwkJCXVzcl9oZHJfYnVmZmVy LT5mbGFncyA9IGxlMzJfdG9fY3B1KHBrdC0+aGRyLmZsYWdzKTsNCisJCQl1c3JfaGRyX2J1ZmZl ci0+bGVuID0gMDsNCisJCQl1c3JfaGRyX2J1ZmZlci0+Y29weV9sZW4gPSBsZTMyX3RvX2NwdShw a3QtPmhkci5sZW4pOw0KKwkJCS8qIFJlcG9ydCB1c2VyIHRvIHJlYWQgaXQgdXNpbmcgY29weS4g Ki8NCisJCQlicmVhazsNCisJCX0NCisNCisJCS8qIFRoaXMgY291bGQgaGFwcGVuLCB3aGVuIHBh Y2tldCB3YXMgZGVxdWV1ZWQgYmVmb3JlDQorCQkgKiBieSBhbiBvcmRpbmFyeSAncmVhZCgpJyBj YWxsLiBXZSBjYW4ndCBoYW5kbGUgc3VjaA0KKwkJICogcGFja2V0LiBEcm9wIGl0Lg0KKwkJICov DQorCQlpZiAocGt0LT5vZmYgJSBQQUdFX1NJWkUpIHsNCisJCQlsaXN0X2RlbCgmcGt0LT5saXN0 KTsNCisJCQl2aXJ0aW9fdHJhbnNwb3J0X2RlY19yeF9wa3QodnZzLCBwa3QpOw0KKwkJCXZpcnRp b190cmFuc3BvcnRfZnJlZV9wa3QocGt0KTsNCisJCQljb250aW51ZTsNCisJCX0NCisNCisJCXJl c3RfZGF0YV9ieXRlcyA9IGxlMzJfdG9fY3B1KHBrdC0+aGRyLmxlbikgLSBwa3QtPm9mZjsNCisN CisJCS8qIEZvciBwYWNrZXRzLCBiaWdnZXIgdGhhbiBvbmUgcGFnZSwgc3BsaXQgaXQncw0KKwkJ ICogaGlnaCBvcmRlciBhbGxvY2F0ZWQgYnVmZmVyIHRvIDAgb3JkZXIgcGFnZXMuDQorCQkgKiBP dGhlcndpc2UgJ3ZtX2luc2VydF9wYWdlcygpJyB3aWxsIGZhaWwsIGZvcg0KKwkJICogYWxsIHBh Z2VzIGV4Y2VwdCBmaXJzdC4NCisJCSAqLw0KKwkJaWYgKHJlc3RfZGF0YV9ieXRlcyA+IFBBR0Vf U0laRSkgew0KKwkJCS8qIEhpZ2ggb3JkZXIgYnVmZmVyIG5vdCBzcGxpdCB5ZXQuICovDQorCQkJ aWYgKCFwa3QtPnNwbGl0KSB7DQorCQkJCXNwbGl0X3BhZ2UodmlydF90b19wYWdlKHBrdC0+YnVm KSwNCisJCQkJCSAgIGdldF9vcmRlcihsZTMyX3RvX2NwdShwa3QtPmhkci5sZW4pKSk7DQorCQkJ CXBrdC0+c3BsaXQgPSB0cnVlOw0KKwkJCX0NCisJCX0NCisNCisJCXBnX29mZnMgPSBwa3QtPm9m ZjsNCisJCW1vdmVkX2RhdGFfYnl0ZXMgPSAwOw0KKw0KKwkJd2hpbGUgKHJlc3RfZGF0YV9ieXRl cyAmJg0KKwkJICAgICAgIHBhZ2VzX3RvX2luc2VydCA8IG1heF9wYWdlc190b19pbnNlcnQpIHsN CisJCQlzdHJ1Y3QgcGFnZSAqYnVmX3BhZ2U7DQorDQorCQkJYnVmX3BhZ2UgPSB2aXJ0X3RvX3Bh Z2UocGt0LT5idWYgKyBwZ19vZmZzKTsNCisNCisJCQlwYWdlc1twYWdlc190b19pbnNlcnQrK10g PSBidWZfcGFnZTsNCisJCQkvKiBHZXQgcmVmZXJlbmNlIHRvIHByZXZlbnQgdGhpcyBwYWdlIGJl aW5nDQorCQkJICogcmV0dXJuZWQgdG8gcGFnZSBhbGxvY2F0b3Igd2hlbiBwYWNrZXQgd2lsbA0K KwkJCSAqIGJlIGZyZWVkLiBSZWYgY291bnQgd2lsbCBiZSAyLg0KKwkJCSAqLw0KKwkJCWdldF9w YWdlKGJ1Zl9wYWdlKTsNCisJCQlwZ19vZmZzICs9IFBBR0VfU0laRTsNCisNCisJCQlpZiAocmVz dF9kYXRhX2J5dGVzID49IFBBR0VfU0laRSkgew0KKwkJCQltb3ZlZF9kYXRhX2J5dGVzICs9IFBB R0VfU0laRTsNCisJCQkJcmVzdF9kYXRhX2J5dGVzIC09IFBBR0VfU0laRTsNCisJCQl9IGVsc2Ug ew0KKwkJCQltb3ZlZF9kYXRhX2J5dGVzICs9IHJlc3RfZGF0YV9ieXRlczsNCisJCQkJcmVzdF9k YXRhX2J5dGVzID0gMDsNCisJCQl9DQorCQl9DQorDQorCQl1c3JfaGRyX2J1ZmZlci0+ZmxhZ3Mg PSBsZTMyX3RvX2NwdShwa3QtPmhkci5mbGFncyk7DQorCQl1c3JfaGRyX2J1ZmZlci0+bGVuID0g bW92ZWRfZGF0YV9ieXRlczsNCisJCXVzcl9oZHJfYnVmZmVyLT5jb3B5X2xlbiA9IDA7DQorCQl1 c3JfaGRyX2J1ZmZlcisrOw0KKw0KKwkJcGt0LT5vZmYgPSBwZ19vZmZzOw0KKw0KKwkJaWYgKHJl c3RfZGF0YV9ieXRlcyA9PSAwKSB7DQorCQkJbGlzdF9kZWwoJnBrdC0+bGlzdCk7DQorCQkJdmly dGlvX3RyYW5zcG9ydF9kZWNfcnhfcGt0KHZ2cywgcGt0KTsNCisJCQl2aXJ0aW9fdHJhbnNwb3J0 X2ZyZWVfcGt0KHBrdCk7DQorCQl9DQorDQorCQkvKiBOb3cgcmVmIGNvdW50IGZvciBhbGwgcGFn ZXMgb2YgcGFja2V0IGlzIDEuICovDQorCX0NCisNCisJLyogU2V0IGxhc3QgYnVmZmVyIGVtcHR5 KGlmIHdlIGhhdmUgb25lKS4gKi8NCisJaWYgKHBhZ2VzX3RvX2luc2VydCAtIDEgPCBtYXhfdXNy X2hkcnMpDQorCQl1c3JfaGRyX2J1ZmZlci0+bGVuID0gMDsNCisNCisJc3Bpbl91bmxvY2tfYmgo JnZ2cy0+cnhfbG9jayk7DQorDQorCXRtcF9wYWdlc19pbnNlcnRlZCA9IHBhZ2VzX3RvX2luc2Vy dDsNCisNCisJcmVzID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgYWRkciwgcGFnZXMsICZ0bXBfcGFn ZXNfaW5zZXJ0ZWQpOw0KKw0KKwlpZiAocmVzIHx8IHRtcF9wYWdlc19pbnNlcnRlZCkgew0KKwkJ LyogRmFpbGVkIHRvIGluc2VydCBzb21lIHBhZ2VzLCB3ZSBoYXZlICJwYXJ0aWFsbHkiDQorCQkg KiBtYXBwZWQgdm1hLiBEbyBub3QgcmV0dXJuLCBzZXQgZXJyb3IgY29kZS4gVGhpcw0KKwkJICog Y29kZSB3aWxsIGJlIHJldHVybmVkIHRvIHVzZXIuIFVzZXIgbmVlZHMgdG8gY2FsbA0KKwkJICog J21hZHZpc2UoKS9tbWFwKCknIHRvIGNsZWFyIHRoaXMgdm1hLiBBbnl3YXksDQorCQkgKiByZWZl cmVuY2VzIHRvIGFsbCBwYWdlcyB3aWxsIHRvIGJlIGRyb3BwZWQgYmVsb3cuDQorCQkgKi8NCisJ CWVyciA9IC1FRkFVTFQ7DQorCX0NCisNCisJLyogUHV0IHJlZmVyZW5jZSBmb3IgZXZlcnkgcGFn ZS4gKi8NCisJZm9yIChpID0gMDsgaSA8IHBhZ2VzX3RvX2luc2VydDsgaSsrKSB7DQorCQkvKiBS ZWYgY291bnQgaXMgMiAoJ2dldF9wYWdlKCknICsgJ3ZtX2luc2VydF9wYWdlcygpJyBhYm92ZSku DQorCQkgKiBQdXQgcmVmZXJlbmNlIG9uY2UsIHBhZ2Ugd2lsbCBiZSByZXR1cm5lZCB0byBhbGxv Y2F0b3INCisJCSAqIGFmdGVyIHVzZXIncyAnbWFkdmljZSgpL211bm1hcCgpJyBjYWxsKG9yIGl0 IHdhc24ndCBtYXBwZWQNCisJCSAqIGlmICd2bV9pbnNlcnRfcGFnZXMoKScgZmFpbGVkKS4NCisJ CSAqLw0KKwkJcHV0X3BhZ2UocGFnZXNbaV0pOw0KKwl9DQorDQorCXZpcnRpb190cmFuc3BvcnRf c2VuZF9jcmVkaXRfdXBkYXRlKHZzayk7DQorCWtmcmVlKHBhZ2VzKTsNCisNCisJcmV0dXJuIGVy cjsNCit9DQorRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF96ZXJvY29weV9kZXF1 ZXVlKTsNCisNCiBzdGF0aWMgc3NpemVfdA0KIHZpcnRpb190cmFuc3BvcnRfc3RyZWFtX2RvX2Rl cXVldWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzaywNCiAJCQkJICAgc3RydWN0IG1zZ2hkciAqbXNn LA0KQEAgLTEzNDQsMTAgKzE1MzUsMjEgQEAgRVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5z cG9ydF9yZWN2X3BrdCk7DQogdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2ZyZWVfcGt0KHN0cnVjdCB2 aXJ0aW9fdnNvY2tfcGt0ICpwa3QpDQogew0KIAlpZiAocGt0LT5idWZfbGVuKSB7DQotCQlpZiAo cGt0LT5zbGFiX2J1ZikNCisJCWlmIChwa3QtPnNsYWJfYnVmKSB7DQogCQkJa2ZyZWUocGt0LT5i dWYpOw0KLQkJZWxzZQ0KLQkJCWZyZWVfcGFnZXMoYnVmLCBnZXRfb3JkZXIocGt0LT5idWZfbGVu KSk7DQorCQl9IGVsc2Ugew0KKwkJCXVuc2lnbmVkIGludCBvcmRlciA9IGdldF9vcmRlcihwa3Qt PmJ1Zl9sZW4pOw0KKwkJCXVuc2lnbmVkIGxvbmcgYnVmID0gKHVuc2lnbmVkIGxvbmcpcGt0LT5i dWY7DQorDQorCQkJaWYgKHBrdC0+c3BsaXQpIHsNCisJCQkJaW50IGk7DQorDQorCQkJCWZvciAo aSA9IDA7IGkgPCAoMSA8PCBvcmRlcik7IGkrKykNCisJCQkJCWZyZWVfcGFnZShidWYgKyBpICog UEFHRV9TSVpFKTsNCisJCQl9IGVsc2Ugew0KKwkJCQlmcmVlX3BhZ2VzKGJ1Ziwgb3JkZXIpOw0K KwkJCX0NCisJCX0NCiAJfQ0KIA0KIAlrZnJlZShwa3QpOw0KLS0gDQoyLjI1LjENCg==