From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: [PATCH 05/15] staging: vboxvideo: Atomic phase 1: convert cursor to universal plane Date: Wed, 26 Sep 2018 21:41:56 +0200 Message-ID: <20180926194206.23517-6-hdegoede@redhat.com> References: <20180926194206.23517-1-hdegoede@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B8DE89B67 for ; Wed, 26 Sep 2018 19:42:17 +0000 (UTC) In-Reply-To: <20180926194206.23517-1-hdegoede@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Hans de Goede , Michael Thayer , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SW4gcHJlcGFyYXRpb24gZm9yIGF0b21pYyBjb252ZXJzaW9uLCBsZXQncyB1c2UgdGhlIHRyYW5z aXRpb25hbCBhdG9taWMKaGVscGVycyBkcm1fcGxhbmVfaGVscGVyX3VwZGF0ZS9kaXNhYmxlLgoK U2lnbmVkLW9mZi1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLS0tCiBk cml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL3Zib3hfZHJ2LmggIHwgICA1IC0KIGRyaXZlcnMvc3Rh Z2luZy92Ym94dmlkZW8vdmJveF9tb2RlLmMgfCAzODYgKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0KIDIgZmlsZXMgY2hhbmdlZCwgMTg2IGluc2VydGlvbnMoKyksIDIwNSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL3Zib3hfZHJ2LmggYi9kcml2 ZXJzL3N0YWdpbmcvdmJveHZpZGVvL3Zib3hfZHJ2LmgKaW5kZXggMzRjNGQ3ZmM2YzhlLi43ZmM2 NjhmZjQ0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92Ym94dmlkZW8vdmJveF9kcnYu aAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL3Zib3hfZHJ2LmgKQEAgLTExNiwxMSAr MTE2LDYgQEAgc3RydWN0IHZib3hfcHJpdmF0ZSB7CiAJICogZW5jb21wYXNzaW5nIGFsbCBzY3Jl ZW4gb25lcyBvciBpcyB0aGUgZmJkZXYgY29uc29sZSBhY3RpdmU/CiAJICovCiAJYm9vbCBzaW5n bGVfZnJhbWVidWZmZXI7Ci0JdTMyIGN1cnNvcl93aWR0aDsKLQl1MzIgY3Vyc29yX2hlaWdodDsK LQl1MzIgY3Vyc29yX2hvdF94OwotCXUzMiBjdXJzb3JfaG90X3k7Ci0Jc2l6ZV90IGN1cnNvcl9k YXRhX3NpemU7CiAJdTggY3Vyc29yX2RhdGFbQ1VSU09SX0RBVEFfU0laRV07CiB9OwogCmRpZmYg LS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL3Zib3hfbW9kZS5jIGIvZHJpdmVycy9z dGFnaW5nL3Zib3h2aWRlby92Ym94X21vZGUuYwppbmRleCBlODViMjdmOTVkZWYuLjc1ZTExMmQz M2NmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Zib3h2aWRlby92Ym94X21vZGUuYwor KysgYi9kcml2ZXJzL3N0YWdpbmcvdmJveHZpZGVvL3Zib3hfbW9kZS5jCkBAIC0zNCwxNiArMzQs MTIgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGNf aGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pY19oZWxwZXIuaD4KIAogI2luY2x1ZGUgInZib3hfZHJ2LmgiCiAjaW5jbHVk ZSAidmJveHZpZGVvLmgiCiAjaW5jbHVkZSAiaGdzbWlfY2hhbm5lbHMuaCIKIAotc3RhdGljIGlu dCB2Ym94X2N1cnNvcl9zZXQyKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCi0JCQkgICAgdTMyIGhhbmRsZSwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAot CQkJICAgIHMzMiBob3RfeCwgczMyIGhvdF95KTsKLXN0YXRpYyBpbnQgdmJveF9jdXJzb3JfbW92 ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSk7Ci0KIC8qKgogICogU2V0IGEg Z3JhcGhpY3MgbW9kZS4gIFBva2UgYW55IHJlcXVpcmVkIHZhbHVlcyBpbnRvIHJlZ2lzdGVycywg ZG8gYW4gSEdTTUkKICAqIG1vZGUgc2V0IGFuZCB0ZWxsIHRoZSBob3N0IHdlIHN1cHBvcnQgYWR2 YW5jZWQgZ3JhcGhpY3MgZnVuY3Rpb25zLgpAQCAtMzE4LDE0ICszMTQsMTY2IEBAIHN0YXRpYyB2 b2lkIHZib3hfY3J0Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIH0KIAogc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB2Ym94X2NydGNfZnVuY3MgPSB7Ci0JLmN1cnNv cl9tb3ZlID0gdmJveF9jdXJzb3JfbW92ZSwKLQkuY3Vyc29yX3NldDIgPSB2Ym94X2N1cnNvcl9z ZXQyLAogCS5yZXNldCA9IHZib3hfY3J0Y19yZXNldCwKIAkuc2V0X2NvbmZpZyA9IGRybV9jcnRj X2hlbHBlcl9zZXRfY29uZmlnLAogCS8qIC5nYW1tYV9zZXQgPSB2Ym94X2NydGNfZ2FtbWFfc2V0 LCAqLwogCS5kZXN0cm95ID0gdmJveF9jcnRjX2Rlc3Ryb3ksCiB9OwogCitzdGF0aWMgaW50IHZi b3hfY3Vyc29yX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQoreworCXUzMiB3aWR0aCA9IG5ld19z dGF0ZS0+Y3J0Y193OworCXUzMiBoZWlnaHQgPSBuZXdfc3RhdGUtPmNydGNfaDsKKworCWlmICgh bmV3X3N0YXRlLT5mYikKKwkJcmV0dXJuIDA7CisKKwlpZiAod2lkdGggPiBWQk9YX01BWF9DVVJT T1JfV0lEVEggfHwgaGVpZ2h0ID4gVkJPWF9NQVhfQ1VSU09SX0hFSUdIVCB8fAorCSAgICB3aWR0 aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOwor fQorCisvKioKKyAqIENvcHkgdGhlIEFSR0IgaW1hZ2UgYW5kIGdlbmVyYXRlIHRoZSBtYXNrLCB3 aGljaCBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgaG9zdAorICogZG9lcyBub3Qgc3VwcG9ydCBBUkdC IGN1cnNvcnMuICBUaGUgbWFzayBpcyBhIDFCUFAgYml0bWFwIHdpdGggdGhlIGJpdCBzZXQKKyAq IGlmIHRoZSBjb3JyZXNwb25kaW5nIGFscGhhIHZhbHVlIGluIHRoZSBBUkdCIGltYWdlIGlzIGdy ZWF0ZXIgdGhhbiAweEYwLgorICovCitzdGF0aWMgdm9pZCBjb3B5X2N1cnNvcl9pbWFnZSh1OCAq c3JjLCB1OCAqZHN0LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCisJCQkgICAgICBzaXplX3QgbWFz a19zaXplKQoreworCXNpemVfdCBsaW5lX3NpemUgPSAod2lkdGggKyA3KSAvIDg7CisJdTMyIGks IGo7CisKKwltZW1jcHkoZHN0ICsgbWFza19zaXplLCBzcmMsIHdpZHRoICogaGVpZ2h0ICogNCk7 CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgKytpKQorCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7 ICsraikKKwkJCWlmICgoKHUzMiAqKXNyYylbaSAqIHdpZHRoICsgal0gPiAweGYwMDAwMDAwKQor CQkJCWRzdFtpICogbGluZV9zaXplICsgaiAvIDhdIHw9ICgweDgwID4+IChqICUgOCkpOworfQor CitzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sK KwlzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94ID0KKwkJY29udGFpbmVyX29mKHBsYW5lLT5kZXYs IHN0cnVjdCB2Ym94X3ByaXZhdGUsIGRkZXYpOworCXN0cnVjdCB2Ym94X2NydGMgKnZib3hfY3J0 YyA9IHRvX3Zib3hfY3J0YyhwbGFuZS0+c3RhdGUtPmNydGMpOworCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gcGxhbmUtPnN0YXRlLT5mYjsKKwlzdHJ1Y3QgdmJveF9ibyAqYm8gPSBnZW1f dG9fdmJveF9ibyh0b192Ym94X2ZyYW1lYnVmZmVyKGZiKS0+b2JqKTsKKwl1MzIgd2lkdGggPSBw bGFuZS0+c3RhdGUtPmNydGNfdzsKKwl1MzIgaGVpZ2h0ID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7 CisJc2l6ZV90IGRhdGFfc2l6ZSwgbWFza19zaXplOworCXUzMiBmbGFnczsKKwl1OCAqc3JjOwor CisJLyoKKwkgKiBWaXJ0dWFsQm94IHVzZXMgdGhlIGhvc3Qgd2luZG93aW5nIHN5c3RlbSB0byBk cmF3IHRoZSBjdXJzb3Igc28KKwkgKiBtb3ZlcyBhcmUgYSBuby1vcCwgd2Ugb25seSBuZWVkIHRv IHVwbG9hZCBuZXcgY3Vyc29yIHNwcml0ZXMuCisJICovCisJaWYgKGZiID09IG9sZF9zdGF0ZS0+ ZmIpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnZib3gtPmh3X211dGV4KTsKKworCXZib3hf Y3J0Yy0+Y3Vyc29yX2VuYWJsZWQgPSB0cnVlOworCisJLyogcGlubmluZyBpcyBkb25lIGluIHBy ZXBhcmUvY2xlYW51cCBmcmFtZWJ1ZmZlciAqLworCXNyYyA9IHZib3hfYm9fa21hcChibyk7CisJ aWYgKElTX0VSUihzcmMpKSB7CisJCURSTV9XQVJOKCJDb3VsZCBub3Qga21hcCBjdXJzb3IgYm8s IHNraXBwaW5nIHVwZGF0ZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSBtYXNr IG11c3QgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgYWxwaGEKKwkgKiBjaGFubmVsLCBvbmUg Yml0IHBlciBBUkdCIHdvcmQsIGFuZCBtdXN0IGJlIDMyLWJpdAorCSAqIHBhZGRlZC4KKwkgKi8K KwltYXNrX3NpemUgPSAoKHdpZHRoICsgNykgLyA4ICogaGVpZ2h0ICsgMykgJiB+MzsKKwlkYXRh X3NpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQgKyBtYXNrX3NpemU7CisKKwljb3B5X2N1cnNvcl9p bWFnZShzcmMsIHZib3gtPmN1cnNvcl9kYXRhLCB3aWR0aCwgaGVpZ2h0LCBtYXNrX3NpemUpOwor CXZib3hfYm9fa3VubWFwKGJvKTsKKworCWZsYWdzID0gVkJPWF9NT1VTRV9QT0lOVEVSX1ZJU0lC TEUgfCBWQk9YX01PVVNFX1BPSU5URVJfU0hBUEUgfAorCQlWQk9YX01PVVNFX1BPSU5URVJfQUxQ SEE7CisJaGdzbWlfdXBkYXRlX3BvaW50ZXJfc2hhcGUodmJveC0+Z3Vlc3RfcG9vbCwgZmxhZ3Ms CisJCQkJICAgbWluX3QodTMyLCBtYXgoZmItPmhvdF94LCAwKSwgd2lkdGgpLAorCQkJCSAgIG1p bl90KHUzMiwgbWF4KGZiLT5ob3RfeSwgMCksIGhlaWdodCksCisJCQkJICAgd2lkdGgsIGhlaWdo dCwgdmJveC0+Y3Vyc29yX2RhdGEsIGRhdGFfc2l6ZSk7CisKKwltdXRleF91bmxvY2soJnZib3gt Pmh3X211dGV4KTsKK30KKwordm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfZGlzYWJsZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKKwkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUp Cit7CisJc3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCA9CisJCWNvbnRhaW5lcl9vZihwbGFuZS0+ ZGV2LCBzdHJ1Y3QgdmJveF9wcml2YXRlLCBkZGV2KTsKKwlzdHJ1Y3QgdmJveF9jcnRjICp2Ym94 X2NydGMgPSB0b192Ym94X2NydGMob2xkX3N0YXRlLT5jcnRjKTsKKwlib29sIGN1cnNvcl9lbmFi bGVkID0gZmFsc2U7CisJc3RydWN0IGRybV9jcnRjICpjcnRjaTsKKworCW11dGV4X2xvY2soJnZi b3gtPmh3X211dGV4KTsKKworCXZib3hfY3J0Yy0+Y3Vyc29yX2VuYWJsZWQgPSBmYWxzZTsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0Y2ksICZ2Ym94LT5kZGV2Lm1vZGVfY29uZmlnLmNydGNf bGlzdCwgaGVhZCkgeworCQlpZiAodG9fdmJveF9jcnRjKGNydGNpKS0+Y3Vyc29yX2VuYWJsZWQp CisJCQljdXJzb3JfZW5hYmxlZCA9IHRydWU7CisJfQorCisJaWYgKCFjdXJzb3JfZW5hYmxlZCkK KwkJaGdzbWlfdXBkYXRlX3BvaW50ZXJfc2hhcGUodmJveC0+Z3Vlc3RfcG9vbCwgMCwgMCwgMCwK KwkJCQkJICAgMCwgMCwgTlVMTCwgMCk7CisKKwltdXRleF91bmxvY2soJnZib3gtPmh3X211dGV4 KTsKK30KKworc3RhdGljIGludCB2Ym94X2N1cnNvcl9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQorewor CXN0cnVjdCB2Ym94X2JvICpibzsKKworCWlmICghbmV3X3N0YXRlLT5mYikKKwkJcmV0dXJuIDA7 CisKKwlibyA9IGdlbV90b192Ym94X2JvKHRvX3Zib3hfZnJhbWVidWZmZXIobmV3X3N0YXRlLT5m YiktPm9iaik7CisJcmV0dXJuIHZib3hfYm9fcGluKGJvLCBUVE1fUExfRkxBR19TWVNURU0pOwor fQorCitzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9jbGVhbnVwX2ZiKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAorCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlz dHJ1Y3QgdmJveF9ibyAqYm87CisKKwlpZiAoIXBsYW5lLT5zdGF0ZS0+ZmIpCisJCXJldHVybjsK KworCWJvID0gZ2VtX3RvX3Zib3hfYm8odG9fdmJveF9mcmFtZWJ1ZmZlcihwbGFuZS0+c3RhdGUt PmZiKS0+b2JqKTsKKwl2Ym94X2JvX3VucGluKGJvKTsKK30KKworc3RhdGljIGNvbnN0IHVpbnQz Ml90IHZib3hfY3Vyc29yX3BsYW5lX2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX0FSR0I4ODg4 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIHZib3hf Y3Vyc29yX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrCT0gdmJveF9jdXJzb3JfYXRv bWljX2NoZWNrLAorCS5hdG9taWNfdXBkYXRlCT0gdmJveF9jdXJzb3JfYXRvbWljX3VwZGF0ZSwK KwkuYXRvbWljX2Rpc2FibGUJPSB2Ym94X2N1cnNvcl9hdG9taWNfZGlzYWJsZSwKKwkucHJlcGFy ZV9mYgk9IHZib3hfY3Vyc29yX3ByZXBhcmVfZmIsCisJLmNsZWFudXBfZmIJPSB2Ym94X2N1cnNv cl9jbGVhbnVwX2ZiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3Mg dmJveF9jdXJzb3JfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZQk9IGRybV9wbGFuZV9o ZWxwZXJfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lCT0gZHJtX3BsYW5lX2hlbHBlcl9kaXNhYmxl LAorCS5kZXN0cm95CT0gZHJtX3ByaW1hcnlfaGVscGVyX2Rlc3Ryb3ksCit9OworCiBzdGF0aWMg Y29uc3QgdWludDMyX3QgdmJveF9wcmltYXJ5X3BsYW5lX2Zvcm1hdHNbXSA9IHsKIAlEUk1fRk9S TUFUX1hSR0I4ODg4LAogCURSTV9GT1JNQVRfQVJHQjg4ODgsCkBAIC0zNTIsNiArNTAwLDExIEBA IHN0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lICp2Ym94X2NyZWF0ZV9wbGFuZShzdHJ1Y3QgdmJveF9w cml2YXRlICp2Ym94LAogCQlmdW5jcyA9ICZ2Ym94X3ByaW1hcnlfcGxhbmVfZnVuY3M7CiAJCWZv cm1hdHMgPSB2Ym94X3ByaW1hcnlfcGxhbmVfZm9ybWF0czsKIAkJbnVtX2Zvcm1hdHMgPSBBUlJB WV9TSVpFKHZib3hfcHJpbWFyeV9wbGFuZV9mb3JtYXRzKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0g RFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7CisJCWZ1bmNzID0gJnZib3hfY3Vyc29yX3BsYW5lX2Z1 bmNzOworCQlmb3JtYXRzID0gdmJveF9jdXJzb3JfcGxhbmVfZm9ybWF0czsKKwkJaGVscGVyX2Z1 bmNzID0gJnZib3hfY3Vyc29yX2hlbHBlcl9mdW5jczsKKwkJbnVtX2Zvcm1hdHMgPSBBUlJBWV9T SVpFKHZib3hfY3Vyc29yX3BsYW5lX2Zvcm1hdHMpOwogCX0gZWxzZSB7CiAJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOwogCX0KQEAgLTM3OSwxMCArNTMyLDE3IEBAIHN0YXRpYyBzdHJ1Y3QgdmJv eF9jcnRjICp2Ym94X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBp bnQgaSkKIHsKIAlzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94ID0KIAkJY29udGFpbmVyX29mKGRl diwgc3RydWN0IHZib3hfcHJpdmF0ZSwgZGRldik7CisJc3RydWN0IGRybV9wbGFuZSAqY3Vyc29y ID0gTlVMTDsKIAlzdHJ1Y3QgdmJveF9jcnRjICp2Ym94X2NydGM7CiAJc3RydWN0IGRybV9wbGFu ZSAqcHJpbWFyeTsKKwl1MzIgY2FwcyA9IDA7CiAJaW50IHJldDsKIAorCXJldCA9IGhnc21pX3F1 ZXJ5X2NvbmYodmJveC0+Z3Vlc3RfcG9vbCwKKwkJCSAgICAgICBWQk9YX1ZCVkFfQ09ORjMyX0NV UlNPUl9DQVBBQklMSVRJRVMsICZjYXBzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCiAJdmJveF9jcnRjID0ga3phbGxvYyhzaXplb2YoKnZib3hfY3J0YyksIEdGUF9LRVJO RUwpOwogCWlmICghdmJveF9jcnRjKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTM5 MywxOCArNTUzLDMzIEBAIHN0YXRpYyBzdHJ1Y3QgdmJveF9jcnRjICp2Ym94X2NydGNfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaSkKIAkJZ290byBmcmVlX21lbTsK IAl9CiAKKwlpZiAoKGNhcHMgJiBWQk9YX1ZCVkFfQ1VSU09SX0NBUEFCSUxJVFlfSEFSRFdBUkUp KSB7CisJCWN1cnNvciA9IHZib3hfY3JlYXRlX3BsYW5lKHZib3gsIDEgPDwgaSwgRFJNX1BMQU5F X1RZUEVfQ1VSU09SKTsKKwkJaWYgKElTX0VSUihjdXJzb3IpKSB7CisJCQlyZXQgPSBQVFJfRVJS KGN1cnNvcik7CisJCQlnb3RvIGNsZWFuX3ByaW1hcnk7CisJCX0KKwl9IGVsc2UgeworCQlEUk1f V0FSTigiVmlydHVhbEJveCBob3N0IGlzIHRvbyBvbGQsIG5vIGN1cnNvciBzdXBwb3J0XG4iKTsK Kwl9CisKIAl2Ym94X2NydGMtPmNydGNfaWQgPSBpOwogCi0JcmV0ID0gZHJtX2NydGNfaW5pdF93 aXRoX3BsYW5lcyhkZXYsICZ2Ym94X2NydGMtPmJhc2UsIHByaW1hcnksIE5VTEwsCisJcmV0ID0g ZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhkZXYsICZ2Ym94X2NydGMtPmJhc2UsIHByaW1hcnks IGN1cnNvciwKIAkJCQkJJnZib3hfY3J0Y19mdW5jcywgTlVMTCk7CiAJaWYgKHJldCkKLQkJZ290 byBjbGVhbl9wcmltYXJ5OworCQlnb3RvIGNsZWFuX2N1cnNvcjsKIAogCWRybV9tb2RlX2NydGNf c2V0X2dhbW1hX3NpemUoJnZib3hfY3J0Yy0+YmFzZSwgMjU2KTsKIAlkcm1fY3J0Y19oZWxwZXJf YWRkKCZ2Ym94X2NydGMtPmJhc2UsICZ2Ym94X2NydGNfaGVscGVyX2Z1bmNzKTsKIAogCXJldHVy biB2Ym94X2NydGM7CiAKK2NsZWFuX2N1cnNvcjoKKwlpZiAoY3Vyc29yKSB7CisJCWRybV9wbGFu ZV9jbGVhbnVwKGN1cnNvcik7CisJCWtmcmVlKGN1cnNvcik7CisJfQogY2xlYW5fcHJpbWFyeToK IAlkcm1fcGxhbmVfY2xlYW51cChwcmltYXJ5KTsKIAlrZnJlZShwcmltYXJ5KTsKQEAgLTcyMSwx MyArODk2LDEyIEBAIGludCB2Ym94X21vZGVfaW5pdChzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94 KQogCWRybV9tb2RlX2NvbmZpZ19pbml0KGRldik7CiAKIAlkZXYtPm1vZGVfY29uZmlnLmZ1bmNz ID0gKHZvaWQgKikmdmJveF9tb2RlX2Z1bmNzOwotCWRldi0+bW9kZV9jb25maWcubWluX3dpZHRo ID0gNjQ7Ci0JZGV2LT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gNjQ7CisJZGV2LT5tb2RlX2Nv bmZpZy5taW5fd2lkdGggPSAwOworCWRldi0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7CiAJ ZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGggPSAyNDsKIAlkZXYtPm1vZGVfY29uZmln Lm1heF93aWR0aCA9IFZCRV9ESVNQSV9NQVhfWFJFUzsKIAlkZXYtPm1vZGVfY29uZmlnLm1heF9o ZWlnaHQgPSBWQkVfRElTUElfTUFYX1lSRVM7CiAKLQkvKiB2Ym94X2N1cnNvcl9pbml0KGRldik7 ICovCiAJZm9yIChpID0gMDsgaSA8IHZib3gtPm51bV9jcnRjczsgKytpKSB7CiAJCXZib3hfY3J0 YyA9IHZib3hfY3J0Y19pbml0KGRldiwgaSk7CiAJCWlmIChJU19FUlIodmJveF9jcnRjKSkgewpA QCAtNzU0LDE5MiArOTI4LDQgQEAgaW50IHZib3hfbW9kZV9pbml0KHN0cnVjdCB2Ym94X3ByaXZh dGUgKnZib3gpCiB2b2lkIHZib3hfbW9kZV9maW5pKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gp CiB7CiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoJnZib3gtPmRkZXYpOwotCS8qIHZib3hfY3Vy c29yX2ZpbmkoZGV2KTsgKi8KLX0KLQotLyoqCi0gKiBDb3B5IHRoZSBBUkdCIGltYWdlIGFuZCBn ZW5lcmF0ZSB0aGUgbWFzaywgd2hpY2ggaXMgbmVlZGVkIGluIGNhc2UgdGhlIGhvc3QKLSAqIGRv ZXMgbm90IHN1cHBvcnQgQVJHQiBjdXJzb3JzLiAgVGhlIG1hc2sgaXMgYSAxQlBQIGJpdG1hcCB3 aXRoIHRoZSBiaXQgc2V0Ci0gKiBpZiB0aGUgY29ycmVzcG9uZGluZyBhbHBoYSB2YWx1ZSBpbiB0 aGUgQVJHQiBpbWFnZSBpcyBncmVhdGVyIHRoYW4gMHhGMC4KLSAqLwotc3RhdGljIHZvaWQgY29w eV9jdXJzb3JfaW1hZ2UodTggKnNyYywgdTggKmRzdCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAot CQkJICAgICAgc2l6ZV90IG1hc2tfc2l6ZSkKLXsKLQlzaXplX3QgbGluZV9zaXplID0gKHdpZHRo ICsgNykgLyA4OwotCXUzMiBpLCBqOwotCi0JbWVtY3B5KGRzdCArIG1hc2tfc2l6ZSwgc3JjLCB3 aWR0aCAqIGhlaWdodCAqIDQpOwotCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7ICsraSkKLQkJZm9y IChqID0gMDsgaiA8IHdpZHRoOyArK2opCi0JCQlpZiAoKCh1MzIgKilzcmMpW2kgKiB3aWR0aCAr IGpdID4gMHhmMDAwMDAwMCkKLQkJCQlkc3RbaSAqIGxpbmVfc2l6ZSArIGogLyA4XSB8PSAoMHg4 MCA+PiAoaiAlIDgpKTsKLX0KLQotc3RhdGljIGludCB2Ym94X2N1cnNvcl9zZXQyKHN0cnVjdCBk cm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkgICAgdTMyIGhh bmRsZSwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAotCQkJICAgIHMzMiBob3RfeCwgczMyIGhvdF95 KQotewotCXN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3ggPSBjcnRjLT5kZXYtPmRldl9wcml2YXRl OwotCXN0cnVjdCB2Ym94X2NydGMgKnZib3hfY3J0YyA9IHRvX3Zib3hfY3J0YyhjcnRjKTsKLQlz dHJ1Y3QgdHRtX2JvX2ttYXBfb2JqIHVvYmpfbWFwOwotCXNpemVfdCBkYXRhX3NpemUsIG1hc2tf c2l6ZTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQl1MzIgZmxhZ3MsIGNhcHMgPSAw OwotCXN0cnVjdCB2Ym94X2JvICpibzsKLQlib29sIHNyY19pc2lvbWVtOwotCXU4ICpkc3QgPSBO VUxMOwotCXU4ICpzcmM7Ci0JaW50IHJldDsKLQotCS8qCi0JICogUmUtc2V0IHRoaXMgcmVndWxh cmx5IGFzIGluIDUuMC4yMCBhbmQgZWFybGllciB0aGUgaW5mb3JtYXRpb24gd2FzCi0JICogbG9z dCBvbiBzYXZlIGFuZCByZXN0b3JlLgotCSAqLwotCWhnc21pX3VwZGF0ZV9pbnB1dF9tYXBwaW5n KHZib3gtPmd1ZXN0X3Bvb2wsIDAsIDAsCi0JCQkJICAgdmJveC0+aW5wdXRfbWFwcGluZ193aWR0 aCwKLQkJCQkgICB2Ym94LT5pbnB1dF9tYXBwaW5nX2hlaWdodCk7Ci0JaWYgKCFoYW5kbGUpIHsK LQkJYm9vbCBjdXJzb3JfZW5hYmxlZCA9IGZhbHNlOwotCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGNp OwotCi0JCS8qIEhpZGUgY3Vyc29yLiAqLwotCQl2Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0g ZmFsc2U7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0Y2ksICZ2Ym94LT5kZGV2Lm1vZGVfY29u ZmlnLmNydGNfbGlzdCwKLQkJCQkgICAgaGVhZCkgewotCQkJaWYgKHRvX3Zib3hfY3J0YyhjcnRj aSktPmN1cnNvcl9lbmFibGVkKQotCQkJCWN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKLQkJfQotCi0J CWlmICghY3Vyc29yX2VuYWJsZWQpCi0JCQloZ3NtaV91cGRhdGVfcG9pbnRlcl9zaGFwZSh2Ym94 LT5ndWVzdF9wb29sLCAwLCAwLCAwLAotCQkJCQkJICAgMCwgMCwgTlVMTCwgMCk7Ci0JCXJldHVy biAwOwotCX0KLQotCXZib3hfY3J0Yy0+Y3Vyc29yX2VuYWJsZWQgPSB0cnVlOwotCi0JaWYgKHdp ZHRoID4gVkJPWF9NQVhfQ1VSU09SX1dJRFRIIHx8IGhlaWdodCA+IFZCT1hfTUFYX0NVUlNPUl9I RUlHSFQgfHwKLQkgICAgd2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKLQkJcmV0dXJuIC1FSU5W QUw7Ci0KLQlyZXQgPSBoZ3NtaV9xdWVyeV9jb25mKHZib3gtPmd1ZXN0X3Bvb2wsCi0JCQkgICAg ICAgVkJPWF9WQlZBX0NPTkYzMl9DVVJTT1JfQ0FQQUJJTElUSUVTLCAmY2Fwcyk7Ci0JaWYgKHJl dCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghKGNhcHMgJiBWQk9YX1ZCVkFfQ1VSU09SX0NBUEFC SUxJVFlfSEFSRFdBUkUpKSB7Ci0JCS8qCi0JCSAqIC1FSU5WQUwgbWVhbnMgY3Vyc29yX3NldDIo KSBub3Qgc3VwcG9ydGVkLCAtRUFHQUlOIG1lYW5zCi0JCSAqIHJldHJ5IGF0IG9uY2UuCi0JCSAq LwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChm aWxlX3ByaXYsIGhhbmRsZSk7Ci0JaWYgKCFvYmopIHsKLQkJRFJNX0VSUk9SKCJDYW5ub3QgZmlu ZCBjdXJzb3Igb2JqZWN0ICV4IGZvciBjcnRjXG4iLCBoYW5kbGUpOwotCQlyZXR1cm4gLUVOT0VO VDsKLQl9Ci0KLQlibyA9IGdlbV90b192Ym94X2JvKG9iaik7Ci0JcmV0ID0gdmJveF9ib19yZXNl cnZlKGJvLCBmYWxzZSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5yZWZfb2JqOwotCi0JLyoK LQkgKiBUaGUgbWFzayBtdXN0IGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGFscGhhCi0JICog Y2hhbm5lbCwgb25lIGJpdCBwZXIgQVJHQiB3b3JkLCBhbmQgbXVzdCBiZSAzMi1iaXQKLQkgKiBw YWRkZWQuCi0JICovCi0JbWFza19zaXplID0gKCh3aWR0aCArIDcpIC8gOCAqIGhlaWdodCArIDMp ICYgfjM7Ci0JZGF0YV9zaXplID0gd2lkdGggKiBoZWlnaHQgKiA0ICsgbWFza19zaXplOwotCXZi b3gtPmN1cnNvcl9ob3RfeCA9IG1pbl90KHUzMiwgbWF4KGhvdF94LCAwKSwgd2lkdGgpOwotCXZi b3gtPmN1cnNvcl9ob3RfeSA9IG1pbl90KHUzMiwgbWF4KGhvdF95LCAwKSwgaGVpZ2h0KTsKLQl2 Ym94LT5jdXJzb3Jfd2lkdGggPSB3aWR0aDsKLQl2Ym94LT5jdXJzb3JfaGVpZ2h0ID0gaGVpZ2h0 OwotCXZib3gtPmN1cnNvcl9kYXRhX3NpemUgPSBkYXRhX3NpemU7Ci0JZHN0ID0gdmJveC0+Y3Vy c29yX2RhdGE7Ci0KLQlyZXQgPSB0dG1fYm9fa21hcCgmYm8tPmJvLCAwLCBiby0+Ym8ubnVtX3Bh Z2VzLCAmdW9ial9tYXApOwotCWlmIChyZXQpIHsKLQkJdmJveC0+Y3Vyc29yX2RhdGFfc2l6ZSA9 IDA7Ci0JCWdvdG8gb3V0X3VucmVzZXJ2ZV9ibzsKLQl9Ci0KLQlzcmMgPSB0dG1fa21hcF9vYmpf dmlydHVhbCgmdW9ial9tYXAsICZzcmNfaXNpb21lbSk7Ci0JaWYgKHNyY19pc2lvbWVtKSB7Ci0J CURSTV9FUlJPUigic3JjIGN1cnNvciBibyBub3QgaW4gbWFpbiBtZW1vcnlcbiIpOwotCQlyZXQg PSAtRUlPOwotCQlnb3RvIG91dF91bm1hcF9ibzsKLQl9Ci0KLQljb3B5X2N1cnNvcl9pbWFnZShz cmMsIGRzdCwgd2lkdGgsIGhlaWdodCwgbWFza19zaXplKTsKLQotCWZsYWdzID0gVkJPWF9NT1VT RV9QT0lOVEVSX1ZJU0lCTEUgfCBWQk9YX01PVVNFX1BPSU5URVJfU0hBUEUgfAotCQlWQk9YX01P VVNFX1BPSU5URVJfQUxQSEE7Ci0JcmV0ID0gaGdzbWlfdXBkYXRlX3BvaW50ZXJfc2hhcGUodmJv eC0+Z3Vlc3RfcG9vbCwgZmxhZ3MsCi0JCQkJCSB2Ym94LT5jdXJzb3JfaG90X3gsIHZib3gtPmN1 cnNvcl9ob3RfeSwKLQkJCQkJIHdpZHRoLCBoZWlnaHQsIGRzdCwgZGF0YV9zaXplKTsKLW91dF91 bm1hcF9ibzoKLQl0dG1fYm9fa3VubWFwKCZ1b2JqX21hcCk7Ci1vdXRfdW5yZXNlcnZlX2JvOgot CXZib3hfYm9fdW5yZXNlcnZlKGJvKTsKLW91dF91bnJlZl9vYmo6Ci0JZHJtX2dlbV9vYmplY3Rf cHV0X3VubG9ja2VkKG9iaik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHZib3hf Y3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHkpCi17Ci0Jc3Ry dWN0IHZib3hfcHJpdmF0ZSAqdmJveCA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIGZs YWdzID0gVkJPWF9NT1VTRV9QT0lOVEVSX1ZJU0lCTEUgfAotCSAgICBWQk9YX01PVVNFX1BPSU5U RVJfU0hBUEUgfCBWQk9YX01PVVNFX1BPSU5URVJfQUxQSEE7Ci0JczMyIGNydGNfeCA9Ci0JICAg IHZib3gtPnNpbmdsZV9mcmFtZWJ1ZmZlciA/IGNydGMtPnggOiB0b192Ym94X2NydGMoY3J0Yykt PnhfaGludDsKLQlzMzIgY3J0Y195ID0KLQkgICAgdmJveC0+c2luZ2xlX2ZyYW1lYnVmZmVyID8g Y3J0Yy0+eSA6IHRvX3Zib3hfY3J0YyhjcnRjKS0+eV9oaW50OwotCXUzMiBob3N0X3gsIGhvc3Rf eTsKLQl1MzIgaG90X3ggPSAwOwotCXUzMiBob3RfeSA9IDA7Ci0JaW50IHJldDsKLQotCS8qCi0J ICogV2UgY29tcGFyZSB0aGVzZSB0byB1bnNpZ25lZCBsYXRlciBhbmQgZG9uJ3QKLQkgKiBuZWVk IHRvIGhhbmRsZSBuZWdhdGl2ZS4KLQkgKi8KLQlpZiAoeCArIGNydGNfeCA8IDAgfHwgeSArIGNy dGNfeSA8IDAgfHwgdmJveC0+Y3Vyc29yX2RhdGFfc2l6ZSA9PSAwKQotCQlyZXR1cm4gMDsKLQot CXJldCA9IGhnc21pX2N1cnNvcl9wb3NpdGlvbih2Ym94LT5ndWVzdF9wb29sLCB0cnVlLCB4ICsg Y3J0Y194LAotCQkJCSAgICB5ICsgY3J0Y195LCAmaG9zdF94LCAmaG9zdF95KTsKLQotCS8qCi0J ICogVGhlIG9ubHkgcmVhc29uIHdlIGhhdmUgdmJveF9jdXJzb3JfbW92ZSgpIGlzIHRoYXQgc29t ZSBvbGRlciBjbGllbnRzCi0JICogbWlnaHQgdXNlIERSTV9JT0NUTF9NT0RFX0NVUlNPUiBpbnN0 ZWFkIG9mIERSTV9JT0NUTF9NT0RFX0NVUlNPUjIgYW5kCi0JICogdXNlIERSTV9NT0RFX0NVUlNP Ul9NT1ZFIHRvIHNldCB0aGUgaG90LXNwb3QuCi0JICoKLQkgKiBIb3dldmVyIFZpcnR1YWxCb3gg NS4wLjIwIGFuZCBlYXJsaWVyIGhhcyBhIGJ1ZyBjYXVzaW5nIGl0IHRvIHJldHVybgotCSAqIDAs MCBhcyBob3N0IGN1cnNvciBsb2NhdGlvbiBhZnRlciBhIHNhdmUgYW5kIHJlc3RvcmUuCi0JICoK LQkgKiBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIGlnbm9yZSBhIDAsIDAgcmV0dXJuLCBzaW5jZSBt aXNzaW5nIHRoZSBvZGQKLQkgKiB0aW1lIHdoZW4gaXQgbGVnaXRpbWF0ZWx5IGhhcHBlbnMgaXMg bm90IGdvaW5nIHRvIGh1cnQgbXVjaC4KLQkgKi8KLQlpZiAocmV0IHx8IChob3N0X3ggPT0gMCAm JiBob3N0X3kgPT0gMCkpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoeCArIGNydGNfeCA8IGhvc3Rf eCkKLQkJaG90X3ggPSBtaW4oaG9zdF94IC0geCAtIGNydGNfeCwgdmJveC0+Y3Vyc29yX3dpZHRo KTsKLQlpZiAoeSArIGNydGNfeSA8IGhvc3RfeSkKLQkJaG90X3kgPSBtaW4oaG9zdF95IC0geSAt IGNydGNfeSwgdmJveC0+Y3Vyc29yX2hlaWdodCk7Ci0KLQlpZiAoaG90X3ggPT0gdmJveC0+Y3Vy c29yX2hvdF94ICYmIGhvdF95ID09IHZib3gtPmN1cnNvcl9ob3RfeSkKLQkJcmV0dXJuIDA7Ci0K LQl2Ym94LT5jdXJzb3JfaG90X3ggPSBob3RfeDsKLQl2Ym94LT5jdXJzb3JfaG90X3kgPSBob3Rf eTsKLQotCXJldHVybiBoZ3NtaV91cGRhdGVfcG9pbnRlcl9zaGFwZSh2Ym94LT5ndWVzdF9wb29s LCBmbGFncywKLQkJCWhvdF94LCBob3RfeSwgdmJveC0+Y3Vyc29yX3dpZHRoLCB2Ym94LT5jdXJz b3JfaGVpZ2h0LAotCQkJdmJveC0+Y3Vyc29yX2RhdGEsIHZib3gtPmN1cnNvcl9kYXRhX3NpemUp OwogfQotLSAKMi4xOS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK