From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH 1/3] drm/amdkfd: Do copy_to/from_user in general kfd_ioctl() Date: Mon, 29 Dec 2014 14:42:51 +0200 Message-ID: <1419856973-3223-1-git-send-email-oded.gabbay@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bon0114.outbound.protection.outlook.com [157.56.111.114]) by gabe.freedesktop.org (Postfix) with ESMTP id 5505989D02 for ; Mon, 29 Dec 2014 04:57:55 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBtb3ZlcyB0aGUgY29weV90b191c2VyKCkgYW5kIGNvcHlfZnJvbV91c2VyKCkg Y2FsbHMgZnJvbSB0aGUKZGlmZmVyZW50IGlvY3RsIGZ1bmN0aW9ucyBpbiBhbWRrZmQgdG8gdGhl IGdlbmVyYWwga2ZkX2lvY3RsKCkgZnVuY3Rpb24sIGFzCnRoaXMgaXMgYSBjb21tb24gY29kZSBm b3IgYWxsIGlvY3Rscy4KClRoaXMgd2FzIGRvbmUgYWNjb3JkaW5nIHRvIGV4YW1wbGUgdGFrZW4g ZnJvbSBkcm1faW9jdGwuYwoKU2lnbmVkLW9mZi1ieTogT2RlZCBHYWJiYXkgPG9kZWQuZ2FiYmF5 QGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NoYXJkZXYuYyB8 IDIzNCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTE3 IGluc2VydGlvbnMoKyksIDExNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRr ZmQva2ZkX2NoYXJkZXYuYwppbmRleCA3ZDQ5NzRiLi41NDYwYWQyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1ka2ZkL2tmZF9jaGFyZGV2LmMKQEAgLTEyNywxNyArMTI3LDE0IEBAIHN0YXRpYyBp bnQga2ZkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQogCXJl dHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBrZmRfaW9jdGxfZ2V0X3ZlcnNpb24oc3RydWN0IGZp bGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2VyICphcmcp CitzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfdmVyc2lvbihzdHJ1Y3QgZmlsZSAqZmlsZXAsIHN0 cnVjdCBrZmRfcHJvY2VzcyAqcCwKKwkJCQkJdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga2ZkX2lv Y3RsX2dldF92ZXJzaW9uX2FyZ3MgYXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF92ZXJzaW9u X2FyZ3MgKmFyZ3MgPSBkYXRhOwogCWludCBlcnIgPSAwOwogCi0JYXJncy5tYWpvcl92ZXJzaW9u ID0gS0ZEX0lPQ1RMX01BSk9SX1ZFUlNJT047Ci0JYXJncy5taW5vcl92ZXJzaW9uID0gS0ZEX0lP Q1RMX01JTk9SX1ZFUlNJT047Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmFyZ3MsIHNpemVv ZihhcmdzKSkpCi0JCWVyciA9IC1FRkFVTFQ7CisJYXJncy0+bWFqb3JfdmVyc2lvbiA9IEtGRF9J T0NUTF9NQUpPUl9WRVJTSU9OOworCWFyZ3MtPm1pbm9yX3ZlcnNpb24gPSBLRkRfSU9DVExfTUlO T1JfVkVSU0lPTjsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0yMjEsMTAgKzIxOCwxMCBAQCBzdGF0 aWMgaW50IHNldF9xdWV1ZV9wcm9wZXJ0aWVzX2Zyb21fdXNlcihzdHJ1Y3QgcXVldWVfcHJvcGVy dGllcyAqcV9wcm9wZXJ0aWVzLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBrZmRfaW9j dGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9jZXNzICpw LAotCQkJCQl2b2lkIF9fdXNlciAqYXJnKQorc3RhdGljIGludCBrZmRfaW9jdGxfY3JlYXRlX3F1 ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0IGtmZF9wcm9jZXNzICpwLAorCQkJCQl2b2lk ICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlX2FyZ3MgYXJnczsKKwlz dHJ1Y3Qga2ZkX2lvY3RsX2NyZWF0ZV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKIAlzdHJ1Y3Qg a2ZkX2RldiAqZGV2OwogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGludCBxdWV1ZV9pZDsKQEAg LTIzMywxNiArMjMwLDEzIEBAIHN0YXRpYyBsb25nIGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoc3Ry dWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCiAKIAltZW1zZXQoJnFfcHJv cGVydGllcywgMCwgc2l6ZW9mKHN0cnVjdCBxdWV1ZV9wcm9wZXJ0aWVzKSk7CiAKLQlpZiAoY29w eV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7 Ci0KIAlwcl9kZWJ1Zygia2ZkOiBjcmVhdGluZyBxdWV1ZSBpb2N0bFxuIik7CiAKLQllcnIgPSBz ZXRfcXVldWVfcHJvcGVydGllc19mcm9tX3VzZXIoJnFfcHJvcGVydGllcywgJmFyZ3MpOworCWVy ciA9IHNldF9xdWV1ZV9wcm9wZXJ0aWVzX2Zyb21fdXNlcigmcV9wcm9wZXJ0aWVzLCBhcmdzKTsK IAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdz LmdwdV9pZCk7CisJZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwogCWlmIChk ZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTI1MCw3ICsyNDQsNyBAQCBzdGF0 aWMgbG9uZyBrZmRfaW9jdGxfY3JlYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlcCwgc3RydWN0 IGtmZF9wcm9jZXNzICpwLAogCiAJcGRkID0ga2ZkX2JpbmRfcHJvY2Vzc190b19kZXZpY2UoZGV2 LCBwKTsKIAlpZiAoSVNfRVJSKHBkZCkpIHsKLQkJZXJyID0gUFRSX0VSUihwZGQpOworCQllcnIg PSAtRVNSQ0g7CiAJCWdvdG8gZXJyX2JpbmRfcHJvY2VzczsKIAl9CiAKQEAgLTI2MywzMyArMjU3 LDI2IEBAIHN0YXRpYyBsb25nIGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoc3RydWN0IGZpbGUgKmZp bGVwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGVycl9j cmVhdGVfcXVldWU7CiAKLQlhcmdzLnF1ZXVlX2lkID0gcXVldWVfaWQ7CisJYXJncy0+cXVldWVf aWQgPSBxdWV1ZV9pZDsKIAogCS8qIFJldHVybiBncHVfaWQgYXMgZG9vcmJlbGwgb2Zmc2V0IGZv ciBtbWFwIHVzYWdlICovCi0JYXJncy5kb29yYmVsbF9vZmZzZXQgPSBhcmdzLmdwdV9pZCA8PCBQ QUdFX1NISUZUOwotCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZhcmdzLCBzaXplb2YoYXJncykp KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX2NvcHlfYXJnc19vdXQ7Ci0JfQorCWFy Z3MtPmRvb3JiZWxsX29mZnNldCA9IGFyZ3MtPmdwdV9pZCA8PCBQQUdFX1NISUZUOwogCiAJbXV0 ZXhfdW5sb2NrKCZwLT5tdXRleCk7CiAKLQlwcl9kZWJ1Zygia2ZkOiBxdWV1ZSBpZCAlZCB3YXMg Y3JlYXRlZCBzdWNjZXNzZnVsbHlcbiIsIGFyZ3MucXVldWVfaWQpOworCXByX2RlYnVnKCJrZmQ6 IHF1ZXVlIGlkICVkIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseVxuIiwgYXJncy0+cXVldWVfaWQp OwogCiAJcHJfZGVidWcoInJpbmcgYnVmZmVyIGFkZHJlc3MgPT0gMHglMDE2bGxYXG4iLAotCQkJ YXJncy5yaW5nX2Jhc2VfYWRkcmVzcyk7CisJCQlhcmdzLT5yaW5nX2Jhc2VfYWRkcmVzcyk7CiAK IAlwcl9kZWJ1ZygicmVhZCBwdHIgYWRkcmVzcyAgICA9PSAweCUwMTZsbFhcbiIsCi0JCQlhcmdz LnJlYWRfcG9pbnRlcl9hZGRyZXNzKTsKKwkJCWFyZ3MtPnJlYWRfcG9pbnRlcl9hZGRyZXNzKTsK IAogCXByX2RlYnVnKCJ3cml0ZSBwdHIgYWRkcmVzcyAgID09IDB4JTAxNmxsWFxuIiwKLQkJCWFy Z3Mud3JpdGVfcG9pbnRlcl9hZGRyZXNzKTsKKwkJCWFyZ3MtPndyaXRlX3BvaW50ZXJfYWRkcmVz cyk7CiAKIAlyZXR1cm4gMDsKIAotZXJyX2NvcHlfYXJnc19vdXQ6Ci0JcHFtX2Rlc3Ryb3lfcXVl dWUoJnAtPnBxbSwgcXVldWVfaWQpOwogZXJyX2NyZWF0ZV9xdWV1ZToKIGVycl9iaW5kX3Byb2Nl c3M6CiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CkBAIC0yOTcsOTkgKzI4NCw5MCBAQCBlcnJf YmluZF9wcm9jZXNzOgogfQogCiBzdGF0aWMgaW50IGtmZF9pb2N0bF9kZXN0cm95X3F1ZXVlKHN0 cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2Vy ICphcmcpCisJCQkJCXZvaWQgKmRhdGEpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3Qga2ZkX2lv Y3RsX2Rlc3Ryb3lfcXVldWVfYXJncyBhcmdzOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdz LCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAtRUZBVUxUOworCXN0cnVjdCBrZmRfaW9j dGxfZGVzdHJveV9xdWV1ZV9hcmdzICphcmdzID0gZGF0YTsKIAogCXByX2RlYnVnKCJrZmQ6IGRl c3Ryb3lpbmcgcXVldWUgaWQgJWQgZm9yIFBBU0lEICVkXG4iLAotCQkJCWFyZ3MucXVldWVfaWQs CisJCQkJYXJncy0+cXVldWVfaWQsCiAJCQkJcC0+cGFzaWQpOwogCiAJbXV0ZXhfbG9jaygmcC0+ bXV0ZXgpOwogCi0JcmV0dmFsID0gcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgYXJncy5xdWV1 ZV9pZCk7CisJcmV0dmFsID0gcHFtX2Rlc3Ryb3lfcXVldWUoJnAtPnBxbSwgYXJncy0+cXVldWVf aWQpOwogCiAJbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAog c3RhdGljIGludCBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1 Y3Qga2ZkX3Byb2Nlc3MgKnAsCi0JCQkJCXZvaWQgX191c2VyICphcmcpCisJCQkJCXZvaWQgKmRh dGEpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1ZV9hcmdz IGFyZ3M7CisJc3RydWN0IGtmZF9pb2N0bF91cGRhdGVfcXVldWVfYXJncyAqYXJncyA9IGRhdGE7 CiAJc3RydWN0IHF1ZXVlX3Byb3BlcnRpZXMgcHJvcGVydGllczsKIAotCWlmIChjb3B5X2Zyb21f dXNlcigmYXJncywgYXJnLCBzaXplb2YoYXJncykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlm IChhcmdzLnF1ZXVlX3BlcmNlbnRhZ2UgPiBLRkRfTUFYX1FVRVVFX1BFUkNFTlRBR0UpIHsKKwlp ZiAoYXJncy0+cXVldWVfcGVyY2VudGFnZSA+IEtGRF9NQVhfUVVFVUVfUEVSQ0VOVEFHRSkgewog CQlwcl9lcnIoImtmZDogcXVldWUgcGVyY2VudGFnZSBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRf TUFYX1FVRVVFX1BFUkNFTlRBR0VcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAo YXJncy5xdWV1ZV9wcmlvcml0eSA+IEtGRF9NQVhfUVVFVUVfUFJJT1JJVFkpIHsKKwlpZiAoYXJn cy0+cXVldWVfcHJpb3JpdHkgPiBLRkRfTUFYX1FVRVVFX1BSSU9SSVRZKSB7CiAJCXByX2Vycigi a2ZkOiBxdWV1ZSBwcmlvcml0eSBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX1FVRVVFX1BS SU9SSVRZXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChhcmdzLnJpbmdfYmFz ZV9hZGRyZXNzKSAmJgorCWlmICgoYXJncy0+cmluZ19iYXNlX2FkZHJlc3MpICYmCiAJCSghYWNj ZXNzX29rKFZFUklGWV9XUklURSwKLQkJCShjb25zdCB2b2lkIF9fdXNlciAqKSBhcmdzLnJpbmdf YmFzZV9hZGRyZXNzLAorCQkJKGNvbnN0IHZvaWQgX191c2VyICopIGFyZ3MtPnJpbmdfYmFzZV9h ZGRyZXNzLAogCQkJc2l6ZW9mKHVpbnQ2NF90KSkpKSB7CiAJCXByX2Vycigia2ZkOiBjYW4ndCBh Y2Nlc3MgcmluZyBiYXNlIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlp ZiAoIWlzX3Bvd2VyX29mXzIoYXJncy5yaW5nX3NpemUpICYmIChhcmdzLnJpbmdfc2l6ZSAhPSAw KSkgeworCWlmICghaXNfcG93ZXJfb2ZfMihhcmdzLT5yaW5nX3NpemUpICYmIChhcmdzLT5yaW5n X3NpemUgIT0gMCkpIHsKIAkJcHJfZXJyKCJrZmQ6IHJpbmcgc2l6ZSBtdXN0IGJlIGEgcG93ZXIg b2YgMiBvciAwXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJvcGVydGllcy5xdWV1 ZV9hZGRyZXNzID0gYXJncy5yaW5nX2Jhc2VfYWRkcmVzczsKLQlwcm9wZXJ0aWVzLnF1ZXVlX3Np emUgPSBhcmdzLnJpbmdfc2l6ZTsKLQlwcm9wZXJ0aWVzLnF1ZXVlX3BlcmNlbnQgPSBhcmdzLnF1 ZXVlX3BlcmNlbnRhZ2U7Ci0JcHJvcGVydGllcy5wcmlvcml0eSA9IGFyZ3MucXVldWVfcHJpb3Jp dHk7CisJcHJvcGVydGllcy5xdWV1ZV9hZGRyZXNzID0gYXJncy0+cmluZ19iYXNlX2FkZHJlc3M7 CisJcHJvcGVydGllcy5xdWV1ZV9zaXplID0gYXJncy0+cmluZ19zaXplOworCXByb3BlcnRpZXMu cXVldWVfcGVyY2VudCA9IGFyZ3MtPnF1ZXVlX3BlcmNlbnRhZ2U7CisJcHJvcGVydGllcy5wcmlv cml0eSA9IGFyZ3MtPnF1ZXVlX3ByaW9yaXR5OwogCiAJcHJfZGVidWcoImtmZDogdXBkYXRpbmcg cXVldWUgaWQgJWQgZm9yIFBBU0lEICVkXG4iLAotCQkJYXJncy5xdWV1ZV9pZCwgcC0+cGFzaWQp OworCQkJYXJncy0+cXVldWVfaWQsIHAtPnBhc2lkKTsKIAogCW11dGV4X2xvY2soJnAtPm11dGV4 KTsKIAotCXJldHZhbCA9IHBxbV91cGRhdGVfcXVldWUoJnAtPnBxbSwgYXJncy5xdWV1ZV9pZCwg JnByb3BlcnRpZXMpOworCXJldHZhbCA9IHBxbV91cGRhdGVfcXVldWUoJnAtPnBxbSwgYXJncy0+ cXVldWVfaWQsICZwcm9wZXJ0aWVzKTsKIAogCW11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwogCiAJ cmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGxvbmcga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9s aWN5KHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQlzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQg X191c2VyICphcmcpCitzdGF0aWMgaW50IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeShzdHJ1 Y3QgZmlsZSAqZmlsZXAsCisJCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCAqZGF0YSkK IHsKLQlzdHJ1Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MgYXJnczsKKwlzdHJ1 Y3Qga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5X2FyZ3MgKmFyZ3MgPSBkYXRhOwogCXN0cnVj dCBrZmRfZGV2ICpkZXY7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGtmZF9wcm9jZXNzX2Rldmlj ZSAqcGRkOwogCWVudW0gY2FjaGVfcG9saWN5IGRlZmF1bHRfcG9saWN5LCBhbHRlcm5hdGVfcG9s aWN5OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0J CXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGFyZ3MuZGVmYXVsdF9wb2xpY3kgIT0gS0ZEX0lPQ19D QUNIRV9QT0xJQ1lfQ09IRVJFTlQKLQkgICAgJiYgYXJncy5kZWZhdWx0X3BvbGljeSAhPSBLRkRf SU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgeworCWlmIChhcmdzLT5kZWZhdWx0X3BvbGlj eSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVAorCSAgICAmJiBhcmdzLT5kZWZhdWx0 X3BvbGljeSAhPSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgewogCQlyZXR1cm4g LUVJTlZBTDsKIAl9CiAKLQlpZiAoYXJncy5hbHRlcm5hdGVfcG9saWN5ICE9IEtGRF9JT0NfQ0FD SEVfUE9MSUNZX0NPSEVSRU5UCi0JICAgICYmIGFyZ3MuYWx0ZXJuYXRlX3BvbGljeSAhPSBLRkRf SU9DX0NBQ0hFX1BPTElDWV9OT05DT0hFUkVOVCkgeworCWlmIChhcmdzLT5hbHRlcm5hdGVfcG9s aWN5ICE9IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NPSEVSRU5UCisJICAgICYmIGFyZ3MtPmFsdGVy bmF0ZV9wb2xpY3kgIT0gS0ZEX0lPQ19DQUNIRV9QT0xJQ1lfTk9OQ09IRVJFTlQpIHsKIAkJcmV0 dXJuIC1FSU5WQUw7CiAJfQogCi0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLmdwdV9pZCk7 CisJZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwogCWlmIChkZXYgPT0gTlVM TCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM5NywyMyArMzc1LDIzIEBAIHN0YXRpYyBsb25n IGtmZF9pb2N0bF9zZXRfbWVtb3J5X3BvbGljeShzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAKIAlwZGQg PSBrZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShkZXYsIHApOwogCWlmIChJU19FUlIocGRkKSkg ewotCQllcnIgPSBQVFJfRVJSKHBkZCk7CisJCWVyciA9IC1FU1JDSDsKIAkJZ290byBvdXQ7CiAJ fQogCi0JZGVmYXVsdF9wb2xpY3kgPSAoYXJncy5kZWZhdWx0X3BvbGljeSA9PSBLRkRfSU9DX0NB Q0hFX1BPTElDWV9DT0hFUkVOVCkKKwlkZWZhdWx0X3BvbGljeSA9IChhcmdzLT5kZWZhdWx0X3Bv bGljeSA9PSBLRkRfSU9DX0NBQ0hFX1BPTElDWV9DT0hFUkVOVCkKIAkJCSA/IGNhY2hlX3BvbGlj eV9jb2hlcmVudCA6IGNhY2hlX3BvbGljeV9ub25jb2hlcmVudDsKIAogCWFsdGVybmF0ZV9wb2xp Y3kgPQotCQkoYXJncy5hbHRlcm5hdGVfcG9saWN5ID09IEtGRF9JT0NfQ0FDSEVfUE9MSUNZX0NP SEVSRU5UKQorCQkoYXJncy0+YWx0ZXJuYXRlX3BvbGljeSA9PSBLRkRfSU9DX0NBQ0hFX1BPTElD WV9DT0hFUkVOVCkKIAkJICAgPyBjYWNoZV9wb2xpY3lfY29oZXJlbnQgOiBjYWNoZV9wb2xpY3lf bm9uY29oZXJlbnQ7CiAKIAlpZiAoIWRldi0+ZHFtLT5zZXRfY2FjaGVfbWVtb3J5X3BvbGljeShk ZXYtPmRxbSwKIAkJCQkmcGRkLT5xcGQsCiAJCQkJZGVmYXVsdF9wb2xpY3ksCiAJCQkJYWx0ZXJu YXRlX3BvbGljeSwKLQkJCQkodm9pZCBfX3VzZXIgKilhcmdzLmFsdGVybmF0ZV9hcGVydHVyZV9i YXNlLAotCQkJCWFyZ3MuYWx0ZXJuYXRlX2FwZXJ0dXJlX3NpemUpKQorCQkJCSh2b2lkIF9fdXNl ciAqKWFyZ3MtPmFsdGVybmF0ZV9hcGVydHVyZV9iYXNlLAorCQkJCWFyZ3MtPmFsdGVybmF0ZV9h cGVydHVyZV9zaXplKSkKIAkJZXJyID0gLUVJTlZBTDsKIAogb3V0OgpAQCAtNDIyLDUzICs0MDAs NDQgQEAgb3V0OgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBsb25nIGtmZF9pb2N0bF9nZXRf Y2xvY2tfY291bnRlcnMoc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCXN0cnVjdCBrZmRfcHJvY2Vz cyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9jbG9ja19j b3VudGVycyhzdHJ1Y3QgZmlsZSAqZmlsZXAsCisJCQkJc3RydWN0IGtmZF9wcm9jZXNzICpwLCB2 b2lkICpkYXRhKQogewotCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X2Nsb2NrX2NvdW50ZXJzX2FyZ3Mg YXJnczsKKwlzdHJ1Y3Qga2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVyc19hcmdzICphcmdzID0g ZGF0YTsKIAlzdHJ1Y3Qga2ZkX2RldiAqZGV2OwogCXN0cnVjdCB0aW1lc3BlYyB0aW1lOwogCi0J aWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCBhcmcsIHNpemVvZihhcmdzKSkpCi0JCXJldHVybiAt RUZBVUxUOwotCi0JZGV2ID0ga2ZkX2RldmljZV9ieV9pZChhcmdzLmdwdV9pZCk7CisJZGV2ID0g a2ZkX2RldmljZV9ieV9pZChhcmdzLT5ncHVfaWQpOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0 dXJuIC1FSU5WQUw7CiAKIAkvKiBSZWFkaW5nIEdQVSBjbG9jayBjb3VudGVyIGZyb20gS0dEICov Ci0JYXJncy5ncHVfY2xvY2tfY291bnRlciA9IGtmZDJrZ2QtPmdldF9ncHVfY2xvY2tfY291bnRl cihkZXYtPmtnZCk7CisJYXJncy0+Z3B1X2Nsb2NrX2NvdW50ZXIgPSBrZmQya2dkLT5nZXRfZ3B1 X2Nsb2NrX2NvdW50ZXIoZGV2LT5rZ2QpOwogCiAJLyogTm8gYWNjZXNzIHRvIHJkdHNjLiBVc2lu ZyByYXcgbW9ub3RvbmljIHRpbWUgKi8KIAlnZXRyYXdtb25vdG9uaWMoJnRpbWUpOwotCWFyZ3Mu Y3B1X2Nsb2NrX2NvdW50ZXIgPSAodWludDY0X3QpdGltZXNwZWNfdG9fbnMoJnRpbWUpOworCWFy Z3MtPmNwdV9jbG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsK IAogCWdldF9tb25vdG9uaWNfYm9vdHRpbWUoJnRpbWUpOwotCWFyZ3Muc3lzdGVtX2Nsb2NrX2Nv dW50ZXIgPSAodWludDY0X3QpdGltZXNwZWNfdG9fbnMoJnRpbWUpOworCWFyZ3MtPnN5c3RlbV9j bG9ja19jb3VudGVyID0gKHVpbnQ2NF90KXRpbWVzcGVjX3RvX25zKCZ0aW1lKTsKIAogCS8qIFNp bmNlIHRoZSBjb3VudGVyIGlzIGluIG5hbm8tc2Vjb25kcyB3ZSB1c2UgMUdIeiBmcmVxdWVuY3kg Ki8KLQlhcmdzLnN5c3RlbV9jbG9ja19mcmVxID0gMTAwMDAwMDAwMDsKLQotCWlmIChjb3B5X3Rv X3VzZXIoYXJnLCAmYXJncywgc2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJYXJn cy0+c3lzdGVtX2Nsb2NrX2ZyZXEgPSAxMDAwMDAwMDAwOwogCiAJcmV0dXJuIDA7CiB9CiAKIAog c3RhdGljIGludCBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzKHN0cnVjdCBmaWxlICpm aWxwLAotCQkJCXN0cnVjdCBrZmRfcHJvY2VzcyAqcCwgdm9pZCBfX3VzZXIgKmFyZykKKwkJCQlz dHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGtmZF9pb2N0bF9n ZXRfcHJvY2Vzc19hcGVydHVyZXNfYXJncyBhcmdzOworCXN0cnVjdCBrZmRfaW9jdGxfZ2V0X3By b2Nlc3NfYXBlcnR1cmVzX2FyZ3MgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCBrZmRfcHJvY2Vzc19k ZXZpY2VfYXBlcnR1cmVzICpwQXBlcnR1cmU7CiAJc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAq cGRkOwogCiAJZGV2X2RiZyhrZmRfZGV2aWNlLCAiZ2V0IGFwZXJ0dXJlcyBmb3IgUEFTSUQgJWQi LCBwLT5wYXNpZCk7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmFyZ3MsIGFyZywgc2l6ZW9mKGFy Z3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlhcmdzLm51bV9vZl9ub2RlcyA9IDA7CisJYXJn cy0+bnVtX29mX25vZGVzID0gMDsKIAogCW11dGV4X2xvY2soJnAtPm11dGV4KTsKIApAQCAtNDc3 LDcgKzQ0Niw4IEBAIHN0YXRpYyBpbnQga2ZkX2lvY3RsX2dldF9wcm9jZXNzX2FwZXJ0dXJlcyhz dHJ1Y3QgZmlsZSAqZmlscCwKIAkJLyogUnVuIG92ZXIgYWxsIHBkZCBvZiB0aGUgcHJvY2VzcyAq LwogCQlwZGQgPSBrZmRfZ2V0X2ZpcnN0X3Byb2Nlc3NfZGV2aWNlX2RhdGEocCk7CiAJCWRvIHsK LQkJCXBBcGVydHVyZSA9ICZhcmdzLnByb2Nlc3NfYXBlcnR1cmVzW2FyZ3MubnVtX29mX25vZGVz XTsKKwkJCXBBcGVydHVyZSA9CisJCQkJJmFyZ3MtPnByb2Nlc3NfYXBlcnR1cmVzW2FyZ3MtPm51 bV9vZl9ub2Rlc107CiAJCQlwQXBlcnR1cmUtPmdwdV9pZCA9IHBkZC0+ZGV2LT5pZDsKIAkJCXBB cGVydHVyZS0+bGRzX2Jhc2UgPSBwZGQtPmxkc19iYXNlOwogCQkJcEFwZXJ0dXJlLT5sZHNfbGlt aXQgPSBwZGQtPmxkc19saW1pdDsKQEAgLTQ4Nyw3ICs0NTcsNyBAQCBzdGF0aWMgaW50IGtmZF9p b2N0bF9nZXRfcHJvY2Vzc19hcGVydHVyZXMoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlwQXBlcnR1 cmUtPnNjcmF0Y2hfbGltaXQgPSBwZGQtPnNjcmF0Y2hfbGltaXQ7CiAKIAkJCWRldl9kYmcoa2Zk X2RldmljZSwKLQkJCQkibm9kZSBpZCAldVxuIiwgYXJncy5udW1fb2Zfbm9kZXMpOworCQkJCSJu b2RlIGlkICV1XG4iLCBhcmdzLT5udW1fb2Zfbm9kZXMpOwogCQkJZGV2X2RiZyhrZmRfZGV2aWNl LAogCQkJCSJncHUgaWQgJXVcbiIsIHBkZC0+ZGV2LT5pZCk7CiAJCQlkZXZfZGJnKGtmZF9kZXZp Y2UsCkBAIC01MDMsMjMgKzQ3MywyMyBAQCBzdGF0aWMgaW50IGtmZF9pb2N0bF9nZXRfcHJvY2Vz c19hcGVydHVyZXMoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlkZXZfZGJnKGtmZF9kZXZpY2UsCiAJ CQkJInNjcmF0Y2hfbGltaXQgJWxsWFxuIiwgcGRkLT5zY3JhdGNoX2xpbWl0KTsKIAotCQkJYXJn cy5udW1fb2Zfbm9kZXMrKzsKKwkJCWFyZ3MtPm51bV9vZl9ub2RlcysrOwogCQl9IHdoaWxlICgo cGRkID0ga2ZkX2dldF9uZXh0X3Byb2Nlc3NfZGV2aWNlX2RhdGEocCwgcGRkKSkgIT0gTlVMTCAm JgotCQkJCShhcmdzLm51bV9vZl9ub2RlcyA8IE5VTV9PRl9TVVBQT1JURURfR1BVUykpOworCQkJ CShhcmdzLT5udW1fb2Zfbm9kZXMgPCBOVU1fT0ZfU1VQUE9SVEVEX0dQVVMpKTsKIAl9CiAKIAlt dXRleF91bmxvY2soJnAtPm11dGV4KTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYXJncywg c2l6ZW9mKGFyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3Rh dGljIGxvbmcga2ZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwg dW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGtmZF9wcm9jZXNzICpwcm9jZXNzOwotCWxv bmcgZXJyID0gLUVJTlZBTDsKKwljaGFyIHN0YWNrX2tkYXRhWzEyOF07CisJY2hhciAqa2RhdGEg PSBOVUxMOworCXVuc2lnbmVkIGludCB1c2l6ZSwgYXNpemU7CisJaW50IHJldGNvZGUgPSAtRUlO VkFMOwogCiAJZGV2X2RiZyhrZmRfZGV2aWNlLAogCQkiaW9jdGwgY21kIDB4JXggKCMlZCksIGFy ZyAweCVseFxuIiwKQEAgLTUyOSw1NCArNDk5LDg0IEBAIHN0YXRpYyBsb25nIGtmZF9pb2N0bChz dHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQog CWlmIChJU19FUlIocHJvY2VzcykpCiAJCXJldHVybiBQVFJfRVJSKHByb2Nlc3MpOwogCisJaWYg KGNtZCAmIChJT0NfSU4gfCBJT0NfT1VUKSkgeworCQlpZiAoYXNpemUgPD0gc2l6ZW9mKHN0YWNr X2tkYXRhKSkgeworCQkJa2RhdGEgPSBzdGFja19rZGF0YTsKKwkJfSBlbHNlIHsKKwkJCWtkYXRh ID0ga21hbGxvYyhhc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWtkYXRhKSB7CisJCQkJcmV0 Y29kZSA9IC1FTk9NRU07CisJCQkJZ290byBlcnJfaTE7CisJCQl9CisJCX0KKwkJaWYgKGFzaXpl ID4gdXNpemUpCisJCQltZW1zZXQoa2RhdGEgKyB1c2l6ZSwgMCwgYXNpemUgLSB1c2l6ZSk7CisJ fQorCisJaWYgKGNtZCAmIElPQ19JTikgeworCQlpZiAoY29weV9mcm9tX3VzZXIoa2RhdGEsICh2 b2lkIF9fdXNlciAqKWFyZywgdXNpemUpICE9IDApIHsKKwkJCXJldGNvZGUgPSAtRUZBVUxUOwor CQkJZ290byBlcnJfaTE7CisJCX0KKwl9IGVsc2UgaWYgKGNtZCAmIElPQ19PVVQpIHsKKwkJbWVt c2V0KGtkYXRhLCAwLCB1c2l6ZSk7CisJfQorCisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgS0ZE X0lPQ19HRVRfVkVSU0lPTjoKLQkJZXJyID0ga2ZkX2lvY3RsX2dldF92ZXJzaW9uKGZpbGVwLCBw cm9jZXNzLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlyZXRjb2RlID0ga2ZkX2lvY3RsX2dldF92 ZXJzaW9uKGZpbGVwLCBwcm9jZXNzLCBrZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgS0ZEX0lPQ19D UkVBVEVfUVVFVUU6Ci0JCWVyciA9IGtmZF9pb2N0bF9jcmVhdGVfcXVldWUoZmlsZXAsIHByb2Nl c3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOworCQlyZXRjb2RlID0ga2ZkX2lvY3RsX2Ny ZWF0ZV9xdWV1ZShmaWxlcCwgcHJvY2VzcywKKwkJCQkJCWtkYXRhKTsKIAkJYnJlYWs7CiAKIAlj YXNlIEtGRF9JT0NfREVTVFJPWV9RVUVVRToKLQkJZXJyID0ga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVl dWUoZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOworCQlyZXRjb2Rl ID0ga2ZkX2lvY3RsX2Rlc3Ryb3lfcXVldWUoZmlsZXAsIHByb2Nlc3MsCisJCQkJCQlrZGF0YSk7 CiAJCWJyZWFrOwogCiAJY2FzZSBLRkRfSU9DX1NFVF9NRU1PUllfUE9MSUNZOgotCQllcnIgPSBr ZmRfaW9jdGxfc2V0X21lbW9yeV9wb2xpY3koZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBf X3VzZXIgKilhcmcpOworCQlyZXRjb2RlID0ga2ZkX2lvY3RsX3NldF9tZW1vcnlfcG9saWN5KGZp bGVwLCBwcm9jZXNzLAorCQkJCQkJa2RhdGEpOwogCQlicmVhazsKIAogCWNhc2UgS0ZEX0lPQ19H RVRfQ0xPQ0tfQ09VTlRFUlM6Ci0JCWVyciA9IGtmZF9pb2N0bF9nZXRfY2xvY2tfY291bnRlcnMo ZmlsZXAsIHByb2Nlc3MsCi0JCQkJCQkodm9pZCBfX3VzZXIgKilhcmcpOworCQlyZXRjb2RlID0g a2ZkX2lvY3RsX2dldF9jbG9ja19jb3VudGVycyhmaWxlcCwgcHJvY2VzcywKKwkJCQkJCWtkYXRh KTsKIAkJYnJlYWs7CiAKIAljYXNlIEtGRF9JT0NfR0VUX1BST0NFU1NfQVBFUlRVUkVTOgotCQll cnIgPSBrZmRfaW9jdGxfZ2V0X3Byb2Nlc3NfYXBlcnR1cmVzKGZpbGVwLCBwcm9jZXNzLAotCQkJ CQkJKHZvaWQgX191c2VyICopYXJnKTsKKwkJcmV0Y29kZSA9IGtmZF9pb2N0bF9nZXRfcHJvY2Vz c19hcGVydHVyZXMoZmlsZXAsIHByb2Nlc3MsCisJCQkJCQlrZGF0YSk7CiAJCWJyZWFrOwogCiAJ Y2FzZSBLRkRfSU9DX1VQREFURV9RVUVVRToKLQkJZXJyID0ga2ZkX2lvY3RsX3VwZGF0ZV9xdWV1 ZShmaWxlcCwgcHJvY2VzcywKLQkJCQkJCSh2b2lkIF9fdXNlciAqKWFyZyk7CisJCXJldGNvZGUg PSBrZmRfaW9jdGxfdXBkYXRlX3F1ZXVlKGZpbGVwLCBwcm9jZXNzLAorCQkJCQkJa2RhdGEpOwog CQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoa2ZkX2RldmljZSwKKwkJZGV2X2RiZyhr ZmRfZGV2aWNlLAogCQkJInVua25vd24gaW9jdGwgY21kIDB4JXgsIGFyZyAweCVseClcbiIsCiAJ CQljbWQsIGFyZyk7Ci0JCWVyciA9IC1FSU5WQUw7CisJCXJldGNvZGUgPSAtRUlOVkFMOwogCQli cmVhazsKIAl9CiAKLQlpZiAoZXJyIDwgMCkKLQkJZGV2X2VycihrZmRfZGV2aWNlLAotCQkJImlv Y3RsIGVycm9yICVsZCBmb3IgaW9jdGwgY21kIDB4JXggKCMlZClcbiIsCi0JCQllcnIsIGNtZCwg X0lPQ19OUihjbWQpKTsKKwlpZiAoY21kICYgSU9DX09VVCkKKwkJaWYgKGNvcHlfdG9fdXNlcigo dm9pZCBfX3VzZXIgKilhcmcsIGtkYXRhLCB1c2l6ZSkgIT0gMCkKKwkJCXJldGNvZGUgPSAtRUZB VUxUOwogCi0JcmV0dXJuIGVycjsKK2Vycl9pMToKKwlpZiAoa2RhdGEgIT0gc3RhY2tfa2RhdGEp CisJCWtmcmVlKGtkYXRhKTsKKworCWlmIChyZXRjb2RlKQorCQlkZXZfZGJnKGtmZF9kZXZpY2Us ICJyZXQgPSAlZFxuIiwgcmV0Y29kZSk7CisKKwlyZXR1cm4gcmV0Y29kZTsKIH0KIAogc3RhdGlj IGludCBrZmRfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2 bWEpCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK