From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/5] drm/dp_mst: Start tracking per-port VCPI allocations Date: Wed, 7 Nov 2018 21:59:30 +0100 Message-ID: <20181107205930.GY21967@phenom.ffwll.local> References: <20181107012116.17332-1-lyude@redhat.com> <20181107012116.17332-3-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id C2ACA6E4CC for ; Wed, 7 Nov 2018 20:59:34 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id w19-v6so14610428eds.1 for ; Wed, 07 Nov 2018 12:59:34 -0800 (PST) Content-Disposition: inline In-Reply-To: <20181107012116.17332-3-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lyude Paul Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBOb3YgMDYsIDIwMTggYXQgMDg6MjE6MTRQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25nIHRpbWUg aW4KPiBkcm1fZHBfbXN0X3RvcG9sb2d5LmM6Cj4gCj4gCS8qIFdlIGNhbm5vdCByZWx5IG9uIHBv cnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+IAkgKiB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUgcGFyZW50Cj4gCSAqIGJyYW5j aCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcK PiAJICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUgaW5zdGVhZCBvZgo+IAkgKiBkZXBlbmRpbmcgb24gdGhlIGNhbGxlciB0byB0ZWxsIHVzIGhv dyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gCSAqLwo+IAo+IFRoYXQncyBub3QgdGhlIG9ubHkg cmVhc29uIHdlIHNob3VsZCBmaXggdGhpczogZm9yY2luZyB0aGUgZHJpdmVyIHRvCj4gdHJhY2sg dGhlIFZDUEkgYWxsb2NhdGlvbnMgdGhyb3VnaG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlz Cj4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBi ZSB0YWtlbiB3aXRoIHRoZQo+IG9yZGVyIHRoYXQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMoKSBhbmQKPiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIGFyZSBjYWxsZWQg aW4gaW4gb3JkZXIgdG8gZW5zdXJlCj4gaWRlbXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBk cml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhlc2UgaGVscGVycywKPiBpOTE1LCBkb2Vzbid0IGV2ZW4g ZG8gdGhpcyBjb3JyZWN0bHk6IG11bHRpcGxlIC0+YmVzdF9lbmNvZGVyKCkgY2hlY2tzCj4gd2l0 aCBpOTE1J3MgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBub3QgYmUgaWRlbXBvdGVudCBh bmQgd291bGQKPiBvdmVyLWFsbG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQg dHJ5aW5nIHRvIGltcGxlbWVudAo+IGZhbGxiYWNrIHJldHJhaW5pbmcgaW4gTVNULgo+IAo+IFNv OiBzaW1wbGlmeSB0aGlzIHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRf dmNwaV9zbG90cygpCj4gYW5kIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgdG8g dHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgZm9yCj4gZWFjaCBwb3J0LiBUaGlzIGFsbG93cyB1 cyB0byBlbnN1cmUgaWRlbXBvdGVuY3kgd2l0aG91dCBoYXZpbmcgdG8gcmVseQo+IG9uIHRoZSBk cml2ZXIgYXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBk byBhbnkKPiBraW5kIG9mIFZDUEkgc2xvdCB0cmFja2luZyBhbnltb3JlIGlmIGl0IGRvZXNuJ3Qg bmVlZCBpdCBmb3IgaXQncyBvd24KPiBpbnRlcm5hbCBzdGF0ZS4KPiAKPiBBZGRpdGlvbmFsbHk7 IHRoaXMgYWRkcyBhIG5ldyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIGhlbHBlciB3aGljaAo+ IG11c3QgYmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNr cyBmb3IgdGhlIG5ldwo+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJyZWQgYnkgYSBzdGF0ZS4KPiAK PiBBbHNvOiB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3Vz IHRoYXQgdGhlc2UKPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21pYyBkcml2ZXJzIHN1 cHBvcnRpbmcgTVNULgo+IAo+IENoYW5nZXMgc2luY2UgdjI6Cj4gIC0gVXNlIGttZW1kdXAoKSBm b3IgZHVwbGljYXRpbmcgTVNUIHN0YXRlIC0gZGFudmV0Cj4gIC0gTW92ZSBwb3J0IHZhbGlkYXRp b24gb3V0IG9mIGR1cGxpY2F0ZSBzdGF0ZSBjYWxsYmFjayAtIGRhbnZldAo+ICAtIEhhbmRsZSBs b29waW5nIHRocm91Z2ggTVNUIHRvcG9sb2d5IHN0YXRlcyBpbgo+ICAgIGRybV9kcF9tc3RfYXRv bWljX2NoZWNrKCkgc28gdGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgdG8gZG8gaXQKPiAgLSBGaXgg ZG9jdW1lbnRhdGlvbiBpbiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gIC0gTW92 ZSB0aGUgYXRvbWljIGNoZWNrIGZvciBlYWNoIGluZGl2aWR1YWwgdG9wb2xvZ3kgc3RhdGUgaW50 byBpdCdzCj4gICAgb3duIGZ1bmN0aW9uLCByZWR1Y2VzIGluZGVudGluZwo+ICAtIERvbid0IGNv bnNpZGVyICJzdGFsZSIgTVNUIHBvcnRzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJhbmR3aWR0aAo+ ICAgIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBvcmlnaW5hbGx5IHdlIHJl bGllZCBvbiB0aGUKPiAgICBzdGF0ZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgdG8gcHJ1bmUgYW55 IHN0YWxlIHBvcnRzIGZyb20gdGhlIG5ldwo+ICAgIHN0YXRlLCB3aGljaCB3b3VsZCBwcmV2ZW50 IHVzIGZyb20gaW5jb3JyZWN0bHkgY29uc2lkZXJpbmcgdGhlaXIKPiAgICBiYW5kd2lkdGggcmVx dWlyZW1lbnRzIGFsb25nc2lkZSBsZWdpdGltYXRlIG5ldyBwYXlsb2Fkcy4KPiAgLSBBZGQgZnVu Y3Rpb24gcmVmZXJlbmNlcyBpbiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0g ZGFudmV0Cj4gIC0gQW5ub3RhdGUgYXRvbWljIFZDUEkgYW5kIGF0b21pYyBjaGVjayBmdW5jdGlv bnMgd2l0aCBfX211c3RfY2hlY2sKPiAgICAtIGRhbnZldAo+IAo+IENoYW5nZXMgc2luY2UgdjE6 Cj4gIC0gRG9uJ3QgdXNlIHRoZSBub3ctcmVtb3ZlZCAtPmF0b21pY19jaGVjaygpIGZvciBwcml2 YXRlIG9iamVjdHMgaG9vaywKPiAgICBqdXN0IGdpdmUgZHJpdmVycyBhIGZ1bmN0aW9uIHRvIGNh bGwgdGhlbXNlbHZlcwo+IAo+IFNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhh dC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgfCAyMjIgKysrKysrKysr KysrKysrKysrKysrKy0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j ICB8ICAgNCArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jICAgfCAgMzEg KystLQo+ICBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDIzICsrLQo+ ICA0IGZpbGVzIGNoYW5nZWQsIDIyNSBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiBpbmRleCA4YzNjZmFjNDM3ZjQu Ljc0ODIzYWZiMjYyZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90 b3BvbG9neS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ IEBAIC0yNjE0LDIxICsyNjE0LDM0IEBAIHN0YXRpYyBpbnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgfQo+ICAKPiAgLyoqCj4gLSAqIGRy bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgdmNwaSBzbG90cyB0 byB0aGUgc3RhdGUKPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQg YW5kIGFkZCBWQ1BJIHNsb3RzIHRvIHRoZSBzdGF0ZQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUKPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4g ICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKPiAgICogQHBibjogYmFuZHdp ZHRoIHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQQk4KPiAgICoKPiAtICogUkVUVVJOUzoKPiAt ICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0 IG9yIGVycm9yCj4gKyAqIEFsbG9jYXRlcyBWQ1BJIHNsb3RzIHRvIEBwb3J0LCByZXBsYWNpbmcg YW55IHByZXZpb3VzIFZDUEkgYWxsb2NhdGlvbnMgaXQKPiArICogbWF5IGhhdmUgaGFkLiBBbnkg YXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24K PiArICogaW4gdGhlaXIgJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBj YWxsYmFjayB0byBjaGFuZ2UgdGhlCj4gKyAqIGN1cnJlbnQgVkNQSSBhbGxvY2F0aW9uIGZvciB0 aGUgbmV3IHN0YXRlLiBUaGUgYWxsb2NhdGlvbnMgYXJlIG5vdCBjaGVja2VkCj4gKyAqIGFnYWlu c3QgdGhlIGJhbmR3aWR0aCByZXN0cmFpbnRzIG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBjYWxs cwo+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzoK PiArICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ICsgKiBkcm1fZHBfbXN0 X2F0b21pY19jaGVjaygpCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRvdGFsIHNsb3RzIGlu IHRoZSBhdG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9ydCwgb3IgYSBuZWdhdGl2ZSBl cnJvcgo+ICsgKiBjb2RlIGlmIHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiAgICovCj4gIGlu dCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJ CQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKQo+ICB7Cj4gIAlzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gLQlpbnQgcmVx X3Nsb3RzOwo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGkgPSBO VUxMOwo+ICsJaW50IHByZXZfc2xvdHMsIHJlcV9zbG90cywgcmV0Owo+ICAKPiAgCXRvcG9sb2d5 X3N0YXRlID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ ICAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gQEAgLTI2MzcsMjAgKzI2NTAsNDEgQEAg aW50IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiAgCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBv cnQpOwo+ICAJaWYgKHBvcnQgPT0gTlVMTCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAtCXJlcV9z bG90cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gLQlEUk1fREVCVUdfS01T KCJ2Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gLQkJCXJlcV9zbG90cywgdG9wb2xv Z3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiAgCj4gLQlpZiAocmVxX3Nsb3RzID4gdG9wb2xvZ3lf c3RhdGUtPmF2YWlsX3Nsb3RzKSB7Cj4gLQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+IC0JCXJl dHVybiAtRU5PU1BDOwo+ICsJLyogRmluZCB0aGUgY3VycmVudCBhbGxvY2F0aW9uIGZvciB0aGlz IHBvcnQsIGlmIGFueSAqLwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9z dGF0ZS0+dmNwaXMsIG5leHQpIHsKPiArCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKPiArCQkJ dmNwaSA9IHBvczsKPiArCQkJcHJldl9zbG90cyA9IHZjcGktPnZjcGk7Cj4gKwkJCWJyZWFrOwo+ ICsJCX0KPiAgCX0KPiArCWlmICghdmNwaSkKPiArCQlwcmV2X3Nsb3RzID0gMDsKPiArCj4gKwly ZXFfc2xvdHMgPSBESVZfUk9VTkRfVVAocGJuLCBtZ3ItPnBibl9kaXYpOwo+ICAKPiAtCXRvcG9s b2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7Cj4gLQlEUk1fREVCVUdfS01TKCJ2 Y3BpIHNsb3RzIGF2YWlsPSVkIiwgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiArCURS TV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gdmNwaSAlZCAtPiAl ZFxuIiwKPiArCQkgICAgICBwb3J0LT5jb25uZWN0b3ItPmJhc2UuaWQsIHBvcnQtPmNvbm5lY3Rv ci0+bmFtZSwgcG9ydCwKPiArCQkgICAgICBwcmV2X3Nsb3RzLCByZXFfc2xvdHMpOwo+ICAKPiAr CS8qIEFkZCB0aGUgbmV3IGFsbG9jYXRpb24gdG8gdGhlIHN0YXRlICovCj4gKwlpZiAoIXZjcGkp IHsKPiArCQl2Y3BpID0ga3phbGxvYyhzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiArCQlp ZiAoIXZjcGkpIHsKPiArCQkJcmV0ID0gLUVOT01FTTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ ICsKPiArCQl2Y3BpLT5wb3J0ID0gcG9ydDsKPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnRv cG9sb2d5X3N0YXRlLT52Y3Bpcyk7Cj4gKwl9Cj4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ ICsKPiArCXJldCA9IHJlcV9zbG90czsKPiArb3V0Ogo+ICAJZHJtX2RwX3B1dF9wb3J0KHBvcnQp Owo+IC0JcmV0dXJuIHJlcV9zbG90czsKPiArCXJldHVybiByZXQ7Cj4gIH0KPiAgRVhQT1JUX1NZ TUJPTChkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyk7Cj4gIAo+IEBAIC0yNjU4LDMyICsy NjkyLDUwIEBAIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ ICAgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gUmVsZWFzZSBhbGxvY2F0 ZWQgdmNwaSBzbG90cwo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKPiAgICogQG1n cjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4gLSAqIEBzbG90czogbnVtYmVy IG9mIHZjcGkgc2xvdHMgdG8gcmVsZWFzZQo+ICsgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFz ZSB0aGUgVkNQSSBzbG90cyBmcm9tCj4gICAqCj4gLSAqIFJFVFVSTlM6Cj4gLSAqIDAgaWYgQHNs b3RzIHdlcmUgYWRkZWQgYmFjayB0byAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMgb3IKPiAtICogbmVnYXRpdmUgZXJyb3IgY29kZQo+ICsgKiBSZWxlYXNlcyBhbnkgVkNQ SSBzbG90cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluIHRoZSBhdG9taWMK PiArICogc3RhdGUuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNh bGwgdGhpcyBmdW5jdGlvbiBpbgo+ICsgKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVu Y3MuYXRvbWljX2NoZWNrKCkgY2FsbGJhY2sgd2hlbiB0aGUKPiArICogY29ubmVjdG9yIHdpbGwg bm8gbG9uZ2VyIGhhdmUgVkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMgd2Fz Cj4gKyAqIHJlbW92ZWQpLgo+ICsgKgo+ICsgKiBJdCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBp ZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSwgaW4KPiArICogd2hpY2gg Y2FzZSBpdCB3aWxsIGp1c3QgYW1vdW50IHRvIGEgbm8tb3AuCj4gKyAqCj4gKyAqIFNlZSBhbHNv Ogo+ICsgKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gKyAqIGRybV9kcF9tc3Rf YXRvbWljX2NoZWNrKCkKPiArICoKPiArICogUmV0dXJuczoKPiArICogMCBpZiBhbGwgc2xvdHMg Zm9yIHRoaXMgcG9ydCB3ZXJlIGFkZGVkIGJhY2sgdG8KPiArICogJmRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGUuYXZhaWxfc2xvdHMgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQo+ICAgKi8KPiAgaW50 IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKPiAgCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3Is Cj4gLQkJCQkgICAgIGludCBzbG90cykKPiArCQkJCSAgICAgc3RydWN0IGRybV9kcF9tc3RfcG9y dCAqcG9ydCkKPiAgewo+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9s b2d5X3N0YXRlOwo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnRtcCwgKnBvczsK PiAgCj4gIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0 ZShzdGF0ZSwgbWdyKTsKPiAgCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQo+ICAJCXJldHVy biBQVFJfRVJSKHRvcG9sb2d5X3N0YXRlKTsKPiAgCj4gLQkvKiBXZSBjYW5ub3QgcmVseSBvbiBw b3J0LT52Y3BpLm51bV9zbG90cyB0byB1cGRhdGUKPiAtCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFp bF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKPiAtCSAqIGJy YW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tp bmcKPiAtCSAqIHBlci1wb3J0IHNsb3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlIGluc3RlYWQgb2YKPiAtCSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwg dXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KPiAtCSAqLwo+IC0JdG9wb2xvZ3lfc3RhdGUt PmF2YWlsX3Nsb3RzICs9IHNsb3RzOwo+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyByZWxl YXNlZD0lZCwgYXZhaWw9JWRcbiIsCj4gLQkJCXNsb3RzLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxf c2xvdHMpOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCAmdG9wb2xvZ3lf c3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJaWYgKHBvcy0+cG9ydCA9PSBwb3J0KSB7Cj4gKwkJ CWxpc3RfZGVsKCZwb3MtPm5leHQpOwo+ICsJCQlEUk1fREVCVUdfS01TKCJbTVNUIFBPUlQ6JXBd IHZjcGkgJWQgLT4gMFxuIiwKPiArCQkJCSAgICAgIHBvcnQsIHBvcy0+dmNwaSk7Cj4gIAo+ICsJ CQlrZnJlZShwb3MpOwo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogSWYg bm8gYWxsb2NhdGlvbiB3YXMgZm91bmQsIGFsbCB0aGF0IG1lYW5zIGlzIHRoYXQgdGhlIHBvcnQg d2FzCj4gKwkgKiBkZXN0cm95ZWQgc2luY2UgdGhlIGxhc3QgYXRvbWljIGNvbW1pdC4gVGhhdCdz IE9LIQo+ICsJICovCgpUaGlzIGNhc2UgaGVyZSBoYXMgbWUgYSBiaXQgd29ycmllZC4gSSB0aG91 Z2h0IHdpdGggeW91ciBjaGFuZ2VzIHdlJ2xsCmFsd2F5cyBoYXZlIHRoZSBwb3J0IHBvaW50ZXIg c3RpbGwgYXJvdW5kLCB0byBiZSBhYmxlIHRvIGNsZWFuIHRoaW5ncyB1cApwcm9wZXJseS4gSWYg dGhpcyBpcyBub3QgdGhlIGNhc2UgdGhlbiB3ZSdkIHBvdGVudGlhbGx5IGxlYWsgdGhlIHZjcGkK YWxsb2NhdGlvbiBmb3IgYW4gdW5wbHVnZ2VkIHBvcnQuCgpPdG9oIGlmIHRoZSBkcml2ZXIgcmVs ZWFzZXMgdGhlIGFsbG9jYXRpb24gZm9yIGEgcG9ydCB0d2ljZSBpdCdzIHByb2JhYmx5Cm1peGVk IHVwIGl0J3Mgb3duIGJvb2sta2VlcGluZy4gV2Ugc2hvdWxkIFdBUk4gYWJvdXQgdGhhdCBjYXNl LgoKVGhpcyBpcyBraW5kYSBmYWxsb3V0IGZyb20geW91ciBjaGFuZ2UgdG8gbm90IHBydW5lIGFs bG9jYXRpb25zIG9uCmR1cGxpY2F0ZSwgYW5kIEkgdGhpbmsgd2lsbCBmdXJ0aGVyIGNsZWFuIHVw IGhvdyB0aGlzIGlzIGhhbmRsZWQuCgpTbyB3aXRoIHRoZSBjb21tZW50IHJlbW92ZWQgYW5kIHJl cGxhY2VkIGJ5IGEgV0FSTklORygxLCJubyB2Y3BpCmFsbG9jYXRpb24gZm91bmQgZm9yIHBvcnQg JXBcbiIsIHBvcnQpIG9yIHNvbWV0aGluZyBsaWtlIHRoYXQgdGhpcyBzaG91bGQKYmUgc29saWQu CgoKPiAgCXJldHVybiAwOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMpOwo+IEBAIC0zMTEyLDE1ICszMTY0LDM0IEBAIHN0YXRpYyB2b2lkIGRy bV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAg c3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqCj4gIGRybV9kcF9tc3RfZHVwbGljYXRl X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKPiAgewo+IC0Jc3RydWN0IGRybV9k cF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlOwo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfc3RhdGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KPiArCQl0b19kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUob2JqLT5zdGF0ZSk7Cj4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAq dmNwaTsKPiAgCj4gLQlzdGF0ZSA9IGttZW1kdXAob2JqLT5zdGF0ZSwgc2l6ZW9mKCpzdGF0ZSks IEdGUF9LRVJORUwpOwo+ICsJc3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwgc2l6ZW9mKCpzdGF0 ZSksIEdGUF9LRVJORUwpOwo+ICAJaWYgKCFzdGF0ZSkKPiAgCQlyZXR1cm4gTlVMTDsKPiAgCj4g IAlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZz dGF0ZS0+YmFzZSk7Cj4gIAo+ICsJSU5JVF9MSVNUX0hFQUQoJnN0YXRlLT52Y3Bpcyk7Cj4gKwo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZvbGRfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4g KwkJdmNwaSA9IGttZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiArCQlp ZiAoIXZjcGkpCj4gKwkJCWdvdG8gZmFpbF9hbGxvYzsKPiArCj4gKwkJbGlzdF9hZGQoJnZjcGkt Pm5leHQsICZzdGF0ZS0+dmNwaXMpOwo+ICsJfQo+ICsKPiAgCXJldHVybiAmc3RhdGUtPmJhc2U7 Cj4gKwo+ICtmYWlsX2FsbG9jOgo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdmNw aSwgJnN0YXRlLT52Y3BpcywgbmV4dCkKPiArCQlrZnJlZShwb3MpOwo+ICsJa2ZyZWUoc3RhdGUp Owo+ICsKPiArCXJldHVybiBOVUxMOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBkcm1fZHBfbXN0 X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAo+IEBAIC0zMTI4LDE0 ICszMTk5LDk5IEBAIHN0YXRpYyB2b2lkIGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3Qg ZHJtX3ByaXZhdGVfb2JqICpvYmosCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlICptc3Rfc3RhdGUgPQo+ICAJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSk7 Cj4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdG1wOwo+ICsKPiArCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQp Cj4gKwkJa2ZyZWUocG9zKTsKPiAgCj4gIAlrZnJlZShtc3Rfc3RhdGUpOwo+ICB9Cj4gIAo+IC1z dGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIG1zdF9zdGF0ZV9mdW5j cyA9IHsKPiArc3RhdGljIGlubGluZSBpbnQKPiArZHJtX2RwX21zdF9hdG9taWNfY2hlY2tfdG9w b2xvZ3lfc3RhdGUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJCQkg ICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnZjcGk7Cj4gKwlzdHJ1Y3QgZHJtX2Rw X21zdF9wb3J0ICpwb3J0Owo+ICsJaW50IGF2YWlsX3Nsb3RzID0gNjMsIHJldDsKPiArCj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZtc3Rfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJ LyogUG9ydHMgdGhhdCBubyBsb25nZXIgZXhpc3Qgc2hvdWxkbid0IGJlIGNvdW50ZWQgdG93YXJk cyB0aGUKPiArCQkgKiBiYW5kd2lkdGggcmVxdWlyZW1lbnRzIGZvciB0aGUgc3RhdGUsIHNvIHNr aXAgdGhlbQo+ICsJCSAqLwoKU2NlbmFyaW86Ci0gMiBtc3Qgc2lua3Mgb24gYSBzaW5nbGUgaG9z dCBzaWRlIHBvcnQuCi0gMXN0IGNvbm5lY3RvciBpcyBhY3RpdmUsIDJuZCBjb25uZWN0b3IgaXMg b2ZmLgotIDFzdCBjb25uZWN0b3IgaXMgaG90LXVucGx1Z2dlZCwgYnV0IHVzZXJzcGFjZSBoYXNu J3QgcmVhbGl6ZWQgdGhpcyB5ZXQsCiAgc28gbm90IHlldCBjb21lIGFyb3VuZCB0byBkbyB0aGUg ZGlzYWJsaW5nIG1vZGVzZXQuCi0gQXQgdGhlIHNhbWUgdGltZSB1c2Vyc3BhY2UgZGVjaWRlcyB0 byBlbmFibGUgdGhlIDJuZCBvdXRwdXQsIHdoaWNoCiAgZm9yY2VzIGEgbW9kZXNldCBhbmQgcHVs bHMgdGhlIHRvcG9sb2d5IHN0YXRlIGluLgotIFRoaXMgZnVuY3Rpb24gaGVyZSBkZWNpZGVzIHRv IG9ubHkgbG9vayBhdCB0aGUgdmNwaSBhbGxvY2F0aW9uIGZvciB0aGUKICAybmQgY29ubmVjdG9y IGJlY2F1c2UgdGhlIGZpcnN0IG9uZSBpcyBnb25lIGFscmVhZHkuCi0gVW5mb3J0dW5hdGVseSBs aWdodGluZyB1cCBib3RoIGNvbm5lY3RvcnMgYXQgdGhlIHNhbWUgdGltZSBpc24ndAogIHBvc3Np YmxlLCBiZWNhdXNlIHRvbyBtYW55IHZjcGkuIEJ1dCBzaW5jZSB1c2Vyc3BhY2UgZGlkbid0IGFz ayBmb3IgYQogIG1vZGVzZXQgb24gdGhlIG5vdyB1bnBsdWdnZWQgZmlyc3QgY29ubmVjdG9yLgot PiBNb2Rlc2V0IGdvZXMgYm9vbSBiZWNhdXNlIHdlIGVuYWJsZSB0b28gbWFueSB2Y3BpLgoKQnV0 IHdpdGggdGhlIGNoYW5nZSBpbiBob3cgd2UgcmVsZWFzZSB2Y3BpIGFsbG9jYXRpb25zIHRoZXJl J3Mgbm8gbmVlZCB0bwppZ25vcmUgZGlzY29ubmVjdGVkIHN0dWZmIGhlcmUsIGFuZCB3ZSBzaG91 bGQgYmUgYWJsZSB0byBjaGVjayB2Y3BpIGxpbWl0cwpieSBqdXN0IGNoZWNraW5nIGFsbCBvZiB0 aGVtLgoKSSBkaWRuJ3Qgc2VlIGFueXRoaW5nIGVsc2Ugc2VyaW91cywgc28gd2l0aCB0aGUgYWJv dmUgdHdvIHRoaW5ncyByZXNvbHZlZAp0aGlzIGhhcyBteSBSZXZpZXdlZC1ieTogRGFuaWVsIFZl dHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KCk9uZSBiaWtlc2hlZCBiZWxvdywgYmVjYXVz ZSBJIG5lZWQgdG8gcHJvdmUgSSBzY3JvbGxlZCB0byB0aGUgZW5kIDotKQoKPiArCQlwb3J0ID0g ZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCB2Y3BpLT5wb3J0KTsKPiArCQlpZiAo IXBvcnQpIHsKPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBpcyBzdGFsZSwg c2tpcHBpbmcgY2hlY2tzXG4iLAo+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiArCQkJY29udGludWU7 Cj4gKwkJfQo+ICsKPiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlcXVpcmVz ICVkIHZjcGkgc2xvdHNcbiIsCj4gKwkJCQkgdmNwaS0+cG9ydCwgdmNwaS0+dmNwaSk7Cj4gKwo+ ICsJCWF2YWlsX3Nsb3RzIC09IHZjcGktPnZjcGk7Cj4gKwkJaWYgKGF2YWlsX3Nsb3RzIDwgMCkg ewo+ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIG5vdCBlbm91Z2ggdmNwaSBz bG90cyBpbiBtc3Rfc3RhdGUgJXAgKGF2YWlsPSVkKVxuIiwKPiArCQkJCQkgdmNwaS0+cG9ydCwg bXN0X3N0YXRlLAo+ICsJCQkJCSBhdmFpbF9zbG90cyArIHZjcGktPnZjcGkpOwo+ICsJCQlyZXQg PSAtRU5PU1BDOwo+ICsJCQlnb3RvIHBvcnRfZmFpbDsKPiArCQl9Cj4gKwo+ICsJCWRybV9kcF9w dXRfcG9ydChwb3J0KTsKPiArCX0KPiArCURSTV9ERUJVR19BVE9NSUMoIltNU1QgTUdSOiVwXSBt c3Rfc3RhdGUgJXAgdmNwaSBhdmFpbD0lZCB1c2VkPSVkXG4iLAo+ICsJCQkgbWdyLCBtc3Rfc3Rh dGUsIGF2YWlsX3Nsb3RzLAo+ICsJCQkgNjMgLSBhdmFpbF9zbG90cyk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK3BvcnRfZmFpbDoKPiArCWRybV9kcF9wdXRfcG9ydChwb3J0KTsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjayAtIENoZWNr IHRoYXQgdGhlIG5ldyBzdGF0ZSBvZiBhbiBNU1QgdG9wb2xvZ3kgaW4gYW4KPiArICogYXRvbWlj IHVwZGF0ZSBpcyB2YWxpZAo+ICsgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5ldyAmc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUKPiArICoKPiArICogQ2hlY2tzIHRoZSBnaXZlbiB0 b3BvbG9neSBzdGF0ZSBmb3IgYW4gYXRvbWljIHVwZGF0ZSB0byBlbnN1cmUgdGhhdCBpdCdzCj4g KyAqIHZhbGlkLiBUaGlzIGluY2x1ZGVzIGNoZWNraW5nIHdoZXRoZXIgdGhlcmUncyBlbm91Z2gg YmFuZHdpZHRoIHRvIHN1cHBvcnQKPiArICogdGhlIG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRo ZSBhdG9taWMgdXBkYXRlLgo+ICsgKgo+ICsgKiBBbnkgYXRvbWljIGRyaXZlcnMgc3VwcG9ydGlu ZyBEUCBNU1QgbXVzdCBtYWtlIHN1cmUgdG8gY2FsbCB0aGlzIGFmdGVyCj4gKyAqIGNoZWNraW5n IHRoZSByZXN0IG9mIHRoZWlyIHN0YXRlIGluIHRoZWlyCj4gKyAqICZkcm1fbW9kZV9jb25maWdf ZnVuY3MuYXRvbWljX2NoZWNrKCkgY2FsbGJhY2suCj4gKyAqCj4gKyAqIFNlZSBhbHNvOgo+ICsg KiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpCj4gKyAqIGRybV9kcF9hdG9taWNfcmVs ZWFzZV92Y3BpX3Nsb3RzKCkKPiArICoKPiArICogUmV0dXJuczoKPiArICoKPiArICogMCBpZiB0 aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiAr ICovCj4gK2ludCBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZTsKPiArCWludCBp LCByZXQgPSAwOwo+ICsKPiArCWZvcl9lYWNoX25ld19tc3RfbWdyX2luX3N0YXRlKHN0YXRlLCBt Z3IsIG1zdF9zdGF0ZSwgaSkgewo+ICsJCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrX3Rv cG9sb2d5X3N0YXRlKG1nciwgbXN0X3N0YXRlKTsKPiArCQlpZiAocmV0KQo+ICsJCQlicmVhazsK PiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RwX21z dF9hdG9taWNfY2hlY2spOwo+ICsKPiArY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1 bmNzIGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MgPSB7Cj4gIAkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlLAo+ICAJLmF0b21pY19kZXN0 cm95X3N0YXRlID0gZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlLAo+ICB9Owo+ICtFWFBPUlRfU1lN Qk9MKGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MpOwo+ICAKPiAgLyoqCj4gICAqIGRy bV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZTogZ2V0IE1TVCB0b3BvbG9neSBzdGF0ZQo+ IEBAIC0zMjEzLDEzICszMzY5LDExIEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0 KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCXJldHVybiAtRU5PTUVN Owo+ICAKPiAgCW1zdF9zdGF0ZS0+bWdyID0gbWdyOwo+IC0KPiAtCS8qIG1heC4gdGltZSBzbG90 cyAtIG9uZSBzbG90IGZvciBNVFAgaGVhZGVyICovCj4gLQltc3Rfc3RhdGUtPmF2YWlsX3Nsb3Rz ID0gNjM7Cj4gKwlJTklUX0xJU1RfSEVBRCgmbXN0X3N0YXRlLT52Y3Bpcyk7Cj4gIAo+ICAJZHJt X2F0b21pY19wcml2YXRlX29ial9pbml0KCZtZ3ItPmJhc2UsCj4gIAkJCQkgICAgJm1zdF9zdGF0 ZS0+YmFzZSwKPiAtCQkJCSAgICAmbXN0X3N0YXRlX2Z1bmNzKTsKPiArCQkJCSAgICAmZHJtX2Rw X21zdF90b3BvbG9neV9zdGF0ZV9mdW5jcyk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggYmJmOGNhMjFhN2EyLi44NzQ5Y2Y2 MWE2YWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTEyNTUz LDYgKzEyNTUzLDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gIAkJCQkgICAgICAgIlttb2Rlc2V0XSIgOiAiW2Zhc3RzZXRdIik7Cj4g IAl9Cj4gIAo+ICsJcmV0ID0gZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RhdGUpOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0OwoKQ29tcGxldGUgYmlrZXNoZWQsIHNvIGZlZWwgZnJlZSB0 byBpZ25vcmU6IEknZCBzdHVmZiB0aGlzIGludG8KaW50ZWxfbW9kZXNldF9jaGVja3MoKS4gRmVl bCBmcmVlIHRvIGlnbm9yZS4KCkNoZWVycywgRGFuaWVsCgo+ICsKPiAgCWlmIChhbnlfbXMpIHsK PiAgCQlyZXQgPSBpbnRlbF9tb2Rlc2V0X2NoZWNrcyhzdGF0ZSk7Cj4gIAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwX21zdC5jCj4gaW5kZXggOGI3MWQ2NGViZDlkLi5hYWY5MDQ3MzhiNzggMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+IEBAIC0xMTQsMjggKzExNCwzMSBA QCBzdGF0aWMgaW50IGludGVsX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9z dGF0ZTsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqb2xkX2NydGM7Cj4gIAlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlpbnQgc2xvdHMsIHJldCA9IDA7Cj4gKwlzdHJ1Y3QgaW50 ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IgPQo+ICsJCXRvX2ludGVsX2Nvbm5lY3Rvcihj b25uZWN0b3IpOwo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPQo+ICsJ CSZpbnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0LT5tc3RfbWdyOwo+ICsJc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydCA9IGludGVsX2Nvbm5lY3Rvci0+cG9ydDsKPiArCWludCByZXQgPSAwOwo+ ICAKPiAgCW9sZF9jb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0 ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiAgCW9sZF9jcnRjID0gb2xkX2Nvbm5fc3RhdGUtPmNydGM7 Cj4gIAlpZiAoIW9sZF9jcnRjKQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JY3J0Y19zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBvbGRfY3J0Yyk7Cj4gLQlzbG90 cyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiAtCWlmIChk cm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90cyA+IDApIHsK PiAtCQlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiAtCQlzdHJ1Y3QgZHJt X2VuY29kZXIgKm9sZF9lbmNvZGVyOwo+ICsJLyogRnJlZSBWQ1BJLCBzaW5jZSBjb21wdXRlX2Nv bmZpZygpIHdvbid0IGJlIHJ1biAqLwo+ICsJaWYgKCFuZXdfY29ubl9zdGF0ZS0+Y3J0Yykgewo+ ICsJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgb2xk X2NydGMpOwo+ICAKPiAtCQlvbGRfZW5jb2RlciA9IG9sZF9jb25uX3N0YXRlLT5iZXN0X2VuY29k ZXI7Cj4gLQkJbWdyID0gJmVuY190b19tc3Qob2xkX2VuY29kZXIpLT5wcmltYXJ5LT5kcC5tc3Rf bWdyOwo+IC0KPiAtCQlyZXQgPSBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdGF0 ZSwgbWdyLCBzbG90cyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVk IHJlbGVhc2luZyAlZCB2Y3BpIHNsb3RzOiVkXG4iLCBzbG90cywgcmV0KTsKPiAtCQllbHNlCj4g LQkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gKwkJ cmV0ID0gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgcG9ydCk7 Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5nIHZj cGkgc2xvdHM6ICVkXG4iLAo+ICsJCQkJICAgICAgcmV0KTsKPiArCQkJcmV0dXJuIHJldDsKPiAr CQl9Cj4gKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsK PiAgCX0KPiArCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2RybS9kcm1fZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIu aAo+IGluZGV4IDNmYWNlYjY2ZjVjYi4uMDhiNjc5NDhiOGY5IDEwMDY0NAo+IC0tLSBhL2luY2x1 ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0 X2hlbHBlci5oCj4gQEAgLTQwNiw5ICs0MDYsMTUgQEAgc3RydWN0IGRybV9kcF9wYXlsb2FkIHsK PiAgCj4gICNkZWZpbmUgdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4 LCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKPiAgCj4gK3N0cnVjdCBk cm1fZHBfdmNwaV9hbGxvY2F0aW9uIHsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7 Cj4gKwlpbnQgdmNwaTsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbmV4dDsKPiArfTsKPiArCj4gIHN0 cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIHsKPiAgCXN0cnVjdCBkcm1fcHJpdmF0ZV9z dGF0ZSBiYXNlOwo+IC0JaW50IGF2YWlsX3Nsb3RzOwo+ICsJc3RydWN0IGxpc3RfaGVhZCB2Y3Bp czsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ICB9Owo+ICAKPiBA QCAtNjE5LDE0ICs2MjUsMTcgQEAgdm9pZCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zdXNwZW5k KHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyKTsKPiAgaW50IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyX3Jlc3VtZShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7 Cj4gIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpkcm1fYXRvbWljX2dldF9tc3Rf dG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICAJCQkJCQkJ CSAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncik7Cj4gLWludCBkcm1fZHBf YXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCj4g LQkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+IC0JCQkJICBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKTsKPiAtaW50IGRybV9kcF9hdG9taWNf cmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKPiAtCQkJ CSAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gLQkJCQkgICAgIGlu dCBzbG90cyk7Cj4gK2ludCBfX211c3RfY2hlY2sKPiArZHJtX2RwX2F0b21pY19maW5kX3ZjcGlf c2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ICsJCQkgICAgICBzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiArCQkJICAgICAgc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydCwgaW50IHBibik7Cj4gK2ludCBfX211c3RfY2hlY2sKPiArZHJtX2RwX2F0 b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ ICsJCQkJIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICsJCQkJIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpOwo+ICBpbnQgZHJtX2RwX3NlbmRfcG93ZXJfdXBkb3du X3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgCQkJCSBzdHJ1Y3Qg ZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBib29sIHBvd2VyX3VwKTsKPiAraW50IF9fbXVzdF9jaGVj ayBkcm1fZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Owo+ICAKPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlX2Z1bmNzOwo+ICAKPiAtLSAKPiAyLjE5LjEKPiAKCi0tIApE YW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8v YmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK