From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH 1/2] drm/panfrost: Allow passing extra information about BOs used by a job Date: Mon, 16 Sep 2019 15:11:14 +0200 Message-ID: <20190916151114.5faab331@collabora.com> References: <20190913111748.21071-1-boris.brezillon@collabora.com> <18586dc0-aa00-67e7-ec67-fdcded5a03eb@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id 88F536E977 for ; Mon, 16 Sep 2019 13:11:18 +0000 (UTC) In-Reply-To: <18586dc0-aa00-67e7-ec67-fdcded5a03eb@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Steven Price Cc: Rob Herring , dri-devel@lists.freedesktop.org, Alyssa Rosenzweig List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCAxMyBTZXAgMjAxOSAxNDo0NDoxNCArMDEwMApTdGV2ZW4gUHJpY2UgPHN0ZXZlbi5w cmljZUBhcm0uY29tPiB3cm90ZToKCj4gT24gMTMvMDkvMjAxOSAxMjoxNywgQm9yaXMgQnJlemls bG9uIHdyb3RlOgo+ID4gVGhlIFJFQUQvV1JJVEUgZmxhZ3MgYXJlIHBhcnRpY3VsYXJseSB1c2Vm dWwgaWYgd2Ugd2FudCB0byBhdm9pZAo+ID4gc2VyaWFsaXphdGlvbiBvZiBqb2JzIHRoYXQgcmVh ZCBmcm9tIHRoZSBzYW1lIEJPIGJ1dCBuZXZlciB3cml0ZSB0byBpdC4KPiA+IFRoZSBOT19JTVBM SUNJVF9GRU5DRSBtaWdodCBiZSB1c2VmdWwgd2hlbiB0aGUgdXNlciBrbm93cyB0aGUgQk8gaXMK PiA+IHNoYXJlZCBidXQgam9icyBhcmUgdXNpbmcgZGlmZmVyZW50IHBvcnRpb25zIG9mIHRoZSBi dWZmZXIuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJl emlsbG9uQGNvbGxhYm9yYS5jb20+ICAKPiAKPiBHb29kIGZlYXR1cmUgLSB3ZSBjb3VsZCBkbyB3 aXRoIGFuIChlYXN5KSB3YXkgb2YgdGhlIHVzZXIgZHJpdmVyCj4gZGV0ZWN0aW5nIHRoaXMgLSBz byBpdCBtaWdodCBiZSB3b3J0aCBidW1waW5nIHRoZSBkcml2ZXIgdmVyc2lvbiBmb3IgdGhpcz8K Ckkgd2FzIHRyeWluZyB0byBzdXBwb3J0IHRoaXMgZmVhdHVyZSB3aXRob3V0IGFkZGluZyBhIG5l dyBmZWF0dXJlCmZsYWcgb3IgYnVtcGluZyB0aGUgbWlub3IgdmVyc2lvbiwgYnV0IEkgZ3Vlc3Mg dGhlcmUncyBubyBnb29kCnJlYXNvbiB0byBkbyB0aGF0LgoKPiAKPiBTb21lIG1vcmUgY29tbWVu dHMgYmVsb3cuCj4gCj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJv c3RfZHJ2LmMgfCAgNzIgKysrKysrKysrLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3Qv cGFuZnJvc3Rfam9iLmMgfCAxNjQgKysrKysrKysrKysrKysrKysrKy0tLS0tCj4gPiAgZHJpdmVy cy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5oIHwgIDExICstCj4gPiAgaW5jbHVkZS91 YXBpL2RybS9wYW5mcm9zdF9kcm0uaCAgICAgICAgIHwgIDQxICsrKysrKwo+ID4gIDQgZmlsZXMg Y2hhbmdlZCwgMjQ3IGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCj4gPiBpbmRleCBkNzQ0NDJkNzEwNDgu LjA4MDgyZmQ1NTdjMyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9w YW5mcm9zdF9kcnYuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0 X2Rydi5jCj4gPiBAQCAtMTE5LDIwICsxMTksNzYgQEAgcGFuZnJvc3RfbG9va3VwX2JvcyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIAkJICBzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCAq YXJncywKPiA+ICAJCSAgc3RydWN0IHBhbmZyb3N0X2pvYiAqam9iKQo+ID4gIHsKPiA+IC0Jam9i LT5ib19jb3VudCA9IGFyZ3MtPmJvX2hhbmRsZV9jb3VudDsKPiA+ICsJc3RydWN0IGRybV9wYW5m cm9zdF9zdWJtaXRfYm8gKmJvX2Rlc2NzID0gTlVMTDsKPiA+ICsJdTMyICpoYW5kbGVzID0gTlVM TDsKPiA+ICsJdTMyIGksIGJvX2NvdW50Owo+ID4gKwlpbnQgcmV0ID0gMDsKPiA+ICAKPiA+IC0J aWYgKCFqb2ItPmJvX2NvdW50KQo+ID4gKwlib19jb3VudCA9IGFyZ3MtPmJvX2Rlc2NfY291bnQg Pwo+ID4gKwkJICAgYXJncy0+Ym9fZGVzY19jb3VudCA6IGFyZ3MtPmJvX2hhbmRsZV9jb3VudDsK PiA+ICsJaWYgKCFib19jb3VudCkKPiA+ICAJCXJldHVybiAwOwo+ID4gIAo+ID4gLQlqb2ItPmlt cGxpY2l0X2ZlbmNlcyA9IGt2bWFsbG9jX2FycmF5KGpvYi0+Ym9fY291bnQsCj4gPiAtCQkJCSAg c2l6ZW9mKHN0cnVjdCBkbWFfZmVuY2UgKiksCj4gPiArCWpvYi0+Ym9zID0ga3ZtYWxsb2NfYXJy YXkoYm9fY291bnQsIHNpemVvZigqam9iLT5ib3MpLAo+ID4gIAkJCQkgIEdGUF9LRVJORUwgfCBf X0dGUF9aRVJPKTsKPiA+IC0JaWYgKCFqb2ItPmltcGxpY2l0X2ZlbmNlcykKPiA+ICsJaWYgKCFq b2ItPmJvcykKPiA+ICAJCXJldHVybiAtRU5PTUVNOwo+ID4gIAo+ID4gLQlyZXR1cm4gZHJtX2dl bV9vYmplY3RzX2xvb2t1cChmaWxlX3ByaXYsCj4gPiAtCQkJCSAgICAgICh2b2lkIF9fdXNlciAq KSh1aW50cHRyX3QpYXJncy0+Ym9faGFuZGxlcywKPiA+IC0JCQkJICAgICAgam9iLT5ib19jb3Vu dCwgJmpvYi0+Ym9zKTsKPiA+ICsJam9iLT5ib19jb3VudCA9IGJvX2NvdW50Owo+ID4gKwlib19k ZXNjcyA9IGt2bWFsbG9jX2FycmF5KGJvX2NvdW50LCBzaXplb2YoKmJvX2Rlc2NzKSwKPiA+ICsJ CQkJICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gPiArCWlmICghYm9fZGVzY3MpIHsKPiA+ ICsJCXJldCA9IC1FTk9NRU07Cj4gPiArCQlnb3RvIG91dDsgIAo+IAo+IFRoaXMgY2FuIGJlIGp1 c3QgInJldHVybiAtRU5PTUVNIiAtIGJvdGggaGFuZGxlcyBhbmQgYm9fZGVzY3Mgd2lsbCBiZSBO VUxMLgoKV2lsbCBmaXggdGhhdC4KCj4gCj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCFhcmdzLT5i b19kZXNjX2NvdW50KSB7Cj4gPiArCQloYW5kbGVzID0ga3ZtYWxsb2NfYXJyYXkoYm9fY291bnQs IHNpemVvZigqaGFuZGxlcyksCj4gPiArCQkJCQkgR0ZQX0tFUk5FTCk7Cj4gPiArCQlpZiAoIWhh bmRsZXMpIHsKPiA+ICsJCQlyZXQgPS1FTk9NRU07Cj4gPiArCQkJZ290byBvdXQ7Cj4gPiArCQl9 Cj4gPiArCj4gPiArCQlpZiAoY29weV9mcm9tX3VzZXIoaGFuZGxlcywKPiA+ICsJCQkJICAgKHZv aWQgX191c2VyICopKHVpbnRwdHJfdClhcmdzLT5ib19oYW5kbGVzLAo+ID4gKwkJCQkgICBqb2It PmJvX2NvdW50ICogc2l6ZW9mKCpoYW5kbGVzKSkpIHsKPiA+ICsJCQlyZXQgPSAtRUZBVUxUOwo+ ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGpv Yi0+Ym9fY291bnQ7IGkrKykgewo+ID4gKwkJCWJvX2Rlc2NzW2ldLmhhbmRsZSA9IGhhbmRsZXNb aV07Cj4gPiArCQkJYm9fZGVzY3NbaV0uZmxhZ3MgPSBQQU5GUk9TVF9TVUJNSVRfQk9fV1JJVEUg fAo+ID4gKwkJCQkJICAgIFBBTkZST1NUX1NVQk1JVF9CT19SRUFEOyAgCj4gCj4gWW91IGNhbiB1 c2UgUEFORlJPU1RfU1VCTUlUX0JPX1JXIGhlcmUuCgpUaGF0IGFzIHdlbGwuCgo+IAo+ID4gKwkJ fQo+ID4gKwl9IGVsc2UgaWYgKGNvcHlfZnJvbV91c2VyKGJvX2Rlc2NzLAo+ID4gKwkJCQkgICh2 b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncy0+Ym9fZGVzY3MsCj4gPiArCQkJCSAgam9iLT5i b19jb3VudCAqIHNpemVvZigqYm9fZGVzY3MpKSkgewo+ID4gKwkJcmV0ID0gLUVGQVVMVDsKPiA+ ICsJCWdvdG8gb3V0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBqb2ItPmJv X2NvdW50OyBpKyspIHsKPiA+ICsJCWlmICgoYm9fZGVzY3NbaV0uZmxhZ3MgJiB+UEFORlJPU1Rf U1VCTUlUX0JPX1ZBTElEX0ZMQUdTKSB8fAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIShib19k ZXNjc1tpXS5mbGFncyAmIFBBTkZST1NUX1NVQk1JVF9CT19SVykpIHsKPiA+ICsJCQlyZXQgPSAt RUlOVkFMOwo+ID4gKwkJCWdvdG8gb3V0Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJam9iLT5ib3Nb aV0uZmxhZ3MgPSBib19kZXNjc1tpXS5mbGFnczsKPiA+ICsJCWpvYi0+Ym9zW2ldLm9iaiA9IGRy bV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlX3ByaXYsCj4gPiArCQkJCQkJCWJvX2Rlc2NzW2ldLmhh bmRsZSk7Cj4gPiArCQlpZiAoIWpvYi0+Ym9zW2ldLm9iaikgewo+ID4gKwkJCXJldCA9IC1FTk9F TlQ7Cj4gPiArCQkJZ290byBvdXQ7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICtvdXQ6Cj4g PiArCWt2ZnJlZShoYW5kbGVzKTsKPiA+ICsJa3ZmcmVlKGJvX2Rlc2NzKTsKPiA+ICsJcmV0dXJu IHJldDsKPiA+ICB9Cj4gPiAgCj4gPiAgLyoqCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2pvYi5jCj4gPiBpbmRleCAwNWM4NWY0NWEwZGUuLmU0Yjc0ZmRlOTMzOSAxMDA2NDQK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCj4gPiBAQCAtMTkzLDI0 ICsxOTMsMTE2IEBAIHN0YXRpYyB2b2lkIHBhbmZyb3N0X2pvYl9od19zdWJtaXQoc3RydWN0IHBh bmZyb3N0X2pvYiAqam9iLCBpbnQganMpCj4gPiAgCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5k KHBmZGV2LT5kZXYpOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdm9pZCBwYW5mcm9zdF9hY3F1 aXJlX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAo+ID4gLQkJCQkJ ICAgaW50IGJvX2NvdW50LAo+ID4gLQkJCQkJICAgc3RydWN0IGRtYV9mZW5jZSAqKmltcGxpY2l0 X2ZlbmNlcykKPiA+ICtzdGF0aWMgaW50IHBhbmZyb3N0X2FjcXVpcmVfb2JqZWN0X2ZlbmNlcyhz dHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IpCj4gPiAgewo+ID4gLQlpbnQgaTsKPiA+ICsJaW50IGks IHJldDsKPiA+ICAKPiA+IC0JZm9yIChpID0gMDsgaSA8IGJvX2NvdW50OyBpKyspCj4gPiAtCQlp bXBsaWNpdF9mZW5jZXNbaV0gPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3UoYm9zW2ldLT5yZXN2KTsK PiA+ICsJZm9yIChpID0gMDsgaSA8IGpvYi0+Ym9fY291bnQ7IGkrKykgewo+ID4gKwkJc3RydWN0 IHBhbmZyb3N0X2pvYl9ib19kZXNjICpibyA9ICZqb2ItPmJvc1tpXTsKPiA+ICsJCXN0cnVjdCBk bWFfcmVzdiAqcm9iaiA9IGJvLT5vYmotPnJlc3Y7Cj4gPiArCj4gPiArCQlpZiAoIShqb2ItPmJv c1tpXS5mbGFncyAmIFBBTkZST1NUX1NVQk1JVF9CT19XUklURSkpIHsKPiA+ICsJCQlyZXQgPSBk bWFfcmVzdl9yZXNlcnZlX3NoYXJlZChyb2JqLCAxKTsKPiA+ICsJCQlpZiAocmV0KQo+ID4gKwkJ CQlyZXR1cm4gcmV0Owo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJaWYgKGJvLT5mbGFncyAmIFBBTkZS T1NUX1NVQk1JVF9CT19OT19JTVBMSUNJVF9GRU5DRSkKPiA+ICsJCQljb250aW51ZTsKPiA+ICsK PiA+ICsJCWlmIChiby0+ZmxhZ3MgJiBQQU5GUk9TVF9TVUJNSVRfQk9fV1JJVEUpIHsKPiA+ICsJ CQlyZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShyb2JqLCAmYm8tPmV4Y2wsCj4gPiArCQkJ CQkJICAgICAgJmJvLT5zaGFyZWRfY291bnQsCj4gPiArCQkJCQkJICAgICAgJmJvLT5zaGFyZWQp Owo+ID4gKwkJCWlmIChyZXQpCj4gPiArCQkJCXJldHVybiByZXQ7Cj4gPiArCQl9IGVsc2Ugewo+ ID4gKwkJCWJvLT5leGNsID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KHJvYmopOwo+ID4gKwkJfSAg Cj4gCj4gVGhlIGltcGxlbWVudGF0aW9uIG9mIE5PX0lNUExJQ0lUX0ZFTkNFIHNlZW1zIGEgYml0 IHN0cmFuZ2UgdG8gbWU6IFJFQUQKPiB8IE5PX0lNUExJQ0lUX0ZFTkNFIHN0aWxsIHJlc2VydmVz IHNwYWNlIGZvciBhIHNoYXJlZCBmZW5jZS4gSSBkb24ndAo+IHVuZGVyc3RhbmQgd2h5LgoKVGhl IE5PX0lNUExJQ0lUX0ZFTkNFIGZsYWcgaXMgdGVsbGluZyB0aGUgY29yZSB3ZSBkb24ndCB3YW50 IHRvIHdhaXQgb24KdGhlIGZlbmNlIGluc3RhbGxlZCBieSBvdGhlciBqb2JzIG9uIHRoaXMgQk8s IGJ1dCBvdGhlciBtaWdodCB3YW50IHRvCndhaXQgb24gb3VyIHJlbmRlci1kb25lIGZlbmNlICh3 aGVuIENQVSBhY2Nlc3NlcyBhcmUgcmVxdWlyZWQsIG9yIHNpbXBseQpiZWNhdXNlIG90aGVyIGpv YnMgZGlkbid0IHBhc3MgdGhlIE5PX0lNUExJQ0lUIGZlbmNlIGZsYWcpLgoKPiAKPiA+ICsJfQo+ ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiAtc3RhdGljIHZvaWQgcGFuZnJv c3RfYXR0YWNoX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqYm9zLAo+ID4g LQkJCQkJICBpbnQgYm9fY291bnQsCj4gPiAtCQkJCQkgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl KQo+ID4gK3N0YXRpYyB2b2lkIHBhbmZyb3N0X2F0dGFjaF9vYmplY3RfZmVuY2VzKHN0cnVjdCBw YW5mcm9zdF9qb2IgKmpvYikKPiA+ICB7Cj4gPiAgCWludCBpOwo+ID4gIAo+ID4gLQlmb3IgKGkg PSAwOyBpIDwgYm9fY291bnQ7IGkrKykKPiA+IC0JCWRtYV9yZXN2X2FkZF9leGNsX2ZlbmNlKGJv c1tpXS0+cmVzdiwgZmVuY2UpOwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgam9iLT5ib19jb3VudDsg aSsrKSB7Cj4gPiArCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IGpvYi0+Ym9zW2ldLm9i ajsKPiA+ICsKPiA+ICsJCWlmIChqb2ItPmJvc1tpXS5mbGFncyAmIFBBTkZST1NUX1NVQk1JVF9C T19XUklURSkKPiA+ICsJCQlkbWFfcmVzdl9hZGRfZXhjbF9mZW5jZShvYmotPnJlc3YsCj4gPiAr CQkJCQkJam9iLT5yZW5kZXJfZG9uZV9mZW5jZSk7Cj4gPiArCQllbHNlCj4gPiArCQkJZG1hX3Jl c3ZfYWRkX3NoYXJlZF9mZW5jZShvYmotPnJlc3YsCj4gPiArCQkJCQkJICBqb2ItPnJlbmRlcl9k b25lX2ZlbmNlKTsKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBhbmZyb3N0 X2pvYl9sb2NrX2JvcyhzdHJ1Y3QgcGFuZnJvc3Rfam9iICpqb2IsCj4gPiArCQkJCSBzdHJ1Y3Qg d3dfYWNxdWlyZV9jdHggKmFjcXVpcmVfY3R4KQo+ID4gK3sKPiA+ICsJaW50IGNvbnRlbmRlZCA9 IC0xOwo+ID4gKwlpbnQgaSwgcmV0Owo+ID4gKwo+ID4gKwl3d19hY3F1aXJlX2luaXQoYWNxdWly ZV9jdHgsICZyZXNlcnZhdGlvbl93d19jbGFzcyk7Cj4gPiArCj4gPiArcmV0cnk6Cj4gPiArCWlm IChjb250ZW5kZWQgIT0gLTEpIHsKPiA+ICsJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0g am9iLT5ib3NbY29udGVuZGVkXS5vYmo7Cj4gPiArCj4gPiArCQlyZXQgPSB3d19tdXRleF9sb2Nr X3Nsb3dfaW50ZXJydXB0aWJsZSgmb2JqLT5yZXN2LT5sb2NrLAo+ID4gKwkJCQkJCSAgICAgICBh Y3F1aXJlX2N0eCk7ICAKPiAKPiBkbWFfcmVzdl9sb2NrX3Nsb3RfaW50ZXJydXB0aWJsZSgpPwoK WWVwIChJIHN0YXJ0ZWQgdGhpcyBvbiBhbiBvbGRlciBrZXJuZWwgdmVyc2lvbiB3aGVyZSBkbWFf cmVzdl8gaGVscGVycwpkaWRuJ3QgZXhpdCBhbmQgYXBwYXJlbnRseSBmb3Jnb3QgdG8gY29udmVy dCBhIGZldyB0aGluZ3Mgd2hlbgpyZWJhc2luZykuCgo+IAo+ID4gKwkJaWYgKHJldCkgewo+ID4g KwkJCXd3X2FjcXVpcmVfZG9uZShhY3F1aXJlX2N0eCk7Cj4gPiArCQkJcmV0dXJuIHJldDsKPiA+ ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgam9iLT5ib19jb3VudDsg aSsrKSB7Cj4gPiArCQlpZiAoaSA9PSBjb250ZW5kZWQpCj4gPiArCQkJY29udGludWU7Cj4gPiAr Cj4gPiArCQlyZXQgPSB3d19tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmpvYi0+Ym9zW2ldLm9i ai0+cmVzdi0+bG9jaywKPiA+ICsJCQkJCQkgIGFjcXVpcmVfY3R4KTsgIAo+IAo+IGRtYV9yZXN2 X2xvY2tfaW50ZXJydXB0aWJsZSgpPwoKRGl0dG8KCj4gCj4gPiArCQlpZiAocmV0KSB7Cj4gPiAr CQkJaW50IGo7Cj4gPiArCj4gPiArCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKPiA+ICsJCQkJ d3dfbXV0ZXhfdW5sb2NrKCZqb2ItPmJvc1tqXS5vYmotPnJlc3YtPmxvY2spOwo+ID4gKwo+ID4g KwkJCWlmIChjb250ZW5kZWQgIT0gLTEgJiYgY29udGVuZGVkID49IGkpIHsKPiA+ICsJCQkJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpjb250ZW5kZWRfb2JqOwo+ID4gKwo+ID4gKwkJCQljb250ZW5k ZWRfb2JqID0gam9iLT5ib3NbY29udGVuZGVkXS5vYmo7Cj4gPiArCQkJCXd3X211dGV4X3VubG9j aygmY29udGVuZGVkX29iai0+cmVzdi0+bG9jayk7Cj4gPiArCQkJfQo+ID4gKwo+ID4gKwkJCWlm IChyZXQgPT0gLUVERUFETEspIHsKPiA+ICsJCQkJY29udGVuZGVkID0gaTsKPiA+ICsJCQkJZ290 byByZXRyeTsKPiA+ICsJCQl9Cj4gPiArCj4gPiArCQkJd3dfYWNxdWlyZV9kb25lKGFjcXVpcmVf Y3R4KTsKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXd3 X2FjcXVpcmVfZG9uZShhY3F1aXJlX2N0eCk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30g IAo+IAo+IFRoaXMgbG9va3MgbGlrZSBhIGNvcHkgb2YgZHJtX2dlbV9sb2NrX3Jlc2VydmF0aW9u cygpLiBUaGUgb25seSByZWFzb24KPiBmb3IgaXQgYXMgZmFyIGFzIEkgY2FuIHNlZSBpcyBiZWNh dXNlIHdlIG5vdyBoYXZlIGFuIGFycmF5IG9mIHN0cnVjdAo+IHBhbmZyb3N0X2pvYl9ib19kZXNj IHJhdGhlciB0aGFuIGEgZGlyZWN0IGFycmF5IG9mIHN0cnVjdAo+IGRybV9nZW1fb2JqZWN0LiBJ J20gbm90IHN1cmUgaGF2aW5nIGV2ZXJ5dGhpbmcgbmVhdGx5IGluIG9uZSBzdHJ1Y3R1cmUKPiBp cyB3b3J0aCB0aGlzIGNvc3Q/CgpJIHJlYWxseSBsaWtlIHRoZSBpZGVhcyBvZiBoYXZpbmcgYWxs IEJPIHJlbGF0ZWQgZmllbGRzIHB1dCBpbiBhCnNlcGFyYXRlIHN0cnVjdHVyZSwgYnV0IG9rYXku CgoKPiA+ICAvKioKPiA+ICAgKiBzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCAtIGlvY3RsIGFy Z3VtZW50IGZvciBzdWJtaXR0aW5nIGNvbW1hbmRzIHRvIHRoZSAzRAo+ID4gICAqIGVuZ2luZS4K PiA+IEBAIC02OCw2ICs5MCwyNSBAQCBzdHJ1Y3QgZHJtX3BhbmZyb3N0X3N1Ym1pdCB7Cj4gPiAg Cj4gPiAgCS8qKiBBIGNvbWJpbmF0aW9uIG9mIFBBTkZST1NUX0pEX1JFUV8qICovCj4gPiAgCV9f dTMyIHJlcXVpcmVtZW50czsKPiA+ICsKPiA+ICsJLyoqCj4gPiArCSAqIFBvaW50ZXIgdG8gYSB1 MzIgYXJyYXkgb2YgJmRybV9wYW5mcm9zdF9zdWJtaXRfYm9fZGVzYyBvYmplY3RzLiBUaGlzCj4g PiArCSAqIGZpZWxkIGlzIG1lYW50IHRvIHJlcGxhY2UgJmRybV9wYW5mcm9zdF9zdWJtaXQuYm9f aGFuZGxlcyB3aGljaCBkaWQKPiA+ICsJICogbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9u IHRvIHJlbGF4IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuCj4gPiArCSAqIGpvYnMgdGhhdCBvbmx5 IG9ubHkgcmVhZCB0aGUgQk8gdGhleSBzaGFyZS4gV2hlbiBib3RoCj4gPiArCSAqICZkcm1fcGFu ZnJvc3Rfc3VibWl0LmJvX2hhbmRsZXMgYW5kICZkcm1fcGFuZnJvc3Rfc3VibWl0LmJvX2Rlc2Nz Cj4gPiArCSAqIGFyZSBwcm92aWRlZCwgZHJtX3BhbmZyb3N0X3N1Ym1pdC5ib19oYW5kbGVzIGlz IGlnbm9yZWQuCj4gPiArCSAqLwo+ID4gKwlfX3U2NCBib19kZXNjczsKPiA+ICsKPiA+ICsJLyoq Cj4gPiArCSAqIE51bWJlciBvZiBCTyBkZXNjcmlwdG9ycyBwYXNzZWQgaW4gKHNpemUgaXMgdGhh dCB0aW1lcwo+ID4gKwkgKiBzaXplb2YoZHJtX3BhbmZyb3N0X3N1Ym1pdF9ib19kZXNjKSkuCj4g PiArCSAqLwo+ID4gKwlfX3UzMiBib19kZXNjX2NvdW50OyAgCj4gCj4gV2UgZG9uJ3QgcmVhbGx5 IG5lZWQgYW5vdGhlciBjb3VudCBmaWVsZC4gYm9faGFuZGxlX2NvdW50IGNvdWxkIGJlCj4gcmUt dXNlZC4gSW5kZWVkIHRoaXMgY291bGQgZXZlbiBiZSBoYW5kbGVkIHdpdGgganVzdCBhIGZsYWdz IGZpZWxkIHdpdGgKPiBhIG5ldyBmbGFnIHNwZWNpZnlpbmcgdGhhdCBib19oYW5kbGVzIG5vIGxv bmdlciBwb2ludHMgdG8gaGFuZGxlcyBidXQgdG8KPiBib19kZXNjIG9iamVjdHMgaW5zdGVhZC4K CkFzIHNhaWQgYWJvdmUsIEkgd2FzIHRyeWluZyB0byBhdm9pZCBidW1waW5nIHRoZSBtaW5vciB2 ZXJzaW9uIG9yCmFkZGluZyBhIGZlYXR1cmUgZmxhZywgaGVuY2UgdGhlIGRlY2lzaW9uIHRvIGFk ZCAyIHNlcGFyYXRlIGZpZWxkcyBmb3IKdGhlIEJPIGRlc2MgYXJyYXkuIEkgYWdyZWUsIGl0J3Mg cHJvYmFibHkgbm90IHRoZSBiZXN0IHNvbHV0aW9uLCBzbwpJJ2xsIGFkZCBhIG5ldyBfUkVRXyBm bGFnIGFuZCBidW1wIHRoZSBtaW5vciB2ZXJzaW9uIGFzIHlvdSBzdWdnZXN0LgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=