From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 20/41] drm/i915: Implement pread without struct-mutex Date: Fri, 14 Oct 2016 13:18:12 +0100 Message-ID: <20161014121833.439-21-chris@chris-wilson.co.uk> References: <20161014121833.439-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x241.google.com (mail-lf0-x241.google.com [IPv6:2a00:1450:4010:c07::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 583546EC27 for ; Fri, 14 Oct 2016 12:19:02 +0000 (UTC) Received: by mail-lf0-x241.google.com with SMTP id l131so15055790lfl.0 for ; Fri, 14 Oct 2016 05:19:02 -0700 (PDT) In-Reply-To: <20161014121833.439-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org V2Ugb25seSBuZWVkIHN0cnVjdF9tdXRleCB3aXRoaW4gcHJlYWQgZm9yIGEgYnJpZWYgd2luZG93 IHdoZXJlIHdlIG5lZWQKdG8gc2VyaWFsaXNlIHdpdGggcmVuZGVyaW5nIGFuZCBjb250cm9sIG91 ciBjYWNoZSBkb21haW5zLiBFbHNld2hlcmUgd2UKY2FuIHJlbHkgb24gdGhlIGJhY2tpbmcgc3Rv cmFnZSBiZWluZyBwaW5uZWQsIGFuZCBmb3JnaXZlIHVzZXJzcGFjZSBhbnkKcmFjZXMgYWdhaW5z dCB1cy4KClNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNv LnVrPgpSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXgu aW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgfCAzNjkgKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE2 MSBpbnNlcnRpb25zKCspLCAyMDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggMTNhYTUwZTM4YmYxLi40YTE3MTMzNDM2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtNjMsMTMgKzYzLDEzIEBAIHN0YXRpYyBib29sIGNwdV93cml0ZV9uZWVkc19jbGZsdXNo KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB9CiAKIHN0YXRpYyBpbnQKLWluc2Vy dF9tYXBwYWJsZV9ub2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAoraW5zZXJ0X21h cHBhYmxlX25vZGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwgdTMyIHNpemUpCiB7CiAJbWVtc2V0KG5vZGUsIDAs IHNpemVvZigqbm9kZSkpOwotCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2Vu ZXJpYygmaTkxNS0+Z2d0dC5iYXNlLm1tLCBub2RlLAotCQkJCQkJICAgc2l6ZSwgMCwgMCwgMCwK LQkJCQkJCSAgIGk5MTUtPmdndHQubWFwcGFibGVfZW5kLAorCXJldHVybiBkcm1fbW1faW5zZXJ0 X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygmZ2d0dC0+YmFzZS5tbSwgbm9kZSwKKwkJCQkJCSAgIHNp emUsIDAsIC0xLAorCQkJCQkJICAgMCwgZ2d0dC0+bWFwcGFibGVfZW5kLAogCQkJCQkJICAgRFJN X01NX1NFQVJDSF9ERUZBVUxULAogCQkJCQkJICAgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKIH0K QEAgLTgyMCwzMiArODIwLDYgQEAgZXJyX3VucGluOgogCXJldHVybiByZXQ7CiB9CiAKLS8qIFBl ci1wYWdlIGNvcHkgZnVuY3Rpb24gZm9yIHRoZSBzaG1lbSBwcmVhZCBmYXN0cGF0aC4KLSAqIEZs dXNoZXMgaW52YWxpZCBjYWNoZWxpbmVzIGJlZm9yZSByZWFkaW5nIHRoZSB0YXJnZXQgaWYKLSAq IG5lZWRzX2NsZmx1c2ggaXMgc2V0LiAqLwotc3RhdGljIGludAotc2htZW1fcHJlYWRfZmFzdChz dHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNobWVtX3BhZ2Vfb2Zmc2V0LCBpbnQgcGFnZV9sZW5ndGgs Ci0JCSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAotCQkgYm9vbCBwYWdlX2RvX2JpdDE3X3N3aXp6 bGluZywgYm9vbCBuZWVkc19jbGZsdXNoKQotewotCWNoYXIgKnZhZGRyOwotCWludCByZXQ7Ci0K LQlpZiAodW5saWtlbHkocGFnZV9kb19iaXQxN19zd2l6emxpbmcpKQotCQlyZXR1cm4gLUVJTlZB TDsKLQotCXZhZGRyID0ga21hcF9hdG9taWMocGFnZSk7Ci0JaWYgKG5lZWRzX2NsZmx1c2gpCi0J CWRybV9jbGZsdXNoX3ZpcnRfcmFuZ2UodmFkZHIgKyBzaG1lbV9wYWdlX29mZnNldCwKLQkJCQkg ICAgICAgcGFnZV9sZW5ndGgpOwotCXJldCA9IF9fY29weV90b191c2VyX2luYXRvbWljKHVzZXJf ZGF0YSwKLQkJCQkgICAgICB2YWRkciArIHNobWVtX3BhZ2Vfb2Zmc2V0LAotCQkJCSAgICAgIHBh Z2VfbGVuZ3RoKTsKLQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKLQotCXJldHVybiByZXQgPyAtRUZB VUxUIDogMDsKLX0KLQogc3RhdGljIHZvaWQKIHNobWVtX2NsZmx1c2hfc3dpenpsZWRfcmFuZ2Uo Y2hhciAqYWRkciwgdW5zaWduZWQgbG9uZyBsZW5ndGgsCiAJCQkgICAgIGJvb2wgc3dpenpsZWQp CkBAIC04NzEsNyArODQ1LDcgQEAgc2htZW1fY2xmbHVzaF9zd2l6emxlZF9yYW5nZShjaGFyICph ZGRyLCB1bnNpZ25lZCBsb25nIGxlbmd0aCwKIC8qIE9ubHkgZGlmZmVyZW5jZSB0byB0aGUgZmFz dC1wYXRoIGZ1bmN0aW9uIGlzIHRoYXQgdGhpcyBjYW4gaGFuZGxlIGJpdDE3CiAgKiBhbmQgdXNl cyBub24tYXRvbWljIGNvcHkgYW5kIGttYXAgZnVuY3Rpb25zLiAqLwogc3RhdGljIGludAotc2ht ZW1fcHJlYWRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNobWVtX3BhZ2Vfb2Zmc2V0LCBp bnQgcGFnZV9sZW5ndGgsCitzaG1lbV9wcmVhZF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQg b2Zmc2V0LCBpbnQgbGVuZ3RoLAogCQkgY2hhciBfX3VzZXIgKnVzZXJfZGF0YSwKIAkJIGJvb2wg cGFnZV9kb19iaXQxN19zd2l6emxpbmcsIGJvb2wgbmVlZHNfY2xmbHVzaCkKIHsKQEAgLTg4MCw2 MSArODU0LDEzNCBAQCBzaG1lbV9wcmVhZF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgc2ht ZW1fcGFnZV9vZmZzZXQsIGludCBwYWdlX2xlbmd0aCwKIAogCXZhZGRyID0ga21hcChwYWdlKTsK IAlpZiAobmVlZHNfY2xmbHVzaCkKLQkJc2htZW1fY2xmbHVzaF9zd2l6emxlZF9yYW5nZSh2YWRk ciArIHNobWVtX3BhZ2Vfb2Zmc2V0LAotCQkJCQkgICAgIHBhZ2VfbGVuZ3RoLAorCQlzaG1lbV9j bGZsdXNoX3N3aXp6bGVkX3JhbmdlKHZhZGRyICsgb2Zmc2V0LCBsZW5ndGgsCiAJCQkJCSAgICAg cGFnZV9kb19iaXQxN19zd2l6emxpbmcpOwogCiAJaWYgKHBhZ2VfZG9fYml0MTdfc3dpenpsaW5n KQotCQlyZXQgPSBfX2NvcHlfdG9fdXNlcl9zd2l6emxlZCh1c2VyX2RhdGEsCi0JCQkJCSAgICAg IHZhZGRyLCBzaG1lbV9wYWdlX29mZnNldCwKLQkJCQkJICAgICAgcGFnZV9sZW5ndGgpOworCQly ZXQgPSBfX2NvcHlfdG9fdXNlcl9zd2l6emxlZCh1c2VyX2RhdGEsIHZhZGRyLCBvZmZzZXQsIGxl bmd0aCk7CiAJZWxzZQotCQlyZXQgPSBfX2NvcHlfdG9fdXNlcih1c2VyX2RhdGEsCi0JCQkJICAg ICB2YWRkciArIHNobWVtX3BhZ2Vfb2Zmc2V0LAotCQkJCSAgICAgcGFnZV9sZW5ndGgpOworCQly ZXQgPSBfX2NvcHlfdG9fdXNlcih1c2VyX2RhdGEsIHZhZGRyICsgb2Zmc2V0LCBsZW5ndGgpOwog CWt1bm1hcChwYWdlKTsKIAogCXJldHVybiByZXQgPyAtIEVGQVVMVCA6IDA7CiB9CiAKLXN0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZwotc2xvd191c2VyX2FjY2VzcyhzdHJ1Y3QgaW9fbWFwcGlu ZyAqbWFwcGluZywKLQkJIHVpbnQ2NF90IHBhZ2VfYmFzZSwgaW50IHBhZ2Vfb2Zmc2V0LAotCQkg Y2hhciBfX3VzZXIgKnVzZXJfZGF0YSwKLQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBib29sIHB3 cml0ZSkKK3N0YXRpYyBpbnQKK3NobWVtX3ByZWFkKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zm c2V0LCBpbnQgbGVuZ3RoLCBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAorCSAgICBib29sIHBhZ2Vf ZG9fYml0MTdfc3dpenpsaW5nLCBib29sIG5lZWRzX2NsZmx1c2gpCiB7Ci0Jdm9pZCBfX2lvbWVt ICppb2FkZHI7CisJaW50IHJldDsKKworCXJldCA9IC1FTk9ERVY7CisJaWYgKCFwYWdlX2RvX2Jp dDE3X3N3aXp6bGluZykgeworCQljaGFyICp2YWRkciA9IGttYXBfYXRvbWljKHBhZ2UpOworCisJ CWlmIChuZWVkc19jbGZsdXNoKQorCQkJZHJtX2NsZmx1c2hfdmlydF9yYW5nZSh2YWRkciArIG9m ZnNldCwgbGVuZ3RoKTsKKwkJcmV0ID0gX19jb3B5X3RvX3VzZXJfaW5hdG9taWModXNlcl9kYXRh LCB2YWRkciArIG9mZnNldCwgbGVuZ3RoKTsKKwkJa3VubWFwX2F0b21pYyh2YWRkcik7CisJfQor CWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2htZW1fcHJlYWRfc2xvdyhw YWdlLCBvZmZzZXQsIGxlbmd0aCwgdXNlcl9kYXRhLAorCQkJCXBhZ2VfZG9fYml0MTdfc3dpenps aW5nLCBuZWVkc19jbGZsdXNoKTsKK30KKworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHJl YWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJICAgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3ByZWFkICphcmdzKQoreworCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CisJdTY0IHJl bWFpbjsKKwl1bnNpZ25lZCBpbnQgb2JqX2RvX2JpdDE3X3N3aXp6bGluZzsKKwl1bnNpZ25lZCBp bnQgbmVlZHNfY2xmbHVzaDsKKwl1bnNpZ25lZCBpbnQgaWR4LCBvZmZzZXQ7CisJaW50IHJldDsK KworCW9ial9kb19iaXQxN19zd2l6emxpbmcgPSAwOworCWlmIChpOTE1X2dlbV9vYmplY3RfbmVl ZHNfYml0MTdfc3dpenpsZShvYmopKQorCQlvYmpfZG9fYml0MTdfc3dpenpsaW5nID0gQklUKDE3 KTsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb2JqLT5iYXNlLmRldi0+c3Ry dWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaTkxNV9nZW1f b2JqX3ByZXBhcmVfc2htZW1fcmVhZChvYmosICZuZWVkc19jbGZsdXNoKTsKKwltdXRleF91bmxv Y2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisJdXNlcl9kYXRhID0gdTY0X3RvX3VzZXJfcHRy KGFyZ3MtPmRhdGFfcHRyKTsKKwlvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhcmdzLT5vZmZzZXQp OworCWZvciAoaWR4ID0gYXJncy0+b2Zmc2V0ID4+IFBBR0VfU0hJRlQ7IHJlbWFpbjsgaWR4Kysp IHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2JqLCBp ZHgpOworCQlpbnQgbGVuZ3RoOworCisJCWxlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKG9mZnNldCAr IGxlbmd0aCA+IFBBR0VfU0laRSkKKwkJCWxlbmd0aCA9IFBBR0VfU0laRSAtIG9mZnNldDsKKwor CQlyZXQgPSBzaG1lbV9wcmVhZChwYWdlLCBvZmZzZXQsIGxlbmd0aCwgdXNlcl9kYXRhLAorCQkJ CSAgcGFnZV90b19waHlzKHBhZ2UpICYgb2JqX2RvX2JpdDE3X3N3aXp6bGluZywKKwkJCQkgIG5l ZWRzX2NsZmx1c2gpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJcmVtYWluIC09IGxlbmd0 aDsKKwkJdXNlcl9kYXRhICs9IGxlbmd0aDsKKwkJb2Zmc2V0ID0gMDsKKwl9CisKKwlpOTE1X2dl bV9vYmpfZmluaXNoX3NobWVtX2FjY2VzcyhvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50CitndHRfdXNlcl9yZWFkKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAor CSAgICAgIGxvZmZfdCBwYWdlX2Jhc2UsIGludCBwYWdlX29mZnNldCwKKwkgICAgICBjaGFyIF9f dXNlciAqdXNlcl9kYXRhLAorCSAgICAgIGludCBsZW5ndGgpCit7CisJdm9pZCBfX2lvbWVtICp2 YWRkcl9hdG9taWM7CiAJdm9pZCAqdmFkZHI7Ci0JdWludDY0X3QgdW53cml0dGVuOworCXVuc2ln bmVkIGxvbmcgdW53cml0dGVuOwogCi0JaW9hZGRyID0gaW9fbWFwcGluZ19tYXBfd2MobWFwcGlu ZywgcGFnZV9iYXNlLCBQQUdFX1NJWkUpOworCXZhZGRyX2F0b21pYyA9IGlvX21hcHBpbmdfbWFw X2F0b21pY193YyhtYXBwaW5nLCBwYWdlX2Jhc2UpOwogCS8qIFdlIGNhbiB1c2UgdGhlIGNwdSBt ZW0gY29weSBmdW5jdGlvbiBiZWNhdXNlIHRoaXMgaXMgWDg2LiAqLwotCXZhZGRyID0gKHZvaWQg X19mb3JjZSAqKWlvYWRkciArIHBhZ2Vfb2Zmc2V0OwotCWlmIChwd3JpdGUpCi0JCXVud3JpdHRl biA9IF9fY29weV9mcm9tX3VzZXIodmFkZHIsIHVzZXJfZGF0YSwgbGVuZ3RoKTsKLQllbHNlCi0J CXVud3JpdHRlbiA9IF9fY29weV90b191c2VyKHVzZXJfZGF0YSwgdmFkZHIsIGxlbmd0aCk7Ci0K LQlpb19tYXBwaW5nX3VubWFwKGlvYWRkcik7CisJdmFkZHIgPSAodm9pZCBfX2ZvcmNlICopdmFk ZHJfYXRvbWljICsgcGFnZV9vZmZzZXQ7CisJdW53cml0dGVuID0gX19jb3B5X3RvX3VzZXJfaW5h dG9taWModXNlcl9kYXRhLCB2YWRkciwgbGVuZ3RoKTsKKwlpb19tYXBwaW5nX3VubWFwX2F0b21p Yyh2YWRkcl9hdG9taWMpOworCWlmICh1bndyaXR0ZW4pIHsKKwkJdmFkZHJfYXRvbWljID0gaW9f bWFwcGluZ19tYXBfd2MobWFwcGluZywgcGFnZV9iYXNlLCBQQUdFX1NJWkUpOworCQkvKiBXZSBj YW4gdXNlIHRoZSBjcHUgbWVtIGNvcHkgZnVuY3Rpb24gYmVjYXVzZSB0aGlzIGlzIFg4Ni4gKi8K KwkJdmFkZHIgPSAodm9pZCBfX2ZvcmNlICopdmFkZHJfYXRvbWljICsgcGFnZV9vZmZzZXQ7CisJ CXVud3JpdHRlbiA9IGNvcHlfdG9fdXNlcih1c2VyX2RhdGEsIHZhZGRyLCBsZW5ndGgpOworCQlp b19tYXBwaW5nX3VubWFwKHZhZGRyX2F0b21pYyk7CisJfQogCXJldHVybiB1bndyaXR0ZW47CiB9 CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2d0dF9wcmVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAotCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCB1aW50NjRfdCBzaXplLAot CQkgICB1aW50NjRfdCBkYXRhX29mZnNldCwgdWludDY0X3QgZGF0YV9wdHIpCitpOTE1X2dlbV9n dHRfcHJlYWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJICAgY29uc3Qgc3Ry dWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncykKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZk ZXZfcHJpdi0+Z2d0dDsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7CisJc3RydWN0IGk5MTVfZ2d0 dCAqZ2d0dCA9ICZpOTE1LT5nZ3R0OwogCXN0cnVjdCBkcm1fbW1fbm9kZSBub2RlOwotCWNoYXIg X191c2VyICp1c2VyX2RhdGE7Ci0JdWludDY0X3QgcmVtYWluOwotCXVpbnQ2NF90IG9mZnNldDsK KwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwl2b2lkIF9fdXNlciAqdXNlcl9kYXRhOworCXU2NCBy ZW1haW4sIG9mZnNldDsKIAlpbnQgcmV0OwogCi0JaW50ZWxfcnVudGltZV9wbV9nZXQodG9faTkx NShkZXYpKTsKLQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCAw LCBQSU5fTUFQUEFCTEUpOworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaTkxNS0+ ZHJtLnN0cnVjdF9tdXRleCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWludGVsX3J1 bnRpbWVfcG1fZ2V0KGk5MTUpOworCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmos IE5VTEwsIDAsIDAsCisJCQkJICAgICAgIFBJTl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7CiAJ aWYgKCFJU19FUlIodm1hKSkgewogCQlub2RlLnN0YXJ0ID0gaTkxNV9nZ3R0X29mZnNldCh2bWEp OwogCQlub2RlLmFsbG9jYXRlZCA9IGZhbHNlOwpAQCAtOTQ1LDMzICs5OTIsMjEgQEAgaTkxNV9n ZW1fZ3R0X3ByZWFkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCX0KIAl9CiAJaWYgKElTX0VS Uih2bWEpKSB7Ci0JCXJldCA9IGluc2VydF9tYXBwYWJsZV9ub2RlKGRldl9wcml2LCAmbm9kZSwg UEFHRV9TSVpFKTsKKwkJcmV0ID0gaW5zZXJ0X21hcHBhYmxlX25vZGUoZ2d0dCwgJm5vZGUsIFBB R0VfU0laRSk7CiAJCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQotCQlyZXQgPSBpOTE1X2dlbV9v YmplY3RfcGluX3BhZ2VzKG9iaik7Ci0JCWlmIChyZXQpIHsKLQkJCXJlbW92ZV9tYXBwYWJsZV9u b2RlKCZub2RlKTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCQlnb3RvIG91dF91bmxvY2s7CisJCUdF TV9CVUdfT04oIW5vZGUuYWxsb2NhdGVkKTsKIAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rf c2V0X3RvX2d0dF9kb21haW4ob2JqLCBmYWxzZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5w aW47CiAKLQl1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoZGF0YV9wdHIpOwotCXJlbWFpbiA9 IHNpemU7Ci0Jb2Zmc2V0ID0gZGF0YV9vZmZzZXQ7CisJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKIAotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWlm IChsaWtlbHkoIWk5MTUucHJlZmF1bHRfZGlzYWJsZSkpIHsKLQkJcmV0ID0gZmF1bHRfaW5fbXVs dGlwYWdlc193cml0ZWFibGUodXNlcl9kYXRhLCByZW1haW4pOwotCQlpZiAocmV0KSB7Ci0JCQlt dXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCQlnb3RvIG91dF91bnBpbjsKLQkJfQot CX0KKwl1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoYXJncy0+ZGF0YV9wdHIpOworCXJlbWFp biA9IGFyZ3MtPnNpemU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OwogCiAJd2hpbGUgKHJlbWFp biA+IDApIHsKIAkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQpAQCAtOTg4LDE5ICsxMDIzLDE0 IEBAIGk5MTVfZ2VtX2d0dF9wcmVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJd21iKCk7 CiAJCQlnZ3R0LT5iYXNlLmluc2VydF9wYWdlKCZnZ3R0LT5iYXNlLAogCQkJCQkgICAgICAgaTkx NV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhvYmosIG9mZnNldCA+PiBQQUdFX1NISUZUKSwK LQkJCQkJICAgICAgIG5vZGUuc3RhcnQsCi0JCQkJCSAgICAgICBJOTE1X0NBQ0hFX05PTkUsIDAp OworCQkJCQkgICAgICAgbm9kZS5zdGFydCwgSTkxNV9DQUNIRV9OT05FLCAwKTsKIAkJCXdtYigp OwogCQl9IGVsc2UgewogCQkJcGFnZV9iYXNlICs9IG9mZnNldCAmIFBBR0VfTUFTSzsKIAkJfQot CQkvKiBUaGlzIGlzIGEgc2xvdyByZWFkL3dyaXRlIGFzIGl0IHRyaWVzIHRvIHJlYWQgZnJvbQot CQkgKiBhbmQgd3JpdGUgdG8gdXNlciBtZW1vcnkgd2hpY2ggbWF5IHJlc3VsdCBpbnRvIHBhZ2UK LQkJICogZmF1bHRzLCBhbmQgc28gd2UgY2Fubm90IHBlcmZvcm0gdGhpcyB1bmRlciBzdHJ1Y3Rf bXV0ZXguCi0JCSAqLwotCQlpZiAoc2xvd191c2VyX2FjY2VzcygmZ2d0dC0+bWFwcGFibGUsIHBh Z2VfYmFzZSwKLQkJCQkgICAgIHBhZ2Vfb2Zmc2V0LCB1c2VyX2RhdGEsCi0JCQkJICAgICBwYWdl X2xlbmd0aCwgZmFsc2UpKSB7CisKKwkJaWYgKGd0dF91c2VyX3JlYWQoJmdndHQtPm1hcHBhYmxl LCBwYWdlX2Jhc2UsIHBhZ2Vfb2Zmc2V0LAorCQkJCSAgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCkp IHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTAxMCwxMTEgKzEwNDAs MTkgQEAgaTkxNV9nZW1fZ3R0X3ByZWFkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCW9mZnNl dCArPSBwYWdlX2xlbmd0aDsKIAl9CiAKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Ci0JaWYgKHJldCA9PSAwICYmIChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9N QUlOX0dUVCkgPT0gMCkgewotCQkvKiBUaGUgdXNlciBoYXMgbW9kaWZpZWQgdGhlIG9iamVjdCB3 aGlsc3Qgd2UgdHJpZWQKLQkJICogcmVhZGluZyBmcm9tIGl0LCBhbmQgd2Ugbm93IGhhdmUgbm8g aWRlYSB3aGF0IGRvbWFpbgotCQkgKiB0aGUgcGFnZXMgc2hvdWxkIGJlIGluLiBBcyB3ZSBoYXZl IGp1c3QgYmVlbiB0b3VjaGluZwotCQkgKiB0aGVtIGRpcmVjdGx5LCBmbHVzaCBldmVyeXRoaW5n IGJhY2sgdG8gdGhlIEdUVAotCQkgKiBkb21haW4uCi0JCSAqLwotCQlyZXQgPSBpOTE1X2dlbV9v YmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCBmYWxzZSk7Ci0JfQotCisJbXV0ZXhfbG9jaygm aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CiBvdXRfdW5waW46CiAJaWYgKG5vZGUuYWxsb2NhdGVk KSB7CiAJCXdtYigpOwogCQlnZ3R0LT5iYXNlLmNsZWFyX3JhbmdlKCZnZ3R0LT5iYXNlLAogCQkJ CSAgICAgICBub2RlLnN0YXJ0LCBub2RlLnNpemUpOwotCQlpOTE1X2dlbV9vYmplY3RfdW5waW5f cGFnZXMob2JqKTsKIAkJcmVtb3ZlX21hcHBhYmxlX25vZGUoJm5vZGUpOwogCX0gZWxzZSB7CiAJ CWk5MTVfdm1hX3VucGluKHZtYSk7CiAJfQotb3V0OgotCWludGVsX3J1bnRpbWVfcG1fcHV0KHRv X2k5MTUoZGV2KSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludAotaTkxNV9nZW1fc2ht ZW1fcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAotCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3Ms Ci0JCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQotewotCWNoYXIgX191c2VyICp1c2VyX2Rh dGE7Ci0Jc3NpemVfdCByZW1haW47Ci0JbG9mZl90IG9mZnNldDsKLQlpbnQgc2htZW1fcGFnZV9v ZmZzZXQsIHBhZ2VfbGVuZ3RoLCByZXQgPSAwOwotCWludCBvYmpfZG9fYml0MTdfc3dpenpsaW5n LCBwYWdlX2RvX2JpdDE3X3N3aXp6bGluZzsKLQlpbnQgcHJlZmF1bHRlZCA9IDA7Ci0JaW50IG5l ZWRzX2NsZmx1c2ggPSAwOwotCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2dfaXRlcjsKLQotCXJldCA9 IGk5MTVfZ2VtX29ial9wcmVwYXJlX3NobWVtX3JlYWQob2JqLCAmbmVlZHNfY2xmbHVzaCk7Ci0J aWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW9ial9kb19iaXQxN19zd2l6emxpbmcgPSBpOTE1 X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopOwotCXVzZXJfZGF0YSA9IHU2NF90 b191c2VyX3B0cihhcmdzLT5kYXRhX3B0cik7Ci0Jb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OwotCXJl bWFpbiA9IGFyZ3MtPnNpemU7Ci0KLQlmb3JfZWFjaF9zZ19wYWdlKG9iai0+bW0ucGFnZXMtPnNn bCwgJnNnX2l0ZXIsIG9iai0+bW0ucGFnZXMtPm5lbnRzLAotCQkJIG9mZnNldCA+PiBQQUdFX1NI SUZUKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZV9pdGVyX3BhZ2UoJnNnX2l0ZXIp OwotCi0JCWlmIChyZW1haW4gPD0gMCkKLQkJCWJyZWFrOwotCi0JCS8qIE9wZXJhdGlvbiBpbiB0 aGlzIHBhZ2UKLQkJICoKLQkJICogc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBh Z2UgaW4gc2htZW0gZmlsZQotCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRo aXMgcGFnZQotCQkgKi8KLQkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZz ZXQpOwotCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKLQkJaWYgKChzaG1lbV9wYWdlX29mZnNldCAr IHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKLQkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0g c2htZW1fcGFnZV9vZmZzZXQ7Ci0KLQkJcGFnZV9kb19iaXQxN19zd2l6emxpbmcgPSBvYmpfZG9f Yml0MTdfc3dpenpsaW5nICYmCi0JCQkocGFnZV90b19waHlzKHBhZ2UpICYgKDEgPDwgMTcpKSAh PSAwOwotCi0JCXJldCA9IHNobWVtX3ByZWFkX2Zhc3QocGFnZSwgc2htZW1fcGFnZV9vZmZzZXQs IHBhZ2VfbGVuZ3RoLAotCQkJCSAgICAgICB1c2VyX2RhdGEsIHBhZ2VfZG9fYml0MTdfc3dpenps aW5nLAotCQkJCSAgICAgICBuZWVkc19jbGZsdXNoKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJZ290 byBuZXh0X3BhZ2U7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQkJ aWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNhYmxlKSAmJiAhcHJlZmF1bHRlZCkgewotCQkJ cmV0ID0gZmF1bHRfaW5fbXVsdGlwYWdlc193cml0ZWFibGUodXNlcl9kYXRhLCByZW1haW4pOwot CQkJLyogVXNlcnNwYWNlIGlzIHRyaWNraW5nIHVzLCBidXQgd2UndmUgYWxyZWFkeSBjbG9iYmVy ZWQKLQkJCSAqIGl0cyBwYWdlcyB3aXRoIHRoZSBwcmVmYXVsdCBhbmQgcHJvbWlzZWQgdG8gd3Jp dGUgdGhlCi0JCQkgKiBkYXRhIHVwIHRvIHRoZSBmaXJzdCBmYXVsdC4gSGVuY2UgaWdub3JlIGFu eSBlcnJvcnMKLQkJCSAqIGFuZCBqdXN0IGNvbnRpbnVlLiAqLwotCQkJKHZvaWQpcmV0OwotCQkJ cHJlZmF1bHRlZCA9IDE7Ci0JCX0KLQotCQlyZXQgPSBzaG1lbV9wcmVhZF9zbG93KHBhZ2UsIHNo bWVtX3BhZ2Vfb2Zmc2V0LCBwYWdlX2xlbmd0aCwKLQkJCQkgICAgICAgdXNlcl9kYXRhLCBwYWdl X2RvX2JpdDE3X3N3aXp6bGluZywKLQkJCQkgICAgICAgbmVlZHNfY2xmbHVzaCk7Ci0KLQkJbXV0 ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsK LQotbmV4dF9wYWdlOgotCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7Ci0JCXVzZXJfZGF0YSArPSBw YWdlX2xlbmd0aDsKLQkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOwotCX0KLQotb3V0OgotCWk5MTVf Z2VtX29ial9maW5pc2hfc2htZW1fYWNjZXNzKG9iaik7CitvdXRfdW5sb2NrOgorCWludGVsX3J1 bnRpbWVfcG1fcHV0KGk5MTUpOworCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTEzMyw3ICsxMDcxLDcgQEAgaTkxNV9nZW1fcHJl YWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIHsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3ByZWFkICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlpZiAoYXJncy0+c2l6ZSA9 PSAwKQogCQlyZXR1cm4gMDsKQEAgLTExNTEsNyArMTA4OSw3IEBAIGk5MTVfZ2VtX3ByZWFkX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKGFyZ3MtPm9mZnNl dCA+IG9iai0+YmFzZS5zaXplIHx8CiAJICAgIGFyZ3MtPnNpemUgPiBvYmotPmJhc2Uuc2l6ZSAt IGFyZ3MtPm9mZnNldCkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKKwkJZ290byBv dXQ7CiAJfQogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X3ByZWFkKG9iaiwgYXJncy0+b2Zmc2V0 LCBhcmdzLT5zaXplKTsKQEAgLTExNjEsMjUgKzEwOTksMTggQEAgaTkxNV9nZW1fcHJlYWRfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkgICBNQVhfU0NIRURV TEVfVElNRU9VVCwKIAkJCQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKIAlpZiAocmV0KQotCQln b3RvIGVycjsKKwkJZ290byBvdXQ7CiAKLQlyZXQgPSBpOTE1X211dGV4X2xvY2tfaW50ZXJydXB0 aWJsZShkZXYpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKIAlpZiAo cmV0KQotCQlnb3RvIGVycjsKLQotCXJldCA9IGk5MTVfZ2VtX3NobWVtX3ByZWFkKGRldiwgb2Jq LCBhcmdzLCBmaWxlKTsKKwkJZ290byBvdXQ7CiAKLQkvKiBwcmVhZCBmb3Igbm9uIHNobWVtIGJh Y2tlZCBvYmplY3RzICovCisJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWQob2JqLCBhcmdzKTsK IAlpZiAocmV0ID09IC1FRkFVTFQgfHwgcmV0ID09IC1FTk9ERVYpCi0JCXJldCA9IGk5MTVfZ2Vt X2d0dF9wcmVhZChkZXYsIG9iaiwgYXJncy0+c2l6ZSwKLQkJCQkJYXJncy0+b2Zmc2V0LCBhcmdz LT5kYXRhX3B0cik7CisJCXJldCA9IGk5MTVfZ2VtX2d0dF9wcmVhZChvYmosIGFyZ3MpOwogCi0J aTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOwotCi0JcmV0dXJuIHJldDsKLQotZXJyOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdl cyhvYmopOworb3V0OgogCWk5MTVfZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKIAlyZXR1 cm4gcmV0OwogfQpAQCAtMTIwNyw2ICsxMTM4LDI4IEBAIGZhc3RfdXNlcl93cml0ZShzdHJ1Y3Qg aW9fbWFwcGluZyAqbWFwcGluZywKIAlyZXR1cm4gdW53cml0dGVuOwogfQogCitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcKK3Nsb3dfdXNlcl9hY2Nlc3Moc3RydWN0IGlvX21hcHBpbmcgKm1h cHBpbmcsCisJCSB1bnNpZ25lZCBsb25nIHBhZ2VfYmFzZSwgaW50IHBhZ2Vfb2Zmc2V0LAorCQkg Y2hhciBfX3VzZXIgKnVzZXJfZGF0YSwKKwkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBib29sIHB3 cml0ZSkKK3sKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsKKwl2b2lkICp2YWRkcjsKKwl1bnNpZ25l ZCBsb25nIHVud3JpdHRlbjsKKworCWlvYWRkciA9IGlvX21hcHBpbmdfbWFwX3djKG1hcHBpbmcs IHBhZ2VfYmFzZSwgUEFHRV9TSVpFKTsKKwkvKiBXZSBjYW4gdXNlIHRoZSBjcHUgbWVtIGNvcHkg ZnVuY3Rpb24gYmVjYXVzZSB0aGlzIGlzIFg4Ni4gKi8KKwl2YWRkciA9ICh2b2lkIF9fZm9yY2Ug Kilpb2FkZHIgKyBwYWdlX29mZnNldDsKKwlpZiAocHdyaXRlKQorCQl1bndyaXR0ZW4gPSBfX2Nv cHlfZnJvbV91c2VyKHZhZGRyLCB1c2VyX2RhdGEsIGxlbmd0aCk7CisJZWxzZQorCQl1bndyaXR0 ZW4gPSBfX2NvcHlfdG9fdXNlcih1c2VyX2RhdGEsIHZhZGRyLCBsZW5ndGgpOworCisJaW9fbWFw cGluZ191bm1hcChpb2FkZHIpOworCXJldHVybiB1bndyaXR0ZW47Cit9CisKIC8qKgogICogVGhp cyBpcyB0aGUgZmFzdCBwd3JpdGUgcGF0aCwgd2hlcmUgd2UgY29weSB0aGUgZGF0YSBkaXJlY3Rs eSBmcm9tIHRoZQogICogdXNlciBpbnRvIHRoZSBHVFQsIHVuY2FjaGVkLgpAQCAtMTI0Niw3ICsx MTk5LDcgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAogCQl9CiAJfQogCWlmIChJU19FUlIodm1hKSkgewotCQlyZXQgPSBpbnNlcnRfbWFw cGFibGVfbm9kZShpOTE1LCAmbm9kZSwgUEFHRV9TSVpFKTsKKwkJcmV0ID0gaW5zZXJ0X21hcHBh YmxlX25vZGUoZ2d0dCwgJm5vZGUsIFBBR0VfU0laRSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91 dDsKIApAQCAtMTI3NSw4ICsxMjI4LDggQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNv cHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KIAkJdTMyIHBhZ2VfYmFzZSA9IG5vZGUuc3RhcnQ7Ci0J CXVuc2lnbmVkIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKLQkJdW5zaWdu ZWQgcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKKwkJdW5zaWduZWQgaW50 IHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKKwkJdW5zaWduZWQgaW50IHBh Z2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CiAJCXBhZ2VfbGVuZ3RoID0gcmVt YWluIDwgcGFnZV9sZW5ndGggPyByZW1haW4gOiBwYWdlX2xlbmd0aDsKIAkJaWYgKG5vZGUuYWxs b2NhdGVkKSB7CiAJCQl3bWIoKTsgLyogZmx1c2ggdGhlIHdyaXRlIGJlZm9yZSB3ZSBtb2RpZnkg dGhlIEdHVFQgKi8KLS0gCjIuOS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK