From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michel Thierry Subject: [PATCH 05/10] drm/i915/tdr: Add support for per engine reset recovery Date: Wed, 11 Jan 2017 20:18:12 -0800 Message-ID: <20170112041817.1102-6-michel.thierry@intel.com> References: <20170112041817.1102-1-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F6B06EB11 for ; Thu, 12 Jan 2017 04:18:19 +0000 (UTC) In-Reply-To: <20170112041817.1102-1-michel.thierry@intel.com> 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 RnJvbTogQXJ1biBTaWx1dmVyeSA8YXJ1bi5zaWx1dmVyeUBsaW51eC5pbnRlbC5jb20+CgpUaGlz IGNoYW5nZSBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHBlci1lbmdpbmUgcmVzZXQgYXMgYW4gaW5p dGlhbCwgbGVzcwppbnRydXNpdmUgaGFuZyByZWNvdmVyeSBvcHRpb24gdG8gYmUgYXR0ZW1wdGVk IGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gdGhlCmxlZ2FjeSBmdWxsIEdQVSByZXNldCByZWNvdmVy eSBtb2RlIGlmIG5lY2Vzc2FyeS4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZApmcm9tIEdlbjggb253 YXJkcy4KCkhhbmdjaGVja2VyIGRldGVybWluZXMgd2hpY2ggZW5naW5lcyBhcmUgaHVuZyBhbmQg aW52b2tlcyBlcnJvciBoYW5kbGVyIHRvCnJlY292ZXIgZnJvbSBpdC4gRXJyb3IgaGFuZGxlciBz Y2hlZHVsZXMgcmVjb3ZlcnkgZm9yIGVhY2ggb2YgdGhvc2UgZW5naW5lcwp0aGF0IGFyZSBodW5n LiBUaGUgcmVjb3ZlcnkgcHJvY2VkdXJlIGlzIGFzIGZvbGxvd3MsCiAtIGlkZW50aWZpZXMgdGhl IHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGhhbmcgYW5kIGl0IGlzIGRyb3BwZWQKIC0gZm9yY2Ug ZW5naW5lIHRvIGlkbGU6IHRoaXMgaXMgZG9uZSBieSBpc3N1aW5nIGEgcmVzZXQgcmVxdWVzdAog LSByZXNldCBhbmQgcmUtaW5pdCBlbmdpbmUKIC0gcmVzdGFydCBzdWJtaXNzaW9ucyB0byB0aGUg ZW5naW5lCgpJZiBlbmdpbmUgcmVzZXQgZmFpbHMgdGhlbiB3ZSBmYWxsIGJhY2sgdG8gaGVhdnkg d2VpZ2h0IGZ1bGwgZ3B1IHJlc2V0CndoaWNoIHJlc2V0cyBhbGwgZW5naW5lcyBhbmQgcmVpbml0 aWF6ZXMgY29tcGxldGUgc3RhdGUgb2YgSFcgYW5kIFNXLgoKdjI6IFJlYmFzZS4KdjM6IHMvKmVu Z2luZV9yZXNldCovKnJlc2V0X2VuZ2luZSovOyBmcmVlemUgZW5naW5lIGFuZCBpcnFzIGJlZm9y ZQpjYWxsaW5nIGk5MTVfZ2VtX3Jlc2V0X2VuZ2luZSAoQ2hyaXMpLgoKQ2M6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpDYzogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9w cGFsYUBsaW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFRvbWFzIEVsZiA8dG9tYXMuZWxm QGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQXJ1biBTaWx1dmVyeSA8YXJ1bi5zaWx1dmVyeUBs aW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhp ZXJyeUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAg fCA2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oICAgICB8ICAzICsrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jICAgICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYyB8 IDQxICsrKysrKysrKysrKysrKysrKystLS0KIDQgZmlsZXMgY2hhbmdlZCwgMTA4IGluc2VydGlv bnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNjZiNjIw YTdmNmJhLi42MGE3YTQ4NzQ4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTgzMiwx MSArMTgzMiw3NiBAQCB2b2lkIGk5MTVfcmVzZXRfY2hpcChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCiAgKgogICogUmVzZXQgYSBzcGVjaWZpYyBHUFUgZW5naW5lLiBVc2VmdWwg aWYgYSBoYW5nIGlzIGRldGVjdGVkLgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3NmdWwgcmVz ZXQgb3Igb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCB0 aGUgc3RydWN0X211dGV4LgorICoKKyAqIFByb2NlZHVyZSBpczoKKyAqICAtIGlkZW50aWZpZXMg dGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGhhbmcgYW5kIGl0IGlzIGRyb3BwZWQKKyAqICAt IGZvcmNlIGVuZ2luZSB0byBpZGxlOiB0aGlzIGlzIGRvbmUgYnkgaXNzdWluZyBhIHJlc2V0IHJl cXVlc3QKKyAqICAtIHJlc2V0IGVuZ2luZQorICogIC0gcmVzdGFydCBzdWJtaXNzaW9ucyB0byB0 aGUgZW5naW5lCiAgKi8KIGludCBpOTE1X3Jlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCiB7Ci0JLyogRklYTUU6IHJlcGxhY2UgbWUgd2l0aCBlbmdpbmUgcmVzZXQg c2VxdWVuY2UgKi8KLQlyZXR1cm4gLUVOT0RFVjsKKwlpbnQgcmV0OworCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKKwlzdHJ1Y3QgaTkxNV9ncHVfZXJy b3IgKmVycm9yID0gJmRldl9wcml2LT5ncHVfZXJyb3I7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2Jp dChJOTE1X1JFU0VUX0lOX1BST0dSRVNTLCAmZXJyb3ItPmZsYWdzKSkKKwkJcmV0dXJuIDA7CisK KwlEUk1fREVCVUdfRFJJVkVSKCJyZXNldHRpbmcgJXNcbiIsIGVuZ2luZS0+bmFtZSk7CisKKwkv KgorCSAqIFdlIG5lZWQgdG8gZmlyc3QgaWRsZSB0aGUgZW5naW5lIGJ5IGlzc3VpbmcgYSByZXNl dCByZXF1ZXN0LAorCSAqIHRoZW4gcGVyZm9ybSBzb2Z0IHJlc2V0IGFuZCByZS1pbml0aWFsaXpl IGh3IHN0YXRlLCBmb3IgYWxsIG9mCisJICogdGhpcyBHVCBwb3dlciBuZWVkIHRvIGJlIGF3YWtl IHNvIGVuc3VyZSBpdCBkb2VzIHRocm91Z2hvdXQgdGhlCisJICogcHJvY2VzcworCSAqLworCWlu dGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKworCS8q CisJICogdGhlIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlIGhhbmcgaXMgc3R1Y2sgb24gZWxzcCwg aWRlbnRpZnkgdGhlCisJICogYWN0aXZlIHJlcXVlc3QgYW5kIGRyb3AgaXQsIGFkanVzdCBoZWFk IHRvIHNraXAgdGhlIG9mZmVuZGluZworCSAqIHJlcXVlc3QgdG8gcmVzdW1lIGV4ZWN1dGluZyBy ZW1haW5pbmcgcmVxdWVzdHMgaW4gdGhlIHF1ZXVlLgorCSAqLworCWRpc2FibGVfZW5naW5lc19p cnEoZGV2X3ByaXYpOworCWk5MTVfZ2VtX3Jlc2V0X2VuZ2luZShlbmdpbmUpOworCWVuYWJsZV9l bmdpbmVzX2lycShkZXZfcHJpdik7CisKKwkvKiBmb3JjaW5nIGVuZ2luZSB0byBpZGxlICovCisJ cmV0ID0gaW50ZWxfcmVzZXRfZW5naW5lX2JlZ2luKGVuZ2luZSk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCB0byBkaXNhYmxlICVzXG4iLCBlbmdpbmUtPm5hbWUpOworCQlnb3Rv IGVycm9yOworCX0KKworCS8qIGZpbmFsbHksIHJlc2V0IGVuZ2luZSAqLworCXJldCA9IGludGVs X2dwdV9yZXNldChkZXZfcHJpdiwgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKSk7CisJaWYgKHJl dCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCAlcywgcmV0PSVkXG4iLCBlbmdpbmUt Pm5hbWUsIHJldCk7CisJCWludGVsX3Jlc2V0X2VuZ2luZV9jYW5jZWwoZW5naW5lKTsKKwkJZ290 byBlcnJvcjsKKwl9CisKKwlyZXQgPSBpbnRlbF9yZXNldF9lbmdpbmVfY2FuY2VsKGVuZ2luZSk7 CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IGVuZ2luZS0+aW5pdF9odyhlbmdp bmUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtl X3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCS8q IHVzZSBmdWxsIGdwdSByZXNldCB0byByZWNvdmVyIG9uIGVycm9yICovCisJc2V0X2JpdChJOTE1 X1JFU0VUX0lOX1BST0dSRVNTLCAmZGV2X3ByaXYtPmdwdV9lcnJvci5mbGFncyk7CisJaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCXJldHVybiBy ZXQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggODczZmJkNzgxMjRmLi4w YzkzODY5MDUwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjkzOCw2ICsyOTM4LDgg QEAgZXh0ZXJuIGludCBpbnRlbF9ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1MzIgZW5naW5lX21hc2spOwogZXh0ZXJuIGJvb2wgaW50ZWxfaGFzX2dwdV9yZXNl dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIHZvaWQgaTkxNV9y ZXNldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogZXh0ZXJuIGJvb2wgaW50 ZWxfaGFzX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwor ZXh0ZXJuIGludCBpbnRlbF9yZXNldF9lbmdpbmVfYmVnaW4oc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKTsKK2V4dGVybiBpbnQgaW50ZWxfcmVzZXRfZW5naW5lX2NhbmNlbChzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogZXh0ZXJuIGludCBpbnRlbF9ndWNfcmVzZXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiB2b2lkIGludGVsX2VuZ2lu ZV9pbml0X2hhbmdjaGVjayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogZXh0ZXJu IHZvaWQgaW50ZWxfaGFuZ2NoZWNrX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKQEAgLTMzMzgsNiArMzM0MCw3IEBAIHN0YXRpYyBpbmxpbmUgdTMyIGk5MTVfcmVzZXRf Y291bnQoc3RydWN0IGk5MTVfZ3B1X2Vycm9yICplcnJvcikKIHZvaWQgaTkxNV9nZW1fcmVzZXRf cHJlcGFyZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dl bV9yZXNldF9maW5pc2goc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQg aTkxNV9nZW1fc2V0X3dlZGdlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwor dm9pZCBpOTE1X2dlbV9yZXNldF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKIHZvaWQgaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwgYm9vbCBmb3JjZSk7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2luaXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGludCBfX211c3RfY2hlY2sgaTkxNV9n ZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMKaW5kZXggM2JmNTE3ZTI0MzBhLi5jMjFlOTdlN2VhMWEgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwpAQCAtMjYzNSw3ICsyNjM1LDcgQEAgdm9pZCBpOTE1X2dlbV9yZXNldF9w cmVwYXJlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpOTE1X2dlbV9yZXZv a2VfZmVuY2VzKGRldl9wcml2KTsKIH0KIAotc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVzZXRfZW5n aW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3ZvaWQgaTkxNV9nZW1fcmVzZXRf ZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CiAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmh1bmdf Y3R4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwppbmRleCBjZjczNTVkYjU0ODYuLmEy ODMyOWJmMGQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3Jl LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKQEAgLTE3NTgsNyAr MTc1OCw3IEBAIGludCBpbnRlbF93YWl0X2Zvcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBnZW44X3JlcXVl c3RfZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3N0YXRpYyBp bnQgZ2VuOF9yZXNldF9lbmdpbmVfYmVnaW4oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsK IAlpbnQgcmV0OwpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAgc3RhdGljIGludCBnZW44X3JlcXVlc3Rf ZW5naW5lX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlyZXR1cm4gcmV0 OwogfQogCi1zdGF0aWMgdm9pZCBnZW44X3VucmVxdWVzdF9lbmdpbmVfcmVzZXQoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQorc3RhdGljIHZvaWQgZ2VuOF9yZXNldF9lbmdpbmVfY2Fu Y2VsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUtPmk5MTU7CiAKQEAgLTE3OTIsMTQgKzE3OTIsMTQg QEAgc3RhdGljIGludCBnZW44X3Jlc2V0X2VuZ2luZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAogCXVuc2lnbmVkIGludCB0bXA7CiAKIAlmb3JfZWFjaF9lbmdpbmVfbWFza2Vk KGVuZ2luZSwgZGV2X3ByaXYsIGVuZ2luZV9tYXNrLCB0bXApCi0JCWlmIChnZW44X3JlcXVlc3Rf ZW5naW5lX3Jlc2V0KGVuZ2luZSkpCisJCWlmIChnZW44X3Jlc2V0X2VuZ2luZV9iZWdpbihlbmdp bmUpKQogCQkJZ290byBub3RfcmVhZHk7CiAKIAlyZXR1cm4gZ2VuNl9yZXNldF9lbmdpbmVzKGRl dl9wcml2LCBlbmdpbmVfbWFzayk7CiAKIG5vdF9yZWFkeToKIAlmb3JfZWFjaF9lbmdpbmVfbWFz a2VkKGVuZ2luZSwgZGV2X3ByaXYsIGVuZ2luZV9tYXNrLCB0bXApCi0JCWdlbjhfdW5yZXF1ZXN0 X2VuZ2luZV9yZXNldChlbmdpbmUpOworCQlnZW44X3Jlc2V0X2VuZ2luZV9jYW5jZWwoZW5naW5l KTsKIAogCXJldHVybiAtRUlPOwogfQpAQCAtMTg4MSw2ICsxODgxLDM5IEBAIGludCBpbnRlbF9n dWNfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiByZXQ7 CiB9CiAKKy8qCisgKiBPbiBnZW44KyBhIHJlc2V0IHJlcXVlc3QgaGFzIHRvIGJlIGlzc3VlZCB2 aWEgdGhlIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIKKyAqIGJlZm9yZSBhIEdQVSBlbmdpbmUgY2Fu IGJlIHJlc2V0IGluIG9yZGVyIHRvIHN0b3AgdGhlIGNvbW1hbmQgc3RyZWFtZXIKKyAqIGFuZCBp ZGxlIHRoZSBlbmdpbmUuIFRoaXMgcmVwbGFjZXMgdGhlIGxlZ2FjeSB3YXkgb2Ygc3RvcHBpbmcg YW4gZW5naW5lCisgKiBieSB3cml0aW5nIHRvIHRoZSBzdG9wIHJpbmcgYml0IGluIHRoZSBNSV9N T0RFIHJlZ2lzdGVyLgorICovCitpbnQgaW50ZWxfcmVzZXRfZW5naW5lX2JlZ2luKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlpZiAoIWludGVsX2hhc19yZXNldF9lbmdpbmUo ZW5naW5lLT5pOTE1KSkgeworCQlEUk1fRVJST1IoIkVuZ2luZSBSZXNldCBub3Qgc3VwcG9ydGVk IG9uIEdlbiVkXG4iLAorCQkJICBJTlRFTF9JTkZPKGVuZ2luZS0+aTkxNSktPmdlbik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBnZW44X3Jlc2V0X2VuZ2luZV9iZWdpbihlbmdp bmUpOworfQorCisvKgorICogSXQgaXMgcG9zc2libGUgdG8gYmFjayBvZmYgZnJvbSBhIHByZXZp b3VzbHkgaXNzdWVkIHJlc2V0IHJlcXVlc3QgYnkgc2ltcGx5CisgKiBjbGVhcmluZyB0aGUgcmVz ZXQgcmVxdWVzdCBiaXQgaW4gdGhlIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIuCisgKi8KK2ludCBp bnRlbF9yZXNldF9lbmdpbmVfY2FuY2VsKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK K3sKKwlpZiAoIWludGVsX2hhc19yZXNldF9lbmdpbmUoZW5naW5lLT5pOTE1KSkgeworCQlEUk1f RVJST1IoIlJlcXVlc3QgdG8gY2xlYXIgcmVzZXQgbm90IHN1cHBvcnRlZCBvbiBHZW4lZFxuIiwK KwkJCSAgSU5URUxfSU5GTyhlbmdpbmUtPmk5MTUpLT5nZW4pOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlnZW44X3Jlc2V0X2VuZ2luZV9jYW5jZWwoZW5naW5lKTsKKwlyZXR1cm4gMDsKK30K KwogYm9vbCBpbnRlbF91bmNvcmVfdW5jbGFpbWVkX21taW8oc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogewogCXJldHVybiBjaGVja19mb3JfdW5jbGFpbWVkX21taW8oZGV2X3By aXYpOwotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK