From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v6 3/6] drm/dp_mst: Start tracking per-port VCPI allocations Date: Mon, 26 Nov 2018 22:04:21 +0100 Message-ID: <20181126210421.GQ4266@phenom.ffwll.local> References: <20181116005008.7243-1-lyude@redhat.com> <20181116005008.7243-4-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181116005008.7243-4-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Lyude Paul Cc: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBOb3YgMTUsIDIwMTggYXQgMDc6NTA6MDVQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 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+IENoYW5nZXMgc2luY2UgdjY6Cj4gIC0gS2VlcCBhIGtyZWYgdG8g YWxsIG9mIHRoZSBwb3J0cyB3ZSBoYXZlIGFsbG9jYXRpb25zIG9uLiBUaGlzIHJlcXVpcmVkCj4g ICAgYSBnb29kIGJpdCBvZiBjaGFuZ2luZyB0byB3aGVuIHdlIGNhbGwgZHJtX2RwX2ZpbmRfdmNw aV9zbG90cygpLAo+ICAgIG1haW5seSB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugb25s eSByZWRvIFZDUEkgYWxsb2NhdGlvbnMgb24KPiAgICBhY3R1YWwgbW9kZSBvciBDUlRDIGNoYW5n ZXMsIG5vdCBjcnRjX3N0YXRlLT5hY3RpdmUgY2hhbmdlcy4KPiAgICBBZGRpdGlvbmFsbHksIHdl IG5vIGxvbmdlciB0YWtlIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIERSTSBjb25uZWN0b3IKPiAg ICBmb3IgZWFjaCBwb3J0IGludG8gYWNjb3VudCBiZWNhdXNlIHNvIGxvbmcgYXMgd2UgaGF2ZSBh IGtyZWYgdG8gdGhlCj4gICAgcG9ydCBpbiB0aGUgbmV3IG9yIHByZXZpb3VzIGF0b21pYyBzdGF0 ZSwgdGhlIGNvbm5lY3RvciB3aWxsIHN0YXkKPiAgICByZWdpc3RlcmVkLgoKSSB3cml0ZSBhbiBl bnRpcmUgcGlsZSBvZiBzbWFsbCBuaXRwaXRzIChzdGlsbCBpbmNsdWRlZCBtb3N0IG9mIHRoZW0K YmVsb3cpLCB1bnRpbCBJIHJlYWxpemVkIHRoaXMgaGVyZSB3b250IHdvcmsuIERlbGF5aW5nIHRo ZSBjYWxsIHRvIGRlc3Ryb3kKdGhlIGNvbm5lY3RvciAod2VsbCwgdW5yZWdpc3RlciBpdCByZWFs bHkpIHdyZWFrcyB0aGUgZGVzaWduIHdlJ3ZlIGNvbWUgdXAKd2l0aCB0aHVzIGZhciwgcmVzdWx0 aW5nIGluIG1vc3Qgb2YgbXkgY29tbWVudHMgaGVyZS4KCkluc3RlYWQsIGFsbCB3ZSBuZWVkIHRv IGRvIGlzIGRlbGF5IHRoZSBrZnJlZShwb3J0KSBhdCB0aGUgYm90dG9tIG9mCmRybV9kcF9kZXN0 cm95X3BvcnQoKS4gVGhlIHZjcGkgYWxsb2NhdGlvbiBzdHJ1Y3R1cmUgX29ubHlfIG5lZWRzIHRo ZQpwb2ludGVyIHZhbHVlIHRvIHN0YXkgdmFsaWQsIGFzIGEgbG9va3VwIGtleS4gSXQgZG9lc24n dCBjYXJlIGF0IGFsbCBhYm91dAphbnl0aGluZyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlcmUuIFNv IHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgdG8gZGVsYXkgaXMKdGhlIGtmcmVlLiBJIHRoaW5rIHRo ZSBzaW1wbGVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGFkZCBhIDJuZCBrcmVmCihwb3J0 LT5rZnJlZV9yZWYgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCksIHdpdGggb24gcmVmZXJlbmNlIGhl bGQgYnkgdGhlCnBvcnQgaXRzZWxmIChyZWxlYXNlZCBpbiBkcm1fZHBfZGVzdHJveV9wb3J0KSwg YW5kIHRoZSBvdGhlciBvbmUgaGVsZAphcy1uZWVkZWQgYnkgdGhlIHZjcGkgYWxsb2NhdGlvbiBs aXN0cy4KCkkgdGhpbmsgaWYgd2UgZ28gd2l0aCB0aGlzIGRlc2lnbiBpbnN0ZWFkIG9mIHJldHJv Zml0dGluZyBhIHNlbWFudGljCmNoYW5nZSBvZiB0aGUgcG9ydCBsaWZldGltZSBpdHNlbGYsIGFs bCB0aGUgY29tcGxpY2F0aW9ucyBJIGNvbXBsYWluIGFib3V0CmJlbG93IHNob3VsZCBkaXNhcHBl YXIuCgpQaWxlcyBvZiBjb21tZW50cyBiZWxvdy4KCkNoZWVycywgRGFuaWVsCgo+ICAtIFVzZSB0 aGUgc21hbGwgY2hhbmdlcyB0byBkcm1fZHBfcHV0X3BvcnQoKSB0byBhZGQgZXZlbiBtb3JlIGVy cm9yCj4gICAgY2hlY2tpbmcgdG8gbWFrZSBtaXN1c2FnZSBvZiB0aGUgaGVscGVycyBtb3JlIG9i dmlvdXMuIEkgYWRkZWQgdGhpcwo+ICAgIGFmdGVyIGhhdmluZyB0byBjaGFzZSBkb3duIHZhcmlv dXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0Cj4gICAgc3RhcnRlZCBwb3BwaW5nIHVw IGZyb20gdGhlIG5ldyBoZWxwZXJzIHNvIG5vIG9uZSBlbHNlIGhhcyB0bwo+ICAgIHRyb3VibGVz aG9vdCB0aGF0Lgo+ICAtIE1vdmUgc29tZSBhY2NpZGVudGFsIERSTV9ERUJVR19LTVMoKSBjYWxs cyB0byBEUk1fREVCVUdfQVRPTUlDKCkKPiAgLSBVcGRhdGUgZG9jdW1lbnRhdGlvbiBhZ2Fpbiwg bm90ZSB0aGF0IGZpbmQvcmVsZWFzZSgpIHNob3VsZCBib3RoIG5vdCBiZQo+ICAgIGNhbGxlZCBv biB0aGUgc2FtZSBwb3J0IGluIGEgc2luZ2xlIGF0b21pYyBjaGVjayBwaGFzZSAoYnV0IG11bHRp cGxlCj4gICAgY2FsbHMgdG8gb25lIG9yIHRoZSBvdGhlciBpcyBPSykKPiAKPiBDaGFuZ2VzIHNp bmNlIHY0Ogo+ICAtIERvbid0IHNraXAgdGhlIGF0b21pYyBjaGVja3MgZm9yIFZDUEkgYWxsb2Nh dGlvbnMgaWYgbm8gbmV3IFZDUEkKPiAgICBhbGxvY2F0aW9ucyBoYXBwZW4gaW4gYSBzdGF0ZS4g VGhpcyBtYWtlcyB0aGUgbmV4dCBjaGFuZ2UgSSdtIGFib3V0Cj4gICAgdG8gbGlzdCBoZXJlIGEg bG90IGVhc2llciB0byBpbXBsZW1lbnQuCj4gIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlv bnMgb24gZGVzdHJveWVkIHBvcnRzLCBpbnN0ZWFkIGVuc3VyZSB0aGF0Cj4gICAgd2hlbiBwb3J0 cyBhcmUgZGVzdHJveWVkIGFuZCBzdGlsbCBoYXZlIFZDUEkgYWxsb2NhdGlvbnMgaW4gdGhlCj4g ICAgdG9wb2xvZ3kgc3RhdGUsIHRoZSBvbmx5IHN0YXRlIGNoYW5nZXMgYWxsb3dlZCBhcmUgcmVs ZWFzaW5nIHNhaWQKPiAgICBwb3J0cycgVkNQSS4gVGhpcyBwcmV2ZW50cyBhIHN0YXRlIHdpdGgg YSBtaXggb2YgVkNQSSBhbGxvY2F0aW9ucwo+ICAgIGZyb20gZGVzdHJveWVkIHBvcnRzLCBhbmQg YWxsb2NhdGlvbnMgZnJvbSB2YWxpZCBwb3J0cy4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYzOgo+ICAt IERvbid0IHJlbGVhc2UgVkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUgdG9wb2xvZ3kgc3RhdGUgaW1t ZWRpYXRlbHkgaW4KPiAgICBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpLCBpbnN0 ZWFkIG1hcmsgdGhlbSBhcyAwIGFuZCBza2lwCj4gICAgb3ZlciB0aGVtIGluIGRybV9kcF9tc3Rf ZHVwbGljYXRlX3N0YXRlKCkuIFRoaXMgbWFrZXMgaXQgc28KPiAgICBkcm1fZHBfYXRvbWljX3Jl bGVhc2VfdmNwaV9zbG90cygpIGlzIHN0aWxsIGlkZW1wb3RlbnQgd2hpbGUgYWxzbwo+ICAgIHRo cm93aW5nIHdhcm5pbmdzIGlmIHRoZSBkcml2ZXIgbWVzc2VzIHVwIGl0J3MgYm9vayBrZWVwaW5n IGFuZCB0cmllcwo+ICAgIHRvIHJlbGVhc2UgVkNQSSBzbG90cyBvbiBhIHBvcnQgdGhhdCBkb2Vz bid0IGhhdmUgYW55IHByZS1leGlzdGluZwo+ICAgIFZDUEkgYWxsb2NhdGlvbiAtIGRhbnZldAo+ ICAtIENoYW5nZSBtc3Rfc3RhdGUvc3RhdGUgaW4gc29tZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8g Im1zdCBzdGF0ZSIKPiAKPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ICAtIFVzZSBrbWVtZHVwKCkgZm9y IGR1cGxpY2F0aW5nIE1TVCBzdGF0ZSAtIGRhbnZldAo+ICAtIE1vdmUgcG9ydCB2YWxpZGF0aW9u IG91dCBvZiBkdXBsaWNhdGUgc3RhdGUgY2FsbGJhY2sgLSBkYW52ZXQKPiAgLSBIYW5kbGUgbG9v cGluZyB0aHJvdWdoIE1TVCB0b3BvbG9neSBzdGF0ZXMgaW4KPiAgICBkcm1fZHBfbXN0X2F0b21p Y19jaGVjaygpIHNvIHRoZSBkcml2ZXIgZG9lc24ndCBoYXZlIHRvIGRvIGl0Cj4gIC0gRml4IGRv Y3VtZW50YXRpb24gaW4gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ICAtIE1vdmUg dGhlIGF0b21pYyBjaGVjayBmb3IgZWFjaCBpbmRpdmlkdWFsIHRvcG9sb2d5IHN0YXRlIGludG8g aXQncwo+ICAgIG93biBmdW5jdGlvbiwgcmVkdWNlcyBpbmRlbnRpbmcKPiAgLSBEb24ndCBjb25z aWRlciAic3RhbGUiIE1TVCBwb3J0cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKPiAg ICByZXF1aXJlbWVudHMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb3JpZ2luYWxseSB3ZSByZWxp ZWQgb24gdGhlCj4gICAgc3RhdGUgZHVwbGljYXRpb24gZnVuY3Rpb25zIHRvIHBydW5lIGFueSBz dGFsZSBwb3J0cyBmcm9tIHRoZSBuZXcKPiAgICBzdGF0ZSwgd2hpY2ggd291bGQgcHJldmVudCB1 cyBmcm9tIGluY29ycmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCj4gICAgYmFuZHdpZHRoIHJlcXVp cmVtZW50cyBhbG9uZ3NpZGUgbGVnaXRpbWF0ZSBuZXcgcGF5bG9hZHMuCj4gIC0gQWRkIGZ1bmN0 aW9uIHJlZmVyZW5jZXMgaW4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIGRh bnZldAo+ICAtIEFubm90YXRlIGF0b21pYyBWQ1BJIGFuZCBhdG9taWMgY2hlY2sgZnVuY3Rpb25z IHdpdGggX19tdXN0X2NoZWNrCj4gICAgLSBkYW52ZXQKPiAKPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ ICAtIERvbid0IHVzZSB0aGUgbm93LXJlbW92ZWQgLT5hdG9taWNfY2hlY2soKSBmb3IgcHJpdmF0 ZSBvYmplY3RzIGhvb2ssCj4gICAganVzdCBnaXZlIGRyaXZlcnMgYSBmdW5jdGlvbiB0byBjYWxs IHRoZW1zZWx2ZXMKPiAKPiBTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQu Y29tPgo+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IC0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIHwgMjk0ICsrKysrKysrKysr KysrKysrKysrKysrLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAg fCAgIDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYyAgIHwgIDY0ICsr Ky0tLQo+ICBpbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oICAgICAgIHwgIDI0ICsrLQo+ ICA0IGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKPiAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMKPiBpbmRleCAwMGZiZTdhMjY5OWQu LjE4M2QwZTgzMmNlZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90 b3BvbG9neS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwo+ IEBAIC0yNjE3LDIxICsyNjE3LDQyIEBAIHN0YXRpYyBpbnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiAgfQo+ICAKPiAgLyoqCj4gLSAqIGRy bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgLSBGaW5kIGFuZCBhZGQgdmNwaSBzbG90cyB0 byB0aGUgc3RhdGUKPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKSAtIEZpbmQg YW5kIGFkZCBWQ1BJIHNsb3RzIHRvIHRoZSBzdGF0ZQo+ICAgKiBAc3RhdGU6IGdsb2JhbCBhdG9t aWMgc3RhdGUKPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Cj4g ICAqIEBwb3J0OiBwb3J0IHRvIGZpbmQgdmNwaSBzbG90cyBmb3IKPiAgICogQHBibjogYmFuZHdp ZHRoIHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQQk4KPiAgICoKPiAtICogUkVUVVJOUzoKPiAt ICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBhc3NpZ25lZCBmb3IgdGhpcyBwb3J0 IG9yIGVycm9yCj4gKyAqIEFsbG9jYXRlcyBWQ1BJIHNsb3RzIHRvIEBwb3J0LCByZXBsYWNpbmcg YW55IHByZXZpb3VzIFZDUEkgYWxsb2NhdGlvbnMgaXQKPiArICogbWF5IGhhdmUgaGFkLiBBbnkg YXRvbWljIGRyaXZlcnMgd2hpY2ggc3VwcG9ydCBNU1QgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24K PiArICogaW4gdGhlaXIgJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5hdG9taWNfY2hlY2soKSBj YWxsYmFjayB0byBjaGFuZ2UgdGhlCj4gKyAqIGN1cnJlbnQgVkNQSSBhbGxvY2F0aW9uIGZvciB0 aGUgbmV3IHN0YXRlLCBidXQgb25seSB3aGVuCj4gKyAqICZkcm1fY3J0Y19zdGF0ZS5tb2RlX2No YW5nZWQgb3IgJmRybV9jcnRjX3N0YXRlLmNvbm5lY3RvcnNfY2hhbmdlZCBpcyBzZXQKPiArICog dG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIHRoYXQg c3RpbGwgdXNlIHRoZQo+ICsgKiBsZWdhY3kgbW9kZXNldHRpbmcgVUFQSS4KPiArICoKPiArICog QWxsb2NhdGlvbnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWluc3Qg dGhlIGJhbmR3aWR0aAo+ICsgKiByZXN0cmFpbnRzIG9mIEBtZ3IgdW50aWwgdGhlIGRyaXZlciBj YWxscyBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpLgo+ICsgKgo+ICsgKiBBZGRpdGlvbmFsbHks IGl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2Ft ZQo+ICsgKiBAcG9ydCBhcyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRo aXMgZnVuY3Rpb24gYW5kCj4gKyAqIGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCkg aW4gdGhlIHNhbWUgYXRvbWljIGNoZWNrIHBoYXNlLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzoKPiAr ICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQo+ICsgKiBkcm1fZHBfbXN0X2F0 b21pY19jaGVjaygpCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIFRvdGFsIHNsb3RzIGluIHRo ZSBhdG9taWMgc3RhdGUgYXNzaWduZWQgZm9yIHRoaXMgcG9ydCwgb3IgYSBuZWdhdGl2ZSBlcnJv cgo+ICsgKiBjb2RlIGlmIHRoZSBwb3J0IG5vIGxvbmdlciBleGlzdHMKPiAgICovCj4gIGludCBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsCj4gIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAo+ICAJCQkJ ICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBpbnQgcGJuKQo+ICB7Cj4gIAlzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAqdG9wb2xvZ3lfc3RhdGU7Cj4gLQlpbnQgcmVxX3Ns b3RzOwo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZjcGkgPSBOVUxM Owo+ICsJaW50IHByZXZfc2xvdHMsIHJlcV9zbG90cywgcmV0Owo+ICAKPiAgCXRvcG9sb2d5X3N0 YXRlID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlLCBtZ3IpOwo+ICAJ aWYgKElTX0VSUih0b3BvbG9neV9zdGF0ZSkpCj4gQEAgLTI2NDAsMjAgKzI2NjEsNjAgQEAgaW50 IGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSwKPiAgCXBvcnQgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9wb3J0X3JlZihtZ3IsIHBvcnQp Owo+ICAJaWYgKHBvcnQgPT0gTlVMTCkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAtCXJlcV9zbG90 cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gLQlEUk1fREVCVUdfS01TKCJ2 Y3BpIHNsb3RzIHJlcT0lZCwgYXZhaWw9JWRcbiIsCj4gLQkJCXJlcV9zbG90cywgdG9wb2xvZ3lf c3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiAgCj4gLQlpZiAocmVxX3Nsb3RzID4gdG9wb2xvZ3lfc3Rh dGUtPmF2YWlsX3Nsb3RzKSB7Cj4gLQkJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+IC0JCXJldHVy biAtRU5PU1BDOwo+ICsJdG9wb2xvZ3lfc3RhdGUtPnZjcGlfYWxsb2NhdGVkID0gdHJ1ZTsKPiAr Cj4gKwkvKiBGaW5kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24gZm9yIHRoaXMgcG9ydCwgaWYgYW55 ICovCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3Bpcywg bmV4dCkgewo+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9ydCkgewo+ICsJCQl2Y3BpID0gcG9zOwo+ ICsJCQlwcmV2X3Nsb3RzID0gdmNwaS0+dmNwaTsKPiArCj4gKwkJCS8qCj4gKwkJCSAqIFRoaXMg c2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZSBkcml2ZXIgdHJpZXMKPiArCQkJICogcmVs ZWFzaW5nIGFuZCBhbGxvY2F0aW5nIHRoZSBzYW1lIFZDUEkgYWxsb2NhdGlvbiwKPiArCQkJICog d2hpY2ggaXMgYW4gZXJyb3IKPiArCQkJICovCj4gKwkJCWlmIChXQVJOX09OKCFwcmV2X3Nsb3Rz KSkgewoKCj4gKwkJCQlEUk1fRVJST1IoImNhbm5vdCBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBWQ1BJ IG9uIFtNU1QgUE9SVDolcF0gaW4gdGhlIHNhbWUgc3RhdGVcbiIsCj4gKwkJCQkJICBwb3J0KTsK PiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCQl9CgpBbGxvd2luZyBhdG9taWMgY2hhbmdlcyB0 byBvdXRwdXQgc3RhdGUgKGxpa2UgZGlzYWJsaW5nIGl0IG9uIG9uZSBjcnRjLAphbmQgdGhlbiBl bmFibGluZyBvbiB0aGUgb3RoZXIsIHRodXMgYm90aCByZWxlYXNpbmcgYW5kIHJlLWFsbG9jYXRp bmcgdGhlCnZjcGkgaW4gb25lIGdvKSBpcyBraW5kYSB0aGUgcG9pbnQgb2YgYXRvbWljLiBTbyBk ZWZpbml0ZWx5IGNhbid0IEVJTlZBTApoZXJlLgoKU291bmRzIGxpa2Ugd2UgbmVlZCBtb3JlIHRl c3RjYXNlcyBpbiBpZ3Q/Cgo+ICsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICAJfQo+ICsJaWYgKCF2 Y3BpKQo+ICsJCXByZXZfc2xvdHMgPSAwOwo+ICAKPiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9z bG90cyAtPSByZXFfc2xvdHM7Cj4gLQlEUk1fREVCVUdfS01TKCJ2Y3BpIHNsb3RzIGF2YWlsPSVk IiwgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiArCXJlcV9zbG90cyA9IERJVl9ST1VO RF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Cj4gKwo+ICsJRFJNX0RFQlVHX0FUT01JQygiW0NPTk5F Q1RPUjolZDolc10gW01TVCBQT1JUOiVwXSBWQ1BJICVkIC0+ICVkXG4iLAo+ICsJCQkgcG9ydC0+ Y29ubmVjdG9yLT5iYXNlLmlkLCBwb3J0LT5jb25uZWN0b3ItPm5hbWUsCj4gKwkJCSBwb3J0LCBw cmV2X3Nsb3RzLCByZXFfc2xvdHMpOwo+ICsKPiArCS8qIEFkZCB0aGUgbmV3IGFsbG9jYXRpb24g dG8gdGhlIHN0YXRlICovCj4gKwlpZiAoIXZjcGkpIHsKPiArCQl2Y3BpID0ga3phbGxvYyhzaXpl b2YoKnZjcGkpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXZjcGkpIHsKPiArCQkJcmV0ID0gLUVO T01FTTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICAKPiArCQl2Y3BpLT5wb3J0ID0gZHJtX2Rw X2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCBwb3J0KTsKPiArCQlpZiAoIXZjcGktPnBvcnQp IHsKPiArCQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJa2ZyZWUodmNwaSk7Cj4gKwkJCWdvdG8gb3V0 Owo+ICsJCX0KPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwgJnRvcG9sb2d5X3N0YXRlLT52Y3Bp cyk7Cj4gKwl9Cj4gKwl2Y3BpLT52Y3BpID0gcmVxX3Nsb3RzOwo+ICsKPiArCXJldCA9IHJlcV9z bG90czsKPiArb3V0Ogo+ICAJZHJtX2RwX3B1dF9wb3J0KHBvcnQpOwo+IC0JcmV0dXJuIHJlcV9z bG90czsKPiArCXJldHVybiByZXQ7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXRvbWlj X2ZpbmRfdmNwaV9zbG90cyk7Cj4gIAo+IEBAIC0yNjYxLDMxICsyNzIyLDY2IEBAIEVYUE9SVF9T WU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwo+ICAgKiBkcm1fZHBfYXRvbWlj X3JlbGVhc2VfdmNwaV9zbG90cygpIC0gUmVsZWFzZSBhbGxvY2F0ZWQgdmNwaSBzbG90cwo+ICAg KiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKPiAgICogQG1ncjogTVNUIHRvcG9sb2d5IG1h bmFnZXIgZm9yIHRoZSBwb3J0Cj4gLSAqIEBzbG90czogbnVtYmVyIG9mIHZjcGkgc2xvdHMgdG8g cmVsZWFzZQo+ICsgKiBAcG9ydDogVGhlIHBvcnQgdG8gcmVsZWFzZSB0aGUgVkNQSSBzbG90cyBm cm9tCj4gICAqCj4gLSAqIFJFVFVSTlM6Cj4gLSAqIDAgaWYgQHNsb3RzIHdlcmUgYWRkZWQgYmFj ayB0byAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgb3IKPiAtICogbmVn YXRpdmUgZXJyb3IgY29kZQo+ICsgKiBSZWxlYXNlcyBhbnkgVkNQSSBzbG90cyB0aGF0IGhhdmUg YmVlbiBhbGxvY2F0ZWQgdG8gYSBwb3J0IGluIHRoZSBhdG9taWMKPiArICogc3RhdGUuIEFueSBh dG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBp bgo+ICsgKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkg Y2FsbGJhY2sgd2hlbiB0aGUKPiArICogY29ubmVjdG9yIHdpbGwgbm8gbG9uZ2VyIGhhdmUgVkNQ SSBhbGxvY2F0ZWQgKGUuZy4gYmVjYXVzZSBpdCdzIENSVEMgd2FzCj4gKyAqIHJlbW92ZWQpIHdo ZW4gaXQgaGFkIFZDUEkgYWxsb2NhdGVkIGluIHRoZSBwcmV2aW91cyBhdG9taWMgc3RhdGUuCj4g KyAqCj4gKyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBldmVuIGlmIEBwb3J0IGhhcyBiZWVuIHJl bW92ZWQgZnJvbSB0aGUgc3lzdGVtLgo+ICsgKiBBZGRpdGlvbmFsbHksIGl0IGlzIE9LIHRvIGNh bGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZQo+ICsgKiBAcG9ydCBh cyBuZWVkZWQuIEl0IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5k Cj4gKyAqIGRybV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKCkgb24gdGhlIHNhbWUgQHBvcnQg aW4gYSBzaW5nbGUgYXRvbWljIGNoZWNrCj4gKyAqIHBoYXNlLgo+ICsgKgo+ICsgKiBTZWUgYWxz bzoKPiArICogZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQo+ICsgKiBkcm1fZHBfbXN0 X2F0b21pY19jaGVjaygpCj4gKyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqIDAgaWYgYWxsIHNsb3Rz IGZvciB0aGlzIHBvcnQgd2VyZSBhZGRlZCBiYWNrIHRvCj4gKyAqICZkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlLmF2YWlsX3Nsb3RzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKPiAgICovCj4gIGlu dCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUsCj4gIAkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdy LAo+IC0JCQkJICAgICBpbnQgc2xvdHMpCj4gKwkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Bv cnQgKnBvcnQpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICp0b3Bv bG9neV9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpwb3M7Cj4gKwli b29sIGZvdW5kID0gZmFsc2U7Cj4gIAo+ICAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWljX2dl dF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsIG1ncik7Cj4gIAlpZiAoSVNfRVJSKHRvcG9sb2d5 X3N0YXRlKSkKPiAgCQlyZXR1cm4gUFRSX0VSUih0b3BvbG9neV9zdGF0ZSk7Cj4gIAo+IC0JLyog V2UgY2Fubm90IHJlbHkgb24gcG9ydC0+dmNwaS5udW1fc2xvdHMgdG8gdXBkYXRlCj4gLQkgKiB0 b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMgYXMgdGhlIHBvcnQgbWF5IG5vdCBleGlzdCBpZiB0 aGUgcGFyZW50Cj4gLQkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxk IGJlIGZpeGVkIGJ5IHRyYWNraW5nCj4gLQkgKiBwZXItcG9ydCBzbG90IGFsbG9jYXRpb24gaW4g ZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSBpbnN0ZWFkIG9mCj4gLQkgKiBkZXBlbmRpbmcgb24g dGhlIGNhbGxlciB0byB0ZWxsIHVzIGhvdyBtYW55IHNsb3RzIHRvIHJlbGVhc2UuCj4gLQkgKi8K PiAtCXRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyArPSBzbG90czsKPiAtCURSTV9ERUJVR19L TVMoInZjcGkgc2xvdHMgcmVsZWFzZWQ9JWQsIGF2YWlsPSVkXG4iLAo+IC0JCQlzbG90cywgdG9w b2xvZ3lfc3RhdGUtPmF2YWlsX3Nsb3RzKTsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAm dG9wb2xvZ3lfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cgo+ICsJCWlmIChwb3MtPnBvcnQgPT0gcG9y dCkgewo+ICsJCQlmb3VuZCA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCWlm IChXQVJOX09OKCFmb3VuZCkpIHsKPiArCQlEUk1fRVJST1IoIm5vIFZDUEkgZm9yIFtNU1QgUE9S VDolcF0gZm91bmQgaW4gbXN0IHN0YXRlICVwXG4iLAo+ICsJCQkgIHBvcnQsICZ0b3BvbG9neV9z dGF0ZS0+YmFzZSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVH X0FUT01JQygiW01TVCBQT1JUOiVwXSBWQ1BJICVkIC0+IDBcbiIsIHBvcnQsIHBvcy0+dmNwaSk7 Cj4gKwlpZiAocG9zLT52Y3BpKSB7Cj4gKwkJLyoKPiArCQkgKiBUaGlzIHNob3VsZCBiZSBzYWZl LWFzIHRoZSBwcmV2aW91cyBzdGF0ZSB3aWxsIHN0aWxsIGhvbGQgYQo+ICsJCSAqIHJlZmVyZW5j ZSB0byB0aGlzIHBvcnQgdW50aWwgd2Ugc3dhcCBzdGF0ZXMuIElmIGl0J3Mgbm90LAo+ICsJCSAq IHRoZSBkcml2ZXIgaGFzIGEgYm9va2tlZXBpbmcgZXJyb3IKPiArCQkgKi8KPiArCQlpZiAoV0FS Tl9PTihkcm1fZHBfcHV0X3BvcnQocG9ydCkpKSB7CgpUaGUgdXN1YWwgd2F5IHRvIGRvIHRoaXMg KGluc3RlYWQgb2YgYWRkaW5nIGEgcmV0dXJuIHZhbHVlIHRvIHRoZSBub3JtYWwKX3B1dCBmdW5j dGlvbikgaXMgc29tZXRoaW5nIGxpa2UKCglrcmVmX3B1dChwb3J0LCBmdW5jdGlvbl90aGF0X3dp dGhfanVzdF9hX1dBUk5JTkdfRFJNX0VSUk9SKQoKYXZvaWRzIHRoZSBuZWVkIGZvciBwYXRjaCAy LgoKPiArCQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2UgVkNQSSBvbiBb TVNUIFBPUlQ6JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAo+ICsJCQkJICBwb3J0KTsKPiArCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCXBvcy0+dmNwaSA9IDA7Cj4gKwl9Cj4gIAo+ICAJ cmV0dXJuIDA7Cj4gIH0KPiBAQCAtMzExNSwxNSArMzIxMSw0NSBAQCBzdGF0aWMgdm9pZCBkcm1f ZHBfZGVzdHJveV9jb25uZWN0b3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHN0 YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgo+ICBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9z dGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopCj4gIHsKPiAtCXN0cnVjdCBkcm1fZHBf bXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZTsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9Cj4gKwkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRl KG9iai0+c3RhdGUpOwo+ICsJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24gKnBvcywgKnZj cGk7Cj4gIAo+IC0Jc3RhdGUgPSBrbWVtZHVwKG9iai0+c3RhdGUsIHNpemVvZigqc3RhdGUpLCBH RlBfS0VSTkVMKTsKPiArCXN0YXRlID0ga21lbWR1cChvbGRfc3RhdGUsIHNpemVvZigqc3RhdGUp LCBHRlBfS0VSTkVMKTsKPiAgCWlmICghc3RhdGUpCj4gIAkJcmV0dXJuIE5VTEw7Cj4gIAo+ICAJ X19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUob2JqLCAmc3Rh dGUtPmJhc2UpOwo+ICAKPiArCUlOSVRfTElTVF9IRUFEKCZzdGF0ZS0+dmNwaXMpOwo+ICsJc3Rh dGUtPnZjcGlfYWxsb2NhdGVkID0gZmFsc2U7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShw b3MsICZvbGRfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJLyogUHJ1bmUgbGVmdG92ZXIgZnJl ZWQgVkNQSSBhbGxvY2F0aW9ucyAqLwo+ICsJCWlmICghcG9zLT52Y3BpKQo+ICsJCQljb250aW51 ZTsKPiArCj4gKwkJdmNwaSA9IGttZW1kdXAocG9zLCBzaXplb2YoKnZjcGkpLCBHRlBfS0VSTkVM KTsKPiArCQlpZiAoIXZjcGkpCj4gKwkJCWdvdG8gZmFpbDsKPiArCj4gKwkJLyogVGFrZSBhIHBs YWluIG9sZCBrcmVmIGhlcmUgYW5kIGRvbid0IHZhbGlkYXRlIHRoZSBwb3J0LCBhcwo+ICsJCSAq IGl0J3MgdG9wb2xvZ3kgbWlnaHQgbm90IGV2ZW4gZXhpc3QgYW55bW9yZQo+ICsJCSAqLwo+ICsJ CWtyZWZfZ2V0KCZ2Y3BpLT5wb3J0LT5rcmVmKTsKPiArCQlsaXN0X2FkZCgmdmNwaS0+bmV4dCwg JnN0YXRlLT52Y3Bpcyk7Cj4gKwl9Cj4gKwo+ICAJcmV0dXJuICZzdGF0ZS0+YmFzZTsKPiArCj4g K2ZhaWw6Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB2Y3BpLCAmc3RhdGUtPnZj cGlzLCBuZXh0KSB7Cj4gKwkJZHJtX2RwX3B1dF9wb3J0KHBvcy0+cG9ydCk7Cj4gKwkJa2ZyZWUo cG9zKTsKPiArCX0KPiArCWtmcmVlKHN0YXRlKTsKPiArCj4gKwlyZXR1cm4gTlVMTDsKPiAgfQo+ ICAKPiAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJp dmF0ZV9vYmogKm9iaiwKPiBAQCAtMzEzMSwxNCArMzI1NywxMTYgQEAgc3RhdGljIHZvaWQgZHJt X2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKPiAgewo+ ICAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSA9Cj4gIAkJdG9f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlKTsKPiArCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxv Y2F0aW9uICpwb3MsICp0bXA7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywg dG1wLCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgewo+ICsJCS8qIFdlIG9ubHkga2VlcCByZWZl cmVuY2VzIHRvIHBvcnRzIHdpdGggbm9uLXplcm8gVkNQSXMgKi8KPiArCQlpZiAocG9zLT52Y3Bp KQo+ICsJCQlkcm1fZHBfcHV0X3BvcnQocG9zLT5wb3J0KTsKPiArCQlrZnJlZShwb3MpOwo+ICsJ fQo+ICAKPiAgCWtmcmVlKG1zdF9zdGF0ZSk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3ByaXZhdGVfc3RhdGVfZnVuY3MgbXN0X3N0YXRlX2Z1bmNzID0gewo+ICtzdGF0aWMg aW5saW5lIGludAo+ICtkcm1fZHBfbXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKPiArCQkJCSAgICAgICBzdHJ1Y3QgZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSAqbXN0X3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rw X3ZjcGlfYWxsb2NhdGlvbiAqdmNwaTsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQ7 Cj4gKwlpbnQgYXZhaWxfc2xvdHMgPSA2MywgcmV0Owo+ICsKPiArCS8qIFRoZXJlJ3Mgbm8gcG9z c2libGUgc2NlbmFyaW8gd2hlcmUgcmVsZWFzaW5nIFZDUEkgb3Iga2VlcGluZyBpdCB0aGUKPiAr CSAqIHNhbWUgd291bGQgbWFrZSB0aGUgc3RhdGUgaW52YWxpZAo+ICsJICovCj4gKwlpZiAoIW1z dF9zdGF0ZS0+dmNwaV9hbGxvY2F0ZWQpIHsKCkRvIHdlIG5lZWQgdGhpcz8gSWYgbm90IEknbSBh bHdheXMgaW4gZmF2b3VyIG9mIHJlbW92aW5nIGNvZGUgaWYgaXQncyBub3QKbmVlZGVkIDotKQoK PiArCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gc3RhdGUgJXAgYWxsb2NhdGVzIG5v IFZDUEksIGNoZWNrIHNraXBwZWRcbiIsCj4gKwkJCQkgbWdyLCAmbXN0X3N0YXRlLT5iYXNlKTsK PiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZjcGksICZt c3Rfc3RhdGUtPnZjcGlzLCBuZXh0KSB7Cj4gKwkJLyogUmVsZWFzaW5nIFZDUEkgaXMgYWx3YXlz IE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAqLwo+ICsJCWlmICghdmNwaS0+dmNwaSkgewo+ ICsJCQlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIFBPUlQ6JXBdIHJlbGVhc2VzIGFsbCBWQ1BJIHNs b3RzXG4iLAo+ICsJCQkJCSB2Y3BpLT5wb3J0KTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsK PiArCQlwb3J0ID0gZHJtX2RwX2dldF92YWxpZGF0ZWRfcG9ydF9yZWYobWdyLCB2Y3BpLT5wb3J0 KTsKPiArCQlpZiAoIXBvcnQpIHsKPiArCQkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVw XSBpcyBnb25lIGJ1dCBzdGlsbCBoYXMgVkNQSSwgY2Fubm90IGFkZCBuZXcgVkNQSVxuIiwKPiAr CQkJCQkgdmNwaS0+cG9ydCk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KCkZvciBmaW5k X3ZjcGkgd2UndmUgYWxyZWFkeSBkb25lIHRoaXMuIEZvciB1bnBsdWdnZWQgdmNwaSwgd2UgY2Fu J3QgZG8KdGhpcyBoZXJlIEkgdGhpbmsgLSBvdGhlcndpc2UgaWYgeW91IGVuYWJsZSAyIG1zdCBv dXRwdXRzIG9uIHRoZSBzYW1lCmJyYW5jaCwgYW5kIHVucGx1ZyBib3RoLCBvbGQgbm9uLWF0b21p YyB1c2Vyc3BhY2UgY2FuIG5ldmVyIGV2ZXIgYWdhaW4KZGlzYWJsZSB0aGVtIGJlY2F1c2UgaXQg Y2FuJ3QgZGlzYWJsZSBib3RoLiBUaGUgY2hlY2sgKHRvIHNraXAgYWxyZWFkeQpkZWFsbG9jYXRl ZCBwb3J0cykgYWJvdmUgaXNuJ3QgZW5vdWdoIHRvIGhhbmRsZSB0aGF0LgoKPiArCj4gKwkJRFJN X0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSByZXF1aXJlcyAlZCB2Y3BpIHNsb3RzXG4iLAo+ ICsJCQkJIHZjcGktPnBvcnQsIHZjcGktPnZjcGkpOwo+ICsKPiArCQlhdmFpbF9zbG90cyAtPSB2 Y3BpLT52Y3BpOwo+ICsJCWlmIChhdmFpbF9zbG90cyA8IDApIHsKPiArCQkJRFJNX0RFQlVHX0FU T01JQygiW01TVCBQT1JUOiVwXSBub3QgZW5vdWdoIFZDUEkgc2xvdHMgaW4gbXN0IHN0YXRlICVw IChhdmFpbD0lZClcbiIsCj4gKwkJCQkJIHZjcGktPnBvcnQsIG1zdF9zdGF0ZSwKPiArCQkJCQkg YXZhaWxfc2xvdHMgKyB2Y3BpLT52Y3BpKTsKPiArCQkJcmV0ID0gLUVOT1NQQzsKPiArCQkJZ290 byBwb3J0X2ZhaWw7Cj4gKwkJfQo+ICsKPiArCQlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gKwl9 Cj4gKwlEUk1fREVCVUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gbXN0IHN0YXRlICVwIFZDUEkgYXZh aWw9JWQgdXNlZD0lZFxuIiwKPiArCQkJIG1nciwgbXN0X3N0YXRlLCBhdmFpbF9zbG90cywKPiAr CQkJIDYzIC0gYXZhaWxfc2xvdHMpOwo+ICsKPiArCXJldHVybiAwOwo+ICtwb3J0X2ZhaWw6Cj4g Kwlkcm1fZHBfcHV0X3BvcnQocG9ydCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKioK PiArICogZHJtX2RwX21zdF9hdG9taWNfY2hlY2sgLSBDaGVjayB0aGF0IHRoZSBuZXcgc3RhdGUg b2YgYW4gTVNUIHRvcG9sb2d5IGluIGFuCj4gKyAqIGF0b21pYyB1cGRhdGUgaXMgdmFsaWQKPiAr ICogQHN0YXRlOiBQb2ludGVyIHRvIHRoZSBuZXcgJnN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5 X3N0YXRlCj4gKyAqCj4gKyAqIENoZWNrcyB0aGUgZ2l2ZW4gdG9wb2xvZ3kgc3RhdGUgZm9yIGFu IGF0b21pYyB1cGRhdGUgdG8gZW5zdXJlIHRoYXQgaXQncwo+ICsgKiB2YWxpZC4gVGhpcyBpbmNs dWRlcyBjaGVja2luZyB3aGV0aGVyIHRoZXJlJ3MgZW5vdWdoIGJhbmR3aWR0aCB0byBzdXBwb3J0 Cj4gKyAqIHRoZSBuZXcgVkNQSSBhbGxvY2F0aW9ucyBpbiB0aGUgYXRvbWljIHVwZGF0ZS4KPiAr ICoKPiArICogQW55IGF0b21pYyBkcml2ZXJzIHN1cHBvcnRpbmcgRFAgTVNUIG11c3QgbWFrZSBz dXJlIHRvIGNhbGwgdGhpcyBhZnRlcgo+ICsgKiBjaGVja2luZyB0aGUgcmVzdCBvZiB0aGVpciBz dGF0ZSBpbiB0aGVpcgo+ICsgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21pY19jaGVjaygp IGNhbGxiYWNrLgo+ICsgKgo+ICsgKiBTZWUgYWxzbzoKPiArICogZHJtX2RwX2F0b21pY19maW5k X3ZjcGlfc2xvdHMoKQo+ICsgKiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpCj4g KyAqCj4gKyAqIFJldHVybnM6Cj4gKyAqCj4gKyAqIDAgaWYgdGhlIG5ldyBzdGF0ZSBpcyB2YWxp ZCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCj4gKyAqLwo+ICtpbnQgZHJtX2RwX21z dF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiArCXN0cnVjdCBkcm1fZHBfbXN0 X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGU7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiArCj4gKwlm b3JfZWFjaF9uZXdfbXN0X21ncl9pbl9zdGF0ZShzdGF0ZSwgbWdyLCBtc3Rfc3RhdGUsIGkpIHsK PiArCQlyZXQgPSBkcm1fZHBfbXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShtZ3IsIG1z dF9zdGF0ZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKTsKPiAr Cj4gK2NvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyBkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlX2Z1bmNzID0gewo+ICAJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fZHBf bXN0X2R1cGxpY2F0ZV9zdGF0ZSwKPiAgCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9kcF9t c3RfZGVzdHJveV9zdGF0ZSwKPiAgfTsKPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfbXN0X3RvcG9s b2d5X3N0YXRlX2Z1bmNzKTsKPiAgCj4gIC8qKgo+ICAgKiBkcm1fYXRvbWljX2dldF9tc3RfdG9w b2xvZ3lfc3RhdGU6IGdldCBNU1QgdG9wb2xvZ3kgc3RhdGUKPiBAQCAtMzIxNiwxMyArMzQ0NCwx MSBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1nciwKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gIAltc3Rfc3RhdGUt Pm1nciA9IG1ncjsKPiAtCj4gLQkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUgc2xvdCBmb3IgTVRQ IGhlYWRlciAqLwo+IC0JbXN0X3N0YXRlLT5hdmFpbF9zbG90cyA9IDYzOwo+ICsJSU5JVF9MSVNU X0hFQUQoJm1zdF9zdGF0ZS0+dmNwaXMpOwo+ICAKPiAgCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpf aW5pdCgmbWdyLT5iYXNlLAo+ICAJCQkJICAgICZtc3Rfc3RhdGUtPmJhc2UsCj4gLQkJCQkgICAg Jm1zdF9zdGF0ZV9mdW5jcyk7Cj4gKwkJCQkgICAgJmRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVf ZnVuY3MpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYwo+IGluZGV4IDEzMmU5NzgyMjdmYi4uOGU4NWUwNGE1OTQ4IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC0xMjU5Miw2ICsxMjU5MiwxMCBAQCBzdGF0 aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCQkJ ICAgICAgICJbbW9kZXNldF0iIDogIltmYXN0c2V0XSIpOwo+ICAJfQo+ICAKPiArCXJldCA9IGRy bV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl dDsKPiArCj4gIAlpZiAoYW55X21zKSB7Cj4gIAkJcmV0ID0gaW50ZWxfbW9kZXNldF9jaGVja3Mo c3RhdGUpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBf bXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+IGluZGV4IDRkZTI0 N2RkZjA1Zi4uYmUyZDFhYzdkODdkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RwX21zdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0 LmMKPiBAQCAtNDEsOCArNDEsMTMgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVf Y29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsKPiAgCXZvaWQgKnBvcnQg PSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKS0+cG9ydDsKPiAgCXN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSA9IHBpcGVfY29uZmlnLT5iYXNlLnN0YXRlOwo+ICsJc3RydWN0IGRy bV9jcnRjICpjcnRjID0gcGlwZV9jb25maWctPmJhc2UuY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUgPQo+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jcnRjX3N0 YXRlKHN0YXRlLCBjcnRjKTsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3Rh dGUgPSAmcGlwZV9jb25maWctPmJhc2U7Cj4gIAlpbnQgYnBwOwo+IC0JaW50IGxhbmVfY291bnQs IHNsb3RzID0gMDsKPiArCWludCBsYW5lX2NvdW50LCBzbG90cyA9Cj4gKwkJdG9faW50ZWxfY3J0 Y19zdGF0ZShvbGRfY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiAgCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlID0gJnBpcGVfY29uZmlnLT5iYXNlLmFkanVzdGVk X21vZGU7Cj4gIAlpbnQgbXN0X3BibjsKPiAgCWJvb2wgY29uc3RhbnRfbiA9IGRybV9kcF9oYXNf cXVpcmsoJmludGVsX2RwLT5kZXNjLAo+IEBAIC03Nyw4ICs4MiwxMiBAQCBzdGF0aWMgYm9vbCBp bnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIs Cj4gIAltc3RfcGJuID0gZHJtX2RwX2NhbGNfcGJuX21vZGUoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19j bG9jaywgYnBwKTsKPiAgCXBpcGVfY29uZmlnLT5wYm4gPSBtc3RfcGJuOwo+ICAKPiAtCS8qIFpv bWJpZSBjb25uZWN0b3JzIGNhbid0IGhhdmUgVkNQSSBzbG90cyAqLwo+IC0JaWYgKCFkcm1fY29u bmVjdG9yX2lzX3VucmVnaXN0ZXJlZChjb25uZWN0b3IpKSB7Cj4gKwkvKiBPbmx5IGNoYW5nZSBW Q1BJIGFsbG9jYXRpb24gb24gYWN0dWFsIG1vZGUgY2hhbmdlcywgdG8gcHJldmVudCB1cwo+ICsJ ICogZnJvbSB0cnlpbmcgdG8gYWxsb2NhdGUgVkNQSSB0byBwb3J0cyB0aGF0IG5vIGxvbmdlciBl eGlzdCB3aGVuIHdlCj4gKwkgKiBtYXkganVzdCBiZSB0cnlpbmcgdG8gZGlzYWJsZSBEUE1TIG9u IHRoZW0KPiArCSAqLwo+ICsJaWYgKG5ld19jcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgfHwKPiAr CSAgICBuZXdfY3J0Y19zdGF0ZS0+Y29ubmVjdG9yc19jaGFuZ2VkKSB7CgpXaHkgZXhhY3RseSBp cyB0aGlzIG5lZWRlZD8gV2Ugb25seSBjYWxsIGNvbXB1dGVfY29uZmlnIG9uIHRoZSBlbm9jb2Rl cgp3aGVuIGVuYWJsaW5nIGFuIG91dHB1dC4gTm90IHdoZW4gZGlzYWJsaW5nIG9uZS4gU2ltaWxh ciBmb3IgdGhlIGF0b21pYwpoZWxwZXJzIGFuZCB0aGUgdmFyaW91cyBlbmNvZGVyIGNhbGxiYWNr cyAoeW91IGhhdmUgdGhlIHNhbWUgY2hhbmdlIGluIHRoZQpub3V2ZWF1IGNvZGUpLiBEaWQgdGhp cyBhY3R1YWxseSBibG93IHVwIHdoaWxlIHRlc3Rpbmc/Cgo+ICAJCXNsb3RzID0gZHJtX2RwX2F0 b21pY19maW5kX3ZjcGlfc2xvdHMoc3RhdGUsCj4gIAkJCQkJCSAgICAgICZpbnRlbF9kcC0+bXN0 X21nciwKPiAgCQkJCQkJICAgICAgcG9ydCwKPiBAQCAtMTA3LDM2ICsxMTYsMzkgQEAgc3RhdGlj IGJvb2wgaW50ZWxfZHBfbXN0X2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLAo+ICAJcmV0dXJuIHRydWU7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgaW50ZWxfZHBf bXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+IC0JCXN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZSkKPiArc3RhdGljIGludAo+ ICtpbnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gKwkJCSAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRlKQo+ ICB7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IgPQo+ICsJCXRv X2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ICsJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xv Z3lfbWdyICptZ3IgPQo+ICsJCSZpbnRlbF9jb25uZWN0b3ItPm1zdF9wb3J0LT5tc3RfbWdyOwo+ ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCA9IGludGVsX2Nvbm5lY3Rvci0+cG9ydDsK PiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG5ld19jb25uX3N0YXRlLT5zdGF0 ZTsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsKPiAtCXN0 cnVjdCBkcm1fY3J0YyAqb2xkX2NydGM7Cj4gLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNf c3RhdGU7Cj4gLQlpbnQgc2xvdHMsIHJldCA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqb2xkX2Nvbm5fc3RhdGUgPQo+ICsJCWRybV9hdG9taWNfZ2V0X29sZF9jb25uZWN0b3Jf c3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKm9sZF9jcnRjID0g b2xkX2Nvbm5fc3RhdGUtPmNydGMsCj4gKwkJCSpuZXdfY3J0YyA9IG5ld19jb25uX3N0YXRlLT5j cnRjOwo+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSwgKm5ld19jcnRj X3N0YXRlOwo+ICAKPiAtCW9sZF9jb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5l Y3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKPiAtCW9sZF9jcnRjID0gb2xkX2Nvbm5fc3Rh dGUtPmNydGM7CgpCaWtlc2hlZDogUmV3b3JraW5nIGFsbCB0aGUgYWJvdmUgaGlkZXMgdGhlIHJl YWwgY2hhbmdlcyBxdWl0ZSBhIGJpdC4KCj4gIAlpZiAoIW9sZF9jcnRjKQo+IC0JCXJldHVybiBy ZXQ7Cj4gKwkJcmV0dXJuIDA7Cj4gIAo+IC0JY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25l d19jcnRjX3N0YXRlKHN0YXRlLCBvbGRfY3J0Yyk7Cj4gLQlzbG90cyA9IHRvX2ludGVsX2NydGNf c3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dTsKPiAtCWlmIChkcm1fYXRvbWljX2NydGNfbmVl ZHNfbW9kZXNldChjcnRjX3N0YXRlKSAmJiBzbG90cyA+IDApIHsKPiAtCQlzdHJ1Y3QgZHJtX2Rw X21zdF90b3BvbG9neV9tZ3IgKm1ncjsKPiAtCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNv ZGVyOwo+ICsJb2xkX2NydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfY3J0Y19zdGF0ZShz dGF0ZSwgb2xkX2NydGMpOwo+ICsJaWYgKCFvbGRfY3J0Y19zdGF0ZSB8fAoKIW9sZF9jcnRjX3N0 YXRlIHdvdWxkIGJlIGEgZnJhbWV3b3JrIGJ1Zy4gSnVzdCByZW1vdmUgdGhhdCBjaGVjay4KCj4g KwkgICAgIXRvX2ludGVsX2NydGNfc3RhdGUob2xkX2NydGNfc3RhdGUpLT5kcF9tX24udHUpCj4g KwkJcmV0dXJuIDA7CgpIbSwgd2h5IGRvIHdlIG5lZWQgdGhpcz8gSGF2aW5nIGEgRFAgcG9ydCBw cmV2aW91c2x5IGVuYWJsZWQgd2l0aCBhIDAgdHUKc291bmRzIGxpa2UgYSBwcmV0dHkgYmlnIGRy aXZlciBidWcuCj4gIAo+IC0JCW9sZF9lbmNvZGVyID0gb2xkX2Nvbm5fc3RhdGUtPmJlc3RfZW5j b2RlcjsKPiAtCQltZ3IgPSAmZW5jX3RvX21zdChvbGRfZW5jb2RlciktPnByaW1hcnktPmRwLm1z dF9tZ3I7Cj4gKwkvKiBJZiB3ZSBzd2l0Y2hlZCBDUlRDcywgY2xlYXIgdGhlIHByZXZpb3VzIG9u ZSdzIGFsbG9jYXRpb24gKi8KPiArCW5ld19jcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3 X2NydGNfc3RhdGUoc3RhdGUsIG9sZF9jcnRjKTsKPiArCWlmIChuZXdfY3J0Y19zdGF0ZS0+Y29u bmVjdG9yc19jaGFuZ2VkICYmICFuZXdfY3J0Y19zdGF0ZS0+ZW5hYmxlKQo+ICsJCXRvX2ludGVs X2NydGNfc3RhdGUobmV3X2NydGNfc3RhdGUpLT5kcF9tX24udHUgPSAwOwoKTm8gaWRlYSB3aHkg d2UgbmVlZCB0byBjbGVhciB0aGlzIGhlcmU/IFNob3VsZG4ndCB3ZSBqdXN0IGNsZWFyIHRoaXMK dW5jb25kaXRpb25hbGx5IGlmIHdlIHJlbGVhc2UgdGhlIGFsbG9jYXRpb24uCgpBbHNvIG5hbWlu ZyBjb252ZW50aW9uLCBJJ2QgY2FsbCB0aGlzIG9sZF9jcnRjX25ld19zdGF0ZSwgYW5kIG1heWJl Cm9sZF9jcnRjX29sZF9zdGF0ZS4gVG8gbWFrZSBpdCBjbGVhciB0aGVzZSBhcmUgdGhlIG9sZC9u ZXcgc3RhdGVzIGZvcgpvbGRfY3J0Yy4gSW5zdGVhZCBvZiBvbGQvbmV3IHN0YXRlIGZvciB0aGUg bmV3IGNydGMuCgo+ICAKPiAtCQlyZXQgPSBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90 cyhzdGF0ZSwgbWdyLCBzbG90cyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJRFJNX0RFQlVHX0tNUygi ZmFpbGVkIHJlbGVhc2luZyAlZCB2Y3BpIHNsb3RzOiVkXG4iLCBzbG90cywgcmV0KTsKPiAtCQll bHNlCj4gLQkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7 Cj4gLQl9Cj4gLQlyZXR1cm4gcmV0Owo+ICsJaWYgKG5ld19jcnRjKQo+ICsJCXJldHVybiAwOwoK Tm90IHN1cmUgd2h5IHdlIHNob3VsZG4ndCByZWxlYXNlIHRoaXM/IElmIHdlIGhhbmRsZSB0aGlz IGluIGhlbHBlcnMsIGl0CndvdWxkIHJlbW92ZSBwaWxlcyBvZiBzcGVjaWFsIGNhc2luZyBjb2Rl IGhlcmUgSSB0aGluay4gUGx1cyByZW1vdmUKc3BlY2lhbCBjb2RlIGluIHRoZSBobHBlcnMuCgoK PiArCj4gKwlyZXR1cm4gZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RhdGUsIG1n ciwgcG9ydCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGludGVsX21zdF9kaXNhYmxlX2RwKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9k cm1fZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAo+IGlu ZGV4IDNmYWNlYjY2ZjVjYi4uMjM5MmUxMmI2YmNlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJt L2RybV9kcF9tc3RfaGVscGVyLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBl ci5oCj4gQEAgLTQwNiw5ICs0MDYsMTYgQEAgc3RydWN0IGRybV9kcF9wYXlsb2FkIHsKPiAgCj4g ICNkZWZpbmUgdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1 Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKPiAgCj4gK3N0cnVjdCBkcm1fZHBf dmNwaV9hbGxvY2F0aW9uIHsKCkkgdGhpbmsgYSBjb21tZW50IGhlcmUgdGhhdCB0aGlzIHBvaW50 ZXIgaG9sZHMgYSBmdWxsIHJlZmVyZW5jZSAoZXZlbiBwYXN0CndoZW4gdGhlIGNvbm5lY3RvciBp cyB1bnBsdWdnZWQpIHdvdWxkIGJlIGdvb2QuIE90aGVyd2lzZSB0aGUgbG9vcCBpbgpyZWxlYXNl X3ZjcGkgd291bGQgYmUgYnVnZ3kuCgo+ICsJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsK PiArCWludCB2Y3BpOwo+ICsJc3RydWN0IGxpc3RfaGVhZCBuZXh0Owo+ICt9Owo+ICsKPiAgc3Ry dWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgewo+ICAJc3RydWN0IGRybV9wcml2YXRlX3N0 YXRlIGJhc2U7Cj4gLQlpbnQgYXZhaWxfc2xvdHM7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHZjcGlz Owo+ICsJdTggdmNwaV9hbGxvY2F0ZWQ7Cj4gIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1ncjsKPiAgfTsKPiAgCj4gQEAgLTYxOSwxNCArNjI2LDE3IEBAIHZvaWQgZHJtX2RwX21z dF90b3BvbG9neV9tZ3Jfc3VzcGVuZChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1n cik7Cj4gIGludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9yZXN1bWUoc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3IpOwo+ICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0 ZSAqZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKPiAgCQkJCQkJCQkgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IpOwo+IC1pbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAo+IC0JCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1nciwKPiAtCQkJCSAgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgaW50IHBibik7 Cj4gLWludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCj4gLQkJCQkgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21n ciAqbWdyLAo+IC0JCQkJICAgICBpbnQgc2xvdHMpOwo+ICtpbnQgX19tdXN0X2NoZWNrCj4gK2Ry bV9kcF9hdG9taWNfZmluZF92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKPiArCQkJICAgICAgc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCj4gKwkJ CSAgICAgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOwo+ICtpbnQgX19t dXN0X2NoZWNrCj4gK2RybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSwKPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9t Z3IgKm1nciwKPiArCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0KTsKPiAgaW50IGRy bV9kcF9zZW5kX3Bvd2VyX3VwZG93bl9waHkoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdy ICptZ3IsCj4gIAkJCQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91 cCk7Cj4gK2ludCBfX211c3RfY2hlY2sgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiAgCj4gIGV4dGVybiBjb25zdCBzdHJ1Y3QgZHJtX3By aXZhdGVfc3RhdGVfZnVuY3MgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZV9mdW5jczsKPiAgCj4g LS0gCj4gMi4xOS4xCj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50 ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9ub3V2ZWF1Cg==