From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH v14 13/14] drm/i915/dp: Enable Upfront link training for typeC DP support on HSW/BDW/SKL/BXT (DDI platforms) Date: Fri, 09 Sep 2016 10:31:31 +0300 Message-ID: <87k2elv8a4.fsf@intel.com> References: <1473272883-28520-4-git-send-email-manasi.d.navare@intel.com> <1473355350-29955-1-git-send-email-manasi.d.navare@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id F26726E6C5 for ; Fri, 9 Sep 2016 07:31:33 +0000 (UTC) In-Reply-To: <1473355350-29955-1-git-send-email-manasi.d.navare@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Manasi Navare , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAwOCBTZXAgMjAxNiwgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVs LmNvbT4gd3JvdGU6Cj4gRnJvbTogRHVyZ2Fkb3NzIFIgPGR1cmdhZG9zcy5yQGludGVsLmNvbT4K Pgo+IFRvIHN1cHBvcnQgVVNCIHR5cGUgQyBhbHRlcm5hdGUgRFAgbW9kZSwgdGhlIGRpc3BsYXkg ZHJpdmVyIG5lZWRzIHRvCj4ga25vdyB0aGUgbnVtYmVyIG9mIGxhbmVzIHJlcXVpcmVkIGJ5IHRo ZSBEUCBwYW5lbCBhcyB3ZWxsIGFzIG51bWJlcgo+IG9mIGxhbmVzIHRoYXQgY2FuIGJlIHN1cHBv cnRlZCBieSB0aGUgdHlwZS1DIGNhYmxlLiBTb21ldGltZXMsIHRoZQo+IHR5cGUtQyBjYWJsZSBt YXkgbGltaXQgdGhlIGJhbmR3aWR0aCBldmVuIGlmIFBhbmVsIGNhbiBzdXBwb3J0Cj4gbW9yZSBs YW5lcy4gVG8gYWRkcmVzcyB0aGVzZSBzY2VuYXJpb3MsIHRoZSBkaXNwbGF5IGRyaXZlciB3aWxs Cj4gc3RhcnQgbGluayB0cmFpbmluZyB3aXRoIG1heCBsYW5lcywgYW5kIGlmIHRoYXQgZmFpbHMs IHRoZSBkcml2ZXIKPiBmYWxscyBiYWNrIHRvIHgyIGxhbmVzOyBhbmQgcmVwZWF0cyB0aGlzIHBy b2NlZHVyZSBmb3IgYWxsCj4gYmFuZHdpZHRoL2xhbmUgY29uZmlndXJhdGlvbnMuCgpQbGVhc2Ug ZG8gbm90IGNvbWJpbmUgbm9uLWZ1bmN0aW9uYWwgY29kZSBtb3ZlbWVudCB3aXRoIHJlYWwKY2hh bmdlcy4gVGhleSBtdXN0IGJlIHNlcGFyYXRlZC4KCkJSLApKYW5pLgoKCj4KPiAqIFNpbmNlIGxp bmsgdHJhaW5pbmcgaXMgZG9uZSBiZWZvcmUgbW9kZXNldCBvbmx5IHRoZSBwb3J0Cj4gICAoYW5k IG5vdCBwaXBlL3BsYW5lcykgYW5kIGl0cyBhc3NvY2lhdGVkIFBMTHMgYXJlIGVuYWJsZWQuCj4g KiBPbiBEUCBob3RwbHVnOiBEaXJlY3RseSBzdGFydCBsaW5rIHRyYWluaW5nIG9uIHRoZSBEUCBl bmNvZGVyLgo+ICogT24gQ29ubmVjdGVkIGJvb3Qgc2NlbmFyaW9zOiBXaGVuIGJvb3RlZCB3aXRo IGFuIExGUCBhbmQgYSBEUCwKPiAgIHNvbWV0aW1lcyBCSU9TIGJyaW5ncyB1cCBEUC4gSW4gdGhl c2UgY2FzZXMsIHdlIGRpc2FibGUgdGhlCj4gICBjcnRjIGFuZCB0aGVuIGRvIHVwZnJvbnQgbGlu ayB0cmFpbmluZzsgYW5kIGJyaW5nIGl0IGJhY2sgdXAuCj4gKiBBbGwgbG9jYWwgY2hhbmdlcyBt YWRlIGZvciB1cGZyb250IGxpbmsgdHJhaW5pbmcgYXJlIHJlc2V0Cj4gICB0byB0aGVpciBwcmV2 aW91cyB2YWx1ZXMgb25jZSBpdCBpcyBkb25lOyBzbyB0aGF0IHRoZQo+ICAgc3Vic2VxdWVudCBt b2Rlc2V0IGlzIG5vdCBhd2FyZSBvZiB0aGVzZSBjaGFuZ2VzLgo+Cj4gQ2hhbmdlcyBzaW5jZSB2 MTM6Cj4gKiBGaXggc29tZSBpbmRlbnRhdGlvbiBpc3N1ZXMgKE1pa2EgS2Fob2xhKQo+IENoYW5n ZXMgc2luY2UgdjEyOgo+ICogRml4IFJlYmFzZSBpc3N1ZXMgKE1pa2EgS2Fob2xhKQo+IENoYW5n ZXMgc2luY2UgdjExOgo+ICogQ2hhbmdlIHRoZSBmYWxsYmFjayBsaW5rIHJhdGUgbG9naWMgKE1h bmFzaSkKPiBDaGFuZ2VzIHNpbmNlIHYxMDoKPiAqIFVzZSB0aGUgZGRpIGxpbmsgdHJhaW4gZnVu Y3Rpb24gdGhhdCBsb29wcyB0aHJvdWdoIGFsbCB0aGUgbGluayByYXRlcwo+IGFuZCBsYW5lIGNv dW50cyBzdGFydGluZyBmcm9tIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCAoTWFuYXNpKQo+ICogRm9y IHVwZnJvbnQgbGluayB0cmFpbmluZywgc2V0IHRoZSB1cGZyb250IGZsYWcgc28gdGhhdCB0aGUg bGluayBjYW4KPiBiZSBkaXNhYmxlZCBhZnRlciBjYWNoaW5nIHVwZnJvbnQgdmFsdWVzIChNYW5h c2kpCj4gQ2hhbmdlcyBzaW5jZSB2OToKPiAqIENoYW5nZSB0aGUgbWFjcm9zIHRvIHVzZSBkZXZf cHJpdiBpbiBwbGFjZSBvZiBkZXYgKERhdmlkIFdlaW5laGFsbCkKPiBDaGFuZ2VzIHNpbmNlIHY4 Ogo+ICogUmVzZXQgdXBmcm9udCBsYW5lIGNvdW50IGFuZCBsaW5rIHJhdGUgdmFsdWVzIG9uIEhQ RAo+IGZvciBEUCBjb25uZWN0b3IgcGh5c2ljYWwgZGlzY29ubmVjdCAoTWFuYXNpKQo+IENoYW5n ZXMgc2luY2Ugdjc6Cj4gKiBNb3ZlIHRoZSB1cGZyb250IGxpbmsgdHJhaW5pbmcgdG8gaW50ZWxf ZHBfbW9kZV92YWxpZCgpCj4gICB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uIHdpdGggRFAgTVNU IHNpZGViYW5kIGNvbW1zLiAoVmlsbGUpCj4gQ2hhbmdlcyBzaW5jZSB2NjoKPiAqIEZpeCBzb21l IGluaXRpYWxpemF0aW9uIGJ1Z3Mgb24gbGlua19yYXRlIChKaW0gQnJpZGUpCj4gKiBVc2UgbGlu a19yYXRlIChhbmQgbm90IGxpbmtfYncpIGZvciB1cGZyb250IChWaWxsZSkKPiAqIE1ha2UgaW50 ZWxfZHBfdXBmcm9udCooKSBhcyBhIHZmdW5jIChBbmRlcikKPiAqIFRoZSB0cmFpbl9zZXRfdmFs aWQgdmFyaWFibGUgaW4gaW50ZWxfZHAgd2FzIHJlbW92ZWQgZHVlIHRvCj4gICBpc3N1ZXMgaW4g ZmFzdCBsaW5rIHRyYWluaW5nLiBTbywgdG8gaW5kaWNhdGUgdGhlIGxpbmsgdHJhaW4KPiAgIHN0 YXR1cywgbW92ZSB0aGUgY2hhbm5lbF9lcSBpbnNpZGUgaW50ZWxfZHAuCj4gQ2hhbmdlcyBzaW5j ZSB2NToKPiAqIE1vdmVkIHJldHJ5IGxvZ2ljIGluIHVwZnJvbnQgdG8gaW50ZWxfZHAuYyBzbyB0 aGF0IGl0Cj4gICBjYW4gYmUgdXNlZCBmb3IgYWxsIHBsYXRmb3Jtcy4KPiBDaGFuZ2VzIHNpbmNl IHY0Ogo+ICogUmVtb3ZlZCB1c2FnZSBvZiBjcnRjX3N0YXRlIGluIHVwZnJvbnQgbGluayB0cmFp bmluZzsKPiAgIEhlbmNlIG5vIG5lZWQgdG8gZmluZCBmcmVlIGNydGMgdG8gZG8gdXBmcm9udCBu b3cuCj4gKiBSZS1lbmFibGUgY3J0YyBpZiBpdCB3YXMgZGlzYWJsZWQgZm9yIHVwZnJvbnQuCj4g KiBVc2Ugc2VwYXJhdGUgdmFyaWFibGVzIHRvIHRyYWNrIG1heCBsYW5lIGNvdW50Cj4gICBhbmQg bGluayByYXRlIGZvdW5kIGJ5IHVwZnJvbnQsIHdpdGhvdXQgbW9kaWZ5aW5nCj4gICB0aGUgb3Jp Z2luYWwgRFBDRCByZWFkIGZyb20gcGFuZWwuCj4gQ2hhbmdlcyBzaW5jZSB2MzoKPiAqIEZpeGVk IGEgcmV0dXJuIHZhbHVlIG9uIEJYVCBjaGVjawo+ICogUmV3b3JrZWQgb24gdG9wIG9mIGJ4dF9k ZGlfcGxsX3NlbGVjdCBzcGxpdCBmcm9tIEFuZGVyCj4gKiBSZW5hbWVkIGZyb20gZGRpX3VwZnJv bnQgdG8gYnh0X3VwZnJvbnQgc2luY2UgdGhlCj4gICB1cGZyb250IGxvZ2ljIGluY2x1ZGVzIEJY VCBzcGVjaWZpYyBmdW5jdGlvbnMgZm9yIG5vdy4KPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ICogUmVi YXNlZCBvbiB0b3Agb2YgbGF0ZXN0IGRwbGxfbWdyLmMgY29kZSBhbmQKPiAgIGxhdGVzdCBIUEQg cmVsYXRlZCBjbGVhbiB1cHMuCj4gKiBDb3JyZWN0ZWQgcmV0dXJuIHZhbHVlcyBmcm9tIHVwZnJv bnQgKEFuZGVyKQo+ICogQ29ycmVjdGVkIGF0b21pYyBsb2NraW5nIGZvciB1cGZyb250IGluIGlu dGVsX2RwLmMgKFZpbGxlKQo+IENoYW5nZXMgc2luY2UgdjE6Cj4gKiAgYWxsIHBsbCByZWxhdGVk IGZ1bmN0aW9ucyBpbnNpZGUgZGRpLmMKPgo+IFNpZ25lZC1vZmYtYnk6IER1cmdhZG9zcyBSIDxk dXJnYWRvc3MuckBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmltIEJyaWRlIDxqaW0uYnJp ZGVAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFz aS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RkaS5jICAgICAgICAgICAgICB8ICAyMSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcC5jICAgICAgICAgICAgICAgfCAzNzcgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190cmFpbmluZy5jIHwgICAxIC0KPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgICAgIHwgIDE0ICstCj4g IDQgZmlsZXMgY2hhbmdlZCwgMzExIGluc2VydGlvbnMoKyksIDEwMiBkZWxldGlvbnMoLSkKPgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gaW5kZXggMTI3OGRhYS4uNzk3YzNiYiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gQEAgLTE2NzMsNyArMTY3Myw4IEBAIHN0YXRpYyB2 b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy LAo+ICAJcGxsLT5jb25maWcuY3J0Y19tYXNrID0gMDsKPiAgCj4gIAkvKiBJZiBMaW5rIFRyYWlu aW5nIGZhaWxzLCBzZW5kIGEgdWV2ZW50IHRvIGdlbmVyYXRlIGEgaG90cGx1ZyAqLwo+IC0JaWYg KCEoaW50ZWxfZGRpX2xpbmtfdHJhaW4oaW50ZWxfZHAsIGxpbmtfcmF0ZSwgbGFuZV9jb3VudCwg bGlua19tc3QpKSkKPiArCWlmICghKGludGVsX2RkaV9saW5rX3RyYWluKGludGVsX2RwLCBsaW5r X3JhdGUsIGxhbmVfY291bnQsIGxpbmtfbXN0LAo+ICsJCQkJICAgZmFsc2UpKSkKPiAgCQlkcm1f a21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KGVuY29kZXItPmJhc2UuZGV2KTsKPiAgCXBsbC0+Y29u ZmlnID0gdG1wX3BsbF9jb25maWc7Cj4gIH0KPiBAQCAtMjQ2MSw3ICsyNDYyLDcgQEAgaW50ZWxf ZGRpX2dldF9saW5rX2RwbGwoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IGNsb2NrKQo+ ICAKPiAgYm9vbAo+ICBpbnRlbF9kZGlfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwLCBpbnQgbWF4X2xpbmtfcmF0ZSwKPiAtCQkgICAgIHVpbnQ4X3QgbWF4X2xhbmVfY291bnQs IGJvb2wgbGlua19tc3QpCj4gKwkJICAgICB1aW50OF90IG1heF9sYW5lX2NvdW50LCBib29sIGxp bmtfbXN0LCBib29sIGlzX3VwZnJvbnQpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3Ig KmNvbm5lY3RvciA9IGludGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3I7Cj4gIAlzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlciA9IGNvbm5lY3Rvci0+ZW5jb2RlcjsKPiBAQCAtMjUwNyw2ICsy NTA4LDcgQEAgaW50ZWxfZGRpX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwg aW50IG1heF9saW5rX3JhdGUsCj4gIAkJCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwgcGxs KTsKPiAgCQkJcGxsLT5jb25maWcgPSB0bXBfcGxsX2NvbmZpZzsKPiAgCQl9Cj4gKwo+ICAJCWlm IChyZXQpIHsKPiAgCQkJRFJNX0RFQlVHX0tNUygiTGluayBUcmFpbmluZyBzdWNjZXNzZnVsIGF0 IGxpbmsgcmF0ZTogIgo+ICAJCQkJICAgICAgIiVkIGxhbmU6JWRcbiIsIGxpbmtfcmF0ZSwgbGFu ZV9jb3VudCk7Cj4gQEAgLTI1MTUsNiArMjUxNywyMSBAQCBpbnRlbF9kZGlfbGlua190cmFpbihz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgbWF4X2xpbmtfcmF0ZSwKPiAgCX0KPiAgCWlu dGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gIAo+ICsJaWYgKGlzX3VwZnJvbnQp IHsKPiArCQlEUk1fREVCVUdfS01TKCJVcGZyb250IGxpbmsgdHJhaW4gJXM6IGxpbmtfY2xvY2s6 JWQgbGFuZXM6JWRcbiIsCj4gKwkJCSAgICAgIHJldCA/ICJQYXNzZWQiIDogIkZhaWxlZCIsCj4g KwkJCSAgICAgIGxpbmtfcmF0ZSwgbGFuZV9jb3VudCk7Cj4gKwkJLyogRGlzYWJsZSBwb3J0IGZv bGxvd2VkIGJ5IFBMTCBmb3IgbmV4dCByZXRyeS9jbGVhbiB1cCAqLwo+ICsJCWludGVsX2RkaV9w b3N0X2Rpc2FibGUoZW5jb2RlciwgTlVMTCwgTlVMTCk7Cj4gKwkJcGxsLT5mdW5jcy5kaXNhYmxl KGRldl9wcml2LCBwbGwpOwo+ICsJCXBsbC0+Y29uZmlnID0gdG1wX3BsbF9jb25maWc7Cj4gKwkJ aWYgKHJldCkgewo+ICsJCQkvKiBTYXZlIHRoZSB1cGZyb250IHZhbHVlcyAqLwo+ICsJCQlpbnRl bF9kcC0+bWF4X2xhbmVzX3VwZnJvbnQgPSBsYW5lX2NvdW50Owo+ICsJCQlpbnRlbF9kcC0+bWF4 X2xpbmtfcmF0ZV91cGZyb250ID0gbGlua19yYXRlOwo+ICsJCX0KPiArCX0KPiArCj4gIAlpZiAo IWxhbmVfY291bnQpCj4gIAkJRFJNX0VSUk9SKCJMaW5rIFRyYWluaW5nIEZhaWxlZFxuIik7Cj4g IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+IGluZGV4IDg1M2U5N2QuLjNkNzY5NjggMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiBAQCAtMTUzLDEyICsxNTMsMjEgQEAgaW50ZWxfZHBf bWF4X2xpbmtfYncoc3RydWN0IGludGVsX2RwICAqaW50ZWxfZHApCj4gIHN0YXRpYyB1OCBpbnRl bF9kcF9tYXhfbGFuZV9jb3VudChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gIAlz dHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0 KGludGVsX2RwKTsKPiAtCXU4IHNvdXJjZV9tYXgsIHNpbmtfbWF4Owo+ICsJdTggdGVtcCwgc291 cmNlX21heCwgc2lua19tYXg7Cj4gIAo+ICAJc291cmNlX21heCA9IGludGVsX2RpZ19wb3J0LT5t YXhfbGFuZXM7Cj4gIAlzaW5rX21heCA9IGRybV9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcC0+ ZHBjZCk7Cj4gIAo+IC0JcmV0dXJuIG1pbihzb3VyY2VfbWF4LCBzaW5rX21heCk7Cj4gKwl0ZW1w ID0gbWluKHNvdXJjZV9tYXgsIHNpbmtfbWF4KTsKPiArCj4gKwkvKgo+ICsJICogTGltaXQgbWF4 IGxhbmVzIHcuci50IHRvIHRoZSBtYXggdmFsdWUgZm91bmQKPiArCSAqIHVzaW5nIFVwZnJvbnQg bGluayB0cmFpbmluZyBhbHNvLgo+ICsJICovCj4gKwlpZiAoaW50ZWxfZHAtPm1heF9sYW5lc191 cGZyb250KQo+ICsJCXJldHVybiBtaW4odGVtcCwgaW50ZWxfZHAtPm1heF9sYW5lc191cGZyb250 KTsKPiArCWVsc2UKPiArCQlyZXR1cm4gdGVtcDsKPiAgfQo+ICAKPiAgLyoKPiBAQCAtMTkwLDYg KzE5OSwyMzAgQEAgaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShpbnQgbWF4X2xpbmtfY2xvY2ssIGlu dCBtYXhfbGFuZXMpCj4gIAlyZXR1cm4gKG1heF9saW5rX2Nsb2NrICogbWF4X2xhbmVzICogOCkg LyAxMDsKPiAgfQo+ICAKPiArc3RhdGljIGludCBpbnRlbF9kcF91cGZyb250X2NydGNfZGlzYWJs ZShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiArCQkJCQkgc3RydWN0IGRybV9tb2Rlc2V0X2Fj cXVpcmVfY3R4ICpjdHgsCj4gKwkJCQkJIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ICsJc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+YmFz ZS5kZXY7Cj4gKwllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gKwo+ICsJc3RhdGUgPSBk cm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7Cj4gKwlpZiAoIXN0YXRlKQo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCXN0YXRlLT5hY3F1aXJlX2N0eCA9IGN0eDsKPiArCj4gKwljcnRjX3N0 YXRlID0gaW50ZWxfYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiArCWlmIChJ U19FUlIoY3J0Y19zdGF0ZSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGNydGNfc3RhdGUpOwo+ICsJ CWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiAr Cj4gKwlEUk1fREVCVUdfS01TKCIlc2FibGluZyBjcnRjICVjICVzIHVwZnJvbnQgbGluayB0cmFp blxuIiwKPiArCQkJZW5hYmxlID8gIkVuIiA6ICJEaXMiLAo+ICsJCQlwaXBlX25hbWUocGlwZSks Cj4gKwkJCWVuYWJsZSA/ICJhZnRlciIgOiAiYmVmb3JlIik7Cj4gKwo+ICsJY3J0Y19zdGF0ZS0+ YmFzZS5hY3RpdmUgPSBlbmFibGU7Cj4gKwlyZXQgPSBkcm1fYXRvbWljX2NvbW1pdChzdGF0ZSk7 Cj4gKwlpZiAocmV0KQo+ICsJCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cj4gKwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtpbnRlbF9kcF9zaW5rX3JhdGVz KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGNvbnN0IGludCAqKnNpbmtfcmF0ZXMpCj4gK3sK PiArCWlmIChpbnRlbF9kcC0+bnVtX3NpbmtfcmF0ZXMpIHsKPiArCQkqc2lua19yYXRlcyA9IGlu dGVsX2RwLT5zaW5rX3JhdGVzOwo+ICsJCXJldHVybiBpbnRlbF9kcC0+bnVtX3NpbmtfcmF0ZXM7 Cj4gKwl9Cj4gKwo+ICsJKnNpbmtfcmF0ZXMgPSBkZWZhdWx0X3JhdGVzOwo+ICsKPiArCXJldHVy biAoaW50ZWxfZHBfbWF4X2xpbmtfYncoaW50ZWxfZHApID4+IDMpICsgMTsKPiArfQo+ICsKPiAr Ym9vbCBpbnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGRwX3Rv X2RpZ19wb3J0KGludGVsX2RwKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwo+ICsKPiArCS8qIFdhRGlzYWJs ZUhCUjI6c2tsICovCj4gKwlpZiAoSVNfU0tMX1JFVklEKGRldl9wcml2LCAwLCBTS0xfUkVWSURf QjApKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoKElTX0hBU1dFTEwoZGV2X3ByaXYp ICYmICFJU19IU1dfVUxYKGRldl9wcml2KSkgfHwKPiArCSAgICBJU19CUk9BRFdFTEwoZGV2X3By aXYpIHx8IChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpKQo+ICsJCXJldHVybiB0cnVlOwo+ICsJ ZWxzZQo+ICsJCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtpbnRlbF9k cF9zb3VyY2VfcmF0ZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgY29uc3QgaW50ICoqc291 cmNlX3JhdGVzKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9 IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGlnX3BvcnQtPmJhc2UuYmFzZS5kZXYpOwo+ICsJaW50IHNpemU7 Cj4gKwo+ICsJaWYgKElTX0JST1hUT04oZGV2X3ByaXYpKSB7Cj4gKwkJKnNvdXJjZV9yYXRlcyA9 IGJ4dF9yYXRlczsKPiArCQlzaXplID0gQVJSQVlfU0laRShieHRfcmF0ZXMpOwo+ICsJfSBlbHNl IGlmIChJU19TS1lMQUtFKGRldl9wcml2KSB8fCBJU19LQUJZTEFLRShkZXZfcHJpdikpIHsKPiAr CQkqc291cmNlX3JhdGVzID0gc2tsX3JhdGVzOwo+ICsJCXNpemUgPSBBUlJBWV9TSVpFKHNrbF9y YXRlcyk7Cj4gKwl9IGVsc2Ugewo+ICsJCSpzb3VyY2VfcmF0ZXMgPSBkZWZhdWx0X3JhdGVzOwo+ ICsJCXNpemUgPSBBUlJBWV9TSVpFKGRlZmF1bHRfcmF0ZXMpOwo+ICsJfQo+ICsKPiArCS8qIFRo aXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0IDUuNCBpcyBsYXN0IHZhbHVlIGluIHRoZSBhcnJh eSAqLwo+ICsJaWYgKCFpbnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihpbnRlbF9kcCkpCj4g KwkJc2l6ZS0tOwo+ICsKPiArCXJldHVybiBzaXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlu dGVyc2VjdF9yYXRlcyhjb25zdCBpbnQgKnNvdXJjZV9yYXRlcywgaW50IHNvdXJjZV9sZW4sCj4g KwkJCSAgIGNvbnN0IGludCAqc2lua19yYXRlcywgaW50IHNpbmtfbGVuLAo+ICsJCQkgICBpbnQg KmNvbW1vbl9yYXRlcykKPiArewo+ICsJaW50IGkgPSAwLCBqID0gMCwgayA9IDA7Cj4gKwo+ICsJ d2hpbGUgKGkgPCBzb3VyY2VfbGVuICYmIGogPCBzaW5rX2xlbikgewo+ICsJCWlmIChzb3VyY2Vf cmF0ZXNbaV0gPT0gc2lua19yYXRlc1tqXSkgewo+ICsJCQlpZiAoV0FSTl9PTihrID49IERQX01B WF9TVVBQT1JURURfUkFURVMpKQo+ICsJCQkJcmV0dXJuIGs7Cj4gKwkJCWNvbW1vbl9yYXRlc1tr XSA9IHNvdXJjZV9yYXRlc1tpXTsKPiArCQkJKytrOwo+ICsJCQkrK2k7Cj4gKwkJCSsrajsKPiAr CQl9IGVsc2UgaWYgKHNvdXJjZV9yYXRlc1tpXSA8IHNpbmtfcmF0ZXNbal0pIHsKPiArCQkJKytp Owo+ICsJCX0gZWxzZSB7Cj4gKwkJCSsrajsKPiArCQl9Cj4gKwl9Cj4gKwlyZXR1cm4gazsKPiAr fQo+ICsKPiArc3RhdGljIGludCBpbnRlbF9kcF9jb21tb25fcmF0ZXMoc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwKPiArCQkJCSBpbnQgKmNvbW1vbl9yYXRlcykKPiArewo+ICsJY29uc3QgaW50 ICpzb3VyY2VfcmF0ZXMsICpzaW5rX3JhdGVzOwo+ICsJaW50IHNvdXJjZV9sZW4sIHNpbmtfbGVu Owo+ICsKPiArCXNpbmtfbGVuID0gaW50ZWxfZHBfc2lua19yYXRlcyhpbnRlbF9kcCwgJnNpbmtf cmF0ZXMpOwo+ICsKPiArCS8qIENhcCBzaW5rIHJhdGVzIHcuci50IHVwZnJvbnQgdmFsdWVzICov Cj4gKwlpZiAoaW50ZWxfZHAtPm1heF9saW5rX3JhdGVfdXBmcm9udCkgewo+ICsJCWludCBsZW4g PSBzaW5rX2xlbiAtIDE7Cj4gKwo+ICsJCXdoaWxlIChsZW4gPiAwICYmIHNpbmtfcmF0ZXNbbGVu XSA+Cj4gKwkJICAgICAgIGludGVsX2RwLT5tYXhfbGlua19yYXRlX3VwZnJvbnQpCj4gKwkJCWxl bi0tOwo+ICsJCXNpbmtfbGVuID0gbGVuICsgMTsKPiArCX0KPiArCj4gKwlzb3VyY2VfbGVuID0g aW50ZWxfZHBfc291cmNlX3JhdGVzKGludGVsX2RwLCAmc291cmNlX3JhdGVzKTsKPiArCj4gKwly ZXR1cm4gaW50ZXJzZWN0X3JhdGVzKHNvdXJjZV9yYXRlcywgc291cmNlX2xlbiwKPiArCQkJICAg ICAgIHNpbmtfcmF0ZXMsIHNpbmtfbGVuLAo+ICsJCQkgICAgICAgY29tbW9uX3JhdGVzKTsKPiAr fQo+ICsKPiArc3RhdGljIGJvb2wgaW50ZWxfZHBfdXBmcm9udF9saW5rX3RyYWluKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmlu dGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVs X2VuY29kZXIgKmludGVsX2VuY29kZXIgPSAmaW50ZWxfZGlnX3BvcnQtPmJhc2U7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZW5jb2Rlci0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1Y3QgZHJt X21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiArCXN0cnVjdCBkcm1f bW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0 YzsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IE5VTEw7Cj4gKwlzdHJ1Y3QgaW50ZWxfc2hh cmVkX2RwbGwgKnBsbDsKPiArCXN0cnVjdCBpbnRlbF9zaGFyZWRfZHBsbF9jb25maWcgdG1wX3Bs bF9jb25maWc7Cj4gKwlib29sIGRpc2FibGVfZHBsbCA9IGZhbHNlOwo+ICsJaW50IHJldDsKPiAr CWJvb2wgZG9uZSA9IGZhbHNlLCBoYXNfbXN0ID0gZmFsc2U7Cj4gKwl1aW50OF90IG1heF9sYW5l czsKPiArCWludCBjb21tb25fcmF0ZXNbRFBfTUFYX1NVUFBPUlRFRF9SQVRFU10gPSB7fTsKPiAr CWludCBjb21tb25fbGVuOwo+ICsJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dl cl9kb21haW47Cj4gKwo+ICsJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X3Bvd2Vy X2RvbWFpbihpbnRlbF9lbmNvZGVyKTsKPiArCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9w cml2LCBwb3dlcl9kb21haW4pOwo+ICsKPiArCWNvbW1vbl9sZW4gPSBpbnRlbF9kcF9jb21tb25f cmF0ZXMoaW50ZWxfZHAsIGNvbW1vbl9yYXRlcyk7Cj4gKwltYXhfbGFuZXMgPSBpbnRlbF9kcF9t YXhfbGFuZV9jb3VudChpbnRlbF9kcCk7Cj4gKwlpZiAoV0FSTl9PTihjb21tb25fbGVuIDw9IDAp KQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4 LCAwKTsKPiArcmV0cnk6Cj4gKwlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjb25maWctPmNvbm5l Y3Rpb25fbXV0ZXgsICZjdHgpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGV4aXRfZmFpbDsKPiAr Cj4gKwlpZiAoaW50ZWxfZW5jb2Rlci0+YmFzZS5jcnRjKSB7Cj4gKwkJY3J0YyA9IGludGVsX2Vu Y29kZXItPmJhc2UuY3J0YzsKPiArCj4gKwkJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY3J0Yy0+ bXV0ZXgsICZjdHgpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXhpdF9mYWlsOwo+ICsKPiAr CQlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5wcmltYXJ5LT5tdXRleCwgJmN0eCk7Cj4g KwkJaWYgKHJldCkKPiArCQkJZ290byBleGl0X2ZhaWw7Cj4gKwo+ICsJCWludGVsX2NydGMgPSB0 b19pbnRlbF9jcnRjKGNydGMpOwo+ICsJCXBsbCA9IGludGVsX2NydGMtPmNvbmZpZy0+c2hhcmVk X2RwbGw7Cj4gKwkJZGlzYWJsZV9kcGxsID0gdHJ1ZTsKPiArCQloYXNfbXN0ID0gaW50ZWxfY3J0 Y19oYXNfdHlwZShpbnRlbF9jcnRjLT5jb25maWcsCj4gKwkJCQkJICAgICAgSU5URUxfT1VUUFVU X0RQX01TVCk7Cj4gKwkJcmV0ID0gaW50ZWxfZHBfdXBmcm9udF9jcnRjX2Rpc2FibGUoaW50ZWxf Y3J0YywgJmN0eCwgZmFsc2UpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXhpdF9mYWlsOwo+ ICsJfQo+ICsKPiArCW11dGV4X2xvY2soJmRldl9wcml2LT5kcGxsX2xvY2spOwo+ICsJaWYgKGRp c2FibGVfZHBsbCkgewo+ICsJCS8qIENsZWFyIHRoZSBQTEwgY29uZmlnIHN0YXRlICovCj4gKwkJ dG1wX3BsbF9jb25maWcgPSBwbGwtPmNvbmZpZzsKPiArCQlwbGwtPmNvbmZpZy5jcnRjX21hc2sg PSAwOwo+ICsJfQo+ICsKPiArCWRvbmUgPSBpbnRlbF9kcC0+dXBmcm9udF9saW5rX3RyYWluKGlu dGVsX2RwLAo+ICsJCQkJCSAgICBjb21tb25fcmF0ZXNbY29tbW9uX2xlbi0xXSwKPiArCQkJCQkg ICAgbWF4X2xhbmVzLAo+ICsJCQkJCSAgICBoYXNfbXN0LAo+ICsJCQkJCSAgICB0cnVlKTsKPiAr CWlmIChkaXNhYmxlX2RwbGwpCj4gKwkJcGxsLT5jb25maWcgPSB0bXBfcGxsX2NvbmZpZzsKPiAr Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcGxsX2xvY2spOwo+ICsKPiArCWlmIChjcnRj KQo+ICsJCXJldCA9IGludGVsX2RwX3VwZnJvbnRfY3J0Y19kaXNhYmxlKGludGVsX2NydGMsICZj dHgsIHRydWUpOwo+ICsKPiArZXhpdF9mYWlsOgo+ICsJaWYgKHJldCA9PSAtRURFQURMSykgewo+ ICsJCWRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Cj4gKwkJZ290byByZXRyeTsKPiArCX0KPiAr CWRybV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7Cj4gKwlkcm1fbW9kZXNldF9hY3F1aXJlX2Zp bmkoJmN0eCk7Cj4gKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9t YWluKTsKPiArCXJldHVybiBkb25lOwo+ICt9Cj4gKwo+ICBzdGF0aWMgZW51bSBkcm1fbW9kZV9z dGF0dXMKPiAgaW50ZWxfZHBfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ICAJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiBAQCAtMjExLDYg KzQ0NCwxOSBAQCBpbnRlbF9kcF9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gIAkJdGFyZ2V0X2Nsb2NrID0gZml4ZWRfbW9kZS0+Y2xvY2s7Cj4gIAl9Cj4gIAo+ ICsJaWYgKGludGVsX2RwLT51cGZyb250X2xpbmtfdHJhaW4gJiYgIWludGVsX2RwLT51cGZyb250 X2RvbmUpIHsKPiArCQlib29sIGRvX3VwZnJvbnRfbGlua190cmFpbjsKPiArCQkvKiBEbyBub3Qg ZG8gdXBmcm9udCBsaW5rIHRyYWluLCBpZiBpdCBpcyBhIGNvbXBsaWFuY2UKPiArCQkgKiByZXF1 ZXN0Cj4gKwkJICovCj4gKwkJZG9fdXBmcm9udF9saW5rX3RyYWluID0gIWludGVsX2RwLT51cGZy b250X2RvbmUgJiYKPiArCQkJKGludGVsX2RwLT5jb21wbGlhbmNlX3Rlc3RfdHlwZSAhPQo+ICsJ CQkgRFBfVEVTVF9MSU5LX1RSQUlOSU5HKTsKPiArCj4gKwkJaWYgKGRvX3VwZnJvbnRfbGlua190 cmFpbikKPiArCQkJaW50ZWxfZHAtPnVwZnJvbnRfZG9uZSA9IGludGVsX2RwX3VwZnJvbnRfbGlu a190cmFpbihpbnRlbF9kcCk7Cj4gKwl9Cj4gKwo+ICAJbWF4X2xpbmtfY2xvY2sgPSBpbnRlbF9k cF9tYXhfbGlua19yYXRlKGludGVsX2RwKTsKPiAgCW1heF9sYW5lcyA9IGludGVsX2RwX21heF9s YW5lX2NvdW50KGludGVsX2RwKTsKPiAgCj4gQEAgLTEyNTYsNjAgKzE1MDIsNiBAQCBpbnRlbF9k cF9hdXhfaW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBzdHJ1Y3QgaW50ZWxfY29ubmVj dG9yICpjb25uZWN0b3IpCj4gIAlpbnRlbF9kcC0+YXV4LnRyYW5zZmVyID0gaW50ZWxfZHBfYXV4 X3RyYW5zZmVyOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50Cj4gLWludGVsX2RwX3NpbmtfcmF0ZXMo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgY29uc3QgaW50ICoqc2lua19yYXRlcykKPiAtewo+ IC0JaWYgKGludGVsX2RwLT5udW1fc2lua19yYXRlcykgewo+IC0JCSpzaW5rX3JhdGVzID0gaW50 ZWxfZHAtPnNpbmtfcmF0ZXM7Cj4gLQkJcmV0dXJuIGludGVsX2RwLT5udW1fc2lua19yYXRlczsK PiAtCX0KPiAtCj4gLQkqc2lua19yYXRlcyA9IGRlZmF1bHRfcmF0ZXM7Cj4gLQo+IC0JcmV0dXJu IChpbnRlbF9kcF9tYXhfbGlua19idyhpbnRlbF9kcCkgPj4gMykgKyAxOwo+IC19Cj4gLQo+IC1i b29sIGludGVsX2RwX3NvdXJjZV9zdXBwb3J0c19oYnIyKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9f ZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpZ19wb3J0 LT5iYXNlLmJhc2UuZGV2Owo+IC0KPiAtCS8qIFdhRGlzYWJsZUhCUjI6c2tsICovCj4gLQlpZiAo SVNfU0tMX1JFVklEKGRldiwgMCwgU0tMX1JFVklEX0IwKSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4g LQo+IC0JaWYgKChJU19IQVNXRUxMKGRldikgJiYgIUlTX0hTV19VTFgoZGV2KSkgfHwgSVNfQlJP QURXRUxMKGRldikgfHwKPiAtCSAgICAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSkpCj4gLQkJ cmV0dXJuIHRydWU7Cj4gLQllbHNlCj4gLQkJcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50Cj4gLWludGVsX2RwX3NvdXJjZV9yYXRlcyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LCBjb25zdCBpbnQgKipzb3VyY2VfcmF0ZXMpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmRpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRpZ19wb3J0LT5iYXNlLmJhc2UuZGV2Owo+IC0JaW50IHNpemU7Cj4g LQo+IC0JaWYgKElTX0JST1hUT04oZGV2KSkgewo+IC0JCSpzb3VyY2VfcmF0ZXMgPSBieHRfcmF0 ZXM7Cj4gLQkJc2l6ZSA9IEFSUkFZX1NJWkUoYnh0X3JhdGVzKTsKPiAtCX0gZWxzZSBpZiAoSVNf U0tZTEFLRShkZXYpIHx8IElTX0tBQllMQUtFKGRldikpIHsKPiAtCQkqc291cmNlX3JhdGVzID0g c2tsX3JhdGVzOwo+IC0JCXNpemUgPSBBUlJBWV9TSVpFKHNrbF9yYXRlcyk7Cj4gLQl9IGVsc2Ug ewo+IC0JCSpzb3VyY2VfcmF0ZXMgPSBkZWZhdWx0X3JhdGVzOwo+IC0JCXNpemUgPSBBUlJBWV9T SVpFKGRlZmF1bHRfcmF0ZXMpOwo+IC0JfQo+IC0KPiAtCS8qIFRoaXMgZGVwZW5kcyBvbiB0aGUg ZmFjdCB0aGF0IDUuNCBpcyBsYXN0IHZhbHVlIGluIHRoZSBhcnJheSAqLwo+IC0JaWYgKCFpbnRl bF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihpbnRlbF9kcCkpCj4gLQkJc2l6ZS0tOwo+IC0KPiAt CXJldHVybiBzaXplOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZAo+ICBpbnRlbF9kcF9zZXRfY2xv Y2soc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAkJICAgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnKQo+IEBAIC0xMzQzLDQyICsxNTM1LDYgQEAgaW50ZWxfZHBf c2V0X2Nsb2NrKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJfQo+ICB9Cj4gIAo+ IC1zdGF0aWMgaW50IGludGVyc2VjdF9yYXRlcyhjb25zdCBpbnQgKnNvdXJjZV9yYXRlcywgaW50 IHNvdXJjZV9sZW4sCj4gLQkJCSAgIGNvbnN0IGludCAqc2lua19yYXRlcywgaW50IHNpbmtfbGVu LAo+IC0JCQkgICBpbnQgKmNvbW1vbl9yYXRlcykKPiAtewo+IC0JaW50IGkgPSAwLCBqID0gMCwg ayA9IDA7Cj4gLQo+IC0Jd2hpbGUgKGkgPCBzb3VyY2VfbGVuICYmIGogPCBzaW5rX2xlbikgewo+ IC0JCWlmIChzb3VyY2VfcmF0ZXNbaV0gPT0gc2lua19yYXRlc1tqXSkgewo+IC0JCQlpZiAoV0FS Tl9PTihrID49IERQX01BWF9TVVBQT1JURURfUkFURVMpKQo+IC0JCQkJcmV0dXJuIGs7Cj4gLQkJ CWNvbW1vbl9yYXRlc1trXSA9IHNvdXJjZV9yYXRlc1tpXTsKPiAtCQkJKytrOwo+IC0JCQkrK2k7 Cj4gLQkJCSsrajsKPiAtCQl9IGVsc2UgaWYgKHNvdXJjZV9yYXRlc1tpXSA8IHNpbmtfcmF0ZXNb al0pIHsKPiAtCQkJKytpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCSsrajsKPiAtCQl9Cj4gLQl9Cj4g LQlyZXR1cm4gazsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBpbnRlbF9kcF9jb21tb25fcmF0ZXMo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAtCQkJCSBpbnQgKmNvbW1vbl9yYXRlcykKPiAt ewo+IC0JY29uc3QgaW50ICpzb3VyY2VfcmF0ZXMsICpzaW5rX3JhdGVzOwo+IC0JaW50IHNvdXJj ZV9sZW4sIHNpbmtfbGVuOwo+IC0KPiAtCXNpbmtfbGVuID0gaW50ZWxfZHBfc2lua19yYXRlcyhp bnRlbF9kcCwgJnNpbmtfcmF0ZXMpOwo+IC0Jc291cmNlX2xlbiA9IGludGVsX2RwX3NvdXJjZV9y YXRlcyhpbnRlbF9kcCwgJnNvdXJjZV9yYXRlcyk7Cj4gLQo+IC0JcmV0dXJuIGludGVyc2VjdF9y YXRlcyhzb3VyY2VfcmF0ZXMsIHNvdXJjZV9sZW4sCj4gLQkJCSAgICAgICBzaW5rX3JhdGVzLCBz aW5rX2xlbiwKPiAtCQkJICAgICAgIGNvbW1vbl9yYXRlcyk7Cj4gLX0KPiAgCj4gIHN0YXRpYyB2 b2lkIHNucHJpbnRmX2ludF9hcnJheShjaGFyICpzdHIsIHNpemVfdCBsZW4sCj4gIAkJCSAgICAg ICBjb25zdCBpbnQgKmFycmF5LCBpbnQgbmVsZW0pCj4gQEAgLTE0MzYsNiArMTU5Miw5IEBAIGlu dGVsX2RwX21heF9saW5rX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCWludCBy YXRlc1tEUF9NQVhfU1VQUE9SVEVEX1JBVEVTXSA9IHt9Owo+ICAJaW50IGxlbjsKPiAgCj4gKwlp ZiAoaW50ZWxfZHAtPm1heF9saW5rX3JhdGVfdXBmcm9udCkKPiArCQlyZXR1cm4gaW50ZWxfZHAt Pm1heF9saW5rX3JhdGVfdXBmcm9udDsKPiArCj4gIAlsZW4gPSBpbnRlbF9kcF9jb21tb25fcmF0 ZXMoaW50ZWxfZHAsIHJhdGVzKTsKPiAgCWlmIChXQVJOX09OKGxlbiA8PSAwKSkKPiAgCQlyZXR1 cm4gMTYyMDAwOwo+IEBAIC0xNDg4LDcgKzE2NDcsNyBAQCBpbnRlbF9kcF9jb21wdXRlX2NvbmZp ZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCWVudW0gcG9ydCBwb3J0ID0gZHBf dG9fZGlnX3BvcnQoaW50ZWxfZHApLT5wb3J0Owo+ICAJc3RydWN0IGludGVsX2NydGMgKmludGVs X2NydGMgPSB0b19pbnRlbF9jcnRjKHBpcGVfY29uZmlnLT5iYXNlLmNydGMpOwo+ICAJc3RydWN0 IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nv bm5lY3RvcjsKPiAtCWludCBsYW5lX2NvdW50LCBjbG9jazsKPiArCWludCBsYW5lX2NvdW50LCBj bG9jayA9IDA7Cj4gIAlpbnQgbWluX2xhbmVfY291bnQgPSAxOwo+ICAJaW50IG1heF9sYW5lX2Nv dW50ID0gaW50ZWxfZHBfbWF4X2xhbmVfY291bnQoaW50ZWxfZHApOwo+ICAJLyogQ29udmVuaWVu dGx5LCB0aGUgbGluayBCVyBjb25zdGFudHMgYmVjb21lIGluZGljZXMgd2l0aCBhIHNoaWZ0Li4u Ki8KPiBAQCAtMTU2NywxMSArMTcyNiwyNCBAQCBpbnRlbF9kcF9jb21wdXRlX2NvbmZpZyhzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCWZvciAoOyBicHAgPj0gNiozOyBicHAgLT0g MiozKSB7Cj4gIAkJbW9kZV9yYXRlID0gaW50ZWxfZHBfbGlua19yZXF1aXJlZChhZGp1c3RlZF9t b2RlLT5jcnRjX2Nsb2NrLAo+ICAJCQkJCQkgICBicHApOwo+ICsJCWlmICghaXNfZWRwKGludGVs X2RwKSAmJiBpbnRlbF9kcC0+dXBmcm9udF9kb25lKSB7Cj4gKwkJCWNsb2NrID0gbWF4X2Nsb2Nr Owo+ICsJCQlsYW5lX2NvdW50ID0gaW50ZWxfZHAtPm1heF9sYW5lc191cGZyb250Owo+ICsJCQls aW5rX2Nsb2NrID0gaW50ZWxfZHAtPm1heF9saW5rX3JhdGVfdXBmcm9udDsKPiArCQkJbGlua19h dmFpbCA9IGludGVsX2RwX21heF9kYXRhX3JhdGUobGlua19jbG9jaywKPiArCQkJCQkJCSAgICBs YW5lX2NvdW50KTsKPiArCQkJbW9kZV9yYXRlID0gaW50ZWxfZHBfbGlua19yZXF1aXJlZChhZGp1 c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLAo+ICsJCQkJCQkJICAgYnBwKTsKPiArCQkJaWYgKG1vZGVf cmF0ZSA8PSBsaW5rX2F2YWlsKQo+ICsJCQkJZ290byBmb3VuZDsKPiArCQkJZWxzZQo+ICsJCQkJ Y29udGludWU7Cj4gKwkJfQo+ICsKPiAgCQlmb3IgKGNsb2NrID0gbWF4X2Nsb2NrOyBjbG9jayA+ PSBtYXhfY2xvY2s7IGNsb2NrLS0pIHsKPiAgCQkJZm9yIChsYW5lX2NvdW50ID0gbWF4X2xhbmVf Y291bnQ7Cj4gIAkJCSAgICAgbGFuZV9jb3VudCA+PSBtaW5fbGFuZV9jb3VudDsKPiAgCQkJICAg ICBsYW5lX2NvdW50ID4+PSAxKSB7Cj4gLQo+ICAJCQkJbGlua19jbG9jayA9IGNvbW1vbl9yYXRl c1tjbG9ja107Cj4gIAkJCQlsaW5rX2F2YWlsID0gaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShsaW5r X2Nsb2NrLAo+ICAJCQkJCQkJCSAgICBsYW5lX2NvdW50KTsKPiBAQCAtMTYwMCw3ICsxNzcyLDYg QEAgZm91bmQ6Cj4gIAl9Cj4gIAo+ICAJcGlwZV9jb25maWctPmxhbmVfY291bnQgPSBsYW5lX2Nv dW50Owo+IC0KPiAgCXBpcGVfY29uZmlnLT5waXBlX2JwcCA9IGJwcDsKPiAgCXBpcGVfY29uZmln LT5wb3J0X2Nsb2NrID0gY29tbW9uX3JhdGVzW2Nsb2NrXTsKPiAgCj4gQEAgLTQyODQsNyArNDQ1 NSw3IEBAIGludGVsX2RwX2xvbmdfcHVsc2Uoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxf Y29ubmVjdG9yKQo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ ICAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7Cj4gIAllbnVtIGludGVsX2Rpc3Bs YXlfcG93ZXJfZG9tYWluIHBvd2VyX2RvbWFpbjsKPiAtCXU4IHNpbmtfaXJxX3ZlY3RvciA9IDA7 Cj4gKwl1OCBzaW5rX2lycV92ZWN0b3I7Cj4gIAo+ICAJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlz cGxheV9wb3J0X2F1eF9wb3dlcl9kb21haW4oaW50ZWxfZW5jb2Rlcik7Cj4gIAlpbnRlbF9kaXNw bGF5X3Bvd2VyX2dldCh0b19pOTE1KGRldiksIHBvd2VyX2RvbWFpbik7Cj4gQEAgLTQzNzcsOSAr NDU0OCwxMiBAQCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmlu dGVsX2Nvbm5lY3RvcikKPiAgCX0KPiAgCj4gIG91dDoKPiAtCWlmICgoc3RhdHVzICE9IGNvbm5l Y3Rvcl9zdGF0dXNfY29ubmVjdGVkKSAmJgo+IC0JICAgIChpbnRlbF9kcC0+aXNfbXN0ID09IGZh bHNlKSkKPiArCWlmIChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKPiAg CQlpbnRlbF9kcF91bnNldF9lZGlkKGludGVsX2RwKTsKPiArCQlpbnRlbF9kcC0+dXBmcm9udF9k b25lID0gZmFsc2U7Cj4gKwkJaW50ZWxfZHAtPm1heF9sYW5lc191cGZyb250ID0gMDsKPiArCQlp bnRlbF9kcC0+bWF4X2xpbmtfcmF0ZV91cGZyb250ID0gMDsKPiArCX0KPiAgCj4gIAlpbnRlbF9k aXNwbGF5X3Bvd2VyX3B1dCh0b19pOTE1KGRldiksIHBvd2VyX2RvbWFpbik7Cj4gIAlyZXR1cm47 Cj4gQEAgLTU2MjMsNiArNTc5NywxMyBAQCBpbnRlbF9kcF9pbml0X2Nvbm5lY3RvcihzdHJ1Y3Qg aW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwKPiAgCWlmICh0eXBlID09IERSTV9N T0RFX0NPTk5FQ1RPUl9lRFApCj4gIAkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBV VF9FRFA7Cj4gIAo+ICsJLyogSW5pdGlhbGl6ZSB1cGZyb250IGxpbmsgdHJhaW5pbmcgdmZ1bmMg Zm9yIERQICovCj4gKwlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQ KSB7Cj4gKwkJaWYgKElTX0JST1hUT04oZGV2X3ByaXYpIHx8IElTX1NLWUxBS0UoZGV2X3ByaXYp IHx8Cj4gKwkJICAgIElTX0JST0FEV0VMTChkZXZfcHJpdikgfHwgSVNfSEFTV0VMTChkZXZfcHJp dikpCj4gKwkJCWludGVsX2RwLT51cGZyb250X2xpbmtfdHJhaW4gPSBpbnRlbF9kZGlfbGlua190 cmFpbjsKPiArCX0KPiArCj4gIAkvKiBlRFAgb25seSBvbiBwb3J0IEIgYW5kL29yIEMgb24gdmx2 L2NodiAqLwo+ICAJaWYgKFdBUk5fT04oKElTX1ZBTExFWVZJRVcoZGV2KSB8fCBJU19DSEVSUllW SUVXKGRldikpICYmCj4gIAkJICAgIGlzX2VkcChpbnRlbF9kcCkgJiYgcG9ydCAhPSBQT1JUX0Ig JiYgcG9ydCAhPSBQT1JUX0MpKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcF9saW5rX3RyYWluaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9s aW5rX3RyYWluaW5nLmMKPiBpbmRleCBmMWUwOGYwLi5iNmYzODBiIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYwo+IEBAIC0zMDQsNyArMzA0 LDYgQEAgaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICAJaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihpbnRl bF9kcCk7Cj4gIAo+ICAJcmV0dXJuIGludGVsX2RwLT5jaGFubmVsX2VxX3N0YXR1czsKPiAtCj4g IH0KPiAgCj4gIHZvaWQgaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRleCA1Yjk3YTdkNC4uZTVh YjM3NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gQEAgLTg4Miw2ICs4ODIsMTIg QEAgc3RydWN0IGludGVsX2RwIHsKPiAgCWVudW0gaGRtaV9mb3JjZV9hdWRpbyBmb3JjZV9hdWRp bzsKPiAgCWJvb2wgbGltaXRlZF9jb2xvcl9yYW5nZTsKPiAgCWJvb2wgY29sb3JfcmFuZ2VfYXV0 bzsKPiArCj4gKwkvKiBVcGZyb250IGxpbmsgdHJhaW4gcGFyYW1ldGVycyAqLwo+ICsJaW50IG1h eF9saW5rX3JhdGVfdXBmcm9udDsKPiArCXVpbnQ4X3QgbWF4X2xhbmVzX3VwZnJvbnQ7Cj4gKwli b29sIHVwZnJvbnRfZG9uZTsKPiArCj4gIAl1aW50OF90IGRwY2RbRFBfUkVDRUlWRVJfQ0FQX1NJ WkVdOwo+ICAJdWludDhfdCBwc3JfZHBjZFtFRFBfUFNSX1JFQ0VJVkVSX0NBUF9TSVpFXTsKPiAg CXVpbnQ4X3QgZG93bnN0cmVhbV9wb3J0c1tEUF9NQVhfRE9XTlNUUkVBTV9QT1JUU107Cj4gQEAg LTkzOSw2ICs5NDUsMTEgQEAgc3RydWN0IGludGVsX2RwIHsKPiAgCS8qIFRoaXMgaXMgY2FsbGVk IGJlZm9yZSBhIGxpbmsgdHJhaW5pbmcgaXMgc3RhcnRlcmQgKi8KPiAgCXZvaWQgKCpwcmVwYXJl X2xpbmtfcmV0cmFpbikoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7Cj4gIAo+ICsJLyogRm9y IFVwZnJvbnQgbGluayB0cmFpbmluZyAqLwo+ICsJYm9vbCAoKnVwZnJvbnRfbGlua190cmFpbiko c3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50IGNsb2NrLAo+ICsJCQkJICAgdWludDhfdCBs YW5lX2NvdW50LCBib29sIGxpbmtfbXN0LAo+ICsJCQkJICAgYm9vbCBpc191cGZyb250KTsKPiAr Cj4gIAkvKiBEaXNwbGF5cG9ydCBjb21wbGlhbmNlIHRlc3RpbmcgKi8KPiAgCXVuc2lnbmVkIGxv bmcgY29tcGxpYW5jZV90ZXN0X3R5cGU7Cj4gIAl1bnNpZ25lZCBsb25nIGNvbXBsaWFuY2VfdGVz dF9kYXRhOwo+IEBAIC0xMTYxLDcgKzExNzIsOCBAQCB2b2lkIGludGVsX2RkaV9jbG9ja19nZXQo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIHZvaWQgaW50ZWxfZGRpX3NldF92Y19w YXlsb2FkX2FsbG9jKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBzdGF0ZSk7Cj4gIHVpbnQz Ml90IGRkaV9zaWduYWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICBib29s IGludGVsX2RkaV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBtYXhf bGlua19yYXRlLAo+IC0JCQkgIHVpbnQ4X3QgbWF4X2xhbmVfY291bnQsIGJvb2wgbGlua19tc3Qp Owo+ICsJCQkgIHVpbnQ4X3QgbWF4X2xhbmVfY291bnQsIGJvb2wgbGlua19tc3QsCj4gKwkJCSAg Ym9vbCBpc191cGZyb250KTsKPiAgc3RydWN0IGludGVsX3NoYXJlZF9kcGxsICppbnRlbF9kZGlf Z2V0X2xpbmtfZHBsbChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICAJCQkJCQkgIGludCBj bG9jayk7Cj4gIHVuc2lnbmVkIGludCBpbnRlbF9mYl9hbGlnbl9oZWlnaHQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9n eSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K SW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==