From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Wilck Subject: Re: [PATCH] multipath-tools: intermittent IO error accounting to improve reliability Date: Mon, 28 Aug 2017 15:28:21 +0200 Message-ID: <1503926901.4546.26.camel@suse.com> References: <1503396479-12692-1-git-send-email-guanjunxiong@huawei.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1503396479-12692-1-git-send-email-guanjunxiong@huawei.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Guan Junxiong , dm-devel@redhat.com, christophe.varoqui@opensvc.com Cc: chengjike.cheng@huawei.com, niuhaoxin@huawei.com, shenhong09@huawei.com List-Id: dm-devel.ids SGVsbG8gR3VhbiwKCnNvcnJ5IGZvciByZXBseWluZyBsYXRlLiBIYW5uZXMgaGFzIGFscmVhZHkg Y29tbWVudGVkIG9uIHRoZSBnZW5lcmFsCmNvbmNlcHQuIEkgaGF2ZSBhIGZldyBtb3JlIHJlbWFy a3Mgb24gZGV0YWlscyBoZXJlLgoKT24gVHVlLCAyMDE3LTA4LTIyIGF0IDE4OjA3ICswODAwLCBH dWFuIEp1bnhpb25nIHdyb3RlOgo+IFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBtZXRob2Qgb2YgcGF0 aCBzdGF0ZSBjaGVja2luZyBiYXNlZCBvbgo+IGFjY291bnRpbmcKPiBJTyBlcnJvci4gVGhpcyBp cyB1c2VmdWwgaW4gbWFueSBzY2VuYXJpb3Mgc3VjaCBhcyBpbnRlcm1pdHRlbnQgSU8KPiBlcnJv cgo+IGFuIGEgcGF0aCBkdWUgdG8gbmV0d29yayBjb25nZXN0aW9uLCBvciBhIHNoYWt5IGxpbmsu Cj4gCj4gVGhyZWUgcGFyYW1ldGVycyBhcmUgYWRkZWQgZm9yIHRoZSBhZG1pbjogInBhdGhfaW9f ZXJyX3NhbXBsZV90aW1lIiwKPiAicGF0aF9pb19lcnJfbnVtX3RocmVzaG9sZCIgYW5kICJwYXRo X2lvX2Vycl9yZWNvdmVyeV90aW1lIi4KPiBJZiBwYXRoX2lvX2Vycl9zYW1wbGVfdGltZSBhbmQg cGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSBhcmUgc2V0IHRvIGEKPiB2YWx1ZSBncmVhdGVyIHRo YW4gMCwgd2hlbiBhIHBhdGggZmFpbCBldmVudCBvY2N1cnMgZHVlIHRvIGFuIElPCj4gZXJyb3Is Cj4gbXVsdGlwYXRoZCB3aWxsIGVucXVldWUgdGhpcyBwYXRoIGludG8gYSBxdWV1ZSBvZiB3aGlj aCBlYWNoIG1lbWJlcgo+IGlzCj4gc2VudCBkaXJlY3QgcmVhZGluZyBhc3luY2hyb25vdXMgaW8g YXQgYSBmaXhlZCBzYW1wbGUgcmF0ZSBvZiAxMDBIWi4gCgoxLiBJIGRvbid0IHRoaW5rIGl0J3Mg cHJ1ZGVudCB0byBzdGFydCB0aGUgZmxha2luZXNzIGNoZWNrIGZvciBldmVyeQpQQVRIX0RPV04g ZXZlbnQuIFJhdGhlciwgdGhlIHRlc3Qgc2hvdWxkIG9ubHkgYmUgc3RhcnRlZCBmb3IgcGF0aHMg dGhhdApoYXZlIGZhaWxlZCByZXBlYXRlZGx5IGluIGEgY2VydGFpbiB0aW1lIGZyYW1lLCBzbyB0 aGF0IHdlIGhhdmUgcmVhc29uCnRvIGFzc3VtZSB0aGV5J3JlIGZsYWt5LgoKMi4gSG93IGRpZCB5 b3UgY29tZSB1cCB3aXRoIHRoZSAxMDBIeiBzYW1wbGUgcmF0ZSB2YWx1ZT8gSXQgc291bmRzCnF1 aXRlIGhpZ2ggaW4gdGhlIGZpcnN0IHBsYWNlICh0aGF0IHdhcyBteSBmaXJzdCB0aG91Z2h0IHdo ZW4gSSByZWFkCml0KSwgYW5kIE9UT0ggdGhvc2UgcHJvY2Vzc2VzIHRoYXQgcnVuIGludG8gaW50 ZXJtaXR0ZW50IElPIGVycm9ycyBhcmUKcHJvYmFibHkgdGhlIG9uZXMgdGhhdCBkbyBJL08gYWxt b3N0IGNvbnRpbnVvdXNseSwgc28gbWF5YmUgcmVhZGluZwpjb250aW51b3VzbHkgZm9yIGEgbGlt aXRlZCB0aW1lIGlzIHRoZSBiZXR0ZXIgaWRlYT8KCjMuIEkgd291bGQgc3VnZ2VzdCBzZXR0aW5n IHRoZSBkbSBzdGF0dXMgb2YgcGF0aHMgdW5kZXJnb2luZyB0aGUKZmxha2luZXNzIHRlc3QgdG8g ImZhaWxlZCIgaW1tZWRpYXRlbHkuIFRoYXQgd2F5IHRoZSBJTyBjYXVzZWQgYnkgdGhlCnRlc3Qg d2lsbCBub3QgaW50ZXJmZXJlIHdpdGggdGhlIHJlZ3VsYXIgSU8gb24gdGhlIHBhdGguIAoKNC4g SSBjYW4gc2VlIHRoYXQgeW91IGNob3NlIGFpbyB0byBhdm9pZCBoYXZpbmcgdG8gY3JlYXRlIGEg c2VwYXJhdGUKdGhyZWFkIGZvciBlYWNoIHBhdGggYmVpbmcgY2hlY2tlZC4gQnV0IEknbSB3b25k ZXJpbmcgd2hldGhlciB1c2luZyBhaW8KZm9yIHRoaXMgaXMgYSBnb29kIGNob2ljZSBpbiBnZW5l cmFsLiBNeSBjb25jZXJuIHdpdGggYWlvIGlzIHRoYXQgdG8gbXkKa25vd2xlZGdlIHRoZXJlJ3Mg bm8gZ29vZCBsb3ctbGV2ZWwgY2FuY2VsbGF0aW9uIG1lY2hhbmlzbS4gV2hlbiB5b3UKaW9fY2Fu Y2VsKCkgb25lIG9mIHlvdXIgcmVxdWVzdHMsIHlvdSBjYW4gYmUgc3VyZSBub3QgdG8gZ2V0IG5v dGlmaWVkCm9mIGl0cyBjb21wbGV0aW9uIGFueSBtb3JlLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4g dGhhdCBpdCB3b3VsZG4ndApjb250aW51ZSB0byBsdXJrIGRvd24gaW4gdGhlIGJsb2NrIGxheWVy LiBCdXQgSSBtYXkgYmUgb3Zlcmxvb2tpbmcKZXNzZW50aWFsIHN0dWZmIGhlcmUuCgo+IFRoZXRo cgo+IElPIGFjY291bnRpbmcgcHJvY2VzcyBmb3IgYSBwYXRoIHdpbGwgbGFzdCBmb3IKPiBwYXRo X2lvX2Vycl9zYW1wbGVfdGltZS4KPiBJZiB0aGUgbnVtYmVyIG9mIElPIGVycm9yIG9uIGEgcGFy dGljdWxhciBwYXRoIGlzIGdyZWF0ZXIgdGhhbiB0aGUKPiBwYXRoX2lvX2Vycl9udW1fdGhyZXNo b2xkLCB0aGVuIHRoZSBwYXRoIHdpbGwgbm90IHJlaW5zdGF0ZSBmb3IKCkl0IHdvdWxkIGJlIG1v cmUgdXNlci1mcmllbmRseSB0byBhbGxvdyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBlcnJvcgpy YXRlIHRocmVzaG9sZCBhcyBhIHBlcmNlbnRhZ2UuCgo+IAo+IFRoaXMgaGVscHMgdXMgcGxhY2Ug dGhlIHBhdGggaW4gZGVsYXllZCBzdGF0ZSBpZiB3ZSBoaXQgYSBsb3Qgb2YKPiBpbnRlcm1pdHRl bnQgSU8gZXJyb3JzIG9uIGEgcGFydGljdWxhciBwYXRoIGR1ZSB0byBuZXR3b3JrL3RhcmdldAo+ IGlzc3VlcyBhbmQgaXNvbGF0ZSBzdWNoIGRlZ3JhZGVkIHBhdGggYW5kIGFsbG93IHRoZSBhZG1p biB0byByZWN0aWZ5Cj4gdGhlIGVycm9ycyBvbiBhIHBhdGguCj4gCj4gU2lnbmVkLW9mZi1ieTog SnVueGlvbmcgR3VhbiA8Z3Vhbmp1bnhpb25nQGh1YXdlaS5jb20+Cj4gLS0tCj4gIGxpYm11bHRp cGF0aC9NYWtlZmlsZSAgICAgIHwgICA1ICstCj4gIGxpYm11bHRpcGF0aC9jb25maWcuaCAgICAg IHwgICA5ICsKPiAgbGlibXVsdGlwYXRoL2NvbmZpZ3VyZS5jICAgfCAgIDMgKwo+ICBsaWJtdWx0 aXBhdGgvZGljdC5jICAgICAgICB8ICA0MSArKysrCj4gIGxpYm11bHRpcGF0aC9pb19lcnJfc3Rh dC5jIHwgNTIyCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIGxpYm11bHRpcGF0aC9pb19lcnJfc3RhdC5oIHwgIDE2ICsrCj4gIGxpYm11bHRpcGF0aC9w cm9wc2VsLmMgICAgIHwgIDUzICsrKysrCj4gIGxpYm11bHRpcGF0aC9wcm9wc2VsLmggICAgIHwg ICAzICsKPiAgbGlibXVsdGlwYXRoL3N0cnVjdHMuaCAgICAgfCAgIDUgKwo+ICBsaWJtdWx0aXBh dGgvdWV2ZW50LmMgICAgICB8ICAzNiArKystCj4gIGxpYm11bHRpcGF0aC91ZXZlbnQuaCAgICAg IHwgICAyICsKPiAgbXVsdGlwYXRoL211bHRpcGF0aC5jb25mLjUgfCAgNDIgKysrKwo+ICBtdWx0 aXBhdGhkL21haW4uYyAgICAgICAgICB8ICA1NiArKysrKwo+ICAxMyBmaWxlcyBjaGFuZ2VkLCA3 ODkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp Ym11bHRpcGF0aC9pb19lcnJfc3RhdC5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJtdWx0aXBh dGgvaW9fZXJyX3N0YXQuaAo+IAo+IGRpZmYgLS1naXQgYS9saWJtdWx0aXBhdGgvTWFrZWZpbGUg Yi9saWJtdWx0aXBhdGgvTWFrZWZpbGUKPiBpbmRleCBiMzI0NGZjNy4uZGNlNzNhZmUgMTAwNjQ0 Cj4gLS0tIGEvbGlibXVsdGlwYXRoL01ha2VmaWxlCj4gKysrIGIvbGlibXVsdGlwYXRoL01ha2Vm aWxlCj4gQEAgLTksNyArOSw3IEBAIExJQlMgPSAkKERFVkxJQikuJChTT05BTUUpCj4gIAo+ICBD RkxBR1MgKz0gJChMSUJfQ0ZMQUdTKSAtSSQobXBhdGhjbWRkaXIpCj4gIAo+IC1MSUJERVBTICs9 IC1scHRocmVhZCAtbGRsIC1sZGV2bWFwcGVyIC1sdWRldiAtTCQobXBhdGhjbWRkaXIpCj4gLWxt cGF0aGNtZCAtbHVyY3UKPiArTElCREVQUyArPSAtbHB0aHJlYWQgLWxkbCAtbGRldm1hcHBlciAt bHVkZXYgLUwkKG1wYXRoY21kZGlyKQo+IC1sbXBhdGhjbWQgLWx1cmN1IC1sYWlvCj4gIAo+ICBp ZmRlZiBTWVNURU1ECj4gIAlDRkxBR1MgKz0gLURVU0VfU1lTVEVNRD0kKFNZU1RFTUQpCj4gQEAg LTQyLDcgKzQyLDggQEAgT0JKUyA9IG1lbW9yeS5vIHBhcnNlci5vIHZlY3Rvci5vIGRldm1hcHBl ci5vCj4gY2FsbG91dC5vIFwKPiAgCXBncG9saWNpZXMubyBkZWJ1Zy5vIGRlZmF1bHRzLm8gdWV2 ZW50Lm8gdGltZS11dGlsLm8gXAo+ICAJc3dpdGNoZ3JvdXAubyB1eHNvY2subyBwcmludC5vIGFs aWFzLm8gbG9nX3B0aHJlYWQubyBcCj4gIAlsb2cubyBjb25maWd1cmUubyBzdHJ1Y3RzX3ZlYy5v IHN5c2ZzLm8gcHJpby5vIGNoZWNrZXJzLm8gXAo+IC0JbG9jay5vIHdhaXRlci5vIGZpbGUubyB3 d2lkcy5vIHByaW9yaXRpemVycy9hbHVhX3J0cGcubwo+ICsJbG9jay5vIHdhaXRlci5vIGZpbGUu byB3d2lkcy5vIHByaW9yaXRpemVycy9hbHVhX3J0cGcubyBcCj4gKwlpb19lcnJfc3RhdC5vCj4g IAo+ICBhbGw6ICQoTElCUykKCj4gZGlmZiAtLWdpdCBhL2xpYm11bHRpcGF0aC9pb19lcnJfc3Rh dC5jIGIvbGlibXVsdGlwYXRoL2lvX2Vycl9zdGF0LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwLi5iNDhhOTk2YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJtdWx0 aXBhdGgvaW9fZXJyX3N0YXQuYwo+IEBAIC0wLDAgKzEsNTIyIEBACj4gKy8qCj4gKyAqIChDKSBD b3B5cmlnaHQgSFVBV0VJIFRlY2hub2xvZ3kgQ29ycC4gMjAxNywgQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KPiArICoKPiArICogaW9fZXJyX3N0YXQuYwo+ICsgKiB2ZXJzaW9uIDEuMAo+ICsgKgo+ICsg KiBJTyBlcnJvciBzdHJlYW0gc3RhdGlzdGljIHByb2Nlc3MgZm9yIHBhdGggZmFpbHVyZSBldmVu dCBmcm9tCj4ga2VybmVsCj4gKyAqCj4gKyAqIEF1dGhvcihzKTogR3VhbiBKdW54aW9uZyAyMDE3 IDxndWFuanVueGlvbmdAaHVhd2VpLmNvbT4KPiArICoKPiArICogVGhpcyBmaWxlIGlzIHJlbGVh c2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLCBvciBhbnkgbGF0ZXIKPiB2ZXJzaW9uLgo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPHB0aHJlYWQuaD4KPiAr I2luY2x1ZGUgPHNpZ25hbC5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Zz Lmg+Cj4gKyNpbmNsdWRlIDxsaWJhaW8uaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNs dWRlIDxzeXMvbW1hbi5oPgo+ICsKPiArI2luY2x1ZGUgInZlY3Rvci5oIgo+ICsjaW5jbHVkZSAi bWVtb3J5LmgiCj4gKyNpbmNsdWRlICJjaGVja2Vycy5oIgo+ICsjaW5jbHVkZSAiY29uZmlnLmgi Cj4gKyNpbmNsdWRlICJzdHJ1Y3RzLmgiCj4gKyNpbmNsdWRlICJzdHJ1Y3RzX3ZlYy5oIgo+ICsj aW5jbHVkZSAiZGV2bWFwcGVyLmgiCj4gKyNpbmNsdWRlICJkZWJ1Zy5oIgo+ICsjaW5jbHVkZSAi bG9jay5oIgo+ICsjaW5jbHVkZSAidGltZS11dGlsLmgiCj4gKyNpbmNsdWRlICJpb19lcnJfc3Rh dC5oIgo+ICsKPiArI2RlZmluZSBJT1RJTUVPVVRfU0VDIDYwCj4gKwo+ICsjZGVmaW5lIGlvX2Vy cl9zdGF0X2xvZyhwcmlvLCBmbXQsIGFyZ3MuLi4pIFwKPiArCWNvbmRsb2cocHJpbywgImlvIGVy cm9yIHN0YXRpc3RpYzogIiBmbXQsICMjYXJncykKPiArCj4gK3N0cnVjdCBpb19lcnJfc3RhdF9w YXRodmVjIHsKPiArCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKPiArCXZlY3RvcgkJcGF0aHZlYzsK PiArfTsKPiArCj4gK3N0cnVjdCBkaW9fY3R4IHsKPiArCXN0cnVjdCB0aW1lc3BlYwlpb19zdGFy dHRpbWU7Cj4gKwlpbnQJCWJsa3NpemU7Cj4gKwl1bnNpZ25lZCBjaGFyCSpidWY7Cj4gKwl1bnNp Z25lZCBjaGFyCSpwdHI7Cj4gKwlpb19jb250ZXh0X3QJaW9jdHg7Cj4gKwlzdHJ1Y3QgaW9jYglp bzsKPiArfTsKPiArCj4gK3N0cnVjdCBpb19lcnJfc3RhdF9wYXRoIHsKPiArCWNoYXIJCWRldm5h bWVbRklMRV9OQU1FX1NJWkVdOwo+ICsJaW50CQlmZDsKPiArCXN0cnVjdCBkaW9fY3R4CSpwZF9j dHg7Cj4gKwlpbnQJCWlvX2Vycl9ucjsKPiArCWludAkJaW9fbnI7Cj4gKwlzdHJ1Y3QgdGltZXNw ZWMJc3RhcnRfdGltZTsKPiArCj4gKwlpbnQJCXRvdGFsX3RpbWU7Cj4gKwlpbnQJCWVycl9udW1f dGhyZXNob2xkOwo+ICt9Owo+ICsKPiArcHRocmVhZF90CQlpb19lcnJfc3RhdF90aHI7Cj4gK3B0 aHJlYWRfYXR0cl90CQlpb19lcnJfc3RhdF9hdHRyOwo+ICsKPiArc3RhdGljIHN0cnVjdCBpb19l cnJfc3RhdF9wYXRodmVjICpwYXRoczsKPiArc3RydWN0IHZlY3RvcnMgKnZlY3M7Cj4gKwo+ICtz dGF0aWMgdm9pZCByY3VfdW5yZWdpc3Rlcih2b2lkICpwYXJhbSkKPiArewo+ICsJcmN1X3VucmVn aXN0ZXJfdGhyZWFkKCk7Cj4gK30KPiArCj4gK3N0cnVjdCBpb19lcnJfc3RhdF9wYXRoICpmaW5k X2Vycl9wYXRoX2J5X2Rldih2ZWN0b3IgcGF0aHZlYywgY2hhcgo+ICpkZXYpCgpZb3UgYXJlIHJl LWltcGxlbWVudGluZyBnZW5lcmljIGZ1bmN0aW9uYWxpdHkgaGVyZSAoZmluZF9wYXRoX2J5X2Rl diksCndoeT8KCgo+ICt7Cj4gKwlpbnQgaTsKPiArCXN0cnVjdCBpb19lcnJfc3RhdF9wYXRoICpw cDsKPiArCj4gKwlpZiAoIXBhdGh2ZWMpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl2ZWN0b3JfZm9y ZWFjaF9zbG90KHBhdGh2ZWMsIHBwLCBpKQo+ICsJCWlmICghc3RyY21wKHBwLT5kZXZuYW1lLCBk ZXYpKQo+ICsJCQlyZXR1cm4gcHA7Cj4gKwo+ICsJaW9fZXJyX3N0YXRfbG9nKDQsICIlczogbm90 IGZvdW5kIGluIGNoZWNrIHF1ZXVlIiwgZGV2KTsKPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ ICsKPiArc3RhdGljIGludCBzZXR1cF9kaXJlY3Rpb19jdHgoc3RydWN0IGlvX2Vycl9zdGF0X3Bh dGggKnApCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKPiAr CWNoYXIgZnBhdGhbRklMRV9OQU1FX1NJWkUrNl07Cj4gKwo+ICsJc25wcmludGYoZnBhdGgsIEZJ TEVfTkFNRV9TSVpFLCAiL2Rldi8lcyIsIHAtPmRldm5hbWUpOwo+ICsJaWYgKHAtPmZkIDwgMCkK PiArCQlwLT5mZCA9IG9wZW4oZnBhdGgsIE9fUkRPTkxZIHwgT19ESVJFQ1QpOwo+ICsJaWYgKHAt PmZkIDwgMCkKPiArCQlyZXR1cm4gMTsKPiArCj4gKwlwLT5wZF9jdHggPSBNQUxMT0Moc2l6ZW9m KHN0cnVjdCBkaW9fY3R4KSk7Cj4gKwlpZiAoIXAtPnBkX2N0eCkKPiArCQlnb3RvIGZhaWxfY2xv c2U7Cj4gKwlpZiAoaW9fc2V0dXAoMSwgJnAtPnBkX2N0eC0+aW9jdHgpICE9IDApIHsKPiArCQlp b19lcnJfc3RhdF9sb2coNCwgImlvX3NldHVwIGZhaWxlZCBmb3IgJXMiLCBmcGF0aCk7Cj4gKwkJ Z290byBmcmVlX3BkY3R4Owo+ICsJfQo+ICsKPiArCWlmIChpb2N0bChwLT5mZCwgQkxLQlNaR0VU LCAmcC0+cGRfY3R4LT5ibGtzaXplKSA8IDApIHsKPiArCQlpb19lcnJfc3RhdF9sb2coNCwgImNh bm5vdCBnZXQgYmxvY2tzaXplLCBzZXQKPiBkZWZhdWx0Iik7Cj4gKwkJcC0+cGRfY3R4LT5ibGtz aXplID0gNTEyOwo+ICsJfQo+ICsJLyoKPiArCSAqIFNhbml0eSBjaGVjayBmb3IgYmxvY2sgc2l6 ZQo+ICsJICovCj4gKwlpZiAocC0+cGRfY3R4LT5ibGtzaXplID4gNDA5NikKPiArCQlwLT5wZF9j dHgtPmJsa3NpemUgPSA0MDk2Owo+ICsJaWYgKCFwLT5wZF9jdHgtPmJsa3NpemUpCj4gKwkJZ290 byBpb19kZXN0cjsKPiArCj4gKwlwLT5wZF9jdHgtPmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopTUFM TE9DKHAtPnBkX2N0eC0+Ymxrc2l6ZQo+ICsgcGdzaXplKTsKPiArCWlmICghcC0+cGRfY3R4LT5i dWYpCj4gKwkJZ290byBpb19kZXN0cjsKPiArCj4gKwlwLT5wZF9jdHgtPnB0ciA9ICh1bnNpZ25l ZCBjaGFyICopKCgodW5zaWduZWQgbG9uZylwLQo+ID5wZF9jdHgtPmJ1ZiArCj4gKwkJCQlwZ3Np emUgLSAxKSAmICh+KHBnc2l6ZSAtIDEpKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtpb19k ZXN0cjoKPiArCWlvX2Rlc3Ryb3kocC0+cGRfY3R4LT5pb2N0eCk7Cj4gK2ZyZWVfcGRjdHg6Cj4g KwlGUkVFKHAtPnBkX2N0eCk7Cj4gK2ZhaWxfY2xvc2U6Cj4gKwljbG9zZShwLT5mZCk7Cj4gKwo+ ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZGlyZWN0aW9fY3R4 KHN0cnVjdCBpb19lcnJfc3RhdF9wYXRoICpwKQo+ICt7Cj4gKwlpZiAoIXAgfHwgIXAtPnBkX2N0 eCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKHAtPnBkX2N0eC0+YnVmKQo+ICsJCUZSRUUocC0+ cGRfY3R4LT5idWYpOwo+ICsJaWYgKHAtPnBkX2N0eC0+aW9jdHgpCj4gKwkJaW9fZGVzdHJveShw LT5wZF9jdHgtPmlvY3R4KTsKPiArCUZSRUUocC0+cGRfY3R4KTsKPiArCWlmIChwLT5mZCA+IDAp Cj4gKwkJY2xvc2UocC0+ZmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlvX2Vycl9zdGF0 X3BhdGggKmFsbG9jX2lvX2Vycl9zdGF0X3BhdGgodm9pZCkKPiArewo+ICsJc3RydWN0IGlvX2Vy cl9zdGF0X3BhdGggKnA7Cj4gKwo+ICsJcCA9IChzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aCAqKU1B TExPQyhzaXplb2YoKnApKTsKPiArCWlmICghcCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlt ZW1zZXQocC0+ZGV2bmFtZSwgMCwgc2l6ZW9mKHAtPmRldm5hbWUpKTsKPiArCXAtPmlvX2Vycl9u ciA9IDA7Cj4gKwlwLT5pb19uciA9IDA7Cj4gKwlwLT50b3RhbF90aW1lID0gMDsKPiArCXAtPnN0 YXJ0X3RpbWUudHZfc2VjID0gMDsKPiArCXAtPnN0YXJ0X3RpbWUudHZfbnNlYyA9IDA7Cj4gKwlw LT5lcnJfbnVtX3RocmVzaG9sZCA9IDA7Cj4gKwlwLT5mZCA9IC0xOwo+ICsKPiArCXJldHVybiBw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmcmVlX2lvX2Vycl9zdGF0X3BhdGgoc3RydWN0IGlv X2Vycl9zdGF0X3BhdGggKnApCj4gK3sKPiArCWlmIChwKQo+ICsJCUZSRUUocCk7Cj4gK30KCk5p dHBpY2s6IFRoaXMgY2hlY2sgaXNuJ3QgbmVjZXNzYXJ5LgoKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg aW9fZXJyX3N0YXRfcGF0aHZlYyAqYWxsb2NfcGF0aHZlYyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qg aW9fZXJyX3N0YXRfcGF0aHZlYyAqcDsKPiArCWludCByOwo+ICsKPiArCXAgPSAoc3RydWN0IGlv X2Vycl9zdGF0X3BhdGh2ZWMgKilNQUxMT0Moc2l6ZW9mKCpwKSk7Cj4gKwlpZiAoIXApCj4gKwkJ cmV0dXJuIE5VTEw7Cj4gKwlwLT5wYXRodmVjID0gdmVjdG9yX2FsbG9jKCk7Cj4gKwlpZiAoIXAt PnBhdGh2ZWMpCj4gKwkJZ290byBvdXRfZnJlZV9zdHJ1Y3RfcGF0aHZlYzsKPiArCXIgPSBwdGhy ZWFkX211dGV4X2luaXQoJnAtPm11dGV4LCBOVUxMKTsKPiArCWlmIChyKQo+ICsJCWdvdG8gb3V0 X2ZyZWVfbWVtYmVyX3BhdGh2ZWM7Cj4gKwo+ICsJcmV0dXJuIHA7Cj4gKwo+ICtvdXRfZnJlZV9t ZW1iZXJfcGF0aHZlYzoKPiArCXZlY3Rvcl9mcmVlKHAtPnBhdGh2ZWMpOwo+ICtvdXRfZnJlZV9z dHJ1Y3RfcGF0aHZlYzoKPiArCUZSRUUocCk7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZnJlZV9pb19lcnJfcGF0aHZlYyhzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aHZl YyAqcCkKPiArewo+ICsJc3RydWN0IGlvX2Vycl9zdGF0X3BhdGggKnBhdGg7Cj4gKwlpbnQgaTsK PiArCj4gKwlpZiAoIXApCj4gKwkJcmV0dXJuOwo+ICsJcHRocmVhZF9tdXRleF9kZXN0cm95KCZw LT5tdXRleCk7Cj4gKwlpZiAoIXAtPnBhdGh2ZWMpIHsKPiArCQl2ZWN0b3JfZm9yZWFjaF9zbG90 KHAtPnBhdGh2ZWMsIHBhdGgsIGkpIHsKPiArCQkJZGVzdHJveV9kaXJlY3Rpb19jdHgocGF0aCk7 Cj4gKwkJCWZyZWVfaW9fZXJyX3N0YXRfcGF0aChwYXRoKTsKPiArCQl9Cj4gKwkJdmVjdG9yX2Zy ZWUocC0+cGF0aHZlYyk7Cj4gKwl9Cj4gKwlGUkVFKHApOwo+ICt9Cj4gKwo+ICtpbnQgZW5xdWV1 ZV9pb19lcnJfc3RhdF9ieV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQo+ICt7Cj4gKwlzdHJ1Y3Qg aW9fZXJyX3N0YXRfcGF0aCAqcDsKPiArCj4gKwlpZiAocGF0aC0+aW9fZXJyX2Rpc2FibGVfcmVp bnN0YXRlKSB7Cj4gKwkJaW9fZXJyX3N0YXRfbG9nKDMsICIlczogcmVpbnN0YXRlIGlzIGFscmVh ZHkKPiBkaXNhYmxlZCIsCj4gKwkJCQlwYXRoLT5kZXYpOwo+ICsJCXJldHVybiAxOwo+ICsJfQo+ ICsKPiArCWlmICghcGF0aC0+bXBwKQo+ICsJCXJldHVybiAxOwo+ICsJaWYgKHBhdGgtPm1wcC0+ cGF0aF9pb19lcnJfc2FtcGxlX3RpbWUgPD0gMCB8fAo+ICsJCXBhdGgtPm1wcC0+cGF0aF9pb19l cnJfcmVjb3ZlcnlfdGltZSA8PSAwIHx8Cj4gKwkJcGF0aC0+bXBwLT5wYXRoX2lvX2Vycl9udW1f dGhyZXNob2xkIDwgMCkgewo+ICsJCWlvX2Vycl9zdGF0X2xvZyg0LCAiJXM6IHBhcmFtZXRlciBu b3Qgc2V0IiwgcGF0aC0KPiA+bXBwLT5hbGlhcyk7Cj4gKwkJcmV0dXJuIDE7Cj4gKwl9Cj4gKwo+ ICsJcHRocmVhZF9tdXRleF9sb2NrKCZwYXRocy0+bXV0ZXgpOwo+ICsJcCA9IGZpbmRfZXJyX3Bh dGhfYnlfZGV2KHBhdGhzLT5wYXRodmVjLCBwYXRoLT5kZXYpOwo+ICsJaWYgKHApIHsKPiArCQlw dGhyZWFkX211dGV4X3VubG9jaygmcGF0aHMtPm11dGV4KTsKPiArCQlyZXR1cm4gMTsKPiArCX0K PiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYXRocy0+bXV0ZXgpOwo+ICsKPiArCXAgPSBhbGxv Y19pb19lcnJfc3RhdF9wYXRoKCk7Cj4gKwlpZiAoIXApCj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJ bWVtY3B5KHAtPmRldm5hbWUsIHBhdGgtPmRldiwgc2l6ZW9mKHAtPmRldm5hbWUpKTsKPiArCXAt PnRvdGFsX3RpbWUgPSBwYXRoLT5tcHAtPnBhdGhfaW9fZXJyX3NhbXBsZV90aW1lOwo+ICsJcC0+ ZXJyX251bV90aHJlc2hvbGQgPSBwYXRoLT5tcHAtPnBhdGhfaW9fZXJyX251bV90aHJlc2hvbGQ7 Cj4gKwo+ICsJaWYgKHNldHVwX2RpcmVjdGlvX2N0eChwKSkKPiArCQlnb3RvIGZyZWVfaW9lcnJf cGF0aDsKPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmcGF0aHMtPm11dGV4KTsKPiArCWlmICghdmVj dG9yX2FsbG9jX3Nsb3QocGF0aHMtPnBhdGh2ZWMpKQo+ICsJCWdvdG8gdW5sb2NrX2Rlc3Ryb3k7 Cj4gKwl2ZWN0b3Jfc2V0X3Nsb3QocGF0aHMtPnBhdGh2ZWMsIHApOwo+ICsJcHRocmVhZF9tdXRl eF91bmxvY2soJnBhdGhzLT5tdXRleCk7Cj4gKwo+ICsJaW9fZXJyX3N0YXRfbG9nKDIsICIlczog ZW5xdWV1ZSBwYXRoICVzIHRvIGNoZWNrIiwKPiArCQkJcGF0aC0+bXBwLT5hbGlhcywgcGF0aC0+ ZGV2KTsKPiArCXJldHVybiAwOwo+ICsKPiArdW5sb2NrX2Rlc3Ryb3k6Cj4gKwlwdGhyZWFkX211 dGV4X3VubG9jaygmcGF0aHMtPm11dGV4KTsKPiArCWRlc3Ryb3lfZGlyZWN0aW9fY3R4KHApOwo+ ICtmcmVlX2lvZXJyX3BhdGg6Cj4gKwlmcmVlX2lvX2Vycl9zdGF0X3BhdGgocCk7Cj4gKwo+ICsJ cmV0dXJuIDE7Cj4gK30KPiArCj4gK2ludCBoaXRfaW9fZXJyX3JlY292ZXJ5X3RpbWUoc3RydWN0 IHBhdGggKnBwKQo+ICt7Cj4gKwlzdHJ1Y3QgdGltZXNwZWMgY3Vycl90aW1lOwo+ICsKPiArCWlm IChwcC0+aW9fZXJyX2Rpc2FibGVfcmVpbnN0YXRlID09IDApCj4gKwkJcmV0dXJuIDE7Cj4gKwlp ZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZjdXJyX3RpbWUpICE9IDApCj4gKwkJ cmV0dXJuIDE7Cj4gKwlpZiAocHAtPm1wcC0+bnJfYWN0aXZlID09IDApIHsKPiArCQlpb19lcnJf c3RhdF9sb2coMiwgIiVzOiByZWNvdmVyIHBhdGggZWFybHkiLCBwcC0KPiA+ZGV2KTsKPiArCQln b3RvIHJlY292ZXI7Cj4gKwl9Cj4gKwlpZiAoKGN1cnJfdGltZS50dl9zZWMgLSBwcC0+aW9fZXJy X2Rpc19yZWluc3RhdGVfdGltZSkgPgo+ICsJCQlwcC0+bXBwLT5wYXRoX2lvX2Vycl9yZWNvdmVy eV90aW1lKSB7Cj4gKwkJaW9fZXJyX3N0YXRfbG9nKDIsICIlczogcmVjb3ZlciBwYXRoIGFmdGVy ICVkCj4gc2Vjb25kcyIsCj4gKwkJCQlwcC0+ZGV2LCBwcC0+bXBwLQo+ID5wYXRoX2lvX2Vycl9z YW1wbGVfdGltZSk7Cj4gKwkJZ290byByZWNvdmVyOwo+ICsJfQo+ICsKPiArCXJldHVybiAxOwo+ ICsKPiArcmVjb3ZlcjoKPiArCXBwLT5pb19lcnJfZGlzYWJsZV9yZWluc3RhdGUgPSAwOwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZGVsZXRlX2lvX2Vycl9zdGF0X2J5X2Fk ZHIoc3RydWN0IGlvX2Vycl9zdGF0X3BhdGggKnApCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWkg PSBmaW5kX3Nsb3QocGF0aHMtPnBhdGh2ZWMsIHApOwo+ICsJaWYgKGkgIT0gLTEpCj4gKwkJdmVj dG9yX2RlbF9zbG90KHBhdGhzLT5wYXRodmVjLCBpKTsKPiArCj4gKwlkZXN0cm95X2RpcmVjdGlv X2N0eChwKTsKPiArCWZyZWVfaW9fZXJyX3N0YXRfcGF0aChwKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBjaGVja19hc3luY19pbyhzdHJ1Y3QgdmVjdG9ycyAqdmVj cywgc3RydWN0Cj4gaW9fZXJyX3N0YXRfcGF0aCAqcHAsCj4gKwkJCWludCByYykKPiArewo+ICsJ c3RydWN0IHRpbWVzcGVjIGN1cnJ0aW1lLCBkaWZmdGltZTsKPiArCXN0cnVjdCBwYXRoICpwYXRo Owo+ICsKPiArCXN3aXRjaCAocmMpIHsKPiArCWNhc2UgUEFUSF9VTkNIRUNLRUQ6Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIFBBVEhfVVA6Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFBBVEhfRE9XTjoKPiAr CQlwcC0+aW9fZXJyX25yKys7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFBBVEhfVElNRU9VVDoKPiAr CQlwcC0+aW9fZXJyX25yKys7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFBBVEhfUEVORElORzoKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9CgpOaXRwaWNrOiBUaGlzIGNh c2Ugc3RhdGVtZW50IGNvdWxkIGJlIGdyb3VwZWQgbW9yZSBuaWNlbHkuCgo+ICsKPiArCWlmIChj bG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmN1cnJ0aW1lKSAhPSAwKQo+ICsJCXJldHVy biAxOwo+ICsJdGltZXNwZWNzdWIoJmN1cnJ0aW1lLCAmcHAtPnN0YXJ0X3RpbWUsICZkaWZmdGlt ZSk7Cj4gKwlpZiAoZGlmZnRpbWUudHZfc2VjIDwgcHAtPnRvdGFsX3RpbWUpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJaW9fZXJyX3N0YXRfbG9nKDMsICJjaGVjayBlbmQgZm9yICVzIiwgcHAtPmRl dm5hbWUpOwoKQXMgdGhpcyBpcyBjYWxsZWQgZm9yIGV2ZXJ5IElPLCBwbGVhc2UgdXNlIGEgImhp Z2hlciIgcHJpbyB2YWx1ZSAoSQpzdWdnZXN0IDUpLgoKPiArCj4gKwlwdGhyZWFkX2NsZWFudXBf cHVzaChjbGVhbnVwX2xvY2ssICZ2ZWNzLT5sb2NrKTsKPiArCWxvY2soJnZlY3MtPmxvY2spOwo+ ICsJcHRocmVhZF90ZXN0Y2FuY2VsKCk7Cj4gKwlwYXRoID0gZmluZF9wYXRoX2J5X2Rldih2ZWNz LT5wYXRodmVjLCBwcC0+ZGV2bmFtZSk7Cj4gKwo+ICsJaWYgKCFwYXRoKSB7Cj4gKwkJaW9fZXJy X3N0YXRfbG9nKDMsICJwYXRoICVzIG5vdCBmb3VuZCciLCBwcC0KPiA+ZGV2bmFtZSk7Cj4gKwl9 IGVsc2UgaWYgKHBwLT5pb19lcnJfbnIgPD0gcHAtPmVycl9udW1fdGhyZXNob2xkKSB7Cj4gKwkJ aW9fZXJyX3N0YXRfbG9nKDMsICIlczogKCVkLyVkKSBub3QgaGl0IHRocmVzaG9sZCIsCj4gKwkJ CQlwcC0+ZGV2bmFtZSwgcHAtPmlvX2Vycl9uciwgcHAtCj4gPmlvX25yKTsKClRoZSBsb2dsZXZl bCBoZXJlIHNob3VsZCBhbHNvIGJlICJoaWdoZXIiLgoKPiArCX0gZWxzZSBpZiAocGF0aC0+bXBw ICYmIHBhdGgtPm1wcC0+bnJfYWN0aXZlID4gMSkgewo+ICsJCWRtX2ZhaWxfcGF0aChwYXRoLT5t cHAtPmFsaWFzLCBwYXRoLT5kZXZfdCk7Cj4gKwkJdXBkYXRlX3F1ZXVlX21vZGVfZGVsX3BhdGgo cGF0aC0+bXBwKTsKPiArCQlpb19lcnJfc3RhdF9sb2coMiwgIiVzOiBwcm9hY2l2ZWx5IGZhaWwg ZG0gcGF0aCAlcyIsCgotPiBwcm9hY3RpdmVseQoKPiArCQkJCXBhdGgtPm1wcC0+YWxpYXMsIHBh dGgtPmRldik7Cj4gKwkJcGF0aC0+aW9fZXJyX2Rpc2FibGVfcmVpbnN0YXRlID0gMTsKPiArCQlw YXRoLT5pb19lcnJfZGlzX3JlaW5zdGF0ZV90aW1lID0gY3VycnRpbWUudHZfc2VjOwo+ICsJCWlv X2Vycl9zdGF0X2xvZygzLCAiJXM6IHRvIGRpc2FibGUgJXMgcmVpbnN0YXRlIiwKPiArCQkJCXBh dGgtPm1wcC0+YWxpYXMsIHBhdGgtPmRldik7Cj4gKwo+ICsJCS8qCj4gKwkJICogc2NoZWR1bGUg cGF0aCBjaGVjayBhcyBzb29uIGFzIHBvc3NpYmxlIHRvCj4gKwkJICogdXBkYXRlIHBhdGggc3Rh dGUgdG8gZGVsYXllZCBzdGF0ZQo+ICsJCSAqLwo+ICsJCXBhdGgtPnRpY2sgPSAxOwo+ICsJfSBl bHNlIHsKPiArCQlpb19lcnJfc3RhdF9sb2coMywgIiVzOiBkbyBub3RoaW5nIiwgcHAtPmRldm5h bWUpOwo+ICsJfQo+ICsJbG9ja19jbGVhbnVwX3BvcCh2ZWNzLT5sb2NrKTsKPiArCj4gKwlkZWxl dGVfaW9fZXJyX3N0YXRfYnlfYWRkcihwcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgc2VuZF9hc3luY19pbyhzdHJ1Y3QgaW9fZXJyX3N0YXRfcGF0aCAqcHAsIGlu dAo+IHRpbWVvdXRfc2VjcykKPiArewo+ICsJc3RydWN0IHRpbWVzcGVjCXRpbWVvdXQgPSB7IC50 dl9uc2VjID0gNSB9OwoKWW91IG1pZ2h0IGFzIHdlbGwgc2V0IHRoaXMgdG8gMCwgYXMgeW91IGRv bid0IHNlZW0gdG8gaW50ZW5kIHRvICJ3YWl0Igpmb3IgNSBucyBhbnl3YXksIHlvdSBqdXN0IHdh bnQgdG8gdGVzdCBmb3IgY29tcGxldGlvbi4KCj4gKwlzdHJ1Y3QgdGltZXNwZWMgY3Vycl90aW1l LCBkaWZmdGltZTsKPiArCXN0cnVjdCBpb19ldmVudCBldmVudDsKPiArCWludAkJcmMgPSBQQVRI X1VOQ0hFQ0tFRDsKPiArCWxvbmcJCXI7Cj4gKwo+ICsJc3RydWN0IGRpb19jdHggKmN0ID0gcHAt PnBkX2N0eDsKPiArCj4gKwlpZiAoIWN0KQo+ICsJCXJldHVybiByYzsKPiArCj4gKwlpZiAoY3Qt PmlvX3N0YXJ0dGltZS50dl9uc2VjID09IDAgJiYKPiArCQkJY3QtPmlvX3N0YXJ0dGltZS50dl9z ZWMgPT0gMCkgewo+ICsJCXN0cnVjdCBpb2NiICppb3NbMV0gPSB7ICZjdC0+aW8gfTsKPiArCj4g KwkJbWVtc2V0KCZjdC0+aW8sIDAsIHNpemVvZihzdHJ1Y3QgaW9jYikpOwo+ICsJCWlvX3ByZXBf cHJlYWQoJmN0LT5pbywgcHAtPmZkLCBjdC0+cHRyLCBjdC0+Ymxrc2l6ZSwgCj4gMCk7Cj4gKwkJ aWYgKGlvX3N1Ym1pdChjdC0+aW9jdHgsIDEsIGlvcykgIT0gMSkgewo+ICsJCQlpb19lcnJfc3Rh dF9sb2coMywgIiVzOiBpb19zdWJtaXQgZXJyb3IgJWkiLAo+ICsJCQkJCXBwLT5kZXZuYW1lLCBl cnJubyk7Cj4gKwkJCXJldHVybiByYzsKPiArCQl9Cj4gKwo+ICsJCWlmIChjbG9ja19nZXR0aW1l KENMT0NLX01PTk9UT05JQywgJmN0LQo+ID5pb19zdGFydHRpbWUpICE9IDApIHsKPiArCQkJY3Qt PmlvX3N0YXJ0dGltZS50dl9zZWMgPSAwOwo+ICsJCQljdC0+aW9fc3RhcnR0aW1lLnR2X25zZWMg PSAwOwo+ICsJCX0KCklNTyB0aGlzIGlzIHdyb25nLiBJZiBjbG9ja19nZXR0aW1lKCkgZmFpbHMs IHlvdSdyZSBpbiBzZXJpb3VzIHRyb3VibGUKYW5kIGp1c3QgcmVzZXR0aW5nIHRoZSB0aW1lIHdv bid0IHNhdmUgeW91LiBUaGlzIGxvb2tzIGxpa2UgYSBmYXRhbAplcnJvciBjb25kaXRpb24gdG8g bWUsIHlvdSBzaG91bGQgYWJvcnQgdGhlIHRlc3Qgb3Igd2hhdGV2ZXIuCgo+ICsKPiArCQlpZiAo cHAtPnN0YXJ0X3RpbWUudHZfc2VjID09IDAgJiYgcHAtCj4gPnN0YXJ0X3RpbWUudHZfbnNlYyA9 PSAwICYmCj4gKwkJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmcHAtCj4gPnN0YXJ0 X3RpbWUpKSB7CgpTZWUgYWJvdmUuCgo+ICsJCQlwcC0+c3RhcnRfdGltZS50dl9zZWMgPSAwOwo+ ICsJCQlwcC0+c3RhcnRfdGltZS50dl9uc2VjID0gMDsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0K PiArCQlwcC0+aW9fbnIrKzsKPiArCX0KPiArCj4gKwllcnJubyA9IDA7Cj4gKwlyID0gaW9fZ2V0 ZXZlbnRzKGN0LT5pb2N0eCwgMUwsIDFMLCAmZXZlbnQsICZ0aW1lb3V0KTsKClRoZSB3YXkgeW91 IGltcGxlbWVudGVkIHRoaXMsIHlvdSBkbyBhIGxvdCBvZiBldmVudCBwb2xsaW5nLiBDb3VsZCB5 b3UKcGVyaGFwcyB1c2UgYSBjb21tZW50IGFpb19jb250ZXh0IGZvciBhbGwgcGF0aHMsIGFuZCBw b2xsIG9ubHkgb25jZT8KCk9yIG1heWJlLCBhcyB0aGlzIGlzIGFpbywgeW91IGNvdWxkIGp1c3Qg aW9fc3VibWl0IHdpdGggMTAwIEh6IChvcgp3aGF0ZXZlcikgZnJlcXVlbmN5LCB3YWl0IGEgYml0 IHRvIGdpdmUgdGhlIHRoZSBsYXRlc3Qgc3VibWlzc2lvbnMgdGltZQp0byBjb21wbGV0ZSwgYW5k IHRoZW4gY29sbGVjdCBhbGwgZXZlbnRzIGluIGEgc2luZ2xlIGlvX2dldGV2ZW50cygpCmNhbGwu CgpZb3UgbWF5IGV2ZW4gYmUgYWJsZSB0byBjb21iaW5lIGJvdGggaWRlYXMgdG8gcmVkdWNlIHBv bGxpbmcgZXZlbiBtb3JlLgoKPiArCWlmIChyIDwgMCkgewo+ICsJCWlvX2Vycl9zdGF0X2xvZygz LCAiJXM6IGFzeW5jIGlvIGV2ZW50cyByZXR1cm5lZCAlZAo+IChlcnJubz0lcykiLAo+ICsJCQkJ cHAtPmRldm5hbWUsIHIsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJY3QtPmlvX3N0YXJ0dGltZS50 dl9zZWMgPSAwOwo+ICsJCWN0LT5pb19zdGFydHRpbWUudHZfbnNlYyA9IDA7Cj4gKwkJcmMgPSBQ QVRIX1VOQ0hFQ0tFRDsKPiArCX0gZWxzZSBpZiAociA8IDFMKSB7Cj4gKwkJaWYgKGNsb2NrX2dl dHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmY3Vycl90aW1lKSAhPSAwKQo+ICsJCQljdXJyX3RpbWUu dHZfc2VjID0gMDsKPiArCQl0aW1lc3BlY3N1YigmY3Vycl90aW1lLCAmY3QtPmlvX3N0YXJ0dGlt ZSwKPiAmZGlmZnRpbWUpOwo+ICsKPiArCQlpZiAoZGlmZnRpbWUudHZfc2VjID4gdGltZW91dF9z ZWNzKSB7Cj4gKwkJCXN0cnVjdCBpb2NiICppb3NbMV0gPSB7ICZjdC0+aW8gfTsKPiArCj4gKwkJ CWlvX2Vycl9zdGF0X2xvZygzLCAiJXM6IGFib3J0IGNoZWNrIG9uCj4gdGltZW91dCIsCj4gKwkJ CQkJcHAtPmRldm5hbWUpOwo+ICsJCQlyID0gaW9fY2FuY2VsKGN0LT5pb2N0eCwgaW9zWzBdLCAm ZXZlbnQpOwo+ICsJCQlpZiAocikKPiArCQkJCWlvX2Vycl9zdGF0X2xvZygzLCAiJXM6IGlvX2Nh bmNlbAo+IGVycm9yICVpIiwKPiArCQkJCQkJcHAtPmRldm5hbWUsIGVycm5vKTsKClRoaXMgaXMg YSBzZXJpb3VzIGVycm9yLiBJIGRvbid0IHRoaW5rIGl0IGNhbiBjb21lIHRvIHBhc3MgZWFzaWx5 LCBidXQKaWYgZG9lcywgeW91J3JlIGluIHRyb3VibGUuIFBlcmhhcHMgaW5jcmVhc2UgdGhlIHN0 YXJ0IHRpbWUgaGVyZSBzbwp0aGF0IHlvdSBkb24ndCByZXBlYXQgdGhpcyBjb2RlIHBhdGggd2l0 aCBldmVyeSBpbnZvY2F0aW9uIG9mCmNoZWNrX2FzeW5jX2lvKCk/Cgo+ICsJCQllbHNlewo+ICsJ CQkJY3QtPmlvX3N0YXJ0dGltZS50dl9zZWMgPSAwOwo+ICsJCQkJY3QtPmlvX3N0YXJ0dGltZS50 dl9uc2VjID0gMDsKPiArCQkJfQo+ICsJCQlyYyA9IFBBVEhfVElNRU9VVDsKPiArCQl9IGVsc2Ug ewo+ICsJCQlyYyA9IFBBVEhfUEVORElORzsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWN0LT5p b19zdGFydHRpbWUudHZfc2VjID0gMDsKPiArCQljdC0+aW9fc3RhcnR0aW1lLnR2X25zZWMgPSAw Owo+ICsJCXJjID0gKGV2ZW50LnJlcyA9PSBjdC0+Ymxrc2l6ZSkgPyBQQVRIX1VQIDoKPiBQQVRI X0RPV047Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBz ZXJ2aWNlX3BhdGhzKHZvaWQpCj4gK3sKPiArCXN0cnVjdCBpb19lcnJfc3RhdF9wYXRoICpwcDsK PiArCWludCBpLCByYzsKPiArCj4gKwlwdGhyZWFkX211dGV4X2xvY2soJnBhdGhzLT5tdXRleCk7 Cj4gKwl2ZWN0b3JfZm9yZWFjaF9zbG90KHBhdGhzLT5wYXRodmVjLCBwcCwgaSkgewo+ICsJCXJj ID0gc2VuZF9hc3luY19pbyhwcCwgSU9USU1FT1VUX1NFQyk7Cj4gKwkJY2hlY2tfYXN5bmNfaW8o dmVjcywgcHAsIHJjKTsKPiArCX0KPiArCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYXRocy0+bXV0 ZXgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqaW9fZXJyX3N0YXRfbG9vcCh2b2lkICpkYXRh KQo+ICt7Cj4gKwl2ZWNzID0gKHN0cnVjdCB2ZWN0b3JzICopZGF0YTsKPiArCXB0aHJlYWRfY2xl YW51cF9wdXNoKHJjdV91bnJlZ2lzdGVyLCBOVUxMKTsKPiArCXJjdV9yZWdpc3Rlcl90aHJlYWQo KTsKPiArCj4gKwltbG9ja2FsbChNQ0xfQ1VSUkVOVCB8IE1DTF9GVVRVUkUpOwo+ICsJd2hpbGUg KDEpIHsKPiArCQlzZXJ2aWNlX3BhdGhzKCk7Cj4gKwkJdXNsZWVwKDEwMDAwKTsgLy9UT0RPIEZJ WE1FICBpbXBhY3QgcGVyZgoKRG8geW91IGludGVuZCB0byBmaXggdGhpcyBpbiBhIGZ1dHVyZSBz dWJtaXNzaW9uPwoKUmVnYXJkcywKTWFydGluCgo+ICsJfQo+ICsKPiArCXB0aHJlYWRfY2xlYW51 cF9wb3AoMSk7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAraW50IHN0YXJ0X2lvX2Vycl9z dGF0X3RocmVhZCh2b2lkICpkYXRhKQo+ICt7Cj4gKwlwYXRocyA9IGFsbG9jX3BhdGh2ZWMoKTsK PiArCWlmICghcGF0aHMpCj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJaWYgKHB0aHJlYWRfY3JlYXRl KCZpb19lcnJfc3RhdF90aHIsICZpb19lcnJfc3RhdF9hdHRyLAo+ICsJCQkJaW9fZXJyX3N0YXRf bG9vcCwgZGF0YSkpIHsKPiArCQlpb19lcnJfc3RhdF9sb2coMCwgImNhbm5vdCBjcmVhdGUgaW9f ZXJyb3Igc3RhdGlzdGljCj4gdGhyZWFkIik7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwlpb19l cnJfc3RhdF9sb2coMywgInRocmVhZCBzdGFydGVkIik7Cj4gKwlyZXR1cm4gMDsKPiArb3V0Ogo+ ICsJZnJlZV9pb19lcnJfcGF0aHZlYyhwYXRocyk7Cj4gKwlpb19lcnJfc3RhdF9sb2coMCwgImZh aWxlZCB0byBzdGFydCBpb19lcnJvciBzdGF0aXN0aWMKPiB0aHJlYWQiKTsKPiArCXJldHVybiAx Owo+ICt9Cj4gKwo+ICt2b2lkIHN0b3BfaW9fZXJyX3N0YXRfdGhyZWFkKHZvaWQpCj4gK3sKPiAr CXB0aHJlYWRfY2FuY2VsKGlvX2Vycl9zdGF0X3Rocik7Cj4gKwlwdGhyZWFkX2tpbGwoaW9fZXJy X3N0YXRfdGhyLCBTSUdVU1IyKTsKPiArCj4gKwlmcmVlX2lvX2Vycl9wYXRodmVjKHBhdGhzKTsK PiArfQo+ICsKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL2lvX2Vycl9zdGF0LmggYi9saWJt dWx0aXBhdGgvaW9fZXJyX3N0YXQuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAuLjIwMDEwNzg1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYm11bHRpcGF0aC9pb19l cnJfc3RhdC5oCj4gQEAgLTAsMCArMSwxNiBAQAo+ICsjaWZuZGVmIF9JT19FUlJfU1RBVF9ICj4g KyNkZWZpbmUgX0lPX0VSUl9TVEFUX0gKPiArCj4gKyNpbmNsdWRlICJ2ZWN0b3IuaCIKPiArI2lu Y2x1ZGUgImxvY2suaCIKPiArCj4gKwo+ICtleHRlcm4gcHRocmVhZF9hdHRyX3QgaW9fZXJyX3N0 YXRfYXR0cjsKPiArCj4gK2ludCBzdGFydF9pb19lcnJfc3RhdF90aHJlYWQodm9pZCAqZGF0YSk7 Cj4gK3ZvaWQgc3RvcF9pb19lcnJfc3RhdF90aHJlYWQodm9pZCk7Cj4gKwo+ICtpbnQgZW5xdWV1 ZV9pb19lcnJfc3RhdF9ieV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKTsKPiAraW50IGhpdF9pb19l cnJfcmVjb3ZlcnlfdGltZShzdHJ1Y3QgcGF0aCAqcHApOwo+ICsKPiArI2VuZGlmIC8qIF9JT19F UlJfU1RBVF9IICovCj4gZGlmZiAtLWdpdCBhL2xpYm11bHRpcGF0aC9wcm9wc2VsLmMgYi9saWJt dWx0aXBhdGgvcHJvcHNlbC5jCj4gaW5kZXggMTc1ZmJlMTEuLjkzMzU3NzdkIDEwMDY0NAo+IC0t LSBhL2xpYm11bHRpcGF0aC9wcm9wc2VsLmMKPiArKysgYi9saWJtdWx0aXBhdGgvcHJvcHNlbC5j Cj4gQEAgLTczMSw2ICs3MzEsNyBAQCBvdXQ6Cj4gIAlyZXR1cm4gMDsKPiAgCj4gIH0KPiArCj4g IGludCBzZWxlY3Rfc2FuX3BhdGhfZXJyX3RocmVzaG9sZChzdHJ1Y3QgY29uZmlnICpjb25mLCBz dHJ1Y3QKPiBtdWx0aXBhdGggKm1wKQo+ICB7Cj4gIAljaGFyICpvcmlnaW4sIGJ1ZmZbMTJdOwo+ IEBAIC03NjEsNiArNzYyLDcgQEAgb3V0Ogo+ICAJcmV0dXJuIDA7Cj4gIAo+ICB9Cj4gKwo+ICBp bnQgc2VsZWN0X3Nhbl9wYXRoX2Vycl9yZWNvdmVyeV90aW1lKHN0cnVjdCBjb25maWcgKmNvbmYs IHN0cnVjdAo+IG11bHRpcGF0aCAqbXApCj4gIHsKPiAgCWNoYXIgKm9yaWdpbiwgYnVmZlsxMl07 Cj4gQEAgLTc3Niw2ICs3NzgsNTcgQEAgb3V0Ogo+ICAJcmV0dXJuIDA7Cj4gIAo+ICB9Cj4gKwo+ ICtpbnQgc2VsZWN0X3BhdGhfaW9fZXJyX3NhbXBsZV90aW1lKHN0cnVjdCBjb25maWcgKmNvbmYs IHN0cnVjdAo+IG11bHRpcGF0aCAqbXApCj4gK3sKPiArCWNoYXIgKm9yaWdpbiwgYnVmZlsxMl07 Cj4gKwo+ICsJbXBfc2V0X21wZShwYXRoX2lvX2Vycl9zYW1wbGVfdGltZSk7Cj4gKwltcF9zZXRf b3ZyKHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lKTsKPiArCW1wX3NldF9od2UocGF0aF9pb19lcnJf c2FtcGxlX3RpbWUpOwo+ICsJbXBfc2V0X2NvbmYocGF0aF9pb19lcnJfc2FtcGxlX3RpbWUpOwo+ ICsJbXBfc2V0X2RlZmF1bHQocGF0aF9pb19lcnJfc2FtcGxlX3RpbWUsIERFRkFVTFRfRVJSX0NI RUNLUyk7Cj4gK291dDoKPiArCXByaW50X29mZl9pbnRfdW5kZWYoYnVmZiwgMTIsICZtcC0+cGF0 aF9pb19lcnJfc2FtcGxlX3RpbWUpOwo+ICsJY29uZGxvZygzLCAiJXM6IHBhdGhfaW9fZXJyX3Nh bXBsZV90aW1lID0gJXMgJXMiLCBtcC0+YWxpYXMsIAo+IGJ1ZmYsCj4gKwkJCW9yaWdpbik7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IHNlbGVjdF9wYXRoX2lvX2Vycl9udW1fdGhyZXNo b2xkKHN0cnVjdCBjb25maWcgKmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0aCAqbXApCj4gK3sKPiAr CWNoYXIgKm9yaWdpbiwgYnVmZlsxMl07Cj4gKwo+ICsJbXBfc2V0X21wZShwYXRoX2lvX2Vycl9u dW1fdGhyZXNob2xkKTsKPiArCW1wX3NldF9vdnIocGF0aF9pb19lcnJfbnVtX3RocmVzaG9sZCk7 Cj4gKwltcF9zZXRfaHdlKHBhdGhfaW9fZXJyX251bV90aHJlc2hvbGQpOwo+ICsJbXBfc2V0X2Nv bmYocGF0aF9pb19lcnJfbnVtX3RocmVzaG9sZCk7Cj4gKwltcF9zZXRfZGVmYXVsdChwYXRoX2lv X2Vycl9udW1fdGhyZXNob2xkLAo+IERFRkFVTFRfRVJSX0NIRUNLUyk7Cj4gK291dDoKPiArCXBy aW50X29mZl9pbnRfdW5kZWYoYnVmZiwgMTIsICZtcC0KPiA+cGF0aF9pb19lcnJfbnVtX3RocmVz aG9sZCk7Cj4gKwljb25kbG9nKDMsICIlczogcGF0aF9pb19lcnJfbnVtX3RocmVzaG9sZCA9ICVz ICVzIiwgbXAtCj4gPmFsaWFzLCBidWZmLAo+ICsJCQlvcmlnaW4pOwo+ICsJcmV0dXJuIDA7Cj4g Kwo+ICt9Cj4gKwo+ICtpbnQgc2VsZWN0X3BhdGhfaW9fZXJyX3JlY292ZXJ5X3RpbWUoc3RydWN0 IGNvbmZpZyAqY29uZiwgc3RydWN0Cj4gbXVsdGlwYXRoICptcCkKPiArewo+ICsJY2hhciAqb3Jp Z2luLCBidWZmWzEyXTsKPiArCj4gKwltcF9zZXRfbXBlKHBhdGhfaW9fZXJyX3JlY292ZXJ5X3Rp bWUpOwo+ICsJbXBfc2V0X292cihwYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lKTsKPiArCW1wX3Nl dF9od2UocGF0aF9pb19lcnJfcmVjb3ZlcnlfdGltZSk7Cj4gKwltcF9zZXRfY29uZihwYXRoX2lv X2Vycl9yZWNvdmVyeV90aW1lKTsKPiArCW1wX3NldF9kZWZhdWx0KHBhdGhfaW9fZXJyX3JlY292 ZXJ5X3RpbWUsCj4gREVGQVVMVF9FUlJfQ0hFQ0tTKTsKPiArb3V0Ogo+ICsJcHJpbnRfb2ZmX2lu dF91bmRlZihidWZmLCAxMiwgJm1wLQo+ID5wYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lKTsKPiAr CWNvbmRsb2coMywgIiVzOiBwYXRoX2lvX2Vycl9yZWNvdmVyeV90aW1lID0gJXMgJXMiLCBtcC0K PiA+YWxpYXMsIGJ1ZmYsCj4gKwkJCW9yaWdpbik7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK30KPiAr Cj4gIGludCBzZWxlY3Rfc2tpcF9rcGFydHggKHN0cnVjdCBjb25maWcgKmNvbmYsIHN0cnVjdCBt dWx0aXBhdGggKiBtcCkKPiAgewo+ICAJY2hhciAqb3JpZ2luOwo+IGRpZmYgLS1naXQgYS9saWJt dWx0aXBhdGgvcHJvcHNlbC5oIGIvbGlibXVsdGlwYXRoL3Byb3BzZWwuaAo+IGluZGV4IGY4ZTk2 ZDg1Li4xODFiZDVlNSAxMDA2NDQKPiAtLS0gYS9saWJtdWx0aXBhdGgvcHJvcHNlbC5oCj4gKysr IGIvbGlibXVsdGlwYXRoL3Byb3BzZWwuaAo+IEBAIC0yOCw2ICsyOCw5IEBAIGludCBzZWxlY3Rf bWF4X3NlY3RvcnNfa2IgKHN0cnVjdCBjb25maWcgKmNvbmYsCj4gc3RydWN0IG11bHRpcGF0aCAq IG1wKTsKPiAgaW50IHNlbGVjdF9zYW5fcGF0aF9lcnJfZm9yZ2V0X3JhdGUoc3RydWN0IGNvbmZp ZyAqY29uZiwgc3RydWN0Cj4gbXVsdGlwYXRoICptcCk7Cj4gIGludCBzZWxlY3Rfc2FuX3BhdGhf ZXJyX3RocmVzaG9sZChzdHJ1Y3QgY29uZmlnICpjb25mLCBzdHJ1Y3QKPiBtdWx0aXBhdGggKm1w KTsKPiAgaW50IHNlbGVjdF9zYW5fcGF0aF9lcnJfcmVjb3ZlcnlfdGltZShzdHJ1Y3QgY29uZmln ICpjb25mLCBzdHJ1Y3QKPiBtdWx0aXBhdGggKm1wKTsKPiAraW50IHNlbGVjdF9wYXRoX2lvX2Vy cl9zYW1wbGVfdGltZShzdHJ1Y3QgY29uZmlnICpjb25mLCBzdHJ1Y3QKPiBtdWx0aXBhdGggKm1w KTsKPiAraW50IHNlbGVjdF9wYXRoX2lvX2Vycl9udW1fdGhyZXNob2xkKHN0cnVjdCBjb25maWcg KmNvbmYsIHN0cnVjdAo+IG11bHRpcGF0aCAqbXApOwo+ICtpbnQgc2VsZWN0X3BhdGhfaW9fZXJy X3JlY292ZXJ5X3RpbWUoc3RydWN0IGNvbmZpZyAqY29uZiwgc3RydWN0Cj4gbXVsdGlwYXRoICpt cCk7Cj4gIHZvaWQgcmVjb25jaWxlX2ZlYXR1cmVzX3dpdGhfb3B0aW9ucyhjb25zdCBjaGFyICpp ZCwgY2hhcgo+ICoqZmVhdHVyZXMsCj4gIAkJCQkgICAgIGludCogbm9fcGF0aF9yZXRyeSwKPiAg CQkJCSAgICAgaW50ICpyZXRhaW5faHdoYW5kbGVyKTsKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlw YXRoL3N0cnVjdHMuaCBiL2xpYm11bHRpcGF0aC9zdHJ1Y3RzLmgKPiBpbmRleCA4ZWE5ODRkOS4u ZjAyY2ZkYjkgMTAwNjQ0Cj4gLS0tIGEvbGlibXVsdGlwYXRoL3N0cnVjdHMuaAo+ICsrKyBiL2xp Ym11bHRpcGF0aC9zdHJ1Y3RzLmgKPiBAQCAtMjM1LDYgKzIzNSw4IEBAIHN0cnVjdCBwYXRoIHsK PiAgCXRpbWVfdCBkaXNfcmVpbnN0YXRlX3RpbWU7Cj4gIAlpbnQgZGlzYWJsZV9yZWluc3RhdGU7 Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX2ZvcmdldF9yYXRlOwo+ICsJdGltZV90IGlvX2Vycl9kaXNf cmVpbnN0YXRlX3RpbWU7Cj4gKwlpbnQgaW9fZXJyX2Rpc2FibGVfcmVpbnN0YXRlOwo+ICAJLyog Y29uZmlnbGV0IHBvaW50ZXJzICovCj4gIAlzdHJ1Y3QgaHdlbnRyeSAqIGh3ZTsKPiAgfTsKPiBA QCAtMjY5LDYgKzI3MSw5IEBAIHN0cnVjdCBtdWx0aXBhdGggewo+ICAJaW50IHNhbl9wYXRoX2Vy cl90aHJlc2hvbGQ7Cj4gIAlpbnQgc2FuX3BhdGhfZXJyX2ZvcmdldF9yYXRlOwo+ICAJaW50IHNh bl9wYXRoX2Vycl9yZWNvdmVyeV90aW1lOwo+ICsJaW50IHBhdGhfaW9fZXJyX3NhbXBsZV90aW1l Owo+ICsJaW50IHBhdGhfaW9fZXJyX251bV90aHJlc2hvbGQ7Cj4gKwlpbnQgcGF0aF9pb19lcnJf cmVjb3ZlcnlfdGltZTsKPiAgCWludCBza2lwX2twYXJ0eDsKPiAgCWludCBtYXhfc2VjdG9yc19r YjsKPiAgCWludCBmb3JjZV9yZWFkb25seTsKPiBkaWZmIC0tZ2l0IGEvbGlibXVsdGlwYXRoL3Vl dmVudC5jIGIvbGlibXVsdGlwYXRoL3VldmVudC5jCj4gaW5kZXggZWI0NGRhNTYuLjU2ZGUxMzIw IDEwMDY0NAo+IC0tLSBhL2xpYm11bHRpcGF0aC91ZXZlbnQuYwo+ICsrKyBiL2xpYm11bHRpcGF0 aC91ZXZlbnQuYwo+IEBAIC05MDQsOCArOTA0LDggQEAgY2hhciAqdWV2ZW50X2dldF9kbV9uYW1l KHN0cnVjdCB1ZXZlbnQgKnVldikKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IHVldi0+ ZW52cFtpXSAhPSBOVUxMOyBpKyspIHsKPiAtCQlpZiAoIXN0cm5jbXAodWV2LT5lbnZwW2ldLCAi RE1fTkFNRSIsIDYpICYmCj4gLQkJICAgIHN0cmxlbih1ZXYtPmVudnBbaV0pID4gNykgewo+ICsJ CWlmICghc3RybmNtcCh1ZXYtPmVudnBbaV0sICJETV9OQU1FIiwgNykgJiYKPiArCQkgICAgc3Ry bGVuKHVldi0+ZW52cFtpXSkgPiA4KSB7Cj4gIAkJCXAgPSBNQUxMT0Moc3RybGVuKHVldi0+ZW52 cFtpXSArIDgpICsgMSk7Cj4gIAkJCXN0cmNweShwLCB1ZXYtPmVudnBbaV0gKyA4KTsKPiAgCQkJ YnJlYWs7Cj4gQEAgLTkxMywzICs5MTMsMzUgQEAgY2hhciAqdWV2ZW50X2dldF9kbV9uYW1lKHN0 cnVjdCB1ZXZlbnQgKnVldikKPiAgCX0KPiAgCXJldHVybiBwOwo+ICB9Cj4gKwo+ICtjaGFyICp1 ZXZlbnRfZ2V0X2RtX3BhdGgoc3RydWN0IHVldmVudCAqdWV2KQo+ICt7Cj4gKwljaGFyICpwID0g TlVMTDsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IHVldi0+ZW52cFtpXSAhPSBOVUxM OyBpKyspIHsKPiArCQlpZiAoIXN0cm5jbXAodWV2LT5lbnZwW2ldLCAiRE1fUEFUSCIsIDcpICYm Cj4gKwkJICAgIHN0cmxlbih1ZXYtPmVudnBbaV0pID4gOCkgewo+ICsJCQlwID0gTUFMTE9DKHN0 cmxlbih1ZXYtPmVudnBbaV0gKyA4KSArIDEpOwo+ICsJCQlzdHJjcHkocCwgdWV2LT5lbnZwW2ld ICsgOCk7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCXJldHVybiBwOwo+ICt9Cj4gKwo+ ICtjaGFyICp1ZXZlbnRfZ2V0X2RtX2FjdGlvbihzdHJ1Y3QgdWV2ZW50ICp1ZXYpCj4gK3sKPiAr CWNoYXIgKnAgPSBOVUxMOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgdWV2LT5lbnZw W2ldICE9IE5VTEw7IGkrKykgewo+ICsJCWlmICghc3RybmNtcCh1ZXYtPmVudnBbaV0sICJETV9B Q1RJT04iLCA5KSAmJgo+ICsJCSAgICBzdHJsZW4odWV2LT5lbnZwW2ldKSA+IDEwKSB7Cj4gKwkJ CXAgPSBNQUxMT0Moc3RybGVuKHVldi0+ZW52cFtpXSArIDEwKSArIDEpOwo+ICsJCQlzdHJjcHko cCwgdWV2LT5lbnZwW2ldICsgMTApOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1 cm4gcDsKPiArfQo+IGRpZmYgLS1naXQgYS9saWJtdWx0aXBhdGgvdWV2ZW50LmggYi9saWJtdWx0 aXBhdGgvdWV2ZW50LmgKPiBpbmRleCA2MWE0MjA3MS4uNmY1YWYwYWYgMTAwNjQ0Cj4gLS0tIGEv bGlibXVsdGlwYXRoL3VldmVudC5oCj4gKysrIGIvbGlibXVsdGlwYXRoL3VldmVudC5oCj4gQEAg LTM3LDUgKzM3LDcgQEAgaW50IHVldmVudF9nZXRfbWFqb3Ioc3RydWN0IHVldmVudCAqdWV2KTsK PiAgaW50IHVldmVudF9nZXRfbWlub3Ioc3RydWN0IHVldmVudCAqdWV2KTsKPiAgaW50IHVldmVu dF9nZXRfZGlza19ybyhzdHJ1Y3QgdWV2ZW50ICp1ZXYpOwo+ICBjaGFyICp1ZXZlbnRfZ2V0X2Rt X25hbWUoc3RydWN0IHVldmVudCAqdWV2KTsKPiArY2hhciAqdWV2ZW50X2dldF9kbV9wYXRoKHN0 cnVjdCB1ZXZlbnQgKnVldik7Cj4gK2NoYXIgKnVldmVudF9nZXRfZG1fYWN0aW9uKHN0cnVjdCB1 ZXZlbnQgKnVldik7Cj4gIAo+ICAjZW5kaWYgLyogX1VFVkVOVF9IICovCj4gZGlmZiAtLWdpdCBh L211bHRpcGF0aC9tdWx0aXBhdGguY29uZi41IGIvbXVsdGlwYXRoL211bHRpcGF0aC5jb25mLjUK PiBpbmRleCBkOWFjMjc5Zi4uNjEzM2QxN2QgMTAwNjQ0Cj4gLS0tIGEvbXVsdGlwYXRoL211bHRp cGF0aC5jb25mLjUKPiArKysgYi9tdWx0aXBhdGgvbXVsdGlwYXRoLmNvbmYuNQo+IEBAIC04NDks NiArODQ5LDQ4IEBAIFRoZSBkZWZhdWx0IGlzOiBcZkJub1xmUgo+ICAuCj4gIC4KPiAgLlRQCj4g Ky5CIHBhdGhfaW9fZXJyX3NhbXBsZV90aW1lCj4gK09uZSBvZiB0aGUgdGhyZWUgcGFyYW1ldGVy cyBvZiBzdXBwb3J0aW5nIHBhdGggY2hlY2sgYmFzZWQgb24KPiBhY2NvdW50aW5nIElPCj4gK2Vy cm9yIHN1Y2ggYXMgaW50ZXJtaXR0ZW50IGVycm9yLiBJZiBpdCBpcyBzZXQgdG8gYSB2YWx1ZSBn cmVhdGVyCj4gdGhhbiAwLAo+ICt3aGVuIGEgcGF0aCBmYWlsIGV2ZW50IG9jY3VycyBkdWUgdG8g YW4gSU8gZXJyb3IsIG11bHRpcGF0aGQgd2lsbAo+IGVucXVldWUgdGhpcwo+ICtwYXRoIGludG8g YSBxdWV1ZSBvZiB3aGljaCBtZW1iZXJzIGFyZSBzZW50IGRpcmVjdCByZWFkaW5nIGFpbyBhdCBh Cj4gZml4ZWQKPiArc2FtcGxlIHJhdGUgb2YgMTAwSFouIFRoZSBJTyBhY2NvdW50aW5nIHByb2Nl c3MgZm9yIGEgcGF0aCB3aWxsIGxhc3QKPiBmb3IKPiArXGZJcGF0aF9pb19lcnJfc2FtcGxlX3Rp bWVcZlIuIElmIHRoZSBudW1iZXIgb2YgSU8gZXJyb3Igb24gYQo+IHBhcnRpY3VsYXIgcGF0aAo+ ICtpcyBncmVhdGVyIHRoYW4gdGhlIFxmSXBhdGhfaW9fZXJyX251bV90aHJlc2hvbGRcZlIsIHRo ZW4gdGhlIHBhdGgKPiB3aWxsIG5vdAo+ICtyZWluc3RhdGUgZm9yIFxmSXBhdGhfaW9fZXJyX251 bV90aHJlc2hvbGRcZlIgc2Vjb25kcyB1bmxlc3MgdGhlcmUKPiBpcyBvbmx5IG9uZQo+ICthY3Rp dmUgcGF0aC4KPiArLlJTCj4gKy5UUAo+ICtUaGUgZGVmYXVsdCBpczogXGZCbm9cZlIKPiArLlJF Cj4gKy4KPiArLgo+ICsuVFAKPiArLkIgcGF0aF9pb19lcnJfbnVtX3RocmVzaG9sZAo+ICtPbmUg b2YgdGhlIHRocmVlIHBhcmFtZXRlcnMgb2Ygc3VwcG9ydGluZyBwYXRoIGNoZWNrIGJhc2VkIG9u Cj4gYWNjb3VudGluZyBJTwo+ICtlcnJvciBzdWNoIGFzIGludGVybWl0dGVudCBlcnJvci4gUmVm ZXIgdG8KPiBcZklwYXRoX2lvX2Vycl9zYW1wbGVfdGltZVxmUi4gSWYKPiArdGhlIG51bWJlciBv ZiBJTyBlcnJvcnMgb24gYSBwYXJ0aWN1bGFyIHBhdGggaXMgZ3JlYXRlciB0aGFuIHRoaXMKPiBw YXJhbWV0ZXIsCj4gK3RoZW4gdGhlIHBhdGggd2lsbCBub3QgcmVpbnN0YXRlIGZvciBcZklwYXRo X2lvX2Vycl9udW1fdGhyZXNob2xkXGZSCj4gc2Vjb25kcwo+ICt1bmxlc3MgdGhlcmUgaXMgb25s eSBvbmUgYWN0aXZlIHBhdGguCj4gKy5SUwo+ICsuVFAKPiArVGhlIGRlZmF1bHQgaXM6IFxmQm5v XGZSCj4gKy5SRQo+ICsuCj4gKy4KPiArLlRQCj4gKy5CIHBhdGhfaW9fZXJyX3JlY292ZXJ5X3Rp bWUKPiArT25lIG9mIHRoZSB0aHJlZSBwYXJhbWV0ZXJzIG9mIHN1cHBvcnRpbmcgcGF0aCBjaGVj ayBiYXNlZCBvbgo+IGFjY291bnRpbmcgSU8KPiArZXJyb3Igc3VjaCBhcyBpbnRlcm1pdHRlbnQg ZXJyb3IuIFJlZmVyIHRvCj4gXGZJcGF0aF9pb19lcnJfc2FtcGxlX3RpbWVcZlIuIElmCj4gK3Ro aXMgcGFyYW1ldGVyIGlzIHNldCB0byBhIHBvc2l0aXZlIHZhbHVlLCB0aGUgcGF0aCB3aGljaCBo YXMgbWFueQo+IGVycm9yIHdpbGwKPiArbm90IHJlaW5zYXRlIHRpbGwgXGZJcGF0aF9pb19lcnJf cmVjb3ZlcnlfdGltZVxmUiBzZWNvbmRzLgo+ICsuUlMKPiArLlRQCj4gK1RoZSBkZWZhdWx0IGlz OiBcZkJub1xmUgo+ICsuUkUKPiArLgo+ICsuCj4gKy5UUAo+ICAuQiBkZWxheV93YXRjaF9jaGVj a3MKPiAgSWYgc2V0IHRvIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAsIG11bHRpcGF0aGQgd2lsbCB3 YXRjaCBwYXRocyB0aGF0Cj4gaGF2ZQo+ICByZWNlbnRseSBiZWNvbWUgdmFsaWQgZm9yIHRoaXMg bWFueSBjaGVja3MuIElmIHRoZXkgZmFpbCBhZ2FpbiB3aGlsZQo+IHRoZXkgYXJlCj4gZGlmZiAt LWdpdCBhL211bHRpcGF0aGQvbWFpbi5jIGIvbXVsdGlwYXRoZC9tYWluLmMKPiBpbmRleCA0YmUy YzU3OS4uZDEyZTZmYWUgMTAwNjQ0Cj4gLS0tIGEvbXVsdGlwYXRoZC9tYWluLmMKPiArKysgYi9t dWx0aXBhdGhkL21haW4uYwo+IEBAIC04NCw2ICs4NCw3IEBAIGludCB1eHNvY2tfdGltZW91dDsK PiAgI2luY2x1ZGUgImNsaV9oYW5kbGVycy5oIgo+ICAjaW5jbHVkZSAibG9jay5oIgo+ICAjaW5j bHVkZSAid2FpdGVyLmgiCj4gKyNpbmNsdWRlICJpb19lcnJfc3RhdC5oIgo+ICAjaW5jbHVkZSAi d3dpZHMuaCIKPiAgI2luY2x1ZGUgIi4uL3RoaXJkLXBhcnR5L3ZhbGdyaW5kL2RyZC5oIgo+ICAK PiBAQCAtMTA1MCw2ICsxMDUxLDQxIEBAIG91dDoKPiAgfQo+ICAKPiAgc3RhdGljIGludAo+ICt1 ZXZfcGF0aGZhaWxfY2hlY2soc3RydWN0IHVldmVudCAqdWV2LCBzdHJ1Y3QgdmVjdG9ycyAqdmVj cykKPiArewo+ICsJY2hhciAqYWN0aW9uID0gTlVMTCwgKmRldnQgPSBOVUxMOwo+ICsJc3RydWN0 IHBhdGggKnBwOwo+ICsJaW50IHI7Cj4gKwo+ICsJYWN0aW9uID0gdWV2ZW50X2dldF9kbV9hY3Rp b24odWV2KTsKPiArCWlmICghYWN0aW9uKQo+ICsJCXJldHVybiAxOwo+ICsJaWYgKHN0cm5jbXAo YWN0aW9uLCAiUEFUSF9GQUlMRUQiLCAxMSkpCj4gKwkJZ290byBvdXQ7Cj4gKwlkZXZ0ID0gdWV2 ZW50X2dldF9kbV9wYXRoKHVldik7Cj4gKwlpZiAoIWRldnQpIHsKPiArCQljb25kbG9nKDMsICIl czogTm8gRE1fUEFUSCBpbiB1ZXZlbnQiLCB1ZXYtPmtlcm5lbCk7Cj4gKwkJZ290byBvdXQ7Cj4g Kwl9Cj4gKwo+ICsJcHRocmVhZF9jbGVhbnVwX3B1c2goY2xlYW51cF9sb2NrLCAmdmVjcy0+bG9j ayk7Cj4gKwlsb2NrKCZ2ZWNzLT5sb2NrKTsKPiArCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwo+ICsJ cHAgPSBmaW5kX3BhdGhfYnlfZGV2dCh2ZWNzLT5wYXRodmVjLCBkZXZ0KTsKPiArCXIgPSBlbnF1 ZXVlX2lvX2Vycl9zdGF0X2J5X3BhdGgocHApOwo+ICsJbG9ja19jbGVhbnVwX3BvcCh2ZWNzLT5s b2NrKTsKPiArCj4gKwlpZiAocikKPiArCQljb25kbG9nKDMsICJpb19lcnJfc3RhdDogZmFpbHMg dG8gZW5xdWV1ZSAlcyIsIHBwLQo+ID5kZXYpOwo+ICsJRlJFRShkZXZ0KTsKPiArCUZSRUUoYWN0 aW9uKTsKPiArCXJldHVybiAwOwo+ICtvdXQ6Cj4gKwlGUkVFKGFjdGlvbik7Cj4gKwlyZXR1cm4g MTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICBtYXBfZGlzY292ZXJ5IChzdHJ1Y3QgdmVjdG9y cyAqIHZlY3MpCj4gIHsKPiAgCXN0cnVjdCBtdWx0aXBhdGggKiBtcHA7Cj4gQEAgLTExMzQsNiAr MTE3MCw3IEBAIHVldl90cmlnZ2VyIChzdHJ1Y3QgdWV2ZW50ICogdWV2LCB2b2lkICoKPiB0cmln Z2VyX2RhdGEpCj4gIAlpZiAoIXN0cm5jbXAodWV2LT5rZXJuZWwsICJkbS0iLCAzKSkgewo+ICAJ CWlmICghc3RybmNtcCh1ZXYtPmFjdGlvbiwgImNoYW5nZSIsIDYpKSB7Cj4gIAkJCXIgPSB1ZXZf YWRkX21hcCh1ZXYsIHZlY3MpOwo+ICsJCQl1ZXZfcGF0aGZhaWxfY2hlY2sodWV2LCB2ZWNzKTsK PiAgCQkJZ290byBvdXQ7Cj4gIAkJfQo+ICAJCWlmICghc3RybmNtcCh1ZXYtPmFjdGlvbiwgInJl bW92ZSIsIDYpKSB7Cj4gQEAgLTE1NTMsNiArMTU5MCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfcGF0 aF9yZWluc3RhdGVfc3RhdGUoc3RydWN0Cj4gcGF0aCAqIHBwKSB7Cj4gIAkJY29uZGxvZygyLCAi JXMgOiBoaXQgZXJyb3IgdGhyZXNob2xkLiBEZWxheWluZyBwYXRoCj4gcmVpbnN0YXRlbWVudCIs IHBwLT5kZXYpOwo+ICAJCXBwLT5kaXNfcmVpbnN0YXRlX3RpbWUgPSBjdXJyX3RpbWUudHZfc2Vj Owo+ICAJCXBwLT5kaXNhYmxlX3JlaW5zdGF0ZSA9IDE7Cj4gKwo+ICAJCXJldHVybiAxOwo+ICAJ fSBlbHNlIHsKPiAgCQlyZXR1cm4gMDsKPiBAQCAtMTY4NCw2ICsxNzIyLDE2IEBAIGNoZWNrX3Bh dGggKHN0cnVjdCB2ZWN0b3JzICogdmVjcywgc3RydWN0IHBhdGgKPiAqIHBwLCBpbnQgdGlja3Mp Cj4gIAkJcmV0dXJuIDE7Cj4gIAl9Cj4gIAo+ICsJaWYgKHBwLT5pb19lcnJfZGlzYWJsZV9yZWlu c3RhdGUgJiYKPiBoaXRfaW9fZXJyX3JlY292ZXJ5X3RpbWUocHApKSB7Cj4gKwkJcHAtPnN0YXRl ID0gUEFUSF9ERUxBWUVEOwo+ICsJCS8qCj4gKwkJICogdG8gcmVzY2hlZHVsZSBhcyBzb29uIGFz IHBvc3NpYmxlLHNvIHRoYXQgdGhpcwo+IHBhdGggY2FuCj4gKwkJICogYmUgcmVjb3ZlcmQgaW4g dGltZQo+ICsJCSAqLwo+ICsJCXBwLT50aWNrID0gMTsKPiArCQlyZXR1cm4gMTsKPiArCX0KPiAr Cj4gIAlpZiAoKG5ld3N0YXRlID09IFBBVEhfVVAgfHwgbmV3c3RhdGUgPT0gUEFUSF9HSE9TVCkg JiYKPiAgCSAgICAgcHAtPndhaXRfY2hlY2tzID4gMCkgewo+ICAJCWlmIChwcC0+bXBwLT5ucl9h Y3RpdmUgPiAwKSB7Cj4gQEAgLTIzNzcsNiArMjQyNSw3IEBAIGNoaWxkICh2b2lkICogcGFyYW0p Cj4gIAlzZXR1cF90aHJlYWRfYXR0cigmbWlzY19hdHRyLCA2NCAqIDEwMjQsIDApOwo+ICAJc2V0 dXBfdGhyZWFkX2F0dHIoJnVldmVudF9hdHRyLCBERUZBVUxUX1VFVkVOVF9TVEFDS1NJWkUgKgo+ IDEwMjQsIDApOwo+ICAJc2V0dXBfdGhyZWFkX2F0dHIoJndhaXRlcl9hdHRyLCAzMiAqIDEwMjQs IDEpOwo+ICsJc2V0dXBfdGhyZWFkX2F0dHIoJmlvX2Vycl9zdGF0X2F0dHIsIDMyICogMTAyNCwg MSk7Cj4gIAo+ICAJaWYgKGxvZ3NpbmsgPT0gMSkgewo+ICAJCXNldHVwX3RocmVhZF9hdHRyKCZs b2dfYXR0ciwgNjQgKiAxMDI0LCAwKTsKPiBAQCAtMjQ5OSw2ICsyNTQ4LDEwIEBAIGNoaWxkICh2 b2lkICogcGFyYW0pCj4gIAkvKgo+ICAJICogc3RhcnQgdGhyZWFkcwo+ICAJICovCj4gKwlyYyA9 IHN0YXJ0X2lvX2Vycl9zdGF0X3RocmVhZCh2ZWNzKTsKPiArCWlmIChyYykKPiArCQlnb3RvIGZh aWxlZDsKPiArCj4gIAlpZiAoKHJjID0gcHRocmVhZF9jcmVhdGUoJmNoZWNrX3RociwgJm1pc2Nf YXR0ciwKPiBjaGVja2VybG9vcCwgdmVjcykpKSB7Cj4gIAkJY29uZGxvZygwLCJmYWlsZWQgdG8g Y3JlYXRlIGNoZWNrZXIgbG9vcCB0aHJlYWQ6Cj4gJWQiLCByYyk7Cj4gIAkJZ290byBmYWlsZWQ7 Cj4gQEAgLTI1NDgsNiArMjYwMSw4IEBAIGNoaWxkICh2b2lkICogcGFyYW0pCj4gIAlyZW1vdmVf bWFwc19hbmRfc3RvcF93YWl0ZXJzKHZlY3MpOwo+ICAJdW5sb2NrKCZ2ZWNzLT5sb2NrKTsKPiAg Cj4gKwlzdG9wX2lvX2Vycl9zdGF0X3RocmVhZCgpOwo+ICsKPiAgCXB0aHJlYWRfY2FuY2VsKGNo ZWNrX3Rocik7Cj4gIAlwdGhyZWFkX2NhbmNlbCh1ZXZlbnRfdGhyKTsKPiAgCXB0aHJlYWRfY2Fu Y2VsKHV4bHNucl90aHIpOwo+IEBAIC0yNTkzLDYgKzI2NDgsNyBAQCBjaGlsZCAodm9pZCAqIHBh cmFtKQo+ICAJdWRldl91bnJlZih1ZGV2KTsKPiAgCXVkZXYgPSBOVUxMOwo+ICAJcHRocmVhZF9h dHRyX2Rlc3Ryb3koJndhaXRlcl9hdHRyKTsKPiArCXB0aHJlYWRfYXR0cl9kZXN0cm95KCZpb19l cnJfc3RhdF9hdHRyKTsKPiAgI2lmZGVmIF9ERUJVR18KPiAgCWRiZ19mcmVlX2ZpbmFsKE5VTEwp Owo+ICAjZW5kaWYKCi0tIApEci4gTWFydGluIFdpbGNrIDxtd2lsY2tAc3VzZS5jb20+LCBUZWwu ICs0OSAoMCk5MTEgNzQwNTMgMjEwNwpTVVNFIExpbnV4IEdtYkgsIEdGOiBGZWxpeCBJbWVuZMO2 cmZmZXIsIEphbmUgU21pdGhhcmQsIEdyYWhhbSBOb3J0b24KSFJCIDIxMjg0IChBRyBOw7xybmJl cmcpCgotLQpkbS1kZXZlbCBtYWlsaW5nIGxpc3QKZG0tZGV2ZWxAcmVkaGF0LmNvbQpodHRwczov L3d3dy5yZWRoYXQuY29tL21haWxtYW4vbGlzdGluZm8vZG0tZGV2ZWw=