From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [PATCH v18 2/2] drm/i915/selftests: Introduce live tests of private PAT management Date: Fri, 22 Sep 2017 01:28:55 +0800 Message-ID: <1506014935-2012-2-git-send-email-zhi.a.wang@intel.com> References: <1506014935-2012-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1506014935-2012-1-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org Cc: Rodrigo Vivi , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org SW50cm9kdWNlIHR3byBsaXZlIHRlc3RzIG9mIHByaXZhdGUgUEFUIG1hbmFnZW1lbnQ6CgppZ3Rf cHBhdF9pbml0IC0gVGhpcyB0ZXN0IGlzIHRvIGNoZWNrIGlmIGFsbCB0aGUgUFBBVCBjb25maWd1 cmF0aW9ucyBhcmUKd3JpdHRlbiBpbnRvIEhXLgoKaWd0X3BwYXRfZ2V0IC0gVGhpcyB0ZXN0IHBl cmZvcm1zIHNldmVyYWwgc3ViLXRlc3RzIG9uIGludGVsX3BwYXRfZ2V0KCkKYW5kIGludGVsX3Bw YXRfcHV0KCkuCgpUaGUgInBlcmZlY3QgbWF0Y2giIHRlc3QgY2FzZSB3aWxsIHRyeSB0byBnZXQg YSBQUEFUIGVudHJ5IHdpdGggYW4gZXhpc3RpbmcKdmFsdWUsIHRoZW4gY2hlY2sgaWYgdGhlIHJl dHVybmVkIFBQQVQgZW50cnkgaXMgdGhlIHNhbWUgb25lLgoKVGhlICJhbGxvYyBlbnRyaWVzIiB0 ZXN0IGNhc2Ugd2lsbCBydW4gb3V0IG9mIFBQQVQgdGFibGUsIGFuZCBjaGVjayBpZiBhbGwKdGhl IHJlcXVlc3RlZCB2YWx1ZXMgYXJlIHB1dCBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgUFBBVCBl bnRyaWVzLgoKVGhlIG5lZ2F0aXZlIHRlc3QgY2FzZSB3aWxsIHRyeSB0byBnZW5lcmF0ZSBhIG5l dyBQUEFUIHZhbHVlLCBhbmQgZ2V0IGl0CndoZW4gUFBBVCB0YWJsZSBpcyBmdWxsLgoKVGhlICJw YXJ0aWFsIG1hdGNoIiB0ZXN0IGNhc2Ugd2lsbCBnZW5lcmF0ZSBhIHBhcml0YWwgbWF0Y2hlZCB2 YWx1ZSBmcm9tCnRoZSBleGlzdGluZyBQUEFUIHRhYmxlIGFuZCB0cnkgdG8gbWF0Y2ggaXQuCgpU aGUgInJlLWFsbG9jIiB0ZXN0IGNhc2Ugd2lsbCB0cnkgdG8gZnJlZSBhbmQgdGhlbiBhbGxvY2F0 ZSBhIG5ldyBlbnRyeQp3aGVuIHRoZSBQUEFUIHRhYmxlIGlzIGZ1bGwuCgpUaGUgInB1dCBlbnRy aWVzIiB0ZXN0IGNhc2Ugd2lsbCBmcmVlIGFsbCB0aGUgUFBBVCBlbnRyaWVzIHRoYXQgYWxsb2Nh dGVkCmluICJhbGxvYyBlbnRyaWVzIiB0ZXN0IGNhc2UuIEl0IHdpbGwgY2hlY2sgaWYgdGhlIHZh bHVlcyBvZiBmcmVlZCBQUEFUCmVudHJpZXMgdHVybiBpbnRvIHBwYXQtPmNsZWFyX3ZhbHVlLgoK djE4OgoKLSBSZWZpbmUgdGhlIHRlc3QgdG8gY2F0Y2ggYSBjb3JuZXIgY2FzZS4KCnYxMDoKCi0g UmVmaW5lIGNvZGUgc3RydWN0dXJlLgotIEludHJvZHVjZSAicmUtYWxsb2MiIHRlc3QgY2FzZS4g KENocmlzKQoKdjk6CgotIFJlZmluZSBnZW5lcmF0ZV9uZXdfdmFsdWUoKS4gKENocmlzKQotIFJl ZmluZSBmYWlsdXJlIG91dHB1dC4gKENocmlzKQotIFJlZmluZSB0ZXN0IGZsb3cgb2YgInBlcmZl Y3QgbWF0Y2giLiAoQ2hyaXMpCi0gSW50cm9kdWNlIGFub3RoZXIgbmVnYXRpdmUgdGVzdCBjYXNl IGFmdGVyICJwYXJ0aWFsIG1hdGNoIi4gKENocmlzKQoKdjg6CgotIFJlbW92ZSBub2lzeSBvdXRw dXQuIChDaHJpcykKLSBBZGQgbmVnYXRpdmUgdGVzdCBjYXNlLiAoQ2hyaXMpCgpDYzogQmVuIFdp ZGF3c2t5IDxiZW5qYW1pbi53aWRhd3NreUBpbnRlbC5jb20+CkNjOiBSb2RyaWdvIFZpdmkgPHJv ZHJpZ28udml2aUBpbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5l bkBsaW51eC5pbnRlbC5jb20+ClN1Z2dlc3RlZC1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJp cy13aWxzb24uY28udWs+ClNpZ25lZC1vZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMg fCAzNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAzNzIgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9n dHQuYwppbmRleCA2YjEzMmNhLi43NWNiMmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCkBAIC0xMDk0LDYgKzEwOTQsMzc2IEBAIHN0YXRpYyBp bnQgaWd0X2dndHRfcGFnZSh2b2lkICphcmcpCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGlu dCBjaGVja19jbmxfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJ c3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgcHBhdC0+bWF4X2VudHJpZXM7IGkrKykgeworCQl1MzIgdmFsdWUgPSBJ OTE1X1JFQUQoR0VOMTBfUEFUX0lOREVYKGkpKTsKKworCQlpZiAodmFsdWUgIT0gcHBhdC0+ZW50 cmllc1tpXS52YWx1ZSkgeworCQkJcHJfZXJyKCJjaGVjayBQUEFUIGZhaWxlZDogZXhwZWN0ZWQg JXggZm91bmQgJXhcbiIsCisJCQkJCXBwYXQtPmVudHJpZXNbaV0udmFsdWUsIHZhbHVlKTsKKwkJ CXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNo ZWNrX2Jkd19wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1 Y3QgaW50ZWxfcHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKKwl1NjQgcGF0LCBod19wYXQ7 CisJaW50IGk7CisKKwlwYXQgPSBod19wYXQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHBwYXQt Pm1heF9lbnRyaWVzOyBpKyspCisJCXBhdCB8PSBHRU44X1BQQVQoaSwgcHBhdC0+ZW50cmllc1tp XS52YWx1ZSk7CisKKwlod19wYXQgPSBJOTE1X1JFQUQoR0VOOF9QUklWQVRFX1BBVF9ISSk7CisJ aHdfcGF0IDw8PSAzMjsKKwlod19wYXQgfD0gSTkxNV9SRUFEKEdFTjhfUFJJVkFURV9QQVRfTE8p OworCisJaWYgKHBhdCAhPSBod19wYXQpIHsKKwkJcHJfZXJyKCJjaGVjayBQUEFUIGZhaWxlZDog ZXhwZWN0ZWQgJWxseCBmb3VuZCAlbGx4XG4iLAorCQkJCXBhdCwgaHdfcGF0KTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlndF9wcGF0X2NoZWNr KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlp bnQgcmV0OworCisJaWYgKCFpOTE1LT5wcGF0Lm1heF9lbnRyaWVzKQorCQlyZXR1cm4gMDsKKwor CWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gMTApCisJCXJldCA9IGNoZWNrX2NubF9wcGF0KGk5MTUp OworCWVsc2UKKwkJcmV0ID0gY2hlY2tfYmR3X3BwYXQoaTkxNSk7CisKKwlpZiAocmV0KQorCQlw cl9lcnIoImNoZWNrIFBQQVQgZmFpbGVkXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBib29sIHZhbHVlX2lzX25ldyhzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCwgdTggdmFsdWUpCit7 CisJaW50IGk7CisKKwlmb3JfZWFjaF9zZXRfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9l bnRyaWVzKSB7CisJCWlmICh2YWx1ZSAhPSBwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKQorCQkJY29u dGludWU7CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IGJvb2wgdmFsdWVfZm9yX3BhcnRpYWxfdGVzdChzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCwgdTgg dmFsdWUpCit7CisJaW50IGk7CisKKwlpZiAoIXZhbHVlX2lzX25ldyhwcGF0LCB2YWx1ZSkpCisJ CXJldHVybiBmYWxzZTsKKworCS8qCisJICogQXQgbGVhc3QsIHRoZXJlIHNob3VsZCBiZSBvbmUg ZW50cnkgd2hvc2UgY2FjaGUgYXR0cmlidXRlIGlzCisJICogc2FtZSB3aXRoIHRoZSByZXF1aXJl ZCB2YWx1ZS4KKwkgKi8KKwlmb3JfZWFjaF9zZXRfYml0KGksIHBwYXQtPnVzZWQsIHBwYXQtPm1h eF9lbnRyaWVzKSB7CisJCWlmIChHRU44X1BQQVRfR0VUX0NBKHZhbHVlKSAhPQorCQkgICAgR0VO OF9QUEFUX0dFVF9DQShwcGF0LT5lbnRyaWVzW2ldLnZhbHVlKSkKKwkJCWNvbnRpbnVlOworCisJ CXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHZhbHVl X2Zvcl9uZWdhdGl2ZV90ZXN0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0LCB1OCB2YWx1ZSkKK3sK KwlpbnQgaTsKKworCWlmICghdmFsdWVfaXNfbmV3KHBwYXQsIHZhbHVlKSkKKwkJcmV0dXJuIGZh bHNlOworCisJLyoKKwkgKiBjYWNoZSBhdHRyaWJ1dGUgaGFzIHRvIGJlIGRpZmZlcmVudCwgc28g aTkxNV9wcGF0X2dldCgpIHdvdWxkCisJICogYWxsb2NhdGUgYSBuZXcgZW50cnkuCisJICovCisJ Zm9yX2VhY2hfc2V0X2JpdChpLCBwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgeworCQlp ZiAoR0VOOF9QUEFUX0dFVF9DQSh2YWx1ZSkgPT0KKwkJICAgIEdFTjhfUFBBVF9HRVRfQ0EocHBh dC0+ZW50cmllc1tpXS52YWx1ZSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgdTggZ2VuZXJhdGVfbmV3X3ZhbHVlKHN0cnVjdCBpbnRlbF9wcGF0ICpw cGF0LAorCQkJICAgICBib29sICgqY2hlY2tfdmFsdWUpKHN0cnVjdCBpbnRlbF9wcGF0ICosIHU4 KSkKK3sKKwl1OCBjYVtdID0geyBHRU44X1BQQVRfV0IsIEdFTjhfUFBBVF9XVCwgR0VOOF9QUEFU X1VDLCBHRU44X1BQQVRfV0MgfTsKKwl1OCB0Y1tdID0geyBHRU44X1BQQVRfTExDLCBHRU44X1BQ QVRfTExDRUxMQywgR0VOOF9QUEFUX0xMQ2VMTEMgfTsKKwl1OCBhZ2VbXSA9IHsgR0VOOF9QUEFU X0FHRSgzKSwgR0VOOF9QUEFUX0FHRSgyKSwgR0VOOF9QUEFUX0FHRSgxKSwKKwkJICAgICBHRU44 X1BQQVRfQUdFKDApIH07CisJaW50IGNhX2luZGV4LCB0Y19pbmRleCwgYWdlX2luZGV4OworCXU4 IHZhbHVlOworCisjZGVmaW5lIGZvcl9lYWNoX3BwYXRfYXR0cihjYV9pbmRleCwgdGNfaW5kZXgs IGFnZV9pbmRleCkgXAorCWZvciAoKGNhX2luZGV4KSA9IDAgOyAoY2FfaW5kZXgpIDwgQVJSQVlf U0laRShjYSk7IChjYV9pbmRleCkrKykgXAorCWZvciAoKHRjX2luZGV4KSA9IDA7ICh0Y19pbmRl eCkgPCBBUlJBWV9TSVpFKHRjKTsgKHRjX2luZGV4KSsrKSBcCisJZm9yICgoYWdlX2luZGV4KSA9 IDA7IChhZ2VfaW5kZXgpIDwgQVJSQVlfU0laRShhZ2UpOyAoYWdlX2luZGV4KSsrKQorCisJZm9y X2VhY2hfcHBhdF9hdHRyKGNhX2luZGV4LCB0Y19pbmRleCwgYWdlX2luZGV4KSB7CisJCXZhbHVl ID0gYWdlW2FnZV9pbmRleF0gfCBjYVtjYV9pbmRleF0gfCB0Y1t0Y19pbmRleF07CisJCWlmIChj aGVja192YWx1ZShwcGF0LCB2YWx1ZSkpCisJCQlyZXR1cm4gdmFsdWU7CisJfQorI3VuZGVmIGZv cl9lYWNoX3BwYXRfYXR0cgorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlu dGVsX3BwYXRfZW50cnkgKgorZ2VuZXJhdGVfYW5kX2NoZWNrX25ld192YWx1ZShzdHJ1Y3QgaW50 ZWxfcHBhdCAqcHBhdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHBwYXQt Pmk5MTU7CisJY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5OworCXU4IHZhbHVl OworCURFQ0xBUkVfQklUTUFQKHVzZWQsIElOVEVMX01BWF9QUEFUX0VOVFJJRVMpOworCisJdmFs dWUgPSBnZW5lcmF0ZV9uZXdfdmFsdWUocHBhdCwgdmFsdWVfaXNfbmV3KTsKKwlpZiAoIXZhbHVl KSB7CisJCXByX2VycigiZmFpbCB0byBnZW5lcmF0ZSBuZXcgdmFsdWVcbiIpOworCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwliaXRtYXBfY29weSh1c2VkLCBwcGF0LT51c2VkLCBw cGF0LT5tYXhfZW50cmllcyk7CisKKwllbnRyeSA9IGludGVsX3BwYXRfZ2V0KGk5MTUsIHZhbHVl KTsKKwlpZiAoSVNfRVJSKGVudHJ5KSkgeworCQlwcl9lcnIoImZhaWwgdG8gZ2V0IG5ldyBlbnRy eVxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWlmIChlbnRyeS0+dmFs dWUgIT0gdmFsdWUpIHsKKwkJcHJfZXJyKCJ2YWx1ZSBpcyBub3QgZXhwZWN0ZWQsIGV4cGVjdGVk ICV4IGZvdW5kICV4XG4iLAorCQkJCXZhbHVlLCBlbnRyeS0+dmFsdWUpOworCQlnb3RvIGVycjsK Kwl9CisKKwlpZiAoYml0bWFwX2VxdWFsKHVzZWQsIHBwYXQtPnVzZWQsIHBwYXQtPm1heF9lbnRy aWVzKSkgeworCQlwcl9lcnIoImZhaWwgdG8gYWxsb2MgYSBuZXcgZW50cnlcbiIpOworCQlnb3Rv IGVycjsKKwl9CisKKwlyZXR1cm4gZW50cnk7CitlcnI6CisJaW50ZWxfcHBhdF9wdXQoZW50cnkp OworCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworfQorCitzdGF0aWMgaW50IHB1dF9hbmRfY2hl Y2tfZW50cnkoY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5KQoreworCWludGVs X3BwYXRfcHV0KGVudHJ5KTsKKworCWlmIChlbnRyeS0+dmFsdWUgIT0gZW50cnktPnBwYXQtPmNs ZWFyX3ZhbHVlKSB7CisJCXByX2VycigiZmFpbCB0byBwdXQgcHBhdCB2YWx1ZVxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmb3JtX3Bl cmZlY3RfbWF0Y2hfdGVzdChzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHBwYXQtPmk5MTU7CisJY29uc3Qgc3RydWN0IGludGVsX3Bw YXRfZW50cnkgKmVudHJ5OworCWludCBpOworCisJZm9yX2VhY2hfc2V0X2JpdChpLCBwcGF0LT51 c2VkLCBwcGF0LT5tYXhfZW50cmllcykgeworCQllbnRyeSA9IGludGVsX3BwYXRfZ2V0KGk5MTUs IHBwYXQtPmVudHJpZXNbaV0udmFsdWUpOworCQlpZiAoSVNfRVJSKGVudHJ5KSkKKwkJCXJldHVy biBQVFJfRVJSKGVudHJ5KTsKKworCQlpZiAoZW50cnkgIT0gJnBwYXQtPmVudHJpZXNbaV0pIHsK KwkJCXByX2VycigiZW50cnkgaXMgbm90IGV4cGVjdGVkXG4iKTsKKwkJCWludGVsX3BwYXRfcHV0 KGVudHJ5KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWludGVsX3BwYXRfcHV0KGVudHJ5 KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZm9ybV9uZWdhdGl2ZV90ZXN0 KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gcHBhdC0+aTkxNTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnk7 CisJdTggdmFsdWU7CisKKwl2YWx1ZSA9IGdlbmVyYXRlX25ld192YWx1ZShwcGF0LCB2YWx1ZV9m b3JfbmVnYXRpdmVfdGVzdCk7CisJaWYgKCF2YWx1ZSkgeworCQlwcl9lcnIoImZhaWwgdG8gZ2Vu ZXJhdGUgbmV3IHZhbHVlIGZvciBuZWdhdGl2ZSB0ZXN0IDJcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwllbnRyeSA9IGludGVsX3BwYXRfZ2V0KGk5MTUsIHZhbHVlKTsKKwlpZiAoIUlT X0VSUihlbnRyeSkgfHwgUFRSX0VSUihlbnRyeSkgIT0gLUVOT1NQQykgeworCQlwcl9lcnIoImZh aWwgb24gbmVnYXRpdmUgdGVzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBwZXJmb3JtX3BhcnRpYWxfbWF0Y2hfdGVzdChzdHJ1Y3QgaW50 ZWxfcHBhdCAqcHBhdCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHBwYXQt Pmk5MTU7CisJY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVudHJ5OworCXU4IHZhbHVl OworCisJdmFsdWUgPSBnZW5lcmF0ZV9uZXdfdmFsdWUocHBhdCwgdmFsdWVfZm9yX3BhcnRpYWxf dGVzdCk7CisJaWYgKCF2YWx1ZSkgeworCQlwcl9lcnIoImZhaWwgdG8gZ2VuZXJhdGUgbmV3IHZh bHVlIGZvciBwYXJ0aWFsIHRlc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllbnRy eSA9IGludGVsX3BwYXRfZ2V0KGk5MTUsIHZhbHVlKTsKKwlpZiAoSVNfRVJSKGVudHJ5KSkgewor CQlwcl9lcnIoImZhaWwgdG8gZ2V0IG5ldyBlbnRyeVxuIik7CisJCXJldHVybiBQVFJfRVJSKGVu dHJ5KTsKKwl9CisKKwlpZiAoIShlbnRyeS0+dmFsdWUgIT0gdmFsdWUgJiYKKwkgICAgR0VOOF9Q UEFUX0dFVF9DQShlbnRyeS0+dmFsdWUpID09IEdFTjhfUFBBVF9HRVRfQ0EodmFsdWUpKSkgewor CQlwcl9lcnIoInZhbHVlIGlzIG5vdCBleHBlY3RlZCwgZXhwZWN0ZWQgJXggZm91bmQgJXhcbiIs CisJCQkJdmFsdWUsIGVudHJ5LT52YWx1ZSk7CisJCWludGVsX3BwYXRfcHV0KGVudHJ5KTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW50ZWxfcHBhdF9wdXQoZW50cnkpOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGlndF9wcGF0X2dldCh2b2lkICphcmcpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7CisJc3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAm aTkxNS0+cHBhdDsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqKmVudHJpZXMsICoq cDsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgaW50 IHNpemUgPSAwOworCWludCBpLCByZXQ7CisKKwlpZiAoIXBwYXQtPm1heF9lbnRyaWVzKQorCQly ZXR1cm4gMDsKKworCXJldCA9IGlndF9wcGF0X2NoZWNrKGk5MTUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKiBjYXNlIDE6IGFsbG9jIG5ldyBlbnRyaWVzICovCisJZW50cmllcyA9 IE5VTEw7CisJcmV0ID0gMDsKKworCXdoaWxlICghYml0bWFwX2Z1bGwocHBhdC0+dXNlZCwgcHBh dC0+bWF4X2VudHJpZXMpKSB7CisJCXAgPSBrcmVhbGxvYyhlbnRyaWVzLCAoc2l6ZSArIDEpICoK KwkJCQkgICBzaXplb2Yoc3RydWN0IGludGVsX3BwYXRfZW50cnkgKiksCisJCQkJICAgR0ZQX0tF Uk5FTCk7CisJCWlmICghcCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gcHBhdF9wdXQ7 CisJCX0KKworCQllbnRyaWVzID0gcDsKKworCQlwID0gJmVudHJpZXNbc2l6ZSsrXTsKKwkJKnAg PSBOVUxMOworCisJCWVudHJ5ID0gZ2VuZXJhdGVfYW5kX2NoZWNrX25ld192YWx1ZShwcGF0KTsK KwkJaWYgKElTX0VSUihlbnRyeSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoZW50cnkpOworCQkJcHJf ZXJyKCJmYWlsIG9uIGFsbG9jIG5ldyBlbnRyaWVzIHRlc3RcbiIpOworCQkJZ290byBwcGF0X3B1 dDsKKwkJfQorCQkqcCA9IGVudHJ5OworCX0KKworCS8qIGNhc2UgMjogcGVyZmVjdCBtYXRjaCAq LworCXJldCA9IHBlcmZvcm1fcGVyZmVjdF9tYXRjaF90ZXN0KHBwYXQpOworCWlmIChyZXQpIHsK KwkJcHJfZXJyKCJmYWlsIG9uIHBlcmZlY3QgbWF0Y2ggdGVzdFxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJLyogY2FzZSAzOiBuZWdhdGl2ZSB0ZXN0IDEsIHN1cHBvc2UgUFBBVCB0YWJsZSBp cyBmdWxsIG5vdyAqLworCXJldCA9IHBlcmZvcm1fbmVnYXRpdmVfdGVzdChwcGF0KTsKKwlpZiAo cmV0KSB7CisJCXByX2VycigiZmFpbCBvbiBuZWdhdGl2ZSB0ZXN0IDFcbiIpOworCQlnb3RvIHBw YXRfcHV0OworCX0KKworCS8qIGNhc2UgNDogcGFydGlhbCBtYXRjaCAqLworCXJldCA9IHBlcmZv cm1fcGFydGlhbF9tYXRjaF90ZXN0KHBwYXQpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWls IG9uIHBhcnRpYWwgbWF0Y2ggdGVzdFxuIik7CisJCWdvdG8gcHBhdF9wdXQ7CisJfQorCisJLyog Y2FzZSAzOiBuZWdhdGl2ZSB0ZXN0IDIsIHN1cHBvc2UgUFBBVCB0YWJsZSBpcyBzdGlsbCBmdWxs IG5vdyAqLworCXJldCA9IHBlcmZvcm1fbmVnYXRpdmVfdGVzdChwcGF0KTsKKwlpZiAocmV0KSB7 CisJCXByX2VycigiZmFpbCBvbiBuZWdhdGl2ZSB0ZXN0IDJcbiIpOworCQlnb3RvIHBwYXRfcHV0 OworCX0KKworCS8qIGNhc2UgNTogcmUtYWxsb2MgdGVzdCwgbWFrZSBhIGhvbGUgYW5kIGl0IHNo b3VsZCB3b3JrIGFnYWluICovCisJaWYgKGVudHJpZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNp emU7IGkrKykgeworCQkJZW50cnkgPSBlbnRyaWVzW2ldOworCisJCQlyZXQgPSBwdXRfYW5kX2No ZWNrX2VudHJ5KGVudHJ5KTsKKwkJCWVudHJpZXNbaV0gPSBOVUxMOworCQkJaWYgKHJldCkgewor CQkJCXByX2VycigiZmFpbCBvbiByZS1hbGxvYyB0ZXN0XG4iKTsKKwkJCQlnb3RvIHBwYXRfcHV0 OworCQkJfQorCisJCQllbnRyeSA9IGdlbmVyYXRlX2FuZF9jaGVja19uZXdfdmFsdWUocHBhdCk7 CisJCQlpZiAoSVNfRVJSKGVudHJ5KSkgeworCQkJCXJldCA9IFBUUl9FUlIoZW50cnkpOworCQkJ CXByX2VycigiZmFpbCBvbiByZS1hbGxvYyB0ZXN0XG4iKTsKKwkJCQlnb3RvIHBwYXRfcHV0Owor CQkJfQorCQkJZW50cmllc1tpXSA9IGVudHJ5OworCQl9CisJfQorCitwcGF0X3B1dDoKKwlpZiAo ZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAoSVNfRVJS KGVudHJpZXNbaV0pIHx8ICFlbnRyaWVzW2ldKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocmV0 KQorCQkJCWludGVsX3BwYXRfcHV0KGVudHJ5KTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBwdXRfYW5k X2NoZWNrX2VudHJ5KGVudHJpZXNbaV0pOworCQl9CisJCWtmcmVlKGVudHJpZXMpOworCQllbnRy aWVzID0gTlVMTDsKKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBpZ3Rf cHBhdF9jaGVjayhpOTE1KTsKK30KKwogc3RhdGljIHZvaWQgdHJhY2tfdm1hX2JpbmQoc3RydWN0 IGk5MTVfdm1hICp2bWEpCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZt YS0+b2JqOwpAQCAtMTU2MCw2ICsxOTMwLDggQEAgaW50IGk5MTVfZ2VtX2d0dF9saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAkJU1VCVEVTVChpZ3RfZ2d0dF9w b3QpLAogCQlTVUJURVNUKGlndF9nZ3R0X2ZpbGwpLAogCQlTVUJURVNUKGlndF9nZ3R0X3BhZ2Up LAorCQlTVUJURVNUKGlndF9wcGF0X2NoZWNrKSwKKwkJU1VCVEVTVChpZ3RfcHBhdF9nZXQpLAog CX07CiAKIAlHRU1fQlVHX09OKG9mZnNldF9pbl9wYWdlKGk5MTUtPmdndHQuYmFzZS50b3RhbCkp OwotLSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=