From: Lyude Paul Subject: [PATCH v7 09/10] drm/dp_mst: Add MST fallback retraining helpers Date: Wed, 11 Apr 2018 18:54:46 -0400 Message-ID: <20180411225501.26751-10-lyude@redhat.com> References: <20180411225501.26751-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180411225501.26751-1-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org Cc: David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Manasi Navare List-Id: dri-devel@lists.freedesktop.org VW5saWtlIFNTVCwgTVNUIGNhbiBoYXZlIGZhciBtb3JlIHRoZW4gYSBzaW5nbGUgZGlzcGxheSBo b29rZWQgdXAgb24gYQpzaW5nbGUgcG9ydC4gV2hhdCB0aGlzIGFsc28gbWVhbnMgaG93ZXZlciwg aXMgdGhhdCBpZiB0aGUgRGlzcGxheVBvcnQKbGluayB0byB0aGUgdG9wLWxldmVsIE1TVCBicmFu Y2ggZGV2aWNlIGJlY29tZXMgdW5zdGFibGUgdGhlbiBldmVyeQpzaW5nbGUgYnJhbmNoIGRldmlj ZSBhbHNvIGhhcyBhbiB1bnN0YWJsZSBsaW5rLiBBZGRpdGlvbmFsbHksIE1TVCBoYXMgYQpmZXcg bW9yZSBzdGVwcyB0aGF0IG11c3QgYmUgdGFrZW4gaW4gb3JkZXIgdG8gcHJvcGVybHkgcmV0cmFp biB0aGUKZW50aXJlIHRvcG9sb2d5IHVuZGVyIGEgbG93ZXIgbGluayByYXRlLiBTaW5jZSB0aGUg VkNQSSBhbGxvY2F0aW9ucyBmb3IKZWFjaCBtc3RiIGlzIGRldGVybWluZWQgYmFzZWQgb2ZmIHRo ZSBsaW5rIHJhdGUgZm9yIHRoZSB0b3Agb2YgdGhlCnRvcG9sb2d5LCB3ZSBhbHNvIGhhdmUgdG8g cmVjYWxjdWxhdGUgYWxsIG9mIHRoZSBWQ1BJIGFsbG9jYXRpb25zIGZvcgp0aGUgZG93bnN0cmVh bSBwb3J0cyBhcyB3ZWxsIHRvIGVuc3VyZSB0aGF0IHdlIHN0aWxsIGhhdmUgZW5vdWdoIGxpbmsK YmFuZHdpZHRoIHRvIGRyaXZlIGVhY2ggbXN0Yi4KCkFkZGl0aW9uYWxseSwgc2luY2Ugd2UgaGF2 ZSBtdWx0aXBsZSBkb3duc3RyZWFtIGNvbm5lY3RvcnMgcGVyIHBvcnQsCnNldHRpbmcgdGhlIGxp bmsgc3RhdHVzIG9mIHRoZSBwYXJlbnQgbXN0YidzIHBvcnQgdG8gYmFkIGlzbid0IGVub3VnaDoK YWxsIG9mIHRoZSBkb3duc3RyZWFtIG1zdGIgcG9ydHMgaGF2ZSB0byBoYXZlIHRoZWlyIGxpbmsg c3RhdHVzIHNldCB0bwpiYWQuCgpUaGlzIGJhc2ljYWxseSBmb2xsb3dzIHRoZSBzYW1lIHBhcmFk aWdtIHRoYXQgb3VyIERQIGxpbmsgc3RhdHVzIGxvZ2ljCmluIERSTSBkb2VzLCBpbiB0aGF0IHdl IHNpbXBseSB0ZWxsIHVzZXJzcGFjZSB0aGF0IGFsbCBvZiB0aGUgbXN0YiBwb3J0cwpuZWVkIHJl dHJhaW5pbmcgYW5kIGFkZGl0aW9uYWxseSBhcHBseWluZyB0aGUgbmV3IGxvd2VyIGJhbmR3aWR0 aApjb25zdHJhaW50cyB0byBhbGwgb2YgdGhlIGF0b21pYyBjb21taXRzIG9uIHRoZSB0b3BvbG9n eSB0aGF0IGZvbGxvdy4KQWRkaXRpb25hbGx5OyB3ZSBhZGQgaGVscGVycyB0aGF0IGhhbmRsZSBh dXRvbWF0aWNhbGx5IGNoZWNraW5nIHdoZXRoZXIKb3Igbm90IGEgbmV3IGF0b21pYyBjb21taXQg d291bGQgcGVyZm9ybSB0aGUgbW9kZXNldHMgcmVxdWlyZWQgdG8KcmV0cmFpbiBhIGxpbmsgYW5k IGlmIHNvLCBhZGRpdGlvbmFsbHkgaGFuZGxlcyB1cGRhdGluZyB0aGUgbGluayBzdGF0dXMKb2Yg ZWFjaCBjb25uZWN0b3Igb24gdGhlIE1TVCB0b3BvbG9neS4KClY0OgogLSBjbGFyaWZ5IHNsaWdo dGx5IGNvbmZ1c2luZyBtZXNzYWdlIGluCiAgIGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX2xvd2Vy X2xpbmtfcmF0ZSgpCiAtIEZpeCBhcmd1bWVudCBuYW1pbmcKIC0gU3F1YXNoIHRoaXMgd2l0aCB0 aGUgb3RoZXIgcmV0cmFpbiBoZWxwZXIsIGJlY2F1c2Ugbm93IHRoZXkncmUKICAgaW50ZXJ0d2lu ZWQgd2l0aCBvbmUgYW5vdGhlcgogLSBUcmFjayB3aGljaCBjb25uZWN0b3JzIHdpdGggQ1JUQ3Mg bmVlZCBtb2Rlc2V0cyBpbiBvcmRlciB0byByZXRyYWluIGEKICAgdG9wb2xvZ3kgaW4gdGhlIHRv cG9sb2d5J3MgYXRvbWljIHN0YXRlLiBUaGlzIGxldHMgdXMgZ3JlYXRseSBzaW1wbGlmeQogICB0 aGUgaGVscGVycywgYWxvbmcgd2l0aCBhbGxldmlhdGluZyBkcml2ZXJzIG9mIHRoZSByZXNwb25z aWJpbGl0eSBvZgogICBmaWd1cmluZyBvdXQgd2hlbiB0byBjYWxsIHRoZSByZXRyYWluIGhlbHBl cnMgZHVyaW5nIGF0b21pYyBjaGVja3MuIEl0CiAgIGFsc28gZW5zdXJlcyB0aGF0IHdlIGNhbiBr ZWVwIHpvbWJpZSBjb25uZWN0b3JzIHRoYXQgYSByZXRyYWluIGlzCiAgIGRlcGVuZGVudCBvbiBh bGl2ZSB1bnRpbCB0aGUgdG9wb2xvZ3kgZWl0aGVyIGRpc2FwcGVhcnMsIG9yIHRoZXkgYXJlCiAg IGRpc2FibGVkLiBXZSBuZWVkZWQgdG8gZG8gbW9zdCBvZiB0aGlzIGFueXdheSwgc2luY2Ugb3Vy IG9yaWdpbmFsCiAgIGhlbHBlcnMgZGlkbid0IHRha2UgaW50byBhY2NvdW50IHRoYXQgd2UgbmVl ZCB0byBpbnZva2UgcmV0cmFpbmluZwogICB3aGVuIHRoZSBsaW5rIHN0YXR1cyBwcm9wIGNoYW5n ZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgYQogICBtb2Rlc2V0IGhhcyBiZWVuIGlu aXRpYXRlZCB5ZXQuCiAtIEhhbmRsZSBzaXR1YXRpb24gd2UgY29tcGxldGVseSBmb3Jnb3QgYWJv dXQ6IGFkZGluZyBuZXcgY29ubmVjdG9ycyB0bwogICBhbiBNU1QgdG9wb2xvZ3kgdGhhdCBuZWVk cyBmYWxsYmFjayByZXRyYWluaW5nIChzb2x1dGlvbjogbmV3CiAgIGNvbm5lY3RvcnMgb24gYSB0 b3BvbG9neSBpbmhlcml0IHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgcmVzdCBvZiB0aGUKICAgdG9w b2xvZ3kpCiAtIEFsc28gbWFrZSBzdXJlIHRvIGhhbmRsZSBjb25uZWN0b3JzIHRoYXQgYXJlIG9y cGhhbmVkIGR1ZSB0byB0aGVpcgogICBNU1QgdG9wb2xvZ3kgZGlzYXBwZWFyaW5nLiBTb2x1dGlv bjogcmVtb3ZlIGZyb20gdG9wb2xvZ3kgc3RhdGUsCiAgIHJlc2V0IGxpbmsgc3RhdHVzIHRvIGdv b2QKIC0gV3JpdGUgbW9yZSBkb2NzIG9uIHRoZSByZXRyYWluaW5nIHByb2NlZHVyZS4KVjc6CiAt IEZpeCBDSEVDS1BBVENIIGVycm9ycwoKU2lnbmVkLW9mZi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVA cmVkaGF0LmNvbT4KQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+ CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgfCA0NDAgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLQogaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaCAg ICAgICB8ICAyMCArKwogMiBmaWxlcyBjaGFuZ2VkLCA0NTUgaW5zZXJ0aW9ucygrKSwgNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9n eS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwppbmRleCA5ODFiZDBm N2QzYWIuLmNjNGI3MzdhNDdiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9t c3RfdG9wb2xvZ3kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5j CkBAIC0xMTk5LDYgKzExOTksNyBAQCBzdGF0aWMgdm9pZCBkcm1fZHBfYWRkX3BvcnQoc3RydWN0 IGRybV9kcF9tc3RfYnJhbmNoICptc3RiLAogCiAJaWYgKGNyZWF0ZWQgJiYgIXBvcnQtPmlucHV0 KSB7CiAJCWNoYXIgcHJvcHBhdGhbMjU1XTsKKwkJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUgKnN0YXRlOwogCiAJCWJ1aWxkX21zdF9wcm9wX3BhdGgobXN0YiwgcG9ydC0+cG9ydF9u dW0sIHByb3BwYXRoLCBzaXplb2YocHJvcHBhdGgpKTsKIAkJcG9ydC0+Y29ubmVjdG9yID0gKCpt c3RiLT5tZ3ItPmNicy0+YWRkX2Nvbm5lY3RvcikobXN0Yi0+bWdyLCBwb3J0LCBwcm9wcGF0aCk7 CkBAIC0xMjE3LDYgKzEyMTgsMTEgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2FkZF9wb3J0KHN0cnVj dCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YiwKIAkJCXBvcnQtPmNhY2hlZF9lZGlkID0gZHJtX2dl dF9lZGlkKHBvcnQtPmNvbm5lY3RvciwgJnBvcnQtPmF1eC5kZGMpOwogCQkJZHJtX21vZGVfY29u bmVjdG9yX3NldF90aWxlX3Byb3BlcnR5KHBvcnQtPmNvbm5lY3Rvcik7CiAJCX0KKwkJc3RhdGUg PSB0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUocG9ydC0+bWdyLT5iYXNlLnN0YXRlKTsKKwkJaWYg KCFsaXN0X2VtcHR5KCZzdGF0ZS0+YmFkX3BvcnRzKSkgeworCQkJcG9ydC0+Y29ubmVjdG9yLT5z dGF0ZS0+bGlua19zdGF0dXMgPQorCQkJCURSTV9MSU5LX1NUQVRVU19CQUQ7CisJCX0KIAkJKCpt c3RiLT5tZ3ItPmNicy0+cmVnaXN0ZXJfY29ubmVjdG9yKShwb3J0LT5jb25uZWN0b3IpOwogCX0K IApAQCAtMjA3Niw3ICsyMDgyLDcgQEAgc3RhdGljIGJvb2wgZHJtX2RwX2dldF92Y19wYXlsb2Fk X2J3KGludCBkcF9saW5rX2J3LAogewogCXN3aXRjaCAoZHBfbGlua19idykgewogCWRlZmF1bHQ6 Ci0JCURSTV9ERUJVR19LTVMoImludmFsaWQgbGluayBiYW5kd2lkdGggaW4gRFBDRDogJXggKGxp bmsgY291bnQ6ICVkKVxuIiwKKwkJRFJNX0RFQlVHX0tNUygiaW52YWxpZCBsaW5rIGJhbmR3aWR0 aDogJXggKGxpbmsgY291bnQ6ICVkKVxuIiwKIAkJCSAgICAgIGRwX2xpbmtfYncsIGRwX2xpbmtf Y291bnQpOwogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTIwOTYsMTAgKzIxMDIsNDA5IEBAIHN0YXRp YyBib29sIGRybV9kcF9nZXRfdmNfcGF5bG9hZF9idyhpbnQgZHBfbGlua19idywKIAlyZXR1cm4g dHJ1ZTsKIH0KIAorc3RhdGljIGludCBkcm1fZHBfc2V0X21zdGJfbGlua19zdGF0dXMoc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZHBf bXN0X2JyYW5jaCAqbXN0YiwKKwkJCQkgICAgICAgZW51bSBkcm1fbGlua19zdGF0dXMgc3RhdHVz KQoreworCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZSA9CisJCXRvX2Rw X21zdF90b3BvbG9neV9zdGF0ZShtZ3ItPmJhc2Uuc3RhdGUpOworCXN0cnVjdCBkcm1fZHBfbXN0 X2JyYW5jaCAqcm1zdGI7CisJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZHBfbXN0X3JldHJhaW5fZGVw ICpyZXRyYWluX2RlcDsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAm bXN0Yi0+cG9ydHMsIG5leHQpIHsKKwkJcm1zdGIgPSBkcm1fZHBfZ2V0X3ZhbGlkYXRlZF9tc3Ri X3JlZihtZ3IsIHBvcnQtPm1zdGIpOworCQlpZiAocm1zdGIpIHsKKwkJCXJldCA9IGRybV9kcF9z ZXRfbXN0Yl9saW5rX3N0YXR1cyhtZ3IsIHJtc3RiLCBzdGF0dXMpOworCQkJZHJtX2RwX3B1dF9t c3RfYnJhbmNoX2RldmljZShybXN0Yik7CisKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsK KwkJfQorCisJCWNvbm5lY3RvciA9IHBvcnQtPmNvbm5lY3RvcjsKKwkJaWYgKCFjb25uZWN0b3Ip CisJCQljb250aW51ZTsKKworCQlEUk1fREVCVUdfQVRPTUlDKCJbQ09OTkVDVE9SOiVkOiVzXSBs aW5rIHN0YXR1cyBnb29kIC0+IGJhZFxuIiwKKwkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25u ZWN0b3ItPm5hbWUpOworCQljb25uZWN0b3ItPnN0YXRlLT5saW5rX3N0YXR1cyA9IHN0YXR1czsK KworCQlpZiAoIWNvbm5lY3Rvci0+c3RhdGUtPmNydGMpCisJCQljb250aW51ZTsKKworCQlyZXRy YWluX2RlcCA9IGttYWxsb2Moc2l6ZW9mKCpyZXRyYWluX2RlcCksIEdGUF9LRVJORUwpOworCQlp ZiAoIXJldHJhaW5fZGVwKSB7CisJCQlEUk1fRVJST1IoIk5vdCBlbm91Z2ggbWVtb3J5IHRvIHVw ZGF0ZSBhdG9taWMgc3RhdGVcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlyZXRy YWluX2RlcC0+Y29ubmVjdG9yID0gY29ubmVjdG9yOworCQlkcm1fY29ubmVjdG9yX2dldChjb25u ZWN0b3IpOworCQlsaXN0X2FkZCgmcmV0cmFpbl9kZXAtPmVudHJ5LCAmc3RhdGUtPmJhZF9wb3J0 cyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9kcF9tc3RfZGVzdHJv eV9yZXRyYWluX2RlcChzdHJ1Y3QgZHJtX2RwX21zdF9yZXRyYWluX2RlcCAqZGVwKQoreworCWRy bV9jb25uZWN0b3JfcHV0KGRlcC0+Y29ubmVjdG9yKTsKKwlsaXN0X2RlbCgmZGVwLT5lbnRyeSk7 CisJa2ZyZWUoZGVwKTsKK30KKworLyoqCisgKiBET0M6IGhhbmRsaW5nIGxpbmsgcmV0cmFpbmlu ZyBvbiBNU1QgdG9wb2xvZ2llcworICoKKyAqIERpc3BsYXlQb3J0IE1TVCBodWJzIHdvcmsgYnkg YWxsb3dpbmcgbXVsdGlwbGUgY29ubmVjdGlvbnMgb24gYSBzaW5nbGUKKyAqIHBoeXNpY2FsIERp c3BsYXlQb3J0IGxpbmsuIEJlY2F1c2Ugb2YgdGhpcywgYW55IGNoYW5nZXMgaW4gdGhlIGxpbmsg c3RhdHVzCisgKiBhZmZlY3QgYWxsIGNvbm5lY3RvcnMgb24gdGhlIHNoYXJlZCBsaW5rLiBUaGlz IGhhcyBxdWl0ZSBhIG51bWJlciBvZgorICogaW1wb3J0YW50IGltcGxpY2F0aW9ucy4KKyAqCisg KiBXaGVuIGFuIE1TVCB0b3BvbG9neSByZXF1aXJlcyB0aGF0IGl0IGJlIHJldHJhaW5lZCBhdCBh IGxvd2VyIGxpbmsgcmF0ZSwKKyAqIHRoZSBuZXcgbGluayByYXRlIG11c3QgYmUgYXBwbGllZCB0 byBhbGwgYWN0aXZlIGNvbm5lY3RvcnMgYXQgdGhlIHNhbWUKKyAqIHRpbWUsIHNpbmNlIHRoZXkg c2hhcmUgdGhlIHNhbWUgbGluay4gVGhpcyBtZWFucyB0aGF0IGlmIGEgY29ubmVjdG9yIGhhcwor ICogaXQncyBsaW5rIHN0YXR1cyBzZXQgdG8gJkRSTV9NT0RFX0xJTktfU1RBVFVTX0JBRCBhbmQg aXQncyBvbiBhbiBNU1QKKyAqIHRvcG9sb2d5LCBjaGFuZ2luZyB0aGUgcHJvcGVydHkgdG8gJkRS TV9NT0RFX0xJTktfU1RBVFVTX0dPT0Qgd2lsbCByZXN1bHQKKyAqIGluIGFkZGluZyBldmVyeSBv dGhlciBjb25uZWN0b3IgdGhhdCByZXNpZGVzIG9uIHRoZSBzYW1lIHRvcG9sb2d5IGludG8gdGhl CisgKiBuZXcgYXRvbWljIHN0YXRlLiBBZGRpdGlvbmFsbHksIGFueSBNU1QgY29ubmVjdG9ycyB0 aGF0IHdlcmUgYWRkZWQgdG8gdGhlCisgKiBzdGF0ZSB3aXRoIENSVENzIGF0dGFjaGVkIHRvIHRo ZW0gd2lsbCBhdXRvbWF0aWNhbGx5IGhhdmUgYSBtb2Rlc2V0IGZvcmNlZAorICogb24gdGhlbSBp biB0aGUgYXRvbWljIHN0YXRlLCBhbmQgaGF2ZSB0aGVpciBsaW5rIHN0YXR1cyB1cGRhdGVkIHRv CisgKiAmRFJNX01PREVfTElOS19TVEFUVVNfR09PRC4gSWYgdXNlcnNwYWNlIGhhcyBub3Qgc2V0 IGEgbmV3IG1vZGUgb24gdGhlc2UKKyAqIGNvbm5lY3RvcnMsIHRoZSBrZXJuZWwgd2lsbCBhdHRl bXB0IHRvIHJldXNlIHRoZSBzYW1lIG1vZGVzIHRoYXQgYXJlCisgKiBjdXJyZW50bHkgYWN0aXZl IG9uIHNhaWQgQ1JUQ3MuIEFsbCBtb2RlcyBzZXQgb24gc2FpZCBjb25uZWN0b3JzIHdpdGhpbgor ICogdGhpcyBzdGF0ZSBhcmUgdGhlbiBjaGVja2VkIGFnYWluc3QgdGhlIG5ldyBsb3dlcmVkIGxp bmsgY29uZmlndXJhdGlvbiB0bworICogZW5zdXJlIHRoYXQgdGhlcmUgaXMgc3RpbGwgZW5vdWdo IGJhbmR3aWR0aCB0byBzdXBwb3J0IHRoZW0uIElmIHRoZXJlIGlzCisgKiBub3QgZW5vdWdoIGJh bmR3aWR0aCwgdGhlIGF0b21pYyBjaGVjayB3aWxsIGZhaWwuCisgKgorICogRGV0YWNoaW5nIENS VENzIGZyb20gTVNUIGNvbm5lY3RvcnMgdGhhdCBoYXZlIHRoZWlyIGxpbmsgc3RhdHVzIHNldCB0 bworICogJkRSTV9NT0RFX0xJTktfU1RBVFVTX0JBRCBoYXMgYSBkaWZmZXJlbnQgZWZmZWN0IGhv d2V2ZXIuIEJlY2F1c2UgZGlzYWJsaW5nCisgKiBhIENSVEMgb24gYW4gTVNUIGNvbm5lY3RvciBv bmx5IHJlcXVpcmVzIHRoYXQgdGhlIGRyaXZlciBmcmVlIHRoZSBiYW5kd2lkdGgKKyAqIGFsbG9j YXRlZCB0byBhIGNvbm5lY3RvciBhbmQgZG9lcyBub3QgcmVxdWlyZSB0aGUgZHJpdmVyIHRvIGFs bG9jYXRlIG1vcmUKKyAqIGJhbmR3aWR0aCwgc3RhdGVzIHdoaWNoIGRpc2FibGUgQ1JUQ3Mgb24g YW4gTVNUIHRvcG9sb2d5IGJ1dCBkbyBub3QgZW5hYmxlCisgKiBuZXcgQ1JUQ3Mgb3IgYXBwbHkg bmV3IG1vZGVzIHRvIENSVENzIG9uIHRoZSB0b3BvbG9neSB3aWxsIG5vdCBpbXBsaWNpdGx5Cisg KiBwdWxsIGluIHRoZSBzdGF0ZSBvZiBvdGhlciBDUlRDcyBhdHRhY2hlZCB0byBjb25uZWN0b3Jz IG9uIHRoZSB0b3BvbG9neS4KKyAqIFRoaXMgYWxsb3dzIHVzZXJzcGFjZSB0byBkaXNhYmxlIENS VENzIG9uIGEgdG9wb2xvZ3kgdGhhdCByZXF1aXJlcworICogcmV0cmFpbmluZyBpbiBhbnkgb3Jk ZXIgaXQgY2hvb3Nlcywgc28gbG9uZyBhcyBpdCBkb2Vzbid0IHRyeSB0byBhcHBseSBuZXcKKyAq IG1vZGVzIHRvIHRoZSB0b3BvbG9neS4KKyAqCisgKiBJZiBhbiBhdG9taWMgc3RhdGUgd291bGQg cHV0IGFuIE1TVCB0b3BvbG9neSBpbnRvIGEgc3RhdGUgd2hlcmUgaXQgaGFzIG5vCisgKiBjb25u ZWN0b3JzIHByZXNlbnQgdGhhdCBhcmUgYXR0YWNoZWQgdG8gQ1JUQ3MsIHRoZSBrZXJuZWwgd2ls bAorICogYXV0b21hdGljYWxseSBhZGQgZWFjaCBjb25uZWN0b3Igb24gdGhlIHRvcG9sb2d5IHRv IHRoZSBzdGF0ZSBhbmQgdXBkYXRlCisgKiB0aGVpciByZXNwZWN0aXZlIGxpbmsgc3RhdHVzZXMg dG8gJkRSTV9NT0RFX0xJTktfU1RBVFVTX0dPT0QuIFRoaXMgaXMKKyAqIGJlY2F1c2Ugd2hlbiB0 aGVyZSBhcmUgbm8gYWN0aXZlIFZDIGNoYW5uZWxzIGFsbG9jYXRlZCBvbiBhIGh1YiwgdGhlcmUg aXMKKyAqIG5vdGhpbmcgd2hpY2ggcHJldmVudHMgdGhlIGRyaXZlciBmcm9tIGltbWVkaWF0ZWx5 IGNoYW5naW5nIHRoZSBtYXhpbXVtCisgKiBsaW5rIHJhdGUvbGFuZSBjb3VudCwgYXMgdGhlIHVw ZGF0ZWQgbGluayBjb25maWd1cmF0aW9uIGNhbiBzaW1wbHkgYmUKKyAqIGFwcGxpZWQgdGhlIG5l eHQgdGltZSBhIENSVEMgaXMgYXR0YWNoZWQgdG8gYSBjb25uZWN0b3Igb24gdGhlIHRvcG9sb2d5 LgorICoKKyAqIFdoZW4gYW4gTVNUIHRvcG9sb2d5IHJlcXVpcmVzIGxpbmsgcmV0cmFpbmluZyBh dCBhIGxvd2VyIGxpbmsgcmF0ZSwgYW55IG5ldworICogY29ubmVjdG9ycyB0aGF0IGFwcGVhciBv biB0aGUgdG9wb2xvZ3kgd2lsbCBhdXRvbWF0aWNhbGx5IGluaGVyaXQgdGhlIGxpbmsKKyAqIHN0 YXR1cyB2YWx1ZSBvZiBvdGhlciBjb25uZWN0b3JzIG9uIHRoZSB0b3BvbG9neS4gVGhpcyBpcyB0 byBlbnN1cmUgdGhhdAorICogdGhlIHNoYXJlZCBsaW5rIHN0YXR1cyByZW1haW5zIGNvbnNpc3Rl bnQgYWNyb3NzIHRoZSB0b3BvbG9neSwgYW5kIHRvCisgKiBwcmV2ZW50IG5ldyBtb2Rlc2V0cyBm cm9tIG9jY3VycmluZyBvbiB0aGUgdG9wb2xvZ3kgd2l0aG91dCBmaXJzdCByZXF1aXJpbmcKKyAq IGEgZnVsbCByZXRyYWluLgorICovCisKKy8qKgorICogZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jf bG93ZXJfbGlua19yYXRlKCkgLSBPdmVycmlkZSB0aGUgRFAgbGluayByYXRlL2NvdW50CisgKiBm b3IgYWxsIGNvbm5lY3RvcnMgaW4gYSBnaXZlbiBNU1QgdG9wb2xvZ3kKKyAqIEBtZ3I6IG1hbmFn ZXIgdG8gc2V0IHN0YXRlIGZvcgorICogQGxpbmtfcmF0ZTogVGhlIG5ldyBEUCBsaW5rIGJhbmR3 aWR0aAorICogQGxhbmVfY291bnQ6IFRoZSBuZXcgRFAgbGFuZSBjb3VudAorICoKKyAqIFRoaXMg aXMgY2FsbGVkIGJ5IHRoZSBkcml2ZXIgd2hlbiBpdCBkZXRlY3RzIHRoYXQgdGhlIGN1cnJlbnQg RFAgbGluayBmb3IKKyAqIHRoZSBnaXZlbiB0b3BvbG9neSBtYW5hZ2VyIGlzIHVuc3RhYmxlLCBh bmQgbmVlZHMgdG8gYmUgcmV0cmFpbmVkIGF0IGEKKyAqIGxvd2VyIGxpbmsgcmF0ZS9sYW5lIGNv dW50LgorICoKKyAqIFRoaXMgdGFrZXMgY2FyZSBvZiB1cGRhdGluZyB0aGUgbGluayBzdGF0dXMg b24gYWxsIGRvd25zdHJlYW0gY29ubmVjdG9ycywKKyAqIHRoZSBtc3QgdG9wb2xvZ3kncyBhdG9t aWMgc3RhdGUsIGFuZCBWQyBwYXlsb2FkcyBmb3IgZWFjaCBwb3J0LgorICogVGhlIGRyaXZlciBz aG91bGQgc2VuZCBhIGhvdHBsdWcgZXZlbnQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRv CisgKiBub3RpZnkgdXNlcnNwYWNlIG9mIHRoZSBsaW5rIHN0YXR1cyBjaGFuZ2UuCisgKgorICog UkVUVVJOUzoKKyAqCisgKiBUcnVlIGZvciBzdWNjZXNzLCBvciBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9sb3dlcl9saW5r X3JhdGUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IsCisJCQkJCSAgICBpbnQg bGlua19yYXRlLCBpbnQgbGFuZV9jb3VudCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g bWdyLT5kZXY7CisJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlOworCXN0 cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0X3ByaW1hcnk7CisJc3RydWN0IGRybV9kcF9tc3Rf cmV0cmFpbl9kZXAgKnJldHJhaW5fZGVwLCAqcmV0cmFpbl90bXA7CisJc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgbmV3X3Bibl9kaXY7CisJaW50IHJldCA9IDA7CisKKwlk cm1fbW9kZXNldF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwp OworCisJc3RhdGUgPSB0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUobWdyLT5iYXNlLnN0YXRlKTsK KworCWlmICghZHJtX2RwX2dldF92Y19wYXlsb2FkX2J3KGRybV9kcF9saW5rX3JhdGVfdG9fYndf Y29kZShsaW5rX3JhdGUpLAorCQkJCSAgICAgIGxhbmVfY291bnQsICZuZXdfcGJuX2RpdikpIHsK KwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJbXN0X3ByaW1hcnkgPSBkcm1f ZHBfZ2V0X3ZhbGlkYXRlZF9tc3RiX3JlZihtZ3IsIG1nci0+bXN0X3ByaW1hcnkpOworCWlmICgh bXN0X3ByaW1hcnkpCisJCWdvdG8gb3V0OworCisJRFJNX0RFQlVHX0tNUygiTVNUIGxpbmsgaW1w b3NzaWJsZSB0byByZXRyYWluIGF0IGN1cnJlbnQgcGFyYW1zLCBsb3dlcmluZyBwYm5fZGl2IHRv ICVkXG4iLAorCQkgICAgICBuZXdfcGJuX2Rpdik7CisJbWdyLT5wYm5fZGl2ID0gbmV3X3Bibl9k aXY7CisKKwlyZXQgPSBkcm1fZHBfc2V0X21zdGJfbGlua19zdGF0dXMobWdyLCBtc3RfcHJpbWFy eSwKKwkJCQkJICBEUk1fTElOS19TVEFUVVNfQkFEKTsKKwlpZiAocmV0KSB7CisJCURSTV9ERUJV R19LTVMoIkZhaWxlZCB0byB1cGRhdGUgbGluayBzdGF0dXMsIHJvbGxpbmcgYmFja1xuIik7CisK KwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJldHJhaW5fZGVwLCByZXRyYWluX3RtcCwKKwkJ CQkJICZzdGF0ZS0+YmFkX3BvcnRzLCBlbnRyeSkgeworCQkJY29ubmVjdG9yID0gcmV0cmFpbl9k ZXAtPmNvbm5lY3RvcjsKKwkJCWNvbm5lY3Rvci0+c3RhdGUtPmxpbmtfc3RhdHVzID0gRFJNX0xJ TktfU1RBVFVTX0dPT0Q7CisKKwkJCWRybV9kcF9tc3RfZGVzdHJveV9yZXRyYWluX2RlcChyZXRy YWluX2RlcCk7CisJCX0KKwl9CisKKwlkcm1fZHBfcHV0X21zdF9icmFuY2hfZGV2aWNlKG1zdF9w cmltYXJ5KTsKK291dDoKKwlkcm1fbW9kZXNldF91bmxvY2soJmRldi0+bW9kZV9jb25maWcuY29u bmVjdGlvbl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RwX21z dF90b3BvbG9neV9tZ3JfbG93ZXJfbGlua19yYXRlKTsKKworc3RhdGljIHZvaWQKK2RybV9hdG9t aWNfZHBfbXN0X3NhdGlzZnlfcmV0cmFpbl9kZXAoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUgKm1zdF9zdGF0ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXN0cnVjdCBkcm1fZHBfbXN0X3JldHJhaW5fZGVwICpkZXA7CisKKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KGRlcCwgJm1zdF9zdGF0ZS0+YmFkX3BvcnRzLCBlbnRyeSkgeworCQlpZiAo ZGVwLT5jb25uZWN0b3IgIT0gY29ubmVjdG9yKQorCQkJY29udGludWU7CisKKwkJZHJtX2RwX21z dF9kZXN0cm95X3JldHJhaW5fZGVwKGRlcCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlu dAorZHJtX2F0b21pY19kcF9tc3RfcmV0cmFpbl9jb25uZWN0b3Ioc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAq bXN0X3N0YXRlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQorewor CXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlID0KKwkJZHJtX2F0b21pY19n ZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisKKwlpZiAoSVNfRVJS KGNvbm5fc3RhdGUpKQorCQlyZXR1cm4gUFRSX0VSUihjb25uX3N0YXRlKTsKKworCWlmIChjb25u X3N0YXRlLT5saW5rX3N0YXR1cyA9PSBEUk1fTElOS19TVEFUVVNfQkFEKSB7CisJCURSTV9ERUJV R19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIGxpbmsgc3RhdHVzIGJhZCAtPiBnb29kXG4iLAor CQkJCSBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSk7CisJCWNvbm5fc3RhdGUt Pmxpbmtfc3RhdHVzID0gRFJNX0xJTktfU1RBVFVTX0dPT0Q7CisJfQorCisJZHJtX2F0b21pY19k cF9tc3Rfc2F0aXNmeV9yZXRyYWluX2RlcChtc3Rfc3RhdGUsIGNvbm5lY3Rvcik7CisKKwljcnRj ID0gY29ubl9zdGF0ZS0+Y3J0YzsKKwlpZiAoIWNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOworCWlmIChJU19F UlIoY3J0Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJaWYgKCFk cm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjX3N0YXRlKSkKKwkJRFJNX0RFQlVHX0FU T01JQygiW0NSVEM6JWQ6JXNdIG5lZWRzIGZ1bGwgbW9kZXNldFxuIiwKKwkJCQkgY3J0Yy0+YmFz ZS5pZCwgY3J0Yy0+bmFtZSk7CisKKwljcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgPSB0cnVlOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkcm1fYXRvbWljX2RwX21zdF9yZXRyYWluX21z dGIoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHN0cnVjdCBkcm1f ZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUsCisJCQkgICAgICAgc3RydWN0IGRybV9k cF9tc3RfYnJhbmNoICptc3RiKQoreworCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqcm1zdGI7 CisJc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yOworCWludCByZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZtc3Ri LT5wb3J0cywgbmV4dCkgeworCQlybXN0YiA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX21zdGJfcmVm KG1zdGItPm1nciwgcG9ydC0+bXN0Yik7CisJCWlmIChybXN0YikgeworCQkJcmV0ID0gZHJtX2F0 b21pY19kcF9tc3RfcmV0cmFpbl9tc3RiKHN0YXRlLCBtc3Rfc3RhdGUsCisJCQkJCQkJICAgICBy bXN0Yik7CisJCQlkcm1fZHBfcHV0X21zdF9icmFuY2hfZGV2aWNlKHJtc3RiKTsKKwkJCWlmIChy ZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWNvbm5lY3RvciA9IHBvcnQtPmNvbm5lY3Rv cjsKKwkJaWYgKCFjb25uZWN0b3IpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkcm1fYXRvbWlj X2RwX21zdF9yZXRyYWluX2Nvbm5lY3RvcihzdGF0ZSwgbXN0X3N0YXRlLAorCQkJCQkJCSAgY29u bmVjdG9yKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKKy8qKgorICogZHJtX2RwX2F0b21pY19tc3RfY2hlY2tfcmV0cmFpbigpIC0gUHJlcGFyZSB0 aGUgdG9wb2xvZ3kncyBzdGF0ZSB0byBiZQorICogcmV0cmFpbmVkIGR1cmluZyB0aGlzIGF0b21p YyBjb21taXQsIGlmIHJlcXVpcmVkCisgKiBAbmV3X2Nvbm5fc3RhdGU6IHRoZSBuZXcgY29ubmVj dG9yIHN0YXRlIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSByZXRyYWluCisgKiBAbWdyOiBUaGUgRFAg TVNUIHRvcG9sb2d5IHRvIHJldHJhaW4KKyAqCisgKiBXaGVuIHRoZSBsaW5rIHN0YXR1cyBvZiBh biBNU1QgdG9wb2xvZ3kgZ29lcyBmcm9tCisgKiAmRFJNX01PREVfTElOS19TVEFUVVNfR09PRCB0 byAmRFJNX01PREVfTElOS19TVEFUVVNfQkFELCB0aGUgZW50aXJlCisgKiB0b3BvbG9neSBpcyBj b25zaWRlcmVkIHRvIGJlIGluIGEgc3RhdGUgd2hlcmUgYSByZXRyYWluIGF0IGEgbG93ZXIgbGlu aworICogcmF0ZSBpcyByZXF1aXJlZC4gQmVjYXVzZSBlYWNoIGNvbm5lY3RvciBvbiBhbiBNU1Qg dG9wb2xvZ3kgc2hhcmVzIHRoZSBzYW1lCisgKiBEUCBsaW5rLCBlYWNoIGNvbm5lY3RvciBtdXN0 IGhhdmUgaXQncyBsaW5rIHJhdGUgbG93ZXJlZCBhbmQgYmUgcmV0cmFpbmVkCisgKiBhdCB0aGUg c2FtZSB0aW1lLiBBZGRpdGlvbmFsbHksIGRyaXZlcnMgbXVzdCB0YWtlIGNhcmUgdG8gdXBkYXRl IHRoZSBsaW5rCisgKiBzdGF0dXMgb2YgYSBjb25uZWN0b3Igb24gYW4gTVNUIHRvcG9sb2d5IHRo ZW1zZWx2ZXMgaWYgdXNlcnNwYWNlIGF0dGVtcHRzCisgKiB0byBzZXQgYSBuZXcgbW9kZSB0byB0 aGUgY29ubmVjdG9yIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgaXQgcHJvcGVybHkKKyAq IHVwZGF0ZXMgdGhlIGNvbm5lY3RvcidzIGxpbmsgc3RhdHVzIHByb3BlcnR5IGZyb20KKyAqICZE Uk1fTU9ERV9MSU5LX1NUQVRVU19CQUQgdG8gJkRSTV9NT0RFX0xJTktfU1RBVFVTX0dPT0QuIElu IHRoaXMgY2FzZSwgdGhlCisgKiBkcml2ZXIgbXVzdCB0YWtlIGNhcmUgb2YgdXBkYXRpbmcgdGhp cyBsaW5rIHN0YXR1cyBwcm9wZXJ0eSBvbiBpdCdzIG93bi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u IHRha2VzIGNhcmUgb2YgaGFuZGxpbmcgYWxsIG9mIHRoZSBhYm92ZSByZXF1aXJlbWVudHMsIGFu ZAorICogc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgdGhlIHN0YXJ0IG9mIHRoZSBhdG9taWMgY2hl Y2sgcGhhc2UgZm9yIGFuIE1TVAorICogY29ubmVjdG9yIGlmIHRoZSBkcml2ZXIgcHJvcGVybHkg aW1wbGVtZW50cyBNU1QgZmFsbGJhY2sgcmV0cmFpbmluZy4KKyAqCisgKiBBZGRpdGlvbmFsbHk7 IGRyaXZlcnMgYXJlIHJlY29tbWVuZGVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhp cworICogZnVuY3Rpb24gaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGEgZnVs bCByZXRyYWluIG9mIHRoZSBNU1QKKyAqIHRvcG9sb2d5IHdvdWxkIGJlIHBlcmZvcm1lZCBieSB0 aGUgbmV3IGF0b21pYyBzdGF0ZS4gVGhpcyBnaXZlcyB0aGUKKyAqIGRyaXZlciBhIGNoYW5jZSB0 byB1cGRhdGUgYW55IHByaXZhdGUgcG9ydGlvbnMgb2YgdGhlIHRvcG9sb2d5IHN0YXRlIHRoYXQK KyAqIG11c3QgYmUgcmVzZXQgYmVmb3JlIGEgcmV0cmFpbiwgc3VjaCBhcyB0aGUgbGluayByYXRl IGFuZCBsYW5lIGNvdW50IGJlaW5nCisgKiBzaGFyZWQgYnkgdGhlIHRvcG9sb2d5LgorICoKKyAq IFJFVFVSTlM6IDEgaWYgdGhlIGdpdmVuIGF0b21pYyBzdGF0ZSByZXRyYWlucyB0aGUgTVNUIHRv cG9sb2d5LCAwIGlmIHRoZQorICogYXRvbWljIHN0YXRlIGRvZXNuJ3QgcmV0cmFpbiB0aGUgdG9w b2xvZ3kuIE9uIGVycm9yLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKKyAqIGlzIHJldHVybmVkLgor ICovCitpbnQgZHJtX2RwX2F0b21pY19tc3RfY2hlY2tfcmV0cmFpbihzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZHBfbXN0X3Rv cG9sb2d5X21nciAqbWdyKQoreworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9IG5l d19jb25uX3N0YXRlLT5zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAq bXN0X3N0YXRlOworCXN0cnVjdCBkcm1fZHBfbXN0X2JyYW5jaCAqbXN0YjsKKwlzdHJ1Y3QgZHJt X2RwX21zdF9yZXRyYWluX2RlcCAqcmV0cmFpbl9kZXAsICpyZXRyYWluX3RtcDsKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gbmV3X2Nvbm5fc3RhdGUtPmNvbm5lY3RvcjsKKwlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqb2xkX2Nvbm5fc3RhdGUgPQorCQlkcm1fYXRvbWlj X2dldF9vbGRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOworCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IHJl dDsKKworCWlmIChvbGRfY29ubl9zdGF0ZS0+bGlua19zdGF0dXMgIT0gRFJNX0xJTktfU1RBVFVT X0JBRCkKKwkJcmV0dXJuIDA7CisKKwltc3Rfc3RhdGUgPSBkcm1fYXRvbWljX2RwX21zdF9nZXRf dG9wb2xvZ3lfc3RhdGUoc3RhdGUsIG1ncik7CisJaWYgKGxpc3RfZW1wdHkoJm1zdF9zdGF0ZS0+ YmFkX3BvcnRzKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBpZiB0aGUgbmV3IHN0YXRlIHJl cXVpcmVzIHVzIHRvIHVwZGF0ZSB0aGUgbGluayBzdGF0dXMKKwkgKiBwcm9wCisJICovCisJaWYg KG5ld19jb25uX3N0YXRlLT5saW5rX3N0YXR1cyA9PSBEUk1fTElOS19TVEFUVVNfQkFEKSB7CisJ CS8qIEFueSBtb2Rlc2V0cyB0aGF0IGxlYXZlIGEgQ1JUQyBlbmFibGVkIG11c3QgdXBkYXRlIGxp bmsKKwkJICogc3RhdHVzCisJCSAqLworCQlpZiAobmV3X2Nvbm5fc3RhdGUtPmNydGMpIHsKKwkJ CWNydGMgPSBuZXdfY29ubl9zdGF0ZS0+Y3J0YzsKKwkJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwKKwkJCQkJCQkJICAgY3J0Yyk7CisJCQlpZiAoY3J0 Y19zdGF0ZSAmJgorCQkJICAgIGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNfc3Rh dGUpKSB7CisJCQkJRFJNX0RFQlVHX0FUT01JQygiW0NSVEM6JWQ6JXNdIG1vZGVzZXQgcmVxdWly ZXMgbGluayByZXRyYWluXG4iLAorCQkJCQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOwor CQkJCW5ld19jb25uX3N0YXRlLT5saW5rX3N0YXR1cyA9CisJCQkJCURSTV9MSU5LX1NUQVRVU19H T09EOworCQkJfQorCQl9IGVsc2UgaWYgKG9sZF9jb25uX3N0YXRlLT5jcnRjKSB7CisJCQlkcm1f YXRvbWljX2RwX21zdF9zYXRpc2Z5X3JldHJhaW5fZGVwKG1zdF9zdGF0ZSwKKwkJCQkJCQkgICAg ICBjb25uZWN0b3IpOworCQkJLyogSWYgYWxsIENSVENzIG9uIHRoaXMgaHViIHdvdWxkIGJlIGRp c2FibGVkIGJ5IHRoaXMKKwkJCSAqIHN0YXRlLCBsaW5rIHN0YXR1cyBjYW4gYmUgdXBkYXRlZCB0 byBHT09ECisJCQkgKi8KKwkJCWlmIChsaXN0X2VtcHR5KCZtc3Rfc3RhdGUtPmJhZF9wb3J0cykp IHsKKwkJCQlEUk1fREVCVUdfQVRPTUlDKCJzdGF0ZSAlcCBkaXNhYmxlcyBhbGwgQ1JUQ3Mgb24g JXAsIGxpbmsgd291bGQgYmUgcmV0cmFpbmVkXG4iLAorCQkJCQkJIHN0YXRlLCBtZ3IpOworCQkJ CW5ld19jb25uX3N0YXRlLT5saW5rX3N0YXR1cyA9CisJCQkJCURSTV9MSU5LX1NUQVRVU19HT09E OworCQkJfQorCQl9CisJCWlmIChuZXdfY29ubl9zdGF0ZS0+bGlua19zdGF0dXMgPT0gRFJNX0xJ TktfU1RBVFVTX0JBRCkKKwkJCXJldHVybiAwOworCX0KKworCURSTV9ERUJVR19BVE9NSUMoIltD T05ORUNUT1I6JWQ6JXNdIGxpbmsgc3RhdHVzIGJhZCAtPiBnb29kXG4iLAorCQkJIGNvbm5lY3Rv ci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lKTsKKwlyZXQgPSBkcm1fYXRvbWljX2RwX21zdF9y ZXRyYWluX2Nvbm5lY3RvcihzdGF0ZSwgbXN0X3N0YXRlLAorCQkJCQkJICBjb25uZWN0b3IpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBSZXRyYWluIHdob2xlIHRvcG9sb2d5ICov CisJbXN0YiA9IGRybV9kcF9nZXRfdmFsaWRhdGVkX21zdGJfcmVmKG1nciwgbWdyLT5tc3RfcHJp bWFyeSk7CisJaWYgKCFtc3RiKQorCQlyZXR1cm4gLUVJTzsKKwlyZXQgPSBkcm1fYXRvbWljX2Rw X21zdF9yZXRyYWluX21zdGIoc3RhdGUsIG1zdF9zdGF0ZSwgbXN0Yik7CisJZHJtX2RwX3B1dF9t c3RfYnJhbmNoX2RldmljZShtc3RiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyog QWRkaXRpb25hbGx5LCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHRvcG9sb2d5IGNvbm5lY3RvciBz dGF0ZSBtYXkKKwkgKiBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0aGUgdGltZSB0aGUgdG9wb2xvZ3kn cyBsaW5rIHN0YXR1cyB3ZW50IHRvCisJICogQkFELiBBcyBhIHJlc3VsdCwgaXQncyBwb3NzaWJs ZSB0aGF0IHRoZXJlJ3Mgc3RpbGwgbGVmdG92ZXIgcmV0cmFpbgorCSAqIGRlcGVuZGVuY2llcyB0 aGF0IHJlZmVyIHRvIGNvbm5lY3RvcnMgdGhhdCBubyBsb25nZXIgZXhpc3Qgb24gdGhlCisJICog aHViLiBFbnN1cmUgdGhlc2UgYXJlIGFkZGVkIHRvIHRoZSBzdGF0ZSBhcyB3ZWxsCisJICovCisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJldHJhaW5fZGVwLCByZXRyYWluX3RtcCwKKwkJCQkg Jm1zdF9zdGF0ZS0+YmFkX3BvcnRzLCBlbnRyeSkgeworCQlyZXQgPSBkcm1fYXRvbWljX2RwX21z dF9yZXRyYWluX2Nvbm5lY3RvcihzdGF0ZSwgbXN0X3N0YXRlLAorCQkJCQkJCSAgY29ubmVjdG9y KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDE7Cit9CitFWFBP UlRfU1lNQk9MKGRybV9kcF9hdG9taWNfbXN0X2NoZWNrX3JldHJhaW4pOworCiBzdGF0aWMgdm9p ZCBkcm1fZHBfbXN0X3RvcG9sb2d5X3Jlc2V0X3N0YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyKQogeworCXN0cnVjdCBkcm1fZHBfbXN0X3JldHJhaW5fZGVwICpyZXRyYWlu X2RlcCwgKnJldHJhaW5fdG1wOwogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpz dGF0ZSA9CiAJCXRvX2RwX21zdF90b3BvbG9neV9zdGF0ZShtZ3ItPmJhc2Uuc3RhdGUpOworCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocmV0cmFpbl9kZXAsIHJldHJhaW5fdG1wLCAmc3RhdGUtPmJhZF9wb3J0cywKKwkJCQkgZW50 cnkpIHsKKwkJLyogUmVzZXQgdGhlIGNvbm5lY3RvciBsaW5rIHN0YXRlLCBzaW5jZSB0aGVyZSdz IG5vIHdheSB0bworCQkgKiByZXRyYWluIHNvbWV0aGluZyB0aGF0IG5vIGxvbmdlciBleGlzdHMK KwkJICovCisJCWNvbm5lY3RvciA9IHJldHJhaW5fZGVwLT5jb25uZWN0b3I7CisKKwkJRFJNX0RF QlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc10gbG9zZXMgcGFyZW50IE1TVCB0b3BvbG9neSBtZ3Ig JXAsIGxpbmsgc3RhdHVzIGJhZCAtPiBnb29kXG4iLAorCQkJICAgICAgY29ubmVjdG9yLT5iYXNl LmlkLCBjb25uZWN0b3ItPm5hbWUsIG1ncik7CisJCWNvbm5lY3Rvci0+c3RhdGUtPmxpbmtfc3Rh dHVzID0gRFJNX0xJTktfU1RBVFVTX0dPT0Q7CisJCWRybV9kcF9tc3RfZGVzdHJveV9yZXRyYWlu X2RlcChyZXRyYWluX2RlcCk7CisJfQogCiAJaWYgKG1nci0+Y2JzLT5yZXNldF9zdGF0ZSkKIAkJ bWdyLT5jYnMtPnJlc2V0X3N0YXRlKHN0YXRlKTsKQEAgLTMxMTAsNyArMzUxNSw3IEBAIHN0YXRp YyB2b2lkIGRybV9kcF9kZXN0cm95X2Nvbm5lY3Rvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yaykKIAkJKCptZ3ItPmNicy0+aG90cGx1ZykobWdyKTsKIH0KIAotLyoqCisvKgogICogZHJt X2F0b21pY19kcF9tc3RfZHVwbGljYXRlX3RvcG9sb2d5X3N0YXRlIC0gZGVmYXVsdAogICogZHJt X2RwX21zdF90b3BvbG9neV9zdGF0ZSBkdXBsaWNhdGUgaGFuZGxlcgogICoKQEAgLTMxNTMsOSAr MzU1OCwyNiBAQCBpbnQKIF9fZHJtX2F0b21pY19kcF9tc3RfZHVwbGljYXRlX3RvcG9sb2d5X3N0 YXRlKHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyLAogCQkJCQkgICAgIHN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZSkKIHsKKwlzdHJ1Y3QgZHJtX2RwX21z dF9yZXRyYWluX2RlcCAqcmV0cmFpbl9kZXAsICpuZXdfcmV0cmFpbl9kZXA7CiAJc3RydWN0IGRy bV9wcml2YXRlX29iaiAqb2JqID0gJm1nci0+YmFzZTsKKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3Bv bG9neV9zdGF0ZSAqc3JjX3N0YXRlID0KKwkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKG9iai0+ c3RhdGUpOwogCiAJbWVtY3B5KHN0YXRlLCBvYmotPnN0YXRlLCBzaXplb2YoKnN0YXRlKSk7CisJ SU5JVF9MSVNUX0hFQUQoJnN0YXRlLT5iYWRfcG9ydHMpOworCisJLyogQ29weSB0aGUgYmFkIHBv cnRzIGxpc3QgdG8gdGhlIG5ldyBzdGF0ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmV0cmFp bl9kZXAsICZzcmNfc3RhdGUtPmJhZF9wb3J0cywgZW50cnkpIHsKKwkJbmV3X3JldHJhaW5fZGVw ID0ga21hbGxvYyhzaXplb2YoKnJldHJhaW5fZGVwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3 X3JldHJhaW5fZGVwKSB7CisJCQlfX2RybV9hdG9taWNfZHBfbXN0X2Rlc3Ryb3lfdG9wb2xvZ3lf c3RhdGUoc3RhdGUpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQluZXdfcmV0cmFpbl9k ZXAtPmNvbm5lY3RvciA9IHJldHJhaW5fZGVwLT5jb25uZWN0b3I7CisJCWRybV9jb25uZWN0b3Jf Z2V0KHJldHJhaW5fZGVwLT5jb25uZWN0b3IpOworCQlsaXN0X2FkZCgmbmV3X3JldHJhaW5fZGVw LT5lbnRyeSwgJnN0YXRlLT5iYWRfcG9ydHMpOworCX0KIAogCV9fZHJtX2F0b21pY19oZWxwZXJf cHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKCZtZ3ItPmJhc2UsCiAJCQkJCQkJJnN0YXRlLT5i YXNlKTsKQEAgLTMxNjksOSArMzU5MSw4IEBAIEVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2Rw X21zdF9kdXBsaWNhdGVfdG9wb2xvZ3lfc3RhdGUpOwogICoKICAqIEZvciBkcml2ZXJzIHdoaWNo IGRvbid0IHlldCBzdWJjbGFzcyBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLgogICovCi12b2lk Ci1kcm1fYXRvbWljX2RwX21zdF9kZXN0cm95X3RvcG9sb2d5X3N0YXRlKHN0cnVjdCBkcm1fcHJp dmF0ZV9vYmogKm9iaiwKLQkJCQkJIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqc3RhdGUpCit2 b2lkIGRybV9hdG9taWNfZHBfbXN0X2Rlc3Ryb3lfdG9wb2xvZ3lfc3RhdGUoc3RydWN0IGRybV9w cml2YXRlX29iaiAqb2JqLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0 YXRlKQogewogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICptc3Rfc3RhdGUgPQog CQl0b19kcF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUpOwpAQCAtMzE5Miw2ICszNjEzLDEzIEBA IEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19kcF9tc3RfZGVzdHJveV90b3BvbG9neV9zdGF0ZSk7 CiB2b2lkCiBfX2RybV9hdG9taWNfZHBfbXN0X2Rlc3Ryb3lfdG9wb2xvZ3lfc3RhdGUoc3RydWN0 IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlKQogeworCXN0cnVjdCBkcm1fZHBfbXN0 X3JldHJhaW5fZGVwICpyZXRyYWluX2RlcCwgKnJldHJhaW5fdG1wOworCisJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHJldHJhaW5fZGVwLCByZXRyYWluX3RtcCwgJnN0YXRlLT5iYWRfcG9ydHMs CisJCQkJIGVudHJ5KSB7CisJCWRybV9jb25uZWN0b3JfcHV0KHJldHJhaW5fZGVwLT5jb25uZWN0 b3IpOworCQlrZnJlZShyZXRyYWluX2RlcCk7CisJfQogfQogRVhQT1JUX1NZTUJPTChfX2RybV9h dG9taWNfZHBfbXN0X2Rlc3Ryb3lfdG9wb2xvZ3lfc3RhdGUpOwogCkBAIC0zMjc2LDYgKzM3MDQs OCBAQCBpbnQgZHJtX2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1nciwKIAkvKiBtYXguIHRpbWUgc2xvdHMgLSBvbmUgc2xvdCBmb3IgTVRQ IGhlYWRlciAqLwogCXN0YXRlLT5hdmFpbF9zbG90cyA9IDYzOwogCisJSU5JVF9MSVNUX0hFQUQo JnN0YXRlLT5iYWRfcG9ydHMpOworCiAJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KCZtZ3It PmJhc2UsCiAJCQkJICAgICZzdGF0ZS0+YmFzZSwKIAkJCQkgICAgbWdyLT5mdW5jcyk7CmRpZmYg LS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJt X2RwX21zdF9oZWxwZXIuaAppbmRleCAzYTczNzhjZDViZDEuLjMyZjY5NDRkZTU2MCAxMDA2NDQK LS0tIGEvaW5jbHVkZS9kcm0vZHJtX2RwX21zdF9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9k cm1fZHBfbXN0X2hlbHBlci5oCkBAIC00MDcsOSArNDA3LDI0IEBAIHN0cnVjdCBkcm1fZHBfcGF5 bG9hZCB7CiAKICNkZWZpbmUgdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHgpIGNvbnRhaW5lcl9v Zih4LCBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSwgYmFzZSkKIAorLyogUmVwcmVz ZW50cyBhIGNvbm5lY3RvciB3aXRoIGFuIE1TVCBwb3J0IHdob3NlIG1zdGIgaGFkIGEgbW9kZSBw cm9ncmFtbWVkCisgKiB3aGVuIHRoZSBsaW5rIHJhdGUgb2YgdGhlIHRvcG9sb2d5IHdhcyBsb3dl cmVkLiBBcyBsb25nIGFzIGEgdG9wb2xvZ3kgc3RhdGUKKyAqIGhhcyB0aGVzZSwgbm8gbXN0YnMg bWF5IGJlIGFjdGl2YXRlZAorICovCitzdHJ1Y3QgZHJtX2RwX21zdF9yZXRyYWluX2RlcCB7CisJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5 OworfTsKKwogc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgewogCXN0cnVjdCBkcm1f cHJpdmF0ZV9zdGF0ZSBiYXNlOwogCWludCBhdmFpbF9zbG90czsKKwkvKioKKwkgKiBAYmFkX3Bv cnRzOiBEUk0gY29ubmVjdG9ycyB0aGF0IG11c3QgaGF2ZSB0aGVpciBtb2RlIGNoYW5nZWQgYmVm b3JlCisJICogdGhlIGxpbmsgc3RhdHVzIG9mIGVhY2ggY29ubmVjdG9yIG9uIHRoZSBNU1QgaHVi IGNhbiBiZSB1cGRhdGVkCisJICogZnJvbSBCQUQgdG8gR09PRAorCSAqLworCXN0cnVjdCBsaXN0 X2hlYWQgYmFkX3BvcnRzOwogCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwog fTsKIApAQCAtNjM5LDQgKzY1NCw5IEBAIGludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9z bG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiBpbnQgZHJtX2RwX3NlbmRfcG93 ZXJfdXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKIAkJCQkg c3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91cCk7CiAKK2ludCBkcm1f ZHBfbXN0X3RvcG9sb2d5X21ncl9sb3dlcl9saW5rX3JhdGUoc3RydWN0IGRybV9kcF9tc3RfdG9w b2xvZ3lfbWdyICptZ3IsCisJCQkJCSAgICBpbnQgbGlua19yYXRlLCBpbnQgbGFuZV9jb3VudCk7 CitpbnQgZHJtX2RwX2F0b21pY19tc3RfY2hlY2tfcmV0cmFpbihzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9s b2d5X21nciAqbWdyKTsKKwogI2VuZGlmCi0tIAoyLjE0LjMKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=