From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 26D1C6E38E for ; Fri, 26 Jan 2018 09:00:18 +0000 (UTC) Message-ID: <1516957215.2602.5.camel@intel.com> From: Mika Kahola Date: Fri, 26 Jan 2018 11:00:15 +0200 In-Reply-To: <20180123125642.58698-4-maarten.lankhorst@linux.intel.com> References: <20180123125642.58698-1-maarten.lankhorst@linux.intel.com> <20180123125642.58698-4-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 3/8] lib/fb: Handle planar formats in igt_calc_fb_size and create_bo_for_fb List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: mika.kahola@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst , igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCAyMDE4LTAxLTIzIGF0IDEzOjU2ICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPiBCeSBhZGRpbmcgc3VwcG9ydCBmb3IgcGxhbmFyIGZvcm1hdHMgdG8gaWd0X2NhbGNfZmJf c2l6ZSBhbmQKPiBjcmVhdGVfYm9fZm9yX2ZiLAo+IHdlIGNhbiBjYWxjdWxhdGUgZGltZW5zaW9u cyBhbmQgY3JlYXRlIGJhY2tpbmcgc3RvcmFnZSBmb3IgcGxhbmFyCj4gZnJhbWVidWZmZXJzLgo+ IAo+IFRoaXMgaXMgcmVxdWlyZWQgZm9yIGFkZGluZyBzdXBwb3J0IHRvIGNyZWF0ZSBwbGFuYXIg ZnJhbWVidWZmZXJzIGluCj4gdGhlIG5leHQgcGF0Y2guCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFh cnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KPiAtLS0K PiDCoGxpYi9pZ3RfZmIuYyB8IDE2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLQo+IC0tLS0tLS0tLS0tLQo+IMKgMSBmaWxlIGNoYW5nZWQsIDEyMyBpbnNl cnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9mYi5j IGIvbGliL2lndF9mYi5jCj4gaW5kZXggZGEwN2QxYTllMjFmLi42YTMzMWYwNjcyNGIgMTAwNjQ0 Cj4gLS0tIGEvbGliL2lndF9mYi5jCj4gKysrIGIvbGliL2lndF9mYi5jCj4gQEAgLTU0LDE0ICs1 NCwxNiBAQAo+IMKgICovCj4gwqAKPiDCoC8qIGRybSBmb3VyY2MvY2Fpcm8gZm9ybWF0IG1hcHMg Ki8KPiAtI2RlZmluZSBERihkaWQsIGNpZCwgX2JwcCwgX2RlcHRoKQlcCj4gLQl7IERSTV9GT1JN QVRfIyNkaWQsIENBSVJPX0ZPUk1BVF8jI2NpZCwgIyBkaWQsIF9icHAsIF9kZXB0aAo+IH0KPiAr I2RlZmluZSBERihkaWQsIGNpZCwgLi4uKQlcCj4gKwl7IERSTV9GT1JNQVRfIyNkaWQsIENBSVJP X0ZPUk1BVF8jI2NpZCwgIyBkaWQsIF9fVkFfQVJHU19fIH0KPiDCoHN0YXRpYyBzdHJ1Y3QgZm9y bWF0X2Rlc2Nfc3RydWN0IHsKPiDCoAl1aW50MzJfdCBkcm1faWQ7Cj4gwqAJY2Fpcm9fZm9ybWF0 X3QgY2Fpcm9faWQ7Cj4gwqAJY29uc3QgY2hhciAqbmFtZTsKPiDCoAlpbnQgYnBwOwo+IMKgCWlu dCBkZXB0aDsKPiArCWludCBwbGFuZXM7Cj4gKwlpbnQgcGxhbmVfYnBwWzRdOwpzaG91bGQgd2Ug ZGVmaW5lIGEgbWF4IHZhbHVlIGZvciB0aGlzIGluc3RlYWQgb2YgaGFyZGNvZGVkIG9uZT8KPiDC oH0gZm9ybWF0X2Rlc2NbXSA9IHsKPiDCoAlERihSR0I1NjUsCVJHQjE2XzU2NSwJMTYsIDE2KSwK PiDCoAkvL0RGKFJHQjg4OCwJSU5WQUxJRCwJMjQsIDI0KSwKPiBAQCAtNzQsNiArNzYsMjAgQEAg c3RhdGljIHN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3Qgewo+IMKgI2RlZmluZSBmb3JfZWFjaF9m b3JtYXQoZikJXAo+IMKgCWZvciAoZiA9IGZvcm1hdF9kZXNjOyBmIC0gZm9ybWF0X2Rlc2MgPAo+ IEFSUkFZX1NJWkUoZm9ybWF0X2Rlc2MpOyBmKyspCj4gwqAKPiArc3RhdGljIHN0cnVjdCBmb3Jt YXRfZGVzY19zdHJ1Y3QgKmxvb2t1cF9kcm1fZm9ybWF0KHVpbnQzMl90Cj4gZHJtX2Zvcm1hdCkK PiArewo+ICsJc3RydWN0IGZvcm1hdF9kZXNjX3N0cnVjdCAqZm9ybWF0Owo+ICsKPiArCWZvcl9l YWNoX2Zvcm1hdChmb3JtYXQpIHsKPiArCQlpZiAoZm9ybWF0LT5kcm1faWQgIT0gZHJtX2Zvcm1h dCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXJldHVybiBmb3JtYXQ7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gwqAvKioKPiDCoCAqIGlndF9nZXRfZmJfdGlsZV9zaXpl Ogo+IMKgICogQGZkOiB0aGUgRFJNIGZpbGUgZGVzY3JpcHRvcgo+IEBAIC0xNDIsMjcgKzE1OCw2 OCBAQCB2b2lkIGlndF9nZXRfZmJfdGlsZV9zaXplKGludCBmZCwgdWludDY0X3QKPiB0aWxpbmcs IGludCBmYl9icHAsCj4gwqAJfQo+IMKgfQo+IMKgCj4gLS8qKgo+IC0gKiBpZ3RfY2FsY19mYl9z aXplOgo+IC0gKiBAZmQ6IHRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yCj4gLSAqIEB3aWR0aDogd2lk dGggb2YgdGhlIGZyYW1lYnVmZmVyIGluIHBpeGVscwo+IC0gKiBAaGVpZ2h0OiBoZWlnaHQgb2Yg dGhlIGZyYW1lYnVmZmVyIGluIHBpeGVscwo+IC0gKiBAZm9ybWF0OiBkcm0gZm91cmNjIHBpeGVs IGZvcm1hdCBjb2RlCj4gLSAqIEB0aWxpbmc6IHRpbGluZyBsYXlvdXQgb2YgdGhlIGZyYW1lYnVm ZmVyIChhcyBmcmFtZWJ1ZmZlcgo+IG1vZGlmaWVyKQo+IC0gKiBAc2l6ZV9yZXQ6IHJldHVybmVk IHNpemUgZm9yIHRoZSBmcmFtZWJ1ZmZlcgo+IC0gKiBAc3RyaWRlX3JldDogcmV0dXJuZWQgc3Ry aWRlIGZvciB0aGUgZnJhbWVidWZmZXIKPiAtICoKPiAtICogVGhpcyBmdW5jdGlvbiByZXR1cm5z IHZhbGlkIHN0cmlkZSBhbmQgc2l6ZSB2YWx1ZXMgZm9yIGEKPiBmcmFtZWJ1ZmZlciB3aXRoIHRo ZQo+IC0gKiBzcGVjaWZpZWQgcGFyYW1ldGVycy4KPiAtICovCj4gLXZvaWQgaWd0X2NhbGNfZmJf c2l6ZShpbnQgZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QKPiBmb3JtYXQsIHVp bnQ2NF90IHRpbGluZywKPiAtCQnCoMKgwqDCoMKgwqB1bnNpZ25lZCAqc2l6ZV9yZXQsIHVuc2ln bmVkICpzdHJpZGVfcmV0KQo+ICtzdGF0aWMgdW5zaWduZWQgcGxhbmFyX3N0cmlkZShzdHJ1Y3Qg Zm9ybWF0X2Rlc2Nfc3RydWN0ICpmb3JtYXQsCj4gdW5zaWduZWQgd2lkdGgsIGludCBwbGFuZSkK PiArewo+ICsJdW5zaWduZWQgY3BwID0gZm9ybWF0LT5wbGFuZV9icHBbcGxhbmVdIC8gODsKPiAr Cj4gKwlpZiAoZm9ybWF0LT5kcm1faWQgPT0gRFJNX0ZPUk1BVF9OVjEyICYmIHBsYW5lID09IDEp Cj4gKwkJcmV0dXJuICh3aWR0aCArIDEpIC8gMiAqIGNwcDsKPiArCj4gKwlyZXR1cm4gd2lkdGgg KiBjcHA7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBwbGFuYXJfaGVpZ2h0KHN0cnVjdCBm b3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCwKPiB1bnNpZ25lZCBoZWlnaHQsIGludCBwbGFuZSkK PiArewo+ICsJaWYgKGZvcm1hdC0+ZHJtX2lkID09IERSTV9GT1JNQVRfTlYxMiAmJiBwbGFuZSA9 PSAxKQo+ICsJCXJldHVybiAoaGVpZ2h0ICsgMSkgLyAyOwo+ICsKPiArCXJldHVybiBoZWlnaHQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNhbGNfZmJfc2l6ZV9wbGFuYXIoaW50IGZkLCBpbnQg d2lkdGgsIGludCBoZWlnaHQsCj4gKwkJCQlzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpmb3Jt YXQsCj4gKwkJCQl1aW50NjRfdCB0aWxpbmcsIHVuc2lnbmVkICpzaXplX3JldCwKPiArCQkJCXVu c2lnbmVkICpzdHJpZGVfcmV0LCB1bnNpZ25lZAo+ICpvZmZzZXRzKQo+ICt7Cj4gKwlpbnQgcGxh bmU7Cj4gKwl1bnNpZ25lZCBzdHJpZGUgPSAwLCB0aWxlX3dpZHRoLCB0aWxlX2hlaWdodDsKPiAr Cj4gKwkqc2l6ZV9yZXQgPSAwOwo+ICsKPiArCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IGZvcm1h dC0+cGxhbmVzOyBwbGFuZSsrKSB7Cj4gKwkJdW5zaWduZWQgcGxhbmVfc3RyaWRlOwo+ICsKPiAr CQlpZ3RfZ2V0X2ZiX3RpbGVfc2l6ZShmZCwgdGlsaW5nLCBmb3JtYXQtCj4gPnBsYW5lX2JwcFtw bGFuZV0sICZ0aWxlX3dpZHRoLCAmdGlsZV9oZWlnaHQpOwo+ICsKPiArCQlwbGFuZV9zdHJpZGUg PSBBTElHTihwbGFuYXJfc3RyaWRlKGZvcm1hdCwgd2lkdGgsCj4gcGxhbmUpLCB0aWxlX3dpZHRo KTsKPiArCQlpZiAoc3RyaWRlIDwgcGxhbmVfc3RyaWRlKQo+ICsJCQlzdHJpZGUgPSBwbGFuZV9z dHJpZGU7Cj4gKwl9Cj4gKwo+ICsJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgZm9ybWF0LT5wbGFu ZXM7IHBsYW5lKyspIHsKPiArCQlpZiAob2Zmc2V0cykKPiArCQkJb2Zmc2V0c1twbGFuZV0gPSAq c2l6ZV9yZXQ7Cj4gKwo+ICsJCWlndF9nZXRfZmJfdGlsZV9zaXplKGZkLCB0aWxpbmcsIGZvcm1h dC0KPiA+cGxhbmVfYnBwW3BsYW5lXSwgJnRpbGVfd2lkdGgsICZ0aWxlX2hlaWdodCk7Cj4gKwo+ ICsJCSpzaXplX3JldCArPSBzdHJpZGUgKiBBTElHTihwbGFuYXJfaGVpZ2h0KGZvcm1hdCwKPiBo ZWlnaHQsIHBsYW5lKSwgdGlsZV9oZWlnaHQpOwo+ICsJfQo+ICsKPiArCWlmIChvZmZzZXRzKQo+ ICsJCWZvciAoOyBwbGFuZSA8IDQ7IHBsYW5lKyspCldlIGNvdWxkIGxvb3AgdGhyb3VnaCBtYXgg ZGVmaW5lIHZhbHVlIGhlcmUgdG9vIGluc3RlYWQgb2YgaGFyZGNvZGVkCm9uZS4KCj4gKwkJCW9m ZnNldHNbcGxhbmVdID0gMDsKPiArCj4gKwkqc3RyaWRlX3JldCA9IHN0cmlkZTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgY2FsY19mYl9zaXplX3BhY2tlZChpbnQgZmQsIGludCB3aWR0aCwgaW50 IGhlaWdodCwKPiArCQkJCXN0cnVjdCBmb3JtYXRfZGVzY19zdHJ1Y3QgKmZvcm1hdCwKPiB1aW50 NjRfdCB0aWxpbmcsCj4gKwkJCQl1bnNpZ25lZCAqc2l6ZV9yZXQsIHVuc2lnbmVkCj4gKnN0cmlk ZV9yZXQpCj4gwqB7Cj4gwqAJdW5zaWduZWQgaW50IHRpbGVfd2lkdGgsIHRpbGVfaGVpZ2h0LCBz dHJpZGUsIHNpemU7Cj4gLQlpbnQgYnBwID0gaWd0X2RybV9mb3JtYXRfdG9fYnBwKGZvcm1hdCk7 Cj4gLQlpbnQgYnl0ZV93aWR0aCA9IHdpZHRoICogKGJwcCAvIDgpOwo+ICsJaW50IGJ5dGVfd2lk dGggPSB3aWR0aCAqIChmb3JtYXQtPmJwcCAvIDgpOwo+IMKgCj4gLQlpZ3RfZ2V0X2ZiX3RpbGVf c2l6ZShmZCwgdGlsaW5nLCBicHAsICZ0aWxlX3dpZHRoLAo+ICZ0aWxlX2hlaWdodCk7Cj4gKwlp Z3RfZ2V0X2ZiX3RpbGVfc2l6ZShmZCwgdGlsaW5nLCBmb3JtYXQtPmJwcCwgJnRpbGVfd2lkdGgs Cj4gJnRpbGVfaGVpZ2h0KTsKPiDCoAo+IMKgCWlmICh0aWxpbmcgIT0gTE9DQUxfRFJNX0ZPUk1B VF9NT0RfTk9ORSAmJgo+IMKgCcKgwqDCoMKgaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQo ZmQpKSA8PSAzKSB7Cj4gQEAgLTE3Niw3ICsyMzMsNyBAQCB2b2lkIGlndF9jYWxjX2ZiX3NpemUo aW50IGZkLCBpbnQgd2lkdGgsIGludAo+IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50NjRf dCB0Cj4gwqAJCcKgKiB0aWxlZC4gQnV0IHRoZW4gdGhhdCBmYWlsdXJlIGlzIGV4cGVjdGVkLgo+ IMKgCQnCoCovCj4gwqAKPiAtCQl2ID0gd2lkdGggKiBicHAgLyA4Owo+ICsJCXYgPSBieXRlX3dp ZHRoOwo+IMKgCQlmb3IgKHN0cmlkZSA9IDUxMjsgc3RyaWRlIDwgdjsgc3RyaWRlICo9IDIpCj4g wqAJCQk7Cj4gwqAKPiBAQCAtMTkyLDYgKzI0OSwzMSBAQCB2b2lkIGlndF9jYWxjX2ZiX3NpemUo aW50IGZkLCBpbnQgd2lkdGgsIGludAo+IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCB1aW50NjRf dCB0Cj4gwqAJKnNpemVfcmV0ID0gc2l6ZTsKPiDCoH0KPiDCoAo+ICsvKioKPiArICogaWd0X2Nh bGNfZmJfc2l6ZToKPiArICogQGZkOiB0aGUgRFJNIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAd2lk dGg6IHdpZHRoIG9mIHRoZSBmcmFtZWJ1ZmZlciBpbiBwaXhlbHMKPiArICogQGhlaWdodDogaGVp Z2h0IG9mIHRoZSBmcmFtZWJ1ZmZlciBpbiBwaXhlbHMKPiArICogQGZvcm1hdDogZHJtIGZvdXJj YyBwaXhlbCBmb3JtYXQgY29kZQo+ICsgKiBAdGlsaW5nOiB0aWxpbmcgbGF5b3V0IG9mIHRoZSBm cmFtZWJ1ZmZlciAoYXMgZnJhbWVidWZmZXIKPiBtb2RpZmllcikKPiArICogQHNpemVfcmV0OiBy ZXR1cm5lZCBzaXplIGZvciB0aGUgZnJhbWVidWZmZXIKPiArICogQHN0cmlkZV9yZXQ6IHJldHVy bmVkIHN0cmlkZSBmb3IgdGhlIGZyYW1lYnVmZmVyCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB2YWxpZCBzdHJpZGUgYW5kIHNpemUgdmFsdWVzIGZvciBhCj4gZnJhbWVidWZmZXIg d2l0aCB0aGUKPiArICogc3BlY2lmaWVkIHBhcmFtZXRlcnMuCj4gKyAqLwo+ICt2b2lkIGlndF9j YWxjX2ZiX3NpemUoaW50IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90Cj4gZHJt X2Zvcm1hdCwgdWludDY0X3QgdGlsaW5nLAo+ICsJCcKgwqDCoMKgwqDCoHVuc2lnbmVkICpzaXpl X3JldCwgdW5zaWduZWQgKnN0cmlkZV9yZXQpCj4gK3sKPiArCXN0cnVjdCBmb3JtYXRfZGVzY19z dHJ1Y3QgKmZvcm1hdCA9Cj4gbG9va3VwX2RybV9mb3JtYXQoZHJtX2Zvcm1hdCk7Cj4gKwlpZ3Rf YXNzZXJ0KGZvcm1hdCk7Cj4gKwo+ICsJaWYgKGZvcm1hdC0+cGxhbmVzID4gMSkKPiArCQljYWxj X2ZiX3NpemVfcGxhbmFyKGZkLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsCj4gdGlsaW5nLCBzaXpl X3JldCwgc3RyaWRlX3JldCwgTlVMTCk7Cj4gKwllbHNlCj4gKwkJY2FsY19mYl9zaXplX3BhY2tl ZChmZCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LAo+IHRpbGluZywgc2l6ZV9yZXQsIHN0cmlkZV9y ZXQpOwo+ICt9Cj4gKwo+IMKgLyoqCj4gwqAgKiBpZ3RfZmJfbW9kX3RvX3RpbGluZzoKPiDCoCAq IEBtb2RpZmllcjogRFJNIGZyYW1lYnVmZmVyIG1vZGlmaWVyCj4gQEAgLTI0NSwxNyArMzI3LDIw IEBAIHVpbnQ2NF90IGlndF9mYl90aWxpbmdfdG9fbW9kKHVpbnQ2NF90IHRpbGluZykKPiDCoH0K PiDCoAo+IMKgLyogaGVscGVycyB0byBjcmVhdGUgbmljZS1sb29raW5nIGZyYW1lYnVmZmVycyAq Lwo+IC1zdGF0aWMgaW50IGNyZWF0ZV9ib19mb3JfZmIoaW50IGZkLCBpbnQgd2lkdGgsIGludCBo ZWlnaHQsIHVpbnQzMl90Cj4gZm9ybWF0LAo+ICtzdGF0aWMgaW50IGNyZWF0ZV9ib19mb3JfZmIo aW50IGZkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4gKwkJCcKgwqDCoMKgc3RydWN0IGZvcm1h dF9kZXNjX3N0cnVjdCAqZm9ybWF0LAo+IMKgCQkJwqDCoMKgwqB1aW50NjRfdCB0aWxpbmcsIHVu c2lnbmVkIHNpemUsIHVuc2lnbmVkCj4gc3RyaWRlLAo+IMKgCQkJwqDCoMKgwqB1bnNpZ25lZCAq c2l6ZV9yZXQsIHVuc2lnbmVkCj4gKnN0cmlkZV9yZXQsCj4gwqAJCQnCoMKgwqDCoGJvb2wgKmlz X2R1bWIpCj4gwqB7Cj4gwqAJaW50IGJvOwo+IMKgCj4gLQlpZiAodGlsaW5nIHx8IHNpemUgfHwg c3RyaWRlKSB7Cj4gKwlpZ3RfYXNzZXJ0KGZvcm1hdCk7Cj4gKwo+ICsJaWYgKHRpbGluZyB8fCBz aXplIHx8IHN0cmlkZSB8fCBmb3JtYXQtPnBsYW5lcyA+IDEpIHsKPiDCoAkJdW5zaWduZWQgY2Fs Y3VsYXRlZF9zaXplLCBjYWxjdWxhdGVkX3N0cmlkZTsKPiDCoAo+IC0JCWlndF9jYWxjX2ZiX3Np emUoZmQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdGlsaW5nLAo+ICsJCWlndF9jYWxjX2ZiX3Np emUoZmQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdC0+ZHJtX2lkLAo+IHRpbGluZywKPiDCoAkJCQnC oCZjYWxjdWxhdGVkX3NpemUsCj4gJmNhbGN1bGF0ZWRfc3RyaWRlKTsKPiDCoAkJaWYgKHN0cmlk ZSA9PSAwKQo+IMKgCQkJc3RyaWRlID0gY2FsY3VsYXRlZF9zdHJpZGU7Cj4gQEAgLTI5MCwxMiAr Mzc1LDEwIEBAIHN0YXRpYyBpbnQgY3JlYXRlX2JvX2Zvcl9mYihpbnQgZmQsIGludCB3aWR0aCwK PiBpbnQgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsCj4gwqAJCQlyZXR1cm4gLUVJTlZBTDsKPiDC oAkJfQo+IMKgCX0gZWxzZSB7Cj4gLQkJaW50IGJwcCA9IGlndF9kcm1fZm9ybWF0X3RvX2JwcChm b3JtYXQpOwo+IC0KPiDCoAkJaWYgKGlzX2R1bWIpCj4gwqAJCQkqaXNfZHVtYiA9IHRydWU7Cj4g wqAKPiAtCQlyZXR1cm4ga21zdGVzdF9kdW1iX2NyZWF0ZShmZCwgd2lkdGgsIGhlaWdodCwgYnBw LAo+IHN0cmlkZV9yZXQsCj4gKwkJcmV0dXJuIGttc3Rlc3RfZHVtYl9jcmVhdGUoZmQsIHdpZHRo LCBoZWlnaHQsCj4gZm9ybWF0LT5icHAsIHN0cmlkZV9yZXQsCj4gwqAJCQkJCcKgwqDCoHNpemVf cmV0KTsKPiDCoAl9Cj4gwqB9Cj4gQEAgLTMyMyw4ICs0MDYsOCBAQCBpbnQgaWd0X2NyZWF0ZV9i b193aXRoX2RpbWVuc2lvbnMoaW50IGZkLCBpbnQKPiB3aWR0aCwgaW50IGhlaWdodCwKPiDCoAkJ CQnCoMKgdW5zaWduZWQgc3RyaWRlLCB1bnNpZ25lZAo+ICpzaXplX3JldCwKPiDCoAkJCQnCoMKg dW5zaWduZWQgKnN0cmlkZV9yZXQsIGJvb2wKPiAqaXNfZHVtYikKPiDCoHsKPiAtCXJldHVybiBj cmVhdGVfYm9fZm9yX2ZiKGZkLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIG1vZGlmaWVyLAo+IDAs IHN0cmlkZSwKPiAtCQkJwqDCoMKgwqDCoHNpemVfcmV0LCBzdHJpZGVfcmV0LCBpc19kdW1iKTsK PiArCXJldHVybiBjcmVhdGVfYm9fZm9yX2ZiKGZkLCB3aWR0aCwgaGVpZ2h0LAo+IGxvb2t1cF9k cm1fZm9ybWF0KGZvcm1hdCksCj4gKwkJCQltb2RpZmllciwgMCwgc3RyaWRlLCBzaXplX3JldCwK PiBzdHJpZGVfcmV0LCBpc19kdW1iKTsKPiDCoH0KPiDCoAo+IMKgLyoqCj4gQEAgLTY3MSw5ICs3 NTQsMTAgQEAgaWd0X2NyZWF0ZV9mYl93aXRoX2JvX3NpemUoaW50IGZkLCBpbnQgd2lkdGgsCj4g aW50IGhlaWdodCwKPiDCoAo+IMKgCWlndF9kZWJ1ZygiJXMod2lkdGg9JWQsIGhlaWdodD0lZCwg Zm9ybWF0PTB4JXgsCj4gdGlsaW5nPTB4JSJQUkl4NjQiLCBzaXplPSVkKVxuIiwKPiDCoAkJwqDC oF9fZnVuY19fLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRpbGluZywgYm9fc2l6ZSk7Cj4gLQlm Yi0+Z2VtX2hhbmRsZSA9IGNyZWF0ZV9ib19mb3JfZmIoZmQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h dCwKPiB0aWxpbmcsCj4gLQkJCQkJwqDCoGJvX3NpemUsIGJvX3N0cmlkZSwgJmZiLQo+ID5zaXpl LAo+IC0JCQkJCcKgwqAmZmItPnN0cmlkZSwgJmZiLQo+ID5pc19kdW1iKTsKPiArCWZiLT5nZW1f aGFuZGxlID0gY3JlYXRlX2JvX2Zvcl9mYihmZCwgd2lkdGgsIGhlaWdodCwKPiArCQkJCQnCoMKg bG9va3VwX2RybV9mb3JtYXQoZm9ybWF0KSwKPiArCQkJCQnCoMKgdGlsaW5nLCBib19zaXplLAo+ IGJvX3N0cmlkZSwKPiArCQkJCQnCoMKgJmZiLT5zaXplLCAmZmItPnN0cmlkZSwKPiAmZmItPmlz X2R1bWIpOwo+IMKgCWlndF9hc3NlcnQoZmItPmdlbV9oYW5kbGUgPiAwKTsKPiDCoAo+IMKgCWln dF9kZWJ1ZygiJXMoaGFuZGxlPSVkLCBwaXRjaD0lZClcbiIsCj4gQEAgLTEwNjksNyArMTE1Myw3 IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZV9jYWlyb19zdXJmYWNlX19ibGl0KGludCBmZCwKPiBzdHJ1 Y3QgaWd0X2ZiICpmYikKPiDCoAnCoCogZGVzdGluYXRpb24sIHRpbGluZyBpdCBhdCB0aGUgc2Ft ZSB0aW1lLgo+IMKgCcKgKi8KPiDCoAlibGl0LT5saW5lYXIuaGFuZGxlID0gY3JlYXRlX2JvX2Zv cl9mYihmZCwgZmItPndpZHRoLCBmYi0KPiA+aGVpZ2h0LAo+IC0JCQkJCcKgwqDCoMKgwqDCoMKg ZmItPmRybV9mb3JtYXQsCj4gKwkJCQkJwqDCoMKgwqDCoMKgwqBsb29rdXBfZHJtX2Zvcm1hdChm Yi0KPiA+ZHJtX2Zvcm1hdCksCj4gwqAJCQkJCcKgwqDCoMKgwqDCoMKgTE9DQUxfRFJNX0ZPUk1B VF9NT0RfCj4gTk9ORSwgMCwKPiDCoAkJCQkJwqDCoMKgwqDCoMKgwqAwLCAmYmxpdC0KPiA+bGlu ZWFyLnNpemUsCj4gwqAJCQkJCcKgwqDCoMKgwqDCoMKgJmJsaXQtPmxpbmVhci5zdHJpZGUsCj4g QEAgLTEyOTMsMTQgKzEzNzcsMTIgQEAgdWludDMyX3QgaWd0X2JwcF9kZXB0aF90b19kcm1fZm9y bWF0KGludCBicHAsCj4gaW50IGRlcHRoKQo+IMKgICovCj4gwqB1aW50MzJfdCBpZ3RfZHJtX2Zv cm1hdF90b19icHAodWludDMyX3QgZHJtX2Zvcm1hdCkKPiDCoHsKPiAtCXN0cnVjdCBmb3JtYXRf ZGVzY19zdHJ1Y3QgKmY7Cj4gKwlzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0ICpmID0KPiBsb29r dXBfZHJtX2Zvcm1hdChkcm1fZm9ybWF0KTsKPiDCoAo+IC0JZm9yX2VhY2hfZm9ybWF0KGYpCj4g LQkJaWYgKGYtPmRybV9pZCA9PSBkcm1fZm9ybWF0KQo+IC0JCQlyZXR1cm4gZi0+YnBwOwo+IC0K PiAtCWlndF9hc3NlcnRfZigwLCAiY2FuJ3QgZmluZCBhIGJwcCBmb3JtYXQgZm9yICUwOHggKCVz KVxuIiwKPiArCWlndF9hc3NlcnRfZihmLCAiY2FuJ3QgZmluZCBhIGJwcCBmb3JtYXQgZm9yICUw OHggKCVzKVxuIiwKPiDCoAkJwqDCoMKgwqDCoGRybV9mb3JtYXQsIGlndF9mb3JtYXRfc3RyKGRy bV9mb3JtYXQpKTsKPiArCj4gKwlyZXR1cm4gZi0+YnBwOwo+IMKgfQo+IMKgCj4gwqAvKioKPiBA QCAtMTMxMywxMyArMTM5NSw5IEBAIHVpbnQzMl90IGlndF9kcm1fZm9ybWF0X3RvX2JwcCh1aW50 MzJfdAo+IGRybV9mb3JtYXQpCj4gwqAgKi8KPiDCoGNvbnN0IGNoYXIgKmlndF9mb3JtYXRfc3Ry KHVpbnQzMl90IGRybV9mb3JtYXQpCj4gwqB7Cj4gLQlzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3RydWN0 ICpmOwo+IC0KPiAtCWZvcl9lYWNoX2Zvcm1hdChmKQo+IC0JCWlmIChmLT5kcm1faWQgPT0gZHJt X2Zvcm1hdCkKPiAtCQkJcmV0dXJuIGYtPm5hbWU7Cj4gKwlzdHJ1Y3QgZm9ybWF0X2Rlc2Nfc3Ry dWN0ICpmID0KPiBsb29rdXBfZHJtX2Zvcm1hdChkcm1fZm9ybWF0KTsKPiDCoAo+IC0JcmV0dXJu ICJpbnZhbGlkIjsKPiArCXJldHVybiBmID8gZi0+bmFtZSA6ICJpbnZhbGlkIjsKPiDCoH0KPiDC oAo+IMKgLyoqCi0tIApNaWthIEthaG9sYSAtIEludGVsIE9UQwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRl dkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==