From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH xserver 3/6] modesetting: add DRI2 page flip support Date: Wed, 17 Aug 2016 18:29:08 +0800 Message-ID: <1471429751-17269-4-git-send-email-Qiang.Yu@amd.com> References: <1471429751-17269-1-git-send-email-Qiang.Yu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1471429751-17269-1-git-send-email-Qiang.Yu-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: xorg-devel-go0+a7rfsptAfugRpC6u6w@public.gmane.org Cc: Qiang Yu , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org U2lnbmVkLW9mZi1ieTogUWlhbmcgWXUgPFFpYW5nLll1QGFtZC5jb20+Ci0tLQogaHcveGZyZWU4 Ni9kcml2ZXJzL21vZGVzZXR0aW5nL2RyaTIuYyB8IDI2MCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdlZCwgMjUxIGluc2VydGlvbnMoKyksIDkgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5nL2RyaTIu YyBiL2h3L3hmcmVlODYvZHJpdmVycy9tb2Rlc2V0dGluZy9kcmkyLmMKaW5kZXggODNjYjNlMC4u MTFlMGU2ZiAxMDA2NDQKLS0tIGEvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5nL2RyaTIu YworKysgYi9ody94ZnJlZTg2L2RyaXZlcnMvbW9kZXNldHRpbmcvZHJpMi5jCkBAIC00Niw2ICs0 Niw3IEBACiAKIGVudW0gbXNfZHJpMl9mcmFtZV9ldmVudF90eXBlIHsKICAgICBNU19EUkkyX1FV RVVFX1NXQVAsCisgICAgTVNfRFJJMl9RVUVVRV9GTElQLAogICAgIE1TX0RSSTJfV0FJVF9NU0Ms CiB9OwogCkBAIC0zOTksNiArNDAwLDIyMCBAQCBtc19kcmkyX2JsaXRfc3dhcChEcmF3YWJsZVB0 ciBkcmF3YWJsZSwKICAgICBtc19kcmkyX2NvcHlfcmVnaW9uKGRyYXdhYmxlLCAmcmVnaW9uLCBk c3QsIHNyYyk7CiB9CiAKK3N0cnVjdCBtc19kcmkyX3ZibGFua19ldmVudCB7CisgICAgWElEIGRy YXdhYmxlX2lkOworICAgIENsaWVudFB0ciBjbGllbnQ7CisgICAgRFJJMlN3YXBFdmVudFB0ciBl dmVudF9jb21wbGV0ZTsKKyAgICB2b2lkICpldmVudF9kYXRhOworfTsKKworc3RhdGljIHZvaWQK K21zX2RyaTJfZmxpcF9mcmVlKHN0cnVjdCBtc19jcnRjX3BhZ2VmbGlwICpmbGlwKQoreworICAg IHN0cnVjdCBtc19mbGlwZGF0YSAqZmxpcGRhdGEgPSBmbGlwLT5mbGlwZGF0YTsKKworICAgIGZy ZWUoZmxpcCk7CisgICAgaWYgKC0tZmxpcGRhdGEtPmZsaXBfY291bnQgPiAwKQorICAgICAgICBy ZXR1cm47CisgICAgZnJlZShmbGlwZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCittc19kcmkyX2Zs aXBfYWJvcnQodm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgbXNfY3J0Y19wYWdlZmxpcCAqZmxp cCA9IGRhdGE7CisgICAgc3RydWN0IG1zX2ZsaXBkYXRhICpmbGlwZGF0YSA9IGZsaXAtPmZsaXBk YXRhOworCisgICAgaWYgKGZsaXBkYXRhLT5mbGlwX2NvdW50ID09IDEpCisgICAgICAgIGZyZWUo ZmxpcGRhdGEtPmV2ZW50KTsKKworICAgIG1zX2RyaTJfZmxpcF9mcmVlKGZsaXApOworfQorCitz dGF0aWMgdm9pZAorbXNfZHJpMl9mbGlwX2hhbmRsZXIodWludDY0X3QgbXNjLCB1aW50NjRfdCB1 c3QsIHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IG1zX2NydGNfcGFnZWZsaXAgKmZsaXAgPSBk YXRhOworICAgIFNjcmVlblB0ciBzY3JlZW4gPSBmbGlwLT5mbGlwZGF0YS0+c2NyZWVuOworICAg IFNjcm5JbmZvUHRyIHNjcm4gPSB4Zjg2U2NyZWVuVG9TY3JuKHNjcmVlbik7CisgICAgbW9kZXNl dHRpbmdQdHIgbXMgPSBtb2Rlc2V0dGluZ1BUUihzY3JuKTsKKyAgICBzdHJ1Y3QgbXNfZmxpcGRh dGEgKmZsaXBkYXRhID0gZmxpcC0+ZmxpcGRhdGE7CisgICAgc3RydWN0IG1zX2RyaTJfdmJsYW5r X2V2ZW50ICpldmVudCA9IGZsaXBkYXRhLT5ldmVudDsKKworICAgIGlmIChmbGlwLT5vbl9yZWZl cmVuY2VfY3J0YykgeworICAgICAgICBmbGlwZGF0YS0+ZmVfbXNjID0gbXNjOworICAgICAgICBm bGlwZGF0YS0+ZmVfdXNlYyA9IHVzdDsKKyAgICB9CisKKyAgICBpZiAoZmxpcGRhdGEtPmZsaXBf Y291bnQgPT0gMSkgeworICAgICAgICB1aW50MzJfdCBmcmFtZSA9IGZsaXBkYXRhLT5mZV9tc2M7 CisgICAgICAgIHVpbnQzMl90IHR2X3NlYyA9IGZsaXBkYXRhLT5mZV91c2VjIC8gMTAwMDAwMDsK KyAgICAgICAgdWludDMyX3QgdHZfdXNlYyA9IGZsaXBkYXRhLT5mZV91c2VjICUgMTAwMDAwMDsK KyAgICAgICAgRHJhd2FibGVQdHIgZHJhd2FibGU7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAg ICAgICAgc3RhdHVzID0gZGl4TG9va3VwRHJhd2FibGUoJmRyYXdhYmxlLCBldmVudC0+ZHJhd2Fi bGVfaWQsIHNlcnZlckNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TV9BTlksIERpeFdyaXRlQWNjZXNzKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBTdWNjZXNzKQor ICAgICAgICAgICAgRFJJMlN3YXBDb21wbGV0ZShldmVudC0+Y2xpZW50LCBkcmF3YWJsZSwgZnJh bWUsIHR2X3NlYywgdHZfdXNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJJMl9G TElQX0NPTVBMRVRFLCBldmVudC0+ZXZlbnRfY29tcGxldGUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGV2ZW50LT5ldmVudF9kYXRhKTsKKyAgICAgICAgZHJtTW9kZVJtRkIobXMtPmZk LCBmbGlwZGF0YS0+b2xkX2ZiX2lkKTsKKyAgICB9CisKKyAgICBtc19kcmkyX2ZsaXBfZnJlZShm bGlwKTsKK30KKworc3RhdGljIEJvb2wKK21zX2RyaTJfc2NoZWR1bGVfZmxpcChtc19kcmkyX2Zy YW1lX2V2ZW50X3B0ciBpbmZvKQoreworICAgIERyYXdhYmxlUHRyIGRyYXcgPSBpbmZvLT5kcmF3 YWJsZTsKKyAgICBTY3JlZW5QdHIgc2NyZWVuID0gZHJhdy0+cFNjcmVlbjsKKyAgICBtc19kcmky X2J1ZmZlcl9wcml2YXRlX3B0ciBiYWNrX3ByaXYgPSBpbmZvLT5iYWNrLT5kcml2ZXJQcml2YXRl OworICAgIHN0cnVjdCBtc19kcmkyX3ZibGFua19ldmVudCAqZXZlbnQ7CisgICAgZHJtbW9kZV9j cnRjX3ByaXZhdGVfcHRyIGRybW1vZGVfY3J0YyA9IGluZm8tPmNydGMtPmRyaXZlcl9wcml2YXRl OworCisgICAgZXZlbnQgPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBtc19kcmkyX3ZibGFua19l dmVudCkpOworICAgIGlmICghZXZlbnQpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGV2 ZW50LT5kcmF3YWJsZV9pZCA9IGRyYXctPmlkOworICAgIGV2ZW50LT5jbGllbnQgPSBpbmZvLT5j bGllbnQ7CisgICAgZXZlbnQtPmV2ZW50X2NvbXBsZXRlID0gaW5mby0+ZXZlbnRfY29tcGxldGU7 CisgICAgZXZlbnQtPmV2ZW50X2RhdGEgPSBpbmZvLT5ldmVudF9kYXRhOworCisgICAgaWYgKG1z X2RvX3BhZ2VmbGlwKHNjcmVlbiwgYmFja19wcml2LT5waXhtYXAsIGV2ZW50LAorICAgICAgICAg ICAgICAgICAgICAgICBkcm1tb2RlX2NydGMtPnZibGFua19waXBlLCBGQUxTRSwKKyAgICAgICAg ICAgICAgICAgICAgICAgbXNfZHJpMl9mbGlwX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAg ICAgIG1zX2RyaTJfZmxpcF9hYm9ydCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEJvb2wKK3VwZGF0ZV9mcm9udChEcmF3YWJs ZVB0ciBkcmF3LCBEUkkyQnVmZmVyUHRyIGZyb250KQoreworICAgIFNjcmVlblB0ciBzY3JlZW4g PSBkcmF3LT5wU2NyZWVuOworICAgIFBpeG1hcFB0ciBwaXhtYXAgPSBnZXRfZHJhd2FibGVfcGl4 bWFwKGRyYXcpOworICAgIG1zX2RyaTJfYnVmZmVyX3ByaXZhdGVfcHRyIHByaXYgPSBmcm9udC0+ ZHJpdmVyUHJpdmF0ZTsKKyAgICBDQVJEMzIgc2l6ZTsKKyAgICBDQVJEMTYgcGl0Y2g7CisKKyAg ICBmcm9udC0+bmFtZSA9IGdsYW1vcl9uYW1lX2Zyb21fcGl4bWFwKHBpeG1hcCwgJnBpdGNoLCAm c2l6ZSk7CisgICAgaWYgKGZyb250LT5uYW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor CisgICAgKCpzY3JlZW4tPkRlc3Ryb3lQaXhtYXApIChwcml2LT5waXhtYXApOworICAgIGZyb250 LT5waXRjaCA9IHBpeG1hcC0+ZGV2S2luZDsKKyAgICBmcm9udC0+Y3BwID0gcGl4bWFwLT5kcmF3 YWJsZS5iaXRzUGVyUGl4ZWwgLyA4OworICAgIHByaXYtPnBpeG1hcCA9IHBpeG1hcDsKKyAgICBw aXhtYXAtPnJlZmNudCsrOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBCb29sCitj YW5fZXhjaGFuZ2UoU2NybkluZm9QdHIgc2NybiwgRHJhd2FibGVQdHIgZHJhdywKKwkgICAgIERS STJCdWZmZXJQdHIgZnJvbnQsIERSSTJCdWZmZXJQdHIgYmFjaykKK3sKKyAgICBtc19kcmkyX2J1 ZmZlcl9wcml2YXRlX3B0ciBmcm9udF9wcml2ID0gZnJvbnQtPmRyaXZlclByaXZhdGU7CisgICAg bXNfZHJpMl9idWZmZXJfcHJpdmF0ZV9wdHIgYmFja19wcml2ID0gYmFjay0+ZHJpdmVyUHJpdmF0 ZTsKKyAgICBQaXhtYXBQdHIgZnJvbnRfcGl4bWFwOworICAgIFBpeG1hcFB0ciBiYWNrX3BpeG1h cCA9IGJhY2tfcHJpdi0+cGl4bWFwOworICAgIHhmODZDcnRjQ29uZmlnUHRyIGNvbmZpZyA9IFhG ODZfQ1JUQ19DT05GSUdfUFRSKHNjcm4pOworICAgIGludCBudW1fY3J0Y3Nfb24gPSAwOworICAg IGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnVtX2NydGM7IGkrKykgewor ICAgICAgICBkcm1tb2RlX2NydGNfcHJpdmF0ZV9wdHIgZHJtbW9kZV9jcnRjID0gY29uZmlnLT5j cnRjW2ldLT5kcml2ZXJfcHJpdmF0ZTsKKworICAgICAgICAvKiBEb24ndCBkbyBwYWdlZmxpcHBp bmcgaWYgQ1JUQ3MgYXJlIHJvdGF0ZWQuICovCisjaWZkZWYgR0xBTU9SX0hBU19HQk0KKyAgICAg ICAgaWYgKGRybW1vZGVfY3J0Yy0+cm90YXRlX2JvLmdibSkKKyAgICAgICAgICAgIHJldHVybiBG QUxTRTsKKyNlbmRpZgorCisgICAgICAgIGlmIChtc19jcnRjX29uKGNvbmZpZy0+Y3J0Y1tpXSkp CisgICAgICAgICAgICBudW1fY3J0Y3Nfb24rKzsKKyAgICB9CisKKyAgICAvKiBXZSBjYW4ndCBk byBwYWdlZmxpcHBpbmcgaWYgYWxsIHRoZSBDUlRDcyBhcmUgb2ZmLiAqLworICAgIGlmIChudW1f Y3J0Y3Nfb24gPT0gMCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCF1cGRhdGVf ZnJvbnQoZHJhdywgZnJvbnQpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBmcm9udF9w aXhtYXAgPSBmcm9udF9wcml2LT5waXhtYXA7CisKKyAgICBpZiAoZnJvbnRfcGl4bWFwLT5kcmF3 YWJsZS53aWR0aCAhPSBiYWNrX3BpeG1hcC0+ZHJhd2FibGUud2lkdGgpCisgICAgICAgIHJldHVy biBGQUxTRTsKKworICAgIGlmIChmcm9udF9waXhtYXAtPmRyYXdhYmxlLmhlaWdodCAhPSBiYWNr X3BpeG1hcC0+ZHJhd2FibGUuaGVpZ2h0KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBp ZiAoZnJvbnRfcGl4bWFwLT5kcmF3YWJsZS5iaXRzUGVyUGl4ZWwgIT0KKyAgICAgICAgYmFja19w aXhtYXAtPmRyYXdhYmxlLmJpdHNQZXJQaXhlbCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisg ICAgaWYgKGZyb250X3BpeG1hcC0+ZGV2S2luZCAhPSBiYWNrX3BpeG1hcC0+ZGV2S2luZCkKKyAg ICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBCb29s CitjYW5fZmxpcChTY3JuSW5mb1B0ciBzY3JuLCBEcmF3YWJsZVB0ciBkcmF3LAorCSBEUkkyQnVm ZmVyUHRyIGZyb250LCBEUkkyQnVmZmVyUHRyIGJhY2spCit7CisgICAgbW9kZXNldHRpbmdQdHIg bXMgPSBtb2Rlc2V0dGluZ1BUUihzY3JuKTsKKworICAgIHJldHVybiBkcmF3LT50eXBlID09IERS QVdBQkxFX1dJTkRPVyAmJgorICAgICAgICBtcy0+ZHJtbW9kZS5wYWdlZmxpcCAmJgorICAgICAg ICBzY3JuLT52dFNlbWEgJiYKKyAgICAgICAgRFJJMkNhbkZsaXAoZHJhdykgJiYgY2FuX2V4Y2hh bmdlKHNjcm4sIGRyYXcsIGZyb250LCBiYWNrKTsKK30KKworc3RhdGljIHZvaWQKK21zX2RyaTJf ZXhjaGFuZ2VfYnVmZmVycyhEcmF3YWJsZVB0ciBkcmF3LCBEUkkyQnVmZmVyUHRyIGZyb250LAor ICAgICAgICAgICAgICAgICAgICAgICAgIERSSTJCdWZmZXJQdHIgYmFjaykKK3sKKyAgICBtc19k cmkyX2J1ZmZlcl9wcml2YXRlX3B0ciBmcm9udF9wcml2ID0gZnJvbnQtPmRyaXZlclByaXZhdGU7 CisgICAgbXNfZHJpMl9idWZmZXJfcHJpdmF0ZV9wdHIgYmFja19wcml2ID0gYmFjay0+ZHJpdmVy UHJpdmF0ZTsKKyAgICBTY3JlZW5QdHIgc2NyZWVuID0gZHJhdy0+cFNjcmVlbjsKKyAgICBTY3Ju SW5mb1B0ciBzY3JuID0geGY4NlNjcmVlblRvU2NybihzY3JlZW4pOworICAgIG1vZGVzZXR0aW5n UHRyIG1zID0gbW9kZXNldHRpbmdQVFIoc2Nybik7CisgICAgbXNQaXhtYXBQcml2UHRyIGZyb250 X3BpeCA9IG1zR2V0UGl4bWFwUHJpdigmbXMtPmRybW1vZGUsIGZyb250X3ByaXYtPnBpeG1hcCk7 CisgICAgbXNQaXhtYXBQcml2UHRyIGJhY2tfcGl4ID0gbXNHZXRQaXhtYXBQcml2KCZtcy0+ZHJt bW9kZSwgYmFja19wcml2LT5waXhtYXApOworICAgIG1zUGl4bWFwUHJpdlJlYyB0bXBfcGl4Owor ICAgIFJlZ2lvblJlYyByZWdpb247CisgICAgaW50IHRtcDsKKworICAgIC8qIFN3YXAgQk8gbmFt ZXMgc28gRFJJIHdvcmtzICovCisgICAgdG1wID0gZnJvbnQtPm5hbWU7CisgICAgZnJvbnQtPm5h bWUgPSBiYWNrLT5uYW1lOworICAgIGJhY2stPm5hbWUgPSB0bXA7CisKKyAgICAvKiBTd2FwIHBp eG1hcCBwcml2YXRlcyAqLworICAgIHRtcF9waXggPSAqZnJvbnRfcGl4OworICAgICpmcm9udF9w aXggPSAqYmFja19waXg7CisgICAgKmJhY2tfcGl4ID0gdG1wX3BpeDsKKworICAgIGdsYW1vcl9l Z2xfZXhjaGFuZ2VfYnVmZmVycyhmcm9udF9wcml2LT5waXhtYXAsIGJhY2tfcHJpdi0+cGl4bWFw KTsKKworICAgIC8qIFBvc3QgZGFtYWdlIG9uIHRoZSBmcm9udCBidWZmZXIgc28gdGhhdCBsaXN0 ZW5lcnMsIHN1Y2gKKyAgICAgKiBhcyBEaXNwbGF5TGluayBrbm93IHRha2UgYSBjb3B5IGFuZCBz aG92ZSBpdCBvdmVyIHRoZSBVU0IuCisgICAgICogYWxzbyBmb3Igc3cgY3Vyc29ycy4KKyAgICAg Ki8KKyAgICByZWdpb24uZXh0ZW50cy54MSA9IHJlZ2lvbi5leHRlbnRzLnkxID0gMDsKKyAgICBy ZWdpb24uZXh0ZW50cy54MiA9IGZyb250X3ByaXYtPnBpeG1hcC0+ZHJhd2FibGUud2lkdGg7Cisg ICAgcmVnaW9uLmV4dGVudHMueTIgPSBmcm9udF9wcml2LT5waXhtYXAtPmRyYXdhYmxlLndpZHRo OworICAgIHJlZ2lvbi5kYXRhID0gTlVMTDsKKyAgICBEYW1hZ2VSZWdpb25BcHBlbmQoJmZyb250 X3ByaXYtPnBpeG1hcC0+ZHJhd2FibGUsICZyZWdpb24pOworICAgIERhbWFnZVJlZ2lvblByb2Nl c3NQZW5kaW5nKCZmcm9udF9wcml2LT5waXhtYXAtPmRyYXdhYmxlKTsKK30KKwogc3RhdGljIHZv aWQKIG1zX2RyaTJfZnJhbWVfZXZlbnRfaGFuZGxlcih1aW50NjRfdCBtc2MsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDY0X3QgdXNlYywKQEAgLTQxNyw2ICs2MzIsMTMgQEAgbXNf ZHJpMl9mcmFtZV9ldmVudF9oYW5kbGVyKHVpbnQ2NF90IG1zYywKICAgICB9CiAKICAgICBzd2l0 Y2ggKGZyYW1lX2luZm8tPnR5cGUpIHsKKyAgICBjYXNlIE1TX0RSSTJfUVVFVUVfRkxJUDoKKyAg ICAgICAgaWYgKGNhbl9mbGlwKHNjcm4sIGRyYXdhYmxlLCBmcmFtZV9pbmZvLT5mcm9udCwgZnJh bWVfaW5mby0+YmFjaykgJiYKKyAgICAgICAgICAgIG1zX2RyaTJfc2NoZWR1bGVfZmxpcChmcmFt ZV9pbmZvKSkgeworICAgICAgICAgICAgbXNfZHJpMl9leGNoYW5nZV9idWZmZXJzKGRyYXdhYmxl LCBmcmFtZV9pbmZvLT5mcm9udCwgZnJhbWVfaW5mby0+YmFjayk7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICAvKiBlbHNlIGZhbGwgdGhyb3VnaCB0byBibGl0ICovCiAg ICAgY2FzZSBNU19EUkkyX1FVRVVFX1NXQVA6CiAgICAgICAgIG1zX2RyaTJfYmxpdF9zd2FwKGRy YXdhYmxlLCBmcmFtZV9pbmZvLT5mcm9udCwgZnJhbWVfaW5mby0+YmFjayk7CiAgICAgICAgIERS STJTd2FwQ29tcGxldGUoZnJhbWVfaW5mby0+Y2xpZW50LCBkcmF3YWJsZSwgbXNjLCB0dl9zZWMs IHR2X3VzZWMsCkBAIC02MDcsNyArODI5LDcgQEAgbXNfZHJpMl9zY2hlZHVsZV9zd2FwKENsaWVu dFB0ciBjbGllbnQsIERyYXdhYmxlUHRyIGRyYXcsCiAgICAgU2NybkluZm9QdHIgc2NybiA9IHhm ODZTY3JlZW5Ub1Njcm4oc2NyZWVuKTsKICAgICBtb2Rlc2V0dGluZ1B0ciBtcyA9IG1vZGVzZXR0 aW5nUFRSKHNjcm4pOwogICAgIGRybVZCbGFuayB2Ymw7Ci0gICAgaW50IHJldDsKKyAgICBpbnQg cmV0LCBmbGlwID0gMDsKICAgICB4Zjg2Q3J0Y1B0ciBjcnRjID0gbXNfZHJpMl9jcnRjX2NvdmVy aW5nX2RyYXdhYmxlKGRyYXcpOwogICAgIGRybW1vZGVfY3J0Y19wcml2YXRlX3B0ciBkcm1tb2Rl X2NydGM7CiAgICAgbXNfZHJpMl9mcmFtZV9ldmVudF9wdHIgZnJhbWVfaW5mbyA9IE5VTEw7CkBA IC02NDUsMjAgKzg2NywzNiBAQCBtc19kcmkyX3NjaGVkdWxlX3N3YXAoQ2xpZW50UHRyIGNsaWVu dCwgRHJhd2FibGVQdHIgZHJhdywKIAogICAgIHJldCA9IG1zX2dldF9jcnRjX3VzdF9tc2MoY3J0 YywgJmN1cnJlbnRfdXN0LCAmY3VycmVudF9tc2MpOwogCisgICAgLyogRmxpcHMgbmVlZCB0byBi ZSBzdWJtaXR0ZWQgb25lIGZyYW1lIGJlZm9yZSAqLworICAgIGlmIChjYW5fZmxpcChzY3JuLCBk cmF3LCBmcm9udCwgYmFjaykpIHsKKyAgICAgICAgZnJhbWVfaW5mby0+dHlwZSA9IE1TX0RSSTJf UVVFVUVfRkxJUDsKKyAgICAgICAgZmxpcCA9IDE7CisgICAgfQorCisgICAgLyogQ29ycmVjdCB0 YXJnZXRfbXNjIGJ5ICdmbGlwJyBpZiBmcmFtZV9pbmZvLT50eXBlID09IE1TX0RSSTJfUVVFVUVf RkxJUC4KKyAgICAgKiBEbyBpdCBlYXJseSwgc28gaGFuZGxpbmcgb2YgZGlmZmVyZW50IHRpbWlu ZyBjb25zdHJhaW50cworICAgICAqIGZvciBkaXZpc29yLCByZW1haW5kZXIgYW5kIG1zYyB2cy4g dGFyZ2V0X21zYyB3b3Jrcy4KKyAgICAgKi8KKyAgICBpZiAoKnRhcmdldF9tc2MgPiAwKQorICAg ICAgICAqdGFyZ2V0X21zYyAtPSBmbGlwOworCiAgICAgLyoKICAgICAgKiBJZiBkaXZpc29yIGlz IHplcm8sIG9yIGN1cnJlbnRfbXNjIGlzIHNtYWxsZXIgdGhhbiB0YXJnZXRfbXNjCiAgICAgICog d2UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0YXJnZXRfbXNjIHBhc3NlcyBiZWZvcmUgaW5pdGlh dGluZwogICAgICAqIHRoZSBzd2FwLgogICAgICAqLwogICAgIGlmIChkaXZpc29yID09IDAgfHwg Y3VycmVudF9tc2MgPCAqdGFyZ2V0X21zYykgewotICAgICAgICAvKiBXZSBuZWVkIHRvIHVzZSBE Uk1fVkJMQU5LX05FWFRPTk1JU1MgdG8gYXZvaWQgdW5yZWxpYWJsZQotICAgICAgICAgKiB0aW1l c3RhbXBpbmcgbGF0ZXIgb24uCi0gICAgICAgICAqLwogICAgICAgICB2YmwucmVxdWVzdC50eXBl ID0gKERSTV9WQkxBTktfQUJTT0xVVEUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERS TV9WQkxBTktfTkVYVE9OTUlTUyB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX1ZC TEFOS19FVkVOVCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtbW9kZV9jcnRjLT52 YmxhbmtfcGlwZSk7CiAKKyAgICAgICAgLyogSWYgbm9uLXBhZ2VmbGlwcGluZywgYnV0IGJsaXR0 aW5nL2V4Y2hhbmdpbmcsIHdlIG5lZWQgdG8gdXNlCisgICAgICAgICAqIERSTV9WQkxBTktfTkVY VE9OTUlTUyB0byBhdm9pZCB1bnJlbGlhYmxlIHRpbWVzdGFtcGluZyBsYXRlcgorICAgICAgICAg KiBvbi4KKyAgICAgICAgICovCisgICAgICAgIGlmIChmbGlwID09IDApCisgICAgICAgICAgICB2 YmwucmVxdWVzdC50eXBlIHw9IERSTV9WQkxBTktfTkVYVE9OTUlTUzsKKwogICAgICAgICAvKiBJ ZiB0YXJnZXRfbXNjIGFscmVhZHkgcmVhY2hlZCBvciBwYXNzZWQsIHNldCBpdCB0bwogICAgICAg ICAgKiBjdXJyZW50X21zYyB0byBlbnN1cmUgd2UgcmV0dXJuIGEgcmVhc29uYWJsZSB2YWx1ZSBi YWNrCiAgICAgICAgICAqIHRvIHRoZSBjYWxsZXIuIFRoaXMgbWFrZXMgc3dhcF9pbnRlcnZhbCBs b2dpYyBtb3JlIHJvYnVzdC4KQEAgLTY4Myw3ICs5MjEsOCBAQCBtc19kcmkyX3NjaGVkdWxlX3N3 YXAoQ2xpZW50UHRyIGNsaWVudCwgRHJhd2FibGVQdHIgZHJhdywKICAgICAgICAgICAgIGdvdG8g YmxpdF9mYWxsYmFjazsKICAgICAgICAgfQogCi0gICAgICAgICp0YXJnZXRfbXNjID0gbXNfa2Vy bmVsX21zY190b19jcnRjX21zYyhjcnRjLCB2YmwucmVwbHkuc2VxdWVuY2UpOworICAgICAgICAq dGFyZ2V0X21zYyA9IG1zX2tlcm5lbF9tc2NfdG9fY3J0Y19tc2MoY3J0YywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZibC5yZXBseS5zZXF1ZW5jZSAr IGZsaXApOwogICAgICAgICBmcmFtZV9pbmZvLT5mcmFtZSA9ICp0YXJnZXRfbXNjOwogCiAgICAg ICAgIHJldHVybiBUUlVFOwpAQCAtNjk1LDkgKzkzNCwxMCBAQCBtc19kcmkyX3NjaGVkdWxlX3N3 YXAoQ2xpZW50UHRyIGNsaWVudCwgRHJhd2FibGVQdHIgZHJhdywKICAgICAgKiBlcXVhdGlvbi4K ICAgICAgKi8KICAgICB2YmwucmVxdWVzdC50eXBlID0gKERSTV9WQkxBTktfQUJTT0xVVEUgfAot ICAgICAgICAgICAgICAgICAgICAgICAgRFJNX1ZCTEFOS19ORVhUT05NSVNTIHwKICAgICAgICAg ICAgICAgICAgICAgICAgIERSTV9WQkxBTktfRVZFTlQgfAogICAgICAgICAgICAgICAgICAgICAg ICAgZHJtbW9kZV9jcnRjLT52YmxhbmtfcGlwZSk7CisgICAgaWYgKGZsaXAgPT0gMCkKKyAgICAg ICAgdmJsLnJlcXVlc3QudHlwZSB8PSBEUk1fVkJMQU5LX05FWFRPTk1JU1M7CiAKICAgICByZXF1 ZXN0X21zYyA9IGN1cnJlbnRfbXNjIC0gKGN1cnJlbnRfbXNjICUgZGl2aXNvcikgKwogICAgICAg ICByZW1haW5kZXI7CkBAIC03MjEsNyArOTYxLDggQEAgbXNfZHJpMl9zY2hlZHVsZV9zd2FwKENs aWVudFB0ciBjbGllbnQsIERyYXdhYmxlUHRyIGRyYXcsCiAgICAgaWYgKCFzZXEpCiAgICAgICAg IGdvdG8gYmxpdF9mYWxsYmFjazsKIAotICAgIHZibC5yZXF1ZXN0LnNlcXVlbmNlID0gbXNfY3J0 Y19tc2NfdG9fa2VybmVsX21zYyhjcnRjLCByZXF1ZXN0X21zYyk7CisgICAgLyogQWNjb3VudCBm b3IgMSBmcmFtZSBleHRyYSBwYWdlZmxpcCBkZWxheSBpZiBmbGlwID4gMCAqLworICAgIHZibC5y ZXF1ZXN0LnNlcXVlbmNlID0gbXNfY3J0Y19tc2NfdG9fa2VybmVsX21zYyhjcnRjLCByZXF1ZXN0 X21zYykgLSBmbGlwOwogICAgIHZibC5yZXF1ZXN0LnNpZ25hbCA9ICh1bnNpZ25lZCBsb25nKXNl cTsKIAogICAgIHJldCA9IGRybVdhaXRWQmxhbmsobXMtPmZkLCAmdmJsKTsKQEAgLTczMiw3ICs5 NzMsOCBAQCBtc19kcmkyX3NjaGVkdWxlX3N3YXAoQ2xpZW50UHRyIGNsaWVudCwgRHJhd2FibGVQ dHIgZHJhdywKICAgICAgICAgZ290byBibGl0X2ZhbGxiYWNrOwogICAgIH0KIAotICAgICp0YXJn ZXRfbXNjID0gbXNfa2VybmVsX21zY190b19jcnRjX21zYyhjcnRjLCB2YmwucmVwbHkuc2VxdWVu Y2UpOworICAgIC8qIEFkanVzdCByZXR1cm5lZCB2YWx1ZSBmb3IgMSBmYW1lIHBhZ2VmbGlwIG9m ZnNldCBvZiBmbGlwID4gMCAqLworICAgICp0YXJnZXRfbXNjID0gbXNfa2VybmVsX21zY190b19j cnRjX21zYyhjcnRjLCB2YmwucmVwbHkuc2VxdWVuY2UgKyBmbGlwKTsKICAgICBmcmFtZV9pbmZv LT5mcmFtZSA9ICp0YXJnZXRfbXNjOwogCiAgICAgcmV0dXJuIFRSVUU7Ci0tIAoyLjcuNAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWls aW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==