From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC v4 15/25] drm/fb-helper: Move modeset config code to drm_client Date: Thu, 12 Apr 2018 18:12:27 +0200 Message-ID: <20180412161237.9314-4-noralf@tronnes.org> References: <20180412161237.9314-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180412161237.9314-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , laurent.pinchart@ideasonboard.com, mstaudt@suse.de, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org Q2FsbCB0aGUgZnVuY3Rpb24gZHJtX2NsaWVudF9maW5kX2Rpc3BsYXkoKS4KTm8gZnVuY3Rpb25h bCBjaGFuZ2UgYXBhcnQgZnJvbSBtYWtpbmcgd2lkdGgvaGVpZ2h0IGFyZ3VtZW50cyBvcHRpb25h bC4KU29tZSBmdW5jdGlvbiBuYW1lL3NpZ25hdHVyZSBjaGFuZ2VzIGFuZCB3aGl0ZXNwYWNlIGFk anVzdG1lbnRzLgoKU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5l cy5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYyAgICB8IDM5OSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Zi X2hlbHBlci5jIHwgMzcxICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlu Y2x1ZGUvZHJtL2RybV9jbGllbnQuaCAgICAgICAgfCAgIDIgKwogaW5jbHVkZS9kcm0vZHJtX2Zi X2hlbHBlci5oICAgICB8ICAgNCAtCiA0IGZpbGVzIGNoYW5nZWQsIDQwMyBpbnNlcnRpb25zKCsp LCAzNzMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jbGll bnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKaW5kZXggYzg1YzEzNTY4Y2Y5Li4y NzgxOGE0NjdiMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYwpAQCAtMTgsNiArMTgsMTAgQEAKICNpbmNs dWRlIDxkcm0vZHJtX2RldmljZS5oPgogI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4KIAorc3Ry dWN0IGRybV9jbGllbnRfZGlzcGxheV9vZmZzZXQgeworCWludCB4LCB5OworfTsKKwogLyoqCiAg KiBkcm1fY2xpZW50X2Rpc3BsYXlfY3JlYXRlKCkgLSBDcmVhdGUgZGlzcGxheSBzdHJ1Y3R1cmUK ICAqIEBkZXY6IERSTSBkZXZpY2UKQEAgLTM1OSwzICszNjMsMzk4IEBAIHZvaWQgZHJtX2NsaWVu dF9kaXNwbGF5X2RwbXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgaW50IG1v ZGUpCiAJCWRybV9jbGllbnRfZGlzcGxheV9kcG1zX2xlZ2FjeShkaXNwbGF5LCBtb2RlKTsKIH0K IEVYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2RwbXMpOworCitzdGF0aWMgaW50IGRy bV9jbGllbnRfcHJvYmVfY29ubmVjdG9yX21vZGVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJ CQkJCSAgICB1MzIgbWF4X3dpZHRoLCB1MzIgbWF4X2hlaWdodCkKK3sKKwlzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3I7CisJaW50IGNvdW50ID0gMDsKKworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2lu KGRldiwgJmNvbm5faXRlcik7CisJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3Rv ciwgJmNvbm5faXRlcikgeworCQljb3VudCArPSBjb25uZWN0b3ItPmZ1bmNzLT5maWxsX21vZGVz KGNvbm5lY3RvciwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9s aXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMg Ym9vbCBkcm1fdGFyZ2V0X2Nsb25lZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAg c3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAorCQkJICAgICAgdW5zaWduZWQgaW50 IGNvbm5lY3Rvcl9jb3VudCwKKwkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9k ZXMsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5X29mZnNldCAqb2Zmc2V0cywK KwkJCSAgICAgIGJvb2wgKmVuYWJsZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKwlpbnQg Y291bnQsIGksIGo7CisJYm9vbCBjYW5fY2xvbmUgPSBmYWxzZTsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqZG10X21vZGUsICptb2RlOworCisJLyogb25seSBjb250ZW1wbGF0ZSBjbG9uaW5n IGluIHRoZSBzaW5nbGUgY3J0YyBjYXNlICovCisJaWYgKGRldi0+bW9kZV9jb25maWcubnVtX2Ny dGMgPiAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8 IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CisJCWlmIChlbmFibGVkW2ldKQorCQkJY291bnQrKzsK Kwl9CisKKwkvKiBvbmx5IGNvbnRlbXBsYXRlIGNsb25pbmcgaWYgbW9yZSB0aGFuIG9uZSBjb25u ZWN0b3IgaXMgZW5hYmxlZCAqLworCWlmIChjb3VudCA8PSAxKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKiBjaGVjayB0aGUgY29tbWFuZCBsaW5lIG9yIGlmIG5vdGhpbmcgY29tbW9uIHBpY2sgMTAy NHg3NjggKi8KKwljYW5fY2xvbmUgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3Jf Y291bnQ7IGkrKykgeworCQlpZiAoIWVuYWJsZWRbaV0pCisJCQljb250aW51ZTsKKwkJbW9kZXNb aV0gPSBkcm1fY29ubmVjdG9yX3BpY2tfY21kbGluZV9tb2RlKGNvbm5lY3RvcnNbaV0pOworCQlp ZiAoIW1vZGVzW2ldKSB7CisJCQljYW5fY2xvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJ CWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCWlmICghZW5hYmxlZFtqXSkKKwkJCQljb250 aW51ZTsKKwkJCWlmICghZHJtX21vZGVfZXF1YWwobW9kZXNbal0sIG1vZGVzW2ldKSkKKwkJCQlj YW5fY2xvbmUgPSBmYWxzZTsKKwkJfQorCX0KKworCWlmIChjYW5fY2xvbmUpIHsKKwkJRFJNX0RF QlVHX0tNUygiY2FuIGNsb25lIHVzaW5nIGNvbW1hbmQgbGluZVxuIik7CisJCXJldHVybiB0cnVl OworCX0KKworCS8qIHRyeSBhbmQgZmluZCBhIDEwMjR4NzY4IG1vZGUgb24gZWFjaCBjb25uZWN0 b3IgKi8KKwljYW5fY2xvbmUgPSB0cnVlOworCWRtdF9tb2RlID0gZHJtX21vZGVfZmluZF9kbXQo ZGV2LCAxMDI0LCA3NjgsIDYwLCBmYWxzZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9y X2NvdW50OyBpKyspIHsKKwkJaWYgKCFlbmFibGVkW2ldKQorCQkJY29udGludWU7CisKKwkJbGlz dF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yc1tpXS0+bW9kZXMsIGhlYWQpIHsKKwkJ CWlmIChkcm1fbW9kZV9lcXVhbChtb2RlLCBkbXRfbW9kZSkpCisJCQkJbW9kZXNbaV0gPSBtb2Rl OworCQl9CisJCWlmICghbW9kZXNbaV0pCisJCQljYW5fY2xvbmUgPSBmYWxzZTsKKwl9CisKKwlp ZiAoY2FuX2Nsb25lKSB7CisJCURSTV9ERUJVR19LTVMoImNhbiBjbG9uZSB1c2luZyAxMDI0eDc2 OFxuIik7CisJCXJldHVybiB0cnVlOworCX0KKwlEUk1fSU5GTygia21zOiBjYW4ndCBlbmFibGUg Y2xvbmluZyB3aGVuIHdlIHByb2JhYmx5IHdhbnRlZCB0by5cbiIpOworCisJcmV0dXJuIGZhbHNl OworfQorCitzdGF0aWMgdm9pZCBkcm1fZ2V0X3RpbGVfb2Zmc2V0cyhzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqKmNvbm5lY3RvcnMsCisJCQkJIHVuc2lnbmVkIGludCBjb25uZWN0b3JfY291bnQsCisJ CQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJIHN0cnVjdCBkcm1fY2xp ZW50X2Rpc3BsYXlfb2Zmc2V0ICpvZmZzZXRzLAorCQkJCSBpbnQgaWR4LAorCQkJCSBpbnQgaF9p ZHgsIGludCB2X2lkeCkKK3sKKwlpbnQgaTsKKwlpbnQgaG9mZnNldCA9IDAsIHZvZmZzZXQgPSAw OworCisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBjb25uZWN0b3JzW2ldOworCisJCWlmICghY29ubmVj dG9yLT5oYXNfdGlsZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghbW9kZXNbaV0gJiYgKGhfaWR4 IHx8IHZfaWR4KSkgeworCQkJRFJNX0RFQlVHX0tNUygibm8gbW9kZXMgZm9yIGNvbm5lY3RvciB0 aWxlZCAlZCAlZFxuIiwgaSwKKwkJCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQpOworCQkJY29u dGludWU7CisJCX0KKwkJaWYgKGNvbm5lY3Rvci0+dGlsZV9oX2xvYyA8IGhfaWR4KQorCQkJaG9m ZnNldCArPSBtb2Rlc1tpXS0+aGRpc3BsYXk7CisKKwkJaWYgKGNvbm5lY3Rvci0+dGlsZV92X2xv YyA8IHZfaWR4KQorCQkJdm9mZnNldCArPSBtb2Rlc1tpXS0+dmRpc3BsYXk7CisJfQorCW9mZnNl dHNbaWR4XS54ID0gaG9mZnNldDsKKwlvZmZzZXRzW2lkeF0ueSA9IHZvZmZzZXQ7CisJRFJNX0RF QlVHX0tNUygicmV0dXJuZWQgJWQgJWQgZm9yICVkICVkXG4iLCBob2Zmc2V0LCB2b2Zmc2V0LCBo X2lkeCwgdl9pZHgpOworfQorCitzdGF0aWMgYm9vbCBkcm1fdGFyZ2V0X3ByZWZlcnJlZChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCisJCQkJIHVuc2lnbmVkIGludCBjb25uZWN0 b3JfY291bnQsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJIHN0 cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXlfb2Zmc2V0ICpvZmZzZXRzLAorCQkJCSBib29sICplbmFi bGVkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJY29uc3QgdTY0IG1hc2sgPSBCSVRfVUxM KGNvbm5lY3Rvcl9jb3VudCkgLSAxOworCXU2NCBjb25uX2NvbmZpZ3VyZWQgPSAwOworCWludCB0 aWxlX3Bhc3MgPSAwOworCWludCBpOworCityZXRyeToKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVj dG9yX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGNv bm5lY3RvcnNbaV07CisKKwkJaWYgKGNvbm5fY29uZmlndXJlZCAmIEJJVF9VTEwoaSkpCisJCQlj b250aW51ZTsKKworCQlpZiAoIWVuYWJsZWRbaV0pIHsKKwkJCWNvbm5fY29uZmlndXJlZCB8PSBC SVRfVUxMKGkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBmaXJzdCBwYXNzIG92ZXIgYWxs IHRoZSB1bnRpbGVkIGNvbm5lY3RvcnMgKi8KKwkJaWYgKHRpbGVfcGFzcyA9PSAwICYmIGNvbm5l Y3Rvci0+aGFzX3RpbGUpCisJCQljb250aW51ZTsKKworCQlpZiAodGlsZV9wYXNzID09IDEpIHsK KwkJCWlmIChjb25uZWN0b3ItPnRpbGVfaF9sb2MgIT0gMCB8fAorCQkJICAgIGNvbm5lY3Rvci0+ dGlsZV92X2xvYyAhPSAwKQorCQkJCWNvbnRpbnVlOworCisJCX0gZWxzZSB7CisJCQlpZiAoY29u bmVjdG9yLT50aWxlX2hfbG9jICE9IHRpbGVfcGFzcyAtIDEgJiYKKwkJCSAgICBjb25uZWN0b3It PnRpbGVfdl9sb2MgIT0gdGlsZV9wYXNzIC0gMSkKKwkJCS8qIGlmIHRoaXMgdGlsZV9wYXNzIGRv ZXNuJ3QgY292ZXIgYW55IG9mIHRoZSB0aWxlcyAtIGtlZXAgZ29pbmcgKi8KKwkJCQljb250aW51 ZTsKKworCQkJLyoKKwkJCSAqIGZpbmQgdGhlIHRpbGUgb2Zmc2V0cyBmb3IgdGhpcyBwYXNzIC0g bmVlZCB0byBmaW5kCisJCQkgKiBhbGwgdGlsZXMgbGVmdCBhbmQgYWJvdmUKKwkJCSAqLworCQkJ ZHJtX2dldF90aWxlX29mZnNldHMoY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50LCBtb2Rlcywg b2Zmc2V0cywKKwkJCQkJICAgICBpLCBjb25uZWN0b3ItPnRpbGVfaF9sb2MsIGNvbm5lY3Rvci0+ dGlsZV92X2xvYyk7CisJCX0KKwkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgY21kbGluZSBt b2RlIG9uIGNvbm5lY3RvciAlZFxuIiwgY29ubmVjdG9yLT5iYXNlLmlkKTsKKworCQkvKiBnb3Qg Zm9yIGNvbW1hbmQgbGluZSBtb2RlIGZpcnN0ICovCisJCW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rv cl9waWNrX2NtZGxpbmVfbW9kZShjb25uZWN0b3IpOworCQlpZiAoIW1vZGVzW2ldKSB7CisJCQlE Uk1fREVCVUdfS01TKCJsb29raW5nIGZvciBwcmVmZXJyZWQgbW9kZSBvbiBjb25uZWN0b3IgJWQg JWRcbiIsCisJCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkLAorCQkJCSAgICAgIGNvbm5lY3Rv ci0+dGlsZV9ncm91cCA/IGNvbm5lY3Rvci0+dGlsZV9ncm91cC0+aWQgOiAwKTsKKwkJCW1vZGVz W2ldID0gZHJtX2Nvbm5lY3Rvcl9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwg aGVpZ2h0KTsKKwkJfQorCQkvKiBObyBwcmVmZXJyZWQgbW9kZXMsIHBpY2sgb25lIG9mZiB0aGUg bGlzdCAqLworCQlpZiAoIW1vZGVzW2ldKQorCQkJbW9kZXNbaV0gPSBsaXN0X2ZpcnN0X2VudHJ5 X29yX251bGwoJmNvbm5lY3Rvci0+bW9kZXMsCisJCQkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlLCBoZWFkKTsKKworCQlEUk1fREVCVUdfS01TKCJmb3VuZCBtb2RlICVzXG4iLCBtb2Rl c1tpXSA/IG1vZGVzW2ldLT5uYW1lIDogIm5vbmUiKTsKKwkJY29ubl9jb25maWd1cmVkIHw9IEJJ VF9VTEwoaSk7CisJfQorCisJaWYgKChjb25uX2NvbmZpZ3VyZWQgJiBtYXNrKSAhPSBtYXNrKSB7 CisJCXRpbGVfcGFzcysrOworCQlnb3RvIHJldHJ5OworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwor c3RhdGljIGludCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNw bGF5LAorCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCisJCQkgIHVuc2ln bmVkIGludCBjb25uZWN0b3JfY291bnQsCisJCQkgIHN0cnVjdCBkcm1fY3J0YyAqKmJlc3RfY3J0 Y3MsCisJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkgIGludCBuLCBp bnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpc3Bs YXktPmRldjsKKwlpbnQgbywgbXlfc2NvcmUsIGJlc3Rfc2NvcmUsIHNjb3JlOworCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsK KwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jcnRjICoqY3J0Y3M7 CisKKwlpZiAobiA9PSBjb25uZWN0b3JfY291bnQpCisJCXJldHVybiAwOworCisJY29ubmVjdG9y ID0gY29ubmVjdG9yc1tuXTsKKworCWJlc3RfY3J0Y3Nbbl0gPSBOVUxMOworCWJlc3Rfc2NvcmUg PSBkcm1fcGlja19jcnRjcyhkaXNwbGF5LCBjb25uZWN0b3JzLCBjb25uZWN0b3JfY291bnQsCisJ CQkJICAgIGJlc3RfY3J0Y3MsIG1vZGVzLCBuICsgMSwgd2lkdGgsIGhlaWdodCk7CisJaWYgKCFt b2Rlc1tuXSkKKwkJcmV0dXJuIGJlc3Rfc2NvcmU7CisKKwljcnRjcyA9IGtjYWxsb2MoY29ubmVj dG9yX2NvdW50LCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcnRjcykKKwkJ cmV0dXJuIGJlc3Rfc2NvcmU7CisKKwlteV9zY29yZSA9IDE7CisJaWYgKGNvbm5lY3Rvci0+c3Rh dHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQorCQlteV9zY29yZSsrOworCWlmIChj b25uZWN0b3ItPmNtZGxpbmVfbW9kZS5zcGVjaWZpZWQpCisJCW15X3Njb3JlKys7CisJaWYgKGRy bV9jb25uZWN0b3JfaGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCkp CisJCW15X3Njb3JlKys7CisKKwkvKgorCSAqIElmIHRoZSBEUk0gZGV2aWNlIGltcGxlbWVudHMg YXRvbWljIGhvb2tzIGFuZCAtPmJlc3RfZW5jb2RlcigpIGlzCisJICogTlVMTCB3ZSBmYWxsYmFj ayB0byB0aGUgZGVmYXVsdCBkcm1fYXRvbWljX2hlbHBlcl9iZXN0X2VuY29kZXIoKQorCSAqIGhl bHBlci4KKwkgKi8KKwlpZiAoZHJtX2Rydl91c2VzX2F0b21pY19tb2Rlc2V0KGRldikgJiYKKwkg ICAgIWNvbm5lY3Rvci0+aGVscGVyX3ByaXZhdGUtPmJlc3RfZW5jb2RlcikKKwkJZW5jb2RlciA9 IGRybV9hdG9taWNfaGVscGVyX2Jlc3RfZW5jb2Rlcihjb25uZWN0b3IpOworCWVsc2UKKwkJZW5j b2RlciA9IGNvbm5lY3Rvci0+aGVscGVyX3ByaXZhdGUtPmJlc3RfZW5jb2Rlcihjb25uZWN0b3Ip OworCisJaWYgKCFlbmNvZGVyKQorCQlnb3RvIG91dDsKKworCS8qCisJICogc2VsZWN0IGEgY3J0 YyBmb3IgdGhpcyBjb25uZWN0b3IgYW5kIHRoZW4gYXR0ZW1wdCB0byBjb25maWd1cmUKKwkgKiBy ZW1haW5pbmcgY29ubmVjdG9ycworCSAqLworCWRybV9jbGllbnRfZGlzcGxheV9mb3JfZWFjaF9t b2Rlc2V0KG1vZGVzZXQsIGRpc3BsYXkpIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbW9k ZXNldC0+Y3J0YzsKKworCQlpZiAoKGVuY29kZXItPnBvc3NpYmxlX2NydGNzICYgZHJtX2NydGNf bWFzayhjcnRjKSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAobyA9IDA7IG8gPCBuOyBv KyspCisJCQlpZiAoYmVzdF9jcnRjc1tvXSA9PSBjcnRjKQorCQkJCWJyZWFrOworCisJCWlmIChv IDwgbikgeworCQkJLyogaWdub3JlIGNsb25pbmcgdW5sZXNzIG9ubHkgYSBzaW5nbGUgY3J0YyAq LworCQkJaWYgKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMgPiAxKQorCQkJCWNvbnRpbnVlOwor CisJCQlpZiAoIWRybV9tb2RlX2VxdWFsKG1vZGVzW29dLCBtb2Rlc1tuXSkpCisJCQkJY29udGlu dWU7CisJCX0KKworCQljcnRjc1tuXSA9IGNydGM7CisJCW1lbWNweShjcnRjcywgYmVzdF9jcnRj cywgbiAqIHNpemVvZigqY3J0Y3MpKTsKKwkJc2NvcmUgPSBteV9zY29yZSArIGRybV9waWNrX2Ny dGNzKGRpc3BsYXksIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwKKwkJCQkJCSAgY3J0Y3Ms IG1vZGVzLCBuICsgMSwgd2lkdGgsIGhlaWdodCk7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUp IHsKKwkJCWJlc3Rfc2NvcmUgPSBzY29yZTsKKwkJCW1lbWNweShiZXN0X2NydGNzLCBjcnRjcywK KwkJCSAgICAgICBjb25uZWN0b3JfY291bnQgKiBzaXplb2YoKmNydGNzKSk7CisJCX0KKwl9Citv dXQ6CisJa2ZyZWUoY3J0Y3MpOworCisJcmV0dXJuIGJlc3Rfc2NvcmU7Cit9CisKKy8qKgorICog ZHJtX2NsaWVudF9maW5kX2Rpc3BsYXkoKSAtIEZpbmQgZGlzcGxheQorICogQGRldjogRFJNIGRl dmljZQorICogQHdpZHRoOiBNYXhpbXVtIGRpc3BsYXkgbW9kZSB3aWR0aCAob3B0aW9uYWwpCisg KiBAaGVpZ2h0OiBNYXhpbXVtIGRpc3BsYXkgbW9kZSBoZWlnaHQgKG9wdGlvbmFsKQorICoKKyAq IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRpc3BsYXkgdGhlIGNsaWVudCBjYW4gdXNlIGlmIGF2 YWlsYWJsZS4KKyAqCisgKiBGcmVlIHJlc291cmNlcyBieSBjYWxsaW5nIGRybV9jbGllbnRfZGlz cGxheV9mcmVlKCkuCisgKgorICogUmV0dXJuczoKKyAqIEEgJmRybV9jbGllbnRfZGlzcGxheSBv biBzdWNjZXNzLCBOVUxMIGlmIG5vIGNvbm5lY3RvcnMgYXJlIGZvdW5kCisgKiBvciBlcnJvciBw b2ludGVyIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKgorZHJt X2NsaWVudF9maW5kX2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50 IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3Bs YXlfb2Zmc2V0ICpvZmZzZXRzOworCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7 CisJc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzOworCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICoqbW9kZXM7CisJc3RydWN0IGRybV9jcnRjICoqY3J0Y3M7CisJaW50IGksIGNvbm5l Y3Rvcl9jb3VudDsKKwlib29sICplbmFibGVkOworCisJRFJNX0RFQlVHX0tNUygiXG4iKTsKKwor CWlmICghd2lkdGgpCisJCXdpZHRoID0gZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGg7CisJaWYg KCFoZWlnaHQpCisJCWhlaWdodCA9IGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodDsKKworCW11 dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWlmICghZHJtX2NsaWVudF9wcm9i ZV9jb25uZWN0b3JfbW9kZXMoZGV2LCB3aWR0aCwgaGVpZ2h0KSkKKwkJRFJNX0RFQlVHX0tNUygi Tm8gY29ubmVjdG9ycyByZXBvcnRlZCBjb25uZWN0ZWQgd2l0aCBtb2Rlc1xuIik7CisKKwlpZiAo ZGV2LT5kcml2ZXItPmluaXRpYWxfY2xpZW50X2Rpc3BsYXkpIHsKKwkJZGlzcGxheSA9IGRldi0+ ZHJpdmVyLT5pbml0aWFsX2NsaWVudF9kaXNwbGF5KGRldiwgd2lkdGgsIGhlaWdodCk7CisJCWlm IChkaXNwbGF5KSB7CisJCQltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwor CQkJcmV0dXJuIGRpc3BsYXk7CisJCX0KKwl9CisKKwljb25uZWN0b3JfY291bnQgPSBkcm1fY29u bmVjdG9yX2dldF9hbGwoZGV2LCAmY29ubmVjdG9ycyk7CisJaWYgKGNvbm5lY3Rvcl9jb3VudCA8 IDEpCisJCXJldHVybiBOVUxMOworCisJZW5hYmxlZCA9IGRybV9jb25uZWN0b3JfZ2V0X2VuYWJs ZWRfc3RhdHVzKGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCk7CisJY3J0Y3MgPSBrY2FsbG9j KGNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJORUwpOworCW1vZGVzID0g a2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZigqbW9kZXMpLCBHRlBfS0VSTkVMKTsKKwlv ZmZzZXRzID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZigqb2Zmc2V0cyksIEdGUF9L RVJORUwpOworCWlmICghY3J0Y3MgfHwgIW1vZGVzIHx8ICFlbmFibGVkIHx8ICFvZmZzZXRzKSB7 CisJCURSTV9FUlJPUigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZGlzcGxheSA9 IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gb3V0OworCX0KKworCWRpc3BsYXkgPSBkcm1fY2xp ZW50X2Rpc3BsYXlfY3JlYXRlKGRldik7CisJaWYgKElTX0VSUihkaXNwbGF5KSkKKwkJZ290byBv dXQ7CisKKwlpZiAoIWRybV90YXJnZXRfY2xvbmVkKGRldiwgY29ubmVjdG9ycywgY29ubmVjdG9y X2NvdW50LAorCQkJICAgICAgIG1vZGVzLCBvZmZzZXRzLCBlbmFibGVkLCB3aWR0aCwgaGVpZ2h0 KSAmJgorCSAgICAhZHJtX3RhcmdldF9wcmVmZXJyZWQoY29ubmVjdG9ycywgY29ubmVjdG9yX2Nv dW50LAorCQkJCSAgbW9kZXMsIG9mZnNldHMsIGVuYWJsZWQsIHdpZHRoLCBoZWlnaHQpKQorCQlE Uk1fRVJST1IoIlVuYWJsZSB0byBmaW5kIGluaXRpYWwgbW9kZXNcbiIpOworCisJRFJNX0RFQlVH X0tNUygicGlja2luZyBDUlRDcyBmb3IgJWR4JWQgY29uZmlnXG4iLCB3aWR0aCwgaGVpZ2h0KTsK KworCWRybV9waWNrX2NydGNzKGRpc3BsYXksIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwg Y3J0Y3MsIG1vZGVzLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKworCS8qIG5lZWQgdG8gc2V0IHRoZSBt b2Rlc2V0cyB1cCBoZXJlIGZvciB1c2UgbGF0ZXIgKi8KKwkvKiBmaWxsIG91dCB0aGUgY29ubmVj dG9yPC0+Y3J0YyBtYXBwaW5ncyBpbnRvIHRoZSBtb2Rlc2V0cyAqLworCisJZm9yIChpID0gMDsg aSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXlf b2Zmc2V0ICpvZmZzZXQgPSAmb2Zmc2V0c1tpXTsKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9IGNvbm5lY3RvcnNbaV07CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0gbW9kZXNbaV07CisJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGNydGNzW2ldOworCisJCWlm IChtb2RlICYmIGNydGMpIHsKKwkJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7CisKKwkJ CW1vZGVzZXQgPSBkcm1fY2xpZW50X2Rpc3BsYXlfZmluZF9tb2Rlc2V0KGRpc3BsYXksIGNydGMp OworCQkJaWYgKFdBUk5fT04oIW1vZGVzZXQpKSB7CisJCQkJZHJtX2NsaWVudF9kaXNwbGF5X2Zy ZWUoZGlzcGxheSk7CisJCQkJZGlzcGxheSA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCQkJZ290byBv dXQ7CisJCQl9CisKKwkJCURSTV9ERUJVR19LTVMoImRlc2lyZWQgbW9kZSAlcyBzZXQgb24gY3J0 YyAlZCAoJWQsJWQpXG4iLAorCQkJCSAgICAgIG1vZGUtPm5hbWUsIG1vZGVzZXQtPmNydGMtPmJh c2UuaWQsIG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKKworCQkJbW9kZXNldC0+bW9kZSA9IGRybV9t b2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOworCQkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubmVjdG9y KTsKKwkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMrK10gPSBj b25uZWN0b3I7CisJCQltb2Rlc2V0LT54ID0gb2Zmc2V0LT54OworCQkJbW9kZXNldC0+eSA9IG9m ZnNldC0+eTsKKwkJfQorCX0KK291dDoKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcu bXV0ZXgpOworCWRybV9jb25uZWN0b3JfcHV0X2FsbChjb25uZWN0b3JzLCBjb25uZWN0b3JfY291 bnQpOworCWtmcmVlKGNydGNzKTsKKwlrZnJlZShtb2Rlcyk7CisJa2ZyZWUob2Zmc2V0cyk7CisJ a2ZyZWUoZW5hYmxlZCk7CisKKwlyZXR1cm4gZGlzcGxheTsKK30KK0VYUE9SVF9TWU1CT0woZHJt X2NsaWVudF9maW5kX2Rpc3BsYXkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9m Yl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggNmVlNjFm MTk1MzIxLi4wMWQ4ODQwOTMwYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJf aGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMTU1OCwz ODYgKzE1NTgsMTkgQEAgdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKHN0cnVjdCBmYl9pbmZv ICppbmZvLCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGUKIH0KIEVYUE9SVF9TWU1CT0wo ZHJtX2ZiX2hlbHBlcl9maWxsX3Zhcik7CiAKLXN0YXRpYyBpbnQgZHJtX2ZiX2hlbHBlcl9wcm9i ZV9jb25uZWN0b3JfbW9kZXMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCQkJ CXVpbnQzMl90IG1heFgsCi0JCQkJCQl1aW50MzJfdCBtYXhZKQotewotCXN0cnVjdCBkcm1fY29u bmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKLQlpbnQgY291bnQgPSAwOwotCi0JZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfYmVnaW4o ZmJfaGVscGVyLT5kZXYsICZjb25uX2l0ZXIpOwotCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRl cihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKLQkJY291bnQgKz0gY29ubmVjdG9yLT5mdW5jcy0+ ZmlsbF9tb2Rlcyhjb25uZWN0b3IsIG1heFgsIG1heFkpOwotCX0KLQlkcm1fY29ubmVjdG9yX2xp c3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBi b29sIGRybV90YXJnZXRfY2xvbmVkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCi0J CQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCi0JCQkgICAgICB1bnNp Z25lZCBpbnQgY29ubmVjdG9yX2NvdW50LAotCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKiptb2RlcywKLQkJCSAgICAgIHN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXRzLAotCQkJ ICAgICAgYm9vbCAqZW5hYmxlZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotCWludCBjb3Vu dCwgaSwgajsKLQlib29sIGNhbl9jbG9uZSA9IGZhbHNlOwotCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICpkbXRfbW9kZSwgKm1vZGU7Ci0KLQkvKiBvbmx5IGNvbnRlbXBsYXRlIGNsb25pbmcgaW4g dGhlIHNpbmdsZSBjcnRjIGNhc2UgKi8KLQlpZiAoZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmln Lm51bV9jcnRjID4gMSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JY291bnQgPSAwOwotCWZvciAoaSA9 IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykgewotCQlpZiAoZW5hYmxlZFtpXSkKLQkJCWNv dW50Kys7Ci0JfQotCi0JLyogb25seSBjb250ZW1wbGF0ZSBjbG9uaW5nIGlmIG1vcmUgdGhhbiBv bmUgY29ubmVjdG9yIGlzIGVuYWJsZWQgKi8KLQlpZiAoY291bnQgPD0gMSkKLQkJcmV0dXJuIGZh bHNlOwotCi0JLyogY2hlY2sgdGhlIGNvbW1hbmQgbGluZSBvciBpZiBub3RoaW5nIGNvbW1vbiBw aWNrIDEwMjR4NzY4ICovCi0JY2FuX2Nsb25lID0gdHJ1ZTsKLQlmb3IgKGkgPSAwOyBpIDwgY29u bmVjdG9yX2NvdW50OyBpKyspIHsKLQkJaWYgKCFlbmFibGVkW2ldKQotCQkJY29udGludWU7Ci0J CW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rvcl9waWNrX2NtZGxpbmVfbW9kZShjb25uZWN0b3JzW2ld KTsKLQkJaWYgKCFtb2Rlc1tpXSkgewotCQkJY2FuX2Nsb25lID0gZmFsc2U7Ci0JCQlicmVhazsK LQkJfQotCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQlpZiAoIWVuYWJsZWRbal0pCi0J CQkJY29udGludWU7Ci0JCQlpZiAoIWRybV9tb2RlX2VxdWFsKG1vZGVzW2pdLCBtb2Rlc1tpXSkp Ci0JCQkJY2FuX2Nsb25lID0gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlpZiAoY2FuX2Nsb25lKSB7Ci0J CURSTV9ERUJVR19LTVMoImNhbiBjbG9uZSB1c2luZyBjb21tYW5kIGxpbmVcbiIpOwotCQlyZXR1 cm4gdHJ1ZTsKLQl9Ci0KLQkvKiB0cnkgYW5kIGZpbmQgYSAxMDI0eDc2OCBtb2RlIG9uIGVhY2gg Y29ubmVjdG9yICovCi0JY2FuX2Nsb25lID0gdHJ1ZTsKLQlkbXRfbW9kZSA9IGRybV9tb2RlX2Zp bmRfZG10KGZiX2hlbHBlci0+ZGV2LCAxMDI0LCA3NjgsIDYwLCBmYWxzZSk7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKyspIHsKLQkJaWYgKCFlbmFibGVkW2ldKQotCQkJ Y29udGludWU7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yc1tpXS0+ bW9kZXMsIGhlYWQpIHsKLQkJCWlmIChkcm1fbW9kZV9lcXVhbChtb2RlLCBkbXRfbW9kZSkpCi0J CQkJbW9kZXNbaV0gPSBtb2RlOwotCQl9Ci0JCWlmICghbW9kZXNbaV0pCi0JCQljYW5fY2xvbmUg PSBmYWxzZTsKLQl9Ci0KLQlpZiAoY2FuX2Nsb25lKSB7Ci0JCURSTV9ERUJVR19LTVMoImNhbiBj bG9uZSB1c2luZyAxMDI0eDc2OFxuIik7Ci0JCXJldHVybiB0cnVlOwotCX0KLQlEUk1fSU5GTygi a21zOiBjYW4ndCBlbmFibGUgY2xvbmluZyB3aGVuIHdlIHByb2JhYmx5IHdhbnRlZCB0by5cbiIp OwotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBkcm1fZ2V0X3RpbGVfb2Zmc2V0cyhz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCi0JCQkJdW5zaWduZWQgaW50IGNvbm5l Y3Rvcl9jb3VudCwKLQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJCXN0 cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXRzLAotCQkJCWludCBpZHgsCi0JCQkJaW50IGhfaWR4 LCBpbnQgdl9pZHgpCi17Ci0JaW50IGk7Ci0JaW50IGhvZmZzZXQgPSAwLCB2b2Zmc2V0ID0gMDsK LQotCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsKLQotCQlpZiAoIWNvbm5lY3Rv ci0+aGFzX3RpbGUpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIW1vZGVzW2ldICYmIChoX2lkeCB8 fCB2X2lkeCkpIHsKLQkJCURSTV9ERUJVR19LTVMoIm5vIG1vZGVzIGZvciBjb25uZWN0b3IgdGls ZWQgJWQgJWRcbiIsIGksCi0JCQkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkKTsKLQkJCWNvbnRp bnVlOwotCQl9Ci0JCWlmIChjb25uZWN0b3ItPnRpbGVfaF9sb2MgPCBoX2lkeCkKLQkJCWhvZmZz ZXQgKz0gbW9kZXNbaV0tPmhkaXNwbGF5OwotCi0JCWlmIChjb25uZWN0b3ItPnRpbGVfdl9sb2Mg PCB2X2lkeCkKLQkJCXZvZmZzZXQgKz0gbW9kZXNbaV0tPnZkaXNwbGF5OwotCX0KLQlvZmZzZXRz W2lkeF0ueCA9IGhvZmZzZXQ7Ci0Jb2Zmc2V0c1tpZHhdLnkgPSB2b2Zmc2V0OwotCURSTV9ERUJV R19LTVMoInJldHVybmVkICVkICVkIGZvciAlZCAlZFxuIiwgaG9mZnNldCwgdm9mZnNldCwgaF9p ZHgsIHZfaWR4KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgZHJtX3RhcmdldF9wcmVm ZXJyZWQoc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAotCQkJCSB1bnNpZ25lZCBp bnQgY29ubmVjdG9yX2NvdW50LAotCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVz LAotCQkJCSBzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKLQkJCQkgYm9vbCAqZW5hYmxl ZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotCWNvbnN0IHU2NCBtYXNrID0gQklUX1VMTChj b25uZWN0b3JfY291bnQpIC0gMTsKLQl1NjQgY29ubl9jb25maWd1cmVkID0gMDsKLQlpbnQgdGls ZV9wYXNzID0gMDsKLQlpbnQgaTsKLQotcmV0cnk6Ci0JZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rv cl9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBjb25u ZWN0b3JzW2ldOwotCi0JCWlmIChjb25uX2NvbmZpZ3VyZWQgJiBCSVRfVUxMKGkpKQotCQkJY29u dGludWU7Ci0KLQkJaWYgKGVuYWJsZWRbaV0gPT0gZmFsc2UpIHsKLQkJCWNvbm5fY29uZmlndXJl ZCB8PSBCSVRfVUxMKGkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBmaXJzdCBwYXNzIG92 ZXIgYWxsIHRoZSB1bnRpbGVkIGNvbm5lY3RvcnMgKi8KLQkJaWYgKHRpbGVfcGFzcyA9PSAwICYm IGNvbm5lY3Rvci0+aGFzX3RpbGUpCi0JCQljb250aW51ZTsKLQotCQlpZiAodGlsZV9wYXNzID09 IDEpIHsKLQkJCWlmIChjb25uZWN0b3ItPnRpbGVfaF9sb2MgIT0gMCB8fAotCQkJICAgIGNvbm5l Y3Rvci0+dGlsZV92X2xvYyAhPSAwKQotCQkJCWNvbnRpbnVlOwotCi0JCX0gZWxzZSB7Ci0JCQlp ZiAoY29ubmVjdG9yLT50aWxlX2hfbG9jICE9IHRpbGVfcGFzcyAtIDEgJiYKLQkJCSAgICBjb25u ZWN0b3ItPnRpbGVfdl9sb2MgIT0gdGlsZV9wYXNzIC0gMSkKLQkJCS8qIGlmIHRoaXMgdGlsZV9w YXNzIGRvZXNuJ3QgY292ZXIgYW55IG9mIHRoZSB0aWxlcyAtIGtlZXAgZ29pbmcgKi8KLQkJCQlj b250aW51ZTsKLQotCQkJLyoKLQkJCSAqIGZpbmQgdGhlIHRpbGUgb2Zmc2V0cyBmb3IgdGhpcyBw YXNzIC0gbmVlZCB0byBmaW5kCi0JCQkgKiBhbGwgdGlsZXMgbGVmdCBhbmQgYWJvdmUKLQkJCSAq LwotCQkJZHJtX2dldF90aWxlX29mZnNldHMoY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50LCBt b2Rlcywgb2Zmc2V0cywKLQkJCQkJICAgICBpLCBjb25uZWN0b3ItPnRpbGVfaF9sb2MsIGNvbm5l Y3Rvci0+dGlsZV92X2xvYyk7Ci0JCX0KLQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgY21k bGluZSBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKLQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5p ZCk7Ci0KLQkJLyogZ290IGZvciBjb21tYW5kIGxpbmUgbW9kZSBmaXJzdCAqLwotCQltb2Rlc1tp XSA9IGRybV9jb25uZWN0b3JfcGlja19jbWRsaW5lX21vZGUoY29ubmVjdG9yKTsKLQkJaWYgKCFt b2Rlc1tpXSkgewotCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUg b24gY29ubmVjdG9yICVkICVkXG4iLAotCQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCwgY29u bmVjdG9yLT50aWxlX2dyb3VwID8gY29ubmVjdG9yLT50aWxlX2dyb3VwLT5pZCA6IDApOwotCQkJ bW9kZXNbaV0gPSBkcm1fY29ubmVjdG9yX2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdp ZHRoLCBoZWlnaHQpOwotCQl9Ci0JCS8qIE5vIHByZWZlcnJlZCBtb2RlcywgcGljayBvbmUgb2Zm IHRoZSBsaXN0ICovCi0JCWlmICghbW9kZXNbaV0pCi0JCQltb2Rlc1tpXSA9IGxpc3RfZmlyc3Rf ZW50cnlfb3JfbnVsbCgmY29ubmVjdG9yLT5tb2Rlcywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUs IGhlYWQpOwotCi0JCURSTV9ERUJVR19LTVMoImZvdW5kIG1vZGUgJXNcbiIsIG1vZGVzW2ldID8g bW9kZXNbaV0tPm5hbWUgOgotCQkJICAibm9uZSIpOwotCQljb25uX2NvbmZpZ3VyZWQgfD0gQklU X1VMTChpKTsKLQl9Ci0KLQlpZiAoKGNvbm5fY29uZmlndXJlZCAmIG1hc2spICE9IG1hc2spIHsK LQkJdGlsZV9wYXNzKys7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1z dGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3Bs YXksCi0JCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywKLQkJCSAgdW5zaWdu ZWQgaW50IGNvbm5lY3Rvcl9jb3VudCwKLQkJCSAgc3RydWN0IGRybV9jcnRjICoqYmVzdF9jcnRj cywKLQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKLQkJCSAgaW50IG4sIGlu dCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGlzcGxh eS0+ZGV2OwotCWludCBvLCBteV9zY29yZSwgYmVzdF9zY29yZSwgc2NvcmU7Ci0Jc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MgKmNvbm5lY3Rvcl9mdW5jczsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0 OwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgZHJtX2NydGMgKipjcnRj czsKLQotCWlmIChuID09IGNvbm5lY3Rvcl9jb3VudCkKLQkJcmV0dXJuIDA7Ci0KLQljb25uZWN0 b3IgPSBjb25uZWN0b3JzW25dOwotCi0JYmVzdF9jcnRjc1tuXSA9IE5VTEw7Ci0JYmVzdF9zY29y ZSA9IGRybV9waWNrX2NydGNzKGRpc3BsYXksIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwK LQkJCQkgICAgYmVzdF9jcnRjcywgbW9kZXMsIG4gKyAxLCB3aWR0aCwgaGVpZ2h0KTsKLQlpZiAo bW9kZXNbbl0gPT0gTlVMTCkKLQkJcmV0dXJuIGJlc3Rfc2NvcmU7Ci0KLQljcnRjcyA9IGtjYWxs b2MoY29ubmVjdG9yX2NvdW50LCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFj cnRjcykKLQkJcmV0dXJuIGJlc3Rfc2NvcmU7Ci0KLQlteV9zY29yZSA9IDE7Ci0JaWYgKGNvbm5l Y3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQotCQlteV9zY29yZSsr OwotCWlmIChjb25uZWN0b3ItPmNtZGxpbmVfbW9kZS5zcGVjaWZpZWQpCi0JCW15X3Njb3JlKys7 Ci0JaWYgKGRybV9jb25uZWN0b3JfaGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgs IGhlaWdodCkpCi0JCW15X3Njb3JlKys7Ci0KLQljb25uZWN0b3JfZnVuY3MgPSBjb25uZWN0b3It PmhlbHBlcl9wcml2YXRlOwotCi0JLyoKLQkgKiBJZiB0aGUgRFJNIGRldmljZSBpbXBsZW1lbnRz IGF0b21pYyBob29rcyBhbmQgLT5iZXN0X2VuY29kZXIoKSBpcwotCSAqIE5VTEwgd2UgZmFsbGJh Y2sgdG8gdGhlIGRlZmF1bHQgZHJtX2F0b21pY19oZWxwZXJfYmVzdF9lbmNvZGVyKCkKLQkgKiBo ZWxwZXIuCi0JICovCi0JaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChkZXYpICYmCi0J ICAgICFjb25uZWN0b3JfZnVuY3MtPmJlc3RfZW5jb2RlcikKLQkJZW5jb2RlciA9IGRybV9hdG9t aWNfaGVscGVyX2Jlc3RfZW5jb2Rlcihjb25uZWN0b3IpOwotCWVsc2UKLQkJZW5jb2RlciA9IGNv bm5lY3Rvcl9mdW5jcy0+YmVzdF9lbmNvZGVyKGNvbm5lY3Rvcik7Ci0KLQlpZiAoIWVuY29kZXIp Ci0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBzZWxlY3QgYSBjcnRjIGZvciB0aGlzIGNvbm5lY3Rv ciBhbmQgdGhlbiBhdHRlbXB0IHRvIGNvbmZpZ3VyZQotCSAqIHJlbWFpbmluZyBjb25uZWN0b3Jz Ci0JICovCi0JZHJtX2NsaWVudF9kaXNwbGF5X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgZGlz cGxheSkgewotCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBtb2Rlc2V0LT5jcnRjOwotCi0JCWlm ICgoZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgJiBkcm1fY3J0Y19tYXNrKGNydGMpKSA9PSAwKQot CQkJY29udGludWU7Ci0KLQkJZm9yIChvID0gMDsgbyA8IG47IG8rKykKLQkJCWlmIChiZXN0X2Ny dGNzW29dID09IGNydGMpCi0JCQkJYnJlYWs7Ci0KLQkJaWYgKG8gPCBuKSB7Ci0JCQkvKiBpZ25v cmUgY2xvbmluZyB1bmxlc3Mgb25seSBhIHNpbmdsZSBjcnRjICovCi0JCQlpZiAoZGV2LT5tb2Rl X2NvbmZpZy5udW1fY3J0YyA+IDEpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICghZHJtX21vZGVf ZXF1YWwobW9kZXNbb10sIG1vZGVzW25dKSkKLQkJCQljb250aW51ZTsKLQkJfQotCi0JCWNydGNz W25dID0gY3J0YzsKLQkJbWVtY3B5KGNydGNzLCBiZXN0X2NydGNzLCBuICogc2l6ZW9mKCpjcnRj cykpOwotCQlzY29yZSA9IG15X3Njb3JlICsgZHJtX3BpY2tfY3J0Y3MoZGlzcGxheSwgY29ubmVj dG9ycywgY29ubmVjdG9yX2NvdW50LAotCQkJCQkJICBjcnRjcywgbW9kZXMsIG4gKyAxLCB3aWR0 aCwgaGVpZ2h0KTsKLQkJaWYgKHNjb3JlID4gYmVzdF9zY29yZSkgewotCQkJYmVzdF9zY29yZSA9 IHNjb3JlOwotCQkJbWVtY3B5KGJlc3RfY3J0Y3MsIGNydGNzLAotCQkJICAgICAgIGNvbm5lY3Rv cl9jb3VudCAqIHNpemVvZigqY3J0Y3MpKTsKLQkJfQotCX0KLW91dDoKLQlrZnJlZShjcnRjcyk7 Ci0JcmV0dXJuIGJlc3Rfc2NvcmU7Ci19Ci0KIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQkJICAgIHUzMiB3aWR0aCwgdTMyIGhl aWdodCkKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CiAJc3Ry dWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq KmNvbm5lY3RvcnM7Ci0Jc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlczsKLQlzdHJ1Y3Qg ZHJtX2ZiX29mZnNldCAqb2Zmc2V0czsKLQlzdHJ1Y3QgZHJtX2NydGMgKipjcnRjczsKLQlpbnQg aSwgY29ubmVjdG9yX2NvdW50OwotCWJvb2wgKmVuYWJsZWQ7CiAKLQlEUk1fREVCVUdfS01TKCJc biIpOwotCS8qIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gb2YgY29ubmVjdG9yX2Nv dW50IGJ5IGhvdHBsdWcgKi8KIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZmYl9oZWxwZXItPmxvY2sp OwogCi0JbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JaWYgKGRybV9mYl9o ZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzKGZiX2hlbHBlciwgd2lkdGgsIGhlaWdodCkgPT0g MCkKLQkJRFJNX0RFQlVHX0tNUygiTm8gY29ubmVjdG9ycyByZXBvcnRlZCBjb25uZWN0ZWQgd2l0 aCBtb2Rlc1xuIik7Ci0KLQlpZiAoZGV2LT5kcml2ZXItPmluaXRpYWxfY2xpZW50X2Rpc3BsYXkp IHsKLQkJZGlzcGxheSA9IGRldi0+ZHJpdmVyLT5pbml0aWFsX2NsaWVudF9kaXNwbGF5KGRldiwg d2lkdGgsIGhlaWdodCk7Ci0JCWlmIChkaXNwbGF5KSB7Ci0JCQlkcm1fY2xpZW50X2Rpc3BsYXlf ZnJlZShmYl9oZWxwZXItPmRpc3BsYXkpOwotCQkJZmJfaGVscGVyLT5kaXNwbGF5ID0gZGlzcGxh eTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCQlyZXR1cm47 Ci0JCX0KLQl9Ci0KLQljb25uZWN0b3JfY291bnQgPSBkcm1fY29ubmVjdG9yX2dldF9hbGwoZGV2 LCAmY29ubmVjdG9ycyk7Ci0JaWYgKGNvbm5lY3Rvcl9jb3VudCA8IDEpCisJZGlzcGxheSA9IGRy bV9jbGllbnRfZmluZF9kaXNwbGF5KGZiX2hlbHBlci0+ZGV2LCB3aWR0aCwgaGVpZ2h0KTsKKwlp ZiAoSVNfRVJSX09SX05VTEwoZGlzcGxheSkpCiAJCXJldHVybjsKIAotCWVuYWJsZWQgPSBkcm1f Y29ubmVjdG9yX2dldF9lbmFibGVkX3N0YXR1cyhjb25uZWN0b3JzLCBjb25uZWN0b3JfY291bnQp OwotCWNydGNzID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZigqY3J0Y3MpLCBHRlBf S0VSTkVMKTsKLQltb2RlcyA9IGtjYWxsb2MoY29ubmVjdG9yX2NvdW50LCBzaXplb2YoKm1vZGVz KSwgR0ZQX0tFUk5FTCk7Ci0Jb2Zmc2V0cyA9IGtjYWxsb2MoY29ubmVjdG9yX2NvdW50LCBzaXpl b2YoKm9mZnNldHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNydGNzIHx8ICFtb2RlcyB8fCAhZW5h YmxlZCB8fCAhb2Zmc2V0cykgewotCQlEUk1fRVJST1IoIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxl ZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRpc3BsYXkgPSBkcm1fY2xpZW50X2Rpc3BsYXlf Y3JlYXRlKGRldik7Ci0JaWYgKElTX0VSUihkaXNwbGF5KSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAo IWRybV90YXJnZXRfY2xvbmVkKGZiX2hlbHBlciwgY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50 LAotCQkJICAgICAgIG1vZGVzLCBvZmZzZXRzLCBlbmFibGVkLCB3aWR0aCwgaGVpZ2h0KSAmJgot CSAgICAhZHJtX3RhcmdldF9wcmVmZXJyZWQoY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50LAot CQkJCSAgbW9kZXMsIG9mZnNldHMsIGVuYWJsZWQsIHdpZHRoLCBoZWlnaHQpKQotCQlEUk1fRVJS T1IoIlVuYWJsZSB0byBmaW5kIGluaXRpYWwgbW9kZXNcbiIpOwotCi0JRFJNX0RFQlVHX0tNUygi cGlja2luZyBDUlRDcyBmb3IgJWR4JWQgY29uZmlnXG4iLCB3aWR0aCwgaGVpZ2h0KTsKLQotCWRy bV9waWNrX2NydGNzKGRpc3BsYXksIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwgY3J0Y3Ms IG1vZGVzLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLQotCS8qIG5lZWQgdG8gc2V0IHRoZSBtb2Rlc2V0 cyB1cCBoZXJlIGZvciB1c2UgbGF0ZXIgKi8KLQkvKiBmaWxsIG91dCB0aGUgY29ubmVjdG9yPC0+ Y3J0YyBtYXBwaW5ncyBpbnRvIHRoZSBtb2Rlc2V0cyAqLwotCi0JZm9yIChpID0gMDsgaSA8IGNv bm5lY3Rvcl9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ig PSBjb25uZWN0b3JzW2ldOwotCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IG1vZGVz W2ldOwotCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBjcnRjc1tpXTsKLQkJc3RydWN0IGRybV9m Yl9vZmZzZXQgKm9mZnNldCA9ICZvZmZzZXRzW2ldOwotCi0JCWlmIChtb2RlICYmIGNydGMpIHsK LQkJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Ci0KLQkJCW1vZGVzZXQgPSBkcm1fY2xp ZW50X2Rpc3BsYXlfZmluZF9tb2Rlc2V0KGRpc3BsYXksIGNydGMpOwotCQkJaWYgKFdBUk5fT04o IW1vZGVzZXQpKSB7Ci0JCQkJZHJtX2NsaWVudF9kaXNwbGF5X2ZyZWUoZGlzcGxheSk7Ci0JCQkJ Z290byBvdXQ7Ci0JCQl9Ci0KLQkJCURSTV9ERUJVR19LTVMoImRlc2lyZWQgbW9kZSAlcyBzZXQg b24gY3J0YyAlZCAoJWQsJWQpXG4iLAotCQkJCSAgICAgIG1vZGUtPm5hbWUsIG1vZGVzZXQtPmNy dGMtPmJhc2UuaWQsIG9mZnNldC0+eCwgb2Zmc2V0LT55KTsKLQotCQkJbW9kZXNldC0+bW9kZSA9 IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwotCQkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29u bmVjdG9yKTsKLQkJCW1vZGVzZXQtPmNvbm5lY3RvcnNbbW9kZXNldC0+bnVtX2Nvbm5lY3RvcnMr K10gPSBjb25uZWN0b3I7Ci0JCQltb2Rlc2V0LT54ID0gb2Zmc2V0LT54OwotCQkJbW9kZXNldC0+ eSA9IG9mZnNldC0+eTsKLQkJfQotCX0KLQogCWRybV9jbGllbnRfZGlzcGxheV9mcmVlKGZiX2hl bHBlci0+ZGlzcGxheSk7CiAJZmJfaGVscGVyLT5kaXNwbGF5ID0gZGlzcGxheTsKLW91dDoKLQlt dXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCWRybV9jb25uZWN0b3JfcHV0 X2FsbChjb25uZWN0b3JzLCBjb25uZWN0b3JfY291bnQpOwotCWtmcmVlKGNydGNzKTsKLQlrZnJl ZShtb2Rlcyk7Ci0Ja2ZyZWUob2Zmc2V0cyk7Ci0Ja2ZyZWUoZW5hYmxlZCk7CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmggYi9pbmNsdWRlL2RybS9kcm1fY2xp ZW50LmgKaW5kZXggZWQwMjhmNTg3N2QwLi4yN2QyYTQ2Y2Q5NGEgMTAwNjQ0Ci0tLSBhL2luY2x1 ZGUvZHJtL2RybV9jbGllbnQuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmgKQEAgLTQ4 LDUgKzQ4LDcgQEAgYm9vbCBkcm1fY2xpZW50X2Rpc3BsYXlfcGFuZWxfcm90YXRpb24oc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpyb3Rh dGlvbik7CiBpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3Jlc3RvcmUoc3RydWN0IGRybV9jbGllbnRf ZGlzcGxheSAqZGlzcGxheSk7CiB2b2lkIGRybV9jbGllbnRfZGlzcGxheV9kcG1zKHN0cnVjdCBk cm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksIGludCBtb2RlKTsKK3N0cnVjdCBkcm1fY2xpZW50 X2Rpc3BsYXkgKgorZHJtX2NsaWVudF9maW5kX2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KTsKIAogI2VuZGlmCmRp ZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1f ZmJfaGVscGVyLmgKaW5kZXggYTFlMWFiMTI0N2M1Li41ZjY2ZjI1M2E5N2IgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZmJfaGVs cGVyLmgKQEAgLTQxLDEwICs0MSw2IEBAIGVudW0gbW9kZV9zZXRfYXRvbWljIHsKIAlFTlRFUl9B VE9NSUNfTU9ERV9TRVQsCiB9OwogCi1zdHJ1Y3QgZHJtX2ZiX29mZnNldCB7Ci0JaW50IHgsIHk7 Ci19OwotCiAvKioKICAqIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAtIGRlc2Ny aWJlcyBmYmRldiBzaXplIGFuZCBzY2Fub3V0IHN1cmZhY2Ugc2l6ZQogICogQGZiX3dpZHRoOiBm YmRldiB3aWR0aAotLSAKMi4xNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK