From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v5 11/17] drm/tegra: Add IOMMU support Date: Mon, 3 Nov 2014 10:27:42 +0100 Message-ID: <1415006868-318-11-git-send-email-thierry.reding@gmail.com> References: <1415006868-318-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-pd0-f176.google.com (mail-pd0-f176.google.com [209.85.192.176]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F3876E481 for ; Mon, 3 Nov 2014 01:28:50 -0800 (PST) Received: by mail-pd0-f176.google.com with SMTP id ft15so11153198pdb.35 for ; Mon, 03 Nov 2014 01:28:50 -0800 (PST) In-Reply-To: <1415006868-318-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: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCldoZW4gYW4gSU9NTVUg ZGV2aWNlIGlzIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0gYnVzLCBhbGxvY2F0ZSBhbiBJT01N VQpkb21haW4gYW5kIGF0dGFjaCB0aGUgZGlzcGxheSBjb250cm9sbGVycyB0byBpdC4gVGhlIGRp c3BsYXkgY29udHJvbGxlcnMKY2FuIHRoZW4gc2NhbiBvdXQgbm9uLWNvbnRpZ3VvdXMgYnVmZmVy cyBieSBtYXBwaW5nIHRoZW0gdGhyb3VnaCB0aGUKSU9NTVUuCgpTaWduZWQtb2ZmLWJ5OiBUaGll cnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgotLS0KQ2hhbmdlcyBpbiB2NToKLSBmaXgg UFJJTUUgZXhwb3J0IG9mIHBoeXNpY2FsbHkgbm9uLWNvbnRpZ3VvdXMgYnVmZmVycwotIHJlZmFj dG9yIGFuZCBmaXggZXJyb3IgY2xlYW51cCBwYXRocwotIGZpeCBjaGVja2luZyBmb3IgZmFpbGVk IGFsbG9jYXRpb25zCi0gZml4IGJ1aWxkIHdhcm5pbmdzIG9uIDY0LWJpdAoKQ2hhbmdlcyBpbiB2 NDoKLSBlcnJvciBvdXQgaWYgSU9NTVUgYXR0YWNobWVudCBmYWlscwoKQ2hhbmdlcyBpbiB2MzoK LSBjcmVhdGUgd3JpdGUtY29tYmluZWQgbWFwcGluZ3MgZm9yIG1tYXAoKQotIGtlZXAgbm9uLUlP TU1VIGZhbGxiYWNrIHBhdGggd29ya2luZwotIG5vIGxvbmdlciByZWx5IG9uIGlvbW11X2F0dGFj aCgpCgpDaGFuZ2VzIGluIHYyOgotIGRvbid0IHBhc3MgR0ZQX0tFUk5FTCB0byBkcm1fZ2VtX2dl dF9wYWdlcygpCgogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMgIHwgIDE3ICsrKwogZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL2RybS5jIHwgIDE4ICsrKwogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2Ry bS5oIHwgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5jICB8ICAxNiArKy0KIGRyaXZl cnMvZ3B1L2RybS90ZWdyYS9nZW0uYyB8IDI3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLQogZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5oIHwgICA2ICsKIDYg ZmlsZXMgY2hhbmdlZCwgMzAyIGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2RjLmMKaW5kZXggNGRhMzY2YTRkNzhhLi5hMWU3OTYyY2NiZTIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9kYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jCkBA IC05LDYgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgv ZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVz ZXQuaD4KIAogI2luY2x1ZGUgPHNvYy90ZWdyYS9wbWMuaD4KQEAgLTEyODcsNiArMTI4OCwxNyBA QCBzdGF0aWMgaW50IHRlZ3JhX2RjX2luaXQoc3RydWN0IGhvc3QxeF9jbGllbnQgKmNsaWVudCkK IAlzdHJ1Y3QgdGVncmFfZHJtICp0ZWdyYSA9IGRybS0+ZGV2X3ByaXZhdGU7CiAJaW50IGVycjsK IAorCWlmICh0ZWdyYS0+ZG9tYWluKSB7CisJCWVyciA9IGlvbW11X2F0dGFjaF9kZXZpY2UodGVn cmEtPmRvbWFpbiwgZGMtPmRldik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGRjLT5k ZXYsICJmYWlsZWQgdG8gYXR0YWNoIHRvIGRvbWFpbjogJWRcbiIsCisJCQkJZXJyKTsKKwkJCXJl dHVybiBlcnI7CisJCX0KKworCQlkYy0+ZG9tYWluID0gdGVncmEtPmRvbWFpbjsKKwl9CisKIAlk cm1fY3J0Y19pbml0KGRybSwgJmRjLT5iYXNlLCAmdGVncmFfY3J0Y19mdW5jcyk7CiAJZHJtX21v ZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZSgmZGMtPmJhc2UsIDI1Nik7CiAJZHJtX2NydGNfaGVscGVy X2FkZCgmZGMtPmJhc2UsICZ0ZWdyYV9jcnRjX2hlbHBlcl9mdW5jcyk7CkBAIC0xMzQ0LDYgKzEz NTYsMTEgQEAgc3RhdGljIGludCB0ZWdyYV9kY19leGl0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpj bGllbnQpCiAJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKGRjLT5kb21haW4pIHsKKwkJaW9tbXVf ZGV0YWNoX2RldmljZShkYy0+ZG9tYWluLCBkYy0+ZGV2KTsKKwkJZGMtPmRvbWFpbiA9IE5VTEw7 CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYwppbmRleCA1OTczNmJiODEwY2Qu LmNlNTEyM2MyYzNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYwpAQCAtOCw2ICs4LDcgQEAKICAqLwogCiAj aW5jbHVkZSA8bGludXgvaG9zdDF4Lmg+CisjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KIAogI2lu Y2x1ZGUgImRybS5oIgogI2luY2x1ZGUgImdlbS5oIgpAQCAtMzMsNiArMzQsMTcgQEAgc3RhdGlj IGludCB0ZWdyYV9kcm1fbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25n IGZsYWdzKQogCWlmICghdGVncmEpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKGlvbW11X3By ZXNlbnQoJnBsYXRmb3JtX2J1c190eXBlKSkgeworCQl0ZWdyYS0+ZG9tYWluID0gaW9tbXVfZG9t YWluX2FsbG9jKCZwbGF0Zm9ybV9idXNfdHlwZSk7CisJCWlmIChJU19FUlIodGVncmEtPmRvbWFp bikpIHsKKwkJCWtmcmVlKHRlZ3JhKTsKKwkJCXJldHVybiBQVFJfRVJSKHRlZ3JhLT5kb21haW4p OworCQl9CisKKwkJRFJNX0RFQlVHKCJJT01NVSBjb250ZXh0IGluaXRpYWxpemVkXG4iKTsKKwkJ ZHJtX21tX2luaXQoJnRlZ3JhLT5tbSwgMCwgU1pfMkcpOworCX0KKwogCW11dGV4X2luaXQoJnRl Z3JhLT5jbGllbnRzX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ0ZWdyYS0+Y2xpZW50cyk7CiAJ ZHJtLT5kZXZfcHJpdmF0ZSA9IHRlZ3JhOwpAQCAtNzEsNiArODMsNyBAQCBzdGF0aWMgaW50IHRl Z3JhX2RybV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGxvbmcgZmxhZ3Mp CiBzdGF0aWMgaW50IHRlZ3JhX2RybV91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKIHsK IAlzdHJ1Y3QgaG9zdDF4X2RldmljZSAqZGV2aWNlID0gdG9faG9zdDF4X2RldmljZShkcm0tPmRl dik7CisJc3RydWN0IHRlZ3JhX2RybSAqdGVncmEgPSBkcm0tPmRldl9wcml2YXRlOwogCWludCBl cnI7CiAKIAlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKQEAgLTgyLDYgKzk1LDExIEBA IHN0YXRpYyBpbnQgdGVncmFfZHJtX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQogCWlm IChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKHRlZ3JhLT5kb21haW4pIHsKKwkJaW9t bXVfZG9tYWluX2ZyZWUodGVncmEtPmRvbWFpbik7CisJCWRybV9tbV90YWtlZG93bigmdGVncmEt Pm1tKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3RlZ3JhL2RybS5oIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5oCmluZGV4IGI5OTRjMDE3 OTcxZC4uMmZkYWU0MDRlNzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHJt LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5oCkBAIC0zOSw2ICszOSw5IEBAIHN0 cnVjdCB0ZWdyYV9mYmRldiB7CiBzdHJ1Y3QgdGVncmFfZHJtIHsKIAlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtOwogCisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBkcm1fbW0g bW07CisKIAlzdHJ1Y3QgbXV0ZXggY2xpZW50c19sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgY2xp ZW50czsKIApAQCAtMTIxLDYgKzEyNCw4IEBAIHN0cnVjdCB0ZWdyYV9kYyB7CiAJc3RydWN0IGRy bV9wZW5kaW5nX3ZibGFua19ldmVudCAqZXZlbnQ7CiAKIAljb25zdCBzdHJ1Y3QgdGVncmFfZGNf c29jX2luZm8gKnNvYzsKKworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKIH07CiAKIHN0 YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX2RjICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS90ZWdyYS9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2ZiLmMKaW5kZXggMzUxM2QxMmQ1 YWExLi5jNWZhM2M0YjJlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5jCkBAIC02NSw4ICs2NSwxMiBAQCBzdGF0 aWMgdm9pZCB0ZWdyYV9mYl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZyYW1lYnVm ZmVyKQogCWZvciAoaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsgaSsrKSB7CiAJCXN0cnVjdCB0 ZWdyYV9ibyAqYm8gPSBmYi0+cGxhbmVzW2ldOwogCi0JCWlmIChibykKKwkJaWYgKGJvKSB7CisJ CQlpZiAoYm8tPnBhZ2VzICYmIGJvLT52YWRkcikKKwkJCQl2dW5tYXAoYm8tPnZhZGRyKTsKKwog CQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJmJvLT5nZW0pOworCQl9CiAJ fQogCiAJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZnJhbWVidWZmZXIpOwpAQCAtMjU0LDYgKzI1 OCwxNiBAQCBzdGF0aWMgaW50IHRlZ3JhX2ZiZGV2X3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpoZWxwZXIsCiAJb2Zmc2V0ID0gaW5mby0+dmFyLnhvZmZzZXQgKiBieXRlc19wZXJfcGl4ZWwg KwogCQkgaW5mby0+dmFyLnlvZmZzZXQgKiBmYi0+cGl0Y2hlc1swXTsKIAorCWlmIChiby0+cGFn ZXMpIHsKKwkJYm8tPnZhZGRyID0gdm1hcChiby0+cGFnZXMsIGJvLT5udW1fcGFnZXMsIFZNX01B UCwKKwkJCQkgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOworCQlpZiAoIWJvLT52 YWRkcikgeworCQkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byB2bWFwKCkgZnJhbWVidWZm ZXJcbiIpOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZGVzdHJveTsKKwkJfQorCX0KKwog CWRybS0+bW9kZV9jb25maWcuZmJfYmFzZSA9IChyZXNvdXJjZV9zaXplX3QpYm8tPnBhZGRyOwog CWluZm8tPnNjcmVlbl9iYXNlID0gKHZvaWQgX19pb21lbSAqKWJvLT52YWRkciArIG9mZnNldDsK IAlpbmZvLT5zY3JlZW5fc2l6ZSA9IHNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dGVncmEvZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKaW5kZXggYjUxM2RmMzNm MTdhLi44YjEwOTVkMDVjNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9nZW0u YworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZ2VtLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAq LwogCiAjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+ CiAjaW5jbHVkZSA8ZHJtL3RlZ3JhX2RybS5oPgogCiAjaW5jbHVkZSAiZHJtLmgiCkBAIC05MSw2 ICs5Miw4OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGhvc3QxeF9ib19vcHMgdGVncmFfYm9fb3Bz ID0gewogCS5rdW5tYXAgPSB0ZWdyYV9ib19rdW5tYXAsCiB9OwogCisvKgorICogQSBnZW5lcmlj IGlvbW11X21hcF9zZygpIGZ1bmN0aW9uIGlzIGJlaW5nIHJldmlld2VkIGFuZCB3aWxsIGhvcGVm dWxseSBiZQorICogbWVyZ2VkIHNvb24uIEF0IHRoYXQgcG9pbnQgdGhpcyBmdW5jdGlvbiBjYW4g YmUgZHJvcHBlZCBpbiBmYXZvdXIgb2YgdGhlCisgKiBvbmUgcHJvdmlkZWQgYnkgdGhlIElPTU1V IEFQSS4KKyAqLworc3RhdGljIHNzaXplX3QgX19pb21tdV9tYXBfc2coc3RydWN0IGlvbW11X2Rv bWFpbiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIGlvdmEsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMsCisJCQkgICAgICBpbnQgcHJvdCkKK3sKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJc2l6ZV90IG9mZnNldCA9IDA7CisJdW5zaWduZWQgaW50 IGk7CisJaW50IGVycjsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgeworCQlwaHlz X2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHNnX3BhZ2UocykpOworCQlzaXplX3QgbGVuZ3Ro ID0gcy0+b2Zmc2V0ICsgcy0+bGVuZ3RoOworCisJCWVyciA9IGlvbW11X21hcChkb21haW4sIGlv dmEgKyBvZmZzZXQsIHBoeXMsIGxlbmd0aCwgcHJvdCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlp b21tdV91bm1hcChkb21haW4sIGlvdmEsIG9mZnNldCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisK KwkJb2Zmc2V0ICs9IGxlbmd0aDsKKwl9CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMg aW50IHRlZ3JhX2JvX2lvbW11X21hcChzdHJ1Y3QgdGVncmFfZHJtICp0ZWdyYSwgc3RydWN0IHRl Z3JhX2JvICpibykKK3sKKwlpbnQgcHJvdCA9IElPTU1VX1JFQUQgfCBJT01NVV9XUklURTsKKwlz c2l6ZV90IGVycjsKKworCWlmIChiby0+bW0pCisJCXJldHVybiAtRUJVU1k7CisKKwliby0+bW0g PSBremFsbG9jKHNpemVvZigqYm8tPm1tKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiby0+bW0pCisJ CXJldHVybiAtRU5PTUVNOworCisJZXJyID0gZHJtX21tX2luc2VydF9ub2RlX2dlbmVyaWMoJnRl Z3JhLT5tbSwgYm8tPm1tLCBiby0+Z2VtLnNpemUsCisJCQkJCSBQQUdFX1NJWkUsIDAsIDAsIDAp OworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIodGVncmEtPmRybS0+ZGV2LCAib3V0IG9mIEkv TyB2aXJ0dWFsIG1lbW9yeTogJXpkXG4iLAorCQkJZXJyKTsKKwkJZ290byBmcmVlOworCX0KKwor CWJvLT5wYWRkciA9IGJvLT5tbS0+c3RhcnQ7CisKKwllcnIgPSBfX2lvbW11X21hcF9zZyh0ZWdy YS0+ZG9tYWluLCBiby0+cGFkZHIsIGJvLT5zZ3QtPnNnbCwKKwkJCSAgICAgYm8tPnNndC0+bmVu dHMsIHByb3QpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIodGVncmEtPmRybS0+ZGV2LCAi ZmFpbGVkIHRvIG1hcCBidWZmZXI6ICV6ZFxuIiwgZXJyKTsKKwkJZ290byByZW1vdmU7CisJfQor CisJYm8tPnNpemUgPSBlcnI7CisKKwlyZXR1cm4gMDsKKworcmVtb3ZlOgorCWRybV9tbV9yZW1v dmVfbm9kZShiby0+bW0pOworZnJlZToKKwlrZnJlZShiby0+bW0pOworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbnQgdGVncmFfYm9faW9tbXVfdW5tYXAoc3RydWN0IHRlZ3JhX2RybSAqdGVn cmEsIHN0cnVjdCB0ZWdyYV9ibyAqYm8pCit7CisJaWYgKCFiby0+bW0pCisJCXJldHVybiAwOwor CisJaW9tbXVfdW5tYXAodGVncmEtPmRvbWFpbiwgYm8tPnBhZGRyLCBiby0+c2l6ZSk7CisJZHJt X21tX3JlbW92ZV9ub2RlKGJvLT5tbSk7CisJa2ZyZWUoYm8tPm1tKTsKKworCXJldHVybiAwOwor fQorCiBzdGF0aWMgc3RydWN0IHRlZ3JhX2JvICp0ZWdyYV9ib19hbGxvY19vYmplY3Qoc3RydWN0 IGRybV9kZXZpY2UgKmRybSwKIAkJCQkJICAgICAgc2l6ZV90IHNpemUpCiB7CkBAIC0xMjEsOSAr MjA0LDY0IEBAIGZyZWU6CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAotc3RhdGljIHZvaWQg dGVncmFfYm9fZGVzdHJveShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfYm8g KmJvKQorc3RhdGljIHZvaWQgdGVncmFfYm9fZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBz dHJ1Y3QgdGVncmFfYm8gKmJvKQogewotCWRtYV9mcmVlX3dyaXRlY29tYmluZShkcm0tPmRldiwg Ym8tPmdlbS5zaXplLCBiby0+dmFkZHIsIGJvLT5wYWRkcik7CisJaWYgKGJvLT5wYWdlcykgewor CQlkcm1fZ2VtX3B1dF9wYWdlcygmYm8tPmdlbSwgYm8tPnBhZ2VzLCB0cnVlLCB0cnVlKTsKKwkJ c2dfZnJlZV90YWJsZShiby0+c2d0KTsKKwkJa2ZyZWUoYm8tPnNndCk7CisJfSBlbHNlIHsKKwkJ ZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGRybS0+ZGV2LCBiby0+Z2VtLnNpemUsIGJvLT52YWRkciwK KwkJCQkgICAgICBiby0+cGFkZHIpOworCX0KK30KKworc3RhdGljIGludCB0ZWdyYV9ib19nZXRf cGFnZXMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3JhX2JvICpibywKKwkJCSAg ICAgIHNpemVfdCBzaXplKQoreworCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKCZiby0+ Z2VtKTsKKwlpZiAoSVNfRVJSKGJvLT5wYWdlcykpCisJCXJldHVybiBQVFJfRVJSKGJvLT5wYWdl cyk7CisKKwliby0+bnVtX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCisJYm8tPnNndCA9 IGRybV9wcmltZV9wYWdlc190b19zZyhiby0+cGFnZXMsIGJvLT5udW1fcGFnZXMpOworCWlmIChJ U19FUlIoYm8tPnNndCkpIHsKKwkJZHJtX2dlbV9wdXRfcGFnZXMoJmJvLT5nZW0sIGJvLT5wYWdl cywgZmFsc2UsIGZhbHNlKTsKKwkJcmV0dXJuIFBUUl9FUlIoYm8tPnNndCk7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfYm9fYWxsb2Moc3RydWN0IGRybV9kZXZpY2Ug KmRybSwgc3RydWN0IHRlZ3JhX2JvICpibywKKwkJCSAgc2l6ZV90IHNpemUpCit7CisJc3RydWN0 IHRlZ3JhX2RybSAqdGVncmEgPSBkcm0tPmRldl9wcml2YXRlOworCWludCBlcnI7CisKKwlpZiAo dGVncmEtPmRvbWFpbikgeworCQllcnIgPSB0ZWdyYV9ib19nZXRfcGFnZXMoZHJtLCBibywgc2l6 ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSB0ZWdyYV9ib19p b21tdV9tYXAodGVncmEsIGJvKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXRlZ3JhX2JvX2ZyZWUo ZHJtLCBibyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJYm8tPnZhZGRyID0g ZG1hX2FsbG9jX3dyaXRlY29tYmluZShkcm0tPmRldiwgc2l6ZSwgJmJvLT5wYWRkciwKKwkJCQkJ CSAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOworCQlpZiAoIWJvLT52YWRkcikgeworCQkJ ZGV2X2Vycihkcm0tPmRldiwKKwkJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBvZiBzaXpl ICV6dVxuIiwKKwkJCQlzaXplKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJcmV0 dXJuIDA7CiB9CiAKIHN0cnVjdCB0ZWdyYV9ibyAqdGVncmFfYm9fY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBzaXplLApAQCAtMTM2LDE0ICsyNzQsOSBAQCBzdHJ1 Y3QgdGVncmFfYm8gKnRlZ3JhX2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNp Z25lZCBpbnQgc2l6ZSwKIAlpZiAoSVNfRVJSKGJvKSkKIAkJcmV0dXJuIGJvOwogCi0JYm8tPnZh ZGRyID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZShkcm0tPmRldiwgc2l6ZSwgJmJvLT5wYWRkciwK LQkJCQkJICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7Ci0JaWYgKCFiby0+dmFkZHIpIHsK LQkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgd2l0aCBzaXpl ICV1XG4iLAotCQkJc2l6ZSk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2RtYTsKLQl9 CisJZXJyID0gdGVncmFfYm9fYWxsb2MoZHJtLCBibywgc2l6ZSk7CisJaWYgKGVyciA8IDApCisJ CWdvdG8gcmVsZWFzZTsKIAogCWlmIChmbGFncyAmIERSTV9URUdSQV9HRU1fQ1JFQVRFX1RJTEVE KQogCQliby0+dGlsaW5nLm1vZGUgPSBURUdSQV9CT19USUxJTkdfTU9ERV9USUxFRDsKQEAgLTE1 MywxMyArMjg2LDkgQEAgc3RydWN0IHRlZ3JhX2JvICp0ZWdyYV9ib19jcmVhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHNpemUsCiAKIAlyZXR1cm4gYm87CiAKLWVycl9t bWFwOgorcmVsZWFzZToKIAlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZiby0+Z2VtKTsKLWVycl9p bml0OgotCXRlZ3JhX2JvX2Rlc3Ryb3koZHJtLCBibyk7Ci1lcnJfZG1hOgogCWtmcmVlKGJvKTsK LQogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKQEAgLTE5MCw2ICszMTksNyBAQCBzdHJ1Y3Qg dGVncmFfYm8gKnRlZ3JhX2JvX2NyZWF0ZV93aXRoX2hhbmRsZShzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUsCiBzdGF0aWMgc3RydWN0IHRlZ3JhX2JvICp0ZWdyYV9ib19pbXBvcnQoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwKIAkJCQkJc3RydWN0IGRtYV9idWYgKmJ1ZikKIHsKKwlzdHJ1Y3QgdGVncmFf ZHJtICp0ZWdyYSA9IGRybS0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoOwogCXN0cnVjdCB0ZWdyYV9ibyAqYm87CiAJaW50IGVycjsKQEAgLTIxNywxMiAr MzQ3LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgdGVncmFfYm8gKnRlZ3JhX2JvX2ltcG9ydChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLAogCQlnb3RvIGRldGFjaDsKIAl9CiAKLQlpZiAoYm8tPnNndC0+bmVu dHMgPiAxKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZGV0YWNoOworCWlmICh0ZWdyYS0+ ZG9tYWluKSB7CisJCWVyciA9IHRlZ3JhX2JvX2lvbW11X21hcCh0ZWdyYSwgYm8pOworCQlpZiAo ZXJyIDwgMCkKKwkJCWdvdG8gZGV0YWNoOworCX0gZWxzZSB7CisJCWlmIChiby0+c2d0LT5uZW50 cyA+IDEpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGRldGFjaDsKKwkJfQorCisJCWJv LT5wYWRkciA9IHNnX2RtYV9hZGRyZXNzKGJvLT5zZ3QtPnNnbCk7CiAJfQogCi0JYm8tPnBhZGRy ID0gc2dfZG1hX2FkZHJlc3MoYm8tPnNndC0+c2dsKTsKIAliby0+Z2VtLmltcG9ydF9hdHRhY2gg PSBhdHRhY2g7CiAKIAlyZXR1cm4gYm87CkBAIC0yNDEsMTQgKzM3OCwxOCBAQCBmcmVlOgogCiB2 b2lkIHRlZ3JhX2JvX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKQogewor CXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZ2VtLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVj dCB0ZWdyYV9ibyAqYm8gPSB0b190ZWdyYV9ibyhnZW0pOwogCisJaWYgKHRlZ3JhLT5kb21haW4p CisJCXRlZ3JhX2JvX2lvbW11X3VubWFwKHRlZ3JhLCBibyk7CisKIAlpZiAoZ2VtLT5pbXBvcnRf YXR0YWNoKSB7CiAJCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChnZW0tPmltcG9ydF9hdHRhY2gs IGJvLT5zZ3QsCiAJCQkJCSBETUFfVE9fREVWSUNFKTsKIAkJZHJtX3ByaW1lX2dlbV9kZXN0cm95 KGdlbSwgTlVMTCk7CiAJfSBlbHNlIHsKLQkJdGVncmFfYm9fZGVzdHJveShnZW0tPmRldiwgYm8p OworCQl0ZWdyYV9ib19mcmVlKGdlbS0+ZGV2LCBibyk7CiAJfQogCiAJZHJtX2dlbV9vYmplY3Rf cmVsZWFzZShnZW0pOwpAQCAtMzAzLDE0ICs0NDQsNDQgQEAgaW50IHRlZ3JhX2JvX2R1bWJfbWFw X29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCiAJ cmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdGVncmFfYm9fZmF1bHQoc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqZ2VtID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IHRlZ3JhX2JvICpibyA9 IHRvX3RlZ3JhX2JvKGdlbSk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBvZmZzZXQ7 CisJaW50IGVycjsKKworCWlmICghYm8tPnBhZ2VzKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVT OworCisJb2Zmc2V0ID0gKCh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0gdm1h LT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwlwYWdlID0gYm8tPnBhZ2VzW29mZnNldF07CisK KwllcnIgPSB2bV9pbnNlcnRfcGFnZSh2bWEsICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9h ZGRyZXNzLCBwYWdlKTsKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgLUVBR0FJTjoKKwljYXNlIDA6 CisJY2FzZSAtRVJFU1RBUlRTWVM6CisJY2FzZSAtRUlOVFI6CisJY2FzZSAtRUJVU1k6CisJCXJl dHVybiBWTV9GQVVMVF9OT1BBR0U7CisKKwljYXNlIC1FTk9NRU06CisJCXJldHVybiBWTV9GQVVM VF9PT007CisJfQorCisJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKK30KKwogY29uc3Qgc3RydWN0 IHZtX29wZXJhdGlvbnNfc3RydWN0IHRlZ3JhX2JvX3ZtX29wcyA9IHsKKwkuZmF1bHQgPSB0ZWdy YV9ib19mYXVsdCwKIAkub3BlbiA9IGRybV9nZW1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fZ2Vt X3ZtX2Nsb3NlLAogfTsKIAogaW50IHRlZ3JhX2RybV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQl1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmID0g dm1hLT52bV9wZ29mZjsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKIAlzdHJ1Y3QgdGVn cmFfYm8gKmJvOwogCWludCByZXQ7CkBAIC0zMjIsMTcgKzQ5MywyOCBAQCBpbnQgdGVncmFfZHJt X21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCWdl bSA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCWJvID0gdG9fdGVncmFfYm8oZ2VtKTsKIAotCXZt YS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKLQl2bWEtPnZtX3Bnb2ZmID0gMDsKKwlpZiAoIWJv LT5wYWdlcykgeworCQl1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmID0gdm1hLT52bV9wZ29mZjsKIAot CXJldCA9IGRtYV9tbWFwX3dyaXRlY29tYmluZShnZW0tPmRldi0+ZGV2LCB2bWEsIGJvLT52YWRk ciwgYm8tPnBhZGRyLAotCQkJCSAgICBnZW0tPnNpemUpOwotCWlmIChyZXQpIHsKLQkJZHJtX2dl bV92bV9jbG9zZSh2bWEpOwotCQlyZXR1cm4gcmV0OwotCX0KKwkJdm1hLT52bV9mbGFncyAmPSB+ Vk1fUEZOTUFQOworCQl2bWEtPnZtX3Bnb2ZmID0gMDsKIAotCXZtYS0+dm1fcGdvZmYgPSB2bV9w Z29mZjsKKwkJcmV0ID0gZG1hX21tYXBfd3JpdGVjb21iaW5lKGdlbS0+ZGV2LT5kZXYsIHZtYSwg Ym8tPnZhZGRyLAorCQkJCQkgICAgYm8tPnBhZGRyLCBnZW0tPnNpemUpOworCQlpZiAocmV0KSB7 CisJCQlkcm1fZ2VtX3ZtX2Nsb3NlKHZtYSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJdm1h LT52bV9wZ29mZiA9IHZtX3Bnb2ZmOworCX0gZWxzZSB7CisJCXBncHJvdF90IHByb3QgPSB2bV9n ZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpOworCisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTUlY RURNQVA7CisJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKKworCQl2bWEtPnZtX3BhZ2Vf cHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUocHJvdCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBA IC0zNDksMjEgKzUzMSw0NCBAQCB0ZWdyYV9nZW1fcHJpbWVfbWFwX2RtYV9idWYoc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAogCWlmICghc2d0KQogCQlyZXR1cm4gTlVMTDsKIAot CWlmIChzZ19hbGxvY190YWJsZShzZ3QsIDEsIEdGUF9LRVJORUwpKSB7Ci0JCWtmcmVlKHNndCk7 Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoYm8tPnBhZ2VzKSB7CisJCXN0cnVjdCBzY2F0dGVy bGlzdCAqc2c7CisJCXVuc2lnbmVkIGludCBpOworCisJCWlmIChzZ19hbGxvY190YWJsZShzZ3Qs IGJvLT5udW1fcGFnZXMsIEdGUF9LRVJORUwpKQorCQkJZ290byBmcmVlOwogCi0Jc2dfZG1hX2Fk ZHJlc3Moc2d0LT5zZ2wpID0gYm8tPnBhZGRyOwotCXNnX2RtYV9sZW4oc2d0LT5zZ2wpID0gZ2Vt LT5zaXplOworCQlmb3JfZWFjaF9zZyhzZ3QtPnNnbCwgc2csIGJvLT5udW1fcGFnZXMsIGkpCisJ CQlzZ19zZXRfcGFnZShzZywgYm8tPnBhZ2VzW2ldLCBQQUdFX1NJWkUsIDApOworCisJCWlmIChk bWFfbWFwX3NnKGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywgZGlyKSA9PSAwKQor CQkJZ290byBmcmVlOworCX0gZWxzZSB7CisJCWlmIChzZ19hbGxvY190YWJsZShzZ3QsIDEsIEdG UF9LRVJORUwpKQorCQkJZ290byBmcmVlOworCisJCXNnX2RtYV9hZGRyZXNzKHNndC0+c2dsKSA9 IGJvLT5wYWRkcjsKKwkJc2dfZG1hX2xlbihzZ3QtPnNnbCkgPSBnZW0tPnNpemU7CisJfQogCiAJ cmV0dXJuIHNndDsKKworZnJlZToKKwlzZ19mcmVlX3RhYmxlKHNndCk7CisJa2ZyZWUoc2d0KTsK KwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgdGVncmFfZ2VtX3ByaW1lX3VubWFwX2Rt YV9idWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAogCQkJCQkgIHN0cnVjdCBz Z190YWJsZSAqc2d0LAogCQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSA9IGF0dGFjaC0+ZG1hYnVmLT5wcml2OworCXN0cnVj dCB0ZWdyYV9ibyAqYm8gPSB0b190ZWdyYV9ibyhnZW0pOworCisJaWYgKGJvLT5wYWdlcykKKwkJ ZG1hX3VubWFwX3NnKGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywgZGlyKTsKKwog CXNnX2ZyZWVfdGFibGUoc2d0KTsKIAlrZnJlZShzZ3QpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5oCmluZGV4 IDY1MzhiNTY3ODBjMi4uM2RkNDE2NWY4MTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dGVncmEvZ2VtLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2dlbS5oCkBAIC0zOCw2ICsz OCwxMiBAQCBzdHJ1Y3QgdGVncmFfYm8gewogCWRtYV9hZGRyX3QgcGFkZHI7CiAJdm9pZCAqdmFk ZHI7CiAKKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm1tOworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2Vz OworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJLyogc2l6ZSBvZiBJT01NVSBtYXBwaW5nICovCisJ c2l6ZV90IHNpemU7CisKIAlzdHJ1Y3QgdGVncmFfYm9fdGlsaW5nIHRpbGluZzsKIH07CiAKLS0g CjIuMS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=