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 E12C26E255 for ; Wed, 19 Sep 2018 13:03:45 +0000 (UTC) Date: Wed, 19 Sep 2018 16:03:25 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20180919130325.GE5565@intel.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Subject: Re: [igt-dev] [PATCH v7 04/14] fb: Create common function to convert frame formats List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maxime Ripard Cc: Paul Kocialkowski , eben@raspberrypi.org, igt-dev@lists.freedesktop.org, Thomas Petazzoni List-ID: T24gVHVlLCBTZXAgMTEsIDIwMTggYXQgMTA6NDc6MzFBTSArMDIwMCwgTWF4aW1lIFJpcGFyZCB3 cm90ZToKPiBUaGUgY3VycmVudCBjb2RlIHRvIGNvbnZlcnQgYmV0d2VlbiB0d28gYnVmZmVyIGZv cm1hdHMgaXMgcXVpdGUgdGllZCB0byB0aGUKPiBjYWlybyBzdXJmYWNlIGluZnJhc3RydWN0dXJl LiBTaW5jZSB3ZSdsbCB3YW50IHRvIHJldXNlIGl0LCBtYWtlIHRoYXQKPiBmdW5jdGlvbiBtb3Jl IGdlbmVyaWMgYnkgaW50cm9kdWNpbmcgYSBjb21tb24gc3RydWN0dXJlIHRoYXQgcGFzc2VzIGFs bCB0aGUKPiBhcmd1bWVudHMgYW5kIGEgY29tbW9uIGZ1bmN0aW9uIHRoYXQgd2lsbCBjYWxsIHRo ZSByaWdodCBmdW5jdGlvbnMgd2UKPiBuZWVkZWQuCj4gCj4gUmV2aWV3ZWQtYnk6IEVyaWMgQW5o b2x0IDxlcmljQGFuaG9sdC5uZXQ+Cj4gU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4 aW1lLnJpcGFyZEBib290bGluLmNvbT4KPiAtLS0KPiAgbGliL2lndF9mYi5jIHwgMjIwICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxl IGNoYW5nZWQsIDEzMCBpbnNlcnRpb25zKCspLCA5MCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0t Z2l0IGEvbGliL2lndF9mYi5jIGIvbGliL2lndF9mYi5jCj4gaW5kZXggNjZiZGMwMmEwY2U3Li5m ODI5ZGY1OWU5ZmEgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9mYi5jCj4gKysrIGIvbGliL2lndF9m Yi5jCj4gQEAgLTEzOTEsNiArMTM5MSwxOSBAQCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9h ZCB7Cj4gIAlzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgbGluZWFyOwo+ICB9Owo+ICAKPiArc3RydWN0 IGZiX2NvbnZlcnRfYnVmIHsKPiArCXZvaWQJCQkqcHRyOwo+ICsJc3RydWN0IGlndF9mYgkJKmZi Owo+ICt9Owo+ICsKPiArc3RydWN0IGZiX2NvbnZlcnQgewo+ICsJdW5zaWduZWQgaW50CQl3aWR0 aDsKPiArCXVuc2lnbmVkIGludAkJaGVpZ2h0OwoKQXJlIHdlIGV4cGVjdGluZyB0byBjb252ZXJ0 IGJldHdlZW4gZGlmZmVyZW50IHNpemVkIGZicywgb3Igd2h5IGRvIHdlCm5lZWQgdGhlc2U/Cgo+ ICsKPiArCXN0cnVjdCBmYl9jb252ZXJ0X2J1Zglkc3Q7Cj4gKwlzdHJ1Y3QgZmJfY29udmVydF9i dWYJc3JjOwo+ICt9Owo+ICsKPiAgc3RhdGljIHVpbnQ4X3QgY2xhbXByZ2IoZmxvYXQgdmFsKQo+ ICB7Cj4gIAlyZXR1cm4gY2xhbXAoKGludCkodmFsICsgMC41ZiksIDAsIDI1NSk7Cj4gQEAgLTE0 MTEsMjcgKzE0MjQsMjggQEAgc3RhdGljIHZvaWQgd3JpdGVfcmdiKHVpbnQ4X3QgKnJnYjI0LCBj b25zdCBzdHJ1Y3QgaWd0X3ZlYzQgKnJnYikKPiAgCXJnYjI0WzBdID0gY2xhbXByZ2IocmdiLT5k WzJdKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVj dCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKPiArc3Rh dGljIHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCj4g IHsKPiAgCWludCBpLCBqOwo+ICAJY29uc3QgdWludDhfdCAqeSwgKnV2Owo+IC0JdWludDhfdCAq cmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Cj4gLQl1bnNpZ25lZCByZ2IyNF9zdHJpZGUgPSBibGl0 LT5yZ2IyNC5zdHJpZGUsIHBsYW5hcl9zdHJpZGUgPSBibGl0LT5saW5lYXIuc3RyaWRlOwo+IC0J dWludDhfdCAqYnVmID0gbWFsbG9jKGJsaXQtPmxpbmVhci5zaXplKTsKPiAtCXN0cnVjdCBpZ3Rf bWF0NCBtID0gaWd0X3ljYmNyX3RvX3JnYl9tYXRyaXgoZmItPmNvbG9yX2VuY29kaW5nLAo+IC0J CQkJCQkgICAgZmItPmNvbG9yX3JhbmdlKTsKPiArCXVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5kc3Qu cHRyOwo+ICsJdW5zaWduZWQgaW50IHJnYjI0X3N0cmlkZSA9IGN2dC0+ZHN0LmZiLT5zdHJpZGU7 Cj4gKwl1bnNpZ25lZCBpbnQgcGxhbmFyX3N0cmlkZSA9IGN2dC0+c3JjLmZiLT5zdHJpZGU7Cj4g Kwl1aW50OF90ICpidWYgPSBtYWxsb2MoY3Z0LT5zcmMuZmItPnNpemUpOwo+ICsJc3RydWN0IGln dF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdiX21hdHJpeChjdnQtPnNyYy5mYi0+Y29sb3JfZW5j b2RpbmcsCj4gKwkJCQkJCSAgICBjdnQtPnNyYy5mYi0+Y29sb3JfcmFuZ2UpOwo+ICAKPiAgCS8q Cj4gIAkgKiBSZWFkaW5nIGZyb20gdGhlIEJPIGlzIGF3ZnVsbHkgc2xvdyBiZWNhdXNlIG9mIGxh Y2sgb2YgcmVhZCBjYWNoaW5nLAo+ICAJICogaXQncyBmYXN0ZXIgdG8gY29weSB0aGUgd2hvbGUg Qk8gdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIGFuZCBjb252ZXJ0Cj4gIAkgKiBmcm9tIHRoZXJlLgo+ ICAJICovCj4gLQlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVmLCBibGl0LT5saW5lYXIubWFwLCBibGl0 LT5saW5lYXIuc2l6ZSk7Cj4gLQl5ID0gJmJ1ZltibGl0LT5saW5lYXIub2Zmc2V0c1swXV07Cj4g LQl1diA9ICZidWZbYmxpdC0+bGluZWFyLm9mZnNldHNbMV1dOwo+ICsJaWd0X21lbWNweV9mcm9t X3djKGJ1ZiwgY3Z0LT5zcmMucHRyLCBjdnQtPnNyYy5mYi0+c2l6ZSk7Cj4gKwl5ID0gY3Z0LT5z cmMucHRyICsgY3Z0LT5zcmMuZmItPm9mZnNldHNbMF07Cj4gKwl1diA9IGN2dC0+c3JjLnB0ciAr IGN2dC0+c3JjLmZiLT5vZmZzZXRzWzFdOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBmYi0+aGVp Z2h0IC8gMjsgaSsrKSB7Cj4gLQkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0aCAvIDI7IGorKykg ewo+ICsJZm9yIChpID0gMDsgaSA8IGN2dC0+aGVpZ2h0IC8gMjsgaSsrKSB7Cj4gKwkJZm9yIChq ID0gMDsgaiA8IGN2dC0+d2lkdGggLyAyOyBqKyspIHsKPiAgCQkJLyogQ29udmVydCAyeDIgcGl4 ZWwgYmxvY2tzICovCj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbNF07Cj4gIAkJCXN0cnVjdCBp Z3RfdmVjNCByZ2JbNF07Cj4gQEAgLTE0NTYsNyArMTQ3MCw3IEBAIHN0YXRpYyB2b2lkIGNvbnZl cnRfbnYxMl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxp dF91cGxvCj4gIAkJCXdyaXRlX3JnYigmcmdiMjRbaiAqIDggKyA0ICsgcmdiMjRfc3RyaWRlXSwg JnJnYlszXSk7Cj4gIAkJfQo+ICAKPiAtCQlpZiAoZmItPndpZHRoICYgMSkgewo+ICsJCWlmIChj dnQtPndpZHRoICYgMSkgewo+ICAJCQkvKiBDb252ZXJ0IDF4MiBwaXhlbCBibG9jayAqLwo+ICAJ CQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzJdOwo+ICAJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiWzJdOwo+ IEBAIC0xNDgwLDkgKzE0OTQsOSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9fcmdiMjQo c3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwo+ICAJCXV2ICs9 IHBsYW5hcl9zdHJpZGU7Cj4gIAl9Cj4gIAo+IC0JaWYgKGZiLT5oZWlnaHQgJiAxKSB7Cj4gKwlp ZiAoY3Z0LT5oZWlnaHQgJiAxKSB7Cj4gIAkJLyogQ29udmVydCBsYXN0IHJvdyAqLwo+IC0JCWZv ciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKyspIHsKPiArCQlmb3IgKGogPSAwOyBqIDwg Y3Z0LT53aWR0aCAvIDI7IGorKykgewo+ICAJCQkvKiBDb252ZXJ0IDJ4MSBwaXhlbCBibG9ja3Mg Ki8KPiAgCQkJc3RydWN0IGlndF92ZWM0IHl1dlsyXTsKPiAgCQkJc3RydWN0IGlndF92ZWM0IHJn YlsyXTsKPiBAQCAtMTUwMCw3ICsxNTE0LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9udjEyX3Rv X3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KPiAg CQkJd3JpdGVfcmdiKCZyZ2IyNFtqICogOCArIDRdLCAmcmdiWzBdKTsKPiAgCQl9Cj4gIAo+IC0J CWlmIChmYi0+d2lkdGggJiAxKSB7Cj4gKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7Cj4gIAkJCS8q IENvbnZlcnQgc2luZ2xlIHBpeGVsICovCj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXY7Cj4gIAkJ CXN0cnVjdCBpZ3RfdmVjNCByZ2I7Cj4gQEAgLTE1MTksMjIgKzE1MzMsMjIgQEAgc3RhdGljIHZv aWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29u dmVydF9ibGl0X3VwbG8KPiAgCWZyZWUoYnVmKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgY29u dmVydF9yZ2IyNF90b19udjEyKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9i bGl0X3VwbG9hZCAqYmxpdCkKPiArc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19udjEyKHN0 cnVjdCBmYl9jb252ZXJ0ICpjdnQpCj4gIHsKPiAgCWludCBpLCBqOwo+IC0JdWludDhfdCAqeSA9 ICZibGl0LT5saW5lYXIubWFwW2JsaXQtPmxpbmVhci5vZmZzZXRzWzBdXTsKPiAtCXVpbnQ4X3Qg KnV2ID0gJmJsaXQtPmxpbmVhci5tYXBbYmxpdC0+bGluZWFyLm9mZnNldHNbMV1dOwo+IC0JY29u c3QgdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Cj4gLQl1bnNpZ25lZCByZ2IyNF9z dHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGU7Cj4gLQl1bnNpZ25lZCBwbGFuYXJfc3RyaWRlID0g YmxpdC0+bGluZWFyLnN0cmlkZTsKPiAtCXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0X3JnYl90b195 Y2Jjcl9tYXRyaXgoZmItPmNvbG9yX2VuY29kaW5nLAo+IC0JCQkJCQkgICAgZmItPmNvbG9yX3Jh bmdlKTsKPiAtCj4gLQlpZ3RfYXNzZXJ0X2YoZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9O VjEyLAo+ICsJdWludDhfdCAqeSA9IGN2dC0+ZHN0LnB0ciArIGN2dC0+ZHN0LmZiLT5vZmZzZXRz WzBdOwo+ICsJdWludDhfdCAqdXYgPSBjdnQtPmRzdC5wdHIgKyBjdnQtPmRzdC5mYi0+b2Zmc2V0 c1sxXTsKPiArCWNvbnN0IHVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5zcmMucHRyOwo+ICsJdW5zaWdu ZWQgcmdiMjRfc3RyaWRlID0gY3Z0LT5zcmMuZmItPnN0cmlkZTsKPiArCXVuc2lnbmVkIHBsYW5h cl9zdHJpZGUgPSBjdnQtPmRzdC5mYi0+c3RyaWRlOwo+ICsJc3RydWN0IGlndF9tYXQ0IG0gPSBp Z3RfcmdiX3RvX3ljYmNyX21hdHJpeChjdnQtPmRzdC5mYi0+Y29sb3JfZW5jb2RpbmcsCj4gKwkJ CQkJCSAgICBjdnQtPmRzdC5mYi0+Y29sb3JfcmFuZ2UpOwo+ICsKPiArCWlndF9hc3NlcnRfZihj dnQtPmRzdC5mYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIsCj4gIAkJICAgICAiQ29u dmVyc2lvbiBub3QgaW1wbGVtZW50ZWQgZm9yICFOVjEyIHBsYW5hciBmb3JtYXRzXG4iKTsKPiAg Cj4gLQlmb3IgKGkgPSAwOyBpIDwgZmItPmhlaWdodCAvIDI7IGkrKykgewo+IC0JCWZvciAoaiA9 IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKyspIHsKPiArCWZvciAoaSA9IDA7IGkgPCBjdnQtPmhl aWdodCAvIDI7IGkrKykgewo+ICsJCWZvciAoaiA9IDA7IGogPCBjdnQtPndpZHRoIC8gMjsgaisr KSB7Cj4gIAkJCS8qIENvbnZlcnQgMngyIHBpeGVsIGJsb2NrcyAqLwo+ICAJCQlzdHJ1Y3QgaWd0 X3ZlYzQgcmdiWzRdOwo+ICAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzRdOwo+IEBAIC0xNTYzLDcg KzE1NzcsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3JnYjI0X3RvX252MTIoc3RydWN0IGlndF9m YiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwo+ICAJCQl1dltqICogMiArIDFdID0g KHl1dlswXS5kWzJdICsgeXV2WzJdLmRbMl0pIC8gMi4wZjsKPiAgCQl9Cj4gIAo+IC0JCWlmIChm Yi0+d2lkdGggJiAxKSB7Cj4gKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7Cj4gIAkJCS8qIENvbnZl cnQgMXgyIHBpeGVsIGJsb2NrICovCj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2JbMl07Cj4gIAkJ CXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07Cj4gQEAgLTE1OTIsOCArMTYwNiw4IEBAIHN0YXRpYyB2 b2lkIGNvbnZlcnRfcmdiMjRfdG9fbnYxMihzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2Nv bnZlcnRfYmxpdF91cGxvCj4gIAl9Cj4gIAo+ICAJLyogTGFzdCByb3cgY2Fubm90IGJlIGludGVy cG9sYXRlZCBiZXR3ZWVuIDIgcGl4ZWxzLCB0YWtlIHRoZSBzaW5nbGUgdmFsdWUgKi8KPiAtCWlm IChmYi0+aGVpZ2h0ICYgMSkgewo+IC0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBq KyspIHsKPiArCWlmIChjdnQtPmhlaWdodCAmIDEpIHsKPiArCQlmb3IgKGogPSAwOyBqIDwgY3Z0 LT53aWR0aCAvIDI7IGorKykgewo+ICAJCQkvKiBDb252ZXJ0IDJ4MSBwaXhlbCBibG9ja3MgKi8K PiAgCQkJc3RydWN0IGlndF92ZWM0IHJnYlsyXTsKPiAgCQkJc3RydWN0IGlndF92ZWM0IHl1dlsy XTsKPiBAQCAtMTYxMCw3ICsxNjI0LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19u djEyKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KPiAgCQkJ dXZbaiAqIDIgKyAxXSA9IHl1dlswXS5kWzJdOwo+ICAJCX0KPiAgCj4gLQkJaWYgKGZiLT53aWR0 aCAmIDEpIHsKPiArCQlpZiAoY3Z0LT53aWR0aCAmIDEpIHsKPiAgCQkJLyogQ29udmVydCBzaW5n bGUgcGl4ZWwgKi8KPiAgCQkJc3RydWN0IGlndF92ZWM0IHJnYjsKPiAgCQkJc3RydWN0IGlndF92 ZWM0IHl1djsKPiBAQCAtMTY0NywyNyArMTY2MSwyOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciAqeXV5dl9zd2l6emxlKHVpbnQzMl90IGZvcm1hdCkKPiAgCX0KPiAgfQo+ICAKPiAtc3Rh dGljIHZvaWQgY29udmVydF95dXl2X3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3Qg ZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKPiArc3RhdGljIHZvaWQgY29udmVydF95dXl2 X3RvX3JnYjI0KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCj4gIHsKPiAgCWludCBpLCBqOwo+ICAJ Y29uc3QgdWludDhfdCAqeXV5djsKPiAtCXVpbnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdiMjQubWFw Owo+IC0JdW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlLCB5dXl2X3N0 cmlkZSA9IGJsaXQtPmxpbmVhci5zdHJpZGU7Cj4gLQl1aW50OF90ICpidWYgPSBtYWxsb2MoYmxp dC0+bGluZWFyLnNpemUpOwo+IC0Jc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdi X21hdHJpeChmYi0+Y29sb3JfZW5jb2RpbmcsCj4gLQkJCQkJCSAgICBmYi0+Y29sb3JfcmFuZ2Up Owo+IC0JY29uc3QgdW5zaWduZWQgY2hhciAqc3d6ID0geXV5dl9zd2l6emxlKGZiLT5kcm1fZm9y bWF0KTsKPiArCXVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5kc3QucHRyOwo+ICsJdW5zaWduZWQgaW50 IHJnYjI0X3N0cmlkZSA9IGN2dC0+ZHN0LmZiLT5zdHJpZGU7Cj4gKwl1bnNpZ25lZCBpbnQgeXV5 dl9zdHJpZGUgPSBjdnQtPnNyYy5mYi0+c3RyaWRlOwo+ICsJdWludDhfdCAqYnVmID0gbWFsbG9j KGN2dC0+c3JjLmZiLT5zaXplKTsKPiArCXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0X3ljYmNyX3Rv X3JnYl9tYXRyaXgoY3Z0LT5zcmMuZmItPmNvbG9yX2VuY29kaW5nLAo+ICsJCQkJCQkgICAgY3Z0 LT5zcmMuZmItPmNvbG9yX3JhbmdlKTsKPiArCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN3eiA9IHl1 eXZfc3dpenpsZShjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCk7Cj4gIAo+ICAJLyoKPiAgCSAqIFJl YWRpbmcgZnJvbSB0aGUgQk8gaXMgYXdmdWxseSBzbG93IGJlY2F1c2Ugb2YgbGFjayBvZiByZWFk IGNhY2hpbmcsCj4gIAkgKiBpdCdzIGZhc3RlciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBhIHRl bXBvcmFyeSBidWZmZXIgYW5kIGNvbnZlcnQKPiAgCSAqIGZyb20gdGhlcmUuCj4gIAkgKi8KPiAt CWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQtPmxpbmVhci5tYXAsIGJsaXQtPmxpbmVhci5z aXplKTsKPiArCWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGN2dC0+c3JjLnB0ciwgY3Z0LT5zcmMu ZmItPnNpemUpOwo+ICAJeXV5diA9IGJ1ZjsKPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgZmItPmhl aWdodDsgaSsrKSB7Cj4gLQkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0aCAvIDI7IGorKykgewo+ ICsJZm9yIChpID0gMDsgaSA8IGN2dC0+aGVpZ2h0OyBpKyspIHsKPiArCQlmb3IgKGogPSAwOyBq IDwgY3Z0LT53aWR0aCAvIDI7IGorKykgewo+ICAJCQkvKiBDb252ZXJ0IDJ4MSBwaXhlbCBibG9j a3MgKi8KPiAgCQkJc3RydWN0IGlndF92ZWM0IHl1dlsyXTsKPiAgCQkJc3RydWN0IGlndF92ZWM0 IHJnYlsyXTsKPiBAQCAtMTY4NSw3ICsxNzAwLDcgQEAgc3RhdGljIHZvaWQgY29udmVydF95dXl2 X3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8K PiAgCQkJd3JpdGVfcmdiKCZyZ2IyNFtqICogOCArIDRdLCAmcmdiWzFdKTsKPiAgCQl9Cj4gIAo+ IC0JCWlmIChmYi0+d2lkdGggJiAxKSB7Cj4gKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7Cj4gIAkJ CXN0cnVjdCBpZ3RfdmVjNCB5dXY7Cj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2I7Cj4gIAo+IEBA IC0xNzA2LDI1ICsxNzIxLDI1IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfeXV5dl90b19yZ2IyNChz dHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIAlmcmVlKGJ1 Zik7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV5dihzdHJ1Y3Qg aWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgKmJsaXQpCj4gK3N0YXRp YyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV5dihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQo+ICB7 Cj4gIAlpbnQgaSwgajsKPiAtCXVpbnQ4X3QgKnl1eXYgPSBibGl0LT5saW5lYXIubWFwOwo+IC0J Y29uc3QgdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Cj4gLQl1bnNpZ25lZCByZ2Iy NF9zdHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGU7Cj4gLQl1bnNpZ25lZCB5dXl2X3N0cmlkZSA9 IGJsaXQtPmxpbmVhci5zdHJpZGU7Cj4gLQlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF9yZ2JfdG9f eWNiY3JfbWF0cml4KGZiLT5jb2xvcl9lbmNvZGluZywKPiAtCQkJCQkJICAgIGZiLT5jb2xvcl9y YW5nZSk7Cj4gLQljb25zdCB1bnNpZ25lZCBjaGFyICpzd3ogPSB5dXl2X3N3aXp6bGUoZmItPmRy bV9mb3JtYXQpOwo+IC0KPiAtCWlndF9hc3NlcnRfZihmYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9S TUFUX1lVWVYgfHwKPiAtCQkgICAgIGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfWVZZVSB8 fAo+IC0JCSAgICAgZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9VWVZZIHx8Cj4gLQkJICAg ICBmYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1ZZVVksCj4gKwl1aW50OF90ICp5dXl2ID0g Y3Z0LT5kc3QucHRyOwo+ICsJY29uc3QgdWludDhfdCAqcmdiMjQgPSBjdnQtPnNyYy5wdHI7Cj4g Kwl1bnNpZ25lZCByZ2IyNF9zdHJpZGUgPSBjdnQtPnNyYy5mYi0+c3RyaWRlOwo+ICsJdW5zaWdu ZWQgeXV5dl9zdHJpZGUgPSBjdnQtPmRzdC5mYi0+c3RyaWRlOwo+ICsJc3RydWN0IGlndF9tYXQ0 IG0gPSBpZ3RfcmdiX3RvX3ljYmNyX21hdHJpeChjdnQtPmRzdC5mYi0+Y29sb3JfZW5jb2Rpbmcs Cj4gKwkJCQkJCSAgICBjdnQtPmRzdC5mYi0+Y29sb3JfcmFuZ2UpOwo+ICsJY29uc3QgdW5zaWdu ZWQgY2hhciAqc3d6ID0geXV5dl9zd2l6emxlKGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0KTsKPiAr Cj4gKwlpZ3RfYXNzZXJ0X2YoY3Z0LT5kc3QuZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9Z VVlWIHx8Cj4gKwkJICAgICBjdnQtPmRzdC5mYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lW WVUgfHwKPiArCQkgICAgIGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfVVlW WSB8fAo+ICsJCSAgICAgY3Z0LT5kc3QuZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9WWVVZ LAo+ICAJCSAgICAgIkNvbnZlcnNpb24gbm90IGltcGxlbWVudGVkIGZvciAhWVVZViBwbGFuYXIg Zm9ybWF0c1xuIik7Cj4gIAo+IC0JZm9yIChpID0gMDsgaSA8IGZiLT5oZWlnaHQ7IGkrKykgewo+ IC0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKyspIHsKPiArCWZvciAoaSA9IDA7 IGkgPCBjdnQtPmhlaWdodDsgaSsrKSB7Cj4gKwkJZm9yIChqID0gMDsgaiA8IGN2dC0+d2lkdGgg LyAyOyBqKyspIHsKPiAgCQkJLyogQ29udmVydCAyeDEgcGl4ZWwgYmxvY2tzICovCj4gIAkJCXN0 cnVjdCBpZ3RfdmVjNCByZ2JbMl07Cj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07Cj4gQEAg LTE3NDEsNyArMTc1Niw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV5dihzdHJ1 Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIAkJCXl1eXZbaiAq IDQgKyBzd3pbM11dID0gKHl1dlswXS5kWzJdICsgeXV2WzFdLmRbMl0pIC8gMi4wZjsKPiAgCQl9 Cj4gIAo+IC0JCWlmIChmYi0+d2lkdGggJiAxKSB7Cj4gKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7 Cj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2I7Cj4gIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXY7Cj4g IAo+IEBAIC0xNzU5LDI3ICsxNzc0LDU5IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9f eXV5dihzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCj4gIAl9 Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIGZiX2NvbnZlcnQoc3RydWN0IGZiX2NvbnZlcnQgKmN2 dCkKPiArewo+ICsJaWYgKGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfUkdC ODg4KSB7Cj4gKwkJc3dpdGNoIChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCkgewo+ICsJCWNhc2Ug RFJNX0ZPUk1BVF9OVjEyOgo+ICsJCQljb252ZXJ0X252MTJfdG9fcmdiMjQoY3Z0KTsKPiArCQkJ cmV0dXJuOwo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9Z VllVOgo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICsJCWNhc2UgRFJNX0ZPUk1BVF9WWVVZ Ogo+ICsJCQljb252ZXJ0X3l1eXZfdG9fcmdiMjQoY3Z0KTsKPiArCQkJcmV0dXJuOwo+ICsJCX0K PiArCX0gZWxzZSBpZiAoY3Z0LT5zcmMuZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I4 ODgpIHsKPiArCQlzd2l0Y2ggKGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0KSB7Cj4gKwkJY2FzZSBE Uk1fRk9STUFUX05WMTI6Cj4gKwkJCWNvbnZlcnRfcmdiMjRfdG9fbnYxMihjdnQpOwo+ICsJCQly ZXR1cm47Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1lW WVU6Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1VZVlk6Cj4gKwkJY2FzZSBEUk1fRk9STUFUX1ZZVVk6 Cj4gKwkJCWNvbnZlcnRfcmdiMjRfdG9feXV5dihjdnQpOwo+ICsJCQlyZXR1cm47Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWlndF9hc3NlcnRfZihmYWxzZSwKPiArCQkgICAgICJDb252ZXJzaW9uIG5v dCBpbXBsZW1lbnRlZCAoZnJvbSBmb3JtYXQgMHgleCB0byAweCV4KVxuIiwKPiArCQkgICAgIGN2 dC0+c3JjLmZiLT5kcm1fZm9ybWF0LCBjdnQtPmRzdC5mYi0+ZHJtX2Zvcm1hdCk7Cj4gK30KPiAr Cj4gIHN0YXRpYyB2b2lkIGRlc3Ryb3lfY2Fpcm9fc3VyZmFjZV9fY29udmVydCh2b2lkICphcmcp Cj4gIHsKPiAgCXN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0ID0gYXJnOwo+ICAJ c3RydWN0IGlndF9mYiAqZmIgPSBibGl0LT5mYjsKPiAtCj4gLQkvKiBDb252ZXJ0IGxpbmVhciBy Z2IgYmFjayEgKi8KPiAtCXN3aXRjaChmYi0+ZHJtX2Zvcm1hdCkgewo+IC0JY2FzZSBEUk1fRk9S TUFUX05WMTI6Cj4gLQkJY29udmVydF9yZ2IyNF90b19udjEyKGZiLCBibGl0KTsKPiAtCQlicmVh azsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Cj4g LQljYXNlIERSTV9GT1JNQVRfVVlWWToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgo+IC0JCWNv bnZlcnRfcmdiMjRfdG9feXV5dihmYiwgYmxpdCk7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+ IC0JCWlndF9hc3NlcnRfZihmYWxzZSwgIkNvbnZlcnNpb24gbm90IGltcGxlbWVudGVkIGZvciBm b3JtYXRzIDB4JXhcbiIsCj4gLQkJCSAgICAgZmItPmRybV9mb3JtYXQpOwo+IC0JfQo+IC0KPiAr CXN0cnVjdCBmYl9jb252ZXJ0IGN2dCA9IHsKPiArCQkud2lkdGgJPSBmYi0+d2lkdGgsCj4gKwkJ LmhlaWdodAk9IGZiLT5oZWlnaHQsCj4gKwo+ICsJCS5kc3QJPSB7Cj4gKwkJCS5wdHIJPSBibGl0 LT5saW5lYXIubWFwLAo+ICsJCQkuZmIJPSBibGl0LT5mYiwKPiArCQl9LAo+ICsKPiArCQkuc3Jj CT0gewo+ICsJCQkucHRyCT0gYmxpdC0+c2hhZG93X3B0ciwKPiArCQkJLmZiCT0gJmJsaXQtPnNo YWRvd19mYiwKPiArCQl9LAo+ICsJfTsKPiArCj4gKwlmYl9jb252ZXJ0KCZjdnQpOwo+ICAJaWd0 X2ZiX3VubWFwX2J1ZmZlcigmYmxpdC0+c2hhZG93X2ZiLCBibGl0LT5zaGFkb3dfcHRyKTsKPiAg CWlndF9yZW1vdmVfZmIoYmxpdC0+ZmQsICZibGl0LT5zaGFkb3dfZmIpOwo+ICAKPiBAQCAtMTc5 Niw2ICsxODQzLDcgQEAgc3RhdGljIHZvaWQgZGVzdHJveV9jYWlyb19zdXJmYWNlX19jb252ZXJ0 KHZvaWQgKmFyZykKPiAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZlcnQo aW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiAgewo+ICAJc3RydWN0IGZiX2NvbnZlcnRfYmxp dF91cGxvYWQgKmJsaXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0KSk7Cj4gKwlzdHJ1Y3QgZmJfY29u dmVydCBjdnQgPSB7IDAgfTsKPiAgCWludCBzaGFkb3dfaWQ7Cj4gIAo+ICAJaWd0X2Fzc2VydChi bGl0KTsKPiBAQCAtMTgyMywyMSArMTg3MSwxMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9f c3VyZmFjZV9fY29udmVydChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+ICAJCW1lbWNweShi bGl0LT5saW5lYXIub2Zmc2V0cywgZmItPm9mZnNldHMsIHNpemVvZihmYi0+b2Zmc2V0cykpOwo+ ICAJfQo+ICAKPiAtCS8qIENvbnZlcnQgdG8gbGluZWFyIHJnYiEgKi8KPiAtCXN3aXRjaChmYi0+ ZHJtX2Zvcm1hdCkgewo+IC0JY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gLQkJY29udmVydF9udjEy X3RvX3JnYjI0KGZiLCBibGl0KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVlW Ogo+IC0JY2FzZSBEUk1fRk9STUFUX1lWWVU6Cj4gLQljYXNlIERSTV9GT1JNQVRfVVlWWToKPiAt CWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgo+IC0JCWNvbnZlcnRfeXV5dl90b19yZ2IyNChmYiwgYmxp dCk7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCWlndF9hc3NlcnRfZihmYWxzZSwgIkNv bnZlcnNpb24gbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXRzIDB4JXhcbiIsCj4gLQkJCSAgICAg ZmItPmRybV9mb3JtYXQpOwo+IC0JfQo+ICsJY3Z0LndpZHRoID0gZmItPndpZHRoOwo+ICsJY3Z0 LmhlaWdodCA9IGZiLT5oZWlnaHQ7Cj4gKwljdnQuZHN0LnB0ciA9IGJsaXQtPnNoYWRvd19wdHI7 Cj4gKwljdnQuZHN0LmZiID0gJmJsaXQtPnNoYWRvd19mYjsKPiArCWN2dC5zcmMucHRyID0gYmxp dC0+bGluZWFyLm1hcDsKPiArCWN2dC5zcmMuZmIgPSBibGl0LT5mYjsKPiArCWZiX2NvbnZlcnQo JmN2dCk7Cj4gIAo+ICAJZmItPmNhaXJvX3N1cmZhY2UgPQo+ICAJCWNhaXJvX2ltYWdlX3N1cmZh Y2VfY3JlYXRlX2Zvcl9kYXRhKGJsaXQtPnNoYWRvd19wdHIsCj4gLS0gCj4gZ2l0LXNlcmllcyAw LjkuMQoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2lndC1kZXYK