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 17993A04B7; Mon, 21 Sep 2020 08:27:03 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4592D1D951; Mon, 21 Sep 2020 08:27:02 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id D2B051D93F for ; Mon, 21 Sep 2020 08:26:59 +0200 (CEST) IronPort-SDR: qpHtr6N0RhnCP1L/HGWoXoUR4QS5CSpDBmZkwRMBfcK6oqBr/JiKiUpl2qaH6Clfcoq1qy7v+U QvPcL9Lp3IUQ== X-IronPort-AV: E=McAfee;i="6000,8403,9750"; a="159615385" X-IronPort-AV: E=Sophos;i="5.77,285,1596524400"; d="scan'208";a="159615385" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Sep 2020 23:26:57 -0700 IronPort-SDR: OhiVVY8WpQpeK9Zam92KkifOe3ooagajmFuqDat8MaOQWMbkHQsayJDqRGHpNP+H12hijxzc2T 1F1xGQNW4N3A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,285,1596524400"; d="scan'208";a="289783797" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga007.fm.intel.com with ESMTP; 20 Sep 2020 23:26:57 -0700 Received: from shsmsx603.ccr.corp.intel.com (10.109.6.143) 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; Sun, 20 Sep 2020 23:26:57 -0700 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX603.ccr.corp.intel.com (10.109.6.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 21 Sep 2020 14:26:55 +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; Mon, 21 Sep 2020 14:26:55 +0800 From: "Liu, Yong" To: Maxime Coquelin , "Xia, Chenbo" , "Wang, Zhihong" CC: "dev@dpdk.org" Thread-Topic: [PATCH v1 4/5] vhost: add packed ring vectorized dequeue Thread-Index: AQHWddiCQDM+UfYsh0OKK8LHgVgsKaluEfUAgAS8KVA= Date: Mon, 21 Sep 2020 06:26:55 +0000 Message-ID: References: <20200819032414.51430-1-yong.liu@intel.com> <20200819032414.51430-5-yong.liu@intel.com> <0605c461-d96a-0996-8dc4-b9097cdea9e6@redhat.com> In-Reply-To: <0605c461-d96a-0996-8dc4-b9097cdea9e6@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.239.127.36] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v1 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 IDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIg MTgsIDIwMjAgOTo0NSBQTQ0KPiBUbzogTGl1LCBZb25nIDx5b25nLmxpdUBpbnRlbC5jb20+OyBY aWEsIENoZW5ibyA8Y2hlbmJvLnhpYUBpbnRlbC5jb20+Ow0KPiBXYW5nLCBaaGlob25nIDx6aGlo b25nLndhbmdAaW50ZWwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnDQo+IFN1YmplY3Q6IFJlOiBb UEFUQ0ggdjEgNC81XSB2aG9zdDogYWRkIHBhY2tlZCByaW5nIHZlY3Rvcml6ZWQgZGVxdWV1ZQ0K PiANCj4gDQo+IA0KPiBPbiA4LzE5LzIwIDU6MjQgQU0sIE1hcnZpbiBMaXUgd3JvdGU6DQo+ID4g T3B0aW1pemUgdmhvc3QgcGFja2VkIHJpbmcgZGVxdWV1ZSBwYXRoIHdpdGggU0lNRCBpbnN0cnVj dGlvbnMuIEZvdXINCj4gPiBkZXNjcmlwdG9ycyBzdGF0dXMgY2hlY2sgYW5kIHdyaXRlYmFjayBh cmUgYmF0Y2hlZCBoYW5kbGVkIHdpdGggQVZYNTEyDQo+ID4gaW5zdHJ1Y3Rpb25zLiBBZGRyZXNz IHRyYW5zbGF0aW9uIG9wZXJhdGlvbnMgYXJlIGFsc28gYWNjZWxlcmF0ZWQgYnkNCj4gPiBBVlg1 MTIgaW5zdHJ1Y3Rpb25zLg0KPiA+DQo+ID4gSWYgcGxhdGZvcm0gb3IgY29tcGlsZXIgbm90IHN1 cHBvcnQgdmVjdG9yaXphdGlvbiwgd2lsbCBmYWxsYmFjayB0bw0KPiA+IGRlZmF1bHQgcGF0aC4N Cj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IE1hcnZpbiBMaXUgPHlvbmcubGl1QGludGVsLmNvbT4N Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3Zob3N0L01ha2VmaWxlIGIvbGliL2xp YnJ0ZV92aG9zdC9NYWtlZmlsZQ0KPiA+IGluZGV4IDRmMmYzZTQ3ZGEuLmMwY2Q3ZDQ5OGYgMTAw NjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV92aG9zdC9NYWtlZmlsZQ0KPiA+ICsrKyBiL2xpYi9s aWJydGVfdmhvc3QvTWFrZWZpbGUNCj4gPiBAQCAtMzEsNiArMzEsMTMgQEAgQ0ZMQUdTICs9IC1E VkhPU1RfSUNDX1VOUk9MTF9QUkFHTUENCj4gPiAgZW5kaWYNCj4gPiAgZW5kaWYNCj4gPg0KPiA+ ICtpZm5lcSAoJChGT1JDRV9ESVNBQkxFX0FWWDUxMiksIHkpDQo+ID4gKyAgICAgICAgQ0NfQVZY NTEyX1NVUFBPUlQ9XA0KPiA+ICsgICAgICAgICQoc2hlbGwgJChDQykgLW1hcmNoPW5hdGl2ZSAt ZE0gLUUgLSA8L2Rldi9udWxsIDI+JjEgfCBcDQo+ID4gKyAgICAgICAgc2VkICcvLi97SDskJCFk fSA7IHggOyAvQVZYNTEyRi8hZDsgL0FWWDUxMkJXLyFkOyAvQVZYNTEyVkwvIWQnIHwgXA0KPiA+ ICsgICAgICAgIGdyZXAgLXEgQVZYNTEyICYmIGVjaG8gMSkNCj4gPiArZW5kaWYNCj4gPiArDQo+ ID4gIGlmZXEgKCQoQ09ORklHX1JURV9MSUJSVEVfVkhPU1RfTlVNQSkseSkNCj4gPiAgTERMSUJT ICs9IC1sbnVtYQ0KPiA+ICBlbmRpZg0KPiA+IEBAIC00MCw2ICs0NywxMiBAQCBMRExJQlMgKz0g LWxydGVfZWFsIC1scnRlX21lbXBvb2wgLWxydGVfbWJ1ZiAtDQo+IGxydGVfZXRoZGV2IC1scnRl X25ldA0KPiA+ICBTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfVkhPU1QpIDo9IGZkX21hbi5jIGlv dGxiLmMgc29ja2V0LmMgdmhvc3QuYyBcDQo+ID4gIAkJCQkJdmhvc3RfdXNlci5jIHZpcnRpb19u ZXQuYyB2ZHBhLmMNCj4gPg0KPiA+ICtpZmVxICgkKENDX0FWWDUxMl9TVVBQT1JUKSwgMSkNCj4g PiArQ0ZMQUdTICs9IC1EQ0NfQVZYNTEyX1NVUFBPUlQNCj4gPiArU1JDUy0kKENPTkZJR19SVEVf TElCUlRFX1ZIT1NUKSArPSB2aG9zdF92ZWNfYXZ4LmMNCj4gPiArQ0ZMQUdTX3Zob3N0X3ZlY19h dngubyArPSAtbWF2eDUxMmYgLW1hdng1MTJidyAtbWF2eDUxMnZsDQo+ID4gK2VuZGlmDQo+ID4g Kw0KPiA+ICAjIGluc3RhbGwgaW5jbHVkZXMNCj4gPiAgU1lNTElOSy0kKENPTkZJR19SVEVfTElC UlRFX1ZIT1NUKS1pbmNsdWRlICs9IHJ0ZV92aG9zdC5oDQo+IHJ0ZV92ZHBhLmggXA0KPiA+ICAJ CQkJCQlydGVfdmRwYV9kZXYuaA0KPiBydGVfdmhvc3RfYXN5bmMuaA0KPiA+IGRpZmYgLS1naXQg YS9saWIvbGlicnRlX3Zob3N0L21lc29uLmJ1aWxkIGIvbGliL2xpYnJ0ZV92aG9zdC9tZXNvbi5i dWlsZA0KPiA+IGluZGV4IGNjOWFhNjVjNjcuLmMxNDgxODAyZDcgMTAwNjQ0DQo+ID4gLS0tIGEv bGliL2xpYnJ0ZV92aG9zdC9tZXNvbi5idWlsZA0KPiA+ICsrKyBiL2xpYi9saWJydGVfdmhvc3Qv bWVzb24uYnVpbGQNCj4gPiBAQCAtOCw2ICs4LDIyIEBAIGVuZGlmDQo+ID4gIGlmIGhhc19saWJu dW1hID09IDENCj4gPiAgCWRwZGtfY29uZi5zZXQxMCgnUlRFX0xJQlJURV9WSE9TVF9OVU1BJywg dHJ1ZSkNCj4gPiAgZW5kaWYNCj4gPiArDQo+ID4gK2lmIGFyY2hfc3ViZGlyID09ICd4ODYnDQo+ ID4gKyAgICAgICAgaWYgbm90IG1hY2hpbmVfYXJncy5jb250YWlucygnLW1uby1hdng1MTJmJykN Cj4gPiArICAgICAgICAgICAgICAgIGlmIGNjLmhhc19hcmd1bWVudCgnLW1hdng1MTJmJykgYW5k IGNjLmhhc19hcmd1bWVudCgnLQ0KPiBtYXZ4NTEydmwnKSBhbmQgY2MuaGFzX2FyZ3VtZW50KCct bWF2eDUxMmJ3JykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgY2ZsYWdzICs9IFsnLURD Q19BVlg1MTJfU1VQUE9SVCddDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHZob3N0X2F2 eDUxMl9saWIgPSBzdGF0aWNfbGlicmFyeSgndmhvc3RfYXZ4NTEyX2xpYicsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmhvc3RfdmVjX2F2eC5j JywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl cGVuZGVuY2llczogW3N0YXRpY19ydGVfZWFsLA0KPiBzdGF0aWNfcnRlX21lbXBvb2wsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj X3J0ZV9tYnVmLCBzdGF0aWNfcnRlX2V0aGRldiwNCj4gc3RhdGljX3J0ZV9uZXRdLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJl Y3RvcmllczogaW5jbHVkZXMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjX2FyZ3M6IFtjZmxhZ3MsICctbWF2eDUxMmYnLCAnLW1hdng1MTJidycs ICctDQo+IG1hdng1MTJ2bCddKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBvYmpzICs9 IHZob3N0X2F2eDUxMl9saWIuZXh0cmFjdF9vYmplY3RzKCd2aG9zdF92ZWNfYXZ4LmMnKQ0KPiA+ ICsgICAgICAgICAgICAgICAgZW5kaWYNCj4gPiArICAgICAgICBlbmRpZg0KPiA+ICtlbmRpZg0K PiA+ICsNCj4gPiAgaWYgKHRvb2xjaGFpbiA9PSAnZ2NjJyBhbmQgY2MudmVyc2lvbigpLnZlcnNp b25fY29tcGFyZSgnPj04LjMuMCcpKQ0KPiA+ICAJY2ZsYWdzICs9ICctRFZIT1NUX0dDQ19VTlJP TExfUFJBR01BJw0KPiA+ICBlbGlmICh0b29sY2hhaW4gPT0gJ2NsYW5nJyBhbmQgY2MudmVyc2lv bigpLnZlcnNpb25fY29tcGFyZSgnPj0zLjcuMCcpKQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3Zob3N0L3Zob3N0LmggYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0LmgNCj4gPiBpbmRleCA0 YTgxZjE4ZjAxLi5mYzdkYWYyMTQ1IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qv dmhvc3QuaA0KPiA+ICsrKyBiL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuaA0KPiA+IEBAIC0xMTI0 LDQgKzExMjQsMTIgQEAgdmlydGlvX2Rldl9wa3RtYnVmX2FsbG9jKHN0cnVjdCB2aXJ0aW9fbmV0 DQo+ICpkZXYsIHN0cnVjdCBydGVfbWVtcG9vbCAqbXAsDQo+ID4gIAlyZXR1cm4gTlVMTDsNCj4g PiAgfQ0KPiA+DQo+ID4gK2ludA0KPiA+ICt2aG9zdF9yZXNlcnZlX2F2YWlsX2JhdGNoX3BhY2tl ZF9hdngoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gPiArCQkJCSBzdHJ1Y3Qgdmhvc3Rfdmly dHF1ZXVlICp2cSwNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX21lbXBvb2wgKm1idWZfcG9vbCwNCj4g PiArCQkJCSBzdHJ1Y3QgcnRlX21idWYgKipwa3RzLA0KPiA+ICsJCQkJIHVpbnQxNl90IGF2YWls X2lkeCwNCj4gPiArCQkJCSB1aW50cHRyX3QgKmRlc2NfYWRkcnMsDQo+ID4gKwkJCQkgdWludDE2 X3QgKmlkcyk7DQo+ID4gICNlbmRpZiAvKiBfVkhPU1RfTkVUX0NERVZfSF8gKi8NCj4gPiBkaWZm IC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF92ZWNfYXZ4LmMNCj4gYi9saWIvbGlicnRl X3Zob3N0L3Zob3N0X3ZlY19hdnguYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMC4uZTgzNjFkMThmYQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9s aWIvbGlicnRlX3Zob3N0L3Zob3N0X3ZlY19hdnguYw0KPiA+IEBAIC0wLDAgKzEsMTUyIEBADQo+ ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPiArICogQ29w eXJpZ2h0KGMpIDIwMTAtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+ICsgKi8NCj4gPiArI2lu Y2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInZob3N0LmgiDQo+ID4gKw0K PiA+ICsjZGVmaW5lIEJZVEVfU0laRSA4DQo+ID4gKy8qIHJlZmVyZW5jZSBjb3VudCBvZmZzZXQg aW4gbWJ1ZiByZWFybSBkYXRhICovDQo+ID4gKyNkZWZpbmUgUkVGQ05UX0JJVFNfT0ZGU0VUICgo b2Zmc2V0b2Yoc3RydWN0IHJ0ZV9tYnVmLCByZWZjbnQpIC0gXA0KPiA+ICsJb2Zmc2V0b2Yoc3Ry dWN0IHJ0ZV9tYnVmLCByZWFybV9kYXRhKSkgKiBCWVRFX1NJWkUpDQo+ID4gKy8qIHNlZ21lbnQg bnVtYmVyIG9mZnNldCBpbiBtYnVmIHJlYXJtIGRhdGEgKi8NCj4gPiArI2RlZmluZSBTRUdfTlVN X0JJVFNfT0ZGU0VUICgob2Zmc2V0b2Yoc3RydWN0IHJ0ZV9tYnVmLCBuYl9zZWdzKSAtIFwNCj4g PiArCW9mZnNldG9mKHN0cnVjdCBydGVfbWJ1ZiwgcmVhcm1fZGF0YSkpICogQllURV9TSVpFKQ0K PiA+ICsNCj4gPiArLyogZGVmYXVsdCByZWFybSBkYXRhICovDQo+ID4gKyNkZWZpbmUgREVGQVVM VF9SRUFSTV9EQVRBICgxVUxMIDw8IFNFR19OVU1fQklUU19PRkZTRVQgfCBcDQo+ID4gKwkxVUxM IDw8IFJFRkNOVF9CSVRTX09GRlNFVCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgREVTQ19GTEFHU19T SE9SVF9PRkZTRVQgKG9mZnNldG9mKHN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYywNCj4gZmxhZ3Mp IC8gXA0KPiA+ICsJc2l6ZW9mKHVpbnQxNl90KSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgREVTQ19G TEFHU19TSE9SVF9TSVpFIChzaXplb2Yoc3RydWN0IHZyaW5nX3BhY2tlZF9kZXNjKSAvIFwNCj4g PiArCXNpemVvZih1aW50MTZfdCkpDQo+ID4gKyNkZWZpbmUgQkFUQ0hfRkxBR1NfTUFTSyAoMSA8 PCBERVNDX0ZMQUdTX1NIT1JUX09GRlNFVCB8IFwNCj4gPiArCTEgPDwgKERFU0NfRkxBR1NfU0hP UlRfT0ZGU0VUICsgREVTQ19GTEFHU19TSE9SVF9TSVpFKSB8IFwNCj4gPiArCTEgPDwgKERFU0Nf RkxBR1NfU0hPUlRfT0ZGU0VUICsgREVTQ19GTEFHU19TSE9SVF9TSVpFICogMikgIHwNCj4gXA0K PiA+ICsJMSA8PCAoREVTQ19GTEFHU19TSE9SVF9PRkZTRVQgKyBERVNDX0ZMQUdTX1NIT1JUX1NJ WkUgKiAzKSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRkxBR1NfQklUU19PRkZTRVQgKChvZmZzZXRv ZihzdHJ1Y3QgdnJpbmdfcGFja2VkX2Rlc2MsIGZsYWdzKSAtIFwNCj4gPiArCW9mZnNldG9mKHN0 cnVjdCB2cmluZ19wYWNrZWRfZGVzYywgbGVuKSkgKiBCWVRFX1NJWkUpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBBQ0tFRF9GTEFHU19NQVNLICgoMFVMTCB8IFZSSU5HX0RFU0NfRl9BVkFJTCB8DQo+ IFZSSU5HX0RFU0NfRl9VU0VEKSBcDQo+ID4gKwk8PCBGTEFHU19CSVRTX09GRlNFVCkNCj4gPiAr I2RlZmluZSBQQUNLRURfQVZBSUxfRkxBRyAoKDBVTEwgfCBWUklOR19ERVNDX0ZfQVZBSUwpIDw8 DQo+IEZMQUdTX0JJVFNfT0ZGU0VUKQ0KPiA+ICsjZGVmaW5lIFBBQ0tFRF9BVkFJTF9GTEFHX1dS QVAgKCgwVUxMIHwgVlJJTkdfREVTQ19GX1VTRUQpIDw8IFwNCj4gPiArCUZMQUdTX0JJVFNfT0ZG U0VUKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBERVNDX0ZMQUdTX1BPUyAweGFhDQo+ID4gKyNkZWZp bmUgTUJVRl9MRU5TX1BPUyAweDY2NjYNCj4gPiArDQo+ID4gK2ludA0KPiA+ICt2aG9zdF9yZXNl cnZlX2F2YWlsX2JhdGNoX3BhY2tlZF9hdngoc3RydWN0IHZpcnRpb19uZXQgKmRldiwNCj4gPiAr CQkJCSBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX21l bXBvb2wgKm1idWZfcG9vbCwNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX21idWYgKipwa3RzLA0KPiA+ ICsJCQkJIHVpbnQxNl90IGF2YWlsX2lkeCwNCj4gPiArCQkJCSB1aW50cHRyX3QgKmRlc2NfYWRk cnMsDQo+ID4gKwkJCQkgdWludDE2X3QgKmlkcykNCj4gPiArew0KPiA+ICsJc3RydWN0IHZyaW5n X3BhY2tlZF9kZXNjICpkZXNjcyA9IHZxLT5kZXNjX3BhY2tlZDsNCj4gPiArCXVpbnQzMl90IGRl c2NzX3N0YXR1czsNCj4gPiArCXZvaWQgKmRlc2NfYWRkcjsNCj4gPiArCXVpbnQxNl90IGk7DQo+ ID4gKwl1aW50OF90IGNtcF9sb3csIGNtcF9oaWdoLCBjbXBfcmVzdWx0Ow0KPiA+ICsJdWludDY0 X3QgbGVuc1tQQUNLRURfQkFUQ0hfU0laRV07DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KGF2 YWlsX2lkeCAmIFBBQ0tFRF9CQVRDSF9NQVNLKSkNCj4gPiArCQlyZXR1cm4gLTE7DQo+ID4gKw0K PiA+ICsJLyogbG9hZCA0IGRlc2NzICovDQo+ID4gKwlkZXNjX2FkZHIgPSAmdnEtPmRlc2NfcGFj a2VkW2F2YWlsX2lkeF07DQo+ID4gKwlfX201MTJpIGRlc2NfdmVjID0gX21tNTEyX2xvYWR1X3Np NTEyKGRlc2NfYWRkcik7DQo+ID4gKw0KPiA+ICsJLyogYnVyc3QgY2hlY2sgZm91ciBzdGF0dXMg Ki8NCj4gPiArCV9fbTUxMmkgYXZhaWxfZmxhZ192ZWM7DQo+ID4gKwlpZiAodnEtPmF2YWlsX3dy YXBfY291bnRlcikNCj4gPiArI2lmIGRlZmluZWQoUlRFX0FSQ0hfSTY4NikNCj4gPiArCQlhdmFp bF9mbGFnX3ZlYyA9IF9tbTUxMl9zZXQ0X2VwaTY0KFBBQ0tFRF9BVkFJTF9GTEFHLA0KPiAweDAs DQo+ID4gKwkJCQkJUEFDS0VEX0ZMQUdTX01BU0ssIDB4MCk7DQo+ID4gKyNlbHNlDQo+ID4gKwkJ YXZhaWxfZmxhZ192ZWMgPQ0KPiBfbW01MTJfbWFza3pfc2V0MV9lcGk2NChERVNDX0ZMQUdTX1BP UywNCj4gPiArCQkJCQlQQUNLRURfQVZBSUxfRkxBRyk7DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4g PiArCWVsc2UNCj4gPiArI2lmIGRlZmluZWQoUlRFX0FSQ0hfSTY4NikNCj4gPiArCQlhdmFpbF9m bGFnX3ZlYyA9DQo+IF9tbTUxMl9zZXQ0X2VwaTY0KFBBQ0tFRF9BVkFJTF9GTEFHX1dSQVAsDQo+ ID4gKwkJCQkJMHgwLCBQQUNLRURfQVZBSUxfRkxBR19XUkFQLA0KPiAweDApOw0KPiA+ICsjZWxz ZQ0KPiA+ICsJCWF2YWlsX2ZsYWdfdmVjID0NCj4gX21tNTEyX21hc2t6X3NldDFfZXBpNjQoREVT Q19GTEFHU19QT1MsDQo+ID4gKwkJCQkJUEFDS0VEX0FWQUlMX0ZMQUdfV1JBUCk7DQo+ID4gKyNl bmRpZg0KPiA+ICsNCj4gPiArCWRlc2NzX3N0YXR1cyA9IF9tbTUxMl9jbXBfZXB1MTZfbWFzayhk ZXNjX3ZlYywgYXZhaWxfZmxhZ192ZWMsDQo+ID4gKwkJX01NX0NNUElOVF9ORSk7DQo+ID4gKwlp ZiAoZGVzY3Nfc3RhdHVzICYgQkFUQ0hfRkxBR1NfTUFTSykNCj4gPiArCQlyZXR1cm4gLTE7DQo+ ID4gKw0KPiA+ICsJLyogY2hlY2sgYnVmZmVyIGZpdCBpbnRvIG9uZSByZWdpb24gJiB0cmFuc2xh dGUgYWRkcmVzcyAqLw0KPiA+ICsJX19tNTEyaSByZWdpb25zX2xvd19hZGRycyA9DQo+ID4gKwkJ X21tNTEyX2xvYWR1X3NpNTEyKCh2b2lkICopJmRldi0+cmVnaW9uc19sb3dfYWRkcnMpOw0KPiA+ ICsJX19tNTEyaSByZWdpb25zX2hpZ2hfYWRkcnMgPQ0KPiA+ICsJCV9tbTUxMl9sb2FkdV9zaTUx Migodm9pZCAqKSZkZXYtPnJlZ2lvbnNfaGlnaF9hZGRycyk7DQo+ID4gKwl2aG9zdF9mb3JfZWFj aF90cnlfdW5yb2xsKGksIDAsIFBBQ0tFRF9CQVRDSF9TSVpFKSB7DQo+ID4gKwkJdWludDY0X3Qg YWRkcl9sb3cgPSBkZXNjc1thdmFpbF9pZHggKyBpXS5hZGRyOw0KPiA+ICsJCXVpbnQ2NF90IGFk ZHJfaGlnaCA9IGFkZHJfbG93ICsgZGVzY3NbYXZhaWxfaWR4ICsgaV0ubGVuOw0KPiA+ICsJCV9f bTUxMmkgbG93X2FkZHJfdmVjID0gX21tNTEyX3NldDFfZXBpNjQoYWRkcl9sb3cpOw0KPiA+ICsJ CV9fbTUxMmkgaGlnaF9hZGRyX3ZlYyA9IF9tbTUxMl9zZXQxX2VwaTY0KGFkZHJfaGlnaCk7DQo+ ID4gKw0KPiA+ICsJCWNtcF9sb3cgPSBfbW01MTJfY21wX2VwaTY0X21hc2sobG93X2FkZHJfdmVj LA0KPiA+ICsJCQkJcmVnaW9uc19sb3dfYWRkcnMsIF9NTV9DTVBJTlRfTkxUKTsNCj4gPiArCQlj bXBfaGlnaCA9IF9tbTUxMl9jbXBfZXBpNjRfbWFzayhoaWdoX2FkZHJfdmVjLA0KPiA+ICsJCQkJ cmVnaW9uc19oaWdoX2FkZHJzLCBfTU1fQ01QSU5UX0xUKTsNCj4gPiArCQljbXBfcmVzdWx0ID0g Y21wX2xvdyAmIGNtcF9oaWdoOw0KPiA+ICsJCWludCBpbmRleCA9IF9fYnVpbHRpbl9jdHooY21w X3Jlc3VsdCk7DQo+ID4gKwkJaWYgKHVubGlrZWx5KCh1aW50MzJfdClpbmRleCA+PSBkZXYtPm1l bS0+bnJlZ2lvbnMpKQ0KPiA+ICsJCQlnb3RvIGZyZWVfYnVmOw0KPiA+ICsNCj4gPiArCQlkZXNj X2FkZHJzW2ldID0gYWRkcl9sb3cgKw0KPiA+ICsJCQlkZXYtPm1lbS0+cmVnaW9uc1tpbmRleF0u aG9zdF91c2VyX2FkZHIgLQ0KPiA+ICsJCQlkZXYtPm1lbS0+cmVnaW9uc1tpbmRleF0uZ3Vlc3Rf cGh5c19hZGRyOw0KPiA+ICsJCWxlbnNbaV0gPSBkZXNjc1thdmFpbF9pZHggKyBpXS5sZW47DQo+ ID4gKwkJcnRlX3ByZWZldGNoMCgodm9pZCAqKSh1aW50cHRyX3QpZGVzY19hZGRyc1tpXSk7DQo+ ID4gKw0KPiA+ICsJCXBrdHNbaV0gPSB2aXJ0aW9fZGV2X3BrdG1idWZfYWxsb2MoZGV2LCBtYnVm X3Bvb2wsIGxlbnNbaV0pOw0KPiA+ICsJCWlmICghcGt0c1tpXSkNCj4gPiArCQkJZ290byBmcmVl X2J1ZjsNCj4gPiArCX0NCj4gDQo+IFRoZSBhYm92ZSBkb2VzIG5vdCBzdXBwb3J0IHZJT01NVSwg aXNuJ3QgaXQ/DQo+IA0KPiBUaGUgbW9yZSB0aGUgcGFja2VkIGRhdGFwYXRoIGV2b2x2ZXMsIHRo ZSBtb3JlIGl0IGdldHMgb3B0aW1pemVkIGZvciBhDQo+IHZlcnkgc3BlY2lmaWMgY29uZmlndXJh dGlvbi4NCj4gDQo+IEluIHYxOS4xMSwgaW5kaXJlY3QgZGVzY3JpcHRvcnMgYW5kIGNoYWluZWQg YnVmZmVycyBhcmUgaGFuZGxlZCBhcyBhDQo+IGZhbGxiYWNrLiBBbmQgbm93IHZJT01NVSBzdXBw b3J0IGlzIGhhbmRsZWQgYXMgYSBmYWxsYmFjay4NCj4gDQoNCkhpIE1heGltZSwNClRoYW5rcyBm b3IgZmlndXJpbmcgb3V0IHRoZSBmZWF0dXJlIG1pc3MuIEZpcnN0IHZlcnNpb24gcGF0Y2ggaXMg bGFjayBvZiB2SU9NTVUgc3VwcG9ydGluZy4NClYyIHBhdGNoIHdpbGwgZml4IHRoZSBmZWF0dXJl IGdhcCBiZXR3ZWVuIHZlY3Rvcml6ZWQgZnVuY3Rpb24gYW5kIG9yaWdpbmFsIGJhdGNoIGZ1bmN0 aW9uLg0KU28gdGhlcmUgd2lsbCBiZSBubyBhZGRpdGlvbmFsIGZhbGxiYWNrIGludHJvZHVjZWQg aW4gdmVjdG9yaXplZCBwYXRjaCBzZXQuDQoNCklNSE8sIGN1cnJlbnQgcGFja2VkIG9wdGltaXph dGlvbiBpbnRyb2R1Y2VkIGNvbXBsZXhpdHkgaXMgZm9yIGhhbmRsaW5nIHRoYXQgZ2FwIGJldHdl ZW4gcGVyZm9ybWFuY2UgYWltZWQgZnJvbnRlbmQgKGxpa2UgUE1EKSBhbmQgbm9ybWFsIG5ldHdv cmsgdHJhZmZpYyAobGlrZSBUQ1ApLg0KVmVjdG9yaXplZCBkYXRhcGF0aCBpcyBmb2N1c2luZyBp biBlbmhhbmNpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIGJhdGNoZWQgZnVuY3Rpb24uICBGcm9tIGZ1 bmN0aW9uIHBvaW50IG9mIHZpZXcsIHRoZXJlIHdpbGwgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHZl Y3Rvcml6ZWQgYmF0Y2hlZCBmdW5jdGlvbiBhbmQgb3JpZ2luYWwgYmF0Y2hlZCBmdW5jdGlvbi4g DQpDdXJyZW50IHBhY2tlZCByaW5nIHBhdGggd2lsbCByZW1haW4gdGhlIHNhbWUgaWYgdmVjdG9y aXplZCBvcHRpb24gaXMgbm90IGVuYWJsZS4gU28gSSB0aGluayB0aGUgY29tcGxleGl0eSB3b24n dCBpbmNyZWFzZSB0b28gbXVjaC4gSWYgdGhlcmUncyBhbnkgY29uY2VybiwgcGxlYXNlIGxldCBt ZSBrbm93bi4gDQoNCkJUVywgdmVjdG9yaXplZCBwYXRoIGNhbiBoZWxwIHBlcmZvcm1hbmNlIGEg bG90IHdoZW4gdklPTU1VIGVuYWJsZWQuIA0KDQpSZWdhcmRzLA0KTWFydmluDQoNCj4gSSBwZXJz b25uYWxseSBkb24ndCBsaWtlIHRoZSBwYXRoIGl0IGlzIHRha2luZyBhcyBpdCBpcyBhZGRpbmcg YSBsb3Qgb2YNCj4gY29tcGxleGl0eSBvbiB0b3Agb2YgdGhhdC4NCj4gDQoNCg==