Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965104AbeAJOVG (ORCPT + 1 other); Wed, 10 Jan 2018 09:21:06 -0500 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:61735 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754562AbeAJOVD (ORCPT ); Wed, 10 Jan 2018 09:21:03 -0500 From: Fabien DESSENNE To: Corentin Labbe , Alexandre TORGUE , "arei.gonglei@huawei.com" , "corbet@lwn.net" , "davem@davemloft.net" , "herbert@gondor.apana.org.au" , "jasowang@redhat.com" , "mcoquelin.stm32@gmail.com" , "mst@redhat.com" CC: "linux-arm-kernel@lists.infradead.org" , "linux-crypto@vger.kernel.org" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "virtualization@lists.linux-foundation.org" Subject: Re: [PATCH 2/6] crypto: engine - Permit to enqueue all async requests Thread-Topic: [PATCH 2/6] crypto: engine - Permit to enqueue all async requests Thread-Index: AQHThM9Pfroeeu5keU6qDUjTJOvfMqNtIcOA Date: Wed, 10 Jan 2018 14:19:54 +0000 Message-ID: <83fa00f2-6e93-d83f-fd9a-0048bd6d60ec@st.com> References: <20180103201109.16077-1-clabbe.montjoie@gmail.com> <20180103201109.16077-3-clabbe.montjoie@gmail.com> In-Reply-To: <20180103201109.16077-3-clabbe.montjoie@gmail.com> Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.75.127.44] Content-Type: text/plain; charset="utf-8" Content-ID: <82717698654AB84885758D3B1E43C2D3@st.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-01-10_07:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: DQpPbiAwMy8wMS8xOCAyMToxMSwgQ29yZW50aW4gTGFiYmUgd3JvdGU6DQo+IFRoZSBjcnlwdG8g ZW5naW5lIGNvdWxkIGFjdHVhbGx5IG9ubHkgZW5xdWV1ZSBoYXNoIGFuZCBhYmxrY2lwaGVyIHJl cXVlc3QuDQo+IFRoaXMgcGF0Y2ggcGVybWl0IGl0IHRvIGVucXVldWUgYW55IHR5cGUgb2YgY3J5 cHRvX2FzeW5jX3JlcXVlc3QuDQo+DQo+IFNpZ25lZC1vZmYtYnk6IENvcmVudGluIExhYmJlIDxj bGFiYmUubW9udGpvaWVAZ21haWwuY29tPg0KPiAtLS0NCj4gICBjcnlwdG8vY3J5cHRvX2VuZ2lu ZS5jICB8IDIzMCArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gICBpbmNsdWRlL2NyeXB0by9lbmdpbmUuaCB8ICA1OSArKysrKysrLS0tLS0tDQo+ICAg MiBmaWxlcyBjaGFuZ2VkLCAxNDggaW5zZXJ0aW9ucygrKSwgMTQxIGRlbGV0aW9ucygtKQ0KPg0K PiBkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0b19lbmdpbmUuYyBiL2NyeXB0by9jcnlwdG9fZW5n aW5lLmMNCj4gaW5kZXggNjFlN2M0ZTAyZmQyLi4wMzYyNzBiNjE2NDggMTAwNjQ0DQo+IC0tLSBh L2NyeXB0by9jcnlwdG9fZW5naW5lLmMNCj4gKysrIGIvY3J5cHRvL2NyeXB0b19lbmdpbmUuYw0K PiBAQCAtMTUsNyArMTUsNiBAQA0KPiAgICNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gICAjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4NCj4gICAjaW5jbHVkZSA8Y3J5cHRvL2VuZ2luZS5oPg0KPiAt I2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+DQo+ICAgI2luY2x1ZGUgPHVhcGkvbGlu dXgvc2NoZWQvdHlwZXMuaD4NCj4gICAjaW5jbHVkZSAiaW50ZXJuYWwuaCINCj4gICANCj4gQEAg LTM0LDExICszMywxMCBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fcHVtcF9yZXF1ZXN0cyhzdHJ1Y3Qg Y3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiAgIAkJCQkgYm9vbCBpbl9rdGhyZWFkKQ0KPiAgIHsN Cj4gICAJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luY19yZXEsICpiYWNrbG9nOw0K PiAtCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpocmVxOw0KPiAtCXN0cnVjdCBhYmxrY2lwaGVyX3Jl cXVlc3QgKmJyZXE7DQo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICAgCWJvb2wgd2FzX2J1 c3kgPSBmYWxzZTsNCj4gLQlpbnQgcmV0LCBydHlwZTsNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVj dCBjcnlwdG9fZW5naW5lX3JlcWN0eCAqZW5naW5lY3R4Ow0KPiAgIA0KPiAgIAlzcGluX2xvY2tf aXJxc2F2ZSgmZW5naW5lLT5xdWV1ZV9sb2NrLCBmbGFncyk7DQo+ICAgDQo+IEBAIC05NCw3ICs5 Miw2IEBAIHN0YXRpYyB2b2lkIGNyeXB0b19wdW1wX3JlcXVlc3RzKHN0cnVjdCBjcnlwdG9fZW5n aW5lICplbmdpbmUsDQo+ICAgDQo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+ cXVldWVfbG9jaywgZmxhZ3MpOw0KPiAgIA0KPiAtCXJ0eXBlID0gY3J5cHRvX3RmbV9hbGdfdHlw ZShlbmdpbmUtPmN1cl9yZXEtPnRmbSk7DQo+ICAgCS8qIFVudGlsIGhlcmUgd2UgZ2V0IHRoZSBy ZXF1ZXN0IG5lZWQgdG8gYmUgZW5jcnlwdGVkIHN1Y2Nlc3NmdWxseSAqLw0KPiAgIAlpZiAoIXdh c19idXN5ICYmIGVuZ2luZS0+cHJlcGFyZV9jcnlwdF9oYXJkd2FyZSkgew0KPiAgIAkJcmV0ID0g ZW5naW5lLT5wcmVwYXJlX2NyeXB0X2hhcmR3YXJlKGVuZ2luZSk7DQo+IEBAIC0xMDQsNTcgKzEw MSwzMSBAQCBzdGF0aWMgdm9pZCBjcnlwdG9fcHVtcF9yZXF1ZXN0cyhzdHJ1Y3QgY3J5cHRvX2Vu Z2luZSAqZW5naW5lLA0KPiAgIAkJfQ0KPiAgIAl9DQo+ICAgDQo+IC0Jc3dpdGNoIChydHlwZSkg ew0KPiAtCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0FIQVNIOg0KPiAtCQlocmVxID0gYWhhc2hfcmVx dWVzdF9jYXN0KGVuZ2luZS0+Y3VyX3JlcSk7DQo+IC0JCWlmIChlbmdpbmUtPnByZXBhcmVfaGFz aF9yZXF1ZXN0KSB7DQo+IC0JCQlyZXQgPSBlbmdpbmUtPnByZXBhcmVfaGFzaF9yZXF1ZXN0KGVu Z2luZSwgaHJlcSk7DQo+IC0JCQlpZiAocmV0KSB7DQo+IC0JCQkJZGV2X2VycihlbmdpbmUtPmRl diwgImZhaWxlZCB0byBwcmVwYXJlIHJlcXVlc3Q6ICVkXG4iLA0KPiAtCQkJCQlyZXQpOw0KPiAt CQkJCWdvdG8gcmVxX2VycjsNCj4gLQkJCX0NCj4gLQkJCWVuZ2luZS0+Y3VyX3JlcV9wcmVwYXJl ZCA9IHRydWU7DQo+IC0JCX0NCj4gLQkJcmV0ID0gZW5naW5lLT5oYXNoX29uZV9yZXF1ZXN0KGVu Z2luZSwgaHJlcSk7DQo+IC0JCWlmIChyZXQpIHsNCj4gLQkJCWRldl9lcnIoZW5naW5lLT5kZXYs ICJmYWlsZWQgdG8gaGFzaCBvbmUgcmVxdWVzdCBmcm9tIHF1ZXVlXG4iKTsNCj4gLQkJCWdvdG8g cmVxX2VycjsNCj4gLQkJfQ0KPiAtCQlyZXR1cm47DQo+IC0JY2FzZSBDUllQVE9fQUxHX1RZUEVf QUJMS0NJUEhFUjoNCj4gLQkJYnJlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KGVuZ2luZS0+ Y3VyX3JlcSk7DQo+IC0JCWlmIChlbmdpbmUtPnByZXBhcmVfY2lwaGVyX3JlcXVlc3QpIHsNCj4g LQkJCXJldCA9IGVuZ2luZS0+cHJlcGFyZV9jaXBoZXJfcmVxdWVzdChlbmdpbmUsIGJyZXEpOw0K PiAtCQkJaWYgKHJldCkgew0KPiAtCQkJCWRldl9lcnIoZW5naW5lLT5kZXYsICJmYWlsZWQgdG8g cHJlcGFyZSByZXF1ZXN0OiAlZFxuIiwNCj4gLQkJCQkJcmV0KTsNCj4gLQkJCQlnb3RvIHJlcV9l cnI7DQo+IC0JCQl9DQo+IC0JCQllbmdpbmUtPmN1cl9yZXFfcHJlcGFyZWQgPSB0cnVlOw0KPiAt CQl9DQo+IC0JCXJldCA9IGVuZ2luZS0+Y2lwaGVyX29uZV9yZXF1ZXN0KGVuZ2luZSwgYnJlcSk7 DQo+ICsJZW5naW5lY3R4ID0gY3J5cHRvX3RmbV9jdHgoYXN5bmNfcmVxLT50Zm0pOw0KPiArDQo+ ICsJaWYgKGVuZ2luZWN0eC0+b3AucHJlcGFyZV9yZXF1ZXN0KSB7DQo+ICsJCXJldCA9IGVuZ2lu ZWN0eC0+b3AucHJlcGFyZV9yZXF1ZXN0KGVuZ2luZSwgYXN5bmNfcmVxKTsNCj4gICAJCWlmIChy ZXQpIHsNCj4gLQkJCWRldl9lcnIoZW5naW5lLT5kZXYsICJmYWlsZWQgdG8gY2lwaGVyIG9uZSBy ZXF1ZXN0IGZyb20gcXVldWVcbiIpOw0KPiArCQkJZGV2X2VycihlbmdpbmUtPmRldiwgImZhaWxl ZCB0byBwcmVwYXJlIHJlcXVlc3Q6ICVkXG4iLA0KPiArCQkJCXJldCk7DQo+ICAgCQkJZ290byBy ZXFfZXJyOw0KPiAgIAkJfQ0KPiAtCQlyZXR1cm47DQo+IC0JZGVmYXVsdDoNCj4gLQkJZGV2X2Vy cihlbmdpbmUtPmRldiwgImZhaWxlZCB0byBwcmVwYXJlIHJlcXVlc3Qgb2YgdW5rbm93biB0eXBl XG4iKTsNCj4gLQkJcmV0dXJuOw0KPiArCQllbmdpbmUtPmN1cl9yZXFfcHJlcGFyZWQgPSB0cnVl Ow0KPiArCX0NCj4gKwlpZiAoIWVuZ2luZWN0eC0+b3AuZG9fb25lX3JlcXVlc3QpIHsNCj4gKwkJ ZGV2X2VycihlbmdpbmUtPmRldiwgImZhaWxlZCB0byBkbyByZXF1ZXN0XG4iKTsNCj4gKwkJcmV0 ID0gLUVJTlZBTDsNCj4gKwkJZ290byByZXFfZXJyOw0KPiArCX0NCj4gKwlyZXQgPSBlbmdpbmVj dHgtPm9wLmRvX29uZV9yZXF1ZXN0KGVuZ2luZSwgYXN5bmNfcmVxKTsNCj4gKwlpZiAocmV0KSB7 DQo+ICsJCWRldl9lcnIoZW5naW5lLT5kZXYsICJGYWlsZWQgdG8gZG8gb25lIHJlcXVlc3QgZnJv bSBxdWV1ZTogJWRcbiIsIHJldCk7DQo+ICsJCWdvdG8gcmVxX2VycjsNCj4gICAJfQ0KPiArCXJl dHVybjsNCj4gICANCj4gICByZXFfZXJyOg0KPiAtCXN3aXRjaCAocnR5cGUpIHsNCj4gLQljYXNl IENSWVBUT19BTEdfVFlQRV9BSEFTSDoNCj4gLQkJaHJlcSA9IGFoYXNoX3JlcXVlc3RfY2FzdChl bmdpbmUtPmN1cl9yZXEpOw0KPiAtCQljcnlwdG9fZmluYWxpemVfaGFzaF9yZXF1ZXN0KGVuZ2lu ZSwgaHJlcSwgcmV0KTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBDUllQVE9fQUxHX1RZUEVfQUJM S0NJUEhFUjoNCj4gLQkJYnJlcSA9IGFibGtjaXBoZXJfcmVxdWVzdF9jYXN0KGVuZ2luZS0+Y3Vy X3JlcSk7DQo+IC0JCWNyeXB0b19maW5hbGl6ZV9jaXBoZXJfcmVxdWVzdChlbmdpbmUsIGJyZXEs IHJldCk7DQo+IC0JCWJyZWFrOw0KPiAtCX0NCj4gKwljcnlwdG9fZmluYWxpemVfcmVxdWVzdChl bmdpbmUsIGFzeW5jX3JlcSwgcmV0KTsNCj4gICAJcmV0dXJuOw0KPiAgIA0KPiAgIG91dDoNCj4g QEAgLTE3MCwxMyArMTQxLDEyIEBAIHN0YXRpYyB2b2lkIGNyeXB0b19wdW1wX3dvcmsoc3RydWN0 IGt0aHJlYWRfd29yayAqd29yaykNCj4gICB9DQo+ICAgDQo+ICAgLyoqDQo+IC0gKiBjcnlwdG9f dHJhbnNmZXJfY2lwaGVyX3JlcXVlc3QgLSB0cmFuc2ZlciB0aGUgbmV3IHJlcXVlc3QgaW50byB0 aGUNCj4gLSAqIGVuZ2luZXF1ZXVlDQo+ICsgKiBjcnlwdG9fdHJhbnNmZXJfcmVxdWVzdCAtIHRy YW5zZmVyIHRoZSBuZXcgcmVxdWVzdCBpbnRvIHRoZSBlbmdpbmUgcXVldWUNCj4gICAgKiBAZW5n aW5lOiB0aGUgaGFyZHdhcmUgZW5naW5lDQo+ICAgICogQHJlcTogdGhlIHJlcXVlc3QgbmVlZCB0 byBiZSBsaXN0ZWQgaW50byB0aGUgZW5naW5lIHF1ZXVlDQo+ICAgICovDQo+IC1pbnQgY3J5cHRv X3RyYW5zZmVyX2NpcGhlcl9yZXF1ZXN0KHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+ IC0JCQkJICAgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLA0KPiArc3RhdGljIGludCBj cnlwdG9fdHJhbnNmZXJfcmVxdWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiAr CQkJCSAgIHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLA0KPiAgIAkJCQkgICBib29s IG5lZWRfcHVtcCkNCj4gICB7DQo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+IEBAIC0xODks NyArMTU5LDcgQEAgaW50IGNyeXB0b190cmFuc2Zlcl9jaXBoZXJfcmVxdWVzdChzdHJ1Y3QgY3J5 cHRvX2VuZ2luZSAqZW5naW5lLA0KPiAgIAkJcmV0dXJuIC1FU0hVVERPV047DQo+ICAgCX0NCj4g ICANCj4gLQlyZXQgPSBhYmxrY2lwaGVyX2VucXVldWVfcmVxdWVzdCgmZW5naW5lLT5xdWV1ZSwg cmVxKTsNCj4gKwlyZXQgPSBjcnlwdG9fZW5xdWV1ZV9yZXF1ZXN0KCZlbmdpbmUtPnF1ZXVlLCBy ZXEpOw0KPiAgIA0KPiAgIAlpZiAoIWVuZ2luZS0+YnVzeSAmJiBuZWVkX3B1bXApDQo+ICAgCQlr dGhyZWFkX3F1ZXVlX3dvcmsoZW5naW5lLT5rd29ya2VyLCAmZW5naW5lLT5wdW1wX3JlcXVlc3Rz KTsNCj4gQEAgLTE5Nyw4NSArMTY3LDk3IEBAIGludCBjcnlwdG9fdHJhbnNmZXJfY2lwaGVyX3Jl cXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gICAJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZW5naW5lLT5xdWV1ZV9sb2NrLCBmbGFncyk7DQo+ICAgCXJldHVybiByZXQ7DQo+ ICAgfQ0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3RyYW5zZmVyX2NpcGhlcl9yZXF1ZXN0 KTsNCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b190cmFuc2Zlcl9yZXF1ZXN0KTsNCg0KRG8g bm90IGV4cG9ydCB0aGlzIGZ1bmN0aW9uIHdoaWNoIGlzIGEgc3RhdGljIG9uZS4NCg0KPiAgIA0K PiAgIC8qKg0KPiAtICogY3J5cHRvX3RyYW5zZmVyX2NpcGhlcl9yZXF1ZXN0X3RvX2VuZ2luZSAt IHRyYW5zZmVyIG9uZSByZXF1ZXN0IHRvIGxpc3QNCj4gKyAqIGNyeXB0b190cmFuc2Zlcl9yZXF1 ZXN0X3RvX2VuZ2luZSAtIHRyYW5zZmVyIG9uZSByZXF1ZXN0IHRvIGxpc3QNCj4gICAgKiBpbnRv IHRoZSBlbmdpbmUgcXVldWUNCj4gICAgKiBAZW5naW5lOiB0aGUgaGFyZHdhcmUgZW5naW5lDQo+ ICAgICogQHJlcTogdGhlIHJlcXVlc3QgbmVlZCB0byBiZSBsaXN0ZWQgaW50byB0aGUgZW5naW5l IHF1ZXVlDQo+ICAgICovDQo+ICtzdGF0aWMgaW50IGNyeXB0b190cmFuc2Zlcl9yZXF1ZXN0X3Rv X2VuZ2luZShzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiArCQkJCQkgICAgIHN0cnVj dCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxKQ0KPiArew0KPiArCXJldHVybiBjcnlwdG9fdHJh bnNmZXJfcmVxdWVzdChlbmdpbmUsIHJlcSwgdHJ1ZSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogY3J5cHRvX3RyYW5zZmVyX2NpcGhlcl9yZXF1ZXN0X3RvX2VuZ2luZSAtIHRyYW5zZmVyIG9u ZSBhYmxrY2lwaGVyX3JlcXVlc3QNCj4gKyAqIHRvIGxpc3QgaW50byB0aGUgZW5naW5lIHF1ZXVl DQo+ICsgKiBAZW5naW5lOiB0aGUgaGFyZHdhcmUgZW5naW5lDQo+ICsgKiBAcmVxOiB0aGUgcmVx dWVzdCBuZWVkIHRvIGJlIGxpc3RlZCBpbnRvIHRoZSBlbmdpbmUgcXVldWUNCj4gKyAqIFRPRE86 IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gc2tjaXBoZXIgY29udmVyc2lvbiBpcyBmaW5pc2hl ZA0KPiArICovDQo+ICAgaW50IGNyeXB0b190cmFuc2Zlcl9jaXBoZXJfcmVxdWVzdF90b19lbmdp bmUoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gICAJCQkJCSAgICAgc3RydWN0IGFi bGtjaXBoZXJfcmVxdWVzdCAqcmVxKQ0KPiAgIHsNCj4gLQlyZXR1cm4gY3J5cHRvX3RyYW5zZmVy X2NpcGhlcl9yZXF1ZXN0KGVuZ2luZSwgcmVxLCB0cnVlKTsNCj4gKwlyZXR1cm4gY3J5cHRvX3Ry YW5zZmVyX3JlcXVlc3RfdG9fZW5naW5lKGVuZ2luZSwgJnJlcS0+YmFzZSk7DQo+ICAgfQ0KPiAg IEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b190cmFuc2Zlcl9jaXBoZXJfcmVxdWVzdF90b19lbmdp bmUpOw0KPiAgIA0KPiAgIC8qKg0KPiAtICogY3J5cHRvX3RyYW5zZmVyX2hhc2hfcmVxdWVzdCAt IHRyYW5zZmVyIHRoZSBuZXcgcmVxdWVzdCBpbnRvIHRoZQ0KPiAtICogZW5naW5lcXVldWUNCj4g KyAqIGNyeXB0b190cmFuc2Zlcl9za2NpcGhlcl9yZXF1ZXN0X3RvX2VuZ2luZSAtIHRyYW5zZmVy IG9uZSBza2NpcGhlcl9yZXF1ZXN0DQo+ICsgKiB0byBsaXN0IGludG8gdGhlIGVuZ2luZSBxdWV1 ZQ0KPiAgICAqIEBlbmdpbmU6IHRoZSBoYXJkd2FyZSBlbmdpbmUNCj4gICAgKiBAcmVxOiB0aGUg cmVxdWVzdCBuZWVkIHRvIGJlIGxpc3RlZCBpbnRvIHRoZSBlbmdpbmUgcXVldWUNCj4gICAgKi8N Cj4gLWludCBjcnlwdG9fdHJhbnNmZXJfaGFzaF9yZXF1ZXN0KHN0cnVjdCBjcnlwdG9fZW5naW5l ICplbmdpbmUsDQo+IC0JCQkJIHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGJvb2wgbmVlZF9w dW1wKQ0KPiAraW50IGNyeXB0b190cmFuc2Zlcl9za2NpcGhlcl9yZXF1ZXN0X3RvX2VuZ2luZShz dHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiArCQkJCQkgICAgICAgc3RydWN0IHNrY2lw aGVyX3JlcXVlc3QgKnJlcSkNCj4gICB7DQo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gLQlp bnQgcmV0Ow0KPiAtDQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+cXVldWVfbG9jaywg ZmxhZ3MpOw0KPiAtDQo+IC0JaWYgKCFlbmdpbmUtPnJ1bm5pbmcpIHsNCj4gLQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZW5naW5lLT5xdWV1ZV9sb2NrLCBmbGFncyk7DQo+IC0JCXJldHVybiAt RVNIVVRET1dOOw0KPiAtCX0NCj4gLQ0KPiAtCXJldCA9IGFoYXNoX2VucXVldWVfcmVxdWVzdCgm ZW5naW5lLT5xdWV1ZSwgcmVxKTsNCj4gLQ0KPiAtCWlmICghZW5naW5lLT5idXN5ICYmIG5lZWRf cHVtcCkNCj4gLQkJa3RocmVhZF9xdWV1ZV93b3JrKGVuZ2luZS0+a3dvcmtlciwgJmVuZ2luZS0+ cHVtcF9yZXF1ZXN0cyk7DQo+ICsJcmV0dXJuIGNyeXB0b190cmFuc2Zlcl9yZXF1ZXN0X3RvX2Vu Z2luZShlbmdpbmUsICZyZXEtPmJhc2UpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoY3J5 cHRvX3RyYW5zZmVyX3NrY2lwaGVyX3JlcXVlc3RfdG9fZW5naW5lKTsNCj4gICANCj4gLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnF1ZXVlX2xvY2ssIGZsYWdzKTsNCj4gLQlyZXR1 cm4gcmV0Ow0KPiArLyoqDQo+ICsgKiBjcnlwdG9fdHJhbnNmZXJfYWtjaXBoZXJfcmVxdWVzdF90 b19lbmdpbmUgLSB0cmFuc2ZlciBvbmUgYWtjaXBoZXJfcmVxdWVzdA0KPiArICogdG8gbGlzdCBp bnRvIHRoZSBlbmdpbmUgcXVldWUNCj4gKyAqIEBlbmdpbmU6IHRoZSBoYXJkd2FyZSBlbmdpbmUN Cj4gKyAqIEByZXE6IHRoZSByZXF1ZXN0IG5lZWQgdG8gYmUgbGlzdGVkIGludG8gdGhlIGVuZ2lu ZSBxdWV1ZQ0KPiArICovDQo+ICtpbnQgY3J5cHRvX3RyYW5zZmVyX2FrY2lwaGVyX3JlcXVlc3Rf dG9fZW5naW5lKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+ICsJCQkJCSAgICAgICBz dHJ1Y3QgYWtjaXBoZXJfcmVxdWVzdCAqcmVxKQ0KPiArew0KPiArCXJldHVybiBjcnlwdG9fdHJh bnNmZXJfcmVxdWVzdF90b19lbmdpbmUoZW5naW5lLCAmcmVxLT5iYXNlKTsNCj4gICB9DQo+IC1F WFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fdHJhbnNmZXJfaGFzaF9yZXF1ZXN0KTsNCj4gK0VYUE9S VF9TWU1CT0xfR1BMKGNyeXB0b190cmFuc2Zlcl9ha2NpcGhlcl9yZXF1ZXN0X3RvX2VuZ2luZSk7 DQo+ICAgDQo+ICAgLyoqDQo+IC0gKiBjcnlwdG9fdHJhbnNmZXJfaGFzaF9yZXF1ZXN0X3RvX2Vu Z2luZSAtIHRyYW5zZmVyIG9uZSByZXF1ZXN0IHRvIGxpc3QNCj4gLSAqIGludG8gdGhlIGVuZ2lu ZSBxdWV1ZQ0KPiArICogY3J5cHRvX3RyYW5zZmVyX2hhc2hfcmVxdWVzdF90b19lbmdpbmUgLSB0 cmFuc2ZlciBvbmUgYWhhc2hfcmVxdWVzdA0KPiArICogdG8gbGlzdCBpbnRvIHRoZSBlbmdpbmUg cXVldWUNCj4gICAgKiBAZW5naW5lOiB0aGUgaGFyZHdhcmUgZW5naW5lDQo+ICAgICogQHJlcTog dGhlIHJlcXVlc3QgbmVlZCB0byBiZSBsaXN0ZWQgaW50byB0aGUgZW5naW5lIHF1ZXVlDQo+ICAg ICovDQo+ICAgaW50IGNyeXB0b190cmFuc2Zlcl9oYXNoX3JlcXVlc3RfdG9fZW5naW5lKHN0cnVj dCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+ICAgCQkJCQkgICBzdHJ1Y3QgYWhhc2hfcmVxdWVz dCAqcmVxKQ0KPiAgIHsNCj4gLQlyZXR1cm4gY3J5cHRvX3RyYW5zZmVyX2hhc2hfcmVxdWVzdChl bmdpbmUsIHJlcSwgdHJ1ZSk7DQo+ICsJcmV0dXJuIGNyeXB0b190cmFuc2Zlcl9yZXF1ZXN0X3Rv X2VuZ2luZShlbmdpbmUsICZyZXEtPmJhc2UpOw0KPiAgIH0NCj4gICBFWFBPUlRfU1lNQk9MX0dQ TChjcnlwdG9fdHJhbnNmZXJfaGFzaF9yZXF1ZXN0X3RvX2VuZ2luZSk7DQo+ICAgDQoNClBsZWFz ZSBhZGQgdGhpcyBFWFBPUlRlZCBmdW5jdGlvbjoNCg0KY3J5cHRvX3RyYW5zZmVyX2FlYWRfcmVx dWVzdF90b19lbmdpbmUoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwgDQpzdHJ1Y3QgYWVh ZF9yZXF1ZXN0ICpyZXEpDQoNCj4gICAvKioNCj4gLSAqIGNyeXB0b19maW5hbGl6ZV9jaXBoZXJf cmVxdWVzdCAtIGZpbmFsaXplIG9uZSByZXF1ZXN0IGlmIHRoZSByZXF1ZXN0IGlzIGRvbmUNCj4g KyAqIGNyeXB0b19maW5hbGl6ZV9yZXF1ZXN0IC0gZmluYWxpemUgb25lIHJlcXVlc3QgaWYgdGhl IHJlcXVlc3QgaXMgZG9uZQ0KPiAgICAqIEBlbmdpbmU6IHRoZSBoYXJkd2FyZSBlbmdpbmUNCj4g ICAgKiBAcmVxOiB0aGUgcmVxdWVzdCBuZWVkIHRvIGJlIGZpbmFsaXplZA0KPiAgICAqIEBlcnI6 IGVycm9yIG51bWJlcg0KPiAgICAqLw0KPiAtdm9pZCBjcnlwdG9fZmluYWxpemVfY2lwaGVyX3Jl cXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkgICAgc3RydWN0IGFi bGtjaXBoZXJfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQ0KPiArdm9pZCBjcnlwdG9fZmluYWxpemVf cmVxdWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KDQpzaGFsbCBiZSBzdGF0aWMN Cg0KPiArCQkJICAgICBzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgaW50IGVycikN Cj4gICB7DQo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICAgCWJvb2wgZmluYWxpemVfY3Vy X3JlcSA9IGZhbHNlOw0KPiAgIAlpbnQgcmV0Ow0KPiArCXN0cnVjdCBjcnlwdG9fZW5naW5lX3Jl cWN0eCAqZW5naW5lY3R4Ow0KPiAgIA0KPiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5x dWV1ZV9sb2NrLCBmbGFncyk7DQo+IC0JaWYgKGVuZ2luZS0+Y3VyX3JlcSA9PSAmcmVxLT5iYXNl KQ0KPiArCWlmIChlbmdpbmUtPmN1cl9yZXEgPT0gcmVxKQ0KPiAgIAkJZmluYWxpemVfY3VyX3Jl cSA9IHRydWU7DQo+ICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+cXVldWVfbG9j aywgZmxhZ3MpOw0KPiAgIA0KPiAgIAlpZiAoZmluYWxpemVfY3VyX3JlcSkgew0KPiArCQllbmdp bmVjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPnRmbSk7DQo+ICAgCQlpZiAoZW5naW5lLT5jdXJf cmVxX3ByZXBhcmVkICYmDQo+IC0JCSAgICBlbmdpbmUtPnVucHJlcGFyZV9jaXBoZXJfcmVxdWVz dCkgew0KPiAtCQkJcmV0ID0gZW5naW5lLT51bnByZXBhcmVfY2lwaGVyX3JlcXVlc3QoZW5naW5l LCByZXEpOw0KPiArCQkgICAgZW5naW5lY3R4LT5vcC51bnByZXBhcmVfcmVxdWVzdCkgew0KPiAr CQkJcmV0ID0gZW5naW5lY3R4LT5vcC51bnByZXBhcmVfcmVxdWVzdChlbmdpbmUsIHJlcSk7DQo+ ICAgCQkJaWYgKHJldCkNCj4gICAJCQkJZGV2X2VycihlbmdpbmUtPmRldiwgImZhaWxlZCB0byB1 bnByZXBhcmUgcmVxdWVzdFxuIik7DQo+ICAgCQl9DQo+IEBAIC0yODUsNDYgKzI2Nyw2NCBAQCB2 b2lkIGNyeXB0b19maW5hbGl6ZV9jaXBoZXJfcmVxdWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAq ZW5naW5lLA0KPiAgIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5xdWV1ZV9sb2Nr LCBmbGFncyk7DQo+ICAgCX0NCj4gICANCj4gLQlyZXEtPmJhc2UuY29tcGxldGUoJnJlcS0+YmFz ZSwgZXJyKTsNCj4gKwlyZXEtPmNvbXBsZXRlKHJlcSwgZXJyKTsNCj4gICANCj4gICAJa3RocmVh ZF9xdWV1ZV93b3JrKGVuZ2luZS0+a3dvcmtlciwgJmVuZ2luZS0+cHVtcF9yZXF1ZXN0cyk7DQo+ ICAgfQ0KPiAtRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2ZpbmFsaXplX2NpcGhlcl9yZXF1ZXN0 KTsNCj4gICANCj4gICAvKioNCj4gLSAqIGNyeXB0b19maW5hbGl6ZV9oYXNoX3JlcXVlc3QgLSBm aW5hbGl6ZSBvbmUgcmVxdWVzdCBpZiB0aGUgcmVxdWVzdCBpcyBkb25lDQo+ICsgKiBjcnlwdG9f ZmluYWxpemVfY2lwaGVyX3JlcXVlc3QgLSBmaW5hbGl6ZSBvbmUgYWJsa2NpcGhlcl9yZXF1ZXN0 IGlmDQo+ICsgKiB0aGUgcmVxdWVzdCBpcyBkb25lDQo+ICAgICogQGVuZ2luZTogdGhlIGhhcmR3 YXJlIGVuZ2luZQ0KPiAgICAqIEByZXE6IHRoZSByZXF1ZXN0IG5lZWQgdG8gYmUgZmluYWxpemVk DQo+ICAgICogQGVycjogZXJyb3IgbnVtYmVyDQo+ICAgICovDQo+IC12b2lkIGNyeXB0b19maW5h bGl6ZV9oYXNoX3JlcXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkg IHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEsIGludCBlcnIpDQo+ICt2b2lkIGNyeXB0b19maW5h bGl6ZV9jaXBoZXJfcmVxdWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiArCQkJ CSAgICBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGludCBlcnIpDQo+ICAgew0KPiAt CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+IC0JYm9vbCBmaW5hbGl6ZV9jdXJfcmVxID0gZmFsc2U7 DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnF1ZXVl X2xvY2ssIGZsYWdzKTsNCj4gLQlpZiAoZW5naW5lLT5jdXJfcmVxID09ICZyZXEtPmJhc2UpDQo+ IC0JCWZpbmFsaXplX2N1cl9yZXEgPSB0cnVlOw0KPiAtCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmVuZ2luZS0+cXVldWVfbG9jaywgZmxhZ3MpOw0KPiArCXJldHVybiBjcnlwdG9fZmluYWxpemVf cmVxdWVzdChlbmdpbmUsICZyZXEtPmJhc2UsIGVycik7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9M X0dQTChjcnlwdG9fZmluYWxpemVfY2lwaGVyX3JlcXVlc3QpOw0KPiAgIA0KPiAtCWlmIChmaW5h bGl6ZV9jdXJfcmVxKSB7DQo+IC0JCWlmIChlbmdpbmUtPmN1cl9yZXFfcHJlcGFyZWQgJiYNCj4g LQkJICAgIGVuZ2luZS0+dW5wcmVwYXJlX2hhc2hfcmVxdWVzdCkgew0KPiAtCQkJcmV0ID0gZW5n aW5lLT51bnByZXBhcmVfaGFzaF9yZXF1ZXN0KGVuZ2luZSwgcmVxKTsNCj4gLQkJCWlmIChyZXQp DQo+IC0JCQkJZGV2X2VycihlbmdpbmUtPmRldiwgImZhaWxlZCB0byB1bnByZXBhcmUgcmVxdWVz dFxuIik7DQo+IC0JCX0NCj4gLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+cXVldWVfbG9j aywgZmxhZ3MpOw0KPiAtCQllbmdpbmUtPmN1cl9yZXEgPSBOVUxMOw0KPiAtCQllbmdpbmUtPmN1 cl9yZXFfcHJlcGFyZWQgPSBmYWxzZTsNCj4gLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5n aW5lLT5xdWV1ZV9sb2NrLCBmbGFncyk7DQo+IC0JfQ0KPiArLyoqDQo+ICsgKiBjcnlwdG9fZmlu YWxpemVfc2tjaXBoZXJfcmVxdWVzdCAtIGZpbmFsaXplIG9uZSBza2NpcGhlcl9yZXF1ZXN0IGlm DQo+ICsgKiB0aGUgcmVxdWVzdCBpcyBkb25lDQo+ICsgKiBAZW5naW5lOiB0aGUgaGFyZHdhcmUg ZW5naW5lDQo+ICsgKiBAcmVxOiB0aGUgcmVxdWVzdCBuZWVkIHRvIGJlIGZpbmFsaXplZA0KPiAr ICogQGVycjogZXJyb3IgbnVtYmVyDQo+ICsgKi8NCj4gK3ZvaWQgY3J5cHRvX2ZpbmFsaXplX3Nr Y2lwaGVyX3JlcXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gKwkJCQkgICAg ICBzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQ0KPiArew0KPiArCXJldHVy biBjcnlwdG9fZmluYWxpemVfcmVxdWVzdChlbmdpbmUsICZyZXEtPmJhc2UsIGVycik7DQo+ICt9 DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fZmluYWxpemVfc2tjaXBoZXJfcmVxdWVzdCk7 DQo+ICAgDQo+IC0JcmVxLT5iYXNlLmNvbXBsZXRlKCZyZXEtPmJhc2UsIGVycik7DQo+ICsvKioN Cj4gKyAqIGNyeXB0b19maW5hbGl6ZV9ha2NpcGhlcl9yZXF1ZXN0IC0gZmluYWxpemUgb25lIGFr Y2lwaGVyX3JlcXVlc3QgaWYNCj4gKyAqIHRoZSByZXF1ZXN0IGlzIGRvbmUNCj4gKyAqIEBlbmdp bmU6IHRoZSBoYXJkd2FyZSBlbmdpbmUNCj4gKyAqIEByZXE6IHRoZSByZXF1ZXN0IG5lZWQgdG8g YmUgZmluYWxpemVkDQo+ICsgKiBAZXJyOiBlcnJvciBudW1iZXINCj4gKyAqLw0KPiArdm9pZCBj cnlwdG9fZmluYWxpemVfYWtjaXBoZXJfcmVxdWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5n aW5lLA0KPiArCQkJCSAgICAgIHN0cnVjdCBha2NpcGhlcl9yZXF1ZXN0ICpyZXEsIGludCBlcnIp DQo+ICt7DQo+ICsJcmV0dXJuIGNyeXB0b19maW5hbGl6ZV9yZXF1ZXN0KGVuZ2luZSwgJnJlcS0+ YmFzZSwgZXJyKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19maW5hbGl6ZV9h a2NpcGhlcl9yZXF1ZXN0KTsNCj4gICANCj4gLQlrdGhyZWFkX3F1ZXVlX3dvcmsoZW5naW5lLT5r d29ya2VyLCAmZW5naW5lLT5wdW1wX3JlcXVlc3RzKTsNCj4gKy8qKg0KPiArICogY3J5cHRvX2Zp bmFsaXplX2hhc2hfcmVxdWVzdCAtIGZpbmFsaXplIG9uZSBhaGFzaF9yZXF1ZXN0IGlmDQo+ICsg KiB0aGUgcmVxdWVzdCBpcyBkb25lDQo+ICsgKiBAZW5naW5lOiB0aGUgaGFyZHdhcmUgZW5naW5l DQo+ICsgKiBAcmVxOiB0aGUgcmVxdWVzdCBuZWVkIHRvIGJlIGZpbmFsaXplZA0KPiArICogQGVy cjogZXJyb3IgbnVtYmVyDQo+ICsgKi8NCj4gK3ZvaWQgY3J5cHRvX2ZpbmFsaXplX2hhc2hfcmVx dWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiArCQkJCSAgc3RydWN0IGFoYXNo X3JlcXVlc3QgKnJlcSwgaW50IGVycikNCj4gK3sNCj4gKwlyZXR1cm4gY3J5cHRvX2ZpbmFsaXpl X3JlcXVlc3QoZW5naW5lLCAmcmVxLT5iYXNlLCBlcnIpOw0KPiAgIH0NCj4gICBFWFBPUlRfU1lN Qk9MX0dQTChjcnlwdG9fZmluYWxpemVfaGFzaF9yZXF1ZXN0KTsNCg0KQWRkDQpjcnlwdG9fZmlu YWxpemVfYWVhZF9yZXF1ZXN0KHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsIHN0cnVjdCAN CmFlYWRfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQ0KDQo+ICAgDQo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL2NyeXB0by9lbmdpbmUuaCBiL2luY2x1ZGUvY3J5cHRvL2VuZ2luZS5oDQo+IGluZGV4IGRk MDRjMTY5OWI1MS4uMWVhN2NiZTkyZWFmIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2NyeXB0by9l bmdpbmUuaA0KPiArKysgYi9pbmNsdWRlL2NyeXB0by9lbmdpbmUuaA0KPiBAQCAtMTcsNyArMTcs OSBAQA0KPiAgICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gICAjaW5jbHVkZSA8bGludXgv a3RocmVhZC5oPg0KPiAgICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+DQo+ICsjaW5jbHVkZSA8 Y3J5cHRvL2FrY2lwaGVyLmg+DQo+ICAgI2luY2x1ZGUgPGNyeXB0by9oYXNoLmg+DQo+ICsjaW5j bHVkZSA8Y3J5cHRvL3NrY2lwaGVyLmg+DQo+ICAgDQo+ICAgI2RlZmluZSBFTkdJTkVfTkFNRV9M RU4JMzANCj4gICAvKg0KPiBAQCAtMzcsMTIgKzM5LDYgQEANCj4gICAgKiBAdW5wcmVwYXJlX2Ny eXB0X2hhcmR3YXJlOiB0aGVyZSBhcmUgY3VycmVudGx5IG5vIG1vcmUgcmVxdWVzdHMgb24gdGhl DQo+ICAgICogcXVldWUgc28gdGhlIHN1YnN5c3RlbSBub3RpZmllcyB0aGUgZHJpdmVyIHRoYXQg aXQgbWF5IHJlbGF4IHRoZQ0KPiAgICAqIGhhcmR3YXJlIGJ5IGlzc3VpbmcgdGhpcyBjYWxsDQo+ IC0gKiBAcHJlcGFyZV9jaXBoZXJfcmVxdWVzdDogZG8gc29tZSBwcmVwYXJlIGlmIG5lZWQgYmVm b3JlIGhhbmRsZSB0aGUgY3VycmVudCByZXF1ZXN0DQo+IC0gKiBAdW5wcmVwYXJlX2NpcGhlcl9y ZXF1ZXN0OiB1bmRvIGFueSB3b3JrIGRvbmUgYnkgcHJlcGFyZV9jaXBoZXJfcmVxdWVzdCgpDQo+ IC0gKiBAY2lwaGVyX29uZV9yZXF1ZXN0OiBkbyBlbmNyeXB0aW9uIGZvciBjdXJyZW50IHJlcXVl c3QNCj4gLSAqIEBwcmVwYXJlX2hhc2hfcmVxdWVzdDogZG8gc29tZSBwcmVwYXJlIGlmIG5lZWQg YmVmb3JlIGhhbmRsZSB0aGUgY3VycmVudCByZXF1ZXN0DQo+IC0gKiBAdW5wcmVwYXJlX2hhc2hf cmVxdWVzdDogdW5kbyBhbnkgd29yayBkb25lIGJ5IHByZXBhcmVfaGFzaF9yZXF1ZXN0KCkNCj4g LSAqIEBoYXNoX29uZV9yZXF1ZXN0OiBkbyBoYXNoIGZvciBjdXJyZW50IHJlcXVlc3QNCj4gICAg KiBAa3dvcmtlcjoga3RocmVhZCB3b3JrZXIgc3RydWN0IGZvciByZXF1ZXN0IHB1bXANCj4gICAg KiBAcHVtcF9yZXF1ZXN0czogd29yayBzdHJ1Y3QgZm9yIHNjaGVkdWxpbmcgd29yayB0byB0aGUg cmVxdWVzdCBwdW1wDQo+ICAgICogQHByaXZfZGF0YTogdGhlIGVuZ2luZSBwcml2YXRlIGRhdGEN Cj4gQEAgLTY1LDE5ICs2MSw2IEBAIHN0cnVjdCBjcnlwdG9fZW5naW5lIHsNCj4gICAJaW50ICgq cHJlcGFyZV9jcnlwdF9oYXJkd2FyZSkoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSk7DQo+ ICAgCWludCAoKnVucHJlcGFyZV9jcnlwdF9oYXJkd2FyZSkoc3RydWN0IGNyeXB0b19lbmdpbmUg KmVuZ2luZSk7DQo+ICAgDQo+IC0JaW50ICgqcHJlcGFyZV9jaXBoZXJfcmVxdWVzdCkoc3RydWN0 IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkgICAgICBzdHJ1Y3QgYWJsa2NpcGhlcl9y ZXF1ZXN0ICpyZXEpOw0KPiAtCWludCAoKnVucHJlcGFyZV9jaXBoZXJfcmVxdWVzdCkoc3RydWN0 IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVz dCAqcmVxKTsNCj4gLQlpbnQgKCpwcmVwYXJlX2hhc2hfcmVxdWVzdCkoc3RydWN0IGNyeXB0b19l bmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkgICAgc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7DQo+ IC0JaW50ICgqdW5wcmVwYXJlX2hhc2hfcmVxdWVzdCkoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVu Z2luZSwNCj4gLQkJCQkgICAgICBzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsNCj4gLQlpbnQg KCpjaXBoZXJfb25lX3JlcXVlc3QpKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+IC0J CQkJICBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpOw0KPiAtCWludCAoKmhhc2hfb25l X3JlcXVlc3QpKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+IC0JCQkJc3RydWN0IGFo YXNoX3JlcXVlc3QgKnJlcSk7DQo+IC0NCj4gICAJc3RydWN0IGt0aHJlYWRfd29ya2VyICAgICAg ICAgICAqa3dvcmtlcjsNCj4gICAJc3RydWN0IGt0aHJlYWRfd29yayAgICAgICAgICAgICBwdW1w X3JlcXVlc3RzOw0KPiAgIA0KPiBAQCAtODUsMTkgKzY4LDQzIEBAIHN0cnVjdCBjcnlwdG9fZW5n aW5lIHsNCj4gICAJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0CSpjdXJfcmVxOw0KPiAgIH07 DQo+ICAgDQo+IC1pbnQgY3J5cHRvX3RyYW5zZmVyX2NpcGhlcl9yZXF1ZXN0KHN0cnVjdCBjcnlw dG9fZW5naW5lICplbmdpbmUsDQo+IC0JCQkJICAgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAq cmVxLA0KPiAtCQkJCSAgIGJvb2wgbmVlZF9wdW1wKTsNCj4gKy8qDQo+ICsgKiBzdHJ1Y3QgY3J5 cHRvX2VuZ2luZV9vcCAtIGNyeXB0byBoYXJkd2FyZSBlbmdpbmUgb3BlcmF0aW9ucw0KPiArICog QHByZXBhcmVfX3JlcXVlc3Q6IGRvIHNvbWUgcHJlcGFyZSBpZiBuZWVkIGJlZm9yZSBoYW5kbGUg dGhlIGN1cnJlbnQgcmVxdWVzdA0KPiArICogQHVucHJlcGFyZV9yZXF1ZXN0OiB1bmRvIGFueSB3 b3JrIGRvbmUgYnkgcHJlcGFyZV9yZXF1ZXN0KCkNCj4gKyAqIEBkb19vbmVfcmVxdWVzdDogZG8g ZW5jcnlwdGlvbiBmb3IgY3VycmVudCByZXF1ZXN0DQo+ICsgKi8NCj4gK3N0cnVjdCBjcnlwdG9f ZW5naW5lX29wIHsNCj4gKwlpbnQgKCpwcmVwYXJlX3JlcXVlc3QpKHN0cnVjdCBjcnlwdG9fZW5n aW5lICplbmdpbmUsDQo+ICsJCQkgICAgICAgdm9pZCAqYXJlcSk7DQo+ICsJaW50ICgqdW5wcmVw YXJlX3JlcXVlc3QpKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+ICsJCQkJIHZvaWQg KmFyZXEpOw0KPiArCWludCAoKmRvX29uZV9yZXF1ZXN0KShzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAq ZW5naW5lLA0KPiArCQkJICAgICAgdm9pZCAqYXJlcSk7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qg Y3J5cHRvX2VuZ2luZV9yZXFjdHggew0KPiArCXN0cnVjdCBjcnlwdG9fZW5naW5lX29wIG9wOw0K PiArfTsNCj4gKw0KPiAraW50IGNyeXB0b190cmFuc2Zlcl9ha2NpcGhlcl9yZXF1ZXN0X3RvX2Vu Z2luZShzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lLA0KPiArCQkJCQkgICAgICAgc3RydWN0 IGFrY2lwaGVyX3JlcXVlc3QgKnJlcSk7DQo+ICAgaW50IGNyeXB0b190cmFuc2Zlcl9jaXBoZXJf cmVxdWVzdF90b19lbmdpbmUoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkJ ICAgICBzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpOw0KPiAtaW50IGNyeXB0b190cmFu c2Zlcl9oYXNoX3JlcXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gLQkJCQkg c3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwgYm9vbCBuZWVkX3B1bXApOw0KPiArCQkJCSAgICAg IHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSk7DQo+ICAgaW50IGNyeXB0b190cmFuc2Zl cl9oYXNoX3JlcXVlc3RfdG9fZW5naW5lKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+ IC0JCQkJCSAgIHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpOw0KPiArCQkJCQkgICAgICAgc3Ry dWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7DQo+ICtpbnQgY3J5cHRvX3RyYW5zZmVyX3NrY2lwaGVy X3JlcXVlc3RfdG9fZW5naW5lKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUsDQo+ICsJCQkJ CSAgICAgICBzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKTsNCg0KKyB0cmFuc2Zlcl9hZWFk DQoNCj4gK3ZvaWQgY3J5cHRvX2ZpbmFsaXplX3JlcXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUg KmVuZ2luZSwNCj4gKwkJCSAgICAgc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGlu dCBlcnIpOw0KDQpzdGF0aWMgKCttb3ZlIHRvwqAgLmMgZmlsZT8pDQoNCj4gK3ZvaWQgY3J5cHRv X2ZpbmFsaXplX2FrY2lwaGVyX3JlcXVlc3Qoc3RydWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwN Cj4gKwkJCQkgICAgICBzdHJ1Y3QgYWtjaXBoZXJfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKTsNCj4g ICB2b2lkIGNyeXB0b19maW5hbGl6ZV9jaXBoZXJfcmVxdWVzdChzdHJ1Y3QgY3J5cHRvX2VuZ2lu ZSAqZW5naW5lLA0KPiAgIAkJCQkgICAgc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLCBp bnQgZXJyKTsNCj4gICB2b2lkIGNyeXB0b19maW5hbGl6ZV9oYXNoX3JlcXVlc3Qoc3RydWN0IGNy eXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gICAJCQkJICBzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVx LCBpbnQgZXJyKTsNCj4gK3ZvaWQgY3J5cHRvX2ZpbmFsaXplX3NrY2lwaGVyX3JlcXVlc3Qoc3Ry dWN0IGNyeXB0b19lbmdpbmUgKmVuZ2luZSwNCj4gKwkJCQkgICAgICBzdHJ1Y3Qgc2tjaXBoZXJf cmVxdWVzdCAqcmVxLCBpbnQgZXJyKTsNCg0KKyBmaW5hbGl6ZV9hZWFkDQoNCj4gICBpbnQgY3J5 cHRvX2VuZ2luZV9zdGFydChzdHJ1Y3QgY3J5cHRvX2VuZ2luZSAqZW5naW5lKTsNCj4gICBpbnQg Y3J5cHRvX2VuZ2luZV9zdG9wKHN0cnVjdCBjcnlwdG9fZW5naW5lICplbmdpbmUpOw0KPiAgIHN0 cnVjdCBjcnlwdG9fZW5naW5lICpjcnlwdG9fZW5naW5lX2FsbG9jX2luaXQoc3RydWN0IGRldmlj ZSAqZGV2LCBib29sIHJ0KTsNCg==