From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [Intel-gfx] [PATCH 3/4] drm/fb-helper: Set up gamma_lut during restore_fbdev_mode_atomic() Date: Tue, 11 Jun 2019 20:50:16 +0300 Message-ID: <20190611175016.GI5942@intel.com> References: <20190607162611.23514-1-ville.syrjala@linux.intel.com> <20190607162611.23514-3-ville.syrjala@linux.intel.com> <20190607184015.GN21222@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190607184015.GN21222@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMDcsIDIwMTkgYXQgMDg6NDA6MTVQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBGcmksIEp1biAwNywgMjAxOSBhdCAwNzoyNjoxMFBNICswMzAwLCBWaWxsZSBT eXJqYWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IAo+ID4gaTkxNSB3aWxsIG5vdyByZWZ1c2UgdG8gZW5hYmxlIGEg QzggcGxhbmUgdW5sZXNzIHRoZSBnYW1tYV9sdXQKPiA+IGlzIGFscmVhZHkgZW5hYmxlZCAodG8g YXZvaWQgc2Nhbm5pbmcgb3V0IHdoYXRldmVyIGdhcmJhZ2UgZ290Cj4gPiBsZWZ0IGluIHRoZSBo dyBMVVQgcHJldmlvdXNseSkuIFNvIGluIG9yZGVyIHRvIG1ha2UgdGhlIGZiZGV2Cj4gPiBjb2Rl IHdvcmsgd2l0aCBDOCB3ZSBuZWVkIHRvIHByb2dyYW0gdGhlIGdhbW1hX2x1dCBhbHJlYWR5Cj4g PiBkdXJpbmcgcmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYygpLgo+ID4gCj4gPiBUbyBhdm9pZCBo YXZpbmcgdG8gdXBkYXRlIHRoZSBodyBMVVQgZXZlcnkgdGltZQo+ID4gcmVzdG9yZV9mYmRldl9t b2RlX2F0b21pYygpIGlzIGNhbGxlZCB3ZSBoYW5nIG9uIHRvIHRoZQo+ID4gY3VycmVudCBnYW1t YV9sdXQgYmxvYi4gTm90ZSB0aGF0IHRoZSBmaXJzdCBjcnRjIHRvIGdldAo+ID4gZW5hYmxlZCB3 aWxsIGRpY3RhdGUgdGhlIHNpemUgb2YgdGhlIGdhbW1hX2x1dCwgc28gdGhpcwo+ID4gYXBwcm9h Y2ggaXNuJ3QgMTAwJSBncmVhdCBmb3IgaGFyZHdhcmUgd2l0aCBub24tdW5pZm9ybQo+ID4gY3J0 Y3MuIEJ1dCB0aGF0IHByb2JsZW0gYWxyZWFkeSBleGlzdHMgaW4gc2V0Y21hcF9hdG9taWMoKQo+ ID4gc28gd2UnbGwganVzdCBrZWVwIGlnbm9yaW5nIGl0Lgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5 OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gLS0t Cj4gPiAgZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyB8IDE2NSArKysrKysrKysrKysr KysrKysrKy0tLS0tLS0tLS0tLQo+ID4gIGluY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCAgICAg fCAgIDcgKysKPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDExMyBpbnNlcnRpb25zKCspLCA1OSBkZWxl dGlvbnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVs cGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCj4gPiBpbmRleCBiZGZhMTRj ZDdmNmQuLjBlY2VjNzYzNzg5ZiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZmJfaGVscGVyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiA+ IEBAIC00MzYsMTAgKzQzNiw3NiBAQCBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX3BhbmVsX3Jv dGF0aW9uKHN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQsCj4gPiAgCXJldHVybiB0cnVlOwo+ ID4gIH0KPiA+ICAKPiA+ICtzdGF0aWMgaW50IHNldGNtYXBfY3J0Y19hdG9taWMoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCj4gPiArCQkJICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZ2FtbWFfbHV0KQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ID4gKwlib29s IHJlcGxhY2VkOwo+ID4gKwo+ID4gKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19z dGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiArCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCj4gPiArCQly ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiA+ICsKPiA+ICsJcmVwbGFjZWQgID0gZHJtX3By b3BlcnR5X3JlcGxhY2VfYmxvYigmY3J0Y19zdGF0ZS0+ZGVnYW1tYV9sdXQsCj4gPiArCQkJCQkg ICAgICBOVUxMKTsKPiA+ICsJcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfYmxvYigm Y3J0Y19zdGF0ZS0+Y3RtLCBOVUxMKTsKPiA+ICsJcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3Jl cGxhY2VfYmxvYigmY3J0Y19zdGF0ZS0+Z2FtbWFfbHV0LAo+ID4gKwkJCQkJICAgICAgZ2FtbWFf bHV0KTsKPiA+ICsJY3J0Y19zdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOwo+ ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBkcm1f cHJvcGVydHlfYmxvYiAqc2V0Y21hcF9uZXdfZ2FtbWFfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiA+ICsJCQkJCQkgICAgICAgc3RydWN0IGZiX2NtYXAgKmNtYXApCj4gPiArewo+ID4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgKmdhbW1hX2x1dDsKPiA+ICsJc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dDsKPiA+ ICsJaW50IHNpemUgPSBjcnRjLT5nYW1tYV9zaXplOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJ aWYgKCFzaXplIHx8IGNtYXAtPnN0YXJ0ICsgY21hcC0+bGVuID4gc2l6ZSkKPiA+ICsJCXJldHVy biBFUlJfUFRSKC1FSU5WQUwpOwo+ID4gKwo+ID4gKwlnYW1tYV9sdXQgPSBkcm1fcHJvcGVydHlf Y3JlYXRlX2Jsb2IoZGV2LCBzaXplb2YoKmx1dCkgKiBzaXplLCBOVUxMKTsKPiA+ICsJaWYgKElT X0VSUihnYW1tYV9sdXQpKQo+ID4gKwkJcmV0dXJuIGdhbW1hX2x1dDsKPiA+ICsKPiA+ICsJbHV0 ID0gZ2FtbWFfbHV0LT5kYXRhOwo+ID4gKwlpZiAoY21hcC0+c3RhcnQgfHwgY21hcC0+bGVuICE9 IHNpemUpIHsKPiA+ICsJCXUxNiAqciA9IGNydGMtPmdhbW1hX3N0b3JlOwo+ID4gKwkJdTE2ICpn ID0gciArIGNydGMtPmdhbW1hX3NpemU7Cj4gPiArCQl1MTYgKmIgPSBnICsgY3J0Yy0+Z2FtbWFf c2l6ZTsKPiA+ICsKPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBjbWFwLT5zdGFydDsgaSsrKSB7Cj4g PiArCQkJbHV0W2ldLnJlZCA9IHJbaV07Cj4gPiArCQkJbHV0W2ldLmdyZWVuID0gZ1tpXTsKPiA+ ICsJCQlsdXRbaV0uYmx1ZSA9IGJbaV07Cj4gPiArCQl9Cj4gPiArCQlmb3IgKGkgPSBjbWFwLT5z dGFydCArIGNtYXAtPmxlbjsgaSA8IHNpemU7IGkrKykgewo+ID4gKwkJCWx1dFtpXS5yZWQgPSBy W2ldOwo+ID4gKwkJCWx1dFtpXS5ncmVlbiA9IGdbaV07Cj4gPiArCQkJbHV0W2ldLmJsdWUgPSBi W2ldOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjbWFwLT5s ZW47IGkrKykgewo+ID4gKwkJbHV0W2NtYXAtPnN0YXJ0ICsgaV0ucmVkID0gY21hcC0+cmVkW2ld Owo+ID4gKwkJbHV0W2NtYXAtPnN0YXJ0ICsgaV0uZ3JlZW4gPSBjbWFwLT5ncmVlbltpXTsKPiA+ ICsJCWx1dFtjbWFwLT5zdGFydCArIGldLmJsdWUgPSBjbWFwLT5ibHVlW2ldOwo+ID4gKwl9Cj4g PiArCj4gPiArCXJldHVybiBnYW1tYV9sdXQ7Cj4gPiArfQo+ID4gKwo+ID4gIHN0YXRpYyBpbnQg cmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVy LCBib29sIGFjdGl2ZSkKPiA+ICB7Cj4gPiArCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmJfaGVs cGVyLT5mYmRldjsKPiA+ICAJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVs cGVyLT5jbGllbnQ7Cj4gPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRl djsKPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpnYW1tYV9sdXQ7Cj4gPiAgCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwo+ID4gIAlzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZTsKPiA+ICAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ID4gQEAgLTQ1NSw2 ICs1MjEsMTAgQEAgc3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGVfYXRvbWljKHN0cnVjdCBk cm1fZmJfaGVscGVyICpmYl9oZWxwZXIsIGJvb2wgYWN0aXYKPiA+ICAJCWdvdG8gb3V0X2N0eDsK PiA+ICAJfQo+ID4gIAo+ID4gKwlnYW1tYV9sdXQgPSBmYl9oZWxwZXItPmdhbW1hX2x1dDsKPiA+ ICsJaWYgKGdhbW1hX2x1dCkKPiA+ICsJCWRybV9wcm9wZXJ0eV9ibG9iX2dldChnYW1tYV9sdXQp Owo+IAo+IFdoeSB0aGUgZ2V0L3B1dCBzdHVmZiBoZXJlPwoKU28gd2UgZG9uJ3QgZnJlZSB0aGlz IGd1eSBkdXJpbmcgdGhlIGNsZWFudXAuCgo+IAo+ID4gKwo+ID4gIAlzdGF0ZS0+YWNxdWlyZV9j dHggPSAmY3R4Owo+ID4gIHJldHJ5Ogo+ID4gIAlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRl dikgewo+ID4gQEAgLTQ3Niw3ICs1NDYsOCBAQCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9k ZV9hdG9taWMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgYm9vbCBhY3Rpdgo+ID4g IAl9Cj4gPiAgCj4gPiAgCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgY2xp ZW50KSB7Cj4gPiAtCQlzdHJ1Y3QgZHJtX3BsYW5lICpwcmltYXJ5ID0gbW9kZV9zZXQtPmNydGMt PnByaW1hcnk7Cj4gPiArCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBtb2RlX3NldC0+Y3J0YzsK PiA+ICsJCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnkgPSBjcnRjLT5wcmltYXJ5Owo+ID4gIAkJ dW5zaWduZWQgaW50IHJvdGF0aW9uOwo+ID4gIAo+ID4gIAkJaWYgKGRybV9mYl9oZWxwZXJfcGFu ZWxfcm90YXRpb24obW9kZV9zZXQsICZyb3RhdGlvbikpIHsKPiA+IEBAIC00ODksMjQgKzU2MCw0 NiBAQCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMoc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciwgYm9vbCBhY3Rpdgo+ID4gIAkJaWYgKHJldCAhPSAwKQo+ID4gIAkJ CWdvdG8gb3V0X3N0YXRlOwo+ID4gIAo+ID4gKwkJaWYgKGluZm8tPmZpeC52aXN1YWwgIT0gRkJf VklTVUFMX1RSVUVDT0xPUikgewo+ID4gKwkJCWlmICghZ2FtbWFfbHV0KQo+ID4gKwkJCQlnYW1t YV9sdXQgPSBzZXRjbWFwX25ld19nYW1tYV9sdXQoY3J0YywgJmluZm8tPmNtYXApOwo+ID4gKwkJ CWlmIChJU19FUlIoZ2FtbWFfbHV0KSkgewo+ID4gKwkJCQlyZXQgPSBQVFJfRVJSKGdhbW1hX2x1 dCk7Cj4gPiArCQkJCWdhbW1hX2x1dCA9IE5VTEw7Cj4gPiArCQkJCWdvdG8gb3V0X3N0YXRlOwo+ ID4gKwkJCX0KPiA+ICsKPiA+ICsJCQlyZXQgPSBzZXRjbWFwX2NydGNfYXRvbWljKHN0YXRlLCBj cnRjLCBnYW1tYV9sdXQpOwo+ID4gKwkJCWlmIChyZXQpCj4gPiArCQkJCWdvdG8gb3V0X3N0YXRl Owo+ID4gKwkJfQo+ID4gKwo+ID4gIAkJLyoKPiA+ICAJCSAqIF9fZHJtX2F0b21pY19oZWxwZXJf c2V0X2NvbmZpZygpIHNldHMgYWN0aXZlIHdoZW4gYQo+ID4gIAkJICogbW9kZSBpcyBzZXQsIHVu Y29uZGl0aW9uYWxseSBjbGVhciBpdCBpZiB3ZSBmb3JjZSBEUE1TIG9mZgo+ID4gIAkJICovCj4g PiAgCQlpZiAoIWFjdGl2ZSkgewo+ID4gLQkJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG1vZGVf c2V0LT5jcnRjOwo+ID4gLQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKPiA+ICsJCQlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPQo+ID4gKwkJCQlkcm1fYXRvbWljX2dldF9uZXdf Y3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPiAgCj4gPiAgCQkJY3J0Y19zdGF0ZS0+YWN0aXZl ID0gZmFsc2U7Cj4gPiAgCQl9Cj4gPiAgCX0KPiA+ICAKPiA+ICAJcmV0ID0gZHJtX2F0b21pY19j b21taXQoc3RhdGUpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBvdXRfc3RhdGU7Cj4gPiAr Cj4gPiArCWlmIChnYW1tYV9sdXQpCj4gPiArCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoZ2FtbWFf bHV0KTsKPiA+ICsJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGZiX2hlbHBlci0+Z2FtbWFfbHV0KTsK PiA+ICsJZmJfaGVscGVyLT5nYW1tYV9sdXQgPSBnYW1tYV9sdXQ7Cj4gCj4gQ2FuJ3Qgd2Ugc2lt cGxpZnkgdXNpbmcgZHJtX3Byb3BlcnR5X3JlcGxhY2VfYmxvYiBoZXJlIGFuZCBiZWxvdz8KCkkg Z3Vlc3MuCgo+IAo+ID4gIAo+ID4gIG91dF9zdGF0ZToKPiA+ICAJaWYgKHJldCA9PSAtRURFQURM SykKPiA+ICAJCWdvdG8gYmFja29mZjsKPiA+ICAKPiA+ICsJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0 KGdhbW1hX2x1dCk7Cj4gPiAgCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKPiA+ICBvdXRf Y3R4Ogo+ID4gIAlkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+ID4gQEAgLTk5Niw2ICsx MDg5LDkgQEAgdm9pZCBkcm1fZmJfaGVscGVyX2Zpbmkoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlcikKPiA+ICAJfQo+ID4gIAlmYl9oZWxwZXItPmZiZGV2ID0gTlVMTDsKPiA+ICAKPiA+ ICsJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KGZiX2hlbHBlci0+Z2FtbWFfbHV0KTsKPiA+ICsJZmJf aGVscGVyLT5nYW1tYV9sdXQgPSBOVUxMOwo+ID4gKwo+ID4gIAltdXRleF9sb2NrKCZrZXJuZWxf ZmJfaGVscGVyX2xvY2spOwo+ID4gIAlpZiAoIWxpc3RfZW1wdHkoJmZiX2hlbHBlci0+a2VybmVs X2ZiX2xpc3QpKSB7Cj4gPiAgCQlsaXN0X2RlbCgmZmJfaGVscGVyLT5rZXJuZWxfZmJfbGlzdCk7 Cj4gPiBAQCAtMTM5MCw2MSArMTQ4NiwxNiBAQCBzdGF0aWMgaW50IHNldGNtYXBfbGVnYWN5KHN0 cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiA+ICAJcmV0dXJuIHJl dDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqc2V0 Y21hcF9uZXdfZ2FtbWFfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+IC0JCQkJCQkgICAg ICAgc3RydWN0IGZiX2NtYXAgKmNtYXApCj4gPiAtewo+ID4gLQlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmdhbW1hX2x1 dDsKPiA+IC0Jc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dDsKPiA+IC0JaW50IHNpemUgPSBjcnRj LT5nYW1tYV9zaXplOwo+ID4gLQlpbnQgaTsKPiA+IC0KPiA+IC0JaWYgKCFzaXplIHx8IGNtYXAt PnN0YXJ0ICsgY21hcC0+bGVuID4gc2l6ZSkKPiA+IC0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp Owo+ID4gLQo+ID4gLQlnYW1tYV9sdXQgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoZGV2LCBz aXplb2YoKmx1dCkgKiBzaXplLCBOVUxMKTsKPiA+IC0JaWYgKElTX0VSUihnYW1tYV9sdXQpKQo+ ID4gLQkJcmV0dXJuIGdhbW1hX2x1dDsKPiA+IC0KPiA+IC0JbHV0ID0gZ2FtbWFfbHV0LT5kYXRh Owo+ID4gLQlpZiAoY21hcC0+c3RhcnQgfHwgY21hcC0+bGVuICE9IHNpemUpIHsKPiA+IC0JCXUx NiAqciA9IGNydGMtPmdhbW1hX3N0b3JlOwo+ID4gLQkJdTE2ICpnID0gciArIGNydGMtPmdhbW1h X3NpemU7Cj4gPiAtCQl1MTYgKmIgPSBnICsgY3J0Yy0+Z2FtbWFfc2l6ZTsKPiA+IC0KPiA+IC0J CWZvciAoaSA9IDA7IGkgPCBjbWFwLT5zdGFydDsgaSsrKSB7Cj4gPiAtCQkJbHV0W2ldLnJlZCA9 IHJbaV07Cj4gPiAtCQkJbHV0W2ldLmdyZWVuID0gZ1tpXTsKPiA+IC0JCQlsdXRbaV0uYmx1ZSA9 IGJbaV07Cj4gPiAtCQl9Cj4gPiAtCQlmb3IgKGkgPSBjbWFwLT5zdGFydCArIGNtYXAtPmxlbjsg aSA8IHNpemU7IGkrKykgewo+ID4gLQkJCWx1dFtpXS5yZWQgPSByW2ldOwo+ID4gLQkJCWx1dFtp XS5ncmVlbiA9IGdbaV07Cj4gPiAtCQkJbHV0W2ldLmJsdWUgPSBiW2ldOwo+ID4gLQkJfQo+ID4g LQl9Cj4gPiAtCj4gPiAtCWZvciAoaSA9IDA7IGkgPCBjbWFwLT5sZW47IGkrKykgewo+ID4gLQkJ bHV0W2NtYXAtPnN0YXJ0ICsgaV0ucmVkID0gY21hcC0+cmVkW2ldOwo+ID4gLQkJbHV0W2NtYXAt PnN0YXJ0ICsgaV0uZ3JlZW4gPSBjbWFwLT5ncmVlbltpXTsKPiA+IC0JCWx1dFtjbWFwLT5zdGFy dCArIGldLmJsdWUgPSBjbWFwLT5ibHVlW2ldOwo+ID4gLQl9Cj4gPiAtCj4gPiAtCXJldHVybiBn YW1tYV9sdXQ7Cj4gPiAtfQo+ID4gLQo+ID4gIHN0YXRpYyBpbnQgc2V0Y21hcF9hdG9taWMoc3Ry dWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQo+ID4gIHsKPiA+ICAJc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKPiA+ICAJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2Owo+ID4gIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgKmdhbW1hX2x1dCA9IE5VTEw7Cj4gPiAgCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJl X2N0eCBjdHg7Cj4gPiAtCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ICAJ c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ID4gIAlzdHJ1Y3QgZHJtX21vZGVfc2V0 ICptb2Rlc2V0Owo+ID4gIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4gPiAgCXUxNiAqciwgKmcs ICpiOwo+ID4gLQlib29sIHJlcGxhY2VkOwo+ID4gIAlpbnQgcmV0ID0gMDsKPiA+ICAKPiA+ICAJ ZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIDApOwo+ID4gQEAgLTE0NjgsMTggKzE1MTks OSBAQCBzdGF0aWMgaW50IHNldGNtYXBfYXRvbWljKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1 Y3QgZmJfaW5mbyAqaW5mbykKPiA+ICAJCQlnb3RvIG91dF9zdGF0ZTsKPiA+ICAJCX0KPiA+ICAK PiA+IC0JCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRj KTsKPiA+IC0JCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpIHsKPiA+IC0JCQlyZXQgPSBQVFJfRVJS KGNydGNfc3RhdGUpOwo+ID4gKwkJcmV0ID0gc2V0Y21hcF9jcnRjX2F0b21pYyhzdGF0ZSwgY3J0 YywgZ2FtbWFfbHV0KTsKPiA+ICsJCWlmIChyZXQpCj4gPiAgCQkJZ290byBvdXRfc3RhdGU7Cj4g PiAtCQl9Cj4gPiAtCj4gPiAtCQlyZXBsYWNlZCAgPSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9i KCZjcnRjX3N0YXRlLT5kZWdhbW1hX2x1dCwKPiA+IC0JCQkJCQkgICAgICBOVUxMKTsKPiA+IC0J CXJlcGxhY2VkIHw9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2Jsb2IoJmNydGNfc3RhdGUtPmN0bSwg TlVMTCk7Cj4gPiAtCQlyZXBsYWNlZCB8PSBkcm1fcHJvcGVydHlfcmVwbGFjZV9ibG9iKCZjcnRj X3N0YXRlLT5nYW1tYV9sdXQsCj4gPiAtCQkJCQkJICAgICAgZ2FtbWFfbHV0KTsKPiA+IC0JCWNy dGNfc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKPiA+ICAJfQo+ID4gIAo+ ID4gIAlyZXQgPSBkcm1fYXRvbWljX2NvbW1pdChzdGF0ZSk7Cj4gPiBAQCAtMTQ5OCw2ICsxNTQw LDExIEBAIHN0YXRpYyBpbnQgc2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0 cnVjdCBmYl9pbmZvICppbmZvKQo+ID4gIAkJbWVtY3B5KGIgKyBjbWFwLT5zdGFydCwgY21hcC0+ Ymx1ZSwgY21hcC0+bGVuICogc2l6ZW9mKCpiKSk7Cj4gPiAgCX0KPiAKPiBUaGUgYWJvdmUgInVw ZGF0ZSBsZWdhY3kgY29sb3IgdGFibGUiIHN0dWZmIGlzIG1pc3NpbmcgZnJvbSB0aGUKPiByZXN0 b3JlX2ZiZGV2X21vZGVfYXRvbWljIHZlcnNpb24uCgpJZiB0aGUgY21hcCBkaWRuJ3QgY2hhbmdl IGluIHRoZSBtZWFudGltZSB0aGVyZSBzaG91bGQgYmUgbm90aGluZyB0bwp1cGRhdGUsIG1heWJl LiBUaG91Z2ggSSBzdXBwb3NlIGlmIHNvbWVvbmUgZGlkIGEgZ2FtbWFfc2V0IGluIHRoZQptZWFu dGltZSB3ZSBtaWdodCBiZSBvdXQgb2Ygc3luYyBhIGJpdCBhZ2Fpbi4KCkkgd2FzIGFjdHVhbGx5 IHRoaW5raW5nIG9mIG51a2luZyB0aGlzIGxlZ2FjeSBnYW1tYV9zdG9yZSBzdHVmZgplbnRpcmVs eSBmb3IgYXRvbWljIGRyaXZlcnMuIEl0J3MgYWxyZWFkeSBvdXQgb2Ygc3luYyB3aXRoIHRoZQpH QU1NQV9MVVQgcHJvcCBhbnl3YXkgc28gc2VlbXMgbW9zdGx5IGRlYWQgd2VpZ2h0LgoKPiBVbmlm eSBtb3JlLCBpLmUuIG1heWJlIGNvbnZlcnQKPiBzZXRjbWFwX2F0b21pYyB0byBqdXN0IHVwZGF0 ZSB0aGUgcHJvcGVydHkgaW4gZmJfaGVscGVyLT5nYW1tYV9sdXQsIGFuZAo+IHRoZW4gY2FsbCBp bnRvIHJlc3RvcmVfZmJkZXZfbW9kZV9hdG9taWMgdG8gZG8gYWxsIG9mIHRoZSBoZWF2eSBsaWZ0 aW5nPwoKSG1tLiBZZWFoLCB0aGF0IHNlZW1zIGxpa2UgaXQgY291bGQgd29yay4KCj4gCj4gT3Ig bWF5YmUgd2Ugc2hvdWxkIHB1c2ggdGhpcyBpbnRvCj4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRl X2xlZ2FjeV9tb2Rlc2V0X3N0YXRlKCksIGJ1dCB0aGF0IGRvZXNuJ3QgcXVpdGUKPiB3b3JrIGJl Y2F1c2UgbG9ja2luZyBydWxlcyBhcmUgc2lsbHkgOi0vIE9yIHRlYWNoIHRoZSBnYW1tYV9nZXQg aW9jdGwgdG8KPiBsb29rIGF0IGF0b21pYyBhbmQgZGl0Y2ggdGhpcywgZHVubm8uCgpZZWFoLCB0 aGF0IHdhcyBteSB0aGlua2luZyBmb3IgZ2V0dGluZyByaWQgb2YgZ2FtbWFfc3RvcmUuIEl0IHdv dWxkCmFsc28gZml4IHRoZSBvdXQgb2Ygc3luYyBpc3N1ZSBiZXR3ZWVuIGdldF9nYW1tYSBhbmQg R0FNTUFfTFVULgpJIHN1cHBvc2UgSSBzaG91bGQganVzdCBkbyBpdCBpbnN0ZWFkIG9mIHByb2Ny YXN0aW5hdGluZy4KClRoZXJlIGFyZSBhIGZldyBvcGVuIHF1ZXN0aW9ucyB0aG91Z2g6IAotIHdo YXQgaWYgdGhlIGN1cnJlbnQgTFVUIGlzIHRoZSB3cm9uZyBzaXplPwotIHdoYXQgaWYgdGhlcmUg aXMgbm8gTFVUPwoKSSBzZWUgdHdvIG9wdGlvbnM6CjEpIExpZSBhbmQgYWx3YXlzIHJldHVybiBz b21ldGhpbmcgd2l0aCBjcnRjLT5nYW1tYV9zaXplCiAgIGVudHJpZXMsIGllLiBqdXN0IGR1cGxp Y2F0ZS9kcm9wIGVudHJpZXMgZm9yIHRoZSB3cm9uZyBzaXplLAogICBhbmQganVzdCByZXR1cm4g YSBsaW5lYXIgTFVUIHdoZW4gdGhlcmUgaXMgbm8gTFVUIGFjdHVhbGx5CiAgIGxvYWRlZAoyKSBF eHBvc2UgdGhlIHRydXRoIGFuZCBmaWd1cmUgb3V0IGlmIGV4aXN0aW5nIHVzZXJzcGFjZQogICBj b3VsZCBhY3R1YWxseSBoYW5kbGUgaXQuIFF1aWNrIHNjYW4gc2hvd3MgdGhhdCBtb3N0IHVzZXJz CiAgIHdvdWxkIGp1c3QgaWdub3JlIHRoZSBleGlzdGluZyBMVVQgaW4gdGhpcyBjYXNlLgoKT3B0 aW9uIDEgc2VlbXMgc2FmZXIuCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==