From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH RFC 20/24] drm/lima: add GEM related functions Date: Fri, 18 May 2018 17:28:11 +0800 Message-ID: <20180518092815.25280-21-yuq825@gmail.com> References: <20180518092815.25280-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180518092815.25280-1-yuq825@gmail.com> 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, devicetree@vger.kernel.org Cc: Simon Shields , Marek Vasut , Connor Abbott , Neil Armstrong , Andrei Paulau <7134956@gmail.com>, Vasily Khoruzhick , Qiang Yu , Erico Nunes List-Id: devicetree@vger.kernel.org RnJvbTogTGltYSBQcm9qZWN0IERldmVsb3BlcnMgPGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmc+CgpTaWduZWQtb2ZmLWJ5OiBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4KU2lnbmVk LW9mZi1ieTogRXJpY28gTnVuZXMgPG51bmVzLmVyaWNvQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1i eTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2dlbS5jIHwgNDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5oIHwgIDQxICsrKwogMiBmaWxlcyBjaGFuZ2Vk LCA1MDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX2dlbS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4xYWQzZjM4ZGRmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2dlbS5jCkBAIC0wLDAgKzEsNDU5IEBACisvKgorICogQ29weXJp Z2h0IChDKSAyMDE3LTIwMTggTGltYSBQcm9qZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJl c3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5z ZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl ZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJ U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lu Y2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNs dWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3luY19maWxlLmg+CisKKyNp bmNsdWRlIDxkcm0vbGltYV9kcm0uaD4KKworI2luY2x1ZGUgImxpbWFfZHJ2LmgiCisjaW5jbHVk ZSAibGltYV9nZW0uaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5jbHVkZSAibGltYV9vYmpl Y3QuaCIKKworaW50IGxpbWFfZ2VtX2NyZWF0ZV9oYW5kbGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJICAgdTMyIHNpemUsIHUzMiBmbGFncywgdTMy ICpoYW5kbGUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbGltYV9ibyAqYm87CisJc3RydWN0IGxp bWFfZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYoZGV2KTsKKworCWJvID0gbGltYV9ib19jcmVh dGUobGRldiwgc2l6ZSwgZmxhZ3MsIHR0bV9ib190eXBlX2RldmljZSwgTlVMTCwgTlVMTCk7CisJ aWYgKElTX0VSUihibykpCisJCXJldHVybiBQVFJfRVJSKGJvKTsKKworCWVyciA9IGRybV9nZW1f aGFuZGxlX2NyZWF0ZShmaWxlLCAmYm8tPmdlbSwgaGFuZGxlKTsKKworCS8qIGRyb3AgcmVmZXJl bmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovCisJZHJtX2dlbV9vYmpl Y3RfcHV0X3VubG9ja2VkKCZiby0+Z2VtKTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbGlt YV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0 IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCisJaWYgKCFsaXN0X2VtcHR5KCZiby0+ dmEpKQorCQlkZXZfZXJyKG9iai0+ZGV2LT5kZXYsICJsaW1hIGdlbSBmcmVlIGJvIHN0aWxsIGhh cyB2YVxuIik7CisKKwlsaW1hX2JvX3VucmVmKGJvKTsKK30KKworaW50IGxpbWFfZ2VtX29iamVj dF9vcGVuKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUp Cit7CisJc3RydWN0IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCXN0cnVjdCBsaW1h X2RybV9wcml2ICpwcml2ID0gdG9fbGltYV9kcm1fcHJpdihmaWxlKTsKKwlzdHJ1Y3QgbGltYV92 bSAqdm0gPSBwcml2LT52bTsKKwlpbnQgZXJyOworCisJZXJyID0gbGltYV9ib19yZXNlcnZlKGJv LCB0cnVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbGltYV92bV9ib19h ZGQodm0sIGJvKTsKKworCWxpbWFfYm9fdW5yZXNlcnZlKGJvKTsKKwlyZXR1cm4gZXJyOworfQor Cit2b2lkIGxpbWFfZ2VtX29iamVjdF9jbG9zZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwg c3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBsaW1hX2JvICpibyA9IHRvX2xpbWFf Ym8ob2JqKTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IHRvX2xpbWFfZGV2KG9iai0+ZGV2 KTsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7 CisJc3RydWN0IGxpbWFfdm0gKnZtID0gcHJpdi0+dm07CisKKwlMSVNUX0hFQUQobGlzdCk7CisJ c3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgdHZfYm8sIHR2X3BkOworCXN0cnVjdCB3d19hY3F1 aXJlX2N0eCB0aWNrZXQ7CisJaW50IHI7CisKKwl0dl9iby5ibyA9ICZiby0+dGJvOworCXR2X2Jv LnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnR2X2JvLmhlYWQsICZsaXN0KTsKKworCXR2X3Bk LmJvID0gJnZtLT5wZC0+dGJvOworCXR2X3BkLnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnR2 X3BkLmhlYWQsICZsaXN0KTsKKworCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQs ICZsaXN0LCBmYWxzZSwgTlVMTCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImxl ZWtpbmcgYm8gdmEgYmVjYXVzZSB3ZSAiCisJCQkiZmFpbCB0byByZXNlcnZlIGJvICglZClcbiIs IHIpOworCQlyZXR1cm47CisJfQorCisJbGltYV92bV9ib19kZWwodm0sIGJvKTsKKworCXR0bV9l dV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsKK30KKworaW50IGxpbWFfZ2Vt X21tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwgdTY0ICpvZmZz ZXQpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGxpbWFfYm8gKmJv OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRsZSk7CisJaWYgKCFv YmopCisJCXJldHVybiAtRU5PRU5UOworCisJYm8gPSB0b19saW1hX2JvKG9iaik7CisJKm9mZnNl dCA9IGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigmYm8tPnRiby52bWFfbm9kZSk7CisKKwlkcm1f Z2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFf Z2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQor eworCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2OworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2 OworCisJaWYgKHVubGlrZWx5KHZtYS0+dm1fcGdvZmYgPCBEUk1fRklMRV9QQUdFX09GRlNFVCkp CisJCXJldHVybiAtRUlOVkFMOworCisJZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwor CWRldiA9IGZpbGVfcHJpdi0+bWlub3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGRldiA9PSBO VUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0dG1fYm9fbW1hcChmaWxwLCB2bWEs ICZkZXYtPm1tYW4uYmRldik7Cit9CisKK2ludCBsaW1hX2dlbV92YV9tYXAoc3RydWN0IGRybV9m aWxlICpmaWxlLCB1MzIgaGFuZGxlLCB1MzIgZmxhZ3MsIHUzMiB2YSkKK3sKKwlzdHJ1Y3QgbGlt YV9kcm1fcHJpdiAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFf dm0gKnZtID0gcHJpdi0+dm07CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0 IGxpbWFfYm8gKmJvOworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2OworCWludCBlcnI7CisKKwlM SVNUX0hFQUQobGlzdCk7CisJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgdHZfYm8sIHR2X3Bk OworCXN0cnVjdCB3d19hY3F1aXJlX2N0eCB0aWNrZXQ7CisKKwlpZiAoIVBBR0VfQUxJR05FRCh2 YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZp bGUsIGhhbmRsZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJYm8gPSB0b19s aW1hX2JvKG9iaik7CisJZGV2ID0gdG9fbGltYV9kZXYob2JqLT5kZXYpOworCisJLyogY2FyZWZ1 bGx5IGhhbmRsZSBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0ZSByYW5nZSAqLworCWlmICh2YSA8IGRl di0+dmFfc3RhcnQgfHwgZGV2LT52YV9lbmQgLSBvYmotPnNpemUgPCB2YSkgeworCQllcnIgPSAt RUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl0dl9iby5ibyA9ICZiby0+dGJvOworCXR2X2Jv LnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnR2X2JvLmhlYWQsICZsaXN0KTsKKworCXR2X3Bk LmJvID0gJnZtLT5wZC0+dGJvOworCXR2X3BkLnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnR2 X3BkLmhlYWQsICZsaXN0KTsKKworCWVyciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMoJnRpY2tl dCwgJmxpc3QsIGZhbHNlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9 IGxpbWFfdm1fYm9fbWFwKHZtLCBibywgdmEpOworCisJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRp b24oJnRpY2tldCwgJmxpc3QpOworb3V0OgorCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChv YmopOworCXJldHVybiBlcnI7Cit9CisKK2ludCBsaW1hX2dlbV92YV91bm1hcChzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUsIHUzMiBoYW5kbGUsIHUzMiB2YSkKK3sKKwlzdHJ1Y3QgbGltYV9kcm1fcHJp diAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFfdm0gKnZtID0g cHJpdi0+dm07CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGxpbWFfYm8g KmJvOworCWludCBlcnI7CisKKwlMSVNUX0hFQUQobGlzdCk7CisJc3RydWN0IHR0bV92YWxpZGF0 ZV9idWZmZXIgdHZfYm8sIHR2X3BkOworCXN0cnVjdCB3d19hY3F1aXJlX2N0eCB0aWNrZXQ7CisK KwlpZiAoIVBBR0VfQUxJR05FRCh2YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJb2JqID0gZHJt X2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRsZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAt RU5PRU5UOworCisJYm8gPSB0b19saW1hX2JvKG9iaik7CisKKwl0dl9iby5ibyA9ICZiby0+dGJv OworCXR2X2JvLnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnR2X2JvLmhlYWQsICZsaXN0KTsK KworCXR2X3BkLmJvID0gJnZtLT5wZC0+dGJvOworCXR2X3BkLnNoYXJlZCA9IHRydWU7CisJbGlz dF9hZGQoJnR2X3BkLmhlYWQsICZsaXN0KTsKKworCWVyciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZl cnMoJnRpY2tldCwgJmxpc3QsIGZhbHNlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsK KworCWVyciA9IGxpbWFfdm1fYm9fdW5tYXAodm0sIGJvLCB2YSk7CisKKwl0dG1fZXVfYmFja29m Zl9yZXNlcnZhdGlvbigmdGlja2V0LCAmbGlzdCk7CitvdXQ6CisJZHJtX2dlbV9vYmplY3RfcHV0 X3VubG9ja2VkKG9iaik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsaW1hX2dlbV9z eW5jX2JvKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBsaW1hX2JvICpibywK KwkJCSAgICBib29sIHdyaXRlLCBib29sIGV4cGxpY2l0KQoreworCWludCBpLCBlcnI7CisJc3Ry dWN0IGRtYV9mZW5jZSAqZjsKKwl1NjQgY29udGV4dCA9IHRhc2stPmJhc2Uuc19mZW5jZS0+Zmlu aXNoZWQuY29udGV4dDsKKworCWlmICghd3JpdGUpIHsKKwkJZXJyID0gcmVzZXJ2YXRpb25fb2Jq ZWN0X3Jlc2VydmVfc2hhcmVkKGJvLT50Ym8ucmVzdik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4g ZXJyOworCX0KKworCS8qIGV4cGxpY2l0IHN5bmMgdXNlIHVzZXIgcGFzc2VkIGRlcCBmZW5jZSAq LworCWlmIChleHBsaWNpdCkKKwkJcmV0dXJuIDA7CisKKwkvKiBpbXBsaWNpdCBzeW5jIHVzZSBi byBmZW5jZSBpbiByZXN2IG9iaiAqLworCWlmICh3cml0ZSkgeworCQlzdHJ1Y3QgcmVzZXJ2YXRp b25fb2JqZWN0X2xpc3QgKmZvYmogPQorCQkJcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9saXN0KGJv LT50Ym8ucmVzdik7CisKKwkJaWYgKGZvYmogJiYgZm9iai0+c2hhcmVkX2NvdW50ID4gMCkgewor CQkJZm9yIChpID0gMDsgaSA8IGZvYmotPnNoYXJlZF9jb3VudDsgaSsrKSB7CisJCQkJZiA9IHJj dV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoCisJCQkJCWZvYmotPnNoYXJlZFtpXSwKKwkJCQkJcmVz ZXJ2YXRpb25fb2JqZWN0X2hlbGQoYm8tPnRiby5yZXN2KSk7CisJCQkJaWYgKGYtPmNvbnRleHQg IT0gY29udGV4dCkgeworCQkJCQllcnIgPSBsaW1hX3NjaGVkX3Rhc2tfYWRkX2RlcCh0YXNrLCBm KTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJfQorCQl9CisJ fQorCisJZiA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZXhjbChiby0+dGJvLnJlc3YpOworCWlm IChmKSB7CisJCWVyciA9IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHRhc2ssIGYpOworCQlpZiAo ZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBs aW1hX2dlbV9hZGRfZGVwcyhzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IsIHN0cnVjdCBsaW1hX3N1 Ym1pdCAqc3VibWl0KQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHN1 Ym1pdC0+bnJfZGVwczsgaSsrKSB7CisJCXVuaW9uIGRybV9saW1hX2dlbV9zdWJtaXRfZGVwICpk ZXAgPSBzdWJtaXQtPmRlcHMgKyBpOworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKworCQlp ZiAoZGVwLT50eXBlID09IExJTUFfU1VCTUlUX0RFUF9GRU5DRSkgeworCQkJZmVuY2UgPSBsaW1h X2N0eF9nZXRfbmF0aXZlX2ZlbmNlKAorCQkJCW1nciwgZGVwLT5mZW5jZS5jdHgsIGRlcC0+ZmVu Y2UucGlwZSwKKwkJCQlkZXAtPmZlbmNlLnNlcSk7CisJCQlpZiAoSVNfRVJSKGZlbmNlKSkgewor CQkJCWVyciA9IFBUUl9FUlIoZmVuY2UpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWVsc2Ug aWYgKGRlcC0+dHlwZSA9PSBMSU1BX1NVQk1JVF9ERVBfU1lOQ19GRCkgeworCQkJZmVuY2UgPSBz eW5jX2ZpbGVfZ2V0X2ZlbmNlKGRlcC0+c3luY19mZC5mZCk7CisJCQlpZiAoIWZlbmNlKSB7CisJ CQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCWVy ciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChmZW5jZSkgeworCQkJZXJyID0g bGltYV9zY2hlZF90YXNrX2FkZF9kZXAoc3VibWl0LT50YXNrLCBmZW5jZSk7CisJCQlkbWFfZmVu Y2VfcHV0KGZlbmNlKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1 cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpbWFfZ2VtX2dldF9zeW5jX2ZkKHN0cnVjdCBkbWFf ZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZTsKKwlpbnQgZmQ7 CisKKwlmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKKwlpZiAoZmQgPCAwKQor CQlyZXR1cm4gZmQ7CisKKwlzeW5jX2ZpbGUgPSBzeW5jX2ZpbGVfY3JlYXRlKGZlbmNlKTsKKwlp ZiAoIXN5bmNfZmlsZSkgeworCQlwdXRfdW51c2VkX2ZkKGZkKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJZmRfaW5zdGFsbChmZCwgc3luY19maWxlLT5maWxlKTsKKwlyZXR1cm4gZmQ7Cit9 CisKK2ludCBsaW1hX2dlbV9zdWJtaXQoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgbGlt YV9zdWJtaXQgKnN1Ym1pdCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKwlzdHJ1Y3QgbGltYV9kcm1f cHJpdiAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFfdm0gKnZt ID0gcHJpdi0+dm07CisKKwlJTklUX0xJU1RfSEVBRCgmc3VibWl0LT52YWxpZGF0ZWQpOworCUlO SVRfTElTVF9IRUFEKCZzdWJtaXQtPmR1cGxpY2F0ZXMpOworCisJZm9yIChpID0gMDsgaSA8IHN1 Ym1pdC0+bnJfYm9zOyBpKyspIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJCXN0 cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2JvICpibyA9IHN1Ym1pdC0+Ym9zICsgaTsKKwkJc3Ry dWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKnZiID0gc3VibWl0LT52YnMgKyBpOworCisJCW9iaiA9 IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBiby0+aGFuZGxlKTsKKwkJaWYgKCFvYmopIHsK KwkJCWVyciA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dDA7CisJCX0KKworCQl2Yi0+Ym8gPSAmdG9f bGltYV9ibyhvYmopLT50Ym87CisJCXZiLT5zaGFyZWQgPSAhKGJvLT5mbGFncyAmIExJTUFfU1VC TUlUX0JPX1dSSVRFKTsKKwkJbGlzdF9hZGRfdGFpbCgmdmItPmhlYWQsICZzdWJtaXQtPnZhbGlk YXRlZCk7CisJfQorCisJc3VibWl0LT52bV9wZF92Yi5ibyA9ICZ2bS0+cGQtPnRibzsKKwlzdWJt aXQtPnZtX3BkX3ZiLnNoYXJlZCA9IHRydWU7CisJbGlzdF9hZGQoJnN1Ym1pdC0+dm1fcGRfdmIu aGVhZCwgJnN1Ym1pdC0+dmFsaWRhdGVkKTsKKworCWVyciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZl cnMoJnN1Ym1pdC0+dGlja2V0LCAmc3VibWl0LT52YWxpZGF0ZWQsCisJCQkJICAgICB0cnVlLCAm c3VibWl0LT5kdXBsaWNhdGVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDA7CisKKwllcnIgPSBs aW1hX3NjaGVkX3Rhc2tfaW5pdCgKKwkJc3VibWl0LT50YXNrLCBzdWJtaXQtPmN0eC0+Y29udGV4 dCArIHN1Ym1pdC0+cGlwZSwgdm0pOworCWlmIChlcnIpCisJCWdvdG8gb3V0MTsKKworCWVyciA9 IGxpbWFfZ2VtX2FkZF9kZXBzKCZwcml2LT5jdHhfbWdyLCBzdWJtaXQpOworCWlmIChlcnIpCisJ CWdvdG8gb3V0MjsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJtaXQtPm5yX2JvczsgaSsrKSB7CisJ CXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YiA9IHN1Ym1pdC0+dmJzICsgaTsKKwkJc3Ry dWN0IGxpbWFfYm8gKmJvID0gdHRtX3RvX2xpbWFfYm8odmItPmJvKTsKKwkJZXJyID0gbGltYV9n ZW1fc3luY19ibygKKwkJCXN1Ym1pdC0+dGFzaywgYm8sICF2Yi0+c2hhcmVkLAorCQkJc3VibWl0 LT5mbGFncyAmIExJTUFfU1VCTUlUX0ZMQUdfRVhQTElDSVRfRkVOQ0UpOworCQlpZiAoZXJyKQor CQkJZ290byBvdXQyOworCX0KKworCWlmIChzdWJtaXQtPmZsYWdzICYgTElNQV9TVUJNSVRfRkxB R19TWU5DX0ZEX09VVCkgeworCQlpbnQgZmQgPSBsaW1hX2dlbV9nZXRfc3luY19mZCgKKwkJCSZz dWJtaXQtPnRhc2stPmJhc2Uuc19mZW5jZS0+ZmluaXNoZWQpOworCQlpZiAoZmQgPCAwKSB7CisJ CQllcnIgPSBmZDsKKwkJCWdvdG8gb3V0MjsKKwkJfQorCQlzdWJtaXQtPnN5bmNfZmQgPSBmZDsK Kwl9CisKKwlzdWJtaXQtPmZlbmNlID0gbGltYV9zY2hlZF9jb250ZXh0X3F1ZXVlX3Rhc2soCisJ CXN1Ym1pdC0+Y3R4LT5jb250ZXh0ICsgc3VibWl0LT5waXBlLCBzdWJtaXQtPnRhc2ssCisJCSZz dWJtaXQtPmRvbmUpOworCisJdHRtX2V1X2ZlbmNlX2J1ZmZlcl9vYmplY3RzKCZzdWJtaXQtPnRp Y2tldCwgJnN1Ym1pdC0+dmFsaWRhdGVkLAorCQkJCSAgICAmc3VibWl0LT50YXNrLT5iYXNlLnNf ZmVuY2UtPmZpbmlzaGVkKTsKKworb3V0MjoKKwlpZiAoZXJyKQorCQlsaW1hX3NjaGVkX3Rhc2tf ZmluaShzdWJtaXQtPnRhc2spOworb3V0MToKKyAgICAgICAgaWYgKGVycikKKwkJdHRtX2V1X2Jh Y2tvZmZfcmVzZXJ2YXRpb24oJnN1Ym1pdC0+dGlja2V0LCAmc3VibWl0LT52YWxpZGF0ZWQpOwor b3V0MDoKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9ib3M7IGkrKykgeworCQlzdHJ1Y3Qg dHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmIgPSBzdWJtaXQtPnZicyArIGk7CisJCWlmICghdmItPmJv KQorCQkJYnJlYWs7CisJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmdHRtX3RvX2xpbWFf Ym8odmItPmJvKS0+Z2VtKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50IGxpbWFfZ2VtX3dh aXQoc3RydWN0IGRybV9maWxlICpmaWxlLCB1MzIgaGFuZGxlLCB1MzIgb3AsIHU2NCB0aW1lb3V0 X25zKQoreworCWJvb2wgd3JpdGUgPSBvcCAmIExJTUFfR0VNX1dBSVRfV1JJVEU7CisJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCXNpZ25lZCBsb25n IHJldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9s b29rdXAoZmlsZSwgaGFuZGxlKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwli byA9IHRvX2xpbWFfYm8ob2JqKTsKKworCXRpbWVvdXQgPSB0aW1lb3V0X25zID8gbGltYV90aW1l b3V0X3RvX2ppZmZpZXModGltZW91dF9ucykgOiAwOworCisJcmV0ID0gbGltYV9ib19yZXNlcnZl KGJvLCB0cnVlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIG11c3QgdXNlIGxvbmcg Zm9yIHJlc3VsdCBjaGVjayBiZWNhdXNlIGluIDY0Yml0IGFyY2ggaW50CisJICogd2lsbCBvdmVy ZmxvdyBpZiB0aW1lb3V0IGlzIHRvbyBsYXJnZSBhbmQgZ2V0IDwwIHJlc3VsdAorCSAqLworCXJl dCA9IHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1KGJvLT50Ym8ucmVzdiwgd3Jp dGUsIHRydWUsIHRpbWVvdXQpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gdGltZW91dCA/IC1F VElNRURPVVQgOiAtRUJVU1k7CisJZWxzZSBpZiAocmV0ID4gMCkKKwkJcmV0ID0gMDsKKworCWxp bWFfYm9fdW5yZXNlcnZlKGJvKTsKK291dDoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo b2JqKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZTNjNDExMDgyNWQKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBMaW1hIFByb2plY3QKKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFV VEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K KyAqLworI2lmbmRlZiBfX0xJTUFfR0VNX0hfXworI2RlZmluZSBfX0xJTUFfR0VNX0hfXworCitz dHJ1Y3QgbGltYV9ibzsKK3N0cnVjdCBsaW1hX3N1Ym1pdDsKKworc3RydWN0IGxpbWFfYm8gKmxp bWFfZ2VtX2NyZWF0ZV9ibyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2l6ZSwgdTMyIGZs YWdzKTsKK2ludCBsaW1hX2dlbV9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCSAgIHUzMiBzaXplLCB1MzIgZmxhZ3MsIHUzMiAq aGFuZGxlKTsKK3ZvaWQgbGltYV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOworaW50IGxpbWFfZ2VtX29iamVjdF9vcGVuKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9pZCBsaW1hX2dlbV9vYmplY3RfY2xvc2Uo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CitpbnQg bGltYV9nZW1fbW1hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlLCB1MzIgaGFuZGxlLCB1 NjQgKm9mZnNldCk7CitpbnQgbGltYV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IGxpbWFfZ2VtX3ZhX21hcChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUsIHUzMiBoYW5kbGUsIHUzMiBmbGFncywgdTMyIHZhKTsKK2ludCBsaW1hX2dlbV92 YV91bm1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHUzMiBoYW5kbGUsIHUzMiB2YSk7CitpbnQg bGltYV9nZW1fc3VibWl0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGxpbWFfc3VibWl0 ICpzdWJtaXQpOworaW50IGxpbWFfZ2VtX3dhaXQoc3RydWN0IGRybV9maWxlICpmaWxlLCB1MzIg aGFuZGxlLCB1MzIgb3AsIHU2NCB0aW1lb3V0X25zKTsKKworI2VuZGlmCi0tIAoyLjE3LjAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=