From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.jd.com (smtp.jd.com [58.83.206.59]) by dpdk.org (Postfix) with ESMTP id B60BB23C for ; Tue, 23 Jan 2018 11:26:19 +0100 (CET) Received: from HUB09.360buyAD.local (172.17.27.46) by HUB01.360buyAD.local (172.17.27.15) with Microsoft SMTP Server (TLS) id 14.3.361.1; Tue, 23 Jan 2018 18:26:11 +0800 Received: from MBX05.360buyAD.local ([fe80::7043:229a:8a1b:2ced]) by HUB09.360buyAD.local ([fe80::ddc7:cbc2:4efc:fdc5%13]) with mapi id 14.03.0361.001; Tue, 23 Jan 2018 18:26:07 +0800 From: =?utf-8?B?546L5b+X5YWL?= To: Yuanhan Liu CC: "dev@dpdk.org" , "dev@openvswitch.org" Thread-Topic: OVS+DPDK: deadlock and race condtion, which leads OVS deadlock or crash Thread-Index: AdOUMaxEfMj0tcpHTFWVe/3SA9DmtQ== Date: Tue, 23 Jan 2018 10:26:07 +0000 Message-ID: <6DAF063A35010343823807B082E5681F41D8E1F9@mbx05.360buyAD.local> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.17.27.83] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: [dpdk-dev] OVS+DPDK: deadlock and race condtion, which leads OVS deadlock or crash 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: , X-List-Received-Date: Tue, 23 Jan 2018 10:26:21 -0000 SGkgWXVhbmhhIGFuZCBhbGwsDQoNClRoYW5rcyBmb3IgcmV2aWV3LiBJIGNoYW5nZSB0aGUgdGl0 bGUgYW5kIGxldCBtb3JlIHBlb3BsZSBpbnZvbHZlZC4NCg0KVGhlIGlzc3VlcyBjYW4gYmUgcmVw cm9kdWNlZCBlYXNpbHkgd2l0aCBPVlMuIA0KVGhlIHN0ZXBzIGFyZSBiZWxvdzoNCjEpIHZpcnNo IHN0YXJ0IHZtDQoyKSBvdnMtdnNjdGwgYWRkIHBvcnQNCjMpIGRlbGV0ZSB0aGUgcG9ydCB2aWEg b3ZzLXZzY3RsIGRlbC1wb3J0Lg0KNCkgc2h1dGRvd24gVk0gdmlhIHZyaXNoIGRlc3Ryb3kuDQoN CkkgcnVuIGEgc2NyaXB0IHRvIHJlcGVhdGx5IGRvIHN1Y2ggam9iIGZvciAyIFZNLCBhbmQgaXQg bmVlZHMgYWJvdXQgMSBob3VyIHRvIHJlcHJvZHVjZSBpdC4gDQoNCkhvd2V2ZXIsIEkgZm91bmQg dGhlcmUgYXJlIG1vcmUgaXNzdWVzIChJIGNhbiByZXByb2R1Y2UgaXQpOg0KDQoxKSBzZWUgYmVs b3cgY29kZQ0Kc3RhdGljIHZvaWQNCnZob3N0X3VzZXJfcmVhZF9jYihpbnQgY29ubmZkLCB2b2lk ICpkYXQsIGludCAqcmVtb3ZlKQ0Kew0KCXN0cnVjdCB2aG9zdF91c2VyX2Nvbm5lY3Rpb24gKmNv bm4gPSBkYXQ7DQoJc3RydWN0IHZob3N0X3VzZXJfc29ja2V0ICp2c29ja2V0ID0gY29ubi0+dnNv Y2tldDsNCglpbnQgcmV0Ow0KDQoJcmV0ID0gdmhvc3RfdXNlcl9tc2dfaGFuZGxlcihjb25uLT52 aWQsIGNvbm5mZCk7DQoJaWYgKHJldCA8IDApIHsNCgkJY2xvc2UoY29ubmZkKTsNCgkJKnJlbW92 ZSA9IDE7DQoJCXZob3N0X2Rlc3Ryb3lfZGV2aWNlKGNvbm4tPnZpZCk7DQoNCgkJcHRocmVhZF9t dXRleF9sb2NrKCZ2c29ja2V0LT5jb25uX211dGV4KTsNCgkJVEFJTFFfUkVNT1ZFKCZ2c29ja2V0 LT5jb25uX2xpc3QsIGNvbm4sIG5leHQpOw0KCQlwdGhyZWFkX211dGV4X3VubG9jaygmdnNvY2tl dC0+Y29ubl9tdXRleCk7DQoNCgkJZnJlZShjb25uKTsNCiAgICAgICAgICAgICAgICAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT4gW1poaWtlIFdhbmddIHdlIGNhbiBzZWUgdGhhdCB0aGUgdnNv Y2tldCBkb2VzIG5vdCBleGlzdCBpbiBjb25uX2xpc3Qgb3IgcmVjb25uX2xpc3QgYXQgdGhpcyBz aG9ydCB0aW1lIHNsb3QuIFNvIGluIHRoaXMgdGltZSwgaWYgcnRlX3Zob3N0X2RyaXZlcl91bnJl Z2lzdGVyKCkgaXMgY2FsbGVkLCB2c29ja2V0IGlzIGZyZWVkLiBTbyBiZWxvdyB2aG9zdF91c2Vy X2NyZWF0ZV9jbGllbnQoKSBtYXkgdXNlIHJhdyBwb2ludGVyLCBhbmQgbGVhZCB0byBjcmFzaC4N Cg0KCQlpZiAodnNvY2tldC0+cmVjb25uZWN0KQ0KCQkJdmhvc3RfdXNlcl9jcmVhdGVfY2xpZW50 KHZzb2NrZXQpOw0KCX0NCn0NCg0KMikgcmVnYXJkaW5nIHRoZSBhYm92ZSBpc3N1ZSwgSSB0aGlu ayB3ZSBuZWVkIG9uZSBtdXRleCB0byBsb2NrIGNvbm5fbGlzdCBhbmQgcmVjb25uX2xpc3QsIHNv IHRoZSB2c29ja2V0IGNhbiBpbiBlaXRoZXIgY29ubl9saXN0IG9yIHJlY29ubl9saXN0LCBub3Qg Ym90aCBvciBub25lLiBTbyBJIHVzZSB2aG9zdF91c2VyLm11dGV4KCkgDQpkaWZmIC0tZ2l0IGEv ZHBkay0xNi4xMS4zL2xpYi9saWJydGVfdmhvc3QvZmRfbWFuLmMgYi9kcGRrLTE2LjExLjMvbGli L2xpYnJ0ZV92aG9zdC9mZF9tYW4uYw0KQEAgLTIzMyw2ICsyMzQsNyBAQA0KICAgICAgICAgICAg ICAgIHBvbGwocGZkc2V0LT5yd2ZkcywgbnVtZmRzLCAxMDAwIC8qIG1pbGxpc2VjcyAqLyk7DQoN CiAgICAgICAgICAgICAgICBuZWVkX3NocmluayA9IDA7DQorICAgICAgICAgICAgICAgIHB0aHJl YWRfbXV0ZXhfbG9jaygmdmhvc3RfdXNlci5tdXRleCk7DQogICAgICAgICAgICAgICAgZm9yIChp ID0gMDsgaSA8IG51bWZkczsgaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFk X211dGV4X2xvY2soJnBmZHNldC0+ZmRfbXV0ZXgpOw0KDQpAQCAtMjY0LDcgKzI2NiwxMCBAQA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY2IoZmQsIGRhdCwgJnJlbW92ZTEpOw0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdjYiAmJiBwZmQtPnJldmVudHMgJiAoUE9MTE9V VCB8IEZEUE9MTEVSUikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjYihmZCwg ZGF0LCAmcmVtb3ZlMik7DQorDQorICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4 X2xvY2soJnBmZHNldC0+ZmRfbXV0ZXgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcGZkZW50 cnktPmJ1c3kgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxv Y2soJnBmZHNldC0+ZmRfbXV0ZXgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgLyoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAqIGZkc2V0X2RlbCBuZWVkcyB0byBjaGVjayBidXN5IGZsYWcu DQogICAgICAgICAgICAgICAgICAgICAgICAgKiBXZSBkb24ndCBhbGxvdyBmZHNldF9kZWwgdG8g YmUgY2FsbGVkIGluIGNhbGxiYWNrDQpAQCAtMjg1LDUgKzI5MCw2IEBADQoNCiAgICAgICAgICAg ICAgICBpZiAobmVlZF9zaHJpbmspDQogICAgICAgICAgICAgICAgICAgICAgICBmZHNldF9zaHJp bmsocGZkc2V0KTsNCisgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnZob3N0 X3VzZXIubXV0ZXgpOw0KDQoNCkBAIC0zOTAsNiArMzk1LDggQEAgc3RydWN0IHZob3N0X3VzZXJf cmVjb25uZWN0X2xpc3Qgew0KICAgICAgICBzdHJ1Y3Qgdmhvc3RfdXNlcl9yZWNvbm5lY3QgKnJl Y29ubiwgKm5leHQ7DQoNCiAgICAgICAgd2hpbGUgKDEpIHsNCisNCisgICAgICAgICAgICAgICBw dGhyZWFkX211dGV4X2xvY2soJnZob3N0X3VzZXIubXV0ZXgpOw0KICAgICAgICAgICAgICAgIHB0 aHJlYWRfbXV0ZXhfbG9jaygmcmVjb25uX2xpc3QubXV0ZXgpOw0KDQogICAgICAgICAgICAgICAg LyoNCkBAIC00MTcsMTEgKzQyNCwxOCBAQCBzdHJ1Y3Qgdmhvc3RfdXNlcl9yZWNvbm5lY3RfbGlz dCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogY29ubmVjdGVkXG4iLCBy ZWNvbm4tPnZzb2NrZXQtPnBhdGgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgdmhvc3RfdXNl cl9hZGRfY29ubmVjdGlvbihyZWNvbm4tPmZkLCByZWNvbm4tPnZzb2NrZXQpOw0KIHJlbW92ZV9m ZDoNCg0KICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyZWNvbm5fbGlzdC5t dXRleCk7DQorICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnZob3N0X3VzZXIu bXV0ZXgpOw0KICAgICAgICAgICAgICAgIHNsZWVwKDEpOw0KICAgICAgICB9DQoNClRoZW4gSSBt ZXQgYSBkZWFkbG9jayAoYW5vdGhlciB0aHJlYWQgZW50ZXJzIHJ0ZV92aG9zdF9kcml2ZXJfdW5y ZWdpc3RlciwgYW5kIHdhaXRpbmcgZm9yIHZob3N0X3VzZXIubXV0ZXguKSANCihnZGIpIGJ0DQoj MCAgMHgwMDAwN2ZlYmZhZjhlYmNkIGluIHBvbGwgKCkgZnJvbSAvbGliNjQvbGliYy5zby42DQoj MSAgMHgwMDAwN2ZlYzAyOWI2ODM2IGluIHBvbGwgKF9fdGltZW91dD08b3B0aW1pemVkIG91dD4s IF9fbmZkcz0yLCBfX2Zkcz0weDdmZWJlODAwMDhjMCkgYXQgL3Vzci9pbmNsdWRlL2JpdHMvcG9s bDIuaDo0Ng0KIzIgIHRpbWVfcG9sbCAocG9sbGZkcz1wb2xsZmRzQGVudHJ5PTB4N2ZlYmU4MDAw OGMwLCBuX3BvbGxmZHM9MiwgaGFuZGxlcz1oYW5kbGVzQGVudHJ5PTB4MCwgdGltZW91dF93aGVu PTQwOTg5OTA4MTksIGVsYXBzZWQ9ZWxhcHNlZEBlbnRyeT0weDdmZWJmNzQ1MDI5MCkgYXQgbGli L3RpbWV2YWwuYzozMDUNCiMzICAweDAwMDA3ZmVjMDI5OWFmZWEgaW4gcG9sbF9ibG9jayAoKSBh dCBsaWIvcG9sbC1sb29wLmM6MzY0DQojNCAgMHgwMDAwN2ZlYzAyOTdkYTI1IGluIG92c3JjdV9z eW5jaHJvbml6ZSAoKSBhdCBsaWIvb3ZzLXJjdS5jOjIzMQ0KIzUgIDB4MDAwMDdmZWMwMjllOTQ3 NyBpbiBkZXN0cm95X2RldmljZSAodmlkPTxvcHRpbWl6ZWQgb3V0PikgYXQgbGliL25ldGRldi1k cGRrLmM6MjY1MQ0KIzYgIDB4MDAwMDdmZWMwMTk1ZGIwNCBpbiB2aG9zdF9kZXN0cm95X2Rldmlj ZSAodmlkPTxvcHRpbWl6ZWQgb3V0PikgYXQgL2xpYi9saWJydGVfdmhvc3Qvdmhvc3QuYzoyNzcN CiM3ICAweDAwMDA3ZmVjMDE5NWNiZGMgaW4gdmhvc3RfdXNlcl9yZWFkX2NiIChjb25uZmQ9PG9w dGltaXplZCBvdXQ+LCBkYXQ9MHg3ZmViYzgwMDA4YzAsIHJlbW92ZT0weDdmZWJmNzQ1MTQyMCkg YXQgL2xpYi9saWJydGVfdmhvc3Qvc29ja2V0LmM6MjY5DQojOCAgMHgwMDAwN2ZlYzAxOTVjMjAw IGluIGZkc2V0X2V2ZW50X2Rpc3BhdGNoIChwZmRzZXQ9cGZkc2V0QGVudHJ5PTB4N2ZlYzAxYjcw MTgwIDx2aG9zdF91c2VyKzgxOTI+KSBhdCAvbGliL2xpYnJ0ZV92aG9zdC9mZF9tYW4uYzoyNjYN CiM5ICAweDAwMDA3ZmVjMDE5NWQ2NDcgaW4gcnRlX3Zob3N0X2RyaXZlcl9zZXNzaW9uX3N0YXJ0 ICgpIGF0IC9saWIvbGlicnRlX3Zob3N0L3NvY2tldC5jOjcxNA0KIzEwIDB4MDAwMDdmZWMwMjll NjYxYiBpbiBzdGFydF92aG9zdF9sb29wIChkdW1teT08b3B0aW1pemVkIG91dD4pIGF0IGxpYi9u ZXRkZXYtZHBkay5jOjI3MzYNCiMxMSAweDAwMDA3ZmVjMDI5N2Y3OTYgaW4gb3ZzdGhyZWFkX3dy YXBwZXIgKGF1eF89PG9wdGltaXplZCBvdXQ+KSBhdCBsaWIvb3ZzLXRocmVhZC5jOjM0OA0KIzEy IDB4MDAwMDdmZWJmYjliNmRjNSBpbiBzdGFydF90aHJlYWQgKCkgZnJvbSAvbGliNjQvbGlicHRo cmVhZC5zby4wDQojMTMgMHgwMDAwN2ZlYmZhZjk5MjFkIGluIGNsb25lICgpIGZyb20gL2xpYjY0 L2xpYmMuc28uNg0KKGdkYikgbg0KDQoNClNvIG5vdyBJIGJlbGlldmUgaXQgaXMgaGFyZCB0byBm aXggdGhlIGlzc3VlcyBpbnNpZGVzIHRoZSBtb2R1bGVzLCBhbmQgSSB3b3VsZCBsaWtlIHRvIHBy ZXNlbnQgaWRlbnRpZmllZCBpc3N1ZXMsIGFuZCB3YW50IHRvIGhlYXIgeW91ciBwcm9wb3NhbCBv ciBmaXguDQoNCkJyLA0KWmhpa2UgV2FuZw0KDQoNCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCkZyb206IFl1YW5oYW4gTGl1IFttYWlsdG86eWxpdUBmcmlkYXlsaW51eC5vcmddIA0KU2Vu dDogVGh1cnNkYXksIEphbnVhcnkgMTgsIDIwMTggMTA6MDQgUE0NClRvOiDnjovlv5flhYsNCkNj OiBkZXZAZHBkay5vcmcNClN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2M10gbGliL2xp YnJ0ZV92aG9zdDogbW92ZSBmZHNldF9kZWwgb3V0IG9mIGNvbm5fbXV0ZXgNCg0KSGksDQoNCkFw b2xvZ2l6ZSBmb3IgbGF0ZSByZXZpZXcuDQoNCk9uIFR1ZSwgSmFuIDAyLCAyMDE4IGF0IDAyOjA4 OjM2QU0gLTA4MDAsIHpoaWtlIHdhbmcgd3JvdGU6DQo+IEZyb206IHdhbmcgemhpa2UgPHdhbmd6 aGlrZUBqZC5jb20+DQo+IA0KPiB2MzoNCj4gKiBGaXggZHVwbGljYXRlIHZhcmlhYmxlIG5hbWUs IHdoaWNoIGxlYWRzIHRvIHVuZXhwZWN0ZWQgbWVtb3J5IHdyaXRlLg0KPiB2MjoNCj4gKiBNb3Zl IGZkc2V0X2RlbCBiZWZvcmUgY29ubiBkZXN0cm95Lg0KPiAqIEZpeCBjb2Rpbmcgc3R5bGUuDQoN Ck5vdGUgdGhhdCB3ZSBwcmVmZXIgdG8gcHV0IHRoZSBjaGFuZ2UgbG9ncyBhZnRlciAiLS0tIiBi ZWxvdyBTaWduZWQtb2ZmLWJ5LA0Kc28gdGhhdCB0aG9zZSBjaGFuZ2UgbG9ncyB3b24ndCBiZSB0 cmFja2VkIGluIHRoZSBnaXQgbG9nIGhpc3RvcnkuDQoNCj4gVGhpcyBwYXRjaCBmaXhlcyBiZWxv dyByYWNlIGNvbmRpdGlvbjoNCj4gMS4gb25lIHRocmVhZCBjYWxsczogcnRlX3Zob3N0X2RyaXZl cl91bnJlZ2lzdGVyLT5sb2NrIGNvbm5fbXV0ZXgNCj4gICAgLT5mZHNldF9kZWwtPmxvb3AgdG8g Y2hlY2sgZmQuYnVzeS4NCj4gMi4gYW5vdGhlciB0aHJlYWQgY2FsbHMgZmRzZXRfZXZlbnRfZGlz cGF0Y2gsIGFuZCB0aGUgYnVzeSBmbGFnIGlzDQo+ICAgIGNoYW5nZWQgQUZURVIgaGFuZGxpbmcg b24gdGhlIGZkLCBpLmUsIHJjYigpLiBIb3dldmVyLCB0aGUgcmNiLA0KPiAgICBzdWNoIGFzIHZo b3N0X3VzZXJfcmVhZF9jYigpIHdvdWxkIHRyeSB0byByZXRyaWV2ZSB0aGUgY29ubl9tdXRleC4N Cj4gDQo+IFNvIGlzc3VlIGlzIHRoYXQgdGhlIDFzdCB0aHJlYWQgd2lsbCBsb29wIGNoZWNrIHRo ZSBmbGFnIHdoaWxlIGhvbGRpbmcNCj4gdGhlIG11dGV4LCB3aGlsZSB0aGUgMm5kIHRocmVhZCB3 b3VsZCBiZSBibG9ja2VkIGJ5IG11dGV4IGFuZCBjYW4gbm90DQo+IGNoYW5nZSB0aGUgZmxhZy4g VGhlbiBkZWFkIGxvY2sgaXMgb2JzZXJ2ZWQuDQoNCkkgdGhlbiB3b3VsZCBjaGFuZ2UgdGhlIHRp dGxlIHRvICJ2aG9zdDogZml4IGRlYWRsb2NrIi4NCg0KSSdtIGFsc28ga2VlbiB0byBrbm93IGhv dyBkbyB5b3UgcmVwcm9kdWNlIHRoaXMgaXNzdWUgd2l0aCByZWFsLWxpZmUNCkFQUCAoc2F5IG92 cykgYW5kIGhvdyBlYXN5IGl0IGlzIGZvciByZXByb2R1Y2UuDQoNCj4gU2lnbmVkLW9mZi1ieTog emhpa2Ugd2FuZyA8d2FuZ3poaWtlQGpkLmNvbT4NCg0KQWdhaW4sIHlvdSBuZWVkIGZpeCB5b3Vy IGdpdCBjb25maWcgZmlsZSBhYm91dCB5b3VyIG5hbWUuDQoNCj4gLS0tDQo+ICBsaWIvbGlicnRl X3Zob3N0L3NvY2tldC5jIHwgMTggKysrKysrKysrKysrKysrKystDQo+ICAxIGZpbGUgY2hhbmdl ZCwgMTcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfdmhvc3Qvc29ja2V0LmMgYi9saWIvbGlicnRlX3Zob3N0L3NvY2tldC5jDQo+IGlu ZGV4IDQyMmRhMDAuLmVhMDEzMjcgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfdmhvc3Qvc29j a2V0LmMNCj4gKysrIGIvbGliL2xpYnJ0ZV92aG9zdC9zb2NrZXQuYw0KPiBAQCAtNzQ5LDYgKzc0 OSw5IEBAIHN0cnVjdCB2aG9zdF91c2VyX3JlY29ubmVjdF9saXN0IHsNCj4gIAkJc3RydWN0IHZo b3N0X3VzZXJfc29ja2V0ICp2c29ja2V0ID0gdmhvc3RfdXNlci52c29ja2V0c1tpXTsNCj4gIA0K PiAgCQlpZiAoIXN0cmNtcCh2c29ja2V0LT5wYXRoLCBwYXRoKSkgew0KPiArCQkJaW50IGRlbF9m ZHNbTUFYX0ZEU107DQo+ICsJCQlpbnQgbnVtX29mX2ZkcyA9IDAsIGZkX2luZGV4Ow0KPiArDQoN CkkgdGhpbmsgdGhlIG5hbWluZyBjb3VsZCBiZSBhIGJpdCBzaG9ydGVyLCBsaWtlICJmZHMsIG5y X2ZkcyAob3IgbmJfZmRzKSwNCmZkX2lkeCIuDQoNCj4gIAkJCWlmICh2c29ja2V0LT5pc19zZXJ2 ZXIpIHsNCj4gIAkJCQlmZHNldF9kZWwoJnZob3N0X3VzZXIuZmRzZXQsIHZzb2NrZXQtPnNvY2tl dF9mZCk7DQo+ICAJCQkJY2xvc2UodnNvY2tldC0+c29ja2V0X2ZkKTsNCj4gQEAgLTc1NywxMyAr NzYwLDI2IEBAIHN0cnVjdCB2aG9zdF91c2VyX3JlY29ubmVjdF9saXN0IHsNCj4gIAkJCQl2aG9z dF91c2VyX3JlbW92ZV9yZWNvbm5lY3QodnNvY2tldCk7DQo+ICAJCQl9DQo+ICANCj4gKwkJCS8q IGZkc2V0X2RlbCgpIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgY29ubl9tdXRleC4gKi8NCj4gKwkJ CXB0aHJlYWRfbXV0ZXhfbG9jaygmdnNvY2tldC0+Y29ubl9tdXRleCk7DQo+ICsJCQlmb3IgKGNv bm4gPSBUQUlMUV9GSVJTVCgmdnNvY2tldC0+Y29ubl9saXN0KTsNCj4gKwkJCSAgICAgY29ubiAh PSBOVUxMOw0KPiArCQkJICAgICBjb25uID0gbmV4dCkgew0KPiArCQkJCW5leHQgPSBUQUlMUV9O RVhUKGNvbm4sIG5leHQpOw0KPiArDQo+ICsJCQkJZGVsX2Zkc1tudW1fb2ZfZmRzKytdID0gY29u bi0+Y29ubmZkOw0KPiArCQkJfQ0KPiArCQkJcHRocmVhZF9tdXRleF91bmxvY2soJnZzb2NrZXQt PmNvbm5fbXV0ZXgpOw0KPiArDQo+ICsJCQlmb3IgKGZkX2luZGV4ID0gMDsgZmRfaW5kZXggPCBu dW1fb2ZfZmRzOyBmZF9pbmRleCsrKQ0KPiArCQkJCWZkc2V0X2RlbCgmdmhvc3RfdXNlci5mZHNl dCwgZGVsX2Zkc1tmZF9pbmRleF0pOw0KPiArDQo+ICAJCQlwdGhyZWFkX211dGV4X2xvY2soJnZz b2NrZXQtPmNvbm5fbXV0ZXgpOw0KPiAgCQkJZm9yIChjb25uID0gVEFJTFFfRklSU1QoJnZzb2Nr ZXQtPmNvbm5fbGlzdCk7DQo+ICAJCQkgICAgIGNvbm4gIT0gTlVMTDsNCj4gIAkJCSAgICAgY29u biA9IG5leHQpIHsNCj4gIAkJCQluZXh0ID0gVEFJTFFfTkVYVChjb25uLCBuZXh0KTsNCj4gIA0K PiAtCQkJCWZkc2V0X2RlbCgmdmhvc3RfdXNlci5mZHNldCwgY29ubi0+Y29ubmZkKTsNCg0KSWYg eW91IGxvZyB0aGUgZmQgaGVyZSBhbmQgaW52b2tlIGZkc2V0X2RlbCgpIGFuZCBjbG9zZSgpIGFm dGVyIHRoZSBsb29wLA0KeW91IHRoZW4gY291bGQgYXZvaWQgb25lIGV4dHJhIGxvb3AgYXMgeW91 IGRpZCBhYm92ZS4NCg0KCS0teWxpdQ0KPiAgCQkJCVJURV9MT0coSU5GTywgVkhPU1RfQ09ORklH LA0KPiAgCQkJCQkiZnJlZSBjb25uZmQgPSAlZCBmb3IgZGV2aWNlICclcydcbiIsDQo+ICAJCQkJ CWNvbm4tPmNvbm5mZCwgcGF0aCk7DQo+IC0tIA0KPiAxLjguMy4xDQo=