From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH RFC 22/24] drm/lima: add GPU schedule using DRM_SCHED Date: Fri, 18 May 2018 17:28:13 +0800 Message-ID: <20180518092815.25280-23-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 U2lnbmVkLW9mZi1ieTogUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jIHwgNDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5oIHwgMTI2ICsrKysrKysrCiAy IGZpbGVzIGNoYW5nZWQsIDYyMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9zY2hlZC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTkwOTMyOTU1ZTliCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jCkBAIC0wLDAg KzEsNDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTGltYSBQcm9qZWN0Cisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhP TERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IK KyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBU SEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRl IDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJsaW1hX2Rydi5oIgorI2luY2x1ZGUgImxpbWFf c2NoZWQuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5jbHVkZSAibGltYV9tbXUuaCIKKyNp bmNsdWRlICJsaW1hX2wyX2NhY2hlLmgiCisKK3N0cnVjdCBsaW1hX2ZlbmNlIHsKKwlzdHJ1Y3Qg ZG1hX2ZlbmNlIGJhc2U7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZTsKK307CisKK3N0 YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbGltYV9mZW5jZV9zbGFiID0gTlVMTDsKKworaW50IGxp bWFfc2NoZWRfc2xhYl9pbml0KHZvaWQpCit7CisJbGltYV9mZW5jZV9zbGFiID0ga21lbV9jYWNo ZV9jcmVhdGUoCisJCSJsaW1hX2ZlbmNlIiwgc2l6ZW9mKHN0cnVjdCBsaW1hX2ZlbmNlKSwgMCwK KwkJU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoIWxpbWFfZmVuY2Vfc2xhYikKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX3NjaGVkX3NsYWJf ZmluaSh2b2lkKQoreworCWlmIChsaW1hX2ZlbmNlX3NsYWIpCisJCWttZW1fY2FjaGVfZGVzdHJv eShsaW1hX2ZlbmNlX3NsYWIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX2ZlbmNl ICp0b19saW1hX2ZlbmNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiBjb250 YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBsaW1hX2ZlbmNlLCBiYXNlKTsKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKmxpbWFfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlKQoreworCXJldHVybiAibGltYSI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsaW1hX2Zl bmNlX2dldF90aW1lbGluZV9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVj dCBsaW1hX2ZlbmNlICpmID0gdG9fbGltYV9mZW5jZShmZW5jZSk7CisKKwlyZXR1cm4gZi0+cGlw ZS0+YmFzZS5uYW1lOworfQorCitzdGF0aWMgYm9vbCBsaW1hX2ZlbmNlX2VuYWJsZV9zaWduYWxp bmcoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyB2b2lkIGxpbWFfZmVuY2VfcmVsZWFzZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJ c3RydWN0IGRtYV9mZW5jZSAqZiA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBkbWFfZmVuY2Us IHJjdSk7CisJc3RydWN0IGxpbWFfZmVuY2UgKmZlbmNlID0gdG9fbGltYV9mZW5jZShmKTsKKwor CWttZW1fY2FjaGVfZnJlZShsaW1hX2ZlbmNlX3NsYWIsIGZlbmNlKTsKK30KKworc3RhdGljIHZv aWQgbGltYV9mZW5jZV9yZWxlYXNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVj dCBsaW1hX2ZlbmNlICpmID0gdG9fbGltYV9mZW5jZShmZW5jZSk7CisKKwljYWxsX3JjdSgmZi0+ YmFzZS5yY3UsIGxpbWFfZmVuY2VfcmVsZWFzZV9yY3UpOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRtYV9mZW5jZV9vcHMgbGltYV9mZW5jZV9vcHMgPSB7CisJLmdldF9kcml2ZXJfbmFtZSA9 IGxpbWFfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRfdGltZWxpbmVfbmFtZSA9IGxpbWFf ZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCisJLmVuYWJsZV9zaWduYWxpbmcgPSBsaW1hX2ZlbmNl X2VuYWJsZV9zaWduYWxpbmcsCisJLndhaXQgPSBkbWFfZmVuY2VfZGVmYXVsdF93YWl0LAorCS5y ZWxlYXNlID0gbGltYV9mZW5jZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBsaW1hX2Zl bmNlICpsaW1hX2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQorewor CXN0cnVjdCBsaW1hX2ZlbmNlICpmZW5jZTsKKworCWZlbmNlID0ga21lbV9jYWNoZV96YWxsb2Mo bGltYV9mZW5jZV9zbGFiLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlbmNlKQorCSAgICAgICByZXR1 cm4gTlVMTDsKKworCWZlbmNlLT5waXBlID0gcGlwZTsKKwlkbWFfZmVuY2VfaW5pdCgmZmVuY2Ut PmJhc2UsICZsaW1hX2ZlbmNlX29wcywgJnBpcGUtPmZlbmNlX2xvY2ssCisJCSAgICAgICBwaXBl LT5mZW5jZV9jb250ZXh0LCArK3BpcGUtPmZlbmNlX3NlcW5vKTsKKworCXJldHVybiBmZW5jZTsK K30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0b19saW1hX3Rhc2so c3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGpvYiwg c3RydWN0IGxpbWFfc2NoZWRfdGFzaywgYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGxpbWFfc2NoZWRfcGlwZSAqdG9fbGltYV9waXBlKHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAq c2NoZWQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzY2hlZCwgc3RydWN0IGxpbWFfc2NoZWRf cGlwZSwgYmFzZSk7Cit9CisKK2ludCBsaW1hX3NjaGVkX3Rhc2tfaW5pdChzdHJ1Y3QgbGltYV9z Y2hlZF90YXNrICp0YXNrLAorCQkJIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQs CisJCQkgc3RydWN0IGxpbWFfdm0gKnZtKQoreworCWludCBlcnI7CisKKwllcnIgPSBkcm1fc2No ZWRfam9iX2luaXQoJnRhc2stPmJhc2UsIGNvbnRleHQtPmJhc2Uuc2NoZWQsCisJCQkJICZjb250 ZXh0LT5iYXNlLCBjb250ZXh0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdGFzay0+ dm0gPSBsaW1hX3ZtX2dldCh2bSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9zY2hlZF90 YXNrX2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKK3sKKwlkbWFfZmVuY2VfcHV0 KCZ0YXNrLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkKTsKKwlsaW1hX3ZtX3B1dCh0YXNrLT52bSk7 Cit9CisKK2ludCBsaW1hX3NjaGVkX3Rhc2tfYWRkX2RlcChzdHJ1Y3QgbGltYV9zY2hlZF90YXNr ICp0YXNrLCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlpbnQgaSwgbmV3X2RlcCA9IDQ7 CisKKwlpZiAodGFzay0+ZGVwICYmIHRhc2stPm51bV9kZXAgPT0gdGFzay0+bWF4X2RlcCkKKwkJ bmV3X2RlcCA9IHRhc2stPm1heF9kZXAgKiAyOworCisJaWYgKHRhc2stPm1heF9kZXAgPCBuZXdf ZGVwKSB7CisJCXZvaWQgKmRlcCA9IGtyZWFsbG9jKHRhc2stPmRlcCwgc2l6ZW9mKCp0YXNrLT5k ZXApICogbmV3X2RlcCwgR0ZQX0tFUk5FTCk7CisJCWlmICghZGVwKQorCQkJcmV0dXJuIC1FTk9N RU07CisJCXRhc2stPm1heF9kZXAgPSBuZXdfZGVwOworCQl0YXNrLT5kZXAgPSBkZXA7CisJfQor CisJZG1hX2ZlbmNlX2dldChmZW5jZSk7CisJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9kZXA7 IGkrKykgeworCQlpZiAodGFzay0+ZGVwW2ldLT5jb250ZXh0ID09IGZlbmNlLT5jb250ZXh0ICYm CisJCSAgICBkbWFfZmVuY2VfaXNfbGF0ZXIoZmVuY2UsIHRhc2stPmRlcFtpXSkpIHsKKwkJCWRt YV9mZW5jZV9wdXQodGFzay0+ZGVwW2ldKTsKKwkJCXRhc2stPmRlcFtpXSA9IGZlbmNlOworCQkJ cmV0dXJuIDA7CisJCX0KKwl9CisKKwl0YXNrLT5kZXBbdGFzay0+bnVtX2RlcCsrXSA9IGZlbmNl OworCXJldHVybiAwOworfQorCitpbnQgbGltYV9zY2hlZF9jb250ZXh0X2luaXQoc3RydWN0IGxp bWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAgICBzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpj b250ZXh0LAorCQkJICAgIGF0b21pY190ICpndWlsdHkpCit7CisJc3RydWN0IGRybV9zY2hlZF9y cSAqcnEgPSBwaXBlLT5iYXNlLnNjaGVkX3JxICsgRFJNX1NDSEVEX1BSSU9SSVRZX05PUk1BTDsK KwlpbnQgZXJyOworCisJY29udGV4dC0+ZmVuY2VzID0KKwkJa3phbGxvYyhzaXplb2YoKmNvbnRl eHQtPmZlbmNlcykgKiBsaW1hX3NjaGVkX21heF90YXNrcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFj b250ZXh0LT5mZW5jZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmY29udGV4 dC0+bG9jayk7CisJZXJyID0gZHJtX3NjaGVkX2VudGl0eV9pbml0KCZwaXBlLT5iYXNlLCAmY29u dGV4dC0+YmFzZSwgcnEsCisJCQkJICAgIGxpbWFfc2NoZWRfbWF4X3Rhc2tzLCBndWlsdHkpOwor CWlmIChlcnIpIHsKKwkJa2ZyZWUoY29udGV4dC0+ZmVuY2VzKTsKKwkJY29udGV4dC0+ZmVuY2Vz ID0gTlVMTDsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1h X3NjaGVkX2NvbnRleHRfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJICAg ICBzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0KQoreworCWRybV9zY2hlZF9lbnRp dHlfZmluaSgmcGlwZS0+YmFzZSwgJmNvbnRleHQtPmJhc2UpOworCisJbXV0ZXhfZGVzdHJveSgm Y29udGV4dC0+bG9jayk7CisKKwlpZiAoY29udGV4dC0+ZmVuY2VzKQorCQlrZnJlZShjb250ZXh0 LT5mZW5jZXMpOworfQorCitzdGF0aWMgdWludDMyX3QgbGltYV9zY2hlZF9jb250ZXh0X2FkZF9m ZW5jZShzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkgICAgIHN0cnVj dCBkbWFfZmVuY2UgKmZlbmNlLAorCQkJCQkgICAgIHVpbnQzMl90ICpkb25lKQoreworCXVpbnQz Ml90IHNlcSwgaWR4LCBpOworCXN0cnVjdCBkbWFfZmVuY2UgKm90aGVyOworCisJbXV0ZXhfbG9j aygmY29udGV4dC0+bG9jayk7CisKKwlzZXEgPSBjb250ZXh0LT5zZXF1ZW5jZTsKKwlpZHggPSBz ZXEgJiAobGltYV9zY2hlZF9tYXhfdGFza3MgLSAxKTsKKwlvdGhlciA9IGNvbnRleHQtPmZlbmNl c1tpZHhdOworCisJaWYgKG90aGVyKSB7CisJCWludCBlcnIgPSBkbWFfZmVuY2Vfd2FpdChvdGhl ciwgZmFsc2UpOworCQlpZiAoZXJyKQorCQkJRFJNX0VSUk9SKCJFcnJvciAlZCB3YWl0aW5nIGNv bnRleHQgZmVuY2VcbiIsIGVycik7CisJfQorCisJY29udGV4dC0+ZmVuY2VzW2lkeF0gPSBkbWFf ZmVuY2VfZ2V0KGZlbmNlKTsKKwljb250ZXh0LT5zZXF1ZW5jZSsrOworCisJLyogZ2V0IGZpbmlz aGVkIGZlbmNlIG9mZnNldCBmcm9tIHNlcSAqLworCWZvciAoaSA9IDE7IGkgPCBsaW1hX3NjaGVk X21heF90YXNrczsgaSsrKSB7CisJCWlkeCA9IChzZXEgLSBpKSAmIChsaW1hX3NjaGVkX21heF90 YXNrcyAtIDEpOworCQlpZiAoIWNvbnRleHQtPmZlbmNlc1tpZHhdIHx8CisJCSAgICBkbWFfZmVu Y2VfaXNfc2lnbmFsZWQoY29udGV4dC0+ZmVuY2VzW2lkeF0pKQorCQkJYnJlYWs7CisJfQorCisJ bXV0ZXhfdW5sb2NrKCZjb250ZXh0LT5sb2NrKTsKKworCWRtYV9mZW5jZV9wdXQob3RoZXIpOwor CisJKmRvbmUgPSBpOworCXJldHVybiBzZXE7Cit9CisKK3N0cnVjdCBkbWFfZmVuY2UgKmxpbWFf c2NoZWRfY29udGV4dF9nZXRfZmVuY2UoCisJc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29u dGV4dCwgdWludDMyX3Qgc2VxKQoreworCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOworCWludCBp ZHg7CisJdWludDMyX3QgbWF4LCBtaW47CisKKwltdXRleF9sb2NrKCZjb250ZXh0LT5sb2NrKTsK KworCW1heCA9IGNvbnRleHQtPnNlcXVlbmNlIC0gMTsKKwltaW4gPSBjb250ZXh0LT5zZXF1ZW5j ZSAtIGxpbWFfc2NoZWRfbWF4X3Rhc2tzOworCisJLyogaGFuZGxlIG92ZXJmbG93IGNhc2UgKi8K KwlpZiAoKG1pbiA8IG1heCAmJiAoc2VxIDwgbWluIHx8IHNlcSA+IG1heCkpIHx8CisJICAgICht aW4gPiBtYXggJiYgKHNlcSA8IG1pbiAmJiBzZXEgPiBtYXgpKSkgeworCQkgICAgZmVuY2UgPSBO VUxMOworCQkgICAgZ290byBvdXQ7CisJfQorCisJaWR4ID0gc2VxICYgKGxpbWFfc2NoZWRfbWF4 X3Rhc2tzIC0gMSk7CisJZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KGNvbnRleHQtPmZlbmNlc1tpZHhd KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmY29udGV4dC0+bG9jayk7CisKKwlyZXR1cm4gZmVu Y2U7Cit9CisKK3VpbnQzMl90IGxpbWFfc2NoZWRfY29udGV4dF9xdWV1ZV90YXNrKHN0cnVjdCBs aW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJCQkJICAgICAgIHN0cnVjdCBsaW1hX3NjaGVk X3Rhc2sgKnRhc2ssCisJCQkJICAgICAgIHVpbnQzMl90ICpkb25lKQoreworCXVpbnQzMl90IHNl cSA9IGxpbWFfc2NoZWRfY29udGV4dF9hZGRfZmVuY2UoCisJCWNvbnRleHQsICZ0YXNrLT5iYXNl LnNfZmVuY2UtPmZpbmlzaGVkLCBkb25lKTsKKwlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9iKCZ0 YXNrLT5iYXNlLCAmY29udGV4dC0+YmFzZSk7CisJcmV0dXJuIHNlcTsKK30KKworc3RhdGljIHN0 cnVjdCBkbWFfZmVuY2UgKmxpbWFfc2NoZWRfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX3NjaGVkX2pv YiAqam9iLAorCQkJCQkgICAgICAgc3RydWN0IGRybV9zY2hlZF9lbnRpdHkgKmVudGl0eSkKK3sK KwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0gdG9fbGltYV90YXNrKGpvYik7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFzay0+bnVtX2RlcDsgaSsrKSB7CisJCXN0cnVjdCBk bWFfZmVuY2UgKmZlbmNlID0gdGFzay0+ZGVwW2ldOworCisJCWlmICghdGFzay0+ZGVwW2ldKQor CQkJY29udGludWU7CisKKwkJdGFzay0+ZGVwW2ldID0gTlVMTDsKKworCQlpZiAoIWRtYV9mZW5j ZV9pc19zaWduYWxlZChmZW5jZSkpCisJCQlyZXR1cm4gZmVuY2U7CisKKwkJZG1hX2ZlbmNlX3B1 dChmZW5jZSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2Zl bmNlICpsaW1hX3NjaGVkX3J1bl9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYikKK3sKKwlz dHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0gdG9fbGltYV90YXNrKGpvYik7CisJc3RydWN0 IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IHRvX2xpbWFfcGlwZShqb2ItPnNjaGVkKTsKKwlzdHJ1 Y3QgbGltYV9mZW5jZSAqZmVuY2U7CisJc3RydWN0IGRtYV9mZW5jZSAqcmV0OworCXN0cnVjdCBs aW1hX3ZtICp2bSA9IE5VTEwsICpsYXN0X3ZtID0gTlVMTDsKKwlpbnQgaTsKKworCS8qIGFmdGVy IEdQVSByZXNldCAqLworCWlmIChqb2ItPnNfZmVuY2UtPmZpbmlzaGVkLmVycm9yIDwgMCkKKwkJ cmV0dXJuIE5VTEw7CisKKwlmZW5jZSA9IGxpbWFfZmVuY2VfY3JlYXRlKHBpcGUpOworCWlmICgh ZmVuY2UpCisJCXJldHVybiBOVUxMOworCXRhc2stPmZlbmNlID0gJmZlbmNlLT5iYXNlOworCisJ LyogZm9yIGNhbGxlciB1c2FnZSBvZiB0aGUgZmVuY2UsIG90aGVyd2lzZSBpcnEgaGFuZGxlciAK KwkgKiBtYXkgY29uc3VtZSB0aGUgZmVuY2UgYmVmb3JlIGNhbGxlciB1c2UgaXQgKi8KKwlyZXQg PSBkbWFfZmVuY2VfZ2V0KHRhc2stPmZlbmNlKTsKKworCXBpcGUtPmN1cnJlbnRfdGFzayA9IHRh c2s7CisKKwkvKiB0aGlzIGlzIG5lZWRlZCBmb3IgTU1VIHRvIHdvcmsgY29ycmVjdGx5LCBvdGhl cndpc2UgR1AvUFAKKwkgKiB3aWxsIGhhbmcgb3IgcGFnZSBmYXVsdCBmb3IgdW5rbm93biByZWFz b24gYWZ0ZXIgcnVubmluZyBmb3IKKwkgKiBhIHdoaWxlLgorCSAqCisJICogTmVlZCB0byBpbnZl c3RpZ2F0ZToKKwkgKiAxLiBpcyBpdCByZWxhdGVkIHRvIFRMQgorCSAqIDIuIGhvdyBtdWNoIHBl cmZvcm1hbmNlIHdpbGwgYmUgYWZmZWN0ZWQgYnkgTDIgY2FjaGUgZmx1c2gKKwkgKiAzLiBjYW4g d2UgcmVkdWNlIHRoZSBjYWxsaW5nIG9mIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBhbGwKKwkgKiAg ICBHUC9QUCB1c2UgdGhlIHNhbWUgTDIgY2FjaGUgb24gbWFsaTQwMAorCSAqCisJICogVE9ETzoK KwkgKiAxLiBtb3ZlIHRoaXMgdG8gdGFzayBmaW5pIHRvIHNhdmUgc29tZSB3YWl0IHRpbWU/CisJ ICogMi4gd2hlbiBHUC9QUCB1c2UgZGlmZmVyZW50IGwyIGNhY2hlLCBuZWVkIFBQIHdhaXQgR1Ag bDIKKwkgKiAgICBjYWNoZSBmbHVzaD8KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVt X2wyX2NhY2hlOyBpKyspCisJCWxpbWFfbDJfY2FjaGVfZmx1c2gocGlwZS0+bDJfY2FjaGVbaV0p OworCisJaWYgKHRhc2stPnZtICE9IHBpcGUtPmN1cnJlbnRfdm0pIHsKKwkJdm0gPSBsaW1hX3Zt X2dldCh0YXNrLT52bSk7CisJCWxhc3Rfdm0gPSBwaXBlLT5jdXJyZW50X3ZtOworCQlwaXBlLT5j dXJyZW50X3ZtID0gdGFzay0+dm07CisJfQorCisJaWYgKHBpcGUtPmJjYXN0X21tdSkKKwkJbGlt YV9tbXVfc3dpdGNoX3ZtKHBpcGUtPmJjYXN0X21tdSwgdm0pOworCWVsc2UgeworCQlmb3IgKGkg PSAwOyBpIDwgcGlwZS0+bnVtX21tdTsgaSsrKQorCQkJbGltYV9tbXVfc3dpdGNoX3ZtKHBpcGUt Pm1tdVtpXSwgdm0pOworCX0KKworCWlmIChsYXN0X3ZtKQorCQlsaW1hX3ZtX3B1dChsYXN0X3Zt KTsKKworCXBpcGUtPmVycm9yID0gZmFsc2U7CisJcGlwZS0+dGFza19ydW4ocGlwZSwgdGFzayk7 CisKKwlyZXR1cm4gdGFzay0+ZmVuY2U7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfc2NoZWRfaGFu ZGxlX2Vycm9yX3Rhc2soc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCQkJIHN0cnVj dCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJa3RocmVhZF9wYXJrKHBpcGUtPmJhc2UudGhy ZWFkKTsKKwlkcm1fc2NoZWRfaHdfam9iX3Jlc2V0KCZwaXBlLT5iYXNlLCAmdGFzay0+YmFzZSk7 CisKKwlwaXBlLT50YXNrX2Vycm9yKHBpcGUpOworCisJaWYgKHBpcGUtPmJjYXN0X21tdSkKKwkJ bGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1bWUocGlwZS0+YmNhc3RfbW11KTsKKwllbHNlIHsKKwkJ aW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBwaXBlLT5udW1fbW11OyBpKyspCisJCQlsaW1hX21t dV9wYWdlX2ZhdWx0X3Jlc3VtZShwaXBlLT5tbXVbaV0pOworCX0KKworCWlmIChwaXBlLT5jdXJy ZW50X3ZtKQorCQlsaW1hX3ZtX3B1dChwaXBlLT5jdXJyZW50X3ZtKTsKKworCXBpcGUtPmN1cnJl bnRfdm0gPSBOVUxMOworCXBpcGUtPmN1cnJlbnRfdGFzayA9IE5VTEw7CisKKwlkcm1fc2NoZWRf am9iX3JlY292ZXJ5KCZwaXBlLT5iYXNlKTsKKwlrdGhyZWFkX3VucGFyayhwaXBlLT5iYXNlLnRo cmVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfc2NoZWRfdGltZWRvdXRfam9iKHN0cnVjdCBk cm1fc2NoZWRfam9iICpqb2IpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IHRv X2xpbWFfcGlwZShqb2ItPnNjaGVkKTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrID0g dG9fbGltYV90YXNrKGpvYik7CisKKwlsaW1hX3NjaGVkX2hhbmRsZV9lcnJvcl90YXNrKHBpcGUs IHRhc2spOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3NjaGVkX2ZyZWVfam9iKHN0cnVjdCBkcm1f c2NoZWRfam9iICpqb2IpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xp bWFfdGFzayhqb2IpOworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSB0b19saW1hX3Bp cGUoam9iLT5zY2hlZCk7CisJaW50IGk7CisKKwlkbWFfZmVuY2VfcHV0KHRhc2stPmZlbmNlKTsK KworCWZvciAoaSA9IDA7IGkgPCB0YXNrLT5udW1fZGVwOyBpKyspIHsKKwkJaWYgKHRhc2stPmRl cFtpXSkKKwkJCWRtYV9mZW5jZV9wdXQodGFzay0+ZGVwW2ldKTsKKwl9CisKKwlpZiAodGFzay0+ ZGVwKQorCQlrZnJlZSh0YXNrLT5kZXApOworCisJbGltYV92bV9wdXQodGFzay0+dm0pOworCWtt ZW1fY2FjaGVfZnJlZShwaXBlLT50YXNrX3NsYWIsIHRhc2spOworfQorCitjb25zdCBzdHJ1Y3Qg ZHJtX3NjaGVkX2JhY2tlbmRfb3BzIGxpbWFfc2NoZWRfb3BzID0geworCS5kZXBlbmRlbmN5ID0g bGltYV9zY2hlZF9kZXBlbmRlbmN5LAorCS5ydW5fam9iID0gbGltYV9zY2hlZF9ydW5fam9iLAor CS50aW1lZG91dF9qb2IgPSBsaW1hX3NjaGVkX3RpbWVkb3V0X2pvYiwKKwkuZnJlZV9qb2IgPSBs aW1hX3NjaGVkX2ZyZWVfam9iLAorfTsKKworc3RhdGljIHZvaWQgbGltYV9zY2hlZF9lcnJvcl93 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBl ICpwaXBlID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUsIGVy cm9yX3dvcmspOworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2sgPSBwaXBlLT5jdXJyZW50 X3Rhc2s7CisKKwlsaW1hX3NjaGVkX2hhbmRsZV9lcnJvcl90YXNrKHBpcGUsIHRhc2spOworfQor CitpbnQgbGltYV9zY2hlZF9waXBlX2luaXQoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwg Y29uc3QgY2hhciAqbmFtZSkKK3sKKwlsb25nIHRpbWVvdXQ7CisKKwlpZiAobGltYV9zY2hlZF90 aW1lb3V0X21zIDw9IDApCisJCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwllbHNl CisJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKGxpbWFfc2NoZWRfdGltZW91dF9tcyk7CisK KwlwaXBlLT5mZW5jZV9jb250ZXh0ID0gZG1hX2ZlbmNlX2NvbnRleHRfYWxsb2MoMSk7CisJc3Bp bl9sb2NrX2luaXQoJnBpcGUtPmZlbmNlX2xvY2spOworCisJSU5JVF9XT1JLKCZwaXBlLT5lcnJv cl93b3JrLCBsaW1hX3NjaGVkX2Vycm9yX3dvcmspOworCisJcmV0dXJuIGRybV9zY2hlZF9pbml0 KCZwaXBlLT5iYXNlLCAmbGltYV9zY2hlZF9vcHMsIDEsIDAsIHRpbWVvdXQsIG5hbWUpOworfQor Cit2b2lkIGxpbWFfc2NoZWRfcGlwZV9maW5pKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUp Cit7CisJZHJtX3NjaGVkX2ZpbmkoJnBpcGUtPmJhc2UpOworfQorCit1bnNpZ25lZCBsb25nIGxp bWFfdGltZW91dF90b19qaWZmaWVzKHU2NCB0aW1lb3V0X25zKQoreworCXVuc2lnbmVkIGxvbmcg dGltZW91dF9qaWZmaWVzOworCWt0aW1lX3QgdGltZW91dDsKKworCS8qIGNsYW1wIHRpbWVvdXQg aWYgaXQncyB0byBsYXJnZSAqLworCWlmICgoKHM2NCl0aW1lb3V0X25zKSA8IDApCisJCXJldHVy biBNQVhfU0NIRURVTEVfVElNRU9VVDsKKworCXRpbWVvdXQgPSBrdGltZV9zdWIobnNfdG9fa3Rp bWUodGltZW91dF9ucyksIGt0aW1lX2dldCgpKTsKKwlpZiAoa3RpbWVfdG9fbnModGltZW91dCkg PCAwKQorCQlyZXR1cm4gMDsKKworCXRpbWVvdXRfamlmZmllcyA9IG5zZWNzX3RvX2ppZmZpZXMo a3RpbWVfdG9fbnModGltZW91dCkpOworCS8qICBjbGFtcCB0aW1lb3V0IHRvIGF2b2lkIHVuc2ln bmVkLT4gc2lnbmVkIG92ZXJmbG93ICovCisJaWYgKHRpbWVvdXRfamlmZmllcyA+IE1BWF9TQ0hF RFVMRV9USU1FT1VUICkKKwkJcmV0dXJuIE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCisJcmV0dXJu IHRpbWVvdXRfamlmZmllczsKK30KKwordm9pZCBsaW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJaWYgKHBpcGUtPmVycm9yKQorCSAgICAg ICAgc2NoZWR1bGVfd29yaygmcGlwZS0+ZXJyb3Jfd29yayk7CisJZWxzZSB7CisJCXN0cnVjdCBs aW1hX3NjaGVkX3Rhc2sgKnRhc2sgPSBwaXBlLT5jdXJyZW50X3Rhc2s7CisKKwkJcGlwZS0+dGFz a19maW5pKHBpcGUpOworCQlkbWFfZmVuY2Vfc2lnbmFsKHRhc2stPmZlbmNlKTsKKwl9Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmggYi9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi5iOTNiN2I0ZWRlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX3NjaGVkLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTctMjAxOCBMaW1hIFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisg KiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX0xJ TUFfU0NIRURfSF9fCisjZGVmaW5lIF9fTElNQV9TQ0hFRF9IX18KKworI2luY2x1ZGUgPGRybS9n cHVfc2NoZWR1bGVyLmg+CisKK3N0cnVjdCBsaW1hX3ZtOworCitzdHJ1Y3QgbGltYV9zY2hlZF90 YXNrIHsKKwlzdHJ1Y3QgZHJtX3NjaGVkX2pvYiBiYXNlOworCisJc3RydWN0IGxpbWFfdm0gKnZt OworCXZvaWQgKmZyYW1lOworCisJc3RydWN0IGRtYV9mZW5jZSAqKmRlcDsKKwlpbnQgbnVtX2Rl cDsKKwlpbnQgbWF4X2RlcDsKKworCS8qIHBpcGUgZmVuY2UgKi8KKwlzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZTsKK307CisKK3N0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgeworCXN0cnVjdCBkcm1f c2NoZWRfZW50aXR5IGJhc2U7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGRtYV9mZW5j ZSAqKmZlbmNlczsKKwl1aW50MzJfdCBzZXF1ZW5jZTsKK307CisKKyNkZWZpbmUgTElNQV9TQ0hF RF9QSVBFX01BWF9NTVUgICAgICAgOAorI2RlZmluZSBMSU1BX1NDSEVEX1BJUEVfTUFYX0wyX0NB Q0hFICAyCisjZGVmaW5lIExJTUFfU0NIRURfUElQRV9NQVhfUFJPQ0VTU09SIDgKKworc3RydWN0 IGxpbWFfaXA7CisKK3N0cnVjdCBsaW1hX3NjaGVkX3BpcGUgeworCXN0cnVjdCBkcm1fZ3B1X3Nj aGVkdWxlciBiYXNlOworCisJdTY0IGZlbmNlX2NvbnRleHQ7CisJdTMyIGZlbmNlX3NlcW5vOwor CXNwaW5sb2NrX3QgZmVuY2VfbG9jazsKKworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKmN1cnJl bnRfdGFzazsKKwlzdHJ1Y3QgbGltYV92bSAqY3VycmVudF92bTsKKworCXN0cnVjdCBsaW1hX2lw ICptbXVbTElNQV9TQ0hFRF9QSVBFX01BWF9NTVVdOworCWludCBudW1fbW11OworCisJc3RydWN0 IGxpbWFfaXAgKmwyX2NhY2hlW0xJTUFfU0NIRURfUElQRV9NQVhfTDJfQ0FDSEVdOworCWludCBu dW1fbDJfY2FjaGU7CisKKwlzdHJ1Y3QgbGltYV9pcCAqcHJvY2Vzc29yW0xJTUFfU0NIRURfUElQ RV9NQVhfUFJPQ0VTU09SXTsKKwlpbnQgbnVtX3Byb2Nlc3NvcjsKKworCXN0cnVjdCBsaW1hX2lw ICpiY2FzdF9wcm9jZXNzb3I7CisJc3RydWN0IGxpbWFfaXAgKmJjYXN0X21tdTsKKworCXUzMiBk b25lOworCWJvb2wgZXJyb3I7CisJYXRvbWljX3QgdGFzazsKKworCWludCBmcmFtZV9zaXplOwor CXN0cnVjdCBrbWVtX2NhY2hlICp0YXNrX3NsYWI7CisKKwlpbnQgKCp0YXNrX3ZhbGlkYXRlKShz dHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLCBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNr KTsKKwl2b2lkICgqdGFza19ydW4pKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsIHN0cnVj dCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spOworCXZvaWQgKCp0YXNrX2ZpbmkpKHN0cnVjdCBsaW1h X3NjaGVkX3BpcGUgKnBpcGUpOworCXZvaWQgKCp0YXNrX2Vycm9yKShzdHJ1Y3QgbGltYV9zY2hl ZF9waXBlICpwaXBlKTsKKwl2b2lkICgqdGFza19tbXVfZXJyb3IpKHN0cnVjdCBsaW1hX3NjaGVk X3BpcGUgKnBpcGUpOworCisJc3RydWN0IHdvcmtfc3RydWN0IGVycm9yX3dvcms7Cit9OworCitp bnQgbGltYV9zY2hlZF90YXNrX2luaXQoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaywKKwkJ CSBzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0LAorCQkJIHN0cnVjdCBsaW1hX3Zt ICp2bSk7Cit2b2lkIGxpbWFfc2NoZWRfdGFza19maW5pKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sg KnRhc2spOworaW50IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgKnRhc2ssIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKKworaW50IGxpbWFfc2NoZWRfY29u dGV4dF9pbml0KHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkgICAgc3RydWN0IGxp bWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwKKwkJCSAgICBhdG9taWNfdCAqZ3VpbHR5KTsKK3Zv aWQgbGltYV9zY2hlZF9jb250ZXh0X2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwK KwkJCSAgICAgc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCk7Cit1aW50MzJfdCBs aW1hX3NjaGVkX2NvbnRleHRfcXVldWVfdGFzayhzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpj b250ZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLAorCQkJCSAg ICAgICB1aW50MzJfdCAqZG9uZSk7CitzdHJ1Y3QgZG1hX2ZlbmNlICpsaW1hX3NjaGVkX2NvbnRl eHRfZ2V0X2ZlbmNlKAorCXN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsIHVpbnQz Ml90IHNlcSk7CisKK2ludCBsaW1hX3NjaGVkX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF9w aXBlICpwaXBlLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgbGltYV9zY2hlZF9waXBlX2Zpbmko c3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7Cit2b2lkIGxpbWFfc2NoZWRfcGlwZV90YXNr X2RvbmUoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBsaW1hX3NjaGVkX3BpcGVfbW11X2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUp Cit7CisJcGlwZS0+ZXJyb3IgPSB0cnVlOworCXBpcGUtPnRhc2tfbW11X2Vycm9yKHBpcGUpOwor fQorCitpbnQgbGltYV9zY2hlZF9zbGFiX2luaXQodm9pZCk7Cit2b2lkIGxpbWFfc2NoZWRfc2xh Yl9maW5pKHZvaWQpOworCit1bnNpZ25lZCBsb25nIGxpbWFfdGltZW91dF90b19qaWZmaWVzKHU2 NCB0aW1lb3V0X25zKTsKKworI2VuZGlmCi0tIAoyLjE3LjAKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=