From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 36/45] drm/i915: Move GEM object busy checking to its own file Date: Thu, 25 Apr 2019 10:19:55 +0100 Message-ID: <20190425092004.9995-36-chris@chris-wilson.co.uk> References: <20190425092004.9995-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3879D891CB for ; Thu, 25 Apr 2019 09:20:30 +0000 (UTC) In-Reply-To: <20190425092004.9995-1-chris@chris-wilson.co.uk> 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 List-Id: intel-gfx@lists.freedesktop.org Q29udGludWluZyB0aGUgZGVjbHV0dGVyaW5nIG9mIGk5MTVfZ2VtLmMgYnkgbW92aW5nIHRoZSBv YmplY3QgYnVzeQpjaGVja2luZyBpbnRvIGl0cyBvd24gZmlsZS4KClNpZ25lZC1vZmYtYnk6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2J1c3kuYyB8IDEzOCArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICB8IDEyOCAtLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDEyOCBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f YnVzeS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCBjNjVmNDgyOWViODMuLjY1NTYxNmI3N2Fi YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTg4LDYgKzg4LDcgQEAgaTkxNS15ICs9ICQoZ3Qt eSkKICMgR0VNIChHcmFwaGljcyBFeGVjdXRpb24gTWFuYWdlbWVudCkgY29kZQogb2JqLXkgKz0g Z2VtLwogZ2VtLXkgKz0gXAorCWdlbS9pOTE1X2dlbV9idXN5Lm8gXAogCWdlbS9pOTE1X2dlbV9j bGZsdXNoLm8gXAogCWdlbS9pOTE1X2dlbV9jb250ZXh0Lm8gXAogCWdlbS9pOTE1X2dlbV9kbWFi dWYubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fYnVz eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVhNWVkYTMwMDNlOQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9idXN5LmMKQEAgLTAsMCAr MSwxMzggQEAKKy8qCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29w eXJpZ2h0IMKpIDIwMTQtMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJn dC9pbnRlbF9lbmdpbmUuaCIKKworI2luY2x1ZGUgImk5MTVfZ2VtX2lvY3Rscy5oIgorI2luY2x1 ZGUgImk5MTVfZ2VtX29iamVjdC5oIgorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBfX2J1 c3lfcmVhZF9mbGFnKHU4IGlkKQoreworCWlmIChpZCA9PSAodTgpSTkxNV9FTkdJTkVfQ0xBU1Nf SU5WQUxJRCkKKwkJcmV0dXJuIDB4ZmZmZjAwMDB1OworCisJR0VNX0JVR19PTihpZCA+PSAxNik7 CisJcmV0dXJuIDB4MTAwMDB1IDw8IGlkOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHUz MiBfX2J1c3lfd3JpdGVfaWQodTggaWQpCit7CisJLyoKKwkgKiBUaGUgdUFCSSBndWFyYW50ZWVz IGFuIGFjdGl2ZSB3cml0ZXIgaXMgYWxzbyBhbW9uZ3N0IHRoZSByZWFkCisJICogZW5naW5lcy4g VGhpcyB3b3VsZCBiZSB0cnVlIGlmIHdlIGFjY2Vzc2VkIHRoZSBhY3Rpdml0eSB0cmFja2luZwor CSAqIHVuZGVyIHRoZSBsb2NrLCBidXQgYXMgd2UgcGVyZm9ybSB0aGUgbG9va3VwIG9mIHRoZSBv YmplY3QgYW5kCisJICogaXRzIGFjdGl2aXR5IGxvY2tsZXNzbHkgd2UgY2FuIG5vdCBndWFyYW50 ZWUgdGhhdCB0aGUgbGFzdF93cml0ZQorCSAqIGJlaW5nIGFjdGl2ZSBpbXBsaWVzIHRoYXQgd2Ug aGF2ZSBzZXQgdGhlIHNhbWUgZW5naW5lIGZsYWcgZnJvbQorCSAqIGxhc3RfcmVhZCAtIGhlbmNl IHdlIGFsd2F5cyBzZXQgYm90aCByZWFkIGFuZCB3cml0ZSBidXN5IGZvcgorCSAqIGxhc3Rfd3Jp dGUuCisJICovCisJaWYgKGlkID09ICh1OClJOTE1X0VOR0lORV9DTEFTU19JTlZBTElEKQorCQly ZXR1cm4gMHhmZmZmZmZmZnU7CisKKwlyZXR1cm4gKGlkICsgMSkgfCBfX2J1c3lfcmVhZF9mbGFn KGlkKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKK19fYnVzeV9z ZXRfaWZfYWN0aXZlKGNvbnN0IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLCB1MzIgKCpmbGFnKSh1 OCBpZCkpCit7CisJY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7CisKKwkvKgorCSAqIFdl IGhhdmUgdG8gY2hlY2sgdGhlIGN1cnJlbnQgaHcgc3RhdHVzIG9mIHRoZSBmZW5jZSBhcyB0aGUg dUFCSQorCSAqIGd1YXJhbnRlZXMgZm9yd2FyZCBwcm9ncmVzcy4gV2UgY291bGQgcmVseSBvbiB0 aGUgaWRsZSB3b3JrZXIKKwkgKiB0byBldmVudHVhbGx5IGZsdXNoIHVzLCBidXQgdG8gbWluaW1p c2UgbGF0ZW5jeSBqdXN0IGFzayB0aGUKKwkgKiBoYXJkd2FyZS4KKwkgKgorCSAqIE5vdGUgd2Ug b25seSByZXBvcnQgb24gdGhlIHN0YXR1cyBvZiBuYXRpdmUgZmVuY2VzLgorCSAqLworCWlmICgh ZG1hX2ZlbmNlX2lzX2k5MTUoZmVuY2UpKQorCQlyZXR1cm4gMDsKKworCS8qIG9wZW5jb2RlIHRv X3JlcXVlc3QoKSBpbiBvcmRlciB0byBhdm9pZCBjb25zdCB3YXJuaW5ncyAqLworCXJxID0gY29u dGFpbmVyX29mKGZlbmNlLCBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0LCBmZW5jZSk7CisJaWYg KGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQorCQlyZXR1cm4gMDsKKworCS8qIEJld2FyZSB0 eXBlLWV4cGFuc2lvbiBmb2xsaWVzISAqLworCUJVSUxEX0JVR19PTighdHlwZWNoZWNrKHU4LCBy cS0+ZW5naW5lLT51YWJpX2NsYXNzKSk7CisJcmV0dXJuIGZsYWcocnEtPmVuZ2luZS0+dWFiaV9j bGFzcyk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50CitidXN5X2No ZWNrX3JlYWRlcihjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlyZXR1cm4gX19i dXN5X3NldF9pZl9hY3RpdmUoZmVuY2UsIF9fYnVzeV9yZWFkX2ZsYWcpOworfQorCitzdGF0aWMg X19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludAorYnVzeV9jaGVja193cml0ZXIoY29uc3Qgc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJaWYgKCFmZW5jZSkKKwkJcmV0dXJuIDA7CisKKwly ZXR1cm4gX19idXN5X3NldF9pZl9hY3RpdmUoZmVuY2UsIF9fYnVzeV93cml0ZV9pZCk7Cit9CisK K2ludAoraTkxNV9nZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAorCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1faTkxNV9n ZW1fYnVzeSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsK KwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xpc3QgKmxpc3Q7CisJdW5zaWduZWQgaW50IHNl cTsKKwlpbnQgZXJyOworCisJZXJyID0gLUVOT0VOVDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJb2Jq ID0gaTkxNV9nZW1fb2JqZWN0X2xvb2t1cF9yY3UoZmlsZSwgYXJncy0+aGFuZGxlKTsKKwlpZiAo IW9iaikKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIEEgZGlzY3JlcGFuY3kgaGVyZSBpcyB0aGF0 IHdlIGRvIG5vdCByZXBvcnQgdGhlIHN0YXR1cyBvZgorCSAqIG5vbi1pOTE1IGZlbmNlcywgaS5l LiBldmVuIHRob3VnaCB3ZSBtYXkgcmVwb3J0IHRoZSBvYmplY3QgYXMgaWRsZSwKKwkgKiBhIGNh bGwgdG8gc2V0LWRvbWFpbiBtYXkgc3RpbGwgc3RhbGwgd2FpdGluZyBmb3IgZm9yZWlnbiByZW5k ZXJpbmcuCisJICogVGhpcyBhbHNvIG1lYW5zIHRoYXQgd2FpdC1pb2N0bCBtYXkgcmVwb3J0IGFu IG9iamVjdCBhcyBidXN5LAorCSAqIHdoZXJlIGJ1c3ktaW9jdGwgY29uc2lkZXJzIGl0IGlkbGUu CisJICoKKwkgKiBXZSB0cmFkZSB0aGUgYWJpbGl0eSB0byB3YXJuIG9mIGZvcmVpZ24gZmVuY2Vz IHRvIHJlcG9ydCBvbiB3aGljaAorCSAqIGk5MTUgZW5naW5lcyBhcmUgYWN0aXZlIGZvciB0aGUg b2JqZWN0LgorCSAqCisJICogQWx0ZXJuYXRpdmVseSwgd2UgY2FuIHRyYWRlIHRoYXQgZXh0cmEg aW5mb3JtYXRpb24gb24gcmVhZC93cml0ZQorCSAqIGFjdGl2aXR5IHdpdGgKKwkgKglhcmdzLT5i dXN5ID0KKwkgKgkJIXJlc2VydmF0aW9uX29iamVjdF90ZXN0X3NpZ25hbGVkX3JjdShvYmotPnJl c3YsIHRydWUpOworCSAqIHRvIHJlcG9ydCB0aGUgb3ZlcmFsbCBidXN5bmVzcy4gVGhpcyBpcyB3 aGF0IHRoZSB3YWl0LWlvY3RsIGRvZXMuCisJICoKKwkgKi8KK3JldHJ5OgorCXNlcSA9IHJhd19y ZWFkX3NlcWNvdW50KCZvYmotPnJlc3YtPnNlcSk7CisKKwkvKiBUcmFuc2xhdGUgdGhlIGV4Y2x1 c2l2ZSBmZW5jZSB0byB0aGUgUkVBRCAqYW5kKiBXUklURSBlbmdpbmUgKi8KKwlhcmdzLT5idXN5 ID0gYnVzeV9jaGVja193cml0ZXIocmN1X2RlcmVmZXJlbmNlKG9iai0+cmVzdi0+ZmVuY2VfZXhj bCkpOworCisJLyogVHJhbnNsYXRlIHNoYXJlZCBmZW5jZXMgdG8gUkVBRCBzZXQgb2YgZW5naW5l cyAqLworCWxpc3QgPSByY3VfZGVyZWZlcmVuY2Uob2JqLT5yZXN2LT5mZW5jZSk7CisJaWYgKGxp c3QpIHsKKwkJdW5zaWduZWQgaW50IHNoYXJlZF9jb3VudCA9IGxpc3QtPnNoYXJlZF9jb3VudCwg aTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2hhcmVkX2NvdW50OyArK2kpIHsKKwkJCXN0cnVjdCBk bWFfZmVuY2UgKmZlbmNlID0KKwkJCQlyY3VfZGVyZWZlcmVuY2UobGlzdC0+c2hhcmVkW2ldKTsK KworCQkJYXJncy0+YnVzeSB8PSBidXN5X2NoZWNrX3JlYWRlcihmZW5jZSk7CisJCX0KKwl9CisK KwlpZiAoYXJncy0+YnVzeSAmJiByZWFkX3NlcWNvdW50X3JldHJ5KCZvYmotPnJlc3YtPnNlcSwg c2VxKSkKKwkJZ290byByZXRyeTsKKworCWVyciA9IDA7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2Nr KCk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDQ2NzI3M2Rk MmQ0YS4uMmYxZTZkZDc4ZGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTExMTgsMTM0 ICsxMTE4LDYgQEAgaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCiAJcmV0dXJuIHZtYTsKIH0KIAotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1 MzIgX19idXN5X3JlYWRfZmxhZyh1OCBpZCkKLXsKLQlpZiAoaWQgPT0gKHU4KUk5MTVfRU5HSU5F X0NMQVNTX0lOVkFMSUQpCi0JCXJldHVybiAweGZmZmYwMDAwdTsKLQotCUdFTV9CVUdfT04oaWQg Pj0gMTYpOwotCXJldHVybiAweDEwMDAwdSA8PCBpZDsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lu bGluZSB1MzIgX19idXN5X3dyaXRlX2lkKHU4IGlkKQotewotCS8qCi0JICogVGhlIHVBQkkgZ3Vh cmFudGVlcyBhbiBhY3RpdmUgd3JpdGVyIGlzIGFsc28gYW1vbmdzdCB0aGUgcmVhZAotCSAqIGVu Z2luZXMuIFRoaXMgd291bGQgYmUgdHJ1ZSBpZiB3ZSBhY2Nlc3NlZCB0aGUgYWN0aXZpdHkgdHJh Y2tpbmcKLQkgKiB1bmRlciB0aGUgbG9jaywgYnV0IGFzIHdlIHBlcmZvcm0gdGhlIGxvb2t1cCBv ZiB0aGUgb2JqZWN0IGFuZAotCSAqIGl0cyBhY3Rpdml0eSBsb2NrbGVzc2x5IHdlIGNhbiBub3Qg Z3VhcmFudGVlIHRoYXQgdGhlIGxhc3Rfd3JpdGUKLQkgKiBiZWluZyBhY3RpdmUgaW1wbGllcyB0 aGF0IHdlIGhhdmUgc2V0IHRoZSBzYW1lIGVuZ2luZSBmbGFnIGZyb20KLQkgKiBsYXN0X3JlYWQg LSBoZW5jZSB3ZSBhbHdheXMgc2V0IGJvdGggcmVhZCBhbmQgd3JpdGUgYnVzeSBmb3IKLQkgKiBs YXN0X3dyaXRlLgotCSAqLwotCWlmIChpZCA9PSAodTgpSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJ RCkKLQkJcmV0dXJuIDB4ZmZmZmZmZmZ1OwotCi0JcmV0dXJuIChpZCArIDEpIHwgX19idXN5X3Jl YWRfZmxhZyhpZCk7Ci19Ci0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50Ci1f X2J1c3lfc2V0X2lmX2FjdGl2ZShjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwgdTMyICgq ZmxhZykodTggaWQpKQotewotCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwotCi0JLyoK LQkgKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBjdXJyZW50IGh3IHN0YXR1cyBvZiB0aGUgZmVuY2Ug YXMgdGhlIHVBQkkKLQkgKiBndWFyYW50ZWVzIGZvcndhcmQgcHJvZ3Jlc3MuIFdlIGNvdWxkIHJl bHkgb24gdGhlIGlkbGUgd29ya2VyCi0JICogdG8gZXZlbnR1YWxseSBmbHVzaCB1cywgYnV0IHRv IG1pbmltaXNlIGxhdGVuY3kganVzdCBhc2sgdGhlCi0JICogaGFyZHdhcmUuCi0JICoKLQkgKiBO b3RlIHdlIG9ubHkgcmVwb3J0IG9uIHRoZSBzdGF0dXMgb2YgbmF0aXZlIGZlbmNlcy4KLQkgKi8K LQlpZiAoIWRtYV9mZW5jZV9pc19pOTE1KGZlbmNlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBvcGVu Y29kZSB0b19yZXF1ZXN0KCkgaW4gb3JkZXIgdG8gYXZvaWQgY29uc3Qgd2FybmluZ3MgKi8KLQly cSA9IGNvbnRhaW5lcl9vZihmZW5jZSwgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCwgZmVuY2Up OwotCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBC ZXdhcmUgdHlwZS1leHBhbnNpb24gZm9sbGllcyEgKi8KLQlCVUlMRF9CVUdfT04oIXR5cGVjaGVj ayh1OCwgcnEtPmVuZ2luZS0+dWFiaV9jbGFzcykpOwotCXJldHVybiBmbGFnKHJxLT5lbmdpbmUt PnVhYmlfY2xhc3MpOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludAot YnVzeV9jaGVja19yZWFkZXIoY29uc3Qgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCi17Ci0JcmV0 dXJuIF9fYnVzeV9zZXRfaWZfYWN0aXZlKGZlbmNlLCBfX2J1c3lfcmVhZF9mbGFnKTsKLX0KLQot c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKLWJ1c3lfY2hlY2tfd3JpdGVyKGNv bnN0IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQotewotCWlmICghZmVuY2UpCi0JCXJldHVybiAw OwotCi0JcmV0dXJuIF9fYnVzeV9zZXRfaWZfYWN0aXZlKGZlbmNlLCBfX2J1c3lfd3JpdGVfaWQp OwotfQotCi1pbnQKLWk5MTVfZ2VtX2J1c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKLQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpsaXN0OwotCXVuc2lnbmVk IGludCBzZXE7Ci0JaW50IGVycjsKLQotCWVyciA9IC1FTk9FTlQ7Ci0JcmN1X3JlYWRfbG9jaygp OwotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9sb29rdXBfcmN1KGZpbGUsIGFyZ3MtPmhhbmRsZSk7 Ci0JaWYgKCFvYmopCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBBIGRpc2NyZXBhbmN5IGhlcmUg aXMgdGhhdCB3ZSBkbyBub3QgcmVwb3J0IHRoZSBzdGF0dXMgb2YKLQkgKiBub24taTkxNSBmZW5j ZXMsIGkuZS4gZXZlbiB0aG91Z2ggd2UgbWF5IHJlcG9ydCB0aGUgb2JqZWN0IGFzIGlkbGUsCi0J ICogYSBjYWxsIHRvIHNldC1kb21haW4gbWF5IHN0aWxsIHN0YWxsIHdhaXRpbmcgZm9yIGZvcmVp Z24gcmVuZGVyaW5nLgotCSAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IHdhaXQtaW9jdGwgbWF5IHJl cG9ydCBhbiBvYmplY3QgYXMgYnVzeSwKLQkgKiB3aGVyZSBidXN5LWlvY3RsIGNvbnNpZGVycyBp dCBpZGxlLgotCSAqCi0JICogV2UgdHJhZGUgdGhlIGFiaWxpdHkgdG8gd2FybiBvZiBmb3JlaWdu IGZlbmNlcyB0byByZXBvcnQgb24gd2hpY2gKLQkgKiBpOTE1IGVuZ2luZXMgYXJlIGFjdGl2ZSBm b3IgdGhlIG9iamVjdC4KLQkgKgotCSAqIEFsdGVybmF0aXZlbHksIHdlIGNhbiB0cmFkZSB0aGF0 IGV4dHJhIGluZm9ybWF0aW9uIG9uIHJlYWQvd3JpdGUKLQkgKiBhY3Rpdml0eSB3aXRoCi0JICoJ YXJncy0+YnVzeSA9Ci0JICoJCSFyZXNlcnZhdGlvbl9vYmplY3RfdGVzdF9zaWduYWxlZF9yY3Uo b2JqLT5yZXN2LCB0cnVlKTsKLQkgKiB0byByZXBvcnQgdGhlIG92ZXJhbGwgYnVzeW5lc3MuIFRo aXMgaXMgd2hhdCB0aGUgd2FpdC1pb2N0bCBkb2VzLgotCSAqCi0JICovCi1yZXRyeToKLQlzZXEg PSByYXdfcmVhZF9zZXFjb3VudCgmb2JqLT5yZXN2LT5zZXEpOwotCi0JLyogVHJhbnNsYXRlIHRo ZSBleGNsdXNpdmUgZmVuY2UgdG8gdGhlIFJFQUQgKmFuZCogV1JJVEUgZW5naW5lICovCi0JYXJn cy0+YnVzeSA9IGJ1c3lfY2hlY2tfd3JpdGVyKHJjdV9kZXJlZmVyZW5jZShvYmotPnJlc3YtPmZl bmNlX2V4Y2wpKTsKLQotCS8qIFRyYW5zbGF0ZSBzaGFyZWQgZmVuY2VzIHRvIFJFQUQgc2V0IG9m IGVuZ2luZXMgKi8KLQlsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+cmVzdi0+ZmVuY2UpOwot CWlmIChsaXN0KSB7Ci0JCXVuc2lnbmVkIGludCBzaGFyZWRfY291bnQgPSBsaXN0LT5zaGFyZWRf Y291bnQsIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNoYXJlZF9jb3VudDsgKytpKSB7Ci0JCQlz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9Ci0JCQkJcmN1X2RlcmVmZXJlbmNlKGxpc3QtPnNoYXJl ZFtpXSk7Ci0KLQkJCWFyZ3MtPmJ1c3kgfD0gYnVzeV9jaGVja19yZWFkZXIoZmVuY2UpOwotCQl9 Ci0JfQotCi0JaWYgKGFyZ3MtPmJ1c3kgJiYgcmVhZF9zZXFjb3VudF9yZXRyeSgmb2JqLT5yZXN2 LT5zZXEsIHNlcSkpCi0JCWdvdG8gcmV0cnk7Ci0KLQllcnIgPSAwOwotb3V0OgotCXJjdV9yZWFk X3VubG9jaygpOwotCXJldHVybiBlcnI7Ci19Ci0KIGludAogaTkxNV9nZW1fdGhyb3R0bGVfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCXN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KQotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZng=