From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 08/41] drm/i915: Rearrange i915_wait_request() accounting with callers Date: Fri, 14 Oct 2016 13:18:00 +0100 Message-ID: <20161014121833.439-9-chris@chris-wilson.co.uk> References: <20161014121833.439-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-lf0-x243.google.com (mail-lf0-x243.google.com [IPv6:2a00:1450:4010:c07::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 748086E11E for ; Fri, 14 Oct 2016 12:18:50 +0000 (UTC) Received: by mail-lf0-x243.google.com with SMTP id x79so17980209lff.2 for ; Fri, 14 Oct 2016 05:18:50 -0700 (PDT) In-Reply-To: <20161014121833.439-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 ZyB0aGUgR0VNIGludGVyZmFjZSBmb3IgdXNlIG9mIHJlc2VydmF0aW9uX29iamVjdHMuCgpTaWdu ZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgfCAgIDcgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICB8IDMxMiArKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jIHwg MTE5ICsrLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5o IHwgIDMyICsrLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYyB8ICAx MiArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgIHwgIDI3ICstLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIHwgIDE0ICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmggfCAgIDMgKy0KIDggZmlsZXMgY2hhbmdl ZCwgMjk0IGluc2VydGlvbnMoKyksIDIzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAppbmRleCBhMzgyOTU2MDkwMDAuLmJjMmFiMmUyMzcxYyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCkBAIC0zMzAzLDkgKzMzMDMsMTAgQEAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV93 YWl0X2Zvcl9pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIGludCBfX211 c3RfY2hlY2sgaTkxNV9nZW1fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQg aTkxNV9nZW1fcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IGk5MTVfZ2VtX2Zh dWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Ci1p bnQgX19tdXN0X2NoZWNrCi1pOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCSAgICAgICBib29sIHJlYWRvbmx5KTsKK2ludCBp OTE1X2dlbV9vYmplY3Rfd2FpdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ IHVuc2lnbmVkIGludCBmbGFncywKKwkJCSBsb25nIHRpbWVvdXQsCisJCQkgc3RydWN0IGludGVs X3Jwc19jbGllbnQgKnJwcyk7CiBpbnQgX19tdXN0X2NoZWNrCiBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX2d0dF9kb21haW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCQkgIGJv b2wgd3JpdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggOGI2OGQ4NzRiYzJmLi45MmE0 NTVhYTVlMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysr 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 CisJcmV0dXJuIHRpbWVvdXQgPCAwID8gdGltZW91dCA6IDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qg aW50ZWxfcnBzX2NsaWVudCAqdG9fcnBzX2NsaWVudChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCkBA IC00NDksMTIgKzUzNywxOCBAQCBpOTE1X2dlbV9waHlzX3B3cml0ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2 OwogCXZvaWQgKnZhZGRyID0gb2JqLT5waHlzX2hhbmRsZS0+dmFkZHIgKyBhcmdzLT5vZmZzZXQ7 CiAJY2hhciBfX3VzZXIgKnVzZXJfZGF0YSA9IHU2NF90b191c2VyX3B0cihhcmdzLT5kYXRhX3B0 cik7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCS8qIFdlIG1hbnVhbGx5IGNvbnRyb2wg dGhlIGRvbWFpbiBoZXJlIGFuZCBwcmV0ZW5kIHRoYXQgaXQKIAkgKiByZW1haW5zIGNvaGVyZW50 IGkuZS4gaW4gdGhlIEdUVCBkb21haW4sIGxpa2Ugc2htZW1fcHdyaXRlLgogCSAqLwotCXJldCA9 IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGZhbHNlKTsKKwlsb2NrZGVwX2Fz c2VydF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGk5MTVfZ2Vt X29iamVjdF93YWl0KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJCQkJ ICAgSTkxNV9XQUlUX0xPQ0tFRCB8CisJCQkJICAgSTkxNV9XQUlUX0FMTCwKKwkJCQkgICBNQVhf U0NIRURVTEVfVElNRU9VVCwKKwkJCQkgICB0b19ycHNfY2xpZW50KGZpbGVfcHJpdikpOwogCWlm IChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTYxNCwxMiArNzA4LDE3IEBAIGludCBpOTE1X2dl bV9vYmpfcHJlcGFyZV9zaG1lbV9yZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos CiB7CiAJaW50IHJldDsKIAotCSpuZWVkc19jbGZsdXNoID0gMDsKKwlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJKm5lZWRzX2NsZmx1c2ggPSAw OwogCWlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19zdHJ1Y3RfcGFnZShvYmopKQogCQlyZXR1cm4g LUVOT0RFVjsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIHRy dWUpOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRf SU5URVJSVVBUSUJMRSB8CisJCQkJICAgSTkxNV9XQUlUX0xPQ0tFRCwKKwkJCQkgICBNQVhfU0NI RURVTEVfVElNRU9VVCwKKwkJCQkgICBOVUxMKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0Owog CkBAIC02NjEsMTEgKzc2MCwxOCBAQCBpbnQgaTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1fd3Jp dGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIHsKIAlpbnQgcmV0OwogCisJbG9j a2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKKwogCSpuZWVk c19jbGZsdXNoID0gMDsKIAlpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2Uob2Jq KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5k ZXJpbmcob2JqLCBmYWxzZSk7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLAorCQkJ CSAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwKKwkJCQkgICBJOTE1X1dBSVRfTE9DS0VEIHwK KwkJCQkgICBJOTE1X1dBSVRfQUxMLAorCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VULAorCQkJ CSAgIE5VTEwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTEwNTEsNyArMTE1Nywx MCBAQCBpOTE1X2dlbV9wcmVhZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCiAJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X3ByZWFkKG9iaiwgYXJncy0+b2Zmc2V0LCBh cmdzLT5zaXplKTsKIAotCXJldCA9IF9fdW5zYWZlX3dhaXRfcmVuZGVyaW5nKG9iaiwgdG9fcnBz X2NsaWVudChmaWxlKSwgdHJ1ZSk7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLAor CQkJCSAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLAorCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1F T1VULAorCQkJCSAgIHRvX3Jwc19jbGllbnQoZmlsZSkpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJy OwogCkBAIC0xNDQ5LDcgKzE1NTgsMTEgQEAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAKIAl0cmFjZV9pOTE1X2dlbV9vYmplY3RfcHdy aXRlKG9iaiwgYXJncy0+b2Zmc2V0LCBhcmdzLT5zaXplKTsKIAotCXJldCA9IF9fdW5zYWZlX3dh aXRfcmVuZGVyaW5nKG9iaiwgdG9fcnBzX2NsaWVudChmaWxlKSwgZmFsc2UpOworCXJldCA9IGk5 MTVfZ2VtX29iamVjdF93YWl0KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8 CisJCQkJICAgSTkxNV9XQUlUX0FMTCwKKwkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCwKKwkJ CQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAt MTUzNiw3ICsxNjQ5LDExIEBAIGk5MTVfZ2VtX3NldF9kb21haW5faW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkgKiBXZSB3aWxsIHJlcGVhdCB0aGUgZmx1c2ggaG9s ZGluZyB0aGUgbG9jayBpbiB0aGUgbm9ybWFsIG1hbm5lcgogCSAqIHRvIGNhdGNoIGNhc2VzIHdo ZXJlIHdlIGFyZSBnYXp1bXBlZC4KIAkgKi8KLQlyZXQgPSBfX3Vuc2FmZV93YWl0X3JlbmRlcmlu ZyhvYmosIHRvX3Jwc19jbGllbnQoZmlsZSksICF3cml0ZV9kb21haW4pOworCXJldCA9IGk5MTVf Z2VtX29iamVjdF93YWl0KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8CisJ CQkJICAgKHdyaXRlX2RvbWFpbiA/IEk5MTVfV0FJVF9BTEwgOiAwKSwKKwkJCQkgICBNQVhfU0NI RURVTEVfVElNRU9VVCwKKwkJCQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKIAlpZiAocmV0KQog CQlnb3RvIGVycjsKIApAQCAtMTc3Miw3ICsxODg5LDEwIEBAIGludCBpOTE1X2dlbV9mYXVsdChz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCSAqIHJl cGVhdCB0aGUgZmx1c2ggaG9sZGluZyB0aGUgbG9jayBpbiB0aGUgbm9ybWFsIG1hbm5lciB0byBj YXRjaCBjYXNlcwogCSAqIHdoZXJlIHdlIGFyZSBnYXp1bXBlZC4KIAkgKi8KLQlyZXQgPSBfX3Vu c2FmZV93YWl0X3JlbmRlcmluZyhvYmosIE5VTEwsICF3cml0ZSk7CisJcmV0ID0gaTkxNV9nZW1f b2JqZWN0X3dhaXQob2JqLAorCQkJCSAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFLAorCQkJCSAg IE1BWF9TQ0hFRFVMRV9USU1FT1VULAorCQkJCSAgIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8g ZXJyOwogCkBAIC0yODIxLDYgKzI5NDEsMTcgQEAgdm9pZCBpOTE1X2dlbV9jbG9zZV9vYmplY3Qo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW0sIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIAltdXRl eF91bmxvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CiB9CiAKK3N0YXRpYyB1bnNp Z25lZCBsb25nIHRvX3dhaXRfdGltZW91dChzNjQgdGltZW91dF9ucykKK3sKKwlpZiAodGltZW91 dF9ucyA8IDApCisJCXJldHVybiBNQVhfU0NIRURVTEVfVElNRU9VVDsKKworCWlmICh0aW1lb3V0 X25zID09IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIG5zZWNzX3RvX2ppZmZpZXNfdGltZW91 dCh0aW1lb3V0X25zKTsKK30KKwogLyoqCiAgKiBpOTE1X2dlbV93YWl0X2lvY3RsIC0gaW1wbGVt ZW50cyBEUk1fSU9DVExfSTkxNV9HRU1fV0FJVAogICogQGRldjogZHJtIGRldmljZSBwb2ludGVy CkBAIC0yODQ5LDEwICsyOTgwLDkgQEAgaW50CiBpOTE1X2dlbV93YWl0X2lvY3RsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIHsKIAlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3dhaXQgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBpbnRlbF9ycHNf Y2xpZW50ICpycHMgPSB0b19ycHNfY2xpZW50KGZpbGUpOwogCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Ci0JdW5zaWduZWQgbG9uZyBhY3RpdmU7Ci0JaW50IGlkeCwgcmV0ID0gMDsK KwlrdGltZV90IHN0YXJ0OworCWxvbmcgcmV0OwogCiAJaWYgKGFyZ3MtPmZsYWdzICE9IDApCiAJ CXJldHVybiAtRUlOVkFMOwpAQCAtMjg2MSwxNCArMjk5MSwxNyBAQCBpOTE1X2dlbV93YWl0X2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKIAlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlhY3RpdmUgPSBfX0k5MTVf Qk9fQUNUSVZFKG9iaik7Ci0JZm9yX2VhY2hfYWN0aXZlKGFjdGl2ZSwgaWR4KSB7Ci0JCXM2NCAq dGltZW91dCA9IGFyZ3MtPnRpbWVvdXRfbnMgPj0gMCA/ICZhcmdzLT50aW1lb3V0X25zIDogTlVM TDsKLQkJcmV0ID0gaTkxNV9nZW1fYWN0aXZlX3dhaXRfdW5sb2NrZWQoJm9iai0+bGFzdF9yZWFk W2lkeF0sCi0JCQkJCQkgICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUsCi0JCQkJCQkgICAgdGlt ZW91dCwgcnBzKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOworCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7 CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkxNV9XQUlUX0lO VEVSUlVQVElCTEUgfCBJOTE1X1dBSVRfQUxMLAorCQkJCSAgIHRvX3dhaXRfdGltZW91dChhcmdz LT50aW1lb3V0X25zKSwKKwkJCQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKKworCWlmIChhcmdz LT50aW1lb3V0X25zID4gMCkgeworCQlhcmdzLT50aW1lb3V0X25zIC09IGt0aW1lX3RvX25zKGt0 aW1lX3N1YihrdGltZV9nZXQoKSwgc3RhcnQpKTsKKwkJaWYgKGFyZ3MtPnRpbWVvdXRfbnMgPCAw KQorCQkJYXJncy0+dGltZW91dF9ucyA9IDA7CiAJfQogCiAJaTkxNV9nZW1fb2JqZWN0X3B1dF91 bmxvY2tlZChvYmopOwpAQCAtMzI4Nyw3ICszNDIwLDEzIEBAIGk5MTVfZ2VtX29iamVjdF9zZXRf dG9fZ3R0X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRl KQogCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4sIG9sZF9yZWFkX2RvbWFpbnM7CiAJaW50IHJl dDsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosICF3cml0ZSk7 CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKKwly ZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQ VElCTEUgfAorCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQgfAorCQkJCSAgICh3cml0ZSA/IEk5MTVf V0FJVF9BTEwgOiAwKSwKKwkJCQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCwKKwkJCQkgICBOVUxM KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0zNDA0LDcgKzM1NDMsMTIgQEAgcmVz dGFydDoKIAkJICogSWYgd2Ugd2FpdCB1cG9uIHRoZSBvYmplY3QsIHdlIGtub3cgdGhhdCBhbGwg dGhlIGJvdW5kCiAJCSAqIFZNQSBhcmUgbm8gbG9uZ2VyIGFjdGl2ZS4KIAkJICovCi0JCXJldCA9 IGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGZhbHNlKTsKKwkJcmV0ID0gaTkx NV9nZW1fb2JqZWN0X3dhaXQob2JqLAorCQkJCQkgICBJOTE1X1dBSVRfSU5URVJSVVBUSUJMRSB8 CisJCQkJCSAgIEk5MTVfV0FJVF9MT0NLRUQgfAorCQkJCQkgICBJOTE1X1dBSVRfQUxMLAorCQkJ CQkgICBNQVhfU0NIRURVTEVfVElNRU9VVCwKKwkJCQkJICAgTlVMTCk7CiAJCWlmIChyZXQpCiAJ CQlyZXR1cm4gcmV0OwogCkBAIC0zNjU0LDcgKzM3OTgsMTMgQEAgaTkxNV9nZW1fb2JqZWN0X3Nl dF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgd3Jp dGUpCiAJdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbiwgb2xkX3JlYWRfZG9tYWluczsKIAlpbnQg cmV0OwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgIXdyaXRl KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwor CXJldCA9IGk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwKKwkJCQkgICBJOTE1X1dBSVRfSU5URVJS VVBUSUJMRSB8CisJCQkJICAgSTkxNV9XQUlUX0xPQ0tFRCB8CisJCQkJICAgKHdyaXRlID8gSTkx NV9XQUlUX0FMTCA6IDApLAorCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VULAorCQkJCSAgIE5V TEwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM3MTAsMTEgKzM4NjAsNyBAQCBp OTE1X2dlbV9yaW5nX3Rocm90dGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKIAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSBm aWxlLT5kcml2ZXJfcHJpdjsKIAl1bnNpZ25lZCBsb25nIHJlY2VudF9lbm91Z2ggPSBqaWZmaWVz IC0gRFJNX0k5MTVfVEhST1RUTEVfSklGRklFUzsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJlcXVlc3QsICp0YXJnZXQgPSBOVUxMOwotCWludCByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dl bV93YWl0X2Zvcl9lcnJvcigmZGV2X3ByaXYtPmdwdV9lcnJvcik7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKKwlsb25nIHJldDsKIAogCS8qIEFCSTogcmV0dXJuIC1FSU8gaWYgYWxyZWFkeSB3 ZWRnZWQgKi8KIAlpZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmZGV2X3ByaXYtPmdwdV9lcnJv cikpCkBAIC0zNzQxLDEwICszODg3LDEyIEBAIGk5MTVfZ2VtX3JpbmdfdGhyb3R0bGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQogCWlmICh0YXJnZXQgPT0g TlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdCh0YXJnZXQsIEk5 MTVfV0FJVF9JTlRFUlJVUFRJQkxFLCBOVUxMLCBOVUxMKTsKKwlyZXQgPSBpOTE1X3dhaXRfcmVx dWVzdCh0YXJnZXQsCisJCQkJSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUsCisJCQkJTUFYX1NDSEVE VUxFX1RJTUVPVVQpOwogCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHRhcmdldCk7CiAKLQlyZXR1cm4g cmV0OworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKIH0KIAogc3RhdGljIGJvb2wKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwppbmRleCBhMWJkOThkOGRhYjIuLjRlNGQw NGIwMzFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVz dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwpAQCAtNTks MzEgKzU5LDkgQEAgc3RhdGljIGJvb2wgaTkxNV9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVj dCBmZW5jZSAqZmVuY2UpCiAKIHN0YXRpYyBzaWduZWQgbG9uZyBpOTE1X2ZlbmNlX3dhaXQoc3Ry dWN0IGZlbmNlICpmZW5jZSwKIAkJCQkgICBib29sIGludGVycnVwdGlibGUsCi0JCQkJICAgc2ln bmVkIGxvbmcgdGltZW91dF9qaWZmaWVzKQorCQkJCSAgIHNpZ25lZCBsb25nIHRpbWVvdXQpCiB7 Ci0JczY0IHRpbWVvdXRfbnMsICp0aW1lb3V0OwotCWludCByZXQ7Ci0KLQlpZiAodGltZW91dF9q aWZmaWVzICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7Ci0JCXRpbWVvdXRfbnMgPSBqaWZmaWVz X3RvX25zZWNzKHRpbWVvdXRfamlmZmllcyk7Ci0JCXRpbWVvdXQgPSAmdGltZW91dF9uczsKLQl9 IGVsc2UgewotCQl0aW1lb3V0ID0gTlVMTDsKLQl9Ci0KLQlyZXQgPSBpOTE1X3dhaXRfcmVxdWVz dCh0b19yZXF1ZXN0KGZlbmNlKSwKLQkJCQlpbnRlcnJ1cHRpYmxlLCB0aW1lb3V0LAotCQkJCU5P X1dBSVRCT09TVCk7Ci0JaWYgKHJldCA9PSAtRVRJTUUpCi0JCXJldHVybiAwOwotCi0JaWYgKHJl dCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAodGltZW91dF9qaWZmaWVzICE9IE1BWF9TQ0hF RFVMRV9USU1FT1VUKQotCQl0aW1lb3V0X2ppZmZpZXMgPSBuc2Vjc190b19qaWZmaWVzKHRpbWVv dXRfbnMpOwotCi0JcmV0dXJuIHRpbWVvdXRfamlmZmllczsKKwlyZXR1cm4gaTkxNV93YWl0X3Jl cXVlc3QodG9fcmVxdWVzdChmZW5jZSksIGludGVycnVwdGlibGUsIHRpbWVvdXQpOwogfQogCiBz dGF0aWMgdm9pZCBpOTE1X2ZlbmNlX3ZhbHVlX3N0cihzdHJ1Y3QgZmVuY2UgKmZlbmNlLCBjaGFy ICpzdHIsIGludCBzaXplKQpAQCAtMTY2LDcgKzE0NCw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2Vt X3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKIAlz dHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsICpuZXh0OwogCiAJdHJhY2VfaTkxNV9nZW1f cmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7Ci0JbGlzdF9kZWwoJnJlcXVlc3QtPmxpbmspOworCWxp c3RfZGVsX2luaXQoJnJlcXVlc3QtPmxpbmspOwogCiAJLyogV2Uga25vdyB0aGUgR1BVIG11c3Qg aGF2ZSByZWFkIHRoZSByZXF1ZXN0IHRvIGhhdmUKIAkgKiBzZW50IHVzIHRoZSBzZXFubyArIGlu dGVycnVwdCwgc28gdXNlIHRoZSBwb3NpdGlvbgpAQCAtMjI0LDcgKzIwMiw4IEBAIHZvaWQgaTkx NV9nZW1fcmVxdWVzdF9yZXRpcmVfdXB0byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJl cSkKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnRtcDsKIAogCWxvY2tkZXBfYXNzZXJ0 X2hlbGQoJnJlcS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Ci0JR0VNX0JVR19PTihsaXN0X2Vt cHR5KCZyZXEtPmxpbmspKTsKKwlpZiAobGlzdF9lbXB0eSgmcmVxLT5saW5rKSkKKwkJcmV0dXJu OwogCiAJZG8gewogCQl0bXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlbmdpbmUtPnJlcXVlc3RfbGlz dCwKQEAgLTc5NSw2MCArNzc0LDMwIEBAIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVzdChjb25zdCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKICAqIFJldHVybnMgMCBpZiB0aGUgcmVx dWVzdCB3YXMgZm91bmQgd2l0aGluIHRoZSBhbGxvdGVkIHRpbWUuIEVsc2UgcmV0dXJucyB0aGUK ICAqIGVycm5vIHdpdGggcmVtYWluaW5nIHRpbWUgZmlsbGVkIGluIHRpbWVvdXQgYXJndW1lbnQu CiAgKi8KLWludCBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3Qg KnJlcSwKLQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAotCQkgICAgICBzNjQgKnRpbWVvdXQs Ci0JCSAgICAgIHN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCitsb25nIGk5MTVfd2FpdF9y ZXF1ZXN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAorCQkgICAgICAgdW5zaWdu ZWQgaW50IGZsYWdzLAorCQkgICAgICAgbG9uZyB0aW1lb3V0KQogewogCWNvbnN0IGludCBzdGF0 ZSA9IGZsYWdzICYgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgPwogCQlUQVNLX0lOVEVSUlVQVElC TEUgOiBUQVNLX1VOSU5URVJSVVBUSUJMRTsKIAlERUZJTkVfV0FJVChyZXNldCk7CiAJc3RydWN0 IGludGVsX3dhaXQgd2FpdDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfcmVtYWluOwotCWludCBy ZXQgPSAwOwogCiAJbWlnaHRfc2xlZXAoKTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19MT0NLREVQ KQogCUdFTV9CVUdfT04oISFsb2NrZGVwX2lzX2hlbGQoJnJlcS0+aTkxNS0+ZHJtLnN0cnVjdF9t dXRleCkgIT0KIAkJICAgISEoZmxhZ3MgJiBJOTE1X1dBSVRfTE9DS0VEKSk7CiAjZW5kaWYKKwlH RU1fQlVHX09OKHRpbWVvdXQgPCAwKTsKIAogCWlmIChpOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRl ZChyZXEpKQotCQlyZXR1cm4gMDsKLQotCXRpbWVvdXRfcmVtYWluID0gTUFYX1NDSEVEVUxFX1RJ TUVPVVQ7Ci0JaWYgKHRpbWVvdXQpIHsKLQkJaWYgKFdBUk5fT04oKnRpbWVvdXQgPCAwKSkKLQkJ CXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gdGltZW91dDsKIAotCQlpZiAoKnRpbWVvdXQgPT0g MCkKLQkJCXJldHVybiAtRVRJTUU7Ci0KLQkJLyogUmVjb3JkIGN1cnJlbnQgdGltZSBpbiBjYXNl IGludGVycnVwdGVkLCBvciB3ZWRnZWQgKi8KLQkJdGltZW91dF9yZW1haW4gPSBuc2Vjc190b19q aWZmaWVzX3RpbWVvdXQoKnRpbWVvdXQpOwotCQkqdGltZW91dCArPSBrdGltZV9nZXRfcmF3X25z KCk7Ci0JfQorCWlmICghdGltZW91dCkKKwkJcmV0dXJuIC1FVElNRTsKIAogCXRyYWNlX2k5MTVf Z2VtX3JlcXVlc3Rfd2FpdF9iZWdpbihyZXEpOwogCi0JLyogVGhpcyBjbGllbnQgaXMgYWJvdXQg dG8gc3RhbGwgd2FpdGluZyBmb3IgdGhlIEdQVS4gSW4gbWFueSBjYXNlcwotCSAqIHRoaXMgaXMg dW5kZXNpcmFibGUgYW5kIGxpbWl0cyB0aGUgdGhyb3VnaHB1dCBvZiB0aGUgc3lzdGVtLCBhcwot CSAqIG1hbnkgY2xpZW50cyBjYW5ub3QgY29udGludWUgcHJvY2Vzc2luZyB1c2VyIGlucHV0L291 dHB1dCB3aGlsc3QKLQkgKiBibG9ja2VkLiBSUFMgYXV0b3R1bmluZyBtYXkgdGFrZSB0ZW5zIG9m IG1pbGxpc2Vjb25kcyB0byByZXNwb25kCi0JICogdG8gdGhlIEdQVSBsb2FkIGFuZCB0aHVzIGlu Y3VycyBhZGRpdGlvbmFsIGxhdGVuY3kgZm9yIHRoZSBjbGllbnQuCi0JICogV2UgY2FuIGNpcmN1 bXZlbnQgdGhhdCBieSBwcm9tb3RpbmcgdGhlIEdQVSBmcmVxdWVuY3kgdG8gbWF4aW11bQotCSAq IGJlZm9yZSB3ZSB3YWl0LiBUaGlzIG1ha2VzIHRoZSBHUFUgdGhyb3R0bGUgdXAgbXVjaCBtb3Jl IHF1aWNrbHkKLQkgKiAoZ29vZCBmb3IgYmVuY2htYXJrcyBhbmQgdXNlciBleHBlcmllbmNlLCBl LmcuIHdpbmRvdyBhbmltYXRpb25zKSwKLQkgKiBidXQgYXQgYSBjb3N0IG9mIHNwZW5kaW5nIG1v cmUgcG93ZXIgcHJvY2Vzc2luZyB0aGUgd29ya2xvYWQKLQkgKiAoYmFkIGZvciBiYXR0ZXJ5KS4g Tm90IGFsbCBjbGllbnRzIGV2ZW4gd2FudCB0aGVpciByZXN1bHRzCi0JICogaW1tZWRpYXRlbHkg YW5kIGZvciB0aGVtIHdlIHNob3VsZCBqdXN0IGxldCB0aGUgR1BVIHNlbGVjdCBpdHMgb3duCi0J ICogZnJlcXVlbmN5IHRvIG1heGltaXNlIGVmZmljaWVuY3kuIFRvIHByZXZlbnQgYSBzaW5nbGUg Y2xpZW50IGZyb20KLQkgKiBmb3JjaW5nIHRoZSBjbG9ja3MgdG9vIGhpZ2ggZm9yIHRoZSB3aG9s ZSBzeXN0ZW0sIHdlIG9ubHkgYWxsb3cKLQkgKiBlYWNoIGNsaWVudCB0byB3YWl0Ym9vc3Qgb25j ZSBpbiBhIGJ1c3kgcGVyaW9kLgotCSAqLwotCWlmIChJU19SUFNfQ0xJRU5UKHJwcykgJiYgSU5U RUxfR0VOKHJlcS0+aTkxNSkgPj0gNikKLQkJZ2VuNl9ycHNfYm9vc3QocmVxLT5pOTE1LCBycHMs IHJlcS0+ZW1pdHRlZF9qaWZmaWVzKTsKLQogCS8qIE9wdGltaXN0aWMgc2hvcnQgc3BpbiBiZWZv cmUgdG91Y2hpbmcgSVJRcyAqLwogCWlmIChpOTE1X3NwaW5fcmVxdWVzdChyZXEsIHN0YXRlLCA1 KSkKIAkJZ290byBjb21wbGV0ZTsKQEAgLTg2NywxNiArODE2LDE3IEBAIGludCBpOTE1X3dhaXRf cmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAogCWZvciAoOzspIHsK IAkJaWYgKHNpZ25hbF9wZW5kaW5nX3N0YXRlKHN0YXRlLCBjdXJyZW50KSkgewotCQkJcmV0ID0g LUVSRVNUQVJUU1lTOworCQkJdGltZW91dCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9 CiAKLQkJdGltZW91dF9yZW1haW4gPSBpb19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXRfcmVtYWlu KTsKLQkJaWYgKHRpbWVvdXRfcmVtYWluID09IDApIHsKLQkJCXJldCA9IC1FVElNRTsKKwkJaWYg KCF0aW1lb3V0KSB7CisJCQl0aW1lb3V0ID0gLUVUSU1FOwogCQkJYnJlYWs7CiAJCX0KIAorCQl0 aW1lb3V0ID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwogCQlpZiAoaW50ZWxfd2Fp dF9jb21wbGV0ZSgmd2FpdCkpCiAJCQlicmVhazsKIApAQCAtOTIzLDQwICs4NzMsNyBAQCB3YWtl dXA6CiBjb21wbGV0ZToKIAl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kKHJlcSk7CiAK LQlpZiAodGltZW91dCkgewotCQkqdGltZW91dCAtPSBrdGltZV9nZXRfcmF3X25zKCk7Ci0JCWlm ICgqdGltZW91dCA8IDApCi0JCQkqdGltZW91dCA9IDA7Ci0KLQkJLyoKLQkJICogQXBwYXJlbnRs eSBrdGltZSBpc24ndCBhY2N1cmF0ZSBlbm91Z2ggYW5kIG9jY2FzaW9uYWxseSBoYXMgYQotCQkg KiBiaXQgb2YgbWlzbWF0Y2ggaW4gdGhlIGppZmZpZXM8LT5uc2VjczwtPmt0aW1lIGxvb3AuIFNv IHBhdGNoCi0JCSAqIHRoaW5ncyB1cCB0byBtYWtlIHRoZSB0ZXN0IGhhcHB5LiBXZSBhbGxvdyB1 cCB0byAxIGppZmZ5LgotCQkgKgotCQkgKiBUaGlzIGlzIGEgcmVncnNzaW9uIGZyb20gdGhlIHRp bWVzcGVjLT5rdGltZSBjb252ZXJzaW9uLgotCQkgKi8KLQkJaWYgKHJldCA9PSAtRVRJTUUgJiYg KnRpbWVvdXQgPCBqaWZmaWVzX3RvX3VzZWNzKDEpKjEwMDApCi0JCQkqdGltZW91dCA9IDA7Ci0J fQotCi0JaWYgKElTX1JQU19VU0VSKHJwcykgJiYKLQkgICAgcmVxLT5mZW5jZS5zZXFubyA9PSBy ZXEtPmVuZ2luZS0+bGFzdF9zdWJtaXR0ZWRfc2Vxbm8pIHsKLQkJLyogVGhlIEdQVSBpcyBub3cg aWRsZSBhbmQgdGhpcyBjbGllbnQgaGFzIHN0YWxsZWQuCi0JCSAqIFNpbmNlIG5vIG90aGVyIGNs aWVudCBoYXMgc3VibWl0dGVkIGEgcmVxdWVzdCBpbiB0aGUKLQkJICogbWVhbnRpbWUsIGFzc3Vt ZSB0aGF0IHRoaXMgY2xpZW50IGlzIHRoZSBvbmx5IG9uZQotCQkgKiBzdXBwbHlpbmcgd29yayB0 byB0aGUgR1BVIGJ1dCBpcyB1bmFibGUgdG8ga2VlcCB0aGF0Ci0JCSAqIHdvcmsgc3VwcGxpZWQg YmVjYXVzZSBpdCBpcyB3YWl0aW5nLiBTaW5jZSB0aGUgR1BVIGlzCi0JCSAqIHRoZW4gbmV2ZXIg a2VwdCBmdWxseSBidXN5LCBSUFMgYXV0b2Nsb2NraW5nIHdpbGwKLQkJICoga2VlcCB0aGUgY2xv Y2tzIHJlbGF0aXZlbHkgbG93LCBjYXVzaW5nIGZ1cnRoZXIgZGVsYXlzLgotCQkgKiBDb21wZW5z YXRlIGJ5IGdpdmluZyB0aGUgc3luY2hyb25vdXMgY2xpZW50IGNyZWRpdCBmb3IKLQkJICogYSB3 YWl0Ym9vc3QgbmV4dCB0aW1lLgotCQkgKi8KLQkJc3Bpbl9sb2NrKCZyZXEtPmk5MTUtPnJwcy5j bGllbnRfbG9jayk7Ci0JCWxpc3RfZGVsX2luaXQoJnJwcy0+bGluayk7Ci0JCXNwaW5fdW5sb2Nr KCZyZXEtPmk5MTUtPnJwcy5jbGllbnRfbG9jayk7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1 cm4gdGltZW91dDsKIH0KIAogc3RhdGljIGJvb2wgZW5naW5lX3JldGlyZV9yZXF1ZXN0cyhzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9y ZXF1ZXN0LmgKaW5kZXggYzg1YTNkODJmZWJmLi5mMWNlMzkwYzkyNDQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmgKQEAgLTIyOCwxMyArMjI4LDEzIEBAIHN0cnVjdCBp bnRlbF9ycHNfY2xpZW50OwogI2RlZmluZSBJU19SUFNfQ0xJRU5UKHApICghSVNfRVJSKHApKQog I2RlZmluZSBJU19SUFNfVVNFUihwKSAoIUlTX0VSUl9PUl9OVUxMKHApKQogCi1pbnQgaTkxNV93 YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCi0JCSAgICAgIHVu c2lnbmVkIGludCBmbGFncywKLQkJICAgICAgczY0ICp0aW1lb3V0LAotCQkgICAgICBzdHJ1Y3Qg aW50ZWxfcnBzX2NsaWVudCAqcnBzKQorbG9uZyBpOTE1X3dhaXRfcmVxdWVzdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKKwkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkJ ICAgICAgIGxvbmcgdGltZW91dCkKIAlfX2F0dHJpYnV0ZV9fKChub25udWxsKDEpKSk7CiAjZGVm aW5lIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFCUJJVCgwKQogI2RlZmluZSBJOTE1X1dBSVRfTE9D S0VECUJJVCgxKSAvKiBzdHJ1Y3RfbXV0ZXggaGVsZCwgaGFuZGxlIEdQVSByZXNldCAqLworI2Rl ZmluZSBJOTE1X1dBSVRfQUxMCQlCSVQoMikgLyogdXNlZCBieSBpOTE1X2dlbV9vYmplY3Rfd2Fp dCgpICovCiAKIHN0YXRpYyBpbmxpbmUgdTMyIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIApAQCAtNTgzLDE0ICs1ODMsMTYgQEAgc3RhdGlj IGlubGluZSBpbnQgX19tdXN0X2NoZWNrCiBpOTE1X2dlbV9hY3RpdmVfd2FpdChjb25zdCBzdHJ1 Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7CiAJc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OworCWxvbmcgcmV0OwogCiAJcmVxdWVz dCA9IGk5MTVfZ2VtX2FjdGl2ZV9wZWVrKGFjdGl2ZSwgbXV0ZXgpOwogCWlmICghcmVxdWVzdCkK IAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gaTkxNV93YWl0X3JlcXVlc3QocmVxdWVzdCwKLQkJCQkg STkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfCBJOTE1X1dBSVRfTE9DS0VELAotCQkJCSBOVUxMLCBO VUxMKTsKKwlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChyZXF1ZXN0LAorCQkJCUk5MTVfV0FJVF9J TlRFUlJVUFRJQkxFIHwgSTkxNV9XQUlUX0xPQ0tFRCwKKwkJCQlNQVhfU0NIRURVTEVfVElNRU9V VCk7CisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogfQogCiAvKioKQEAgLTYxNywyMCArNjE5 LDE4IEBAIGk5MTVfZ2VtX2FjdGl2ZV93YWl0KGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUg KmFjdGl2ZSwgc3RydWN0IG11dGV4ICptdXRleCkKICAqLwogc3RhdGljIGlubGluZSBpbnQKIGk5 MTVfZ2VtX2FjdGl2ZV93YWl0X3VubG9ja2VkKGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUg KmFjdGl2ZSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncywKLQkJCSAgICAgIHM2NCAqdGlt ZW91dCwKLQkJCSAgICAgIHN0cnVjdCBpbnRlbF9ycHNfY2xpZW50ICpycHMpCisJCQkgICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1 ZXN0OwotCWludCByZXQgPSAwOworCWxvbmcgcmV0ID0gMDsKIAogCXJlcXVlc3QgPSBpOTE1X2dl bV9hY3RpdmVfZ2V0X3VubG9ja2VkKGFjdGl2ZSk7CiAJaWYgKHJlcXVlc3QpIHsKLQkJcmV0ID0g aTkxNV93YWl0X3JlcXVlc3QocmVxdWVzdCwgZmxhZ3MsIHRpbWVvdXQsIHJwcyk7CisJCXJldCA9 IGk5MTVfd2FpdF9yZXF1ZXN0KHJlcXVlc3QsIGZsYWdzLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7 CiAJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHJlcXVlc3QpOwogCX0KIAotCXJldHVybiByZXQ7CisJ cmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogfQogCiAvKioKQEAgLTY0Nyw3ICs2NDcsNyBAQCBp OTE1X2dlbV9hY3RpdmVfcmV0aXJlKHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgKmFjdGl2ZSwKIAkJ ICAgICAgIHN0cnVjdCBtdXRleCAqbXV0ZXgpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpyZXF1ZXN0OwotCWludCByZXQ7CisJbG9uZyByZXQ7CiAKIAlyZXF1ZXN0ID0gaTkxNV9n ZW1fYWN0aXZlX3JhdyhhY3RpdmUsIG11dGV4KTsKIAlpZiAoIXJlcXVlc3QpCkBAIC02NTUsOCAr NjU1LDggQEAgaTkxNV9nZW1fYWN0aXZlX3JldGlyZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICph Y3RpdmUsCiAKIAlyZXQgPSBpOTE1X3dhaXRfcmVxdWVzdChyZXF1ZXN0LAogCQkJCUk5MTVfV0FJ VF9JTlRFUlJVUFRJQkxFIHwgSTkxNV9XQUlUX0xPQ0tFRCwKLQkJCQlOVUxMLCBOVUxMKTsKLQlp ZiAocmV0KQorCQkJCU1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0 dXJuIHJldDsKIAogCWxpc3RfZGVsX2luaXQoJmFjdGl2ZS0+bGluayk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV91c2VycHRyLmMKaW5kZXggZTUzNzkzMGM2NGI1Li4xYzg5MWI5MmFjODAg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3VzZXJwdHIuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKQEAgLTYxLDIzICs2MSwx MyBAQCBzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0IHsKIAlib29sIGF0dGFjaGVkOwogfTsKIAotc3Rh dGljIHZvaWQgd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK LXsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZSA9IF9fSTkxNV9CT19BQ1RJVkUob2JqKTsKLQlpbnQg aWR4OwotCi0JZm9yX2VhY2hfYWN0aXZlKGFjdGl2ZSwgaWR4KQotCQlpOTE1X2dlbV9hY3RpdmVf d2FpdF91bmxvY2tlZCgmb2JqLT5sYXN0X3JlYWRbaWR4XSwKLQkJCQkJICAgICAgMCwgTlVMTCwg TlVMTCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGNhbmNlbF91c2VycHRyKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKIHsKIAlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbyA9IGNvbnRhaW5lcl9vZih3 b3JrLCB0eXBlb2YoKm1vKSwgd29yayk7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiA9IG1vLT5vYmo7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAK LQl3YWl0X3JlbmRlcmluZyhvYmopOworCWk5MTVfZ2VtX29iamVjdF93YWl0KG9iaiwgSTkxNV9X QUlUX0FMTCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIE5VTEwpOwogCiAJbXV0ZXhfbG9jaygmZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwogCS8qIENhbmNlbCBhbnkgYWN0aXZlIHdvcmtlciBhbmQgZm9yY2Ug dXMgdG8gcmUtZXZhbHVhdGUgZ3VwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMK aW5kZXggNjBjNjk5ZTJjMmFmLi4wNzQwOTU2NTU2M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMKQEAgLTEyMDUwLDcgKzEyMDUwLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfbW1p b19mbGlwX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAKIAlpZiAod29yay0+Zmxp cF9xdWV1ZWRfcmVxKQogCQlXQVJOX09OKGk5MTVfd2FpdF9yZXF1ZXN0KHdvcmstPmZsaXBfcXVl dWVkX3JlcSwKLQkJCQkJICAwLCBOVUxMLCBOT19XQUlUQk9PU1QpKTsKKwkJCQkJICAwLCBNQVhf U0NIRURVTEVfVElNRU9VVCkgPCAwKTsKIAogCS8qIEZvciBmcmFtZWJ1ZmZlciBiYWNrZWQgYnkg ZG1hYnVmLCB3YWl0IGZvciBmZW5jZSAqLwogCXJlc3YgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2Rt YWJ1Zl9yZXN2KG9iaik7CkBAIC0xNDEwMCwxOSArMTQxMDAsMjEgQEAgc3RhdGljIGludCBpbnRl bF9hdG9taWNfcHJlcGFyZV9jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJZm9yX2Vh Y2hfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkgewogCQkJc3Ry dWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wbGFuZV9zdGF0ZSA9CiAJCQkJdG9faW50ZWxf cGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpOworCQkJbG9uZyB0aW1lb3V0OwogCiAJCQlpZiAoIWlu dGVsX3BsYW5lX3N0YXRlLT53YWl0X3JlcSkKIAkJCQljb250aW51ZTsKIAotCQkJcmV0ID0gaTkx NV93YWl0X3JlcXVlc3QoaW50ZWxfcGxhbmVfc3RhdGUtPndhaXRfcmVxLAotCQkJCQkJSTkxNV9X QUlUX0lOVEVSUlVQVElCTEUsCi0JCQkJCQlOVUxMLCBOVUxMKTsKLQkJCWlmIChyZXQpIHsKKwkJ CXRpbWVvdXQgPSBpOTE1X3dhaXRfcmVxdWVzdChpbnRlbF9wbGFuZV9zdGF0ZS0+d2FpdF9yZXEs CisJCQkJCQkgICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUsCisJCQkJCQkgICAgTUFYX1NDSEVE VUxFX1RJTUVPVVQpOworCQkJaWYgKHRpbWVvdXQgPCAwKSB7CiAJCQkJLyogQW55IGhhbmcgc2hv dWxkIGJlIHN3YWxsb3dlZCBieSB0aGUgd2FpdCAqLwotCQkJCVdBUk5fT04ocmV0ID09IC1FSU8p OworCQkJCVdBUk5fT04odGltZW91dCA9PSAtRUlPKTsKIAkJCQltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CiAJCQkJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBz dGF0ZSk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQkJcmV0ID0g dGltZW91dDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTQzMTQsNyArMTQzMTYsNyBAQCBz dGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQogCWJvb2wgaHdfY2hlY2sgPSBpbnRlbF9zdGF0ZS0+bW9kZXNldDsKIAl1bnNp Z25lZCBsb25nIHB1dF9kb21haW5zW0k5MTVfTUFYX1BJUEVTXSA9IHt9OwogCXVuc2lnbmVkIGNy dGNfdmJsYW5rX21hc2sgPSAwOwotCWludCBpLCByZXQ7CisJaW50IGk7CiAKIAlmb3JfZWFjaF9w bGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKSB7CiAJCXN0cnVjdCBp bnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcGxhbmVfc3RhdGUgPQpAQCAtMTQzMjMsMTEgKzE0MzI1 LDEwIEBAIHN0YXRpYyB2b2lkIGludGVsX2F0b21pY19jb21taXRfdGFpbChzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCiAJCWlmICghaW50ZWxfcGxhbmVfc3RhdGUtPndhaXRfcmVxKQog CQkJY29udGludWU7CiAKLQkJcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoaW50ZWxfcGxhbmVfc3Rh dGUtPndhaXRfcmVxLAotCQkJCQkwLCBOVUxMLCBOVUxMKTsKIAkJLyogRUlPIHNob3VsZCBiZSBl YXRlbiwgYW5kIHdlIGNhbid0IGdldCBpbnRlcnJ1cHRlZCBpbiB0aGUKIAkJICogd29ya2VyLCBh bmQgYmxvY2tpbmcgY29tbWl0cyBoYXZlIHdhaXRlZCBhbHJlYWR5LiAqLwotCQlXQVJOX09OKHJl dCk7CisJCVdBUk5fT04oaTkxNV93YWl0X3JlcXVlc3QoaW50ZWxfcGxhbmVfc3RhdGUtPndhaXRf cmVxLAorCQkJCQkgIDAsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKSA8IDApOwogCX0KIAogCWRybV9h dG9taWNfaGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdGF0ZSk7CkBAIC0xNDY5MSw3ICsx NDY5MiwxMSBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAogCQkgKiBjYW4gc2FmZWx5IGNvbnRpbnVlLgogCQkgKi8KIAkJaWYgKG5lZWRzX21vZGVzZXQo Y3J0Y19zdGF0ZSkpCi0JCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2xk X29iaiwgdHJ1ZSk7CisJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdChvbGRfb2JqLAorCQkJ CQkJICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfAorCQkJCQkJICAgSTkxNV9XQUlUX0xPQ0tF RCwKKwkJCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VULAorCQkJCQkJICAgTlVMTCk7CiAJCWlm IChyZXQpIHsKIAkJCS8qIEdQVSBoYW5ncyBzaG91bGQgaGF2ZSBiZWVuIHN3YWxsb3dlZCBieSB0 aGUgd2FpdCAqLwogCQkJV0FSTl9PTihyZXQgPT0gLUVJTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggZTEwNzQ1NWIwMTY4Li4yMzk2YzY1MWJkMGYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKQEAgLTIxNTcsNyArMjE1Nyw5IEBA IHN0YXRpYyBpbnQgd2FpdF9mb3Jfc3BhY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpy ZXEsIGludCBieXRlcykKIHsKIAlzdHJ1Y3QgaW50ZWxfcmluZyAqcmluZyA9IHJlcS0+cmluZzsK IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnRhcmdldDsKLQlpbnQgcmV0OworCWxvbmcg dGltZW91dDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJlcS0+aTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7CiAKIAlpbnRlbF9yaW5nX3VwZGF0ZV9zcGFjZShyaW5nKTsKIAlpZiAocmluZy0+c3Bh Y2UgPj0gYnl0ZXMpCkBAIC0yMTg3LDExICsyMTg5LDExIEBAIHN0YXRpYyBpbnQgd2FpdF9mb3Jf c3BhY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsIGludCBieXRlcykKIAlpZiAo V0FSTl9PTigmdGFyZ2V0LT5yaW5nX2xpbmsgPT0gJnJpbmctPnJlcXVlc3RfbGlzdCkpCiAJCXJl dHVybiAtRU5PU1BDOwogCi0JcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QodGFyZ2V0LAotCQkJCUk5 MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwgSTkxNV9XQUlUX0xPQ0tFRCwKLQkJCQlOVUxMLCBOT19X QUlUQk9PU1QpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJdGltZW91dCA9IGk5MTVfd2Fp dF9yZXF1ZXN0KHRhcmdldCwKKwkJCQkgICAgSTkxNV9XQUlUX0lOVEVSUlVQVElCTEUgfCBJOTE1 X1dBSVRfTE9DS0VELAorCQkJCSAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7CisJaWYgKHRpbWVv dXQgPCAwKQorCQlyZXR1cm4gdGltZW91dDsKIAogCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX3Vw dG8odGFyZ2V0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4 IDMyYjJlNjMzMmNjZi4uODg0YTVhZTIyMjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oCkBAIC01MjQsOCArNTI0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgaW50ZWxf ZW5naW5lX2lkbGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQkJCSAgICB1bnNp Z25lZCBpbnQgZmxhZ3MpCiB7CiAJLyogV2FpdCB1cG9uIHRoZSBsYXN0IHJlcXVlc3QgdG8gYmUg Y29tcGxldGVkICovCi0JcmV0dXJuIGk5MTVfZ2VtX2FjdGl2ZV93YWl0X3VubG9ja2VkKCZlbmdp bmUtPmxhc3RfcmVxdWVzdCwKLQkJCQkJICAgICBmbGFncywgTlVMTCwgTlVMTCk7CisJcmV0dXJu IGk5MTVfZ2VtX2FjdGl2ZV93YWl0X3VubG9ja2VkKCZlbmdpbmUtPmxhc3RfcmVxdWVzdCwgZmxh Z3MpOwogfQogCiBpbnQgaW50ZWxfaW5pdF9yZW5kZXJfcmluZ19idWZmZXIoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKTsKLS0gCjIuOS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK