From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH v5 05/11] drm/fb-helper: Remove drm_fb_helper_crtc Date: Wed, 15 May 2019 11:04:32 +0200 Message-ID: <20190515090432.GA31712@ravnborg.org> References: <20190506180139.6913-1-noralf@tronnes.org> <20190506180139.6913-6-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 90F93894E3 for ; Wed, 15 May 2019 09:04:36 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190506180139.6913-6-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgTm9yYWxmLgoKSSBoYXZlIHJlYWQgdGhyb3VnaCB0aGUgY2FobmVzIGEgY29wdXBsZSBvZiB0 aW1lcyBub3QgYW5kIGZlZWwgY29uZmlkZW50CnRvIGFkZCBteSByLWIgaWYgdGhlIGNvbW1lbnRz IGFyZSBjb25zaWRlcmVkLgoKT24gTW9uLCBNYXkgMDYsIDIwMTkgYXQgMDg6MDE6MzNQTSArMDIw MCwgTm9yYWxmIFRyw7hubmVzIHdyb3RlOgo+IEl0IG5vdyBvbmx5IGNvbnRhaW5zIHRoZSBtb2Rl c2V0IHNvIHVzZSB0aGF0IGRpcmVjdGx5IGluc3RlYWQgYW5kIGF0dGFjaAo+IGEgbW9kZXNldCBh cnJheSB0byBkcm1fY2xpZW50X2Rldi4gZHJtX2ZiX2hlbHBlciB3aWxsIHVzZSB0aGlzIGFycmF5 Lgo+IENvZGUgd2lsbCBsYXRlciBiZSBtb3ZlZCB0byBkcm1fY2xpZW50LCBzbyBhZGQgY29kZSB0 aGVyZSBpbiBhIG5ldyBmaWxlCj4gZHJtX2NsaWVudF9tb2Rlc2V0LmMgd2l0aCBNSVQgbGljZW5z ZSB0byBtYXRjaCBkcm1fZmJfaGVscGVyLmMuCgpUaGUgZmlyc3QgcGFydCBvZiB0aGlzIGNvbW1p dCBsb2cgY291bGQgdXNlIHNvbWUgcmUtcGhhcnNpbmcuCldoYXQgaXMgIkl0IiBldGMuCgo+IEBA IC05MiwxNCArOTEsMjAgQEAgaW50IGRybV9jbGllbnRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKPiAgCWNsaWVudC0+bmFtZSA9IG5h bWU7Cj4gIAljbGllbnQtPmZ1bmNzID0gZnVuY3M7Cj4gIAo+IC0JcmV0ID0gZHJtX2NsaWVudF9v cGVuKGNsaWVudCk7Cj4gKwlyZXQgPSBkcm1fY2xpZW50X21vZGVzZXRfY3JlYXRlKGNsaWVudCk7 Cj4gIAlpZiAocmV0KQo+ICAJCWdvdG8gZXJyX3B1dF9tb2R1bGU7Cj4gIAo+ICsJcmV0ID0gZHJt X2NsaWVudF9vcGVuKGNsaWVudCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4g Kwo+ICAJZHJtX2Rldl9nZXQoZGV2KTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgCj4gK2Vycl9mcmVl Ogo+ICsJZHJtX2NsaWVudF9tb2Rlc2V0X2ZyZWUoY2xpZW50KTsKPiAgZXJyX3B1dF9tb2R1bGU6 Cj4gIAlpZiAoZnVuY3MpCj4gIAkJbW9kdWxlX3B1dChmdW5jcy0+b3duZXIpOwo+IEBAIC0xNDgs NiArMTUzLDcgQEAgdm9pZCBkcm1fY2xpZW50X3JlbGVhc2Uoc3RydWN0IGRybV9jbGllbnRfZGV2 ICpjbGllbnQpCj4gIAo+ICAJRFJNX0RFVl9ERUJVR19LTVMoZGV2LT5kZXYsICIlc1xuIiwgY2xp ZW50LT5uYW1lKTsKPiAgCj4gKwlkcm1fY2xpZW50X21vZGVzZXRfZnJlZShjbGllbnQpOwo+ICAJ ZHJtX2NsaWVudF9jbG9zZShjbGllbnQpOwo+ICAJZHJtX2Rldl9wdXQoZGV2KTsKCklmIHRoZSBv cmRlciBzaG91bGQgYmUgdGhlIG9wcG9zaXRlIG9mIGluaXQgdGhlbiBjYWxsIGRybV9jbGllbnRf Y2xvc2UoKSBiZWZvcmUKZHJtX2NsaWVudF9tb2Rlc2V0X2ZyZWUoKQoKPiAgCWlmIChjbGllbnQt PmZ1bmNzKQoKPiArCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgY2xpZW50 KSB7Cj4gIAkJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSA9IG1vZGVfc2V0LT5jcnRjLT5wcmlt YXJ5Owo+ICAJCXVuc2lnbmVkIGludCByb3RhdGlvbjsKPiAgCj4gQEAgLTUxNyw5ICs1MTgsMTEg QEAgc3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGVfYXRvbWljKHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIsIGJvb2wgYWN0aXYKPiAgCj4gIHN0YXRpYyBpbnQgcmVzdG9yZV9mYmRl dl9tb2RlX2xlZ2FjeShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQo+ICB7Cj4gKwlz dHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXItPmNsaWVudDsKPiAgCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKPiArCXN0cnVjdCBkcm1fbW9k ZV9zZXQgKm1vZGVfc2V0Owo+ICAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Cj4gLQlpbnQgaSwg cmV0ID0gMDsKPiArCWludCByZXQgPSAwOwo+ICAKPiAgCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGZi X2hlbHBlci0+ZGV2KTsKPiAgCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZGV2KSB7Cj4gQEAg LTUzMiw4ICs1MzUsNyBAQCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9kZV9sZWdhY3koc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKPiAgCQkJCQkJICAgIERSTV9NT0RFX1JPVEFU RV8wKTsKPiAgCX0KPiAgCj4gLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50 OyBpKyspIHsKPiAtCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZmYl9oZWxwZXIt PmNydGNfaW5mb1tpXS5tb2RlX3NldDsKPiArCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldCht b2RlX3NldCwgY2xpZW50KSB7Cj4gIAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbW9kZV9zZXQt PmNydGM7Cj4gIAo+ICAJCWlmIChjcnRjLT5mdW5jcy0+Y3Vyc29yX3NldDIpIHsKVGhpcyBmdW5j dGlvbiByZXF1aXJlcyBtb2Rlc2V0X211dGV4IHRvIGJlIGhlbGQuIE1heWJlIGFkZCBjb21tZW50 PwoKPiBAQCAtNjgyLDE1ICs2ODksMTQgQEAgc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lz cnFfZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX29wID0geyB9Owo+ICAKPiAgc3RhdGljIHZvaWQgZHBt c19sZWdhY3koc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgaW50IGRwbXNfbW9kZSkK PiAgewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGll bnQ7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7Cj4gIAlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9k ZXNldDsKPiAtCWludCBpLCBqOwo+ICsJaW50IGo7Cj4gIAo+ICAJZHJtX21vZGVzZXRfbG9ja19h bGwoZGV2KTsKPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykg ewo+IC0JCW1vZGVzZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7Cj4gLQo+ ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkgewo+ICAJCWlm ICghbW9kZXNldC0+Y3J0Yy0+ZW5hYmxlZCkKPiAgCQkJY29udGludWU7Cj4KVGhpcyBmdW5jdGlv biBuZWVkcyBtb2Rlc2V0X211dGV4IC0gbWF5YmUgYWRkIGNvbW1lbnQ/Cgo+IEBAIC0xMzkwLDEz ICsxMzUzLDE0IEBAIHN0YXRpYyBpbnQgc2V0Y21hcF9wc2V1ZG9fcGFsZXR0ZShzdHJ1Y3QgZmJf Y21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCj4gIHN0YXRpYyBpbnQgc2V0Y21hcF9s ZWdhY3koc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQo+ICB7Cj4g IAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOwo+ICsJc3RydWN0 IGRybV9tb2RlX3NldCAqbW9kZXNldDsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAgCXUx NiAqciwgKmcsICpiOwo+IC0JaW50IGksIHJldCA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiAgCj4g IAlkcm1fbW9kZXNldF9sb2NrX2FsbChmYl9oZWxwZXItPmRldik7Cj4gLQlmb3IgKGkgPSAwOyBp IDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKPiAtCQljcnRjID0gZmJfaGVscGVyLT5j cnRjX2luZm9baV0ubW9kZV9zZXQuY3J0YzsKPiArCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNl dChtb2Rlc2V0LCAmZmJfaGVscGVyLT5jbGllbnQpIHsKPiArCQljcnRjID0gbW9kZXNldC0+Y3J0 YzsKPiAgCQlpZiAoIWNydGMtPmZ1bmNzLT5nYW1tYV9zZXQgfHwgIWNydGMtPmdhbW1hX3NpemUp Cj4gIAkJCXJldHVybiAtRUlOVkFMOwo+ICAKVGhpcyBmdW5jdGlvbiBuZWVkcyBtb2Rlc2V0X211 dGV4IC0gbWF5YmUgYWRkIGNvbW1lbnQ/Cgo+IEBAIC0xNDcyLDEwICsxNDM2LDExIEBAIHN0YXRp YyBpbnQgc2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZv ICppbmZvKQo+ICAJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsKPiAgCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiAgCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZTsKPiArCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Cj4gIAlzdHJ1Y3QgZHJt X2NydGMgKmNydGM7Cj4gIAl1MTYgKnIsICpnLCAqYjsKPiAtCWludCBpLCByZXQgPSAwOwo+ICAJ Ym9vbCByZXBsYWNlZDsKPiArCWludCByZXQgPSAwOwo+ICAKPiAgCWRybV9tb2Rlc2V0X2FjcXVp cmVfaW5pdCgmY3R4LCAwKTsKPiAgCj4gQEAgLTE0ODcsOCArMTQ1Miw4IEBAIHN0YXRpYyBpbnQg c2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZv KQo+ICAKPiAgCXN0YXRlLT5hY3F1aXJlX2N0eCA9ICZjdHg7Cj4gIHJldHJ5Ogo+IC0JZm9yIChp ID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJY3J0YyA9IGZiX2hl bHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmNydGM7Cj4gKwlkcm1fY2xpZW50X2Zvcl9lYWNo X21vZGVzZXQobW9kZXNldCwgJmZiX2hlbHBlci0+Y2xpZW50KSB7Cj4gKwkJY3J0YyA9IG1vZGVz ZXQtPmNydGM7Cj4gIAo+ICAJCWlmICghZ2FtbWFfbHV0KQo+ICAJCQlnYW1tYV9sdXQgPSBzZXRj bWFwX25ld19nYW1tYV9sdXQoY3J0YywgY21hcCk7Cj4gQEAgLTE1MTYsOCArMTQ4MSw4IEBAIHN0 YXRpYyBpbnQgc2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9p bmZvICppbmZvKQo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIG91dF9zdGF0ZTsKPiAgCj4gLQlmb3Ig KGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKPiAtCQljcnRjID0gZmJf aGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY3J0YzsKPiArCWRybV9jbGllbnRfZm9yX2Vh Y2hfbW9kZXNldChtb2Rlc2V0LCAmZmJfaGVscGVyLT5jbGllbnQpIHsKPiArCQljcnRjID0gbW9k ZXNldC0+Y3J0YzsKPiAgCj4gIAkJciA9IGNydGMtPmdhbW1hX3N0b3JlOwo+ICAJCWcgPSByICsg Y3J0Yy0+Z2FtbWFfc2l6ZTsKVGhpcyBmdW5jdGlvbiBuZWVkcyBtb2Rlc2V0X211dGV4IC0gbWF5 YmUgYWRkIGNvbW1lbnQ/Cgo+IEBAIC0xNTY3LDEyICsxNTMyLDE0IEBAIGludCBkcm1fZmJfaGVs cGVyX3NldGNtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQo+ ICAJCWdvdG8gdW5sb2NrOwo+ICAJfQo+ICAKPiArCW11dGV4X2xvY2soJmZiX2hlbHBlci0+Y2xp ZW50Lm1vZGVzZXRfbXV0ZXgpOwo+ICAJaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFM X1RSVUVDT0xPUikKPiAgCQlyZXQgPSBzZXRjbWFwX3BzZXVkb19wYWxldHRlKGNtYXAsIGluZm8p Owo+ICAJZWxzZSBpZiAoZHJtX2Rydl91c2VzX2F0b21pY19tb2Rlc2V0KGZiX2hlbHBlci0+ZGV2 KSkKPiAgCQlyZXQgPSBzZXRjbWFwX2F0b21pYyhjbWFwLCBpbmZvKTsKPiAgCWVsc2UKPiAgCQly ZXQgPSBzZXRjbWFwX2xlZ2FjeShjbWFwLCBpbmZvKTsKPiArCW11dGV4X3VubG9jaygmZmJfaGVs cGVyLT5jbGllbnQubW9kZXNldF9tdXRleCk7Cj4gIAo+ICAJZHJtX21hc3Rlcl9pbnRlcm5hbF9y ZWxlYXNlKGRldik7Cj4gIHVubG9jazoKPiBAQCAtMTU5Niw3ICsxNTYzLDYgQEAgaW50IGRybV9m Yl9oZWxwZXJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCj4g IHsKPiAgCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7Cj4gIAlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7Cj4gLQlzdHJ1Y3QgZHJtX21v ZGVfc2V0ICptb2RlX3NldDsKPiAgCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiAgCWludCByZXQg PSAwOwo+ICAKPiBAQCAtMTYyNCw4ICsxNTkwLDcgQEAgaW50IGRybV9mYl9oZWxwZXJfaW9jdGwo c3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCj4gIAkJICogbWFrZS4gSWYg d2UncmUgbm90IHNtYXJ0IGVub3VnaCBoZXJlLCBvbmUgc2hvdWxkCj4gIAkJICoganVzdCBjb25z aWRlciBzd2l0Y2ggdGhlIHVzZXJzcGFjZSB0byBLTVMuCj4gIAkJICovCj4gLQkJbW9kZV9zZXQg PSAmZmJfaGVscGVyLT5jcnRjX2luZm9bMF0ubW9kZV9zZXQ7Cj4gLQkJY3J0YyA9IG1vZGVfc2V0 LT5jcnRjOwo+ICsJCWNydGMgPSBmYl9oZWxwZXItPmNsaWVudC5tb2Rlc2V0c1swXS5jcnRjOwo+ ICAKPiAgCQkvKgo+ICAJCSAqIE9ubHkgd2FpdCBmb3IgYSB2YmxhbmsgZXZlbnQgaWYgdGhlIENS VEMgaXMKPiBAQCAtMTgyMiwxNiArMTc4NywxNCBAQCBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxw ZXJfc2V0X3Bhcik7Cj4gIAo+ICBzdGF0aWMgdm9pZCBwYW5fc2V0KHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIsIGludCB4LCBpbnQgeSkKPiAgewo+IC0JaW50IGk7Cj4gLQo+IC0JZm9y IChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJc3RydWN0IGRy bV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gLQo+IC0JCW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0 Y19pbmZvW2ldLm1vZGVfc2V0Owo+ICsJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4g IAo+ICsJbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5jbGllbnQubW9kZXNldF9tdXRleCk7Cj4gKwlk cm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZV9zZXQsICZmYl9oZWxwZXItPmNsaWVudCkg ewo+ICAJCW1vZGVfc2V0LT54ID0geDsKPiAgCQltb2RlX3NldC0+eSA9IHk7Cj4gIAl9Cj4gKwlt dXRleF91bmxvY2soJmZiX2hlbHBlci0+Y2xpZW50Lm1vZGVzZXRfbXV0ZXgpOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgaW50IHBhbl9kaXNwbGF5X2F0b21pYyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8g KnZhciwKPiBAQCAtMTg0Miw3ICsxODA1LDcgQEAgc3RhdGljIGludCBwYW5fZGlzcGxheV9hdG9t aWMoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCj4gIAo+ICAJcGFuX3NldChmYl9oZWxw ZXIsIHZhci0+eG9mZnNldCwgdmFyLT55b2Zmc2V0KTsKPiAgCj4gLQlyZXQgPSByZXN0b3JlX2Zi ZGV2X21vZGVfYXRvbWljKGZiX2hlbHBlciwgdHJ1ZSk7Cj4gKwlyZXQgPSByZXN0b3JlX2ZiZGV2 X21vZGVfZm9yY2UoZmJfaGVscGVyKTsKVGhpcyBjaGFuZ2UgbG9va3MgYWxpZW4gY29tcGFyZWQg dG8gb3RoZXIgY2hhbmdlcy4KRG9lcyBpdCBiZWxvbmcgdG8gdGhpcyBwYXRjaHNldD8KCj4gIAlp ZiAoIXJldCkgewo+ICAJCWluZm8tPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0Owo+ICAJCWlu Zm8tPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0Owo+IEBAIC0xODU2LDE0ICsxODE5LDEzIEBA IHN0YXRpYyBpbnQgcGFuX2Rpc3BsYXlfbGVnYWN5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAq dmFyLAo+ICAJCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKPiAgewo+ICAJc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlciA9IGluZm8tPnBhcjsKPiArCXN0cnVjdCBkcm1fY2xpZW50 X2RldiAqY2xpZW50ID0gJmZiX2hlbHBlci0+Y2xpZW50Owo+ICAJc3RydWN0IGRybV9tb2RlX3Nl dCAqbW9kZXNldDsKPiAgCWludCByZXQgPSAwOwo+IC0JaW50IGk7Cj4gIAo+ICAJZHJtX21vZGVz ZXRfbG9ja19hbGwoZmJfaGVscGVyLT5kZXYpOwo+IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBl ci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gLQkJbW9kZXNldCA9ICZmYl9oZWxwZXItPmNydGNfaW5m b1tpXS5tb2RlX3NldDsKPiAtCj4gKwltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgp Owo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkgewo+ICAJ CW1vZGVzZXQtPnggPSB2YXItPnhvZmZzZXQ7Cj4gIAkJbW9kZXNldC0+eSA9IHZhci0+eW9mZnNl dDsKPiAgCj4gQEAgLTE4NzUsNiArMTgzNyw3IEBAIHN0YXRpYyBpbnQgcGFuX2Rpc3BsYXlfbGVn YWN5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAo+ICAJCQl9Cj4gIAkJfQo+ICAJfQo+ ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICAJZHJtX21vZGVzZXRf dW5sb2NrX2FsbChmYl9oZWxwZXItPmRldik7Cj4gIAo+ICAJcmV0dXJuIHJldDsKPiBAQCAtMTky MSwxMCArMTg4NCwxMiBAQCBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkp Owo+ICBzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJCQkJIGludCBwcmVmZXJyZWRfYnBwKQo+ICB7Cj4g KwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXItPmNsaWVudDsKPiAg CWludCByZXQgPSAwOwo+ICAJaW50IGNydGNfY291bnQgPSAwOwo+ICAJaW50IGk7Cj4gIAlzdHJ1 Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgc2l6ZXM7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf c2V0ICptb2RlX3NldDsKPiAgCWludCBiZXN0X2RlcHRoID0gMDsKPiAgCj4gIAltZW1zZXQoJnNp emVzLCAwLCBzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplKSk7Cj4gQEAg LTE5NzUsMTMgKzE5NDAsMTMgQEAgc3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9w cm9iZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ICAJICogc3VwcG9ydHMgUkdC QTU1NTEgKDE2IGJwcCwgZGVwdGggMTUpIGJ1dCBub3QgUkdCNTY1ICgxNiBicHAsIGRlcHRoCj4g IAkgKiAxNikgd2UgbmVlZCB0byBzY2FsZSBkb3duIHRoZSBkZXB0aCBvZiB0aGUgc2l6ZXMgd2Ug cmVxdWVzdC4KPiAgCSAqLwo+IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3Vu dDsgaSsrKSB7Cj4gLQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQgPSAmZmJfaGVscGVy LT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7Cj4gKwltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRf bXV0ZXgpOwo+ICsJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVfc2V0LCBjbGllbnQp IHsKPiAgCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBtb2RlX3NldC0+Y3J0YzsKPiAgCQlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSA9IGNydGMtPnByaW1hcnk7Cj4gIAkJaW50IGo7Cj4gIAo+IC0J CURSTV9ERUJVRygidGVzdCBDUlRDICVkIHByaW1hcnkgcGxhbmVcbiIsIGkpOwo+ICsJCURSTV9E RUJVRygidGVzdCBDUlRDICV1IHByaW1hcnkgcGxhbmVcbiIsIGRybV9jcnRjX2luZGV4KGNydGMp KTsKPiAgCj4gIAkJZm9yIChqID0gMDsgaiA8IHBsYW5lLT5mb3JtYXRfY291bnQ7IGorKykgewo+ ICAJCQljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICpmbXQ7Cj4gQEAgLTIwMjEsOSArMTk4 Niw4IEBAIHN0YXRpYyBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCj4gIAkvKiBmaXJzdCB1cCBnZXQgYSBjb3VudCBv ZiBjcnRjcyBub3cgaW4gdXNlIGFuZCBuZXcgbWluL21heGVzIHdpZHRoL2hlaWdodHMgKi8KPiAg CWNydGNfY291bnQgPSAwOwo+IC0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3Vu dDsgaSsrKSB7Cj4gKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZV9zZXQsIGNsaWVu dCkgewo+ICAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkZXNpcmVkX21vZGU7Cj4gLQkJc3Ry dWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gIAkJaW50IHgsIHksIGo7Cj4gIAkJLyogaW4g Y2FzZSBvZiB0aWxlIGdyb3VwLCBhcmUgd2UgdGhlIGxhc3QgdGlsZSB2ZXJ0IG9yIGhvcml6Pwo+ ICAJCSAqIElmIG5vIHRpbGUgZ3JvdXAgeW91IGFyZSBhbHdheXMgdGhlIGxhc3Qgb25lIGJvdGgg dmVydGljYWxseQo+IEBAIC0yMDMxLDcgKzE5OTUsNiBAQCBzdGF0aWMgaW50IGRybV9mYl9oZWxw ZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJ ICovCj4gIAkJYm9vbCBsYXN0diA9IHRydWUsIGxhc3RoID0gdHJ1ZTsKPiAgCj4gLQkJbW9kZV9z ZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7Cj4gIAkJZGVzaXJlZF9tb2Rl ID0gbW9kZV9zZXQtPm1vZGU7Cj4gIAo+ICAJCWlmICghZGVzaXJlZF9tb2RlKQo+IEBAIC0yMDYx LDYgKzIwMjQsNyBAQCBzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0 cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJaWYgKGxhc3R2KQo+ICAJCQlzaXpl cy5mYl9oZWlnaHQgPSBtaW5fdCh1MzIsIGRlc2lyZWRfbW9kZS0+dmRpc3BsYXkgKyB5LCBzaXpl cy5mYl9oZWlnaHQpOwo+ICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0 ZXgpOwo+ICAKPiAgCWlmIChjcnRjX2NvdW50ID09IDAgfHwgc2l6ZXMuZmJfd2lkdGggPT0gLTEg fHwgc2l6ZXMuZmJfaGVpZ2h0ID09IC0xKSB7Cj4gIAkJRFJNX0lORk8oIkNhbm5vdCBmaW5kIGFu eSBjcnRjIG9yIHNpemVzXG4iKTsKPiBAQCAtMjI5Miw3ICsyMjU2LDcgQEAgc3RhdGljIGJvb2wg ZHJtX3RhcmdldF9jbG9uZWQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkbXRfbW9kZSwgKm1vZGU7Cj4gIAo+ICAJLyogb25seSBj b250ZW1wbGF0ZSBjbG9uaW5nIGluIHRoZSBzaW5nbGUgY3J0YyBjYXNlICovCj4gLQlpZiAoZmJf aGVscGVyLT5jcnRjX2NvdW50ID4gMSkKPiArCWlmIChmYl9oZWxwZXItPmRldi0+bW9kZV9jb25m aWcubnVtX2NydGMgPiAxKQo+ICAJCXJldHVybiBmYWxzZTsKPiAgCj4gIAljb3VudCA9IDA7Cj4g QEAgLTI0ODEsMTUgKzI0NDUsMTcgQEAgc3RhdGljIGJvb2wgY29ubmVjdG9yX2hhc19wb3NzaWJs ZV9jcnRjKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gIH0KPiAgCj4gIHN0YXRp YyBpbnQgZHJtX3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAt CQkJICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICoqYmVzdF9jcnRjcywKPiArCQkJICBzdHJ1 Y3QgZHJtX2NydGMgKipiZXN0X2NydGNzLAo+ICAJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICoqbW9kZXMsCj4gIAkJCSAgaW50IG4sIGludCB3aWR0aCwgaW50IGhlaWdodCkKPiAgewo+IC0J aW50IGMsIG87Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXIt PmNsaWVudDsKPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gIAlpbnQgbXlf c2NvcmUsIGJlc3Rfc2NvcmUsIHNjb3JlOwo+IC0Jc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAq KmNydGNzLCAqY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0YyAqKmNydGNzLCAqY3J0YzsKPiArCXN0 cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7Cj4gIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25u ZWN0b3IgKmZiX2hlbHBlcl9jb25uOwo+ICsJaW50IG87Cj4gIAo+ICAJaWYgKG4gPT0gZmJfaGVs cGVyLT5jb25uZWN0b3JfY291bnQpCj4gIAkJcmV0dXJuIDA7Cgpkcm1fcGlja19jcnRjcygpIG5l ZWRzIHRoZSBtb2Rlc2V0IG11dGV4LgpBbmQgZHVlIGNvbnNpZGVyaW5nIHRoZSBjb21wbGV4aXR5 IG9mIHRoZSBmdW5jdGlvbiBpdCB3b3VsZCBiZSBuaWNlCnRvIGhhdmUgdGhpcyBmYWN0IGRvY3Vt ZW50ZWQuCgo+IEBAIC0yNTAyLDggKzI0NjgsNyBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNz KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAlpZiAobW9kZXNbbl0gPT0gTlVM TCkKPiAgCQlyZXR1cm4gYmVzdF9zY29yZTsKPiAgCj4gLQljcnRjcyA9IGtjYWxsb2MoZmJfaGVs cGVyLT5jb25uZWN0b3JfY291bnQsCj4gLQkJCXNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9j cnRjICopLCBHRlBfS0VSTkVMKTsKPiArCWNydGNzID0ga2NhbGxvYyhmYl9oZWxwZXItPmNvbm5l Y3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJORUwpOwo+ICAJaWYgKCFjcnRjcykK PiAgCQlyZXR1cm4gYmVzdF9zY29yZTsKPiAgCj4gQEAgLTI1MTksMTEgKzI0ODQsMTAgQEAgc3Rh dGljIGludCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ ICAJICogc2VsZWN0IGEgY3J0YyBmb3IgdGhpcyBjb25uZWN0b3IgYW5kIHRoZW4gYXR0ZW1wdCB0 byBjb25maWd1cmUKPiAgCSAqIHJlbWFpbmluZyBjb25uZWN0b3JzCj4gIAkgKi8KPiAtCWZvciAo YyA9IDA7IGMgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGMrKykgewo+IC0JCWNydGMgPSAmZmJf aGVscGVyLT5jcnRjX2luZm9bY107Cj4gKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9k ZXNldCwgY2xpZW50KSB7Cj4gKwkJY3J0YyA9IG1vZGVzZXQtPmNydGM7Cj4gIAo+IC0JCWlmICgh Y29ubmVjdG9yX2hhc19wb3NzaWJsZV9jcnRjKGNvbm5lY3RvciwKPiAtCQkJCQkJIGNydGMtPm1v ZGVfc2V0LmNydGMpKQo+ICsJCWlmICghY29ubmVjdG9yX2hhc19wb3NzaWJsZV9jcnRjKGNvbm5l Y3RvciwgY3J0YykpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAgCQlmb3IgKG8gPSAwOyBvIDwgbjsg bysrKQo+IEBAIC0yNTMyLDcgKzI0OTYsNyBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0 cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAo+ICAJCWlmIChvIDwgbikgewo+ICAJ CQkvKiBpZ25vcmUgY2xvbmluZyB1bmxlc3Mgb25seSBhIHNpbmdsZSBjcnRjICovCj4gLQkJCWlm IChmYl9oZWxwZXItPmNydGNfY291bnQgPiAxKQo+ICsJCQlpZiAoZmJfaGVscGVyLT5kZXYtPm1v ZGVfY29uZmlnLm51bV9jcnRjID4gMSkKPiAgCQkJCWNvbnRpbnVlOwo+ICAKPiAgCQkJaWYgKCFk cm1fbW9kZV9lcXVhbChtb2Rlc1tvXSwgbW9kZXNbbl0pKQo+IEBAIC0yNTQwLDE0ICsyNTA0LDEz IEBAIHN0YXRpYyBpbnQgZHJtX3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hl bHBlciwKPiAgCQl9Cj4gIAo+ICAJCWNydGNzW25dID0gY3J0YzsKPiAtCQltZW1jcHkoY3J0Y3Ms IGJlc3RfY3J0Y3MsIG4gKiBzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqKSk7Cj4g KwkJbWVtY3B5KGNydGNzLCBiZXN0X2NydGNzLCBuICogc2l6ZW9mKCpjcnRjcykpOwo+ICAJCXNj b3JlID0gbXlfc2NvcmUgKyBkcm1fcGlja19jcnRjcyhmYl9oZWxwZXIsIGNydGNzLCBtb2Rlcywg biArIDEsCj4gIAkJCQkJCSAgd2lkdGgsIGhlaWdodCk7Cj4gIAkJaWYgKHNjb3JlID4gYmVzdF9z Y29yZSkgewo+ICAJCQliZXN0X3Njb3JlID0gc2NvcmU7Cj4gIAkJCW1lbWNweShiZXN0X2NydGNz LCBjcnRjcywKPiAtCQkJICAgICAgIGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50ICoKPiAtCQkJ ICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICopKTsKPiArCQkJICAgICAg IGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50ICogc2l6ZW9mKCpjcnRjcykpOwo+ICAJCX0KPiAg CX0KPiAgCj4gQEAgLTI1NTUsMjEgKzI1MTgsOSBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNz KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAlyZXR1cm4gYmVzdF9zY29yZTsK PiAgfQo+ICAKPiAtc3RhdGljIHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKgo+IC1kcm1fZmJf aGVscGVyX2NydGMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgc3RydWN0IGRybV9j cnRjICpjcnRjKQo+IC17Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVs cGVyLT5jcnRjX2NvdW50OyBpKyspCj4gLQkJaWYgKGZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1v ZGVfc2V0LmNydGMgPT0gY3J0YykKPiAtCQkJcmV0dXJuICZmYl9oZWxwZXItPmNydGNfaW5mb1tp XTsKPiAtCj4gLQlyZXR1cm4gTlVMTDsKPiAtfQo+IC0KPiAgLyogVHJ5IHRvIHJlYWQgdGhlIEJJ T1MgZGlzcGxheSBjb25maWd1cmF0aW9uIGFuZCB1c2UgaXQgZm9yIHRoZSBpbml0aWFsIGNvbmZp ZyAqLwo+ICBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+IC0JCQkJCSAgc3RydWN0IGRybV9mYl9oZWxwZXJf Y3J0YyAqKmNydGNzLAo+ICsJCQkJCSAgc3RydWN0IGRybV9jcnRjICoqY3J0Y3MsCj4gIAkJCQkJ ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAo+ICAJCQkJCSAgc3RydWN0IGRybV9m Yl9vZmZzZXQgKm9mZnNldHMsCj4gIAkJCQkJICBib29sICplbmFibGVkLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpCj4gQEAgLTI2MDUsNyArMjU1Niw3IEBAIHN0YXRpYyBib29sIGRybV9mYl9oZWxw ZXJfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJ c3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9jb25uOwo+ICAJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7Cj4gIAkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ IC0JCXN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKm5ld19jcnRjOwo+ICsJCXN0cnVjdCBkcm1f Y3J0YyAqbmV3X2NydGM7Cj4gIAo+ICAJCWZiX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9p bmZvW2ldOwo+ICAJCWNvbm5lY3RvciA9IGZiX2Nvbm4tPmNvbm5lY3RvcjsKPiBAQCAtMjY0Nyw3 ICsyNTk4LDcgQEAgc3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9maXJtd2FyZV9jb25maWcoc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCj4gIAkJbnVtX2Nvbm5lY3RvcnNfZW5h YmxlZCsrOwo+ICAKPiAtCQluZXdfY3J0YyA9IGRybV9mYl9oZWxwZXJfY3J0YyhmYl9oZWxwZXIs IGNvbm5lY3Rvci0+c3RhdGUtPmNydGMpOwo+ICsJCW5ld19jcnRjID0gY29ubmVjdG9yLT5zdGF0 ZS0+Y3J0YzsKPiAgCj4gIAkJLyoKPiAgCQkgKiBNYWtlIHN1cmUgd2UncmUgbm90IHRyeWluZyB0 byBkcml2ZSBtdWx0aXBsZSBjb25uZWN0b3JzCj4gQEAgLTI3NDcsMTAgKzI2OTgsMTEgQEAgc3Rh dGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9maXJtd2FyZV9jb25maWcoc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciwKPiAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJCSAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCj4g IHsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gJmZiX2hlbHBlci0+Y2xpZW50 Owo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2Owo+IC0Jc3RydWN0 IGRybV9mYl9oZWxwZXJfY3J0YyAqKmNydGNzOwo+ICAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Kiptb2RlczsKPiAgCXN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXRzOwo+ICsJc3RydWN0IGRy bV9jcnRjICoqY3J0Y3M7Cj4gIAlib29sICplbmFibGVkOwo+ICAJaW50IGk7Cj4gIAo+IEBAIC0y NzU4LDggKzI3MTAsNyBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCS8qIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRp b24gb2YgY29ubmVjdG9yX2NvdW50IGJ5IGhvdHBsdWcgKi8KPiAgCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmZiX2hlbHBlci0+bG9jayk7Cj4gIAo+IC0JY3J0Y3MgPSBrY2FsbG9jKGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50LAo+IC0JCQlzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAq KSwgR0ZQX0tFUk5FTCk7Cj4gKwljcnRjcyA9IGtjYWxsb2MoZmJfaGVscGVyLT5jb25uZWN0b3Jf Y291bnQsIHNpemVvZigqY3J0Y3MpLCBHRlBfS0VSTkVMKTsKPiAgCW1vZGVzID0ga2NhbGxvYyhm Yl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwKPiAgCQkJc2l6ZW9mKHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICopLCBHRlBfS0VSTkVMKTsKPiAgCW9mZnNldHMgPSBrY2FsbG9jKGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50LAo+IEBAIC0yNzcxLDYgKzI3MjIsOCBAQCBzdGF0aWMgdm9pZCBkcm1f c2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiAgCQlnb3RvIG91 dDsKPiAgCX0KPiAgCj4gKwltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgpOwo+ICsK PiAgCW11dGV4X2xvY2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cj4gIAlp ZiAoZHJtX2ZiX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZmJfaGVscGVyLCB3aWR0aCwg aGVpZ2h0KSA9PSAwKQo+ICAJCURSTV9ERUJVR19LTVMoIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQg Y29ubmVjdGVkIHdpdGggbW9kZXNcbiIpOwo+IEBAIC0yNzk1LDI0ICsyNzQ4LDI0IEBAIHN0YXRp YyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ ICAJfQo+ICAJbXV0ZXhfdW5sb2NrKCZmYl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcubXV0ZXgp Owo+ICAKPiAtCS8qIG5lZWQgdG8gc2V0IHRoZSBtb2Rlc2V0cyB1cCBoZXJlIGZvciB1c2UgbGF0 ZXIgKi8KPiAtCS8qIGZpbGwgb3V0IHRoZSBjb25uZWN0b3I8LT5jcnRjIG1hcHBpbmdzIGludG8g dGhlIG1vZGVzZXRzICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50 OyBpKyspCj4gLQkJZHJtX2ZiX2hlbHBlcl9tb2Rlc2V0X3JlbGVhc2UoZmJfaGVscGVyLAo+IC0J CQkJCSAgICAgICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldCk7Cj4gKwlkcm1fY2xp ZW50X21vZGVzZXRfcmVsZWFzZShjbGllbnQpOwo+ICAKPiAgCWRybV9mYl9oZWxwZXJfZm9yX2Vh Y2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewo+ICAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlID0gbW9kZXNbaV07Cj4gLQkJc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqZmJfY3J0 YyA9IGNydGNzW2ldOwo+ICsJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGNydGNzW2ldOwo+ICAJ CXN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXQgPSAmb2Zmc2V0c1tpXTsKPiAgCj4gLQkJaWYg KG1vZGUgJiYgZmJfY3J0Yykgewo+IC0JCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0g JmZiX2NydGMtPm1vZGVfc2V0Owo+ICsJCWlmIChtb2RlICYmIGNydGMpIHsKPiArCQkJc3RydWN0 IGRybV9tb2RlX3NldCAqbW9kZXNldCA9IGRybV9jbGllbnRfZmluZF9tb2Rlc2V0KGNsaWVudCwg Y3J0Yyk7Cj4gIAkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPQo+ICAJCQkJZmJf aGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yOwo+ICAKPiAgCQkJRFJNX0RFQlVH X0tNUygiZGVzaXJlZCBtb2RlICVzIHNldCBvbiBjcnRjICVkICglZCwlZClcbiIsCj4gLQkJCQkg ICAgICBtb2RlLT5uYW1lLCBmYl9jcnRjLT5tb2RlX3NldC5jcnRjLT5iYXNlLmlkLCBvZmZzZXQt PngsIG9mZnNldC0+eSk7Cj4gKwkJCQkgICAgICBtb2RlLT5uYW1lLCBjcnRjLT5iYXNlLmlkLCBv ZmZzZXQtPngsIG9mZnNldC0+eSk7Cj4gKwo+ICsJCQlpZiAoV0FSTl9PTl9PTkNFKG1vZGVzZXQt Pm51bV9jb25uZWN0b3JzID09IERSTV9DTElFTlRfTUFYX0NMT05FRF9DT05ORUNUT1JTIHx8Cj4g KwkJCQkJIChkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjID4gMSAmJiBtb2Rlc2V0LT5udW1fY29u bmVjdG9ycyA9PSAxKSkpCj4gKwkJCQlicmVhazsKPiAgCj4gIAkJCW1vZGVzZXQtPm1vZGUgPSBk cm1fbW9kZV9kdXBsaWNhdGUoZGV2LCBtb2RlKTsKPiAgCQkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29u bmVjdG9yKTsKPiBAQCAtMjgyMSw2ICsyNzc0LDggQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2Ny dGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCj4gIAkJCW1vZGVzZXQtPnkgPSBv ZmZzZXQtPnk7Cj4gIAkJfQo+ICAJfQo+ICsKPiArCW11dGV4X3VubG9jaygmY2xpZW50LT5tb2Rl c2V0X211dGV4KTsKPiAgb3V0Ogo+ICAJa2ZyZWUoY3J0Y3MpOwo+ICAJa2ZyZWUobW9kZXMpOwo+ IEBAIC0yODM3LDEzICsyNzkyLDE0IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAo+ICAgKi8KPiAgc3RhdGljIHZvaWQgZHJtX3Nl dHVwX2NydGNzX2ZiKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCj4gIHsKPiArCXN0 cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gJmZiX2hlbHBlci0+Y2xpZW50Owo+ICAJc3Ry dWN0IGZiX2luZm8gKmluZm8gPSBmYl9oZWxwZXItPmZiZGV2Owo+ICAJdW5zaWduZWQgaW50IHJv dGF0aW9uLCBzd19yb3RhdGlvbnMgPSAwOwo+ICsJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNl dDsKPiAgCWludCBpOwo+ICAKPiAtCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291 bnQ7IGkrKykgewo+IC0JCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSAmZmJfaGVscGVy LT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7Cj4gLQo+ICsJbXV0ZXhfbG9jaygmY2xpZW50LT5tb2Rl c2V0X211dGV4KTsKPiArCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBjbGll bnQpIHsKPiAgCQlpZiAoIW1vZGVzZXQtPm51bV9jb25uZWN0b3JzKQo+ICAJCQljb250aW51ZTsK PiAgCj4gQEAgLTI4NTUsNiArMjgxMSw3IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjc19m YihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQo+ICAJCWVsc2UKPiAgCQkJc3dfcm90 YXRpb25zIHw9IHJvdGF0aW9uOwo+ICAJfQo+ICsJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVz ZXRfbXV0ZXgpOwo+ICAKPiAgCW11dGV4X2xvY2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZp Zy5tdXRleCk7Cj4gIAlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIs IGkpIHsKPiBAQCAtMzA3MSw4ICszMDI4LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVy X2hvdHBsdWdfZXZlbnQpOwo+ICAgKiBAZnVuY3M6IGZiZGV2IGhlbHBlciBmdW5jdGlvbnMKPiAg ICogQHByZWZlcnJlZF9icHA6IFByZWZlcnJlZCBiaXRzIHBlciBwaXhlbCBmb3IgdGhlIGRldmlj ZS4KPiAgICogICAgICAgICAgICAgICAgIEBkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0 aCBpcyB1c2VkIGlmIHRoaXMgaXMgemVyby4KPiAtICogQG1heF9jb25uX2NvdW50OiBNYXhpbXVt IG51bWJlciBvZiBjb25uZWN0b3JzLgo+IC0gKiAgICAgICAgICAgICAgICAgIEBkZXYtPm1vZGVf Y29uZmlnLm51bV9jb25uZWN0b3IgaXMgdXNlZCBpZiB0aGlzIGlzIHplcm8uCj4gKyAqIEBtYXhf Y29ubl9jb3VudDogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdG9ycyAobm90IHVzZWQpCj4gICAq Cj4gICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBmYmRldiBlbXVsYXRpb24gYW5kIHJlZ2lzdGVy cyBmYmRldiBmb3IgYWNjZXNzIGJ5Cj4gICAqIHVzZXJzcGFjZS4gSWYgYWxsIGNvbm5lY3RvcnMg YXJlIGRpc2Nvbm5lY3RlZCwgc2V0dXAgaXMgZGVmZXJyZWQgdG8gdGhlIG5leHQKPiBAQCAtMzEw MCwxNiArMzA1Niw5IEBAIGludCBkcm1fZmJfaGVscGVyX2ZiZGV2X3NldHVwKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gIAlpZiAoIXByZWZlcnJlZF9icHApCj4gIAkJcHJlZmVycmVkX2JwcCA9 IDMyOwo+ICAKPiAtCWlmICghbWF4X2Nvbm5fY291bnQpCj4gLQkJbWF4X2Nvbm5fY291bnQgPSBk ZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3I7Cj4gLQlpZiAoIW1heF9jb25uX2NvdW50KSB7 Cj4gLQkJRFJNX0RFVl9FUlJPUihkZXYtPmRldiwgImZiZGV2OiBObyBjb25uZWN0b3JzXG4iKTsK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gIAlkcm1fZmJfaGVscGVyX3ByZXBhcmUo ZGV2LCBmYl9oZWxwZXIsIGZ1bmNzKTsKPiAgCj4gLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQo ZGV2LCBmYl9oZWxwZXIsIG1heF9jb25uX2NvdW50KTsKPiArCXJldCA9IGRybV9mYl9oZWxwZXJf aW5pdChkZXYsIGZiX2hlbHBlciwgMCk7Cj4gIAlpZiAocmV0IDwgMCkgewo+ICAJCURSTV9ERVZf RVJST1IoZGV2LT5kZXYsICJmYmRldjogRmFpbGVkIHRvIGluaXRpYWxpemUgKHJldD0lZClcbiIs IHJldCk7Cj4gIAkJcmV0dXJuIHJldDsKPiBAQCAtMzQyMiw3ICszMzcxLDcgQEAgc3RhdGljIGlu dCBkcm1fZmJkZXZfY2xpZW50X2hvdHBsdWcoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQp Cj4gIAo+ICAJZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKGRldiwgZmJfaGVscGVyLCAmZHJtX2ZiX2hl bHBlcl9nZW5lcmljX2Z1bmNzKTsKPiAgCj4gLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZGV2 LCBmYl9oZWxwZXIsIGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7Cj4gKwlyZXQgPSBk cm1fZmJfaGVscGVyX2luaXQoZGV2LCBmYl9oZWxwZXIsIDApOwo+ICAJaWYgKHJldCkKPiAgCQln b3RvIGVycjsKPiAgCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bA==