From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51608) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b9rh0-0007Mr-IE for qemu-devel@nongnu.org; Mon, 06 Jun 2016 06:23:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b9rgw-00078o-Eo for qemu-devel@nongnu.org; Mon, 06 Jun 2016 06:23:34 -0400 Message-ID: <1465208582.4274.47.camel@kernel.crashing.org> From: Benjamin Herrenschmidt Date: Mon, 06 Jun 2016 20:23:02 +1000 Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [Qemu-devel] [RFC/PATCH] ppc: Batch TLB flushes on 32-bit 6xx/7xx/7xxx in hash mode List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-ppc@nongnu.org Cc: qemu-devel@nongnu.org, David Gibson , =?ISO-8859-1?Q?C=E9dric?= Le Goater , Mark Cave-Ayland VGhpcyBwb3J0cyB0aGUgZXhpc3RpbmcgNjQtYml0IG1lY2hhbmlzbSB0byAzMi1iaXQsIHRo dXMgc2VyaWVzDQpvZiA2NCB0bGJpZSdzIGZvbGxvd2VkIGJ5IGEgc3luYyBsaWtlIHNvbWUg dmVyc2lvbnMgb2YgRGFyd2luDQooYWIpdXNlIHdpbGwgcmVzdWx0IGluIGEgc2luZ2xlIGZs dXNoLg0KDQpXZSBhcHBseSBhIHBlbmRpbmcgZmx1c2ggb24gYW55IHN5bmMgaW5zdHJ1Y3Rp b24gdGhvdWdoLCBhcyBEYXJ3aW4NCmRvZXNuJ3QgdXNlIHRsYnN5bmMgb24gbm9uLVNNUCBz eXN0ZW1zLg0KDQpTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBIZXJyZW5zY2htaWR0IDxiZW5o QGtlcm5lbC5jcmFzaGluZy5vcmc+DQotLS0NCg0KTm90ZTogSSBoYXZlbid0IGRvbmUgYW55 IHBlcmZvcm1hbmNlIGltcGFjdCBtZWFzdXJlbWVudHMgd2l0aCB0aGlzDQpvbmUgLi4uIGZl ZWwgZnJlZSB0byBsZXQgbWUga25vdyB3aGF0IGl0IGRvZXMgZm9yIHlvdSA6LSkNCg0KwqB0 YXJnZXQtcHBjL2NwdS5owqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICstDQrCoHRhcmdldC1w cGMvaGVscGVyX3JlZ3MuaCB8wqDCoDIgKy0NCsKgdGFyZ2V0LXBwYy9tbXVfaGVscGVyLmPC oMKgfCA0NCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K wqB0YXJnZXQtcHBjL3RyYW5zbGF0ZS5jwqDCoMKgfCAyNyArKysrKysrKysrKysrKysrKysr KystLS0tLS0NCsKgNCBmaWxlcyBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCA0NCBkZWxl dGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL3RhcmdldC1wcGMvY3B1LmggYi90YXJnZXQtcHBj L2NwdS5oDQppbmRleCBkOGY4ZjdlLi5jMjk2MmQ3IDEwMDY0NA0KLS0tIGEvdGFyZ2V0LXBw Yy9jcHUuaA0KKysrIGIvdGFyZ2V0LXBwYy9jcHUuaA0KQEAgLTk1OSw3ICs5NTksNiBAQCBz dHJ1Y3QgQ1BVUFBDU3RhdGUgew0KwqDCoMKgwqDCoHBwY19zbGJfdCBzbGJbTUFYX1NMQl9F TlRSSUVTXTsNCsKgwqDCoMKgwqBpbnQzMl90IHNsYl9ucjsNCsKgwqDCoMKgwqAvKiB0Y2cg VExCIG5lZWRzIGZsdXNoIChkZWZlcnJlZCBzbGIgaW52YWwgaW5zdHJ1Y3Rpb24gdHlwaWNh bGx5KSAqLw0KLcKgwqDCoMKgdWludDMyX3QgdGxiX25lZWRfZmx1c2g7DQrCoCNlbmRpZg0K wqDCoMKgwqDCoC8qIHNlZ21lbnQgcmVnaXN0ZXJzICovDQrCoMKgwqDCoMKgaHdhZGRyIGh0 YWJfYmFzZTsNCkBAIC05ODUsNiArOTg0LDcgQEAgc3RydWN0IENQVVBQQ1N0YXRlIHsNCsKg wqDCoMKgwqB0YXJnZXRfdWxvbmcgcGJbNF07DQrCoMKgwqDCoMKgYm9vbCB0bGJfZGlydHk7 wqDCoMKgLyogU2V0IHRvIG5vbi16ZXJvIHdoZW4gbW9kaWZ5aW5nIFRMQsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQrCoMKgwqDCoMKgYm9vbCBrdm1fc3dfdGxi O8KgwqAvKiBub24temVybyBpZiBLVk0gU1cgVExCIEFQSSBpcyBhY3RpdmXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQorwqDCoMKgwqB1aW50MzJfdCB0bGJfbmVlZF9m bHVzaDsgLyogRGVsYXllZCBmbHVzaCBuZWVkZWQgKi8NCsKgI2VuZGlmDQrCoA0KwqDCoMKg wqDCoC8qIE90aGVyIHJlZ2lzdGVycyAqLw0KZGlmZiAtLWdpdCBhL3RhcmdldC1wcGMvaGVs cGVyX3JlZ3MuaCBiL3RhcmdldC1wcGMvaGVscGVyX3JlZ3MuaA0KaW5kZXggMTA0YjY5MC4u OGZjMDkzNCAxMDA2NDQNCi0tLSBhL3RhcmdldC1wcGMvaGVscGVyX3JlZ3MuaA0KKysrIGIv dGFyZ2V0LXBwYy9oZWxwZXJfcmVncy5oDQpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyBp bmxpbmUgaW50IGhyZWdfc3RvcmVfbXNyKENQVVBQQ1N0YXRlICplbnYsIHRhcmdldF91bG9u ZyB2YWx1ZSwNCsKgwqDCoMKgwqByZXR1cm4gZXhjcDsNCsKgfQ0KwqANCi0jaWYgIWRlZmlu ZWQoQ09ORklHX1VTRVJfT05MWSkgJiYgZGVmaW5lZChUQVJHRVRfUFBDNjQpDQorI2lmICFk ZWZpbmVkKENPTkZJR19VU0VSX09OTFkpDQrCoHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja190 bGJfZmx1c2goQ1BVUFBDU3RhdGUgKmVudikNCsKgew0KwqDCoMKgwqDCoENQVVN0YXRlICpj cyA9IENQVShwcGNfZW52X2dldF9jcHUoZW52KSk7DQpkaWZmIC0tZ2l0IGEvdGFyZ2V0LXBw Yy9tbXVfaGVscGVyLmMgYi90YXJnZXQtcHBjL21tdV9oZWxwZXIuYw0KaW5kZXggYTVlMzg3 OC4uNDg1ZDViOCAxMDA2NDQNCi0tLSBhL3RhcmdldC1wcGMvbW11X2hlbHBlci5jDQorKysg Yi90YXJnZXQtcHBjL21tdV9oZWxwZXIuYw0KQEAgLTE5MzUsOCArMTkzNSw4IEBAIHZvaWQg cHBjX3RsYl9pbnZhbGlkYXRlX2FsbChDUFVQUENTdGF0ZSAqZW52KQ0KwqDCoMKgwqDCoGNh c2UgUE9XRVJQQ19NTVVfMl8wNmE6DQrCoMKgwqDCoMKgY2FzZSBQT1dFUlBDX01NVV8yXzA3 Og0KwqDCoMKgwqDCoGNhc2UgUE9XRVJQQ19NTVVfMl8wN2E6DQotwqDCoMKgwqDCoMKgwqDC oGVudi0+dGxiX25lZWRfZmx1c2ggPSAwOw0KwqAjZW5kaWYgLyogZGVmaW5lZChUQVJHRVRf UFBDNjQpICovDQorwqDCoMKgwqDCoMKgwqDCoGVudi0+dGxiX25lZWRfZmx1c2ggPSAwOw0K wqDCoMKgwqDCoMKgwqDCoMKgdGxiX2ZsdXNoKENQVShjcHUpLCAxKTsNCsKgwqDCoMKgwqDC oMKgwqDCoGJyZWFrOw0KwqDCoMKgwqDCoGRlZmF1bHQ6DQpAQCAtMTk0OSw5ICsxOTQ5LDYg QEAgdm9pZCBwcGNfdGxiX2ludmFsaWRhdGVfYWxsKENQVVBQQ1N0YXRlICplbnYpDQrCoHZv aWQgcHBjX3RsYl9pbnZhbGlkYXRlX29uZShDUFVQUENTdGF0ZSAqZW52LCB0YXJnZXRfdWxv bmcgYWRkcikNCsKgew0KwqAjaWYgIWRlZmluZWQoRkxVU0hfQUxMX1RMQlMpDQotwqDCoMKg wqBQb3dlclBDQ1BVICpjcHUgPSBwcGNfZW52X2dldF9jcHUoZW52KTsNCi3CoMKgwqDCoENQ VVN0YXRlICpjczsNCi0NCsKgwqDCoMKgwqBhZGRyICY9IFRBUkdFVF9QQUdFX01BU0s7DQrC oMKgwqDCoMKgc3dpdGNoIChlbnYtPm1tdV9tb2RlbCkgew0KwqDCoMKgwqDCoGNhc2UgUE9X RVJQQ19NTVVfU09GVF82eHg6DQpAQCAtMTk2MywzNiArMTk2MCwxMiBAQCB2b2lkIHBwY190 bGJfaW52YWxpZGF0ZV9vbmUoQ1BVUFBDU3RhdGUgKmVudiwgdGFyZ2V0X3Vsb25nIGFkZHIp DQrCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCsKgwqDCoMKgwqBjYXNlIFBPV0VSUENfTU1V XzMyQjoNCsKgwqDCoMKgwqBjYXNlIFBPV0VSUENfTU1VXzYwMToNCi3CoMKgwqDCoMKgwqDC oMKgLyogdGxiaWUgaW52YWxpZGF0ZSBUTEJzIGZvciBhbGwgc2VnbWVudHMgKi8NCi3CoMKg wqDCoMKgwqDCoMKgYWRkciAmPSB+KCh0YXJnZXRfdWxvbmcpLTFVTEwgPDwgMjgpOw0KLcKg wqDCoMKgwqDCoMKgwqBjcyA9IENQVShjcHUpOw0KLcKgwqDCoMKgwqDCoMKgwqAvKiBYWFg6 IHRoaXMgY2FzZSBzaG91bGQgYmUgb3B0aW1pemVkLA0KLcKgwqDCoMKgwqDCoMKgwqDCoCog Z2l2aW5nIGEgbWFzayB0byB0bGJfZmx1c2hfcGFnZQ0KLcKgwqDCoMKgwqDCoMKgwqDCoCov DQotwqDCoMKgwqDCoMKgwqDCoC8qIFRoaXMgaXMgYnJva2VuLCBzb21lIENQVXMgaW52YWxp ZGF0ZSBhIHdob2xlIGNvbmdydWVuY2UNCi3CoMKgwqDCoMKgwqDCoMKgwqAqIGNsYXNzIG9u IGFuIGV2ZW4gc21hbGxlciBzdWJzZXQgb2YgYml0cyBhbmQgc29tZSBPU2VzIHRha2UNCi3C oMKgwqDCoMKgwqDCoMKgwqAqIGFkdmFudGFnZSBvZiB0aGlzLiBKdXN0IGJsb3cgdGhlIHdo b2xlIHRoaW5nIGF3YXkuDQorwqDCoMKgwqDCoMKgwqDCoC8qIEFjdHVhbCBDUFVzIGludmFs aWRhdGUgZW50aXJlIGNvbmdydWVuY2UgY2xhc3NlcyBiYXNlZCBvbiB0aGUNCivCoMKgwqDC oMKgwqDCoMKgwqAqIGdlb21ldHJ5IG9mIHRoZWlyIFRMQnMgYW5kIHNvbWUgT1NlcyB0YWtl IHRoYXQgaW50byBhY2NvdW50LA0KK8KgwqDCoMKgwqDCoMKgwqDCoCogd2UganVzdCBtYXJr IHRoZSBUTEIgdG8gYmUgZmx1c2hlZCBsYXRlciAoY29udGV4dCBzeW5jaHJvbml6aW5nDQor wqDCoMKgwqDCoMKgwqDCoMKgKiBldmVudCBvciBzeW5jIGluc3RydWN0aW9uIG9uIDMyLWJp dCkuDQrCoMKgwqDCoMKgwqDCoMKgwqDCoCovDQotI2lmIDANCi3CoMKgwqDCoMKgwqDCoMKg dGxiX2ZsdXNoX3BhZ2UoY3MsIGFkZHIgfCAoMHgwIDw8IDI4KSk7DQotwqDCoMKgwqDCoMKg wqDCoHRsYl9mbHVzaF9wYWdlKGNzLCBhZGRyIHwgKDB4MSA8PCAyOCkpOw0KLcKgwqDCoMKg wqDCoMKgwqB0bGJfZmx1c2hfcGFnZShjcywgYWRkciB8ICgweDIgPDwgMjgpKTsNCi3CoMKg wqDCoMKgwqDCoMKgdGxiX2ZsdXNoX3BhZ2UoY3MsIGFkZHIgfCAoMHgzIDw8IDI4KSk7DQot wqDCoMKgwqDCoMKgwqDCoHRsYl9mbHVzaF9wYWdlKGNzLCBhZGRyIHwgKDB4NCA8PCAyOCkp Ow0KLcKgwqDCoMKgwqDCoMKgwqB0bGJfZmx1c2hfcGFnZShjcywgYWRkciB8ICgweDUgPDwg MjgpKTsNCi3CoMKgwqDCoMKgwqDCoMKgdGxiX2ZsdXNoX3BhZ2UoY3MsIGFkZHIgfCAoMHg2 IDw8IDI4KSk7DQotwqDCoMKgwqDCoMKgwqDCoHRsYl9mbHVzaF9wYWdlKGNzLCBhZGRyIHwg KDB4NyA8PCAyOCkpOw0KLcKgwqDCoMKgwqDCoMKgwqB0bGJfZmx1c2hfcGFnZShjcywgYWRk ciB8ICgweDggPDwgMjgpKTsNCi3CoMKgwqDCoMKgwqDCoMKgdGxiX2ZsdXNoX3BhZ2UoY3Ms IGFkZHIgfCAoMHg5IDw8IDI4KSk7DQotwqDCoMKgwqDCoMKgwqDCoHRsYl9mbHVzaF9wYWdl KGNzLCBhZGRyIHwgKDB4QSA8PCAyOCkpOw0KLcKgwqDCoMKgwqDCoMKgwqB0bGJfZmx1c2hf cGFnZShjcywgYWRkciB8ICgweEIgPDwgMjgpKTsNCi3CoMKgwqDCoMKgwqDCoMKgdGxiX2Zs dXNoX3BhZ2UoY3MsIGFkZHIgfCAoMHhDIDw8IDI4KSk7DQotwqDCoMKgwqDCoMKgwqDCoHRs Yl9mbHVzaF9wYWdlKGNzLCBhZGRyIHwgKDB4RCA8PCAyOCkpOw0KLcKgwqDCoMKgwqDCoMKg wqB0bGJfZmx1c2hfcGFnZShjcywgYWRkciB8ICgweEUgPDwgMjgpKTsNCi3CoMKgwqDCoMKg wqDCoMKgdGxiX2ZsdXNoX3BhZ2UoY3MsIGFkZHIgfCAoMHhGIDw8IDI4KSk7DQotI2Vsc2UN Ci3CoMKgwqDCoMKgwqDCoMKgdGxiX2ZsdXNoKGNzLCAxKTsNCi0jZW5kaWYNCivCoMKgwqDC oMKgwqDCoMKgZW52LT50bGJfbmVlZF9mbHVzaCA9IDE7DQrCoMKgwqDCoMKgwqDCoMKgwqBi cmVhazsNCsKgI2lmIGRlZmluZWQoVEFSR0VUX1BQQzY0KQ0KwqDCoMKgwqDCoGNhc2UgUE9X RVJQQ19NTVVfNjRCOg0KQEAgLTIwNTgsMTMgKzIwMzEsMTIgQEAgdGFyZ2V0X3Vsb25nIGhl bHBlcl9sb2FkX3NyKENQVVBQQ1N0YXRlICplbnYsIHRhcmdldF91bG9uZyBzcl9udW0pDQrC oA0KwqB2b2lkIGhlbHBlcl9zdG9yZV9zcihDUFVQUENTdGF0ZSAqZW52LCB0YXJnZXRfdWxv bmcgc3JudW0sIHRhcmdldF91bG9uZyB2YWx1ZSkNCsKgew0KLcKgwqDCoMKgUG93ZXJQQ0NQ VSAqY3B1ID0gcHBjX2Vudl9nZXRfY3B1KGVudik7DQotDQrCoMKgwqDCoMKgcWVtdV9sb2df bWFzayhDUFVfTE9HX01NVSwNCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiVzOiByZWc9 JWQgIiBUQVJHRVRfRk1UX2x4ICIgIiBUQVJHRVRfRk1UX2x4ICJcbiIsIF9fZnVuY19fLA0K wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoaW50KXNybnVtLCB2YWx1ZSwgZW52LT5zcltz cm51bV0pOw0KwqAjaWYgZGVmaW5lZChUQVJHRVRfUFBDNjQpDQrCoMKgwqDCoMKgaWYgKGVu di0+bW11X21vZGVsICYgUE9XRVJQQ19NTVVfNjQpIHsNCivCoMKgwqDCoMKgwqDCoMKgUG93 ZXJQQ0NQVSAqY3B1ID0gcHBjX2Vudl9nZXRfY3B1KGVudik7DQrCoMKgwqDCoMKgwqDCoMKg wqB1aW50NjRfdCBlc2lkLCB2c2lkOw0KwqANCsKgwqDCoMKgwqDCoMKgwqDCoC8qIEVTSUQg PSBzcm51bSAqLw0KQEAgLTIwOTMsNyArMjA2NSw3IEBAIHZvaWQgaGVscGVyX3N0b3JlX3Ny KENQVVBQQ1N0YXRlICplbnYsIHRhcmdldF91bG9uZyBzcm51bSwgdGFyZ2V0X3Vsb25nIHZh bHVlKQ0KwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQrCoMKgwqDCoMKgwqDCoMKgwqB9 DQrCoCNlbHNlDQotwqDCoMKgwqDCoMKgwqDCoHRsYl9mbHVzaChDUFUoY3B1KSwgMSk7DQor wqDCoMKgwqDCoMKgwqDCoGVudi0+dGxiX25lZWRfZmx1c2ggPSAxOw0KwqAjZW5kaWYNCsKg wqDCoMKgwqB9DQrCoH0NCmRpZmYgLS1naXQgYS90YXJnZXQtcHBjL3RyYW5zbGF0ZS5jIGIv dGFyZ2V0LXBwYy90cmFuc2xhdGUuYw0KaW5kZXggNzc2MzQzMS4uYWI1ODYyZiAxMDA2NDQN Ci0tLSBhL3RhcmdldC1wcGMvdHJhbnNsYXRlLmMNCisrKyBiL3RhcmdldC1wcGMvdHJhbnNs YXRlLmMNCkBAIC0xOTMsNiArMTkzLDcgQEAgc3RydWN0IERpc2FzQ29udGV4dCB7DQrCoMKg wqDCoMKgdWludDMyX3QgZXhjZXB0aW9uOw0KwqDCoMKgwqDCoC8qIFJvdXRpbmUgdXNlZCB0 byBhY2Nlc3MgbWVtb3J5ICovDQrCoMKgwqDCoMKgYm9vbCBwciwgaHY7DQorwqDCoMKgwqBi b29sIGxhenlfdGxiX2ZsdXNoOw0KwqDCoMKgwqDCoGludCBtZW1faWR4Ow0KwqDCoMKgwqDC oGludCBhY2Nlc3NfdHlwZTsNCsKgwqDCoMKgwqAvKiBUcmFuc2xhdGlvbiBmbGFncyAqLw0K QEAgLTMyOTAsMTIgKzMyOTEsMTcgQEAgc3RhdGljIHZvaWQgZ2VuX2VpZWlvKERpc2FzQ29u dGV4dCAqY3R4KQ0KwqB7DQrCoH0NCsKgDQotI2lmICFkZWZpbmVkKENPTkZJR19VU0VSX09O TFkpICYmIGRlZmluZWQoVEFSR0VUX1BQQzY0KQ0KKyNpZiAhZGVmaW5lZChDT05GSUdfVVNF Ul9PTkxZKQ0KwqBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX2NoZWNrX3RsYl9mbHVzaChEaXNh c0NvbnRleHQgKmN0eCkNCsKgew0KLcKgwqDCoMKgVENHdl9pMzIgdCA9IHRjZ190ZW1wX25l d19pMzIoKTsNCi3CoMKgwqDCoFRDR0xhYmVsICpsID0gZ2VuX25ld19sYWJlbCgpOw0KK8Kg wqDCoMKgVENHdl9pMzIgdDsNCivCoMKgwqDCoFRDR0xhYmVsICpsOw0KwqANCivCoMKgwqDC oGlmICghY3R4LT5sYXp5X3RsYl9mbHVzaCkgew0KK8KgwqDCoMKgwqDCoMKgwqByZXR1cm47 DQorwqDCoMKgwqB9DQorwqDCoMKgwqBsID0gZ2VuX25ld19sYWJlbCgpOw0KK8KgwqDCoMKg dCA9IHRjZ190ZW1wX25ld19pMzIoKTsNCsKgwqDCoMKgwqB0Y2dfZ2VuX2xkX2kzMih0LCBj cHVfZW52LCBvZmZzZXRvZihDUFVQUENTdGF0ZSwgdGxiX25lZWRfZmx1c2gpKTsNCsKgwqDC oMKgwqB0Y2dfZ2VuX2JyY29uZGlfaTMyKFRDR19DT05EX0VRLCB0LCAwLCBsKTsNCsKgwqDC oMKgwqBnZW5faGVscGVyX2NoZWNrX3RsYl9mbHVzaChjcHVfZW52KTsNCkBAIC0zNDc1LDEw ICszNDgxLDE0IEBAIHN0YXRpYyB2b2lkIGdlbl9zeW5jKERpc2FzQ29udGV4dCAqY3R4KQ0K wqDCoMKgwqDCoHVpbnQzMl90IGwgPSAoY3R4LT5vcGNvZGUgPj4gMjEpICYgMzsNCsKgDQrC oMKgwqDCoMKgLyoNCi3CoMKgwqDCoMKgKiBGb3IgbCA9PSAyLCBpdCdzIGEgcHRlc3luYywg V2UgbmVlZCB0byBjaGVjayBmb3IgYSBwZW5kaW5nIFRMQiBmbHVzaC4NCi3CoMKgwqDCoMKg KiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBrZXJuZWwgbW9kZSBob3dldmVyIHNvIGNoZWNr IE1TUl9QUiBhcyB3ZWxsLg0KK8KgwqDCoMKgwqAqIFdlIG1heSBuZWVkIHRvIGNoZWNrIGZv ciBhIHBlbmRpbmcgVExCIGZsdXNoLg0KK8KgwqDCoMKgwqAqDQorwqDCoMKgwqDCoCogV2Ug ZG8gdGhpcyBvbiBwdGVzeW5jIChsID09IDIpIG9uIHBwYzY0IGFuZCBhbnkgc3luYyBwbiBw cGMzMi4NCivCoMKgwqDCoMKgKg0KK8KgwqDCoMKgwqAqIEFkZGl0aW9uYWxseSwgdGhpcyBj YW4gb25seSBoYXBwZW4gaW4ga2VybmVsIG1vZGUgaG93ZXZlciBzbw0KK8KgwqDCoMKgwqAq IGNoZWNrIE1TUl9QUiBhcyB3ZWxsLg0KwqDCoMKgwqDCoMKgKi8NCi3CoMKgwqDCoGlmIChs ID09IDIgJiYgIWN0eC0+cHIpIHsNCivCoMKgwqDCoGlmICgoKGwgPT0gMikgfHwgIShjdHgt Pmluc25zX2ZsYWdzICYgUFBDXzY0QikpICYmICFjdHgtPnByKSB7DQrCoMKgwqDCoMKgwqDC oMKgwqBnZW5fY2hlY2tfdGxiX2ZsdXNoKGN0eCk7DQrCoMKgwqDCoMKgfQ0KwqB9DQpAQCAt MTE0OTEsNiArMTE1MDEsMTEgQEAgdm9pZCBnZW5faW50ZXJtZWRpYXRlX2NvZGUoQ1BVUFBD U3RhdGUgKmVudiwgc3RydWN0IFRyYW5zbGF0aW9uQmxvY2sgKnRiKQ0KwqDCoMKgwqDCoGN0 eC5zZl9tb2RlID0gbXNyX2lzXzY0Yml0KGVudiwgZW52LT5tc3IpOw0KwqDCoMKgwqDCoGN0 eC5oYXNfY2ZhciA9ICEhKGVudi0+ZmxhZ3MgJiBQT1dFUlBDX0ZMQUdfQ0ZBUik7DQrCoCNl bmRpZg0KK8KgwqDCoMKgaWYgKGVudi0+bW11X21vZGVsID09IFBPV0VSUENfTU1VXzMyQiB8 fA0KK8KgwqDCoMKgwqDCoMKgwqBlbnYtPm1tdV9tb2RlbCA9PSBQT1dFUlBDX01NVV82MDEg fHwNCivCoMKgwqDCoMKgwqDCoMKgKGVudi0+bW11X21vZGVsICYgUE9XRVJQQ19NTVVfNjRC KSkNCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjdHgubGF6eV90bGJfZmx1c2ggPSB0cnVl Ow0KKw0KwqDCoMKgwqDCoGN0eC5mcHVfZW5hYmxlZCA9IG1zcl9mcDsNCsKgwqDCoMKgwqBp ZiAoKGVudi0+ZmxhZ3MgJiBQT1dFUlBDX0ZMQUdfU1BFKSAmJiBtc3Jfc3BlKQ0KwqDCoMKg wqDCoMKgwqDCoMKgY3R4LnNwZV9lbmFibGVkID0gbXNyX3NwZTsNCg0KDQo=