From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Maciej_=C5=BBenczykowski?= Subject: Re: [PATCH] Enhance AF_PACKET implementation to not require high order contiguous memory allocation (v4) Date: Thu, 11 Nov 2010 00:03:37 -0800 Message-ID: References: <1288033566-2091-1-git-send-email-nhorman@tuxdriver.com> <1289416194-1844-1-git-send-email-nhorman@tuxdriver.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Cc: netdev@vger.kernel.org, davem@davemloft.net, eric.dumazet@gmail.com To: nhorman@tuxdriver.com Return-path: Received: from mail-wy0-f174.google.com ([74.125.82.174]:56894 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757752Ab0KKIDj (ORCPT ); Thu, 11 Nov 2010 03:03:39 -0500 Received: by wyb28 with SMTP id 28so382729wyb.19 for ; Thu, 11 Nov 2010 00:03:38 -0800 (PST) In-Reply-To: <1289416194-1844-1-git-send-email-nhorman@tuxdriver.com> Sender: netdev-owner@vger.kernel.org List-ID: T24gV2VkLCBOb3YgMTAsIDIwMTAgYXQgMTE6MDksICA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPiB3 cm90ZToKPiBGcm9tOiBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgo+Cj4gVmVy c2lvbiA0IG9mIHRoaXMgcGF0Y2guCj4KPiBDaGFuZ2Ugbm90ZXM6Cj4gMSkgUmVtb3ZlZCBleHRy YSBtZW1zZXQuIMKgRGlkbid0IHRoaW5rIGtjYWxsb2MgYWRkZWQgYSBHRlBfWkVSTyB0aGUgd2F5 IGt6YWxsb2MgZGlkIDopCj4KPiBTdW1tYXJ5Ogo+IEl0IHdhcyBzaG93biB0byBtZSByZWNlbnRs eSB0aGF0IHN5c3RlbXMgdW5kZXIgaGlnaCBsb2FkIHdlcmUgZHJpdmVuIHZlcnkgZGVlcAo+IGlu dG8gc3dhcCB3aGVuIHRjcGR1bXAgd2FzIHJ1bi4gwqBUaGUgcmVhc29uIHRoaXMgaGFwcGVuZWQg d2FzIGJlY2F1c2UgdGhlCj4gQUZfUEFDS0VUIHByb3RvY29sIGhhcyBhIFNFVF9SSU5HQlVGRkVS IHNvY2tldCBvcHRpb24gdGhhdCBhbGxvd3MgdGhlIHVzZXIgc3BhY2UKPiBhcHBsaWNhdGlvbiB0 byBzcGVjaWZ5IGhvdyBtYW55IGVudHJpZXMgYW4gQUZfUEFDS0VUIHNvY2tldCB3aWxsIGhhdmUg YW5kIGhvdwo+IGxhcmdlIGVhY2ggZW50cnkgd2lsbCBiZS4gwqBJdCBzZWVtcyB0aGUgZGVmYXVs dCBzZXR0aW5nIGZvciB0Y3BkdW1wIGlzIHRvIHNldAo+IHRoZSByaW5nIGJ1ZmZlciB0byAzMiBl bnRyaWVzIG9mIDY0IEtiIGVhY2gsIHdoaWNoIGltcGxpZXMgMzIgb3JkZXIgNQo+IGFsbG9jYXRp b24uIMKgVGhhdHMgZGlmZmljdWx0IHVuZGVyIGdvb2QgY2lyY3Vtc3RhbmNlcywgYW5kIGhvcnJp ZCB1bmRlciBtZW1vcnkKPiBwcmVzc3VyZS4KPgo+IEkgdGhvdWdodCBpdCB3b3VsZCBiZSBnb29k IHRvIG1ha2UgdGhhdCBhIGJpdCBtb3JlIHVzYWJsZS4gwqBJIHdhcyBnb2luZyB0byBkbyBhCj4g c2ltcGxlIGNvbnZlcnNpb24gb2YgdGhlIHJpbmcgYnVmZmVyIGZyb20gY29udGlnb3VzIHBhZ2Vz IHRvIGlvdmVjcywgYnV0Cj4gdW5mb3J0dW5hdGVseSwgdGhlIG1ldGFkYXRhIHdoaWNoIEFGX1BB Q0tFVCBwbGFjZXMgaW4gdGhlc2UgYnVmZmVycyBjYW4gZWFzaWx5Cj4gc3BhbiBhIHBhZ2UgYm91 bmRhcnksIGFuZCBnaXZlbiB0aGF0IHRoZXNlIGJ1ZmZlcnMgZ2V0IG1hcHBlZCBpbnRvIHVzZXIg c3BhY2UsCj4gYW5kIHRoZSBkYXRhIGxheW91dCBkb2Vzbid0IGVhc2lseSBhbGxvdyBmb3IgYSBj aGFuZ2UgdG8gcGFkZGluZyBiZXR3ZWVuIGZyYW1lcwo+IHRvIGF2b2lkIHRoYXQsIGEgc2ltcGxl IGlvdmVjIGNoYW5nZSBpcyBqdXN0IGdvaW5nIHRvIGJyZWFrIHVzZXIgc3BhY2UgQUJJCj4gY29u c2lzdGVuY3kuCj4KPiBTbyBJJ3ZlIGRvbmUgdGhpcywgSSd2ZSBhZGRlZCBhIHRocmVlIHRpZXJl ZCBtZWNoYW5pc20gdG8gdGhlIGFmX3BhY2tldCBzZXRfcmluZwo+IHNvY2tldCBvcHRpb24uIMKg SXQgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgbWVtb3J5IGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6Cj4K PiAxKSBVc2luZyBfX2dldF9mcmVlX3BhZ2VzIHdpdGggR0ZQX05PUkVUUlkgc2V0LCBzbyBhcyB0 byBmYWlsIHF1aWNrbHkgd2l0aG91dAo+IGRpZ2dpbmcgaW50byBzd2FwCj4KPiAyKSBVc2luZyB2 bWFsbG9jCj4KPiAzKSBVc2luZyBfX2dldF9mcmVlX3BhZ2VzIHdpdGggR0ZQX05PUkVUUlkgY2xl YXIsIGNhdXNpbmcgdXMgdG8gdHJ5IGFzIGhhcmQgYXMKPiBuZWVkZWQgdG8gZ2V0IHRoZSBtZW1v cnkKPgo+IFRoZSBlZmZlY3QgaXMgdGhhdCB3ZSBkb24ndCBkaXN0dXJiIHRoZSBzeXN0ZW0gYXMg bXVjaCB3aGVuIHdlJ3JlIHVuZGVyIGxvYWQsCj4gd2hpbGUgc3RpbGwgYmVpbmcgYWJsZSB0byBj b25kdWN0IHRjcGR1bXBzIGVmZmVjdGl2ZWx5Lgo+Cj4gVGVzdGVkIHN1Y2Nlc3NmdWxseSBieSBt ZS4KPgo+IFNpZ25lZC1vZmYtYnk6IE5laWwgSG9ybWFuIDxuaG9ybWFuQHR1eGRyaXZlci5jb20+ Cj4gLS0tCj4gwqBuZXQvcGFja2V0L2FmX3BhY2tldC5jIHwgwqAgODQgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiDCoDEgZmlsZXMgY2hhbmdlZCwgNjgg aW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvbmV0L3BhY2tl dC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKPiBpbmRleCAzNjE2ZjI3Li5h MzcyMzkwIDEwMDY0NAo+IC0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKPiArKysgYi9uZXQv cGFja2V0L2FmX3BhY2tldC5jCj4gQEAgLTE2Myw4ICsxNjMsMTQgQEAgc3RydWN0IHBhY2tldF9t cmVxX21heCB7Cj4gwqBzdGF0aWMgaW50IHBhY2tldF9zZXRfcmluZyhzdHJ1Y3Qgc29jayAqc2ss IHN0cnVjdCB0cGFja2V0X3JlcSAqcmVxLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaW50IGNs b3NpbmcsIGludCB0eF9yaW5nKTsKPgo+ICsjZGVmaW5lIFBHVl9GUk9NX1ZNQUxMT0MgMQo+ICtz dHJ1Y3QgcGd2IHsKPiArIMKgIMKgIMKgIGNoYXIgKmJ1ZmZlcjsKPiArIMKgIMKgIMKgIHVuc2ln bmVkIGNoYXIgZmxhZ3M7Cj4gK307Cj4gKwo+IMKgc3RydWN0IHBhY2tldF9yaW5nX2J1ZmZlciB7 Cj4gLSDCoCDCoCDCoCBjaGFyIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKipwZ192ZWM7 Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgcGd2IMKgIMKgIMKgIMKgIMKgIMKgIMKgKnBnX3ZlYzsKPiDC oCDCoCDCoCDCoHVuc2lnbmVkIGludCDCoCDCoCDCoCDCoCDCoCDCoGhlYWQ7Cj4gwqAgwqAgwqAg wqB1bnNpZ25lZCBpbnQgwqAgwqAgwqAgwqAgwqAgwqBmcmFtZXNfcGVyX2Jsb2NrOwo+IMKgIMKg IMKgIMKgdW5zaWduZWQgaW50IMKgIMKgIMKgIMKgIMKgIMKgZnJhbWVfc2l6ZTsKPiBAQCAtMjgz LDcgKzI4OSw4IEBAIHN0YXRpYyB2b2lkICpwYWNrZXRfbG9va3VwX2ZyYW1lKHN0cnVjdCBwYWNr ZXRfc29jayAqcG8sCj4gwqAgwqAgwqAgwqBwZ192ZWNfcG9zID0gcG9zaXRpb24gLyByYi0+ZnJh bWVzX3Blcl9ibG9jazsKPiDCoCDCoCDCoCDCoGZyYW1lX29mZnNldCA9IHBvc2l0aW9uICUgcmIt PmZyYW1lc19wZXJfYmxvY2s7Cj4KPiAtIMKgIMKgIMKgIGgucmF3ID0gcmItPnBnX3ZlY1twZ192 ZWNfcG9zXSArIChmcmFtZV9vZmZzZXQgKiByYi0+ZnJhbWVfc2l6ZSk7Cj4gKyDCoCDCoCDCoCBo LnJhdyA9IHJiLT5wZ192ZWNbcGdfdmVjX3Bvc10uYnVmZmVyICsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIChmcmFtZV9vZmZzZXQgKiByYi0+ZnJhbWVfc2l6ZSk7Cj4KPiDCoCDCoCDCoCDCoGlm IChzdGF0dXMgIT0gX19wYWNrZXRfZ2V0X3N0YXR1cyhwbywgaC5yYXcpKQo+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgcmV0dXJuIE5VTEw7Cj4gQEAgLTIzMjIsMzcgKzIzMjksNzQgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwYWNrZXRfbW1hcF9vcHMgPSB7Cj4g wqAgwqAgwqAgwqAuY2xvc2UgwqA9IMKgIMKgIMKgIHBhY2tldF9tbV9jbG9zZSwKPiDCoH07Cj4K PiAtc3RhdGljIHZvaWQgZnJlZV9wZ192ZWMoY2hhciAqKnBnX3ZlYywgdW5zaWduZWQgaW50IG9y ZGVyLCB1bnNpZ25lZCBpbnQgbGVuKQo+ICtzdGF0aWMgdm9pZCBmcmVlX3BnX3ZlYyhzdHJ1Y3Qg cGd2ICpwZ192ZWMsIHVuc2lnbmVkIGludCBvcmRlciwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHVuc2lnbmVkIGludCBsZW4pCj4gwqB7Cj4gwqAgwqAgwqAgwqBpbnQgaTsK Pgo+IMKgIMKgIMKgIMKgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAobGlrZWx5KHBnX3ZlY1tpXSkpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwZ192ZWNbaV0sIG9yZGVy KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChsaWtlbHkocGdfdmVjW2ldLmJ1ZmZlcikp IHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChwZ192ZWNbaV0uZmxh Z3MgJiBQR1ZfRlJPTV9WTUFMTE9DKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgdmZyZWUocGdfdmVjW2ldLmJ1ZmZlcik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBnX3ZlY1tpXS5idWZm ZXIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoG9yZGVyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHBnX3ZlY1tpXS5idWZmZXIgPSBOVUxMOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+IMKg IMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKga2ZyZWUocGdfdmVjKTsKPiDCoH0KPgo+IC1zdGF0aWMg aW5saW5lIGNoYXIgKmFsbG9jX29uZV9wZ192ZWNfcGFnZSh1bnNpZ25lZCBsb25nIG9yZGVyKQo+ ICtzdGF0aWMgaW5saW5lIGNoYXIgKmFsbG9jX29uZV9wZ192ZWNfcGFnZSh1bnNpZ25lZCBsb25n IG9yZGVyLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgdW5zaWduZWQgY2hhciAqZmxhZ3MpCj4gwqB7Cj4gLSDCoCDCoCDCoCBn ZnBfdCBnZnBfZmxhZ3MgPSBHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCB8IF9fR0ZQX1pFUk8gfCBf X0dGUF9OT1dBUk47Cj4gKyDCoCDCoCDCoCBjaGFyICpidWZmZXIgPSBOVUxMOwo+ICsgwqAgwqAg wqAgZ2ZwX3QgZ2ZwX2ZsYWdzID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAgfAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgX19HRlBfWkVSTyB8IF9fR0ZQX05PV0FSTiB8 IF9fR0ZQX05PUkVUUlk7Cj4gKwo+ICsgwqAgwqAgwqAgYnVmZmVyID0gKGNoYXIgKikgX19nZXRf ZnJlZV9wYWdlcyhnZnBfZmxhZ3MsIG9yZGVyKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoYnVmZmVy KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIGJ1ZmZlcjsKPiArCj4gKyDCoCDCoCDC oCAvKgo+ICsgwqAgwqAgwqAgwqAqIF9fZ2V0X2ZyZWVfcGFnZXMgZmFpbGVkLCBmYWxsIGJhY2sg dG8gdm1hbGxvYwo+ICsgwqAgwqAgwqAgwqAqLwo+ICsgwqAgwqAgwqAgKmZsYWdzIHw9IFBHVl9G Uk9NX1ZNQUxMT0M7Cj4gKyDCoCDCoCDCoCBidWZmZXIgPSB2bWFsbG9jKCgxIDw8IG9yZGVyKSAq IFBBR0VfU0laRSk7Cj4KPiAtIMKgIMKgIMKgIHJldHVybiAoY2hhciAqKSBfX2dldF9mcmVlX3Bh Z2VzKGdmcF9mbGFncywgb3JkZXIpOwo+ICsgwqAgwqAgwqAgaWYgKGJ1ZmZlcikKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHJldHVybiBidWZmZXI7Cj4gKwo+ICsgwqAgwqAgwqAgLyoKPiArIMKg IMKgIMKgIMKgKiB2bWFsbG9jIGZhaWxlZCwgbGV0cyBkaWcgaW50byBzd2FwIGhlcmUKPiArIMKg IMKgIMKgIMKgKi8KPiArIMKgIMKgIMKgICpmbGFncyA9IDA7Cj4gKyDCoCDCoCDCoCBnZnBfZmxh Z3MgJj0gfl9fR0ZQX05PUkVUUlk7Cj4gKyDCoCDCoCDCoCBidWZmZXIgPSAoY2hhciAqKV9fZ2V0 X2ZyZWVfcGFnZXMoZ2ZwX2ZsYWdzLCBvcmRlcik7Cj4gKyDCoCDCoCDCoCBpZiAoYnVmZmVyKQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIGJ1ZmZlcjsKPiArCj4gKyDCoCDCoCDCoCAv Kgo+ICsgwqAgwqAgwqAgwqAqIGNvbXBsZXRlIGFuZCB1dHRlciBmYWlsdXJlCj4gKyDCoCDCoCDC oCDCoCovCj4gKyDCoCDCoCDCoCByZXR1cm4gTlVMTDsKPiDCoH0KPgo+IC1zdGF0aWMgY2hhciAq KmFsbG9jX3BnX3ZlYyhzdHJ1Y3QgdHBhY2tldF9yZXEgKnJlcSwgaW50IG9yZGVyKQo+ICtzdGF0 aWMgc3RydWN0IHBndiAqYWxsb2NfcGdfdmVjKHN0cnVjdCB0cGFja2V0X3JlcSAqcmVxLCBpbnQg b3JkZXIpCj4gwqB7Cj4gwqAgwqAgwqAgwqB1bnNpZ25lZCBpbnQgYmxvY2tfbnIgPSByZXEtPnRw X2Jsb2NrX25yOwo+IC0gwqAgwqAgwqAgY2hhciAqKnBnX3ZlYzsKPiArIMKgIMKgIMKgIHN0cnVj dCBwZ3YgKnBnX3ZlYzsKPiDCoCDCoCDCoCDCoGludCBpOwo+Cj4gLSDCoCDCoCDCoCBwZ192ZWMg PSBremFsbG9jKGJsb2NrX25yICogc2l6ZW9mKGNoYXIgKiksIEdGUF9LRVJORUwpOwo+ICsgwqAg wqAgwqAgcGdfdmVjID0ga2NhbGxvYyhibG9ja19uciwgc2l6ZW9mKHN0cnVjdCBwZ3YpLCBHRlBf S0VSTkVMKTsKPiDCoCDCoCDCoCDCoGlmICh1bmxpa2VseSghcGdfdmVjKSkKPiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGdvdG8gb3V0Owo+Cj4gwqAgwqAgwqAgwqBmb3IgKGkgPSAwOyBpIDwgYmxv Y2tfbnI7IGkrKykgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGdfdmVjW2ldID0gYWxsb2Nf b25lX3BnX3ZlY19wYWdlKG9yZGVyKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh1bmxp a2VseSghcGdfdmVjW2ldKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBnX3ZlY1tpXS5idWZm ZXIgPSBhbGxvY19vbmVfcGdfdmVjX3BhZ2Uob3JkZXIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCZwZ192ZWNbaV0uZmxhZ3MpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHVu bGlrZWx5KCFwZ192ZWNbaV0uYnVmZmVyKSkKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoGdvdG8gb3V0X2ZyZWVfcGd2ZWM7Cj4gwqAgwqAgwqAgwqB9Cj4KPiBAQCAtMjM2MSw2 ICsyNDA1LDcgQEAgb3V0Ogo+Cj4gwqBvdXRfZnJlZV9wZ3ZlYzoKPiDCoCDCoCDCoCDCoGZyZWVf cGdfdmVjKHBnX3ZlYywgb3JkZXIsIGJsb2NrX25yKTsKPiArIMKgIMKgIMKgIGtmcmVlKHBnX3Zl Yyk7Cj4gwqAgwqAgwqAgwqBwZ192ZWMgPSBOVUxMOwo+IMKgIMKgIMKgIMKgZ290byBvdXQ7Cj4g wqB9Cj4gQEAgLTIzNjgsNyArMjQxMyw3IEBAIG91dF9mcmVlX3BndmVjOgo+IMKgc3RhdGljIGlu dCBwYWNrZXRfc2V0X3Jpbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdHBhY2tldF9yZXEgKnJl cSwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCBjbG9zaW5nLCBpbnQgdHhfcmluZykKPiDC oHsKPiAtIMKgIMKgIMKgIGNoYXIgKipwZ192ZWMgPSBOVUxMOwo+ICsgwqAgwqAgwqAgc3RydWN0 IHBndiAqcGdfdmVjID0gTlVMTDsKPiDCoCDCoCDCoCDCoHN0cnVjdCBwYWNrZXRfc29jayAqcG8g PSBwa3Rfc2soc2spOwo+IMKgIMKgIMKgIMKgaW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7Cj4g wqAgwqAgwqAgwqBzdHJ1Y3QgcGFja2V0X3JpbmdfYnVmZmVyICpyYjsKPiBAQCAtMjUzMCwxNSAr MjU3NSwyMiBAQCBzdGF0aWMgaW50IHBhY2tldF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1 Y3Qgc29ja2V0ICpzb2NrLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY29u dGludWU7Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGZvciAoaSA9IDA7IGkgPCByYi0+cGdf dmVjX2xlbjsgaSsrKSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdHJ1 Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZShyYi0+cGdfdmVjW2ldKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBwYWdlICpwYWdlOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdm9pZCAqa2FkZHIgPSByYi0+cGdfdmVjW2ldLmJ1ZmZl cjsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGludCBwZ19udW07Cj4KPiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGZvciAocGdfbnVtID0gMDsgcGdfbnVt IDwgcmItPnBnX3ZlY19wYWdlczsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBnX251bSsrLCBwYWdlKyspIHsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBnX251bSsr KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAo cmItPnBnX3ZlY1tpXS5mbGFncyAmIFBHVl9GUk9NX1ZNQUxMT0MpCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwYWdlID0gdm1hbGxv Y190b19wYWdlKGthZGRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGVsc2UKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpOwo+ICsKPiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGVyciA9IHZtX2luc2Vy dF9wYWdlKHZtYSwgc3RhcnQsIHBhZ2UpOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgaWYgKHVubGlrZWx5KGVycikpCj4gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnb3RvIG91dDsKPiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0YXJ0ICs9IFBBR0Vf U0laRTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGth ZGRyICs9IFBBR0VfU0laRTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0K PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPiDCoCDCoCDCoCDCoH0KPiAtLQo+IDEuNy4yLjMK Pgo+CkFja2VkLWJ5OiBNYWNpZWogxbtlbmN6eWtvd3NraSA8emVuY3p5a293c2tpQGdtYWlsLmNv bT4KUmVwb3J0ZWQtYnk6IE1hY2llaiDFu2VuY3p5a293c2tpIDx6ZW5jenlrb3dza2lAZ21haWwu Y29tPgoKTmljZSB0byBzZWUgdGhpcy4KCi0tIE1hY2llago=