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 02FBB6E348 for ; Tue, 11 Sep 2018 08:47:45 +0000 (UTC) From: Maxime Ripard Date: Tue, 11 Sep 2018 10:47:31 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: Subject: [igt-dev] [PATCH v7 04/14] 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: eben@raspberrypi.org, Paul Kocialkowski , Thomas Petazzoni List-ID: VGhlIGN1cnJlbnQgY29kZSB0byBjb252ZXJ0IGJldHdlZW4gdHdvIGJ1ZmZlciBmb3JtYXRzIGlz IHF1aXRlIHRpZWQgdG8gdGhlCmNhaXJvIHN1cmZhY2UgaW5mcmFzdHJ1Y3R1cmUuIFNpbmNlIHdl J2xsIHdhbnQgdG8gcmV1c2UgaXQsIG1ha2UgdGhhdApmdW5jdGlvbiBtb3JlIGdlbmVyaWMgYnkg aW50cm9kdWNpbmcgYSBjb21tb24gc3RydWN0dXJlIHRoYXQgcGFzc2VzIGFsbCB0aGUKYXJndW1l bnRzIGFuZCBhIGNvbW1vbiBmdW5jdGlvbiB0aGF0IHdpbGwgY2FsbCB0aGUgcmlnaHQgZnVuY3Rp b25zIHdlCm5lZWRlZC4KClJldmlld2VkLWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0 PgpTaWduZWQtb2ZmLWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGJvb3RsaW4uY29t PgotLS0KIGxpYi9pZ3RfZmIuYyB8IDIyMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTMwIGluc2VydGlvbnMoKyks IDkwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZmIuYyBiL2xpYi9pZ3RfZmIu YwppbmRleCA2NmJkYzAyYTBjZTcuLmY4MjlkZjU5ZTlmYSAxMDA2NDQKLS0tIGEvbGliL2lndF9m Yi5jCisrKyBiL2xpYi9pZ3RfZmIuYwpAQCAtMTM5MSw2ICsxMzkxLDE5IEBAIHN0cnVjdCBmYl9j b252ZXJ0X2JsaXRfdXBsb2FkIHsKIAlzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgbGluZWFyOwogfTsK IAorc3RydWN0IGZiX2NvbnZlcnRfYnVmIHsKKwl2b2lkCQkJKnB0cjsKKwlzdHJ1Y3QgaWd0X2Zi CQkqZmI7Cit9OworCitzdHJ1Y3QgZmJfY29udmVydCB7CisJdW5zaWduZWQgaW50CQl3aWR0aDsK Kwl1bnNpZ25lZCBpbnQJCWhlaWdodDsKKworCXN0cnVjdCBmYl9jb252ZXJ0X2J1Zglkc3Q7CisJ c3RydWN0IGZiX2NvbnZlcnRfYnVmCXNyYzsKK307CisKIHN0YXRpYyB1aW50OF90IGNsYW1wcmdi KGZsb2F0IHZhbCkKIHsKIAlyZXR1cm4gY2xhbXAoKGludCkodmFsICsgMC41ZiksIDAsIDI1NSk7 CkBAIC0xNDExLDI3ICsxNDI0LDI4IEBAIHN0YXRpYyB2b2lkIHdyaXRlX3JnYih1aW50OF90ICpy Z2IyNCwgY29uc3Qgc3RydWN0IGlndF92ZWM0ICpyZ2IpCiAJcmdiMjRbMF0gPSBjbGFtcHJnYihy Z2ItPmRbMl0pOwogfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9fcmdiMjQoc3RydWN0 IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0KQorc3RhdGlj IHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCiB7CiAJ aW50IGksIGo7CiAJY29uc3QgdWludDhfdCAqeSwgKnV2OwotCXVpbnQ4X3QgKnJnYjI0ID0gYmxp dC0+cmdiMjQubWFwOwotCXVuc2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlk ZSwgcGxhbmFyX3N0cmlkZSA9IGJsaXQtPmxpbmVhci5zdHJpZGU7Ci0JdWludDhfdCAqYnVmID0g bWFsbG9jKGJsaXQtPmxpbmVhci5zaXplKTsKLQlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF95Y2Jj cl90b19yZ2JfbWF0cml4KGZiLT5jb2xvcl9lbmNvZGluZywKLQkJCQkJCSAgICBmYi0+Y29sb3Jf cmFuZ2UpOworCXVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5kc3QucHRyOworCXVuc2lnbmVkIGludCBy Z2IyNF9zdHJpZGUgPSBjdnQtPmRzdC5mYi0+c3RyaWRlOworCXVuc2lnbmVkIGludCBwbGFuYXJf c3RyaWRlID0gY3Z0LT5zcmMuZmItPnN0cmlkZTsKKwl1aW50OF90ICpidWYgPSBtYWxsb2MoY3Z0 LT5zcmMuZmItPnNpemUpOworCXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0X3ljYmNyX3RvX3JnYl9t YXRyaXgoY3Z0LT5zcmMuZmItPmNvbG9yX2VuY29kaW5nLAorCQkJCQkJICAgIGN2dC0+c3JjLmZi LT5jb2xvcl9yYW5nZSk7CiAKIAkvKgogCSAqIFJlYWRpbmcgZnJvbSB0aGUgQk8gaXMgYXdmdWxs eSBzbG93IGJlY2F1c2Ugb2YgbGFjayBvZiByZWFkIGNhY2hpbmcsCiAJICogaXQncyBmYXN0ZXIg dG8gY29weSB0aGUgd2hvbGUgQk8gdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIGFuZCBjb252ZXJ0CiAJ ICogZnJvbSB0aGVyZS4KIAkgKi8KLQlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVmLCBibGl0LT5saW5l YXIubWFwLCBibGl0LT5saW5lYXIuc2l6ZSk7Ci0JeSA9ICZidWZbYmxpdC0+bGluZWFyLm9mZnNl dHNbMF1dOwotCXV2ID0gJmJ1ZltibGl0LT5saW5lYXIub2Zmc2V0c1sxXV07CisJaWd0X21lbWNw eV9mcm9tX3djKGJ1ZiwgY3Z0LT5zcmMucHRyLCBjdnQtPnNyYy5mYi0+c2l6ZSk7CisJeSA9IGN2 dC0+c3JjLnB0ciArIGN2dC0+c3JjLmZiLT5vZmZzZXRzWzBdOworCXV2ID0gY3Z0LT5zcmMucHRy ICsgY3Z0LT5zcmMuZmItPm9mZnNldHNbMV07CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmItPmhlaWdo dCAvIDI7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgZmItPndpZHRoIC8gMjsgaisrKSB7CisJ Zm9yIChpID0gMDsgaSA8IGN2dC0+aGVpZ2h0IC8gMjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGog PCBjdnQtPndpZHRoIC8gMjsgaisrKSB7CiAJCQkvKiBDb252ZXJ0IDJ4MiBwaXhlbCBibG9ja3Mg Ki8KIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbNF07CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiWzRd OwpAQCAtMTQ1Niw3ICsxNDcwLDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0 KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KIAkJCXdyaXRl X3JnYigmcmdiMjRbaiAqIDggKyA0ICsgcmdiMjRfc3RyaWRlXSwgJnJnYlszXSk7CiAJCX0KIAot CQlpZiAoZmItPndpZHRoICYgMSkgeworCQlpZiAoY3Z0LT53aWR0aCAmIDEpIHsKIAkJCS8qIENv bnZlcnQgMXgyIHBpeGVsIGJsb2NrICovCiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzJdOwogCQkJ c3RydWN0IGlndF92ZWM0IHJnYlsyXTsKQEAgLTE0ODAsOSArMTQ5NCw5IEBAIHN0YXRpYyB2b2lk IGNvbnZlcnRfbnYxMl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZl cnRfYmxpdF91cGxvCiAJCXV2ICs9IHBsYW5hcl9zdHJpZGU7CiAJfQogCi0JaWYgKGZiLT5oZWln aHQgJiAxKSB7CisJaWYgKGN2dC0+aGVpZ2h0ICYgMSkgewogCQkvKiBDb252ZXJ0IGxhc3Qgcm93 ICovCi0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKyspIHsKKwkJZm9yIChqID0g MDsgaiA8IGN2dC0+d2lkdGggLyAyOyBqKyspIHsKIAkJCS8qIENvbnZlcnQgMngxIHBpeGVsIGJs b2NrcyAqLwogCQkJc3RydWN0IGlndF92ZWM0IHl1dlsyXTsKIAkJCXN0cnVjdCBpZ3RfdmVjNCBy Z2JbMl07CkBAIC0xNTAwLDcgKzE1MTQsNyBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9f cmdiMjQoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCQkJ d3JpdGVfcmdiKCZyZ2IyNFtqICogOCArIDRdLCAmcmdiWzBdKTsKIAkJfQogCi0JCWlmIChmYi0+ d2lkdGggJiAxKSB7CisJCWlmIChjdnQtPndpZHRoICYgMSkgewogCQkJLyogQ29udmVydCBzaW5n bGUgcGl4ZWwgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXY7CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQg cmdiOwpAQCAtMTUxOSwyMiArMTUzMywyMiBAQCBzdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9f cmdiMjQoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCWZy ZWUoYnVmKTsKIH0KIAotc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19udjEyKHN0cnVjdCBp Z3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKK3N0YXRpYyB2 b2lkIGNvbnZlcnRfcmdiMjRfdG9fbnYxMihzdHJ1Y3QgZmJfY29udmVydCAqY3Z0KQogewogCWlu dCBpLCBqOwotCXVpbnQ4X3QgKnkgPSAmYmxpdC0+bGluZWFyLm1hcFtibGl0LT5saW5lYXIub2Zm c2V0c1swXV07Ci0JdWludDhfdCAqdXYgPSAmYmxpdC0+bGluZWFyLm1hcFtibGl0LT5saW5lYXIu b2Zmc2V0c1sxXV07Ci0JY29uc3QgdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7Ci0J dW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlOwotCXVuc2lnbmVkIHBs YW5hcl9zdHJpZGUgPSBibGl0LT5saW5lYXIuc3RyaWRlOwotCXN0cnVjdCBpZ3RfbWF0NCBtID0g aWd0X3JnYl90b195Y2Jjcl9tYXRyaXgoZmItPmNvbG9yX2VuY29kaW5nLAotCQkJCQkJICAgIGZi LT5jb2xvcl9yYW5nZSk7Ci0KLQlpZ3RfYXNzZXJ0X2YoZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZP Uk1BVF9OVjEyLAorCXVpbnQ4X3QgKnkgPSBjdnQtPmRzdC5wdHIgKyBjdnQtPmRzdC5mYi0+b2Zm c2V0c1swXTsKKwl1aW50OF90ICp1diA9IGN2dC0+ZHN0LnB0ciArIGN2dC0+ZHN0LmZiLT5vZmZz ZXRzWzFdOworCWNvbnN0IHVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5zcmMucHRyOworCXVuc2lnbmVk IHJnYjI0X3N0cmlkZSA9IGN2dC0+c3JjLmZiLT5zdHJpZGU7CisJdW5zaWduZWQgcGxhbmFyX3N0 cmlkZSA9IGN2dC0+ZHN0LmZiLT5zdHJpZGU7CisJc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3Rfcmdi X3RvX3ljYmNyX21hdHJpeChjdnQtPmRzdC5mYi0+Y29sb3JfZW5jb2RpbmcsCisJCQkJCQkgICAg Y3Z0LT5kc3QuZmItPmNvbG9yX3JhbmdlKTsKKworCWlndF9hc3NlcnRfZihjdnQtPmRzdC5mYi0+ ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIsCiAJCSAgICAgIkNvbnZlcnNpb24gbm90IGlt cGxlbWVudGVkIGZvciAhTlYxMiBwbGFuYXIgZm9ybWF0c1xuIik7CiAKLQlmb3IgKGkgPSAwOyBp IDwgZmItPmhlaWdodCAvIDI7IGkrKykgewotCQlmb3IgKGogPSAwOyBqIDwgZmItPndpZHRoIC8g MjsgaisrKSB7CisJZm9yIChpID0gMDsgaSA8IGN2dC0+aGVpZ2h0IC8gMjsgaSsrKSB7CisJCWZv ciAoaiA9IDA7IGogPCBjdnQtPndpZHRoIC8gMjsgaisrKSB7CiAJCQkvKiBDb252ZXJ0IDJ4MiBw aXhlbCBibG9ja3MgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2JbNF07CiAJCQlzdHJ1Y3QgaWd0 X3ZlYzQgeXV2WzRdOwpAQCAtMTU2Myw3ICsxNTc3LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9y Z2IyNF90b19udjEyKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3Vw bG8KIAkJCXV2W2ogKiAyICsgMV0gPSAoeXV2WzBdLmRbMl0gKyB5dXZbMl0uZFsyXSkgLyAyLjBm OwogCQl9CiAKLQkJaWYgKGZiLT53aWR0aCAmIDEpIHsKKwkJaWYgKGN2dC0+d2lkdGggJiAxKSB7 CiAJCQkvKiBDb252ZXJ0IDF4MiBwaXhlbCBibG9jayAqLwogCQkJc3RydWN0IGlndF92ZWM0IHJn YlsyXTsKIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07CkBAIC0xNTkyLDggKzE2MDYsOCBAQCBz dGF0aWMgdm9pZCBjb252ZXJ0X3JnYjI0X3RvX252MTIoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVj dCBmYl9jb252ZXJ0X2JsaXRfdXBsbwogCX0KIAogCS8qIExhc3Qgcm93IGNhbm5vdCBiZSBpbnRl cnBvbGF0ZWQgYmV0d2VlbiAyIHBpeGVscywgdGFrZSB0aGUgc2luZ2xlIHZhbHVlICovCi0JaWYg KGZiLT5oZWlnaHQgJiAxKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGggLyAyOyBqKysp IHsKKwlpZiAoY3Z0LT5oZWlnaHQgJiAxKSB7CisJCWZvciAoaiA9IDA7IGogPCBjdnQtPndpZHRo IC8gMjsgaisrKSB7CiAJCQkvKiBDb252ZXJ0IDJ4MSBwaXhlbCBibG9ja3MgKi8KIAkJCXN0cnVj dCBpZ3RfdmVjNCByZ2JbMl07CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzJdOwpAQCAtMTYxMCw3 ICsxNjI0LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19udjEyKHN0cnVjdCBpZ3Rf ZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KIAkJCXV2W2ogKiAyICsgMV0gPSB5 dXZbMF0uZFsyXTsKIAkJfQogCi0JCWlmIChmYi0+d2lkdGggJiAxKSB7CisJCWlmIChjdnQtPndp ZHRoICYgMSkgewogCQkJLyogQ29udmVydCBzaW5nbGUgcGl4ZWwgKi8KIAkJCXN0cnVjdCBpZ3Rf dmVjNCByZ2I7CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2OwpAQCAtMTY0NywyNyArMTY2MSwyOCBA QCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqeXV5dl9zd2l6emxlKHVpbnQzMl90IGZvcm1h dCkKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbnZlcnRfeXV5dl90b19yZ2IyNChzdHJ1Y3QgaWd0 X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgKmJsaXQpCitzdGF0aWMgdm9p ZCBjb252ZXJ0X3l1eXZfdG9fcmdiMjQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKIHsKIAlpbnQg aSwgajsKIAljb25zdCB1aW50OF90ICp5dXl2OwotCXVpbnQ4X3QgKnJnYjI0ID0gYmxpdC0+cmdi MjQubWFwOwotCXVuc2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0LnN0cmlkZSwgeXV5 dl9zdHJpZGUgPSBibGl0LT5saW5lYXIuc3RyaWRlOwotCXVpbnQ4X3QgKmJ1ZiA9IG1hbGxvYyhi bGl0LT5saW5lYXIuc2l6ZSk7Ci0Jc3RydWN0IGlndF9tYXQ0IG0gPSBpZ3RfeWNiY3JfdG9fcmdi X21hdHJpeChmYi0+Y29sb3JfZW5jb2RpbmcsCi0JCQkJCQkgICAgZmItPmNvbG9yX3JhbmdlKTsK LQljb25zdCB1bnNpZ25lZCBjaGFyICpzd3ogPSB5dXl2X3N3aXp6bGUoZmItPmRybV9mb3JtYXQp OworCXVpbnQ4X3QgKnJnYjI0ID0gY3Z0LT5kc3QucHRyOworCXVuc2lnbmVkIGludCByZ2IyNF9z dHJpZGUgPSBjdnQtPmRzdC5mYi0+c3RyaWRlOworCXVuc2lnbmVkIGludCB5dXl2X3N0cmlkZSA9 IGN2dC0+c3JjLmZiLT5zdHJpZGU7CisJdWludDhfdCAqYnVmID0gbWFsbG9jKGN2dC0+c3JjLmZi LT5zaXplKTsKKwlzdHJ1Y3QgaWd0X21hdDQgbSA9IGlndF95Y2Jjcl90b19yZ2JfbWF0cml4KGN2 dC0+c3JjLmZiLT5jb2xvcl9lbmNvZGluZywKKwkJCQkJCSAgICBjdnQtPnNyYy5mYi0+Y29sb3Jf cmFuZ2UpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN3eiA9IHl1eXZfc3dpenpsZShjdnQtPnNy Yy5mYi0+ZHJtX2Zvcm1hdCk7CiAKIAkvKgogCSAqIFJlYWRpbmcgZnJvbSB0aGUgQk8gaXMgYXdm dWxseSBzbG93IGJlY2F1c2Ugb2YgbGFjayBvZiByZWFkIGNhY2hpbmcsCiAJICogaXQncyBmYXN0 ZXIgdG8gY29weSB0aGUgd2hvbGUgQk8gdG8gYSB0ZW1wb3JhcnkgYnVmZmVyIGFuZCBjb252ZXJ0 CiAJICogZnJvbSB0aGVyZS4KIAkgKi8KLQlpZ3RfbWVtY3B5X2Zyb21fd2MoYnVmLCBibGl0LT5s aW5lYXIubWFwLCBibGl0LT5saW5lYXIuc2l6ZSk7CisJaWd0X21lbWNweV9mcm9tX3djKGJ1Ziwg Y3Z0LT5zcmMucHRyLCBjdnQtPnNyYy5mYi0+c2l6ZSk7CiAJeXV5diA9IGJ1ZjsKIAotCWZvciAo aSA9IDA7IGkgPCBmYi0+aGVpZ2h0OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0 aCAvIDI7IGorKykgeworCWZvciAoaSA9IDA7IGkgPCBjdnQtPmhlaWdodDsgaSsrKSB7CisJCWZv ciAoaiA9IDA7IGogPCBjdnQtPndpZHRoIC8gMjsgaisrKSB7CiAJCQkvKiBDb252ZXJ0IDJ4MSBw aXhlbCBibG9ja3MgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07CiAJCQlzdHJ1Y3QgaWd0 X3ZlYzQgcmdiWzJdOwpAQCAtMTY4NSw3ICsxNzAwLDcgQEAgc3RhdGljIHZvaWQgY29udmVydF95 dXl2X3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3Vw bG8KIAkJCXdyaXRlX3JnYigmcmdiMjRbaiAqIDggKyA0XSwgJnJnYlsxXSk7CiAJCX0KIAotCQlp ZiAoZmItPndpZHRoICYgMSkgeworCQlpZiAoY3Z0LT53aWR0aCAmIDEpIHsKIAkJCXN0cnVjdCBp Z3RfdmVjNCB5dXY7CiAJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiOwogCkBAIC0xNzA2LDI1ICsxNzIx LDI1IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfeXV5dl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpm Yiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCiAJZnJlZShidWYpOwogfQogCi1zdGF0aWMg dm9pZCBjb252ZXJ0X3JnYjI0X3RvX3l1eXYoc3RydWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9j b252ZXJ0X2JsaXRfdXBsb2FkICpibGl0KQorc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b195 dXl2KHN0cnVjdCBmYl9jb252ZXJ0ICpjdnQpCiB7CiAJaW50IGksIGo7Ci0JdWludDhfdCAqeXV5 diA9IGJsaXQtPmxpbmVhci5tYXA7Ci0JY29uc3QgdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2Iy NC5tYXA7Ci0JdW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlOwotCXVu c2lnbmVkIHl1eXZfc3RyaWRlID0gYmxpdC0+bGluZWFyLnN0cmlkZTsKLQlzdHJ1Y3QgaWd0X21h dDQgbSA9IGlndF9yZ2JfdG9feWNiY3JfbWF0cml4KGZiLT5jb2xvcl9lbmNvZGluZywKLQkJCQkJ CSAgICBmYi0+Y29sb3JfcmFuZ2UpOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN3eiA9IHl1eXZf c3dpenpsZShmYi0+ZHJtX2Zvcm1hdCk7Ci0KLQlpZ3RfYXNzZXJ0X2YoZmItPmRybV9mb3JtYXQg PT0gRFJNX0ZPUk1BVF9ZVVlWIHx8Ci0JCSAgICAgZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1B VF9ZVllVIHx8Ci0JCSAgICAgZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9VWVZZIHx8Ci0J CSAgICAgZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9WWVVZLAorCXVpbnQ4X3QgKnl1eXYg PSBjdnQtPmRzdC5wdHI7CisJY29uc3QgdWludDhfdCAqcmdiMjQgPSBjdnQtPnNyYy5wdHI7CisJ dW5zaWduZWQgcmdiMjRfc3RyaWRlID0gY3Z0LT5zcmMuZmItPnN0cmlkZTsKKwl1bnNpZ25lZCB5 dXl2X3N0cmlkZSA9IGN2dC0+ZHN0LmZiLT5zdHJpZGU7CisJc3RydWN0IGlndF9tYXQ0IG0gPSBp Z3RfcmdiX3RvX3ljYmNyX21hdHJpeChjdnQtPmRzdC5mYi0+Y29sb3JfZW5jb2RpbmcsCisJCQkJ CQkgICAgY3Z0LT5kc3QuZmItPmNvbG9yX3JhbmdlKTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpz d3ogPSB5dXl2X3N3aXp6bGUoY3Z0LT5kc3QuZmItPmRybV9mb3JtYXQpOworCisJaWd0X2Fzc2Vy dF9mKGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfWVVZViB8fAorCQkgICAg IGN2dC0+ZHN0LmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfWVZZVSB8fAorCQkgICAgIGN2 dC0+ZHN0LmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfVVlWWSB8fAorCQkgICAgIGN2dC0+ ZHN0LmZiLT5kcm1fZm9ybWF0ID09IERSTV9GT1JNQVRfVllVWSwKIAkJICAgICAiQ29udmVyc2lv biBub3QgaW1wbGVtZW50ZWQgZm9yICFZVVlWIHBsYW5hciBmb3JtYXRzXG4iKTsKIAotCWZvciAo aSA9IDA7IGkgPCBmYi0+aGVpZ2h0OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0 aCAvIDI7IGorKykgeworCWZvciAoaSA9IDA7IGkgPCBjdnQtPmhlaWdodDsgaSsrKSB7CisJCWZv ciAoaiA9IDA7IGogPCBjdnQtPndpZHRoIC8gMjsgaisrKSB7CiAJCQkvKiBDb252ZXJ0IDJ4MSBw aXhlbCBibG9ja3MgKi8KIAkJCXN0cnVjdCBpZ3RfdmVjNCByZ2JbMl07CiAJCQlzdHJ1Y3QgaWd0 X3ZlYzQgeXV2WzJdOwpAQCAtMTc0MSw3ICsxNzU2LDcgQEAgc3RhdGljIHZvaWQgY29udmVydF9y Z2IyNF90b195dXl2KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3Vw bG8KIAkJCXl1eXZbaiAqIDQgKyBzd3pbM11dID0gKHl1dlswXS5kWzJdICsgeXV2WzFdLmRbMl0p IC8gMi4wZjsKIAkJfQogCi0JCWlmIChmYi0+d2lkdGggJiAxKSB7CisJCWlmIChjdnQtPndpZHRo ICYgMSkgewogCQkJc3RydWN0IGlndF92ZWM0IHJnYjsKIAkJCXN0cnVjdCBpZ3RfdmVjNCB5dXY7 CiAKQEAgLTE3NTksMjcgKzE3NzQsNTkgQEAgc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b195 dXl2KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG8KIAl9CiB9 CiAKK3N0YXRpYyB2b2lkIGZiX2NvbnZlcnQoc3RydWN0IGZiX2NvbnZlcnQgKmN2dCkKK3sKKwlp ZiAoY3Z0LT5kc3QuZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHsKKwkJc3dp dGNoIChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1hdCkgeworCQljYXNlIERSTV9GT1JNQVRfTlYxMjoK KwkJCWNvbnZlcnRfbnYxMl90b19yZ2IyNChjdnQpOworCQkJcmV0dXJuOworCQljYXNlIERSTV9G T1JNQVRfWVVZVjoKKwkJY2FzZSBEUk1fRk9STUFUX1lWWVU6CisJCWNhc2UgRFJNX0ZPUk1BVF9V WVZZOgorCQljYXNlIERSTV9GT1JNQVRfVllVWToKKwkJCWNvbnZlcnRfeXV5dl90b19yZ2IyNChj dnQpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIGlmIChjdnQtPnNyYy5mYi0+ZHJtX2Zvcm1h dCA9PSBEUk1fRk9STUFUX1JHQjg4OCkgeworCQlzd2l0Y2ggKGN2dC0+ZHN0LmZiLT5kcm1fZm9y bWF0KSB7CisJCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCQkJY29udmVydF9yZ2IyNF90b19udjEy KGN2dCk7CisJCQlyZXR1cm47CisJCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgorCQljYXNlIERSTV9G T1JNQVRfWVZZVToKKwkJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJCWNhc2UgRFJNX0ZPUk1BVF9W WVVZOgorCQkJY29udmVydF9yZ2IyNF90b195dXl2KGN2dCk7CisJCQlyZXR1cm47CisJCX0KKwl9 CisKKwlpZ3RfYXNzZXJ0X2YoZmFsc2UsCisJCSAgICAgIkNvbnZlcnNpb24gbm90IGltcGxlbWVu dGVkIChmcm9tIGZvcm1hdCAweCV4IHRvIDB4JXgpXG4iLAorCQkgICAgIGN2dC0+c3JjLmZiLT5k cm1fZm9ybWF0LCBjdnQtPmRzdC5mYi0+ZHJtX2Zvcm1hdCk7Cit9CisKIHN0YXRpYyB2b2lkIGRl c3Ryb3lfY2Fpcm9fc3VyZmFjZV9fY29udmVydCh2b2lkICphcmcpCiB7CiAJc3RydWN0IGZiX2Nv bnZlcnRfYmxpdF91cGxvYWQgKmJsaXQgPSBhcmc7CiAJc3RydWN0IGlndF9mYiAqZmIgPSBibGl0 LT5mYjsKLQotCS8qIENvbnZlcnQgbGluZWFyIHJnYiBiYWNrISAqLwotCXN3aXRjaChmYi0+ZHJt X2Zvcm1hdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCQljb252ZXJ0X3JnYjI0X3RvX252 MTIoZmIsIGJsaXQpOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfWVVZVjoKLQljYXNlIERS TV9GT1JNQVRfWVZZVToKLQljYXNlIERSTV9GT1JNQVRfVVlWWToKLQljYXNlIERSTV9GT1JNQVRf VllVWToKLQkJY29udmVydF9yZ2IyNF90b195dXl2KGZiLCBibGl0KTsKLQkJYnJlYWs7Ci0JZGVm YXVsdDoKLQkJaWd0X2Fzc2VydF9mKGZhbHNlLCAiQ29udmVyc2lvbiBub3QgaW1wbGVtZW50ZWQg Zm9yIGZvcm1hdHMgMHgleFxuIiwKLQkJCSAgICAgZmItPmRybV9mb3JtYXQpOwotCX0KLQorCXN0 cnVjdCBmYl9jb252ZXJ0IGN2dCA9IHsKKwkJLndpZHRoCT0gZmItPndpZHRoLAorCQkuaGVpZ2h0 CT0gZmItPmhlaWdodCwKKworCQkuZHN0CT0geworCQkJLnB0cgk9IGJsaXQtPmxpbmVhci5tYXAs CisJCQkuZmIJPSBibGl0LT5mYiwKKwkJfSwKKworCQkuc3JjCT0geworCQkJLnB0cgk9IGJsaXQt PnNoYWRvd19wdHIsCisJCQkuZmIJPSAmYmxpdC0+c2hhZG93X2ZiLAorCQl9LAorCX07CisKKwlm Yl9jb252ZXJ0KCZjdnQpOwogCWlndF9mYl91bm1hcF9idWZmZXIoJmJsaXQtPnNoYWRvd19mYiwg YmxpdC0+c2hhZG93X3B0cik7CiAJaWd0X3JlbW92ZV9mYihibGl0LT5mZCwgJmJsaXQtPnNoYWRv d19mYik7CiAKQEAgLTE3OTYsNiArMTg0Myw3IEBAIHN0YXRpYyB2b2lkIGRlc3Ryb3lfY2Fpcm9f c3VyZmFjZV9fY29udmVydCh2b2lkICphcmcpCiBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3Vy ZmFjZV9fY29udmVydChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQogewogCXN0cnVjdCBmYl9j b252ZXJ0X2JsaXRfdXBsb2FkICpibGl0ID0gbWFsbG9jKHNpemVvZigqYmxpdCkpOworCXN0cnVj dCBmYl9jb252ZXJ0IGN2dCA9IHsgMCB9OwogCWludCBzaGFkb3dfaWQ7CiAKIAlpZ3RfYXNzZXJ0 KGJsaXQpOwpAQCAtMTgyMywyMSArMTg3MSwxMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9f c3VyZmFjZV9fY29udmVydChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQogCQltZW1jcHkoYmxp dC0+bGluZWFyLm9mZnNldHMsIGZiLT5vZmZzZXRzLCBzaXplb2YoZmItPm9mZnNldHMpKTsKIAl9 CiAKLQkvKiBDb252ZXJ0IHRvIGxpbmVhciByZ2IhICovCi0Jc3dpdGNoKGZiLT5kcm1fZm9ybWF0 KSB7Ci0JY2FzZSBEUk1fRk9STUFUX05WMTI6Ci0JCWNvbnZlcnRfbnYxMl90b19yZ2IyNChmYiwg YmxpdCk7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9ZVVlWOgotCWNhc2UgRFJNX0ZPUk1B VF9ZVllVOgotCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgotCWNhc2UgRFJNX0ZPUk1BVF9WWVVZOgot CQljb252ZXJ0X3l1eXZfdG9fcmdiMjQoZmIsIGJsaXQpOwotCQlicmVhazsKLQlkZWZhdWx0Ogot CQlpZ3RfYXNzZXJ0X2YoZmFsc2UsICJDb252ZXJzaW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9y bWF0cyAweCV4XG4iLAotCQkJICAgICBmYi0+ZHJtX2Zvcm1hdCk7Ci0JfQorCWN2dC53aWR0aCA9 IGZiLT53aWR0aDsKKwljdnQuaGVpZ2h0ID0gZmItPmhlaWdodDsKKwljdnQuZHN0LnB0ciA9IGJs aXQtPnNoYWRvd19wdHI7CisJY3Z0LmRzdC5mYiA9ICZibGl0LT5zaGFkb3dfZmI7CisJY3Z0LnNy Yy5wdHIgPSBibGl0LT5saW5lYXIubWFwOworCWN2dC5zcmMuZmIgPSBibGl0LT5mYjsKKwlmYl9j b252ZXJ0KCZjdnQpOwogCiAJZmItPmNhaXJvX3N1cmZhY2UgPQogCQljYWlyb19pbWFnZV9zdXJm YWNlX2NyZWF0ZV9mb3JfZGF0YShibGl0LT5zaGFkb3dfcHRyLAotLSAKZ2l0LXNlcmllcyAwLjku MQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK