From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v6 2/3] drm/tegra: Add IOMMU support Date: Thu, 6 Nov 2014 16:57:15 +0100 Message-ID: <1415289436-14797-2-git-send-email-thierry.reding@gmail.com> References: <1415289436-14797-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by gabe.freedesktop.org (Postfix) with ESMTP id 949186E78B for ; Thu, 6 Nov 2014 07:57:28 -0800 (PST) Received: by mail-pa0-f42.google.com with SMTP id bj1so1519503pad.1 for ; Thu, 06 Nov 2014 07:57:28 -0800 (PST) In-Reply-To: <1415289436-14797-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: =?UTF-8?q?St=C3=A9phane=20Marchesin?= , dri-devel@lists.freedesktop.org, Sean Paul List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCldoZW4gYW4gSU9NTVUg ZGV2aWNlIGlzIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0gYnVzLCBhbGxvY2F0ZSBhbiBJT01N VQpkb21haW4gYW5kIGF0dGFjaCB0aGUgZGlzcGxheSBjb250cm9sbGVycyB0byBpdC4gVGhlIGRp c3BsYXkgY29udHJvbGxlcnMKY2FuIHRoZW4gc2NhbiBvdXQgbm9uLWNvbnRpZ3VvdXMgYnVmZmVy cyBieSBtYXBwaW5nIHRoZW0gdGhyb3VnaCB0aGUKSU9NTVUuCgpTaWduZWQtb2ZmLWJ5OiBUaGll cnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgotLS0KQ2hhbmdlcyBpbiB2NjoKLSBjbGVh biB1cCBJT01NVSByZXNvdXJjZXMgb24gaW5pdGlhbGl6YXRpb24gZmFpbHVyZQoKQ2hhbmdlcyBp biB2NToKLSBmaXggUFJJTUUgZXhwb3J0IG9mIHBoeXNpY2FsbHkgbm9uLWNvbnRpZ3VvdXMgYnVm ZmVycwotIHJlZmFjdG9yIGFuZCBmaXggZXJyb3IgY2xlYW51cCBwYXRocwotIGZpeCBjaGVja2lu ZyBmb3IgZmFpbGVkIGFsbG9jYXRpb25zCi0gZml4IGJ1aWxkIHdhcm5pbmdzIG9uIDY0LWJpdAoK Q2hhbmdlcyBpbiB2NDoKLSBlcnJvciBvdXQgaWYgSU9NTVUgYXR0YWNobWVudCBmYWlscwoKQ2hh bmdlcyBpbiB2MzoKLSBjcmVhdGUgd3JpdGUtY29tYmluZWQgbWFwcGluZ3MgZm9yIG1tYXAoKQot IGtlZXAgbm9uLUlPTU1VIGZhbGxiYWNrIHBhdGggd29ya2luZwotIG5vIGxvbmdlciByZWx5IG9u IGlvbW11X2F0dGFjaCgpCgpDaGFuZ2VzIGluIHYyOgotIGRvbid0IHBhc3MgR0ZQX0tFUk5FTCB0 byBkcm1fZ2VtX2dldF9wYWdlcygpCgogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMgIHwgIDE3 ICsrKwogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jIHwgIDI0ICsrKysKIGRyaXZlcnMvZ3B1 L2RybS90ZWdyYS9kcm0uaCB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZmIuYyAgfCAg MTYgKystCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMgfCAyNzcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0u aCB8ICAgNiArCiA2IGZpbGVzIGNoYW5nZWQsIDMwOCBpbnNlcnRpb25zKCspLCAzNyBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYyBiL2RyaXZlcnMv Z3B1L2RybS90ZWdyYS9kYy5jCmluZGV4IGEwNThhNDNlNjMyMi4uNjJjODFkZjY3MjE2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v dGVncmEvZGMuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2lu Y2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgogI2luY2x1 ZGUgPGxpbnV4L3Jlc2V0Lmg+CiAKICNpbmNsdWRlIDxzb2MvdGVncmEvcG1jLmg+CkBAIC0xMjg5 LDYgKzEyOTAsMTcgQEAgc3RhdGljIGludCB0ZWdyYV9kY19pbml0KHN0cnVjdCBob3N0MXhfY2xp ZW50ICpjbGllbnQpCiAJc3RydWN0IHRlZ3JhX2RybSAqdGVncmEgPSBkcm0tPmRldl9wcml2YXRl OwogCWludCBlcnI7CiAKKwlpZiAodGVncmEtPmRvbWFpbikgeworCQllcnIgPSBpb21tdV9hdHRh Y2hfZGV2aWNlKHRlZ3JhLT5kb21haW4sIGRjLT5kZXYpOworCQlpZiAoZXJyIDwgMCkgeworCQkJ ZGV2X2VycihkYy0+ZGV2LCAiZmFpbGVkIHRvIGF0dGFjaCB0byBkb21haW46ICVkXG4iLAorCQkJ CWVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZGMtPmRvbWFpbiA9IHRlZ3JhLT5kb21h aW47CisJfQorCiAJZHJtX2NydGNfaW5pdChkcm0sICZkYy0+YmFzZSwgJnRlZ3JhX2NydGNfZnVu Y3MpOwogCWRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3NpemUoJmRjLT5iYXNlLCAyNTYpOwogCWRy bV9jcnRjX2hlbHBlcl9hZGQoJmRjLT5iYXNlLCAmdGVncmFfY3J0Y19oZWxwZXJfZnVuY3MpOwpA QCAtMTM0Niw2ICsxMzU4LDExIEBAIHN0YXRpYyBpbnQgdGVncmFfZGNfZXhpdChzdHJ1Y3QgaG9z dDF4X2NsaWVudCAqY2xpZW50KQogCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmIChkYy0+ZG9tYWlu KSB7CisJCWlvbW11X2RldGFjaF9kZXZpY2UoZGMtPmRvbWFpbiwgZGMtPmRldik7CisJCWRjLT5k b21haW4gPSBOVUxMOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGVncmEvZHJtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMKaW5kZXgg ZTE2MzJmYjAzYTg5Li42YzlkZjc5NGIzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90 ZWdyYS9kcm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmMKQEAgLTgsNiArOCw3 IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2hvc3QxeC5oPgorI2luY2x1ZGUgPGxpbnV4L2lv bW11Lmg+CiAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJnZW0uaCIKQEAgLTMzLDYgKzM0 LDE3IEBAIHN0YXRpYyBpbnQgdGVncmFfZHJtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg dW5zaWduZWQgbG9uZyBmbGFncykKIAlpZiAoIXRlZ3JhKQogCQlyZXR1cm4gLUVOT01FTTsKIAor CWlmIChpb21tdV9wcmVzZW50KCZwbGF0Zm9ybV9idXNfdHlwZSkpIHsKKwkJdGVncmEtPmRvbWFp biA9IGlvbW11X2RvbWFpbl9hbGxvYygmcGxhdGZvcm1fYnVzX3R5cGUpOworCQlpZiAoSVNfRVJS KHRlZ3JhLT5kb21haW4pKSB7CisJCQllcnIgPSBQVFJfRVJSKHRlZ3JhLT5kb21haW4pOworCQkJ Z290byBmcmVlOworCQl9CisKKwkJRFJNX0RFQlVHKCJJT01NVSBjb250ZXh0IGluaXRpYWxpemVk XG4iKTsKKwkJZHJtX21tX2luaXQoJnRlZ3JhLT5tbSwgMCwgU1pfMkcpOworCX0KKwogCW11dGV4 X2luaXQoJnRlZ3JhLT5jbGllbnRzX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0ZWdyYS0+Y2xp ZW50cyk7CiAJZHJtLT5kZXZfcHJpdmF0ZSA9IHRlZ3JhOwpAQCAtNzYsNiArODgsMTIgQEAgZmJk ZXY6CiAJdGVncmFfZHJtX2ZiX2ZyZWUoZHJtKTsKIGNvbmZpZzoKIAlkcm1fbW9kZV9jb25maWdf Y2xlYW51cChkcm0pOworCisJaWYgKHRlZ3JhLT5kb21haW4pIHsKKwkJaW9tbXVfZG9tYWluX2Zy ZWUodGVncmEtPmRvbWFpbik7CisJCWRybV9tbV90YWtlZG93bigmdGVncmEtPm1tKTsKKwl9Citm cmVlOgogCWtmcmVlKHRlZ3JhKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtODMsNiArMTAxLDcgQEAg Y29uZmlnOgogc3RhdGljIGludCB0ZWdyYV9kcm1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pCiB7CiAJc3RydWN0IGhvc3QxeF9kZXZpY2UgKmRldmljZSA9IHRvX2hvc3QxeF9kZXZpY2Uo ZHJtLT5kZXYpOworCXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZHJtLT5kZXZfcHJpdmF0ZTsK IAlpbnQgZXJyOwogCiAJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7CkBAIC05NCw2ICsx MTMsMTEgQEAgc3RhdGljIGludCB0ZWdyYV9kcm1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0pCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKKwlpZiAodGVncmEtPmRvbWFpbikg eworCQlpb21tdV9kb21haW5fZnJlZSh0ZWdyYS0+ZG9tYWluKTsKKwkJZHJtX21tX3Rha2Vkb3du KCZ0ZWdyYS0+bW0pOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGVncmEvZHJtLmggYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmgKaW5kZXgg ZWYyZmFhZWY1OTM2Li45NmZmNDdkNTg2YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90 ZWdyYS9kcm0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmgKQEAgLTM5LDYgKzM5 LDkgQEAgc3RydWN0IHRlZ3JhX2ZiZGV2IHsKIHN0cnVjdCB0ZWdyYV9kcm0gewogCXN0cnVjdCBk cm1fZGV2aWNlICpkcm07CiAKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47CisJc3RydWN0 IGRybV9tbSBtbTsKKwogCXN0cnVjdCBtdXRleCBjbGllbnRzX2xvY2s7CiAJc3RydWN0IGxpc3Rf aGVhZCBjbGllbnRzOwogCkBAIC0xMjEsNiArMTI0LDggQEAgc3RydWN0IHRlZ3JhX2RjIHsKIAlz dHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKIAogCWNvbnN0IHN0cnVjdCB0 ZWdyYV9kY19zb2NfaW5mbyAqc29jOworCisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwog fTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGVncmFfZGMgKgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZmIuYwppbmRleCAw NDc0MjQxYWMyYTQuLmZhYjM5ZWIyZGFlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Rl Z3JhL2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMKQEAgLTY1LDggKzY1LDEy IEBAIHN0YXRpYyB2b2lkIHRlZ3JhX2ZiX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZnJhbWVidWZmZXIpCiAJZm9yIChpID0gMDsgaSA8IGZiLT5udW1fcGxhbmVzOyBpKyspIHsKIAkJ c3RydWN0IHRlZ3JhX2JvICpibyA9IGZiLT5wbGFuZXNbaV07CiAKLQkJaWYgKGJvKQorCQlpZiAo Ym8pIHsKKwkJCWlmIChiby0+cGFnZXMgJiYgYm8tPnZhZGRyKQorCQkJCXZ1bm1hcChiby0+dmFk ZHIpOworCiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmYm8tPmdlbSk7 CisJCX0KIAl9CiAKIAlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmcmFtZWJ1ZmZlcik7CkBAIC0y NTQsNiArMjU4LDE2IEBAIHN0YXRpYyBpbnQgdGVncmFfZmJkZXZfcHJvYmUoc3RydWN0IGRybV9m Yl9oZWxwZXIgKmhlbHBlciwKIAlvZmZzZXQgPSBpbmZvLT52YXIueG9mZnNldCAqIGJ5dGVzX3Bl cl9waXhlbCArCiAJCSBpbmZvLT52YXIueW9mZnNldCAqIGZiLT5waXRjaGVzWzBdOwogCisJaWYg KGJvLT5wYWdlcykgeworCQliby0+dmFkZHIgPSB2bWFwKGJvLT5wYWdlcywgYm8tPm51bV9wYWdl cywgVk1fTUFQLAorCQkJCSBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVMKSk7CisJCWlm ICghYm8tPnZhZGRyKSB7CisJCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIHZtYXAoKSBm cmFtZWJ1ZmZlclxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBkZXN0cm95OworCQl9 CisJfQorCiAJZHJtLT5tb2RlX2NvbmZpZy5mYl9iYXNlID0gKHJlc291cmNlX3NpemVfdCliby0+ cGFkZHI7CiAJaW5mby0+c2NyZWVuX2Jhc2UgPSAodm9pZCBfX2lvbWVtICopYm8tPnZhZGRyICsg b2Zmc2V0OwogCWluZm8tPnNjcmVlbl9zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS90ZWdyYS9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwppbmRleCBi NTEzZGYzM2YxN2EuLjhiMTA5NWQwNWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Rl Z3JhL2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0uYwpAQCAtMTQsNiArMTQs NyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgv aW9tbXUuaD4KICNpbmNsdWRlIDxkcm0vdGVncmFfZHJtLmg+CiAKICNpbmNsdWRlICJkcm0uaCIK QEAgLTkxLDYgKzkyLDg4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG9zdDF4X2JvX29wcyB0ZWdy YV9ib19vcHMgPSB7CiAJLmt1bm1hcCA9IHRlZ3JhX2JvX2t1bm1hcCwKIH07CiAKKy8qCisgKiBB IGdlbmVyaWMgaW9tbXVfbWFwX3NnKCkgZnVuY3Rpb24gaXMgYmVpbmcgcmV2aWV3ZWQgYW5kIHdp bGwgaG9wZWZ1bGx5IGJlCisgKiBtZXJnZWQgc29vbi4gQXQgdGhhdCBwb2ludCB0aGlzIGZ1bmN0 aW9uIGNhbiBiZSBkcm9wcGVkIGluIGZhdm91ciBvZiB0aGUKKyAqIG9uZSBwcm92aWRlZCBieSB0 aGUgSU9NTVUgQVBJLgorICovCitzdGF0aWMgc3NpemVfdCBfX2lvbW11X21hcF9zZyhzdHJ1Y3Qg aW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKKwkJCSAgICAgIHN0cnVj dCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cywKKwkJCSAgICAgIGludCBwcm90 KQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwl1bnNp Z25lZCBpbnQgaTsKKwlpbnQgZXJyOworCisJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKSB7 CisJCXBoeXNfYWRkcl90IHBoeXMgPSBwYWdlX3RvX3BoeXMoc2dfcGFnZShzKSk7CisJCXNpemVf dCBsZW5ndGggPSBzLT5vZmZzZXQgKyBzLT5sZW5ndGg7CisKKwkJZXJyID0gaW9tbXVfbWFwKGRv bWFpbiwgaW92YSArIG9mZnNldCwgcGh5cywgbGVuZ3RoLCBwcm90KTsKKwkJaWYgKGVyciA8IDAp IHsKKwkJCWlvbW11X3VubWFwKGRvbWFpbiwgaW92YSwgb2Zmc2V0KTsKKwkJCXJldHVybiBlcnI7 CisJCX0KKworCQlvZmZzZXQgKz0gbGVuZ3RoOworCX0KKworCXJldHVybiBvZmZzZXQ7Cit9CisK K3N0YXRpYyBpbnQgdGVncmFfYm9faW9tbXVfbWFwKHN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhLCBz dHJ1Y3QgdGVncmFfYm8gKmJvKQoreworCWludCBwcm90ID0gSU9NTVVfUkVBRCB8IElPTU1VX1dS SVRFOworCXNzaXplX3QgZXJyOworCisJaWYgKGJvLT5tbSkKKwkJcmV0dXJuIC1FQlVTWTsKKwor CWJvLT5tbSA9IGt6YWxsb2Moc2l6ZW9mKCpiby0+bW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJv LT5tbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2Vu ZXJpYygmdGVncmEtPm1tLCBiby0+bW0sIGJvLT5nZW0uc2l6ZSwKKwkJCQkJIFBBR0VfU0laRSwg MCwgMCwgMCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vycih0ZWdyYS0+ZHJtLT5kZXYsICJv dXQgb2YgSS9PIHZpcnR1YWwgbWVtb3J5OiAlemRcbiIsCisJCQllcnIpOworCQlnb3RvIGZyZWU7 CisJfQorCisJYm8tPnBhZGRyID0gYm8tPm1tLT5zdGFydDsKKworCWVyciA9IF9faW9tbXVfbWFw X3NnKHRlZ3JhLT5kb21haW4sIGJvLT5wYWRkciwgYm8tPnNndC0+c2dsLAorCQkJICAgICBiby0+ c2d0LT5uZW50cywgcHJvdCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vycih0ZWdyYS0+ZHJt LT5kZXYsICJmYWlsZWQgdG8gbWFwIGJ1ZmZlcjogJXpkXG4iLCBlcnIpOworCQlnb3RvIHJlbW92 ZTsKKwl9CisKKwliby0+c2l6ZSA9IGVycjsKKworCXJldHVybiAwOworCityZW1vdmU6CisJZHJt X21tX3JlbW92ZV9ub2RlKGJvLT5tbSk7CitmcmVlOgorCWtmcmVlKGJvLT5tbSk7CisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIGludCB0ZWdyYV9ib19pb21tdV91bm1hcChzdHJ1Y3QgdGVncmFf ZHJtICp0ZWdyYSwgc3RydWN0IHRlZ3JhX2JvICpibykKK3sKKwlpZiAoIWJvLT5tbSkKKwkJcmV0 dXJuIDA7CisKKwlpb21tdV91bm1hcCh0ZWdyYS0+ZG9tYWluLCBiby0+cGFkZHIsIGJvLT5zaXpl KTsKKwlkcm1fbW1fcmVtb3ZlX25vZGUoYm8tPm1tKTsKKwlrZnJlZShiby0+bW0pOworCisJcmV0 dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdGVncmFfYm8gKnRlZ3JhX2JvX2FsbG9jX29iamVj dChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAogCQkJCQkgICAgICBzaXplX3Qgc2l6ZSkKIHsKQEAg LTEyMSw5ICsyMDQsNjQgQEAgZnJlZToKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCi1zdGF0 aWMgdm9pZCB0ZWdyYV9ib19kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCB0 ZWdyYV9ibyAqYm8pCitzdGF0aWMgdm9pZCB0ZWdyYV9ib19mcmVlKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIHN0cnVjdCB0ZWdyYV9ibyAqYm8pCiB7Ci0JZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGRy bS0+ZGV2LCBiby0+Z2VtLnNpemUsIGJvLT52YWRkciwgYm8tPnBhZGRyKTsKKwlpZiAoYm8tPnBh Z2VzKSB7CisJCWRybV9nZW1fcHV0X3BhZ2VzKCZiby0+Z2VtLCBiby0+cGFnZXMsIHRydWUsIHRy dWUpOworCQlzZ19mcmVlX3RhYmxlKGJvLT5zZ3QpOworCQlrZnJlZShiby0+c2d0KTsKKwl9IGVs c2UgeworCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoZHJtLT5kZXYsIGJvLT5nZW0uc2l6ZSwgYm8t PnZhZGRyLAorCQkJCSAgICAgIGJvLT5wYWRkcik7CisJfQorfQorCitzdGF0aWMgaW50IHRlZ3Jh X2JvX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8gKmJv LAorCQkJICAgICAgc2l6ZV90IHNpemUpCit7CisJYm8tPnBhZ2VzID0gZHJtX2dlbV9nZXRfcGFn ZXMoJmJvLT5nZW0pOworCWlmIChJU19FUlIoYm8tPnBhZ2VzKSkKKwkJcmV0dXJuIFBUUl9FUlIo Ym8tPnBhZ2VzKTsKKworCWJvLT5udW1fcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisKKwli by0+c2d0ID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgYm8tPm51bV9wYWdlcyk7 CisJaWYgKElTX0VSUihiby0+c2d0KSkgeworCQlkcm1fZ2VtX3B1dF9wYWdlcygmYm8tPmdlbSwg Ym8tPnBhZ2VzLCBmYWxzZSwgZmFsc2UpOworCQlyZXR1cm4gUFRSX0VSUihiby0+c2d0KTsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9ib19hbGxvYyhzdHJ1Y3QgZHJt X2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8gKmJvLAorCQkJICBzaXplX3Qgc2l6ZSkKK3sK KwlzdHJ1Y3QgdGVncmFfZHJtICp0ZWdyYSA9IGRybS0+ZGV2X3ByaXZhdGU7CisJaW50IGVycjsK KworCWlmICh0ZWdyYS0+ZG9tYWluKSB7CisJCWVyciA9IHRlZ3JhX2JvX2dldF9wYWdlcyhkcm0s IGJvLCBzaXplKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IHRl Z3JhX2JvX2lvbW11X21hcCh0ZWdyYSwgYm8pOworCQlpZiAoZXJyIDwgMCkgeworCQkJdGVncmFf Ym9fZnJlZShkcm0sIGJvKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQliby0+ dmFkZHIgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGRybS0+ZGV2LCBzaXplLCAmYm8tPnBhZGRy LAorCQkJCQkJICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJCWlmICghYm8tPnZhZGRy KSB7CisJCQlkZXZfZXJyKGRybS0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVy IG9mIHNpemUgJXp1XG4iLAorCQkJCXNpemUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9 CisKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IHRlZ3JhX2JvICp0ZWdyYV9ib19jcmVhdGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHNpemUsCkBAIC0xMzYsMTQgKzI3NCw5 IEBAIHN0cnVjdCB0ZWdyYV9ibyAqdGVncmFfYm9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sIHVuc2lnbmVkIGludCBzaXplLAogCWlmIChJU19FUlIoYm8pKQogCQlyZXR1cm4gYm87CiAK LQliby0+dmFkZHIgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGRybS0+ZGV2LCBzaXplLCAmYm8t PnBhZGRyLAotCQkJCQkgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKLQlpZiAoIWJvLT52 YWRkcikgewotCQlkZXZfZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciB3 aXRoIHNpemUgJXVcbiIsCi0JCQlzaXplKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJf ZG1hOwotCX0KKwllcnIgPSB0ZWdyYV9ib19hbGxvYyhkcm0sIGJvLCBzaXplKTsKKwlpZiAoZXJy IDwgMCkKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGZsYWdzICYgRFJNX1RFR1JBX0dFTV9DUkVB VEVfVElMRUQpCiAJCWJvLT50aWxpbmcubW9kZSA9IFRFR1JBX0JPX1RJTElOR19NT0RFX1RJTEVE OwpAQCAtMTUzLDEzICsyODYsOSBAQCBzdHJ1Y3QgdGVncmFfYm8gKnRlZ3JhX2JvX2NyZWF0ZShz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgc2l6ZSwKIAogCXJldHVybiBibzsK IAotZXJyX21tYXA6CityZWxlYXNlOgogCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW0p OwotZXJyX2luaXQ6Ci0JdGVncmFfYm9fZGVzdHJveShkcm0sIGJvKTsKLWVycl9kbWE6CiAJa2Zy ZWUoYm8pOwotCiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIApAQCAtMTkwLDYgKzMxOSw3IEBA IHN0cnVjdCB0ZWdyYV9ibyAqdGVncmFfYm9fY3JlYXRlX3dpdGhfaGFuZGxlKHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSwKIHN0YXRpYyBzdHJ1Y3QgdGVncmFfYm8gKnRlZ3JhX2JvX2ltcG9ydChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLAogCQkJCQlzdHJ1Y3QgZG1hX2J1ZiAqYnVmKQogeworCXN0cnVj dCB0ZWdyYV9kcm0gKnRlZ3JhID0gZHJtLT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICphdHRhY2g7CiAJc3RydWN0IHRlZ3JhX2JvICpibzsKIAlpbnQgZXJyOwpAQCAt MjE3LDEyICszNDcsMTkgQEAgc3RhdGljIHN0cnVjdCB0ZWdyYV9ibyAqdGVncmFfYm9faW1wb3J0 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCiAJCWdvdG8gZGV0YWNoOwogCX0KIAotCWlmIChiby0+ c2d0LT5uZW50cyA+IDEpIHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBkZXRhY2g7CisJaWYg KHRlZ3JhLT5kb21haW4pIHsKKwkJZXJyID0gdGVncmFfYm9faW9tbXVfbWFwKHRlZ3JhLCBibyk7 CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBkZXRhY2g7CisJfSBlbHNlIHsKKwkJaWYgKGJvLT5z Z3QtPm5lbnRzID4gMSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZGV0YWNoOworCQl9 CisKKwkJYm8tPnBhZGRyID0gc2dfZG1hX2FkZHJlc3MoYm8tPnNndC0+c2dsKTsKIAl9CiAKLQli by0+cGFkZHIgPSBzZ19kbWFfYWRkcmVzcyhiby0+c2d0LT5zZ2wpOwogCWJvLT5nZW0uaW1wb3J0 X2F0dGFjaCA9IGF0dGFjaDsKIAogCXJldHVybiBibzsKQEAgLTI0MSwxNCArMzc4LDE4IEBAIGZy ZWU6CiAKIHZvaWQgdGVncmFfYm9fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn ZW0pCiB7CisJc3RydWN0IHRlZ3JhX2RybSAqdGVncmEgPSBnZW0tPmRldi0+ZGV2X3ByaXZhdGU7 CiAJc3RydWN0IHRlZ3JhX2JvICpibyA9IHRvX3RlZ3JhX2JvKGdlbSk7CiAKKwlpZiAodGVncmEt PmRvbWFpbikKKwkJdGVncmFfYm9faW9tbXVfdW5tYXAodGVncmEsIGJvKTsKKwogCWlmIChnZW0t PmltcG9ydF9hdHRhY2gpIHsKIAkJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGdlbS0+aW1wb3J0 X2F0dGFjaCwgYm8tPnNndCwKIAkJCQkJIERNQV9UT19ERVZJQ0UpOwogCQlkcm1fcHJpbWVfZ2Vt X2Rlc3Ryb3koZ2VtLCBOVUxMKTsKIAl9IGVsc2UgewotCQl0ZWdyYV9ib19kZXN0cm95KGdlbS0+ ZGV2LCBibyk7CisJCXRlZ3JhX2JvX2ZyZWUoZ2VtLT5kZXYsIGJvKTsKIAl9CiAKIAlkcm1fZ2Vt X29iamVjdF9yZWxlYXNlKGdlbSk7CkBAIC0zMDMsMTQgKzQ0NCw0NCBAQCBpbnQgdGVncmFfYm9f ZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2Ug KmRybSwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0ZWdyYV9ib19mYXVsdChzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IGRy bV9nZW1fb2JqZWN0ICpnZW0gPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdGVncmFf Ym8gKmJvID0gdG9fdGVncmFfYm8oZ2VtKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlwZ29mZl90 IG9mZnNldDsKKwlpbnQgZXJyOworCisJaWYgKCFiby0+cGFnZXMpCisJCXJldHVybiBWTV9GQVVM VF9TSUdCVVM7CisKKwlvZmZzZXQgPSAoKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJl c3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCXBhZ2UgPSBiby0+cGFnZXNbb2Zm c2V0XTsKKworCWVyciA9IHZtX2luc2VydF9wYWdlKHZtYSwgKHVuc2lnbmVkIGxvbmcpdm1mLT52 aXJ0dWFsX2FkZHJlc3MsIHBhZ2UpOworCXN3aXRjaCAoZXJyKSB7CisJY2FzZSAtRUFHQUlOOgor CWNhc2UgMDoKKwljYXNlIC1FUkVTVEFSVFNZUzoKKwljYXNlIC1FSU5UUjoKKwljYXNlIC1FQlVT WToKKwkJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKKworCWNhc2UgLUVOT01FTToKKwkJcmV0dXJu IFZNX0ZBVUxUX09PTTsKKwl9CisKKwlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworfQorCiBjb25z dCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdGVncmFfYm9fdm1fb3BzID0geworCS5mYXVs dCA9IHRlZ3JhX2JvX2ZhdWx0LAogCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLAogCS5jbG9zZSA9 IGRybV9nZW1fdm1fY2xvc2UsCiB9OwogCiBpbnQgdGVncmFfZHJtX21tYXAoc3RydWN0IGZpbGUg KmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXVuc2lnbmVkIGxvbmcgdm1f cGdvZmYgPSB2bWEtPnZtX3Bnb2ZmOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwogCXN0 cnVjdCB0ZWdyYV9ibyAqYm87CiAJaW50IHJldDsKQEAgLTMyMiwxNyArNDkzLDI4IEBAIGludCB0 ZWdyYV9kcm1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCiAJZ2VtID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJYm8gPSB0b190ZWdyYV9ibyhnZW0p OwogCi0Jdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOwotCXZtYS0+dm1fcGdvZmYgPSAwOwor CWlmICghYm8tPnBhZ2VzKSB7CisJCXVuc2lnbmVkIGxvbmcgdm1fcGdvZmYgPSB2bWEtPnZtX3Bn b2ZmOwogCi0JcmV0ID0gZG1hX21tYXBfd3JpdGVjb21iaW5lKGdlbS0+ZGV2LT5kZXYsIHZtYSwg Ym8tPnZhZGRyLCBiby0+cGFkZHIsCi0JCQkJICAgIGdlbS0+c2l6ZSk7Ci0JaWYgKHJldCkgewot CQlkcm1fZ2VtX3ZtX2Nsb3NlKHZtYSk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCQl2bWEtPnZtX2Zs YWdzICY9IH5WTV9QRk5NQVA7CisJCXZtYS0+dm1fcGdvZmYgPSAwOwogCi0Jdm1hLT52bV9wZ29m ZiA9IHZtX3Bnb2ZmOworCQlyZXQgPSBkbWFfbW1hcF93cml0ZWNvbWJpbmUoZ2VtLT5kZXYtPmRl diwgdm1hLCBiby0+dmFkZHIsCisJCQkJCSAgICBiby0+cGFkZHIsIGdlbS0+c2l6ZSk7CisJCWlm IChyZXQpIHsKKwkJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKwkJCXJldHVybiByZXQ7CisJCX0K KworCQl2bWEtPnZtX3Bnb2ZmID0gdm1fcGdvZmY7CisJfSBlbHNlIHsKKwkJcGdwcm90X3QgcHJv dCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyk7CisKKwkJdm1hLT52bV9mbGFncyB8 PSBWTV9NSVhFRE1BUDsKKwkJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCisJCXZtYS0+ dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZShwcm90KTsKKwl9CiAKIAlyZXR1cm4g MDsKIH0KQEAgLTM0OSwyMSArNTMxLDQ0IEBAIHRlZ3JhX2dlbV9wcmltZV9tYXBfZG1hX2J1Zihz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCiAJaWYgKCFzZ3QpCiAJCXJldHVybiBO VUxMOwogCi0JaWYgKHNnX2FsbG9jX3RhYmxlKHNndCwgMSwgR0ZQX0tFUk5FTCkpIHsKLQkJa2Zy ZWUoc2d0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChiby0+cGFnZXMpIHsKKwkJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZzsKKwkJdW5zaWduZWQgaW50IGk7CisKKwkJaWYgKHNnX2FsbG9jX3Rh YmxlKHNndCwgYm8tPm51bV9wYWdlcywgR0ZQX0tFUk5FTCkpCisJCQlnb3RvIGZyZWU7CiAKLQlz Z19kbWFfYWRkcmVzcyhzZ3QtPnNnbCkgPSBiby0+cGFkZHI7Ci0Jc2dfZG1hX2xlbihzZ3QtPnNn bCkgPSBnZW0tPnNpemU7CisJCWZvcl9lYWNoX3NnKHNndC0+c2dsLCBzZywgYm8tPm51bV9wYWdl cywgaSkKKwkJCXNnX3NldF9wYWdlKHNnLCBiby0+cGFnZXNbaV0sIFBBR0VfU0laRSwgMCk7CisK KwkJaWYgKGRtYV9tYXBfc2coYXR0YWNoLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLCBkaXIp ID09IDApCisJCQlnb3RvIGZyZWU7CisJfSBlbHNlIHsKKwkJaWYgKHNnX2FsbG9jX3RhYmxlKHNn dCwgMSwgR0ZQX0tFUk5FTCkpCisJCQlnb3RvIGZyZWU7CisKKwkJc2dfZG1hX2FkZHJlc3Moc2d0 LT5zZ2wpID0gYm8tPnBhZGRyOworCQlzZ19kbWFfbGVuKHNndC0+c2dsKSA9IGdlbS0+c2l6ZTsK Kwl9CiAKIAlyZXR1cm4gc2d0OworCitmcmVlOgorCXNnX2ZyZWVfdGFibGUoc2d0KTsKKwlrZnJl ZShzZ3QpOworCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCB0ZWdyYV9nZW1fcHJpbWVf dW5tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCiAJCQkJCSAg c3RydWN0IHNnX3RhYmxlICpzZ3QsCiAJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGly KQogeworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtID0gYXR0YWNoLT5kbWFidWYtPnByaXY7 CisJc3RydWN0IHRlZ3JhX2JvICpibyA9IHRvX3RlZ3JhX2JvKGdlbSk7CisKKwlpZiAoYm8tPnBh Z2VzKQorCQlkbWFfdW5tYXBfc2coYXR0YWNoLT5kZXYsIHNndC0+c2dsLCBzZ3QtPm5lbnRzLCBk aXIpOworCiAJc2dfZnJlZV90YWJsZShzZ3QpOwogCWtmcmVlKHNndCk7CiB9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2Vt LmgKaW5kZXggNjUzOGI1Njc4MGMyLi4zZGQ0MTY1ZjgxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS90ZWdyYS9nZW0uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmgKQEAg LTM4LDYgKzM4LDEyIEBAIHN0cnVjdCB0ZWdyYV9ibyB7CiAJZG1hX2FkZHJfdCBwYWRkcjsKIAl2 b2lkICp2YWRkcjsKIAorCXN0cnVjdCBkcm1fbW1fbm9kZSAqbW07CisJdW5zaWduZWQgbG9uZyBu dW1fcGFnZXM7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwkvKiBzaXplIG9mIElPTU1VIG1hcHBp bmcgKi8KKwlzaXplX3Qgc2l6ZTsKKwogCXN0cnVjdCB0ZWdyYV9ib190aWxpbmcgdGlsaW5nOwog fTsKIAotLSAKMi4xLjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==