From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [PATCH 08/14 v4] xen/arm: vpl011: Modify xenconsole to define and use a new console structure Date: Tue, 6 Jun 2017 18:13:46 -0700 (PDT) Message-ID: References: <1496769929-23355-1-git-send-email-bhupinder.thakur@linaro.org> <1496769929-23355-9-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dIPXl-0003l2-Cx for xen-devel@lists.xenproject.org; Wed, 07 Jun 2017 01:13:53 +0000 In-Reply-To: <1496769929-23355-9-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Bhupinder Thakur Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org T24gVHVlLCA2IEp1biAyMDE3LCBCaHVwaW5kZXIgVGhha3VyIHdyb3RlOgo+IFhlbmNvbnNvbGUg dXNlcyBhIGRvbWFpbiBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgY29uc29sZSBzcGVjaWZpYyBm aWVsZHMuIFRoaXMKPiBwYXRjaCBkZWZpbmVzIGEgbmV3IGNvbnNvbGUgc3RydWN0dXJlLCB3aGlj aCB3b3VsZCBiZSB1c2VkIGJ5IHRoZSB4ZW5jb25zb2xlCj4gZnVuY3Rpb25zIHRvIHBlcmZvcm0g Y29uc29sZSBzcGVjaWZpYyBvcGVyYXRpb25zIGxpa2UgcmVhZGluZy93cml0aW5nIGRhdGEgZnJv bS90bwo+IHRoZSBjb25zb2xlIHJpbmcgYnVmZmVyIG9yIHJlYWRpbmcvd3JpdGluZyBkYXRhIGZy b20vdG8gY29uc29sZSB0dHkuCj4gCj4gVGhpcyBwYXRjaCBpcyBpbiBwcmVwYXJhdGlvbiB0byBz dXBwb3J0IG11bHRpcGxlIGNvbnNvbGVzIHRvIHN1cHBvcnQgdnVhcnQgY29uc29sZS4KPiAKPiBT aWduZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhha3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5v cmc+Cj4gLS0tCj4gQ0M6IGlqCj4gQ0M6IHdsCj4gQ0M6IHNzCj4gQ0M6IGpnCj4gCj4gQ2hhbmdl cyBzaW5jZSB2MzoKPiAtIFRoZSBjaGFuZ2VzIGluIHhlbmNvbnNvbGUgaGF2ZSBiZWVuIHNwbGl0 IGludG8gZm91ciBwYXRjaGVzLiBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaAo+ICAgd2hpY2ggbW9k aWZpZXMgdGhlIHhlbmNvbnNvbGUgdG8gdXNlIGEgbmV3IGNvbnNvbGUgc3RydWN0dXJlLgo+IAo+ IENoYW5nZXMgc2luY2UgdjI6Cj4gLSBEZWZpbmVkIGEgbmV3IGZ1bmN0aW9uIGNvbnNvbGVfY3Jl YXRlX3JpbmcoKSB3aGljaCBzZXRzIHVwIHRoZSByaW5nIGJ1ZmZlciBhbmQgCj4gICBldmVudCBj aGFubmVsIGEgbmV3IGNvbnNvbGUuIGRvbWFpbl9jcmVhdGVfcmluZygpIHVzZXMgdGhpcyBmdW5j dGlvbiB0byBzZXR1cAo+ICAgYSBjb25zb2xlLgo+IC0gVGhpcyBwYXRjaCBkb2VzIG5vdCBjb250 YWluIHZ1YXJ0IHNwZWNpZmljIGNoYW5nZXMsIHdoaWNoIHdvdWxkIGJlIGludHJvZHVjZWQgaW4K PiAgIHRoZSBuZXh0IHBhdGNoLgo+IC0gQ2hhbmdlcyBmb3Iga2VlcGluZyB0aGUgUFYgbG9nIGZp bGUgbmFtZSB1bmNoYW5nZWQuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAtIFNwbGl0IHRoZSBk b21haW4gc3RydXR1cmUgdG8gYSBzZXBhcmF0ZSBjb25zb2xlIHN0cnVjdHVyZQo+IC0gTW9kaWZp ZWQgdGhlIGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSBjb25zb2xlIHN0cnV0dXJlCj4gLSBS ZXBsYWNlZCByZXBldGl0aXZlIHBlciBjb25zb2xlIGNvZGUgd2l0aCBnZW5lcmljIGNvZGUKPiAK PiAgdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYyB8IDIyNiArKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAxMjcgaW5zZXJ0aW9u cygrKSwgOTkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbnNvbGUvZGFl bW9uL2lvLmMgYi90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCj4gaW5kZXggOTQ3ZjEzYS4uMDQw MmRkZiAxMDA2NDQKPiAtLS0gYS90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCj4gKysrIGIvdG9v bHMvY29uc29sZS9kYWVtb24vaW8uYwo+IEBAIC04OSwyNSArODksMzAgQEAgc3RydWN0IGJ1ZmZl ciB7Cj4gIAlzaXplX3QgbWF4X2NhcGFjaXR5Owo+ICB9Owo+ICAKPiAtc3RydWN0IGRvbWFpbiB7 Cj4gLQlpbnQgZG9taWQ7Cj4gK3N0cnVjdCBjb25zb2xlIHsKPiAgCWludCBtYXN0ZXJfZmQ7Cj4g IAlpbnQgbWFzdGVyX3BvbGxmZF9pZHg7Cj4gIAlpbnQgc2xhdmVfZmQ7Cj4gIAlpbnQgbG9nX2Zk Owo+IC0JYm9vbCBpc19kZWFkOwo+IC0JdW5zaWduZWQgbGFzdF9zZWVuOwo+ICAJc3RydWN0IGJ1 ZmZlciBidWZmZXI7Cj4gLQlzdHJ1Y3QgZG9tYWluICpuZXh0Owo+ICAJY2hhciAqY29uc3BhdGg7 Cj4gIAlpbnQgcmluZ19yZWY7Cj4gIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IGxvY2FsX3Bv cnQ7Cj4gIAl4ZW5ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHJlbW90ZV9wb3J0Owo+ICsJc3RydWN0 IHhlbmNvbnNfaW50ZXJmYWNlICppbnRlcmZhY2U7Cj4gKwlzdHJ1Y3QgZG9tYWluICpkOwo+ICt9 Owo+ICsKPiArc3RydWN0IGRvbWFpbiB7Cj4gKwlpbnQgZG9taWQ7Cj4gKwlib29sIGlzX2RlYWQ7 Cj4gKwl1bnNpZ25lZCBsYXN0X3NlZW47Cj4gKwlzdHJ1Y3QgZG9tYWluICpuZXh0Owo+ICAJeGVu ZXZ0Y2huX2hhbmRsZSAqeGNlX2hhbmRsZTsKPiAgCWludCB4Y2VfcG9sbGZkX2lkeDsKPiAtCXN0 cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZXJmYWNlOwo+ICAJaW50IGV2ZW50X2NvdW50Owo+ ICAJbG9uZyBsb25nIG5leHRfcGVyaW9kOwo+ICsJc3RydWN0IGNvbnNvbGUgY29uc29sZTsKPiAg fTsKCkFsbCB0aGUgbWVjaGFuaWNhbCBzdWJzdGl0dXRpb25zIGJlbG93IGxvb2sgZ29vZC4gSXQg cmVtYWlucyB0byBkaXNjdXNzCndoZXRoZXIgd2Ugc2hvdWxkIGtlZXAgeGNlX2hhbmRsZSwgeGNl X3BvbGxmZF9pZHgsIGV2ZW50X2NvdW50IGFuZApuZXh0X3BlcmlvZCBpbiBzdHJ1Y3QgZG9tYWlu LCBzZWUgbXkgY29tbWVudHMgb24gdGhlIG90aGVyIHBhdGNoZXMuCgpJdCBpcyBzdHJhbmdlIHRv IGNvdW50IHRoZSBudW1iZXIgb2YgZXZlbnRzIGFuZCB0aGUgbmV4dF9wZXJpb2Qgb24gYQpkb21h aW4gYmFzaXMsIHdoZW4gYWN0dWFsbHkgYWxsIHRoZSBhY3Rpb24gaXMgZG9uZSBhdCBhIGNvbnNv bGUgbGV2ZWwuCgoKCj4gIHN0YXRpYyBzdHJ1Y3QgZG9tYWluICpkb21faGVhZDsKPiBAQCAtMTYw LDkgKzE2NSwxMCBAQCBzdGF0aWMgaW50IHdyaXRlX3dpdGhfdGltZXN0YW1wKGludCBmZCwgY29u c3QgY2hhciAqZGF0YSwgc2l6ZV90IHN6LAo+ICAKPiAgc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVu ZChzdHJ1Y3QgZG9tYWluICpkb20pCj4gIHsKPiAtCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9ICZk b20tPmJ1ZmZlcjsKPiArCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOwo+ICsJ c3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gJmNvbi0+YnVmZmVyOwo+ICAJWEVOQ09OU19SSU5HX0lE WCBjb25zLCBwcm9kLCBzaXplOwo+IC0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0g ZG9tLT5pbnRlcmZhY2U7Cj4gKwlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBjb24t PmludGVyZmFjZTsKPiAgCj4gIAljb25zID0gaW50Zi0+b3V0X2NvbnM7Cj4gIAlwcm9kID0gaW50 Zi0+b3V0X3Byb2Q7Cj4gQEAgLTE4NywyMiArMTkzLDIyIEBAIHN0YXRpYyB2b2lkIGJ1ZmZlcl9h cHBlbmQoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAKPiAgCXhlbl9tYigpOwo+ICAJaW50Zi0+b3V0 X2NvbnMgPSBjb25zOwo+IC0JeGVuZXZ0Y2huX25vdGlmeShkb20tPnhjZV9oYW5kbGUsIGRvbS0+ bG9jYWxfcG9ydCk7Cj4gKwl4ZW5ldnRjaG5fbm90aWZ5KGRvbS0+eGNlX2hhbmRsZSwgY29uLT5s b2NhbF9wb3J0KTsKPiAgCj4gIAkvKiBHZXQgdGhlIGRhdGEgdG8gdGhlIGxvZ2ZpbGUgYXMgZWFy bHkgYXMgcG9zc2libGUgYmVjYXVzZSBpZgo+ICAJICogbm8gb25lIGlzIGxpc3RlbmluZyBvbiB0 aGUgY29uc29sZSBwdHkgdGhlbiBpdCB3aWxsIGZpbGwgdXAKPiAgCSAqIGFuZCBoYW5kbGVfdHR5 X3dyaXRlIHdpbGwgc3RvcCBiZWluZyBjYWxsZWQuCj4gIAkgKi8KPiAtCWlmIChkb20tPmxvZ19m ZCAhPSAtMSkgewo+ICsJaWYgKGNvbi0+bG9nX2ZkICE9IC0xKSB7Cj4gIAkJaW50IGxvZ3JldDsK PiAgCQlpZiAobG9nX3RpbWVfZ3Vlc3QpIHsKPiAgCQkJbG9ncmV0ID0gd3JpdGVfd2l0aF90aW1l c3RhbXAoCj4gLQkJCQlkb20tPmxvZ19mZCwKPiArCQkJCWNvbi0+bG9nX2ZkLAo+ICAJCQkJYnVm ZmVyLT5kYXRhICsgYnVmZmVyLT5zaXplIC0gc2l6ZSwKPiAgCQkJCXNpemUsICZsb2dfdGltZV9n dWVzdF9uZWVkdHMpOwo+ICAJCX0gZWxzZSB7Cj4gIAkJCWxvZ3JldCA9IHdyaXRlX2FsbCgKPiAt CQkJCWRvbS0+bG9nX2ZkLAo+ICsJCQkJY29uLT5sb2dfZmQsCj4gIAkJCQlidWZmZXItPmRhdGEg KyBidWZmZXItPnNpemUgLSBzaXplLAo+ICAJCQkJc2l6ZSk7Cj4gIAkJfQo+IEBAIC0zMzgsMTQg KzM0NCwxNiBAQCBzdGF0aWMgaW50IGNyZWF0ZV9kb21haW5fbG9nKHN0cnVjdCBkb21haW4gKmRv bSkKPiAgCj4gIHN0YXRpYyB2b2lkIGRvbWFpbl9jbG9zZV90dHkoc3RydWN0IGRvbWFpbiAqZG9t KQo+ICB7Cj4gLQlpZiAoZG9tLT5tYXN0ZXJfZmQgIT0gLTEpIHsKPiAtCQljbG9zZShkb20tPm1h c3Rlcl9mZCk7Cj4gLQkJZG9tLT5tYXN0ZXJfZmQgPSAtMTsKPiArCXN0cnVjdCBjb25zb2xlICpj b24gPSAmZG9tLT5jb25zb2xlOwo+ICsKPiArCWlmIChjb24tPm1hc3Rlcl9mZCAhPSAtMSkgewo+ ICsJCWNsb3NlKGNvbi0+bWFzdGVyX2ZkKTsKPiArCQljb24tPm1hc3Rlcl9mZCA9IC0xOwo+ICAJ fQo+ICAKPiAtCWlmIChkb20tPnNsYXZlX2ZkICE9IC0xKSB7Cj4gLQkJY2xvc2UoZG9tLT5zbGF2 ZV9mZCk7Cj4gLQkJZG9tLT5zbGF2ZV9mZCA9IC0xOwo+ICsJaWYgKGNvbi0+c2xhdmVfZmQgIT0g LTEpIHsKPiArCQljbG9zZShjb24tPnNsYXZlX2ZkKTsKPiArCQljb24tPnNsYXZlX2ZkID0gLTE7 Cj4gIAl9Cj4gIH0KPiAgCj4gQEAgLTQxOCwxMSArNDI2LDEyIEBAIHN0YXRpYyBpbnQgZG9tYWlu X2NyZWF0ZV90dHkoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJY2hhciAqZGF0YTsKPiAgCXVuc2ln bmVkIGludCBsZW47Cj4gIAlzdHJ1Y3QgdGVybWlvcyB0ZXJtOwo+ICsJc3RydWN0IGNvbnNvbGUg KmNvbiA9ICZkb20tPmNvbnNvbGU7Cj4gIAo+IC0JYXNzZXJ0KGRvbS0+c2xhdmVfZmQgPT0gLTEp Owo+IC0JYXNzZXJ0KGRvbS0+bWFzdGVyX2ZkID09IC0xKTsKPiArCWFzc2VydChjb24tPnNsYXZl X2ZkID09IC0xKTsKPiArCWFzc2VydChjb24tPm1hc3Rlcl9mZCA9PSAtMSk7Cj4gIAo+IC0JaWYg KG9wZW5wdHkoJmRvbS0+bWFzdGVyX2ZkLCAmZG9tLT5zbGF2ZV9mZCwgTlVMTCwgTlVMTCwgTlVM TCkgPCAwKSB7Cj4gKwlpZiAob3BlbnB0eSgmY29uLT5tYXN0ZXJfZmQsICZjb24tPnNsYXZlX2Zk LCBOVUxMLCBOVUxMLCBOVUxMKSA8IDApIHsKPiAgCQllcnIgPSBlcnJubzsKPiAgCQlkb2xvZyhM T0dfRVJSLCAiRmFpbGVkIHRvIGNyZWF0ZSB0dHkgZm9yIGRvbWFpbi0lZCAiCj4gIAkJICAgICAg IihlcnJubyA9ICVpLCAlcykiLAo+IEBAIC00MzAsNyArNDM5LDcgQEAgc3RhdGljIGludCBkb21h aW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAkJcmV0dXJuIDA7Cj4gIAl9Cj4g IAo+IC0JaWYgKHRjZ2V0YXR0cihkb20tPnNsYXZlX2ZkLCAmdGVybSkgPCAwKSB7Cj4gKwlpZiAo dGNnZXRhdHRyKGNvbi0+c2xhdmVfZmQsICZ0ZXJtKSA8IDApIHsKPiAgCQllcnIgPSBlcnJubzsK PiAgCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGdldCB0dHkgYXR0cmlidXRlcyBmb3IgZG9t YWluLSVkICIKPiAgCQkJIihlcnJubyA9ICVpLCAlcykiLAo+IEBAIC00MzgsNyArNDQ3LDcgQEAg c3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAkJZ290 byBvdXQ7Cj4gIAl9Cj4gIAljZm1ha2VyYXcoJnRlcm0pOwo+IC0JaWYgKHRjc2V0YXR0cihkb20t PnNsYXZlX2ZkLCBUQ1NBTk9XLCAmdGVybSkgPCAwKSB7Cj4gKwlpZiAodGNzZXRhdHRyKGNvbi0+ c2xhdmVfZmQsIFRDU0FOT1csICZ0ZXJtKSA8IDApIHsKPiAgCQllcnIgPSBlcnJubzsKPiAgCQlk b2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIHNldCB0dHkgYXR0cmlidXRlcyBmb3IgZG9tYWluLSVk ICIKPiAgCQkJIihlcnJubyA9ICVpLCAlcykiLAo+IEBAIC00NDYsNyArNDU1LDcgQEAgc3RhdGlj IGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAkJZ290byBvdXQ7 Cj4gIAl9Cj4gIAo+IC0JaWYgKChzbGF2ZSA9IHB0c25hbWUoZG9tLT5tYXN0ZXJfZmQpKSA9PSBO VUxMKSB7Cj4gKwlpZiAoKHNsYXZlID0gcHRzbmFtZShjb24tPm1hc3Rlcl9mZCkpID09IE5VTEwp IHsKPiAgCQllcnIgPSBlcnJubzsKPiAgCQlkb2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGdldCBz bGF2ZSBuYW1lIGZvciBkb21haW4tJWQgIgo+ICAJCSAgICAgICIoZXJybm8gPSAlaSwgJXMpIiwK PiBAQCAtNDU0LDE4ICs0NjMsMTggQEAgc3RhdGljIGludCBkb21haW5fY3JlYXRlX3R0eShzdHJ1 Y3QgZG9tYWluICpkb20pCj4gIAkJZ290byBvdXQ7Cj4gIAl9Cj4gIAo+IC0Jc3VjY2VzcyA9IGFz cHJpbnRmKCZwYXRoLCAiJXMvbGltaXQiLCBkb20tPmNvbnNwYXRoKSAhPQo+ICsJc3VjY2VzcyA9 IGFzcHJpbnRmKCZwYXRoLCAiJXMvbGltaXQiLCBjb24tPmNvbnNwYXRoKSAhPQo+ICAJCS0xOwo+ ICAJaWYgKCFzdWNjZXNzKQo+ICAJCWdvdG8gb3V0Owo+ICAJZGF0YSA9IHhzX3JlYWQoeHMsIFhC VF9OVUxMLCBwYXRoLCAmbGVuKTsKPiAgCWlmIChkYXRhKSB7Cj4gLQkJZG9tLT5idWZmZXIubWF4 X2NhcGFjaXR5ID0gc3RydG91bChkYXRhLCAwLCAwKTsKPiArCQljb24tPmJ1ZmZlci5tYXhfY2Fw YWNpdHkgPSBzdHJ0b3VsKGRhdGEsIDAsIDApOwo+ICAJCWZyZWUoZGF0YSk7Cj4gIAl9Cj4gIAlm cmVlKHBhdGgpOwo+ICAKPiAtCXN1Y2Nlc3MgPSAoYXNwcmludGYoJnBhdGgsICIlcy90dHkiLCBk b20tPmNvbnNwYXRoKSAhPSAtMSk7Cj4gKwlzdWNjZXNzID0gKGFzcHJpbnRmKCZwYXRoLCAiJXMv dHR5IiwgY29uLT5jb25zcGF0aCkgIT0gLTEpOwo+ICAJaWYgKCFzdWNjZXNzKQo+ICAJCWdvdG8g b3V0Owo+ICAJc3VjY2VzcyA9IHhzX3dyaXRlKHhzLCBYQlRfTlVMTCwgcGF0aCwgc2xhdmUsIHN0 cmxlbihzbGF2ZSkpOwo+IEBAIC00NzMsNyArNDgyLDcgQEAgc3RhdGljIGludCBkb21haW5fY3Jl YXRlX3R0eShzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAlpZiAoIXN1Y2Nlc3MpCj4gIAkJZ290byBv dXQ7Cj4gIAo+IC0JaWYgKGZjbnRsKGRvbS0+bWFzdGVyX2ZkLCBGX1NFVEZMLCBPX05PTkJMT0NL KSA9PSAtMSkKPiArCWlmIChmY250bChjb24tPm1hc3Rlcl9mZCwgRl9TRVRGTCwgT19OT05CTE9D SykgPT0gLTEpCj4gIAkJZ290byBvdXQ7Cj4gIAo+ICAJcmV0dXJuIDE7Cj4gQEAgLTUxOSwyOSAr NTI4LDMyIEBAIHN0YXRpYyBpbnQgeHNfZ2F0aGVyKHN0cnVjdCB4c19oYW5kbGUgKnhzLCBjb25z dCBjaGFyICpkaXIsIC4uLikKPiAgCj4gIHN0YXRpYyB2b2lkIGRvbWFpbl91bm1hcF9pbnRlcmZh Y2Uoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICB7Cj4gLQlpZiAoZG9tLT5pbnRlcmZhY2UgPT0gTlVM TCkKPiArCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOwo+ICsKPiArCWlmIChj b24tPmludGVyZmFjZSA9PSBOVUxMKQo+ICAJCXJldHVybjsKPiAtCWlmICh4Z3RfaGFuZGxlICYm IGRvbS0+cmluZ19yZWYgPT0gLTEpCj4gLQkJeGVuZ250dGFiX3VubWFwKHhndF9oYW5kbGUsIGRv bS0+aW50ZXJmYWNlLCAxKTsKPiArCWlmICh4Z3RfaGFuZGxlICYmIGNvbi0+cmluZ19yZWYgPT0g LTEpCj4gKwkJeGVuZ250dGFiX3VubWFwKHhndF9oYW5kbGUsIGNvbi0+aW50ZXJmYWNlLCAxKTsK PiAgCWVsc2UKPiAtCQltdW5tYXAoZG9tLT5pbnRlcmZhY2UsIFhDX1BBR0VfU0laRSk7Cj4gLQlk b20tPmludGVyZmFjZSA9IE5VTEw7Cj4gLQlkb20tPnJpbmdfcmVmID0gLTE7Cj4gKwkJbXVubWFw KGNvbi0+aW50ZXJmYWNlLCBYQ19QQUdFX1NJWkUpOwo+ICsJY29uLT5pbnRlcmZhY2UgPSBOVUxM Owo+ICsJY29uLT5yaW5nX3JlZiA9IC0xOwo+ICB9Cj4gICAKPiAgc3RhdGljIGludCBkb21haW5f Y3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICB7Cj4gIAlpbnQgZXJyLCByZW1vdGVf cG9ydCwgcmluZ19yZWYsIHJjOwo+ICAJY2hhciAqdHlwZSwgcGF0aFtQQVRIX01BWF07Cj4gKwlz dHJ1Y3QgY29uc29sZSAqY29uID0gJmRvbS0+Y29uc29sZTsKPiAgCj4gLQllcnIgPSB4c19nYXRo ZXIoeHMsIGRvbS0+Y29uc3BhdGgsCj4gKwllcnIgPSB4c19nYXRoZXIoeHMsIGNvbi0+Y29uc3Bh dGgsCj4gIAkJCSJyaW5nLXJlZiIsICIldSIsICZyaW5nX3JlZiwKPiAgCQkJInBvcnQiLCAiJWki LCAmcmVtb3RlX3BvcnQsCj4gIAkJCU5VTEwpOwo+ICAJaWYgKGVycikKPiAgCQlnb3RvIG91dDsK PiAgCj4gLQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgZG9tLT5jb25z cGF0aCk7Cj4gKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy90eXBlIiwgY29uLT5j b25zcGF0aCk7Cj4gIAl0eXBlID0geHNfcmVhZCh4cywgWEJUX05VTEwsIHBhdGgsIE5VTEwpOwo+ ICAJaWYgKHR5cGUgJiYgc3RyY21wKHR5cGUsICJ4ZW5jb25zb2xlZCIpICE9IDApIHsKPiAgCQlm cmVlKHR5cGUpOwo+IEBAIC01NTAsNDEgKzU2Miw0MSBAQCBzdGF0aWMgaW50IGRvbWFpbl9jcmVh dGVfcmluZyhzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAlmcmVlKHR5cGUpOwo+ICAKPiAgCS8qIElm IHVzaW5nIHJpbmdfcmVmIGFuZCBpdCBoYXMgY2hhbmdlZCwgcmVtYXAgKi8KPiAtCWlmIChyaW5n X3JlZiAhPSBkb20tPnJpbmdfcmVmICYmIGRvbS0+cmluZ19yZWYgIT0gLTEpCj4gKwlpZiAocmlu Z19yZWYgIT0gY29uLT5yaW5nX3JlZiAmJiBjb24tPnJpbmdfcmVmICE9IC0xKQo+ICAJCWRvbWFp bl91bm1hcF9pbnRlcmZhY2UoZG9tKTsKPiAgCj4gLQlpZiAoIWRvbS0+aW50ZXJmYWNlICYmIHhn dF9oYW5kbGUpIHsKPiArCWlmICghY29uLT5pbnRlcmZhY2UgJiYgeGd0X2hhbmRsZSkgewo+ICAJ CS8qIFByZWZlciB1c2luZyBncmFudCB0YWJsZSAqLwo+IC0JCWRvbS0+aW50ZXJmYWNlID0geGVu Z250dGFiX21hcF9ncmFudF9yZWYoeGd0X2hhbmRsZSwKPiArCQljb24tPmludGVyZmFjZSA9IHhl bmdudHRhYl9tYXBfZ3JhbnRfcmVmKHhndF9oYW5kbGUsCj4gIAkJCWRvbS0+ZG9taWQsIEdOVFRB Ql9SRVNFUlZFRF9DT05TT0xFLAo+ICAJCQlQUk9UX1JFQUR8UFJPVF9XUklURSk7Cj4gLQkJZG9t LT5yaW5nX3JlZiA9IC0xOwo+ICsJCWNvbi0+cmluZ19yZWYgPSAtMTsKPiAgCX0KPiAtCWlmICgh ZG9tLT5pbnRlcmZhY2UpIHsKPiArCWlmICghY29uLT5pbnRlcmZhY2UpIHsKPiAgCQkvKiBGYWxs IGJhY2sgdG8geGNfbWFwX2ZvcmVpZ25fcmFuZ2UgKi8KPiAtCQlkb20tPmludGVyZmFjZSA9IHhj X21hcF9mb3JlaWduX3JhbmdlKAo+ICsJCWNvbi0+aW50ZXJmYWNlID0geGNfbWFwX2ZvcmVpZ25f cmFuZ2UoCj4gIAkJCXhjLCBkb20tPmRvbWlkLCBYQ19QQUdFX1NJWkUsCj4gIAkJCVBST1RfUkVB RHxQUk9UX1dSSVRFLAo+ICAJCQkodW5zaWduZWQgbG9uZylyaW5nX3JlZik7Cj4gLQkJaWYgKGRv bS0+aW50ZXJmYWNlID09IE5VTEwpIHsKPiArCQlpZiAoY29uLT5pbnRlcmZhY2UgPT0gTlVMTCkg ewo+ICAJCQllcnIgPSBFSU5WQUw7Cj4gIAkJCWdvdG8gb3V0Owo+ICAJCX0KPiAtCQlkb20tPnJp bmdfcmVmID0gcmluZ19yZWY7Cj4gKwkJY29uLT5yaW5nX3JlZiA9IHJpbmdfcmVmOwo+ICAJfQo+ ICAKPiAgCS8qIEdvIG5vIGZ1cnRoZXIgaWYgcG9ydCBoYXMgbm90IGNoYW5nZWQgYW5kIHdlIGFy ZSBzdGlsbCBib3VuZC4gKi8KPiAtCWlmIChyZW1vdGVfcG9ydCA9PSBkb20tPnJlbW90ZV9wb3J0 KSB7Cj4gKwlpZiAocmVtb3RlX3BvcnQgPT0gY29uLT5yZW1vdGVfcG9ydCkgewo+ICAJCXhjX2V2 dGNobl9zdGF0dXNfdCBzdGF0dXMgPSB7Cj4gIAkJCS5kb20gPSBET01JRF9TRUxGLAo+IC0JCQku cG9ydCA9IGRvbS0+bG9jYWxfcG9ydCB9Owo+ICsJCQkucG9ydCA9IGNvbi0+bG9jYWxfcG9ydCB9 Owo+ICAJCWlmICgoeGNfZXZ0Y2huX3N0YXR1cyh4YywgJnN0YXR1cykgPT0gMCkgJiYKPiAgCQkg ICAgKHN0YXR1cy5zdGF0dXMgPT0gRVZUQ0hOU1RBVF9pbnRlcmRvbWFpbikpCj4gIAkJCWdvdG8g b3V0Owo+ICAJfQo+ICAKPiAtCWRvbS0+bG9jYWxfcG9ydCA9IC0xOwo+IC0JZG9tLT5yZW1vdGVf cG9ydCA9IC0xOwo+ICsJY29uLT5sb2NhbF9wb3J0ID0gLTE7Cj4gKwljb24tPnJlbW90ZV9wb3J0 ID0gLTE7Cj4gIAlpZiAoZG9tLT54Y2VfaGFuZGxlICE9IE5VTEwpCj4gIAkJeGVuZXZ0Y2huX2Ns b3NlKGRvbS0+eGNlX2hhbmRsZSk7Cj4gIAo+IEBAIC02MDUsMjIgKzYxNywyMiBAQCBzdGF0aWMg aW50IGRvbWFpbl9jcmVhdGVfcmluZyhzdHJ1Y3QgZG9tYWluICpkb20pCj4gIAkJZG9tLT54Y2Vf aGFuZGxlID0gTlVMTDsKPiAgCQlnb3RvIG91dDsKPiAgCX0KPiAtCWRvbS0+bG9jYWxfcG9ydCA9 IHJjOwo+IC0JZG9tLT5yZW1vdGVfcG9ydCA9IHJlbW90ZV9wb3J0Owo+ICsJY29uLT5sb2NhbF9w b3J0ID0gcmM7Cj4gKwljb24tPnJlbW90ZV9wb3J0ID0gcmVtb3RlX3BvcnQ7Cj4gIAo+IC0JaWYg KGRvbS0+bWFzdGVyX2ZkID09IC0xKSB7Cj4gKwlpZiAoY29uLT5tYXN0ZXJfZmQgPT0gLTEpIHsK PiAgCQlpZiAoIWRvbWFpbl9jcmVhdGVfdHR5KGRvbSkpIHsKPiAgCQkJZXJyID0gZXJybm87Cj4g IAkJCXhlbmV2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOwo+ICAJCQlkb20tPnhjZV9oYW5k bGUgPSBOVUxMOwo+IC0JCQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKPiAtCQkJZG9tLT5yZW1vdGVf cG9ydCA9IC0xOwo+ICsJCQljb24tPmxvY2FsX3BvcnQgPSAtMTsKPiArCQkJY29uLT5yZW1vdGVf cG9ydCA9IC0xOwo+ICAJCQlnb3RvIG91dDsKPiAgCQl9Cj4gIAl9Cj4gIAo+IC0JaWYgKGxvZ19n dWVzdCAmJiAoZG9tLT5sb2dfZmQgPT0gLTEpKQo+IC0JCWRvbS0+bG9nX2ZkID0gY3JlYXRlX2Rv bWFpbl9sb2coZG9tKTsKPiArCWlmIChsb2dfZ3Vlc3QgJiYgKGNvbi0+bG9nX2ZkID09IC0xKSkK PiArCQljb24tPmxvZ19mZCA9IGNyZWF0ZV9kb21haW5fbG9nKGRvbSk7Cj4gIAo+ICAgb3V0Ogo+ ICAJcmV0dXJuIGVycjsKPiBAQCAtNjMwLDE2ICs2NDIsMTcgQEAgc3RhdGljIGJvb2wgd2F0Y2hf ZG9tYWluKHN0cnVjdCBkb21haW4gKmRvbSwgYm9vbCB3YXRjaCkKPiAgewo+ICAJY2hhciBkb21p ZF9zdHJbMyArIE1BWF9TVFJMRU4oZG9tLT5kb21pZCldOwo+ICAJYm9vbCBzdWNjZXNzOwo+ICsJ c3RydWN0IGNvbnNvbGUgKmNvbiA9ICZkb20tPmNvbnNvbGU7Cj4gIAo+ICAJc25wcmludGYoZG9t aWRfc3RyLCBzaXplb2YoZG9taWRfc3RyKSwgImRvbSV1IiwgZG9tLT5kb21pZCk7Cj4gIAlpZiAo d2F0Y2gpIHsKPiAtCQlzdWNjZXNzID0geHNfd2F0Y2goeHMsIGRvbS0+Y29uc3BhdGgsIGRvbWlk X3N0cik7Cj4gKwkJc3VjY2VzcyA9IHhzX3dhdGNoKHhzLCBjb24tPmNvbnNwYXRoLCBkb21pZF9z dHIpOwo+ICAJCWlmIChzdWNjZXNzKQo+ICAJCQlkb21haW5fY3JlYXRlX3JpbmcoZG9tKTsKPiAg CQllbHNlCj4gLQkJCXhzX3Vud2F0Y2goeHMsIGRvbS0+Y29uc3BhdGgsIGRvbWlkX3N0cik7Cj4g KwkJCXhzX3Vud2F0Y2goeHMsIGNvbi0+Y29uc3BhdGgsIGRvbWlkX3N0cik7Cj4gIAl9IGVsc2Ug ewo+IC0JCXN1Y2Nlc3MgPSB4c191bndhdGNoKHhzLCBkb20tPmNvbnNwYXRoLCBkb21pZF9zdHIp Owo+ICsJCXN1Y2Nlc3MgPSB4c191bndhdGNoKHhzLCBjb24tPmNvbnNwYXRoLCBkb21pZF9zdHIp Owo+ICAJfQo+ICAKPiAgCXJldHVybiBzdWNjZXNzOwo+IEBAIC02NTEsNiArNjY0LDcgQEAgc3Rh dGljIHN0cnVjdCBkb21haW4gKmNyZWF0ZV9kb21haW4oaW50IGRvbWlkKQo+ICAJc3RydWN0IGRv bWFpbiAqZG9tOwo+ICAJY2hhciAqczsKPiAgCXN0cnVjdCB0aW1lc3BlYyB0czsKPiArCXN0cnVj dCBjb25zb2xlICpjb247Cj4gIAo+ICAJaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklD LCAmdHMpIDwgMCkgewo+ICAJCWRvbG9nKExPR19FUlIsICJDYW5ub3QgZ2V0IHRpbWUgb2YgZGF5 ICVzOiVzOkwlZCIsCj4gQEAgLTY2NywyNSArNjgxLDI2IEBAIHN0YXRpYyBzdHJ1Y3QgZG9tYWlu ICpjcmVhdGVfZG9tYWluKGludCBkb21pZCkKPiAgCj4gIAlkb20tPmRvbWlkID0gZG9taWQ7Cj4g IAo+IC0JZG9tLT5jb25zcGF0aCA9IHhzX2dldF9kb21haW5fcGF0aCh4cywgZG9tLT5kb21pZCk7 Cj4gLQlzID0gcmVhbGxvYyhkb20tPmNvbnNwYXRoLCBzdHJsZW4oZG9tLT5jb25zcGF0aCkgKwo+ ICsJY29uID0gJmRvbS0+Y29uc29sZTsKPiArCWNvbi0+Y29uc3BhdGggPSB4c19nZXRfZG9tYWlu X3BhdGgoeHMsIGRvbS0+ZG9taWQpOwo+ICsJcyA9IHJlYWxsb2MoY29uLT5jb25zcGF0aCwgc3Ry bGVuKGNvbi0+Y29uc3BhdGgpICsKPiAgCQkgICAgc3RybGVuKCIvY29uc29sZSIpICsgMSk7Cj4g IAlpZiAocyA9PSBOVUxMKQo+ICAJCWdvdG8gb3V0Owo+IC0JZG9tLT5jb25zcGF0aCA9IHM7Cj4g LQlzdHJjYXQoZG9tLT5jb25zcGF0aCwgIi9jb25zb2xlIik7Cj4gKwljb24tPmNvbnNwYXRoID0g czsKPiArCXN0cmNhdChjb24tPmNvbnNwYXRoLCAiL2NvbnNvbGUiKTsKPiAgCj4gLQlkb20tPm1h c3Rlcl9mZCA9IC0xOwo+IC0JZG9tLT5tYXN0ZXJfcG9sbGZkX2lkeCA9IC0xOwo+IC0JZG9tLT5z bGF2ZV9mZCA9IC0xOwo+IC0JZG9tLT5sb2dfZmQgPSAtMTsKPiArCWNvbi0+bWFzdGVyX2ZkID0g LTE7Cj4gKwljb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7Cj4gKwljb24tPnNsYXZlX2ZkID0g LTE7Cj4gKwljb24tPmxvZ19mZCA9IC0xOwo+ICAJZG9tLT54Y2VfcG9sbGZkX2lkeCA9IC0xOwo+ ICAKPiAgCWRvbS0+bmV4dF9wZXJpb2QgPSAoKGxvbmcgbG9uZyl0cy50dl9zZWMgKiAxMDAwKSAr ICh0cy50dl9uc2VjIC8gMTAwMDAwMCkgKyBSQVRFX0xJTUlUX1BFUklPRDsKPiAgCj4gLQlkb20t PnJpbmdfcmVmID0gLTE7Cj4gLQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKPiAtCWRvbS0+cmVtb3Rl X3BvcnQgPSAtMTsKPiArCWNvbi0+cmluZ19yZWYgPSAtMTsKPiArCWNvbi0+bG9jYWxfcG9ydCA9 IC0xOwo+ICsJY29uLT5yZW1vdGVfcG9ydCA9IC0xOwo+ICAKPiAgCWlmICghd2F0Y2hfZG9tYWlu KGRvbSwgdHJ1ZSkpCj4gIAkJZ290byBvdXQ7Cj4gQEAgLTY5Nyw3ICs3MTIsNyBAQCBzdGF0aWMg c3RydWN0IGRvbWFpbiAqY3JlYXRlX2RvbWFpbihpbnQgZG9taWQpCj4gIAo+ICAJcmV0dXJuIGRv bTsKPiAgIG91dDoKPiAtCWZyZWUoZG9tLT5jb25zcGF0aCk7Cj4gKwlmcmVlKGNvbi0+Y29uc3Bh dGgpOwo+ICAJZnJlZShkb20pOwo+ICAJcmV0dXJuIE5VTEw7Cj4gIH0KPiBAQCAtNzI5LDE4ICs3 NDQsMjAgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkb20pCj4g IAo+ICBzdGF0aWMgdm9pZCBjbGVhbnVwX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkKQo+ICB7Cj4g KwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7Cj4gKwo+ICAJZG9tYWluX2Nsb3Nl X3R0eShkKTsKPiAgCj4gLQlpZiAoZC0+bG9nX2ZkICE9IC0xKSB7Cj4gLQkJY2xvc2UoZC0+bG9n X2ZkKTsKPiAtCQlkLT5sb2dfZmQgPSAtMTsKPiArCWlmIChjb24tPmxvZ19mZCAhPSAtMSkgewo+ ICsJCWNsb3NlKGNvbi0+bG9nX2ZkKTsKPiArCQljb24tPmxvZ19mZCA9IC0xOwo+ICAJfQo+ICAK PiAtCWZyZWUoZC0+YnVmZmVyLmRhdGEpOwo+IC0JZC0+YnVmZmVyLmRhdGEgPSBOVUxMOwo+ICsJ ZnJlZShjb24tPmJ1ZmZlci5kYXRhKTsKPiArCWNvbi0+YnVmZmVyLmRhdGEgPSBOVUxMOwo+ICAK PiAtCWZyZWUoZC0+Y29uc3BhdGgpOwo+IC0JZC0+Y29uc3BhdGggPSBOVUxMOwo+ICsJZnJlZShj b24tPmNvbnNwYXRoKTsKPiArCWNvbi0+Y29uc3BhdGggPSBOVUxMOwo+ICAKPiAgCXJlbW92ZV9k b21haW4oZCk7Cj4gIH0KPiBAQCAtNzgyLDcgKzc5OSw4IEBAIHN0YXRpYyB2b2lkIGVudW1fZG9t YWlucyh2b2lkKQo+ICAKPiAgc3RhdGljIGludCByaW5nX2ZyZWVfYnl0ZXMoc3RydWN0IGRvbWFp biAqZG9tKQo+ICB7Cj4gLQlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSBkb20tPmlu dGVyZmFjZTsKPiArCXN0cnVjdCBjb25zb2xlICpjb24gPSAmZG9tLT5jb25zb2xlOwo+ICsJc3Ry dWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gY29uLT5pbnRlcmZhY2U7Cj4gIAlYRU5DT05T X1JJTkdfSURYIGNvbnMsIHByb2QsIHNwYWNlOwo+ICAKPiAgCWNvbnMgPSBpbnRmLT5pbl9jb25z Owo+IEBAIC04MTIsNyArODMwLDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVj dCBkb21haW4gKmRvbSkKPiAgCXNzaXplX3QgbGVuID0gMDsKPiAgCWNoYXIgbXNnWzgwXTsKPiAg CWludCBpOwo+IC0Jc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gZG9tLT5pbnRlcmZh Y2U7Cj4gKwlzdHJ1Y3QgY29uc29sZSAqY29uID0gJmRvbS0+Y29uc29sZTsKPiArCXN0cnVjdCB4 ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IGNvbi0+aW50ZXJmYWNlOwo+ICAJWEVOQ09OU19SSU5H X0lEWCBwcm9kOwo+ICAKPiAgCWlmIChkb20tPmlzX2RlYWQpCj4gQEAgLTgyNSw3ICs4NDQsNyBA QCBzdGF0aWMgdm9pZCBoYW5kbGVfdHR5X3JlYWQoc3RydWN0IGRvbWFpbiAqZG9tKQo+ICAJaWYg KGxlbiA+IHNpemVvZihtc2cpKQo+ICAJCWxlbiA9IHNpemVvZihtc2cpOwo+ICAKPiAtCWxlbiA9 IHJlYWQoZG9tLT5tYXN0ZXJfZmQsIG1zZywgbGVuKTsKPiArCWxlbiA9IHJlYWQoY29uLT5tYXN0 ZXJfZmQsIG1zZywgbGVuKTsKPiAgCS8qCj4gIAkgKiBOb3RlOiBvbiBTb2xhcmlzLCBsZW4gPT0g MCBtZWFucyB0aGUgc2xhdmUgY2xvc2VkLCBhbmQgdGhpcwo+ICAJICogaXMgbm8gcHJvYmxlbSwg YnV0IExpbnV4IGNhbid0IGhhbmRsZSB0aGlzIHVzZWZ1bGx5LCBzbyB3ZQo+IEBAIC04NDEsNyAr ODYwLDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkK PiAgCQl9Cj4gIAkJeGVuX3dtYigpOwo+ICAJCWludGYtPmluX3Byb2QgPSBwcm9kOwo+IC0JCXhl bmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBkb20tPmxvY2FsX3BvcnQpOwo+ICsJCXhl bmV2dGNobl9ub3RpZnkoZG9tLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQpOwo+ICAJfSBl bHNlIHsKPiAgCQlkb21haW5fY2xvc2VfdHR5KGRvbSk7Cj4gIAkJc2h1dGRvd25fZG9tYWluKGRv bSk7Cj4gQEAgLTg1MSwxOCArODcwLDE5IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV90dHlfcmVhZChz dHJ1Y3QgZG9tYWluICpkb20pCj4gIHN0YXRpYyB2b2lkIGhhbmRsZV90dHlfd3JpdGUoc3RydWN0 IGRvbWFpbiAqZG9tKQo+ICB7Cj4gIAlzc2l6ZV90IGxlbjsKPiArCXN0cnVjdCBjb25zb2xlICpj b24gPSAmZG9tLT5jb25zb2xlOwo+ICAKPiAgCWlmIChkb20tPmlzX2RlYWQpCj4gIAkJcmV0dXJu Owo+ICAKPiAtCWxlbiA9IHdyaXRlKGRvbS0+bWFzdGVyX2ZkLCBkb20tPmJ1ZmZlci5kYXRhICsg ZG9tLT5idWZmZXIuY29uc3VtZWQsCj4gLQkJICAgIGRvbS0+YnVmZmVyLnNpemUgLSBkb20tPmJ1 ZmZlci5jb25zdW1lZCk7Cj4gKwlsZW4gPSB3cml0ZShjb24tPm1hc3Rlcl9mZCwgY29uLT5idWZm ZXIuZGF0YSArIGNvbi0+YnVmZmVyLmNvbnN1bWVkLAo+ICsJCSAgICBjb24tPmJ1ZmZlci5zaXpl IC0gY29uLT5idWZmZXIuY29uc3VtZWQpOwo+ICAgCWlmIChsZW4gPCAxKSB7Cj4gIAkJZG9sb2co TE9HX0RFQlVHLCAiV3JpdGUgZmFpbGVkIG9uIGRvbWFpbiAlZDogJXpkLCAlZFxuIiwKPiAgCQkg ICAgICBkb20tPmRvbWlkLCBsZW4sIGVycm5vKTsKPiAgCQlkb21haW5faGFuZGxlX2Jyb2tlbl90 dHkoZG9tLCBkb21haW5faXNfdmFsaWQoZG9tLT5kb21pZCkpOwo+ICAJfSBlbHNlIHsKPiAtCQli dWZmZXJfYWR2YW5jZSgmZG9tLT5idWZmZXIsIGxlbik7Cj4gKwkJYnVmZmVyX2FkdmFuY2UoJmNv bi0+YnVmZmVyLCBsZW4pOwo+ICAJfQo+ICB9Cj4gIAo+IEBAIC05NDgsOSArOTY4LDExIEBAIHN0 YXRpYyB2b2lkIGhhbmRsZV9sb2dfcmVsb2FkKHZvaWQpCj4gIAlpZiAobG9nX2d1ZXN0KSB7Cj4g IAkJc3RydWN0IGRvbWFpbiAqZDsKPiAgCQlmb3IgKGQgPSBkb21faGVhZDsgZDsgZCA9IGQtPm5l eHQpIHsKPiAtCQkJaWYgKGQtPmxvZ19mZCAhPSAtMSkKPiAtCQkJCWNsb3NlKGQtPmxvZ19mZCk7 Cj4gLQkJCWQtPmxvZ19mZCA9IGNyZWF0ZV9kb21haW5fbG9nKGQpOwo+ICsJCQlzdHJ1Y3QgY29u c29sZSAqY29uID0gJmQtPmNvbnNvbGU7Cj4gKwo+ICsJCQlpZiAoY29uLT5sb2dfZmQgIT0gLTEp Cj4gKwkJCQljbG9zZShjb24tPmxvZ19mZCk7Cj4gKwkJCWNvbi0+bG9nX2ZkID0gY3JlYXRlX2Rv bWFpbl9sb2coZCk7Cj4gIAkJfQo+ICAJfQo+ICAKPiBAQCAtMTA1OSw2ICsxMDgxLDggQEAgdm9p ZCBoYW5kbGVfaW8odm9pZCkKPiAgCQkvKiBSZS1jYWxjdWxhdGUgYW55IGV2ZW50IGNvdW50ZXIg YWxsb3dhbmNlcyAmIHVuYmxvY2sKPiAgCQkgICBkb21haW5zIHdpdGggbmV3IGFsbG93YW5jZSAq Lwo+ICAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gZC0+bmV4dCkgewo+ICsJCQlzdHJ1Y3Qg Y29uc29sZSAqY29uID0gJmQtPmNvbnNvbGU7Cj4gKwo+ICAJCQkvKiBDUyAxNjI1Nzo5NTVlZTRm YTEzNDUgaW50cm9kdWNlcyBhIDVtcyBmdXp6Cj4gIAkJCSAqIGZvciBzZWxlY3QoKSwgaXQgaXMg bm90IGNsZWFyIHBvbGwoKSBoYXMKPiAgCQkJICogc2ltaWxhciBiZWhhdmlvciAocmV0dXJuaW5n IGEgY291cGxlIG9mIG1zCj4gQEAgLTEwNjgsMTMgKzEwOTIsMTUgQEAgdm9pZCBoYW5kbGVfaW8o dm9pZCkKPiAgCQkJaWYgKChub3crNSkgPiBkLT5uZXh0X3BlcmlvZCkgewo+ICAJCQkJZC0+bmV4 dF9wZXJpb2QgPSBub3cgKyBSQVRFX0xJTUlUX1BFUklPRDsKPiAgCQkJCWlmIChkLT5ldmVudF9j b3VudCA+PSBSQVRFX0xJTUlUX0FMTE9XQU5DRSkgewo+IC0JCQkJCSh2b2lkKXhlbmV2dGNobl91 bm1hc2soZC0+eGNlX2hhbmRsZSwgZC0+bG9jYWxfcG9ydCk7Cj4gKwkJCQkJKHZvaWQpeGVuZXZ0 Y2huX3VubWFzayhkLT54Y2VfaGFuZGxlLCBjb24tPmxvY2FsX3BvcnQpOwo+ICAJCQkJfQo+ICAJ CQkJZC0+ZXZlbnRfY291bnQgPSAwOwo+ICAJCQl9Cj4gIAkJfQo+ICAKPiAgCQlmb3IgKGQgPSBk b21faGVhZDsgZDsgZCA9IGQtPm5leHQpIHsKPiArCQkJc3RydWN0IGNvbnNvbGUgKmNvbiA9ICZk LT5jb25zb2xlOwo+ICsKPiAgCQkJaWYgKGQtPmV2ZW50X2NvdW50ID49IFJBVEVfTElNSVRfQUxM T1dBTkNFKSB7Cj4gIAkJCQkvKiBEZXRlcm1pbmUgaWYgd2UncmUgZ29pbmcgdG8gYmUgdGhlIG5l eHQgdGltZSBzbGljZSB0byBleHBpcmUgKi8KPiAgCQkJCWlmICghbmV4dF90aW1lb3V0IHx8Cj4g QEAgLTEwODIsMjUgKzExMDgsMjUgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKPiAgCQkJCQluZXh0 X3RpbWVvdXQgPSBkLT5uZXh0X3BlcmlvZDsKPiAgCQkJfSBlbHNlIGlmIChkLT54Y2VfaGFuZGxl ICE9IE5VTEwpIHsKPiAgCQkJCWlmIChkaXNjYXJkX292ZXJmbG93ZWRfZGF0YSB8fAo+IC0JCQkJ ICAgICFkLT5idWZmZXIubWF4X2NhcGFjaXR5IHx8Cj4gLQkJCQkgICAgZC0+YnVmZmVyLnNpemUg PCBkLT5idWZmZXIubWF4X2NhcGFjaXR5KSB7Cj4gKwkJCQkgICAgIWNvbi0+YnVmZmVyLm1heF9j YXBhY2l0eSB8fAo+ICsJCQkJICAgIGNvbi0+YnVmZmVyLnNpemUgPCBjb24tPmJ1ZmZlci5tYXhf Y2FwYWNpdHkpIHsKPiAgCQkJCQlpbnQgZXZ0Y2huX2ZkID0geGVuZXZ0Y2huX2ZkKGQtPnhjZV9o YW5kbGUpOwo+ICAJCQkJCWQtPnhjZV9wb2xsZmRfaWR4ID0gc2V0X2ZkcyhldnRjaG5fZmQsCj4g IAkJCQkJCQkJICAgIFBPTExJTnxQT0xMUFJJKTsKPiAgCQkJCX0KPiAgCQkJfQo+ICAKPiAtCQkJ aWYgKGQtPm1hc3Rlcl9mZCAhPSAtMSkgewo+ICsJCQlpZiAoY29uLT5tYXN0ZXJfZmQgIT0gLTEp IHsKPiAgCQkJCXNob3J0IGV2ZW50cyA9IDA7Cj4gIAkJCQlpZiAoIWQtPmlzX2RlYWQgJiYgcmlu Z19mcmVlX2J5dGVzKGQpKQo+ICAJCQkJCWV2ZW50cyB8PSBQT0xMSU47Cj4gIAo+IC0JCQkJaWYg KCFidWZmZXJfZW1wdHkoJmQtPmJ1ZmZlcikpCj4gKwkJCQlpZiAoIWJ1ZmZlcl9lbXB0eSgmY29u LT5idWZmZXIpKQo+ICAJCQkJCWV2ZW50cyB8PSBQT0xMT1VUOwo+ICAKPiAgCQkJCWlmIChldmVu dHMpCj4gLQkJCQkJZC0+bWFzdGVyX3BvbGxmZF9pZHggPQo+IC0JCQkJCQlzZXRfZmRzKGQtPm1h c3Rlcl9mZCwKPiArCQkJCQljb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0KPiArCQkJCQkJc2V0X2Zk cyhjb24tPm1hc3Rlcl9mZCwKPiAgCQkJCQkJCWV2ZW50c3xQT0xMUFJJKTsKPiAgCQkJfQo+ICAJ CX0KPiBAQCAtMTE1OSw2ICsxMTg1LDggQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKPiAgCQl9Cj4g IAo+ICAJCWZvciAoZCA9IGRvbV9oZWFkOyBkOyBkID0gbikgewo+ICsJCQlzdHJ1Y3QgY29uc29s ZSAqY29uID0gJmQtPmNvbnNvbGU7Cj4gKwo+ICAJCQluID0gZC0+bmV4dDsKPiAgCQkJaWYgKGQt PmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9BTExPV0FOQ0UpIHsKPiAgCQkJCWlmIChkLT54Y2Vf aGFuZGxlICE9IE5VTEwgJiYKPiBAQCAtMTE3MCwyMiArMTE5OCwyMiBAQCB2b2lkIGhhbmRsZV9p byh2b2lkKQo+ICAJCQkJICAgIGhhbmRsZV9yaW5nX3JlYWQoZCk7Cj4gIAkJCX0KPiAgCj4gLQkJ CWlmIChkLT5tYXN0ZXJfZmQgIT0gLTEgJiYgZC0+bWFzdGVyX3BvbGxmZF9pZHggIT0gLTEpIHsK PiAtCQkJCWlmIChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgo+ICsJCQlpZiAo Y29uLT5tYXN0ZXJfZmQgIT0gLTEgJiYgY29uLT5tYXN0ZXJfcG9sbGZkX2lkeCAhPSAtMSkgewo+ ICsJCQkJaWYgKGZkc1tjb24tPm1hc3Rlcl9wb2xsZmRfaWR4XS5yZXZlbnRzICYKPiAgCQkJCSAg ICB+KFBPTExJTnxQT0xMT1VUfFBPTExQUkkpKQo+ICAJCQkJCWRvbWFpbl9oYW5kbGVfYnJva2Vu X3R0eShkLAo+ICAJCQkJCQkgICBkb21haW5faXNfdmFsaWQoZC0+ZG9taWQpKTsKPiAgCQkJCWVs c2Ugewo+IC0JCQkJCWlmIChmZHNbZC0+bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgo+ICsJ CQkJCWlmIChmZHNbY29uLT5tYXN0ZXJfcG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4gIAkJCQkJICAg IFBPTExJTikKPiAgCQkJCQkJaGFuZGxlX3R0eV9yZWFkKGQpOwo+IC0JCQkJCWlmIChmZHNbZC0+ bWFzdGVyX3BvbGxmZF9pZHhdLnJldmVudHMgJgo+ICsJCQkJCWlmIChmZHNbY29uLT5tYXN0ZXJf cG9sbGZkX2lkeF0ucmV2ZW50cyAmCj4gIAkJCQkJICAgIFBPTExPVVQpCj4gIAkJCQkJCWhhbmRs ZV90dHlfd3JpdGUoZCk7Cj4gIAkJCQl9Cj4gIAkJCX0KPiAgCj4gLQkJCWQtPnhjZV9wb2xsZmRf aWR4ID0gZC0+bWFzdGVyX3BvbGxmZF9pZHggPSAtMTsKPiArCQkJZC0+eGNlX3BvbGxmZF9pZHgg PSBjb24tPm1hc3Rlcl9wb2xsZmRfaWR4ID0gLTE7Cj4gIAo+ICAJCQlpZiAoZC0+bGFzdF9zZWVu ICE9IGVudW1fcGFzcykKPiAgCQkJCXNodXRkb3duX2RvbWFpbihkKTsKPiAtLSAKPiAyLjcuNAo+ IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==