From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 7/7] drm/udl: Move udl_handle_damage() into udl_modeset.c Date: Thu, 28 Nov 2019 15:15:27 +0100 Message-ID: <20191128141527.GA406127@phenom.ffwll.local> References: <20191126134707.22385-1-tzimmermann@suse.de> <20191126134707.22385-8-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 53FC06E82C for ; Thu, 28 Nov 2019 14:15:31 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id j42so5471596wrj.12 for ; Thu, 28 Nov 2019 06:15:31 -0800 (PST) Content-Disposition: inline In-Reply-To: <20191126134707.22385-8-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thomas Zimmermann Cc: dri-devel@lists.freedesktop.org, kraxel@redhat.com, airlied@redhat.com, sam@ravnborg.org, emil.velikov@collabora.com List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBOb3YgMjYsIDIwMTkgYXQgMDI6NDc6MDdQTSArMDEwMCwgVGhvbWFzIFppbW1lcm1h bm4gd3JvdGU6Cj4gVGhlIG9ubHkgY2FsbGVyIG9mIHVkbF9oYW5kbGVfZGFtYWdlKCkgaW4gdGhl IHBsYW5lLXVwZGF0ZSBmdW5jdGlvbgo+IGluIHVkbF9tb2Rlc2V0LmMuIE1vdmUgdWRsX2hhbmRs ZV9kYW1hZ2UoKSB0aGVyZSwgbWFrZSBpdCBzdGF0aWMsIGFuZAo+IHJlbW92ZSBzZXZlcmFsIGxl ZnQtb3ZlciBtYWNyb3MuCj4gCj4gU2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6 aW1tZXJtYW5uQHN1c2UuZGU+CgpSZXZpZXdlZC1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4KCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS91ZGwvTWFrZWZpbGUgICAg ICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYuaCAgICAgfCAgIDMgLQo+ ICBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5jICAgICAgfCAxNDIgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21vZGVzZXQuYyB8ICA4 OCArKysrKysrKysrKysrKysrKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCsp LCAxNDYgZGVsZXRpb25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v dWRsL3VkbF9mYi5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS91ZGwvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL01ha2VmaWxlCj4gaW5kZXggMTc3Y2U3NGY0Y2Y0Li5i NTAxNzliYjRkZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3VkbC9NYWtlZmlsZQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvTWFrZWZpbGUKPiBAQCAtMSw0ICsxLDQgQEAKPiAg IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gLXVkbC15IDo9IHVkbF9k cnYubyB1ZGxfbW9kZXNldC5vIHVkbF9jb25uZWN0b3IubyB1ZGxfbWFpbi5vIHVkbF9mYi5vIHVk bF90cmFuc2Zlci5vIHVkbF9nZW0ubwo+ICt1ZGwteSA6PSB1ZGxfZHJ2Lm8gdWRsX21vZGVzZXQu byB1ZGxfY29ubmVjdG9yLm8gdWRsX21haW4ubyB1ZGxfdHJhbnNmZXIubyB1ZGxfZ2VtLm8KPiAg Cj4gIG9iai0kKENPTkZJR19EUk1fVURMKSA6PSB1ZGwubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdWRsL3VkbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2Rydi5oCj4g aW5kZXggZTU0MGY4ZTY0YWExLi5hYjYyYTZhZWNkMDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3VkbC91ZGxfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYu aAo+IEBAIC05Myw5ICs5Myw2IEBAIGludCB1ZGxfcmVuZGVyX2hsaW5lKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIGludCBsb2dfYnBwLCBzdHJ1Y3QgdXJiICoqdXJiX3B0ciwKPiAgc3RydWN0IGRy bV9nZW1fb2JqZWN0ICp1ZGxfZHJpdmVyX2dlbV9jcmVhdGVfb2JqZWN0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gIAkJCQkJCSAgICBzaXplX3Qgc2l6ZSk7Cj4gIAo+IC1pbnQgdWRsX2hhbmRs ZV9kYW1hZ2Uoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKPiAtCQkg ICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwo+IC0KPiAgaW50IHVkbF9kcm9wX3VzYihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAgCj4gICNkZWZpbmUgQ01EX1dSSVRFX1JBVzggICAiXHhB Rlx4NjAiIC8qKjwgOCBiaXQgcmF3IHdyaXRlIGNvbW1hbmQuICovCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS91ZGwvdWRsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5j Cj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggM2Q4Y2Y2NzRkZmE1Li4wMDAwMDAw MDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5jCj4gKysrIC9kZXYvbnVs bAo+IEBAIC0xLDE0MiArMCwwIEBACj4gLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkKPiAtLyoKPiAtICogQ29weXJpZ2h0IChDKSAyMDEyIFJlZCBIYXQKPiAtICoKPiAt ICogYmFzZWQgaW4gcGFydHMgb24gdWRsZmIuYzoKPiAtICogQ29weXJpZ2h0IChDKSAyMDA5IFJv YmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+Cj4gLSAqIENvcHlyaWdodCAoQykgMjAw OSBKYXlhIEt1bWFyIDxqYXlha3VtYXIubGttbEBnbWFpbC5jb20+Cj4gLSAqIENvcHlyaWdodCAo QykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+Cj4gLSAqLwo+IC0K PiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Cj4gLQo+IC0jaW5jbHVkZSA8ZHJtL2Ry bV9mb3VyY2MuaD4KPiAtI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oPgo+IC0K PiAtI2luY2x1ZGUgInVkbF9kcnYuaCIKPiAtCj4gLSNkZWZpbmUgRExfQUxJR05fVVAoeCwgYSkg QUxJR04oeCwgYSkKPiAtI2RlZmluZSBETF9BTElHTl9ET1dOKHgsIGEpIEFMSUdOX0RPV04oeCwg YSkKPiAtCj4gLS8qKiBSZWFkIHRoZSByZWQgY29tcG9uZW50ICgwLi4yNTUpIG9mIGEgMzIgYnBw IGNvbG91ci4gKi8KPiAtI2RlZmluZSBETE9fUkdCX0dFVFJFRChjb2wpICh1aW50OF90KSgoY29s KSAmIDB4RkYpCj4gLQo+IC0vKiogUmVhZCB0aGUgZ3JlZW4gY29tcG9uZW50ICgwLi4yNTUpIG9m IGEgMzIgYnBwIGNvbG91ci4gKi8KPiAtI2RlZmluZSBETE9fUkdCX0dFVEdSTihjb2wpICh1aW50 OF90KSgoKGNvbCkgPj4gOCkgJiAweEZGKQo+IC0KPiAtLyoqIFJlYWQgdGhlIGJsdWUgY29tcG9u ZW50ICgwLi4yNTUpIG9mIGEgMzIgYnBwIGNvbG91ci4gKi8KPiAtI2RlZmluZSBETE9fUkdCX0dF VEJMVShjb2wpICh1aW50OF90KSgoKGNvbCkgPj4gMTYpICYgMHhGRikKPiAtCj4gLS8qKiBSZXR1 cm4gcmVkL2dyZWVuIGNvbXBvbmVudCBvZiBhIDE2IGJwcCBjb2xvdXIgbnVtYmVyLiAqLwo+IC0j ZGVmaW5lIERMT19SRzE2KHJlZCwgZ3JuKSAodWludDhfdCkoKCgocmVkKSAmIDB4RjgpIHwgKChn cm4pID4+IDUpKSAmIDB4RkYpCj4gLQo+IC0vKiogUmV0dXJuIGdyZWVuL2JsdWUgY29tcG9uZW50 IG9mIGEgMTYgYnBwIGNvbG91ciBudW1iZXIuICovCj4gLSNkZWZpbmUgRExPX0dCMTYoZ3JuLCBi bHUpICh1aW50OF90KSgoKCgoZ3JuKSAmIDB4MUMpIDw8IDMpIHwgKChibHUpID4+IDMpKSAmIDB4 RkYpCj4gLQo+IC0vKiogUmV0dXJuIDggYnBwIGNvbG91ciBudW1iZXIgZnJvbSByZWQsIGdyZWVu IGFuZCBibHVlIGNvbXBvbmVudHMuICovCj4gLSNkZWZpbmUgRExPX1JHQjgocmVkLCBncm4sIGJs dSkgKCgoKHJlZCkgPDwgNSkgfCAoKChncm4pICYgMykgPDwgMykgfCAoKGJsdSkgJiA3KSkgJiAw eEZGKQo+IC0KPiAtI2lmIDAKPiAtc3RhdGljIHVpbnQ4X3QgcmdiOCh1aW50MzJfdCBjb2wpCj4g LXsKPiAtCXVpbnQ4X3QgcmVkID0gRExPX1JHQl9HRVRSRUQoY29sKTsKPiAtCXVpbnQ4X3QgZ3Ju ID0gRExPX1JHQl9HRVRHUk4oY29sKTsKPiAtCXVpbnQ4X3QgYmx1ID0gRExPX1JHQl9HRVRCTFUo Y29sKTsKPiAtCj4gLQlyZXR1cm4gRExPX1JHQjgocmVkLCBncm4sIGJsdSk7Cj4gLX0KPiAtCj4g LXN0YXRpYyB1aW50MTZfdCByZ2IxNih1aW50MzJfdCBjb2wpCj4gLXsKPiAtCXVpbnQ4X3QgcmVk ID0gRExPX1JHQl9HRVRSRUQoY29sKTsKPiAtCXVpbnQ4X3QgZ3JuID0gRExPX1JHQl9HRVRHUk4o Y29sKTsKPiAtCXVpbnQ4X3QgYmx1ID0gRExPX1JHQl9HRVRCTFUoY29sKTsKPiAtCj4gLQlyZXR1 cm4gKERMT19SRzE2KHJlZCwgZ3JuKSA8PCA4KSArIERMT19HQjE2KGdybiwgYmx1KTsKPiAtfQo+ IC0jZW5kaWYKPiAtCj4gLWludCB1ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgaW50IHgsIGludCB5LAo+IC0JCSAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkK PiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiLT5kZXY7Cj4gLQlzdHJ1Y3QgdWRs X2RldmljZSAqdWRsID0gdG9fdWRsKGRldik7Cj4gLQlpbnQgaSwgcmV0Owo+IC0JY2hhciAqY21k Owo+IC0JY3ljbGVzX3Qgc3RhcnRfY3ljbGVzLCBlbmRfY3ljbGVzOwo+IC0JaW50IGJ5dGVzX3Nl bnQgPSAwOwo+IC0JaW50IGJ5dGVzX2lkZW50aWNhbCA9IDA7Cj4gLQlzdHJ1Y3QgdXJiICp1cmI7 Cj4gLQlpbnQgYWxpZ25lZF94Owo+IC0JaW50IGxvZ19icHA7Cj4gLQl2b2lkICp2YWRkcjsKPiAt Cj4gLQlpZiAoV0FSTl9PTighaXNfcG93ZXJfb2ZfMihmYi0+Zm9ybWF0LT5jcHBbMF0pKSkKPiAt CQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlsb2dfYnBwID0gX19mZnMoZmItPmZvcm1hdC0+Y3Bw WzBdKTsKPiAtCj4gLQl2YWRkciA9IGRybV9nZW1fc2htZW1fdm1hcChmYi0+b2JqWzBdKTsKPiAt CWlmIChJU19FUlIodmFkZHIpKSB7Cj4gLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdm1hcCBmYlxu Iik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JYWxpZ25lZF94ID0gRExfQUxJR05fRE9X Tih4LCBzaXplb2YodW5zaWduZWQgbG9uZykpOwo+IC0Jd2lkdGggPSBETF9BTElHTl9VUCh3aWR0 aCArICh4LWFsaWduZWRfeCksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cj4gLQl4ID0gYWxpZ25l ZF94Owo+IC0KPiAtCWlmICgod2lkdGggPD0gMCkgfHwKPiAtCSAgICAoeCArIHdpZHRoID4gZmIt PndpZHRoKSB8fAo+IC0JICAgICh5ICsgaGVpZ2h0ID4gZmItPmhlaWdodCkpIHsKPiAtCQlyZXQg PSAtRUlOVkFMOwo+IC0JCWdvdG8gZXJyX2RybV9nZW1fc2htZW1fdnVubWFwOwo+IC0JfQo+IC0K PiAtCXN0YXJ0X2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKPiAtCj4gLQl1cmIgPSB1ZGxfZ2V0X3Vy YihkZXYpOwo+IC0JaWYgKCF1cmIpCj4gLQkJZ290byBvdXQ7Cj4gLQljbWQgPSB1cmItPnRyYW5z ZmVyX2J1ZmZlcjsKPiAtCj4gLQlmb3IgKGkgPSB5OyBpIDwgeSArIGhlaWdodCA7IGkrKykgewo+ IC0JCWNvbnN0IGludCBsaW5lX29mZnNldCA9IGZiLT5waXRjaGVzWzBdICogaTsKPiAtCQljb25z dCBpbnQgYnl0ZV9vZmZzZXQgPSBsaW5lX29mZnNldCArICh4IDw8IGxvZ19icHApOwo+IC0JCWNv bnN0IGludCBkZXZfYnl0ZV9vZmZzZXQgPSAoZmItPndpZHRoICogaSArIHgpIDw8IGxvZ19icHA7 Cj4gLQkJaWYgKHVkbF9yZW5kZXJfaGxpbmUoZGV2LCBsb2dfYnBwLCAmdXJiLCAoY2hhciAqKXZh ZGRyLAo+IC0JCQkJICAgICAmY21kLCBieXRlX29mZnNldCwgZGV2X2J5dGVfb2Zmc2V0LAo+IC0J CQkJICAgICB3aWR0aCA8PCBsb2dfYnBwLAo+IC0JCQkJICAgICAmYnl0ZXNfaWRlbnRpY2FsLCAm Ynl0ZXNfc2VudCkpCj4gLQkJCWdvdG8gZXJyb3I7Cj4gLQl9Cj4gLQo+IC0JaWYgKGNtZCA+IChj aGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Cj4gLQkJLyogU2VuZCBwYXJ0aWFsIGJ1ZmZl ciByZW1haW5pbmcgYmVmb3JlIGV4aXRpbmcgKi8KPiAtCQlpbnQgbGVuOwo+IC0JCWlmIChjbWQg PCAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xl bmd0aCkKPiAtCQkJKmNtZCsrID0gMHhBRjsKPiAtCQlsZW4gPSBjbWQgLSAoY2hhciAqKSB1cmIt PnRyYW5zZmVyX2J1ZmZlcjsKPiAtCQlyZXQgPSB1ZGxfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVu KTsKPiAtCQlieXRlc19zZW50ICs9IGxlbjsKPiAtCX0gZWxzZQo+IC0JCXVkbF91cmJfY29tcGxl dGlvbih1cmIpOwo+IC0KPiAtZXJyb3I6Cj4gLQlhdG9taWNfYWRkKGJ5dGVzX3NlbnQsICZ1ZGwt PmJ5dGVzX3NlbnQpOwo+IC0JYXRvbWljX2FkZChieXRlc19pZGVudGljYWwsICZ1ZGwtPmJ5dGVz X2lkZW50aWNhbCk7Cj4gLQlhdG9taWNfYWRkKCh3aWR0aCAqIGhlaWdodCkgPDwgbG9nX2JwcCwg JnVkbC0+Ynl0ZXNfcmVuZGVyZWQpOwo+IC0JZW5kX2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKPiAt CWF0b21pY19hZGQoKCh1bnNpZ25lZCBpbnQpICgoZW5kX2N5Y2xlcyAtIHN0YXJ0X2N5Y2xlcykK PiAtCQkgICAgPj4gMTApKSwgLyogS2N5Y2xlcyAqLwo+IC0JCSAgICZ1ZGwtPmNwdV9rY3ljbGVz X3VzZWQpOwo+IC0KPiAtb3V0Ogo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmItPm9ialswXSwg dmFkZHIpOwo+IC0KPiAtCXJldHVybiAwOwo+IC0KPiAtZXJyX2RybV9nZW1fc2htZW1fdnVubWFw Ogo+IC0JZHJtX2dlbV9zaG1lbV92dW5tYXAoZmItPm9ialswXSwgdmFkZHIpOwo+IC0JcmV0dXJu IHJldDsKPiAtfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0 LmMgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBpbmRleCA4M2U4MDA4M2Uw YjIuLjcxMDdjOTA2NzJhZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9t b2Rlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0LmMKPiBAQCAt MTIsNyArMTIsOSBAQAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gICNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2RhbWFn ZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4gICNpbmNsdWRlIDxk cm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2Vt X3NobWVtX2hlbHBlci5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFi bGVzLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgo+ICAKPiBAQCAtMjgyLDYgKzI4 NCw5MiBAQCBzdGF0aWMgdm9pZCB1ZGxfY3J0Y19kcG1zKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywg aW50IG1vZGUpCj4gIAo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IHVkbF9oYW5kbGVfZGFtYWdlKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCBpbnQgeCwgaW50IHksCj4gKwkJCSAgICAgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmItPmRl djsKPiArCXN0cnVjdCB1ZGxfZGV2aWNlICp1ZGwgPSB0b191ZGwoZGV2KTsKPiArCWludCBpLCBy ZXQ7Cj4gKwljaGFyICpjbWQ7Cj4gKwljeWNsZXNfdCBzdGFydF9jeWNsZXMsIGVuZF9jeWNsZXM7 Cj4gKwlpbnQgYnl0ZXNfc2VudCA9IDA7Cj4gKwlpbnQgYnl0ZXNfaWRlbnRpY2FsID0gMDsKPiAr CXN0cnVjdCB1cmIgKnVyYjsKPiArCWludCBhbGlnbmVkX3g7Cj4gKwlpbnQgbG9nX2JwcDsKPiAr CXZvaWQgKnZhZGRyOwo+ICsKPiArCWlmIChXQVJOX09OKCFpc19wb3dlcl9vZl8yKGZiLT5mb3Jt YXQtPmNwcFswXSkpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWxvZ19icHAgPSBfX2Zm cyhmYi0+Zm9ybWF0LT5jcHBbMF0pOwo+ICsKPiArCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFw KGZiLT5vYmpbMF0pOwo+ICsJaWYgKElTX0VSUih2YWRkcikpIHsKPiArCQlEUk1fRVJST1IoImZh aWxlZCB0byB2bWFwIGZiXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlhbGlnbmVk X3ggPSBBTElHTl9ET1dOKHgsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cj4gKwl3aWR0aCA9IEFM SUdOKHdpZHRoICsgKHgtYWxpZ25lZF94KSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKPiArCXgg PSBhbGlnbmVkX3g7Cj4gKwo+ICsJaWYgKCh3aWR0aCA8PSAwKSB8fAo+ICsJICAgICh4ICsgd2lk dGggPiBmYi0+d2lkdGgpIHx8Cj4gKwkgICAgKHkgKyBoZWlnaHQgPiBmYi0+aGVpZ2h0KSkgewo+ ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJfZHJtX2dlbV9zaG1lbV92dW5tYXA7Cj4g Kwl9Cj4gKwo+ICsJc3RhcnRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOwo+ICsKPiArCXVyYiA9IHVk bF9nZXRfdXJiKGRldik7Cj4gKwlpZiAoIXVyYikKPiArCQlnb3RvIG91dDsKPiArCWNtZCA9IHVy Yi0+dHJhbnNmZXJfYnVmZmVyOwo+ICsKPiArCWZvciAoaSA9IHk7IGkgPCB5ICsgaGVpZ2h0IDsg aSsrKSB7Cj4gKwkJY29uc3QgaW50IGxpbmVfb2Zmc2V0ID0gZmItPnBpdGNoZXNbMF0gKiBpOwo+ ICsJCWNvbnN0IGludCBieXRlX29mZnNldCA9IGxpbmVfb2Zmc2V0ICsgKHggPDwgbG9nX2JwcCk7 Cj4gKwkJY29uc3QgaW50IGRldl9ieXRlX29mZnNldCA9IChmYi0+d2lkdGggKiBpICsgeCkgPDwg bG9nX2JwcDsKPiArCj4gKwkJaWYgKHVkbF9yZW5kZXJfaGxpbmUoZGV2LCBsb2dfYnBwLCAmdXJi LCAoY2hhciAqKXZhZGRyLAo+ICsJCQkJICAgICAmY21kLCBieXRlX29mZnNldCwgZGV2X2J5dGVf b2Zmc2V0LAo+ICsJCQkJICAgICB3aWR0aCA8PCBsb2dfYnBwLAo+ICsJCQkJICAgICAmYnl0ZXNf aWRlbnRpY2FsLCAmYnl0ZXNfc2VudCkpCj4gKwkJCWdvdG8gZXJyb3I7Cj4gKwl9Cj4gKwo+ICsJ aWYgKGNtZCA+IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Cj4gKwkJLyogU2VuZCBw YXJ0aWFsIGJ1ZmZlciByZW1haW5pbmcgYmVmb3JlIGV4aXRpbmcgKi8KPiArCQlpbnQgbGVuOwo+ ICsJCWlmIChjbWQgPCAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+dHJhbnNm ZXJfYnVmZmVyX2xlbmd0aCkKPiArCQkJKmNtZCsrID0gMHhBRjsKPiArCQlsZW4gPSBjbWQgLSAo Y2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKPiArCQlyZXQgPSB1ZGxfc3VibWl0X3VyYihk ZXYsIHVyYiwgbGVuKTsKPiArCQlieXRlc19zZW50ICs9IGxlbjsKPiArCX0gZWxzZQo+ICsJCXVk bF91cmJfY29tcGxldGlvbih1cmIpOwo+ICsKPiArZXJyb3I6Cj4gKwlhdG9taWNfYWRkKGJ5dGVz X3NlbnQsICZ1ZGwtPmJ5dGVzX3NlbnQpOwo+ICsJYXRvbWljX2FkZChieXRlc19pZGVudGljYWws ICZ1ZGwtPmJ5dGVzX2lkZW50aWNhbCk7Cj4gKwlhdG9taWNfYWRkKCh3aWR0aCAqIGhlaWdodCkg PDwgbG9nX2JwcCwgJnVkbC0+Ynl0ZXNfcmVuZGVyZWQpOwo+ICsJZW5kX2N5Y2xlcyA9IGdldF9j eWNsZXMoKTsKPiArCWF0b21pY19hZGQoKCh1bnNpZ25lZCBpbnQpICgoZW5kX2N5Y2xlcyAtIHN0 YXJ0X2N5Y2xlcykKPiArCQkgICAgPj4gMTApKSwgLyogS2N5Y2xlcyAqLwo+ICsJCSAgICZ1ZGwt PmNwdV9rY3ljbGVzX3VzZWQpOwo+ICsKPiArb3V0Ogo+ICsJZHJtX2dlbV9zaG1lbV92dW5tYXAo ZmItPm9ialswXSwgdmFkZHIpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2RybV9nZW1f c2htZW1fdnVubWFwOgo+ICsJZHJtX2dlbV9zaG1lbV92dW5tYXAoZmItPm9ialswXSwgdmFkZHIp Owo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgLyoKPiAgICogU2ltcGxlIGRpc3BsYXkgcGlw ZWxpbmUKPiAgICovCj4gLS0gCj4gMi4yMy4wCj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2Fy ZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs