From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Wajdeczko Subject: [PATCH v3 1/5] drm/i915/guc: Split GuC firmware xfer function into clear steps Date: Fri, 3 Nov 2017 14:21:34 +0000 Message-ID: <20171103142138.57876-1-michal.wajdeczko@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7EB3A6EA97 for ; Fri, 3 Nov 2017 14:21:46 +0000 (UTC) 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 VHJhbnNmZXIgb2YgR3VDIGZpcm13YXJlIHJlcXVpcmVzIGZldyBzdGVwcyB0aGF0IGN1cnJlbnRs eQphcmUgaW1wbGVtZW50ZWQgaW4gdHdvIGxhcmdlIGZ1bmN0aW9ucy4gU3BsaXQgdGhpcyBjb2Rl IGludG8Kc21hbGxlciBmdW5jdGlvbnMgdG8gbWFrZSB0aGVzZSBzdGVwcyBzbWFsbCBhbmQgY2xl YXIuCkFsc28gYmUgcHJlcGFyZWQgZm9yIHBvdGVudGlhbCBETUEgeGZlciBzdGVwIGZhaWx1cmUu Cgp2MjogcmVuYW1lIGZ1bmN0aW9uIHN0ZXBzIChTYWdhcikKClNpZ25lZC1vZmYtYnk6IE1pY2hh bCBXYWpkZWN6a28gPG1pY2hhbC53YWpkZWN6a29AaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5s YWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBTYWdhciBBcnVuIEthbWJsZSA8c2FnYXIuYS5r YW1ibGVAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogU2FnYXIgQXJ1biBLYW1ibGUgPHNhZ2FyLmEu a2FtYmxlQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZncu YyB8IDE3MiArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCAxMDMgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfZncuYwppbmRleCBlZjY3YTM2Li5jNGY0NTI2IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZncuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfZncuYwpAQCAtOTcsMjMgKzk3LDU1IEBAIGludCBpbnRlbF9ndWNfZndfc2VsZWN0 KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFJlYWQgdGhl IEd1QyBzdGF0dXMgcmVnaXN0ZXIgKEdVQ19TVEFUVVMpIGFuZCBzdG9yZSBpdCBpbiB0aGUKLSAq IHNwZWNpZmllZCBsb2NhdGlvbjsgdGhlbiByZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hl dGhlcgotICogdGhlIHZhbHVlIG1hdGNoZXMgZWl0aGVyIG9mIHR3byB2YWx1ZXMgcmVwcmVzZW50 aW5nIGNvbXBsZXRpb24KLSAqIG9mIHRoZSBHdUMgYm9vdCBwcm9jZXNzLgotICoKLSAqIFRoaXMg aXMgdXNlZCBmb3IgcG9sbGluZyB0aGUgR3VDIHN0YXR1cyBpbiBhIHdhaXRfZm9yKCkKLSAqIGxv b3AgYmVsb3cuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBndWNfdWNvZGVfcmVzcG9uc2Uoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAgICAgIHUzMiAqc3RhdHVzKQor c3RhdGljIHZvaWQgZ3VjX3ByZXBhcmVfeGZlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7Ci0J dTMyIHZhbCA9IEk5MTVfUkVBRChHVUNfU1RBVFVTKTsKLQl1MzIgdWtfdmFsID0gdmFsICYgR1Nf VUtFUk5FTF9NQVNLOwotCSpzdGF0dXMgPSB2YWw7Ci0JcmV0dXJuICh1a192YWwgPT0gR1NfVUtF Uk5FTF9SRUFEWSB8fAotCQkoKHZhbCAmIEdTX01JQV9DT1JFX1NUQVRFKSAmJiB1a192YWwgPT0g R1NfVUtFUk5FTF9MQVBJQ19ET05FKSk7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKworCS8qIEVuYWJsZSBNSUEgY2FjaGluZy4gR3VDIGNs b2NrIGdhdGluZyBpcyBkaXNhYmxlZC4gKi8KKwlJOTE1X1dSSVRFKEdVQ19TSElNX0NPTlRST0ws IEdVQ19TSElNX0NPTlRST0xfVkFMVUUpOworCisJLyogV2FEaXNhYmxlTWludXRlSWFDbG9ja0dh dGluZzpieHQgKi8KKwlpZiAoSVNfQlhUX1JFVklEKGRldl9wcml2LCAwLCBCWFRfUkVWSURfQTEp KSB7CisJCUk5MTVfV1JJVEUoR1VDX1NISU1fQ09OVFJPTCwgKEk5MTVfUkVBRChHVUNfU0hJTV9D T05UUk9MKSAmCisJCQkJCSAgICAgIH5HVUNfRU5BQkxFX01JQV9DTE9DS19HQVRJTkcpKTsKKwl9 CisKKwkvKiBXYUM2RGlzYWxsb3dCeUdmeFBhdXNlOmJ4dCAqLworCWlmIChJU19CWFRfUkVWSUQo ZGV2X3ByaXYsIDAsIEJYVF9SRVZJRF9CMCkpCisJCUk5MTVfV1JJVEUoR0VONl9HRlhQQVVTRSwg MHgzMEZGRik7CisKKwlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCisJCUk5MTVfV1JJVEUoR0VO OUxQX0dUX1BNX0NPTkZJRywgR1RfRE9PUkJFTExfRU5BQkxFKTsKKwllbHNlCisJCUk5MTVfV1JJ VEUoR0VOOV9HVF9QTV9DT05GSUcsIEdUX0RPT1JCRUxMX0VOQUJMRSk7CisKKwlpZiAoSVNfR0VO OShkZXZfcHJpdikpIHsKKwkJLyogRE9QIENsb2NrIEdhdGluZyBFbmFibGUgZm9yIEd1QyBjbG9j a3MgKi8KKwkJSTkxNV9XUklURShHRU43X01JU0NDUENUTCwgKEdFTjhfRE9QX0NMT0NLX0dBVEVf R1VDX0VOQUJMRSB8CisJCQkJCSAgICBJOTE1X1JFQUQoR0VON19NSVNDQ1BDVEwpKSk7CisKKwkJ LyogYWxsb3dzIGZvciA1dXMgKGluIDEwbnMgdW5pdHMpIGJlZm9yZSBHVCBjYW4gZ28gdG8gUkM2 ICovCisJCUk5MTVfV1JJVEUoR1VDX0FSQVRfQzZESVMsIDB4MUZGKTsKKwl9Cit9CisKKy8qIENv cHkgUlNBIHNpZ25hdHVyZSBmcm9tIHRoZSBmdyBpbWFnZSB0byBIVyBmb3IgdmVyaWZpY2F0aW9u ICovCitzdGF0aWMgaW50IGd1Y194ZmVyX3JzYShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHN0cnVj dCBpOTE1X3ZtYSAqdm1hKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGd1Y190b19pOTE1KGd1Yyk7CisJc3RydWN0IGludGVsX3VjX2Z3ICpndWNfZncgPSAmZ3VjLT5m dzsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnID0gdm1hLT5wYWdlczsKKwl1MzIgcnNhW1VPU19SU0Ff U0NSQVRDSF9NQVhfQ09VTlRdOworCWludCBpOworCisJaWYgKHNnX3Bjb3B5X3RvX2J1ZmZlcihz Zy0+c2dsLCBzZy0+bmVudHMsIHJzYSwgc2l6ZW9mKHJzYSksCisJCQkgICAgICAgZ3VjX2Z3LT5y c2Ffb2Zmc2V0KSAhPSBzaXplb2YocnNhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkg PSAwOyBpIDwgVU9TX1JTQV9TQ1JBVENIX01BWF9DT1VOVDsgaSsrKQorCQlJOTE1X1dSSVRFKFVP U19SU0FfU0NSQVRDSChpKSwgcnNhW2ldKTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTIy LDI5ICsxNTQsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGd1Y191Y29kZV9yZXNwb25zZShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAgKiBBcmNoaXRlY3R1cmFsbHksIHRoZSBE TUEgZW5naW5lIGlzIGJpZGlyZWN0aW9uYWwsIGFuZCBjYW4gcG90ZW50aWFsbHkgZXZlbgogICog dHJhbnNmZXIgYmV0d2VlbiBHVFQgbG9jYXRpb25zLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbGVm dCBvdXQgb2YgdGhlIEFQSQogICogZm9yIG5vdyBhcyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdC4K LSAqCi0gKiBOb3RlIHRoYXQgR3VDIG5lZWRzIHRoZSBDU1MgaGVhZGVyIHBsdXMgdUtlcm5lbCBj b2RlIHRvIGJlIGNvcGllZCBieSB0aGUKLSAqIERNQSBlbmdpbmUgaW4gb25lIG9wZXJhdGlvbiwg d2hlcmVhcyB0aGUgUlNBIHNpZ25hdHVyZSBpcyBsb2FkZWQgdmlhIE1NSU8uCiAgKi8KLXN0YXRp YyBpbnQgZ3VjX3Vjb2RlX3hmZXJfZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKLQkJCSAgICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQorc3RhdGljIGludCBndWNfeGZlcl91 Y29kZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogewotCXN0 cnVjdCBpbnRlbF91Y19mdyAqZ3VjX2Z3ID0gJmRldl9wcml2LT5ndWMuZnc7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwlzdHJ1Y3QgaW50 ZWxfdWNfZncgKmd1Y19mdyA9ICZndWMtPmZ3OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCXN0 cnVjdCBzZ190YWJsZSAqc2cgPSB2bWEtPnBhZ2VzOwotCXUzMiBzdGF0dXMsIHJzYVtVT1NfUlNB X1NDUkFUQ0hfTUFYX0NPVU5UXTsKLQlpbnQgaSwgcmV0ID0gMDsKLQotCS8qIHdoZXJlIFJTQSBz aWduYXR1cmUgc3RhcnRzICovCi0Jb2Zmc2V0ID0gZ3VjX2Z3LT5yc2Ffb2Zmc2V0OwogCi0JLyog Q29weSBSU0Egc2lnbmF0dXJlIGZyb20gdGhlIGZ3IGltYWdlIHRvIEhXIGZvciB2ZXJpZmljYXRp b24gKi8KLQlzZ19wY29weV90b19idWZmZXIoc2ctPnNnbCwgc2ctPm5lbnRzLCByc2EsIHNpemVv Zihyc2EpLCBvZmZzZXQpOwotCWZvciAoaSA9IDA7IGkgPCBVT1NfUlNBX1NDUkFUQ0hfTUFYX0NP VU5UOyBpKyspCi0JCUk5MTVfV1JJVEUoVU9TX1JTQV9TQ1JBVENIKGkpLCByc2FbaV0pOwotCi0J LyogVGhlIGhlYWRlciBwbHVzIHVDb2RlIHdpbGwgYmUgY29waWVkIHRvIFdPUENNIHZpYSBETUEs IGV4Y2x1ZGluZyBhbnkKLQkgKiBvdGhlciBjb21wb25lbnRzICovCisJLyoKKwkgKiBUaGUgaGVh ZGVyIHBsdXMgdUNvZGUgd2lsbCBiZSBjb3BpZWQgdG8gV09QQ00gdmlhIERNQSwgZXhjbHVkaW5n IGFueQorCSAqIG90aGVyIGNvbXBvbmVudHMKKwkgKi8KIAlJOTE1X1dSSVRFKERNQV9DT1BZX1NJ WkUsIGd1Y19mdy0+aGVhZGVyX3NpemUgKyBndWNfZnctPnVjb2RlX3NpemUpOwogCiAJLyogU2V0 IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5ldyBibG9iICovCkBAIC0xNjIsMzMgKzE4Miw1 NyBAQCBzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVyX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJLyogRmluYWxseSBzdGFydCB0aGUgRE1BICovCiAJSTkxNV9XUklURShE TUFfQ1RSTCwgX01BU0tFRF9CSVRfRU5BQkxFKFVPU19NT1ZFIHwgU1RBUlRfRE1BKSk7CiAKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgdGhlIEd1QyBzdGF0dXMgcmVnaXN0ZXIgKEdVQ19T VEFUVVMpIGFuZCBzdG9yZSBpdCBpbiB0aGUKKyAqIHNwZWNpZmllZCBsb2NhdGlvbjsgdGhlbiBy ZXR1cm4gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgorICogdGhlIHZhbHVlIG1hdGNoZXMg ZWl0aGVyIG9mIHR3byB2YWx1ZXMgcmVwcmVzZW50aW5nIGNvbXBsZXRpb24KKyAqIG9mIHRoZSBH dUMgYm9vdCBwcm9jZXNzLgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgcG9sbGluZyB0aGUgR3VD IHN0YXR1cyBpbiBhIHdhaXRfZm9yKCkKKyAqIGxvb3AgYmVsb3cuCisgKi8KK3N0YXRpYyBpbmxp bmUgYm9vbCBndWNfcmVhZHkoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgKnN0YXR1cykKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwor CXUzMiB2YWwgPSBJOTE1X1JFQUQoR1VDX1NUQVRVUyk7CisJdTMyIHVrX3ZhbCA9IHZhbCAmIEdT X1VLRVJORUxfTUFTSzsKKworCSpzdGF0dXMgPSB2YWw7CisJcmV0dXJuICh1a192YWwgPT0gR1Nf VUtFUk5FTF9SRUFEWSkgfHwKKwkJKCh2YWwgJiBHU19NSUFfQ09SRV9TVEFURSkgJiYgKHVrX3Zh bCA9PSBHU19VS0VSTkVMX0xBUElDX0RPTkUpKTsKK30KKworc3RhdGljIGludCBndWNfd2FpdF91 Y29kZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJdTMyIHN0YXR1czsKKwlpbnQgcmV0Owor CiAJLyoKLQkgKiBXYWl0IGZvciB0aGUgRE1BIHRvIGNvbXBsZXRlICYgdGhlIEd1QyB0byBzdGFy dCB1cC4KKwkgKiBXYWl0IGZvciB0aGUgR3VDIHRvIHN0YXJ0IHVwLgogCSAqIE5COiBEb2NzIHJl Y29tbWVuZCBub3QgdXNpbmcgdGhlIGludGVycnVwdCBmb3IgY29tcGxldGlvbi4KIAkgKiBNZWFz dXJlbWVudHMgaW5kaWNhdGUgdGhpcyBzaG91bGQgdGFrZSBubyBtb3JlIHRoYW4gMjBtcywgc28g YQogCSAqIHRpbWVvdXQgaGVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgR3VDIGhhcyBmYWlsZWQgYW5k IGlzIHVudXNhYmxlLgogCSAqIChIaWdoZXIgbGV2ZWxzIG9mIHRoZSBkcml2ZXIgd2lsbCBhdHRl bXB0IHRvIGZhbGwgYmFjayB0bwogCSAqIGV4ZWNsaXN0IG1vZGUgaWYgdGhpcyBoYXBwZW5zLikK IAkgKi8KLQlyZXQgPSB3YWl0X2ZvcihndWNfdWNvZGVfcmVzcG9uc2UoZGV2X3ByaXYsICZzdGF0 dXMpLCAxMDApOwotCi0JRFJNX0RFQlVHX0RSSVZFUigiRE1BIHN0YXR1cyAweCV4LCBHdUMgc3Rh dHVzIDB4JXhcbiIsCi0JCQlJOTE1X1JFQUQoRE1BX0NUUkwpLCBzdGF0dXMpOworCXJldCA9IHdh aXRfZm9yKGd1Y19yZWFkeShndWMsICZzdGF0dXMpLCAxMDApOworCURSTV9ERUJVR19EUklWRVIo Ikd1QyBzdGF0dXMgJSN4XG4iLCBzdGF0dXMpOwogCiAJaWYgKChzdGF0dXMgJiBHU19CT09UUk9N X01BU0spID09IEdTX0JPT1RST01fUlNBX0ZBSUxFRCkgewogCQlEUk1fRVJST1IoIkd1QyBmaXJt d2FyZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9FWEVD OwogCX0KIAotCURSTV9ERUJVR19EUklWRVIoInJldHVybmluZyAlZFxuIiwgcmV0KTsKLQogCXJl dHVybiByZXQ7CiB9CiAKIC8qCiAgKiBMb2FkIHRoZSBHdUMgZmlybXdhcmUgYmxvYiBpbnRvIHRo ZSBNaW51dGVJQS4KICAqLwotc3RhdGljIGludCBndWNfdWNvZGVfeGZlcihzdHJ1Y3QgaW50ZWxf dWNfZncgKmd1Y19mdywgc3RydWN0IGk5MTVfdm1hICp2bWEpCitzdGF0aWMgaW50IGd1Y19md194 ZmVyKHN0cnVjdCBpbnRlbF91Y19mdyAqZ3VjX2Z3LCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIHsK IAlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSBjb250YWluZXJfb2YoZ3VjX2Z3LCBzdHJ1Y3QgaW50 ZWxfZ3VjLCBmdyk7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3Rv X2k5MTUoZ3VjKTsKQEAgLTE5OCwzNCArMjQyLDI0IEBAIHN0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hm ZXIoc3RydWN0IGludGVsX3VjX2Z3ICpndWNfZncsIHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCiAJ aW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOwogCi0J LyogRW5hYmxlIE1JQSBjYWNoaW5nLiBHdUMgY2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkLiAqLwot CUk5MTVfV1JJVEUoR1VDX1NISU1fQ09OVFJPTCwgR1VDX1NISU1fQ09OVFJPTF9WQUxVRSk7Ci0K LQkvKiBXYURpc2FibGVNaW51dGVJYUNsb2NrR2F0aW5nOmJ4dCAqLwotCWlmIChJU19CWFRfUkVW SUQoZGV2X3ByaXYsIDAsIEJYVF9SRVZJRF9BMSkpIHsKLQkJSTkxNV9XUklURShHVUNfU0hJTV9D T05UUk9MLCAoSTkxNV9SRUFEKEdVQ19TSElNX0NPTlRST0wpICYKLQkJCQkJICAgICAgfkdVQ19F TkFCTEVfTUlBX0NMT0NLX0dBVElORykpOwotCX0KLQotCS8qIFdhQzZEaXNhbGxvd0J5R2Z4UGF1 c2U6Ynh0ICovCi0JaWYgKElTX0JYVF9SRVZJRChkZXZfcHJpdiwgMCwgQlhUX1JFVklEX0IwKSkK LQkJSTkxNV9XUklURShHRU42X0dGWFBBVVNFLCAweDMwRkZGKTsKKwlndWNfcHJlcGFyZV94ZmVy KGd1Yyk7CiAKLQlpZiAoSVNfR0VOOV9MUChkZXZfcHJpdikpCi0JCUk5MTVfV1JJVEUoR0VOOUxQ X0dUX1BNX0NPTkZJRywgR1RfRE9PUkJFTExfRU5BQkxFKTsKLQllbHNlCi0JCUk5MTVfV1JJVEUo R0VOOV9HVF9QTV9DT05GSUcsIEdUX0RPT1JCRUxMX0VOQUJMRSk7Ci0KLQlpZiAoSVNfR0VOOShk ZXZfcHJpdikpIHsKLQkJLyogRE9QIENsb2NrIEdhdGluZyBFbmFibGUgZm9yIEd1QyBjbG9ja3Mg Ki8KLQkJSTkxNV9XUklURShHRU43X01JU0NDUENUTCwgKEdFTjhfRE9QX0NMT0NLX0dBVEVfR1VD X0VOQUJMRSB8Ci0JCQkJCSAgICBJOTE1X1JFQUQoR0VON19NSVNDQ1BDVEwpKSk7CisJLyoKKwkg KiBOb3RlIHRoYXQgR3VDIG5lZWRzIHRoZSBDU1MgaGVhZGVyIHBsdXMgdUtlcm5lbCBjb2RlIHRv IGJlIGNvcGllZAorCSAqIGJ5IHRoZSBETUEgZW5naW5lIGluIG9uZSBvcGVyYXRpb24sIHdoZXJl YXMgdGhlIFJTQSBzaWduYXR1cmUgaXMKKwkgKiBsb2FkZWQgdmlhIE1NSU8uCisJICovCisJcmV0 ID0gZ3VjX3hmZXJfcnNhKGd1Yywgdm1hKTsKKwlpZiAocmV0KQorCQlEUk1fV0FSTigiR3VDIGZp cm13YXJlIHNpZ25hdHVyZSB4ZmVyIGVycm9yICVkXG4iLCByZXQpOwogCi0JCS8qIGFsbG93cyBm b3IgNXVzIChpbiAxMG5zIHVuaXRzKSBiZWZvcmUgR1QgY2FuIGdvIHRvIFJDNiAqLwotCQlJOTE1 X1dSSVRFKEdVQ19BUkFUX0M2RElTLCAweDFGRik7Ci0JfQorCXJldCA9IGd1Y194ZmVyX3Vjb2Rl KGd1Yywgdm1hKTsKKwlpZiAocmV0KQorCQlEUk1fV0FSTigiR3VDIGZpcm13YXJlIGNvZGUgeGZl ciBlcnJvciAlZFxuIiwgcmV0KTsKIAotCXJldCA9IGd1Y191Y29kZV94ZmVyX2RtYShkZXZfcHJp diwgdm1hKTsKKwlyZXQgPSBndWNfd2FpdF91Y29kZShndWMpOworCWlmIChyZXQpCisJCURSTV9F UlJPUigiR3VDIGZpcm13YXJlIHhmZXIgZXJyb3IgJWRcbiIsIHJldCk7CiAKIAlpbnRlbF91bmNv cmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7CiAKQEAgLTI0Nyw1ICsy ODEsNSBAQCBzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVyKHN0cnVjdCBpbnRlbF91Y19mdyAqZ3Vj X2Z3LCBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKICAqLwogaW50IGludGVsX2d1Y19md191cGxvYWQo c3RydWN0IGludGVsX2d1YyAqZ3VjKQogewotCXJldHVybiBpbnRlbF91Y19md191cGxvYWQoJmd1 Yy0+ZncsIGd1Y191Y29kZV94ZmVyKTsKKwlyZXR1cm4gaW50ZWxfdWNfZndfdXBsb2FkKCZndWMt PmZ3LCBndWNfZndfeGZlcik7CiB9Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==