From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyungwon Hwang Subject: [PATCH v3 2/3] modetest: add atomic modeset support Date: Wed, 23 Sep 2015 11:45:13 +0900 Message-ID: <1442976314-5792-2-git-send-email-human.hwang@samsung.com> References: <1442976314-5792-1-git-send-email-human.hwang@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by gabe.freedesktop.org (Postfix) with ESMTPS id 323A26EBBA for ; Tue, 22 Sep 2015 19:45:23 -0700 (PDT) Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NV301F57ZNKWI90@mailout2.samsung.com> for dri-devel@lists.freedesktop.org; Wed, 23 Sep 2015 11:45:20 +0900 (KST) In-reply-to: <1442976314-5792-1-git-send-email-human.hwang@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, ppaalanen@gmail.com, emil.l.velikov@gmail.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBtb2Rlc2V0LiBVc2luZyAtYSBvcHRp b24sIHVzZXIgY2FuCm1ha2UgbW9kZXNldCB0byB1c2UgRFJNX0lPQ1RMX01PREVfQVRPTUlDIGlu c3RlYWQgb2YgbGVnYWN5IElPQ1RMcy4KQWxzbywgYnkgdXNpbmcgLXcgb3B0aW9uLCB1c2VyIGNh biBzZXQgdGhlIHByb3BlcnR5IGFzIGJlZm9yZS4KClNpZ25lZC1vZmYtYnk6IEh5dW5nd29uIEh3 YW5nIDxodW1hbi5od2FuZ0BzYW1zdW5nLmNvbT4KLS0tCiB0ZXN0cy9tb2RldGVzdC9tb2RldGVz dC5jIHwgMjczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0K IDEgZmlsZSBjaGFuZ2VkLCAyNjUgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS90ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jIGIvdGVzdHMvbW9kZXRlc3QvbW9kZXRl c3QuYwppbmRleCAwOGVjZjU4Li5iYzVhMjI3IDEwMDY0NAotLS0gYS90ZXN0cy9tb2RldGVzdC9t b2RldGVzdC5jCisrKyBiL3Rlc3RzL21vZGV0ZXN0L21vZGV0ZXN0LmMKQEAgLTE0NzcsMjUgKzE0 NzcsMzIgQEAgc3RhdGljIGludCBwYXJzZV9wcm9wZXJ0eShzdHJ1Y3QgcHJvcGVydHlfYXJnICpw LCBjb25zdCBjaGFyICphcmcpCgogc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqbmFtZSkKIHsKLQlm cHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyBbLWNEZGVmTVBwc0N2d11cbiIsIG5hbWUpOworCWZw cmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIFstYWNEZGVmTVBwc0N2d11cbiIsIG5hbWUpOworCWZw cmludGYoc3RkZXJyLCAiXHRBOiBzdXBwb3J0ZWQgaW4gYXRvbWljIG1vZGVzZXRcbiIpOworCWZw cmludGYoc3RkZXJyLCAiXHRMOiBzdXBwb3J0ZWQgaW4gbGVnYWN5IG1vZGVzZXRcbiIpOwoKLQlm cHJpbnRmKHN0ZGVyciwgIlxuIFF1ZXJ5IG9wdGlvbnM6XG5cbiIpOworCWZwcmludGYoc3RkZXJy LCAiXG4gUXVlcnkgb3B0aW9uczogW0FMXVxuXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LWNc dGxpc3QgY29ubmVjdG9yc1xuIik7CiAJZnByaW50ZihzdGRlcnIsICJcdC1lXHRsaXN0IGVuY29k ZXJzXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LWZcdGxpc3QgZnJhbWVidWZmZXJzXG4iKTsK IAlmcHJpbnRmKHN0ZGVyciwgIlx0LXBcdGxpc3QgQ1JUQ3MgYW5kIHBsYW5lcyAocGlwZXMpXG4i KTsKCi0JZnByaW50ZihzdGRlcnIsICJcbiBUZXN0IG9wdGlvbnM6XG5cbiIpOworCWZwcmludGYo c3RkZXJyLCAiXG4gQ29tbW9uIFRlc3Qgb3B0aW9uczogW0FMXVxuXG4iKTsKKwlmcHJpbnRmKHN0 ZGVyciwgIlx0LXcgPG9ial9pZD46PHByb3BfbmFtZT46PHZhbHVlPlx0c2V0IHByb3BlcnR5XG4i KTsKKworCWZwcmludGYoc3RkZXJyLCAiXG4gQXRvbWljIFRlc3Qgb3B0aW9uczogW0FdXG5cbiIp OworCWZwcmludGYoc3RkZXJyLCAiXHQtYVx0dXNlIGF0b21pYyBtb2Rlc2V0XG4iKTsKKworCWZw cmludGYoc3RkZXJyLCAiXG4gTGVnYWN5IHRlc3Qgb3B0aW9uczogW0xdXG5cbiIpOwogCWZwcmlu dGYoc3RkZXJyLCAiXHQtUCA8Y3J0Y19pZD46PHc+eDxoPlsrPHg+Kzx5Pl1bKjxzY2FsZT5dW0A8 Zm9ybWF0Pl1cdHNldCBhIHBsYW5lXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIlx0LXMgPGNvbm5l Y3Rvcl9pZD5bLDxjb25uZWN0b3JfaWQ+XVtAPGNydGNfaWQ+XTo8bW9kZT5bLTx2cmVmcmVzaD5d W0A8Zm9ybWF0Pl1cdHNldCBhIG1vZGVcbiIpOwogCWZwcmludGYoc3RkZXJyLCAiXHQtQ1x0dGVz dCBodyBjdXJzb3JcbiIpOwogCWZwcmludGYoc3RkZXJyLCAiXHQtdlx0dGVzdCB2c3luY2VkIHBh Z2UgZmxpcHBpbmdcbiIpOwotCWZwcmludGYoc3RkZXJyLCAiXHQtdyA8b2JqX2lkPjo8cHJvcF9u YW1lPjo8dmFsdWU+XHRzZXQgcHJvcGVydHlcbiIpOwoKIAlmcHJpbnRmKHN0ZGVyciwgIlxuIEdl bmVyaWMgb3B0aW9uczpcblxuIik7Ci0JZnByaW50ZihzdGRlcnIsICJcdC1kXHRkcm9wIG1hc3Rl ciBhZnRlciBtb2RlIHNldFxuIik7Ci0JZnByaW50ZihzdGRlcnIsICJcdC1NIG1vZHVsZVx0dXNl IHRoZSBnaXZlbiBkcml2ZXJcbiIpOwotCWZwcmludGYoc3RkZXJyLCAiXHQtRCBkZXZpY2VcdHVz ZSB0aGUgZ2l2ZW4gZGV2aWNlXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LWRcdGRyb3AgbWFz dGVyIGFmdGVyIG1vZGUgc2V0IFtMXVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdC1NIG1vZHVs ZVx0dXNlIHRoZSBnaXZlbiBkcml2ZXIgW0FMXVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdC1E IGRldmljZVx0dXNlIHRoZSBnaXZlbiBkZXZpY2UgW0FMXVxuIik7CgogCWZwcmludGYoc3RkZXJy LCAiXG5cdERlZmF1bHQgaXMgdG8gZHVtcCBhbGwgaW5mby5cbiIpOwogCWV4aXQoMCk7CkBAIC0x NTU0LDcgKzE1NjEsMjI0IEBAIHN0YXRpYyBpbnQgcGlwZV9yZXNvbHZlX2Nvbm5lY3RvcnMoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGlwZV9hcmcgKnBpcGUpCiAJcmV0dXJuIDA7CiB9Cgot c3RhdGljIGNoYXIgb3B0c3RyW10gPSAiY2REOmVmTTpQOnBzOkN2dzoiOworc3RhdGljIGJvb2wg aXNfb2JqX2lkX2luX3Byb3BfYXJncyhzdHJ1Y3QgcHJvcGVydHlfYXJnICpwcm9wX2FyZ3MsCisJ CQkJdW5zaWduZWQgaW50IHByb3BfY291bnQsIHVpbnQzMl90IG9ial9pZCkKK3sKKwl1bnNpZ25l ZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwcm9wX2NvdW50OyBpKyspCisJCWlmIChvYmpf aWQgPT0gcHJvcF9hcmdzW2ldLm9ial9pZCkKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZh bHNlOworfQorCitzdGF0aWMgaW50IGdldF92YWx1ZV9pbl9wcm9wX2FyZ3Moc3RydWN0IHByb3Bl cnR5X2FyZyAqcHJvcF9hcmdzLAorCQkJdW5zaWduZWQgaW50IHByb3BfY291bnQsIHVpbnQzMl90 IG9ial9pZCwKKwkJCWNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ2NF90ICpvdXQpCit7CisJdW5zaWdu ZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJvcF9jb3VudDsgaSsrKSB7CisJCWlmIChw cm9wX2FyZ3NbaV0ub2JqX2lkID09IG9ial9pZCAmJgorCQkgICAgIXN0cmNtcChwcm9wX2FyZ3Nb aV0ubmFtZSwgbmFtZSkpIHsKKwkJCSpvdXQgPSBwcm9wX2FyZ3NbaV0udmFsdWU7CisJCQlyZXR1 cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHVpbnQzMl90IGdldF9w bGFuZV9wcm9wX2lkKHN0cnVjdCByZXNvdXJjZXMgKnJlcywgdWludDMyX3Qgb2JqX2lkLAorCQkJ CQkJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJZHJtTW9kZVByb3BlcnR5UmVzICpwcm9wc19pbmZv OworCXN0cnVjdCBwbGFuZSAqcGxhbmU7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlmb3IgKGkg PSAwOyBpIDwgcmVzLT5wbGFuZV9yZXMtPmNvdW50X3BsYW5lczsgaSsrKSB7CisJCXBsYW5lID0g JnJlcy0+cGxhbmVzW2ldOworCQlpZiAocGxhbmUtPnBsYW5lLT5wbGFuZV9pZCAhPSBvYmpfaWQp CisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgcGxhbmUtPnByb3BzLT5jb3VudF9w cm9wczsgaisrKSB7CisJCQlwcm9wc19pbmZvID0gcGxhbmUtPnByb3BzX2luZm9bal07CisJCQlp ZiAoIXN0cmNtcChwcm9wc19pbmZvLT5uYW1lLCBuYW1lKSkKKwkJCQlyZXR1cm4gcHJvcHNfaW5m by0+cHJvcF9pZDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9j YXRlX2ZiKGludCBmZCwgZHJtTW9kZUF0b21pY1JlcVB0ciByZXEsIHN0cnVjdCByZXNvdXJjZXMg KnJlcywKKwkJCXVpbnQzMl90IHdpZHRoLAl1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHBpeGVs X2Zvcm1hdCwKKwkJCWludCBwYXR0ZXJuLCBzdHJ1Y3QgYm8gKipibywgdWludDMyX3QgKmZiX2lk KQoreworCXVpbnQzMl90IGhhbmRsZXNbNF0gPSB7MH0sIHBpdGNoZXNbNF0gPSB7MH0sIG9mZnNl dHNbNF0gPSB7MH07CisJaW50IHJldDsKKworCSpibyA9IGJvX2NyZWF0ZShmZCwgcGl4ZWxfZm9y bWF0LCB3aWR0aCwgaGVpZ2h0LAorCQkJaGFuZGxlcywgcGl0Y2hlcywgb2Zmc2V0cywgcGF0dGVy bik7CisJaWYgKCpibyA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGNy ZWF0ZSBibyAoJXV4JXUpOiAlc1xuIiwKKwkJCQl3aWR0aCwgaGVpZ2h0LCBzdHJlcnJvcihlcnJu bykpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gZHJtTW9kZUFkZEZCMihmZCwgd2lkdGgs IGhlaWdodCwgcGl4ZWxfZm9ybWF0LAorCQkJaGFuZGxlcywgcGl0Y2hlcywgb2Zmc2V0cywgZmJf aWQsIDApOworCWlmIChyZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYWRkIGZi ICgldXgldSk6ICVzXG4iLAorCQkJCXdpZHRoLCBoZWlnaHQsIHN0cmVycm9yKGVycm5vKSk7CisJ CWJvX2Rlc3Ryb3koKmJvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBhbGxvY2F0ZV9mYnMoc3RydWN0IGRldmljZSAqZGV2LCBkcm1Nb2RlQXRvbWlj UmVxUHRyIHJlcSwKKwkJCXN0cnVjdCByZXNvdXJjZXMgKnJlcywgc3RydWN0IHByb3BlcnR5X2Fy ZyAqcHJvcF9hcmdzLAorCQkJdW5zaWduZWQgaW50IHByb3BfY291bnQsIHN0cnVjdCBibyAqKmJv LCB1aW50MzJfdCAqZmJfaWQpCit7CisJdWludDMyX3QgcGxhbmVfaWQsIGZiX29ial9pZCwgcGl4 ZWxfZm9ybWF0OworCXVpbnQ2NF90IHdpZHRoLCBoZWlnaHQ7CisJaW50IHJldCA9IDAsIGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgKGludClyZXMtPnBsYW5lX3Jlcy0+Y291bnRfcGxhbmVzOyBpKysp IHsKKwkJcGxhbmVfaWQgPSByZXMtPnBsYW5lc1tpXS5wbGFuZS0+cGxhbmVfaWQ7CisJCWlmICgh aXNfb2JqX2lkX2luX3Byb3BfYXJncyhwcm9wX2FyZ3MsIHByb3BfY291bnQsIHBsYW5lX2lkKSkK KwkJCWNvbnRpbnVlOworCisJCWZiX29ial9pZCA9IGdldF9wbGFuZV9wcm9wX2lkKHJlcywgcGxh bmVfaWQsICJGQl9JRCIpOworCQlpZiAoIWZiX29ial9pZCkgeworCQkJZnByaW50ZihzdGRlcnIs ICJwbGFuZSgldSkgZG9lcyBub3QgZXhpc3RcbiIsIHBsYW5lX2lkKTsKKwkJCWdvdG8gZXJyOwor CQl9CisKKwkJcmV0ID0gZ2V0X3ZhbHVlX2luX3Byb3BfYXJncyhwcm9wX2FyZ3MsIHByb3BfY291 bnQsIHBsYW5lX2lkLAorCQkJCQkJCQkiU1JDX1ciLCAmd2lkdGgpOworCQlpZiAocmV0IDwgMCkg eworCQkJZnByaW50ZihzdGRlcnIsICJTUkNfVyBmb3IgcGxhbmUgKCV1KSBtdXN0IGJlIHNldFxu IiwgcGxhbmVfaWQpOworCQkJZ290byBlcnI7CisJCX0KKworCQlyZXQgPSBnZXRfdmFsdWVfaW5f cHJvcF9hcmdzKHByb3BfYXJncywgcHJvcF9jb3VudCwgcGxhbmVfaWQsCisJCQkJCQkJCSJTUkNf SCIsICZoZWlnaHQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJTUkNf SCBmb3IgcGxhbmUgKCV1KSBtdXN0IGJlIHNldFxuIiwgcGxhbmVfaWQpOworCQkJZ290byBlcnI7 CisJCX0KKworCQlwaXhlbF9mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4OworCisJCXJldCA9 IGFsbG9jYXRlX2ZiKGRldi0+ZmQsIHJlcSwgcmVzLCB3aWR0aCwgaGVpZ2h0LCBwaXhlbF9mb3Jt YXQsCisJCQkJCQlQQVRURVJOX1NNUFRFLCAmYm9baV0sICZmYl9pZFtpXSk7CisJCWlmIChyZXQg PCAwKQorCQkJZ290byBlcnI7CisKKwkJcmV0ID0gZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJl cSwgcGxhbmVfaWQsIGZiX29ial9pZCwgZmJfaWRbaV0pOworCQlpZiAocmV0IDwgMCkgeworCQkJ ZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYWRkIGF0b21pYyBwcm9wZXJ0eSBmb3IgYXRvbWlj IG1vZGVzZXRcbiIpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJy OgorCXdoaWxlIChpID4gLTEpIHsKKwkJaWYgKCFmYl9pZFtpXSkKKwkJCWNvbnRpbnVlOworCisJ CWRybU1vZGVSbUZCKGRldi0+ZmQsIGZiX2lkW2ldKTsKKwkJYm9fZGVzdHJveShib1tpXSk7CisJ CWktLTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkZWFsbG9jYXRlX2Zi cyhpbnQgZmQsIGludCBudW1fcGxhbmVzLCB1aW50MzJfdCAqZmJfaWQsIHN0cnVjdCBibyAqKmJv KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgeworCQlp ZiAoIWZiX2lkW2ldKQorCQkJY29udGludWU7CisKKwkJZHJtTW9kZVJtRkIoZmQsIGZiX2lkW2ld KTsKKwkJYm9fZGVzdHJveShib1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IGF0b21pY19tb2Rl c2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgZHJtTW9kZUF0b21pY1JlcVB0ciByZXEsCisJCQlzdHJ1 Y3QgcHJvcGVydHlfYXJnICpwcm9wX2FyZ3MsIHVuc2lnbmVkIGludCBwcm9wX2NvdW50KQorewor CXVuc2lnbmVkIGludCBudW1fcGxhbmVzOworCWNvbnN0IGNoYXIgKm9ial90eXBlID0gTlVMTDsK Kwl1aW50MzJfdCBmbGFncyA9IDA7CisJdWludDMyX3QgKmZiX2lkOworCXN0cnVjdCBibyAqKmJv OworCWludCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyAodW5zaWduZWQgaW50KWkgPCBwcm9wX2Nv dW50OyArK2kpIHsKKwkJcmV0ID0gZ2V0X3Byb3BfaW5mbyhkZXYtPnJlc291cmNlcywgJnByb3Bf YXJnc1tpXSwgb2JqX3R5cGUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJ cmV0ID0gZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJlcSwgcHJvcF9hcmdzW2ldLm9ial9pZCwK KwkJCQlwcm9wX2FyZ3NbaV0ucHJvcF9pZCwgcHJvcF9hcmdzW2ldLnZhbHVlKTsKKwkJaWYgKHJl dCA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGFkZCBwcm9wZXJ0eSBmb3Ig YXRvbWljIG1vZGVzZXQgKCVkKVxuIiwKKwkJCQkJcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0K Kwl9CisKKwludW1fcGxhbmVzID0gZGV2LT5yZXNvdXJjZXMtPnBsYW5lX3Jlcy0+Y291bnRfcGxh bmVzOworCisJYm8gPSBjYWxsb2MobnVtX3BsYW5lcywgc2l6ZW9mKCpibykpOworCWlmICghYm8p IHsKKwkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvIGJvIGFy cmF5XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZiX2lkID0gY2FsbG9jKG51bV9wbGFuZXMs IHNpemVvZigqZmJfaWQpKTsKKwlpZiAoIWZiX2lkKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZmFp bGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmbyBmYl9pZCBhcnJheVxuIik7CisJCWZyZWUoYm8pOwor CQlyZXR1cm4gLTE7CisJfQorCisJcmV0ID0gYWxsb2NhdGVfZmJzKGRldiwgcmVxLCBkZXYtPnJl c291cmNlcywgcHJvcF9hcmdzLCBwcm9wX2NvdW50LCBibywgZmJfaWQpOworCWlmIChyZXQgPCAw KSB7CisJCWZyZWUoZmJfaWQpOworCQlmcmVlKGJvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXQgPSBkcm1Nb2RlQXRvbWljQ29tbWl0KGRldi0+ZmQsIHJlcSwgZmxhZ3MsIE5VTEwpOworCWlm IChyZXQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGNvbW1pdCBmb3IgYXRv bWljIG1vZGVzZXRcbiIpOworCQlkZWFsbG9jYXRlX2ZicyhkZXYtPmZkLCBudW1fcGxhbmVzLCBm Yl9pZCwgYm8pOworCQlmcmVlKGZiX2lkKTsKKwkJZnJlZShibyk7CisJCXJldHVybiByZXQ7CisJ fQorCisJZ2V0Y2hhcigpOworCisJZGVhbGxvY2F0ZV9mYnMoZGV2LT5mZCwgbnVtX3BsYW5lcywg ZmJfaWQsIGJvKTsKKwlmcmVlKGZiX2lkKTsKKwlmcmVlKGJvKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgY2hhciBvcHRzdHJbXSA9ICJhY2REOmVmTTpQOnBzOkN2dzoiOwoKIGludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKQEAgLTE1NzQsNiArMTc5OCw4IEBAIGludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzdHJ1Y3QgcGlwZV9hcmcgKnBpcGVfYXJncyA9IE5V TEw7CiAJc3RydWN0IHBsYW5lX2FyZyAqcGxhbmVfYXJncyA9IE5VTEw7CiAJc3RydWN0IHByb3Bl cnR5X2FyZyAqcHJvcF9hcmdzID0gTlVMTDsKKwlkcm1Nb2RlQXRvbWljUmVxUHRyIHJlcSA9IE5V TEw7CisJYm9vbCBpc19hdG9taWMgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgYXJncyA9IDA7CiAJ aW50IHJldDsKCkBAIC0xNTg0LDYgKzE4MTAsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogCQlhcmdzKys7CgogCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnYSc6CisJCQlpc19h dG9taWMgPSB0cnVlOworCQkJYXJncy0tOworCQkJYnJlYWs7CiAJCWNhc2UgJ2MnOgogCQkJY29u bmVjdG9ycyA9IDE7CiAJCQlicmVhazsKQEAgLTE3MDUsNiArMTkzNSwyMiBAQCBpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXJldHVybiAtMTsKIAl9CgorCWlmIChpc19hdG9taWMp IHsKKwkJcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7CisJCWlmIChyZXEgPT0gTlVMTCkgewor CQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJtTW9kZUF0b21pY1JlcVB0 clxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCXJldCA9IGRybVNldENsaWVudENhcChkZXYu ZmQsIERSTV9DTElFTlRfQ0FQX0FUT01JQywgMSk7CisJCWlmIChyZXQpIHsKKwkJCWZwcmludGYo c3RkZXJyLCAiS2VybmVsIERSTSBkcml2ZXIgaXMgbm90IGNhcGFibGUgb2YgYXRvbWljIG1vZGVz ZXRcbiIpOworCQkJZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKworCQkJcmV0dXJuIDE7CisJCX0K Kwl9CisKIAlkZXYucmVzb3VyY2VzID0gZ2V0X3Jlc291cmNlcygmZGV2KTsKIAlpZiAoIWRldi5y ZXNvdXJjZXMpIHsKIAkJZHJtQ2xvc2UoZGV2LmZkKTsKQEAgLTE3MjcsNiArMTk3MywxNyBAQCBp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJZHVtcF9yZXNvdXJjZSgmZGV2LCBwbGFu ZXMpOwogCWR1bXBfcmVzb3VyY2UoJmRldiwgZnJhbWVidWZmZXJzKTsKCisJaWYgKGlzX2F0b21p YykgeworCQlyZXQgPSBhdG9taWNfbW9kZXNldCgmZGV2LCByZXEsIHByb3BfYXJncywgcHJvcF9j b3VudCk7CisJCWlmIChyZXQgPCAwKQorCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYXRv bWljIG1vZGVzZXQgKCVzKVxuIiwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKworCQlmcmVlX3Jl c291cmNlcyhkZXYucmVzb3VyY2VzKTsKKwkJZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgcHJvcF9jb3VudDsgKytpKQogCQlzZXRf cHJvcGVydHkoJmRldiwgJnByb3BfYXJnc1tpXSk7CgotLQoyLjQuMwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK