From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH v3 5/5] drm/i915: Implement proper fallback training for MST Date: Mon, 12 Mar 2018 15:05:22 -0700 Message-ID: <20180312220522.GC3022@intel.com> References: <20180308232421.14049-1-lyude@redhat.com> <20180309213232.19855-1-lyude@redhat.com> <20180309213232.19855-5-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: <20180309213232.19855-5-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lyude Paul Cc: David Airlie , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXIgMDksIDIwMTggYXQgMDQ6MzI6MzFQTSAtMDUwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiBGb3IgYSB3aGlsZSB3ZSBhY3R1YWxseSBoYXZlbid0IGhhZCBhbnkgd2F5IG9mIHJldHJh aW5pbmcgTVNUIGxpbmtzIHdpdGgKPiBmYWxsYmFjayBsaW5rIHBhcmFtZXRlcnMgbGlrZSB3ZSBk byB3aXRoIFNTVC4gV2hpbGUgdW5jb21tb24sIGNlcnRhaW4KPiBzZXR1cHMgc3VjaCBhcyBteSBD YWxkaWdpdCBUUzMgKyBFVkdBIE1TVCBodWIgcmVxdWlyZSB0aGlzIHNpbmNlCj4gb3RoZXJ3aXNl LCB0aGV5IGVuZCB1cCBnZXR0aW5nIHN0dWNrIGluIGFuIGluZmluaXRlIE1TVCByZXRyYWluaW5n IGxvb3AuCj4gCj4gTVNUIHJldHJhaW5pbmcgaXMgc29tZXdoYXQgZGlmZmVyZW50IHRoZW4gU1NU IHJldHJhaW5pbmcuIFdoaWxlIGl0J3MKPiBwb3NzaWJsZSBkdXJpbmcgdGhlIG5vcm1hbCBsaW5r IHJldHJhaW5pbmcgc2VxdWVuY2UgZm9yIGEgaHViIHRvIGluZGljYXRlCj4gYmFkIGxpbmsgc3Rh dHVzLCBpdCdzIGFsc28gcG9zc2libGUgZm9yIGEgaHViIHRvIG9ubHkgaW5kaWNhdGUgdGhpcwo+ IHN0YXR1cyB0aHJvdWdoIEVTSSBtZXNzYWdlcyBhbmQgaXQncyBwb3NzaWJsZSBmb3IgdGhpcyB0 byBoYXBwZW4gYWZ0ZXIKPiB0aGUgaW5pdGlhbCBsaW5rIHRyYWluaW5nIHN1Y2NlZWRzLiBUaGlz IGNhbiBsZWFkIHRvIGEgcGF0dGVybiB0aGF0Cj4gbG9va3MgbGlrZSB0aGlzOgo+IAo+IC0gVHJh aW4gTVNUIGxpbmsKPiAtIFRyYWluaW5nIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkKPiAtIE1TVCBo dWIgc2V0cyBDaGFubmVsIEVRIGZhaWxlZCBiaXQgaW4gRVNJCj4gLSBSZXRyYWluaW5nIHN0YXJ0 cwo+IC0gUmV0cmFpbmluZyBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5Cj4gLSBNU1QgaHViIHNldHMg Q2hhbm5lbCBFUSBmYWlsZWQgYml0IGluIEVTSSBhZ2Fpbgo+IC0gUmluc2UgYW5kIHJlcGVhdAo+ IAo+IEluIHRoZXNlIHNpdHVhdGlvbnMsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBhY3R1YWxseSB0 cmlnZ2VyIGZhbGxiYWNrCj4gbGluayB0cmFpbmluZyBmcm9tIHRoZSBFU0kgaGFuZGxlciBhcyB3 ZWxsLCBhbG9uZyB3aXRoIHVzaW5nIHRoZSBFU0kKPiBoYW5kbGVyIGR1cmluZyByZXRyYWluaW5n IHRvIGZpZ3VyZSBvdXQgd2hldGhlciBvciBub3Qgb3VyIHJldHJhaW5pbmcKPiBhY3R1YWxseSBz dWNjZWVkZWQuCj4gCj4gVGhpcyBnZXRzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgc2luY2Ugd2Ug aGF2ZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndAo+IGJsb2NrIHRoZSBFU0kgaGFuZGxlciBhdCBh bGwgd2hpbGUgZG9pbmcgcmV0cmFpbmluZy4gSWYgd2UgZG8sIGR1ZSB0bwo+IERpc3BsYXlQb3J0 J3MgZ2VuZXJhbCBpc3N1ZXMgd2l0aCBiZWluZyBzZW5zaXRpdmUgdG8gSVJRIGxhdGVuY3kgbW9z dAo+IE1TVCBodWJzIHdpbGwganVzdCBzdG9wIHJlc3BvbmRpbmcgdG8gdXMgaWYgdGhlaXIgaW50 ZXJydXB0cyBhcmVuJ3QKPiBoYW5kbGVkIGluIGEgdGltZWx5IG1hbm5lci4KPiAKPiBTbzogbW92 ZSByZXRyYWluaW5nIGludG8gaXQncyBvd24gc2VwZXJhdGUgaGFuZGxlci4gUnVubmluZyBpbiBh Cj4gc2VwZXJhdGUgaGFuZGxlciBhbGxvd3MgdXMgdG8gYXZvaWQgc3RhbGxpbmcgdGhlIEVTSSBk dXJpbmcgbGluawo+IHJldHJhaW5pbmcsIGFuZCB3ZSBjYW4gaGF2ZSB0aGUgRVNJIHNpZ25hbCB0 aGF0IHRoZSBjaGFubmVsIEVRIGJpdCB3YXMKPiBjbGVhcmVkIHRocm91Z2ggYSBzaW1wbGUgY29t cGxldGlvbiBzdHJ1Y3QuIEFkZGl0aW9uYWxseSwgd2UgdGFrZSBjYXJlCj4gdG8gc3RpY2sgYXMg bXVjaCBvZiB0aGlzIGludG8gdGhlIFNTVCByZXRyYWluaW5nIHBhdGggYXMgcG9zc2libGUgc2lu Y2UKPiBzaGFyaW5nIGlzIGNhcmluZy4KPgoKVGhhbmtzIGZvciB0aGUgcGF0Y2ggZm9yIE1TVCBy ZXRyYWluaW5nLiBTbyBqdXN0IHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUKY2Fz ZXMgd2hlcmUgTVMgcmV0cmFpbmluZyBpcyBoYW5kbGVkOgoxLiBPbiBsaW5rIHRoZSBmaXJzdCBs aW5rIHRyYWluaW5nIGZhaWx1cmUgZHVyaW5nIHRoZSBtb2Rlc2V0LCB0aGlzIHdvdWxkIGp1c3QK dXNlIFNTVCBtb2Rlc2V0IHJldHJ5IGZ1bmN0aW9uIGFuZCBzZXQgdGhlIGxpbmsgc3RhdHVzIHRv IEJBRCB0aHJvdWdoIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2xvd2VyX2xpbmtfcmF0ZSgpCgoy LiBJbiBjYXNlIHRoYXQgaXQgc3VjZWVkcyBoZXJlIGJ1dCB0aGVuIGxvc2VzIHN5bmNocm9uaXph dGlvbiBpbiBiZXR3ZWVuLCB0aGF0IHRpbWUgaXQgd2lsbCBzZW5kIElSUV9IUEQgYW5kCmluZGlj YXRlIHRoaXMgdGhyb3VnaCBFU0kgYW5kIHRoZSB3YXkgaXRzIGhhbmRsZWQgaXMgdGhyb3VnaCBp bnRlbF9kcF9tc3RfY2hlY2tfbGlua19zdGF0dXMoKSBhbmQgdGhlbiB0aHJvdWdoCnRoZSBzZXBh cmF0ZSBtc3RfcmV0cmFpbl9saW5rIHdvcmsuIEFuZCB0aGlzIHRpbWUgd2UgZmlyc3QgdHJ5IHRv IHJldHJhaW4gYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGZvciA1IHRpbWVzIGFuZAp0aGVuIGZhbGxi YWNrIGFuZCByZXRyeSBieSBzZW5kaW5nIGhvdHBsdWcgdWV2ZW50LgoKSXMgdGhpcyBjb3JyZWN0 PwoKTWFuYXNpCgo+IFNpZ25lZC1vZmYtYnk6IEx5dWRlIFBhdWwgPGx5dWRlQHJlZGhhdC5jb20+ Cj4gQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gQ2M6IFZp bGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgICAgIHwgMzQyICsrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3Qu YyB8ICA0MiArKysrLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICB8ICAg OCArCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzAyIGluc2VydGlvbnMoKyksIDkwIGRlbGV0aW9ucygt KQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+IGluZGV4IDU2NDVhMTk0ZGU5Mi4uNzYyNjY1 MjczMmI2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gQEAgLTQ1LDYgKzQ1LDggQEAK PiAgCj4gICNkZWZpbmUgRFBfRFBSWF9FU0lfTEVOIDE0Cj4gIAo+ICsjZGVmaW5lIERQX01TVF9S RVRSQUlOX1RJTUVPVVQgKG1zZWNzX3RvX2ppZmZpZXMoMTAwKSkKPiArCj4gIC8qIENvbXBsaWFu Y2UgdGVzdCBzdGF0dXMgYml0cyAgKi8KPiAgI2RlZmluZSBJTlRFTF9EUF9SRVNPTFVUSU9OX1NI SUZUX01BU0sJMAo+ICAjZGVmaW5lIElOVEVMX0RQX1JFU09MVVRJT05fUFJFRkVSUkVECSgxIDw8 IElOVEVMX0RQX1JFU09MVVRJT05fU0hJRlRfTUFTSykKPiBAQCAtNDIyNCw2ICs0MjI2LDExOCBA QCBzdGF0aWMgdm9pZCBpbnRlbF9kcF9oYW5kbGVfdGVzdF9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCj4gIAkJRFJNX0RFQlVHX0tNUygiQ291bGQgbm90IHdyaXRlIHRlc3QgcmVz cG9uc2UgdG8gc2lua1xuIik7Cj4gIH0KPiAgCj4gKy8qIEdldCBhIG1hc2sgb2YgdGhlIENSVENz IHRoYXQgYXJlIHJ1bm5pbmcgb24gdGhlIGdpdmVuIGludGVsX2RwIHN0cnVjdC4gRm9yCj4gKyAq IE1TVCwgdGhpcyByZXR1cm5zIGEgY3J0YyBtYXNrIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBDUlRD cyBkcml2aW5nCj4gKyAqIGRvd25zdHJlYW0gc2lua3MsIGZvciBTU1QgaXQganVzdCByZXR1cm5z IGEgbWFzayBvZiB0aGUgYXR0YWNoZWQKPiArICogY29ubmVjdG9yJ3MgQ1JUQy4KPiArICovCj4g K2ludAo+ICtpbnRlbF9kcF9nZXRfY3J0Y19tYXNrKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkcF90b19kaWdfcG9ydChpbnRlbF9k cCktPmJhc2UuYmFzZS5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ ICsJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gKwlzdHJ1Y3QgaW50 ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3I7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7 Cj4gKwlpbnQgY3J0Y19tYXNrID0gMDsKPiArCj4gKwlXQVJOX09OKCFkcm1fbW9kZXNldF9pc19s b2NrZWQoJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCkpOwo+ICsKPiArCWlmIChp bnRlbF9kcC0+aXNfbXN0KSB7Cj4gKwkJc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNv bm5faXRlcjsKPiArCj4gKwkJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4oZGV2LCAmY29u bl9pdGVyKTsKPiArCQlmb3JfZWFjaF9pbnRlbF9jb25uZWN0b3JfaXRlcihpbnRlbF9jb25uZWN0 b3IsICZjb25uX2l0ZXIpIHsKPiArCQkJaWYgKGludGVsX2Nvbm5lY3Rvci0+bXN0X3BvcnQgIT0g aW50ZWxfZHApCj4gKwkJCQljb250aW51ZTsKPiArCj4gKwkJCWNvbm5fc3RhdGUgPSBpbnRlbF9j b25uZWN0b3ItPmJhc2Uuc3RhdGU7Cj4gKwkJCWlmICghY29ubl9zdGF0ZS0+Y3J0YykKPiArCQkJ CWNvbnRpbnVlOwo+ICsKPiArCQkJY3J0Y19tYXNrIHw9IGRybV9jcnRjX21hc2soY29ubl9zdGF0 ZS0+Y3J0Yyk7Cj4gKwkJfQo+ICsJCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9p dGVyKTsKPiArCX0gZWxzZSB7Cj4gKwkJY29ubmVjdG9yID0gJmludGVsX2RwLT5hdHRhY2hlZF9j b25uZWN0b3ItPmJhc2U7Cj4gKwkJY3J0YyA9IGNvbm5lY3Rvci0+c3RhdGUtPmNydGM7Cj4gKwo+ ICsJCWlmIChjcnRjKQo+ICsJCQljcnRjX21hc2sgfD0gZHJtX2NydGNfbWFzayhjcnRjKTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gY3J0Y19tYXNrOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtp bnRlbF9kcF9uZWVkc19saW5rX3JldHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAr CQkJICAgIGNvbnN0IHU4IGVzaVtEUF9EUFJYX0VTSV9MRU5dKQo+ICt7Cj4gKwl1OCBidWZbbWF4 KERQX0xJTktfU1RBVFVTX1NJWkUsIERQX0RQUlhfRVNJX0xFTildOwo+ICsJY29uc3QgdTggKmxp bmtfc3RhdHVzID0gTlVMTDsKPiArCj4gKwlpZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ICsJCWlm ICghaW50ZWxfZHAtPmFjdGl2ZV9tc3RfbGlua3MpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlp ZiAoaW50ZWxfZHAtPm1zdF9saW5rX2lzX2JhZCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiAr CQlpZiAoZXNpKSB7Cj4gKwkJCWxpbmtfc3RhdHVzID0gJmVzaVsxMF07Cj4gKwkJfSBlbHNlIHsK PiArCQkJLyogV2UncmUgbm90IHJ1bm5pbmcgZnJvbSB0aGUgRVNJIGhhbmRsZXIsIHNvIHdhaXQg YQo+ICsJCQkgKiBsaXR0bGUgYml0IHRvIHNlZSBpZiB0aGUgRVNJIGhhbmRsZXIgbGV0cyB1cyBr bm93Cj4gKwkJCSAqIHRoYXQgdGhlIGxpbmsgc3RhdHVzIGlzIE9LCj4gKwkJCSAqLwo+ICsJCQlp ZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAo+ICsJCQkJJmludGVsX2RwLT5tc3RfcmV0 cmFpbl9jb21wbGV0aW9uLAo+ICsJCQkJRFBfTVNUX1JFVFJBSU5fVElNRU9VVCkpCj4gKwkJCQly ZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlpZiAoaW50ZWxfZHAtPmxpbmtf dHJhaW5lZCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtf c3RhdHVzKGludGVsX2RwLCBidWYpKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJCWxpbmtf c3RhdHVzID0gYnVmOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBWYWxpZGF0ZSB0aGUgY2FjaGVk IHZhbHVlcyBvZiBpbnRlbF9kcC0+bGlua19yYXRlIGFuZAo+ICsJICogaW50ZWxfZHAtPmxhbmVf Y291bnQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmV0cmFpbi4KPiArCSAqLwo+ICsJaWYgKCFpbnRl bF9kcF9saW5rX3BhcmFtc192YWxpZChpbnRlbF9kcCwgaW50ZWxfZHAtPmxpbmtfcmF0ZSwKPiAr CQkJCQlpbnRlbF9kcC0+bGFuZV9jb3VudCkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlm IChsaW5rX3N0YXR1cykgewo+ICsJCXJldHVybiAhZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19z dGF0dXMsCj4gKwkJCQkJICAgICBpbnRlbF9kcC0+bGFuZV9jb3VudCk7Cj4gKwl9IGVsc2Ugewo+ ICsJCXJldHVybiB0cnVlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQKPiAr aW50ZWxfZHBfbXN0X2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs Cj4gKwkJCSAgICAgICBjb25zdCB1OCBlc2lbRFBfRFBSWF9FU0lfTEVOXSkKPiArewo+ICsJaWYg KGludGVsX2RwX25lZWRzX2xpbmtfcmV0cmFpbihpbnRlbF9kcCwgZXNpKSkgewo+ICsJCURSTV9E RUJVR19LTVMoIkNoYW5uZWwgRVEgZmFpbGluZ1xuIik7Cj4gKwo+ICsJCWlmICghd29ya19idXN5 KCZpbnRlbF9kcC0+bXN0X3JldHJhaW5fd29yaykpIHsKPiArCQkJcmVpbml0X2NvbXBsZXRpb24o JmludGVsX2RwLT5tc3RfcmV0cmFpbl9jb21wbGV0aW9uKTsKPiArCQkJc2NoZWR1bGVfd29yaygm aW50ZWxfZHAtPm1zdF9yZXRyYWluX3dvcmspOwo+ICsJCQlEUk1fREVCVUdfS01TKCJSZXRyYWlu aW5nIHN0YXJ0ZWRcbiIpOwo+ICsJCX0KPiArCX0gZWxzZSBpZiAod29ya19idXN5KCZpbnRlbF9k cC0+bXN0X3JldHJhaW5fd29yaykgJiYKPiArCQkgICAhY29tcGxldGlvbl9kb25lKCZpbnRlbF9k cC0+bXN0X3JldHJhaW5fY29tcGxldGlvbikpIHsKPiArCQlEUk1fREVCVUdfS01TKCJDaGFubmVs IEVRIHN0YWJsZVxuIik7Cj4gKwkJY29tcGxldGVfYWxsKCZpbnRlbF9kcC0+bXN0X3JldHJhaW5f Y29tcGxldGlvbik7Cj4gKwl9Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQKPiAgaW50ZWxfZHBfY2hl Y2tfbXN0X3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gQEAgLTQyMzcs MTQgKzQzNTEsNyBAQCBpbnRlbF9kcF9jaGVja19tc3Rfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApCj4gIAkJYnJldCA9IGludGVsX2RwX2dldF9zaW5rX2lycV9lc2koaW50ZWxfZHAs IGVzaSk7Cj4gIGdvX2FnYWluOgo+ICAJCWlmIChicmV0ID09IHRydWUpIHsKPiAtCj4gLQkJCS8q IGNoZWNrIGxpbmsgc3RhdHVzIC0gZXNpWzEwXSA9IDB4MjAwYyAqLwo+IC0JCQlpZiAoaW50ZWxf ZHAtPmFjdGl2ZV9tc3RfbGlua3MgJiYKPiAtCQkJICAgICFkcm1fZHBfY2hhbm5lbF9lcV9vaygm ZXNpWzEwXSwgaW50ZWxfZHAtPmxhbmVfY291bnQpKSB7Cj4gLQkJCQlEUk1fREVCVUdfS01TKCJj aGFubmVsIEVRIG5vdCBvaywgcmV0cmFpbmluZ1xuIik7Cj4gLQkJCQlpbnRlbF9kcF9zdGFydF9s aW5rX3RyYWluKGludGVsX2RwKTsKPiAtCQkJCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRl bF9kcCk7Cj4gLQkJCX0KPiArCQkJaW50ZWxfZHBfbXN0X2NoZWNrX2xpbmtfc3RhdHVzKGludGVs X2RwLCBlc2kpOwo+ICAKPiAgCQkJRFJNX0RFQlVHX0tNUygiZ290IGVzaSAlM3BoXG4iLCBlc2kp Owo+ICAJCQlyZXQgPSBkcm1fZHBfbXN0X2hwZF9pcnEoJmludGVsX2RwLT5tc3RfbWdyLCBlc2ks ICZoYW5kbGVkKTsKPiBAQCAtNDI4MSwyOSArNDM4OCw2IEBAIGludGVsX2RwX2NoZWNrX21zdF9z dGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCXJldHVybiAtRUlOVkFMOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgYm9vbAo+IC1pbnRlbF9kcF9uZWVkc19saW5rX3JldHJhaW4oc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0JdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFU VVNfU0laRV07Cj4gLQo+IC0JaWYgKCFpbnRlbF9kcC0+bGlua190cmFpbmVkKQo+IC0JCXJldHVy biBmYWxzZTsKPiAtCj4gLQlpZiAoIWludGVsX2RwX2dldF9saW5rX3N0YXR1cyhpbnRlbF9kcCwg bGlua19zdGF0dXMpKQo+IC0JCXJldHVybiBmYWxzZTsKPiAtCj4gLQkvKgo+IC0JICogVmFsaWRh dGUgdGhlIGNhY2hlZCB2YWx1ZXMgb2YgaW50ZWxfZHAtPmxpbmtfcmF0ZSBhbmQKPiAtCSAqIGlu dGVsX2RwLT5sYW5lX2NvdW50IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJldHJhaW4uCj4gLQkgKi8K PiAtCWlmICghaW50ZWxfZHBfbGlua19wYXJhbXNfdmFsaWQoaW50ZWxfZHAsIGludGVsX2RwLT5s aW5rX3JhdGUsCj4gLQkJCQkJaW50ZWxfZHAtPmxhbmVfY291bnQpKQo+IC0JCXJldHVybiBmYWxz ZTsKPiAtCj4gLQkvKiBSZXRyYWluIGlmIENoYW5uZWwgRVEgb3IgQ1Igbm90IG9rICovCj4gLQly ZXR1cm4gIWRybV9kcF9jaGFubmVsX2VxX29rKGxpbmtfc3RhdHVzLCBpbnRlbF9kcC0+bGFuZV9j b3VudCk7Cj4gLX0KPiAtCj4gIC8qCj4gICAqIElmIGRpc3BsYXkgaXMgbm93IGNvbm5lY3RlZCBj aGVjayBsaW5rcyBzdGF0dXMsCj4gICAqIHRoZXJlIGhhcyBiZWVuIGtub3duIGlzc3VlcyBvZiBs aW5rIGxvc3MgdHJpZ2dlcmluZwo+IEBAIC00MzE5LDY0ICs0NDAzLDc4IEBAIGludGVsX2RwX25l ZWRzX2xpbmtfcmV0cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICBpbnQgaW50ZWxf ZHBfcmV0cmFpbl9saW5rKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICAJCQkgIHN0 cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2UpOwo+IC0Jc3RydWN0 IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rv cjsKPiAtCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwo+IC0Jc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Cj4gLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0 YzsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCXN0cnVjdCBpbnRlbF9jcnRjICppbnRl bF9jcnRjOwo+ICsJaW50IGNydGNfbWFzaywgcmV0cnlfY291bnQgPSAwOwo+ICAJaW50IHJldDsK PiAgCj4gLQkvKiBGSVhNRSBoYW5kbGUgdGhlIE1TVCBjb25uZWN0b3JzIGFzIHdlbGwgKi8KPiAt Cj4gLQlpZiAoIWNvbm5lY3RvciB8fCBjb25uZWN0b3ItPmJhc2Uuc3RhdHVzICE9IGNvbm5lY3Rv cl9zdGF0dXNfY29ubmVjdGVkKQo+IC0JCXJldHVybiAwOwo+IC0KPiAgCXJldCA9IGRybV9tb2Rl c2V0X2xvY2soJmRldl9wcml2LT5kcm0ubW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKPiAg CQkJICAgICAgIGN0eCk7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JY29u bl9zdGF0ZSA9IGNvbm5lY3Rvci0+YmFzZS5zdGF0ZTsKPiAtCj4gLQljcnRjID0gdG9faW50ZWxf Y3J0Yyhjb25uX3N0YXRlLT5jcnRjKTsKPiAtCWlmICghY3J0YykKPiAtCQlyZXR1cm4gMDsKPiAr CWNydGNfbWFzayA9IGludGVsX2RwX2dldF9jcnRjX21hc2soaW50ZWxfZHApOwo+ICsJZm9yX2Vh Y2hfaW50ZWxfY3J0Y19tYXNrKGRldiwgaW50ZWxfY3J0YywgY3J0Y19tYXNrKSB7Cj4gKwkJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJCXN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICppbnRlbF9jcnRjX3N0YXRlOwo+ICAKPiAtCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNy dGMtPmJhc2UubXV0ZXgsIGN0eCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwkJ Y3J0YyA9ICZpbnRlbF9jcnRjLT5iYXNlOwo+ICsJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNy dGMtPm11dGV4LCBjdHgpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gIAo+IC0J Y3J0Y19zdGF0ZSA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+YmFzZS5zdGF0ZSk7Cj4gKwkJ Y3J0Y19zdGF0ZSA9IGNydGMtPnN0YXRlOwo+ICsJCWludGVsX2NydGNfc3RhdGUgPSB0b19pbnRl bF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwo+ICsJCVdBUk5fT04oIWludGVsX2NydGNfaGFzX2Rw X2VuY29kZXIoaW50ZWxfY3J0Y19zdGF0ZSkpOwo+ICAKPiAtCVdBUk5fT04oIWludGVsX2NydGNf aGFzX2RwX2VuY29kZXIoY3J0Y19zdGF0ZSkpOwo+ICsJCWlmIChjcnRjX3N0YXRlLT5jb21taXQg JiYKPiArCQkgICAgIXRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZjcnRjX3N0YXRlLT5jb21taXQt Pmh3X2RvbmUpKQo+ICsJCQlyZXR1cm4gMDsKPiArCX0KPiAgCj4gLQlpZiAoIWNydGNfc3RhdGUt PmJhc2UuYWN0aXZlKQo+ICsJaWYgKCFpbnRlbF9kcF9uZWVkc19saW5rX3JldHJhaW4oaW50ZWxf ZHAsIE5VTEwpKQo+ICAJCXJldHVybiAwOwo+ICAKPiAtCWlmIChjb25uX3N0YXRlLT5jb21taXQg JiYKPiAtCSAgICAhdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJmNvbm5fc3RhdGUtPmNvbW1pdC0+ aHdfZG9uZSkpCj4gLQkJcmV0dXJuIDA7Cj4gKwlmb3JfZWFjaF9pbnRlbF9jcnRjX21hc2soZGV2 LCBpbnRlbF9jcnRjLCBjcnRjX21hc2spIHsKPiArCQlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5kZXJy dW5fcmVwb3J0aW5nKAo+ICsJCSAgICBkZXZfcHJpdiwgaW50ZWxfY3J0Yy0+cGlwZSwgZmFsc2Up Owo+ICAKPiAtCWlmICghaW50ZWxfZHBfbmVlZHNfbGlua19yZXRyYWluKGludGVsX2RwKSkKPiAt CQlyZXR1cm4gMDsKPiArCQlpZiAoaW50ZWxfY3J0Yy0+Y29uZmlnLT5oYXNfcGNoX2VuY29kZXIp IHsKPiArCQkJaW50ZWxfc2V0X3BjaF9maWZvX3VuZGVycnVuX3JlcG9ydGluZygKPiArCQkJICAg IGRldl9wcml2LCBpbnRlbF9jcnRjX3BjaF90cmFuc2NvZGVyKGludGVsX2NydGMpLAo+ICsJCQkg ICAgZmFsc2UpOwo+ICsJCX0KPiArCX0KPiAgCj4gLQkvKiBTdXBwcmVzcyB1bmRlcnJ1bnMgY2F1 c2VkIGJ5IHJlLXRyYWluaW5nICovCj4gLQlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5kZXJydW5fcmVw b3J0aW5nKGRldl9wcml2LCBjcnRjLT5waXBlLCBmYWxzZSk7Cj4gLQlpZiAoY3J0Yy0+Y29uZmln LT5oYXNfcGNoX2VuY29kZXIpCj4gLQkJaW50ZWxfc2V0X3BjaF9maWZvX3VuZGVycnVuX3JlcG9y dGluZyhkZXZfcHJpdiwKPiAtCQkJCQkJICAgICAgaW50ZWxfY3J0Y19wY2hfdHJhbnNjb2Rlcihj cnRjKSwgZmFsc2UpOwo+ICsJZG8gewo+ICsJCWlmICgrK3JldHJ5X2NvdW50ID4gNSkgewo+ICsJ CQlEUk1fREVCVUdfS01TKCJUb28gbWFueSByZXRyaWVzLCBjYW4ndCByZXRyYWluXG4iKTsKPiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICAKPiAtCWludGVsX2RwX3N0YXJ0X2xpbmtfdHJh aW4oaW50ZWxfZHApOwo+IC0JaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsKPiAr CQlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsKPiArCQlpbnRlbF9kcF9zdG9w X2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ICsJfSB3aGlsZSAoaW50ZWxfZHBfbmVlZHNfbGlua19y ZXRyYWluKGludGVsX2RwLCBOVUxMKSk7Cj4gKwo+ICsJLyogV2FpdCBmb3IgdGhpbmdzIHRvIGJl Y29tZSBzdGFibGUgKi8KPiArCWZvcl9lYWNoX2ludGVsX2NydGNfbWFzayhkZXYsIGludGVsX2Ny dGMsIGNydGNfbWFzaykKPiArCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2X3ByaXYsIGludGVs X2NydGMtPnBpcGUpOwo+ICAKPiAtCS8qIEtlZXAgdW5kZXJydW4gcmVwb3J0aW5nIGRpc2FibGVk IHVudGlsIHRoaW5ncyBhcmUgc3RhYmxlICovCj4gLQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2 X3ByaXYsIGNydGMtPnBpcGUpOwo+ICsJLyogTm93IHRoYXQgd2Uga25vdyBldmVyeXRoaW5nIGlz IE9LLCBmaW5hbGx5IHJlLWVuYWJsZSB1bmRlcnJ1bgo+ICsJICogcmVwb3J0aW5nICovCj4gKwlm b3JfZWFjaF9pbnRlbF9jcnRjX21hc2soZGV2LCBpbnRlbF9jcnRjLCBjcnRjX21hc2spIHsKPiAr CQlpbnRlbF9zZXRfY3B1X2ZpZm9fdW5kZXJydW5fcmVwb3J0aW5nKAo+ICsJCSAgICBkZXZfcHJp diwgaW50ZWxfY3J0Yy0+cGlwZSwgdHJ1ZSk7Cj4gIAo+IC0JaW50ZWxfc2V0X2NwdV9maWZvX3Vu ZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgY3J0Yy0+cGlwZSwgdHJ1ZSk7Cj4gLQlpZiAoY3J0 Yy0+Y29uZmlnLT5oYXNfcGNoX2VuY29kZXIpCj4gLQkJaW50ZWxfc2V0X3BjaF9maWZvX3VuZGVy cnVuX3JlcG9ydGluZyhkZXZfcHJpdiwKPiAtCQkJCQkJICAgICAgaW50ZWxfY3J0Y19wY2hfdHJh bnNjb2RlcihjcnRjKSwgdHJ1ZSk7Cj4gKwkJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+aGFzX3Bj aF9lbmNvZGVyKSB7Cj4gKwkJCWludGVsX3NldF9wY2hfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmco Cj4gKwkJCSAgICBkZXZfcHJpdiwgaW50ZWxfY3J0Y19wY2hfdHJhbnNjb2RlcihpbnRlbF9jcnRj KSwKPiArCQkJICAgIHRydWUpOwo+ICsJCX0KPiArCX0KPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ IEBAIC00NDAyLDYgKzQ1MDAsMTAgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfaG90cGx1ZyhzdHJ1 Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCj4gIAljaGFuZ2VkID0gaW50ZWxfZW5jb2Rl cl9ob3RwbHVnKGVuY29kZXIsIGNvbm5lY3Rvcik7Cj4gIAo+ICsJLyogV2UgZG9uJ3Qgd2FudCB0 byBlbmQgdXAgdHJ5aW5nIHRvIHJldHJhaW4gTVNUIGxpbmtzISAqLwo+ICsJaWYgKGVuY29kZXIg JiYgZW5jX3RvX2ludGVsX2RwKCZlbmNvZGVyLT5iYXNlKS0+aXNfbXN0KQo+ICsJCXJldHVybiBj aGFuZ2VkOwo+ICsKPiAgCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKPiAgCj4g IAlmb3IgKDs7KSB7Cj4gQEAgLTQ0NzgsNyArNDU4MCw3IEBAIGludGVsX2RwX3Nob3J0X3B1bHNl KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIAl9Cj4gIAo+ICAJLyogZGVmZXIgdG8gdGhl IGhvdHBsdWcgd29yayBmb3IgbGluayByZXRyYWluaW5nIGlmIG5lZWRlZCAqLwo+IC0JaWYgKGlu dGVsX2RwX25lZWRzX2xpbmtfcmV0cmFpbihpbnRlbF9kcCkpCj4gKwlpZiAoaW50ZWxfZHBfbmVl ZHNfbGlua19yZXRyYWluKGludGVsX2RwLCBOVUxMKSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ ICAJaWYgKGludGVsX2RwLT5jb21wbGlhbmNlLnRlc3RfdHlwZSA9PSBEUF9URVNUX0xJTktfVFJB SU5JTkcpIHsKPiBAQCAtNjI2NiwyNSArNjM2OCw5OCBAQCBzdGF0aWMgYm9vbCBpbnRlbF9lZHBf aW5pdF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAgCXJldHVybiBmYWxz ZTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgaW50ZWxfZHBfbXN0X3JldHJhaW5fbGlua193b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IGRybV9tb2Rlc2V0X2Fj cXVpcmVfY3R4IGN0eDsKPiArCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBjb250YWluZXJf b2Yod29yaywgdHlwZW9mKCppbnRlbF9kcCksCj4gKwkJCQkJCSBtc3RfcmV0cmFpbl93b3JrKTsK PiArCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0 KGludGVsX2RwKS0+YmFzZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9lbmNv ZGVyLT5iYXNlLmRldjsKPiArCWludCByZXQ7Cj4gKwlib29sIGhhZF9lcnJvciA9IGZhbHNlOwo+ ICsKPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5pdCgmY3R4LCAwKTsKPiArCj4gKwlmb3IgKDs7 KSB7Cj4gKwkJcmV0ID0gaW50ZWxfZHBfcmV0cmFpbl9saW5rKGludGVsX2VuY29kZXIsICZjdHgp Owo+ICsJCWlmIChyZXQgPT0gLUVERUFETEspIHsKPiArCQkJZHJtX21vZGVzZXRfYmFja29mZigm Y3R4KTsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlicmVhazsKPiArCX0KPiArCWlm ICghcmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0tNUygiUmV0cmFpbiBjb21wbGV0ZVxuIik7Cj4gKwkJ Z290byBvdXQ7Cj4gKwl9IGVsc2UgaWYgKHJldCA9PSAtRUlPKSB7Cj4gKwkJRFJNX0VSUk9SKCJJ TyBlcnJvciB3aXRoIHNpbmsgZHVyaW5nIHJldHJhaW4/IEFib3J0aW5nXG4iKTsKPiArCQloYWRf ZXJyb3IgPSB0cnVlOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCURSTV9ERUJVR19LTVMo IlJldHJhaW5pbmcgZmFpbGVkIHdpdGggJWQsIG1hcmtpbmcgbGluayBzdGF0dXMgYXMgYmFkXG4i LAo+ICsJCSAgICAgIHJldCk7Cj4gKwo+ICsJLyogV2UgcmFuIG91dCBvZiByZXRyaWVzLCBpZiB0 aGUgc2luayBoYXNuJ3QgY2hhbmdlZCB0aGUgbGluayByYXRlIGluCj4gKwkgKiBpdCdzIGRwY2Qg eWV0IGZvcmNlIHVzIHRvIGZhbGxiYWNrIHRvIGEgbG93ZXIgbGluayByYXRlL2NvdW50ICovCj4g KwlpZiAocmV0ID09IC1FSU5WQUwpIHsKPiArCQlyZXQgPSBpbnRlbF9kcF9nZXRfZHBjZChpbnRl bF9kcCk7Cj4gKwkJaWYgKCFyZXQpIHsKPiArCQkJRFJNX0VSUk9SKCJJTyBlcnJvciB3aGlsZSBy ZWFkaW5nIGRwY2QgZnJvbSBzaW5rXG4iKTsKPiArCQkJaGFkX2Vycm9yID0gdHJ1ZTsKPiArCQkJ Z290byBvdXQ7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaW50ZWxfZHAtPmxpbmtfcmF0ZSA9PSBpbnRl bF9kcF9tYXhfbGlua19yYXRlKGludGVsX2RwKSAmJgo+ICsJCSAgICBpbnRlbF9kcC0+bGFuZV9j b3VudCA9PSBpbnRlbF9kcF9tYXhfbGFuZV9jb3VudChpbnRlbF9kcCkpIHsKPiArCQkJaW50ZWxf ZHBfZ2V0X2xpbmtfdHJhaW5fZmFsbGJhY2tfdmFsdWVzKAo+ICsJCQkgICAgaW50ZWxfZHAsIGlu dGVsX2RwX21heF9saW5rX3JhdGUoaW50ZWxfZHApLAo+ICsJCQkgICAgaW50ZWxfZHBfbWF4X2xh bmVfY291bnQoaW50ZWxfZHApKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaW50ZWxfZHAtPm1zdF9s aW5rX2lzX2JhZCA9IHRydWU7Cj4gKwlpbnRlbF9kcC0+bXN0X2J3X2xvY2tlZCA9IGZhbHNlOwo+ ICsJc2NoZWR1bGVfd29yaygmaW50ZWxfZHAtPm1vZGVzZXRfcmV0cnlfd29yayk7Cj4gK291dDoK PiArCWRybV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7Cj4gKwlkcm1fbW9kZXNldF9hY3F1aXJl X2ZpbmkoJmN0eCk7Cj4gKwlpZiAoaGFkX2Vycm9yKQo+ICsJCWRybV9rbXNfaGVscGVyX2hvdHBs dWdfZXZlbnQoZGV2KTsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgaW50ZWxfZHBfbW9kZXNldF9y ZXRyeV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgewo+ICAJc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKmludGVsX2RwKSwK PiAgCQkJCQkJIG1vZGVzZXRfcmV0cnlfd29yayk7Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yID0gJmludGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3ItPmJhc2U7Cj4gKwlzdHJ1 Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFz ZS5iYXNlLmRldjsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gIAo+IC0J RFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc11cbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCwK PiAtCQkgICAgICBjb25uZWN0b3ItPm5hbWUpOwo+ICsJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2Nv bmZpZy5tdXRleCk7Cj4gIAo+IC0JLyogR3JhYiB0aGUgbG9ja3MgYmVmb3JlIGNoYW5naW5nIGNv bm5lY3RvciBwcm9wZXJ0eSovCj4gLQltdXRleF9sb2NrKCZjb25uZWN0b3ItPmRldi0+bW9kZV9j b25maWcubXV0ZXgpOwo+IC0JLyogU2V0IGNvbm5lY3RvciBsaW5rIHN0YXR1cyB0byBCQUQgYW5k IHNlbmQgYSBVZXZlbnQgdG8gbm90aWZ5Cj4gLQkgKiB1c2Vyc3BhY2UgdG8gZG8gYSBtb2Rlc2V0 Lgo+ICsJLyogU2V0IHRoZSBjb25uZWN0b3IgbGluayBzdGF0dXMgb2YgYWxsIChwb3NzaWJseSBk b3duc3RyZWFtKSBwb3J0cyB0bwo+ICsJICogQkFEIGFuZCBzZW5kIGEgVWV2ZW50IHRvIG5vdGlm eSB1c2Vyc3BhY2UgdG8gZG8gYSBtb2Rlc2V0Lgo+ICAJICovCj4gLQlkcm1fbW9kZV9jb25uZWN0 b3Jfc2V0X2xpbmtfc3RhdHVzX3Byb3BlcnR5KGNvbm5lY3RvciwKPiAtCQkJCQkJICAgIERSTV9N T0RFX0xJTktfU1RBVFVTX0JBRCk7Cj4gLQltdXRleF91bmxvY2soJmNvbm5lY3Rvci0+ZGV2LT5t b2RlX2NvbmZpZy5tdXRleCk7Cj4gKwlpZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ICsJCWRybV9k cF9tc3RfdG9wb2xvZ3lfbWdyX2xvd2VyX2xpbmtfcmF0ZSgKPiArCQkgICAgJmludGVsX2RwLT5t c3RfbWdyLAo+ICsJCSAgICBpbnRlbF9kcF9tYXhfbGlua19yYXRlKGludGVsX2RwKSwKPiArCQkg ICAgaW50ZWxfZHBfbWF4X2xhbmVfY291bnQoaW50ZWxfZHApKTsKPiArCX0gZWxzZSB7Cj4gKwkJ Y29ubmVjdG9yID0gJmludGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3ItPmJhc2U7Cj4gKwo+ICsJ CURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAo+ICsJCQkgICAgICBjb25uZWN0 b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSk7Cj4gKwkJZHJtX21vZGVfY29ubmVjdG9yX3Nl dF9saW5rX3N0YXR1c19wcm9wZXJ0eSgKPiArCQkgICAgY29ubmVjdG9yLCBEUk1fTU9ERV9MSU5L X1NUQVRVU19CQUQpOwo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZp Zy5tdXRleCk7Cj4gKwo+ICAJLyogU2VuZCBIb3RwbHVnIHVldmVudCBzbyB1c2Vyc3BhY2UgY2Fu IHJlcHJvYmUgKi8KPiAtCWRybV9rbXNfaGVscGVyX2hvdHBsdWdfZXZlbnQoY29ubmVjdG9yLT5k ZXYpOwo+ICsJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChkZXYpOwo+ICB9Cj4gIAo+ICBi b29sCj4gQEAgLTYzMDIsNiArNjQ3Nyw5IEBAIGludGVsX2RwX2luaXRfY29ubmVjdG9yKHN0cnVj dCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ICAJLyogSW5pdGlhbGl6ZSB0 aGUgd29yayBmb3IgbW9kZXNldCBpbiBjYXNlIG9mIGxpbmsgdHJhaW4gZmFpbHVyZSAqLwo+ICAJ SU5JVF9XT1JLKCZpbnRlbF9kcC0+bW9kZXNldF9yZXRyeV93b3JrLAo+ICAJCSAgaW50ZWxfZHBf bW9kZXNldF9yZXRyeV93b3JrX2ZuKTsKPiArCUlOSVRfV09SSygmaW50ZWxfZHAtPm1zdF9yZXRy YWluX3dvcmssCj4gKwkJICBpbnRlbF9kcF9tc3RfcmV0cmFpbl9saW5rX3dvcmspOwo+ICsJaW5p dF9jb21wbGV0aW9uKCZpbnRlbF9kcC0+bXN0X3JldHJhaW5fY29tcGxldGlvbik7Cj4gIAo+ICAJ aWYgKFdBUk4oaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lcyA8IDEsCj4gIAkJICJOb3QgZW5vdWdo IGxhbmVzICglZCkgZm9yIERQIG9uIHBvcnQgJWNcbiIsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwX21zdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHBfbXN0LmMKPiBpbmRleCBjMDU1MzQ1NmIxOGUuLjMxMjAyZjgzOGU4OSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9tc3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCj4gQEAgLTExMCwyMSArMTEwLDMyIEBAIHN0YXRpYyBp bnQgaW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ICAJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwo+ICAJ c3RydWN0IGRybV9jcnRjICpvbGRfY3J0YzsKPiAgCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwo+ICsJc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ICAJaW50IHNsb3RzLCByZXQgPSAwOwo+ICsJYm9v bCBjb3VsZF9yZXRyYWluID0gZmFsc2U7Cj4gKwo+ICsJaWYgKG5ld19jb25uX3N0YXRlLT5jcnRj KSB7Cj4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKAo+ICsJ CSAgICBzdGF0ZSwgbmV3X2Nvbm5fc3RhdGUtPmNydGMpOwo+ICsJCWlmIChjcnRjX3N0YXRlICYm IGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3RhdGUpKQo+ICsJCQljb3VsZF9y ZXRyYWluID0gdHJ1ZTsKPiArCX0KPiAgCj4gIAlvbGRfY29ubl9zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X29sZF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gIAlvbGRfY3J0YyA9 IG9sZF9jb25uX3N0YXRlLT5jcnRjOwo+ICAJaWYgKCFvbGRfY3J0YykKPiAtCQlyZXR1cm4gcmV0 Owo+ICsJCWdvdG8gb3V0Owo+ICAKPiAgCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdf Y3J0Y19zdGF0ZShzdGF0ZSwgb2xkX2NydGMpOwo+IC0Jc2xvdHMgPSB0b19pbnRlbF9jcnRjX3N0 YXRlKGNydGNfc3RhdGUpLT5kcF9tX24udHU7Cj4gLQlpZiAoZHJtX2F0b21pY19jcnRjX25lZWRz X21vZGVzZXQoY3J0Y19zdGF0ZSkgJiYgc2xvdHMgPiAwKSB7Cj4gLQkJc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfbWdyICptZ3I7Cj4gLQkJc3RydWN0IGRybV9lbmNvZGVyICpvbGRfZW5jb2Rl cjsKPiArCWlmICghZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkpCj4g KwkJZ290byBvdXQ7Cj4gKwljb3VsZF9yZXRyYWluID0gdHJ1ZTsKPiAgCj4gLQkJb2xkX2VuY29k ZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+IC0JCW1nciA9ICZlbmNfdG9fbXN0 KG9sZF9lbmNvZGVyKS0+cHJpbWFyeS0+ZHAubXN0X21ncjsKPiArCXNsb3RzID0gdG9faW50ZWxf Y3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ZHBfbV9uLnR1Owo+ICsJaWYgKHNsb3RzID4gMCkgewo+ ICsJCWVuY29kZXIgPSBvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+ICsJCW1nciA9ICZl bmNfdG9fbXN0KGVuY29kZXIpLT5wcmltYXJ5LT5kcC5tc3RfbWdyOwo+ICAKPiAgCQlyZXQgPSBk cm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdGF0ZSwgbWdyLCBzbG90cyk7Cj4gIAkJ aWYgKHJldCkKPiBAQCAtMTMyLDYgKzE0MywxOCBAQCBzdGF0aWMgaW50IGludGVsX2RwX21zdF9h dG9taWNfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiAgCQllbHNlCj4g IAkJCXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7Cj4gIAl9 Cj4gKwo+ICtvdXQ6Cj4gKwlpZiAoY291bGRfcmV0cmFpbiAmJgo+ICsJICAgIG9sZF9jb25uX3N0 YXRlLT5saW5rX3N0YXR1cyA9PSBEUk1fTU9ERV9MSU5LX1NUQVRVU19CQUQpIHsKPiArCQlpZiAo bmV3X2Nvbm5fc3RhdGUtPmJlc3RfZW5jb2RlcikKPiArCQkJZW5jb2RlciA9IG5ld19jb25uX3N0 YXRlLT5iZXN0X2VuY29kZXI7Cj4gKwkJZWxzZQo+ICsJCQllbmNvZGVyID0gb2xkX2Nvbm5fc3Rh dGUtPmJlc3RfZW5jb2RlcjsKPiArCj4gKwkJbWdyID0gJmVuY190b19tc3QoZW5jb2RlciktPnBy aW1hcnktPmRwLm1zdF9tZ3I7Cj4gKwkJcmV0ID0gZHJtX2F0b21pY19kcF9tc3RfcmV0cmFpbl90 b3BvbG9neShzdGF0ZSwgbWdyKTsKPiArCX0KPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gQEAg LTE4Niw5ICsyMDksMTIgQEAgc3RhdGljIHZvaWQgaW50ZWxfbXN0X3Bvc3RfZGlzYWJsZV9kcChz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCWludGVsX2RwLT5hY3RpdmVfbXN0X2xp bmtzLS07Cj4gIAo+ICAJaW50ZWxfbXN0LT5jb25uZWN0b3IgPSBOVUxMOwo+IC0JaWYgKGludGVs X2RwLT5hY3RpdmVfbXN0X2xpbmtzID09IDApCj4gKwlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9tc3Rf bGlua3MgPT0gMCkgewo+ICsJCWludGVsX2RwLT5tc3RfbGlua19pc19iYWQgPSBmYWxzZTsKPiAr Cj4gIAkJaW50ZWxfZGlnX3BvcnQtPmJhc2UucG9zdF9kaXNhYmxlKCZpbnRlbF9kaWdfcG9ydC0+ YmFzZSwKPiAgCQkJCQkJICBvbGRfY3J0Y19zdGF0ZSwgTlVMTCk7Cj4gKwl9Cj4gIAo+ICAJRFJN X0RFQlVHX0tNUygiYWN0aXZlIGxpbmtzICVkXG4iLCBpbnRlbF9kcC0+YWN0aXZlX21zdF9saW5r cyk7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2Lmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGluZGV4IGZjMzM4NTI5ZTkxOC4u ZjRhNTg2MWU0ZGZmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAtMTExOSw2 ICsxMTE5LDEzIEBAIHN0cnVjdCBpbnRlbF9kcCB7Cj4gIAkvKiBtc3QgY29ubmVjdG9yIGxpc3Qg Ki8KPiAgCXN0cnVjdCBpbnRlbF9kcF9tc3RfZW5jb2RlciAqbXN0X2VuY29kZXJzW0k5MTVfTUFY X1BJUEVTXTsKPiAgCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciBtc3RfbWdyOwo+ICsJ LyogV2UgY2FuJ3QgaGFuZGxlIHJldHJhaW5pbmcgZnJvbSB0aGUgZGlnIHdvcmtxdWV1ZSwgc28u Li4gKi8KPiArCXN0cnVjdCB3b3JrX3N0cnVjdCBtc3RfcmV0cmFpbl93b3JrOwo+ICsJc3RydWN0 IGNvbXBsZXRpb24gbXN0X3JldHJhaW5fY29tcGxldGlvbjsKPiArCS8qIFNldCB3aGVuIHJldHJh aW5pbmcgdGhlIGxpbmsgYXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyBpcwo+ICsJICogaW1wb3Nz aWJsZSBmb3IgYW4gTVNUIGNvbm5lY3Rpb24KPiArCSAqLwo+ICsJYm9vbCBtc3RfbGlua19pc19i YWQ7Cj4gIAo+ICAJdWludDMyX3QgKCpnZXRfYXV4X2Nsb2NrX2RpdmlkZXIpKHN0cnVjdCBpbnRl bF9kcCAqZHAsIGludCBpbmRleCk7Cj4gIAkvKgo+IEBAIC0xNjg2LDYgKzE2OTMsNyBAQCB2b2lk IGludGVsX2RwX2NvbXB1dGVfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcG9y dF9jbG9jaywKPiAgYm9vbCBpbnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKTsKPiAgYm9vbAo+ICBpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRV U19TSVpFXSk7Cj4gK2ludCBpbnRlbF9kcF9nZXRfY3J0Y19tYXNrKHN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHApOwo+ICAKPiAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW50ZWxfZHBfdW51 c2VkX2xhbmVfbWFzayhpbnQgbGFuZV9jb3VudCkKPiAgewo+IC0tIAo+IDIuMTQuMwo+IAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVs IG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK