From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyungwon Hwang Subject: [PATCH v3 3/3] modetest: add atomic page flip support Date: Wed, 23 Sep 2015 11:45:14 +0900 Message-ID: <1442976314-5792-3-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 mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by gabe.freedesktop.org (Postfix) with ESMTPS id A9DA66EBB8 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 mailout3.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NV302254ZNK4T10@mailout3.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 VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGF0b21pYyBwYWdlIGZsaXAuIFVzZXIgY2FuIHNw ZWNpZnkgLVYgb3B0aW9uCndpdGggdGhlIHBsYW5lIGlkIGZvciB0ZXN0aW5nIGF0b21pYyBwYWdl IGZsaXBwaW5nLgoKU2lnbmVkLW9mZi1ieTogSHl1bmd3b24gSHdhbmcgPGh1bWFuLmh3YW5nQHNh bXN1bmcuY29tPgotLS0KIHRlc3RzL21vZGV0ZXN0L21vZGV0ZXN0LmMgfCAxOTUgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDE4 NyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL21vZGV0 ZXN0L21vZGV0ZXN0LmMgYi90ZXN0cy9tb2RldGVzdC9tb2RldGVzdC5jCmluZGV4IGJjNWEyMjcu LjQxOGFjYWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21vZGV0ZXN0L21vZGV0ZXN0LmMKKysrIGIvdGVz dHMvbW9kZXRlc3QvbW9kZXRlc3QuYwpAQCAtNzQ3LDYgKzc0NywxMCBAQCBzdHJ1Y3QgcGlwZV9h cmcgewogCXN0cnVjdCB0aW1ldmFsIHN0YXJ0OwogCiAJaW50IHN3YXBfY291bnQ7CisKKwkvKiBm b3IgYXRvbWljIG1vZGVzZXQgKi8KKwl1aW50MzJfdCBwbGFuZV9pZDsKKwl1aW50MzJfdCBmYl9v YmpfaWQ7CiB9OwogCiBzdHJ1Y3QgcGxhbmVfYXJnIHsKQEAgLTE0NzcsNyArMTQ4MSw3IEBAIHN0 YXRpYyBpbnQgcGFyc2VfcHJvcGVydHkoc3RydWN0IHByb3BlcnR5X2FyZyAqcCwgY29uc3QgY2hh ciAqYXJnKQogCiBzdGF0aWMgdm9pZCB1c2FnZShjaGFyICpuYW1lKQogewotCWZwcmludGYoc3Rk ZXJyLCAidXNhZ2U6ICVzIFstYWNEZGVmTVBwc0N2d11cbiIsIG5hbWUpOworCWZwcmludGYoc3Rk ZXJyLCAidXNhZ2U6ICVzIFstYWNEZGVmTVBwc0N2VnddXG4iLCBuYW1lKTsKIAlmcHJpbnRmKHN0 ZGVyciwgIlx0QTogc3VwcG9ydGVkIGluIGF0b21pYyBtb2Rlc2V0XG4iKTsKIAlmcHJpbnRmKHN0 ZGVyciwgIlx0TDogc3VwcG9ydGVkIGluIGxlZ2FjeSBtb2Rlc2V0XG4iKTsKIApAQCAtMTQ5Miw2 ICsxNDk2LDcgQEAgc3RhdGljIHZvaWQgdXNhZ2UoY2hhciAqbmFtZSkKIAogCWZwcmludGYoc3Rk ZXJyLCAiXG4gQXRvbWljIFRlc3Qgb3B0aW9uczogW0FdXG5cbiIpOwogCWZwcmludGYoc3RkZXJy LCAiXHQtYVx0dXNlIGF0b21pYyBtb2Rlc2V0XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LVYg PGZsaXBwaW5nX3BsYW5lX2lkPlx0dGVzdCB2c3luY2VkIHBhZ2UgZmxpcHBpbmdcbiIpOwogCiAJ ZnByaW50ZihzdGRlcnIsICJcbiBMZWdhY3kgdGVzdCBvcHRpb25zOiBbTF1cblxuIik7CiAJZnBy aW50ZihzdGRlcnIsICJcdC1QIDxjcnRjX2lkPjo8dz54PGg+Wys8eD4rPHk+XVsqPHNjYWxlPl1b QDxmb3JtYXQ+XVx0c2V0IGEgcGxhbmVcbiIpOwpAQCAtMTY0MSw3ICsxNjQ2LDggQEAgc3RhdGlj IGludCBhbGxvY2F0ZV9mYihpbnQgZmQsIGRybU1vZGVBdG9taWNSZXFQdHIgcmVxLCBzdHJ1Y3Qg cmVzb3VyY2VzICpyZXMsCiAKIHN0YXRpYyBpbnQgYWxsb2NhdGVfZmJzKHN0cnVjdCBkZXZpY2Ug KmRldiwgZHJtTW9kZUF0b21pY1JlcVB0ciByZXEsCiAJCQlzdHJ1Y3QgcmVzb3VyY2VzICpyZXMs IHN0cnVjdCBwcm9wZXJ0eV9hcmcgKnByb3BfYXJncywKLQkJCXVuc2lnbmVkIGludCBwcm9wX2Nv dW50LCBzdHJ1Y3QgYm8gKipibywgdWludDMyX3QgKmZiX2lkKQorCQkJdW5zaWduZWQgaW50IHBy b3BfY291bnQsIHN0cnVjdCBibyAqKmJvLCB1aW50MzJfdCAqZmJfaWQsCisJCQl1aW50MzJfdCBm bGlwX3BsYW5lX2lkKQogewogCXVpbnQzMl90IHBsYW5lX2lkLCBmYl9vYmpfaWQsIHBpeGVsX2Zv cm1hdDsKIAl1aW50NjRfdCB3aWR0aCwgaGVpZ2h0OwpAQCAtMTY1Miw2ICsxNjU4LDkgQEAgc3Rh dGljIGludCBhbGxvY2F0ZV9mYnMoc3RydWN0IGRldmljZSAqZGV2LCBkcm1Nb2RlQXRvbWljUmVx UHRyIHJlcSwKIAkJaWYgKCFpc19vYmpfaWRfaW5fcHJvcF9hcmdzKHByb3BfYXJncywgcHJvcF9j b3VudCwgcGxhbmVfaWQpKQogCQkJY29udGludWU7CiAKKwkJaWYgKGZsaXBfcGxhbmVfaWQgPT0g cGxhbmVfaWQpCisJCQlkZXYtPm1vZGUuZmJfaWQgPSBmYl9pZFtpXTsKKwogCQlmYl9vYmpfaWQg PSBnZXRfcGxhbmVfcHJvcF9pZChyZXMsIHBsYW5lX2lkLCAiRkJfSUQiKTsKIAkJaWYgKCFmYl9v YmpfaWQpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAicGxhbmUoJXUpIGRvZXMgbm90IGV4aXN0XG4i LCBwbGFuZV9pZCk7CkBAIC0xNzE0LDggKzE3MjMsMTYyIEBAIHN0YXRpYyB2b2lkIGRlYWxsb2Nh dGVfZmJzKGludCBmZCwgaW50IG51bV9wbGFuZXMsIHVpbnQzMl90ICpmYl9pZCwgc3RydWN0IGJv ICoqCiAJfQogfQogCitzdGF0aWMgdm9pZCBhdG9taWNfcGFnZV9mbGlwX2hhbmRsZXIoaW50IGZk LCB1bnNpZ25lZCBpbnQgZnJhbWUsIHVuc2lnbmVkIGludCBzZWMsCisJCQkJCXVuc2lnbmVkIGlu dCB1c2VjLCB2b2lkICpkYXRhKQoreworCXN0YXRpYyBkcm1Nb2RlQXRvbWljUmVxUHRyIHJlcSA9 IE5VTEw7CisJdW5zaWduZWQgaW50IG5ld19mYl9pZDsKKwlzdHJ1Y3QgdGltZXZhbCBlbmQ7CisJ c3RydWN0IHBpcGVfYXJnICpwaXBlOworCWRvdWJsZSB0OworCXVpbnQzMl90IGZsYWdzID0gMDsK KwlpbnQgcmV0OworCisJcGlwZSA9IChzdHJ1Y3QgcGlwZV9hcmcgKikodW5zaWduZWQgbG9uZylk YXRhOworCisJcmVxID0gZHJtTW9kZUF0b21pY0FsbG9jKCk7CisJaWYgKCFyZXEpIHsKKwkJZnBy aW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJtTW9kZUF0b21pY1JlcVB0clxuIik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAocGlwZS0+Y3VycmVudF9mYl9pZCA9PSBwaXBlLT5mYl9p ZFswXSkKKwkJbmV3X2ZiX2lkID0gcGlwZS0+ZmJfaWRbMV07CisJZWxzZQorCQluZXdfZmJfaWQg PSBwaXBlLT5mYl9pZFswXTsKKworCXBpcGUtPmN1cnJlbnRfZmJfaWQgPSBuZXdfZmJfaWQ7CisJ cGlwZS0+c3dhcF9jb3VudCsrOworCisJcmV0ID0gZHJtTW9kZUF0b21pY0FkZFByb3BlcnR5KHJl cSwgcGlwZS0+cGxhbmVfaWQsIHBpcGUtPmZiX29ial9pZCwgbmV3X2ZiX2lkKTsKKwlpZiAocmV0 IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBhZGQgYXRvbWljIHByb3BlcnR5 IGluIHBhZ2VmbGlwIGhhbmRsZXJcbiIpOworCQlkcm1Nb2RlQXRvbWljRnJlZShyZXEpOworCQly ZXR1cm47CisJfQorCisJZmxhZ3MgPSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQ7CisJcmV0ID0g ZHJtTW9kZUF0b21pY0NvbW1pdChmZCwgcmVxLCBmbGFncywgcGlwZSk7CisJaWYgKHJldCA8IDAp IHsKKwkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gY29tbWl0IGluIHBhZ2VmbGlwIGhhbmRs ZXJcbiIpOworCQlkcm1Nb2RlQXRvbWljRnJlZShyZXEpOworCQlyZXR1cm47CisJfQorCisJaWYg KHBpcGUtPnN3YXBfY291bnQgPT0gNjApIHsKKwkJZ2V0dGltZW9mZGF5KCZlbmQsIE5VTEwpOwor CQl0ID0gZW5kLnR2X3NlYyArIGVuZC50dl91c2VjICogMWUtNiAtCisJCQkocGlwZS0+c3RhcnQu dHZfc2VjICsgcGlwZS0+c3RhcnQudHZfdXNlYyAqIDFlLTYpOworCQlmcHJpbnRmKHN0ZGVyciwg ImZyZXE6ICUuMDJmSHpcbiIsIHBpcGUtPnN3YXBfY291bnQgLyB0KTsKKwkJcGlwZS0+c3dhcF9j b3VudCA9IDA7CisJCXBpcGUtPnN0YXJ0ID0gZW5kOworCX0KKworCWRybU1vZGVBdG9taWNGcmVl KHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0b21pY190ZXN0X3BhZ2VfZmxpcChzdHJ1Y3QgZGV2 aWNlICpkZXYsIGRybU1vZGVBdG9taWNSZXFQdHIgcmVxLAorCQkJc3RydWN0IHJlc291cmNlcyAq cmVzLCBzdHJ1Y3QgcHJvcGVydHlfYXJnICpwcm9wX2FyZ3MsCisJCQl1bnNpZ25lZCBpbnQgcHJv cF9jb3VudCwgdW5zaWduZWQgaW50IGZsaXBfcGxhbmVfaWQpCit7CisJc3RydWN0IGJvICpvdGhl cl9ibzsKKwl1bnNpZ25lZCBpbnQgb3RoZXJfZmJfaWQ7CisJc3RydWN0IHBpcGVfYXJnIHBpcGU7 CisJZHJtRXZlbnRDb250ZXh0IGV2Y3R4OworCXVpbnQzMl90IGZsYWdzID0gMCwgZmJfb2JqX2lk ID0gMCwgcGl4ZWxfZm9ybWF0OworCXVpbnQ2NF90IHdpZHRoLCBoZWlnaHQ7CisJaW50IHJldDsK KworCWZiX29ial9pZCA9IGdldF9wbGFuZV9wcm9wX2lkKHJlcywgZmxpcF9wbGFuZV9pZCwgIkZC X0lEIik7CisJaWYgKCFmYl9vYmpfaWQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJwbGFuZSgldSkg ZG9lcyBub3QgZXhpc3RcbiIsIGZsaXBfcGxhbmVfaWQpOworCQlyZXR1cm47CisJfQorCisJaWYg KCFpc19vYmpfaWRfaW5fcHJvcF9hcmdzKHByb3BfYXJncywgcHJvcF9jb3VudCwgZmxpcF9wbGFu ZV9pZCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJwbGFuZSAoJXUpIG11c3QgYmUgc2V0IGZvciBw YWdlZmxpcFxuIiwgZmxpcF9wbGFuZV9pZCk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBnZXRf dmFsdWVfaW5fcHJvcF9hcmdzKHByb3BfYXJncywgcHJvcF9jb3VudCwgZmxpcF9wbGFuZV9pZCwK KwkJCQkJIlNSQ19XIiwgJndpZHRoKTsKKwlpZiAocmV0IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVy ciwgIlNSQ19XIGZvciBwbGFuZSAoJXUpIG11c3QgYmUgc2V0XG4iLCBmbGlwX3BsYW5lX2lkKTsK KwkJcmV0dXJuOworCX0KKworCXJldCA9IGdldF92YWx1ZV9pbl9wcm9wX2FyZ3MocHJvcF9hcmdz LCBwcm9wX2NvdW50LCBmbGlwX3BsYW5lX2lkLAorCQkJCQkiU1JDX0giLCAmaGVpZ2h0KTsKKwlp ZiAocmV0IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlNSQ19IIGZvciBwbGFuZSAoJXUpIG11 c3QgYmUgc2V0XG4iLCBmbGlwX3BsYW5lX2lkKTsKKwkJcmV0dXJuOworCX0KKworCXBpeGVsX2Zv cm1hdCA9IERSTV9GT1JNQVRfWFJHQjg4ODg7CisKKwlyZXQgPSBhbGxvY2F0ZV9mYihkZXYtPmZk LCByZXEsIHJlcywgd2lkdGgsIGhlaWdodCwgcGl4ZWxfZm9ybWF0LAorCQkJUEFUVEVSTl9USUxF UywgJm90aGVyX2JvLCAmb3RoZXJfZmJfaWQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisK KwlyZXQgPSBkcm1Nb2RlQXRvbWljQWRkUHJvcGVydHkocmVxLCBmbGlwX3BsYW5lX2lkLCBmYl9v YmpfaWQsCisJCQlvdGhlcl9mYl9pZCk7CisJaWYgKHJldCA8IDApIHsKKwkJZnByaW50ZihzdGRl cnIsICJmYWlsZWQgdG8gYWRkIGF0b21pYyBwcm9wZXJ0eSBmb3IgcGFnZWZsaXAiKTsKKwkJZ290 byBlcnI7CisJfQorCisJZ2V0dGltZW9mZGF5KCZwaXBlLnN0YXJ0LCBOVUxMKTsKKwlwaXBlLnN3 YXBfY291bnQgPSAwOworCXBpcGUucGxhbmVfaWQgPSBmbGlwX3BsYW5lX2lkOworCXBpcGUuZmJf b2JqX2lkID0gZmJfb2JqX2lkOworCXBpcGUuZmJfaWRbMF0gPSBkZXYtPm1vZGUuZmJfaWQ7CisJ cGlwZS5mYl9pZFsxXSA9IG90aGVyX2ZiX2lkOworCXBpcGUuY3VycmVudF9mYl9pZCA9IG90aGVy X2ZiX2lkOworCisJZmxhZ3MgPSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQ7CisKKwlyZXQgPSBk cm1Nb2RlQXRvbWljQ29tbWl0KGRldi0+ZmQsIHJlcSwgZmxhZ3MsICZwaXBlKTsKKwlpZiAocmV0 IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBjb21taXQgZm9yIHBhZ2VmbGlw XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJbWVtc2V0KCZldmN0eCwgMCwgc2l6ZW9mIGV2Y3R4 KTsKKwlldmN0eC52ZXJzaW9uID0gMjsKKwlldmN0eC52YmxhbmtfaGFuZGxlciA9IE5VTEw7CisJ ZXZjdHgucGFnZV9mbGlwX2hhbmRsZXIgPSBhdG9taWNfcGFnZV9mbGlwX2hhbmRsZXI7CisKKwl3 aGlsZSAoMSkgeworCQlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0geyAudHZfc2VjID0gMywgLnR2 X3VzZWMgPSAwIH07CisJCWZkX3NldCBmZHM7CisKKwkJRkRfWkVSTygmZmRzKTsKKwkJRkRfU0VU KDAsICZmZHMpOworCQlGRF9TRVQoZGV2LT5mZCwgJmZkcyk7CisJCXJldCA9IHNlbGVjdChkZXYt PmZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOworCisJCWlmIChyZXQgPD0gMCkg eworCQkJZnByaW50ZihzdGRlcnIsICJzZWxlY3QgdGltZWQgb3V0IG9yIGVycm9yIChyZXQgJWQp XG4iLAorCQkJCQlyZXQpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoRkRfSVNTRVQoMCwg JmZkcykpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJZHJtSGFuZGxlRXZlbnQoZGV2LT5mZCwgJmV2 Y3R4KTsKKwl9CisKK2VycjoKKwlkcm1Nb2RlUm1GQihkZXYtPmZkLCBvdGhlcl9mYl9pZCk7CisJ Ym9fZGVzdHJveShvdGhlcl9ibyk7CisKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgYXRvbWlj X21vZGVzZXQoc3RydWN0IGRldmljZSAqZGV2LCBkcm1Nb2RlQXRvbWljUmVxUHRyIHJlcSwKLQkJ CXN0cnVjdCBwcm9wZXJ0eV9hcmcgKnByb3BfYXJncywgdW5zaWduZWQgaW50IHByb3BfY291bnQp CisJCQlzdHJ1Y3QgcHJvcGVydHlfYXJnICpwcm9wX2FyZ3MsIHVuc2lnbmVkIGludCBwcm9wX2Nv dW50LAorCQkJaW50IHRlc3RfdnN5bmMsIGludCBmbGlwX3BsYW5lX2lkKQogewogCXVuc2lnbmVk IGludCBudW1fcGxhbmVzOwogCWNvbnN0IGNoYXIgKm9ial90eXBlID0gTlVMTDsKQEAgLTE3NTMs NyArMTkxNiw4IEBAIHN0YXRpYyBpbnQgYXRvbWljX21vZGVzZXQoc3RydWN0IGRldmljZSAqZGV2 LCBkcm1Nb2RlQXRvbWljUmVxUHRyIHJlcSwKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldCA9IGFs bG9jYXRlX2ZicyhkZXYsIHJlcSwgZGV2LT5yZXNvdXJjZXMsIHByb3BfYXJncywgcHJvcF9jb3Vu dCwgYm8sIGZiX2lkKTsKKwlyZXQgPSBhbGxvY2F0ZV9mYnMoZGV2LCByZXEsIGRldi0+cmVzb3Vy Y2VzLCBwcm9wX2FyZ3MsIHByb3BfY291bnQsIGJvLAorCQkJCWZiX2lkLCBmbGlwX3BsYW5lX2lk KTsKIAlpZiAocmV0IDwgMCkgewogCQlmcmVlKGZiX2lkKTsKIAkJZnJlZShibyk7CkBAIC0xNzY5 LDYgKzE5MzMsMTAgQEAgc3RhdGljIGludCBhdG9taWNfbW9kZXNldChzdHJ1Y3QgZGV2aWNlICpk ZXYsIGRybU1vZGVBdG9taWNSZXFQdHIgcmVxLAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWlmICh0 ZXN0X3ZzeW5jKQorCQlhdG9taWNfdGVzdF9wYWdlX2ZsaXAoZGV2LCByZXEsIGRldi0+cmVzb3Vy Y2VzLAorCQkJCXByb3BfYXJncywgcHJvcF9jb3VudCwgZmxpcF9wbGFuZV9pZCk7CisKIAlnZXRj aGFyKCk7CiAKIAlkZWFsbG9jYXRlX2ZicyhkZXYtPmZkLCBudW1fcGxhbmVzLCBmYl9pZCwgYm8p OwpAQCAtMTc3OCw3ICsxOTQ2LDcgQEAgc3RhdGljIGludCBhdG9taWNfbW9kZXNldChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIGRybU1vZGVBdG9taWNSZXFQdHIgcmVxLAogCXJldHVybiAwOwogfQogCi1z dGF0aWMgY2hhciBvcHRzdHJbXSA9ICJhY2REOmVmTTpQOnBzOkN2dzoiOworc3RhdGljIGNoYXIg b3B0c3RyW10gPSAiYWNkRDplZk06UDpwczpDdlY6dzoiOwogCiBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiB7CkBAIC0xNzkyLDcgKzE5NjAsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJY29uc3QgY2hhciAqbW9kdWxlc1tdID0geyAiaTkxNSIsICJyYWRlb24i LCAibm91dmVhdSIsICJ2bXdnZngiLCAib21hcGRybSIsICJleHlub3MiLCAidGlsY2RjIiwgIm1z bSIsICJzdGkiLCAidGVncmEiLCAiaW14LWRybSIsICJyb2NrY2hpcCIsICJhdG1lbC1obGNkYyIg fTsKIAljaGFyICpkZXZpY2UgPSBOVUxMOwogCWNoYXIgKm1vZHVsZSA9IE5VTEw7Ci0JdW5zaWdu ZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGksIGZsaXBfcGxhbmVfaWQgPSAwOwogCXVuc2lnbmVk IGludCBjb3VudCA9IDAsIHBsYW5lX2NvdW50ID0gMDsKIAl1bnNpZ25lZCBpbnQgcHJvcF9jb3Vu dCA9IDA7CiAJc3RydWN0IHBpcGVfYXJnICpwaXBlX2FyZ3MgPSBOVUxMOwpAQCAtMTg3Myw2ICsy MDQxLDExIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJY2FzZSAndic6CiAJ CQl0ZXN0X3ZzeW5jID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCWlmIChzc2NhbmYo b3B0YXJnLCAiJXUiLCAmZmxpcF9wbGFuZV9pZCkgIT0gMSkKKwkJCQl1c2FnZShhcmd2WzBdKTsK KwkJCXRlc3RfdnN5bmMgPSAxOworCQkJYnJlYWs7CiAJCWNhc2UgJ3cnOgogCQkJcHJvcF9hcmdz ID0gcmVhbGxvYyhwcm9wX2FyZ3MsCiAJCQkJCSAgIChwcm9wX2NvdW50ICsgMSkgKiBzaXplb2Yg KnByb3BfYXJncyk7CkBAIC0xOTI1LDExICsyMDk4LDE2IEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmICh0ZXN0X3ZzeW5jICYmICFjb3Vu dCkgeworCWlmICh0ZXN0X3ZzeW5jICYmICghY291bnQgJiYgIWlzX2F0b21pYykpIHsKIAkJZnBy aW50ZihzdGRlcnIsICJwYWdlIGZsaXBwaW5nIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSAtcyBvcHRp b24uXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAorCWlmICh0ZXN0X3ZzeW5jICYmIGlzX2F0b21p YyAmJiBmbGlwX3BsYW5lX2lkID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJmbGlwaW5nIHBs YW5lIGlkIG11c3QgYmUgc2V0IGZvciBhdG9taWMgcGFnZWZsaXBcbiIpOworCQlyZXR1cm4gLTE7 CisJfQorCiAJaWYgKHRlc3RfY3Vyc29yICYmICFjdXJzb3Jfc3VwcG9ydGVkKCkpIHsKIAkJZnBy aW50ZihzdGRlcnIsICJodyBjdXJzb3Igbm90IHN1cHBvcnRlZCBieSBkcm0uXG4iKTsKIAkJcmV0 dXJuIC0xOwpAQCAtMTk3NCw3ICsyMTUyLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQogCWR1bXBfcmVzb3VyY2UoJmRldiwgZnJhbWVidWZmZXJzKTsKIAogCWlmIChpc19hdG9t aWMpIHsKLQkJcmV0ID0gYXRvbWljX21vZGVzZXQoJmRldiwgcmVxLCBwcm9wX2FyZ3MsIHByb3Bf Y291bnQpOworCQlyZXQgPSBhdG9taWNfbW9kZXNldCgmZGV2LCByZXEsIHByb3BfYXJncywgcHJv cF9jb3VudCwKKwkJCQkJdGVzdF92c3luYywgZmxpcF9wbGFuZV9pZCk7CiAJCWlmIChyZXQgPCAw KQogCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gYXRvbWljIG1vZGVzZXQgKCVzKVxuIiwK IAkJCQkJc3RyZXJyb3IoZXJybm8pKTsKLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=