From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v5 03/32] drm/i915: Create page table allocators Date: Tue, 24 Feb 2015 15:56:08 +0200 Message-ID: <87h9ubfm6f.fsf@gaia.fi.intel.com> References: <1418922621-25818-1-git-send-email-michel.thierry@intel.com> <1424706272-3016-1-git-send-email-michel.thierry@intel.com> <1424706272-3016-4-git-send-email-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id B13996E35C for ; Tue, 24 Feb 2015 05:56:22 -0800 (PST) In-Reply-To: <1424706272-3016-4-git-send-email-michel.thierry@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michel Thierry , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org TWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4gd3JpdGVzOgoKPiBGcm9t OiBCZW4gV2lkYXdza3kgPGJlbmphbWluLndpZGF3c2t5QGludGVsLmNvbT4KPgo+IEFzIHdlIG1v dmUgdG93YXJkIGR5bmFtaWMgcGFnZSB0YWJsZSBhbGxvY2F0aW9uLCBpdCBiZWNvbWVzIG11Y2gg ZWFzaWVyCj4gdG8gbWFuYWdlIG91ciBkYXRhIHN0cnVjdHVyZXMgaWYgYnJlYWsgZG8gdGhpbmdz IGxlc3MgY29hcnNlbHkgYnkKPiBicmVha2luZyB1cCBhbGwgb2Ygb3VyIGFjdGlvbnMgaW50byBp bmRpdmlkdWFsIHRhc2tzLiAgVGhpcyBtYWtlcyB0aGUKPiBjb2RlIGVhc2llciB0byB3cml0ZSwg cmVhZCwgYW5kIHZlcmlmeS4KPgo+IEFzaWRlIGZyb20gdGhlIGRpc3NlY3Rpb24gb2YgdGhlIGFs bG9jYXRpb24gZnVuY3Rpb25zLCB0aGUgcGF0Y2gKPiBzdGF0aWNhbGx5IGFsbG9jYXRlcyB0aGUg cGFnZSB0YWJsZSBzdHJ1Y3R1cmVzIHdpdGhvdXQgYSBwYWdlIGRpcmVjdG9yeS4KPiBUaGlzIHJl bWFpbnMgdGhlIHNhbWUgZm9yIGFsbCBwbGF0Zm9ybXMsCj4KPiBUaGUgcGF0Y2ggaXRzZWxmIHNo b3VsZCBub3QgaGF2ZSBtdWNoIGZ1bmN0aW9uYWwgZGlmZmVyZW5jZS4gVGhlIHByaW1hcnkKPiBu b3RpY2VhYmxlIGRpZmZlcmVuY2UgaXMgdGhlIGZhY3QgdGhhdCBwYWdlIHRhYmxlcyBhcmUgbm8g bG9uZ2VyCj4gYWxsb2NhdGVkLCBidXQgcmF0aGVyIHN0YXRpY2FsbHkgZGVjbGFyZWQgYXMgcGFy dCBvZiB0aGUgcGFnZSBkaXJlY3RvcnkuCj4gVGhpcyBoYXMgbm9uLXplcm8gb3ZlcmhlYWQsIGJ1 dCB0aGluZ3MgZ2FpbiBub24tdHJpdmlhbCBjb21wbGV4aXR5IGFzIGEKPiByZXN1bHQuCj4KCkkg ZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCB0aGUgbGFzdCBzZW50ZW5jZSBoZXJlLiBXZSBnYWluIG92 ZXJoZWFkIGFuZApjb21wbGV4aXR5LgoKcy9ub24tdHJpdmlhbC90cml2aWFsPwoKPiBUaGlzIHBh dGNoIGV4aXN0cyBmb3IgYSBmZXcgcmVhc29uczoKPiAxLiBTcGxpdHRpbmcgb3V0IHRoZSBmdW5j dGlvbnMgYWxsb3dzIGVhc2lseSBjb21iaW5pbmcgR0VONiBhbmQgR0VOOAo+IGNvZGUuIFBhZ2Ug dGFibGVzIGhhdmUgbm8gZGlmZmVyZW5jZSBiYXNlZCBvbiBHRU44LiBBcyB3ZSdsbCBzZWUgaW4g YQo+IGZ1dHVyZSBwYXRjaCB3aGVuIHdlIGFkZCB0aGUgRE1BIG1hcHBpbmdzIHRvIHRoZSBhbGxv Y2F0aW9ucywgaXQKPiByZXF1aXJlcyBvbmx5IG9uZSBzbWFsbCBjaGFuZ2UgdG8gbWFrZSB3b3Jr LCBhbmQgZXJyb3IgaGFuZGxpbmcgc2hvdWxkCj4ganVzdCBmYWxsIGludG8gcGxhY2UuCj4KPiAy LiBVbmxlc3Mgd2UgYWx3YXlzIHdhbnQgdG8gYWxsb2NhdGUgYWxsIHBhZ2UgdGFibGVzIHVuZGVy IGEgZ2l2ZW4gUERFLAo+IHdlJ2xsIGhhdmUgdG8gZXZlbnR1YWxseSBicmVhayB0aGlzIHVwIGlu dG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgKG9yCj4gcG9pbnRlciB0byBwb2ludGVyKS4KPgo+IDMu IEhhdmluZyB0aGUgZGlzY3JldGUgZnVuY3Rpb25zIGlzIGVhc2llciB0byByZXZpZXcsIGFuZCB1 bmRlcnN0YW5kLgo+IEFsbCBhbGxvY2F0aW9ucyBhbmQgZnJlZXMgbm93IHRha2UgcGxhY2UgaW4g anVzdCBhIGNvdXBsZSBvZiBsb2NhdGlvbnMuCj4gUmV2aWV3aW5nLCBhbmQgY2F0Y2hpbmcgbGVh a3Mgc2hvdWxkIGJlIGVhc3kuCj4KPiA0LiBMZXNzIGltcG9ydGFudDogdGhlIEdGUCBmbGFncyBh cmUgY29uZmluZWQgdG8gb25lIGxvY2F0aW9uLCB3aGljaAo+IG1ha2VzIHBsYXlpbmcgYXJvdW5k IHdpdGggc3VjaCB0aGluZ3MgdHJpdmlhbC4KPgo+IHYyOiBVcGRhdGVkIGNvbW1pdCBtZXNzYWdl IHRvIGV4cGxhaW4gd2h5IHRoaXMgcGF0Y2ggZXhpc3RzCj4KPiB2MzogRm9yIGxyYywgcy9wZHAu cGFnZV9kaXJlY3RvcnlbaV0uZGFkZHIvcGRwLnBhZ2VfZGlyZWN0b3J5W2ldLT5kYWRkci8KPgo+ IHY0OiBSZW5hbWVkIGZyZWVfcHQvcGRfc2luZ2xlIGZ1bmN0aW9ucyB0byB1bm1hcF9hbmRfZnJl ZV9wdC9wZCAoRGFuaWVsKQo+Cj4gdjU6IEFkZGVkIGFkZGl0aW9uYWwgc2FmZXR5IGNoZWNrcyBp biBnZW44IGNsZWFyL2ZyZWUvdW5tYXAuCj4KPiB2NjogVXNlIFdBUk5fT04gYW5kIHJldHVybiAt RUlOVkFMIGluIGFsbG9jX3B0X3JhbmdlIChNaWthKS4KPgo+IENjOiBNaWthIEt1b3BwYWxhIDxt aWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBCZW4gV2lkYXdz a3kgPGJlbkBid2lkYXdzay5uZXQ+Cj4gU2lnbmVkLW9mZi1ieTogTWljaGVsIFRoaWVycnkgPG1p Y2hlbC50aGllcnJ5QGludGVsLmNvbT4gKHYzKykKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZ3R0LmMgfCAyNTIgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIHwgICA0ICstCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgIHwgIDE2ICstLQo+ICAzIGZpbGVzIGNo YW5nZWQsIDE3OCBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXggZWIwNzE0Yy4uNjVjNzdlNSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTI3OSw2ICsyNzksOTggQEAgc3RhdGljIGdl bjZfZ3R0X3B0ZV90IGlyaXNfcHRlX2VuY29kZShkbWFfYWRkcl90IGFkZHIsCj4gIAlyZXR1cm4g cHRlOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCB1bm1hcF9hbmRfZnJlZV9wdChzdHJ1Y3QgaTkx NV9wYWdlX3RhYmxlX2VudHJ5ICpwdCkKPiArewo+ICsJaWYgKFdBUk5fT04oIXB0LT5wYWdlKSkK PiArCQlyZXR1cm47Cj4gKwlfX2ZyZWVfcGFnZShwdC0+cGFnZSk7Cj4gKwlrZnJlZShwdCk7Cj4g K30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICphbGxvY19wdF9z aW5nbGUodm9pZCkKPiArewo+ICsJc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQ7Cj4g Kwo+ICsJcHQgPSBremFsbG9jKHNpemVvZigqcHQpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHQp Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJcHQtPnBhZ2UgPSBhbGxvY19w YWdlKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKPiArCWlmICghcHQtPnBhZ2UpIHsKPiArCQlr ZnJlZShwdCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHB0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogYWxsb2NfcHRfcmFuZ2UoKSAtIEFsbG9jYXRl IGEgbXVsdGlwbGUgcGFnZSB0YWJsZXMKPiArICogQHBkOgkJVGhlIHBhZ2UgZGlyZWN0b3J5IHdo aWNoIHdpbGwgaGF2ZSBhdCBsZWFzdCBAY291bnQgZW50cmllcwo+ICsgKgkJYXZhaWxhYmxlIHRv IHBvaW50IHRvIHRoZSBhbGxvY2F0ZWQgcGFnZSB0YWJsZXMuCj4gKyAqIEBwZGU6CUZpcnN0IHBh Z2UgZGlyZWN0b3J5IGVudHJ5IGZvciB3aGljaCB3ZSBhcmUgYWxsb2NhdGluZy4KPiArICogQGNv dW50OglOdW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUuCj4gKyAqCj4gKyAqIEFsbG9jYXRlcyBt dWx0aXBsZSBwYWdlIHRhYmxlIHBhZ2VzIGFuZCBzZXRzIHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVz IGluIHRoZQo+ICsgKiBwYWdlIHRhYmxlIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHBhZ2UgZGlyZWN0 b3J5LiBGdW5jdGlvbiBjbGVhbnMgdXAgYWZ0ZXIKPiArICogaXRzZWxmIG9uIGFueSBmYWlsdXJl cy4KPiArICoKPiArICogUmV0dXJuOiAwIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkLgo+ICsgKi8K PiArc3RhdGljIGludCBhbGxvY19wdF9yYW5nZShzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9l bnRyeSAqcGQsIHVpbnQxNl90IHBkZSwgc2l6ZV90IGNvdW50KQo+ICt7Cj4gKwlpbnQgaSwgcmV0 Owo+ICsKPiArCS8qIDUxMiBpcyB0aGUgbWF4IHBhZ2UgdGFibGVzIHBlciBwYWdlX2RpcmVjdG9y eSBvbiBhbnkgcGxhdGZvcm0uICovCj4gKwlpZiAoV0FSTl9PTihwZGUgKyBjb3VudCA+IEdFTjZf UFBHVFRfUERfRU5UUklFUykpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZm9yIChpID0g cGRlOyBpIDwgcGRlICsgY291bnQ7IGkrKykgewo+ICsJCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVf ZW50cnkgKnB0ID0gYWxsb2NfcHRfc2luZ2xlKCk7Cj4gKwo+ICsJCWlmIChJU19FUlIocHQpKSB7 Cj4gKwkJCXJldCA9IFBUUl9FUlIocHQpOwo+ICsJCQlnb3RvIGVycl9vdXQ7Cj4gKwkJfQo+ICsJ CVdBUk4ocGQtPnBhZ2VfdGFibGVzW2ldLAo+ICsJCSAgICAgIkxlYWtpbmcgcGFnZSBkaXJlY3Rv cnkgZW50cnkgJWQgKCVwYSlcbiIsCj4gKwkJICAgICBpLCBwZC0+cGFnZV90YWJsZXNbaV0pOwo+ ICsJCXBkLT5wYWdlX3RhYmxlc1tpXSA9IHB0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsK PiArZXJyX291dDoKPiArCXdoaWxlIChpLS0pCj4gKwkJdW5tYXBfYW5kX2ZyZWVfcHQocGQtPnBh Z2VfdGFibGVzW2ldKTsKClRoaXMgaXMgc3VzcGljaW91cyBhcyBpdCBpcyBub24gc3ltbWV0cmlj YWwgb2YgaG93IHdlIGFsbG9jYXRlLiBJZiB0aGUKcGxhbiBpcyB0byBmcmVlIGV2ZXJ5dGhpbmcg YmVsb3cgcGRlLCB0aGF0IHNob3VsZCBiZSBtZW50aW9uZWQgaW4gdGhlCmNvbW1lbnQgYWJvdmUu CgpPbiB0aGlzIHBhdGNoIHdlIGNhbGwgdGhpcyB3aXRoIHBkZSA9PSAwLCBidXQgSSBzdXNwZWN0 IGxhdGVyIGluIHRoZQpzZXJpZXMgdGhlcmUgd2lsbCBiZSBvdGhlciB1c2VjYXNlcyBmb3IgdGhp cy4KCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB1bm1hcF9hbmRfZnJl ZV9wZChzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGQpCj4gK3sKPiArCWlmIChw ZC0+cGFnZSkgewo+ICsJCV9fZnJlZV9wYWdlKHBkLT5wYWdlKTsKPiArCQlrZnJlZShwZCk7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAq YWxsb2NfcGRfc2luZ2xlKHZvaWQpCj4gK3sKPiArCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5 X2VudHJ5ICpwZDsKPiArCj4gKwlwZCA9IGt6YWxsb2Moc2l6ZW9mKCpwZCksIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFwZCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlwZC0+ cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+ICsJaWYgKCFwZC0+ cGFnZSkgewo+ICsJCWtmcmVlKHBkKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gcGQ7Cj4gK30KPiArCj4gIC8qIEJyb2Fkd2VsbCBQYWdlIERpcmVj dG9yeSBQb2ludGVyIERlc2NyaXB0b3JzICovCj4gIHN0YXRpYyBpbnQgZ2VuOF93cml0ZV9wZHAo c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdW5zaWduZWQgZW50cnksCj4gIAkJCSAgIHVp bnQ2NF90IHZhbCkKPiBAQCAtMzExLDcgKzQwMyw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9tbV9zd2l0 Y2goc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAJaW50IHVzZWRfcGQgPSBwcGd0dC0+ bnVtX3BkX2VudHJpZXMgLyBHRU44X1BERVNfUEVSX1BBR0U7Cj4gIAo+ICAJZm9yIChpID0gdXNl ZF9wZCAtIDE7IGkgPj0gMDsgaS0tKSB7Cj4gLQkJZG1hX2FkZHJfdCBhZGRyID0gcHBndHQtPnBk cC5wYWdlX2RpcmVjdG9yeVtpXS5kYWRkcjsKPiArCQlkbWFfYWRkcl90IGFkZHIgPSBwcGd0dC0+ cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLT5kYWRkcjsKPiAgCQlyZXQgPSBnZW44X3dyaXRlX3BkcChy aW5nLCBpLCBhZGRyKTsKPiAgCQlpZiAocmV0KQo+ICAJCQlyZXR1cm4gcmV0Owo+IEBAIC0zMzgs OCArNDMwLDI0IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYXJfcmFuZ2Uoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJCQkgICAgICBJOTE1X0NBQ0hFX0xMQywgdXNlX3Nj cmF0Y2gpOwo+ICAKPiAgCXdoaWxlIChudW1fZW50cmllcykgewo+IC0JCXN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5X2VudHJ5ICpwZCA9ICZwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkcGVd Owo+IC0JCXN0cnVjdCBwYWdlICpwYWdlX3RhYmxlID0gcGQtPnBhZ2VfdGFibGVzW3BkZV0ucGFn ZTsKPiArCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGQ7Cj4gKwkJc3RydWN0 IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQ7Cj4gKwkJc3RydWN0IHBhZ2UgKnBhZ2VfdGFibGU7 Cj4gKwo+ICsJCWlmIChXQVJOX09OKCFwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkcGVdKSkK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCXBkID0gcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtw ZHBlXTsKPiArCj4gKwkJaWYgKFdBUk5fT04oIXBkLT5wYWdlX3RhYmxlc1twZGVdKSkKPiArCQkJ Y29udGludWU7Cj4gKwo+ICsJCXB0ID0gcGQtPnBhZ2VfdGFibGVzW3BkZV07Cj4gKwo+ICsJCWlm IChXQVJOX09OKCFwdC0+cGFnZSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlwYWdlX3RhYmxl ID0gcHQtPnBhZ2U7Cj4gIAo+ICAJCWxhc3RfcHRlID0gcHRlICsgbnVtX2VudHJpZXM7Cj4gIAkJ aWYgKGxhc3RfcHRlID4gR0VOOF9QVEVTX1BFUl9QQUdFKQo+IEBAIC0zODQsOCArNDkyLDkgQEAg c3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkxNV9hZGRyZXNz X3NwYWNlICp2bSwKPiAgCQkJYnJlYWs7Cj4gIAo+ICAJCWlmIChwdF92YWRkciA9PSBOVUxMKSB7 Cj4gLQkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCA9ICZwcGd0dC0+cGRw LnBhZ2VfZGlyZWN0b3J5W3BkcGVdOwo+IC0JCQlzdHJ1Y3QgcGFnZSAqcGFnZV90YWJsZSA9IHBk LT5wYWdlX3RhYmxlc1twZGVdLnBhZ2U7Cj4gKwkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5 X2VudHJ5ICpwZCA9IHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRwZV07Cj4gKwkJCXN0cnVj dCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0ID0gcGQtPnBhZ2VfdGFibGVzW3BkZV07Cj4gKwkJ CXN0cnVjdCBwYWdlICpwYWdlX3RhYmxlID0gcHQtPnBhZ2U7Cj4gIAo+ICAJCQlwdF92YWRkciA9 IGttYXBfYXRvbWljKHBhZ2VfdGFibGUpOwo+ICAJCX0KPiBAQCAtNDE2LDE5ICs1MjUsMTYgQEAg c3RhdGljIHZvaWQgZ2VuOF9mcmVlX3BhZ2VfdGFibGVzKHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0 b3J5X2VudHJ5ICpwZCkKPiAgewo+ICAJaW50IGk7Cj4gIAo+IC0JaWYgKHBkLT5wYWdlX3RhYmxl cyA9PSBOVUxMKQo+ICsJaWYgKCFwZC0+cGFnZSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JZm9yIChp ID0gMDsgaSA8IEdFTjhfUERFU19QRVJfUEFHRTsgaSsrKQo+IC0JCWlmIChwZC0+cGFnZV90YWJs ZXNbaV0ucGFnZSkKPiAtCQkJX19mcmVlX3BhZ2UocGQtPnBhZ2VfdGFibGVzW2ldLnBhZ2UpOwo+ IC19Cj4gKwlmb3IgKGkgPSAwOyBpIDwgR0VOOF9QREVTX1BFUl9QQUdFOyBpKyspIHsKPiArCQlp ZiAoV0FSTl9PTighcGQtPnBhZ2VfdGFibGVzW2ldKSkKPiArCQkJY29udGludWU7Cj4gIAo+IC1z dGF0aWMgdm9pZCBnZW44X2ZyZWVfcGFnZV9kaXJlY3Rvcnkoc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnlfZW50cnkgKnBkKQo+IC17Cj4gLQlnZW44X2ZyZWVfcGFnZV90YWJsZXMocGQpOwo+IC0J a2ZyZWUocGQtPnBhZ2VfdGFibGVzKTsKPiAtCV9fZnJlZV9wYWdlKHBkLT5wYWdlKTsKPiArCQl1 bm1hcF9hbmRfZnJlZV9wdChwZC0+cGFnZV90YWJsZXNbaV0pOwo+ICsJCXBkLT5wYWdlX3RhYmxl c1tpXSA9IE5VTEw7Cj4gKwl9Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfZnJl ZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gQEAgLTQzNiw3ICs1NDIsMTEgQEAgc3Rh dGljIHZvaWQgZ2VuOF9wcGd0dF9mcmVlKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAg CWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+bnVtX3BkX3BhZ2VzOyBpKysp IHsKPiAtCQlnZW44X2ZyZWVfcGFnZV9kaXJlY3RvcnkoJnBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rv cnlbaV0pOwo+ICsJCWlmIChXQVJOX09OKCFwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldKSkK PiArCQkJY29udGludWU7Cj4gKwo+ICsJCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyhwcGd0dC0+cGRw LnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiArCQl1bm1hcF9hbmRfZnJlZV9wZChwcGd0dC0+cGRwLnBh Z2VfZGlyZWN0b3J5W2ldKTsKPiAgCX0KPiAgfQo+ICAKPiBAQCAtNDQ4LDE0ICs1NTgsMjMgQEAg c3RhdGljIHZvaWQgZ2VuOF9wcGd0dF91bm1hcF9wYWdlcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAq cHBndHQpCj4gIAlmb3IgKGkgPSAwOyBpIDwgcHBndHQtPm51bV9wZF9wYWdlczsgaSsrKSB7Cj4g IAkJLyogVE9ETzogSW4gdGhlIGZ1dHVyZSB3ZSdsbCBzdXBwb3J0IHNwYXJzZSBtYXBwaW5ncywg c28gdGhpcwo+ICAJCSAqIHdpbGwgaGF2ZSB0byBjaGFuZ2UuICovCj4gLQkJaWYgKCFwcGd0dC0+ cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLmRhZGRyKQo+ICsJCWlmICghcHBndHQtPnBkcC5wYWdlX2Rp cmVjdG9yeVtpXS0+ZGFkZHIpCj4gIAkJCWNvbnRpbnVlOwo+ICAKPiAtCQlwY2lfdW5tYXBfcGFn ZShod2RldiwgcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5kYWRkciwgUEFHRV9TSVpFLAo+ ICsJCXBjaV91bm1hcF9wYWdlKGh3ZGV2LCBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLT5k YWRkciwgUEFHRV9TSVpFLAo+ICAJCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKPiAg Cj4gIAkJZm9yIChqID0gMDsgaiA8IEdFTjhfUERFU19QRVJfUEFHRTsgaisrKSB7Cj4gLQkJCWRt YV9hZGRyX3QgYWRkciA9IHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0ucGFnZV90YWJsZXNb al0uZGFkZHI7Cj4gKwkJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5ICpwZCA9IHBw Z3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV07Cj4gKwkJCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVf ZW50cnkgKnB0Owo+ICsJCQlkbWFfYWRkcl90IGFkZHI7Cj4gKwo+ICsJCQlpZiAoV0FSTl9PTigh cGQtPnBhZ2VfdGFibGVzW2pdKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJcHQgPSBwZC0+ cGFnZV90YWJsZXNbal07Cj4gKwkJCWFkZHIgPSBwdC0+ZGFkZHI7Cj4gKwo+ICAJCQlpZiAoYWRk cikKPiAgCQkJCXBjaV91bm1hcF9wYWdlKGh3ZGV2LCBhZGRyLCBQQUdFX1NJWkUsCj4gIAkJCQkJ ICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gQEAgLTQ3NCwyNSArNTkzLDIwIEBAIHN0 YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51cChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiAgCj4gIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX3RhYmxlcyhzdHJ1 Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIHsKPiAtCWludCBpLCBqOwo+ICsJaW50IGksIHJl dDsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwgcHBndHQtPm51bV9wZF9wYWdlczsgaSsrKSB7Cj4g LQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkID0gJnBwZ3R0LT5wZHAucGFn ZV9kaXJlY3RvcnlbaV07Cj4gLQkJZm9yIChqID0gMDsgaiA8IEdFTjhfUERFU19QRVJfUEFHRTsg aisrKSB7Cj4gLQkJCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0ID0gJnBkLT5wYWdl X3RhYmxlc1tqXTsKPiAtCj4gLQkJCXB0LT5wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwg X19HRlBfWkVSTyk7Cj4gLQkJCWlmICghcHQtPnBhZ2UpCj4gLQkJCQlnb3RvIHVud2luZF9vdXQ7 Cj4gLQo+IC0JCX0KPiArCQlyZXQgPSBhbGxvY19wdF9yYW5nZShwcGd0dC0+cGRwLnBhZ2VfZGly ZWN0b3J5W2ldLAo+ICsJCQkJICAgICAwLCBHRU44X1BERVNfUEVSX1BBR0UpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCWdvdG8gdW53aW5kX291dDsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gMDsKPiAgCj4g IHVud2luZF9vdXQ6Cj4gIAl3aGlsZSAoaS0tKQo+IC0JCWdlbjhfZnJlZV9wYWdlX3RhYmxlcygm cHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXSk7Cj4gKwkJZ2VuOF9mcmVlX3BhZ2VfdGFibGVz KHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbaV0pOwo+ICAKPiAgCXJldHVybiAtRU5PTUVNOwo+ ICB9Cj4gQEAgLTUwMywxOSArNjE3LDkgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jYXRl X3BhZ2VfZGlyZWN0b3JpZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+ICAJaW50IGk7 Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IG1heF9wZHA7IGkrKykgewo+IC0JCXN0cnVjdCBpOTE1 X3BhZ2VfdGFibGVfZW50cnkgKnB0Owo+IC0KPiAtCQlwdCA9IGtjYWxsb2MoR0VOOF9QREVTX1BF Ul9QQUdFLCBzaXplb2YoKnB0KSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFwdCkKPiArCQlwcGd0 dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldID0gYWxsb2NfcGRfc2luZ2xlKCk7Cj4gKwkJaWYgKElT X0VSUihwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldKSkKPiAgCQkJZ290byB1bndpbmRfb3V0 Owo+IC0KPiAtCQlwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldLnBhZ2UgPSBhbGxvY19wYWdl KEdGUF9LRVJORUwpOwo+IC0JCWlmICghcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdl KSB7Cj4gLQkJCWtmcmVlKHB0KTsKPiAtCQkJZ290byB1bndpbmRfb3V0Owo+IC0JCX0KPiAtCj4g LQkJcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXS5wYWdlX3RhYmxlcyA9IHB0Owo+ICAJfQo+ ICAKPiAgCXBwZ3R0LT5udW1fcGRfcGFnZXMgPSBtYXhfcGRwOwo+IEBAIC01MjQsMTAgKzYyOCw4 IEBAIHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY2F0ZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVj dCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCXJldHVybiAwOwo+ICAKPiAgdW53aW5kX291dDoK PiAtCXdoaWxlIChpLS0pIHsKPiAtCQlrZnJlZShwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ld LnBhZ2VfdGFibGVzKTsKPiAtCQlfX2ZyZWVfcGFnZShwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5 W2ldLnBhZ2UpOwo+IC0JfQo+ICsJd2hpbGUgKGktLSkKPiArCQl1bm1hcF9hbmRfZnJlZV9wZChw cGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiAgCj4gIAlyZXR1cm4gLUVOT01FTTsKPiAg fQo+IEBAIC01NjEsMTQgKzY2MywxNCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfc2V0dXBfcGFn ZV9kaXJlY3RvcmllcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4gIAlpbnQgcmV0Owo+ ICAKPiAgCXBkX2FkZHIgPSBwY2lfbWFwX3BhZ2UocHBndHQtPmJhc2UuZGV2LT5wZGV2LAo+IC0J CQkgICAgICAgcHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtwZF0ucGFnZSwgMCwKPiArCQkJICAg ICAgIHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRdLT5wYWdlLCAwLAo+ICAJCQkgICAgICAg UEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwo+ICAKPiAgCXJldCA9IHBjaV9kbWFf bWFwcGluZ19lcnJvcihwcGd0dC0+YmFzZS5kZXYtPnBkZXYsIHBkX2FkZHIpOwo+ICAJaWYgKHJl dCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRd LmRhZGRyID0gcGRfYWRkcjsKPiArCXBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbcGRdLT5kYWRk ciA9IHBkX2FkZHI7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiBAQCAtNTc4LDggKzY4MCw4IEBA IHN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9zZXR1cF9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19w cGd0dCAqcHBndHQsCj4gIAkJCQkJY29uc3QgaW50IHB0KQo+ICB7Cj4gIAlkbWFfYWRkcl90IHB0 X2FkZHI7Cj4gLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAqcGRpciA9ICZwcGd0 dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkXTsKPiAtCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50 cnkgKnB0YWIgPSAmcGRpci0+cGFnZV90YWJsZXNbcHRdOwo+ICsJc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnlfZW50cnkgKnBkaXIgPSBwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5W3BkXTsKPiAr CXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0YWIgPSBwZGlyLT5wYWdlX3RhYmxlc1tw dF07Cj4gIAlzdHJ1Y3QgcGFnZSAqcCA9IHB0YWItPnBhZ2U7Cj4gIAlpbnQgcmV0Owo+ICAKPiBA QCAtNjQyLDEwICs3NDQsMTIgQEAgc3RhdGljIGludCBnZW44X3BwZ3R0X2luaXQoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0LCB1aW50NjRfdCBzaXplKQo+ICAJICogd2lsbCBuZXZlciBuZWVk IHRvIHRvdWNoIHRoZSBQREVzIGFnYWluLgo+ICAJICovCj4gIAlmb3IgKGkgPSAwOyBpIDwgbWF4 X3BkcDsgaSsrKSB7Cj4gKwkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnlfZW50cnkgKnBkID0g cHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVtpXTsKPiAgCQlnZW44X3BwZ3R0X3BkZV90ICpwZF92 YWRkcjsKPiAtCQlwZF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rv cnlbaV0ucGFnZSk7Cj4gKwkJcGRfdmFkZHIgPSBrbWFwX2F0b21pYyhwcGd0dC0+cGRwLnBhZ2Vf ZGlyZWN0b3J5W2ldLT5wYWdlKTsKPiAgCQlmb3IgKGogPSAwOyBqIDwgR0VOOF9QREVTX1BFUl9Q QUdFOyBqKyspIHsKPiAtCQkJZG1hX2FkZHJfdCBhZGRyID0gcHBndHQtPnBkcC5wYWdlX2RpcmVj dG9yeVtpXS5wYWdlX3RhYmxlc1tqXS5kYWRkcjsKPiArCQkJc3RydWN0IGk5MTVfcGFnZV90YWJs ZV9lbnRyeSAqcHQgPSBwZC0+cGFnZV90YWJsZXNbal07Cj4gKwkJCWRtYV9hZGRyX3QgYWRkciA9 IHB0LT5kYWRkcjsKPiAgCQkJcGRfdmFkZHJbal0gPSBnZW44X3BkZV9lbmNvZGUocHBndHQtPmJh c2UuZGV2LCBhZGRyLAo+ICAJCQkJCQkgICAgICBJOTE1X0NBQ0hFX0xMQyk7Cj4gIAkJfQo+IEBA IC02OTYsNyArODAwLDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9kdW1wX3BwZ3R0KHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCwgc3RydWN0IHNlcV9maWxlICptKQo+ICAJZm9yIChwZGUgPSAwOyBw ZGUgPCBwcGd0dC0+bnVtX3BkX2VudHJpZXM7IHBkZSsrKSB7Cj4gIAkJdTMyIGV4cGVjdGVkOwo+ ICAJCWdlbjZfZ3R0X3B0ZV90ICpwdF92YWRkcjsKPiAtCQlkbWFfYWRkcl90IHB0X2FkZHIgPSBw cGd0dC0+cGQucGFnZV90YWJsZXNbcGRlXS5kYWRkcjsKPiArCQlkbWFfYWRkcl90IHB0X2FkZHIg PSBwcGd0dC0+cGQucGFnZV90YWJsZXNbcGRlXS0+ZGFkZHI7Cj4gIAkJcGRfZW50cnkgPSByZWFk bChwZF9hZGRyICsgcGRlKTsKPiAgCQlleHBlY3RlZCA9IChHRU42X1BERV9BRERSX0VOQ09ERShw dF9hZGRyKSB8IEdFTjZfUERFX1ZBTElEKTsKPiAgCj4gQEAgLTcwNyw3ICs4MTEsNyBAQCBzdGF0 aWMgdm9pZCBnZW42X2R1bXBfcHBndHQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCBzdHJ1 Y3Qgc2VxX2ZpbGUgKm0pCj4gIAkJCQkgICBleHBlY3RlZCk7Cj4gIAkJc2VxX3ByaW50ZihtLCAi XHRQREU6ICV4XG4iLCBwZF9lbnRyeSk7Cj4gIAo+IC0JCXB0X3ZhZGRyID0ga21hcF9hdG9taWMo cHBndHQtPnBkLnBhZ2VfdGFibGVzW3BkZV0ucGFnZSk7Cj4gKwkJcHRfdmFkZHIgPSBrbWFwX2F0 b21pYyhwcGd0dC0+cGQucGFnZV90YWJsZXNbcGRlXS0+cGFnZSk7Cj4gIAkJZm9yIChwdGUgPSAw OyBwdGUgPCBJOTE1X1BQR1RUX1BUX0VOVFJJRVM7IHB0ZSs9NCkgewo+ICAJCQl1bnNpZ25lZCBs b25nIHZhID0KPiAgCQkJCShwZGUgKiBQQUdFX1NJWkUgKiBJOTE1X1BQR1RUX1BUX0VOVFJJRVMp ICsKPiBAQCAtNzQ2LDcgKzg1MCw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfd3JpdGVfcGRlcyhzdHJ1 Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAlmb3IgKGkgPSAwOyBpIDwgcHBndHQtPm51bV9w ZF9lbnRyaWVzOyBpKyspIHsKPiAgCQlkbWFfYWRkcl90IHB0X2FkZHI7Cj4gIAo+IC0JCXB0X2Fk ZHIgPSBwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0uZGFkZHI7Cj4gKwkJcHRfYWRkciA9IHBwZ3R0 LT5wZC5wYWdlX3RhYmxlc1tpXS0+ZGFkZHI7Cj4gIAkJcGRfZW50cnkgPSBHRU42X1BERV9BRERS X0VOQ09ERShwdF9hZGRyKTsKPiAgCQlwZF9lbnRyeSB8PSBHRU42X1BERV9WQUxJRDsKPiAgCj4g QEAgLTkyMiw3ICsxMDI2LDcgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhcl9yYW5nZShz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQlpZiAobGFzdF9wdGUgPiBJOTE1X1BQ R1RUX1BUX0VOVFJJRVMpCj4gIAkJCWxhc3RfcHRlID0gSTkxNV9QUEdUVF9QVF9FTlRSSUVTOwo+ ICAKPiAtCQlwdF92YWRkciA9IGttYXBfYXRvbWljKHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1thY3Rf cHRdLnBhZ2UpOwo+ICsJCXB0X3ZhZGRyID0ga21hcF9hdG9taWMocHBndHQtPnBkLnBhZ2VfdGFi bGVzW2FjdF9wdF0tPnBhZ2UpOwo+ICAKPiAgCQlmb3IgKGkgPSBmaXJzdF9wdGU7IGkgPCBsYXN0 X3B0ZTsgaSsrKQo+ICAJCQlwdF92YWRkcltpXSA9IHNjcmF0Y2hfcHRlOwo+IEBAIC05NTEsNyAr MTA1NSw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfaW5zZXJ0X2VudHJpZXMoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAlwdF92YWRkciA9IE5VTEw7Cj4gIAlmb3JfZWFjaF9z Z19wYWdlKHBhZ2VzLT5zZ2wsICZzZ19pdGVyLCBwYWdlcy0+bmVudHMsIDApIHsKPiAgCQlpZiAo cHRfdmFkZHIgPT0gTlVMTCkKPiAtCQkJcHRfdmFkZHIgPSBrbWFwX2F0b21pYyhwcGd0dC0+cGQu cGFnZV90YWJsZXNbYWN0X3B0XS5wYWdlKTsKPiArCQkJcHRfdmFkZHIgPSBrbWFwX2F0b21pYyhw cGd0dC0+cGQucGFnZV90YWJsZXNbYWN0X3B0XS0+cGFnZSk7Cj4gIAo+ICAJCXB0X3ZhZGRyW2Fj dF9wdGVdID0KPiAgCQkJdm0tPnB0ZV9lbmNvZGUoc2dfcGFnZV9pdGVyX2RtYV9hZGRyZXNzKCZz Z19pdGVyKSwKPiBAQCAtOTc0LDcgKzEwNzgsNyBAQCBzdGF0aWMgdm9pZCBnZW42X3BwZ3R0X3Vu bWFwX3BhZ2VzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCj4gIAlmb3IgKGkgPSAw OyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspCj4gIAkJcGNpX3VubWFwX3BhZ2UocHBn dHQtPmJhc2UuZGV2LT5wZGV2LAo+IC0JCQkgICAgICAgcHBndHQtPnBkLnBhZ2VfdGFibGVzW2ld LmRhZGRyLAo+ICsJCQkgICAgICAgcHBndHQtPnBkLnBhZ2VfdGFibGVzW2ldLT5kYWRkciwKPiAg CQkJICAgICAgIDQwOTYsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Cj4gIH0KPiAgCj4gQEAgLTk4 Myw4ICsxMDg3LDkgQEAgc3RhdGljIHZvaWQgZ2VuNl9wcGd0dF9mcmVlKHN0cnVjdCBpOTE1X2h3 X3BwZ3R0ICpwcGd0dCkKPiAgCWludCBpOwo+ICAKPiAgCWZvciAoaSA9IDA7IGkgPCBwcGd0dC0+ bnVtX3BkX2VudHJpZXM7IGkrKykKPiAtCQlfX2ZyZWVfcGFnZShwcGd0dC0+cGQucGFnZV90YWJs ZXNbaV0ucGFnZSk7Cj4gLQlrZnJlZShwcGd0dC0+cGQucGFnZV90YWJsZXMpOwo+ICsJCXVubWFw X2FuZF9mcmVlX3B0KHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1tpXSk7Cj4gKwo+ICsJdW5tYXBfYW5k X2ZyZWVfcGQoJnBwZ3R0LT5wZCk7Cj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRf Y2xlYW51cChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKPiBAQCAtMTAzOSwyNyArMTE0 NCw2IEBAIGFsbG9jOgo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZ2VuNl9w cGd0dF9hbGxvY2F0ZV9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4g LXsKPiAtCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0Owo+IC0JaW50IGk7Cj4gLQo+ IC0JcHQgPSBrY2FsbG9jKHBwZ3R0LT5udW1fcGRfZW50cmllcywgc2l6ZW9mKCpwdCksIEdGUF9L RVJORUwpOwo+IC0JaWYgKCFwdCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlmb3IgKGkg PSAwOyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspIHsKPiAtCQlwdFtpXS5wYWdlID0g YWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKPiAtCQlpZiAoIXB0LT5wYWdlKSB7Cj4gLQkJCWdlbjZf cHBndHRfZnJlZShwcGd0dCk7Cj4gLQkJCXJldHVybiAtRU5PTUVNOwo+IC0JCX0KPiAtCX0KPiAt Cj4gLQlwcGd0dC0+cGQucGFnZV90YWJsZXMgPSBwdDsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ ICBzdGF0aWMgaW50IGdlbjZfcHBndHRfYWxsb2Moc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 KQo+ICB7Cj4gIAlpbnQgcmV0Owo+IEBAIC0xMDY4LDcgKzExNTIsNyBAQCBzdGF0aWMgaW50IGdl bjZfcHBndHRfYWxsb2Moc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJaWYgKHJldCkK PiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJldCA9IGdlbjZfcHBndHRfYWxsb2NhdGVfcGFnZV90 YWJsZXMocHBndHQpOwo+ICsJcmV0ID0gYWxsb2NfcHRfcmFuZ2UoJnBwZ3R0LT5wZCwgMCwgcHBn dHQtPm51bV9wZF9lbnRyaWVzKTsKPiAgCWlmIChyZXQpIHsKPiAgCQlkcm1fbW1fcmVtb3ZlX25v ZGUoJnBwZ3R0LT5ub2RlKTsKPiAgCQlyZXR1cm4gcmV0Owo+IEBAIC0xMDg2LDcgKzExNzAsNyBA QCBzdGF0aWMgaW50IGdlbjZfcHBndHRfc2V0dXBfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfaHdf cHBndHQgKnBwZ3R0KQo+ICAJCXN0cnVjdCBwYWdlICpwYWdlOwo+ICAJCWRtYV9hZGRyX3QgcHRf YWRkcjsKPiAgCj4gLQkJcGFnZSA9IHBwZ3R0LT5wZC5wYWdlX3RhYmxlc1tpXS5wYWdlOwo+ICsJ CXBhZ2UgPSBwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0tPnBhZ2U7Cj4gIAkJcHRfYWRkciA9IHBj aV9tYXBfcGFnZShkZXYtPnBkZXYsIHBhZ2UsIDAsIDQwOTYsCj4gIAkJCQkgICAgICAgUENJX0RN QV9CSURJUkVDVElPTkFMKTsKPiAgCj4gQEAgLTEwOTUsNyArMTE3OSw3IEBAIHN0YXRpYyBpbnQg Z2VuNl9wcGd0dF9zZXR1cF9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQp Cj4gIAkJCXJldHVybiAtRUlPOwo+ICAJCX0KPiAgCj4gLQkJcHBndHQtPnBkLnBhZ2VfdGFibGVz W2ldLmRhZGRyID0gcHRfYWRkcjsKPiArCQlwcGd0dC0+cGQucGFnZV90YWJsZXNbaV0tPmRhZGRy ID0gcHRfYWRkcjsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaAo+IGluZGV4IDZlZmViMTguLmU4Y2FkNzIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaAo+IEBAIC0xOTksMTIgKzE5OSwxMiBAQCBzdHJ1Y3QgaTkxNV9wYWdl X2RpcmVjdG9yeV9lbnRyeSB7Cj4gIAkJZG1hX2FkZHJfdCBkYWRkcjsKPiAgCX07Cj4gIAo+IC0J c3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcGFnZV90YWJsZXM7Cj4gKwlzdHJ1Y3QgaTkx NV9wYWdlX3RhYmxlX2VudHJ5ICpwYWdlX3RhYmxlc1tHRU42X1BQR1RUX1BEX0VOVFJJRVNdOyAv KiBQREVzICovCgpXb3VsZCB5b3UgY29uc2lkZXIgY2hhbmdpbmcgdGhlIHBsdXJhbCBoZXJlIGlu ICd0YWJsZXMnIHNvIHRoYXQgd2Ugd291bGQKbG9zZSB0aGUgZGlzY3JlcGFuY3kgYWdhaW5zdCB0 aGUgcGFnZV9kaXJlY3RvcnkgYmVsb3c/CgotTWlrYQoKPiAgfTsKPiAgCj4gIHN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXJfZW50cnkgewo+ICAJLyogc3RydWN0IHBhZ2UgKnBhZ2U7 ICovCj4gLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSBwYWdlX2RpcmVjdG9yeVtH RU44X0xFR0FDWV9QRFBFU107Cj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeV9lbnRyeSAq cGFnZV9kaXJlY3RvcnlbR0VOOF9MRUdBQ1lfUERQRVNdOwo+ICB9Owo+ICAKPiAgc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCA5ZTcx OTkyLi5iYzljN2MzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xy Yy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBAQCAtMTczNSwx NCArMTczNSwxNCBAQCBwb3B1bGF0ZV9scl9jb250ZXh0KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj dHgsIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjdHhfbwo+ICAJcmVnX3N0YXRlW0NUWF9Q RFAxX0xEV10gPSBHRU44X1JJTkdfUERQX0xEVyhyaW5nLCAxKTsKPiAgCXJlZ19zdGF0ZVtDVFhf UERQMF9VRFddID0gR0VOOF9SSU5HX1BEUF9VRFcocmluZywgMCk7Cj4gIAlyZWdfc3RhdGVbQ1RY X1BEUDBfTERXXSA9IEdFTjhfUklOR19QRFBfTERXKHJpbmcsIDApOwo+IC0JcmVnX3N0YXRlW0NU WF9QRFAzX1VEVysxXSA9IHVwcGVyXzMyX2JpdHMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVsz XS5kYWRkcik7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDNfTERXKzFdID0gbG93ZXJfMzJfYml0cyhw cGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzNdLmRhZGRyKTsKPiAtCXJlZ19zdGF0ZVtDVFhfUERQ Ml9VRFcrMV0gPSB1cHBlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMl0uZGFk ZHIpOwo+IC0JcmVnX3N0YXRlW0NUWF9QRFAyX0xEVysxXSA9IGxvd2VyXzMyX2JpdHMocHBndHQt PnBkcC5wYWdlX2RpcmVjdG9yeVsyXS5kYWRkcik7Cj4gLQlyZWdfc3RhdGVbQ1RYX1BEUDFfVURX KzFdID0gdXBwZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2VfZGlyZWN0b3J5WzFdLmRhZGRyKTsK PiAtCXJlZ19zdGF0ZVtDVFhfUERQMV9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZHAu cGFnZV9kaXJlY3RvcnlbMV0uZGFkZHIpOwo+IC0JcmVnX3N0YXRlW0NUWF9QRFAwX1VEVysxXSA9 IHVwcGVyXzMyX2JpdHMocHBndHQtPnBkcC5wYWdlX2RpcmVjdG9yeVswXS5kYWRkcik7Cj4gLQly ZWdfc3RhdGVbQ1RYX1BEUDBfTERXKzFdID0gbG93ZXJfMzJfYml0cyhwcGd0dC0+cGRwLnBhZ2Vf ZGlyZWN0b3J5WzBdLmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQM19VRFcrMV0gPSB1cHBl cl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbM10tPmRhZGRyKTsKPiArCXJlZ19z dGF0ZVtDVFhfUERQM19MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJl Y3RvcnlbM10tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMl9VRFcrMV0gPSB1cHBlcl8z Ml9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMl0tPmRhZGRyKTsKPiArCXJlZ19zdGF0 ZVtDVFhfUERQMl9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rv cnlbMl0tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMV9VRFcrMV0gPSB1cHBlcl8zMl9i aXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMV0tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtD VFhfUERQMV9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3Rvcnlb MV0tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhfUERQMF9VRFcrMV0gPSB1cHBlcl8zMl9iaXRz KHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMF0tPmRhZGRyKTsKPiArCXJlZ19zdGF0ZVtDVFhf UERQMF9MRFcrMV0gPSBsb3dlcl8zMl9iaXRzKHBwZ3R0LT5wZHAucGFnZV9kaXJlY3RvcnlbMF0t PmRhZGRyKTsKPiAgCWlmIChyaW5nLT5pZCA9PSBSQ1MpIHsKPiAgCQlyZWdfc3RhdGVbQ1RYX0xS SV9IRUFERVJfMl0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPiAgCQlyZWdfc3RhdGVbQ1RY X1JfUFdSX0NMS19TVEFURV0gPSAweDIwYzg7Cj4gLS0gCj4gMi4xLjEKPgo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==