From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 58EE86E706 for ; Thu, 26 Jul 2018 10:42:40 +0000 (UTC) From: Maxime Ripard Date: Thu, 26 Jul 2018 12:42:02 +0200 Message-Id: <1f2fa471fada997e172ce5984588b6d5a32d3188.1532596850.git-series.maxime.ripard@bootlin.com> In-Reply-To: References: In-Reply-To: References: Subject: [igt-dev] [PATCH v4 03/13] fb: Create common function to convert frame formats List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Maxime Ripard , eben@raspberrypi.org, Paul Kocialkowski , Thomas Petazzoni List-ID: VGhlIGN1cnJlbnQgY29kZSB0byBjb252ZXJ0IGJldHdlZW4gdHdvIGJ1ZmZlciBmb3JtYXRzIGlz IHF1aXRlIHRpZWQgdG8gdGhlCmNhaXJvIHN1cmZhY2UgaW5mcmFzdHJ1Y3R1cmUuIFNpbmNlIHdl J2xsIHdhbnQgdG8gcmV1c2UgaXQsIG1ha2UgdGhhdApmdW5jdGlvbiBtb3JlIGdlbmVyaWMgYnkg aW50cm9kdWNpbmcgYSBjb21tb24gc3RydWN0dXJlIHRoYXQgcGFzc2VzIGFsbCB0aGUKYXJndW1l bnRzIGFuZCBhIGNvbW1vbiBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgcmlnaHQgZnVuY3Rp b25zIHdlCm5lZWRlZC4KClNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBh cmRAYm9vdGxpbi5jb20+Ci0tLQogbGliL2lndF9mYi5jIHwgMjQzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNTMg aW5zZXJ0aW9ucygrKSwgOTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9mYi5j IGIvbGliL2lndF9mYi5jCmluZGV4IDQwNjFmZWRlYzBjMS4uMTkxNDIzMzc4NmE1IDEwMDY0NAot LS0gYS9saWIvaWd0X2ZiLmMKKysrIGIvbGliL2lndF9mYi5jCkBAIC0xMzg0LDYgKzEzODQsMjQg QEAgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgewogCXN0cnVjdCBmYl9ibGl0X2xpbmVh ciBsaW5lYXI7CiB9OwogCitzdHJ1Y3QgZmJfY29udmVydF9idWYgeworCXZvaWQJCQkqcHRyOwor CXVuc2lnbmVkIGludAkJc3RyaWRlOworCXVuc2lnbmVkIGludAkJc2l6ZTsKKwl1aW50MzJfdAkJ Zm10OworCWVudW0gaWd0X2NvbG9yX2VuY29kaW5nCWNvbG9yX2VuY29kaW5nOworCWVudW0gaWd0 X2NvbG9yX3JhbmdlCWNvbG9yX3JhbmdlOworCXVpbnQzMl90CQlvZmZzZXRzWzRdOworfTsKKwor c3RydWN0IGZiX2NvbnZlcnQgeworCXVuc2lnbmVkIGludAkJd2lkdGg7CisJdW5zaWduZWQgaW50 CQloZWlnaHQ7CisKKwlzdHJ1Y3QgZmJfY29udmVydF9idWYJZHN0OworCXN0cnVjdCBmYl9jb252 ZXJ0X2J1ZglzcmM7Cit9OworCiBzdGF0aWMgdWludDhfdCBjbGFtcHJnYihmbG9hdCB2YWwpCiB7 CiAJcmV0dXJuIGNsYW1wKChpbnQpKHZhbCArIDAuNWYpLCAwLCAyNTUpOwpAQCAtMTQwNCwyNyAr MTQyMiwyOCBAQCBzdGF0aWMgdm9pZCB3cml0ZV9yZ2IodWludDhfdCAqcmdiMjQsIGNvbnN0IHN0 cnVjdCBpZ3RfdmVjNCAqcmdiKQogCXJnYjI0WzBdID0gY2xhbXByZ2IocmdiLT5kWzJdKTsKIH0K IAotc3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBz dHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKK3N0YXRpYyB2b2lkIGNvbnZlcnRf bnYxMl90b19yZ2IyNChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQogewogCWludCBpLCBqOwogCWNv bnN0IHVpbnQ4X3QgKnksICp1djsKLQl1aW50OF90ICpyZ2IyNCA9IGJsaXQtPnJnYjI0Lm1hcDsK LQl1bnNpZ25lZCByZ2IyNF9zdHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGUsIHBsYW5hcl9zdHJp ZGUgPSBibGl0LT5saW5lYXIuc3RyaWRlOwotCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhibGl0LT5s aW5lYXIuc2l6ZSk7Ci0Jc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdiX21hdHJp eChmYi0+Y29sb3JfZW5jb2RpbmcsCi0JCQkJCQkgICAgZmItPmNvbG9yX3JhbmdlKTsKKwl1aW50 OF90ICpyZ2IyNCA9IGN2dC0+ZHN0LnB0cjsKKwl1bnNpZ25lZCBpbnQgcmdiMjRfc3RyaWRlID0g Y3Z0LT5kc3Quc3RyaWRlOworCXVuc2lnbmVkIGludCBwbGFuYXJfc3RyaWRlID0gY3Z0LT5zcmMu c3RyaWRlOworCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhjdnQtPnNyYy5zaXplKTsKKwlzdHJ1Y3Qg aWd0X21hdDQgbSA9IGlndF95Y2Jjcl90b19yZ2JfbWF0cml4KGN2dC0+c3JjLmNvbG9yX2VuY29k aW5nLAorCQkJCQkJICAgIGN2dC0+c3JjLmNvbG9yX3JhbmdlKTsKIAogCS8qCiAJICogUmVhZGlu ZyBmcm9tIHRoZSBCTyBpcyBhd2Z1bGx5IHNsb3cgYmVjYXVzZSBvZiBsYWNrIG9mIHJlYWQgY2Fj aGluZywKIAkgKiBpdCdzIGZhc3RlciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBhIHRlbXBvcmFy eSBidWZmZXIgYW5kIGNvbnZlcnQKIAkgKiBmcm9tIHRoZXJlLgogCSAqLwotCWlndF9tZW1jcHlf ZnJvbV93YyhidWYsIGJsaXQtPmxpbmVhci5tYXAsIGJsaXQtPmxpbmVhci5zaXplKTsKLQl5ID0g JmJ1ZltibGl0LT5saW5lYXIub2Zmc2V0c1swXV07Ci0JdXYgPSAmYnVmW2JsaXQtPmxpbmVhci5v ZmZzZXRzWzFdXTsKKwlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVmLCBjdnQtPnNyYy5wdHIsIGN2dC0+ c3JjLnNpemUpOworCXkgPSBjdnQtPnNyYy5wdHIgKyBjdnQtPnNyYy5vZmZzZXRzWzBdOworCXV2 ID0gY3Z0LT5zcmMucHRyICsgY3Z0LT5zcmMub2Zmc2V0c1sxXTsKIAotCWZvciAoaSA9IDA7IGkg PCBmYi0+aGVpZ2h0IC8gMjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAy OyBqKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3Z0LT5oZWlnaHQgLyAyOyBpKyspIHsKKwkJZm9y IChqID0gMDsgaiA8IGN2dC0+d2lkdGggLyAyOyBqKyspIHsKIAkJCS8qIENvbnZlcnQgMngyIHBp eGVsIGJsb2NrcyAqLwogCQkJc3RydWN0IGlndF92ZWM0IHl1dls0XTsKIAkJCXN0cnVjdCBpZ3Rf dmVjNCByZ2JbNF07CkBAIC0xNDQ5LDcgKzE0NjgsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X252 MTJfdG9fcmdiMjQoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBs bwogCQkJd3JpdGVfcmdiKCZyZ2IyNFtqICogOCArIDQgKyByZ2IyNF9zdHJpZGVdLCAmcmdiWzNd KTsKIAkJfQogCi0JCWlmIChmYi0+d2lkdGggJiAxKSB7CisJCWlmIChjdnQtPndpZHRoICYgMSkg ewogCQkJLyogQ29udmVydCAxeDIgcGl4ZWwgYmxvY2sgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCB5 dXZbMl07CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiWzJdOwpAQCAtMTQ3Myw5ICsxNDkyLDkgQEAg c3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1 Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KIAkJdXYgKz0gcGxhbmFyX3N0cmlkZTsKIAl9CiAKLQlp ZiAoZmItPmhlaWdodCAmIDEpIHsKKwlpZiAoY3Z0LT5oZWlnaHQgJiAxKSB7CiAJCS8qIENvbnZl cnQgbGFzdCByb3cgKi8KLQkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0aCAvIDI7IGorKykgewor CQlmb3IgKGogPSAwOyBqIDwgY3Z0LT53aWR0aCAvIDI7IGorKykgewogCQkJLyogQ29udmVydCAy eDEgcGl4ZWwgYmxvY2tzICovCiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzJdOwogCQkJc3RydWN0 IGlndF92ZWM0IHJnYlsyXTsKQEAgLTE0OTMsNyArMTUxMiw3IEBAIHN0YXRpYyB2b2lkIGNvbnZl cnRfbnYxMl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxp dF91cGxvCiAJCQl3cml0ZV9yZ2IoJnJnYjI0W2ogKiA4ICsgNF0sICZyZ2JbMF0pOwogCQl9CiAK LQkJaWYgKGZiLT53aWR0aCAmIDEpIHsKKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7CiAJCQkvKiBD b252ZXJ0IHNpbmdsZSBwaXhlbCAqLwogCQkJc3RydWN0IGlndF92ZWM0IHl1djsKIAkJCXN0cnVj dCBpZ3RfdmVjNCByZ2I7CkBAIC0xNTEyLDIyICsxNTMxLDIyIEBAIHN0YXRpYyB2b2lkIGNvbnZl cnRfbnYxMl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxp dF91cGxvCiAJZnJlZShidWYpOwogfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0X3JnYjI0X3RvX252 MTIoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0 KQorc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19udjEyKHN0cnVjdCBmYl9jb252ZXJ0ICpj dnQpCiB7CiAJaW50IGksIGo7Ci0JdWludDhfdCAqeSA9ICZibGl0LT5saW5lYXIubWFwW2JsaXQt PmxpbmVhci5vZmZzZXRzWzBdXTsKLQl1aW50OF90ICp1diA9ICZibGl0LT5saW5lYXIubWFwW2Js aXQtPmxpbmVhci5vZmZzZXRzWzFdXTsKLQljb25zdCB1aW50OF90ICpyZ2IyNCA9IGJsaXQtPnJn YjI0Lm1hcDsKLQl1bnNpZ25lZCByZ2IyNF9zdHJpZGUgPSBibGl0LT5yZ2IyNC5zdHJpZGU7Ci0J dW5zaWduZWQgcGxhbmFyX3N0cmlkZSA9IGJsaXQtPmxpbmVhci5zdHJpZGU7Ci0Jc3RydWN0IGln dF9tYXQ0IG0gPSBpZ3RfcmdiX3RvX3ljYmNyX21hdHJpeChmYi0+Y29sb3JfZW5jb2RpbmcsCi0J CQkJCQkgICAgZmItPmNvbG9yX3JhbmdlKTsKLQotCWlndF9hc3NlcnRfZihmYi0+ZHJtX2Zvcm1h dCA9PSBEUk1fRk9STUFUX05WMTIsCisJdWludDhfdCAqeSA9IGN2dC0+ZHN0LnB0ciArIGN2dC0+ ZHN0Lm9mZnNldHNbMF07CisJdWludDhfdCAqdXYgPSBjdnQtPmRzdC5wdHIgKyBjdnQtPmRzdC5v ZmZzZXRzWzFdOworCWNvbnN0IHVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5zcmMucHRyOworCXVuc2ln bmVkIHJnYjI0X3N0cmlkZSA9IGN2dC0+c3JjLnN0cmlkZTsKKwl1bnNpZ25lZCBwbGFuYXJfc3Ry aWRlID0gY3Z0LT5kc3Quc3RyaWRlOworCXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0X3JnYl90b195 Y2Jjcl9tYXRyaXgoY3Z0LT5kc3QuY29sb3JfZW5jb2RpbmcsCisJCQkJCQkgICAgY3Z0LT5kc3Qu Y29sb3JfcmFuZ2UpOworCisJaWd0X2Fzc2VydF9mKGN2dC0+ZHN0LmZtdCA9PSBEUk1fRk9STUFU X05WMTIsCiAJCSAgICAgIkNvbnZlcnNpb24gbm90IGltcGxlbWVudGVkIGZvciAhTlYxMiBwbGFu YXIgZm9ybWF0c1xuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmItPmhlaWdodCAvIDI7IGkrKykg ewotCQlmb3IgKGogPSAwOyBqIDwgZmItPndpZHRoIC8gMjsgaisrKSB7CisJZm9yIChpID0gMDsg aSA8IGN2dC0+aGVpZ2h0IC8gMjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBjdnQtPndpZHRo IC8gMjsgaisrKSB7CiAJCQkvKiBDb252ZXJ0IDJ4MiBwaXhlbCBibG9ja3MgKi8KIAkJCXN0cnVj dCBpZ3RfdmVjNCByZ2JbNF07CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzRdOwpAQCAtMTU1Niw3 ICsxNTc1LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19udjEyKHN0cnVjdCBpZ3Rf ZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KIAkJCXV2W2ogKiAyICsgMV0gPSAo eXV2WzBdLmRbMl0gKyB5dXZbMl0uZFsyXSkgLyAyLjBmOwogCQl9CiAKLQkJaWYgKGZiLT53aWR0 aCAmIDEpIHsKKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7CiAJCQkvKiBDb252ZXJ0IDF4MiBwaXhl bCBibG9jayAqLwogCQkJc3RydWN0IGlndF92ZWM0IHJnYlsyXTsKIAkJCXN0cnVjdCBpZ3RfdmVj NCB5dXZbMl07CkBAIC0xNTg1LDggKzE2MDQsOCBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3JnYjI0 X3RvX252MTIoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwog CX0KIAogCS8qIExhc3Qgcm93IGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgYmV0d2VlbiAyIHBpeGVs cywgdGFrZSB0aGUgc2luZ2xlIHZhbHVlICovCi0JaWYgKGZiLT5oZWlnaHQgJiAxKSB7Ci0JCWZv ciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKyspIHsKKwlpZiAoY3Z0LT5oZWlnaHQgJiAx KSB7CisJCWZvciAoaiA9IDA7IGogPCBjdnQtPndpZHRoIC8gMjsgaisrKSB7CiAJCQkvKiBDb252 ZXJ0IDJ4MSBwaXhlbCBibG9ja3MgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2JbMl07CiAJCQlz dHJ1Y3QgaWd0X3ZlYzQgeXV2WzJdOwpAQCAtMTYwMyw3ICsxNjIyLDcgQEAgc3RhdGljIHZvaWQg Y29udmVydF9yZ2IyNF90b19udjEyKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVy dF9ibGl0X3VwbG8KIAkJCXV2W2ogKiAyICsgMV0gPSB5dXZbMF0uZFsyXTsKIAkJfQogCi0JCWlm IChmYi0+d2lkdGggJiAxKSB7CisJCWlmIChjdnQtPndpZHRoICYgMSkgewogCQkJLyogQ29udmVy dCBzaW5nbGUgcGl4ZWwgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2I7CiAJCQlzdHJ1Y3QgaWd0 X3ZlYzQgeXV2OwpAQCAtMTY0MCwyNyArMTY1OSwyOCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciAqeXV5dl9zd2l6emxlKHVpbnQzMl90IGZvcm1hdCkKIAl9CiB9CiAKLXN0YXRpYyB2b2lk IGNvbnZlcnRfeXV5dl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZl cnRfYmxpdF91cGxvYWQgKmJsaXQpCitzdGF0aWMgdm9pZCBjb252ZXJ0X3l1eXZfdG9fcmdiMjQo c3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKIHsKIAlpbnQgaSwgajsKIAljb25zdCB1aW50OF90ICp5 dXl2OwotCXVpbnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdiMjQubWFwOwotCXVuc2lnbmVkIHJnYjI0 X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZSwgeXV5dl9zdHJpZGUgPSBibGl0LT5saW5lYXIu c3RyaWRlOwotCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhibGl0LT5saW5lYXIuc2l6ZSk7Ci0Jc3Ry dWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdiX21hdHJpeChmYi0+Y29sb3JfZW5jb2Rp bmcsCi0JCQkJCQkgICAgZmItPmNvbG9yX3JhbmdlKTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpz d3ogPSB5dXl2X3N3aXp6bGUoZmItPmRybV9mb3JtYXQpOworCXVpbnQ4X3QgKnJnYjI0ID0gY3Z0 LT5kc3QucHRyOworCXVuc2lnbmVkIGludCByZ2IyNF9zdHJpZGUgPSBjdnQtPmRzdC5zdHJpZGU7 CisJdW5zaWduZWQgaW50IHl1eXZfc3RyaWRlID0gY3Z0LT5zcmMuc3RyaWRlOworCXVpbnQ4X3Qg KmJ1ZiA9IG1hbGxvYyhjdnQtPnNyYy5zaXplKTsKKwlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF95 Y2Jjcl90b19yZ2JfbWF0cml4KGN2dC0+c3JjLmNvbG9yX2VuY29kaW5nLAorCQkJCQkJICAgIGN2 dC0+c3JjLmNvbG9yX3JhbmdlKTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzd3ogPSB5dXl2X3N3 aXp6bGUoY3Z0LT5zcmMuZm10KTsKIAogCS8qCiAJICogUmVhZGluZyBmcm9tIHRoZSBCTyBpcyBh d2Z1bGx5IHNsb3cgYmVjYXVzZSBvZiBsYWNrIG9mIHJlYWQgY2FjaGluZywKIAkgKiBpdCdzIGZh c3RlciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBhIHRlbXBvcmFyeSBidWZmZXIgYW5kIGNvbnZl cnQKIAkgKiBmcm9tIHRoZXJlLgogCSAqLwotCWlndF9tZW1jcHlfZnJvbV93YyhidWYsIGJsaXQt PmxpbmVhci5tYXAsIGJsaXQtPmxpbmVhci5zaXplKTsKKwlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVm LCBjdnQtPnNyYy5wdHIsIGN2dC0+c3JjLnNpemUpOwogCXl1eXYgPSBidWY7CiAKLQlmb3IgKGkg PSAwOyBpIDwgZmItPmhlaWdodDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGgg LyAyOyBqKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3Z0LT5oZWlnaHQ7IGkrKykgeworCQlmb3Ig KGogPSAwOyBqIDwgY3Z0LT53aWR0aCAvIDI7IGorKykgewogCQkJLyogQ29udmVydCAyeDEgcGl4 ZWwgYmxvY2tzICovCiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzJdOwogCQkJc3RydWN0IGlndF92 ZWM0IHJnYlsyXTsKQEAgLTE2NzgsNyArMTY5OCw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfeXV5 dl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxv CiAJCQl3cml0ZV9yZ2IoJnJnYjI0W2ogKiA4ICsgNF0sICZyZ2JbMV0pOwogCQl9CiAKLQkJaWYg KGZiLT53aWR0aCAmIDEpIHsKKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7CiAJCQlzdHJ1Y3QgaWd0 X3ZlYzQgeXV2OwogCQkJc3RydWN0IGlndF92ZWM0IHJnYjsKIApAQCAtMTY5OSwyNSArMTcxOSwy NSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3l1eXZfdG9fcmdiMjQoc3RydWN0IGlndF9mYiAqZmIs IHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCWZyZWUoYnVmKTsKIH0KIAotc3RhdGljIHZv aWQgY29udmVydF9yZ2IyNF90b195dXl2KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29u dmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKK3N0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9feXV5 dihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQogewogCWludCBpLCBqOwotCXVpbnQ4X3QgKnl1eXYg PSBibGl0LT5saW5lYXIubWFwOwotCWNvbnN0IHVpbnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdiMjQu bWFwOwotCXVuc2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZTsKLQl1bnNp Z25lZCB5dXl2X3N0cmlkZSA9IGJsaXQtPmxpbmVhci5zdHJpZGU7Ci0Jc3RydWN0IGlndF9tYXQ0 IG0gPSBpZ3RfcmdiX3RvX3ljYmNyX21hdHJpeChmYi0+Y29sb3JfZW5jb2RpbmcsCi0JCQkJCQkg ICAgZmItPmNvbG9yX3JhbmdlKTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzd3ogPSB5dXl2X3N3 aXp6bGUoZmItPmRybV9mb3JtYXQpOwotCi0JaWd0X2Fzc2VydF9mKGZiLT5kcm1fZm9ybWF0ID09 IERSTV9GT1JNQVRfWVVZViB8fAotCQkgICAgIGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRf WVZZVSB8fAotCQkgICAgIGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfVVlWWSB8fAotCQkg ICAgIGZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfVllVWSwKKwl1aW50OF90ICp5dXl2ID0g Y3Z0LT5kc3QucHRyOworCWNvbnN0IHVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5zcmMucHRyOworCXVu c2lnbmVkIHJnYjI0X3N0cmlkZSA9IGN2dC0+c3JjLnN0cmlkZTsKKwl1bnNpZ25lZCB5dXl2X3N0 cmlkZSA9IGN2dC0+ZHN0LnN0cmlkZTsKKwlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF9yZ2JfdG9f eWNiY3JfbWF0cml4KGN2dC0+ZHN0LmNvbG9yX2VuY29kaW5nLAorCQkJCQkJICAgIGN2dC0+ZHN0 LmNvbG9yX3JhbmdlKTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzd3ogPSB5dXl2X3N3aXp6bGUo Y3Z0LT5kc3QuZm10KTsKKworCWlndF9hc3NlcnRfZihjdnQtPmRzdC5mbXQgPT0gRFJNX0ZPUk1B VF9ZVVlWIHx8CisJCSAgICAgY3Z0LT5kc3QuZm10ID09IERSTV9GT1JNQVRfWVZZVSB8fAorCQkg ICAgIGN2dC0+ZHN0LmZtdCA9PSBEUk1fRk9STUFUX1VZVlkgfHwKKwkJICAgICBjdnQtPmRzdC5m bXQgPT0gRFJNX0ZPUk1BVF9WWVVZLAogCQkgICAgICJDb252ZXJzaW9uIG5vdCBpbXBsZW1lbnRl ZCBmb3IgIVlVWVYgcGxhbmFyIGZvcm1hdHNcbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IGZiLT5o ZWlnaHQ7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgZmItPndpZHRoIC8gMjsgaisrKSB7CisJ Zm9yIChpID0gMDsgaSA8IGN2dC0+aGVpZ2h0OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGN2 dC0+d2lkdGggLyAyOyBqKyspIHsKIAkJCS8qIENvbnZlcnQgMngxIHBpeGVsIGJsb2NrcyAqLwog CQkJc3RydWN0IGlndF92ZWM0IHJnYlsyXTsKIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07CkBA IC0xNzM0LDcgKzE3NTQsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3JnYjI0X3RvX3l1eXYoc3Ry dWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCQkJeXV5dltqICog NCArIHN3elszXV0gPSAoeXV2WzBdLmRbMl0gKyB5dXZbMV0uZFsyXSkgLyAyLjBmOwogCQl9CiAK LQkJaWYgKGZiLT53aWR0aCAmIDEpIHsKKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7CiAJCQlzdHJ1 Y3QgaWd0X3ZlYzQgcmdiOwogCQkJc3RydWN0IGlndF92ZWM0IHl1djsKIApAQCAtMTc1MiwyNyAr MTc3Miw2NSBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X3JnYjI0X3RvX3l1eXYoc3RydWN0IGlndF9m YiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCX0KIH0KIAorc3RhdGljIHZvaWQg ZmJfY29udmVydChzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQoreworCWlmIChjdnQtPmRzdC5mbXQg PT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHsKKwkJc3dpdGNoIChjdnQtPnNyYy5mbXQpIHsKKwkJY2Fz ZSBEUk1fRk9STUFUX05WMTI6CisJCQljb252ZXJ0X252MTJfdG9fcmdiMjQoY3Z0KTsKKwkJCXJl dHVybjsKKwkJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgor CQljYXNlIERSTV9GT1JNQVRfVVlWWToKKwkJY2FzZSBEUk1fRk9STUFUX1ZZVVk6CisJCQljb252 ZXJ0X3l1eXZfdG9fcmdiMjQoY3Z0KTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoY3Z0 LT5zcmMuZm10ID09IERSTV9GT1JNQVRfUkdCODg4KSB7CisJCXN3aXRjaCAoY3Z0LT5kc3QuZm10 KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQkJY29udmVydF9yZ2IyNF90b19udjEyKGN2 dCk7CisJCQlyZXR1cm47CisJCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCQljYXNlIERSTV9GT1JN QVRfWVZZVToKKwkJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJCWNhc2UgRFJNX0ZPUk1BVF9WWVVZ OgorCQkJY29udmVydF9yZ2IyNF90b195dXl2KGN2dCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisK KwlpZ3RfYXNzZXJ0X2YoZmFsc2UsCisJCSAgICAgIkNvbnZlcnNpb24gbm90IGltcGxlbWVudGVk IChmcm9tIGZvcm1hdCAweCV4IHRvIDB4JXgpXG4iLAorCQkgICAgIGN2dC0+c3JjLmZtdCwgY3Z0 LT5kc3QuZm10KTsKK30KKwogc3RhdGljIHZvaWQgZGVzdHJveV9jYWlyb19zdXJmYWNlX19jb252 ZXJ0KHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCA9 IGFyZzsKIAlzdHJ1Y3QgaWd0X2ZiICpmYiA9IGJsaXQtPmZiOwotCi0JLyogQ29udmVydCBsaW5l YXIgcmdiIGJhY2shICovCi0Jc3dpdGNoKGZiLT5kcm1fZm9ybWF0KSB7Ci0JY2FzZSBEUk1fRk9S TUFUX05WMTI6Ci0JCWNvbnZlcnRfcmdiMjRfdG9fbnYxMihmYiwgYmxpdCk7Ci0JCWJyZWFrOwot CWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1BVF9ZVllVOgotCWNhc2UgRFJN X0ZPUk1BVF9VWVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgotCQljb252ZXJ0X3JnYjI0X3Rv X3l1eXYoZmIsIGJsaXQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZ3RfYXNzZXJ0X2YoZmFs c2UsICJDb252ZXJzaW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0cyAweCV4XG4iLAotCQkJ ICAgICBmYi0+ZHJtX2Zvcm1hdCk7Ci0JfQotCisJc3RydWN0IGZiX2NvbnZlcnQgY3Z0ID0gewor CQkud2lkdGgJPSBmYi0+d2lkdGgsCisJCS5oZWlnaHQJPSBmYi0+aGVpZ2h0LAorCisJCS5kc3QJ PSB7CisJCQkucHRyCQk9IGJsaXQtPmxpbmVhci5tYXAsCisJCQkuZm10CQk9IGZiLT5kcm1fZm9y bWF0LAorCQkJLnN0cmlkZQkJPSBibGl0LT5saW5lYXIuc3RyaWRlLAorCQkJLnNpemUJCT0gYmxp dC0+bGluZWFyLnNpemUsCisJCQkuY29sb3JfZW5jb2RpbmcJPSBmYi0+Y29sb3JfZW5jb2Rpbmcs CisJCQkuY29sb3JfcmFuZ2UJPSBmYi0+Y29sb3JfcmFuZ2UsCisJCX0sCisKKwkJLnNyYwk9IHsK KwkJCS5wdHIJCT0gYmxpdC0+cmdiMjQubWFwLAorCQkJLmZtdAkJPSBEUk1fRk9STUFUX1JHQjg4 OCwKKwkJCS5zdHJpZGUJCT0gYmxpdC0+cmdiMjQuc3RyaWRlLAorCQkJLnNpemUJCT0gYmxpdC0+ cmdiMjQuc2l6ZSwKKwkJfSwKKwl9OworCisJZmJfY29udmVydCgmY3Z0KTsKIAltdW5tYXAoYmxp dC0+cmdiMjQubWFwLCBibGl0LT5yZ2IyNC5zaXplKTsKIAogCWlmIChibGl0LT5saW5lYXIuaGFu ZGxlKQpAQCAtMTc4OCw2ICsxODQ2LDggQEAgc3RhdGljIHZvaWQgZGVzdHJveV9jYWlyb19zdXJm YWNlX19jb252ZXJ0KHZvaWQgKmFyZykKIHN0YXRpYyB2b2lkIGNyZWF0ZV9jYWlyb19zdXJmYWNl X19jb252ZXJ0KGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIpCiB7CiAJc3RydWN0IGZiX2NvbnZl cnRfYmxpdF91cGxvYWQgKmJsaXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0KSk7CisJc3RydWN0IGZi X2NvbnZlcnQgY3Z0ID0geyAwIH07CisKIAlpZ3RfYXNzZXJ0KGJsaXQpOwogCiAJYmxpdC0+ZmQg PSBmZDsKQEAgLTE4MDksMjEgKzE4NjksMjQgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1 cmZhY2VfX2NvbnZlcnQoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKIAkJbWVtY3B5KGJsaXQt PmxpbmVhci5vZmZzZXRzLCBmYi0+b2Zmc2V0cywgc2l6ZW9mKGZiLT5vZmZzZXRzKSk7CiAJfQog Ci0JLyogQ29udmVydCB0byBsaW5lYXIgcmdiISAqLwotCXN3aXRjaChmYi0+ZHJtX2Zvcm1hdCkg ewotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCQljb252ZXJ0X252MTJfdG9fcmdiMjQoZmIsIGJs aXQpOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERSTV9GT1JNQVRf WVZZVToKLQljYXNlIERSTV9GT1JNQVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRfVllVWToKLQkJ Y29udmVydF95dXl2X3RvX3JnYjI0KGZiLCBibGl0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ aWd0X2Fzc2VydF9mKGZhbHNlLCAiQ29udmVyc2lvbiBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1h dHMgMHgleFxuIiwKLQkJCSAgICAgZmItPmRybV9mb3JtYXQpOwotCX0KKwljdnQud2lkdGggPSBm Yi0+d2lkdGg7CisJY3Z0LmhlaWdodCA9IGZiLT5oZWlnaHQ7CisKKwljdnQuZHN0LnB0ciA9IGJs aXQtPnJnYjI0Lm1hcDsKKwljdnQuZHN0LmZtdCA9IERSTV9GT1JNQVRfUkdCODg4OworCWN2dC5k c3Quc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlOworCWN2dC5kc3Quc2l6ZSA9IGJsaXQtPnJn YjI0LnNpemU7CisKKwljdnQuc3JjLnB0ciA9IGJsaXQtPmxpbmVhci5tYXA7CisJY3Z0LnNyYy5m bXQgPSBmYi0+ZHJtX2Zvcm1hdDsKKwljdnQuc3JjLnN0cmlkZQk9IGJsaXQtPmxpbmVhci5zdHJp ZGU7CisJY3Z0LnNyYy5zaXplID0gYmxpdC0+bGluZWFyLnNpemU7CisJY3Z0LnNyYy5jb2xvcl9l bmNvZGluZyA9IGZiLT5jb2xvcl9lbmNvZGluZzsKKwljdnQuc3JjLmNvbG9yX3JhbmdlID0gZmIt PmNvbG9yX3JhbmdlOworCW1lbWNweShjdnQuZHN0Lm9mZnNldHMsIGJsaXQtPmxpbmVhci5vZmZz ZXRzLAorCSAgICAgICBzaXplb2YoYmxpdC0+bGluZWFyLm9mZnNldHMpKTsKKworCWZiX2NvbnZl cnQoJmN2dCk7CiAKIAlmYi0+Y2Fpcm9fc3VyZmFjZSA9CiAJCWNhaXJvX2ltYWdlX3N1cmZhY2Vf Y3JlYXRlX2Zvcl9kYXRhKGJsaXQtPnJnYjI0Lm1hcCwKLS0gCmdpdC1zZXJpZXMgMC45LjEKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==