From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 30/39] drm/i915: Move GEM object busy checking to its own file Date: Wed, 13 Mar 2019 14:43:52 +0000 Message-ID: <20190313144401.17735-30-chris@chris-wilson.co.uk> References: <20190313144401.17735-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 409A889F08 for ; Wed, 13 Mar 2019 14:45:05 +0000 (UTC) In-Reply-To: <20190313144401.17735-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 Z2VtL2k5MTVfZ2VtX2J1c3kuYyB8IDEzNyArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICB8IDEyNyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTM4IGluc2VydGlvbnMoKyksIDEyNyBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f YnVzeS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQppbmRleCAyZTc4ZmJlNzkyODAuLjUwYmM4ZjM0NDAw MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTc1LDYgKzc1LDcgQEAgaTkxNS0kKENPTkZJR19E Uk1fSTkxNV9XRVJST1IpICs9IFwKIAogIyBHRU0gY29kZQogaTkxNS15ICs9IFwKKwkgIGdlbS9p OTE1X2dlbV9idXN5Lm8gXAogCSAgZ2VtL2k5MTVfZ2VtX2NsZmx1c2gubyBcCiAJICBnZW0vaTkx NV9nZW1fY29udGV4dC5vIFwKIAkgIGdlbS9pOTE1X2dlbV9kbWFidWYubyBcCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fYnVzeS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmMwNmJhN2JkZjdiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9idXN5LmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTQtMjAx NiBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlICJpOTE1X2dlbV9pb2N0bHMuaCIK KyNpbmNsdWRlICJpOTE1X2dlbV9vYmplY3QuaCIKKworI2luY2x1ZGUgIi4uL2ludGVsX3Jpbmdi dWZmZXIuaCIKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgX19idXN5X3Jl YWRfZmxhZyh1bnNpZ25lZCBpbnQgaWQpCit7CisJaWYgKGlkID09IEk5MTVfRU5HSU5FX0NMQVNT X0lOVkFMSUQpCisJCXJldHVybiAweGZmZmYwMDAwOworCisJR0VNX0JVR19PTihpZCA+PSAxNik7 CisJcmV0dXJuIDB4MTAwMDAgPDwgaWQ7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5z aWduZWQgaW50IF9fYnVzeV93cml0ZV9pZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJLyoKKwkgKiBU aGUgdUFCSSBndWFyYW50ZWVzIGFuIGFjdGl2ZSB3cml0ZXIgaXMgYWxzbyBhbW9uZ3N0IHRoZSBy ZWFkCisJICogZW5naW5lcy4gVGhpcyB3b3VsZCBiZSB0cnVlIGlmIHdlIGFjY2Vzc2VkIHRoZSBh Y3Rpdml0eSB0cmFja2luZworCSAqIHVuZGVyIHRoZSBsb2NrLCBidXQgYXMgd2UgcGVyZm9ybSB0 aGUgbG9va3VwIG9mIHRoZSBvYmplY3QgYW5kCisJICogaXRzIGFjdGl2aXR5IGxvY2tsZXNzbHkg d2UgY2FuIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgbGFzdF93cml0ZQorCSAqIGJlaW5nIGFjdGl2 ZSBpbXBsaWVzIHRoYXQgd2UgaGF2ZSBzZXQgdGhlIHNhbWUgZW5naW5lIGZsYWcgZnJvbQorCSAq IGxhc3RfcmVhZCAtIGhlbmNlIHdlIGFsd2F5cyBzZXQgYm90aCByZWFkIGFuZCB3cml0ZSBidXN5 IGZvcgorCSAqIGxhc3Rfd3JpdGUuCisJICovCisJaWYgKGlkID09IEk5MTVfRU5HSU5FX0NMQVNT X0lOVkFMSUQpCisJCXJldHVybiAweGZmZmZmZmZmOworCisJcmV0dXJuIChpZCArIDEpIHwgX19i dXN5X3JlYWRfZmxhZyhpZCk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQg aW50CitfX2J1c3lfc2V0X2lmX2FjdGl2ZShjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwK KwkJICAgICB1bnNpZ25lZCBpbnQgKCpmbGFnKSh1bnNpZ25lZCBpbnQgaWQpKQoreworCWNvbnN0 IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIGNoZWNrIHRo ZSBjdXJyZW50IGh3IHN0YXR1cyBvZiB0aGUgZmVuY2UgYXMgdGhlIHVBQkkKKwkgKiBndWFyYW50 ZWVzIGZvcndhcmQgcHJvZ3Jlc3MuIFdlIGNvdWxkIHJlbHkgb24gdGhlIGlkbGUgd29ya2VyCisJ ICogdG8gZXZlbnR1YWxseSBmbHVzaCB1cywgYnV0IHRvIG1pbmltaXNlIGxhdGVuY3kganVzdCBh c2sgdGhlCisJICogaGFyZHdhcmUuCisJICoKKwkgKiBOb3RlIHdlIG9ubHkgcmVwb3J0IG9uIHRo ZSBzdGF0dXMgb2YgbmF0aXZlIGZlbmNlcy4KKwkgKi8KKwlpZiAoIWRtYV9mZW5jZV9pc19pOTE1 KGZlbmNlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBvcGVuY29kZSB0b19yZXF1ZXN0KCkgaW4gb3Jk ZXIgdG8gYXZvaWQgY29uc3Qgd2FybmluZ3MgKi8KKwlycSA9IGNvbnRhaW5lcl9vZihmZW5jZSwg Y29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCwgZmVuY2UpOworCWlmIChpOTE1X3JlcXVlc3RfY29t cGxldGVkKHJxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmxhZyhycS0+ZW5naW5lLT51YWJp X2NsYXNzKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKK2J1c3lf Y2hlY2tfcmVhZGVyKGNvbnN0IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiBf X2J1c3lfc2V0X2lmX2FjdGl2ZShmZW5jZSwgX19idXN5X3JlYWRfZmxhZyk7Cit9CisKK3N0YXRp YyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50CitidXN5X2NoZWNrX3dyaXRlcihjb25zdCBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gMDsKKwor CXJldHVybiBfX2J1c3lfc2V0X2lmX2FjdGl2ZShmZW5jZSwgX19idXN5X3dyaXRlX2lkKTsKK30K KworaW50CitpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCisJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9idXN5ICphcmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq OworCXN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqbGlzdDsKKwl1bnNpZ25lZCBpbnQg c2VxOworCWludCBlcnI7CisKKwllcnIgPSAtRU5PRU5UOworCXJjdV9yZWFkX2xvY2soKTsKKwlv YmogPSBpOTE1X2dlbV9vYmplY3RfbG9va3VwX3JjdShmaWxlLCBhcmdzLT5oYW5kbGUpOworCWlm ICghb2JqKQorCQlnb3RvIG91dDsKKworCS8qCisJICogQSBkaXNjcmVwYW5jeSBoZXJlIGlzIHRo YXQgd2UgZG8gbm90IHJlcG9ydCB0aGUgc3RhdHVzIG9mCisJICogbm9uLWk5MTUgZmVuY2VzLCBp LmUuIGV2ZW4gdGhvdWdoIHdlIG1heSByZXBvcnQgdGhlIG9iamVjdCBhcyBpZGxlLAorCSAqIGEg Y2FsbCB0byBzZXQtZG9tYWluIG1heSBzdGlsbCBzdGFsbCB3YWl0aW5nIGZvciBmb3JlaWduIHJl bmRlcmluZy4KKwkgKiBUaGlzIGFsc28gbWVhbnMgdGhhdCB3YWl0LWlvY3RsIG1heSByZXBvcnQg YW4gb2JqZWN0IGFzIGJ1c3ksCisJICogd2hlcmUgYnVzeS1pb2N0bCBjb25zaWRlcnMgaXQgaWRs ZS4KKwkgKgorCSAqIFdlIHRyYWRlIHRoZSBhYmlsaXR5IHRvIHdhcm4gb2YgZm9yZWlnbiBmZW5j ZXMgdG8gcmVwb3J0IG9uIHdoaWNoCisJICogaTkxNSBlbmdpbmVzIGFyZSBhY3RpdmUgZm9yIHRo ZSBvYmplY3QuCisJICoKKwkgKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gdHJhZGUgdGhhdCBleHRy YSBpbmZvcm1hdGlvbiBvbiByZWFkL3dyaXRlCisJICogYWN0aXZpdHkgd2l0aAorCSAqCWFyZ3Mt PmJ1c3kgPQorCSAqCQkhcmVzZXJ2YXRpb25fb2JqZWN0X3Rlc3Rfc2lnbmFsZWRfcmN1KG9iai0+ cmVzdiwgdHJ1ZSk7CisJICogdG8gcmVwb3J0IHRoZSBvdmVyYWxsIGJ1c3luZXNzLiBUaGlzIGlz IHdoYXQgdGhlIHdhaXQtaW9jdGwgZG9lcy4KKwkgKgorCSAqLworcmV0cnk6CisJc2VxID0gcmF3 X3JlYWRfc2VxY291bnQoJm9iai0+cmVzdi0+c2VxKTsKKworCS8qIFRyYW5zbGF0ZSB0aGUgZXhj bHVzaXZlIGZlbmNlIHRvIHRoZSBSRUFEICphbmQqIFdSSVRFIGVuZ2luZSAqLworCWFyZ3MtPmJ1 c3kgPSBidXN5X2NoZWNrX3dyaXRlcihyY3VfZGVyZWZlcmVuY2Uob2JqLT5yZXN2LT5mZW5jZV9l eGNsKSk7CisKKwkvKiBUcmFuc2xhdGUgc2hhcmVkIGZlbmNlcyB0byBSRUFEIHNldCBvZiBlbmdp bmVzICovCisJbGlzdCA9IHJjdV9kZXJlZmVyZW5jZShvYmotPnJlc3YtPmZlbmNlKTsKKwlpZiAo bGlzdCkgeworCQl1bnNpZ25lZCBpbnQgc2hhcmVkX2NvdW50ID0gbGlzdC0+c2hhcmVkX2NvdW50 LCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBzaGFyZWRfY291bnQ7ICsraSkgeworCQkJc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2UgPQorCQkJCXJjdV9kZXJlZmVyZW5jZShsaXN0LT5zaGFyZWRbaV0p OworCisJCQlhcmdzLT5idXN5IHw9IGJ1c3lfY2hlY2tfcmVhZGVyKGZlbmNlKTsKKwkJfQorCX0K KworCWlmIChhcmdzLT5idXN5ICYmIHJlYWRfc2VxY291bnRfcmV0cnkoJm9iai0+cmVzdi0+c2Vx LCBzZXEpKQorCQlnb3RvIHJldHJ5OworCisJZXJyID0gMDsKK291dDoKKwlyY3VfcmVhZF91bmxv Y2soKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggOWM0ZjE3 NTdmYzAxLi4xZjY0MWE0NGU5YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTM0MSwx MzMgKzEzNDEsNiBAQCBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4oc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKIAlyZXR1cm4gdm1hOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5l IHVuc2lnbmVkIGludCBfX2J1c3lfcmVhZF9mbGFnKHVuc2lnbmVkIGludCBpZCkKLXsKLQlpZiAo aWQgPT0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRCkKLQkJcmV0dXJuIDB4ZmZmZjAwMDA7Ci0K LQlHRU1fQlVHX09OKGlkID49IDE2KTsKLQlyZXR1cm4gMHgxMDAwMCA8PCBpZDsKLX0KLQotc3Rh dGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgX19idXN5X3dyaXRlX2lkKHVuc2lnbmVk IGludCBpZCkKLXsKLQkvKgotCSAqIFRoZSB1QUJJIGd1YXJhbnRlZXMgYW4gYWN0aXZlIHdyaXRl ciBpcyBhbHNvIGFtb25nc3QgdGhlIHJlYWQKLQkgKiBlbmdpbmVzLiBUaGlzIHdvdWxkIGJlIHRy dWUgaWYgd2UgYWNjZXNzZWQgdGhlIGFjdGl2aXR5IHRyYWNraW5nCi0JICogdW5kZXIgdGhlIGxv Y2ssIGJ1dCBhcyB3ZSBwZXJmb3JtIHRoZSBsb29rdXAgb2YgdGhlIG9iamVjdCBhbmQKLQkgKiBp dHMgYWN0aXZpdHkgbG9ja2xlc3NseSB3ZSBjYW4gbm90IGd1YXJhbnRlZSB0aGF0IHRoZSBsYXN0 X3dyaXRlCi0JICogYmVpbmcgYWN0aXZlIGltcGxpZXMgdGhhdCB3ZSBoYXZlIHNldCB0aGUgc2Ft ZSBlbmdpbmUgZmxhZyBmcm9tCi0JICogbGFzdF9yZWFkIC0gaGVuY2Ugd2UgYWx3YXlzIHNldCBi b3RoIHJlYWQgYW5kIHdyaXRlIGJ1c3kgZm9yCi0JICogbGFzdF93cml0ZS4KLQkgKi8KLQlpZiAo aWQgPT0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRCkKLQkJcmV0dXJuIDB4ZmZmZmZmZmY7Ci0K LQlyZXR1cm4gKGlkICsgMSkgfCBfX2J1c3lfcmVhZF9mbGFnKGlkKTsKLX0KLQotc3RhdGljIF9f YWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKLV9fYnVzeV9zZXRfaWZfYWN0aXZlKGNvbnN0IHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAotCQkgICAgIHVuc2lnbmVkIGludCAoKmZsYWcpKHVuc2ln bmVkIGludCBpZCkpCi17Ci0JY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Ci0KLQkvKgot CSAqIFdlIGhhdmUgdG8gY2hlY2sgdGhlIGN1cnJlbnQgaHcgc3RhdHVzIG9mIHRoZSBmZW5jZSBh cyB0aGUgdUFCSQotCSAqIGd1YXJhbnRlZXMgZm9yd2FyZCBwcm9ncmVzcy4gV2UgY291bGQgcmVs eSBvbiB0aGUgaWRsZSB3b3JrZXIKLQkgKiB0byBldmVudHVhbGx5IGZsdXNoIHVzLCBidXQgdG8g bWluaW1pc2UgbGF0ZW5jeSBqdXN0IGFzayB0aGUKLQkgKiBoYXJkd2FyZS4KLQkgKgotCSAqIE5v dGUgd2Ugb25seSByZXBvcnQgb24gdGhlIHN0YXR1cyBvZiBuYXRpdmUgZmVuY2VzLgotCSAqLwot CWlmICghZG1hX2ZlbmNlX2lzX2k5MTUoZmVuY2UpKQotCQlyZXR1cm4gMDsKLQotCS8qIG9wZW5j b2RlIHRvX3JlcXVlc3QoKSBpbiBvcmRlciB0byBhdm9pZCBjb25zdCB3YXJuaW5ncyAqLwotCXJx ID0gY29udGFpbmVyX29mKGZlbmNlLCBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0LCBmZW5jZSk7 Ci0JaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQotCQlyZXR1cm4gMDsKLQotCXJldHVy biBmbGFnKHJxLT5lbmdpbmUtPnVhYmlfY2xhc3MpOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5s aW5lIHVuc2lnbmVkIGludAotYnVzeV9jaGVja19yZWFkZXIoY29uc3Qgc3RydWN0IGRtYV9mZW5j ZSAqZmVuY2UpCi17Ci0JcmV0dXJuIF9fYnVzeV9zZXRfaWZfYWN0aXZlKGZlbmNlLCBfX2J1c3lf cmVhZF9mbGFnKTsKLX0KLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKLWJ1 c3lfY2hlY2tfd3JpdGVyKGNvbnN0IHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQotewotCWlmICgh ZmVuY2UpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIF9fYnVzeV9zZXRfaWZfYWN0aXZlKGZlbmNl LCBfX2J1c3lfd3JpdGVfaWQpOwotfQotCi1pbnQKLWk5MTVfZ2VtX2J1c3lfaW9jdGwoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZSkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOwotCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0 ICpsaXN0OwotCXVuc2lnbmVkIGludCBzZXE7Ci0JaW50IGVycjsKLQotCWVyciA9IC1FTk9FTlQ7 Ci0JcmN1X3JlYWRfbG9jaygpOwotCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9sb29rdXBfcmN1KGZp bGUsIGFyZ3MtPmhhbmRsZSk7Ci0JaWYgKCFvYmopCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBB IGRpc2NyZXBhbmN5IGhlcmUgaXMgdGhhdCB3ZSBkbyBub3QgcmVwb3J0IHRoZSBzdGF0dXMgb2YK LQkgKiBub24taTkxNSBmZW5jZXMsIGkuZS4gZXZlbiB0aG91Z2ggd2UgbWF5IHJlcG9ydCB0aGUg b2JqZWN0IGFzIGlkbGUsCi0JICogYSBjYWxsIHRvIHNldC1kb21haW4gbWF5IHN0aWxsIHN0YWxs IHdhaXRpbmcgZm9yIGZvcmVpZ24gcmVuZGVyaW5nLgotCSAqIFRoaXMgYWxzbyBtZWFucyB0aGF0 IHdhaXQtaW9jdGwgbWF5IHJlcG9ydCBhbiBvYmplY3QgYXMgYnVzeSwKLQkgKiB3aGVyZSBidXN5 LWlvY3RsIGNvbnNpZGVycyBpdCBpZGxlLgotCSAqCi0JICogV2UgdHJhZGUgdGhlIGFiaWxpdHkg dG8gd2FybiBvZiBmb3JlaWduIGZlbmNlcyB0byByZXBvcnQgb24gd2hpY2gKLQkgKiBpOTE1IGVu Z2luZXMgYXJlIGFjdGl2ZSBmb3IgdGhlIG9iamVjdC4KLQkgKgotCSAqIEFsdGVybmF0aXZlbHks IHdlIGNhbiB0cmFkZSB0aGF0IGV4dHJhIGluZm9ybWF0aW9uIG9uIHJlYWQvd3JpdGUKLQkgKiBh Y3Rpdml0eSB3aXRoCi0JICoJYXJncy0+YnVzeSA9Ci0JICoJCSFyZXNlcnZhdGlvbl9vYmplY3Rf dGVzdF9zaWduYWxlZF9yY3Uob2JqLT5yZXN2LCB0cnVlKTsKLQkgKiB0byByZXBvcnQgdGhlIG92 ZXJhbGwgYnVzeW5lc3MuIFRoaXMgaXMgd2hhdCB0aGUgd2FpdC1pb2N0bCBkb2VzLgotCSAqCi0J ICovCi1yZXRyeToKLQlzZXEgPSByYXdfcmVhZF9zZXFjb3VudCgmb2JqLT5yZXN2LT5zZXEpOwot Ci0JLyogVHJhbnNsYXRlIHRoZSBleGNsdXNpdmUgZmVuY2UgdG8gdGhlIFJFQUQgKmFuZCogV1JJ VEUgZW5naW5lICovCi0JYXJncy0+YnVzeSA9IGJ1c3lfY2hlY2tfd3JpdGVyKHJjdV9kZXJlZmVy ZW5jZShvYmotPnJlc3YtPmZlbmNlX2V4Y2wpKTsKLQotCS8qIFRyYW5zbGF0ZSBzaGFyZWQgZmVu Y2VzIHRvIFJFQUQgc2V0IG9mIGVuZ2luZXMgKi8KLQlsaXN0ID0gcmN1X2RlcmVmZXJlbmNlKG9i ai0+cmVzdi0+ZmVuY2UpOwotCWlmIChsaXN0KSB7Ci0JCXVuc2lnbmVkIGludCBzaGFyZWRfY291 bnQgPSBsaXN0LT5zaGFyZWRfY291bnQsIGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNoYXJlZF9j b3VudDsgKytpKSB7Ci0JCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9Ci0JCQkJcmN1X2RlcmVm ZXJlbmNlKGxpc3QtPnNoYXJlZFtpXSk7Ci0KLQkJCWFyZ3MtPmJ1c3kgfD0gYnVzeV9jaGVja19y ZWFkZXIoZmVuY2UpOwotCQl9Ci0JfQotCi0JaWYgKGFyZ3MtPmJ1c3kgJiYgcmVhZF9zZXFjb3Vu dF9yZXRyeSgmb2JqLT5yZXN2LT5zZXEsIHNlcSkpCi0JCWdvdG8gcmV0cnk7Ci0KLQllcnIgPSAw Owotb3V0OgotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBlcnI7Ci19Ci0KIGludAogaTkx NV9nZW1fdGhyb3R0bGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK IAkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotLSAKMi4yMC4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=