From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 10/15] drm/i915: Split the problematic dual-role DDI encoder into two encoders Date: Thu, 10 Dec 2015 15:20:38 +0100 Message-ID: <20151210142038.GT20822@phenom.ffwll.local> References: <1449597590-6971-1-git-send-email-ville.syrjala@linux.intel.com> <1449597590-6971-11-git-send-email-ville.syrjala@linux.intel.com> <20151210134712.GH20822@phenom.ffwll.local> <20151210141034.GU4437@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC6226EA11 for ; Thu, 10 Dec 2015 06:20:42 -0800 (PST) Received: by mail-wm0-f54.google.com with SMTP id v187so35480173wmv.1 for ; Thu, 10 Dec 2015 06:20:42 -0800 (PST) Content-Disposition: inline In-Reply-To: <20151210141034.GU4437@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBEZWMgMTAsIDIwMTUgYXQgMDQ6MTA6MzRQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFRodSwgRGVjIDEwLCAyMDE1IGF0IDAyOjQ3OjEyUE0gKzAxMDAsIERhbmll bCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBUdWUsIERlYyAwOCwgMjAxNSBhdCAwNzo1OTo0NVBNICsw MjAwLCB2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+ID4gRnJvbTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+ID4gCj4gPiA+ IEVsaW1pbmF0ZSB0aGUgdHJvdWJsZXNvbWUgcm9sZSBzd2l0Y2hpbmcgRERJIGVuY29kZXIsIGFu ZCBqdXN0IHJlZ2lzdGVyCj4gPiA+IGEgc2VwYXJhdGUgZW5jb2RlciBmb3IgZWFjaCByb2xlIChE UCBhbmQgSERNSSkuCj4gPiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6Qg PHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gCj4gPiBDYXZlYXQgYWJvdXQgbWF4 X2xhbmVzIGFuZCBwcmUtRERJIHBsYXRmb3JtcyBzdGlsbCBhcHBseS4KCkNhdmVhdHMgYmVlbiBy ZXNvbHZlZCwgaW5jbHVkaW5nIG15IHF1ZXN0aW9uIGFib3V0IHBvcnQgRS4KClJldmlld2VkLWJ5 OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgoKPiA+IAo+ID4gPiAtLS0K PiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jICAgICAgfCAyMzIgKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZGlzcGxheS5jICB8ICAxOCAtLS0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2RwLmMgICAgICAgfCAgMjMgKy0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmggICAgICB8ICAgMyArLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf aGRtaS5jICAgICB8ICAgMyArCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJl Z2lvbi5jIHwgICAxIC0KPiA+ID4gIDYgZmlsZXMgY2hhbmdlZCwgMTgwIGluc2VydGlvbnMoKyks IDEwMCBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4g PiA+IGluZGV4IDA3NDEyMWVmYjI2NS4uNWYwMDhmMGZkYzEzIDEwMDY0NAo+ID4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kZGkuYwo+ID4gPiBAQCAtMzE4LDcgKzMxOCw2IEBAIHN0YXRpYyB2b2lk IGRkaV9nZXRfZW5jb2Rlcl9wb3J0KHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVy LAo+ID4gPiAgCWNhc2UgSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUOgo+ID4gPiAgCWNhc2UgSU5U RUxfT1VUUFVUX0VEUDoKPiA+ID4gIAljYXNlIElOVEVMX09VVFBVVF9IRE1JOgo+ID4gPiAtCWNh c2UgSU5URUxfT1VUUFVUX1VOS05PV046Cj4gPiA+ICAJCSpkaWdfcG9ydCA9IGVuY190b19kaWdf cG9ydChlbmNvZGVyKTsKPiA+ID4gIAkJKnBvcnQgPSAoKmRpZ19wb3J0KS0+cG9ydDsKPiA+ID4g IAkJYnJlYWs7Cj4gPiA+IEBAIC0xOTQyLDE5ICsxOTQxLDE5IEBAIGJvb2wgaW50ZWxfZGRpX2Nv bm5lY3Rvcl9nZXRfaHdfc3RhdGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVj dG9yKQo+ID4gPiAgCXN3aXRjaCAodG1wICYgVFJBTlNfRERJX01PREVfU0VMRUNUX01BU0spIHsK PiA+ID4gIAljYXNlIFRSQU5TX0RESV9NT0RFX1NFTEVDVF9IRE1JOgo+ID4gPiAgCWNhc2UgVFJB TlNfRERJX01PREVfU0VMRUNUX0RWSToKPiA+ID4gLQkJcmV0dXJuICh0eXBlID09IERSTV9NT0RF X0NPTk5FQ1RPUl9IRE1JQSk7Cj4gPiA+ICsJCXJldHVybiB0eXBlID09IERSTV9NT0RFX0NPTk5F Q1RPUl9IRE1JQTsKPiA+ID4gIAo+ID4gPiAgCWNhc2UgVFJBTlNfRERJX01PREVfU0VMRUNUX0RQ X1NTVDoKPiA+ID4gLQkJaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKPiA+ID4g LQkJCXJldHVybiB0cnVlOwo+ID4gPiAtCQlyZXR1cm4gKHR5cGUgPT0gRFJNX01PREVfQ09OTkVD VE9SX0Rpc3BsYXlQb3J0KTsKPiA+ID4gKwkJcmV0dXJuIHR5cGUgPT0gRFJNX01PREVfQ09OTkVD VE9SX0Rpc3BsYXlQb3J0IHx8Cj4gPiA+ICsJCQl0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9l RFA7Cj4gPiA+ICsKPiA+ID4gIAljYXNlIFRSQU5TX0RESV9NT0RFX1NFTEVDVF9EUF9NU1Q6Cj4g PiA+ICAJCS8qIGlmIHRoZSB0cmFuc2NvZGVyIGlzIGluIE1TVCBzdGF0ZSB0aGVuCj4gPiA+ICAJ CSAqIGNvbm5lY3RvciBpc24ndCBjb25uZWN0ZWQgKi8KPiA+ID4gIAkJcmV0dXJuIGZhbHNlOwo+ ID4gPiAgCj4gPiA+ICAJY2FzZSBUUkFOU19ERElfTU9ERV9TRUxFQ1RfRkRJOgo+ID4gPiAtCQly ZXR1cm4gKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQSk7Cj4gPiA+ICsJCXJldHVybiB0 eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E7Cj4gPiA+ICAKPiA+ID4gIAlkZWZhdWx0Ogo+ ID4gPiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiA+IEBAIC0xOTgxLDggKzE5ODAsMjMgQEAgYm9vbCBp bnRlbF9kZGlfZ2V0X2h3X3N0YXRlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4g PiAgCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICAKPiA+ID4gIAlpZiAocG9ydCA9PSBQT1JUX0EpIHsK PiA+ID4gKwkJV0FSTl9PTihlbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9FRFApOwo+ID4g PiArCj4gPiA+ICAJCXRtcCA9IEk5MTVfUkVBRChUUkFOU19ERElfRlVOQ19DVEwoVFJBTlNDT0RF Ul9FRFApKTsKPiA+ID4gIAo+ID4gPiArCQlpZiAoKHRtcCAmIFRSQU5TX0RESV9GVU5DX0VOQUJM RSkgPT0gMCkKPiA+ID4gKwkJCWdvdG8gb3V0Owo+ID4gPiArCj4gPiA+ICsJCXN3aXRjaCAodG1w ICYgVFJBTlNfRERJX01PREVfU0VMRUNUX01BU0spIHsKPiA+ID4gKwkJY2FzZSBUUkFOU19ERElf TU9ERV9TRUxFQ1RfRFBfU1NUOgo+ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCWRlZmF1bHQ6Cj4g PiA+ICsJCQlXQVJOKDEsCj4gPiA+ICsJCQkgICAgICJCYWQgdHJhbnNjb2RlciBFRFAgRERJIG1v ZGUgMHglMDh4IGZvciBwb3J0ICVjXG4iLAo+ID4gPiArCQkJICAgICB0bXAsIHBvcnRfbmFtZShw b3J0KSk7Cj4gPiA+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiAg CQlzd2l0Y2ggKHRtcCAmIFRSQU5TX0RESV9FRFBfSU5QVVRfTUFTSykgewo+ID4gPiAgCQljYXNl IFRSQU5TX0RESV9FRFBfSU5QVVRfQV9PTjoKPiA+ID4gIAkJY2FzZSBUUkFOU19ERElfRURQX0lO UFVUX0FfT05PRkY6Cj4gPiA+IEBAIC0xOTk0LDI1ICsyMDA4LDk4IEBAIGJvb2wgaW50ZWxfZGRp X2dldF9od19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiA+ID4gIAkJY2Fz ZSBUUkFOU19ERElfRURQX0lOUFVUX0NfT05PRkY6Cj4gPiA+ICAJCQkqcGlwZSA9IFBJUEVfQzsK PiA+ID4gIAkJCWJyZWFrOwo+ID4gPiArCQlkZWZhdWx0Ogo+ID4gPiArCQkJV0FSTigxLAo+ID4g PiArCQkJICAgICAiQmFkIHRyYW5zY29kZXIgRURQIGlucHV0IHNlbGVjdCAweCUwOHggZm9yIHBv cnQgJWNcbiIsCj4gPiA+ICsJCQkgICAgIHRtcCwgcG9ydF9uYW1lKHBvcnQpKTsKPiA+ID4gKwkJ CXJldHVybiBmYWxzZTsKPiA+ID4gIAkJfQo+ID4gPiAgCj4gPiA+ICAJCXJldHVybiB0cnVlOwo+ ID4gPiAgCX0gZWxzZSB7Cj4gPiA+ICsJCWludCBudW1fbXN0X3RyYW5zY29kZXJzID0gMDsKPiA+ ID4gKwkJaW50IG51bV9zc3RfdHJhbnNjb2RlcnMgPSAwOwo+ID4gPiArCQlpbnQgbnVtX2ZkaV90 cmFuc2NvZGVycyA9IDA7Cj4gPiA+ICsJCWludCBudW1faGRtaV90cmFuc2NvZGVycyA9IDA7Cj4g PiA+ICsJCWludCBudW1fdHJhbnNjb2RlcnMgPSAwOwo+ID4gPiArCQlib29sIGVuYWJsZWQgPSBm YWxzZTsKPiA+ID4gKwo+ID4gPiAgCQlmb3IgKGkgPSBUUkFOU0NPREVSX0E7IGkgPD0gVFJBTlND T0RFUl9DOyBpKyspIHsKPiA+ID4gIAkJCXRtcCA9IEk5MTVfUkVBRChUUkFOU19ERElfRlVOQ19D VEwoaSkpOwo+ID4gPiAgCj4gPiA+IC0JCQlpZiAoKHRtcCAmIFRSQU5TX0RESV9QT1JUX01BU0sp Cj4gPiA+IC0JCQkgICAgPT0gVFJBTlNfRERJX1NFTEVDVF9QT1JUKHBvcnQpKSB7Cj4gPiA+IC0J CQkJaWYgKCh0bXAgJiBUUkFOU19ERElfTU9ERV9TRUxFQ1RfTUFTSykgPT0gVFJBTlNfRERJX01P REVfU0VMRUNUX0RQX01TVCkKPiA+ID4gLQkJCQkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCQkJaWYg KCh0bXAgJiBUUkFOU19ERElfRlVOQ19FTkFCTEUpID09IDApCj4gPiA+ICsJCQkJY29udGludWU7 Cj4gPiA+ICsKPiA+ID4gKwkJCWlmICgodG1wICYgVFJBTlNfRERJX1BPUlRfTUFTSykgIT0gVFJB TlNfRERJX1NFTEVDVF9QT1JUKHBvcnQpKQo+ID4gPiArCQkJCWNvbnRpbnVlOwo+ID4gPiArCj4g PiA+ICsJCQlpZiAoKHRtcCAmIFRSQU5TX0RESV9NT0RFX1NFTEVDVF9NQVNLKSA9PSBUUkFOU19E RElfTU9ERV9TRUxFQ1RfRFBfTVNUKSB7Cj4gPiA+ICsJCQkJbnVtX21zdF90cmFuc2NvZGVycysr Owo+ID4gPiArCQkJCVdBUk5fT04ocG9ydCA9PSBQT1JUX0UpOwo+ID4gPiArCQkJCWNvbnRpbnVl Owo+ID4gPiArCQkJfQo+ID4gPiArCj4gPiA+ICsKPiA+ID4gKwkJCXN3aXRjaCAodG1wICYgVFJB TlNfRERJX01PREVfU0VMRUNUX01BU0spIHsKPiA+ID4gKwkJCWNhc2UgVFJBTlNfRERJX01PREVf U0VMRUNUX0RQX1NTVDoKPiA+ID4gKwkJCQlXQVJOX09OKHBvcnQgPT0gUE9SVF9FICYmIElOVEVM X0lORk8oZGV2X3ByaXYpLT5nZW4gPCA5KTsKPiA+ID4gKwo+ID4gPiArCQkJCW51bV9zc3RfdHJh bnNjb2RlcnMrKzsKPiA+ID4gKwkJCQlpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRf RElTUExBWVBPUlQgfHwKPiA+ID4gKwkJCQkgICAgZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQ VVRfRURQKSB7Cj4gPiA+ICsJCQkJCWVuYWJsZWQgPSB0cnVlOwo+ID4gPiArCQkJCQkqcGlwZSA9 IGk7Cj4gPiA+ICsJCQkJfQo+ID4gPiArCQkJCWJyZWFrOwo+ID4gPiArCQkJY2FzZSBUUkFOU19E RElfTU9ERV9TRUxFQ1RfSERNSToKPiA+ID4gKwkJCWNhc2UgVFJBTlNfRERJX01PREVfU0VMRUNU X0RWSToKPiA+ID4gKwkJCQlXQVJOX09OKHBvcnQgPT0gUE9SVF9FKTsKPiA+IAo+ID4gSG0sIHBy ZXZpb3VzIHBhdGNoZXMgbWFkZSBpdCBsb29rIGxpa2UgaGRtaSBvbiBwb3J0IEUgaXMgcG9zc2li bGUgLSBhdAo+ID4gbGVhc3QgeW91IGFkZGVkIHBpbGVzIG9mIGNoZWNrcyB0byBtYWtlIHN1cmUg d2UgaGF2ZSBhdCBsZWFzdCA0IGxhbmVzCj4gPiBldmVyeXdoZXJlLiBBbSBJIG1pc3Rha2VuPwo+ IAo+IERESSBFIGNhbiBvbmx5IGhhdmUgdHdvIGxhbmVzIGF0IG1vc3QuIFNvIGl0IGNhbid0IGRv IEhETUkuIEFjdHVhbGx5Cj4gaXQncyBkb2N1bWVudGVkIHRoYXQgaXQgY2FuIG9ubHkgZG8gRkRJ IChvciBTU1Qgb24gU0tMKykuIE5vdyB0aGF0IEkKPiB0aGluayBhYm91dCBpdCwgSSdtIG5vdCBz dXJlIGFuIGV4dGVybmFsIERQIHBvcnQgd2l0aCA8IDQgbGFuZXMgaXMKPiBldmVuIGxlZ2FsLCBz byBwZXJoYXBzIGluIHByYWN0aWNlIGl0IGNhbiBvbmx5IGJlIGVEUCBvciBGREk/Cj4gCj4gPiAK PiA+ID4gKwo+ID4gPiArCQkJCW51bV9oZG1pX3RyYW5zY29kZXJzKys7Cj4gPiA+ICsJCQkJaWYg KGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0hETUkpIHsKPiA+ID4gKwkJCQkJZW5hYmxl ZCA9IHRydWU7Cj4gPiA+ICsJCQkJCSpwaXBlID0gaTsKPiA+ID4gKwkJCQl9Cj4gPiA+ICsJCQkJ YnJlYWs7Cj4gPiA+ICsKPiA+ID4gKwkJCWNhc2UgVFJBTlNfRERJX01PREVfU0VMRUNUX0ZESToK PiA+ID4gKwkJCQlXQVJOX09OKHBvcnQgIT0gUE9SVF9FIHx8IElOVEVMX0lORk8oZGV2X3ByaXYp LT5nZW4gPj0gOSk7Cj4gPiA+ICsKPiA+ID4gKwkJCQludW1fZmRpX3RyYW5zY29kZXJzKys7Cj4g PiA+ICsJCQkJaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0FOQUxPRykgewo+ID4g PiArCQkJCQllbmFibGVkID0gdHJ1ZTsKPiA+ID4gKwkJCQkJKnBpcGUgPSBpOwo+ID4gPiArCQkJ CX0KPiA+ID4gKwkJCQlicmVhazsKPiA+ID4gIAo+ID4gPiAtCQkJCSpwaXBlID0gaTsKPiA+ID4g LQkJCQlyZXR1cm4gdHJ1ZTsKPiA+ID4gKwkJCWRlZmF1bHQ6Cj4gPiA+ICsJCQkJV0FSTigxLCAi QmFkIHRyYW5zY29kZXIgJWMgRERJIG1vZGUgMHglMDh4IGZvciBwb3J0ICVjXG4iLAo+ID4gPiAr CQkJCSAgICAgdHJhbnNjb2Rlcl9uYW1lKGkpLCB0bXAsIHBvcnRfbmFtZShwb3J0KSk7Cj4gPiA+ ICsJCQkJcmV0dXJuIGZhbHNlOwo+ID4gPiAgCQkJfQo+ID4gPiAgCQl9Cj4gPiA+ICsKPiA+ID4g KwkJbnVtX3RyYW5zY29kZXJzID0gbnVtX3NzdF90cmFuc2NvZGVycyArCj4gPiA+ICsJCQludW1f ZmRpX3RyYW5zY29kZXJzICsgbnVtX2hkbWlfdHJhbnNjb2RlcnM7Cj4gPiA+ICsKPiA+ID4gKwkJ aWYgKFdBUk4obnVtX3RyYW5zY29kZXJzICYmIG51bV9tc3RfdHJhbnNjb2RlcnMsCj4gPiA+ICsJ CQkgIk1TVCBhbmQgbm9uLU1TVCB0cmFuc2NvZGVycyBlbmFibGVkIGZvciBwb3J0ICVjICglZCBz c3QsICVkIG1zdCwgJWQgZmRpLCAlZCBoZG1pKVxuIiwKPiA+ID4gKwkJCSBwb3J0X25hbWUocG9y dCksIG51bV9zc3RfdHJhbnNjb2RlcnMsIG51bV9tc3RfdHJhbnNjb2RlcnMsCj4gPiA+ICsJCQkg bnVtX2ZkaV90cmFuc2NvZGVycywgbnVtX2hkbWlfdHJhbnNjb2RlcnMpKQo+ID4gPiArCQkJcmV0 dXJuIGZhbHNlOwo+ID4gPiArCj4gPiA+ICsJCWlmIChXQVJOKG51bV90cmFuc2NvZGVycyA+IDEs Cj4gPiA+ICsJCQkgIk11bHRpcGxlIHRyYW5zY29kZXJzIGVuYWJsZWQgZm9yIHBvcnQgJWMgKCVk IHNzdCwgJWQgbXN0LCAlZCBmZGksICVkIGhkbWkpXG4iLAo+ID4gPiArCQkJIHBvcnRfbmFtZShw b3J0KSwgbnVtX3NzdF90cmFuc2NvZGVycywgbnVtX21zdF90cmFuc2NvZGVycywKPiA+ID4gKwkJ CSBudW1fZmRpX3RyYW5zY29kZXJzLCBudW1faGRtaV90cmFuc2NvZGVycykpCj4gPiA+ICsJCQly ZXR1cm4gZmFsc2U7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKGVuYWJsZWQpCj4gPiA+ICsJCQlyZXR1 cm4gdHJ1ZTsKPiA+IAo+ID4gVGhpcyBpcyB0b28gYmlnIGFuZCBuZWVkcyB0byBiZSBleHRyYWN0 ZWQgaW50byBhIHN0YXRpYyBmdW5jdGlvbi4KPiA+IAo+ID4gT3RoZXJ3aXNlIEkgZGlkbid0IHNw b3QgYW55dGhpbmcsIGFuZCBnZXR0aW5nIHJpZCBvZiBPVVRQVVRfVU5LTk9XTiBpcwo+ID4gcmVh bGx5IG5pY2UuIEkgYWxzbyB3b25kZXIgd2hldGhlciB3ZSBzaG91bGQgbG9uZyB0ZXJtIHJld29y ayBtc3QgdG8gdXNlCj4gPiB0aGUgZmFrZSBlbmNvZGVyIGFzIHRoZSByZWFsIG9uZS4gVGhlIGZh a2UgZW5jb2RlciB3YXMganVzdCBkb25lIHRvIG5vdAo+ID4gY29uZnVzZSB0aGUgZGRpIGVuY29k ZXIsIGJ1dCBub3cgdGhhdCB3ZSBoYXZlIG11bHRpcGxlcyBvZiB0aG9zZSB3ZSBtaWdodAo+ID4g YXMgd2VsbCBlbWJyYWNlIHRoYXQgZXZlcnl3aGVyZS4KPiAKPiBIbW0uIE9uZSBpZGVhIGZvciBN U1QgSSd2ZSBoYWQgaXMgdGhhdCB3ZSdkIHB1bGwgb3V0IHRoZSBtYWluIGxpbmsKPiBtYW5hZ2Vt ZW50IGZyb20gdGhlIG1zdCBjb2RlLCBhbmQgaW5zdGVhZCB1c2UgYXRvbWljIHRvIHNldCB1cCB0 aGUgbWFpbgo+IGxpbmsgYXMganVzdCBhbm90aGVyIGNydGMgKHdvdWxkIG5lZWQgYSBmYWtlIGNy dGMgZm9yIHRoYXQpLCBhbmQgdGhlbgo+IHRoZSBzdHJlYW1zIHdvdWxkIGp1c3QgZGVhbCB3aXRo IHRoZWlyIGZha2UgZW5jb2RlcnMgYW5kIG5vdCBtZXNzIGFib3V0Cj4gd2l0aCB0aGUgbWFpbiBl bmNvZGVyIGF0IGFsbC4gQnV0IHNvdW5kcyBsaWtlIHlvdSd2ZSBoYWQgcHJldHR5IG11Y2ggdGhl Cj4gb3Bwb3NpdGUgaWRlYS4KPiAKPiA+IAo+ID4gQ2hlZXJzLCBEYW5pZWwKPiA+IAo+ID4gPiAg CX0KPiA+ID4gIAo+ID4gPiAtCURSTV9ERUJVR19LTVMoIk5vIHBpcGUgZm9yIGRkaSBwb3J0ICVj IGZvdW5kXG4iLCBwb3J0X25hbWUocG9ydCkpOwo+ID4gPiArb3V0Ogo+ID4gPiArCURSTV9ERUJV R19LTVMoIk5vIHBpcGUgZm9yIERESSBwb3J0ICVjIGZvdW5kXG4iLCBwb3J0X25hbWUocG9ydCkp Owo+ID4gPiAgCj4gPiA+ICAJcmV0dXJuIGZhbHNlOwo+ID4gPiAgfQo+ID4gPiBAQCAtMzE3NCw4 ICszMjYxLDYgQEAgc3RhdGljIGJvb2wgaW50ZWxfZGRpX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4gPiAgCWludCB0eXBlID0gZW5jb2Rlci0+dHlwZTsK PiA+ID4gIAlpbnQgcG9ydCA9IGludGVsX2RkaV9nZXRfZW5jb2Rlcl9wb3J0KGVuY29kZXIpOwo+ ID4gPiAgCj4gPiA+IC0JV0FSTih0eXBlID09IElOVEVMX09VVFBVVF9VTktOT1dOLCAiY29tcHV0 ZV9jb25maWcoKSBvbiB1bmtub3duIG91dHB1dCFcbiIpOwo+ID4gPiAtCj4gPiA+ICAJaWYgKHBv cnQgPT0gUE9SVF9BKQo+ID4gPiAgCQlwaXBlX2NvbmZpZy0+Y3B1X3RyYW5zY29kZXIgPSBUUkFO U0NPREVSX0VEUDsKPiA+ID4gIAo+ID4gPiBAQCAtMzIyNCw1MyArMzMwOSwxOCBAQCBpbnRlbF9k ZGlfaW5pdF9oZG1pX2Nvbm5lY3RvcihzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9k aWdfcG9ydCkKPiA+ID4gIAlyZXR1cm4gY29ubmVjdG9yOwo+ID4gPiAgfQo+ID4gPiAgCj4gPiA+ IC12b2lkIGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcG9ydCBw b3J0KQo+ID4gPiArc3RhdGljIGludCBpbnRlbF9kZGlfaW5pdF9yb2xlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGVudW0gcG9ydCBwb3J0LAo+ID4gPiArCQkJICAgICAgIGludCBlbmNvZGVyX3R5 cGUsIHVpbnQzMl90IHNhdmVkX3BvcnRfYml0cywKPiA+ID4gKwkJCSAgICAgICBpbnQgbWF4X2xh bmVzKQo+ID4gPiAgewo+ID4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShkZXYpOwo+ID4gPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmlu dGVsX2RpZ19wb3J0Owo+ID4gPiAgCXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVy Owo+ID4gPiAgCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiA+ID4gLQlib29sIGluaXRf aGRtaSwgaW5pdF9kcDsKPiA+ID4gLQlpbnQgbWF4X2xhbmVzOwo+ID4gPiAtCj4gPiA+IC0JaWYg KEk5MTVfUkVBRChERElfQlVGX0NUTChQT1JUX0EpKSAmIERESV9BXzRfTEFORVMpIHsKPiA+ID4g LQkJc3dpdGNoIChwb3J0KSB7Cj4gPiA+IC0JCWNhc2UgUE9SVF9BOgo+ID4gPiAtCQkJbWF4X2xh bmVzID0gNDsKPiA+ID4gLQkJCWJyZWFrOwo+ID4gPiAtCQljYXNlIFBPUlRfRToKPiA+ID4gLQkJ CW1heF9sYW5lcyA9IDA7Cj4gPiA+IC0JCQlicmVhazsKPiA+ID4gLQkJZGVmYXVsdDoKPiA+ID4g LQkJCW1heF9sYW5lcyA9IDQ7Cj4gPiA+IC0JCQlicmVhazsKPiA+ID4gLQkJfQo+ID4gPiAtCX0g ZWxzZSB7Cj4gPiA+IC0JCXN3aXRjaCAocG9ydCkgewo+ID4gPiAtCQljYXNlIFBPUlRfQToKPiA+ ID4gLQkJCW1heF9sYW5lcyA9IDI7Cj4gPiA+IC0JCQlicmVhazsKPiA+ID4gLQkJY2FzZSBQT1JU X0U6Cj4gPiA+IC0JCQltYXhfbGFuZXMgPSAyOwo+ID4gPiAtCQkJYnJlYWs7Cj4gPiA+IC0JCWRl ZmF1bHQ6Cj4gPiA+IC0JCQltYXhfbGFuZXMgPSA0Owo+ID4gPiAtCQkJYnJlYWs7Cj4gPiA+IC0J CX0KPiA+ID4gLQl9Cj4gPiA+IC0KPiA+ID4gLQlpbml0X2hkbWkgPSAoZGV2X3ByaXYtPnZidC5k ZGlfcG9ydF9pbmZvW3BvcnRdLnN1cHBvcnRzX2R2aSB8fAo+ID4gPiAtCQkgICAgIGRldl9wcml2 LT52YnQuZGRpX3BvcnRfaW5mb1twb3J0XS5zdXBwb3J0c19oZG1pKTsKPiA+ID4gLQlpbml0X2Rw ID0gZGV2X3ByaXYtPnZidC5kZGlfcG9ydF9pbmZvW3BvcnRdLnN1cHBvcnRzX2RwOwo+ID4gPiAt CWlmICghaW5pdF9kcCAmJiAhaW5pdF9oZG1pKSB7Cj4gPiA+IC0JCURSTV9ERUJVR19LTVMoIlZC VCBzYXlzIHBvcnQgJWMgaXMgbm90IERWSS9IRE1JL0RQIGNvbXBhdGlibGUsIHJlc3BlY3QgaXRc biIsCj4gPiA+IC0JCQkgICAgICBwb3J0X25hbWUocG9ydCkpOwo+ID4gPiAtCQlyZXR1cm47Cj4g PiA+IC0JfQo+ID4gPiAgCj4gPiA+ICAJaW50ZWxfZGlnX3BvcnQgPSBremFsbG9jKHNpemVvZigq aW50ZWxfZGlnX3BvcnQpLCBHRlBfS0VSTkVMKTsKPiA+ID4gIAlpZiAoIWludGVsX2RpZ19wb3J0 KQo+ID4gPiAtCQlyZXR1cm47Cj4gPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gPiAgCj4gPiA+ ICAJaW50ZWxfZW5jb2RlciA9ICZpbnRlbF9kaWdfcG9ydC0+YmFzZTsKPiA+ID4gIAllbmNvZGVy ID0gJmludGVsX2VuY29kZXItPmJhc2U7Cj4gPiA+IEBAIC0zMjg3LDkgKzMzMzcsNyBAQCB2b2lk IGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGVudW0gcG9ydCBwb3J0KQo+ ID4gPiAgCWludGVsX2VuY29kZXItPmdldF9jb25maWcgPSBpbnRlbF9kZGlfZ2V0X2NvbmZpZzsK PiA+ID4gIAo+ID4gPiAgCWludGVsX2RpZ19wb3J0LT5wb3J0ID0gcG9ydDsKPiA+ID4gLQlpbnRl bF9kaWdfcG9ydC0+c2F2ZWRfcG9ydF9iaXRzID0gSTkxNV9SRUFEKERESV9CVUZfQ1RMKHBvcnQp KSAmCj4gPiA+IC0JCQkJCSAgKERESV9CVUZfUE9SVF9SRVZFUlNBTCB8Cj4gPiA+IC0JCQkJCSAg IERESV9BXzRfTEFORVMpOwo+ID4gPiArCWludGVsX2RpZ19wb3J0LT5zYXZlZF9wb3J0X2JpdHMg PSBzYXZlZF9wb3J0X2JpdHM7Cj4gPiA+ICAJaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lcyA9IG1h eF9sYW5lczsKPiA+ID4gIAo+ID4gPiAgCS8qCj4gPiA+IEBAIC0zMzA2LDExICszMzU0LDExIEBA IHZvaWQgaW50ZWxfZGRpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwb3J0IHBv cnQpCj4gPiA+ICAJCX0KPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gLQlpbnRlbF9lbmNvZGVyLT50 eXBlID0gSU5URUxfT1VUUFVUX1VOS05PV047Cj4gPiA+ICsJaW50ZWxfZW5jb2Rlci0+dHlwZSA9 IGVuY29kZXJfdHlwZTsKPiA+ID4gIAlpbnRlbF9lbmNvZGVyLT5jcnRjX21hc2sgPSAoMSA8PCAw KSB8ICgxIDw8IDEpIHwgKDEgPDwgMik7Cj4gPiA+ICAJaW50ZWxfZW5jb2Rlci0+Y2xvbmVhYmxl ID0gMDsKPiA+ID4gIAo+ID4gPiAtCWlmIChpbml0X2RwKSB7Cj4gPiA+ICsJaWYgKGludGVsX2Vu Y29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUKSB7Cj4gPiA+ICAJCWlmICgh aW50ZWxfZGRpX2luaXRfZHBfY29ubmVjdG9yKGludGVsX2RpZ19wb3J0KSkKPiA+ID4gIAkJCWdv dG8gZXJyOwo+ID4gPiAgCj4gPiA+IEBAIC0zMzI3LDE0ICszMzc1LDc0IEBAIHZvaWQgaW50ZWxf ZGRpX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwb3J0IHBvcnQpCj4gPiA+ICAK PiA+ID4gIAkvKiBJbiB0aGVvcnkgd2UgZG9uJ3QgbmVlZCB0aGUgZW5jb2Rlci0+dHlwZSBjaGVj aywgYnV0IGxlYXZlIGl0IGp1c3QgaW4KPiA+ID4gIAkgKiBjYXNlIHdlIGhhdmUgc29tZSByZWFs bHkgYmFkIFZCVHMuLi4gKi8KPiA+ID4gLQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRF TF9PVVRQVVRfRURQICYmIGluaXRfaGRtaSkgewo+ID4gPiArCWlmIChpbnRlbF9lbmNvZGVyLT50 eXBlID09IElOVEVMX09VVFBVVF9IRE1JKSB7Cj4gPiA+ICAJCWlmICghaW50ZWxfZGRpX2luaXRf aGRtaV9jb25uZWN0b3IoaW50ZWxfZGlnX3BvcnQpKQo+ID4gPiAgCQkJZ290byBlcnI7Cj4gPiA+ ICAJfQo+ID4gPiAgCj4gPiA+IC0JcmV0dXJuOwo+ID4gPiArCXJldHVybiBpbnRlbF9lbmNvZGVy LT50eXBlOwo+ID4gPiAgCj4gPiA+ICBlcnI6Cj4gPiA+ICAJZHJtX2VuY29kZXJfY2xlYW51cChl bmNvZGVyKTsKPiA+ID4gIAlrZnJlZShpbnRlbF9kaWdfcG9ydCk7Cj4gPiA+ICsKPiA+ID4gKwly ZXR1cm4gLUVOT0RFVjsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBpbnRlbF9kZGlfaW5p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBvcnQgcG9ydCkKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiA+ ICsJdWludDMyX3Qgc2F2ZWRfcG9ydF9iaXRzOwo+ID4gPiArCWJvb2wgaW5pdF9oZG1pLCBpbml0 X2RwOwo+ID4gPiArCWludCBtYXhfbGFuZXM7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoSTkxNV9SRUFE KERESV9CVUZfQ1RMKFBPUlRfQSkpICYgRERJX0FfNF9MQU5FUykgewo+ID4gPiArCQlzd2l0Y2gg KHBvcnQpIHsKPiA+ID4gKwkJY2FzZSBQT1JUX0E6Cj4gPiA+ICsJCQltYXhfbGFuZXMgPSA0Owo+ ID4gPiArCQkJYnJlYWs7Cj4gPiA+ICsJCWNhc2UgUE9SVF9FOgo+ID4gPiArCQkJbWF4X2xhbmVz ID0gMDsKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiArCQlkZWZhdWx0Ogo+ID4gPiArCQkJbWF4X2xh bmVzID0gNDsKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiArCQl9Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ ID4gKwkJc3dpdGNoIChwb3J0KSB7Cj4gPiA+ICsJCWNhc2UgUE9SVF9BOgo+ID4gPiArCQkJbWF4 X2xhbmVzID0gMjsKPiA+ID4gKwkJCWJyZWFrOwo+ID4gPiArCQljYXNlIFBPUlRfRToKPiA+ID4g KwkJCW1heF9sYW5lcyA9IDI7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJZGVmYXVsdDoKPiA+ ID4gKwkJCW1heF9sYW5lcyA9IDQ7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJfQo+ID4gPiAr CX0KPiA+ID4gKwo+ID4gPiArCWluaXRfaGRtaSA9IChkZXZfcHJpdi0+dmJ0LmRkaV9wb3J0X2lu Zm9bcG9ydF0uc3VwcG9ydHNfZHZpIHx8Cj4gPiA+ICsJCSAgICAgZGV2X3ByaXYtPnZidC5kZGlf cG9ydF9pbmZvW3BvcnRdLnN1cHBvcnRzX2hkbWkpOwo+ID4gPiArCWluaXRfZHAgPSBkZXZfcHJp di0+dmJ0LmRkaV9wb3J0X2luZm9bcG9ydF0uc3VwcG9ydHNfZHA7Cj4gPiA+ICsJaWYgKCFpbml0 X2RwICYmICFpbml0X2hkbWkpIHsKPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygiVkJUIHNheXMgcG9y dCAlYyBpcyBub3QgRFZJL0hETUkvRFAgY29tcGF0aWJsZSwgcmVzcGVjdCBpdFxuIiwKPiA+ID4g KwkJCSAgICAgIHBvcnRfbmFtZShwb3J0KSk7Cj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwl9Cj4g PiA+ICsKPiA+ID4gKwlzYXZlZF9wb3J0X2JpdHMgPSBJOTE1X1JFQUQoRERJX0JVRl9DVEwocG9y dCkpICYKPiA+ID4gKwkJKERESV9CVUZfUE9SVF9SRVZFUlNBTCB8IERESV9BXzRfTEFORVMpOwo+ ID4gPiArCj4gPiA+ICsJaWYgKGluaXRfZHApIHsKPiA+ID4gKwkJaW50IHJldCA9IGludGVsX2Rk aV9pbml0X3JvbGUoZGV2LCBwb3J0LCBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQsCj4gPiA+ICsJ CQkJCSAgICAgIHNhdmVkX3BvcnRfYml0cywgbWF4X2xhbmVzKTsKPiA+ID4gKwkJLyogRG9uJ3Qg cmVnaXN0ZXIgdGhlIEhETUkgY29ubmVjdG9yL2VuY29kZXIgd2hlbiB3ZSBoYXZlIGVEUCAqLwo+ ID4gPiArCQlpZiAocmV0ID09IElOVEVMX09VVFBVVF9FRFApCj4gPiA+ICsJCQlpbml0X2hkbWkg PSBmYWxzZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZiAoaW5pdF9oZG1pKQo+ID4gPiAr CQlpbnRlbF9kZGlfaW5pdF9yb2xlKGRldiwgcG9ydCwgSU5URUxfT1VUUFVUX0hETUksCj4gPiA+ ICsJCQkJICAgIHNhdmVkX3BvcnRfYml0cywgbWF4X2xhbmVzKTsKPiA+ID4gIH0KPiA+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gPiBpbmRleCBiYzdhYWEzYzQzMWUuLmZj MWQ3Mzg3ZWIxMiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXku Ywo+ID4gPiBAQCAtNTI1MiwxMyArNTI1Miw5IEBAIHN0YXRpYyBlbnVtIGludGVsX2Rpc3BsYXlf cG93ZXJfZG9tYWluIHBvcnRfdG9fYXV4X3Bvd2VyX2RvbWFpbihlbnVtIHBvcnQgcG9ydCkKPiA+ ID4gIGVudW0gaW50ZWxfZGlzcGxheV9wb3dlcl9kb21haW4KPiA+ID4gIGludGVsX2Rpc3BsYXlf cG9ydF9wb3dlcl9kb21haW4oc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIpCj4g PiA+ICB7Cj4gPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2VuY29kZXItPmJh c2UuZGV2Owo+ID4gPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0 Owo+ID4gPiAgCj4gPiA+ICAJc3dpdGNoIChpbnRlbF9lbmNvZGVyLT50eXBlKSB7Cj4gPiA+IC0J Y2FzZSBJTlRFTF9PVVRQVVRfVU5LTk9XTjoKPiA+ID4gLQkJLyogT25seSBEREkgcGxhdGZvcm1z IHNob3VsZCBldmVyIHVzZSB0aGlzIG91dHB1dCB0eXBlICovCj4gPiA+IC0JCVdBUk5fT05fT05D RSghSEFTX0RESShkZXYpKTsKPiA+ID4gIAljYXNlIElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDoK PiA+ID4gIAljYXNlIElOVEVMX09VVFBVVF9IRE1JOgo+ID4gPiAgCWNhc2UgSU5URUxfT1VUUFVU X0VEUDoKPiA+ID4gQEAgLTUyNzksMjAgKzUyNzUsOSBAQCBpbnRlbF9kaXNwbGF5X3BvcnRfcG93 ZXJfZG9tYWluKHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyKQo+ID4gPiAgZW51 bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbgo+ID4gPiAgaW50ZWxfZGlzcGxheV9wb3J0X2F1 eF9wb3dlcl9kb21haW4oc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIpCj4gPiA+ ICB7Cj4gPiA+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2VuY29kZXItPmJhc2Uu ZGV2Owo+ID4gPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0Owo+ ID4gPiAgCj4gPiA+ICAJc3dpdGNoIChpbnRlbF9lbmNvZGVyLT50eXBlKSB7Cj4gPiA+IC0JY2Fz ZSBJTlRFTF9PVVRQVVRfVU5LTk9XTjoKPiA+ID4gLQljYXNlIElOVEVMX09VVFBVVF9IRE1JOgo+ ID4gPiAtCQkvKgo+ID4gPiAtCQkgKiBPbmx5IERESSBwbGF0Zm9ybXMgc2hvdWxkIGV2ZXIgdXNl IHRoZXNlIG91dHB1dCB0eXBlcy4KPiA+ID4gLQkJICogV2UgY2FuIGdldCBoZXJlIGFmdGVyIHRo ZSBIRE1JIGRldGVjdCBjb2RlIGhhcyBhbHJlYWR5IHNldAo+ID4gPiAtCQkgKiB0aGUgdHlwZSBv ZiB0aGUgc2hhcmVkIGVuY29kZXIuIFNpbmNlIHdlIGNhbid0IGJlIHN1cmUKPiA+ID4gLQkJICog d2hhdCdzIHRoZSBzdGF0dXMgb2YgdGhlIGdpdmVuIGNvbm5lY3RvcnMsIHBsYXkgc2FmZSBhbmQK PiA+ID4gLQkJICogcnVuIHRoZSBEUCBkZXRlY3Rpb24gdG9vLgo+ID4gPiAtCQkgKi8KPiA+ID4g LQkJV0FSTl9PTl9PTkNFKCFIQVNfRERJKGRldikpOwo+ID4gPiAgCWNhc2UgSU5URUxfT1VUUFVU X0RJU1BMQVlQT1JUOgo+ID4gPiAgCWNhc2UgSU5URUxfT1VUUFVUX0VEUDoKPiA+ID4gIAkJaW50 ZWxfZGlnX3BvcnQgPSBlbmNfdG9fZGlnX3BvcnQoJmludGVsX2VuY29kZXItPmJhc2UpOwo+ID4g PiBAQCAtMTIyODMsOSArMTIyNjgsNiBAQCBzdGF0aWMgYm9vbCBjaGVja19kaWdpdGFsX3BvcnRf Y29uZmxpY3RzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKPiA+ID4gIAo+ID4gPiAg CQlzd2l0Y2ggKGVuY29kZXItPnR5cGUpIHsKPiA+ID4gIAkJCXVuc2lnbmVkIGludCBwb3J0X21h c2s7Cj4gPiA+IC0JCWNhc2UgSU5URUxfT1VUUFVUX1VOS05PV046Cj4gPiA+IC0JCQlpZiAoV0FS Tl9PTighSEFTX0RESShkZXYpKSkKPiA+ID4gLQkJCQlicmVhazsKPiA+ID4gIAkJY2FzZSBJTlRF TF9PVVRQVVRfRElTUExBWVBPUlQ6Cj4gPiA+ICAJCWNhc2UgSU5URUxfT1VUUFVUX0hETUk6Cj4g PiA+ICAJCWNhc2UgSU5URUxfT1VUUFVUX0VEUDoKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5j Cj4gPiA+IGluZGV4IDdkMzU0YjFlNWU1Zi4uMWQzMWFhMjk2YWFhIDEwMDY0NAo+ID4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ID4gQEAgLTQ2MDEsOCArNDYwMSw2IEBAIGludGVsX2Rw X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ID4g PiAgCj4gPiA+ICAJaWYgKGludGVsX2RwLT5pc19tc3QpIHsKPiA+ID4gIAkJLyogTVNUIGRldmlj ZXMgYXJlIGRpc2Nvbm5lY3RlZCBmcm9tIGEgbW9uaXRvciBQT1YgKi8KPiA+ID4gLQkJaWYgKGlu dGVsX2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VEUCkKPiA+ID4gLQkJCWludGVsX2Vu Y29kZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQ7Cj4gPiA+ICAJCXJldHVybiBj b25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4gIAl9Cj4gPiA+ICAKPiA+ID4gQEAg LTQ2MzIsOCArNDYzMCw2IEBAIGludGVsX2RwX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBib29sIGZvcmNlKQo+ID4gPiAgCWlmIChyZXQpIHsKPiA+ID4gIAkJLyogaWYg d2UgYXJlIGluIE1TVCBtb2RlIHRoZW4gdGhpcyBjb25uZWN0b3IKPiA+ID4gIAkJICAgd29uJ3Qg YXBwZWFyIGNvbm5lY3RlZCBvciBoYXZlIGFueXRoaW5nIHdpdGggRURJRCBvbiBpdCAqLwo+ID4g PiAtCQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ID4gPiAt CQkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDsKPiA+ID4g IAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gPiA+ICAJCWdvdG8g b3V0Owo+ID4gPiAgCX0KPiA+ID4gQEAgLTQ2NDgsOCArNDY0NCw2IEBAIGludGVsX2RwX2RldGVj dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+ID4gPiAgCj4g PiA+ICAJaW50ZWxfZHBfc2V0X2VkaWQoaW50ZWxfZHApOwo+ID4gPiAgCj4gPiA+IC0JaWYgKGlu dGVsX2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VEUCkKPiA+ID4gLQkJaW50ZWxfZW5j b2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDsKPiA+ID4gIAlzdGF0dXMgPSBj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiA+ID4gIAo+ID4gPiAgCS8qIFRyeSB0byByZWFk IHRoZSBzb3VyY2Ugb2YgdGhlIGludGVycnVwdCAqLwo+ID4gPiBAQCAtNDY5Miw5ICs0Njg2LDYg QEAgaW50ZWxfZHBfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ID4g IAlpbnRlbF9kcF9zZXRfZWRpZChpbnRlbF9kcCk7Cj4gPiA+ICAKPiA+ID4gIAlpbnRlbF9kaXNw bGF5X3Bvd2VyX3B1dChkZXZfcHJpdiwgcG93ZXJfZG9tYWluKTsKPiA+ID4gLQo+ID4gPiAtCWlm IChpbnRlbF9lbmNvZGVyLT50eXBlICE9IElOVEVMX09VVFBVVF9FRFApCj4gPiA+IC0JCWludGVs X2VuY29kZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRfRElTUExBWVBPUlQ7Cj4gPiA+ICB9Cj4gPiA+ ICAKPiA+ID4gIHN0YXRpYyBpbnQgaW50ZWxfZHBfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpCj4gPiA+IEBAIC00OTY5LDkgKzQ5NjAsOSBAQCBpbnRlbF9kcF9ocGRf cHVsc2Uoc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsIGJvb2wgbG9u Z19ocGQpCj4gPiA+ICAJZW51bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21h aW47Cj4gPiA+ICAJZW51bSBpcnFyZXR1cm4gcmV0ID0gSVJRX05PTkU7Cj4gPiA+ICAKPiA+ID4g LQlpZiAoaW50ZWxfZGlnX3BvcnQtPmJhc2UudHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQICYmCj4g PiA+IC0JICAgIGludGVsX2RpZ19wb3J0LT5iYXNlLnR5cGUgIT0gSU5URUxfT1VUUFVUX0hETUkp Cj4gPiA+IC0JCWludGVsX2RpZ19wb3J0LT5iYXNlLnR5cGUgPSBJTlRFTF9PVVRQVVRfRElTUExB WVBPUlQ7Cj4gPiA+ICsJaWYgKFdBUk5fT05fT05DRShpbnRlbF9kaWdfcG9ydC0+YmFzZS50eXBl ICE9IElOVEVMX09VVFBVVF9FRFAgJiYKPiA+ID4gKwkJCSBpbnRlbF9kaWdfcG9ydC0+YmFzZS50 eXBlICE9IElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVCkpCj4gPiA+ICsJCXJldHVybiBJUlFfSEFO RExFRDsKPiA+ID4gIAo+ID4gPiAgCWlmIChsb25nX2hwZCAmJiBpbnRlbF9kaWdfcG9ydC0+YmFz ZS50eXBlID09IElOVEVMX09VVFBVVF9FRFApIHsKPiA+ID4gIAkJLyoKPiA+ID4gQEAgLTU4MTUs NiArNTgwNiw5IEBAIGludGVsX2RwX2luaXRfY29ubmVjdG9yKHN0cnVjdCBpbnRlbF9kaWdpdGFs X3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ID4gPiAgCWVudW0gcG9ydCBwb3J0ID0gaW50ZWxfZGln X3BvcnQtPnBvcnQ7Cj4gPiA+ICAJaW50IHR5cGUsIHJldDsKPiA+ID4gIAo+ID4gPiArCWlmIChX QVJOX09OKGludGVsX2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0RJU1BMQVlQT1JUKSkK PiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ID4gPiArCj4gPiA+ICAJaWYgKFdBUk4oaW50ZWxfZGln X3BvcnQtPm1heF9sYW5lcyA8IDEsCj4gPiA+ICAJCSAiTm90IGVub3VnaCBsYW5lcyAoJWQpIGZv ciBEUCBvbiBwb3J0ICVjXG4iLAo+ID4gPiAgCQkgaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lcywg cG9ydF9uYW1lKHBvcnQpKSkKPiA+ID4gQEAgLTU4NTEsMTEgKzU4NDUsNiBAQCBpbnRlbF9kcF9p bml0X2Nvbm5lY3RvcihzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwK PiA+ID4gIAllbHNlCj4gPiA+ICAJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBv cnQ7Cj4gPiA+ICAKPiA+ID4gLQkvKgo+ID4gPiAtCSAqIEZvciBlRFAgd2UgYWx3YXlzIHNldCB0 aGUgZW5jb2RlciB0eXBlIHRvIElOVEVMX09VVFBVVF9FRFAsIGJ1dAo+ID4gPiAtCSAqIGZvciBE UCB0aGUgZW5jb2RlciB0eXBlIGNhbiBiZSBzZXQgYnkgdGhlIGNhbGxlciB0bwo+ID4gPiAtCSAq IElOVEVMX09VVFBVVF9VTktOT1dOIGZvciBEREksIHNvIGRvbid0IHJld3JpdGUgaXQuCj4gPiA+ IC0JICovCj4gPiA+ICAJaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKPiA+ID4g IAkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9IElOVEVMX09VVFBVVF9FRFA7Cj4gPiA+ICAKPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+ID4gaW5kZXggYThhODRiOGMyYmFjLi45ZTVkYjNk NzFlMTIgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5o Cj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+IEBAIC0x MDMsOCArMTAzLDcgQEAgZW51bSBpbnRlbF9vdXRwdXRfdHlwZSB7Cj4gPiA+ICAJSU5URUxfT1VU UFVUX0RJU1BMQVlQT1JUID0gNywKPiA+ID4gIAlJTlRFTF9PVVRQVVRfRURQID0gOCwKPiA+ID4g IAlJTlRFTF9PVVRQVVRfRFNJID0gOSwKPiA+ID4gLQlJTlRFTF9PVVRQVVRfVU5LTk9XTiA9IDEw LAo+ID4gPiAtCUlOVEVMX09VVFBVVF9EUF9NU1QgPSAxMSwKPiA+ID4gKwlJTlRFTF9PVVRQVVRf RFBfTVNUID0gMTAsCj4gPiA+ICB9Owo+ID4gPiAgCj4gPiA+ICAjZGVmaW5lIElOVEVMX0RWT19D SElQX05PTkUgMAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf aGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCj4gPiA+IGluZGV4IDg5 NTE4OWFiZmQ1Ni4uNzVlYTk1MTVhOWNlIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9oZG1pLmMKPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaGRtaS5jCj4gPiA+IEBAIC0yMDM0LDYgKzIwMzQsOSBAQCB2b2lkIGludGVsX2hkbWlfaW5p dF9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQsCj4g PiA+ICAJZW51bSBwb3J0IHBvcnQgPSBpbnRlbF9kaWdfcG9ydC0+cG9ydDsKPiA+ID4gIAl1aW50 OF90IGFsdGVybmF0ZV9kZGNfcGluOwo+ID4gPiAgCj4gPiA+ICsJaWYgKFdBUk5fT04oaW50ZWxf ZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfSERNSSkpCj4gPiA+ICsJCXJldHVybjsKPiA+ ID4gKwo+ID4gPiAgCWlmIChXQVJOKGludGVsX2RpZ19wb3J0LT5tYXhfbGFuZXMgPCA0LAo+ID4g PiAgCQkgIk5vdCBlbm91Z2ggbGFuZXMgKCVkKSBmb3IgSERNSSBvbiBwb3J0ICVjXG4iLAo+ID4g PiAgCQkgaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lcywgcG9ydF9uYW1lKHBvcnQpKSkKPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCj4gPiA+IGluZGV4IGUzNjJhMzA3NzZm YS4uYTE1NDU5YTQ1MWMyIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9vcHJlZ2lvbi5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29w cmVnaW9uLmMKPiA+ID4gQEAgLTM2MCw3ICszNjAsNiBAQCBpbnQgaW50ZWxfb3ByZWdpb25fbm90 aWZ5X2VuY29kZXIoc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIsCj4gPiA+ICAJ Y2FzZSBJTlRFTF9PVVRQVVRfQU5BTE9HOgo+ID4gPiAgCQl0eXBlID0gRElTUExBWV9UWVBFX0NS VDsKPiA+ID4gIAkJYnJlYWs7Cj4gPiA+IC0JY2FzZSBJTlRFTF9PVVRQVVRfVU5LTk9XTjoKPiA+ ID4gIAljYXNlIElOVEVMX09VVFBVVF9ESVNQTEFZUE9SVDoKPiA+ID4gIAljYXNlIElOVEVMX09V VFBVVF9IRE1JOgo+ID4gPiAgCWNhc2UgSU5URUxfT1VUUFVUX0RQX01TVDoKPiA+ID4gLS0gCj4g PiA+IDIuNC4xMAo+ID4gPiAKPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiA+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gPiBJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiA+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPiA+IAo+ID4gLS0gCj4gPiBEYW5pZWwgVmV0 dGVyCj4gPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KPiA+IGh0dHA6Ly9i bG9nLmZmd2xsLmNoCj4gCj4gLS0gCj4gVmlsbGUgU3lyasOkbMOkCj4gSW50ZWwgT1RDCgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK