From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 3/7] iommu/arm-smmu: Add support for TTBR1 Date: Tue, 7 Mar 2017 09:39:51 -0700 Message-ID: <1488904795-870-4-git-send-email-jcrouse@codeaurora.org> References: <1488904795-870-1-git-send-email-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488904795-870-1-git-send-email-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: iommu@lists.linux-foundation.org QWxsb3cgYSBTTU1VIGRldmljZSB0byBvcHQgaW50byBhbGxvY2F0aW5nIGEgVFRCUjEgcGFnZXRh YmxlLgoKVGhlIHNpemUgb2YgdGhlIFRUQlIxIHJlZ2lvbiB3aWxsIGJlIHRoZSBzYW1lIGFzCnRo ZSBUVEJSMCBzaXplIHdpdGggdGhlIHNpZ24gZXh0ZW5zaW9uIGJpdCBzZXQgb24gdGhlIGhpZ2hl c3QKYml0IGluIHRoZSByZWdpb24gdW5sZXNzIHRoZSB1cHN0cmVhbSBzaXplIGlzIDQ5IGJpdHMg YW5kIHRoZW4KdGhlIHNpZ24tZXh0ZW5zaW9uIGJpdCB3aWxsIGJlIHNldCBvbiB0aGUgNDl0aCBi aXQuCgpUaGUgbWFwL3VubWFwIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUg YXBwcm9wcmlhdGUKcGFnZXRhYmxlIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgaW92YSBhbmQgdGhl IGV4aXN0aW5nIG1hc2suCgpTaWduZWQtb2ZmLWJ5OiBKb3JkYW4gQ3JvdXNlIDxqY3JvdXNlQGNv ZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyAgICAgICB8ICAxOSAr KysrLQogZHJpdmVycy9pb21tdS9pby1wZ3RhYmxlLWFybS5jIHwgMTY4ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tCiBkcml2ZXJzL2lvbW11L2lvLXBndGFibGUuaCAg ICAgfCAgIDYgKysKIDMgZmlsZXMgY2hhbmdlZCwgMTczIGluc2VydGlvbnMoKyksIDIwIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUuYwppbmRleCBjNDdmODgzLi4yZTM4NzlmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2lvbW11L2FybS1zbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCkBAIC0y NTYsOSArMjU2LDYgQEAgZW51bSBhcm1fc21tdV9zMmNyX3ByaXZjZmcgewogI2RlZmluZSBSRVNV TUVfUkVUUlkJCQkoMCA8PCAwKQogI2RlZmluZSBSRVNVTUVfVEVSTUlOQVRFCQkoMSA8PCAwKQog Ci0jZGVmaW5lIFRUQkNSMl9TRVBfU0hJRlQJCTE1Ci0jZGVmaW5lIFRUQkNSMl9TRVBfVVBTVFJF QU0JCSgweDcgPDwgVFRCQ1IyX1NFUF9TSElGVCkKLQogI2RlZmluZSBUVEJSbl9BU0lEX1NISUZU CQk0OAogCiAjZGVmaW5lIEZTUl9NVUxUSQkJCSgxIDw8IDMxKQpAQCAtNDE0LDYgKzQxMSw3IEBA IHN0cnVjdCBhcm1fc21tdV9kb21haW4gewogCXN0cnVjdCBhcm1fc21tdV9jZmcJCWNmZzsKIAll bnVtIGFybV9zbW11X2RvbWFpbl9zdGFnZQlzdGFnZTsKIAlzdHJ1Y3QgbXV0ZXgJCQlpbml0X211 dGV4OyAvKiBQcm90ZWN0cyBzbW11IHBvaW50ZXIgKi8KKwl1MzIgYXR0cmlidXRlczsKIAlzdHJ1 Y3QgaW9tbXVfZG9tYWluCQlkb21haW47CiB9OwogCkBAIC04MDMsNyArODAxLDYgQEAgc3RhdGlj IHZvaWQgYXJtX3NtbXVfaW5pdF9jb250ZXh0X2Jhbmsoc3RydWN0IGFybV9zbW11X2RvbWFpbiAq c21tdV9kb21haW4sCiAJCX0gZWxzZSB7CiAJCQlyZWcgPSBwZ3RibF9jZmctPmFybV9scGFlX3Mx X2NmZy50Y3I7CiAJCQlyZWcyID0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMV9jZmcudGNyID4+IDMy OwotCQkJcmVnMiB8PSBUVEJDUjJfU0VQX1VQU1RSRUFNOwogCQl9CiAJCWlmIChzbW11LT52ZXJz aW9uID4gQVJNX1NNTVVfVjEpCiAJCQl3cml0ZWxfcmVsYXhlZChyZWcyLCBjYl9iYXNlICsgQVJN X1NNTVVfQ0JfVFRCQ1IyKTsKQEAgLTg0NCw2ICs4NDEsOSBAQCBzdGF0aWMgaW50IGFybV9zbW11 X2luaXRfZG9tYWluX2NvbnRleHQoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCWVudW0g aW9fcGd0YWJsZV9mbXQgZm10OwogCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWlu ID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKIAlzdHJ1Y3QgYXJtX3NtbXVfY2ZnICpjZmcgPSAm c21tdV9kb21haW4tPmNmZzsKKwl1bnNpZ25lZCBpbnQgcXVpcmtzID0KKwkJc21tdV9kb21haW4t PmF0dHJpYnV0ZXMgJiAoMSA8PCBET01BSU5fQVRUUl9FTkFCTEVfVFRCUjEpID8KKwkJCUlPX1BH VEFCTEVfUVVJUktfQVJNX1RUQlIxIDogMDsKIAogCW11dGV4X2xvY2soJnNtbXVfZG9tYWluLT5p bml0X211dGV4KTsKIAlpZiAoc21tdV9kb21haW4tPnNtbXUpCkBAIC05NTMsNiArOTUzLDcgQEAg c3RhdGljIGludCBhcm1fc21tdV9pbml0X2RvbWFpbl9jb250ZXh0KHN0cnVjdCBpb21tdV9kb21h aW4gKmRvbWFpbiwKIAl9CiAKIAlzbW11X2RvbWFpbi0+cGd0YmxfY2ZnID0gKHN0cnVjdCBpb19w Z3RhYmxlX2NmZykgeworCQkucXVpcmtzCQk9IHF1aXJrcywKIAkJLnBnc2l6ZV9iaXRtYXAJPSBz bW11LT5wZ3NpemVfYml0bWFwLAogCQkuaWFzCQk9IGlhcywKIAkJLm9hcwkJPSBvYXMsCkBAIC0x NTM5LDYgKzE1NDAsMTAgQEAgc3RhdGljIGludCBhcm1fc21tdV9kb21haW5fZ2V0X2F0dHIoc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCWNhc2UgRE9NQUlOX0FUVFJfTkVTVElORzoKIAkJ KihpbnQgKilkYXRhID0gKHNtbXVfZG9tYWluLT5zdGFnZSA9PSBBUk1fU01NVV9ET01BSU5fTkVT VEVEKTsKIAkJcmV0dXJuIDA7CisJY2FzZSBET01BSU5fQVRUUl9FTkFCTEVfVFRCUjE6CisJCSoo KGludCAqKWRhdGEpID0gISEoc21tdV9kb21haW4tPmF0dHJpYnV0ZXMKKwkJCQkJJiAoMSA8PCBE T01BSU5fQVRUUl9FTkFCTEVfVFRCUjEpKTsKKwkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0 dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTU2NSw2ICsxNTcwLDEyIEBAIHN0YXRpYyBpbnQgYXJtX3Nt bXVfZG9tYWluX3NldF9hdHRyKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCXNtbXVf ZG9tYWluLT5zdGFnZSA9IEFSTV9TTU1VX0RPTUFJTl9TMTsKIAogCQlicmVhazsKKwljYXNlIERP TUFJTl9BVFRSX0VOQUJMRV9UVEJSMToKKwkJaWYgKCooKGludCAqKWRhdGEpKQorCQkJc21tdV9k b21haW4tPmF0dHJpYnV0ZXMgfD0KKwkJCQkxIDw8IERPTUFJTl9BVFRSX0VOQUJMRV9UVEJSMTsK KwkJcmV0ID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT0RFVjsKIAl9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUtYXJtLmMgYi9kcml2ZXJzL2lvbW11 L2lvLXBndGFibGUtYXJtLmMKaW5kZXggZjVjOTBlMS4uMTEwYTY5MSAxMDA2NDQKLS0tIGEvZHJp dmVycy9pb21tdS9pby1wZ3RhYmxlLWFybS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaW8tcGd0YWJs ZS1hcm0uYwpAQCAtMTI0LDE0ICsxMjQsMjEgQEAKICNkZWZpbmUgQVJNX0xQQUVfVENSX1RHMF82 NEsJCSgxIDw8IDE0KQogI2RlZmluZSBBUk1fTFBBRV9UQ1JfVEcwXzE2SwkJKDIgPDwgMTQpCiAK KyNkZWZpbmUgQVJNX0xQQUVfVENSX1RHMV8xNksgICAgICAgICAgICAxVUxMCisjZGVmaW5lIEFS TV9MUEFFX1RDUl9URzFfNEsgICAgICAgICAgICAgMlVMTAorI2RlZmluZSBBUk1fTFBBRV9UQ1Jf VEcxXzY0SyAgICAgICAgICAgIDNVTEwKKwogI2RlZmluZSBBUk1fTFBBRV9UQ1JfU0gwX1NISUZU CQkxMgogI2RlZmluZSBBUk1fTFBBRV9UQ1JfU0gwX01BU0sJCTB4MworI2RlZmluZSBBUk1fTFBB RV9UQ1JfU0gxX1NISUZUCQkyOAogI2RlZmluZSBBUk1fTFBBRV9UQ1JfU0hfTlMJCTAKICNkZWZp bmUgQVJNX0xQQUVfVENSX1NIX09TCQkyCiAjZGVmaW5lIEFSTV9MUEFFX1RDUl9TSF9JUwkJMwog CiAjZGVmaW5lIEFSTV9MUEFFX1RDUl9PUkdOMF9TSElGVAkxMAorI2RlZmluZSBBUk1fTFBBRV9U Q1JfT1JHTjFfU0hJRlQJMjYKICNkZWZpbmUgQVJNX0xQQUVfVENSX0lSR04wX1NISUZUCTgKKyNk ZWZpbmUgQVJNX0xQQUVfVENSX0lSR04xX1NISUZUCTI0CiAjZGVmaW5lIEFSTV9MUEFFX1RDUl9S R05fTUFTSwkJMHgzCiAjZGVmaW5lIEFSTV9MUEFFX1RDUl9SR05fTkMJCTAKICNkZWZpbmUgQVJN X0xQQUVfVENSX1JHTl9XQldBCQkxCkBAIC0xNDQsNiArMTUxLDkgQEAKICNkZWZpbmUgQVJNX0xQ QUVfVENSX1QwU1pfU0hJRlQJCTAKICNkZWZpbmUgQVJNX0xQQUVfVENSX1NaX01BU0sJCTB4Zgog CisjZGVmaW5lIEFSTV9MUEFFX1RDUl9UMVNaX1NISUZUICAgICAgICAgMTYKKyNkZWZpbmUgQVJN X0xQQUVfVENSX1QxU1pfTUFTSyAgICAgICAgICAweDNmCisKICNkZWZpbmUgQVJNX0xQQUVfVENS X1BTX1NISUZUCQkxNgogI2RlZmluZSBBUk1fTFBBRV9UQ1JfUFNfTUFTSwkJMHg3CiAKQEAgLTE1 Nyw2ICsxNjcsMTYgQEAKICNkZWZpbmUgQVJNX0xQQUVfVENSX1BTXzQ0X0JJVAkJMHg0VUxMCiAj ZGVmaW5lIEFSTV9MUEFFX1RDUl9QU180OF9CSVQJCTB4NVVMTAogCisjZGVmaW5lIEFSTV9MUEFF X1RDUl9TRVBfU0hJRlQJCSgxNSArIDMyKQorCisjZGVmaW5lIEFSTV9MUEFFX1RDUl9TRVBfMzEJ CTB4MFVMTAorI2RlZmluZSBBUk1fTFBBRV9UQ1JfU0VQXzM1CQkweDFVTEwKKyNkZWZpbmUgQVJN X0xQQUVfVENSX1NFUF8zOQkJMHgyVUxMCisjZGVmaW5lIEFSTV9MUEFFX1RDUl9TRVBfNDEJCTB4 M1VMTAorI2RlZmluZSBBUk1fTFBBRV9UQ1JfU0VQXzQzCQkweDRVTEwKKyNkZWZpbmUgQVJNX0xQ QUVfVENSX1NFUF80NwkJMHg1VUxMCisjZGVmaW5lIEFSTV9MUEFFX1RDUl9TRVBfVVBTVFJFQU0J MHg3VUxMCisKICNkZWZpbmUgQVJNX0xQQUVfTUFJUl9BVFRSX1NISUZUKG4pCSgobikgPDwgMykK ICNkZWZpbmUgQVJNX0xQQUVfTUFJUl9BVFRSX01BU0sJCTB4ZmYKICNkZWZpbmUgQVJNX0xQQUVf TUFJUl9BVFRSX0RFVklDRQkweDA0CkBAIC0xOTUsNyArMjE1LDcgQEAgc3RydWN0IGFybV9scGFl X2lvX3BndGFibGUgewogCXVuc2lnbmVkIGxvbmcJCXBnX3NoaWZ0OwogCXVuc2lnbmVkIGxvbmcJ CWJpdHNfcGVyX2xldmVsOwogCi0Jdm9pZAkJCSpwZ2Q7CisJdm9pZAkJCSpwZ2RbMl07CiB9Owog CiB0eXBlZGVmIHU2NCBhcm1fbHBhZV9pb3B0ZTsKQEAgLTM4MSwxNCArNDAxLDM4IEBAIHN0YXRp YyBhcm1fbHBhZV9pb3B0ZSBhcm1fbHBhZV9wcm90X3RvX3B0ZShzdHJ1Y3QgYXJtX2xwYWVfaW9f cGd0YWJsZSAqZGF0YSwKIAlyZXR1cm4gcHRlOwogfQogCitzdGF0aWMgaW5saW5lIGFybV9scGFl X2lvcHRlICphcm1fbHBhZV9nZXRfdGFibGUoCisJCXN0cnVjdCBhcm1fbHBhZV9pb19wZ3RhYmxl ICpkYXRhLCB1bnNpZ25lZCBsb25nIGlvdmEpCit7CisJc3RydWN0IGlvX3BndGFibGVfY2ZnICpj ZmcgPSAmZGF0YS0+aW9wLmNmZzsKKworCWlmIChjZmctPnF1aXJrcyAmIElPX1BHVEFCTEVfUVVJ UktfQVJNX1RUQlIxKSAgeworCQl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwkJLyoKKwkJICogSUFT IG9mIDQ4IG1lYW5zIHNpZ24gZXh0ZW5zaW9uIGJpdCA0OCwgb3RoZXJ3aXNlIGl0IGlzIHRoZQor CQkgKiBpYXMgLSAxICgzMiAtPiBiaXQgMzEsIGV0YykKKwkJICovCisJCW1hc2sgPSAoY2ZnLT5p YXMgPT0gNDgpID8gKDFVTCA8PCA0OCkgOgorCQkJKDFVTCA8PCAoY2ZnLT5pYXMgLSAxKSk7CisK KwkJaWYgKGlvdmEgJiBtYXNrKQorCQkJcmV0dXJuIGRhdGEtPnBnZFsxXTsKKwl9CisKKwlyZXR1 cm4gZGF0YS0+cGdkWzBdOworfQorCiBzdGF0aWMgaW50IGFybV9scGFlX21hcChzdHJ1Y3QgaW9f cGd0YWJsZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpb3ZhLAogCQkJcGh5c19hZGRyX3QgcGFk ZHIsIHNpemVfdCBzaXplLCBpbnQgaW9tbXVfcHJvdCkKIHsKIAlzdHJ1Y3QgYXJtX2xwYWVfaW9f cGd0YWJsZSAqZGF0YSA9IGlvX3BndGFibGVfb3BzX3RvX2RhdGEob3BzKTsKLQlhcm1fbHBhZV9p b3B0ZSAqcHRlcCA9IGRhdGEtPnBnZDsKKwlhcm1fbHBhZV9pb3B0ZSAqcHRlcDsKIAlpbnQgcmV0 LCBsdmwgPSBBUk1fTFBBRV9TVEFSVF9MVkwoZGF0YSk7CiAJYXJtX2xwYWVfaW9wdGUgcHJvdDsK IAorCXB0ZXAgPSBhcm1fbHBhZV9nZXRfdGFibGUoZGF0YSwgaW92YSk7CisKIAkvKiBJZiBubyBh Y2Nlc3MsIHRoZW4gbm90aGluZyB0byBkbyAqLwogCWlmICghKGlvbW11X3Byb3QgJiAoSU9NTVVf UkVBRCB8IElPTU1VX1dSSVRFKSkpCiAJCXJldHVybiAwOwpAQCAtNDM5LDcgKzQ4MywxMCBAQCBz dGF0aWMgdm9pZCBhcm1fbHBhZV9mcmVlX3BndGFibGUoc3RydWN0IGlvX3BndGFibGUgKmlvcCkK IHsKIAlzdHJ1Y3QgYXJtX2xwYWVfaW9fcGd0YWJsZSAqZGF0YSA9IGlvX3BndGFibGVfdG9fZGF0 YShpb3ApOwogCi0JX19hcm1fbHBhZV9mcmVlX3BndGFibGUoZGF0YSwgQVJNX0xQQUVfU1RBUlRf TFZMKGRhdGEpLCBkYXRhLT5wZ2QpOworCV9fYXJtX2xwYWVfZnJlZV9wZ3RhYmxlKGRhdGEsIEFS TV9MUEFFX1NUQVJUX0xWTChkYXRhKSwgZGF0YS0+cGdkWzBdKTsKKwlpZiAoZGF0YS0+cGdkWzFd KQorCQlfX2FybV9scGFlX2ZyZWVfcGd0YWJsZShkYXRhLCBBUk1fTFBBRV9TVEFSVF9MVkwoZGF0 YSksCisJCQlkYXRhLT5wZ2RbMV0pOwogCWtmcmVlKGRhdGEpOwogfQogCkBAIC01MzUsOSArNTgy LDExIEBAIHN0YXRpYyBpbnQgYXJtX2xwYWVfdW5tYXAoc3RydWN0IGlvX3BndGFibGVfb3BzICpv cHMsIHVuc2lnbmVkIGxvbmcgaW92YSwKIHsKIAlzaXplX3QgdW5tYXBwZWQ7CiAJc3RydWN0IGFy bV9scGFlX2lvX3BndGFibGUgKmRhdGEgPSBpb19wZ3RhYmxlX29wc190b19kYXRhKG9wcyk7Ci0J YXJtX2xwYWVfaW9wdGUgKnB0ZXAgPSBkYXRhLT5wZ2Q7CisJYXJtX2xwYWVfaW9wdGUgKnB0ZXA7 CiAJaW50IGx2bCA9IEFSTV9MUEFFX1NUQVJUX0xWTChkYXRhKTsKIAorCXB0ZXAgPSBhcm1fbHBh ZV9nZXRfdGFibGUoZGF0YSwgaW92YSk7CisKIAl1bm1hcHBlZCA9IF9fYXJtX2xwYWVfdW5tYXAo ZGF0YSwgaW92YSwgc2l6ZSwgbHZsLCBwdGVwKTsKIAlpZiAodW5tYXBwZWQpCiAJCWlvX3BndGFi bGVfdGxiX3N5bmMoJmRhdGEtPmlvcCk7CkBAIC01NDksOSArNTk4LDExIEBAIHN0YXRpYyBwaHlz X2FkZHJfdCBhcm1fbHBhZV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvX3BndGFibGVfb3BzICpvcHMs CiAJCQkJCSB1bnNpZ25lZCBsb25nIGlvdmEpCiB7CiAJc3RydWN0IGFybV9scGFlX2lvX3BndGFi bGUgKmRhdGEgPSBpb19wZ3RhYmxlX29wc190b19kYXRhKG9wcyk7Ci0JYXJtX2xwYWVfaW9wdGUg cHRlLCAqcHRlcCA9IGRhdGEtPnBnZDsKKwlhcm1fbHBhZV9pb3B0ZSBwdGUsICpwdGVwOwogCWlu dCBsdmwgPSBBUk1fTFBBRV9TVEFSVF9MVkwoZGF0YSk7CiAKKwlwdGVwID0gYXJtX2xwYWVfZ2V0 X3RhYmxlKGRhdGEsIGlvdmEpOworCiAJZG8gewogCQkvKiBWYWxpZCBJT1BURSBwb2ludGVyPyAq LwogCQlpZiAoIXB0ZXApCkBAIC02NjAsMTMgKzcxMSw4MSBAQCBzdGF0aWMgdm9pZCBhcm1fbHBh ZV9yZXN0cmljdF9wZ3NpemVzKHN0cnVjdCBpb19wZ3RhYmxlX2NmZyAqY2ZnKQogCXJldHVybiBk YXRhOwogfQogCitzdGF0aWMgdTY0IGFybTY0X2xwYWVfc2V0dXBfdHRicjEoc3RydWN0IGlvX3Bn dGFibGVfY2ZnICpjZmcsCisJCXN0cnVjdCBhcm1fbHBhZV9pb19wZ3RhYmxlICpkYXRhKQorCit7 CisJdTY0IHJlZzsKKworCS8qIElmIFRUQlIxIGlzIGRpc2FibGVkLCBkaXNhYmxlIHNwZWN1bGF0 aXZlIHdhbGtzIHRocm91Z2ggdGhlIFRUQlIxICovCisJaWYgKCEoY2ZnLT5xdWlya3MgJiBJT19Q R1RBQkxFX1FVSVJLX0FSTV9UVEJSMSkpIHsKKwkJcmVnID0gQVJNX0xQQUVfVENSX0VQRDE7CisJ CXJlZyB8PSAoQVJNX0xQQUVfVENSX1NFUF9VUFNUUkVBTSA8PCBBUk1fTFBBRV9UQ1JfU0VQX1NI SUZUKTsKKwkJcmV0dXJuIHJlZzsKKwl9CisKKwlyZWcgPSAoQVJNX0xQQUVfVENSX1NIX0lTIDw8 IEFSTV9MUEFFX1RDUl9TSDFfU0hJRlQpIHwKKwkgICAgICAoQVJNX0xQQUVfVENSX1JHTl9XQldB IDw8IEFSTV9MUEFFX1RDUl9JUkdOMV9TSElGVCkgfAorCSAgICAgIChBUk1fTFBBRV9UQ1JfUkdO X1dCV0EgPDwgQVJNX0xQQUVfVENSX09SR04xX1NISUZUKTsKKworCXN3aXRjaCAoMSA8PCBkYXRh LT5wZ19zaGlmdCkgeworCWNhc2UgU1pfNEs6CisJCXJlZyB8PSAoQVJNX0xQQUVfVENSX1RHMV80 SyA8PCAzMCk7CisJCWJyZWFrOworCWNhc2UgU1pfMTZLOgorCQlyZWcgfD0gKEFSTV9MUEFFX1RD Ul9URzFfMTZLIDw8IDMwKTsKKwkJYnJlYWs7CisJY2FzZSBTWl82NEs6CisJCXJlZyB8PSAoQVJN X0xQQUVfVENSX1RHMV82NEsgPDwgMzApOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgVDFTWiAq LworCXJlZyB8PSAoNjRVTEwgLSBjZmctPmlhcykgPDwgQVJNX0xQQUVfVENSX1QxU1pfU0hJRlQ7 CisKKwkvKiBTZXQgdGhlIFNFUCBiaXQgYmFzZWQgb24gdGhlIHNpemUgKi8KKwlzd2l0Y2ggKGNm Zy0+aWFzKSB7CisJY2FzZSAzMjoKKwkJcmVnIHw9IChBUk1fTFBBRV9UQ1JfU0VQXzMxIDw8IEFS TV9MUEFFX1RDUl9TRVBfU0hJRlQpOworCQlicmVhazsKKwljYXNlIDM2OgorCQlyZWcgfD0gKEFS TV9MUEFFX1RDUl9TRVBfMzUgPDwgQVJNX0xQQUVfVENSX1NFUF9TSElGVCk7CisJCWJyZWFrOwor CWNhc2UgNDA6CisJCXJlZyB8PSAoQVJNX0xQQUVfVENSX1NFUF8zOSA8PCBBUk1fTFBBRV9UQ1Jf U0VQX1NISUZUKTsKKwkJYnJlYWs7CisJY2FzZSA0MjoKKwkJcmVnIHw9IChBUk1fTFBBRV9UQ1Jf U0VQXzQxIDw8IEFSTV9MUEFFX1RDUl9TRVBfU0hJRlQpOworCQlicmVhazsKKwljYXNlIDQ0Ogor CQlyZWcgfD0gKEFSTV9MUEFFX1RDUl9TRVBfNDMgPDwgQVJNX0xQQUVfVENSX1NFUF9TSElGVCk7 CisJCWJyZWFrOworCWNhc2UgNDg6CisJCS8qCisJCSAqIElmIGlhcyBpcyA0OCB0aGVuIHRoYXQg cHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgVUJTIG9uIHRoZQorCQkgKiBkZXZpY2Ugd2FzIDAxMDFi ICg0OSkgd2hpY2ggaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBhc3N1bWVzCisJCSAqIGJpdCA0OCBp cyB0aGUgc2lnbiBleHRlbnNpb24gYml0LiBJbiB0aGlzIGNhc2Ugd2UgYXJlCisJCSAqIGV4cGVj dGVkIHRvIHVzZSBBUk1fTFBBRV9UQ1JfU0VQX1VQU1RSRUFNIHRvIHVzZSBiaXQgNDggYXMKKwkJ ICogdGhlIGV4dGVuc2lvbiBiaXQuIE9uZSBtaWdodCBiZSBjb25mdXNlZCBiZWNhdXNlIHRoZXJl IGlzCisJCSAqIGFsc28gYW4gb3B0aW9uIHRvIHNldCB0aGUgU0VQIHRvIGJpdCA0NyBidXQgdGhp cyBpcyBwcm9iYWJseQorCQkgKiBub3Qgd2hhdCB0aGUgYXJtLXNtbXUgZHJpdmVyIGludGVuZGVk LgorCQkgKi8KKwlkZWZhdWx0OgorCQlyZWcgfD0gKEFSTV9MUEFFX1RDUl9TRVBfVVBTVFJFQU0g PDwgQVJNX0xQQUVfVENSX1NFUF9TSElGVCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZWc7 Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW9fcGd0YWJsZSAqCiBhcm1fNjRfbHBhZV9hbGxvY19wZ3Rh YmxlX3MxKHN0cnVjdCBpb19wZ3RhYmxlX2NmZyAqY2ZnLCB2b2lkICpjb29raWUpCiB7CiAJdTY0 IHJlZzsKIAlzdHJ1Y3QgYXJtX2xwYWVfaW9fcGd0YWJsZSAqZGF0YTsKIAotCWlmIChjZmctPnF1 aXJrcyAmIH5JT19QR1RBQkxFX1FVSVJLX0FSTV9OUykKKwlpZiAoY2ZnLT5xdWlya3MgJiB+KElP X1BHVEFCTEVfUVVJUktfQVJNX05TIHwKKwkJICBJT19QR1RBQkxFX1FVSVJLX0FSTV9UVEJSMSkp CiAJCXJldHVybiBOVUxMOwogCiAJZGF0YSA9IGFybV9scGFlX2FsbG9jX3BndGFibGUoY2ZnKTsK QEAgLTcxNSw4ICs4MzQsOSBAQCBzdGF0aWMgdm9pZCBhcm1fbHBhZV9yZXN0cmljdF9wZ3NpemVz KHN0cnVjdCBpb19wZ3RhYmxlX2NmZyAqY2ZnKQogCiAJcmVnIHw9ICg2NFVMTCAtIGNmZy0+aWFz KSA8PCBBUk1fTFBBRV9UQ1JfVDBTWl9TSElGVDsKIAotCS8qIERpc2FibGUgc3BlY3VsYXRpdmUg d2Fsa3MgdGhyb3VnaCBUVEJSMSAqLwotCXJlZyB8PSBBUk1fTFBBRV9UQ1JfRVBEMTsKKwkvKiBC cmluZyBpbiB0aGUgVFRCUjEgY29uZmlndXJhdGlvbiAqLworCXJlZyB8PSBhcm02NF9scGFlX3Nl dHVwX3R0YnIxKGNmZywgZGF0YSk7CisKIAljZmctPmFybV9scGFlX3MxX2NmZy50Y3IgPSByZWc7 CiAKIAkvKiBNQUlScyAqLwpAQCAtNzMxLDE2ICs4NTEsMzIgQEAgc3RhdGljIHZvaWQgYXJtX2xw YWVfcmVzdHJpY3RfcGdzaXplcyhzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgKmNmZykKIAljZmctPmFy bV9scGFlX3MxX2NmZy5tYWlyWzFdID0gMDsKIAogCS8qIExvb2tpbmcgZ29vZDsgYWxsb2NhdGUg YSBwZ2QgKi8KLQlkYXRhLT5wZ2QgPSBfX2FybV9scGFlX2FsbG9jX3BhZ2VzKGRhdGEtPnBnZF9z aXplLCBHRlBfS0VSTkVMLCBjZmcpOwotCWlmICghZGF0YS0+cGdkKQorCWRhdGEtPnBnZFswXSA9 IF9fYXJtX2xwYWVfYWxsb2NfcGFnZXMoZGF0YS0+cGdkX3NpemUsIEdGUF9LRVJORUwsIGNmZyk7 CisJaWYgKCFkYXRhLT5wZ2RbMF0pCiAJCWdvdG8gb3V0X2ZyZWVfZGF0YTsKIAorCisJaWYgKGNm Zy0+cXVpcmtzICYgSU9fUEdUQUJMRV9RVUlSS19BUk1fVFRCUjEpIHsKKwkJZGF0YS0+cGdkWzFd ID0gX19hcm1fbHBhZV9hbGxvY19wYWdlcyhkYXRhLT5wZ2Rfc2l6ZSwKKwkJCUdGUF9LRVJORUws IGNmZyk7CisJCWlmICghZGF0YS0+cGdkWzFdKSB7CisJCQlfX2FybV9scGFlX2ZyZWVfcGFnZXMo ZGF0YS0+cGdkWzBdLCBkYXRhLT5wZ2Rfc2l6ZSwKKwkJCQljZmcpOworCQkJZ290byBvdXRfZnJl ZV9kYXRhOworCQl9CisJfSBlbHNlIHsKKwkJZGF0YS0+cGdkWzFdID0gTlVMTDsKKwl9CisKIAkv KiBFbnN1cmUgdGhlIGVtcHR5IHBnZCBpcyB2aXNpYmxlIGJlZm9yZSBhbnkgYWN0dWFsIFRUQlIg d3JpdGUgKi8KIAl3bWIoKTsKIAogCS8qIFRUQlJzICovCi0JY2ZnLT5hcm1fbHBhZV9zMV9jZmcu dHRiclswXSA9IHZpcnRfdG9fcGh5cyhkYXRhLT5wZ2QpOwotCWNmZy0+YXJtX2xwYWVfczFfY2Zn LnR0YnJbMV0gPSAwOworCWNmZy0+YXJtX2xwYWVfczFfY2ZnLnR0YnJbMF0gPSB2aXJ0X3RvX3Bo eXMoZGF0YS0+cGdkWzBdKTsKKworCWlmIChkYXRhLT5wZ2RbMV0pCisJCWNmZy0+YXJtX2xwYWVf czFfY2ZnLnR0YnJbMV0gPSB2aXJ0X3RvX3BoeXMoZGF0YS0+cGdkWzFdKTsKKwogCXJldHVybiAm ZGF0YS0+aW9wOwogCiBvdXRfZnJlZV9kYXRhOgpAQCAtODI1LDE1ICs5NjEsMTUgQEAgc3RhdGlj IHZvaWQgYXJtX2xwYWVfcmVzdHJpY3RfcGdzaXplcyhzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgKmNm ZykKIAljZmctPmFybV9scGFlX3MyX2NmZy52dGNyID0gcmVnOwogCiAJLyogQWxsb2NhdGUgcGdk IHBhZ2VzICovCi0JZGF0YS0+cGdkID0gX19hcm1fbHBhZV9hbGxvY19wYWdlcyhkYXRhLT5wZ2Rf c2l6ZSwgR0ZQX0tFUk5FTCwgY2ZnKTsKLQlpZiAoIWRhdGEtPnBnZCkKKwlkYXRhLT5wZ2RbMF0g PSBfX2FybV9scGFlX2FsbG9jX3BhZ2VzKGRhdGEtPnBnZF9zaXplLCBHRlBfS0VSTkVMLCBjZmcp OworCWlmICghZGF0YS0+cGdkWzBdKQogCQlnb3RvIG91dF9mcmVlX2RhdGE7CiAKIAkvKiBFbnN1 cmUgdGhlIGVtcHR5IHBnZCBpcyB2aXNpYmxlIGJlZm9yZSBhbnkgYWN0dWFsIFRUQlIgd3JpdGUg Ki8KIAl3bWIoKTsKIAogCS8qIFZUVEJSICovCi0JY2ZnLT5hcm1fbHBhZV9zMl9jZmcudnR0YnIg PSB2aXJ0X3RvX3BoeXMoZGF0YS0+cGdkKTsKKwljZmctPmFybV9scGFlX3MyX2NmZy52dHRiciA9 IHZpcnRfdG9fcGh5cyhkYXRhLT5wZ2RbMF0pOwogCXJldHVybiAmZGF0YS0+aW9wOwogCiBvdXRf ZnJlZV9kYXRhOgpAQCAtOTMxLDcgKzEwNjcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYXJtX2xw YWVfZHVtcF9vcHMoc3RydWN0IGlvX3BndGFibGVfb3BzICpvcHMpCiAJCWNmZy0+cGdzaXplX2Jp dG1hcCwgY2ZnLT5pYXMpOwogCXByX2VycigiZGF0YTogJWQgbGV2ZWxzLCAweCV6eCBwZ2Rfc2l6 ZSwgJWx1IHBnX3NoaWZ0LCAlbHUgYml0c19wZXJfbGV2ZWwsIHBnZCBAICVwXG4iLAogCQlkYXRh LT5sZXZlbHMsIGRhdGEtPnBnZF9zaXplLCBkYXRhLT5wZ19zaGlmdCwKLQkJZGF0YS0+Yml0c19w ZXJfbGV2ZWwsIGRhdGEtPnBnZCk7CisJCWRhdGEtPmJpdHNfcGVyX2xldmVsLCBkYXRhLT5wZ2Rb MF0pOwogfQogCiAjZGVmaW5lIF9fRkFJTChvcHMsIGkpCSh7CQkJCQkJXApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9pb21tdS9pby1wZ3RhYmxlLmggYi9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUuaApp bmRleCA5NjlkODJjLi5mZDJjZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lvLXBndGFi bGUuaAorKysgYi9kcml2ZXJzL2lvbW11L2lvLXBndGFibGUuaApAQCAtNjUsMTEgKzY1LDE3IEBA IHN0cnVjdCBpb19wZ3RhYmxlX2NmZyB7CiAJICoJUFRFcywgZm9yIE1lZGlhdGVrIElPTU1VcyB3 aGljaCB0cmVhdCBpdCBhcyBhIDMzcmQgYWRkcmVzcyBiaXQKIAkgKgl3aGVuIHRoZSBTb0MgaXMg aW4gIjRHQiBtb2RlIiBhbmQgdGhleSBjYW4gb25seSBhY2Nlc3MgdGhlIGhpZ2gKIAkgKglyZW1h cCBvZiBEUkFNICgweDFfMDAwMDAwMDAgdG8gMHgxX2ZmZmZmZmZmKS4KKwkgKgorCSAqIElPX1BH VEFCTEVfUVVJUktfQVJNX1RUQlIxOiBTcGVjaWZpZXMgdGhhdCBUVEJSMSBoYXMgYmVlbiBlbmFi bGVkIG9uCisJICoJdGhpcyBkb21haW4uIFNldCB1cCB0aGUgY29uZmlndXJhdGlvbiByZWdpc3Rl cnMgYW5kIGR5YW5taWNhbGx5CisJICoJY2hvb3NlIHdoaWNoIHBhZ2V0YWJsZSAoVFRCUjAgb3Ig VFRCUjEpIGEgbWFwcGluZyBzaG91bGQgZ28gaW50bworCSAqCWJhc2VkIG9uIHRoZSBhZGRyZXNz LgogCSAqLwogCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19BUk1fTlMJCUJJVCgwKQogCSNkZWZp bmUgSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUwlCSVQoMSkKIAkjZGVmaW5lIElPX1BHVEFCTEVf UVVJUktfVExCSV9PTl9NQVAJQklUKDIpCiAJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9N VEtfNEdCCUJJVCgzKQorCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19BUk1fVFRCUjEgICAgICBC SVQoNCkKIAl1bnNpZ25lZCBsb25nCQkJcXVpcmtzOwogCXVuc2lnbmVkIGxvbmcJCQlwZ3NpemVf Yml0bWFwOwogCXVuc2lnbmVkIGludAkJCWlhczsKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZy ZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K