From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id B43F2A04BC; Thu, 8 Oct 2020 09:05:12 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 91CC41B813; Thu, 8 Oct 2020 09:05:11 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id E00B81B755 for ; Thu, 8 Oct 2020 09:05:09 +0200 (CEST) IronPort-SDR: K+ixN5YuXRdtAOMB2AqDaBnLvSfYtZDzdEev6TgdfWkLLb0/hBbPDyONRfK0vedTxeN8b8jNTc TPP2uSkDvSfA== X-IronPort-AV: E=McAfee;i="6000,8403,9767"; a="165347563" X-IronPort-AV: E=Sophos;i="5.77,350,1596524400"; d="scan'208";a="165347563" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Oct 2020 00:05:07 -0700 IronPort-SDR: jB5WxdP+sjkUHcNsKV6kiyllxwJ5JNlE32HuVCW/yk2pvsocxhwTxafo3MH8aMGXLK4ktrBjfs AtjD1eCWSBew== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,350,1596524400"; d="scan'208";a="519219328" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga005.fm.intel.com with ESMTP; 08 Oct 2020 00:05:07 -0700 Received: from shsmsx604.ccr.corp.intel.com (10.109.6.214) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 8 Oct 2020 00:05:06 -0700 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX604.ccr.corp.intel.com (10.109.6.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 8 Oct 2020 15:05:02 +0800 Received: from shsmsx601.ccr.corp.intel.com ([10.109.6.141]) by SHSMSX601.ccr.corp.intel.com ([10.109.6.141]) with mapi id 15.01.1713.004; Thu, 8 Oct 2020 15:05:02 +0800 From: "Liu, Yong" To: Maxime Coquelin , "Xia, Chenbo" , "Wang, Zhihong" CC: "dev@dpdk.org" Thread-Topic: [PATCH v2 4/5] vhost: add packed ring vectorized dequeue Thread-Index: AQHWj+PZI29HI6giYk+tJlaZHgUyPKmKPJcAgAMc2rA= Date: Thu, 8 Oct 2020 07:05:02 +0000 Message-ID: <95c8090551e9428dbc2ec83807a9df6a@intel.com> References: <20200819032414.51430-2-yong.liu@intel.com> <20200921064837.15957-1-yong.liu@intel.com> <20200921064837.15957-5-yong.liu@intel.com> <399fcf75-1831-d20a-67ae-10daac9cee35@redhat.com> In-Reply-To: <399fcf75-1831-d20a-67ae-10daac9cee35@redhat.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-originating-ip: [10.22.254.132] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 4/5] vhost: add packed ring vectorized dequeue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1lIENvcXVlbGlu IDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogVHVlc2RheSwgT2N0b2JlciA2 LCAyMDIwIDEwOjU5IFBNDQo+IFRvOiBMaXUsIFlvbmcgPHlvbmcubGl1QGludGVsLmNvbT47IFhp YSwgQ2hlbmJvIDxjaGVuYm8ueGlhQGludGVsLmNvbT47DQo+IFdhbmcsIFpoaWhvbmcgPHpoaWhv bmcud2FuZ0BpbnRlbC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmcNCj4gU3ViamVjdDogUmU6IFtQ QVRDSCB2MiA0LzVdIHZob3N0OiBhZGQgcGFja2VkIHJpbmcgdmVjdG9yaXplZCBkZXF1ZXVlDQo+ IA0KPiANCj4gDQo+IE9uIDkvMjEvMjAgODo0OCBBTSwgTWFydmluIExpdSB3cm90ZToNCj4gPiBP cHRpbWl6ZSB2aG9zdCBwYWNrZWQgcmluZyBkZXF1ZXVlIHBhdGggd2l0aCBTSU1EIGluc3RydWN0 aW9ucy4gRm91cg0KPiA+IGRlc2NyaXB0b3JzIHN0YXR1cyBjaGVjayBhbmQgd3JpdGViYWNrIGFy ZSBiYXRjaGVkIGhhbmRsZWQgd2l0aCBBVlg1MTINCj4gPiBpbnN0cnVjdGlvbnMuIEFkZHJlc3Mg dHJhbnNsYXRpb24gb3BlcmF0aW9ucyBhcmUgYWxzbyBhY2NlbGVyYXRlZCBieQ0KPiA+IEFWWDUx MiBpbnN0cnVjdGlvbnMuDQo+ID4NCj4gPiBJZiBwbGF0Zm9ybSBvciBjb21waWxlciBub3Qgc3Vw cG9ydCB2ZWN0b3JpemF0aW9uLCB3aWxsIGZhbGxiYWNrIHRvDQo+ID4gZGVmYXVsdCBwYXRoLg0K PiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTWFydmluIExpdSA8eW9uZy5saXVAaW50ZWwuY29tPg0K PiA+DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfdmhvc3QvbWVzb24uYnVpbGQgYi9saWIv bGlicnRlX3Zob3N0L21lc29uLmJ1aWxkDQo+ID4gaW5kZXggY2M5YWE2NWM2Ny4uYzE0ODE4MDJk NyAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX3Zob3N0L21lc29uLmJ1aWxkDQo+ID4gKysr IGIvbGliL2xpYnJ0ZV92aG9zdC9tZXNvbi5idWlsZA0KPiA+IEBAIC04LDYgKzgsMjIgQEAgZW5k aWYNCj4gPiAgaWYgaGFzX2xpYm51bWEgPT0gMQ0KPiA+ICAJZHBka19jb25mLnNldDEwKCdSVEVf TElCUlRFX1ZIT1NUX05VTUEnLCB0cnVlKQ0KPiA+ICBlbmRpZg0KPiA+ICsNCj4gPiAraWYgYXJj aF9zdWJkaXIgPT0gJ3g4NicNCj4gPiArICAgICAgICBpZiBub3QgbWFjaGluZV9hcmdzLmNvbnRh aW5zKCctbW5vLWF2eDUxMmYnKQ0KPiA+ICsgICAgICAgICAgICAgICAgaWYgY2MuaGFzX2FyZ3Vt ZW50KCctbWF2eDUxMmYnKSBhbmQgY2MuaGFzX2FyZ3VtZW50KCctDQo+IG1hdng1MTJ2bCcpIGFu ZCBjYy5oYXNfYXJndW1lbnQoJy1tYXZ4NTEyYncnKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICBjZmxhZ3MgKz0gWyctRENDX0FWWDUxMl9TVVBQT1JUJ10NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgdmhvc3RfYXZ4NTEyX2xpYiA9IHN0YXRpY19saWJyYXJ5KCd2aG9zdF9hdng1 MTJfbGliJywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICd2aG9zdF92ZWNfYXZ4LmMnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBbc3RhdGljX3J0ZV9lYWwsDQo+IHN0YXRp Y19ydGVfbWVtcG9vbCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdGF0aWNfcnRlX21idWYsIHN0YXRpY19ydGVfZXRoZGV2LA0KPiBzdGF0 aWNfcnRlX25ldF0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBpbmNsdWRlcywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfYXJnczogW2NmbGFncywgJy1tYXZ4 NTEyZicsICctbWF2eDUxMmJ3JywgJy0NCj4gbWF2eDUxMnZsJ10pDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgIG9ianMgKz0gdmhvc3RfYXZ4NTEyX2xpYi5leHRyYWN0X29iamVjdHMoJ3Zo b3N0X3ZlY19hdnguYycpDQo+ID4gKyAgICAgICAgICAgICAgICBlbmRpZg0KPiA+ICsgICAgICAg IGVuZGlmDQo+ID4gK2VuZGlmDQo+IA0KPiBOb3QgYSBNZXNvbiBleHBlcnQsIGJ1dCB3b25kZXIg aG93IEkgY2FuIGRpc2FibGUgQ0NfQVZYNTEyX1NVUFBPUlQuDQo+IEkgY2hlY2tlZCB0aGUgRFBE SyBkb2MsIGJ1dCBJIGNvdWxkIG5vdCBmaW5kIGhvdyB0byBwYXNzIC1tbm8tYXZ4NTEyZiB0bw0K PiB0aGUgbWFjaGluZV9hcmdzLg0KDQpIaSBNYXhpbWUsDQpCeSBub3cgbW5vLWF2eDUxMmYgZmxh ZyB3aWxsIGJlIHNldCBvbmx5IGlmIGJpbnV0aWxzIGNoZWNrIHNjcmlwdCBmb3VuZCBpc3N1ZSBo dHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD05MDAyOC4NClNvIGF2 eDUxMiBjb2RlIHdpbGwgYmUgYnVpbHQtaW4gaWYgY29tcGlsZXIgc3VwcG9ydCB0aGF0LiBUaGVy ZSdzIGFsdGVybmF0aXZlIHdheSBpcyB0aGF0IGludHJvZHVjZSBvbmUgbmV3IG9wdGlvbiBpbiBt ZXNvbiBidWlsZC4gDQoNClRoYW5rcywNCk1hcnZpbg0KDQo+IA0KPiA+ICsNCj4gPiAgaWYgKHRv b2xjaGFpbiA9PSAnZ2NjJyBhbmQgY2MudmVyc2lvbigpLnZlcnNpb25fY29tcGFyZSgnPj04LjMu MCcpKQ0KPiA+ICAJY2ZsYWdzICs9ICctRFZIT1NUX0dDQ19VTlJPTExfUFJBR01BJw0KPiA+ICBl bGlmICh0b29sY2hhaW4gPT0gJ2NsYW5nJyBhbmQgY2MudmVyc2lvbigpLnZlcnNpb25fY29tcGFy ZSgnPj0zLjcuMCcpKQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Zob3N0L3Zob3N0Lmgg Yi9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmgNCj4gPiBpbmRleCA0YTgxZjE4ZjAxLi5mYzdkYWYy MTQ1IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaA0KPiA+ICsrKyBi L2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaA0KPiA+IEBAIC0xMTI0LDQgKzExMjQsMTIgQEAgdmly dGlvX2Rldl9wa3RtYnVmX2FsbG9jKHN0cnVjdCB2aXJ0aW9fbmV0DQo+ICpkZXYsIHN0cnVjdCBy dGVfbWVtcG9vbCAqbXAsDQo+ID4gIAlyZXR1cm4gTlVMTDsNCj4gPiAgfQ0KPiA+DQo+ID4gK2lu dA0KPiA+ICt2aG9zdF9yZXNlcnZlX2F2YWlsX2JhdGNoX3BhY2tlZF9hdngoc3RydWN0IHZpcnRp b19uZXQgKmRldiwNCj4gPiArCQkJCSBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPiAr CQkJCSBzdHJ1Y3QgcnRlX21lbXBvb2wgKm1idWZfcG9vbCwNCj4gPiArCQkJCSBzdHJ1Y3QgcnRl X21idWYgKipwa3RzLA0KPiA+ICsJCQkJIHVpbnQxNl90IGF2YWlsX2lkeCwNCj4gPiArCQkJCSB1 aW50cHRyX3QgKmRlc2NfYWRkcnMsDQo+ID4gKwkJCQkgdWludDE2X3QgKmlkcyk7DQo+ID4gICNl bmRpZiAvKiBfVkhPU1RfTkVUX0NERVZfSF8gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0 ZV92aG9zdC92aG9zdF92ZWNfYXZ4LmMNCj4gYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0X3ZlY19h dnguYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uZGM1 MzIyZDAwMg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zo b3N0X3ZlY19hdnguYw0KPiANCj4gRm9yIGNvbnNpc3RlbmN5IGl0IHNob3VsZCBiZSBwcmVmaXhl ZCB3aXRoIHZpcnRpb19uZXQsIG5vdCB2aG9zdC4NCj4gDQo+ID4gQEAgLTAsMCArMSwxODEgQEAN Cj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiA+ICsgKiBD b3B5cmlnaHQoYykgMjAxMC0yMDE2IEludGVsIENvcnBvcmF0aW9uDQo+ID4gKyAqLw0KPiA+ICsj aW5jbHVkZSA8c3RkaW50Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAidmhvc3QuaCINCj4gPiAr DQo+ID4gKyNkZWZpbmUgQllURV9TSVpFIDgNCj4gPiArLyogcmVmZXJlbmNlIGNvdW50IG9mZnNl dCBpbiBtYnVmIHJlYXJtIGRhdGEgKi8NCj4gPiArI2RlZmluZSBSRUZDTlRfQklUU19PRkZTRVQg KChvZmZzZXRvZihzdHJ1Y3QgcnRlX21idWYsIHJlZmNudCkgLSBcDQo+ID4gKwlvZmZzZXRvZihz dHJ1Y3QgcnRlX21idWYsIHJlYXJtX2RhdGEpKSAqIEJZVEVfU0laRSkNCj4gPiArLyogc2VnbWVu dCBudW1iZXIgb2Zmc2V0IGluIG1idWYgcmVhcm0gZGF0YSAqLw0KPiA+ICsjZGVmaW5lIFNFR19O VU1fQklUU19PRkZTRVQgKChvZmZzZXRvZihzdHJ1Y3QgcnRlX21idWYsIG5iX3NlZ3MpIC0gXA0K PiA+ICsJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9tYnVmLCByZWFybV9kYXRhKSkgKiBCWVRFX1NJWkUp DQo+ID4gKw0KPiA+ICsvKiBkZWZhdWx0IHJlYXJtIGRhdGEgKi8NCj4gPiArI2RlZmluZSBERUZB VUxUX1JFQVJNX0RBVEEgKDFVTEwgPDwgU0VHX05VTV9CSVRTX09GRlNFVCB8IFwNCj4gPiArCTFV TEwgPDwgUkVGQ05UX0JJVFNfT0ZGU0VUKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBERVNDX0ZMQUdT X1NIT1JUX09GRlNFVCAob2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjLA0KPiBmbGFn cykgLyBcDQo+ID4gKwlzaXplb2YodWludDE2X3QpKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBERVND X0ZMQUdTX1NIT1JUX1NJWkUgKHNpemVvZihzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rlc2MpIC8gXA0K PiA+ICsJc2l6ZW9mKHVpbnQxNl90KSkNCj4gPiArI2RlZmluZSBCQVRDSF9GTEFHU19NQVNLICgx IDw8IERFU0NfRkxBR1NfU0hPUlRfT0ZGU0VUIHwgXA0KPiA+ICsJMSA8PCAoREVTQ19GTEFHU19T SE9SVF9PRkZTRVQgKyBERVNDX0ZMQUdTX1NIT1JUX1NJWkUpIHwgXA0KPiA+ICsJMSA8PCAoREVT Q19GTEFHU19TSE9SVF9PRkZTRVQgKyBERVNDX0ZMQUdTX1NIT1JUX1NJWkUgKiAyKSAgfA0KPiBc DQo+ID4gKwkxIDw8IChERVNDX0ZMQUdTX1NIT1JUX09GRlNFVCArIERFU0NfRkxBR1NfU0hPUlRf U0laRSAqIDMpKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBGTEFHU19CSVRTX09GRlNFVCAoKG9mZnNl dG9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYywgZmxhZ3MpIC0gXA0KPiA+ICsJb2Zmc2V0b2Yo c3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjLCBsZW4pKSAqIEJZVEVfU0laRSkNCj4gPiArDQo+ID4g KyNkZWZpbmUgUEFDS0VEX0ZMQUdTX01BU0sgKCgwVUxMIHwgVlJJTkdfREVTQ19GX0FWQUlMIHwN Cj4gVlJJTkdfREVTQ19GX1VTRUQpIFwNCj4gPiArCTw8IEZMQUdTX0JJVFNfT0ZGU0VUKQ0KPiA+ ICsjZGVmaW5lIFBBQ0tFRF9BVkFJTF9GTEFHICgoMFVMTCB8IFZSSU5HX0RFU0NfRl9BVkFJTCkg PDwNCj4gRkxBR1NfQklUU19PRkZTRVQpDQo+ID4gKyNkZWZpbmUgUEFDS0VEX0FWQUlMX0ZMQUdf V1JBUCAoKDBVTEwgfCBWUklOR19ERVNDX0ZfVVNFRCkgPDwgXA0KPiA+ICsJRkxBR1NfQklUU19P RkZTRVQpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERFU0NfRkxBR1NfUE9TIDB4YWENCj4gPiArI2Rl ZmluZSBNQlVGX0xFTlNfUE9TIDB4NjY2Ng0KPiA+ICsNCj4gPiAraW50DQo+ID4gK3Zob3N0X3Jl c2VydmVfYXZhaWxfYmF0Y2hfcGFja2VkX2F2eChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiA+ ICsJCQkJIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICsJCQkJIHN0cnVjdCBydGVf bWVtcG9vbCAqbWJ1Zl9wb29sLA0KPiA+ICsJCQkJIHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsDQo+ ID4gKwkJCQkgdWludDE2X3QgYXZhaWxfaWR4LA0KPiA+ICsJCQkJIHVpbnRwdHJfdCAqZGVzY19h ZGRycywNCj4gPiArCQkJCSB1aW50MTZfdCAqaWRzKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdnJp bmdfcGFja2VkX2Rlc2MgKmRlc2NzID0gdnEtPmRlc2NfcGFja2VkOw0KPiA+ICsJdWludDMyX3Qg ZGVzY3Nfc3RhdHVzOw0KPiA+ICsJdm9pZCAqZGVzY19hZGRyOw0KPiA+ICsJdWludDE2X3QgaTsN Cj4gPiArCXVpbnQ4X3QgY21wX2xvdywgY21wX2hpZ2gsIGNtcF9yZXN1bHQ7DQo+ID4gKwl1aW50 NjRfdCBsZW5zW1BBQ0tFRF9CQVRDSF9TSVpFXTsNCj4gPiArCXN0cnVjdCB2aXJ0aW9fbmV0X2hk ciAqaGRyOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseShhdmFpbF9pZHggJiBQQUNLRURfQkFU Q0hfTUFTSykpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCS8qIGxvYWQgNCBkZXNj cyAqLw0KPiA+ICsJZGVzY19hZGRyID0gJnZxLT5kZXNjX3BhY2tlZFthdmFpbF9pZHhdOw0KPiA+ ICsJX19tNTEyaSBkZXNjX3ZlYyA9IF9tbTUxMl9sb2FkdV9zaTUxMihkZXNjX2FkZHIpOw0KPiAN Cj4gVW5saWtlIHNwbGl0IHJpbmcsIHBhY2tlZCByaW5nIHNwZWNpZmljYXRpb24gZG9lcyBub3Qg bWFuZGF0ZSB0aGUgcmluZw0KPiBzaXplIHRvIGJlIGEgcG93ZXIgb2YgdHdvLiBTbyBjaGVja2lu ZyAgYXZhaWxfaWR4IGlzIGFsaWduZWQgb24gNjQgYnl0ZXMNCj4gaXMgbm90IGVub3VnaCBnaXZl biBhIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuDQo+IA0KPiBZb3UgbmVlZCB0byBhbHNvIGNoZWNr IGFnYWluc3QgcmluZyBzaXplIHRvIHByZXZlbnQgb3V0IG9mIGJvdW5kcw0KPiBhY2Nlc3Nlcy4N Cj4gDQo+IEkgc2VlIHRoZSBub24gdmVjdG9yaXplZCBiYXRjaCBwcm9jZXNzaW5nIHlvdSBpbnRy b2R1Y2VkIGluIHYxOS4xMSBhbHNvDQo+IGRvIHRoYXQgd3JvbmcgYXNzdW1wdGlvbi4gUGxlYXNl IGZpeCBpdC4NCj4gDQo+IEFsc28sIEkgd29uZGVyIHdoZXRoZXIgaXQgaXMgYXNzdW1lZCB0aGF0 ICZ2cS0+ZGVzY19wYWNrZWRbYXZhaWxfaWR4XTsNCj4gaXMgYWxpZ25lZCBvbiBhIGNhY2hlLWxp bmUuIE1lYW5pbmcsIGRvZXMgYmVsb3cgaW50cmluc2ljcyBoYXZlIHN1Y2ggYQ0KPiByZXF1aXJl bWVudD8NCj4gDQoNCkdvdCwgcGFja2VkIHJpbmcgc2l6ZSBtYXkgYXJiaXRyYXJ5IG51bWJlci4g SW4gdjE5LjExIGJhdGNoIGhhbmRsaW5nIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGNoZWNrZWQgYXZh aWxhYmxlIGluZGV4IG5vdCBvdmVyc2l6ZWQuIA0KSSBmb3Jnb3QgdGhhdCBpbiB2ZWN0b3JpemVk IHBhdGgsIHdpbGwgZml4IGl0IGluIG5leHQgcmVsZWFzZS4gDQoNCkluIHZlY3Rvcml6ZWQgcGF0 aCwgbG9hZGluZyBmdW5jdGlvbiBtbTUxMl9sb2FkdV9zaTUxMiBkbyBub3QgbmVlZCBjYWNoZS1h bGlnbmVkIG1lbW9yeS4gU28gbm8gc3BlY2lhbCByZXF1aXJlbWVudCBpcyBuZWVkZWQuIA0KDQo+ ID4gKwkvKiBidXJzdCBjaGVjayBmb3VyIHN0YXR1cyAqLw0KPiA+ICsJX19tNTEyaSBhdmFpbF9m bGFnX3ZlYzsNCj4gPiArCWlmICh2cS0+YXZhaWxfd3JhcF9jb3VudGVyKQ0KPiA+ICsjaWYgZGVm aW5lZChSVEVfQVJDSF9JNjg2KQ0KPiA+ICsJCWF2YWlsX2ZsYWdfdmVjID0gX21tNTEyX3NldDRf ZXBpNjQoUEFDS0VEX0FWQUlMX0ZMQUcsDQo+IDB4MCwNCj4gPiArCQkJCQlQQUNLRURfRkxBR1Nf TUFTSywgMHgwKTsNCj4gPiArI2Vsc2UNCj4gPiArCQlhdmFpbF9mbGFnX3ZlYyA9DQo+IF9tbTUx Ml9tYXNrel9zZXQxX2VwaTY0KERFU0NfRkxBR1NfUE9TLA0KPiA+ICsJCQkJCVBBQ0tFRF9BVkFJ TF9GTEFHKTsNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+ICsJZWxzZQ0KPiA+ICsjaWYgZGVmaW5l ZChSVEVfQVJDSF9JNjg2KQ0KPiA+ICsJCWF2YWlsX2ZsYWdfdmVjID0NCj4gX21tNTEyX3NldDRf ZXBpNjQoUEFDS0VEX0FWQUlMX0ZMQUdfV1JBUCwNCj4gPiArCQkJCQkweDAsIFBBQ0tFRF9BVkFJ TF9GTEFHX1dSQVAsDQo+IDB4MCk7DQo+ID4gKyNlbHNlDQo+ID4gKwkJYXZhaWxfZmxhZ192ZWMg PQ0KPiBfbW01MTJfbWFza3pfc2V0MV9lcGk2NChERVNDX0ZMQUdTX1BPUywNCj4gPiArCQkJCQlQ QUNLRURfQVZBSUxfRkxBR19XUkFQKTsNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsJZGVzY3Nf c3RhdHVzID0gX21tNTEyX2NtcF9lcHUxNl9tYXNrKGRlc2NfdmVjLCBhdmFpbF9mbGFnX3ZlYywN Cj4gPiArCQlfTU1fQ01QSU5UX05FKTsNCj4gPiArCWlmIChkZXNjc19zdGF0dXMgJiBCQVRDSF9G TEFHU19NQVNLKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlpZiAoZGV2LT5mZWF0 dXJlcyAmICgxVUxMIDw8IFZJUlRJT19GX0lPTU1VX1BMQVRGT1JNKSkgew0KPiA+ICsJCXZob3N0 X2Zvcl9lYWNoX3RyeV91bnJvbGwoaSwgMCwgUEFDS0VEX0JBVENIX1NJWkUpIHsNCj4gPiArCQkJ dWludDY0X3Qgc2l6ZSA9ICh1aW50NjRfdClkZXNjc1thdmFpbF9pZHggKyBpXS5sZW47DQo+ID4g KwkJCWRlc2NfYWRkcnNbaV0gPSBfX3Zob3N0X2lvdmFfdG9fdnZhKGRldiwgdnEsDQo+ID4gKwkJ CQlkZXNjc1thdmFpbF9pZHggKyBpXS5hZGRyLCAmc2l6ZSwNCj4gPiArCQkJCVZIT1NUX0FDQ0VT U19STyk7DQo+ID4gKw0KPiA+ICsJCQlpZiAoIWRlc2NfYWRkcnNbaV0pDQo+ID4gKwkJCQlnb3Rv IGZyZWVfYnVmOw0KPiA+ICsJCQlsZW5zW2ldID0gZGVzY3NbYXZhaWxfaWR4ICsgaV0ubGVuOw0K PiA+ICsJCQlydGVfcHJlZmV0Y2gwKCh2b2lkICopKHVpbnRwdHJfdClkZXNjX2FkZHJzW2ldKTsN Cj4gPiArDQo+ID4gKwkJCXBrdHNbaV0gPSB2aXJ0aW9fZGV2X3BrdG1idWZfYWxsb2MoZGV2LCBt YnVmX3Bvb2wsDQo+ID4gKwkJCQkJbGVuc1tpXSk7DQo+ID4gKwkJCWlmICghcGt0c1tpXSkNCj4g PiArCQkJCWdvdG8gZnJlZV9idWY7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQkv KiBjaGVjayBidWZmZXIgZml0IGludG8gb25lIHJlZ2lvbiAmIHRyYW5zbGF0ZSBhZGRyZXNzICov DQo+ID4gKwkJX19tNTEyaSByZWdpb25zX2xvd19hZGRycyA9DQo+ID4gKwkJCV9tbTUxMl9sb2Fk dV9zaTUxMigodm9pZCAqKSZkZXYtDQo+ID5yZWdpb25zX2xvd19hZGRycyk7DQo+ID4gKwkJX19t NTEyaSByZWdpb25zX2hpZ2hfYWRkcnMgPQ0KPiA+ICsJCQlfbW01MTJfbG9hZHVfc2k1MTIoKHZv aWQgKikmZGV2LQ0KPiA+cmVnaW9uc19oaWdoX2FkZHJzKTsNCj4gPiArCQl2aG9zdF9mb3JfZWFj aF90cnlfdW5yb2xsKGksIDAsIFBBQ0tFRF9CQVRDSF9TSVpFKSB7DQo+ID4gKwkJCXVpbnQ2NF90 IGFkZHJfbG93ID0gZGVzY3NbYXZhaWxfaWR4ICsgaV0uYWRkcjsNCj4gPiArCQkJdWludDY0X3Qg YWRkcl9oaWdoID0gYWRkcl9sb3cgKw0KPiA+ICsJCQkJCQlkZXNjc1thdmFpbF9pZHggKyBpXS5s ZW47DQo+ID4gKwkJCV9fbTUxMmkgbG93X2FkZHJfdmVjID0NCj4gX21tNTEyX3NldDFfZXBpNjQo YWRkcl9sb3cpOw0KPiA+ICsJCQlfX201MTJpIGhpZ2hfYWRkcl92ZWMgPQ0KPiBfbW01MTJfc2V0 MV9lcGk2NChhZGRyX2hpZ2gpOw0KPiA+ICsNCj4gPiArCQkJY21wX2xvdyA9DQo+IF9tbTUxMl9j bXBfZXBpNjRfbWFzayhsb3dfYWRkcl92ZWMsDQo+ID4gKwkJCQkJcmVnaW9uc19sb3dfYWRkcnMs DQo+IF9NTV9DTVBJTlRfTkxUKTsNCj4gPiArCQkJY21wX2hpZ2ggPQ0KPiBfbW01MTJfY21wX2Vw aTY0X21hc2soaGlnaF9hZGRyX3ZlYywNCj4gPiArCQkJCQlyZWdpb25zX2hpZ2hfYWRkcnMsDQo+ IF9NTV9DTVBJTlRfTFQpOw0KPiA+ICsJCQljbXBfcmVzdWx0ID0gY21wX2xvdyAmIGNtcF9oaWdo Ow0KPiA+ICsJCQlpbnQgaW5kZXggPSBfX2J1aWx0aW5fY3R6KGNtcF9yZXN1bHQpOw0KPiA+ICsJ CQlpZiAodW5saWtlbHkoKHVpbnQzMl90KWluZGV4ID49IGRldi0+bWVtLT5ucmVnaW9ucykpDQo+ ID4gKwkJCQlnb3RvIGZyZWVfYnVmOw0KPiA+ICsNCj4gPiArCQkJZGVzY19hZGRyc1tpXSA9IGFk ZHJfbG93ICsNCj4gPiArCQkJCWRldi0+bWVtLT5yZWdpb25zW2luZGV4XS5ob3N0X3VzZXJfYWRk ciAtDQo+ID4gKwkJCQlkZXYtPm1lbS0+cmVnaW9uc1tpbmRleF0uZ3Vlc3RfcGh5c19hZGRyOw0K PiA+ICsJCQlsZW5zW2ldID0gZGVzY3NbYXZhaWxfaWR4ICsgaV0ubGVuOw0KPiA+ICsJCQlydGVf cHJlZmV0Y2gwKCh2b2lkICopKHVpbnRwdHJfdClkZXNjX2FkZHJzW2ldKTsNCj4gPiArDQo+ID4g KwkJCXBrdHNbaV0gPSB2aXJ0aW9fZGV2X3BrdG1idWZfYWxsb2MoZGV2LCBtYnVmX3Bvb2wsDQo+ ID4gKwkJCQkJbGVuc1tpXSk7DQo+ID4gKwkJCWlmICghcGt0c1tpXSkNCj4gPiArCQkJCWdvdG8g ZnJlZV9idWY7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICh2aXJ0aW9fbmV0 X3dpdGhfaG9zdF9vZmZsb2FkKGRldikpIHsNCj4gPiArCQl2aG9zdF9mb3JfZWFjaF90cnlfdW5y b2xsKGksIDAsIFBBQ0tFRF9CQVRDSF9TSVpFKSB7DQo+ID4gKwkJCWhkciA9IChzdHJ1Y3Qgdmly dGlvX25ldF9oZHIgKikoZGVzY19hZGRyc1tpXSk7DQo+ID4gKwkJCXZob3N0X2RlcXVldWVfb2Zm bG9hZChoZHIsIHBrdHNbaV0pOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAo dW5saWtlbHkodmlydGlvX25ldF9pc19pbm9yZGVyKGRldikpKSB7DQo+ID4gKwkJaWRzW1BBQ0tF RF9CQVRDSF9TSVpFIC0gMV0gPQ0KPiA+ICsJCQlkZXNjc1thdmFpbF9pZHggKyBQQUNLRURfQkFU Q0hfU0laRSAtIDFdLmlkOw0KPiANCj4gSXNuJ3QgaW4tb3JkZXIgYSBsaWtlbHkgY2FzZT8gTWF5 YmUganVzdCByZW1vdmUgdGhlIHVubGlrZWx5Lg0KPiANCkluX29yZGVyIG9wdGlvbiBpcyBkZXBl bmRlZCBvbiBmZWF0dXJlIG5lZ290aWF0aW9uICwgd2lsbCByZW1vdmUgdW5saWtlbHkuIA0KDQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXZob3N0X2Zvcl9lYWNoX3RyeV91bnJvbGwoaSwgMCwgUEFD S0VEX0JBVENIX1NJWkUpDQo+ID4gKwkJCWlkc1tpXSA9IGRlc2NzW2F2YWlsX2lkeCArIGldLmlk Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXVpbnQ2NF90IGFkZHJzW1BBQ0tFRF9CQVRDSF9TSVpF IDw8IDFdOw0KPiA+ICsJLyogc3RvcmUgbWJ1ZiBkYXRhX2xlbiwgcGt0X2xlbiAqLw0KPiA+ICsJ dmhvc3RfZm9yX2VhY2hfdHJ5X3Vucm9sbChpLCAwLCBQQUNLRURfQkFUQ0hfU0laRSkgew0KPiA+ ICsJCWFkZHJzW2kgPDwgMV0gPSAodWludDY0X3QpcGt0c1tpXS0+cnhfZGVzY3JpcHRvcl9maWVs ZHMxOw0KPiA+ICsJCWFkZHJzWyhpIDw8IDEpICsgMV0gPSAodWludDY0X3QpcGt0c1tpXS0+cnhf ZGVzY3JpcHRvcl9maWVsZHMxDQo+ID4gKwkJCQkJKyBzaXplb2YodWludDY0X3QpOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCS8qIHNhdmUgcGt0X2xlbiBhbmQgZGF0YV9sZW4gaW50byBtYnVmcyAq Lw0KPiA+ICsJX19tNTEyaSB2YWx1ZV92ZWMgPQ0KPiBfbW01MTJfbWFza3pfc2h1ZmZsZV9lcGkz MihNQlVGX0xFTlNfUE9TLCBkZXNjX3ZlYywNCj4gPiArCQkJCQkweEFBKTsNCj4gPiArCV9fbTUx Mmkgb2Zmc2V0c192ZWMgPSBfbW01MTJfbWFza3pfc2V0MV9lcGkzMihNQlVGX0xFTlNfUE9TLA0K PiA+ICsJCQkJCSh1aW50MzJfdCktMTIpOw0KPiA+ICsJdmFsdWVfdmVjID0gX21tNTEyX2FkZF9l cGkzMih2YWx1ZV92ZWMsIG9mZnNldHNfdmVjKTsNCj4gPiArCV9fbTUxMmkgdmluZGV4ID0gX21t NTEyX2xvYWR1X3NpNTEyKCh2b2lkICopYWRkcnMpOw0KPiA+ICsJX21tNTEyX2k2NHNjYXR0ZXJf ZXBpNjQoMCwgdmluZGV4LCB2YWx1ZV92ZWMsIDEpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICtmcmVlX2J1ZjoNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBQQUNLRURfQkFUQ0hfU0laRTsg aSsrKQ0KPiA+ICsJCXJ0ZV9wa3RtYnVmX2ZyZWUocGt0c1tpXSk7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIC0xOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfdmhvc3QvdmlydGlv X25ldC5jIGIvbGliL2xpYnJ0ZV92aG9zdC92aXJ0aW9fbmV0LmMNCj4gPiBpbmRleCA2MTA3NjYy Njg1Li5lNGQyZTJlN2Q2IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3QvdmlydGlv X25ldC5jDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV92aG9zdC92aXJ0aW9fbmV0LmMNCj4gPiBAQCAt MjI0OSw2ICsyMjQ5LDI4IEBAIHZob3N0X3Jlc2VydmVfYXZhaWxfYmF0Y2hfcGFja2VkKHN0cnVj dA0KPiB2aXJ0aW9fbmV0ICpkZXYsDQo+ID4gIAlyZXR1cm4gLTE7DQo+ID4gIH0NCj4gPg0KPiA+ ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQNCj4gPiArdmhvc3RfaGFuZGxlX2F2YWls X2JhdGNoX3BhY2tlZChzdHJ1Y3QgdmlydGlvX25ldCAqZGV2LA0KPiA+ICsJCQkJIHN0cnVjdCB2 aG9zdF92aXJ0cXVldWUgKnZxLA0KPiA+ICsJCQkJIHN0cnVjdCBydGVfbWVtcG9vbCAqbWJ1Zl9w b29sLA0KPiA+ICsJCQkJIHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsDQo+ID4gKwkJCQkgdWludDE2 X3QgYXZhaWxfaWR4LA0KPiA+ICsJCQkJIHVpbnRwdHJfdCAqZGVzY19hZGRycywNCj4gPiArCQkJ CSB1aW50MTZfdCAqaWRzKQ0KPiA+ICt7DQo+ID4gKwlpZiAodW5saWtlbHkoZGV2LT52ZWN0b3Jp emVkKSkNCj4gPiArI2lmZGVmIENDX0FWWDUxMl9TVVBQT1JUDQo+ID4gKwkJcmV0dXJuIHZob3N0 X3Jlc2VydmVfYXZhaWxfYmF0Y2hfcGFja2VkX2F2eChkZXYsIHZxLA0KPiBtYnVmX3Bvb2wsDQo+ ID4gKwkJCQlwa3RzLCBhdmFpbF9pZHgsIGRlc2NfYWRkcnMsIGlkcyk7DQo+ID4gKyNlbHNlDQo+ ID4gKwkJcmV0dXJuIHZob3N0X3Jlc2VydmVfYXZhaWxfYmF0Y2hfcGFja2VkKGRldiwgdnEsDQo+ IG1idWZfcG9vbCwNCj4gPiArCQkJCXBrdHMsIGF2YWlsX2lkeCwgZGVzY19hZGRycywgaWRzKTsN Cj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+ICsJcmV0dXJuIHZob3N0X3Jlc2VydmVfYXZhaWxfYmF0 Y2hfcGFja2VkKGRldiwgdnEsIG1idWZfcG9vbCwgcGt0cywNCj4gPiArCQkJYXZhaWxfaWR4LCBk ZXNjX2FkZHJzLCBpZHMpOw0KPiA+ICt9DQo+IA0KPiANCj4gSXQgc2hvdWxkIGJlIGFzIGJlbG93 IHRvIG5vdCBoYXZlIGFueSBwZXJmb3JtYW5jZSBpbXBhY3Qgd2hlbg0KPiBDQ19BVlg1MTJfU1VQ UE9SVCBpcyBub3Qgc2V0Og0KPiANCj4gI2lmZGVmIENDX0FWWDUxMl9TVVBQT1JUDQo+IAlpZiAo dW5saWtlbHkoZGV2LT52ZWN0b3JpemVkKSkNCj4gCQlyZXR1cm4gdmhvc3RfcmVzZXJ2ZV9hdmFp bF9iYXRjaF9wYWNrZWRfYXZ4KGRldiwgdnEsDQo+IG1idWZfcG9vbCwNCj4gCQkJcGt0cywgYXZh aWxfaWR4LCBkZXNjX2FkZHJzLCBpZHMpOw0KPiAjZWxzZQ0KPiAJcmV0dXJuIHZob3N0X3Jlc2Vy dmVfYXZhaWxfYmF0Y2hfcGFja2VkKGRldiwgdnEsIG1idWZfcG9vbCwgcGt0cywNCj4gCQlhdmFp bF9pZHgsIGRlc2NfYWRkcnMsIGlkcyk7DQo+ICNlbmRpZg0KDQpHb3QsIHdpbGwgY2hhbmdlIGlu IG5leHQgcmVsZWFzZS4gDQoNCj4gPiArDQo+ID4gIHN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5l IGludA0KPiA+ICB2aXJ0aW9fZGV2X3R4X2JhdGNoX3BhY2tlZChzdHJ1Y3QgdmlydGlvX25ldCAq ZGV2LA0KPiA+ICAJCQkgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPiBAQCAtMjI2 MSw4ICsyMjgzLDkgQEAgdmlydGlvX2Rldl90eF9iYXRjaF9wYWNrZWQoc3RydWN0IHZpcnRpb19u ZXQNCj4gKmRldiwNCj4gPiAgCXVpbnQxNl90IGlkc1tQQUNLRURfQkFUQ0hfU0laRV07DQo+ID4g IAl1aW50MTZfdCBpOw0KPiA+DQo+ID4gLQlpZiAodmhvc3RfcmVzZXJ2ZV9hdmFpbF9iYXRjaF9w YWNrZWQoZGV2LCB2cSwgbWJ1Zl9wb29sLCBwa3RzLA0KPiA+IC0JCQkJCSAgICAgYXZhaWxfaWR4 LCBkZXNjX2FkZHJzLCBpZHMpKQ0KPiA+ICsNCj4gPiArCWlmICh2aG9zdF9oYW5kbGVfYXZhaWxf YmF0Y2hfcGFja2VkKGRldiwgdnEsIG1idWZfcG9vbCwgcGt0cywNCj4gPiArCQlhdmFpbF9pZHgs IGRlc2NfYWRkcnMsIGlkcykpDQo+ID4gIAkJcmV0dXJuIC0xOw0KPiA+DQo+ID4gIAl2aG9zdF9m b3JfZWFjaF90cnlfdW5yb2xsKGksIDAsIFBBQ0tFRF9CQVRDSF9TSVpFKQ0KPiA+DQoNCg==