From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 1/3] [RFC]drm: add syncobj timeline support v4 Date: Thu, 6 Sep 2018 09:25:25 +0200 Message-ID: <4374aa17-c659-0c22-a487-c5e236690108@amd.com> References: <20180906062523.16542-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180906062523.16542-1-david1.zhou-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Chunming Zhou , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Dave Airlie , Daniel Rakos , Daniel Vetter , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org QW0gMDYuMDkuMjAxOCB1bSAwODoyNSBzY2hyaWViIENodW5taW5nIFpob3U6Cj4gVktfS0hSX3Rp bWVsaW5lX3NlbWFwaG9yZToKPiBUaGlzIGV4dGVuc2lvbiBpbnRyb2R1Y2VzIGEgbmV3IHR5cGUg b2Ygc2VtYXBob3JlIHRoYXQgaGFzIGFuIGludGVnZXIgcGF5bG9hZAo+IGlkZW50aWZ5aW5nIGEg cG9pbnQgaW4gYSB0aW1lbGluZS4gU3VjaCB0aW1lbGluZSBzZW1hcGhvcmVzIHN1cHBvcnQgdGhl CgpEcm9wIHRoZSB0ZXJtIHNlbWFwaG9yZSBoZXJlLCBiZXR0ZXIgdXNlIHN5bmNvYmouCgo+IGZv bGxvd2luZyBvcGVyYXRpb25zOgo+ICAgICAqIENQVSBxdWVyeSAtIEEgaG9zdCBvcGVyYXRpb24g dGhhdCBhbGxvd3MgcXVlcnlpbmcgdGhlIHBheWxvYWQgb2YgdGhlCj4gICAgICAgdGltZWxpbmUg c2VtYXBob3JlLgo+ICAgICAqIENQVSB3YWl0IC0gQSBob3N0IG9wZXJhdGlvbiB0aGF0IGFsbG93 cyBhIGJsb2NraW5nIHdhaXQgZm9yIGEKPiAgICAgICB0aW1lbGluZSBzZW1hcGhvcmUgdG8gcmVh Y2ggYSBzcGVjaWZpZWQgdmFsdWUuCj4gICAgICogRGV2aWNlIHdhaXQgLSBBIGRldmljZSBvcGVy YXRpb24gdGhhdCBhbGxvd3Mgd2FpdGluZyBmb3IgYQo+ICAgICAgIHRpbWVsaW5lIHNlbWFwaG9y ZSB0byByZWFjaCBhIHNwZWNpZmllZCB2YWx1ZS4KPiAgICAgKiBEZXZpY2Ugc2lnbmFsIC0gQSBk ZXZpY2Ugb3BlcmF0aW9uIHRoYXQgYWxsb3dzIGFkdmFuY2luZyB0aGUKPiAgICAgICB0aW1lbGlu ZSBzZW1hcGhvcmUgdG8gYSBzcGVjaWZpZWQgdmFsdWUuCj4KPiBTaW5jZSBpdCdzIGEgdGltZWxp bmUsIHRoYXQgbWVhbnMgdGhlIGZyb250IHRpbWUgcG9pbnQoUFQpIGFsd2F5cyBpcyBzaWduYWxl ZCBiZWZvcmUgdGhlIGxhdGUgUFQuCj4gYS4gc2lnbmFsIFBUIGRlc2lnbjoKPiBTaWduYWwgUFQg ZmVuY2UgTiBkZXBlbmRzIG9uIFBUW04tMV0gZmVuY2UgYW5kIHNpZ25hbCBvcGVydGlvbiBmZW5j ZSwgd2hlbiBQVFtOXSBmZW5jZSBpcyBzaWduYWxlZCwKPiB0aGUgdGltZWxpbmUgd2lsbCBpbmNy ZWFzZSB0byB2YWx1ZSBvZiBQVFtOXS4KPiBiLiB3YWl0IFBUIGRlc2lnbjoKPiBXYWl0IFBUIGZl bmNlIGlzIHNpZ25hbGVkIGJ5IHJlYWNoaW5nIHRpbWVsaW5lIHBvaW50IHZhbHVlLCB3aGVuIHRp bWVsaW5lIGlzIGluY3JlYXNpbmcsIHdpbGwgY29tcGFyZQo+IHdhaXQgUFRzIHZhbHVlIHdpdGgg bmV3IHRpbWVsaW5lIHZhbHVlLCBpZiBQVCB2YWx1ZSBpcyBsb3dlciB0aGFuIHRpbWVsaW5lIHZh bHVlLCB0aGVuIHdhaXQgUFQgd2lsbCBiZQo+IHNpZ25hbGVkLCBvdGhlcndpc2Uga2VlcCBpbiBs aXN0LiBzZW1hcGhvcmUgd2FpdCBvcGVyYXRpb24gY2FuIHdhaXQgb24gYW55IHBvaW50IG9mIHRp bWVsaW5lLAo+IHNvIG5lZWQgYSBSQiB0cmVlIHRvIG9yZGVyIHRoZW0uIEFuZCB3YWl0IFBUIGNv dWxkIGFoZWFkIG9mIHNpZ25hbCBQVCwgd2UgbmVlZCBhIHN1bWlzc2lvbiBmZW5jZSB0bwo+IHBl cmZvcm0gdGhhdC4KPgo+IHYyOgo+IDEuIHJlbW92ZSB1bnVzZWQgRFJNX1NZTkNPQkpfQ1JFQVRF X1RZUEVfTk9STUFMLiAoQ2hyaXN0aWFuKQo+IDIuIG1vdmUgdW5leHBvc2VkIGRlbml0aW9ucyB0 byAuYyBmaWxlLiAoRGFuaWVsIFZldHRlcikKPiAzLiBzcGxpdCB1cCB0aGUgY2hhbmdlIHRvIGRy bV9zeW5jb2JqX2ZpbmRfZmVuY2UoKSBpbiBhIHNlcGFyYXRlIHBhdGNoLiAoQ2hyaXN0aWFuKQo+ IDQuIHNwbGl0IHVwIHRoZSBjaGFuZ2UgdG8gZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSgpIGlu IGEgc2VwYXJhdGUgcGF0Y2guCj4gNS4gZHJvcCB0aGUgc3VibWlzc2lvbl9mZW5jZSBpbXBsZW1l bnRhdGlvbiBhbmQgaW5zdGVhZCB1c2Ugd2FpdF9ldmVudCgpIGZvciB0aGF0LiAoQ2hyaXN0aWFu KQo+IDYuIFdBUk5fT04ocG9pbnQgIT0gMCkgZm9yIE5PUk1BTCB0eXBlIHN5bmNvYmogY2FzZS4g KERhbmllbCBWZXR0ZXIpCj4KPiB2MzoKPiAxLiByZXBsYWNlIG5vcm1hbCBzeW5jb2JqIHdpdGgg dGltZWxpbmUgaW1wbGVtZW5hdGlvbi4gKFZldHRlciBhbmQgQ2hyaXN0aWFuKQo+ICAgICAgYS4g bm9ybWFsIHN5bmNvYmogc2lnbmFsIG9wIHdpbGwgY3JlYXRlIGEgc2lnbmFsIFBUIHRvIHRhaWwg b2Ygc2lnbmFsIHB0IGxpc3QuCj4gICAgICBiLiBub3JtYWwgc3luY29iaiB3YWl0IG9wIHdpbGwg Y3JlYXRlIGEgd2FpdCBwdCB3aXRoIGxhc3Qgc2lnbmFsIHBvaW50LCBhbmQgdGhpcyB3YWl0IFBU IGlzIG9ubHkgc2lnbmFsZWQgYnkgcmVsYXRlZCBzaWduYWwgcG9pbnQgUFQuCj4gMi4gbWFueSBi dWcgZml4IGFuZCBjbGVhbiB1cAo+IDMuIHN0dWIgZmVuY2UgbW92aW5nIGlzIG1vdmVkIHRvIG90 aGVyIHBhdGNoLgo+Cj4gdjTvvJoKPiAxLiBmaXggUkIgdHJlZSBsb29wIHdpdGggd2hpbGUobm9k ZT1yYl9maXJzdCguLi4pKS4gKENocmlzdGlhbikKPiAyLiBmaXggc3luY29iaiBsaWZlY3ljbGUu IChDaHJpc3RpYW4pCj4gMy4gb25seSBlbmFibGVfc2lnbmFsaW5nIHdoZW4gdGhlcmUgaXMgd2Fp dF9wdC4gKENocmlzdGlhbikKPgo+IFRlc3RlZCBieSAuL2RlcXAtdmsgLW4gZEVRUC1WSypzZW1h cGhvcmUqIGZvciBub3JtYWwgc3luY29iago+Cj4gU2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcgWmhv dSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KPiBDYzogQ2hyaXN0aWFuIEtvbmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cj4gQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4g Q2M6IERhbmllbCBSYWtvcyA8RGFuaWVsLlJha29zQGFtZC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0 ZXIgPGRhbmllbEBmZndsbC5jaD4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29i ai5jICAgICAgICAgICAgICB8IDUxNiArKysrKysrKysrKysrKysrKy0tLS0KPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyB8ICAgNCArLQo+ICAgaW5jbHVkZS9k cm0vZHJtX3N5bmNvYmouaCAgICAgICAgICAgICAgICAgIHwgIDc4ICsrLS0KPiAgIGluY2x1ZGUv dWFwaS9kcm0vZHJtLmggICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gICA0IGZpbGVzIGNo YW5nZWQsIDQ0OCBpbnNlcnRpb25zKCspLCAxNTEgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeW5jb2JqLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5 bmNvYmouYwo+IGluZGV4IGU5Y2U2MjNkMDQ5ZS4uOTRiMzFkZTIzODU4IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9zeW5jb2JqLmMKPiBAQCAtNTYsNiArNTYsOSBAQAo+ICAgI2luY2x1ZGUgImRybV9pbnRlcm5h bC5oIgo+ICAgI2luY2x1ZGUgPGRybS9kcm1fc3luY29iai5oPgo+ICAgCj4gKy8qIG1lcmdlIG5v cm1hbCBzeW5jb2JqIHRvIHRpbWVsaW5lIHN5bmNvYmosIHRoZSBwb2ludCBpbnRlcnZhbCBpcyAx ICovCj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpfTk9STUFMX1BPSU5UIDEKPiArCj4gICBzdHJ1Y3Qg ZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZSB7Cj4gICAJc3RydWN0IGRtYV9mZW5jZSBiYXNlOwo+ICAg CXNwaW5sb2NrX3QgbG9jazsKPiBAQCAtODIsNiArODUsMTggQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBkbWFfZmVuY2Vfb3BzIGRybV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzID0gewo+ICAgCS5yZWxl YXNlID0gZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZV9yZWxlYXNlLAo+ICAgfTsKPiAgIAo+ICtzdHJ1 Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0IHsKPiArCXN0cnVjdCBkbWFfZmVuY2VfYXJyYXkgKmJh c2U7Cj4gKwl1NjQgICAgdmFsdWU7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gK307Cj4g K3N0cnVjdCBkcm1fc3luY29ial93YWl0X3B0IHsKPiArCXN0cnVjdCBkcm1fc3luY29ial9zdHVi X2ZlbmNlIGJhc2U7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpzaWduYWxfcHRfZmVuY2U7Cj4gKwlz dHJ1Y3QgZG1hX2ZlbmNlX2NiIHdhaXRfY2I7Cj4gKwlzdHJ1Y3QgcmJfbm9kZSAgIG5vZGU7Cj4g Kwl1NjQgICAgdmFsdWU7Cj4gK307Cj4gICAKPiAgIC8qKgo+ICAgICogZHJtX3N5bmNvYmpfZmlu ZCAtIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGEgc3luYyBvYmplY3QuCj4gQEAgLTEwOSw2MSArMTI0 LDIzOCBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmogKmRybV9zeW5jb2JqX2ZpbmQoc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXZhdGUsCj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MKGRybV9zeW5jb2JqX2Zp bmQpOwo+ICAgCj4gLXN0YXRpYyB2b2lkIGRybV9zeW5jb2JqX2FkZF9jYWxsYmFja19sb2NrZWQo c3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+IC0JCQkJCSAgICBzdHJ1Y3QgZHJtX3N5bmNv YmpfY2IgKmNiLAo+IC0JCQkJCSAgICBkcm1fc3luY29ial9mdW5jX3QgZnVuYykKPiArc3RhdGlj IHZvaWQgZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdChzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNv YmosCj4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgKnN5bmNvYmpfdGlt ZWxpbmUpCgpTaW5jZSB3ZSBtZXJnZWQgdGltZWxpbmUgYW5kIHNpbmdsZXRvbiBzeW5jb2JqIHlv dSBjYW4gZHJvcCB0aGUgZXh0cmEgCl90aW1lbGluZV8gcGFydCBpbiB0aGUgZnVuY3Rpb24gbmFt ZSBJIHRoaW5rLgoKPiAgIHsKPiAtCWNiLT5mdW5jID0gZnVuYzsKPiAtCWxpc3RfYWRkX3RhaWwo JmNiLT5ub2RlLCAmc3luY29iai0+Y2JfbGlzdCk7Cj4gKwlzcGluX2xvY2soJnN5bmNvYmotPmxv Y2spOwo+ICsJc3luY29ial90aW1lbGluZS0+dGltZWxpbmVfY29udGV4dCA9IGRtYV9mZW5jZV9j b250ZXh0X2FsbG9jKDEpOwo+ICsJc3luY29ial90aW1lbGluZS0+dGltZWxpbmUgPSAwOwo+ICsJ c3luY29ial90aW1lbGluZS0+c2lnbmFsX3BvaW50ID0gMDsKPiArCWluaXRfd2FpdHF1ZXVlX2hl YWQoJnN5bmNvYmpfdGltZWxpbmUtPndxKTsKPiArCj4gKwlzeW5jb2JqX3RpbWVsaW5lLT53YWl0 X3B0X3RyZWUgPSBSQl9ST09UOwo+ICsJSU5JVF9MSVNUX0hFQUQoJnN5bmNvYmpfdGltZWxpbmUt PnNpZ25hbF9wdF9saXN0KTsKPiArCXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPiAgIH0K PiAgIAo+IC1zdGF0aWMgaW50IGRybV9zeW5jb2JqX2ZlbmNlX2dldF9vcl9hZGRfY2FsbGJhY2so c3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+IC0JCQkJCQkgc3RydWN0IGRtYV9mZW5jZSAq KmZlbmNlLAo+IC0JCQkJCQkgc3RydWN0IGRybV9zeW5jb2JqX2NiICpjYiwKPiAtCQkJCQkJIGRy bV9zeW5jb2JqX2Z1bmNfdCBmdW5jKQo+ICtzdGF0aWMgdm9pZCBkcm1fc3luY29ial90aW1lbGlu ZV9maW5pKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKPiArCQkJCSAgICAgIHN0cnVjdCBk cm1fc3luY29ial90aW1lbGluZSAqc3luY29ial90aW1lbGluZSkKPiAgIHsKPiAtCWludCByZXQ7 Cj4gLQo+IC0JKmZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmopOwo+IC0JaWYg KCpmZW5jZSkKPiAtCQlyZXR1cm4gMTsKPiArCXN0cnVjdCByYl9ub2RlICpub2RlID0gTlVMTDsK PiArCXN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0ID0gTlVMTDsKPiArCXN0cnVj dCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9IE5VTEwsICp0bXA7Cj4gICAKPiAg IAlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+IC0JLyogV2UndmUgYWxyZWFkeSB0cmllZCBv bmNlIHRvIGdldCBhIGZlbmNlIGFuZCBmYWlsZWQuICBOb3cgdGhhdCB3ZQo+IC0JICogaGF2ZSB0 aGUgbG9jaywgdHJ5IG9uZSBtb3JlIHRpbWUganVzdCB0byBiZSBzdXJlIHdlIGRvbid0IGFkZCBh Cj4gLQkgKiBjYWxsYmFjayB3aGVuIGEgZmVuY2UgaGFzIGFscmVhZHkgYmVlbiBzZXQuCj4gLQkg Ki8KPiAtCWlmIChzeW5jb2JqLT5mZW5jZSkgewo+IC0JCSpmZW5jZSA9IGRtYV9mZW5jZV9nZXQo cmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jb2JqLT5mZW5jZSwKPiAtCQkJCQkJCQkgbG9j a2RlcF9pc19oZWxkKCZzeW5jb2JqLT5sb2NrKSkpOwo+IC0JCXJldCA9IDE7Cj4gLQl9IGVsc2Ug ewo+IC0JCSpmZW5jZSA9IE5VTEw7Cj4gLQkJZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrX2xvY2tl ZChzeW5jb2JqLCBjYiwgZnVuYyk7Cj4gLQkJcmV0ID0gMDsKPiArCWlmICghUkJfRU1QVFlfUk9P VCgmc3luY29ial90aW1lbGluZS0+d2FpdF9wdF90cmVlKSkKPiArCQlEUk1fRVJST1IoIlRoZXJl IHN0aWxsIGFyZSBhZHZhbmNlZCB3YWl0X3B0cyEgcGxzIGNoZWNrISIpOwo+ICsJd2hpbGUgKChu b2RlID0gcmJfZmlyc3QoJnN5bmNvYmpfdGltZWxpbmUtPndhaXRfcHRfdHJlZSkpKSB7Cj4gKwkJ d2FpdF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0LCBub2Rl KTsKPiArCQlyYl9lcmFzZSgmd2FpdF9wdC0+bm9kZSwKPiArCQkJICZzeW5jb2JqX3RpbWVsaW5l LT53YWl0X3B0X3RyZWUpOwo+ICsJCVJCX0NMRUFSX05PREUoJndhaXRfcHQtPm5vZGUpOwo+ICsJ CWlmICghd2FpdF9wdC0+c2lnbmFsX3B0X2ZlbmNlKSB7Cj4gKwkJCS8qIGlmIHdhaXRfcHQgc3Rp bGwgaXMgYWR2YW5jZWQsIGZha2Ugc2lnbmFsIGl0Lgo+ICsJCQkgKiBnZW5lcmFsbHkgc2hvdWxk bid0IGhhcHBlbnMgKi8KPiArCQkJZG1hX2ZlbmNlX3NldF9lcnJvcigmd2FpdF9wdC0+YmFzZS5i YXNlLCAtRU5PRU5UKTsKPiArCQkJZG1hX2ZlbmNlX3NpZ25hbCgmd2FpdF9wdC0+YmFzZS5iYXNl KTsKPiArCQl9Cj4gKwkJLyoga2ZyZWUod2FpdF9wdCkgaXMgZXhjdXRlZCBieSBmZW5jZSBwdXQg Ki8KPiArCQlkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+ICsJfQo+ICsJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpZ25hbF9wdCwgdG1wLAo+ICsJCQkJICZzeW5jb2JqX3Rp bWVsaW5lLT5zaWduYWxfcHRfbGlzdCwgbGlzdCkgewo+ICsJCWxpc3RfZGVsKCZzaWduYWxfcHQt Pmxpc3QpOwo+ICsJCWRtYV9mZW5jZV9wdXQoJnNpZ25hbF9wdC0+YmFzZS0+YmFzZSk7Cj4gKwkJ a2ZyZWUoc2lnbmFsX3B0KTsKPiAgIAl9Cj4gICAJc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2sp Owo+ICt9Cj4gICAKPiAtCXJldHVybiByZXQ7Cj4gK3N0YXRpYyB2b2lkIHdhaXRfcHRfZnVuYyhz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwgc3RydWN0IGRtYV9mZW5jZV9jYiAqY2IpCj4gK3sKPiAr CXN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0ID0KPiArCQljb250YWluZXJfb2Yo Y2IsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0LCB3YWl0X2NiKTsKPiArCj4gKwlkbWFfZmVu Y2Vfc2lnbmFsKCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+ICsJZG1hX2ZlbmNlX3B1dCh3YWl0X3B0 LT5zaWduYWxfcHRfZmVuY2UpOwo+ICsJd2FpdF9wdC0+c2lnbmFsX3B0X2ZlbmNlID0gTlVMTDsK PiArCWRtYV9mZW5jZV9wdXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGRybV9zeW5jb2JqX2ZpbmRfc2lnbmFsX3B0X2Zvcl93YWl0X3B0KHN0cnVjdCBkcm1f c3luY29iaiAqc3luY29iaiwKPiArCQkJCQkJICAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQg KndhaXRfcHQpCj4gK3sKClRoYXQgd2hvbGUgYXBwcm9hY2ggc3RpbGwgbG9va3MgaG9ycmlibGUg Y29tcGxpY2F0ZWQgdG8gbWUuCgpFc3BlY2lhbGx5IHRoZSBzZXBhcmF0aW9uIG9mIHNpZ25hbCBh bmQgd2FpdCBwdCBpcyBjb21wbGV0ZWx5IAp1bm5lY2Vzc2FyeSBhcyBmYXIgYXMgSSBjYW4gc2Vl LgoKV2hlbiBhIHdhaXQgcHQgaXMgcmVxdWVzdGVkIHdlIGp1c3QgbmVlZCB0byBzZWFyY2ggZm9y IHRoZSBzaWduYWwgcG9pbnQgCndoaWNoIGl0IHdpbGwgdHJpZ2dlci4KClJlZ2FyZHMsCkNocmlz dGlhbi4KCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgKnRpbWVsaW5lID0gJnN5bmNv YmotPnN5bmNvYmpfdGltZWxpbmU7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICpz aWduYWxfcHQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICh3YWl0X3B0LT5zaWduYWxfcHRfZmVu Y2UpIHsKPiArCQlyZXR1cm47Cj4gKwl9IGVsc2UgaWYgKChzeW5jb2JqLT50eXBlID09IERSTV9T WU5DT0JKX1RZUEVfVElNRUxJTkUpICYmCj4gKwkJICAgKHdhaXRfcHQtPnZhbHVlIDw9IHRpbWVs aW5lLT50aW1lbGluZSkpIHsKPiArCQlkbWFfZmVuY2Vfc2lnbmFsKCZ3YWl0X3B0LT5iYXNlLmJh c2UpOwo+ICsJCXJiX2VyYXNlKCZ3YWl0X3B0LT5ub2RlLAo+ICsJCQkgJnRpbWVsaW5lLT53YWl0 X3B0X3RyZWUpOwo+ICsJCVJCX0NMRUFSX05PREUoJndhaXRfcHQtPm5vZGUpOwo+ICsJCWRtYV9m ZW5jZV9wdXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiAr CWxpc3RfZm9yX2VhY2hfZW50cnkoc2lnbmFsX3B0LCAmdGltZWxpbmUtPnNpZ25hbF9wdF9saXN0 LCBsaXN0KSB7Cj4gKwkJaWYgKHdhaXRfcHQtPnZhbHVlIDwgc2lnbmFsX3B0LT52YWx1ZSkKPiAr CQkJY29udGludWU7Cj4gKwkJaWYgKChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVf Tk9STUFMKSAmJgo+ICsJCSAgICAod2FpdF9wdC0+dmFsdWUgIT0gc2lnbmFsX3B0LT52YWx1ZSkp Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCXdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSA9IGRtYV9mZW5j ZV9nZXQoJnNpZ25hbF9wdC0+YmFzZS0+YmFzZSk7Cj4gKwkJcmV0ID0gZG1hX2ZlbmNlX2FkZF9j YWxsYmFjayh3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2UsCj4gKwkJCQkJICAgICAmd2FpdF9wdC0+ d2FpdF9jYiwKPiArCQkJCQkgICAgIHdhaXRfcHRfZnVuYyk7Cj4gKwkJaWYgKHJldCA9PSAtRU5P RU5UKSB7Cj4gKwkJCWRtYV9mZW5jZV9zaWduYWwoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4gKwkJ CWRtYV9mZW5jZV9wdXQod2FpdF9wdC0+c2lnbmFsX3B0X2ZlbmNlKTsKPiArCQkJd2FpdF9wdC0+ c2lnbmFsX3B0X2ZlbmNlID0gTlVMTDsKPiArCQkJcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCj4g KwkJCQkgJnRpbWVsaW5lLT53YWl0X3B0X3RyZWUpOwo+ICsJCQlSQl9DTEVBUl9OT0RFKCZ3YWl0 X3B0LT5ub2RlKTsKPiArCQkJZG1hX2ZlbmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsKPiAr CQl9IGVsc2UgaWYgKHJldCA8IDApIHsKPiArCQkJZG1hX2ZlbmNlX3B1dCh3YWl0X3B0LT5zaWdu YWxfcHRfZmVuY2UpOwo+ICsJCQlEUk1fRVJST1IoImFkZCBjYWxsYmFjayBlcnJvciEiKTsKPiAr CQl9IGVsc2Ugewo+ICsJCQkvKiBhZnRlciBhZGRpbmcgY2FsbGJhY2ssIHJlbW92ZSBmcm9tIHJi IHRyZWUgKi8KPiArCQkJcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCj4gKwkJCQkgJnRpbWVsaW5l LT53YWl0X3B0X3RyZWUpOwo+ICsJCQlSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0LT5ub2RlKTsKPiAr CQl9Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsJLyogc2lnbmFsZWQgcHQgd2FzIHJlbGVhc2VkICov Cj4gKwlpZiAoIXdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSAmJiAod2FpdF9wdC0+dmFsdWUgPD0K PiArCQkJCQkgIHRpbWVsaW5lLT5zaWduYWxfcG9pbnQpKSB7Cj4gKwkJZG1hX2ZlbmNlX3NpZ25h bCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsKPiArCQlyYl9lcmFzZSgmd2FpdF9wdC0+bm9kZSwKPiAr CQkJICZ0aW1lbGluZS0+d2FpdF9wdF90cmVlKTsKPiArCQlSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0 LT5ub2RlKTsKPiArCQlkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+ICsJfQo+ ICAgfQo+ICAgCj4gLXZvaWQgZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrKHN0cnVjdCBkcm1fc3lu Y29iaiAqc3luY29iaiwKPiAtCQkJICAgICAgc3RydWN0IGRybV9zeW5jb2JqX2NiICpjYiwKPiAt CQkJICAgICAgZHJtX3N5bmNvYmpfZnVuY190IGZ1bmMpCj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNv YmpfdGltZWxpbmVfY3JlYXRlX3NpZ25hbF9wdChzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmos Cj4gKwkJCQkJCSBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKPiArCQkJCQkJIHU2NCBwb2ludCkK PiAgIHsKPiArCXN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9Cj4gKwkJ a3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCksIEdGUF9LRVJORUwp Owo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCAqdGFpbF9wdDsKPiArCXN0cnVjdCBk bWFfZmVuY2UgKipmZW5jZXM7Cj4gKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKPiArCXN0cnVjdCBk cm1fc3luY29ial93YWl0X3B0ICp0YWlsX3dhaXRfcHQgPSBOVUxMOwo+ICsJaW50IG51bV9mZW5j ZXMgPSAwOwo+ICsJaW50IHJldCA9IDAsIGk7Cj4gKwo+ICsJaWYgKCFzaWduYWxfcHQpCj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gKwlpZiAoc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxf cG9pbnQgPj0gcG9pbnQpIHsKPiArCQlEUk1fV0FSTigiQSBsYXRlciBzaWduYWwgaXMgcmVhZHkh Iik7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwlpZiAoIWZlbmNlKQo+ICsJCWdvdG8gb3V0Owo+ ICsKPiArCWZlbmNlcyA9IGttYWxsb2NfYXJyYXkoc2l6ZW9mKHZvaWQgKiksIDIsIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFmZW5jZXMpCj4gKwkJZ290byBvdXQ7Cj4gKwlmZW5jZXNbbnVtX2ZlbmNl cysrXSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+ICsJLyogdGltZWxpbmUgc3luY29iaiBtdXN0 IHRha2UgdGhpcyBkZXBlbmRlbmN5ICovCj4gKwlpZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lO Q09CSl9UWVBFX1RJTUVMSU5FKSB7Cj4gKwkJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPiAr CQlpZiAoIWxpc3RfZW1wdHkoJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUuc2lnbmFsX3B0X2xp c3QpKSB7Cj4gKwkJCXRhaWxfcHQgPSBsaXN0X2xhc3RfZW50cnkoJnN5bmNvYmotPnN5bmNvYmpf dGltZWxpbmUuc2lnbmFsX3B0X2xpc3QsCj4gKwkJCQkJCSAgc3RydWN0IGRybV9zeW5jb2JqX3Np Z25hbF9wdCwgbGlzdCk7Cj4gKwkJCWZlbmNlc1tudW1fZmVuY2VzKytdID0gZG1hX2ZlbmNlX2dl dCgmdGFpbF9wdC0+YmFzZS0+YmFzZSk7Cj4gKwkJfQo+ICsJCXNwaW5fdW5sb2NrKCZzeW5jb2Jq LT5sb2NrKTsKPiArCX0KPiArCXNpZ25hbF9wdC0+YmFzZSA9IGRtYV9mZW5jZV9hcnJheV9jcmVh dGUobnVtX2ZlbmNlcywgZmVuY2VzLAo+ICsJCQkJCQkgc3luY29iai0+c3luY29ial90aW1lbGlu ZS50aW1lbGluZV9jb250ZXh0LAo+ICsJCQkJCQkgcG9pbnQsIGZhbHNlKTsKPiArCWlmICghc2ln bmFsX3B0LT5iYXNlKQo+ICsJCWdvdG8gZmFpbDsKPiArCj4gKwlzaWduYWxfcHQtPnZhbHVlID0g cG9pbnQ7Cj4gICAJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPiAtCWRybV9zeW5jb2JqX2Fk ZF9jYWxsYmFja19sb2NrZWQoc3luY29iaiwgY2IsIGZ1bmMpOwo+ICsJc3luY29iai0+c3luY29i al90aW1lbGluZS5zaWduYWxfcG9pbnQgPSBwb2ludDsKPiArCUlOSVRfTElTVF9IRUFEKCZzaWdu YWxfcHQtPmxpc3QpOwo+ICsJbGlzdF9hZGRfdGFpbCgmc2lnbmFsX3B0LT5saXN0LCAmc3luY29i ai0+c3luY29ial90aW1lbGluZS5zaWduYWxfcHRfbGlzdCk7Cj4gKwo+ICsJLyogY2hlY2sgaWYg dGhlcmUgaXMgYWR2YW5jZWQgd2FpdCAqLwo+ICsJbm9kZSA9IHJiX2xhc3QoJnN5bmNvYmotPnN5 bmNvYmpfdGltZWxpbmUud2FpdF9wdF90cmVlKTsKPiArCWlmIChub2RlKQo+ICsJCXRhaWxfd2Fp dF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0LCBub2RlKTsK PiArCWlmICh0YWlsX3dhaXRfcHQgJiYgIXRhaWxfd2FpdF9wdC0+c2lnbmFsX3B0X2ZlbmNlKSB7 Cj4gKwkJZm9yIChub2RlID0gcmJfZmlyc3QoJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2Fp dF9wdF90cmVlKTsKPiArCQkgICAgIG5vZGUgIT0gTlVMTDsgbm9kZSA9IHJiX25leHQobm9kZSkp IHsKPiArCQkJc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKndhaXRfcHQgPQo+ICsJCQkJcmJf ZW50cnkobm9kZSwgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQsCj4gKwkJCQkJIG5vZGUpOwo+ ICsKPiArCQkJZHJtX3N5bmNvYmpfZmluZF9zaWduYWxfcHRfZm9yX3dhaXRfcHQoc3luY29iaiwK PiArCQkJCQkJCSAgICAgICB3YWl0X3B0KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICAgCXNwaW5fdW5s b2NrKCZzeW5jb2JqLT5sb2NrKTsKPiArCXdha2VfdXBfYWxsKCZzeW5jb2JqLT5zeW5jb2JqX3Rp bWVsaW5lLndxKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArZmFpbDoKPiArCWZvciAoaSA9IDA7IGkg PCBudW1fZmVuY2VzOyBpKyspCj4gKwkJZG1hX2ZlbmNlX3B1dChmZW5jZXNbaV0pOwo+ICsJa2Zy ZWUoZmVuY2VzKTsKPiArb3V0Ogo+ICsJa2ZyZWUoc2lnbmFsX3B0KTsKPiArCXJldHVybiByZXQ7 Cj4gICB9Cj4gICAKPiAtdm9pZCBkcm1fc3luY29ial9yZW1vdmVfY2FsbGJhY2soc3RydWN0IGRy bV9zeW5jb2JqICpzeW5jb2JqLAo+IC0JCQkJIHN0cnVjdCBkcm1fc3luY29ial9jYiAqY2IpCj4g K3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX3RpbWVsaW5lX2dhcmJhZ2VfY29sbGVjdGlvbihzdHJ1 Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmopCj4gICB7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGlt ZWxpbmUgKnRpbWVsaW5lID0gJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmU7Cj4gKwlzdHJ1Y3Qg cmJfbm9kZSAqbm9kZTsKPiArCXN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3YWl0X3B0Owo+ ICsJc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCAqc2lnbmFsX3B0LCAqdG1wOwo+ICsKPiAg IAlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+IC0JbGlzdF9kZWxfaW5pdCgmY2ItPm5vZGUp Owo+ICsJbm9kZSA9IHJiX2ZpcnN0KCZ0aW1lbGluZS0+d2FpdF9wdF90cmVlKTsKPiArCXdoaWxl IChub2RlKSB7Cj4gKwkJd2FpdF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBkcm1fc3luY29i al93YWl0X3B0LCBub2RlKTsKPiArCQlpZiAoIWRtYV9mZW5jZV9pc19zaWduYWxlZCgmd2FpdF9w dC0+YmFzZS5iYXNlKSkgewo+ICsJCQlub2RlID0gcmJfbmV4dChub2RlKTsKPiArCQkJY29udGlu dWU7Cj4gKwkJfQo+ICsJCXJiX2VyYXNlKCZ3YWl0X3B0LT5ub2RlLAo+ICsJCQkgJnRpbWVsaW5l LT53YWl0X3B0X3RyZWUpOwo+ICsJCVJCX0NMRUFSX05PREUoJndhaXRfcHQtPm5vZGUpOwo+ICsJ CS8qIGtmcmVlKHdhaXRfcHQpIGlzIGV4Y3V0ZWQgYnkgZmVuY2UgcHV0ICovCj4gKwkJZG1hX2Zl bmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsKPiArCQlub2RlID0gcmJfZmlyc3QoJnRpbWVs aW5lLT53YWl0X3B0X3RyZWUpOwo+ICsJfQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNp Z25hbF9wdCwgdG1wLAo+ICsJCQkJICZ0aW1lbGluZS0+c2lnbmFsX3B0X2xpc3QsIGxpc3QpIHsK PiArCQlpZiAoZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKCZzaWduYWxfcHQtPmJhc2UtPmJhc2UpKSB7 Cj4gKwkJCXRpbWVsaW5lLT50aW1lbGluZSA9IHNpZ25hbF9wdC0+dmFsdWU7Cj4gKwkJCWxpc3Rf ZGVsKCZzaWduYWxfcHQtPmxpc3QpOwo+ICsJCQlkbWFfZmVuY2VfcHV0KCZzaWduYWxfcHQtPmJh c2UtPmJhc2UpOwo+ICsJCQlrZnJlZShzaWduYWxfcHQpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCS8q c2lnbmFsX3B0IGlzIGluIG9yZGVyIGluIGxpc3QsIGZyb20gc21hbGwgdG8gYmlnLCBzbwo+ICsJ CQkgKiB0aGUgbGF0ZXIgbXVzdCBub3QgYmUgc2lnbmFsIGVpdGhlciAqLwo+ICsJCQlicmVhazsK PiArCQl9Cj4gKwl9Cj4gKwo+ICAgCXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPiAgIH0K PiAtCj4gICAvKioKPiAgICAqIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UgLSByZXBsYWNlIGZl bmNlIGluIGEgc3luYyBvYmplY3QuCj4gICAgKiBAc3luY29iajogU3luYyBvYmplY3QgdG8gcmVw bGFjZSBmZW5jZSBpbgo+IEBAIC0xNzYsMjggKzM2OCwyOSBAQCB2b2lkIGRybV9zeW5jb2JqX3Jl cGxhY2VfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ICAgCQkJICAgICAgIHU2 NCBwb2ludCwKPiAgIAkJCSAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKPiAgIHsKPiAt CXN0cnVjdCBkbWFfZmVuY2UgKm9sZF9mZW5jZTsKPiAtCXN0cnVjdCBkcm1fc3luY29ial9jYiAq Y3VyLCAqdG1wOwo+IC0KPiAtCWlmIChmZW5jZSkKPiAtCQlkbWFfZmVuY2VfZ2V0KGZlbmNlKTsK PiAtCj4gLQlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+IC0KPiAtCW9sZF9mZW5jZSA9IHJj dV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29iai0+ZmVuY2UsCj4gLQkJCQkJICAgICAgbG9j a2RlcF9pc19oZWxkKCZzeW5jb2JqLT5sb2NrKSk7Cj4gLQlyY3VfYXNzaWduX3BvaW50ZXIoc3lu Y29iai0+ZmVuY2UsIGZlbmNlKTsKPiAtCj4gLQlpZiAoZmVuY2UgIT0gb2xkX2ZlbmNlKSB7Cj4g LQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN1ciwgdG1wLCAmc3luY29iai0+Y2JfbGlzdCwg bm9kZSkgewo+IC0JCQlsaXN0X2RlbF9pbml0KCZjdXItPm5vZGUpOwo+IC0JCQljdXItPmZ1bmMo c3luY29iaiwgY3VyKTsKPiArCWRybV9zeW5jb2JqX3RpbWVsaW5lX2dhcmJhZ2VfY29sbGVjdGlv bihzeW5jb2JqKTsKPiArCWlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElN RUxJTkUpIHsKPiArCQlpZiAoZmVuY2UpCj4gKwkJCWRybV9zeW5jb2JqX3RpbWVsaW5lX2NyZWF0 ZV9zaWduYWxfcHQoc3luY29iaiwgZmVuY2UsCj4gKwkJCQkJCQkgICAgICBwb2ludCk7Cj4gKwkJ cmV0dXJuOwo+ICsJfSBlbHNlIGlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVf Tk9STUFMKSB7Cj4gKwkJdTY0IHB0X3ZhbHVlOwo+ICsKPiArCQlpZiAoIWZlbmNlKSB7Cj4gKwkJ CWRybV9zeW5jb2JqX3RpbWVsaW5lX2Zpbmkoc3luY29iaiwKPiArCQkJCQkJICAmc3luY29iai0+ c3luY29ial90aW1lbGluZSk7Cj4gKwkJCWRybV9zeW5jb2JqX3RpbWVsaW5lX2luaXQoc3luY29i aiwKPiArCQkJCQkJICAmc3luY29iai0+c3luY29ial90aW1lbGluZSk7Cj4gKwkJCXJldHVybjsK PiAgIAkJfQo+ICsJCXB0X3ZhbHVlID0gc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxf cG9pbnQgKwo+ICsJCQlEUk1fU1lOQ09CSl9OT1JNQUxfUE9JTlQ7Cj4gKwkJZHJtX3N5bmNvYmpf dGltZWxpbmVfY3JlYXRlX3NpZ25hbF9wdChzeW5jb2JqLCBmZW5jZSwgcHRfdmFsdWUpOwo+ICsJ CXJldHVybjsKPiArCX0gZWxzZSB7Cj4gKwkJRFJNX0VSUk9SKCJ0aGUgc3luY29iaiB0eXBlIGlz bid0IHN1cHBvcnRcbiIpOwo+ICAgCX0KPiAtCj4gLQlzcGluX3VubG9jaygmc3luY29iai0+bG9j ayk7Cj4gLQo+IC0JZG1hX2ZlbmNlX3B1dChvbGRfZmVuY2UpOwo+ICAgfQo+ICAgRVhQT1JUX1NZ TUJPTChkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKTsKPiAgIAo+IEBAIC0yMjAsNiArNDEzLDEy MCBAQCBzdGF0aWMgaW50IGRybV9zeW5jb2JqX2Fzc2lnbl9udWxsX2hhbmRsZShzdHJ1Y3QgZHJt X3N5bmNvYmogKnN5bmNvYmopCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiArc3RhdGljIHN0 cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICoKPiArZHJtX3N5bmNvYmpfdGltZWxpbmVfbG9va3Vw X3dhaXRfcHRfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ICsJCQkJCSAgdTY0 IHBvaW50LAo+ICsJCQkJCSAgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlKQo+ICt7Cj4gKwlzdHJ1 Y3QgcmJfbm9kZSAqbm9kZSA9IHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90cmVl LnJiX25vZGU7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdCA9IE5VTEw7 Cj4gKwo+ICsJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPiArCXdoaWxlKG5vZGUpIHsKPiAr CQlpbnQgcmVzdWx0Owo+ICsKPiArCQl3YWl0X3B0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGRy bV9zeW5jb2JqX3dhaXRfcHQsIG5vZGUpOwo+ICsJCXJlc3VsdCA9IHBvaW50IC0gd2FpdF9wdC0+ dmFsdWU7Cj4gKwkJaWYgKHJlc3VsdCA8IDApIHsKPiArCQkJbm9kZSA9IG5vZGUtPnJiX2xlZnQ7 Cj4gKwkJfSBlbHNlIGlmIChyZXN1bHQgPiAwKSB7Cj4gKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdo dDsKPiArCQl9IGVsc2Ugewo+ICsJCQlpZiAoZmVuY2UpCj4gKwkJCQkqZmVuY2UgPSBkbWFfZmVu Y2VfZ2V0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4g KwlzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIHdhaXRfcHQ7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqCj4gK2RybV9zeW5j b2JqX3RpbWVsaW5lX2NyZWF0ZV93YWl0X3B0X2FuZF9yZXR1cm5fZmVuY2Uoc3RydWN0IGRybV9z eW5jb2JqICpzeW5jb2JqLAo+ICsJCQkJCQkgICAgIHU2NCBwb2ludCwKPiArCQkJCQkJICAgICBz dHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4gK3sKPiArCXN0cnVjdCBkcm1fc3luY29ial93YWl0 X3B0ICp3YWl0X3B0ID0ga3phbGxvYyhzaXplb2YoKndhaXRfcHQpLAo+ICsJCQkJCQkgICAgICBH RlBfS0VSTkVMKTsKPiArCXN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlICpiYXNlOwo+ICsJ c3RydWN0IHJiX25vZGUgKipuZXcgPSAmKHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9w dF90cmVlLnJiX25vZGUpLCAqcGFyZW50ID0gTlVMTDsKPiArCj4gKwlpZiAoIXdhaXRfcHQpCj4g KwkJcmV0dXJuIE5VTEw7Cj4gKwliYXNlID0gJndhaXRfcHQtPmJhc2U7Cj4gKwlzcGluX2xvY2tf aW5pdCgmYmFzZS0+bG9jayk7Cj4gKwlkbWFfZmVuY2VfaW5pdCgmYmFzZS0+YmFzZSwKPiArCQkg ICAgICAgJmRybV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzLAo+ICsJCSAgICAgICAmYmFzZS0+bG9j aywKPiArCQkgICAgICAgc3luY29iai0+c3luY29ial90aW1lbGluZS50aW1lbGluZV9jb250ZXh0 LCBwb2ludCk7Cj4gKwl3YWl0X3B0LT52YWx1ZSA9IHBvaW50Owo+ICsJd2FpdF9wdC0+c2lnbmFs X3B0X2ZlbmNlID0gTlVMTDsKPiArCj4gKwkvKiB3YWl0IHB0IG11c3QgYmUgaW4gYW4gb3JkZXIs IHNvIHRoYXQgd2UgY2FuIGVhc2lseSBsb29rdXAgYW5kIHNpZ25hbAo+ICsJICogaXQgKi8KPiAr CXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Cj4gKwl3aGlsZSgqbmV3KSB7Cj4gKwkJc3RydWN0 IGRybV9zeW5jb2JqX3dhaXRfcHQgKnRoaXMgPQo+ICsJCQlyYl9lbnRyeSgqbmV3LCBzdHJ1Y3Qg ZHJtX3N5bmNvYmpfd2FpdF9wdCwgbm9kZSk7Cj4gKwkJaW50IHJlc3VsdCA9IHdhaXRfcHQtPnZh bHVlIC0gdGhpcy0+dmFsdWU7Cj4gKwo+ICsJCXBhcmVudCA9ICpuZXc7Cj4gKwkJaWYgKHJlc3Vs dCA8IDApCj4gKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKPiArCQllbHNlIGlmIChyZXN1 bHQgPiAwKQo+ICsJCQluZXcgPSAmKCgqbmV3KS0+cmJfcmlnaHQpOwo+ICsJCWVsc2UKPiArCQkJ Z290byBleGlzdDsKPiArCX0KPiArCWlmIChmZW5jZSkKPiArCQkqZmVuY2UgPSBkbWFfZmVuY2Vf Z2V0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+ICsJcmJfbGlua19ub2RlKCZ3YWl0X3B0LT5ub2Rl LCBwYXJlbnQsIG5ldyk7Cj4gKwlyYl9pbnNlcnRfY29sb3IoJndhaXRfcHQtPm5vZGUsICZzeW5j b2JqLT5zeW5jb2JqX3RpbWVsaW5lLndhaXRfcHRfdHJlZSk7Cj4gKwlzcGluX3VubG9jaygmc3lu Y29iai0+bG9jayk7Cj4gKwlyZXR1cm4gd2FpdF9wdDsKPiArZXhpc3Q6Cj4gKwlzcGluX3VubG9j aygmc3luY29iai0+bG9jayk7Cj4gKwlkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2Up Owo+ICsJd2FpdF9wdCA9IGRybV9zeW5jb2JqX3RpbWVsaW5lX2xvb2t1cF93YWl0X3B0X2ZlbmNl KHN5bmNvYmosIHBvaW50LAo+ICsJCQkJCQkJICAgIGZlbmNlKTsKPiArCXJldHVybiB3YWl0X3B0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqCj4gK2RybV9zeW5jb2JqX3Rp bWVsaW5lX3BvaW50X2dldChzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCBwb2ludCwg dTY0IGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdDsK PiArCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0gTlVMTDsKPiArCj4gKwkvKiBjaGVjayBpZiB0 aGUgd2FpdCBwdCBleGlzdHMgKi8KPiArCXdhaXRfcHQgPSBkcm1fc3luY29ial90aW1lbGluZV9s b29rdXBfd2FpdF9wdF9mZW5jZShzeW5jb2JqLCBwb2ludCwKPiArCQkJCQkJCSAgICAmZmVuY2Up Owo+ICsJaWYgKCFmZW5jZSkgewo+ICsJCS8qIFRoaXMgaXMgYSBuZXcgd2FpdCBwdCwgc28gY3Jl YXRlIGl0ICovCj4gKwkJd2FpdF9wdCA9IGRybV9zeW5jb2JqX3RpbWVsaW5lX2NyZWF0ZV93YWl0 X3B0X2FuZF9yZXR1cm5fZmVuY2Uoc3luY29iaiwgcG9pbnQsCj4gKwkJCQkJCQkgICAgICAmZmVu Y2UpOwo+ICsJCWlmICghZmVuY2UpCj4gKwkJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsJaWYgKHdh aXRfcHQpIHsKPiArCQlpbnQgcmV0ID0gMDsKPiArCj4gKwkJaWYgKGZsYWdzICYgRFJNX1NZTkNP QkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQpIHsKPiArCQkJcmV0ID0gd2FpdF9ldmVudF9p bnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3luY29iai0+c3luY29ial90aW1lbGluZS53cSwKPiArCQkJ CQkJCSAgICAgICB3YWl0X3B0LT52YWx1ZSA8PSBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNp Z25hbF9wb2ludCwKPiArCQkJCQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7IC8q IHdhaXQgMTBzICovCj4gKwkJCWlmIChyZXQgPD0gMCkKPiArCQkJCXJldHVybiBOVUxMOwo+ICsJ CX0KPiArCQlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+ICsJCWRybV9zeW5jb2JqX2ZpbmRf c2lnbmFsX3B0X2Zvcl93YWl0X3B0KHN5bmNvYmosIHdhaXRfcHQpOwo+ICsJCXNwaW5fdW5sb2Nr KCZzeW5jb2JqLT5sb2NrKTsKPiArCQlyZXR1cm4gZmVuY2U7Cj4gKwl9Cj4gKwlyZXR1cm4gTlVM TDsKPiArfQo+ICsKPiAgIC8qKgo+ICAgICogZHJtX3N5bmNvYmpfZmluZF9mZW5jZSAtIGxvb2t1 cCBhbmQgcmVmZXJlbmNlIHRoZSBmZW5jZSBpbiBhIHN5bmMgb2JqZWN0Cj4gICAgKiBAZmlsZV9w cml2YXRlOiBkcm0gZmlsZSBwcml2YXRlIHBvaW50ZXIKPiBAQCAtMjM0LDIwICs1NDEsNDYgQEAg c3RhdGljIGludCBkcm1fc3luY29ial9hc3NpZ25fbnVsbF9oYW5kbGUoc3RydWN0IGRybV9zeW5j b2JqICpzeW5jb2JqKQo+ICAgICogY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGZlbmNlLCB3 aGljaCBtdXN0IGJlIHJlbGVhc2VkIGJ5IGNhbGxpbmcKPiAgICAqIGRtYV9mZW5jZV9wdXQoKS4K PiAgICAqLwo+IC1pbnQgZHJtX3N5bmNvYmpfZmluZF9mZW5jZShzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdmF0ZSwKPiAtCQkJICAgdTMyIGhhbmRsZSwgdTY0IHBvaW50LAo+IC0JCQkgICBzdHJ1 Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4gK2ludCBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3Ry dWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgcG9pbnQsCj4gKwkJCSAgICAgdTY0IGZsYWdz LCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX3N5bmNvYmog KnN5bmNvYmogPSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJpdmF0ZSwgaGFuZGxlKTsKPiAgIAlp bnQgcmV0ID0gMDsKPiAgIAo+ICAgCWlmICghc3luY29iaikKPiAgIAkJcmV0dXJuIC1FTk9FTlQ7 Cj4gICAKPiAtCSpmZW5jZSA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzeW5jb2JqKTsKPiArCWRy bV9zeW5jb2JqX3RpbWVsaW5lX2dhcmJhZ2VfY29sbGVjdGlvbihzeW5jb2JqKTsKPiArCWlmIChz eW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfTk9STUFMKSB7Cj4gKwkJLypOT1JNQUwg c3luY29iaiBhbHdheXMgd2FpdCBvbiBsYXN0IHB0ICovCj4gKwkJdTY0IHRhaWxfcHRfdmFsdWUg PSBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wb2ludDsKPiArCj4gKwkJaWYgKHRh aWxfcHRfdmFsdWUgPT0gMCkKPiArCQkJdGFpbF9wdF92YWx1ZSArPSBEUk1fU1lOQ09CSl9OT1JN QUxfUE9JTlQ7Cj4gKwkJLyogTk9STUFMIHN5bmNvYmogZG9lc24ndCBjYXJlIHBvaW50IHZhbHVl ICovCj4gKwkJV0FSTl9PTihwb2ludCAhPSAwKTsKPiArCQkqZmVuY2UgPSBkcm1fc3luY29ial90 aW1lbGluZV9wb2ludF9nZXQoc3luY29iaiwgdGFpbF9wdF92YWx1ZSwKPiArCQkJCQkJCWZsYWdz KTsKPiArCX0gZWxzZSBpZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVM SU5FKSB7Cj4gKwkJKmZlbmNlID0gZHJtX3N5bmNvYmpfdGltZWxpbmVfcG9pbnRfZ2V0KHN5bmNv YmosIHBvaW50LAo+ICsJCQkJCQkJZmxhZ3MpOwo+ICsJfSBlbHNlIHsKPiArCQlEUk1fRVJST1Io IkRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIHN5bmNvYmpcbiIpOwo+ICsJCSpmZW5jZSA9IE5VTEw7 Cj4gKwl9Cj4gICAJaWYgKCEqZmVuY2UpIHsKPiAgIAkJcmV0ID0gLUVJTlZBTDsKPiAgIAl9Cj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX3N5bmNvYmpfc2VhcmNoX2Zl bmNlKTsKPiAraW50IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2Uoc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXZhdGUsCj4gKwkJCSAgIHUzMiBoYW5kbGUsIHU2NCBwb2ludCwKPiArCQkJICAgc3RydWN0 IGRtYV9mZW5jZSAqKmZlbmNlKSB7Cj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBk cm1fc3luY29ial9maW5kKGZpbGVfcHJpdmF0ZSwgaGFuZGxlKTsKPiArCj4gKwlpbnQgcmV0ID0g ZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmosIHBvaW50LAo+ICsJCQkJCURSTV9TWU5D T0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlULAo+ICsJCQkJCWZlbmNlKTsKPiAgIAlkcm1f c3luY29ial9wdXQoc3luY29iaik7Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiBAQCAtMjY0LDcg KzU5Nyw3IEBAIHZvaWQgZHJtX3N5bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZikKPiAgIAlz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBjb250YWluZXJfb2Yoa3JlZiwKPiAgIAkJCQkJ CSAgIHN0cnVjdCBkcm1fc3luY29iaiwKPiAgIAkJCQkJCSAgIHJlZmNvdW50KTsKPiAtCWRybV9z eW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3luY29iaiwgMCwgTlVMTCk7Cj4gKwlkcm1fc3luY29ial90 aW1lbGluZV9maW5pKHN5bmNvYmosICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lKTsKPiAgIAlr ZnJlZShzeW5jb2JqKTsKPiAgIH0KPiAgIEVYUE9SVF9TWU1CT0woZHJtX3N5bmNvYmpfZnJlZSk7 Cj4gQEAgLTI5Miw4ICs2MjUsMTIgQEAgaW50IGRybV9zeW5jb2JqX2NyZWF0ZShzdHJ1Y3QgZHJt X3N5bmNvYmogKipvdXRfc3luY29iaiwgdWludDMyX3QgZmxhZ3MsCj4gICAJCXJldHVybiAtRU5P TUVNOwo+ICAgCj4gICAJa3JlZl9pbml0KCZzeW5jb2JqLT5yZWZjb3VudCk7Cj4gLQlJTklUX0xJ U1RfSEVBRCgmc3luY29iai0+Y2JfbGlzdCk7Cj4gICAJc3Bpbl9sb2NrX2luaXQoJnN5bmNvYmot PmxvY2spOwo+ICsJaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfVElNRUxJTkUp Cj4gKwkJc3luY29iai0+dHlwZSA9IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkU7Cj4gKwllbHNl Cj4gKwkJc3luY29iai0+dHlwZSA9IERSTV9TWU5DT0JKX1RZUEVfTk9STUFMOwo+ICsJZHJtX3N5 bmNvYmpfdGltZWxpbmVfaW5pdChzeW5jb2JqLCAmc3luY29iai0+c3luY29ial90aW1lbGluZSk7 Cj4gICAKPiAgIAlpZiAoZmxhZ3MgJiBEUk1fU1lOQ09CSl9DUkVBVEVfU0lHTkFMRUQpIHsKPiAg IAkJcmV0ID0gZHJtX3N5bmNvYmpfYXNzaWduX251bGxfaGFuZGxlKHN5bmNvYmopOwo+IEBAIC02 NTEsNyArOTg4LDYgQEAgc3RydWN0IHN5bmNvYmpfd2FpdF9lbnRyeSB7Cj4gICAJc3RydWN0IHRh c2tfc3RydWN0ICp0YXNrOwo+ICAgCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+ICAgCXN0cnVj dCBkbWFfZmVuY2VfY2IgZmVuY2VfY2I7Cj4gLQlzdHJ1Y3QgZHJtX3N5bmNvYmpfY2Igc3luY29i al9jYjsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2FpdF9mZW5jZV9mdW5j KHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+IEBAIC02NjMsMTggKzk5OSw2IEBAIHN0YXRpYyB2 b2lkIHN5bmNvYmpfd2FpdF9mZW5jZV9mdW5jKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+ICAg CXdha2VfdXBfcHJvY2Vzcyh3YWl0LT50YXNrKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBz eW5jb2JqX3dhaXRfc3luY29ial9mdW5jKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKPiAt CQkJCSAgICAgIHN0cnVjdCBkcm1fc3luY29ial9jYiAqY2IpCj4gLXsKPiAtCXN0cnVjdCBzeW5j b2JqX3dhaXRfZW50cnkgKndhaXQgPQo+IC0JCWNvbnRhaW5lcl9vZihjYiwgc3RydWN0IHN5bmNv Ympfd2FpdF9lbnRyeSwgc3luY29ial9jYik7Cj4gLQo+IC0JLyogVGhpcyBoYXBwZW5zIGluc2lk ZSB0aGUgc3luY29iaiBsb2NrICovCj4gLQl3YWl0LT5mZW5jZSA9IGRtYV9mZW5jZV9nZXQocmN1 X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jb2JqLT5mZW5jZSwKPiAtCQkJCQkJCSAgICAgIGxv Y2tkZXBfaXNfaGVsZCgmc3luY29iai0+bG9jaykpKTsKPiAtCXdha2VfdXBfcHJvY2Vzcyh3YWl0 LT50YXNrKTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBzaWduZWQgbG9uZyBkcm1fc3luY29ial9hcnJh eV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCj4gICAJCQkJCQkg IHVpbnQzMl90IGNvdW50LAo+ICAgCQkJCQkJICB1aW50MzJfdCBmbGFncywKPiBAQCAtNjk4LDE0 ICsxMDIyLDExIEBAIHN0YXRpYyBzaWduZWQgbG9uZyBkcm1fc3luY29ial9hcnJheV93YWl0X3Rp bWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCj4gICAJc2lnbmFsZWRfY291bnQg PSAwOwo+ICAgCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cj4gICAJCWVudHJpZXNbaV0u dGFzayA9IGN1cnJlbnQ7Cj4gLQkJZW50cmllc1tpXS5mZW5jZSA9IGRybV9zeW5jb2JqX2ZlbmNl X2dldChzeW5jb2Jqc1tpXSk7Cj4gKwkJcmV0ID0gZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5 bmNvYmpzW2ldLCAwLCAwLAo+ICsJCQkJCSAgICAgICAmZW50cmllc1tpXS5mZW5jZSk7Cj4gICAJ CWlmICghZW50cmllc1tpXS5mZW5jZSkgewo+IC0JCQlpZiAoZmxhZ3MgJiBEUk1fU1lOQ09CSl9X QUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCkgewo+IC0JCQkJY29udGludWU7Cj4gLQkJCX0gZWxz ZSB7Cj4gLQkJCQlyZXQgPSAtRUlOVkFMOwo+IC0JCQkJZ290byBjbGVhbnVwX2VudHJpZXM7Cj4g LQkJCX0KPiArCQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJZ290byBjbGVhbnVwX2VudHJpZXM7Cj4g ICAJCX0KPiAgIAo+ICAgCQlpZiAoZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGVudHJpZXNbaV0uZmVu Y2UpKSB7Cj4gQEAgLTczMywxNSArMTA1NCw2IEBAIHN0YXRpYyBzaWduZWQgbG9uZyBkcm1fc3lu Y29ial9hcnJheV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCj4g ICAJICogZmFsbHRob3VnaCBhbmQgdHJ5IGEgMCB0aW1lb3V0IHdhaXQhCj4gICAJICovCj4gICAK PiAtCWlmIChmbGFncyAmIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUKSB7 Cj4gLQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKPiAtCQkJZHJtX3N5bmNvYmpfZmVu Y2VfZ2V0X29yX2FkZF9jYWxsYmFjayhzeW5jb2Jqc1tpXSwKPiAtCQkJCQkJCSAgICAgICZlbnRy aWVzW2ldLmZlbmNlLAo+IC0JCQkJCQkJICAgICAgJmVudHJpZXNbaV0uc3luY29ial9jYiwKPiAt CQkJCQkJCSAgICAgIHN5bmNvYmpfd2FpdF9zeW5jb2JqX2Z1bmMpOwo+IC0JCX0KPiAtCX0KPiAt Cj4gICAJZG8gewo+ICAgCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwo+ ICAgCj4gQEAgLTc4OSwxMyArMTEwMSwxMCBAQCBzdGF0aWMgc2lnbmVkIGxvbmcgZHJtX3N5bmNv YmpfYXJyYXlfd2FpdF90aW1lb3V0KHN0cnVjdCBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+ICAg Cj4gICBjbGVhbnVwX2VudHJpZXM6Cj4gICAJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK PiAtCQlpZiAoZW50cmllc1tpXS5zeW5jb2JqX2NiLmZ1bmMpCj4gLQkJCWRybV9zeW5jb2JqX3Jl bW92ZV9jYWxsYmFjayhzeW5jb2Jqc1tpXSwKPiAtCQkJCQkJICAgICZlbnRyaWVzW2ldLnN5bmNv YmpfY2IpOwo+ICsJCWRtYV9mZW5jZV9wdXQoZW50cmllc1tpXS5mZW5jZSk7Cj4gICAJCWlmIChl bnRyaWVzW2ldLmZlbmNlX2NiLmZ1bmMpCj4gICAJCQlkbWFfZmVuY2VfcmVtb3ZlX2NhbGxiYWNr KGVudHJpZXNbaV0uZmVuY2UsCj4gICAJCQkJCQkgICZlbnRyaWVzW2ldLmZlbmNlX2NiKTsKPiAt CQlkbWFfZmVuY2VfcHV0KGVudHJpZXNbaV0uZmVuY2UpOwo+ICAgCX0KPiAgIAlrZnJlZShlbnRy aWVzKTsKPiAgIAo+IEBAIC05NzAsMTIgKzEyNzksMjEgQEAgZHJtX3N5bmNvYmpfcmVzZXRfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAlpZiAocmV0IDwgMCkK PiAgIAkJcmV0dXJuIHJldDsKPiAgIAo+IC0JZm9yIChpID0gMDsgaSA8IGFyZ3MtPmNvdW50X2hh bmRsZXM7IGkrKykKPiAtCQlkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHN5bmNvYmpzW2ldLCAw LCBOVUxMKTsKPiAtCj4gKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y291bnRfaGFuZGxlczsgaSsr KSB7Cj4gKwkJaWYgKHN5bmNvYmpzW2ldLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJ TkUpIHsKPiArCQkJRFJNX0VSUk9SKCJ0aW1lbGluZSBzeW5jb2JqIGNhbm5vdCByZXNldCFcbiIp Owo+ICsJCQlyZXQgPSAtRUlOVkFMOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwkJZHJtX3N5 bmNvYmpfdGltZWxpbmVfZmluaShzeW5jb2Jqc1tpXSwKPiArCQkJCQkgICZzeW5jb2Jqc1tpXS0+ c3luY29ial90aW1lbGluZSk7Cj4gKwkJZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdChzeW5jb2Jq c1tpXSwKPiArCQkJCQkgICZzeW5jb2Jqc1tpXS0+c3luY29ial90aW1lbGluZSk7Cj4gKwl9Cj4g K291dDoKPiAgIAlkcm1fc3luY29ial9hcnJheV9mcmVlKHN5bmNvYmpzLCBhcmdzLT5jb3VudF9o YW5kbGVzKTsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4g ICBpbnQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1 ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gaW5k ZXggMGE4ZDJkNjRmMzgwLi41NzllOTFhNTg1OGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gQEAgLTIxMzcsNyArMjEzNyw5IEBAIGF3YWl0X2Zl bmNlX2FycmF5KHN0cnVjdCBpOTE1X2V4ZWNidWZmZXIgKmViLAo+ICAgCQlpZiAoIShmbGFncyAm IEk5MTVfRVhFQ19GRU5DRV9XQUlUKSkKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4gLQkJZmVuY2Ug PSBkcm1fc3luY29ial9mZW5jZV9nZXQoc3luY29iaik7Cj4gKwkJZHJtX3N5bmNvYmpfc2VhcmNo X2ZlbmNlKHN5bmNvYmosIDAsCj4gKwkJCQkJIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9G T1JfU1VCTUlULAo+ICsJCQkJCSAmZmVuY2UpOwo+ICAgCQlpZiAoIWZlbmNlKQo+ICAgCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3N5bmNvYmou aCBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPiBpbmRleCA0MjU0MzJiODVhODcuLjY1N2M5 N2RjMjVlYyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCj4gKysrIGIv aW5jbHVkZS9kcm0vZHJtX3N5bmNvYmouaAo+IEBAIC0zMCw2ICszMCwyNSBAQAo+ICAgCj4gICBz dHJ1Y3QgZHJtX3N5bmNvYmpfY2I7Cj4gICAKPiArZW51bSBkcm1fc3luY29ial90eXBlIHsKPiAr CURSTV9TWU5DT0JKX1RZUEVfTk9STUFMLAo+ICsJRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORQo+ ICt9Owo+ICsKPiArc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lIHsKPiArCXdhaXRfcXVldWVf aGVhZF90CXdxOwo+ICsJdTY0IHRpbWVsaW5lX2NvbnRleHQ7Cj4gKwkvKioKPiArCSAqIEB0aW1l bGluZTogc3luY29iaiB0aW1lbGluZQo+ICsJICovCj4gKwl1NjQgdGltZWxpbmU7Cj4gKwl1NjQg c2lnbmFsX3BvaW50Owo+ICsKPiArCj4gKwlzdHJ1Y3QgcmJfcm9vdCB3YWl0X3B0X3RyZWU7Cj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIHNpZ25hbF9wdF9saXN0Owo+ICt9Owo+ICsKPiAgIC8qKgo+ICAg ICogc3RydWN0IGRybV9zeW5jb2JqIC0gc3luYyBvYmplY3QuCj4gICAgKgo+IEBAIC00MSwxOSAr NjAsMTYgQEAgc3RydWN0IGRybV9zeW5jb2JqIHsKPiAgIAkgKi8KPiAgIAlzdHJ1Y3Qga3JlZiBy ZWZjb3VudDsKPiAgIAkvKioKPiAtCSAqIEBmZW5jZToKPiAtCSAqIE5VTEwgb3IgYSBwb2ludGVy IHRvIHRoZSBmZW5jZSBib3VuZCB0byB0aGlzIG9iamVjdC4KPiAtCSAqCj4gLQkgKiBUaGlzIGZp ZWxkIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gVXNlIGRybV9zeW5jb2JqX2ZlbmNlX2dl dCgpCj4gLQkgKiBhbmQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSgpIGluc3RlYWQuCj4gKwkg KiBAdHlwZTogaW5kaWNhdGUgc3luY29iaiB0eXBlCj4gICAJICovCj4gLQlzdHJ1Y3QgZG1hX2Zl bmNlIF9fcmN1ICpmZW5jZTsKPiArCWVudW0gZHJtX3N5bmNvYmpfdHlwZSB0eXBlOwo+ICAgCS8q Kgo+IC0JICogQGNiX2xpc3Q6IExpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiB0aGUgJmZl bmNlIGdldHMgcmVwbGFjZWQuCj4gKwkgKiBAc3luY29ial90aW1lbGluZTogdGltZWxpbmUKPiAg IAkgKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgY2JfbGlzdDsKPiArCXN0cnVjdCBkcm1fc3luY29i al90aW1lbGluZSBzeW5jb2JqX3RpbWVsaW5lOwo+ICsKPiAgIAkvKioKPiAtCSAqIEBsb2NrOiBQ cm90ZWN0cyAmY2JfbGlzdCBhbmQgd3JpdGUtbG9ja3MgJmZlbmNlLgo+ICsJICogQGxvY2s6IFBy b3RlY3RzIHRpbWVsaW5lIGxpc3QgYW5kIHdyaXRlLWxvY2tzICZmZW5jZS4KPiAgIAkgKi8KPiAg IAlzcGlubG9ja190IGxvY2s7Cj4gICAJLyoqCj4gQEAgLTYyLDI1ICs3OCw2IEBAIHN0cnVjdCBk cm1fc3luY29iaiB7Cj4gICAJc3RydWN0IGZpbGUgKmZpbGU7Cj4gICB9Owo+ICAgCj4gLXR5cGVk ZWYgdm9pZCAoKmRybV9zeW5jb2JqX2Z1bmNfdCkoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2Jq LAo+IC0JCQkJICAgc3RydWN0IGRybV9zeW5jb2JqX2NiICpjYik7Cj4gLQo+IC0vKioKPiAtICog c3RydWN0IGRybV9zeW5jb2JqX2NiIC0gY2FsbGJhY2sgZm9yIGRybV9zeW5jb2JqX2FkZF9jYWxs YmFjawo+IC0gKiBAbm9kZTogdXNlZCBieSBkcm1fc3luY29iX2FkZF9jYWxsYmFjayB0byBhcHBl bmQgdGhpcyBzdHJ1Y3QgdG8KPiAtICoJICAmZHJtX3N5bmNvYmouY2JfbGlzdAo+IC0gKiBAZnVu YzogZHJtX3N5bmNvYmpfZnVuY190IHRvIGNhbGwKPiAtICoKPiAtICogVGhpcyBzdHJ1Y3Qgd2ls bCBiZSBpbml0aWFsaXplZCBieSBkcm1fc3luY29ial9hZGRfY2FsbGJhY2ssIGFkZGl0aW9uYWwK PiAtICogZGF0YSBjYW4gYmUgcGFzc2VkIGFsb25nIGJ5IGVtYmVkZGluZyBkcm1fc3luY29ial9j YiBpbiBhbm90aGVyIHN0cnVjdC4KPiAtICogVGhlIGNhbGxiYWNrIHdpbGwgZ2V0IGNhbGxlZCB0 aGUgbmV4dCB0aW1lIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UgaXMKPiAtICogY2FsbGVkLgo+ IC0gKi8KPiAtc3RydWN0IGRybV9zeW5jb2JqX2NiIHsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbm9k ZTsKPiAtCWRybV9zeW5jb2JqX2Z1bmNfdCBmdW5jOwo+IC19Owo+IC0KPiAgIHZvaWQgZHJtX3N5 bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gICAKPiAgIC8qKgo+IEBAIC0xMDYsMjkg KzEwMyw2IEBAIGRybV9zeW5jb2JqX3B1dChzdHJ1Y3QgZHJtX3N5bmNvYmogKm9iaikKPiAgIAlr cmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX3N5bmNvYmpfZnJlZSk7Cj4gICB9Cj4gICAKPiAt LyoqCj4gLSAqIGRybV9zeW5jb2JqX2ZlbmNlX2dldCAtIGdldCBhIHJlZmVyZW5jZSB0byBhIGZl bmNlIGluIGEgc3luYyBvYmplY3QKPiAtICogQHN5bmNvYmo6IHN5bmMgb2JqZWN0Lgo+IC0gKgo+ IC0gKiBUaGlzIGFjcXVpcmVzIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvICZkcm1fc3luY29iai5m ZW5jZSBjb250YWluZWQgaW4gQG9iaiwKPiAtICogaWYgbm90IE5VTEwuIEl0IGlzIGlsbGVnYWwg dG8gY2FsbCB0aGlzIHdpdGhvdXQgYWxyZWFkeSBob2xkaW5nIGEgcmVmZXJlbmNlLgo+IC0gKiBO byBsb2NrcyByZXF1aXJlZC4KPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogRWl0aGVyIHRoZSBm ZW5jZSBvZiBAb2JqIG9yIE5VTEwgaWYgdGhlcmUncyBub25lLgo+IC0gKi8KPiAtc3RhdGljIGlu bGluZSBzdHJ1Y3QgZG1hX2ZlbmNlICoKPiAtZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN0cnVjdCBk cm1fc3luY29iaiAqc3luY29iaikKPiAtewo+IC0Jc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4g LQo+IC0JcmN1X3JlYWRfbG9jaygpOwo+IC0JZmVuY2UgPSBkbWFfZmVuY2VfZ2V0X3JjdV9zYWZl KCZzeW5jb2JqLT5mZW5jZSk7Cj4gLQlyY3VfcmVhZF91bmxvY2soKTsKPiAtCj4gLQlyZXR1cm4g ZmVuY2U7Cj4gLX0KPiAtCj4gICBzdHJ1Y3QgZHJtX3N5bmNvYmogKmRybV9zeW5jb2JqX2ZpbmQo c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4gICAJCQkJICAgICB1MzIgaGFuZGxlKTsK PiAgIHZvaWQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5 bmNvYmosIHU2NCBwb2ludCwKPiBAQCAtMTQyLDUgKzExNiw3IEBAIGludCBkcm1fc3luY29ial9j cmVhdGUoc3RydWN0IGRybV9zeW5jb2JqICoqb3V0X3N5bmNvYmosIHVpbnQzMl90IGZsYWdzLAo+ ICAgaW50IGRybV9zeW5jb2JqX2dldF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZh dGUsCj4gICAJCQkgICBzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHUzMiAqaGFuZGxlKTsK PiAgIGludCBkcm1fc3luY29ial9nZXRfZmQoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCBp bnQgKnBfZmQpOwo+ICtpbnQgZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN0cnVjdCBkcm1fc3lu Y29iaiAqc3luY29iaiwgdTY0IHBvaW50LAo+ICsJCQkgICAgIHU2NCBmbGFncywgc3RydWN0IGRt YV9mZW5jZSAqKmZlbmNlKTsKPiAgIAo+ICAgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv dWFwaS9kcm0vZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCj4gaW5kZXggMzAwZjMzNjYz M2YyLi5jZWJkYjI1NDFlYjcgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaAo+ ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPiBAQCAtNzE3LDYgKzcxNyw3IEBAIHN0cnVj dCBkcm1fcHJpbWVfaGFuZGxlIHsKPiAgIHN0cnVjdCBkcm1fc3luY29ial9jcmVhdGUgewo+ICAg CV9fdTMyIGhhbmRsZTsKPiAgICNkZWZpbmUgRFJNX1NZTkNPQkpfQ1JFQVRFX1NJR05BTEVEICgx IDw8IDApCj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfVElNRUxJTkUgKDEgPDwg MSkKPiAgIAlfX3UzMiBmbGFnczsKPiAgIH07Cj4gICAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vYW1kLWdmeAo=