From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 03/18] drm/i915: Rearrange i915_wait_request() accounting with callers Date: Wed, 14 Sep 2016 07:52:35 +0100 Message-ID: <20160914065250.15482-4-chris@chris-wilson.co.uk> References: <20160914065250.15482-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 mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A3566E65E for ; Wed, 14 Sep 2016 06:53:03 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id b184so1015939wma.3 for ; Tue, 13 Sep 2016 23:53:03 -0700 (PDT) In-Reply-To: <20160914065250.15482-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 T3VyIGxvdy1sZXZlbCB3YWl0IHJvdXRpbmUgaGFzIGV2b2x2ZWQgZnJvbSBvdXIgZ2VuZXJpYyB3 YWl0IGludGVyZmFjZQp0aGF0IGhhbmRsZWQgdW5sb2NrZWQsIFJQUyBib29zdGluZywgd2FpdHMg d2l0aCB0aW1lIHRyYWNraW5nLiBJZiB3ZQpwdXNoIG91ciBHRU0gZmVuY2UgdHJhY2tpbmcgdG8g dXNlIHJlc2VydmF0aW9uX29iamVjdHMgKHJlcXVpcmVkIGZvcgpoYW5kbGluZyBtdWx0aXBsZSB0 aW1lbGluZXMpLCB3ZSBsb3NlIHRoZSBhYmlsaXR5IHRvIHBhc3MgdGhlIHJlcXVpcmVkCmluZm9y bWF0aW9uIGRvd24gdG8gaTkxNV93YWl0X3JlcXVlc3QoKS4gSG93ZXZlciwgaWYgd2UgcHVzaCB0 aGUgZXh0cmEKZnVuY3Rpb25hbGl0eSBmcm9tIGk5MTVfd2FpdF9yZXF1ZXN0KCkgdG8gdGhlIGlu ZGl2aWR1YWwgY2FsbHNpdGVzCihpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcgYW5kIGk5 MTVfZ2VtX3dhaXRfaW9jdGwpIHRoYXQgbWFrZSB1c2UKb2YgdGhvc2UgZXh0cmFzLCB3ZSBjYW4g Ym90aCBzaW1wbGlmeSBvdXIgbG93IGxldmVsIHdhaXQgYW5kIHByZXBhcmUgZm9yCmV4dGVuZGlu ZyB0aGUgR0VNIGludGVyZmFjZSBmb3IgdXNlIG9mIHJlc2VydmF0aW9uX29iamVjdHMuCgoqIFRo aXMgY2F1c2VzIGEgdGVtcG9yYXJ5IHJlZ3Jlc3Npb24gaW4gdGhlIHVzZSBvZiB3YWl0LWlvY3Rs IGFzIGEgYnVzeQpxdWVyeSAtLSBpdCB3aWxsIGZhaWwgdG8gcmVwb3J0IGltbWVkaWF0ZWx5LCBi dXQgZ28gaW50bwppOTE1X3dhaXRfcmVxdWVzdCgpIGJlZm9yZSB0aW1pbmcgb3V0LgoKU2lnbmVk LW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgICA3ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgfCAzMDAgKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYyB8IDEx NyArKy0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0Lmgg fCAgMzIgKystLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIHwgIDEy ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgfCAgMzQgKystLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIHwgIDE0ICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggfCAgIDMgKy0KIDggZmlsZXMgY2hhbmdl ZCwgMjgzIGluc2VydGlvbnMoKyksIDIzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAppbmRleCAxZTJkZGE4OGE0ODMuLmFmMDIxMjAzMmI2NCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCkBAIC0zMjc0LDkgKzMyNzQsMTAgQEAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV93 YWl0X2Zvcl9pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIGludCBfX211 c3RfY2hlY2sgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQg aTkxNV9nZW1fcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IGk5MTVfZ2VtX2Zh dWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Ci1p bnQgX19tdXN0X2NoZWNrCi1pOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgICAgICBib29sIHJlYWRvbmx5KTsKK2ludCBp OTE1X2dlbV9vYmplY3Rfd2FpdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ IHVuc2lnbmVkIGludCBmbGFncywKKwkJCSBsb25nIHRpbWVvdXQsCisJCQkgc3RydWN0IGludGVs X3Jwc19jbGllbnQgKnJwcyk7CiBpbnQgX19tdXN0X2NoZWNrCiBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX2d0dF9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgIGJv b2wgd3JpdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYzhiZDAyMjc3YjdkLi5kOTIx NGM5ZDMxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMjkyLDcgKzI5MiwxMiBAQCBp bnQgaTkxNV9nZW1fb2JqZWN0X3VuYmluZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQogCSAqIG11c3Qgd2FpdCBmb3IgYWxsIHJlbmRlcmluZyB0byBjb21wbGV0ZSB0byB0aGUgb2Jq ZWN0IChhcyB1bmJpbmRpbmcKIAkgKiBtdXN0IGFueXdheSksIGFuZCByZXRpcmUgdGhlIHJlcXVl c3RzLgogCSAqLwotCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGZh bHNlKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkxNV9XQUlU X0lOVEVSUlVQVElCTEUgfAorCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQgfAorCQkJCSAgIEk5MTVf V0FJVF9BTEwsCisJCQkJICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQsCisJCQkJICAgTlVMTCk7CiAJ aWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzExLDg4ICszMTYsMTcxIEBAIGludCBpOTE1 X2dlbV9vYmplY3RfdW5iaW5kKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0 dXJuIHJldDsKIH0KIAotLyoqCi0gKiBFbnN1cmVzIHRoYXQgYWxsIHJlbmRlcmluZyB0byB0aGUg b2JqZWN0IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSBvYmplY3QgaXMKLSAqIHNhZmUgdG8gdW5iaW5k IGZyb20gdGhlIEdUVCBvciBhY2Nlc3MgZnJvbSB0aGUgQ1BVLgotICogQG9iajogaTkxNSBnZW0g b2JqZWN0Ci0gKiBAcmVhZG9ubHk6IHdhaXRpbmcgZm9yIGp1c3QgcmVhZCBhY2Nlc3Mgb3IgcmVh ZC13cml0ZSBhY2Nlc3MKLSAqLwotaW50Ci1pOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmco c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgICAgICBib29sIHJlYWRvbmx5 KQorc3RhdGljIGxvbmcKK2k5MTVfZ2VtX29iamVjdF93YWl0X2ZlbmNlKHN0cnVjdCBmZW5jZSAq ZmVuY2UsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICBsb25nIHRpbWVvdXQsCisJ CQkgICBzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzKQogewotCXN0cnVjdCByZXNlcnZhdGlv bl9vYmplY3QgKnJlc3Y7Ci0Jc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlOwotCXVuc2ln bmVkIGxvbmcgYWN0aXZlX21hc2s7Ci0JaW50IGlkeDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJxOwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0 X211dGV4KTsKKwlCVUlMRF9CVUdfT04oSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgIT0gMHgxKTsK IAotCWlmICghcmVhZG9ubHkpIHsKLQkJYWN0aXZlID0gb2JqLT5sYXN0X3JlYWQ7Ci0JCWFjdGl2 ZV9tYXNrID0gaTkxNV9nZW1fb2JqZWN0X2dldF9hY3RpdmUob2JqKTsKLQl9IGVsc2UgewotCQlh Y3RpdmVfbWFzayA9IDE7Ci0JCWFjdGl2ZSA9ICZvYmotPmxhc3Rfd3JpdGU7CisJaWYgKHRlc3Rf Yml0KEZFTkNFX0ZMQUdfU0lHTkFMRURfQklULCAmZmVuY2UtPmZsYWdzKSkKKwkJcmV0dXJuIHRp bWVvdXQ7CisKKwlpZiAoIWZlbmNlX2lzX2k5MTUoZmVuY2UpKQorCQlyZXR1cm4gZmVuY2Vfd2Fp dF90aW1lb3V0KGZlbmNlLAorCQkJCQkgIGZsYWdzICYgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUs CisJCQkJCSAgdGltZW91dCk7CisKKwlycSA9IHRvX3JlcXVlc3QoZmVuY2UpOworCWlmIChpOTE1 X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCisJCWdvdG8gb3V0OworCisJLyogVGhpcyBjbGll bnQgaXMgYWJvdXQgdG8gc3RhbGwgd2FpdGluZyBmb3IgdGhlIEdQVS4gSW4gbWFueSBjYXNlcwor CSAqIHRoaXMgaXMgdW5kZXNpcmFibGUgYW5kIGxpbWl0cyB0aGUgdGhyb3VnaHB1dCBvZiB0aGUg c3lzdGVtLCBhcworCSAqIG1hbnkgY2xpZW50cyBjYW5ub3QgY29udGludWUgcHJvY2Vzc2luZyB1 c2VyIGlucHV0L291dHB1dCB3aGlsc3QKKwkgKiBibG9ja2VkLiBSUFMgYXV0b3R1bmluZyBtYXkg dGFrZSB0ZW5zIG9mIG1pbGxpc2Vjb25kcyB0byByZXNwb25kCisJICogdG8gdGhlIEdQVSBsb2Fk IGFuZCB0aHVzIGluY3VycyBhZGRpdGlvbmFsIGxhdGVuY3kgZm9yIHRoZSBjbGllbnQuCisJICog V2UgY2FuIGNpcmN1bXZlbnQgdGhhdCBieSBwcm9tb3RpbmcgdGhlIEdQVSBmcmVxdWVuY3kgdG8g bWF4aW11bQorCSAqIGJlZm9yZSB3ZSB3YWl0LiBUaGlzIG1ha2VzIHRoZSBHUFUgdGhyb3R0bGUg dXAgbXVjaCBtb3JlIHF1aWNrbHkKKwkgKiAoZ29vZCBmb3IgYmVuY2htYXJrcyBhbmQgdXNlciBl eHBlcmllbmNlLCBlLmcuIHdpbmRvdyBhbmltYXRpb25zKSwKKwkgKiBidXQgYXQgYSBjb3N0IG9m IHNwZW5kaW5nIG1vcmUgcG93ZXIgcHJvY2Vzc2luZyB0aGUgd29ya2xvYWQKKwkgKiAoYmFkIGZv ciBiYXR0ZXJ5KS4gTm90IGFsbCBjbGllbnRzIGV2ZW4gd2FudCB0aGVpciByZXN1bHRzCisJICog aW1tZWRpYXRlbHkgYW5kIGZvciB0aGVtIHdlIHNob3VsZCBqdXN0IGxldCB0aGUgR1BVIHNlbGVj dCBpdHMgb3duCisJICogZnJlcXVlbmN5IHRvIG1heGltaXNlIGVmZmljaWVuY3kuIFRvIHByZXZl bnQgYSBzaW5nbGUgY2xpZW50IGZyb20KKwkgKiBmb3JjaW5nIHRoZSBjbG9ja3MgdG9vIGhpZ2gg Zm9yIHRoZSB3aG9sZSBzeXN0ZW0sIHdlIG9ubHkgYWxsb3cKKwkgKiBlYWNoIGNsaWVudCB0byB3 YWl0Ym9vc3Qgb25jZSBpbiBhIGJ1c3kgcGVyaW9kLgorCSAqLworCWlmIChycHMpIHsKKwkJaWYg KElOVEVMX0dFTihycS0+aTkxNSkgPj0gNikKKwkJCWdlbjZfcnBzX2Jvb3N0KHJxLT5pOTE1LCBy cHMsIHJxLT5lbWl0dGVkX2ppZmZpZXMpOworCQllbHNlCisJCQlycHMgPSBOVUxMOwogCX0KIAot CWZvcl9lYWNoX2FjdGl2ZShhY3RpdmVfbWFzaywgaWR4KSB7CisJdGltZW91dCA9IGk5MTVfd2Fp dF9yZXF1ZXN0KHJxLCBmbGFncywgdGltZW91dCk7CisKK291dDoKKwlpZiAoZmxhZ3MgJiBJOTE1 X1dBSVRfTE9DS0VEICYmIGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJxKSkKKwkJaTkxNV9n ZW1fcmVxdWVzdF9yZXRpcmVfdXB0byhycSk7CisKKwlpZiAocnBzICYmIHJxLT5mZW5jZS5zZXFu byA9PSBycS0+ZW5naW5lLT5sYXN0X3N1Ym1pdHRlZF9zZXFubykgeworCQkvKiBUaGUgR1BVIGlz IG5vdyBpZGxlIGFuZCB0aGlzIGNsaWVudCBoYXMgc3RhbGxlZC4KKwkJICogU2luY2Ugbm8gb3Ro ZXIgY2xpZW50IGhhcyBzdWJtaXR0ZWQgYSByZXF1ZXN0IGluIHRoZQorCQkgKiBtZWFudGltZSwg YXNzdW1lIHRoYXQgdGhpcyBjbGllbnQgaXMgdGhlIG9ubHkgb25lCisJCSAqIHN1cHBseWluZyB3 b3JrIHRvIHRoZSBHUFUgYnV0IGlzIHVuYWJsZSB0byBrZWVwIHRoYXQKKwkJICogd29yayBzdXBw bGllZCBiZWNhdXNlIGl0IGlzIHdhaXRpbmcuIFNpbmNlIHRoZSBHUFUgaXMKKwkJICogdGhlbiBu ZXZlciBrZXB0IGZ1bGx5IGJ1c3ksIFJQUyBhdXRvY2xvY2tpbmcgd2lsbAorCQkgKiBrZWVwIHRo ZSBjbG9ja3MgcmVsYXRpdmVseSBsb3csIGNhdXNpbmcgZnVydGhlciBkZWxheXMuCisJCSAqIENv bXBlbnNhdGUgYnkgZ2l2aW5nIHRoZSBzeW5jaHJvbm91cyBjbGllbnQgY3JlZGl0IGZvcgorCQkg KiBhIHdhaXRib29zdCBuZXh0IHRpbWUuCisJCSAqLworCQlzcGluX2xvY2soJnJxLT5pOTE1LT5y cHMuY2xpZW50X2xvY2spOworCQlsaXN0X2RlbF9pbml0KCZycHMtPmxpbmspOworCQlzcGluX3Vu bG9jaygmcnEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7CisJfQorCisJcmV0dXJuIHRpbWVvdXQ7 Cit9CisKK3N0YXRpYyBsb25nCitpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZXNlcnZhdGlvbihzdHJ1 Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2LAorCQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJ CQkJIGxvbmcgdGltZW91dCwKKwkJCQkgc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJwcykKK3sK KwlzdHJ1Y3QgZmVuY2UgKmV4Y2w7CisKKwlpZiAoZmxhZ3MgJiBJOTE1X1dBSVRfQUxMKSB7CisJ CXN0cnVjdCBmZW5jZSAqKnNoYXJlZDsKKwkJdW5zaWduZWQgaW50IGNvdW50LCBpOwogCQlpbnQg cmV0OwogCi0JCXJldCA9IGk5MTVfZ2VtX2FjdGl2ZV93YWl0KCZhY3RpdmVbaWR4XSwKLQkJCQkJ ICAgJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldCA9IHJlc2VydmF0aW9uX29i amVjdF9nZXRfZmVuY2VzX3JjdShyZXN2LAorCQkJCQkJCSZleGNsLCAmY291bnQsICZzaGFyZWQp OwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQl9CiAKLQlyZXN2ID0gaTkxNV9nZW1fb2Jq ZWN0X2dldF9kbWFidWZfcmVzdihvYmopOwotCWlmIChyZXN2KSB7Ci0JCWxvbmcgZXJyOworCQlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJdGltZW91dCA9IGk5MTVfZ2VtX29iamVj dF93YWl0X2ZlbmNlKHNoYXJlZFtpXSwKKwkJCQkJCQkgICAgIGZsYWdzLCB0aW1lb3V0LAorCQkJ CQkJCSAgICAgcnBzKTsKKwkJCWlmICh0aW1lb3V0IDw9IDApCisJCQkJYnJlYWs7CiAKLQkJZXJy ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3dhaXRfdGltZW91dF9yY3UocmVzdiwgIXJlYWRvbmx5LCB0 cnVlLAotCQkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCQlpZiAoZXJyIDwgMCkKLQkJ CXJldHVybiBlcnI7CisJCQlmZW5jZV9wdXQoc2hhcmVkW2ldKTsKKwkJfQorCisJCWZvciAoOyBp IDwgY291bnQ7IGkrKykKKwkJCWZlbmNlX3B1dChzaGFyZWRbaV0pOworCQlrZnJlZShzaGFyZWQp OworCX0gZWxzZSB7CisJCWV4Y2wgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2xfcmN1KHJl c3YpOwogCX0KIAotCXJldHVybiAwOworCWlmIChleGNsICYmIHRpbWVvdXQgPiAwKQorCQl0aW1l b3V0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfZmVuY2UoZXhjbCwgZmxhZ3MsIHRpbWVvdXQsIHJw cyk7CisKKwlmZW5jZV9wdXQoZXhjbCk7CisKKwlyZXR1cm4gdGltZW91dDsKIH0KIAotLyogQSBu b25ibG9ja2luZyB2YXJpYW50IG9mIHRoZSBhYm92ZSB3YWl0LiBNdXN0IGJlIGNhbGxlZCBwcmlv ciB0bwotICogYWNxdWlyaW5nIHRoZSBtdXRleCBmb3IgdGhlIG9iamVjdCwgYXMgdGhlIG9iamVj dCBzdGF0ZSBtYXkgY2hhbmdlCi0gKiBkdXJpbmcgdGhpcyBjYWxsLiBBIHJlZmVyZW5jZSBtdXN0 IGJlIGhlbGQgYnkgdGhlIGNhbGxlciBmb3IgdGhlIG9iamVjdC4KKy8qKgorICogV2FpdHMgZm9y IHJlbmRlcmluZyB0byB0aGUgb2JqZWN0IHRvIGJlIGNvbXBsZXRlZAorICogQG9iajogaTkxNSBn ZW0gb2JqZWN0CisgKiBAZmxhZ3M6IGhvdyB0byB3YWl0ICh1bmRlciBhIGxvY2ssIGZvciBhbGwg cmVuZGVyaW5nIG9yIGp1c3QgZm9yIHdyaXRlcyBldGMpCisgKiBAdGltZW91dDogaG93IGxvbmcg dG8gd2FpdAorICogQHJwczogY2xpZW50ICh1c2VyIHByb2Nlc3MpIHRvIGNoYXJnZSBmb3IgYW55 IHdhaXRib29zdGluZwogICovCi1zdGF0aWMgX19tdXN0X2NoZWNrIGludAotX191bnNhZmVfd2Fp dF9yZW5kZXJpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCXN0cnVjdCBp bnRlbF9ycHNfY2xpZW50ICpycHMsCi0JCQlib29sIHJlYWRvbmx5KQoraW50CitpOTE1X2dlbV9v YmplY3Rfd2FpdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkgICAgIHVuc2ln bmVkIGludCBmbGFncywKKwkJICAgICBsb25nIHRpbWVvdXQsCisJCSAgICAgc3RydWN0IGludGVs X3Jwc19jbGllbnQgKnJwcykKIHsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2Owog CXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgKmFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIGFjdGl2ZV9t YXNrOwogCWludCBpZHg7CiAKLQlhY3RpdmVfbWFzayA9IF9fSTkxNV9CT19BQ1RJVkUob2JqKTsK LQlpZiAoIWFjdGl2ZV9tYXNrKQotCQlyZXR1cm4gMDsKKwltaWdodF9zbGVlcCgpOworI2lmIElT X0VOQUJMRUQoQ09ORklHX0xPQ0tERVApCisJR0VNX0JVR19PTighIWxvY2tkZXBfaXNfaGVsZCgm b2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KSAhPQorCQkgICAhIShmbGFncyAmIEk5MTVfV0FJ VF9MT0NLRUQpKTsKKyNlbmRpZgorCUdFTV9CVUdfT04odGltZW91dCA8IDApOwogCi0JaWYgKCFy ZWFkb25seSkgeworCWlmIChmbGFncyAmIEk5MTVfV0FJVF9BTEwpIHsKIAkJYWN0aXZlID0gb2Jq LT5sYXN0X3JlYWQ7CisJCWFjdGl2ZV9tYXNrID0gaTkxNV9nZW1fb2JqZWN0X2dldF9hY3RpdmUo b2JqKTsKIAl9IGVsc2UgewogCQlhY3RpdmVfbWFzayA9IDE7CiAJCWFjdGl2ZSA9ICZvYmotPmxh c3Rfd3JpdGU7CiAJfQogCiAJZm9yX2VhY2hfYWN0aXZlKGFjdGl2ZV9tYXNrLCBpZHgpIHsKLQkJ aW50IHJldDsKLQotCQlyZXQgPSBpOTE1X2dlbV9hY3RpdmVfd2FpdF91bmxvY2tlZCgmYWN0aXZl W2lkeF0sCi0JCQkJCQkgICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUsCi0JCQkJCQkgICAgTlVM TCwgcnBzKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdDsKKworCQlyZXF1ZXN0ID0gaTkxNV9nZW1fYWN0aXZlX2dldF91 bmxvY2tlZCgmYWN0aXZlW2lkeF0pOworCQlpZiAocmVxdWVzdCkgeworCQkJdGltZW91dCA9IGk5 MTVfZ2VtX29iamVjdF93YWl0X2ZlbmNlKCZyZXF1ZXN0LT5mZW5jZSwKKwkJCQkJCQkgICAgIGZs YWdzLCB0aW1lb3V0LAorCQkJCQkJCSAgICAgcnBzKTsKKwkJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0 KHJlcXVlc3QpOworCQl9CisJCWlmICh0aW1lb3V0IDwgMCkKKwkJCXJldHVybiB0aW1lb3V0Owog CX0KIAotCXJldHVybiAwOworCXJlc3YgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RtYWJ1Zl9yZXN2 KG9iaik7CisJaWYgKHJlc3YpCisJCXRpbWVvdXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZXNl cnZhdGlvbihyZXN2LAorCQkJCQkJCSAgIGZsYWdzLCB0aW1lb3V0LAorCQkJCQkJCSAgIHJwcyk7 CisJcmV0dXJuIHRpbWVvdXQgPCAwID8gdGltZW91dCA6IHRpbWVvdXQgPiAwID8gMCA6IC1FVElN RTsKIH0KIAogc3RhdGljIHN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICp0b19ycHNfY2xpZW50KHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSkKQEAgLTQ1NCw3ICs1NDIsMTMgQEAgaTkxNV9nZW1fcGh5c19w d3JpdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkvKiBXZSBtYW51YWxseSBj b250cm9sIHRoZSBkb21haW4gaGVyZSBhbmQgcHJldGVuZCB0aGF0IGl0CiAJICogcmVtYWlucyBj b2hlcmVudCBpLmUuIGluIHRoZSBHVFQgZG9tYWluLCBsaWtlIHNobWVtX3B3cml0ZS4KIAkgKi8K LQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCBmYWxzZSk7CisJbG9j a2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBp OTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUg fAorCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQgfAorCQkJCSAgIEk5MTVfV0FJVF9BTEwsCisJCQkJ ICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQsCisJCQkJICAgdG9fcnBzX2NsaWVudChmaWxlX3ByaXYp KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC02MTQsMTIgKzcwOCwxNyBAQCBpbnQg aTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1fcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAogewogCWludCByZXQ7CiAKLQkqbmVlZHNfY2xmbHVzaCA9IDA7CisJbG9ja2RlcF9h c3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKIAorCSpuZWVkc19jbGZs dXNoID0gMDsKIAlpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2JqKSkKIAkJ cmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmco b2JqLCB0cnVlKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkx NV9XQUlUX0lOVEVSUlVQVElCTEUgfAorCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQsCisJCQkJICAg TUFYX1NDSEVEVUxFX1RJTUVPVVQsCisJCQkJICAgTlVMTCk7CiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIApAQCAtNjYxLDExICs3NjAsMTggQEAgaW50IGk5MTVfZ2VtX29ial9wcmVwYXJlX3No bWVtX3dyaXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiB7CiAJaW50IHJldDsK IAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisK IAkqbmVlZHNfY2xmbHVzaCA9IDA7CiAJaWYgKCFpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9w YWdlKG9iaikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dh aXRfcmVuZGVyaW5nKG9iaiwgZmFsc2UpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0KG9i aiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJICAgSTkxNV9XQUlUX0xP Q0tFRCB8CisJCQkJICAgSTkxNV9XQUlUX0FMTCwKKwkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9V VCwKKwkJCQkgICBOVUxMKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDUwLDcg KzExNTYsMTAgQEAgaTkxNV9nZW1fcHJlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKIAogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9wcmVhZChvYmosIGFyZ3MtPm9m ZnNldCwgYXJncy0+c2l6ZSk7CiAKLQlyZXQgPSBfX3Vuc2FmZV93YWl0X3JlbmRlcmluZyhvYmos IHRvX3Jwc19jbGllbnQoZmlsZSksIHRydWUpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0 KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSwKKwkJCQkgICBNQVhfU0NIRURV TEVfVElNRU9VVCwKKwkJCQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKIAlpZiAocmV0KQogCQln b3RvIGVycjsKIApAQCAtMTQ1MCw3ICsxNTU5LDExIEBAIGk5MTVfZ2VtX3B3cml0ZV9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCiAJdHJhY2VfaTkxNV9nZW1fb2Jq ZWN0X3B3cml0ZShvYmosIGFyZ3MtPm9mZnNldCwgYXJncy0+c2l6ZSk7CiAKLQlyZXQgPSBfX3Vu c2FmZV93YWl0X3JlbmRlcmluZyhvYmosIHRvX3Jwc19jbGllbnQoZmlsZSksIGZhbHNlKTsKKwly ZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQ VElCTEUgfAorCQkJCSAgIEk5MTVfV0FJVF9BTEwsCisJCQkJICAgTUFYX1NDSEVEVUxFX1RJTUVP VVQsCisJCQkJICAgdG9fcnBzX2NsaWVudChmaWxlKSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7 CiAKQEAgLTE1MzcsNyArMTY1MCwxMSBAQCBpOTE1X2dlbV9zZXRfZG9tYWluX2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJICogV2Ugd2lsbCByZXBlYXQgdGhlIGZs dXNoIGhvbGRpbmcgdGhlIGxvY2sgaW4gdGhlIG5vcm1hbCBtYW5uZXIKIAkgKiB0byBjYXRjaCBj YXNlcyB3aGVyZSB3ZSBhcmUgZ2F6dW1wZWQuCiAJICovCi0JcmV0ID0gX191bnNhZmVfd2FpdF9y ZW5kZXJpbmcob2JqLCB0b19ycHNfY2xpZW50KGZpbGUpLCAhd3JpdGVfZG9tYWluKTsKKwlyZXQg PSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQVElC TEUgfAorCQkJCSAgICh3cml0ZV9kb21haW4gPyBJOTE1X1dBSVRfQUxMIDogMCksCisJCQkJICAg TUFYX1NDSEVEVUxFX1RJTUVPVVQsCisJCQkJICAgdG9fcnBzX2NsaWVudChmaWxlKSk7CiAJaWYg KHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTE3NzMsNyArMTg5MCwxMCBAQCBpbnQgaTkxNV9nZW1f ZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikK IAkgKiByZXBlYXQgdGhlIGZsdXNoIGhvbGRpbmcgdGhlIGxvY2sgaW4gdGhlIG5vcm1hbCBtYW5u ZXIgdG8gY2F0Y2ggY2FzZXMKIAkgKiB3aGVyZSB3ZSBhcmUgZ2F6dW1wZWQuCiAJICovCi0JcmV0 ID0gX191bnNhZmVfd2FpdF9yZW5kZXJpbmcob2JqLCBOVUxMLCAhd3JpdGUpOworCXJldCA9IGk5 MTVfZ2VtX29iamVjdF93YWl0KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSwK KwkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCwKKwkJCQkgICBOVUxMKTsKIAlpZiAocmV0KQog CQlnb3RvIGVycjsKIApAQCAtMjc5MiwxMCArMjkxMiw5IEBAIGludAogaTkxNV9nZW1fd2FpdF9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV93YWl0ICphcmdzID0gZGF0YTsKLQlzdHJ1 Y3QgaW50ZWxfcnBzX2NsaWVudCAqcnBzID0gdG9fcnBzX2NsaWVudChmaWxlKTsKIAlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwotCXVuc2lnbmVkIGxvbmcgYWN0aXZlOwotCWludCBp ZHgsIHJldCA9IDA7CisJa3RpbWVfdCBzdGFydDsKKwlsb25nIHJldDsKIAogCWlmIChhcmdzLT5m bGFncyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI4MDQsMTcgKzI5MjMsMjEgQEAgaTkx NV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5PRU5UOwogCi0JYWN0 aXZlID0gX19JOTE1X0JPX0FDVElWRShvYmopOwotCWZvcl9lYWNoX2FjdGl2ZShhY3RpdmUsIGlk eCkgewotCQlzNjQgKnRpbWVvdXQgPSBhcmdzLT50aW1lb3V0X25zID49IDAgPyAmYXJncy0+dGlt ZW91dF9ucyA6IE5VTEw7Ci0JCXJldCA9IGk5MTVfZ2VtX2FjdGl2ZV93YWl0X3VubG9ja2VkKCZv YmotPmxhc3RfcmVhZFtpZHhdLAotCQkJCQkJICAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLAot CQkJCQkJICAgIHRpbWVvdXQsIHJwcyk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKKwlzdGFydCA9 IGt0aW1lX2dldCgpOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLAorCQkJCSAg IEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwgSTkxNV9XQUlUX0FMTCwKKwkJCQkgICBhcmdzLT50 aW1lb3V0X25zIDwgMCA/IE1BWF9TQ0hFRFVMRV9USU1FT1VUIDogbnNlY3NfdG9famlmZmllcyhh cmdzLT50aW1lb3V0X25zKSwKKwkJCQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKKworCWlmIChh cmdzLT50aW1lb3V0X25zID4gMCkgeworCQlhcmdzLT50aW1lb3V0X25zIC09IGt0aW1lX3RvX25z KGt0aW1lX3N1YihrdGltZV9nZXQoKSwgc3RhcnQpKTsKKwkJaWYgKGFyZ3MtPnRpbWVvdXRfbnMg PCAwKQorCQkJYXJncy0+dGltZW91dF9ucyA9IDA7CiAJfQogCiAJaTkxNV9nZW1fb2JqZWN0X3B1 dF91bmxvY2tlZChvYmopOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzIyNiw3ICszMzQ5LDEz IEBAIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLCBib29sIHdyaXRlKQogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4sIG9s ZF9yZWFkX2RvbWFpbnM7CiAJaW50IHJldDsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0 X3JlbmRlcmluZyhvYmosICF3cml0ZSk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNl LmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJ CQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfAorCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQg fAorCQkJCSAgICh3cml0ZSA/IEk5MTVfV0FJVF9BTEwgOiAwKSwKKwkJCQkgICBNQVhfU0NIRURV TEVfVElNRU9VVCwKKwkJCQkgICBOVUxMKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBA IC0zMzQzLDcgKzM0NzIsMTIgQEAgcmVzdGFydDoKIAkJICogSWYgd2Ugd2FpdCB1cG9uIHRoZSBv YmplY3QsIHdlIGtub3cgdGhhdCBhbGwgdGhlIGJvdW5kCiAJCSAqIFZNQSBhcmUgbm8gbG9uZ2Vy IGFjdGl2ZS4KIAkJICovCi0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhv YmosIGZhbHNlKTsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLAorCQkJCQkgICBJ OTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQgfAorCQkJ CQkgICBJOTE1X1dBSVRfQUxMLAorCQkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCwKKwkJCQkJ ICAgTlVMTCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0zNTk4LDcgKzM3MzIs MTMgQEAgaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosIGJvb2wgd3JpdGUpCiAJdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbiwg b2xkX3JlYWRfZG9tYWluczsKIAlpbnQgcmV0OwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dh aXRfcmVuZGVyaW5nKG9iaiwgIXdyaXRlKTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPmJh c2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwK KwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJICAgSTkxNV9XQUlUX0xPQ0tF RCB8CisJCQkJICAgKHdyaXRlID8gSTkxNV9XQUlUX0FMTCA6IDApLAorCQkJCSAgIE1BWF9TQ0hF RFVMRV9USU1FT1VULAorCQkJCSAgIE5VTEwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAK QEAgLTM2NTQsMTEgKzM3OTQsNyBAQCBpOTE1X2dlbV9yaW5nX3Rocm90dGxlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIAlzdHJ1Y3QgZHJtX2k5MTVfZmls ZV9wcml2YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKIAl1bnNpZ25lZCBsb25n IHJlY2VudF9lbm91Z2ggPSBqaWZmaWVzIC0gRFJNX0k5MTVfVEhST1RUTEVfSklGRklFUzsKIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QsICp0YXJnZXQgPSBOVUxMOwotCWlu dCByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dlbV93YWl0X2Zvcl9lcnJvcigmZGV2X3ByaXYtPmdwdV9l cnJvcik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlsb25nIHJldDsKIAogCS8qIEFCSTog cmV0dXJuIC1FSU8gaWYgYWxyZWFkeSB3ZWRnZWQgKi8KIAlpZiAoaTkxNV90ZXJtaW5hbGx5X3dl ZGdlZCgmZGV2X3ByaXYtPmdwdV9lcnJvcikpCkBAIC0zNjg1LDEwICszODIxLDEyIEBAIGk5MTVf Z2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlKQogCWlmICh0YXJnZXQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBpOTE1 X3dhaXRfcmVxdWVzdCh0YXJnZXQsIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLCBOVUxMLCBOVUxM KTsKKwlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdCh0YXJnZXQsCisJCQkJSTkxNV9XQUlUX0lOVEVS UlVQVElCTEUsCisJCQkJTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCWk5MTVfZ2VtX3JlcXVlc3Rf cHV0KHRhcmdldCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsK IH0KIAogc3RhdGljIGJvb2wKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwpp bmRleCA3NDk2NjYxYjI5NWUuLjY4NzUzN2Q5MWJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3JlcXVlc3QuYwpAQCAtNTksMzEgKzU5LDkgQEAgc3RhdGljIGJvb2wgaTkxNV9mZW5j ZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVjdCBmZW5jZSAqZmVuY2UpCiAKIHN0YXRpYyBzaWduZWQg bG9uZyBpOTE1X2ZlbmNlX3dhaXQoc3RydWN0IGZlbmNlICpmZW5jZSwKIAkJCQkgICBib29sIGlu dGVycnVwdGlibGUsCi0JCQkJICAgc2lnbmVkIGxvbmcgdGltZW91dF9qaWZmaWVzKQorCQkJCSAg IHNpZ25lZCBsb25nIHRpbWVvdXQpCiB7Ci0JczY0IHRpbWVvdXRfbnMsICp0aW1lb3V0OwotCWlu dCByZXQ7Ci0KLQlpZiAodGltZW91dF9qaWZmaWVzICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7 Ci0JCXRpbWVvdXRfbnMgPSBqaWZmaWVzX3RvX25zZWNzKHRpbWVvdXRfamlmZmllcyk7Ci0JCXRp bWVvdXQgPSAmdGltZW91dF9uczsKLQl9IGVsc2UgewotCQl0aW1lb3V0ID0gTlVMTDsKLQl9Ci0K LQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdCh0b19yZXF1ZXN0KGZlbmNlKSwKLQkJCQlpbnRlcnJ1 cHRpYmxlLCB0aW1lb3V0LAotCQkJCU5PX1dBSVRCT09TVCk7Ci0JaWYgKHJldCA9PSAtRVRJTUUp Ci0JCXJldHVybiAwOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodGlt ZW91dF9qaWZmaWVzICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKQotCQl0aW1lb3V0X2ppZmZpZXMg PSBuc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbnMpOwotCi0JcmV0dXJuIHRpbWVvdXRfamlmZmll czsKKwlyZXR1cm4gaTkxNV93YWl0X3JlcXVlc3QodG9fcmVxdWVzdChmZW5jZSksIGludGVycnVw dGlibGUsIHRpbWVvdXQpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X2ZlbmNlX3ZhbHVlX3N0cihz dHJ1Y3QgZmVuY2UgKmZlbmNlLCBjaGFyICpzdHIsIGludCBzaXplKQpAQCAtMTY2LDcgKzE0NCw3 IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxdWVzdCkKIAlzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsICpu ZXh0OwogCiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7Ci0JbGlzdF9k ZWwoJnJlcXVlc3QtPmxpbmspOworCWxpc3RfZGVsX2luaXQoJnJlcXVlc3QtPmxpbmspOwogCiAJ LyogV2Uga25vdyB0aGUgR1BVIG11c3QgaGF2ZSByZWFkIHRoZSByZXF1ZXN0IHRvIGhhdmUKIAkg KiBzZW50IHVzIHRoZSBzZXFubyArIGludGVycnVwdCwgc28gdXNlIHRoZSBwb3NpdGlvbgpAQCAt MjI0LDcgKzIwMiw4IEBAIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmVfdXB0byhzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnRtcDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJlcS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7Ci0JR0VNX0JVR19PTihsaXN0X2VtcHR5KCZyZXEtPmxpbmspKTsKKwlpZiAobGlzdF9lbXB0 eSgmcmVxLT5saW5rKSkKKwkJcmV0dXJuOwogCiAJZG8gewogCQl0bXAgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZlbmdpbmUtPnJlcXVlc3RfbGlzdCwKQEAgLTc4NSw2MCArNzY0LDI3IEBAIGJvb2wgX19p OTE1X3NwaW5fcmVxdWVzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwK ICAqIFJldHVybnMgMCBpZiB0aGUgcmVxdWVzdCB3YXMgZm91bmQgd2l0aGluIHRoZSBhbGxvdGVk IHRpbWUuIEVsc2UgcmV0dXJucyB0aGUKICAqIGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmls bGVkIGluIHRpbWVvdXQgYXJndW1lbnQuCiAgKi8KLWludCBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKLQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdz LAotCQkgICAgICBzNjQgKnRpbWVvdXQsCi0JCSAgICAgIHN0cnVjdCBpbnRlbF9ycHNfY2xpZW50 ICpycHMpCitsb25nIGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxLAorCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkgICAgICAgbG9uZyB0aW1l b3V0KQogewogCWNvbnN0IGludCBzdGF0ZSA9IGZsYWdzICYgSTkxNV9XQUlUX0lOVEVSUlVQVElC TEUgPwogCQlUQVNLX0lOVEVSUlVQVElCTEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRTsKIAlERUZJ TkVfV0FJVChyZXNldCk7CiAJc3RydWN0IGludGVsX3dhaXQgd2FpdDsKLQl1bnNpZ25lZCBsb25n IHRpbWVvdXRfcmVtYWluOwotCWludCByZXQgPSAwOwogCiAJbWlnaHRfc2xlZXAoKTsKICNpZiBJ U19FTkFCTEVEKENPTkZJR19MT0NLREVQKQogCUdFTV9CVUdfT04oISFsb2NrZGVwX2lzX2hlbGQo JnJlcS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCkgIT0KIAkJICAgISEoZmxhZ3MgJiBJOTE1X1dB SVRfTE9DS0VEKSk7CiAjZW5kaWYKKwlHRU1fQlVHX09OKHRpbWVvdXQgPCAwKTsKIAogCWlmIChp OTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlZChyZXEpKQotCQlyZXR1cm4gMDsKLQotCXRpbWVvdXRf cmVtYWluID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JaWYgKHRpbWVvdXQpIHsKLQkJaWYgKFdB Uk5fT04oKnRpbWVvdXQgPCAwKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICgqdGltZW91 dCA9PSAwKQotCQkJcmV0dXJuIC1FVElNRTsKLQotCQkvKiBSZWNvcmQgY3VycmVudCB0aW1lIGlu IGNhc2UgaW50ZXJydXB0ZWQsIG9yIHdlZGdlZCAqLwotCQl0aW1lb3V0X3JlbWFpbiA9IG5zZWNz X3RvX2ppZmZpZXNfdGltZW91dCgqdGltZW91dCk7Ci0JCSp0aW1lb3V0ICs9IGt0aW1lX2dldF9y YXdfbnMoKTsKLQl9CisJCXJldHVybiB0aW1lb3V0OwogCiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVz dF93YWl0X2JlZ2luKHJlcSk7CiAKLQkvKiBUaGlzIGNsaWVudCBpcyBhYm91dCB0byBzdGFsbCB3 YWl0aW5nIGZvciB0aGUgR1BVLiBJbiBtYW55IGNhc2VzCi0JICogdGhpcyBpcyB1bmRlc2lyYWJs ZSBhbmQgbGltaXRzIHRoZSB0aHJvdWdocHV0IG9mIHRoZSBzeXN0ZW0sIGFzCi0JICogbWFueSBj bGllbnRzIGNhbm5vdCBjb250aW51ZSBwcm9jZXNzaW5nIHVzZXIgaW5wdXQvb3V0cHV0IHdoaWxz dAotCSAqIGJsb2NrZWQuIFJQUyBhdXRvdHVuaW5nIG1heSB0YWtlIHRlbnMgb2YgbWlsbGlzZWNv bmRzIHRvIHJlc3BvbmQKLQkgKiB0byB0aGUgR1BVIGxvYWQgYW5kIHRodXMgaW5jdXJzIGFkZGl0 aW9uYWwgbGF0ZW5jeSBmb3IgdGhlIGNsaWVudC4KLQkgKiBXZSBjYW4gY2lyY3VtdmVudCB0aGF0 IGJ5IHByb21vdGluZyB0aGUgR1BVIGZyZXF1ZW5jeSB0byBtYXhpbXVtCi0JICogYmVmb3JlIHdl IHdhaXQuIFRoaXMgbWFrZXMgdGhlIEdQVSB0aHJvdHRsZSB1cCBtdWNoIG1vcmUgcXVpY2tseQot CSAqIChnb29kIGZvciBiZW5jaG1hcmtzIGFuZCB1c2VyIGV4cGVyaWVuY2UsIGUuZy4gd2luZG93 IGFuaW1hdGlvbnMpLAotCSAqIGJ1dCBhdCBhIGNvc3Qgb2Ygc3BlbmRpbmcgbW9yZSBwb3dlciBw cm9jZXNzaW5nIHRoZSB3b3JrbG9hZAotCSAqIChiYWQgZm9yIGJhdHRlcnkpLiBOb3QgYWxsIGNs aWVudHMgZXZlbiB3YW50IHRoZWlyIHJlc3VsdHMKLQkgKiBpbW1lZGlhdGVseSBhbmQgZm9yIHRo ZW0gd2Ugc2hvdWxkIGp1c3QgbGV0IHRoZSBHUFUgc2VsZWN0IGl0cyBvd24KLQkgKiBmcmVxdWVu Y3kgdG8gbWF4aW1pc2UgZWZmaWNpZW5jeS4gVG8gcHJldmVudCBhIHNpbmdsZSBjbGllbnQgZnJv bQotCSAqIGZvcmNpbmcgdGhlIGNsb2NrcyB0b28gaGlnaCBmb3IgdGhlIHdob2xlIHN5c3RlbSwg d2Ugb25seSBhbGxvdwotCSAqIGVhY2ggY2xpZW50IHRvIHdhaXRib29zdCBvbmNlIGluIGEgYnVz eSBwZXJpb2QuCi0JICovCi0JaWYgKElTX1JQU19DTElFTlQocnBzKSAmJiBJTlRFTF9HRU4ocmVx LT5pOTE1KSA+PSA2KQotCQlnZW42X3Jwc19ib29zdChyZXEtPmk5MTUsIHJwcywgcmVxLT5lbWl0 dGVkX2ppZmZpZXMpOwotCiAJLyogT3B0aW1pc3RpYyBzaG9ydCBzcGluIGJlZm9yZSB0b3VjaGlu ZyBJUlFzICovCiAJaWYgKGk5MTVfc3Bpbl9yZXF1ZXN0KHJlcSwgc3RhdGUsIDUpKQogCQlnb3Rv IGNvbXBsZXRlOwpAQCAtODU3LDE1ICs4MDMsMTMgQEAgaW50IGk5MTVfd2FpdF9yZXF1ZXN0KHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAogCiAJZm9yICg7OykgewogCQlpZiAoc2ln bmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKSB7Ci0JCQlyZXQgPSAtRVJFU1RBUlRT WVM7CisJCQl0aW1lb3V0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KIAotCQl0aW1l b3V0X3JlbWFpbiA9IGlvX3NjaGVkdWxlX3RpbWVvdXQodGltZW91dF9yZW1haW4pOwotCQlpZiAo dGltZW91dF9yZW1haW4gPT0gMCkgewotCQkJcmV0ID0gLUVUSU1FOworCQl0aW1lb3V0ID0gaW9f c2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJaWYgKCF0aW1lb3V0KQogCQkJYnJlYWs7Ci0J CX0KIAogCQlpZiAoaW50ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdCkpCiAJCQlicmVhazsKQEAgLTkx Myw0MCArODU3LDcgQEAgd2FrZXVwOgogY29tcGxldGU6CiAJdHJhY2VfaTkxNV9nZW1fcmVxdWVz dF93YWl0X2VuZChyZXEpOwogCi0JaWYgKHRpbWVvdXQpIHsKLQkJKnRpbWVvdXQgLT0ga3RpbWVf Z2V0X3Jhd19ucygpOwotCQlpZiAoKnRpbWVvdXQgPCAwKQotCQkJKnRpbWVvdXQgPSAwOwotCi0J CS8qCi0JCSAqIEFwcGFyZW50bHkga3RpbWUgaXNuJ3QgYWNjdXJhdGUgZW5vdWdoIGFuZCBvY2Nh c2lvbmFsbHkgaGFzIGEKLQkJICogYml0IG9mIG1pc21hdGNoIGluIHRoZSBqaWZmaWVzPC0+bnNl Y3M8LT5rdGltZSBsb29wLiBTbyBwYXRjaAotCQkgKiB0aGluZ3MgdXAgdG8gbWFrZSB0aGUgdGVz dCBoYXBweS4gV2UgYWxsb3cgdXAgdG8gMSBqaWZmeS4KLQkJICoKLQkJICogVGhpcyBpcyBhIHJl Z3Jzc2lvbiBmcm9tIHRoZSB0aW1lc3BlYy0+a3RpbWUgY29udmVyc2lvbi4KLQkJICovCi0JCWlm IChyZXQgPT0gLUVUSU1FICYmICp0aW1lb3V0IDwgamlmZmllc190b191c2VjcygxKSoxMDAwKQot CQkJKnRpbWVvdXQgPSAwOwotCX0KLQotCWlmIChJU19SUFNfVVNFUihycHMpICYmCi0JICAgIHJl cS0+ZmVuY2Uuc2Vxbm8gPT0gcmVxLT5lbmdpbmUtPmxhc3Rfc3VibWl0dGVkX3NlcW5vKSB7Ci0J CS8qIFRoZSBHUFUgaXMgbm93IGlkbGUgYW5kIHRoaXMgY2xpZW50IGhhcyBzdGFsbGVkLgotCQkg KiBTaW5jZSBubyBvdGhlciBjbGllbnQgaGFzIHN1Ym1pdHRlZCBhIHJlcXVlc3QgaW4gdGhlCi0J CSAqIG1lYW50aW1lLCBhc3N1bWUgdGhhdCB0aGlzIGNsaWVudCBpcyB0aGUgb25seSBvbmUKLQkJ ICogc3VwcGx5aW5nIHdvcmsgdG8gdGhlIEdQVSBidXQgaXMgdW5hYmxlIHRvIGtlZXAgdGhhdAot CQkgKiB3b3JrIHN1cHBsaWVkIGJlY2F1c2UgaXQgaXMgd2FpdGluZy4gU2luY2UgdGhlIEdQVSBp cwotCQkgKiB0aGVuIG5ldmVyIGtlcHQgZnVsbHkgYnVzeSwgUlBTIGF1dG9jbG9ja2luZyB3aWxs Ci0JCSAqIGtlZXAgdGhlIGNsb2NrcyByZWxhdGl2ZWx5IGxvdywgY2F1c2luZyBmdXJ0aGVyIGRl bGF5cy4KLQkJICogQ29tcGVuc2F0ZSBieSBnaXZpbmcgdGhlIHN5bmNocm9ub3VzIGNsaWVudCBj cmVkaXQgZm9yCi0JCSAqIGEgd2FpdGJvb3N0IG5leHQgdGltZS4KLQkJICovCi0JCXNwaW5fbG9j aygmcmVxLT5pOTE1LT5ycHMuY2xpZW50X2xvY2spOwotCQlsaXN0X2RlbF9pbml0KCZycHMtPmxp bmspOwotCQlzcGluX3VubG9jaygmcmVxLT5pOTE1LT5ycHMuY2xpZW50X2xvY2spOwotCX0KLQot CXJldHVybiByZXQ7CisJcmV0dXJuIHRpbWVvdXQ7CiB9CiAKIHN0YXRpYyBib29sIGVuZ2luZV9y ZXRpcmVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCmluZGV4IGM4NWEzZDgyZmViZi4uZjFjZTM5MGM5 MjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCkBAIC0yMjgsMTMg KzIyOCwxMyBAQCBzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVudDsKICNkZWZpbmUgSVNfUlBTX0NMSUVO VChwKSAoIUlTX0VSUihwKSkKICNkZWZpbmUgSVNfUlBTX1VTRVIocCkgKCFJU19FUlJfT1JfTlVM TChwKSkKIAotaW50IGk5MTVfd2FpdF9yZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxLAotCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCSAgICAgIHM2NCAqdGltZW91 dCwKLQkJICAgICAgc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJwcykKK2xvbmcgaTkxNV93YWl0 X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCisJCSAgICAgICB1bnNp Z25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICBsb25nIHRpbWVvdXQpCiAJX19hdHRyaWJ1dGVfXygo bm9ubnVsbCgxKSkpOwogI2RlZmluZSBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRQlCSVQoMCkKICNk ZWZpbmUgSTkxNV9XQUlUX0xPQ0tFRAlCSVQoMSkgLyogc3RydWN0X211dGV4IGhlbGQsIGhhbmRs ZSBHUFUgcmVzZXQgKi8KKyNkZWZpbmUgSTkxNV9XQUlUX0FMTAkJQklUKDIpIC8qIHVzZWQgYnkg aTkxNV9nZW1fb2JqZWN0X3dhaXQoKSAqLwogCiBzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9lbmdp bmVfZ2V0X3NlcW5vKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKQEAgLTU4Mywx NCArNTgzLDE2IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjawogaTkxNV9nZW1fYWN0 aXZlX3dhaXQoY29uc3Qgc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlLCBzdHJ1Y3QgbXV0 ZXggKm11dGV4KQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwls b25nIHJldDsKIAogCXJlcXVlc3QgPSBpOTE1X2dlbV9hY3RpdmVfcGVlayhhY3RpdmUsIG11dGV4 KTsKIAlpZiAoIXJlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGk5MTVfd2FpdF9yZXF1 ZXN0KHJlcXVlc3QsCi0JCQkJIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwgSTkxNV9XQUlUX0xP Q0tFRCwKLQkJCQkgTlVMTCwgTlVMTCk7CisJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QocmVxdWVz dCwKKwkJCQlJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8IEk5MTVfV0FJVF9MT0NLRUQsCisJCQkJ TUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAog LyoqCkBAIC02MTcsMjAgKzYxOSwxOCBAQCBpOTE1X2dlbV9hY3RpdmVfd2FpdChjb25zdCBzdHJ1 Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiAgKi8KIHN0 YXRpYyBpbmxpbmUgaW50CiBpOTE1X2dlbV9hY3RpdmVfd2FpdF91bmxvY2tlZChjb25zdCBzdHJ1 Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3Ms Ci0JCQkgICAgICBzNjQgKnRpbWVvdXQsCi0JCQkgICAgICBzdHJ1Y3QgaW50ZWxfcnBzX2NsaWVu dCAqcnBzKQorCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKLQlpbnQgcmV0ID0gMDsKKwlsb25nIHJldCA9IDA7CiAK IAlyZXF1ZXN0ID0gaTkxNV9nZW1fYWN0aXZlX2dldF91bmxvY2tlZChhY3RpdmUpOwogCWlmIChy ZXF1ZXN0KSB7Ci0JCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KHJlcXVlc3QsIGZsYWdzLCB0aW1l b3V0LCBycHMpOworCQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChyZXF1ZXN0LCBmbGFncywgTUFY X1NDSEVEVUxFX1RJTUVPVVQpOwogCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChyZXF1ZXN0KTsKIAl9 CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAogLyoqCkBA IC02NDcsNyArNjQ3LDcgQEAgaTkxNV9nZW1fYWN0aXZlX3JldGlyZShzdHJ1Y3QgaTkxNV9nZW1f YWN0aXZlICphY3RpdmUsCiAJCSAgICAgICBzdHJ1Y3QgbXV0ZXggKm11dGV4KQogewogCXN0cnVj dCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKLQlpbnQgcmV0OworCWxvbmcgcmV0Owog CiAJcmVxdWVzdCA9IGk5MTVfZ2VtX2FjdGl2ZV9yYXcoYWN0aXZlLCBtdXRleCk7CiAJaWYgKCFy ZXF1ZXN0KQpAQCAtNjU1LDggKzY1NSw4IEBAIGk5MTVfZ2VtX2FjdGl2ZV9yZXRpcmUoc3RydWN0 IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlLAogCiAJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QocmVx dWVzdCwKIAkJCQlJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8IEk5MTVfV0FJVF9MT0NLRUQsCi0J CQkJTlVMTCwgTlVMTCk7Ci0JaWYgKHJldCkKKwkJCQlNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJ aWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlsaXN0X2RlbF9pbml0KCZhY3RpdmUtPmxp bmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jCmluZGV4IGU1Mzc5MzBj NjRiNS4uMWM4OTFiOTJhYzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV91c2VycHRyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0 ci5jCkBAIC02MSwyMyArNjEsMTMgQEAgc3RydWN0IGk5MTVfbW11X29iamVjdCB7CiAJYm9vbCBh dHRhY2hlZDsKIH07CiAKLXN0YXRpYyB2b2lkIHdhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCi17Ci0JdW5zaWduZWQgbG9uZyBhY3RpdmUgPSBfX0k5MTVfQk9f QUNUSVZFKG9iaik7Ci0JaW50IGlkeDsKLQotCWZvcl9lYWNoX2FjdGl2ZShhY3RpdmUsIGlkeCkK LQkJaTkxNV9nZW1fYWN0aXZlX3dhaXRfdW5sb2NrZWQoJm9iai0+bGFzdF9yZWFkW2lkeF0sCi0J CQkJCSAgICAgIDAsIE5VTEwsIE5VTEwpOwotfQotCiBzdGF0aWMgdm9pZCBjYW5jZWxfdXNlcnB0 cihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGk5MTVfbW11X29iamVjdCAq bW8gPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCptbyksIHdvcmspOwogCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmogPSBtby0+b2JqOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBvYmotPmJhc2UuZGV2OwogCi0Jd2FpdF9yZW5kZXJpbmcob2JqKTsKKwlpOTE1X2dlbV9vYmpl Y3Rfd2FpdChvYmosIEk5MTVfV0FJVF9BTEwsIE1BWF9TQ0hFRFVMRV9USU1FT1VULCBOVUxMKTsK IAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkvKiBDYW5jZWwgYW55IGFjdGl2 ZSB3b3JrZXIgYW5kIGZvcmNlIHVzIHRvIHJlLWV2YWx1YXRlIGd1cCAqLwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDQ5N2Q5OWI4ODQ2OC4uYTVkNjFmMGVlYTFkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMjAyMiw3ICsxMjAyMiw3IEBAIHN0 YXRpYyB2b2lkIGludGVsX21taW9fZmxpcF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3 KQogCiAJaWYgKHdvcmstPmZsaXBfcXVldWVkX3JlcSkKIAkJV0FSTl9PTihpOTE1X3dhaXRfcmVx dWVzdCh3b3JrLT5mbGlwX3F1ZXVlZF9yZXEsCi0JCQkJCSAgMCwgTlVMTCwgTk9fV0FJVEJPT1NU KSk7CisJCQkJCSAgMCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpIDwgMCk7CiAKIAkvKiBGb3IgZnJh bWVidWZmZXIgYmFja2VkIGJ5IGRtYWJ1Ziwgd2FpdCBmb3IgZmVuY2UgKi8KIAlyZXN2ID0gaTkx NV9nZW1fb2JqZWN0X2dldF9kbWFidWZfcmVzdihvYmopOwpAQCAtMTQwNjksMTkgKzE0MDY5LDIx IEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX3ByZXBhcmVfY29tbWl0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCiAJCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVf c3RhdGUsIGkpIHsKIAkJCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcGxhbmVfc3Rh dGUgPQogCQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lX3N0YXRlKTsKKwkJCWxvbmcgdGlt ZW91dDsKIAogCQkJaWYgKCFpbnRlbF9wbGFuZV9zdGF0ZS0+d2FpdF9yZXEpCiAJCQkJY29udGlu dWU7CiAKLQkJCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KGludGVsX3BsYW5lX3N0YXRlLT53YWl0 X3JlcSwKLQkJCQkJCUk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLAotCQkJCQkJTlVMTCwgTlVMTCk7 Ci0JCQlpZiAocmV0KSB7CisJCQl0aW1lb3V0ID0gaTkxNV93YWl0X3JlcXVlc3QoaW50ZWxfcGxh bmVfc3RhdGUtPndhaXRfcmVxLAorCQkJCQkJICAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLAor CQkJCQkJICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwkJCWlmICh0aW1lb3V0IDwgMCkgewog CQkJCS8qIEFueSBoYW5nIHNob3VsZCBiZSBzd2FsbG93ZWQgYnkgdGhlIHdhaXQgKi8KLQkJCQlX QVJOX09OKHJldCA9PSAtRUlPKTsKKwkJCQlXQVJOX09OKHRpbWVvdXQgPT0gLUVJTyk7CiAJCQkJ bXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQkJCWRybV9hdG9taWNfaGVscGVyX2Ns ZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwogCQkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOworCQkJCXJldCA9IHRpbWVvdXQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTE0 MjgzLDcgKzE0Mjg1LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfYXRvbWljX2NvbW1pdF90YWlsKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIAlib29sIGh3X2NoZWNrID0gaW50ZWxfc3Rh dGUtPm1vZGVzZXQ7CiAJdW5zaWduZWQgbG9uZyBwdXRfZG9tYWluc1tJOTE1X01BWF9QSVBFU10g PSB7fTsKIAl1bnNpZ25lZCBjcnRjX3ZibGFua19tYXNrID0gMDsKLQlpbnQgaSwgcmV0OworCWlu dCBpOwogCiAJZm9yX2VhY2hfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0 ZSwgaSkgewogCQlzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BsYW5lX3N0YXRlID0K QEAgLTE0MjkyLDExICsxNDI5NCwxMCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0 X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCQlpZiAoIWludGVsX3BsYW5l X3N0YXRlLT53YWl0X3JlcSkKIAkJCWNvbnRpbnVlOwogCi0JCXJldCA9IGk5MTVfd2FpdF9yZXF1 ZXN0KGludGVsX3BsYW5lX3N0YXRlLT53YWl0X3JlcSwKLQkJCQkJMCwgTlVMTCwgTlVMTCk7CiAJ CS8qIEVJTyBzaG91bGQgYmUgZWF0ZW4sIGFuZCB3ZSBjYW4ndCBnZXQgaW50ZXJydXB0ZWQgaW4g dGhlCiAJCSAqIHdvcmtlciwgYW5kIGJsb2NraW5nIGNvbW1pdHMgaGF2ZSB3YWl0ZWQgYWxyZWFk eS4gKi8KLQkJV0FSTl9PTihyZXQpOworCQlXQVJOX09OKGk5MTVfd2FpdF9yZXF1ZXN0KGludGVs X3BsYW5lX3N0YXRlLT53YWl0X3JlcSwKKwkJCQkJICAwLCBNQVhfU0NIRURVTEVfVElNRU9VVCkg PCAwKTsKIAl9CiAKIAlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMoc3Rh dGUpOwpAQCAtMTQ2NDcsNiArMTQ2NDgsNyBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAogCWlmIChvbGRfb2JqKSB7CiAJCXN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqY3J0Y19zdGF0ZSA9CiAJCQlkcm1fYXRvbWljX2dldF9leGlzdGluZ19jcnRjX3N0YXRl KG5ld19zdGF0ZS0+c3RhdGUsIHBsYW5lLT5zdGF0ZS0+Y3J0Yyk7CisJCWxvbmcgdGltZW91dCA9 IDA7CiAKIAkJLyogQmlnIEhhbW1lciwgd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSBw ZW5kaW5nCiAJCSAqIE1JX1dBSVRfRk9SX0VWRU5UIGluc2lkZSBhIHVzZXIgYmF0Y2ggYnVmZmVy IG9uIHRoZQpAQCAtMTQ2NjAsMTEgKzE0NjYyLDE1IEBAIGludGVsX3ByZXBhcmVfcGxhbmVfZmIo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCSAqIGNhbiBzYWZlbHkgY29udGludWUuCiAJCSAq LwogCQlpZiAobmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKLQkJCXJldCA9IGk5MTVfZ2VtX29i amVjdF93YWl0X3JlbmRlcmluZyhvbGRfb2JqLCB0cnVlKTsKLQkJaWYgKHJldCkgeworCQkJdGlt ZW91dCA9IGk5MTVfZ2VtX29iamVjdF93YWl0KG9sZF9vYmosCisJCQkJCQkgICAgICAgSTkxNV9X QUlUX0lOVEVSUlVQVElCTEUgfAorCQkJCQkJICAgICAgIEk5MTVfV0FJVF9MT0NLRUQsCisJCQkJ CQkgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQsCisJCQkJCQkgICAgICAgTlVMTCk7CisJCWlm ICh0aW1lb3V0IDwgMCkgewogCQkJLyogR1BVIGhhbmdzIHNob3VsZCBoYXZlIGJlZW4gc3dhbGxv d2VkIGJ5IHRoZSB3YWl0ICovCi0JCQlXQVJOX09OKHJldCA9PSAtRUlPKTsKLQkJCXJldHVybiBy ZXQ7CisJCQlXQVJOX09OKHRpbWVvdXQgPT0gLUVJTyk7CisJCQlyZXR1cm4gdGltZW91dDsKIAkJ fQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCmluZGV4IDdhNzQ3 NTAwNzZjNS4uNGJmNmJkMDU2YjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCkBAIC0yMjExLDcgKzIyMTEsOSBAQCBzdGF0aWMgaW50IHdhaXRfZm9yX3NwYWNlKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLCBpbnQgYnl0ZXMpCiB7CiAJc3RydWN0IGlu dGVsX3JpbmcgKnJpbmcgPSByZXEtPnJpbmc7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICp0YXJnZXQ7Ci0JaW50IHJldDsKKwlsb25nIHRpbWVvdXQ7CisKKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZyZXEtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwogCiAJaW50ZWxfcmluZ191cGRhdGVf c3BhY2UocmluZyk7CiAJaWYgKHJpbmctPnNwYWNlID49IGJ5dGVzKQpAQCAtMjI0MSwxMSArMjI0 MywxMSBAQCBzdGF0aWMgaW50IHdhaXRfZm9yX3NwYWNlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcmVxLCBpbnQgYnl0ZXMpCiAJaWYgKFdBUk5fT04oJnRhcmdldC0+cmluZ19saW5rID09 ICZyaW5nLT5yZXF1ZXN0X2xpc3QpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAotCXJldCA9IGk5MTVf d2FpdF9yZXF1ZXN0KHRhcmdldCwKLQkJCQlJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8IEk5MTVf V0FJVF9MT0NLRUQsCi0JCQkJTlVMTCwgTk9fV0FJVEJPT1NUKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OworCXRpbWVvdXQgPSBpOTE1X3dhaXRfcmVxdWVzdCh0YXJnZXQsCisJCQkJICAgIEk5 MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwgSTkxNV9XQUlUX0xPQ0tFRCwKKwkJCQkgICAgTUFYX1ND SEVEVUxFX1RJTUVPVVQpOworCWlmICh0aW1lb3V0IDwgMCkKKwkJcmV0dXJuIHRpbWVvdXQ7CiAK IAlpOTE1X2dlbV9yZXF1ZXN0X3JldGlyZV91cHRvKHRhcmdldCk7CiAKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCA3ZjY0ZDYxMTE1OWIuLjg4ZWQyMWYxMTM1YiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaApAQCAtNTAzLDggKzUwMyw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IGludGVsX2VuZ2luZV9pZGxlKHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKIAkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzKQogewogCS8qIFdhaXQg dXBvbiB0aGUgbGFzdCByZXF1ZXN0IHRvIGJlIGNvbXBsZXRlZCAqLwotCXJldHVybiBpOTE1X2dl bV9hY3RpdmVfd2FpdF91bmxvY2tlZCgmZW5naW5lLT5sYXN0X3JlcXVlc3QsCi0JCQkJCSAgICAg ZmxhZ3MsIE5VTEwsIE5VTEwpOworCXJldHVybiBpOTE1X2dlbV9hY3RpdmVfd2FpdF91bmxvY2tl ZCgmZW5naW5lLT5sYXN0X3JlcXVlc3QsIGZsYWdzKTsKIH0KIAogaW50IGludGVsX2luaXRfcmVu ZGVyX3JpbmdfYnVmZmVyKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Ci0tIAoyLjku MwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==