From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH 1/2] dma-buf: make reservation_object_copy_fences rcu save Date: Mon, 11 Sep 2017 15:56:59 +0200 Message-ID: References: <1504551766-5093-1-git-send-email-deathsimple@vodafone.de> <6b53a3c4-87ee-437d-63b3-4d2369ba2208@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?Q?Christian_K=c3=b6nig?= , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T3AgMTEtMDktMTcgb20gMTQ6NTMgc2NocmVlZiBDaHJpc3RpYW4gS8O2bmlnOgo+IEFtIDEwLjA5 LjIwMTcgdW0gMDk6MzAgc2NocmllYiBNYWFydGVuIExhbmtob3JzdDoKPj4gT3AgMDQtMDktMTcg b20gMjE6MDIgc2NocmVlZiBDaHJpc3RpYW4gS8O2bmlnOgo+Pj4gRnJvbTogQ2hyaXN0aWFuIEvD tm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29tPgo+Pj4KPj4+IFN0b3AgcmVxdWlyaW5nIHRo YXQgdGhlIHNyYyByZXNlcnZhdGlvbiBvYmplY3QgaXMgbG9ja2VkIGZvciB0aGlzIG9wZXJhdGlv bi4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29l bmlnQGFtZC5jb20+Cj4+PiAtLS0KPj4+ICAgZHJpdmVycy9kbWEtYnVmL3Jlc2VydmF0aW9uLmMg fCA1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4+PiAgIDEg ZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKPj4+Cj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL3Jlc2VydmF0aW9uLmMgYi9kcml2ZXJzL2RtYS1i dWYvcmVzZXJ2YXRpb24uYwo+Pj4gaW5kZXggZGVjM2E4MS4uYjQ0ZDlkNyAxMDA2NDQKPj4+IC0t LSBhL2RyaXZlcnMvZG1hLWJ1Zi9yZXNlcnZhdGlvbi5jCj4+PiArKysgYi9kcml2ZXJzL2RtYS1i dWYvcmVzZXJ2YXRpb24uYwo+Pj4gQEAgLTI2Niw4ICsyNjYsNyBAQCBFWFBPUlRfU1lNQk9MKHJl c2VydmF0aW9uX29iamVjdF9hZGRfZXhjbF9mZW5jZSk7Cj4+PiAgICogQGRzdDogdGhlIGRlc3Rp bmF0aW9uIHJlc2VydmF0aW9uIG9iamVjdAo+Pj4gICAqIEBzcmM6IHRoZSBzb3VyY2UgcmVzZXJ2 YXRpb24gb2JqZWN0Cj4+PiAgICoKPj4+IC0qIENvcHkgYWxsIGZlbmNlcyBmcm9tIHNyYyB0byBk c3QuIEJvdGggc3JjLT5sb2NrIGFzIHdlbGwgYXMgZHN0LWxvY2sgbXVzdCBiZQo+Pj4gLSogaGVs ZC4KPj4+ICsqIENvcHkgYWxsIGZlbmNlcyBmcm9tIHNyYyB0byBkc3QuIGRzdC1sb2NrIG11c3Qg YmUgaGVsZC4KPj4+ICAgKi8KPj4+ICAgaW50IHJlc2VydmF0aW9uX29iamVjdF9jb3B5X2ZlbmNl cyhzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpkc3QsCj4+PiAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpzcmMpCj4+IENvdWxkIHRoaXMgYmUgaW1wbGVt ZW50ZWQgdXNpbmcgcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9mZW5jZXNfcmN1PyBZb3UncmUgZXNz ZW50aWFsbHkgZHVwbGljYXRpbmcgaXRzIGZ1bmN0aW9uYWxpdHkuCj4KPiBJJ3ZlIGNvbnNpZGVy ZWQgdGhpcyBhcyB3ZWxsLCBidXQgcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9mZW5jZXNfcmN1KCkg cmV0dXJucyBhbiBhcnJheSBhbmQgaGVyZSB3ZSBuZWVkIGFuIHJlc2VydmF0aW9uX29iamVjdF9s aXN0LiAKCkRvZXNuJ3Qgc2VlbSB0b28gaGFyZCwgYmVsb3cgaXMgdGhlIHJlc3VsdCBmcm9tIGZp ZGRsaW5nIHdpdGggdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24uLgpyZXNlcnZhdGlvbl9vYmplY3Rf bGlzdCBpcyBqdXN0IGEgbGlzdCBvZiBmZW5jZXMgd2l0aCBzb21lIGp1bmsgaW4gZnJvbnQuCgpI ZXJlIHlvdSBnbywgYnV0IG9ubHkgdGVzdGVkIHdpdGggdGhlIGNvbXBpbGVyLiBPOikKLS0tLS04 PC0tLS0tCiBkcml2ZXJzL2RtYS1idWYvcmVzZXJ2YXRpb24uYyB8IDE5MiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCsp LCA4MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvcmVzZXJ2YXRp b24uYyBiL2RyaXZlcnMvZG1hLWJ1Zi9yZXNlcnZhdGlvbi5jCmluZGV4IGRlYzNhODE1NDU1ZC4u NzJlZTkxZjM0MTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvcmVzZXJ2YXRpb24uYwor KysgYi9kcml2ZXJzL2RtYS1idWYvcmVzZXJ2YXRpb24uYwpAQCAtMjYxLDg3ICsyNjEsNDMgQEAg dm9pZCByZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2Uoc3RydWN0IHJlc2VydmF0aW9u X29iamVjdCAqb2JqLAogfQogRVhQT1JUX1NZTUJPTChyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4 Y2xfZmVuY2UpOwogCi0vKioKLSogcmVzZXJ2YXRpb25fb2JqZWN0X2NvcHlfZmVuY2VzIC0gQ29w eSBhbGwgZmVuY2VzIGZyb20gc3JjIHRvIGRzdC4KLSogQGRzdDogdGhlIGRlc3RpbmF0aW9uIHJl c2VydmF0aW9uIG9iamVjdAotKiBAc3JjOiB0aGUgc291cmNlIHJlc2VydmF0aW9uIG9iamVjdAot KgotKiBDb3B5IGFsbCBmZW5jZXMgZnJvbSBzcmMgdG8gZHN0LiBCb3RoIHNyYy0+bG9jayBhcyB3 ZWxsIGFzIGRzdC1sb2NrIG11c3QgYmUKLSogaGVsZC4KLSovCi1pbnQgcmVzZXJ2YXRpb25fb2Jq ZWN0X2NvcHlfZmVuY2VzKHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKmRzdCwKLQkJCQkgICBz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpzcmMpCitzdGF0aWMgYm9vbCByZWFsbG9jX3NoYXJl ZCh2b2lkICoqcHRyLCBzdHJ1Y3QgZG1hX2ZlbmNlICoqKnBzaGFyZWQsIHVuc2lnbmVkIHNoYXJl ZF9tYXgsIGJvb2wgYWxsb2NfbGlzdCwgYm9vbCB1bmxvY2tlZCkKIHsKLQlzdHJ1Y3QgcmVzZXJ2 YXRpb25fb2JqZWN0X2xpc3QgKnNyY19saXN0LCAqZHN0X2xpc3Q7Ci0Jc3RydWN0IGRtYV9mZW5j ZSAqb2xkLCAqbmV3OwotCXNpemVfdCBzaXplOwotCXVuc2lnbmVkIGk7Ci0KLQlzcmNfbGlzdCA9 IHJlc2VydmF0aW9uX29iamVjdF9nZXRfbGlzdChzcmMpOwotCi0JaWYgKHNyY19saXN0KSB7Ci0J CXNpemUgPSBvZmZzZXRvZih0eXBlb2YoKnNyY19saXN0KSwKLQkJCQlzaGFyZWRbc3JjX2xpc3Qt PnNoYXJlZF9jb3VudF0pOwotCQlkc3RfbGlzdCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7 Ci0JCWlmICghZHN0X2xpc3QpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlkc3RfbGlzdC0+c2hh cmVkX2NvdW50ID0gc3JjX2xpc3QtPnNoYXJlZF9jb3VudDsKLQkJZHN0X2xpc3QtPnNoYXJlZF9t YXggPSBzcmNfbGlzdC0+c2hhcmVkX2NvdW50OwotCQlmb3IgKGkgPSAwOyBpIDwgc3JjX2xpc3Qt PnNoYXJlZF9jb3VudDsgKytpKQotCQkJZHN0X2xpc3QtPnNoYXJlZFtpXSA9Ci0JCQkJZG1hX2Zl bmNlX2dldChzcmNfbGlzdC0+c2hhcmVkW2ldKTsKLQl9IGVsc2UgewotCQlkc3RfbGlzdCA9IE5V TEw7Ci0JfQotCi0Ja2ZyZWUoZHN0LT5zdGFnZWQpOwotCWRzdC0+c3RhZ2VkID0gTlVMTDsKKwlz aXplX3Qgc3o7CisJdm9pZCAqbmV3cHRyOwogCi0Jc3JjX2xpc3QgPSByZXNlcnZhdGlvbl9vYmpl Y3RfZ2V0X2xpc3QoZHN0KTsKKwlpZiAoYWxsb2NfbGlzdCkKKwkJc3ogPSBvZmZzZXRvZihzdHJ1 Y3QgcmVzZXJ2YXRpb25fb2JqZWN0X2xpc3QsIHNoYXJlZFtzaGFyZWRfbWF4XSk7CisJZWxzZQor CQlzeiA9IHNoYXJlZF9tYXggKiBzaXplb2Yoc3RydWN0IGRtYV9mZW5jZSAqKTsKIAotCW9sZCA9 IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZXhjbChkc3QpOwotCW5ldyA9IHJlc2VydmF0aW9uX29i amVjdF9nZXRfZXhjbChzcmMpOworCW5ld3B0ciA9IGtyZWFsbG9jKCpwdHIsIHN6LCB1bmxvY2tl ZCA/IEdGUF9LRVJORUwgOiBHRlBfTk9XQUlUIHwgX19HRlBfTk9XQVJOKTsKKwlpZiAoIW5ld3B0 cikKKwkJcmV0dXJuIGZhbHNlOwogCi0JZG1hX2ZlbmNlX2dldChuZXcpOworCSpwdHIgPSBuZXdw dHI7CisJaWYgKGFsbG9jX2xpc3QpIHsKKwkJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0 ICpmb2JqID0gbmV3cHRyOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jd3JpdGVfc2VxY291bnRf YmVnaW4oJmRzdC0+c2VxKTsKLQkvKiB3cml0ZV9zZXFjb3VudF9iZWdpbiBwcm92aWRlcyB0aGUg bmVjZXNzYXJ5IG1lbW9yeSBiYXJyaWVyICovCi0JUkNVX0lOSVRfUE9JTlRFUihkc3QtPmZlbmNl X2V4Y2wsIG5ldyk7Ci0JUkNVX0lOSVRfUE9JTlRFUihkc3QtPmZlbmNlLCBkc3RfbGlzdCk7Ci0J d3JpdGVfc2VxY291bnRfZW5kKCZkc3QtPnNlcSk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLQotCWlm IChzcmNfbGlzdCkKLQkJa2ZyZWVfcmN1KHNyY19saXN0LCByY3UpOwotCWRtYV9mZW5jZV9wdXQo b2xkKTsKKwkJZm9iai0+c2hhcmVkX21heCA9IHNoYXJlZF9tYXg7CisJCSpwc2hhcmVkID0gZm9i ai0+c2hhcmVkOworCX0gZWxzZQorCQkqcHNoYXJlZCA9IG5ld3B0cjsKIAotCXJldHVybiAwOwor CXJldHVybiB0cnVlOwogfQotRVhQT1JUX1NZTUJPTChyZXNlcnZhdGlvbl9vYmplY3RfY29weV9m ZW5jZXMpOwogCi0vKioKLSAqIHJlc2VydmF0aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdSAtIEdl dCBhbiBvYmplY3QncyBzaGFyZWQgYW5kIGV4Y2x1c2l2ZQotICogZmVuY2VzIHdpdGhvdXQgdXBk YXRlIHNpZGUgbG9jayBoZWxkCi0gKiBAb2JqOiB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0Ci0gKiBA cGZlbmNlX2V4Y2w6IHRoZSByZXR1cm5lZCBleGNsdXNpdmUgZmVuY2UgKG9yIE5VTEwpCi0gKiBA cHNoYXJlZF9jb3VudDogdGhlIG51bWJlciBvZiBzaGFyZWQgZmVuY2VzIHJldHVybmVkCi0gKiBA cHNoYXJlZDogdGhlIGFycmF5IG9mIHNoYXJlZCBmZW5jZSBwdHJzIHJldHVybmVkIChhcnJheSBp cyBrcmVhbGxvYydkIHRvCi0gKiB0aGUgcmVxdWlyZWQgc2l6ZSwgYW5kIG11c3QgYmUgZnJlZWQg YnkgY2FsbGVyKQotICoKLSAqIFJFVFVSTlMKLSAqIFplcm8gb3IgLWVycm5vCi0gKi8KLWludCBy ZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3Uoc3RydWN0IHJlc2VydmF0aW9uX29iamVj dCAqb2JqLAorc3RhdGljIGludCBfX3Jlc2VydmF0aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdShz dHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpvYmosCiAJCQkJICAgICAgc3RydWN0IGRtYV9mZW5j ZSAqKnBmZW5jZV9leGNsLAogCQkJCSAgICAgIHVuc2lnbmVkICpwc2hhcmVkX2NvdW50LAotCQkJ CSAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKioqcHNoYXJlZCkKKwkJCQkgICAgICBzdHJ1Y3QgZG1h X2ZlbmNlICoqKnBzaGFyZWQsCisJCQkJICAgICAgc3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9s aXN0ICoqbGlzdF9zaGFyZWQpCiB7CiAJc3RydWN0IGRtYV9mZW5jZSAqKnNoYXJlZCA9IE5VTEw7 CiAJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2VfZXhjbDsKIAl1bnNpZ25lZCBpbnQgc2hhcmVkX2Nv dW50OwogCWludCByZXQgPSAxOworCXZvaWQgKnB0ciA9IE5VTEw7CiAKIAlkbyB7CiAJCXN0cnVj dCByZXNlcnZhdGlvbl9vYmplY3RfbGlzdCAqZm9iajsKQEAgLTM1OSwyMyArMzE1LDE2IEBAIGlu dCByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3Uoc3RydWN0IHJlc2VydmF0aW9uX29i amVjdCAqb2JqLAogCiAJCWZvYmogPSByY3VfZGVyZWZlcmVuY2Uob2JqLT5mZW5jZSk7CiAJCWlm IChmb2JqKSB7Ci0JCQlzdHJ1Y3QgZG1hX2ZlbmNlICoqbnNoYXJlZDsKLQkJCXNpemVfdCBzeiA9 IHNpemVvZigqc2hhcmVkKSAqIGZvYmotPnNoYXJlZF9tYXg7Ci0KLQkJCW5zaGFyZWQgPSBrcmVh bGxvYyhzaGFyZWQsIHN6LAotCQkJCQkgICBHRlBfTk9XQUlUIHwgX19HRlBfTk9XQVJOKTsKLQkJ CWlmICghbnNoYXJlZCkgeworCQkJaWYgKCFyZWFsbG9jX3NoYXJlZCgmcHRyLCAmc2hhcmVkLCBm b2JqLT5zaGFyZWRfbWF4LCBsaXN0X3NoYXJlZCwgZmFsc2UpKSB7CiAJCQkJcmN1X3JlYWRfdW5s b2NrKCk7Ci0JCQkJbnNoYXJlZCA9IGtyZWFsbG9jKHNoYXJlZCwgc3osIEdGUF9LRVJORUwpOwot CQkJCWlmIChuc2hhcmVkKSB7Ci0JCQkJCXNoYXJlZCA9IG5zaGFyZWQ7Ci0JCQkJCWNvbnRpbnVl OworCQkJCWlmICghcmVhbGxvY19zaGFyZWQoJnB0ciwgJnNoYXJlZCwgZm9iai0+c2hhcmVkX21h eCwgbGlzdF9zaGFyZWQsIHRydWUpKSB7CisJCQkJCXJldCA9IC1FTk9NRU07CisJCQkJCWJyZWFr OwogCQkJCX0KIAotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJYnJlYWs7CisJCQkJLyogbmVlZCB0 byBhY3F1aXJlIHJjdSBsb2NrIGFnYWluIGFuZCByZXRyeSAqLworCQkJCWNvbnRpbnVlOwogCQkJ fQotCQkJc2hhcmVkID0gbnNoYXJlZDsKIAkJCXNoYXJlZF9jb3VudCA9IGZvYmotPnNoYXJlZF9j b3VudDsKIAogCQkJZm9yIChpID0gMDsgaSA8IHNoYXJlZF9jb3VudDsgKytpKSB7CkBAIC0zOTgs MTYgKzM0Nyw5MyBAQCBpbnQgcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9mZW5jZXNfcmN1KHN0cnVj dCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaiwKIAl9IHdoaWxlIChyZXQpOwogCiAJaWYgKCFzaGFy ZWRfY291bnQpIHsKLQkJa2ZyZWUoc2hhcmVkKTsKKwkJa2ZyZWUocHRyKTsKKwkJcHRyID0gTlVM TDsKIAkJc2hhcmVkID0gTlVMTDsKIAl9CiAKLQkqcHNoYXJlZF9jb3VudCA9IHNoYXJlZF9jb3Vu dDsKLQkqcHNoYXJlZCA9IHNoYXJlZDsKLQkqcGZlbmNlX2V4Y2wgPSBmZW5jZV9leGNsOworCWlm ICghbGlzdF9zaGFyZWQpIHsKKwkJKnBzaGFyZWRfY291bnQgPSBzaGFyZWRfY291bnQ7CisJCSpw c2hhcmVkID0gc2hhcmVkOworCX0gZWxzZSB7CisJCSpsaXN0X3NoYXJlZCA9IHB0cjsKKwkJaWYg KHB0cikKKwkJCSgqbGlzdF9zaGFyZWQpLT5zaGFyZWRfY291bnQgPSBzaGFyZWRfY291bnQ7CisJ fQogCisJKnBmZW5jZV9leGNsID0gZmVuY2VfZXhjbDsKIAlyZXR1cm4gcmV0OwogfQorCisKKy8q KgorKiByZXNlcnZhdGlvbl9vYmplY3RfY29weV9mZW5jZXMgLSBDb3B5IGFsbCBmZW5jZXMgZnJv bSBzcmMgdG8gZHN0LgorKiBAZHN0OiB0aGUgZGVzdGluYXRpb24gcmVzZXJ2YXRpb24gb2JqZWN0 CisqIEBzcmM6IHRoZSBzb3VyY2UgcmVzZXJ2YXRpb24gb2JqZWN0CisqCisqIENvcHkgYWxsIGZl bmNlcyBmcm9tIHNyYyB0byBkc3QuIGRzdC1sb2NrIG11c3QgYmUgaGVsZC4KKyovCitpbnQgcmVz ZXJ2YXRpb25fb2JqZWN0X2NvcHlfZmVuY2VzKHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKmRz dCwKKwkJCQkgICBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpzcmMpCit7CisJc3RydWN0IHJl c2VydmF0aW9uX29iamVjdF9saXN0ICpvbGRfbGlzdCwgKmRzdF9saXN0OworCXN0cnVjdCBkbWFf ZmVuY2UgKmV4Y2wsICpvbGQ7CisJdW5zaWduZWQgaTsKKwlpbnQgcmV0OworCisJcmV0ID0gX19y ZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2ZlbmNlc19yY3Uoc3JjLCAmZXhjbCwgTlVMTCwKKwkJCQkJ CSAgTlVMTCwgJmRzdF9saXN0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJa2ZyZWUo ZHN0LT5zdGFnZWQpOworCWRzdC0+c3RhZ2VkID0gTlVMTDsKKworCW9sZCA9IHJjdV9kZXJlZmVy ZW5jZV9wcm90ZWN0ZWQoZHN0LT5mZW5jZV9leGNsLAorCQkJCQlyZXNlcnZhdGlvbl9vYmplY3Rf aGVsZChkc3QpKTsKKworCW9sZF9saXN0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkc3Qt PmZlbmNlLAorCQkJCQkgICAgIHJlc2VydmF0aW9uX29iamVjdF9oZWxkKGRzdCkpOworCisJcHJl ZW1wdF9kaXNhYmxlKCk7CisJd3JpdGVfc2VxY291bnRfYmVnaW4oJmRzdC0+c2VxKTsKKwkvKiB3 cml0ZV9zZXFjb3VudF9iZWdpbiBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBiYXJyaWVy ICovCisJUkNVX0lOSVRfUE9JTlRFUihkc3QtPmZlbmNlX2V4Y2wsIGV4Y2wpOworCVJDVV9JTklU X1BPSU5URVIoZHN0LT5mZW5jZSwgZHN0X2xpc3QpOworCXdyaXRlX3NlcWNvdW50X2VuZCgmZHN0 LT5zZXEpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlpZiAob2xkX2xpc3QpIHsKKwkJZm9yIChp ID0gMDsgaSA8IG9sZF9saXN0LT5zaGFyZWRfY291bnQ7IGkrKykKKwkJCWRtYV9mZW5jZV9wdXQo b2xkX2xpc3QtPnNoYXJlZFtpXSk7CisKKwkJa2ZyZWVfcmN1KG9sZF9saXN0LCByY3UpOworCX0K KwlkbWFfZmVuY2VfcHV0KG9sZCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmVz ZXJ2YXRpb25fb2JqZWN0X2NvcHlfZmVuY2VzKTsKKworLyoqCisgKiByZXNlcnZhdGlvbl9vYmpl Y3RfZ2V0X2ZlbmNlc19yY3UgLSBHZXQgYW4gb2JqZWN0J3Mgc2hhcmVkIGFuZCBleGNsdXNpdmUK KyAqIGZlbmNlcyB3aXRob3V0IHVwZGF0ZSBzaWRlIGxvY2sgaGVsZAorICogQG9iajogdGhlIHJl c2VydmF0aW9uIG9iamVjdAorICogQHBmZW5jZV9leGNsOiB0aGUgcmV0dXJuZWQgZXhjbHVzaXZl IGZlbmNlIChvciBOVUxMKQorICogQHBzaGFyZWRfY291bnQ6IHRoZSBudW1iZXIgb2Ygc2hhcmVk IGZlbmNlcyByZXR1cm5lZAorICogQHBzaGFyZWQ6IHRoZSBhcnJheSBvZiBzaGFyZWQgZmVuY2Ug cHRycyByZXR1cm5lZCAoYXJyYXkgaXMga3JlYWxsb2MnZCB0bworICogdGhlIHJlcXVpcmVkIHNp emUsIGFuZCBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxlcikKKyAqCisgKiBSRVRVUk5TCisgKiBaZXJv IG9yIC1lcnJubworICovCitpbnQgcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9mZW5jZXNfcmN1KHN0 cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKm9iaiwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2ZlbmNl ICoqcGZlbmNlX2V4Y2wsCisJCQkJICAgICAgdW5zaWduZWQgKnBzaGFyZWRfY291bnQsCisJCQkJ ICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKipwc2hhcmVkKQoreworCXJldHVybiBfX3Jlc2VydmF0 aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdShvYmosIHBmZW5jZV9leGNsLCBwc2hhcmVkX2NvdW50 LCBwc2hhcmVkLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKHJlc2VydmF0aW9uX29iamVj dF9nZXRfZmVuY2VzX3JjdSk7CiAKIC8qKgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==