From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: [PATCH 13/22] drm/amdgpu: allocate queues horizontally across pipes Date: Tue, 7 Mar 2017 18:51:05 -0500 Message-ID: <20170307235114.8210-14-andresx7@gmail.com> References: <20170307235114.8210-1-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170307235114.8210-1-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org UGlwZXMgcHJvdmlkZSBiZXR0ZXIgY29uY3VycmVuY3kgdGhhbiBxdWV1ZXMsIHRoZXJlZm9yZSB3 ZSB3YW50IHRvIG1ha2UKc3VyZSB0aGF0IGFwcHMgdXNlIHF1ZXVlcyBmcm9tIGRpZmZlcmVudCBw aXBlcyB3aGVuZXZlciBwb3NzaWJsZS4KCk9wdGltaXplIGZvciB0aGUgdHJpdmlhbCBjYXNlIHdo ZXJlIGFuIGFwcCB3aWxsIGNvbnN1bWUgcmluZ3MgaW4gb3JkZXIsCnRoZXJlZm9yZSB3ZSBkb24n dCB3YW50IGFkamFjZW50IHJpbmdzIHRvIGJlbG9uZyB0byB0aGUgc2FtZSBwaXBlLgoKUmV2aWV3 ZWQtYnk6IEVkd2FyZCBPJ0NhbGxhZ2hhbiA8ZnVuZnVuY3RvckBmb2xrbG9yZTE5ODQubmV0PgpB Y2tlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXN4N0BnbWFpbC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmggICB8IDEzICsrKysrKwogZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYyB8IDc4ICsrKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jIHwgODMgKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTA5IGlu c2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 LmgKaW5kZXggZjlkZjIxNy4uMzc3ZjU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 LmgKQEAgLTE2MzksMjAgKzE2MzksMzMgQEAgYW1kZ3B1X2dldF9zZG1hX2luc3RhbmNlKHN0cnVj dCBhbWRncHVfcmluZyAqcmluZykKIAlmb3IgKGkgPSAwOyBpIDwgYWRldi0+c2RtYS5udW1faW5z dGFuY2VzOyBpKyspCiAJCWlmICgmYWRldi0+c2RtYS5pbnN0YW5jZVtpXS5yaW5nID09IHJpbmcp CiAJCQlicmVhazsKIAogCWlmIChpIDwgQU1ER1BVX01BWF9TRE1BX0lOU1RBTkNFUykKIAkJcmV0 dXJuICZhZGV2LT5zZG1hLmluc3RhbmNlW2ldOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CiB9CiAK K3N0YXRpYyBpbmxpbmUgYm9vbCBhbWRncHVfaXNfbWVjX3F1ZXVlX2VuYWJsZWQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkJCQlpbnQgbWVjLCBpbnQgcGlwZSwgaW50IHF1ZXVlKQor eworCWludCBiaXQgPSAwOworCisJYml0ICs9IG1lYyAqIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVf cGVyX21lYworCQkqIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlOworCWJpdCArPSBw aXBlICogYWRldi0+Z2Z4Lm1lYy5udW1fcXVldWVfcGVyX3BpcGU7CisJYml0ICs9IHF1ZXVlOwor CisJcmV0dXJuIHRlc3RfYml0KGJpdCwgYWRldi0+Z2Z4Lm1lYy5xdWV1ZV9iaXRtYXApOworfQor CiAvKgogICogQVNJQ3MgbWFjcm8uCiAgKi8KICNkZWZpbmUgYW1kZ3B1X2FzaWNfc2V0X3ZnYV9z dGF0ZShhZGV2LCBzdGF0ZSkgKGFkZXYpLT5hc2ljX2Z1bmNzLT5zZXRfdmdhX3N0YXRlKChhZGV2 KSwgKHN0YXRlKSkKICNkZWZpbmUgYW1kZ3B1X2FzaWNfcmVzZXQoYWRldikgKGFkZXYpLT5hc2lj X2Z1bmNzLT5yZXNldCgoYWRldikpCiAjZGVmaW5lIGFtZGdwdV9hc2ljX2dldF94Y2xrKGFkZXYp IChhZGV2KS0+YXNpY19mdW5jcy0+Z2V0X3hjbGsoKGFkZXYpKQogI2RlZmluZSBhbWRncHVfYXNp Y19zZXRfdXZkX2Nsb2NrcyhhZGV2LCB2LCBkKSAoYWRldiktPmFzaWNfZnVuY3MtPnNldF91dmRf Y2xvY2tzKChhZGV2KSwgKHYpLCAoZCkpCiAjZGVmaW5lIGFtZGdwdV9hc2ljX3NldF92Y2VfY2xv Y2tzKGFkZXYsIGV2LCBlYykgKGFkZXYpLT5hc2ljX2Z1bmNzLT5zZXRfdmNlX2Nsb2NrcygoYWRl diksIChldiksIChlYykpCiAjZGVmaW5lIGFtZGdwdV9nZXRfcGNpZV9sYW5lcyhhZGV2KSAoYWRl diktPmFzaWNfZnVuY3MtPmdldF9wY2llX2xhbmVzKChhZGV2KSkKICNkZWZpbmUgYW1kZ3B1X3Nl dF9wY2llX2xhbmVzKGFkZXYsIGwpIChhZGV2KS0+YXNpY19mdW5jcy0+c2V0X3BjaWVfbGFuZXMo KGFkZXYpLCAobCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhf djdfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYwppbmRleCA2ODI2 NWI3Li4zY2E1NTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhf djdfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMKQEAgLTQ3 MjAsMjUgKzQ3MjAsNTYgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfZ3B1X2Vhcmx5X2luaXQoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJY2FzZSAyOgogCQlnYl9hZGRyX2NvbmZpZyB8PSAo MSA8PCBHQl9BRERSX0NPTkZJR19fUk9XX1NJWkVfX1NISUZUKTsKIAkJYnJlYWs7CiAJY2FzZSA0 OgogCQlnYl9hZGRyX2NvbmZpZyB8PSAoMiA8PCBHQl9BRERSX0NPTkZJR19fUk9XX1NJWkVfX1NI SUZUKTsKIAkJYnJlYWs7CiAJfQogCWFkZXYtPmdmeC5jb25maWcuZ2JfYWRkcl9jb25maWcgPSBn Yl9hZGRyX2NvbmZpZzsKIH0KIAorc3RhdGljIGludCBnZnhfdjdfMF9jb21wdXRlX3JpbmdfaW5p dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IHJpbmdfaWQsCisJCQkJCWludCBtZWMs IGludCBwaXBlLCBpbnQgcXVldWUpCit7CisJaW50IHI7CisJdW5zaWduZWQgaXJxX3R5cGU7CisJ c3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbcmluZ19p ZF07CisKKwkvKiBtZWMwIGlzIG1lMSAqLworCXJpbmctPm1lID0gbWVjICsgMTsKKwlyaW5nLT5w aXBlID0gcGlwZTsKKwlyaW5nLT5xdWV1ZSA9IHF1ZXVlOworCisJcmluZy0+cmluZ19vYmogPSBO VUxMOworCXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7CisJcmluZy0+ZG9vcmJlbGxfaW5kZXgg PSBBTURHUFVfRE9PUkJFTExfTUVDX1JJTkcwICsgcmluZ19pZDsKKwlzcHJpbnRmKHJpbmctPm5h bWUsICJjb21wXyVkLiVkLiVkIiwgcmluZy0+bWUsIHJpbmctPnBpcGUsIHJpbmctPnF1ZXVlKTsK KworCWlycV90eXBlID0gQU1ER1BVX0NQX0lSUV9DT01QVVRFX01FQzFfUElQRTBfRU9QCisJCSsg KChyaW5nLT5tZSAtIDEpICogYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjKQorCQkrIHJp bmctPnBpcGU7CisKKwkvKiB0eXBlLTIgcGFja2V0cyBhcmUgZGVwcmVjYXRlZCBvbiBNRUMsIHVz ZSB0eXBlLTMgaW5zdGVhZCAqLworCXIgPSBhbWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDEw MjQsCisJCQkmYWRldi0+Z2Z4LmVvcF9pcnEsIGlycV90eXBlKTsKKwlpZiAocikKKwkJcmV0dXJu IHI7CisKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGdmeF92N18wX3N3X2luaXQodm9p ZCAqaGFuZGxlKQogewogCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKIAlzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKLQlpbnQgaSwg ciwgcmluZ19pZDsKKwlpbnQgaSwgaiwgaywgciwgcmluZ19pZDsKIAogCS8qIEVPUCBFdmVudCAq LwogCXIgPSBhbWRncHVfaXJxX2FkZF9pZChhZGV2LCAxODEsICZhZGV2LT5nZnguZW9wX2lycSk7 CiAJaWYgKHIpCiAJCXJldHVybiByOwogCiAJLyogUHJpdmlsZWdlZCByZWcgKi8KIAlyID0gYW1k Z3B1X2lycV9hZGRfaWQoYWRldiwgMTg0LCAmYWRldi0+Z2Z4LnByaXZfcmVnX2lycSk7CiAJaWYg KHIpCiAJCXJldHVybiByOwpAQCAtNDc3Miw1MyArNDgwMywzOCBAQCBzdGF0aWMgaW50IGdmeF92 N18wX3N3X2luaXQodm9pZCAqaGFuZGxlKQogCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVt X2dmeF9yaW5nczsgaSsrKSB7CiAJCXJpbmcgPSAmYWRldi0+Z2Z4LmdmeF9yaW5nW2ldOwogCQly aW5nLT5yaW5nX29iaiA9IE5VTEw7CiAJCXNwcmludGYocmluZy0+bmFtZSwgImdmeCIpOwogCQly ID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCAxMDI0LAogCQkJCSAgICAgJmFkZXYtPmdm eC5lb3BfaXJxLCBBTURHUFVfQ1BfSVJRX0dGWF9FT1ApOwogCQlpZiAocikKIAkJCXJldHVybiBy OwogCX0KIAotCS8qIHNldCB1cCB0aGUgY29tcHV0ZSBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwLCBy aW5nX2lkID0gMDsgaSA8IEFNREdQVV9NQVhfUVVFVUVTOyBpKyspIHsKLQkJdW5zaWduZWQgaXJx X3R5cGU7Ci0KLQkJaWYgKCF0ZXN0X2JpdChpLCBhZGV2LT5nZngubWVjLnF1ZXVlX2JpdG1hcCkp Ci0JCQljb250aW51ZTsKLQotCQlyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbcmluZ19p ZF07Ci0KLQkJLyogbWVjMCBpcyBtZTEgKi8KLQkJcmluZy0+bWUgPSAoKGkgLyBhZGV2LT5nZngu bWVjLm51bV9xdWV1ZV9wZXJfcGlwZSkKLQkJCQkvIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVy X21lYykKLQkJCQkrIDE7Ci0JCXJpbmctPnBpcGUgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1 ZXVlX3Blcl9waXBlKQotCQkJCSUgYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjOwotCQly aW5nLT5xdWV1ZSA9IGkgJSBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZTsKLQotCQly aW5nLT5yaW5nX29iaiA9IE5VTEw7Ci0JCXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7Ci0JCXJp bmctPmRvb3JiZWxsX2luZGV4ID0gQU1ER1BVX0RPT1JCRUxMX01FQ19SSU5HMCArIHJpbmdfaWQ7 Ci0JCXNwcmludGYocmluZy0+bmFtZSwgImNvbXBfJWQuJWQuJWQiLCByaW5nLT5tZSwgcmluZy0+ cGlwZSwgcmluZy0+cXVldWUpOworCS8qIHNldCB1cCB0aGUgY29tcHV0ZSBxdWV1ZXMgLSBhbGxv Y2F0ZSBob3Jpem9udGFsbHkgYWNyb3NzIHBpcGVzICovCisJcmluZ19pZCA9IDA7CisJZm9yIChp ID0gMDsgaSA8IGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYzsgKytpKSB7CisJCWZvciAo aiA9IDA7IGogPCBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZTsgaisrKSB7CisJCQlm b3IgKGsgPSAwOyBrIDwgYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjOyBrKyspIHsKIAot CQlpcnFfdHlwZSA9IEFNREdQVV9DUF9JUlFfQ09NUFVURV9NRUMxX1BJUEUwX0VPUAotCQkJKyAo KHJpbmctPm1lIC0gMSkgKiBhZGV2LT5nZngubWVjLm51bV9waXBlX3Blcl9tZWMpCi0JCQkrIHJp bmctPnBpcGU7CisJCQkJaWYgKCFhbWRncHVfaXNfbWVjX3F1ZXVlX2VuYWJsZWQoYWRldiwgaSwg aywgaikpCisJCQkJCWNvbnRpbnVlOwogCi0JCS8qIHR5cGUtMiBwYWNrZXRzIGFyZSBkZXByZWNh dGVkIG9uIE1FQywgdXNlIHR5cGUtMyBpbnN0ZWFkICovCi0JCXIgPSBhbWRncHVfcmluZ19pbml0 KGFkZXYsIHJpbmcsIDEwMjQsCi0JCQkJICAgICAmYWRldi0+Z2Z4LmVvcF9pcnEsIGlycV90eXBl KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gcjsKKwkJCQlyID0gZ2Z4X3Y3XzBfY29tcHV0ZV9yaW5n X2luaXQoYWRldiwKKwkJCQkJCQkJcmluZ19pZCwKKwkJCQkJCQkJaSwgaywgaik7CisJCQkJaWYg KHIpCisJCQkJCXJldHVybiByOwogCi0JCXJpbmdfaWQrKzsKKwkJCQlyaW5nX2lkKys7CisJCQl9 CisJCX0KIAl9CiAKIAkvKiByZXNlcnZlIEdEUywgR1dTIGFuZCBPQSByZXNvdXJjZSBmb3IgZ2Z4 ICovCiAJciA9IGFtZGdwdV9ib19jcmVhdGVfa2VybmVsKGFkZXYsIGFkZXYtPmdkcy5tZW0uZ2Z4 X3BhcnRpdGlvbl9zaXplLAogCQkJCSAgICBQQUdFX1NJWkUsIEFNREdQVV9HRU1fRE9NQUlOX0dE UywKIAkJCQkgICAgJmFkZXYtPmdkcy5nZHNfZ2Z4X2JvLCBOVUxMLCBOVUxMKTsKIAlpZiAocikK IAkJcmV0dXJuIHI7CiAKIAlyID0gYW1kZ3B1X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgYWRldi0+ Z2RzLmd3cy5nZnhfcGFydGl0aW9uX3NpemUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9nZnhfdjhfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4 XzAuYwppbmRleCA4NjEzMzRiLi5lZGRkZDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9nZnhfdjhfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dm eF92OF8wLmMKQEAgLTIxMTUsMjMgKzIxMTUsNTYgQEAgc3RhdGljIGludCBnZnhfdjhfMF9ncHVf ZWFybHlfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAkJYnJlYWs7CiAJY2FzZSA0 OgogCQlnYl9hZGRyX2NvbmZpZyA9IFJFR19TRVRfRklFTEQoZ2JfYWRkcl9jb25maWcsIEdCX0FE RFJfQ09ORklHLCBST1dfU0laRSwgMik7CiAJCWJyZWFrOwogCX0KIAlhZGV2LT5nZnguY29uZmln LmdiX2FkZHJfY29uZmlnID0gZ2JfYWRkcl9jb25maWc7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3Rh dGljIGludCBnZnhfdjhfMF9jb21wdXRlX3JpbmdfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwgaW50IHJpbmdfaWQsCisJCQkJCWludCBtZWMsIGludCBwaXBlLCBpbnQgcXVldWUpCit7 CisJaW50IHI7CisJdW5zaWduZWQgaXJxX3R5cGU7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n ID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbcmluZ19pZF07CisKKwlyaW5nID0gJmFkZXYtPmdm eC5jb21wdXRlX3JpbmdbcmluZ19pZF07CisKKwkvKiBtZWMwIGlzIG1lMSAqLworCXJpbmctPm1l ID0gbWVjICsgMTsKKwlyaW5nLT5waXBlID0gcGlwZTsKKwlyaW5nLT5xdWV1ZSA9IHF1ZXVlOwor CisJcmluZy0+cmluZ19vYmogPSBOVUxMOworCXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7CisJ cmluZy0+ZG9vcmJlbGxfaW5kZXggPSBBTURHUFVfRE9PUkJFTExfTUVDX1JJTkcwICsgcmluZ19p ZDsKKwlzcHJpbnRmKHJpbmctPm5hbWUsICJjb21wXyVkLiVkLiVkIiwgcmluZy0+bWUsIHJpbmct PnBpcGUsIHJpbmctPnF1ZXVlKTsKKworCWlycV90eXBlID0gQU1ER1BVX0NQX0lSUV9DT01QVVRF X01FQzFfUElQRTBfRU9QCisJCSsgKChyaW5nLT5tZSAtIDEpICogYWRldi0+Z2Z4Lm1lYy5udW1f cGlwZV9wZXJfbWVjKQorCQkrIHJpbmctPnBpcGU7CisKKwkvKiB0eXBlLTIgcGFja2V0cyBhcmUg ZGVwcmVjYXRlZCBvbiBNRUMsIHVzZSB0eXBlLTMgaW5zdGVhZCAqLworCXIgPSBhbWRncHVfcmlu Z19pbml0KGFkZXYsIHJpbmcsIDEwMjQsCisJCQkmYWRldi0+Z2Z4LmVvcF9pcnEsIGlycV90eXBl KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50 IGdmeF92OF8wX3N3X2luaXQodm9pZCAqaGFuZGxlKQogewotCWludCBpLCByLCByaW5nX2lkOwor CWludCBpLCBqLCBrLCByLCByaW5nX2lkOwogCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKIAlz dHJ1Y3QgYW1kZ3B1X2tpcSAqa2lxOwogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0 cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOwogCiAJLyogS0lRIGV2ZW50ICovCiAJciA9IGFt ZGdwdV9pcnFfYWRkX2lkKGFkZXYsIDE3OCwgJmFkZXYtPmdmeC5raXEuaXJxKTsKIAlpZiAocikK IAkJcmV0dXJuIHI7CiAKIAkvKiBFT1AgRXZlbnQgKi8KQEAgLTIxOTIsNTYgKzIyMjUsMzggQEAg c3RhdGljIGludCBnZnhfdjhfMF9zd19pbml0KHZvaWQgKmhhbmRsZSkKIAkJCXJpbmctPnVzZV9k b29yYmVsbCA9IHRydWU7CiAJCQlyaW5nLT5kb29yYmVsbF9pbmRleCA9IEFNREdQVV9ET09SQkVM TF9HRlhfUklORzA7CiAJCX0KIAogCQlyID0gYW1kZ3B1X3JpbmdfaW5pdChhZGV2LCByaW5nLCAx MDI0LCAmYWRldi0+Z2Z4LmVvcF9pcnEsCiAJCQkJICAgICBBTURHUFVfQ1BfSVJRX0dGWF9FT1Ap OwogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KIAotCS8qIHNldCB1cCB0aGUgY29tcHV0ZSBx dWV1ZXMgKi8KLQlmb3IgKGkgPSAwLCByaW5nX2lkID0gMDsgaSA8IEFNREdQVV9NQVhfUVVFVUVT OyBpKyspIHsKLQkJdW5zaWduZWQgaXJxX3R5cGU7Ci0KLQkJaWYgKCF0ZXN0X2JpdChpLCBhZGV2 LT5nZngubWVjLnF1ZXVlX2JpdG1hcCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoV0FSTl9PTihy aW5nX2lkID49IEFNREdQVV9NQVhfQ09NUFVURV9SSU5HUykpCi0JCQlicmVhazsKLQotCQlyaW5n ID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbcmluZ19pZF07Ci0KLQkJLyogbWVjMCBpcyBtZTEg Ki8KLQkJcmluZy0+bWUgPSAoKGkgLyBhZGV2LT5nZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZSkK LQkJCQkvIGFkZXYtPmdmeC5tZWMubnVtX3BpcGVfcGVyX21lYykKLQkJCQkrIDE7Ci0JCXJpbmct PnBpcGUgPSAoaSAvIGFkZXYtPmdmeC5tZWMubnVtX3F1ZXVlX3Blcl9waXBlKQotCQkJCSUgYWRl di0+Z2Z4Lm1lYy5udW1fcGlwZV9wZXJfbWVjOwotCQlyaW5nLT5xdWV1ZSA9IGkgJSBhZGV2LT5n ZngubWVjLm51bV9xdWV1ZV9wZXJfcGlwZTsKLQotCQlyaW5nLT5yaW5nX29iaiA9IE5VTEw7Ci0J CXJpbmctPnVzZV9kb29yYmVsbCA9IHRydWU7Ci0JCXJpbmctPmRvb3JiZWxsX2luZGV4ID0gQU1E R1BVX0RPT1JCRUxMX01FQ19SSU5HMCArIHJpbmdfaWQ7Ci0JCXNwcmludGYocmluZy0+bmFtZSwg ImNvbXBfJWQuJWQuJWQiLCByaW5nLT5tZSwgcmluZy0+cGlwZSwgcmluZy0+cXVldWUpOworCS8q IHNldCB1cCB0aGUgY29tcHV0ZSBxdWV1ZXMgLSBhbGxvY2F0ZSBob3Jpem9udGFsbHkgYWNyb3Nz IHBpcGVzICovCisJcmluZ19pZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5tZWMu bnVtX3BpcGVfcGVyX21lYzsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBhZGV2LT5nZngubWVj Lm51bV9xdWV1ZV9wZXJfcGlwZTsgaisrKSB7CisJCQlmb3IgKGsgPSAwOyBrIDwgYWRldi0+Z2Z4 Lm1lYy5udW1fcGlwZV9wZXJfbWVjOyBrKyspIHsKIAotCQlpcnFfdHlwZSA9IEFNREdQVV9DUF9J UlFfQ09NUFVURV9NRUMxX1BJUEUwX0VPUAotCQkJKyAoKHJpbmctPm1lIC0gMSkgKiBhZGV2LT5n ZngubWVjLm51bV9waXBlX3Blcl9tZWMpCi0JCQkrIHJpbmctPnBpcGU7CisJCQkJaWYgKCFhbWRn cHVfaXNfbWVjX3F1ZXVlX2VuYWJsZWQoYWRldiwgaSwgaywgaikpCisJCQkJCWNvbnRpbnVlOwog Ci0JCS8qIHR5cGUtMiBwYWNrZXRzIGFyZSBkZXByZWNhdGVkIG9uIE1FQywgdXNlIHR5cGUtMyBp bnN0ZWFkICovCi0JCXIgPSBhbWRncHVfcmluZ19pbml0KGFkZXYsIHJpbmcsIDEwMjQsICZhZGV2 LT5nZnguZW9wX2lycSwKLQkJCQkgICAgIGlycV90eXBlKTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4g cjsKKwkJCQlyID0gZ2Z4X3Y4XzBfY29tcHV0ZV9yaW5nX2luaXQoYWRldiwKKwkJCQkJCQkJcmlu Z19pZCwKKwkJCQkJCQkJaSwgaywgaik7CisJCQkJaWYgKHIpCisJCQkJCXJldHVybiByOwogCi0J CXJpbmdfaWQrKzsKKwkJCQlyaW5nX2lkKys7CisJCQl9CisJCX0KIAl9CiAKIAkvKiByZXNlcnZl IEdEUywgR1dTIGFuZCBPQSByZXNvdXJjZSBmb3IgZ2Z4ICovCiAJciA9IGFtZGdwdV9ib19jcmVh dGVfa2VybmVsKGFkZXYsIGFkZXYtPmdkcy5tZW0uZ2Z4X3BhcnRpdGlvbl9zaXplLAogCQkJCSAg ICBQQUdFX1NJWkUsIEFNREdQVV9HRU1fRE9NQUlOX0dEUywKIAkJCQkgICAgJmFkZXYtPmdkcy5n ZHNfZ2Z4X2JvLCBOVUxMLCBOVUxMKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAlyID0gYW1k Z3B1X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgYWRldi0+Z2RzLmd3cy5nZnhfcGFydGl0aW9uX3Np emUsCi0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==