From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH v2 2/4] drm/dp_mst: Start tracking per-port VCPI allocations Date: Mon, 29 Oct 2018 12:43:02 -0400 Message-ID: <0d0a30da8ff2a6d4aaa2156c0f140daa2a0f8c07.camel@redhat.com> References: <20181026203549.1796-1-lyude@redhat.com> <20181026203549.1796-3-lyude@redhat.com> <20181029142429.GB21967@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181029142429.GB21967@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCAyMDE4LTEwLTI5IGF0IDE1OjI0ICswMTAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+ IE9uIEZyaSwgT2N0IDI2LCAyMDE4IGF0IDA0OjM1OjQ3UE0gLTA0MDAsIEx5dWRlIFBhdWwgd3Jv dGU6Cj4gPiBUaGVyZSBoYXMgYmVlbiBhIFRPRE8gd2FpdGluZyBmb3IgcXVpdGUgYSBsb25nIHRp bWUgaW4KPiA+IGRybV9kcF9tc3RfdG9wb2xvZ3kuYzoKPiA+IAo+ID4gCS8qIFdlIGNhbm5vdCBy ZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4gCSAqIHRvcG9sb2d5X3N0 YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQK PiA+IAkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVk IGJ5IHRyYWNraW5nCj4gPiAJICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4gCSAqIGRlcGVuZGluZyBvbiB0aGUgY2Fs bGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KPiA+IAkgKi8KPiA+IAo+ ID4gVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlzOiBmb3JjaW5n IHRoZSBkcml2ZXIgdG8KPiA+IHRyYWNrIHRoZSBWQ1BJIGFsbG9jYXRpb25zIHRocm91Z2hvdXQg YSBzdGF0ZSdzIGF0b21pYyBjaGVjayBpcwo+ID4gZXJyb3IgcHJvbmUsIGJlY2F1c2UgaXQgbWVh bnMgdGhhdCBleHRyYSBjYXJlIGhhcyB0byBiZSB0YWtlbiB3aXRoIHRoZQo+ID4gb3JkZXIgdGhh dCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZAo+ID4gZHJtX2RwX2F0b21pY19y ZWxlYXNlX3ZjcGlfc2xvdHMoKSBhcmUgY2FsbGVkIGluIGluIG9yZGVyIHRvIGVuc3VyZQo+ID4g aWRlbXBvdGVuY3kuIEN1cnJlbnRseSB0aGUgb25seSBkcml2ZXIgYWN0dWFsbHkgdXNpbmcgdGhl c2UgaGVscGVycywKPiA+IGk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVs dGlwbGUgLT5iZXN0X2VuY29kZXIoKSBjaGVja3MKPiA+IHdpdGggaTkxNSdzIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gd291bGQgbm90IGJlIGlkZW1wb3RlbnQgYW5kIHdvdWxkCj4gPiBvdmVyLWFs bG9jYXRlIFZDUEkgc2xvdHMsIHNvbWV0aGluZyBJIGxlYXJuZWQgdHJ5aW5nIHRvIGltcGxlbWVu dAo+ID4gZmFsbGJhY2sgcmV0cmFpbmluZyBpbiBNU1QuCj4gPiAKPiA+IFNvOiBzaW1wbGlmeSB0 aGlzIHdob2xlIG1lc3MsIGFuZCB0ZWFjaCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygp Cj4gPiBhbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSB0byB0cmFjayB0aGUg VkNQSSBhbGxvY2F0aW9ucyBmb3IKPiA+IGVhY2ggcG9ydC4gVGhpcyBhbGxvd3MgdXMgdG8gZW5z dXJlIGlkZW1wb3RlbmN5IHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkKPiA+IG9uIHRoZSBkcml2ZXIg YXMgbXVjaC4gQWRkaXRpb25hbGx5OiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnkK PiA+IGtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24ndCBuZWVk IGl0IGZvciBpdCdzIG93bgo+ID4gaW50ZXJuYWwgc3RhdGUuCj4gPiAKPiA+IEFkZGl0aW9uYWxs eTsgdGhpcyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNo Cj4gPiBtdXN0IGJlIHVzZWQgYnkgYXRvbWljIGRyaXZlcnMgdG8gcGVyZm9ybSB2YWxpZGl0eSBj aGVja3MgZm9yIHRoZSBuZXcKPiA+IFZDUEkgYWxsb2NhdGlvbnMgaW5jdXJyZWQgYnkgYSBzdGF0 ZS4KPiA+IAo+ID4gQWxzbzogdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBtYWtlIGl0IG1v cmUgb2J2aW91cyB0aGF0IHRoZXNlCj4gPiAvbXVzdC8gYmUgY2FsbGVkIGJ5IC9hbGwvIGF0b21p YyBkcml2ZXJzIHN1cHBvcnRpbmcgTVNULgo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ID4g IC0gRG9uJ3QgdXNlIHRoZSBub3ctcmVtb3ZlZCAtPmF0b21pY19jaGVjaygpIGZvciBwcml2YXRl IG9iamVjdHMgaG9vaywKPiA+ICAgIGp1c3QgZ2l2ZSBkcml2ZXJzIGEgZnVuY3Rpb24gdG8gY2Fs bCB0aGVtc2VsdmVzCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJl ZGhhdC5jb20+Cj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4K PiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgfCAxOTAg KysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgIHwgICA4ICsrCj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bXN0LmMgICB8ICAzMSArKystLQo+ID4gIGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgg ICAgICAgfCAgMTEgKy0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDE5MiBpbnNlcnRpb25zKCspLCA0 OCBkZWxldGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZHBfbXN0X3RvcG9sb2d5LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xv Z3kuYwo+ID4gaW5kZXggOGMzY2ZhYzQzN2Y0Li5kY2ZhYjc1MzY5MTQgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCj4gPiBAQCAtMjYxNCwyMSArMjYxNCwzMyBA QCBzdGF0aWMgaW50IGRybV9kcF9pbml0X3ZjcGkoc3RydWN0Cj4gPiBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyLAo+ID4gIH0KPiA+ICAKPiA+ICAvKioKPiA+IC0gKiBkcm1fZHBfYXRvbWlj X2ZpbmRfdmNwaV9zbG90cygpIC0gRmluZCBhbmQgYWRkIHZjcGkgc2xvdHMgdG8gdGhlIHN0YXRl Cj4gPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQgYW5kIGFkZCBW Q1BJIHNsb3RzIHRvIHRoZSBzdGF0ZQo+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0 ZQo+ID4gICAqIEBtZ3I6IE1TVCB0b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAo+ID4gICAq IEBwb3J0OiBwb3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKPiA+ICAgKiBAcGJuOiBiYW5kd2lk dGggcmVxdWlyZWQgZm9yIHRoZSBtb2RlIGluIFBCTgo+ID4gICAqCj4gPiArICogQWxsb2NhdGVz IFZDUEkgc2xvdHMgdG8gQHBvcnQsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgVkNQSSBhbGxvY2F0 aW9ucwo+ID4gaXQKPiA+ICsgKiBtYXkgaGF2ZSBoYWQuIEFueSBhdG9taWMgZHJpdmVycyB3aGlj aCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwgdGhpcwo+ID4gZnVuY3Rpb24KPiA+ICsgKiBpbiB0aGVp ciBhdG9taWNfY2hlY2soKSBoYW5kbGVycyB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgVkNQSSBhbGxv Y2F0aW9uCj4gPiBmb3IKPiAKPiBNYXliZSBkbyBhIG5pY2Uga2VybmVsZG9jIHJlZmVyZW5jZSB0 byB0aGUgcmlnaHQgYXRvbWljX2NoZWNrIGhlcmUuCj4gCj4gPiArICogdGhlIG5ldyBzdGF0ZS4g QWZ0ZXIgdGhlIC0+YXRvbWljX2NoZWNrKCkgaG9va3Mgb2YgdGhlIGRyaXZlciBhbmQgYWxsCj4g PiBvdGhlcgo+IAo+IFRoaXMgd2lsbCB1cHNldCB0aGUga2VybmVsZG9jIHBhcnNlciBJIHRoaW5r Lgo+IAo+ID4gKyAqIG1vZGUgb2JqZWN0cyBpbiB0aGUgc3RhdGUgaGF2ZSBiZWVuIGNhbGxlZCwg RFJNIHdpbGwgY2hlY2sgdGhlIGZpbmFsCj4gPiBWQ1BJCj4gPiArICogYWxsb2NhdGlvbnMgdG8g ZW5zdXJlIHRoYXQgdGhleSB3aWxsIGZpdCBpbnRvIHRoZSBhdmFpbGFibGUgYmFuZHdpZHRoCj4g PiBvbgo+ID4gKyAqIHRoZSB0b3BvbG9neS4KPiA+ICsgKgo+ID4gKyAqIFNlZSBhbHNvOiBkcm1f ZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4gCj4gQWxzbyBuZWVkIHRvIHJlZmVyZW5j ZSBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpIGhlcmUgYW5kIHRoYXQgZHJpdmVycwo+IG11c3Qg Y2FsbCBpdCBvciBub3RoaW5nIGhhcHBlbnMuCj4gPiArICoKPiA+ICAgKiBSRVRVUk5TOgo+ID4g LSAqIFRvdGFsIHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9y dCBvciBlcnJvcgo+ID4gKyAqIFRvdGFsIHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNzaWdu ZWQgZm9yIHRoaXMgcG9ydCwgb3IgYSBuZWdhdGl2ZQo+ID4gZXJyb3IKPiA+ICsgKiBjb2RlIGlm IHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiA+ICAgKi8KPiA+ICBpbnQgZHJtX2RwX2F0b21p Y19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJ CQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gIAkJCQkgIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gPiAtCWludCByZXFfc2xv dHM7Cj4gPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3MsICp2Y3BpID0gTlVM TDsKPiA+ICsJaW50IHByZXZfc2xvdHMsIHJlcV9zbG90cywgcmV0Owo+ID4gIAo+ID4gIAl0b3Bv bG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdGF0ZSwgbWdy KTsKPiA+ICAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gPiBAQCAtMjYzNywyMCArMjY0 OSw0MSBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0Cj4gPiBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSwKPiA+ICAJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3Bv cnRfcmVmKG1nciwgcG9ydCk7Cj4gPiAgCWlmIChwb3J0ID09IE5VTEwpCj4gPiAgCQlyZXR1cm4g LUVJTlZBTDsKPiA+IC0JcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5fZGl2 KTsKPiA+IC0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyByZXE9JWQsIGF2YWlsPSVkXG4iLAo+ ID4gLQkJCXJlcV9zbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiA+ICAKPiA+ IC0JaWYgKHJlcV9zbG90cyA+IHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cykgewo+ID4gLQkJ ZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gLQkJcmV0dXJuIC1FTk9TUEM7Cj4gPiArCS8qIEZp bmQgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbiBmb3IgdGhpcyBwb3J0LCBpZiBhbnkgKi8KPiA+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsK PiA+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gKwkJCXZjcGkgPSBwb3M7Cj4gPiAr CQkJcHJldl9zbG90cyA9IHZjcGktPnZjcGk7Cj4gPiArCQkJYnJlYWs7Cj4gPiArCQl9Cj4gPiAg CX0KPiA+ICsJaWYgKCF2Y3BpKQo+ID4gKwkJcHJldl9zbG90cyA9IDA7Cj4gCj4gRm9yIHJvYnVz dG5lc3Mgc2hvdWxkIHdlIHdhcm4gaGVyZSwgc2luY2UgZHJpdmVycyBmb3JnZXR0aW5nIHRvIHJl bGVhc2UKPiB2Y3BpIHNsb3RzIGlzIGtpbmRhIGEgYnVnPyBPciBkbyB3ZSBuZWVkIHRvIGhhdmUg dGhpcyB0byBtYWtlIGxpZmUgZWFzaWVyCj4gZm9yIGRyaXZlciB3cml0ZXJzPwpMYXR0ZXItbWFp bmx5IGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gd2Ug YWRkIHN0dWZmCmxpa2UgZmFsbGJhY2sgcmV0cmFpbmluZywgYmVjYXVzZSB0aGVuIGlmIHdlIHJ1 biBpbnRvIGEgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvCnJlY2FsY3VsYXRlIHRoZSBtb2RlIGZvciBh IHBpcGUgbW9yZSB0aGVuIG9uY2Ugd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBldmVyeQpkcml2 ZXIgaXMgYWN0dWFsbHkgdHJhY2tpbmcgd2hhdCBWQ1BJIHNsb3RzIGl0IHJlcXVlc3RlZCwgdGhl biBhbHNvIG1ha2Ugc3VyZQp0aGF0IGV2ZXJ5IGRyaXZlciBpcyBtaW5kZnVsIHRvIHJlbGVhc2Ug dGhvc2UgVkNQSSBzbG90cyBvbiBzdWJzZXF1ZW50IGF0b21pYwpjaGVja3MuIElNTywgaXQnZCBi ZSByZWR1bmRhbnQgYm9va2tlZXBpbmcuCj4gCj4gPiArCj4gPiArCXJlcV9zbG90cyA9IERJVl9S T1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gPiArCj4gPiArCURSTV9ERUJVR19LTVMoIltD T05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDolcF0gdmNwaSAlZCAtPiAlZFxuIiwKPiA+ICsJCSAg ICAgIHBvcnQtPmNvbm5lY3Rvci0+YmFzZS5pZCwgcG9ydC0+Y29ubmVjdG9yLT5uYW1lLCBwb3J0 LAo+ID4gKwkJICAgICAgcHJldl9zbG90cywgcmVxX3Nsb3RzKTsKPiA+ICsKPiA+ICsJLyogQWRk IHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3RhdGUgKi8KPiA+ICsJaWYgKCF2Y3BpKSB7Cj4g PiArCQl2Y3BpID0ga3phbGxvYyhzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiA+ICsJCWlm ICghdmNwaSkgewo+ID4gKwkJCXJldCA9IC1FTk9NRU07Cj4gPiArCQkJZ290byBvdXQ7Cj4gPiAr CQl9Cj4gPiAgCj4gPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAtPSByZXFfc2xvdHM7 Cj4gPiAtCURSTV9ERUJVR19LTVMoInZjcGkgc2xvdHMgYXZhaWw9JWQiLCB0b3BvbG9neV9zdGF0 ZS0+YXZhaWxfc2xvdHMpOwo+ID4gKwkJdmNwaS0+cG9ydCA9IHBvcnQ7Cj4gPiArCQlsaXN0X2Fk ZCgmdmNwaS0+bmV4dCwgJnRvcG9sb2d5X3N0YXRlLT52Y3Bpcyk7Cj4gPiArCX0KPiA+ICsJdmNw aS0+dmNwaSA9IHJlcV9zbG90czsKPiA+ICAKPiA+ICsJcmV0ID0gcmVxX3Nsb3RzOwo+ID4gK291 dDoKPiA+ICAJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gLQlyZXR1cm4gcmVxX3Nsb3RzOwo+ ID4gKwlyZXR1cm4gcmV0Owo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdG9taWNf ZmluZF92Y3BpX3Nsb3RzKTsKPiA+ICAKPiA+IEBAIC0yNjU4LDMyICsyNjkxLDQ2IEBAIEVYUE9S VF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ID4gICAqIGRybV9kcF9h dG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkgLSBSZWxlYXNlIGFsbG9jYXRlZCB2Y3BpIHNsb3Rz Cj4gPiAgICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlCj4gPiAgICogQG1ncjogTVNUIHRv cG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4gPiAtICogQHNsb3RzOiBudW1iZXIgb2YgdmNw aSBzbG90cyB0byByZWxlYXNlCj4gPiArICoKPiA+ICsgKiBSZWxlYXNlcyBhbnkgVkNQSSBzbG90 cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluIHRoZQo+ID4gYXRvbWljCj4g PiArICogc3RhdGUuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNh bGwgdGhpcyBmdW5jdGlvbiBpbgo+ID4gKyAqIHRoZWlyIGNvbm5lY3RvcidzIGF0b21pY19jaGVj aygpIGhhbmRsZXIgd2hlbiB0aGUgY29ubmVjdG9yIHdpbGwgbm8KPiA+IGxvbmdlcgo+ID4gKyAq IGhhdmUgVkNQSSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMgd2FzIHJlbW92ZWQp Lgo+ID4gKyAqCj4gPiArICogSXQgaXMgT0sgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgQHBvcnQgaGFz IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0sCj4gPiBpbgo+ID4gKyAqIHdoaWNoIGNhc2Ug aXQgd2lsbCBqdXN0IGFtb3VudCB0byBhIG5vLW9wLgo+ID4gKyAqCj4gPiArICogU2VlIGFsc286 IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkKPiAKPiBTYW1lIGNvbW1lbnRzIGFzIHdp dGggdGhlIF9maW5kX3ZjcGlfc2xvdHMoKSBmdW5jdGlvbi4KPiAKPiA+ICAgKgo+ID4gICAqIFJF VFVSTlM6Cj4gPiAtICogMCBpZiBAc2xvdHMgd2VyZSBhZGRlZCBiYWNrIHRvICZkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyAKPiA+IG9yCj4gPiAtICogbmVnYXRpdmUgZXJy b3IgY29kZQo+ID4gKyAqIDAgaWYgYWxsIHNsb3RzIGZvciB0aGlzIHBvcnQgd2VyZSBhZGRlZCBi YWNrIHRvCj4gPiArICogJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzIG9y IG5lZ2F0aXZlIGVycm9yIGNvZGUKPiA+ICAgKi8KPiA+ICBpbnQgZHJtX2RwX2F0b21pY19yZWxl YXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkg ICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ID4gLQkJCQkgICAgIGlu dCBzbG90cykKPiA+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KQo+ID4g IHsKPiA+ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5X3N0YXRl Owo+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqdG1wLCAqcG9zOwo+ID4gIAo+ ID4gIAl0b3BvbG9neV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShz dGF0ZSwgbWdyKTsKPiA+ICAJaWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gPiAgCQlyZXR1 cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4gPiAgCj4gPiAtCS8qIFdlIGNhbm5vdCByZWx5 IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQo+ID4gLQkgKiB0b3BvbG9neV9zdGF0 ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0aGUgcGFyZW50Cj4g PiAtCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVucGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQg YnkgdHJhY2tpbmcKPiA+IC0JICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgo+ID4gLQkgKiBkZXBlbmRpbmcgb24gdGhlIGNh bGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gPiAtCSAqLwo+ID4g LQl0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgKz0gc2xvdHM7Cj4gPiAtCURSTV9ERUJVR19L TVMoInZjcGkgc2xvdHMgcmVsZWFzZWQ9JWQsIGF2YWlsPSVkXG4iLAo+ID4gLQkJCXNsb3RzLCB0 b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocG9zLCB0bXAsICZ0b3BvbG9neV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ICsJCWlmIChw b3MtPnBvcnQgPT0gcG9ydCkgewo+ID4gKwkJCWxpc3RfZGVsKCZwb3MtPm5leHQpOwo+ID4gKwkJ CURSTV9ERUJVR19LTVMoIltNU1QgUE9SVDolcF0gdmNwaSAlZCAtPiAwXG4iLAo+ID4gKwkJCQkg ICAgICBwb3J0LCBwb3MtPnZjcGkpOwo+ID4gIAo+ID4gKwkJCWtmcmVlKHBvcyk7Cj4gPiArCQkJ cmV0dXJuIDA7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogSWYgbm8gYWxsb2NhdGlv biB3YXMgZm91bmQsIGFsbCB0aGF0IG1lYW5zIGlzIHRoYXQgdGhlIHBvcnQgd2FzCj4gPiArCSAq IGRlc3Ryb3llZCBzaW5jZSB0aGUgbGFzdCBhdG9taWMgY29tbWl0LiBUaGF0J3MgT0shCj4gPiAr CSAqLwo+ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRv bWljX3JlbGVhc2VfdmNwaV9zbG90cyk7Cj4gPiBAQCAtMzExMiwxNSArMzE1OSw1MCBAQCBzdGF0 aWMgdm9pZCBkcm1fZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3QKPiA+IHdvcmtfc3Ry dWN0ICp3b3JrKQo+ID4gIHN0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgo+ID4gIGRy bV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKPiA+ ICB7Cj4gPiAtCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsKPiA+ICsJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlLCAqb2xkX3N0YXRlID0KPiA+ ICsJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShvYmotPnN0YXRlKTsKPiA+ICsJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IgPSBvbGRfc3RhdGUtPm1ncjsKPiA+ICsJc3RydWN0 IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRp b24gKnBvcywgKnZjcGk7Cj4gPiAgCj4gPiAtCXN0YXRlID0ga21lbWR1cChvYmotPnN0YXRlLCBz aXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCXN0YXRlID0ga3phbGxvYyhzaXplb2Yo KnN0YXRlKSwgR0ZQX0tFUk5FTCk7Cj4gPiAgCWlmICghc3RhdGUpCj4gPiAgCQlyZXR1cm4gTlVM TDsKPiA+ICAKPiA+ICAJX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVf c3RhdGUob2JqLCAmc3RhdGUtPmJhc2UpOwo+ID4gIAo+ID4gKwlzdGF0ZS0+bWdyID0gbWdyOwo+ ID4gKwlJTklUX0xJU1RfSEVBRCgmc3RhdGUtPnZjcGlzKTsKPiA+ICsKPiA+ICsJLyogQ29weSBv dmVyIHRoZSBWQ1BJIGFsbG9jYXRpb25zIGZvciBwb3J0cyB0aGF0IHN0aWxsIGV4aXN0ICovCj4g PiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmb2xkX3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ ID4gKwkJcG9ydCA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX3BvcnRfcmVmKG1nciwgcG9zLT5wb3J0 KTsKPiA+ICsJCWlmICghcG9ydCkgewo+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9S VDolcF0gaXMgZ29uZSwgdmNwaSAlZCAtPgo+ID4gMFxuIiwKPiA+ICsJCQkJCSBwb3MtPnBvcnQs IHBvcy0+dmNwaSk7Cj4gPiArCQkJY29udGludWU7Cj4gPiArCQl9Cj4gCj4gSG0sIGluIGdlbmVy YWwgd2UgaGF2ZSAwIHZhbGlkYXRpb24gaW4gdGhlIGR1cGxpY2F0ZV9zdGF0ZSBmdW5jdGlvbnMs IEp1c3QKPiBkdW1wIGNvcHlpbmcsIHdpdGggbWluaW1hbCBwb2ludGVyL3JlZmNvdW50IHVwZGF0 ZXMuCj4gPiArCj4gPiArCQl2Y3BpID0ga3phbGxvYyhzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVM KTsKPiAKPiBrbWVtZHVtcCArIHVwZGF0aW5nIHRoZSBsaXN0LiBKdXN0IGluIGNhc2Ugd2UgZXZl ciBhZGQgbW9yZSBzdHVmZiBoZXJlLgo+IFByb2JhYmx5IG5lZWRzIGFuIGV4cGxpY2l0IG1lbXNl dCB0byBhdm9pZCBsaXN0IGRlYnVnZ2luZy4KPiAKPiBBdCBsZWFzdCB0aGF0J3MgdGhlIHN0eWxl IHdlIHVzZSBldmVyeXdoZXJlIGVsc2UuCj4gCj4gPiArCQlpZiAoIXZjcGkpIHsKPiA+ICsJCQlk cm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gPiArCQkJZ290byBmYWlsX2FsbG9jOwo+ID4gKwkJfQo+ ID4gKwo+ID4gKwkJdmNwaS0+cG9ydCA9IHBvcnQ7Cj4gPiArCQl2Y3BpLT52Y3BpID0gcG9zLT52 Y3BpOwo+ID4gKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZzdGF0ZS0+dmNwaXMpOwo+ID4gKwkJ ZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+ID4gKwl9Cj4gPiArCj4gPiAgCXJldHVybiAmc3RhdGUt PmJhc2U7Cj4gPiArCj4gPiArZmFpbF9hbGxvYzoKPiA+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9z YWZlKHBvcywgdmNwaSwgJnN0YXRlLT52Y3BpcywgbmV4dCkKPiA+ICsJCWtmcmVlKHBvcyk7Cj4g PiArCWtmcmVlKHN0YXRlKTsKPiA+ICsKPiA+ICsJcmV0dXJuIE5VTEw7Cj4gPiAgfQo+ID4gIAo+ ID4gIHN0YXRpYyB2b2lkIGRybV9kcF9tc3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZh dGVfb2JqICpvYmosCj4gPiBAQCAtMzEyOCwxNCArMzIxMCw2MCBAQCBzdGF0aWMgdm9pZCBkcm1f ZHBfbXN0X2Rlc3Ryb3lfc3RhdGUoc3RydWN0Cj4gPiBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKPiA+ ICB7Cj4gPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUgPQo+ ID4gIAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlKTsKPiA+ICsJc3RydWN0IGRybV9k cF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnRtcDsKPiA+ICsKPiAKPiBXQVJOX09OKCFsaXN0X2Vt cHR5KCkpOwo+IAo+IEkgdGhpbmsgdGhpcyBub3QgYmVpbmcgZW1wdHkgb24gbWdyIHRlYXJkb3du IHdvdWxkIGJlIGEgZHJpdmVyIGJ1Zy4gQWxsCj4gdGhlIHBvcnRzL2JyYW5jaCBkZXZpY2VzIHNo b3VsZCBiZSBnb25lIGJ5IG5vdywgYW5kIGFsc28gYWxsIHRoZSBtb2Rlc2V0Cj4gc3RhdGUgc2hv dWxkIGhhdmUgYmVlbiB0b3JuIGRvd24sIHVzaW5nIGRybV9hdG9taWNfaGVscGVyX3NodXRkb3du KCkgb3IKPiBmcmllbmRzLgo+IAo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0 bXAsICZtc3Rfc3RhdGUtPnZjcGlzLCBuZXh0KQo+ID4gKwkJa2ZyZWUocG9zKTsKPiA+ICAKPiA+ ICAJa2ZyZWUobXN0X3N0YXRlKTsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBtc3Rfc3RhdGVfZnVuY3MgPSB7Cj4gPiArLyoqCj4g PiArICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUg b2YgYW4gTVNUIHRvcG9sb2d5Cj4gPiBpbiBhbgo+ID4gKyAqIGF0b21pYyB1cGRhdGUgaXMgdmFs aWQKPiA+ICsgKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIG5ldyAmc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUKPiA+ICsgKgo+ID4gKyAqIENoZWNrcyB0aGUgZ2l2ZW4gdG9wb2xvZ3kg c3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUgdG8gZW5zdXJlIHRoYXQKPiA+IGl0J3MKPiA+ICsg KiB2YWxpZC4gVGhpcyBpbmNsdWRlcyBjaGVja2luZyB3aGV0aGVyIHRoZXJlJ3MgZW5vdWdoIGJh bmR3aWR0aCB0bwo+ID4gc3VwcG9ydAo+ID4gKyAqIHRoZSBuZXcgVkNQSSBhbGxvY2F0aW9ucyBp biB0aGUgYXRvbWljIHVwZGF0ZS4KPiA+ICsgKgo+ID4gKyAqIEFueSBhdG9taWMgZHJpdmVycyBz dXBwb3J0aW5nIERQIE1TVCBtdXN0IG1ha2Ugc3VyZSB0byBjYWxsIHRoaXMgYWZ0ZXIKPiA+ICsg KiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBzdGF0ZSBpbiB0aGVpciAtPmF0b21pY19jaGVj aygpIGNhbGxiYWNrLgo+IAo+ICZkcm1fbW9kZV9jb25maWdfZnVuY3MuYXRvbWljX2NoZWNrCj4g Cj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4gKyAqCj4gPiArICogMCBpZiB0aGUgbmV3IHN0 YXRlIGlzIHZhbGlkLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ ICtpbnQgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUgKnN0YXRlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IgPSBzdGF0ZS0+bWdyOwo+ID4gKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAq cG9zOwo+ID4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2MzsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFj aF9lbnRyeShwb3MsICZzdGF0ZS0+dmNwaXMsIG5leHQpIHsKPiA+ICsJCURSTV9ERUJVR19BVE9N SUMoIltNU1QgUE9SVDolcF0gcmVxdWlyZXMgJWQgdmNwaSBzbG90c1xuIiwKPiA+ICsJCQkJIHBv cy0+cG9ydCwgcG9zLT52Y3BpKTsKPiA+ICsKPiA+ICsJCWF2YWlsX3Nsb3RzIC09IHBvcy0+dmNw aTsKPiA+ICsJCWlmIChhdmFpbF9zbG90cyA8IDApIHsKPiA+ICsJCQlEUk1fREVCVUdfQVRPTUlD KCJbTVNUIFBPUlQ6JXBdIG5vdCBlbm91Z2ggdmNwaSBzbG90cwo+ID4gaW4gc3RhdGUgJXAgKGF2 YWlsPSVkKVxuIiwKPiA+ICsJCQkJCSBwb3MtPnBvcnQsIHN0YXRlLAo+ID4gKwkJCQkJIGF2YWls X3Nsb3RzICsgcG9zLT52Y3BpKTsKPiA+ICsJCQlyZXR1cm4gLUVOT1NQQzsKPiA+ICsJCX0KPiA+ ICsJfQo+ID4gKwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgdmNwaSBh dmFpbD0lZCB1c2VkPSVkXG4iLAo+ID4gKwkJCSBtZ3IsIHN0YXRlLCBhdmFpbF9zbG90cywgNjMg LSBhdmFpbF9zbG90cyk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICtFWFBPUlRf U1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKTsKPiAKPiBDb21tZW50ZWQgb24gcGF0Y2gg NCBhbHJlYWR5LCBidXQgSSB0aGluayB0aGlzIHdvdWxkIGxvb2sgYSBiaXQgc2ltcGxlciBpZgo+ IHdlIChhbHNvL2luc3RlYWQsIHVwIHRvIHlvdSByZWFsbHkpIGV4cG9zZSBhIGhlbHBlciB0aGF0 IGNoZWNrcyBhbGwgbWdyIGluCj4gYSBkcm1fYXRvbWljX3N0YXRlLiBObyBuZWVkIHRvIGhhdmUg dGhlIGV4YWN0IHNhbWUgbG9vcCBpbiBlYWNoIGRyaXZlci4KPiAKPiA+ICsKPiA+ICtjb25zdCBz dHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9m dW5jcyA9IHsKPiA+ICAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fZHBfbXN0X2R1cGxp Y2F0ZV9zdGF0ZSwKPiA+ICAJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2RwX21zdF9kZXN0 cm95X3N0YXRlLAo+ID4gIH07Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlX2Z1bmNzKTsKPiA+ICAKPiA+ICAvKioKPiA+ICAgKiBkcm1fYXRvbWljX2dldF9tc3Rf dG9wb2xvZ3lfc3RhdGU6IGdldCBNU1QgdG9wb2xvZ3kgc3RhdGUKPiA+IEBAIC0zMjEzLDEzICsz MzQxLDExIEBAIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9pbml0KHN0cnVjdAo+ID4gZHJt X2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiA+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4gIAo+ ID4gIAltc3Rfc3RhdGUtPm1nciA9IG1ncjsKPiA+IC0KPiA+IC0JLyogbWF4LiB0aW1lIHNsb3Rz IC0gb25lIHNsb3QgZm9yIE1UUCBoZWFkZXIgKi8KPiA+IC0JbXN0X3N0YXRlLT5hdmFpbF9zbG90 cyA9IDYzOwo+ID4gKwlJTklUX0xJU1RfSEVBRCgmbXN0X3N0YXRlLT52Y3Bpcyk7Cj4gPiAgCj4g PiAgCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfaW5pdCgmbWdyLT5iYXNlLAo+ID4gIAkJCQkgICAg Jm1zdF9zdGF0ZS0+YmFzZSwKPiA+IC0JCQkJICAgICZtc3Rfc3RhdGVfZnVuY3MpOwo+ID4gKwkJ CQkgICAgJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MpOwo+ID4gIAo+ID4gIAlyZXR1 cm4gMDsKPiA+ICB9Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4g aW5kZXggZmUwNDVhYmI2NDcyLi5mNjZhZjE0NjU2ODYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gQEAgLTEyNDg0LDYgKzEyNDg0LDggQEAgc3RhdGljIGlu dCBpbnRlbF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kZXZpY2UKPiA+ICpkZXYsCj4gPiAgCXN0 cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfYXRvbWljX3N0 YXRlKHN0YXRlKTsKPiA+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gIAlzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlLCAqY3J0Y19zdGF0ZTsKPiA+ICsJc3RydWN0IGRy bV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gPiAgCWludCByZXQsIGk7Cj4gPiAgCWJvb2wgYW55X21z ID0gZmFsc2U7Cj4gPiAgCj4gPiBAQCAtMTI1MzQsNiArMTI1MzYsMTIgQEAgc3RhdGljIGludCBp bnRlbF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kZXZpY2UKPiA+ICpkZXYsCj4gPiAgCQkJCSAg ICAgICAiW21vZGVzZXRdIiA6ICJbZmFzdHNldF0iKTsKPiA+ICAJfQo+ID4gIAo+ID4gKwlmb3Jf ZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsKPiA+ ICsJCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKG1zdF9zdGF0ZSk7Cj4gPiArCQlpZiAo cmV0KQo+ID4gKwkJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICAJaWYgKGFueV9tcykg ewo+ID4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVja3Moc3RhdGUpOwo+ID4gIAo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gPiBpbmRleCA4YjcxZDY0ZWJkOWQuLmFh ZjkwNDczOGI3OCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rw X21zdC5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ID4g QEAgLTExNCwyOCArMTE0LDMxIEBAIHN0YXRpYyBpbnQgaW50ZWxfZHBfbXN0X2F0b21pY19jaGVj ayhzdHJ1Y3QKPiA+IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICAJc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwo+ID4gIAlzdHJ1Y3QgZHJtX2NydGMgKm9s ZF9jcnRjOwo+ID4gIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gPiAtCWlu dCBzbG90cywgcmV0ID0gMDsKPiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29u bmVjdG9yID0KPiA+ICsJCXRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gKwlzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciA9Cj4gPiArCQkmaW50ZWxfY29ubmVjdG9y LT5tc3RfcG9ydC0+bXN0X21ncjsKPiA+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9 IGludGVsX2Nvbm5lY3Rvci0+cG9ydDsKPiA+ICsJaW50IHJldCA9IDA7Cj4gPiAgCj4gPiAgCW9s ZF9jb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwg Y29ubmVjdG9yKTsKPiA+ICAJb2xkX2NydGMgPSBvbGRfY29ubl9zdGF0ZS0+Y3J0YzsKPiA+ICAJ aWYgKCFvbGRfY3J0YykKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAtCWNydGNfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gLQlz bG90cyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiA+IC0J aWYgKGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpICYmIHNsb3RzID4g MCkgewo+ID4gLQkJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiAtCQlz dHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNvZGVyOwo+ID4gKwkvKiBGcmVlIFZDUEksIHNpbmNl IGNvbXB1dGVfY29uZmlnKCkgd29uJ3QgYmUgcnVuICovCj4gPiArCWlmICghbmV3X2Nvbm5fc3Rh dGUtPmNydGMpIHsKPiA+ICsJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19z dGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+ID4gIAo+ID4gLQkJb2xkX2VuY29kZXIgPSBvbGRfY29u bl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+ID4gLQkJbWdyID0gJmVuY190b19tc3Qob2xkX2VuY29k ZXIpLT5wcmltYXJ5LT5kcC5tc3RfbWdyOwo+ID4gLQo+ID4gLQkJcmV0ID0gZHJtX2RwX2F0b21p Y19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgc2xvdHMpOwo+ID4gLQkJaWYgKHJldCkK PiA+IC0JCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgcmVsZWFzaW5nICVkIHZjcGkgc2xvdHM6JWRc biIsCj4gPiBzbG90cywgcmV0KTsKPiA+IC0JCWVsc2UKPiA+IC0JCQl0b19pbnRlbF9jcnRjX3N0 YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHUgPSAwOwo+ID4gKwkJcmV0ID0gZHJtX2RwX2F0b21p Y19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1nciwgcG9ydCk7Cj4gPiArCQlpZiAocmV0KSB7 Cj4gPiArCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHJlbGVhc2luZyB2Y3BpIHNsb3RzOiAlZFxu IiwKPiA+ICsJCQkJICAgICAgcmV0KTsKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gKwkJfQo+ID4g KwkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1ID0gMDsKPiA+ICAJ fQo+ID4gKwo+ID4gIAlyZXR1cm4gcmV0Owo+ID4gIH0KPiA+ICAKPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCj4gPiBiL2luY2x1ZGUvZHJtL2RybV9kcF9t c3RfaGVscGVyLmgKPiA+IGluZGV4IDNmYWNlYjY2ZjVjYi4uMGFhN2QzNjU4MDEzIDEwMDY0NAo+ ID4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+ID4gQEAgLTQwNiw5ICs0MDYsMTUgQEAgc3RydWN0 IGRybV9kcF9wYXlsb2FkIHsKPiA+ICAKPiA+ICAjZGVmaW5lIHRvX2RwX21zdF90b3BvbG9neV9z dGF0ZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0Cj4gPiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0 YXRlLCBiYXNlKQo+ID4gIAo+ID4gK3N0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uIHsKPiA+ ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKPiA+ICsJaW50IHZjcGk7Cj4gPiArCXN0 cnVjdCBsaXN0X2hlYWQgbmV4dDsKPiA+ICt9Owo+ID4gKwo+ID4gIHN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlIHsKPiA+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7Cj4g PiAtCWludCBhdmFpbF9zbG90czsKPiA+ICsJc3RydWN0IGxpc3RfaGVhZCB2Y3BpczsKPiA+ICAJ c3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gPiAgfTsKPiA+ICAKPiA+IEBA IC02MjQsOSArNjMwLDEwIEBAIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1 Y3QKPiA+IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkgIHN0cnVjdCBkcm1fZHBf bXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+IAo+IEkgdGhpbmsgYW5ub3RhdGluZyB0aGUgcmVs YXNlL2ZpbmQgZnVuY3Rpb25zIHdpdGggX19tdXN0X2NoZWNrIHdvdWxkIGJlCj4gZ29vZC4KPiAK PiA+ICBpbnQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLAo+ID4gIAkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X21nciAqbWdyLAo+ID4gLQkJCQkgICAgIGludCBzbG90cyk7Cj4gPiArCQkJCSAgICAgc3RydWN0 IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7Cj4gPiAgaW50IGRybV9kcF9zZW5kX3Bvd2VyX3VwZG93 bl9waHkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gPiAgCQkJCSBzdHJ1 Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBib29sIHBvd2VyX3VwKTsKPiAKPiBTYW1lIGhlcmUu Cj4gCj4gPiAraW50IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X3N0YXRlICpzdGF0ZSk7Cj4gCj4gV2l0aCB0aGUgbml0cyBhZGRyZXNzZWQ6Cj4gCj4g UmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gCj4g PiAgCj4gPiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcwo+ID4g ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jczsKPiA+ICAKPiA+IC0tIAo+ID4gMi4xNy4y Cj4gPiAKPiAKPiAKLS0gCkNoZWVycywKCUx5dWRlIFBhdWwKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=