From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 16/40] drm/i915: Pull scheduling under standalone lock Date: Wed, 19 Sep 2018 20:55:20 +0100 Message-ID: <20180919195544.1511-16-chris@chris-wilson.co.uk> References: <20180919195544.1511-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 428C56E1DC for ; Wed, 19 Sep 2018 19:56:15 +0000 (UTC) In-Reply-To: <20180919195544.1511-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q3VycmVudGx5LCB0aGUgYmFja2VuZCBzY2hlZHVsaW5nIGNvZGUgYWJ1c2VzIHN0cnVjdF9tdXRl eCBpbnRvIG9yZGVyIHRvCmhhdmUgYSBnbG9iYWwgbG9jayB0byBtYW5pcHVsYXRlIGEgdGVtcG9y YXJ5IGxpc3QgKHdpdGhvdXQgd2lkZXNwcmVhZAphbGxvY2F0aW9uKSBhbmQgdG8gcHJvdGVjdCBh Z2FpbnN0IGxpc3QgbW9kaWZpY2F0aW9ucy4gVGhpcyBpcyBhbgpleHRyYW5lb3VzIGNvdXBsaW5n IHRvIHN0cnVjdF9tdXRleCBhbmQgZnVydGhlciBjYW4gbm90IGV4dGVuZCBiZXlvbmQKdGhlIGxv Y2FsIGRldmljZS4KClB1bGwgYWxsIHRoZSBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgdW5kZXIgdGhl IG9uZSB0cnVlIGxvY2sgaW50bwppOTE1X3NjaGVkdWxlci5jLCBhbmQgbWFrZSBpdCBzby4KClNp Z25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAgfCAgODUgLS0tLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaCAgICAgfCAgIDggLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuYyAgIHwgMzc3ICsrKysrKysrKysrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCAgIHwgIDI1ICsrCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jICAgICAgICB8IDI2OCArLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwgICA1ICstCiA4IGZpbGVzIGNoYW5nZWQs IDQxMSBpbnNlcnRpb25zKCspLCAzNjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYwoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK aW5kZXggNTc5NGYxMDJmOWI4Li5lZjE0ODBjMTRlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBA IC03NSw2ICs3NSw3IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCiAJICBpOTE1X2dl bWZzLm8gXAogCSAgaTkxNV9xdWVyeS5vIFwKIAkgIGk5MTVfcmVxdWVzdC5vIFwKKwkgIGk5MTVf c2NoZWR1bGVyLm8gXAogCSAgaTkxNV90aW1lbGluZS5vIFwKIAkgIGk5MTVfdHJhY2VfcG9pbnRz Lm8gXAogCSAgaTkxNV92bWEubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCmluZGV4 IDU2MTQwY2EwNTRlOC4uZDczYWQ0OTBhMjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlcXVlc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVl c3QuYwpAQCAtMTExLDkxICsxMTEsNiBAQCBpOTE1X3JlcXVlc3RfcmVtb3ZlX2Zyb21fY2xpZW50 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiAJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+ bW0ubG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9kZXBlbmRlbmN5ICoKLWk5MTVfZGVw ZW5kZW5jeV9hbGxvYyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKLXsKLQlyZXR1cm4g a21lbV9jYWNoZV9hbGxvYyhpOTE1LT5kZXBlbmRlbmNpZXMsIEdGUF9LRVJORUwpOwotfQotCi1z dGF0aWMgdm9pZAotaTkxNV9kZXBlbmRlbmN5X2ZyZWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCi0JCSAgICAgc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqZGVwKQotewotCWttZW1fY2Fj aGVfZnJlZShpOTE1LT5kZXBlbmRlbmNpZXMsIGRlcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fX2k5 MTVfc2NoZWRfbm9kZV9hZGRfZGVwZW5kZW5jeShzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2Rl LAotCQkJCSBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpzaWduYWwsCi0JCQkJIHN0cnVjdCBpOTE1 X2RlcGVuZGVuY3kgKmRlcCwKLQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlJTklUX0xJ U1RfSEVBRCgmZGVwLT5kZnNfbGluayk7Ci0JbGlzdF9hZGQoJmRlcC0+d2FpdF9saW5rLCAmc2ln bmFsLT53YWl0ZXJzX2xpc3QpOwotCWxpc3RfYWRkKCZkZXAtPnNpZ25hbF9saW5rLCAmbm9kZS0+ c2lnbmFsZXJzX2xpc3QpOwotCWRlcC0+c2lnbmFsZXIgPSBzaWduYWw7Ci0JZGVwLT5mbGFncyA9 IGZsYWdzOwotfQotCi1zdGF0aWMgaW50Ci1pOTE1X3NjaGVkX25vZGVfYWRkX2RlcGVuZGVuY3ko c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCi0JCQkgICAgICAgc3RydWN0IGk5MTVfc2No ZWRfbm9kZSAqbm9kZSwKLQkJCSAgICAgICBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpzaWduYWwp Ci17Ci0Jc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqZGVwOwotCi0JZGVwID0gaTkxNV9kZXBlbmRl bmN5X2FsbG9jKGk5MTUpOwotCWlmICghZGVwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCV9faTkx NV9zY2hlZF9ub2RlX2FkZF9kZXBlbmRlbmN5KG5vZGUsIHNpZ25hbCwgZGVwLAotCQkJCQkgSTkx NV9ERVBFTkRFTkNZX0FMTE9DKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWk5MTVf c2NoZWRfbm9kZV9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAotCQkgICAgIHN0 cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUpCi17Ci0Jc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAq ZGVwLCAqdG1wOwotCi0JR0VNX0JVR19PTighbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpOwotCi0J LyoKLQkgKiBFdmVyeW9uZSB3ZSBkZXBlbmRlZCB1cG9uICh0aGUgZmVuY2VzIHdlIHdhaXQgdG8g YmUgc2lnbmFsZWQpCi0JICogc2hvdWxkIHJldGlyZSBiZWZvcmUgdXMgYW5kIHJlbW92ZSB0aGVt c2VsdmVzIGZyb20gb3VyIGxpc3QuCi0JICogSG93ZXZlciwgcmV0aXJlbWVudCBpcyBydW4gaW5k ZXBlbmRlbnRseSBvbiBlYWNoIHRpbWVsaW5lIGFuZAotCSAqIHNvIHdlIG1heSBiZSBjYWxsZWQg b3V0LW9mLW9yZGVyLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXAsIHRtcCwg Jm5vZGUtPnNpZ25hbGVyc19saXN0LCBzaWduYWxfbGluaykgewotCQlHRU1fQlVHX09OKCFpOTE1 X3NjaGVkX25vZGVfc2lnbmFsZWQoZGVwLT5zaWduYWxlcikpOwotCQlHRU1fQlVHX09OKCFsaXN0 X2VtcHR5KCZkZXAtPmRmc19saW5rKSk7Ci0KLQkJbGlzdF9kZWwoJmRlcC0+d2FpdF9saW5rKTsK LQkJaWYgKGRlcC0+ZmxhZ3MgJiBJOTE1X0RFUEVOREVOQ1lfQUxMT0MpCi0JCQlpOTE1X2RlcGVu ZGVuY3lfZnJlZShpOTE1LCBkZXApOwotCX0KLQotCS8qIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSBl dmVyeW9uZSB3aG8gZGVwZW5kcyB1cG9uIHVzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGRlcCwgdG1wLCAmbm9kZS0+d2FpdGVyc19saXN0LCB3YWl0X2xpbmspIHsKLQkJR0VNX0JVR19P TihkZXAtPnNpZ25hbGVyICE9IG5vZGUpOwotCQlHRU1fQlVHX09OKCFsaXN0X2VtcHR5KCZkZXAt PmRmc19saW5rKSk7Ci0KLQkJbGlzdF9kZWwoJmRlcC0+c2lnbmFsX2xpbmspOwotCQlpZiAoZGVw LT5mbGFncyAmIEk5MTVfREVQRU5ERU5DWV9BTExPQykKLQkJCWk5MTVfZGVwZW5kZW5jeV9mcmVl KGk5MTUsIGRlcCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaTkxNV9zY2hlZF9ub2RlX2luaXQo c3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSkKLXsKLQlJTklUX0xJU1RfSEVBRCgmbm9kZS0+ c2lnbmFsZXJzX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZub2RlLT53YWl0ZXJzX2xpc3QpOwot CUlOSVRfTElTVF9IRUFEKCZub2RlLT5saW5rKTsKLQlub2RlLT5hdHRyLnByaW9yaXR5ID0gSTkx NV9QUklPUklUWV9JTlZBTElEOwotfQotCiBzdGF0aWMgaW50IHJlc2V0X2FsbF9nbG9iYWxfc2Vx bm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUzMiBzZXFubykKIHsKIAlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3JlcXVlc3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCmlu ZGV4IDdmYTk0YjAyNDk2OC4uNWY3MzYxZTBmY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlcXVlc3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jl cXVlc3QuaApAQCAtMzMyLDE0ICszMzIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaTkxNV9yZXF1 ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIAlyZXR1cm4gX19p OTE1X3JlcXVlc3RfY29tcGxldGVkKHJxLCBzZXFubyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v bCBpOTE1X3NjaGVkX25vZGVfc2lnbmFsZWQoY29uc3Qgc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAq bm9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSA9Ci0JCWNvbnRhaW5lcl9v Zihub2RlLCBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0LCBzY2hlZCk7Ci0KLQlyZXR1cm4gaTkx NV9yZXF1ZXN0X2NvbXBsZXRlZChycSk7Ci19Ci0KIHZvaWQgaTkxNV9yZXRpcmVfcmVxdWVzdHMo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45 MTBhYzcwODk1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3NjaGVkdWxlci5jCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IE1JVAorICoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgor I2luY2x1ZGUgImk5MTVfcmVxdWVzdC5oIgorI2luY2x1ZGUgImk5MTVfc2NoZWR1bGVyLmgiCisK K3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2NoZWR1bGVfbG9jayk7CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKK25vZGVfdG9fcmVxdWVzdChjb25zdCBzdHJ1Y3QgaTkxNV9z Y2hlZF9ub2RlICpub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2Yobm9kZSwgY29uc3Qgc3Ry dWN0IGk5MTVfcmVxdWVzdCwgc2NoZWQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9z aWduYWxlZChjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlKQoreworCXJldHVybiBp OTE1X3JlcXVlc3RfY29tcGxldGVkKG5vZGVfdG9fcmVxdWVzdChub2RlKSk7Cit9CisKK3ZvaWQg aTkxNV9zY2hlZF9ub2RlX2luaXQoc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSkKK3sKKwlJ TklUX0xJU1RfSEVBRCgmbm9kZS0+c2lnbmFsZXJzX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZu b2RlLT53YWl0ZXJzX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZub2RlLT5saW5rKTsKKwlub2Rl LT5hdHRyLnByaW9yaXR5ID0gSTkxNV9QUklPUklUWV9JTlZBTElEOworfQorCitzdGF0aWMgc3Ry dWN0IGk5MTVfZGVwZW5kZW5jeSAqCitpOTE1X2RlcGVuZGVuY3lfYWxsb2Moc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoaTkxNS0+ZGVw ZW5kZW5jaWVzLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIHZvaWQKK2k5MTVfZGVwZW5kZW5j eV9mcmVlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkgICAgIHN0cnVjdCBpOTE1 X2RlcGVuZGVuY3kgKmRlcCkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoaTkxNS0+ZGVwZW5kZW5jaWVz LCBkZXApOworfQorCitib29sIF9faTkxNV9zY2hlZF9ub2RlX2FkZF9kZXBlbmRlbmN5KHN0cnVj dCBpOTE1X3NjaGVkX25vZGUgKm5vZGUsCisJCQkJICAgICAgc3RydWN0IGk5MTVfc2NoZWRfbm9k ZSAqc2lnbmFsLAorCQkJCSAgICAgIHN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKmRlcCwKKwkJCQkg ICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlzcGlu X2xvY2soJnNjaGVkdWxlX2xvY2spOworCisJaWYgKCFub2RlX3NpZ25hbGVkKHNpZ25hbCkpIHsK KwkJSU5JVF9MSVNUX0hFQUQoJmRlcC0+ZGZzX2xpbmspOworCQlsaXN0X2FkZCgmZGVwLT53YWl0 X2xpbmssICZzaWduYWwtPndhaXRlcnNfbGlzdCk7CisJCWxpc3RfYWRkKCZkZXAtPnNpZ25hbF9s aW5rLCAmbm9kZS0+c2lnbmFsZXJzX2xpc3QpOworCQlkZXAtPnNpZ25hbGVyID0gc2lnbmFsOwor CQlkZXAtPmZsYWdzID0gZmxhZ3M7CisKKwkJcmV0ID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9j aygmc2NoZWR1bGVfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaTkxNV9zY2hlZF9u b2RlX2FkZF9kZXBlbmRlbmN5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAorCQkJCSAg IHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUsCisJCQkJICAgc3RydWN0IGk5MTVfc2NoZWRf bm9kZSAqc2lnbmFsKQoreworCXN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKmRlcDsKKworCWRlcCA9 IGk5MTVfZGVwZW5kZW5jeV9hbGxvYyhpOTE1KTsKKwlpZiAoIWRlcCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlpZiAoIV9faTkxNV9zY2hlZF9ub2RlX2FkZF9kZXBlbmRlbmN5KG5vZGUsIHNpZ25h bCwgZGVwLAorCQkJCQkgICAgICBJOTE1X0RFUEVOREVOQ1lfQUxMT0MpKQorCQlpOTE1X2RlcGVu ZGVuY3lfZnJlZShpOTE1LCBkZXApOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaTkxNV9zY2hl ZF9ub2RlX2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkgIHN0cnVjdCBp OTE1X3NjaGVkX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGk5MTVfZGVwZW5kZW5jeSAqZGVwLCAq dG1wOworCisJR0VNX0JVR19PTighbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpOworCisJc3Bpbl9s b2NrKCZzY2hlZHVsZV9sb2NrKTsKKworCS8qCisJICogRXZlcnlvbmUgd2UgZGVwZW5kZWQgdXBv biAodGhlIGZlbmNlcyB3ZSB3YWl0IHRvIGJlIHNpZ25hbGVkKQorCSAqIHNob3VsZCByZXRpcmUg YmVmb3JlIHVzIGFuZCByZW1vdmUgdGhlbXNlbHZlcyBmcm9tIG91ciBsaXN0LgorCSAqIEhvd2V2 ZXIsIHJldGlyZW1lbnQgaXMgcnVuIGluZGVwZW5kZW50bHkgb24gZWFjaCB0aW1lbGluZSBhbmQK KwkgKiBzbyB3ZSBtYXkgYmUgY2FsbGVkIG91dC1vZi1vcmRlci4KKwkgKi8KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoZGVwLCB0bXAsICZub2RlLT5zaWduYWxlcnNfbGlzdCwgc2lnbmFsX2xp bmspIHsKKwkJR0VNX0JVR19PTighbm9kZV9zaWduYWxlZChkZXAtPnNpZ25hbGVyKSk7CisJCUdF TV9CVUdfT04oIWxpc3RfZW1wdHkoJmRlcC0+ZGZzX2xpbmspKTsKKworCQlsaXN0X2RlbCgmZGVw LT53YWl0X2xpbmspOworCQlpZiAoZGVwLT5mbGFncyAmIEk5MTVfREVQRU5ERU5DWV9BTExPQykK KwkJCWk5MTVfZGVwZW5kZW5jeV9mcmVlKGk5MTUsIGRlcCk7CisJfQorCisJLyogUmVtb3ZlIG91 cnNlbHZlcyBmcm9tIGV2ZXJ5b25lIHdobyBkZXBlbmRzIHVwb24gdXMgKi8KKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoZGVwLCB0bXAsICZub2RlLT53YWl0ZXJzX2xpc3QsIHdhaXRfbGluaykg eworCQlHRU1fQlVHX09OKGRlcC0+c2lnbmFsZXIgIT0gbm9kZSk7CisJCUdFTV9CVUdfT04oIWxp c3RfZW1wdHkoJmRlcC0+ZGZzX2xpbmspKTsKKworCQlsaXN0X2RlbCgmZGVwLT5zaWduYWxfbGlu ayk7CisJCWlmIChkZXAtPmZsYWdzICYgSTkxNV9ERVBFTkRFTkNZX0FMTE9DKQorCQkJaTkxNV9k ZXBlbmRlbmN5X2ZyZWUoaTkxNSwgZGVwKTsKKwl9CisKKwlzcGluX3VubG9jaygmc2NoZWR1bGVf bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9s aXN0KHN0cnVjdCByYl9ub2RlICpyYikKK3sKKwlyZXR1cm4gcmJfZW50cnkocmIsIHN0cnVjdCBp OTE1X3ByaW9saXN0LCBub2RlKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0X3ByaW9saXN0cyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cywKKwkJCSAgICAg aW50IHF1ZXVlX3ByaW9yaXR5KQoreworCXN0cnVjdCByYl9ub2RlICpyYjsKKwlpbnQgbGFzdF9w cmlvLCBpOworCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19HRU0pKQor CQlyZXR1cm47CisKKwlHRU1fQlVHX09OKHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1 ZSkgIT0KKwkJICAgcmJfZmlyc3QoJmV4ZWNsaXN0cy0+cXVldWUucmJfcm9vdCkpOworCisJbGFz dF9wcmlvID0gKHF1ZXVlX3ByaW9yaXR5ID4+IEk5MTVfVVNFUl9QUklPUklUWV9TSElGVCkgKyAx OworCWZvciAocmIgPSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpOyByYjsgcmIg PSByYl9uZXh0KHJiKSkgeworCQljb25zdCBzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcCA9IHRvX3By aW9saXN0KHJiKTsKKworCQlHRU1fQlVHX09OKHAtPnByaW9yaXR5ID49IGxhc3RfcHJpbyk7CisJ CWxhc3RfcHJpbyA9IHAtPnByaW9yaXR5OworCisJCUdFTV9CVUdfT04oIXAtPnVzZWQpOworCQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwLT5yZXF1ZXN0cyk7IGkrKykgeworCQkJaWYgKGxp c3RfZW1wdHkoJnAtPnJlcXVlc3RzW2ldKSkKKwkJCQljb250aW51ZTsKKworCQkJR0VNX0JVR19P TighKHAtPnVzZWQgJiBCSVQoaSkpKTsKKwkJfQorCX0KK30KKworc3RydWN0IGxpc3RfaGVhZCAq CitpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIGludCBwcmlvKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3Qg ZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOworCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpw OworCXN0cnVjdCByYl9ub2RlICoqcGFyZW50LCAqcmI7CisJYm9vbCBmaXJzdCA9IHRydWU7CisJ aW50IGlkeCwgaTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+dGltZWxpbmUubG9j ayk7CisJYXNzZXJ0X3ByaW9saXN0cyhleGVjbGlzdHMsIElOVF9NQVgpOworCisJLyogYnVja2V0 cyBzb3J0ZWQgZnJvbSBoaWdoZXN0IFtpbiBzbG90IDBdIHRvIGxvd2VzdCBwcmlvcml0eSAqLwor CWlkeCA9IEk5MTVfUFJJT1JJVFlfQ09VTlQgLSAocHJpbyAmIH5JOTE1X1BSSU9SSVRZX01BU0sp IC0gMTsKKwlwcmlvID4+PSBJOTE1X1VTRVJfUFJJT1JJVFlfU0hJRlQ7CisJaWYgKHVubGlrZWx5 KGV4ZWNsaXN0cy0+bm9fcHJpb2xpc3QpKQorCQlwcmlvID0gSTkxNV9QUklPUklUWV9OT1JNQUw7 CisKK2ZpbmRfcHJpb2xpc3Q6CisJLyogbW9zdCBwb3NpdGl2ZSBwcmlvcml0eSBpcyBzY2hlZHVs ZWQgZmlyc3QsIGVxdWFsIHByaW9yaXRpZXMgZmlmbyAqLworCXJiID0gTlVMTDsKKwlwYXJlbnQg PSAmZXhlY2xpc3RzLT5xdWV1ZS5yYl9yb290LnJiX25vZGU7CisJd2hpbGUgKCpwYXJlbnQpIHsK KwkJcmIgPSAqcGFyZW50OworCQlwID0gdG9fcHJpb2xpc3QocmIpOworCQlpZiAocHJpbyA+IHAt PnByaW9yaXR5KSB7CisJCQlwYXJlbnQgPSAmcmItPnJiX2xlZnQ7CisJCX0gZWxzZSBpZiAocHJp byA8IHAtPnByaW9yaXR5KSB7CisJCQlwYXJlbnQgPSAmcmItPnJiX3JpZ2h0OworCQkJZmlyc3Qg PSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHByaW8g PT0gSTkxNV9QUklPUklUWV9OT1JNQUwpIHsKKwkJcCA9ICZleGVjbGlzdHMtPmRlZmF1bHRfcHJp b2xpc3Q7CisJfSBlbHNlIHsKKwkJcCA9IGttZW1fY2FjaGVfYWxsb2MoZW5naW5lLT5pOTE1LT5w cmlvcml0aWVzLCBHRlBfQVRPTUlDKTsKKwkJLyogQ29udmVydCBhbiBhbGxvY2F0aW9uIGZhaWx1 cmUgdG8gYSBwcmlvcml0eSBidW1wICovCisJCWlmICh1bmxpa2VseSghcCkpIHsKKwkJCXByaW8g PSBJOTE1X1BSSU9SSVRZX05PUk1BTDsgLyogcmVjdXJzZXMganVzdCBvbmNlICovCisKKwkJCS8q IFRvIG1haW50YWluIG9yZGVyaW5nIHdpdGggYWxsIHJlbmRlcmluZywgYWZ0ZXIgYW4KKwkJCSAq IGFsbG9jYXRpb24gZmFpbHVyZSB3ZSBoYXZlIHRvIGRpc2FibGUgYWxsIHNjaGVkdWxpbmcuCisJ CQkgKiBSZXF1ZXN0cyB3aWxsIHRoZW4gYmUgZXhlY3V0ZWQgaW4gZmlmbywgYW5kIHNjaGVkdWxl CisJCQkgKiB3aWxsIGVuc3VyZSB0aGF0IGRlcGVuZGVuY2llcyBhcmUgZW1pdHRlZCBpbiBmaWZv LgorCQkJICogVGhlcmUgd2lsbCBiZSBzdGlsbCBzb21lIHJlb3JkZXJpbmcgd2l0aCBleGlzdGlu ZworCQkJICogcmVxdWVzdHMsIHNvIGlmIHVzZXJzcGFjZSBsaWVkIGFib3V0IHRoZWlyCisJCQkg KiBkZXBlbmRlbmNpZXMgdGhhdCByZW9yZGVyaW5nIG1heSBiZSB2aXNpYmxlLgorCQkJICovCisJ CQlleGVjbGlzdHMtPm5vX3ByaW9saXN0ID0gdHJ1ZTsKKwkJCWdvdG8gZmluZF9wcmlvbGlzdDsK KwkJfQorCX0KKworCXAtPnByaW9yaXR5ID0gcHJpbzsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShwLT5yZXF1ZXN0cyk7IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJnAtPnJlcXVlc3RzW2ld KTsKKwlyYl9saW5rX25vZGUoJnAtPm5vZGUsIHJiLCBwYXJlbnQpOworCXJiX2luc2VydF9jb2xv cl9jYWNoZWQoJnAtPm5vZGUsICZleGVjbGlzdHMtPnF1ZXVlLCBmaXJzdCk7CisJcC0+dXNlZCA9 IDA7CisKK291dDoKKwlwLT51c2VkIHw9IEJJVChpZHgpOworCXJldHVybiAmcC0+cmVxdWVzdHNb aWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKgorc2NoZWRfbG9ja19l bmdpbmUoc3RydWN0IGk5MTVfc2NoZWRfbm9kZSAqbm9kZSwgc3RydWN0IGludGVsX2VuZ2luZV9j cyAqbG9ja2VkKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IG5vZGVfdG9f cmVxdWVzdChub2RlKS0+ZW5naW5lOworCisJR0VNX0JVR19PTighbG9ja2VkKTsKKworCWlmIChl bmdpbmUgIT0gbG9ja2VkKSB7CisJCXNwaW5fdW5sb2NrKCZsb2NrZWQtPnRpbWVsaW5lLmxvY2sp OworCQlzcGluX2xvY2soJmVuZ2luZS0+dGltZWxpbmUubG9jayk7CisJfQorCisJcmV0dXJuIGVu Z2luZTsKK30KKwordm9pZCBpOTE1X3NjaGVkdWxlKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCBj b25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyICphdHRyKQoreworCXN0cnVjdCBsaXN0X2hlYWQg KnVuaW5pdGlhbGl6ZWRfdmFyKHBsKTsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs ICpsYXN0OworCXN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKmRlcCwgKnA7CisJc3RydWN0IGk5MTVf ZGVwZW5kZW5jeSBzdGFjazsKKwljb25zdCBpbnQgcHJpbyA9IGF0dHItPnByaW9yaXR5OworCUxJ U1RfSEVBRChkZnMpOworCisJR0VNX0JVR19PTihwcmlvID09IEk5MTVfUFJJT1JJVFlfSU5WQUxJ RCk7CisKKwlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCisJCXJldHVybjsKKworCWlm IChwcmlvIDw9IFJFQURfT05DRShycS0+c2NoZWQuYXR0ci5wcmlvcml0eSkpCisJCXJldHVybjsK KworCS8qIE5lZWRlZCBpbiBvcmRlciB0byB1c2UgdGhlIHRlbXBvcmFyeSBsaW5rIGluc2lkZSBp OTE1X2RlcGVuZGVuY3kgKi8KKwlzcGluX2xvY2soJnNjaGVkdWxlX2xvY2spOworCisJc3RhY2su c2lnbmFsZXIgPSAmcnEtPnNjaGVkOworCWxpc3RfYWRkKCZzdGFjay5kZnNfbGluaywgJmRmcyk7 CisKKwkvKgorCSAqIFJlY3Vyc2l2ZWx5IGJ1bXAgYWxsIGRlcGVuZGVudCBwcmlvcml0aWVzIHRv IG1hdGNoIHRoZSBuZXcgcmVxdWVzdC4KKwkgKgorCSAqIEEgbmFpdmUgYXBwcm9hY2ggd291bGQg YmUgdG8gdXNlIHJlY3Vyc2lvbjoKKwkgKiBzdGF0aWMgdm9pZCB1cGRhdGVfcHJpb3JpdGllcyhz dHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLCBwcmlvKSB7CisJICoJbGlzdF9mb3JfZWFjaF9l bnRyeShkZXAsICZub2RlLT5zaWduYWxlcnNfbGlzdCwgc2lnbmFsX2xpbmspCisJICoJCXVwZGF0 ZV9wcmlvcml0aWVzKGRlcC0+c2lnbmFsLCBwcmlvKQorCSAqCXF1ZXVlX3JlcXVlc3Qobm9kZSk7 CisJICogfQorCSAqIGJ1dCB0aGF0IG1heSBoYXZlIHVubGltaXRlZCByZWN1cnNpb24gZGVwdGgg YW5kIHNvIHJ1bnMgYSB2ZXJ5CisJICogcmVhbCByaXNrIG9mIG92ZXJ1bm5pbmcgdGhlIGtlcm5l bCBzdGFjay4gSW5zdGVhZCwgd2UgYnVpbGQKKwkgKiBhIGZsYXQgbGlzdCBvZiBhbGwgZGVwZW5k ZW5jaWVzIHN0YXJ0aW5nIHdpdGggdGhlIGN1cnJlbnQgcmVxdWVzdC4KKwkgKiBBcyB3ZSB3YWxr IHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcywgd2UgYWRkIGFsbCBvZiBpdHMgZGVwZW5kZW5jaWVz CisJICogdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCAodGhpcyBtYXkgaW5jbHVkZSBhbiBhbHJlYWR5 IHZpc2l0ZWQKKwkgKiByZXF1ZXN0KSBhbmQgY29udGludWUgdG8gd2FsayBvbndhcmRzIG9udG8g dGhlIG5ldyBkZXBlbmRlbmNpZXMuIFRoZQorCSAqIGVuZCByZXN1bHQgaXMgYSB0b3BvbG9naWNh bCBsaXN0IG9mIHJlcXVlc3RzIGluIHJldmVyc2Ugb3JkZXIsIHRoZQorCSAqIGxhc3QgZWxlbWVu dCBpbiB0aGUgbGlzdCBpcyB0aGUgcmVxdWVzdCB3ZSBtdXN0IGV4ZWN1dGUgZmlyc3QuCisJICov CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXAsICZkZnMsIGRmc19saW5rKSB7CisJCXN0cnVjdCBp OTE1X3NjaGVkX25vZGUgKm5vZGUgPSBkZXAtPnNpZ25hbGVyOworCisJCS8qCisJCSAqIFdpdGhp biBhbiBlbmdpbmUsIHRoZXJlIGNhbiBiZSBubyBjeWNsZSwgYnV0IHdlIG1heQorCQkgKiByZWZl ciB0byB0aGUgc2FtZSBkZXBlbmRlbmN5IGNoYWluIG11bHRpcGxlIHRpbWVzCisJCSAqIChyZWR1 bmRhbnQgZGVwZW5kZW5jaWVzIGFyZSBub3QgZWxpbWluYXRlZCkgYW5kIGFjcm9zcworCQkgKiBl bmdpbmVzLgorCQkgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmbm9kZS0+c2lnbmFsZXJz X2xpc3QsIHNpZ25hbF9saW5rKSB7CisJCQlHRU1fQlVHX09OKHAgPT0gZGVwKTsgLyogbm8gY3lj bGVzISAqLworCisJCQlpZiAobm9kZV9zaWduYWxlZChwLT5zaWduYWxlcikpCisJCQkJY29udGlu dWU7CisKKwkJCUdFTV9CVUdfT04ocC0+c2lnbmFsZXItPmF0dHIucHJpb3JpdHkgPCBub2RlLT5h dHRyLnByaW9yaXR5KTsKKwkJCWlmIChwcmlvID4gUkVBRF9PTkNFKHAtPnNpZ25hbGVyLT5hdHRy LnByaW9yaXR5KSkKKwkJCQlsaXN0X21vdmVfdGFpbCgmcC0+ZGZzX2xpbmssICZkZnMpOworCQl9 CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkaWRuJ3QgbmVlZCB0byBidW1wIGFueSBleGlzdGluZyBw cmlvcml0aWVzLCBhbmQgd2UgaGF2ZW4ndAorCSAqIHlldCBzdWJtaXR0ZWQgdGhpcyByZXF1ZXN0 IChpLmUuIHRoZXJlIGlzIG5vIHBvdGVudGlhbCByYWNlIHdpdGgKKwkgKiBleGVjbGlzdHNfc3Vi bWl0X3JlcXVlc3QoKSksIHdlIGNhbiBzZXQgb3VyIG93biBwcmlvcml0eSBhbmQgc2tpcAorCSAq IGFjcXVpcmluZyB0aGUgZW5naW5lIGxvY2tzLgorCSAqLworCWlmIChycS0+c2NoZWQuYXR0ci5w cmlvcml0eSA9PSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQpIHsKKwkJR0VNX0JVR19PTighbGlzdF9l bXB0eSgmcnEtPnNjaGVkLmxpbmspKTsKKwkJcnEtPnNjaGVkLmF0dHIgPSAqYXR0cjsKKworCQlp ZiAoc3RhY2suZGZzX2xpbmsubmV4dCA9PSBzdGFjay5kZnNfbGluay5wcmV2KQorCQkJZ290byBv dXRfdW5sb2NrOworCisJCV9fbGlzdF9kZWxfZW50cnkoJnN0YWNrLmRmc19saW5rKTsKKwl9CisK KwlsYXN0ID0gTlVMTDsKKwllbmdpbmUgPSBycS0+ZW5naW5lOworCXNwaW5fbG9ja19pcnEoJmVu Z2luZS0+dGltZWxpbmUubG9jayk7CisKKwkvKiBGaWZvIGFuZCBkZXB0aC1maXJzdCByZXBsYWNl bWVudCBlbnN1cmUgb3VyIGRlcHMgZXhlY3V0ZSBiZWZvcmUgdXMgKi8KKwlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmVfcmV2ZXJzZShkZXAsIHAsICZkZnMsIGRmc19saW5rKSB7CisJCXN0cnVjdCBp OTE1X3NjaGVkX25vZGUgKm5vZGUgPSBkZXAtPnNpZ25hbGVyOworCisJCUlOSVRfTElTVF9IRUFE KCZkZXAtPmRmc19saW5rKTsKKworCQllbmdpbmUgPSBzY2hlZF9sb2NrX2VuZ2luZShub2RlLCBl bmdpbmUpOworCisJCS8qIFJlY2hlY2sgYWZ0ZXIgYWNxdWlyaW5nIHRoZSBlbmdpbmUtPnRpbWVs aW5lLmxvY2sgKi8KKwkJaWYgKHByaW8gPD0gbm9kZS0+YXR0ci5wcmlvcml0eSB8fCBub2RlX3Np Z25hbGVkKG5vZGUpKQorCQkJY29udGludWU7CisKKwkJbm9kZS0+YXR0ci5wcmlvcml0eSA9IHBy aW87CisJCWlmICghbGlzdF9lbXB0eSgmbm9kZS0+bGluaykpIHsKKwkJCWlmIChsYXN0ICE9IGVu Z2luZSkgeworCQkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlv KTsKKwkJCQlsYXN0ID0gZW5naW5lOworCQkJfQorCQkJbGlzdF9tb3ZlX3RhaWwoJm5vZGUtPmxp bmssIHBsKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgcmVxdWVzdCBpcyBub3Qg aW4gdGhlIHByaW9saXN0IHF1ZXVlIGJlY2F1c2UKKwkJCSAqIGl0IGlzIG5vdCB5ZXQgcnVubmFi bGUsIHRoZW4gaXQgZG9lc24ndCBjb250cmlidXRlCisJCQkgKiB0byBvdXIgcHJlZW1wdGlvbiBk ZWNpc2lvbnMuIE9uIHRoZSBvdGhlciBoYW5kLAorCQkJICogaWYgdGhlIHJlcXVlc3QgaXMgb24g dGhlIEhXLCBpdCB0b28gaXMgbm90IGluIHRoZQorCQkJICogcXVldWU7IGJ1dCBpbiB0aGF0IGNh c2Ugd2UgbWF5IHN0aWxsIG5lZWQgdG8gcmVvcmRlcgorCQkJICogdGhlIGluZmxpZ2h0IHJlcXVl c3RzLgorCQkJICovCisJCQlpZiAoIWk5MTVfc3dfZmVuY2VfZG9uZSgmbm9kZV90b19yZXF1ZXN0 KG5vZGUpLT5zdWJtaXQpKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHByaW8gPD0gZW5n aW5lLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkg KiBJZiB3ZSBhcmUgYWxyZWFkeSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0LCBkb24n dAorCQkgKiBib3RoZXIgZXZhbHVhdGluZyBpZiB3ZSBzaG91bGQgcHJlZW1wdCBvdXJzZWx2ZXMu CisJCSAqLworCQlpZiAobm9kZV90b19yZXF1ZXN0KG5vZGUpLT5nbG9iYWxfc2Vxbm8gJiYKKwkJ ICAgIGk5MTVfc2Vxbm9fcGFzc2VkKHBvcnRfcmVxdWVzdChlbmdpbmUtPmV4ZWNsaXN0cy5wb3J0 KS0+Z2xvYmFsX3NlcW5vLAorCQkJCSAgICAgIG5vZGVfdG9fcmVxdWVzdChub2RlKS0+Z2xvYmFs X3NlcW5vKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIERlZmVyICh0YXNrbGV0KSBzdWJtaXNzaW9u IHVudGlsIGFmdGVyIGFsbCBvZiBvdXIgdXBkYXRlcy4gKi8KKwkJZW5naW5lLT5leGVjbGlzdHMu cXVldWVfcHJpb3JpdHkgPSBwcmlvOworCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZlbmdpbmUtPmV4 ZWNsaXN0cy50YXNrbGV0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJmVuZ2luZS0+dGltZWxp bmUubG9jayk7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJnNjaGVkdWxlX2xvY2spOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKaW5kZXggOTNlNDNlMjYzZDhjLi44 MDU4YzE3YWU5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1 bGVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaApAQCAtOCw5 ICs4LDE0IEBACiAjZGVmaW5lIF9JOTE1X1NDSEVEVUxFUl9IXwogCiAjaW5jbHVkZSA8bGludXgv Yml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDx1YXBpL2Ry bS9pOTE1X2RybS5oPgogCitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpOTE1X3Jl cXVlc3Q7CitzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzOworCiBlbnVtIHsKIAlJOTE1X1BSSU9SSVRZ X01JTiA9IEk5MTVfQ09OVEVYVF9NSU5fVVNFUl9QUklPUklUWSAtIDEsCiAJSTkxNV9QUklPUklU WV9OT1JNQUwgPSBJOTE1X0NPTlRFWFRfREVGQVVMVF9QUklPUklUWSwKQEAgLTc3LDQgKzgyLDI0 IEBAIHN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgewogI2RlZmluZSBJOTE1X0RFUEVOREVOQ1lfQUxM T0MgQklUKDApCiB9OwogCit2b2lkIGk5MTVfc2NoZWRfbm9kZV9pbml0KHN0cnVjdCBpOTE1X3Nj aGVkX25vZGUgKm5vZGUpOworCitib29sIF9faTkxNV9zY2hlZF9ub2RlX2FkZF9kZXBlbmRlbmN5 KHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUsCisJCQkJICAgICAgc3RydWN0IGk5MTVfc2No ZWRfbm9kZSAqc2lnbmFsLAorCQkJCSAgICAgIHN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKmRlcCwK KwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworaW50IGk5MTVfc2NoZWRfbm9kZV9h ZGRfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkgICBzdHJ1 Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLAorCQkJCSAgIHN0cnVjdCBpOTE1X3NjaGVkX25vZGUg KnNpZ25hbCk7CisKK3ZvaWQgaTkxNV9zY2hlZF9ub2RlX2Zpbmkoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUsCisJCQkgIHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUpOworCit2b2lk IGk5MTVfc2NoZWR1bGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwKKwkJICAgY29uc3Qg c3RydWN0IGk5MTVfc2NoZWRfYXR0ciAqYXR0cik7CisKK3N0cnVjdCBsaXN0X2hlYWQgKgoraTkx NV9zY2hlZF9sb29rdXBfcHJpb2xpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBp bnQgcHJpbyk7CisKICNlbmRpZiAvKiBfSTkxNV9TQ0hFRFVMRVJfSF8gKi8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBmYmNjNTZjYWZmYjYuLjMxYTNmZGY4ZjA1MSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTMxNjksMTMgKzEzMTY5LDEyIEBA IGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlyZXQg PSBpbnRlbF9wbGFuZV9waW5fZmIodG9faW50ZWxfcGxhbmVfc3RhdGUobmV3X3N0YXRlKSk7CiAK LQlmYl9vYmpfYnVtcF9yZW5kZXJfcHJpb3JpdHkob2JqKTsKLQogCW11dGV4X3VubG9jaygmZGV2 X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhv YmopOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlmYl9vYmpfYnVtcF9yZW5kZXJfcHJp b3JpdHkob2JqKTsKIAlpbnRlbF9mYl9vYmpfZmx1c2gob2JqLCBPUklHSU5fRElSVFlGQik7CiAK IAlpZiAoIW5ld19zdGF0ZS0+ZmVuY2UpIHsgLyogaW1wbGljaXQgZmVuY2luZyAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYwppbmRleCBlZTlhNjU2ZTU0OWMuLjc0YmU5YTQ5ZWY5ZSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmMKQEAgLTI1OSwxMDIgKzI1OSw2IEBAIGludGVsX2xyX2NvbnRl eHRfZGVzY3JpcHRvcl91cGRhdGUoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKIAljZS0+ bHJjX2Rlc2MgPSBkZXNjOwogfQogCi1zdGF0aWMgdm9pZCBhc3NlcnRfcHJpb2xpc3RzKHN0cnVj dCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzLAotCQkJICAgICBpbnQg cXVldWVfcHJpb3JpdHkpCi17Ci0Jc3RydWN0IHJiX25vZGUgKnJiOwotCWludCBsYXN0X3ByaW8s IGk7Ci0KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X0RFQlVHX0dFTSkpCi0JCXJl dHVybjsKLQotCUdFTV9CVUdfT04ocmJfZmlyc3RfY2FjaGVkKCZleGVjbGlzdHMtPnF1ZXVlKSAh PQotCQkgICByYl9maXJzdCgmZXhlY2xpc3RzLT5xdWV1ZS5yYl9yb290KSk7Ci0KLQlsYXN0X3By aW8gPSAocXVldWVfcHJpb3JpdHkgPj4gSTkxNV9VU0VSX1BSSU9SSVRZX1NISUZUKSArIDE7Ci0J Zm9yIChyYiA9IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT5xdWV1ZSk7IHJiOyByYiA9IHJi X25leHQocmIpKSB7Ci0JCXN0cnVjdCBpOTE1X3ByaW9saXN0ICpwID0gdG9fcHJpb2xpc3QocmIp OwotCi0JCUdFTV9CVUdfT04ocC0+cHJpb3JpdHkgPj0gbGFzdF9wcmlvKTsKLQkJbGFzdF9wcmlv ID0gcC0+cHJpb3JpdHk7Ci0KLQkJR0VNX0JVR19PTighcC0+dXNlZCk7Ci0JCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHAtPnJlcXVlc3RzKTsgaSsrKSB7Ci0JCQlpZiAobGlzdF9lbXB0eSgm cC0+cmVxdWVzdHNbaV0pKQotCQkJCWNvbnRpbnVlOwotCi0JCQlHRU1fQlVHX09OKCEocC0+dXNl ZCAmIEJJVChpKSkpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqCi1s b29rdXBfcHJpb2xpc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgcHJpbykK LXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZl bmdpbmUtPmV4ZWNsaXN0czsKLQlzdHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcDsKLQlzdHJ1Y3QgcmJf bm9kZSAqKnBhcmVudCwgKnJiOwotCWJvb2wgZmlyc3QgPSB0cnVlOwotCWludCBpZHgsIGk7Ci0K LQlhc3NlcnRfcHJpb2xpc3RzKGV4ZWNsaXN0cywgSU5UX01BWCk7Ci0KLQkvKiBidWNrZXRzIHNv cnRlZCBmcm9tIGhpZ2hlc3QgW2luIHNsb3QgMF0gdG8gbG93ZXN0IHByaW9yaXR5ICovCi0JaWR4 ID0gSTkxNV9QUklPUklUWV9DT1VOVCAtIChwcmlvICYgfkk5MTVfUFJJT1JJVFlfTUFTSykgLSAx OwotCXByaW8gPj49IEk5MTVfVVNFUl9QUklPUklUWV9TSElGVDsKLQlpZiAodW5saWtlbHkoZXhl Y2xpc3RzLT5ub19wcmlvbGlzdCkpCi0JCXByaW8gPSBJOTE1X1BSSU9SSVRZX05PUk1BTDsKLQot ZmluZF9wcmlvbGlzdDoKLQkvKiBtb3N0IHBvc2l0aXZlIHByaW9yaXR5IGlzIHNjaGVkdWxlZCBm aXJzdCwgZXF1YWwgcHJpb3JpdGllcyBmaWZvICovCi0JcmIgPSBOVUxMOwotCXBhcmVudCA9ICZl eGVjbGlzdHMtPnF1ZXVlLnJiX3Jvb3QucmJfbm9kZTsKLQl3aGlsZSAoKnBhcmVudCkgewotCQly YiA9ICpwYXJlbnQ7Ci0JCXAgPSB0b19wcmlvbGlzdChyYik7Ci0JCWlmIChwcmlvID4gcC0+cHJp b3JpdHkpIHsKLQkJCXBhcmVudCA9ICZyYi0+cmJfbGVmdDsKLQkJfSBlbHNlIGlmIChwcmlvIDwg cC0+cHJpb3JpdHkpIHsKLQkJCXBhcmVudCA9ICZyYi0+cmJfcmlnaHQ7Ci0JCQlmaXJzdCA9IGZh bHNlOwotCQl9IGVsc2UgewotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpbyA9PSBJ OTE1X1BSSU9SSVRZX05PUk1BTCkgewotCQlwID0gJmV4ZWNsaXN0cy0+ZGVmYXVsdF9wcmlvbGlz dDsKLQl9IGVsc2UgewotCQlwID0ga21lbV9jYWNoZV9hbGxvYyhlbmdpbmUtPmk5MTUtPnByaW9y aXRpZXMsIEdGUF9BVE9NSUMpOwotCQkvKiBDb252ZXJ0IGFuIGFsbG9jYXRpb24gZmFpbHVyZSB0 byBhIHByaW9yaXR5IGJ1bXAgKi8KLQkJaWYgKHVubGlrZWx5KCFwKSkgewotCQkJcHJpbyA9IEk5 MTVfUFJJT1JJVFlfTk9STUFMOyAvKiByZWN1cnNlcyBqdXN0IG9uY2UgKi8KLQotCQkJLyogVG8g bWFpbnRhaW4gb3JkZXJpbmcgd2l0aCBhbGwgcmVuZGVyaW5nLCBhZnRlciBhbgotCQkJICogYWxs b2NhdGlvbiBmYWlsdXJlIHdlIGhhdmUgdG8gZGlzYWJsZSBhbGwgc2NoZWR1bGluZy4KLQkJCSAq IFJlcXVlc3RzIHdpbGwgdGhlbiBiZSBleGVjdXRlZCBpbiBmaWZvLCBhbmQgc2NoZWR1bGUKLQkJ CSAqIHdpbGwgZW5zdXJlIHRoYXQgZGVwZW5kZW5jaWVzIGFyZSBlbWl0dGVkIGluIGZpZm8uCi0J CQkgKiBUaGVyZSB3aWxsIGJlIHN0aWxsIHNvbWUgcmVvcmRlcmluZyB3aXRoIGV4aXN0aW5nCi0J CQkgKiByZXF1ZXN0cywgc28gaWYgdXNlcnNwYWNlIGxpZWQgYWJvdXQgdGhlaXIKLQkJCSAqIGRl cGVuZGVuY2llcyB0aGF0IHJlb3JkZXJpbmcgbWF5IGJlIHZpc2libGUuCi0JCQkgKi8KLQkJCWV4 ZWNsaXN0cy0+bm9fcHJpb2xpc3QgPSB0cnVlOwotCQkJZ290byBmaW5kX3ByaW9saXN0OwotCQl9 Ci0JfQotCi0JcC0+cHJpb3JpdHkgPSBwcmlvOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KHAtPnJlcXVlc3RzKTsgaSsrKQotCQlJTklUX0xJU1RfSEVBRCgmcC0+cmVxdWVzdHNbaV0pOwot CXJiX2xpbmtfbm9kZSgmcC0+bm9kZSwgcmIsIHBhcmVudCk7Ci0JcmJfaW5zZXJ0X2NvbG9yX2Nh Y2hlZCgmcC0+bm9kZSwgJmV4ZWNsaXN0cy0+cXVldWUsIGZpcnN0KTsKLQlwLT51c2VkID0gMDsK LQotb3V0OgotCXAtPnVzZWQgfD0gQklUKGlkeCk7Ci0JcmV0dXJuICZwLT5yZXF1ZXN0c1tpZHhd OwotfQotCiBzdGF0aWMgdm9pZCB1bndpbmRfd2FfdGFpbChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSkKIHsKIAlycS0+dGFpbCA9IGludGVsX3Jpbmdfd3JhcChycS0+cmluZywgcnEtPndhX3RhaWwg LSBXQV9UQUlMX0JZVEVTKTsKQEAgLTM4MSw3ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBfX3Vud2lu ZF9pbmNvbXBsZXRlX3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAkJ R0VNX0JVR19PTihycV9wcmlvKHJxKSA9PSBJOTE1X1BSSU9SSVRZX0lOVkFMSUQpOwogCQlpZiAo cnFfcHJpbyhycSkgIT0gcHJpbykgewogCQkJcHJpbyA9IHJxX3ByaW8ocnEpOwotCQkJcGwgPSBs b29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsKKwkJCXBsID0gaTkxNV9zY2hlZF9sb29rdXBf cHJpb2xpc3QoZW5naW5lLCBwcmlvKTsKIAkJfQogCQlHRU1fQlVHX09OKFJCX0VNUFRZX1JPT1Qo JmVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlLnJiX3Jvb3QpKTsKIApAQCAtMzk4LDcgKzMwMiw3IEBA IHN0YXRpYyB2b2lkIF9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQogCWlmICghKHByaW8gJiBJOTE1X1BSSU9SSVRZX05FV0NMSUVOVCkp IHsKIAkJcHJpbyB8PSBJOTE1X1BSSU9SSVRZX05FV0NMSUVOVDsKIAkJbGlzdF9tb3ZlX3RhaWwo JmFjdGl2ZS0+c2NoZWQubGluaywKLQkJCSAgICAgICBsb29rdXBfcHJpb2xpc3QoZW5naW5lLCBw cmlvKSk7CisJCQkgICAgICAgaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlv KSk7CiAJfQogfQogCkBAIC03OTMsNyArNjk3LDYgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2Rl cXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogCSAqLwogCWV4ZWNsaXN0cy0+ cXVldWVfcHJpb3JpdHkgPQogCQlwb3J0ICE9IGV4ZWNsaXN0cy0+cG9ydCA/IHJxX3ByaW8obGFz dCkgOiBJTlRfTUlOOwotCWFzc2VydF9wcmlvbGlzdHMoZXhlY2xpc3RzLCBleGVjbGlzdHMtPnF1 ZXVlX3ByaW9yaXR5KTsKIAogCWlmIChzdWJtaXQpIHsKIAkJcG9ydF9hc3NpZ24ocG9ydCwgbGFz dCk7CkBAIC0xMTIwLDEyICsxMDIzLDcgQEAgc3RhdGljIHZvaWQgcXVldWVfcmVxdWVzdChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCQkgIHN0cnVjdCBpOTE1X3NjaGVkX25vZGUg Km5vZGUsCiAJCQkgIGludCBwcmlvKQogewotCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmxpbmssIGxv b2t1cF9wcmlvbGlzdChlbmdpbmUsIHByaW8pKTsKLX0KLQotc3RhdGljIHZvaWQgX191cGRhdGVf cXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgcHJpbykKLXsKLQllbmdp bmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eSA9IHByaW87CisJbGlzdF9hZGRfdGFpbCgmbm9k ZS0+bGluaywgaTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKSk7CiB9CiAK IHN0YXRpYyB2b2lkIF9fc3VibWl0X3F1ZXVlX2ltbShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCkBAIC0xMTQ0LDcgKzEwNDIsNyBAQCBzdGF0aWMgdm9pZCBfX3N1Ym1pdF9xdWV1ZV9p bW0oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogc3RhdGljIHZvaWQgc3VibWl0X3F1 ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgaW50IHByaW8pCiB7CiAJaWYgKHBy aW8gPiBlbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eSkgewotCQlfX3VwZGF0ZV9xdWV1 ZShlbmdpbmUsIHByaW8pOworCQllbmdpbmUtPmV4ZWNsaXN0cy5xdWV1ZV9wcmlvcml0eSA9IHBy aW87CiAJCV9fc3VibWl0X3F1ZXVlX2ltbShlbmdpbmUpOwogCX0KIH0KQEAgLTExNjcsMTYyICsx MDY1LDYgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT50aW1l bGluZS5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpzY2hl ZF90b19yZXF1ZXN0KHN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUpCi17Ci0JcmV0dXJuIGNv bnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0LCBzY2hlZCk7Ci19Ci0KLXN0YXRp YyBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKLXNjaGVkX2xvY2tfZW5naW5lKHN0cnVjdCBpOTE1 X3NjaGVkX25vZGUgKm5vZGUsIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmxvY2tlZCkKLXsKLQlz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBzY2hlZF90b19yZXF1ZXN0KG5vZGUpLT5l bmdpbmU7Ci0KLQlHRU1fQlVHX09OKCFsb2NrZWQpOwotCi0JaWYgKGVuZ2luZSAhPSBsb2NrZWQp IHsKLQkJc3Bpbl91bmxvY2soJmxvY2tlZC0+dGltZWxpbmUubG9jayk7Ci0JCXNwaW5fbG9jaygm ZW5naW5lLT50aW1lbGluZS5sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gZW5naW5lOwotfQotCi1zdGF0 aWMgdm9pZCBleGVjbGlzdHNfc2NoZWR1bGUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwK LQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyICphdHRyKQotewotCXN0cnVj dCBsaXN0X2hlYWQgKnVuaW5pdGlhbGl6ZWRfdmFyKHBsKTsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsICpsYXN0OwotCXN0cnVjdCBpOTE1X2RlcGVuZGVuY3kgKmRlcCwgKnA7Ci0J c3RydWN0IGk5MTVfZGVwZW5kZW5jeSBzdGFjazsKLQljb25zdCBpbnQgcHJpbyA9IGF0dHItPnBy aW9yaXR5OwotCUxJU1RfSEVBRChkZnMpOwotCi0JR0VNX0JVR19PTihwcmlvID09IEk5MTVfUFJJ T1JJVFlfSU5WQUxJRCk7Ci0KLQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChyZXF1ZXN0KSkK LQkJcmV0dXJuOwotCi0JaWYgKHByaW8gPD0gUkVBRF9PTkNFKHJlcXVlc3QtPnNjaGVkLmF0dHIu cHJpb3JpdHkpKQotCQlyZXR1cm47Ci0KLQkvKiBOZWVkIEJLTCBpbiBvcmRlciB0byB1c2UgdGhl IHRlbXBvcmFyeSBsaW5rIGluc2lkZSBpOTE1X2RlcGVuZGVuY3kgKi8KLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZyZXF1ZXN0LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKLQotCXN0YWNrLnNpZ25h bGVyID0gJnJlcXVlc3QtPnNjaGVkOwotCWxpc3RfYWRkKCZzdGFjay5kZnNfbGluaywgJmRmcyk7 Ci0KLQkvKgotCSAqIFJlY3Vyc2l2ZWx5IGJ1bXAgYWxsIGRlcGVuZGVudCBwcmlvcml0aWVzIHRv IG1hdGNoIHRoZSBuZXcgcmVxdWVzdC4KLQkgKgotCSAqIEEgbmFpdmUgYXBwcm9hY2ggd291bGQg YmUgdG8gdXNlIHJlY3Vyc2lvbjoKLQkgKiBzdGF0aWMgdm9pZCB1cGRhdGVfcHJpb3JpdGllcyhz dHJ1Y3QgaTkxNV9zY2hlZF9ub2RlICpub2RlLCBwcmlvKSB7Ci0JICoJbGlzdF9mb3JfZWFjaF9l bnRyeShkZXAsICZub2RlLT5zaWduYWxlcnNfbGlzdCwgc2lnbmFsX2xpbmspCi0JICoJCXVwZGF0 ZV9wcmlvcml0aWVzKGRlcC0+c2lnbmFsLCBwcmlvKQotCSAqCXF1ZXVlX3JlcXVlc3Qobm9kZSk7 Ci0JICogfQotCSAqIGJ1dCB0aGF0IG1heSBoYXZlIHVubGltaXRlZCByZWN1cnNpb24gZGVwdGgg YW5kIHNvIHJ1bnMgYSB2ZXJ5Ci0JICogcmVhbCByaXNrIG9mIG92ZXJ1bm5pbmcgdGhlIGtlcm5l bCBzdGFjay4gSW5zdGVhZCwgd2UgYnVpbGQKLQkgKiBhIGZsYXQgbGlzdCBvZiBhbGwgZGVwZW5k ZW5jaWVzIHN0YXJ0aW5nIHdpdGggdGhlIGN1cnJlbnQgcmVxdWVzdC4KLQkgKiBBcyB3ZSB3YWxr IHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcywgd2UgYWRkIGFsbCBvZiBpdHMgZGVwZW5kZW5jaWVz Ci0JICogdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCAodGhpcyBtYXkgaW5jbHVkZSBhbiBhbHJlYWR5 IHZpc2l0ZWQKLQkgKiByZXF1ZXN0KSBhbmQgY29udGludWUgdG8gd2FsayBvbndhcmRzIG9udG8g dGhlIG5ldyBkZXBlbmRlbmNpZXMuIFRoZQotCSAqIGVuZCByZXN1bHQgaXMgYSB0b3BvbG9naWNh bCBsaXN0IG9mIHJlcXVlc3RzIGluIHJldmVyc2Ugb3JkZXIsIHRoZQotCSAqIGxhc3QgZWxlbWVu dCBpbiB0aGUgbGlzdCBpcyB0aGUgcmVxdWVzdCB3ZSBtdXN0IGV4ZWN1dGUgZmlyc3QuCi0JICov Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXAsICZkZnMsIGRmc19saW5rKSB7Ci0JCXN0cnVjdCBp OTE1X3NjaGVkX25vZGUgKm5vZGUgPSBkZXAtPnNpZ25hbGVyOwotCi0JCS8qCi0JCSAqIFdpdGhp biBhbiBlbmdpbmUsIHRoZXJlIGNhbiBiZSBubyBjeWNsZSwgYnV0IHdlIG1heQotCQkgKiByZWZl ciB0byB0aGUgc2FtZSBkZXBlbmRlbmN5IGNoYWluIG11bHRpcGxlIHRpbWVzCi0JCSAqIChyZWR1 bmRhbnQgZGVwZW5kZW5jaWVzIGFyZSBub3QgZWxpbWluYXRlZCkgYW5kIGFjcm9zcwotCQkgKiBl bmdpbmVzLgotCQkgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmbm9kZS0+c2lnbmFsZXJz X2xpc3QsIHNpZ25hbF9saW5rKSB7Ci0JCQlHRU1fQlVHX09OKHAgPT0gZGVwKTsgLyogbm8gY3lj bGVzISAqLwotCi0JCQlpZiAoaTkxNV9zY2hlZF9ub2RlX3NpZ25hbGVkKHAtPnNpZ25hbGVyKSkK LQkJCQljb250aW51ZTsKLQotCQkJR0VNX0JVR19PTihwLT5zaWduYWxlci0+YXR0ci5wcmlvcml0 eSA8IG5vZGUtPmF0dHIucHJpb3JpdHkpOwotCQkJaWYgKHByaW8gPiBSRUFEX09OQ0UocC0+c2ln bmFsZXItPmF0dHIucHJpb3JpdHkpKQotCQkJCWxpc3RfbW92ZV90YWlsKCZwLT5kZnNfbGluaywg JmRmcyk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIElmIHdlIGRpZG4ndCBuZWVkIHRvIGJ1bXAgYW55 IGV4aXN0aW5nIHByaW9yaXRpZXMsIGFuZCB3ZSBoYXZlbid0Ci0JICogeWV0IHN1Ym1pdHRlZCB0 aGlzIHJlcXVlc3QgKGkuZS4gdGhlcmUgaXMgbm8gcG90ZW50aWFsIHJhY2Ugd2l0aAotCSAqIGV4 ZWNsaXN0c19zdWJtaXRfcmVxdWVzdCgpKSwgd2UgY2FuIHNldCBvdXIgb3duIHByaW9yaXR5IGFu ZCBza2lwCi0JICogYWNxdWlyaW5nIHRoZSBlbmdpbmUgbG9ja3MuCi0JICovCi0JaWYgKHJlcXVl c3QtPnNjaGVkLmF0dHIucHJpb3JpdHkgPT0gSTkxNV9QUklPUklUWV9JTlZBTElEKSB7Ci0JCUdF TV9CVUdfT04oIWxpc3RfZW1wdHkoJnJlcXVlc3QtPnNjaGVkLmxpbmspKTsKLQkJcmVxdWVzdC0+ c2NoZWQuYXR0ciA9ICphdHRyOwotCQlpZiAoc3RhY2suZGZzX2xpbmsubmV4dCA9PSBzdGFjay5k ZnNfbGluay5wcmV2KQotCQkJcmV0dXJuOwotCQlfX2xpc3RfZGVsX2VudHJ5KCZzdGFjay5kZnNf bGluayk7Ci0JfQotCi0JbGFzdCA9IE5VTEw7Ci0JZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOwot CXNwaW5fbG9ja19pcnEoJmVuZ2luZS0+dGltZWxpbmUubG9jayk7Ci0KLQkvKiBGaWZvIGFuZCBk ZXB0aC1maXJzdCByZXBsYWNlbWVudCBlbnN1cmUgb3VyIGRlcHMgZXhlY3V0ZSBiZWZvcmUgdXMg Ki8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShkZXAsIHAsICZkZnMsIGRmc19s aW5rKSB7Ci0JCXN0cnVjdCBpOTE1X3NjaGVkX25vZGUgKm5vZGUgPSBkZXAtPnNpZ25hbGVyOwot Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXAtPmRmc19saW5rKTsKLQotCQllbmdpbmUgPSBzY2hlZF9s b2NrX2VuZ2luZShub2RlLCBlbmdpbmUpOwotCi0JCS8qIFJlY2hlY2sgYWZ0ZXIgYWNxdWlyaW5n IHRoZSBlbmdpbmUtPnRpbWVsaW5lLmxvY2sgKi8KLQkJaWYgKHByaW8gPD0gbm9kZS0+YXR0ci5w cmlvcml0eSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChpOTE1X3NjaGVkX25vZGVfc2lnbmFsZWQo bm9kZSkpCi0JCQljb250aW51ZTsKLQotCQlub2RlLT5hdHRyLnByaW9yaXR5ID0gcHJpbzsKLQkJ aWYgKCFsaXN0X2VtcHR5KCZub2RlLT5saW5rKSkgewotCQkJaWYgKGxhc3QgIT0gZW5naW5lKSB7 Ci0JCQkJcGwgPSBsb29rdXBfcHJpb2xpc3QoZW5naW5lLCBwcmlvKTsKLQkJCQlsYXN0ID0gZW5n aW5lOwotCQkJfQotCQkJbGlzdF9tb3ZlX3RhaWwoJm5vZGUtPmxpbmssIHBsKTsKLQkJfSBlbHNl IHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgcmVxdWVzdCBpcyBub3QgaW4gdGhlIHByaW9saXN0IHF1 ZXVlIGJlY2F1c2UKLQkJCSAqIGl0IGlzIG5vdCB5ZXQgcnVubmFibGUsIHRoZW4gaXQgZG9lc24n dCBjb250cmlidXRlCi0JCQkgKiB0byBvdXIgcHJlZW1wdGlvbiBkZWNpc2lvbnMuIE9uIHRoZSBv dGhlciBoYW5kLAotCQkJICogaWYgdGhlIHJlcXVlc3QgaXMgb24gdGhlIEhXLCBpdCB0b28gaXMg bm90IGluIHRoZQotCQkJICogcXVldWU7IGJ1dCBpbiB0aGF0IGNhc2Ugd2UgbWF5IHN0aWxsIG5l ZWQgdG8gcmVvcmRlcgotCQkJICogdGhlIGluZmxpZ2h0IHJlcXVlc3RzLgotCQkJICovCi0JCQlp ZiAoIWk5MTVfc3dfZmVuY2VfZG9uZSgmc2NoZWRfdG9fcmVxdWVzdChub2RlKS0+c3VibWl0KSkK LQkJCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChwcmlvIDw9IGVuZ2luZS0+ZXhlY2xpc3RzLnF1 ZXVlX3ByaW9yaXR5KQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSWYgd2UgYXJlIGFscmVh ZHkgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dCwgZG9uJ3QKLQkJICogYm90aGVyIGV2 YWx1YXRpbmcgaWYgd2Ugc2hvdWxkIHByZWVtcHQgb3Vyc2VsdmVzLgotCQkgKi8KLQkJaWYgKHNj aGVkX3RvX3JlcXVlc3Qobm9kZSktPmdsb2JhbF9zZXFubyAmJgotCQkgICAgaTkxNV9zZXFub19w YXNzZWQocG9ydF9yZXF1ZXN0KGVuZ2luZS0+ZXhlY2xpc3RzLnBvcnQpLT5nbG9iYWxfc2Vxbm8s Ci0JCQkJICAgICAgc2NoZWRfdG9fcmVxdWVzdChub2RlKS0+Z2xvYmFsX3NlcW5vKSkKLQkJCWNv bnRpbnVlOwotCi0JCS8qIERlZmVyICh0YXNrbGV0KSBzdWJtaXNzaW9uIHVudGlsIGFmdGVyIGFs bCBvZiBvdXIgdXBkYXRlcy4gKi8KLQkJX191cGRhdGVfcXVldWUoZW5naW5lLCBwcmlvKTsKLQkJ dGFza2xldF9oaV9zY2hlZHVsZSgmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Ci0JfQotCi0J c3Bpbl91bmxvY2tfaXJxKCZlbmdpbmUtPnRpbWVsaW5lLmxvY2spOwotfQotCiBzdGF0aWMgdm9p ZCBleGVjbGlzdHNfY29udGV4dF9kZXN0cm95KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKIHsK IAlHRU1fQlVHX09OKGNlLT5waW5fY291bnQpOwpAQCAtMjM2MCw3ICsyMTAyLDcgQEAgdm9pZCBp bnRlbF9leGVjbGlzdHNfc2V0X2RlZmF1bHRfc3VibWlzc2lvbihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCiB7CiAJZW5naW5lLT5zdWJtaXRfcmVxdWVzdCA9IGV4ZWNsaXN0c19zdWJt aXRfcmVxdWVzdDsKIAllbmdpbmUtPmNhbmNlbF9yZXF1ZXN0cyA9IGV4ZWNsaXN0c19jYW5jZWxf cmVxdWVzdHM7Ci0JZW5naW5lLT5zY2hlZHVsZSA9IGV4ZWNsaXN0c19zY2hlZHVsZTsKKwllbmdp bmUtPnNjaGVkdWxlID0gaTkxNV9zY2hlZHVsZTsKIAllbmdpbmUtPmV4ZWNsaXN0cy50YXNrbGV0 LmZ1bmMgPSBleGVjbGlzdHNfc3VibWlzc2lvbl90YXNrbGV0OwogCiAJZW5naW5lLT5yZXNldC5w cmVwYXJlID0gZXhlY2xpc3RzX3Jlc2V0X3ByZXBhcmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9yaW5nYnVmZmVyLmgKaW5kZXggMTUzNGRlNWJiODUyLi5mNmVjNDhhNzVhNjkgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKQEAgLTQ5OCwxMSArNDk4LDEwIEBAIHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgewogCSAqLwogCXZvaWQJCSgqc3VibWl0X3JlcXVlc3QpKHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKTsKIAotCS8qIENhbGwgd2hlbiB0aGUgcHJpb3JpdHkgb24g YSByZXF1ZXN0IGhhcyBjaGFuZ2VkIGFuZCBpdCBhbmQgaXRzCisJLyoKKwkgKiBDYWxsIHdoZW4g dGhlIHByaW9yaXR5IG9uIGEgcmVxdWVzdCBoYXMgY2hhbmdlZCBhbmQgaXQgYW5kIGl0cwogCSAq IGRlcGVuZGVuY2llcyBtYXkgbmVlZCByZXNjaGVkdWxpbmcuIE5vdGUgdGhlIHJlcXVlc3QgaXRz ZWxmIG1heQogCSAqIG5vdCBiZSByZWFkeSB0byBydW4hCi0JICoKLQkgKiBDYWxsZWQgdW5kZXIg dGhlIHN0cnVjdF9tdXRleC4KIAkgKi8KIAl2b2lkCQkoKnNjaGVkdWxlKShzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpyZXF1ZXN0LAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyICph dHRyKTsKLS0gCjIuMTkuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==