From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 21/41] drm/i915: Implement pread without struct-mutex Date: Thu, 20 Oct 2016 16:04:03 +0100 Message-ID: <20161020150423.4560-22-chris@chris-wilson.co.uk> References: <20161020150423.4560-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-qk0-x241.google.com (mail-qk0-x241.google.com [IPv6:2607:f8b0:400d:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id A299089229 for ; Thu, 20 Oct 2016 15:04:52 +0000 (UTC) Received: by mail-qk0-x241.google.com with SMTP id f128so4737594qkb.0 for ; Thu, 20 Oct 2016 08:04:52 -0700 (PDT) In-Reply-To: <20161020150423.4560-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 aW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgfCAzNjUgKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE1 NyBpbnNlcnRpb25zKCspLCAyMDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMK aW5kZXggYmZhODAzMDJlMmQ1Li5hYjExOWVhNDk2MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YwpAQCAtNjMsMTMgKzYzLDEzIEBAIHN0YXRpYyBib29sIGNwdV93cml0ZV9uZWVkc19jbGZsdXNo KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB9CiAKIHN0YXRpYyBpbnQKLWluc2Vy dF9tYXBwYWJsZV9ub2RlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAoraW5zZXJ0X21h cHBhYmxlX25vZGUoc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcm1fbW1fbm9kZSAqbm9kZSwgdTMyIHNpemUpCiB7CiAJbWVtc2V0KG5vZGUsIDAs IHNpemVvZigqbm9kZSkpOwotCXJldHVybiBkcm1fbW1faW5zZXJ0X25vZGVfaW5fcmFuZ2VfZ2Vu ZXJpYygmaTkxNS0+Z2d0dC5iYXNlLm1tLCBub2RlLAotCQkJCQkJICAgc2l6ZSwgMCwgMCwgMCwK LQkJCQkJCSAgIGk5MTUtPmdndHQubWFwcGFibGVfZW5kLAorCXJldHVybiBkcm1fbW1faW5zZXJ0 X25vZGVfaW5fcmFuZ2VfZ2VuZXJpYygmZ2d0dC0+YmFzZS5tbSwgbm9kZSwKKwkJCQkJCSAgIHNp emUsIDAsIC0xLAorCQkJCQkJICAgMCwgZ2d0dC0+bWFwcGFibGVfZW5kLAogCQkJCQkJICAgRFJN X01NX1NFQVJDSF9ERUZBVUxULAogCQkJCQkJICAgRFJNX01NX0NSRUFURV9ERUZBVUxUKTsKIH0K QEAgLTgyMCwzMiArODIwLDYgQEAgaW50IGk5MTVfZ2VtX29ial9wcmVwYXJlX3NobWVtX3dyaXRl KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJcmV0dXJuIHJldDsKIH0KIAotLyog UGVyLXBhZ2UgY29weSBmdW5jdGlvbiBmb3IgdGhlIHNobWVtIHByZWFkIGZhc3RwYXRoLgotICog Rmx1c2hlcyBpbnZhbGlkIGNhY2hlbGluZXMgYmVmb3JlIHJlYWRpbmcgdGhlIHRhcmdldCBpZgot ICogbmVlZHNfY2xmbHVzaCBpcyBzZXQuICovCi1zdGF0aWMgaW50Ci1zaG1lbV9wcmVhZF9mYXN0 KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgc2htZW1fcGFnZV9vZmZzZXQsIGludCBwYWdlX2xlbmd0 aCwKLQkJIGNoYXIgX191c2VyICp1c2VyX2RhdGEsCi0JCSBib29sIHBhZ2VfZG9fYml0MTdfc3dp enpsaW5nLCBib29sIG5lZWRzX2NsZmx1c2gpCi17Ci0JY2hhciAqdmFkZHI7Ci0JaW50IHJldDsK LQotCWlmICh1bmxpa2VseShwYWdlX2RvX2JpdDE3X3N3aXp6bGluZykpCi0JCXJldHVybiAtRUlO VkFMOwotCi0JdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlKTsKLQlpZiAobmVlZHNfY2xmbHVzaCkK LQkJZHJtX2NsZmx1c2hfdmlydF9yYW5nZSh2YWRkciArIHNobWVtX3BhZ2Vfb2Zmc2V0LAotCQkJ CSAgICAgICBwYWdlX2xlbmd0aCk7Ci0JcmV0ID0gX19jb3B5X3RvX3VzZXJfaW5hdG9taWModXNl cl9kYXRhLAotCQkJCSAgICAgIHZhZGRyICsgc2htZW1fcGFnZV9vZmZzZXQsCi0JCQkJICAgICAg cGFnZV9sZW5ndGgpOwotCWt1bm1hcF9hdG9taWModmFkZHIpOwotCi0JcmV0dXJuIHJldCA/IC1F RkFVTFQgOiAwOwotfQotCiBzdGF0aWMgdm9pZAogc2htZW1fY2xmbHVzaF9zd2l6emxlZF9yYW5n ZShjaGFyICphZGRyLCB1bnNpZ25lZCBsb25nIGxlbmd0aCwKIAkJCSAgICAgYm9vbCBzd2l6emxl ZCkKQEAgLTg3MSw3ICs4NDUsNyBAQCBzaG1lbV9jbGZsdXNoX3N3aXp6bGVkX3JhbmdlKGNoYXIg KmFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAogLyogT25seSBkaWZmZXJlbmNlIHRvIHRoZSBm YXN0LXBhdGggZnVuY3Rpb24gaXMgdGhhdCB0aGlzIGNhbiBoYW5kbGUgYml0MTcKICAqIGFuZCB1 c2VzIG5vbi1hdG9taWMgY29weSBhbmQga21hcCBmdW5jdGlvbnMuICovCiBzdGF0aWMgaW50Ci1z aG1lbV9wcmVhZF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgc2htZW1fcGFnZV9vZmZzZXQs IGludCBwYWdlX2xlbmd0aCwKK3NobWVtX3ByZWFkX3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsIGlu dCBvZmZzZXQsIGludCBsZW5ndGgsCiAJCSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAogCQkgYm9v bCBwYWdlX2RvX2JpdDE3X3N3aXp6bGluZywgYm9vbCBuZWVkc19jbGZsdXNoKQogewpAQCAtODgw LDYxICs4NTQsMTMwIEBAIHNobWVtX3ByZWFkX3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBz aG1lbV9wYWdlX29mZnNldCwgaW50IHBhZ2VfbGVuZ3RoLAogCiAJdmFkZHIgPSBrbWFwKHBhZ2Up OwogCWlmIChuZWVkc19jbGZsdXNoKQotCQlzaG1lbV9jbGZsdXNoX3N3aXp6bGVkX3JhbmdlKHZh ZGRyICsgc2htZW1fcGFnZV9vZmZzZXQsCi0JCQkJCSAgICAgcGFnZV9sZW5ndGgsCisJCXNobWVt X2NsZmx1c2hfc3dpenpsZWRfcmFuZ2UodmFkZHIgKyBvZmZzZXQsIGxlbmd0aCwKIAkJCQkJICAg ICBwYWdlX2RvX2JpdDE3X3N3aXp6bGluZyk7CiAKIAlpZiAocGFnZV9kb19iaXQxN19zd2l6emxp bmcpCi0JCXJldCA9IF9fY29weV90b191c2VyX3N3aXp6bGVkKHVzZXJfZGF0YSwKLQkJCQkJICAg ICAgdmFkZHIsIHNobWVtX3BhZ2Vfb2Zmc2V0LAotCQkJCQkgICAgICBwYWdlX2xlbmd0aCk7CisJ CXJldCA9IF9fY29weV90b191c2VyX3N3aXp6bGVkKHVzZXJfZGF0YSwgdmFkZHIsIG9mZnNldCwg bGVuZ3RoKTsKIAllbHNlCi0JCXJldCA9IF9fY29weV90b191c2VyKHVzZXJfZGF0YSwKLQkJCQkg ICAgIHZhZGRyICsgc2htZW1fcGFnZV9vZmZzZXQsCi0JCQkJICAgICBwYWdlX2xlbmd0aCk7CisJ CXJldCA9IF9fY29weV90b191c2VyKHVzZXJfZGF0YSwgdmFkZHIgKyBvZmZzZXQsIGxlbmd0aCk7 CiAJa3VubWFwKHBhZ2UpOwogCiAJcmV0dXJuIHJldCA/IC0gRUZBVUxUIDogMDsKIH0KIAotc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1zbG93X3VzZXJfYWNjZXNzKHN0cnVjdCBpb19tYXBw aW5nICptYXBwaW5nLAotCQkgdWludDY0X3QgcGFnZV9iYXNlLCBpbnQgcGFnZV9vZmZzZXQsCi0J CSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAotCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGJvb2wg cHdyaXRlKQorc3RhdGljIGludAorc2htZW1fcHJlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBv ZmZzZXQsIGludCBsZW5ndGgsIGNoYXIgX191c2VyICp1c2VyX2RhdGEsCisJICAgIGJvb2wgcGFn ZV9kb19iaXQxN19zd2l6emxpbmcsIGJvb2wgbmVlZHNfY2xmbHVzaCkKK3sKKwlpbnQgcmV0Owor CisJcmV0ID0gLUVOT0RFVjsKKwlpZiAoIXBhZ2VfZG9fYml0MTdfc3dpenpsaW5nKSB7CisJCWNo YXIgKnZhZGRyID0ga21hcF9hdG9taWMocGFnZSk7CisKKwkJaWYgKG5lZWRzX2NsZmx1c2gpCisJ CQlkcm1fY2xmbHVzaF92aXJ0X3JhbmdlKHZhZGRyICsgb2Zmc2V0LCBsZW5ndGgpOworCQlyZXQg PSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh1c2VyX2RhdGEsIHZhZGRyICsgb2Zmc2V0LCBsZW5n dGgpOworCQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKKwl9CisJaWYgKHJldCA9PSAwKQorCQlyZXR1 cm4gMDsKKworCXJldHVybiBzaG1lbV9wcmVhZF9zbG93KHBhZ2UsIG9mZnNldCwgbGVuZ3RoLCB1 c2VyX2RhdGEsCisJCQkJcGFnZV9kb19iaXQxN19zd2l6emxpbmcsIG5lZWRzX2NsZmx1c2gpOwor fQorCitzdGF0aWMgaW50CitpOTE1X2dlbV9zaG1lbV9wcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHJlYWQgKmFyZ3MpCit7 CisJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKKwl1NjQgcmVtYWluOworCXVuc2lnbmVkIGludCBv YmpfZG9fYml0MTdfc3dpenpsaW5nOworCXVuc2lnbmVkIGludCBuZWVkc19jbGZsdXNoOworCXVu c2lnbmVkIGludCBpZHgsIG9mZnNldDsKKwlpbnQgcmV0OworCisJb2JqX2RvX2JpdDE3X3N3aXp6 bGluZyA9IDA7CisJaWYgKGk5MTVfZ2VtX29iamVjdF9uZWVkc19iaXQxN19zd2l6emxlKG9iaikp CisJCW9ial9kb19iaXQxN19zd2l6emxpbmcgPSBCSVQoMTcpOworCisJcmV0ID0gbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmpfcHJlcGFyZV9zaG1lbV9yZWFk KG9iaiwgJm5lZWRzX2NsZmx1c2gpOworCW11dGV4X3VubG9jaygmb2JqLT5iYXNlLmRldi0+c3Ry dWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVtYWluID0gYXJncy0+ c2l6ZTsKKwl1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoYXJncy0+ZGF0YV9wdHIpOworCW9m ZnNldCA9IG9mZnNldF9pbl9wYWdlKGFyZ3MtPm9mZnNldCk7CisJZm9yIChpZHggPSBhcmdzLT5v ZmZzZXQgPj4gUEFHRV9TSElGVDsgcmVtYWluOyBpZHgrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFn ZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShvYmosIGlkeCk7CisJCWludCBsZW5ndGg7CisK KwkJbGVuZ3RoID0gcmVtYWluOworCQlpZiAob2Zmc2V0ICsgbGVuZ3RoID4gUEFHRV9TSVpFKQor CQkJbGVuZ3RoID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCisJCXJldCA9IHNobWVtX3ByZWFkKHBh Z2UsIG9mZnNldCwgbGVuZ3RoLCB1c2VyX2RhdGEsCisJCQkJICBwYWdlX3RvX3BoeXMocGFnZSkg JiBvYmpfZG9fYml0MTdfc3dpenpsaW5nLAorCQkJCSAgbmVlZHNfY2xmbHVzaCk7CisJCWlmIChy ZXQpCisJCQlicmVhazsKKworCQlyZW1haW4gLT0gbGVuZ3RoOworCQl1c2VyX2RhdGEgKz0gbGVu Z3RoOworCQlvZmZzZXQgPSAwOworCX0KKworCWk5MTVfZ2VtX29ial9maW5pc2hfc2htZW1fYWNj ZXNzKG9iaik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBib29sCitndHRfdXNl cl9yZWFkKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCSAgICAgIGxvZmZfdCBiYXNlLCBp bnQgb2Zmc2V0LAorCSAgICAgIGNoYXIgX191c2VyICp1c2VyX2RhdGEsIGludCBsZW5ndGgpCiB7 Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHI7CiAJdm9pZCAqdmFkZHI7Ci0JdWludDY0X3QgdW53cml0 dGVuOworCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOwogCi0JaW9hZGRyID0gaW9fbWFwcGluZ19t YXBfd2MobWFwcGluZywgcGFnZV9iYXNlLCBQQUdFX1NJWkUpOwogCS8qIFdlIGNhbiB1c2UgdGhl IGNwdSBtZW0gY29weSBmdW5jdGlvbiBiZWNhdXNlIHRoaXMgaXMgWDg2LiAqLwotCXZhZGRyID0g KHZvaWQgX19mb3JjZSAqKWlvYWRkciArIHBhZ2Vfb2Zmc2V0OwotCWlmIChwd3JpdGUpCi0JCXVu d3JpdHRlbiA9IF9fY29weV9mcm9tX3VzZXIodmFkZHIsIHVzZXJfZGF0YSwgbGVuZ3RoKTsKLQll bHNlCi0JCXVud3JpdHRlbiA9IF9fY29weV90b191c2VyKHVzZXJfZGF0YSwgdmFkZHIsIGxlbmd0 aCk7Ci0KLQlpb19tYXBwaW5nX3VubWFwKGlvYWRkcik7CisJdmFkZHIgPSh2b2lkIF9fZm9yY2Ug Kilpb19tYXBwaW5nX21hcF9hdG9taWNfd2MobWFwcGluZywgYmFzZSk7CisJdW53cml0dGVuID0g X19jb3B5X3RvX3VzZXJfaW5hdG9taWModXNlcl9kYXRhLCB2YWRkciArIG9mZnNldCwgbGVuZ3Ro KTsKKwlpb19tYXBwaW5nX3VubWFwX2F0b21pYyh2YWRkcik7CisJaWYgKHVud3JpdHRlbikgewor CQl2YWRkciA9ICh2b2lkIF9fZm9yY2UgKikKKwkJCWlvX21hcHBpbmdfbWFwX3djKG1hcHBpbmcs IGJhc2UsIFBBR0VfU0laRSk7CisJCXVud3JpdHRlbiA9IGNvcHlfdG9fdXNlcih1c2VyX2RhdGEs IHZhZGRyICsgb2Zmc2V0LCBsZW5ndGgpOworCQlpb19tYXBwaW5nX3VubWFwKHZhZGRyKTsKKwl9 CiAJcmV0dXJuIHVud3JpdHRlbjsKIH0KIAogc3RhdGljIGludAotaTkxNV9nZW1fZ3R0X3ByZWFk KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosIHVpbnQ2NF90IHNpemUsCi0JCSAgIHVpbnQ2NF90IGRhdGFfb2Zmc2V0LCB1aW50NjRf dCBkYXRhX3B0cikKK2k5MTVfZ2VtX2d0dF9wcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAorCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkICphcmdzKQogewot CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKLQlzdHJ1 Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5nZ3R0OwotCXN0cnVjdCBpOTE1X3ZtYSAq dm1hOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2Uu ZGV2KTsKKwlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmk5MTUtPmdndHQ7CiAJc3RydWN0IGRy bV9tbV9ub2RlIG5vZGU7Ci0JY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKLQl1aW50NjRfdCByZW1h aW47Ci0JdWludDY0X3Qgb2Zmc2V0OworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCXZvaWQgX191 c2VyICp1c2VyX2RhdGE7CisJdTY0IHJlbWFpbiwgb2Zmc2V0OwogCWludCByZXQ7CiAKLQlpbnRl bF9ydW50aW1lX3BtX2dldCh0b19pOTE1KGRldikpOwotCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9n Z3R0X3BpbihvYmosIE5VTEwsIDAsIDAsIFBJTl9NQVBQQUJMRSk7CisJcmV0ID0gbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7CisJdm1hID0gaTkxNV9n ZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgTlVMTCwgMCwgMCwKKwkJCQkgICAgICAgUElOX01BUFBB QkxFIHwgUElOX05PTkJMT0NLKTsKIAlpZiAoIUlTX0VSUih2bWEpKSB7CiAJCW5vZGUuc3RhcnQg PSBpOTE1X2dndHRfb2Zmc2V0KHZtYSk7CiAJCW5vZGUuYWxsb2NhdGVkID0gZmFsc2U7CkBAIC05 NDUsMzMgKzk4OCwyMSBAQCBpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAkJfQogCX0KIAlpZiAoSVNfRVJSKHZtYSkpIHsKLQkJcmV0ID0gaW5zZXJ0X21hcHBhYmxl X25vZGUoZGV2X3ByaXYsICZub2RlLCBQQUdFX1NJWkUpOworCQlyZXQgPSBpbnNlcnRfbWFwcGFi bGVfbm9kZShnZ3R0LCAmbm9kZSwgUEFHRV9TSVpFKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0 OwotCi0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKLQkJaWYgKHJldCkg ewotCQkJcmVtb3ZlX21hcHBhYmxlX25vZGUoJm5vZGUpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJ CWdvdG8gb3V0X3VubG9jazsKKwkJR0VNX0JVR19PTighbm9kZS5hbGxvY2F0ZWQpOwogCX0KIAog CXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKIAlp ZiAocmV0KQogCQlnb3RvIG91dF91bnBpbjsKIAotCXVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0 cihkYXRhX3B0cik7Ci0JcmVtYWluID0gc2l6ZTsKLQlvZmZzZXQgPSBkYXRhX29mZnNldDsKKwlt dXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCi0JbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7Ci0JaWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNhYmxlKSkg ewotCQlyZXQgPSBmYXVsdF9pbl9wYWdlc193cml0ZWFibGUodXNlcl9kYXRhLCByZW1haW4pOwot CQlpZiAocmV0KSB7Ci0JCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCQlnb3Rv IG91dF91bnBpbjsKLQkJfQotCX0KKwl1c2VyX2RhdGEgPSB1NjRfdG9fdXNlcl9wdHIoYXJncy0+ ZGF0YV9wdHIpOworCXJlbWFpbiA9IGFyZ3MtPnNpemU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0 OwogCiAJd2hpbGUgKHJlbWFpbiA+IDApIHsKIAkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQpA QCAtOTg4LDE5ICsxMDE5LDE0IEBAIGk5MTVfZ2VtX2d0dF9wcmVhZChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAogCQkJd21iKCk7CiAJCQlnZ3R0LT5iYXNlLmluc2VydF9wYWdlKCZnZ3R0LT5iYXNl LAogCQkJCQkgICAgICAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhvYmosIG9mZnNl dCA+PiBQQUdFX1NISUZUKSwKLQkJCQkJICAgICAgIG5vZGUuc3RhcnQsCi0JCQkJCSAgICAgICBJ OTE1X0NBQ0hFX05PTkUsIDApOworCQkJCQkgICAgICAgbm9kZS5zdGFydCwgSTkxNV9DQUNIRV9O T05FLCAwKTsKIAkJCXdtYigpOwogCQl9IGVsc2UgewogCQkJcGFnZV9iYXNlICs9IG9mZnNldCAm IFBBR0VfTUFTSzsKIAkJfQotCQkvKiBUaGlzIGlzIGEgc2xvdyByZWFkL3dyaXRlIGFzIGl0IHRy aWVzIHRvIHJlYWQgZnJvbQotCQkgKiBhbmQgd3JpdGUgdG8gdXNlciBtZW1vcnkgd2hpY2ggbWF5 IHJlc3VsdCBpbnRvIHBhZ2UKLQkJICogZmF1bHRzLCBhbmQgc28gd2UgY2Fubm90IHBlcmZvcm0g dGhpcyB1bmRlciBzdHJ1Y3RfbXV0ZXguCi0JCSAqLwotCQlpZiAoc2xvd191c2VyX2FjY2Vzcygm Z2d0dC0+bWFwcGFibGUsIHBhZ2VfYmFzZSwKLQkJCQkgICAgIHBhZ2Vfb2Zmc2V0LCB1c2VyX2Rh dGEsCi0JCQkJICAgICBwYWdlX2xlbmd0aCwgZmFsc2UpKSB7CisKKwkJaWYgKGd0dF91c2VyX3Jl YWQoJmdndHQtPm1hcHBhYmxlLCBwYWdlX2Jhc2UsIHBhZ2Vfb2Zmc2V0LAorCQkJCSAgdXNlcl9k YXRhLCBwYWdlX2xlbmd0aCkpIHsKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQpA QCAtMTAxMCwxMTEgKzEwMzYsMTkgQEAgaTkxNV9nZW1fZ3R0X3ByZWFkKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCiAJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKIAl9CiAKLQltdXRleF9sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7Ci0JaWYgKHJldCA9PSAwICYmIChvYmotPmJhc2UucmVhZF9kb21h aW5zICYgSTkxNV9HRU1fRE9NQUlOX0dUVCkgPT0gMCkgewotCQkvKiBUaGUgdXNlciBoYXMgbW9k aWZpZWQgdGhlIG9iamVjdCB3aGlsc3Qgd2UgdHJpZWQKLQkJICogcmVhZGluZyBmcm9tIGl0LCBh bmQgd2Ugbm93IGhhdmUgbm8gaWRlYSB3aGF0IGRvbWFpbgotCQkgKiB0aGUgcGFnZXMgc2hvdWxk IGJlIGluLiBBcyB3ZSBoYXZlIGp1c3QgYmVlbiB0b3VjaGluZwotCQkgKiB0aGVtIGRpcmVjdGx5 LCBmbHVzaCBldmVyeXRoaW5nIGJhY2sgdG8gdGhlIEdUVAotCQkgKiBkb21haW4uCi0JCSAqLwot CQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4ob2JqLCBmYWxzZSk7Ci0J fQotCisJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CiBvdXRfdW5waW46CiAJ aWYgKG5vZGUuYWxsb2NhdGVkKSB7CiAJCXdtYigpOwogCQlnZ3R0LT5iYXNlLmNsZWFyX3Jhbmdl KCZnZ3R0LT5iYXNlLAogCQkJCSAgICAgICBub2RlLnN0YXJ0LCBub2RlLnNpemUpOwotCQlpOTE1 X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsKIAkJcmVtb3ZlX21hcHBhYmxlX25vZGUoJm5v ZGUpOwogCX0gZWxzZSB7CiAJCWk5MTVfdm1hX3VucGluKHZtYSk7CiAJfQotb3V0OgotCWludGVs X3J1bnRpbWVfcG1fcHV0KHRvX2k5MTUoZGV2KSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGludAotaTkxNV9nZW1fc2htZW1fcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkgICAgIHN0cnVjdCBkcm1faTkx NV9nZW1fcHJlYWQgKmFyZ3MsCi0JCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQotewotCWNo YXIgX191c2VyICp1c2VyX2RhdGE7Ci0Jc3NpemVfdCByZW1haW47Ci0JbG9mZl90IG9mZnNldDsK LQlpbnQgc2htZW1fcGFnZV9vZmZzZXQsIHBhZ2VfbGVuZ3RoLCByZXQgPSAwOwotCWludCBvYmpf ZG9fYml0MTdfc3dpenpsaW5nLCBwYWdlX2RvX2JpdDE3X3N3aXp6bGluZzsKLQlpbnQgcHJlZmF1 bHRlZCA9IDA7Ci0JaW50IG5lZWRzX2NsZmx1c2ggPSAwOwotCXN0cnVjdCBzZ19wYWdlX2l0ZXIg c2dfaXRlcjsKLQotCXJldCA9IGk5MTVfZ2VtX29ial9wcmVwYXJlX3NobWVtX3JlYWQob2JqLCAm bmVlZHNfY2xmbHVzaCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW9ial9kb19iaXQx N19zd2l6emxpbmcgPSBpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopOwot CXVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihhcmdzLT5kYXRhX3B0cik7Ci0Jb2Zmc2V0ID0g YXJncy0+b2Zmc2V0OwotCXJlbWFpbiA9IGFyZ3MtPnNpemU7Ci0KLQlmb3JfZWFjaF9zZ19wYWdl KG9iai0+bW0ucGFnZXMtPnNnbCwgJnNnX2l0ZXIsIG9iai0+bW0ucGFnZXMtPm5lbnRzLAotCQkJ IG9mZnNldCA+PiBQQUdFX1NISUZUKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZV9p dGVyX3BhZ2UoJnNnX2l0ZXIpOwotCi0JCWlmIChyZW1haW4gPD0gMCkKLQkJCWJyZWFrOwotCi0J CS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKLQkJICoKLQkJICogc2htZW1fcGFnZV9vZmZzZXQg PSBvZmZzZXQgd2l0aGluIHBhZ2UgaW4gc2htZW0gZmlsZQotCQkgKiBwYWdlX2xlbmd0aCA9IGJ5 dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQotCQkgKi8KLQkJc2htZW1fcGFnZV9vZmZzZXQgPSBv ZmZzZXRfaW5fcGFnZShvZmZzZXQpOwotCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKLQkJaWYgKChz aG1lbV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKLQkJCXBhZ2VfbGVu Z3RoID0gUEFHRV9TSVpFIC0gc2htZW1fcGFnZV9vZmZzZXQ7Ci0KLQkJcGFnZV9kb19iaXQxN19z d2l6emxpbmcgPSBvYmpfZG9fYml0MTdfc3dpenpsaW5nICYmCi0JCQkocGFnZV90b19waHlzKHBh Z2UpICYgKDEgPDwgMTcpKSAhPSAwOwotCi0JCXJldCA9IHNobWVtX3ByZWFkX2Zhc3QocGFnZSwg c2htZW1fcGFnZV9vZmZzZXQsIHBhZ2VfbGVuZ3RoLAotCQkJCSAgICAgICB1c2VyX2RhdGEsIHBh Z2VfZG9fYml0MTdfc3dpenpsaW5nLAotCQkJCSAgICAgICBuZWVkc19jbGZsdXNoKTsKLQkJaWYg KHJldCA9PSAwKQotCQkJZ290byBuZXh0X3BhZ2U7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Ci0KLQkJaWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNhYmxlKSAmJiAh cHJlZmF1bHRlZCkgewotCQkJcmV0ID0gZmF1bHRfaW5fcGFnZXNfd3JpdGVhYmxlKHVzZXJfZGF0 YSwgcmVtYWluKTsKLQkJCS8qIFVzZXJzcGFjZSBpcyB0cmlja2luZyB1cywgYnV0IHdlJ3ZlIGFs cmVhZHkgY2xvYmJlcmVkCi0JCQkgKiBpdHMgcGFnZXMgd2l0aCB0aGUgcHJlZmF1bHQgYW5kIHBy b21pc2VkIHRvIHdyaXRlIHRoZQotCQkJICogZGF0YSB1cCB0byB0aGUgZmlyc3QgZmF1bHQuIEhl bmNlIGlnbm9yZSBhbnkgZXJyb3JzCi0JCQkgKiBhbmQganVzdCBjb250aW51ZS4gKi8KLQkJCSh2 b2lkKXJldDsKLQkJCXByZWZhdWx0ZWQgPSAxOwotCQl9Ci0KLQkJcmV0ID0gc2htZW1fcHJlYWRf c2xvdyhwYWdlLCBzaG1lbV9wYWdlX29mZnNldCwgcGFnZV9sZW5ndGgsCi0JCQkJICAgICAgIHVz ZXJfZGF0YSwgcGFnZV9kb19iaXQxN19zd2l6emxpbmcsCi0JCQkJICAgICAgIG5lZWRzX2NsZmx1 c2gpOwotCi0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCQlpZiAocmV0KQot CQkJZ290byBvdXQ7Ci0KLW5leHRfcGFnZToKLQkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOwotCQl1 c2VyX2RhdGEgKz0gcGFnZV9sZW5ndGg7Ci0JCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKLQl9Ci0K LW91dDoKLQlpOTE1X2dlbV9vYmpfZmluaXNoX3NobWVtX2FjY2VzcyhvYmopOworb3V0X3VubG9j azoKKwlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1KTsKKwltdXRleF91bmxvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMzMsNyArMTA2Nyw3IEBA IGk5MTVfZ2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs CiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncyA9IGRhdGE7CiAJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iajsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJaWYg KGFyZ3MtPnNpemUgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0xMTUxLDcgKzEwODUsNyBAQCBpOTE1 X2dlbV9wcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCWlm IChhcmdzLT5vZmZzZXQgPiBvYmotPmJhc2Uuc2l6ZSB8fAogCSAgICBhcmdzLT5zaXplID4gb2Jq LT5iYXNlLnNpemUgLSBhcmdzLT5vZmZzZXQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBl cnI7CisJCWdvdG8gb3V0OwogCX0KIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9wcmVhZChvYmos IGFyZ3MtPm9mZnNldCwgYXJncy0+c2l6ZSk7CkBAIC0xMTYxLDI1ICsxMDk1LDE4IEBAIGk5MTVf Z2VtX3ByZWFkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkJ ICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQsCiAJCQkJICAgdG9fcnBzX2NsaWVudChmaWxlKSk7CiAJ aWYgKHJldCkKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCi0JcmV0ID0gaTkxNV9tdXRleF9s b2NrX2ludGVycnVwdGlibGUoZGV2KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2Vz KG9iaik7CiAJaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9w cmVhZChkZXYsIG9iaiwgYXJncywgZmlsZSk7CisJCWdvdG8gb3V0OwogCi0JLyogcHJlYWQgZm9y IG5vbiBzaG1lbSBiYWNrZWQgb2JqZWN0cyAqLworCXJldCA9IGk5MTVfZ2VtX3NobWVtX3ByZWFk KG9iaiwgYXJncyk7CiAJaWYgKHJldCA9PSAtRUZBVUxUIHx8IHJldCA9PSAtRU5PREVWKQotCQly ZXQgPSBpOTE1X2dlbV9ndHRfcHJlYWQoZGV2LCBvYmosIGFyZ3MtPnNpemUsCi0JCQkJCWFyZ3Mt Pm9mZnNldCwgYXJncy0+ZGF0YV9wdHIpOwotCi0JaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwot CW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKKwkJcmV0 ID0gaTkxNV9nZW1fZ3R0X3ByZWFkKG9iaiwgYXJncyk7CiAKLWVycjoKKwlpOTE1X2dlbV9vYmpl Y3RfdW5waW5fcGFnZXMob2JqKTsKK291dDoKIAlpOTE1X2dlbV9vYmplY3RfcHV0X3VubG9ja2Vk KG9iaik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyMDcsNiArMTEzNCwyOCBAQCBmYXN0X3VzZXJf d3JpdGUoc3RydWN0IGlvX21hcHBpbmcgKm1hcHBpbmcsCiAJcmV0dXJuIHVud3JpdHRlbjsKIH0K IAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzbG93X3VzZXJfYWNjZXNzKHN0cnVjdCBp b19tYXBwaW5nICptYXBwaW5nLAorCQkgdW5zaWduZWQgbG9uZyBwYWdlX2Jhc2UsIGludCBwYWdl X29mZnNldCwKKwkJIGNoYXIgX191c2VyICp1c2VyX2RhdGEsCisJCSB1bnNpZ25lZCBsb25nIGxl bmd0aCwgYm9vbCBwd3JpdGUpCit7CisJdm9pZCBfX2lvbWVtICppb2FkZHI7CisJdm9pZCAqdmFk ZHI7CisJdW5zaWduZWQgbG9uZyB1bndyaXR0ZW47CisKKwlpb2FkZHIgPSBpb19tYXBwaW5nX21h cF93YyhtYXBwaW5nLCBwYWdlX2Jhc2UsIFBBR0VfU0laRSk7CisJLyogV2UgY2FuIHVzZSB0aGUg Y3B1IG1lbSBjb3B5IGZ1bmN0aW9uIGJlY2F1c2UgdGhpcyBpcyBYODYuICovCisJdmFkZHIgPSAo dm9pZCBfX2ZvcmNlICopaW9hZGRyICsgcGFnZV9vZmZzZXQ7CisJaWYgKHB3cml0ZSkKKwkJdW53 cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcih2YWRkciwgdXNlcl9kYXRhLCBsZW5ndGgpOworCWVs c2UKKwkJdW53cml0dGVuID0gX19jb3B5X3RvX3VzZXIodXNlcl9kYXRhLCB2YWRkciwgbGVuZ3Ro KTsKKworCWlvX21hcHBpbmdfdW5tYXAoaW9hZGRyKTsKKwlyZXR1cm4gdW53cml0dGVuOworfQor CiAvKioKICAqIFRoaXMgaXMgdGhlIGZhc3QgcHdyaXRlIHBhdGgsIHdoZXJlIHdlIGNvcHkgdGhl IGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUKICAqIHVzZXIgaW50byB0aGUgR1RULCB1bmNhY2hlZC4K QEAgLTEyNDYsNyArMTE5NSw3IEBAIGk5MTVfZ2VtX2d0dF9wd3JpdGVfZmFzdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJfQogCX0KIAlpZiAoSVNfRVJSKHZtYSkpIHsKLQkJcmV0 ID0gaW5zZXJ0X21hcHBhYmxlX25vZGUoaTkxNSwgJm5vZGUsIFBBR0VfU0laRSk7CisJCXJldCA9 IGluc2VydF9tYXBwYWJsZV9ub2RlKGdndHQsICZub2RlLCBQQUdFX1NJWkUpOwogCQlpZiAocmV0 KQogCQkJZ290byBvdXQ7CiAKQEAgLTEyNzUsOCArMTIyNCw4IEBAIGk5MTVfZ2VtX2d0dF9wd3Jp dGVfZmFzdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJICogcGFnZV9sZW5ndGgg PSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCiAJCXUzMiBwYWdlX2Jhc2UgPSBu b2RlLnN0YXJ0OwotCQl1bnNpZ25lZCBwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNl dCk7Ci0JCXVuc2lnbmVkIHBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CisJ CXVuc2lnbmVkIGludCBwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CisJCXVu c2lnbmVkIGludCBwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwogCQlwYWdl X2xlbmd0aCA9IHJlbWFpbiA8IHBhZ2VfbGVuZ3RoID8gcmVtYWluIDogcGFnZV9sZW5ndGg7CiAJ CWlmIChub2RlLmFsbG9jYXRlZCkgewogCQkJd21iKCk7IC8qIGZsdXNoIHRoZSB3cml0ZSBiZWZv cmUgd2UgbW9kaWZ5IHRoZSBHR1RUICovCi0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==