From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail202.messagelabs.com (mail202.messagelabs.com [216.82.254.227]) by kanga.kvack.org (Postfix) with SMTP id 4F6546B003D for ; Sat, 14 Mar 2009 00:46:44 -0400 (EDT) From: Nick Piggin Subject: Re: [aarcange@redhat.com: [PATCH] fork vs gup(-fast) fix] Date: Sat, 14 Mar 2009 15:46:30 +1100 References: <20090311170611.GA2079@elte.hu> <20090312180648.GV27823@random.random> <200903140309.39777.nickpiggin@yahoo.com.au> In-Reply-To: <200903140309.39777.nickpiggin@yahoo.com.au> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: base64 Content-Disposition: inline Message-Id: <200903141546.31139.nickpiggin@yahoo.com.au> Sender: owner-linux-mm@kvack.org To: Andrea Arcangeli Cc: Linus Torvalds , Ingo Molnar , Nick Piggin , Hugh Dickins , KOSAKI Motohiro , KAMEZAWA Hiroyuki , linux-mm@kvack.org List-ID: T24gU2F0dXJkYXkgMTQgTWFyY2ggMjAwOSAwMzowOTozOSBOaWNrIFBpZ2dpbiB3cm90ZToKPiBP biBGcmlkYXkgMTMgTWFyY2ggMjAwOSAwNTowNjo0OCBBbmRyZWEgQXJjYW5nZWxpIHdyb3RlOgoK PiA+IFRoZSB0aGluZyBpcyBxdWl0ZSBzaW1wbGUsIGlmIGFuIGFwcCBoYXMgYSAxRyBvZiB2bWEg bG9hZGVkLCB5b3UnbGwKPiA+IGFsbG9jYXRlIDFHIG9mIHJhbSBmb3Igbm8gZ29vZCByZWFzb24u IEl0IGNhbiBldmVuIE9PTSwgaXQncyBub3QganVzdAo+ID4gYSBwZXJmb3JtYW5jZSBpc3N1ZS4g V2hpbGUgZG9pbmcgaXQgcGVyLXBhZ2UgbGlrZSBJIGRvLCB3b24ndCBiZQo+ID4gbm90aWNlYWJs ZSwgYXMgdGhlIGluLWZsaWdodCBJL08gd2lsbCBiZSBtaW5vci4KPgo+IFllcyBJIGFncmVlIG5v dyBpdCBpcyBhIHNpbGx5IHdheSB0byBkbyBpdC4KCkhlcmUgaXMgYW4gdXBkYXRlZCBwYXRjaCB0 aGF0IGp1c3QgZG9lcyBpdCBvbiBhIHBlci1wYWdlIGJhc2lzLgpBY3R1YWxseSBpdCBpcyBzdGls bCBhIGJpdCBzbG9wcHkgYmVjYXVzZSBJIGp1c3QgcmV1c2VkIHNvbWUgY29kZQpmcm9tIG15IGxh c3QgcGF0Y2ggZm9yIHRoZSBkZWNvdyBsb2dpYy4uLiBwb3NzaWJseSBJIGNhbiBqdXN0IHVzZQp0 aGUgc2FtZSBwcmVjb3cgY29kZSB0aGF0IHlvdSBkbyBmb3Igc21hbGwgYW5kIGh1Z2UgcGFnZXMg KGFsdGhvdWdoCkxpbnVzIGRpZG4ndCBsaWtlIGl0IHNvIG11Y2guLi4gaXQgaXMgdmVyeSBoYXJk IHRvIGRvIG5pY2VseSByaWdodApkb3duIHRoZXJlIGluIHRoZSBjYWxsIGNoYWluIDooKQoKQW55 d2F5LCBpZ25vcmluZyB0aGUgZGVjb3cgaW1wbGVtZW50YXRpb24gKHRoYXQncyBub3QgcmVhbGx5 IHRoZQppbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBwYXRjaCksIEkgdGhpbmsgdGhpcyBpcyBsb29r aW5nIHByZXR0eSBnb29kCm5vdy4KLS0tCkluZGV4OiBsaW51eC0yLjYvaW5jbHVkZS9saW51eC9t bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi5vcmlnL2luY2x1ZGUvbGludXgvbW0uaAkyMDA5 LTAzLTE0IDAyOjQ4OjA2LjAwMDAwMDAwMCArMTEwMAorKysgbGludXgtMi42L2luY2x1ZGUvbGlu dXgvbW0uaAkyMDA5LTAzLTE0IDE1OjEyOjEzLjAwMDAwMDAwMCArMTEwMApAQCAtNzg5LDcgKzc4 OSw3IEBAIGludCB3YWxrX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCAKIHZvaWQgZnJl ZV9wZ2RfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdW5zaWduZWQgbG9uZyBhZGRyLAog CQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBmbG9vciwgdW5zaWduZWQgbG9uZyBj ZWlsaW5nKTsKIGludCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1 Y3QgbW1fc3RydWN0ICpzcmMsCi0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CisJCXN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEp Owogdm9pZCB1bm1hcF9tYXBwaW5nX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5n LAogCQlsb2ZmX3QgY29uc3QgaG9sZWJlZ2luLCBsb2ZmX3QgY29uc3QgaG9sZWxlbiwgaW50IGV2 ZW5fY293cyk7CiBpbnQgZm9sbG93X3BoeXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVu c2lnbmVkIGxvbmcgYWRkcmVzcywKSW5kZXg6IGxpbnV4LTIuNi9tbS9tZW1vcnkuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBsaW51eC0yLjYub3JpZy9tbS9tZW1vcnkuYwkyMDA5LTAzLTE0IDAyOjQ4OjA2LjAw MDAwMDAwMCArMTEwMAorKysgbGludXgtMi42L21tL21lbW9yeS5jCTIwMDktMDMtMTQgMTU6NDA6 MzcuMDAwMDAwMDAwICsxMTAwCkBAIC01MzMsMTIgKzUzMywyNDggQEAgb3V0OgogfQogCiAvKgor ICogRG8gcHRlX21rd3JpdGUsIGJ1dCBvbmx5IGlmIHRoZSB2bWEgc2F5cyBWTV9XUklURS4gIFdl IGRvIHRoaXMgd2hlbgorICogc2VydmljaW5nIGZhdWx0cyBmb3Igd3JpdGUgYWNjZXNzLiAgSW4g dGhlIG5vcm1hbCBjYXNlLCBkbyBhbHdheXMgd2FudAorICogcHRlX21rd3JpdGUuICBCdXQgZ2V0 X3VzZXJfcGFnZXMgY2FuIGNhdXNlIHdyaXRlIGZhdWx0cyBmb3IgbWFwcGluZ3MKKyAqIHRoYXQg ZG8gbm90IGhhdmUgd3JpdGluZyBlbmFibGVkLCB3aGVuIHVzZWQgYnkgYWNjZXNzX3Byb2Nlc3Nf dm0uCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmIChsaWtlbHkodm1hLT52bV9mbGFncyAm IFZNX1dSSVRFKSkKKwkJcHRlID0gcHRlX21rd3JpdGUocHRlKTsKKwlyZXR1cm4gcHRlOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgY293X3VzZXJfcGFnZShzdHJ1Y3QgcGFnZSAqZHN0LCBzdHJ1 Y3QgcGFnZSAqc3JjLCB1bnNpZ25lZCBsb25nIHZhLCBzdHJ1Y3QgCnZtX2FyZWFfc3RydWN0ICp2 bWEpCit7CisJLyoKKwkgKiBJZiB0aGUgc291cmNlIHBhZ2Ugd2FzIGEgUEZOIG1hcHBpbmcsIHdl IGRvbid0IGhhdmUKKwkgKiBhICJzdHJ1Y3QgcGFnZSIgZm9yIGl0LiBXZSBkbyBhIGJlc3QtZWZm b3J0IGNvcHkgYnkKKwkgKiBqdXN0IGNvcHlpbmcgZnJvbSB0aGUgb3JpZ2luYWwgdXNlciBhZGRy ZXNzLiBJZiB0aGF0CisJICogZmFpbHMsIHdlIGp1c3QgemVyby1maWxsIGl0LiBMaXZlIHdpdGgg aXQuCisJICovCisJaWYgKHVubGlrZWx5KCFzcmMpKSB7CisJCXZvaWQgKmthZGRyID0ga21hcF9h dG9taWMoZHN0LCBLTV9VU0VSMCk7CisJCXZvaWQgX191c2VyICp1YWRkciA9ICh2b2lkIF9fdXNl ciAqKSh2YSAmIFBBR0VfTUFTSyk7CisKKwkJLyoKKwkJICogVGhpcyByZWFsbHkgc2hvdWxkbid0 IGZhaWwsIGJlY2F1c2UgdGhlIHBhZ2UgaXMgdGhlcmUKKwkJICogaW4gdGhlIHBhZ2UgdGFibGVz LiBCdXQgaXQgbWlnaHQganVzdCBiZSB1bnJlYWRhYmxlLAorCQkgKiBpbiB3aGljaCBjYXNlIHdl IGp1c3QgZ2l2ZSB1cCBhbmQgZmlsbCB0aGUgcmVzdWx0IHdpdGgKKwkJICogemVyb2VzLgorCQkg Ki8KKwkJaWYgKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoa2FkZHIsIHVhZGRyLCBQQUdFX1NJ WkUpKQorCQkJbWVtc2V0KGthZGRyLCAwLCBQQUdFX1NJWkUpOworCQlrdW5tYXBfYXRvbWljKGth ZGRyLCBLTV9VU0VSMCk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKGRzdCk7CisJfSBlbHNlCisJCWNv cHlfdXNlcl9oaWdocGFnZShkc3QsIHNyYywgdmEsIHZtYSk7Cit9CisKK3N0YXRpYyBpbnQgZGVj b3dfb25lX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZXAsIHBtZF90ICpwbWQs CisJCQlzcGlubG9ja190ICpwdGwsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5z aWduZWQgbG9uZyBhZGRyZXNzKQoreworCXB0ZV90IHB0ZSA9ICpwdGVwOworCXN0cnVjdCBwYWdl ICpwYWdlLCAqbmV3X3BhZ2U7CisKKwkvKiBwdGUgY29udGFpbnMgcG9zaXRpb24gaW4gc3dhcCBv ciBmaWxlLCBzbyBkb24ndCBkbyBhbnl0aGluZyAqLworCWlmICh1bmxpa2VseSghcHRlX3ByZXNl bnQocHRlKSkpCisJCXJldHVybiAwOworCS8qIHB0ZSBpcyB3cml0YWJsZSwgY2FuJ3QgYmUgQ09X ICovCisJaWYgKHB0ZV93cml0ZShwdGUpKQorCQlyZXR1cm4gMDsKKworCXBhZ2UgPSB2bV9ub3Jt YWxfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZSk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gMDsKKwor CWlmICghUGFnZUFub24ocGFnZSkpCisJCXJldHVybiAwOworCisJV0FSTl9PTighUGFnZURvbnRD T1cocGFnZSkpOworCisJcGFnZV9jYWNoZV9nZXQocGFnZSk7CisKKwlwdGVfdW5tYXBfdW5sb2Nr KHB0ZSwgcHRsKTsKKworCWlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKQorCQln b3RvIG9vbTsKKwlWTV9CVUdfT04ocGFnZSA9PSBaRVJPX1BBR0UoMCkpOworCW5ld19wYWdlID0g YWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsIHZtYSwgYWRkcmVzcyk7CisJaWYg KCFuZXdfcGFnZSkKKwkJZ290byBvb207CisJLyoKKwkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNr LCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKKwkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2Uu CisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKKwkJbG9ja19wYWdlKHBh Z2UpOwkvKiBmb3IgTFJVIG1hbmlwdWxhdGlvbiAqLworCQljbGVhcl9wYWdlX21sb2NrKHBhZ2Up OworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwl9CisJY293X3VzZXJfcGFnZShuZXdfcGFnZSwgcGFn ZSwgYWRkcmVzcywgdm1hKTsKKwlfX1NldFBhZ2VVcHRvZGF0ZShuZXdfcGFnZSk7CisKKwlpZiAo bWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShuZXdfcGFnZSwgbW0sIEdGUF9LRVJORUwpKQorCQln b3RvIG9vbV9mcmVlX25ldzsKKworCS8qCisJICogUmUtY2hlY2sgdGhlIHB0ZSAtIHdlIGRyb3Bw ZWQgdGhlIGxvY2sKKwkgKi8KKwlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBh ZGRyZXNzLCAmcHRsKTsKKwlCVUdfT04oIXB0ZV9zYW1lKCpwdGVwLCBwdGUpKTsKKwl7CisJCXB0 ZV90IGVudHJ5OworCisJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyZXNzLCBwdGVfcGZuKHB0 ZSkpOworCQllbnRyeSA9IG1rX3B0ZShuZXdfcGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpOworCQll bnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOworCQkvKgorCQkg KiBDbGVhciB0aGUgcHRlIGVudHJ5IGFuZCBmbHVzaCBpdCBmaXJzdCwgYmVmb3JlIHVwZGF0aW5n IHRoZQorCQkgKiBwdGUgd2l0aCB0aGUgbmV3IGVudHJ5LiBUaGlzIHdpbGwgYXZvaWQgYSByYWNl IGNvbmRpdGlvbgorCQkgKiBzZWVuIGluIHRoZSBwcmVzZW5jZSBvZiBvbmUgdGhyZWFkIGRvaW5n IFNNQyBhbmQgYW5vdGhlcgorCQkgKiB0aHJlYWQgZG9pbmcgQ09XLgorCQkgKi8KKwkJcHRlcF9j bGVhcl9mbHVzaF9ub3RpZnkodm1hLCBhZGRyZXNzLCBwdGVwKTsKKwkJcGFnZV9hZGRfbmV3X2Fu b25fcm1hcChuZXdfcGFnZSwgdm1hLCBhZGRyZXNzKTsKKwkJc2V0X3B0ZV9hdChtbSwgYWRkcmVz cywgcHRlcCwgZW50cnkpOworCisJCS8qIFNlZSBjb21tZW50IGluIGRvX3dwX3BhZ2UgKi8KKwkJ cGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKKwl9CisKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7 CisKKwlyZXR1cm4gMDsKKworb29tX2ZyZWVfbmV3OgorCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdf cGFnZSk7Citvb206CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiAtRU5PTUVN OworfQorCitzdGF0aWMgaW50IGRlY293X3B0ZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwK KwkJCXBtZF90ICpwbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWduZWQg bG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlwdGVfdCAqcHRlOworCXNwaW5sb2Nr X3QgKnB0bDsKKwlpbnQgcHJvZ3Jlc3MgPSAwOworCWludCByZXQgPSAwOworCithZ2FpbjoKKwlw dGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZwdGwpOworLy8JYXJjaF9l bnRlcl9sYXp5X21tdV9tb2RlKCk7CisKKwlkbyB7CisJCS8qCisJCSAqIFdlIGFyZSBob2xkaW5n IHR3byBsb2NrcyBhdCB0aGlzIHBvaW50IC0gZWl0aGVyIG9mIHRoZW0KKwkJICogY291bGQgZ2Vu ZXJhdGUgbGF0ZW5jaWVzIGluIGFub3RoZXIgdGFzayBvbiBhbm90aGVyIENQVS4KKwkJICovCisJ CWlmIChwcm9ncmVzcyA+PSAzMikgeworCQkJcHJvZ3Jlc3MgPSAwOworCQkJaWYgKG5lZWRfcmVz Y2hlZCgpIHx8IHNwaW5fbmVlZGJyZWFrKHB0bCkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHB0 ZV9ub25lKCpwdGUpKSB7CisJCQlwcm9ncmVzcysrOworCQkJY29udGludWU7CisJCX0KKwkJcmV0 ID0gZGVjb3dfb25lX3B0ZShtbSwgcHRlLCBwbWQsIHB0bCwgdm1hLCBhZGRyKTsKKwkJaWYgKHJl dCkgeworCQkJaWYgKHJldCA9PSAtRUFHQUlOKSB7IC8qIHJldHJ5ICovCisJCQkJcmV0ID0gMDsK KwkJCQlicmVhazsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJCXByb2dyZXNzICs9IDg7CisJ fSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisKKy8vCWFy Y2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOworCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRs KTsKKwljb25kX3Jlc2NoZWQoKTsKKwlpZiAoYWRkciAhPSBlbmQpCisJCWdvdG8gYWdhaW47Citv dXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWNvd19wbWRfcmFuZ2Uoc3RydWN0 IG1tX3N0cnVjdCAqbW0sCisJCQlwdWRfdCAqcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcG1kX3Qg KnBtZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRk cik7CisJZG8geworCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwbWRf bm9uZV9vcl9jbGVhcl9iYWQocG1kKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVjb3dfcHRlX3Jh bmdlKG1tLCBwbWQsIHZtYSwgYWRkciwgbmV4dCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IHdo aWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBkZWNvd19wdWRfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQlwZ2Rf dCAqcGdkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCXVuc2lnbmVkIGxvbmcgYWRk ciwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcHVkX3QgKnB1ZDsKKwl1bnNpZ25lZCBsb25nIG5l eHQ7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJZG8geworCQluZXh0ID0gcHVk X2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkK KwkJCWNvbnRpbnVlOworCQlpZiAoZGVjb3dfcG1kX3JhbmdlKG1tLCBwdWQsIHZtYSwgYWRkciwg bmV4dCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IHdoaWxlIChwdWQrKywgYWRkciA9IG5leHQs IGFkZHIgIT0gZW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBkZWNv d19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSwgdW5zaWduZWQgCmxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJcGdkX3Qg KnBnZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJaW50IHJldDsKKworCUJVR19PTighaXNfY293 X21hcHBpbmcodm1hLT52bV9mbGFncykpOworCisvLwlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZt YSkpCisvLwkJcmV0dXJuIGRlY293X2h1Z2V0bGJfcGFnZV9yYW5nZShtbSwgdm1hKTsKKworLy8J bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sIGFkZHIsIGVuZCk7CisKKwly ZXQgPSAwOworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOworCWRvIHsKKwkJbmV4dCA9IHBn ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkp CisJCQljb250aW51ZTsKKwkJaWYgKHVubGlrZWx5KGRlY293X3B1ZF9yYW5nZShtbSwgcGdkLCB2 bWEsIGFkZHIsIG5leHQpKSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJ fSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CisKKy8vCW1tdV9ub3Rp Zmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChtbSwgdm1hLT52bV9zdGFydCwgZW5kKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qCiAgKiBjb3B5IG9uZSB2bV9hcmVhIGZyb20gb25lIHRhc2sgdG8g dGhlIG90aGVyLiBBc3N1bWVzIHRoZSBwYWdlIHRhYmxlcwogICogYWxyZWFkeSBwcmVzZW50IGlu IHRoZSBuZXcgdGFzayB0byBiZSBjbGVhcmVkIGluIHRoZSB3aG9sZSByYW5nZQogICogY292ZXJl ZCBieSB0aGlzIHZtYS4KICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUg aW50CiBjb3B5X29uZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3Ry dWN0ICpzcmNfbW0sCiAJCXB0ZV90ICpkc3RfcHRlLCBwdGVfdCAqc3JjX3B0ZSwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgaW50ICpyc3MpCkBAIC01 NDYsNiArNzgyLDcgQEAgY29weV9vbmVfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgcwog CXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwogCXB0ZV90IHB0ZSA9ICpz cmNfcHRlOwogCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQgPSAwOwogCiAJLyogcHRlIGNv bnRhaW5zIHBvc2l0aW9uIGluIHN3YXAgb3IgZmlsZSwgc28gY29weS4gKi8KIAlpZiAodW5saWtl bHkoIXB0ZV9wcmVzZW50KHB0ZSkpKSB7CkBAIC01OTcsMjAgKzgzNCwyNiBAQCBjb3B5X29uZV9w dGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzCiAJCWdldF9wYWdlKHBhZ2UpOwogCQlwYWdl X2R1cF9ybWFwKHBhZ2UsIHZtYSwgYWRkcik7CiAJCXJzc1shIVBhZ2VBbm9uKHBhZ2UpXSsrOwor CQlpZiAodW5saWtlbHkoUGFnZURvbnRDT1cocGFnZSkpKQorCQkJcmV0ID0gLUVBR0FJTjsKIAl9 CiAKIG91dF9zZXRfcHRlOgogCXNldF9wdGVfYXQoZHN0X21tLCBhZGRyLCBkc3RfcHRlLCBwdGUp OworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjb3B5X3B0ZV9yYW5nZShzdHJ1Y3Qg bW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSwKLQkJcG1kX3QgKmRz dF9wbWQsIHBtZF90ICpzcmNfcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJcG1k X3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRz dF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjX3ZtYSwKIAkJdW5zaWduZWQgbG9uZyBh ZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlwdGVfdCAqc3JjX3B0ZSwgKmRzdF9wdGU7CiAJ c3BpbmxvY2tfdCAqc3JjX3B0bCwgKmRzdF9wdGw7CiAJaW50IHByb2dyZXNzID0gMDsKIAlpbnQg cnNzWzJdOworCWludCByZXQgPSAwOwogCiBhZ2FpbjoKIAlyc3NbMV0gPSByc3NbMF0gPSAwOwpA QCAtNjM3LDcgKzg4MCwxMCBAQCBhZ2FpbjoKIAkJCXByb2dyZXNzKys7CiAJCQljb250aW51ZTsK IAkJfQotCQljb3B5X29uZV9wdGUoZHN0X21tLCBzcmNfbW0sIGRzdF9wdGUsIHNyY19wdGUsIHZt YSwgYWRkciwgcnNzKTsKKwkJcmV0ID0gY29weV9vbmVfcHRlKGRzdF9tbSwgc3JjX21tLCBkc3Rf cHRlLCBzcmNfcHRlLAorCQkJCQkJc3JjX3ZtYSwgYWRkciwgcnNzKTsKKwkJaWYgKHVubGlrZWx5 KHJldCkpCisJCQlnb3RvIGRlY293OwogCQlwcm9ncmVzcyArPSA4OwogCX0gd2hpbGUgKGRzdF9w dGUrKywgc3JjX3B0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCkBAIC02 NTAsMTAgKzg5NiwyNSBAQCBhZ2FpbjoKIAlpZiAoYWRkciAhPSBlbmQpCiAJCWdvdG8gYWdhaW47 CiAJcmV0dXJuIDA7CisKK2RlY293OgorCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOworCXNw aW5fdW5sb2NrKHNyY19wdGwpOworCXB0ZV91bm1hcF9uZXN0ZWQoc3JjX3B0ZSk7CisJYWRkX21t X3Jzcyhkc3RfbW0sIHJzc1swXSwgcnNzWzFdKTsKKwlwdGVfdW5tYXBfdW5sb2NrKGRzdF9wdGUs IGRzdF9wdGwpOworCWNvbmRfcmVzY2hlZCgpOworCWlmIChkZWNvd19wYWdlX3JhbmdlKGRzdF9t bSwgZHN0X3ZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSkpCisJCXJldHVybiAtRU5PTUVNOwor CWFkZHIgKz0gUEFHRV9TSVpFOworCWlmIChhZGRyICE9IGVuZCkKKwkJZ290byBhZ2FpbjsKKwly ZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY29weV9wbWRfcmFuZ2Uoc3RydWN0IG1t X3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sCi0JCXB1ZF90ICpkc3Rf cHVkLCBwdWRfdCAqc3JjX3B1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCXB1ZF90 ICpkc3RfcHVkLCBwdWRfdCAqc3JjX3B1ZCwKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rf dm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnNyY192bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRk ciwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJcG1kX3QgKnNyY19wbWQsICpkc3RfcG1kOwpAQCAt NjY4LDE0ICs5MjksMTUgQEAgc3RhdGljIGlubGluZSBpbnQgY29weV9wbWRfcmFuZ2Uoc3RydWN0 IAogCQlpZiAocG1kX25vbmVfb3JfY2xlYXJfYmFkKHNyY19wbWQpKQogCQkJY29udGludWU7CiAJ CWlmIChjb3B5X3B0ZV9yYW5nZShkc3RfbW0sIHNyY19tbSwgZHN0X3BtZCwgc3JjX3BtZCwKLQkJ CQkJCXZtYSwgYWRkciwgbmV4dCkpCisJCQkJCQlkc3Rfdm1hLCBzcmNfdm1hLCBhZGRyLCBuZXh0 KSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gd2hpbGUgKGRzdF9wbWQrKywgc3JjX3BtZCsrLCBh ZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5l IGludCBjb3B5X3B1ZF9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9z dHJ1Y3QgKnNyY19tbSwKLQkJcGdkX3QgKmRzdF9wZ2QsIHBnZF90ICpzcmNfcGdkLCBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJcGdkX3QgKmRzdF9wZ2QsIHBnZF90ICpzcmNfcGdkLAor CQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq c3JjX3ZtYSwKIAkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlw dWRfdCAqc3JjX3B1ZCwgKmRzdF9wdWQ7CkBAIC02OTAsMTkgKzk1MiwxOSBAQCBzdGF0aWMgaW5s aW5lIGludCBjb3B5X3B1ZF9yYW5nZShzdHJ1Y3QgCiAJCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9i YWQoc3JjX3B1ZCkpCiAJCQljb250aW51ZTsKIAkJaWYgKGNvcHlfcG1kX3JhbmdlKGRzdF9tbSwg c3JjX21tLCBkc3RfcHVkLCBzcmNfcHVkLAotCQkJCQkJdm1hLCBhZGRyLCBuZXh0KSkKKwkJCQkJ CWRzdF92bWEsIHNyY192bWEsIGFkZHIsIG5leHQpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfSB3 aGlsZSAoZHN0X3B1ZCsrLCBzcmNfcHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAJ cmV0dXJuIDA7CiB9CiAKIGludCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0 X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sCi0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqc3JjX3ZtYSkKIHsKIAlwZ2RfdCAqc3JjX3BnZCwgKmRzdF9wZ2Q7CiAJdW5zaWduZWQg bG9uZyBuZXh0OwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWdu ZWQgbG9uZyBlbmQgPSB2bWEtPnZtX2VuZDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBzcmNfdm1h LT52bV9zdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IHNyY192bWEtPnZtX2VuZDsKIAlpbnQg cmV0OwogCiAJLyoKQEAgLTcxMSwyMCArOTczLDIwIEBAIGludCBjb3B5X3BhZ2VfcmFuZ2Uoc3Ry dWN0IG1tX3N0cnVjdCAqZHMKIAkgKiByZWFkb25seSBtYXBwaW5ncy4gVGhlIHRyYWRlb2ZmIGlz IHRoYXQgY29weV9wYWdlX3JhbmdlIGlzIG1vcmUKIAkgKiBlZmZpY2llbnQgdGhhbiBmYXVsdGlu Zy4KIAkgKi8KLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX0hVR0VUTEJ8Vk1fTk9OTElORUFS fFZNX1BGTk1BUHxWTV9JTlNFUlRQQUdFKSkpIHsKLQkJaWYgKCF2bWEtPmFub25fdm1hKQorCWlm ICghKHNyY192bWEtPnZtX2ZsYWdzICYgKFZNX0hVR0VUTEJ8Vk1fTk9OTElORUFSfFZNX1BGTk1B UHxWTV9JTlNFUlRQQUdFKSkpIHsKKwkJaWYgKCFzcmNfdm1hLT5hbm9uX3ZtYSkKIAkJCXJldHVy biAwOwogCX0KIAotCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKLQkJcmV0dXJuIGNvcHlf aHVnZXRsYl9wYWdlX3JhbmdlKGRzdF9tbSwgc3JjX21tLCB2bWEpOworCWlmIChpc192bV9odWdl dGxiX3BhZ2Uoc3JjX3ZtYSkpCisJCXJldHVybiBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShkc3Rf bW0sIHNyY19tbSwgc3JjX3ZtYSk7CiAKLQlpZiAodW5saWtlbHkoaXNfcGZuX21hcHBpbmcodm1h KSkpIHsKKwlpZiAodW5saWtlbHkoaXNfcGZuX21hcHBpbmcoc3JjX3ZtYSkpKSB7CiAJCS8qCiAJ CSAqIFdlIGRvIG5vdCBmcmVlIG9uIGVycm9yIGNhc2VzIGJlbG93IGFzIHJlbW92ZV92bWEKIAkJ ICogZ2V0cyBjYWxsZWQgb24gZXJyb3IgZnJvbSBoaWdoZXIgbGV2ZWwgcm91dGluZQogCQkgKi8K LQkJcmV0ID0gdHJhY2tfcGZuX3ZtYV9jb3B5KHZtYSk7CisJCXJldCA9IHRyYWNrX3Bmbl92bWFf Y29weShzcmNfdm1hKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNzM1LDcg Kzk5Nyw3IEBAIGludCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHMKIAkgKiBw YXJlbnQgbW0uIEFuZCBhIHBlcm1pc3Npb24gZG93bmdyYWRlIHdpbGwgb25seSBoYXBwZW4gaWYK IAkgKiBpc19jb3dfbWFwcGluZygpIHJldHVybnMgdHJ1ZS4KIAkgKi8KLQlpZiAoaXNfY293X21h cHBpbmcodm1hLT52bV9mbGFncykpCisJaWYgKGlzX2Nvd19tYXBwaW5nKHNyY192bWEtPnZtX2Zs YWdzKSkKIAkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3JjX21tLCBhZGRy LCBlbmQpOwogCiAJcmV0ID0gMDsKQEAgLTc0NiwxNSArMTAwOCwxNiBAQCBpbnQgY29weV9wYWdl X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzCiAJCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQo c3JjX3BnZCkpCiAJCQljb250aW51ZTsKIAkJaWYgKHVubGlrZWx5KGNvcHlfcHVkX3JhbmdlKGRz dF9tbSwgc3JjX21tLCBkc3RfcGdkLCBzcmNfcGdkLAotCQkJCQkgICAgdm1hLCBhZGRyLCBuZXh0 KSkpIHsKKwkJCQkJICAgIGRzdF92bWEsIHNyY192bWEsIGFkZHIsIG5leHQpKSkgewogCQkJcmV0 ID0gLUVOT01FTTsKIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZSAoZHN0X3BnZCsrLCBzcmNfcGdk KyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CiAKLQlpZiAoaXNfY293X21hcHBpbmcodm1h LT52bV9mbGFncykpCisJaWYgKGlzX2Nvd19tYXBwaW5nKHNyY192bWEtPnZtX2ZsYWdzKSkKIAkJ bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHNyY19tbSwKLQkJCQkJCSAgdm1hLT52 bV9zdGFydCwgZW5kKTsKKwkJCQkJCSAgc3JjX3ZtYS0+dm1fc3RhcnQsIGVuZCk7CisKIAlyZXR1 cm4gcmV0OwogfQogCkBAIC0xMjAwLDcgKzE0NjMsNiBAQCBzdGF0aWMgaW5saW5lIGludCB1c2Vf emVyb19wYWdlKHN0cnVjdCB2CiB9CiAKIAotCiBpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCSAgICAgdW5zaWduZWQg bG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZsYWdzLAogCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQpAQCAtMTIyNSw2ICsxNDg3LDcgQEAgaW50IF9f Z2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0IAogCWRvIHsKIAkJc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWE7CiAJCXVuc2lnbmVkIGludCBmb2xsX2ZsYWdzOworCQlpbnQgZGVjb3c7 CiAKIAkJdm1hID0gZmluZF9leHRlbmRfdm1hKG1tLCBzdGFydCk7CiAJCWlmICghdm1hICYmIGlu X2dhdGVfYXJlYSh0c2ssIHN0YXJ0KSkgewpAQCAtMTI3OSwxMiArMTU0MiwxNSBAQCBpbnQgX19n ZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgCiAJCQljb250aW51ZTsKIAkJfQogCisJ CWRlY293ID0gKCEoZmxhZ3MgJiBHVVBfRkxBR1NfU1RBQ0spICYmCisJCQkJCWlzX2Nvd19tYXBw aW5nKHZtYS0+dm1fZmxhZ3MpKTsKIAkJZm9sbF9mbGFncyA9IEZPTExfVE9VQ0g7CiAJCWlmIChw YWdlcykKIAkJCWZvbGxfZmxhZ3MgfD0gRk9MTF9HRVQ7CiAJCWlmICghd3JpdGUgJiYgdXNlX3pl cm9fcGFnZSh2bWEpKQogCQkJZm9sbF9mbGFncyB8PSBGT0xMX0FOT047CiAKKwogCQlkbyB7CiAJ CQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTI5OSw3ICsxNTY1LDcgQEAgaW50IF9fZ2V0X3Vz ZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0IAogCQkJCQlmYXRhbF9zaWduYWxfcGVuZGluZyhj dXJyZW50KSkpCiAJCQkJcmV0dXJuIGkgPyBpIDogLUVSRVNUQVJUU1lTOwogCi0JCQlpZiAod3Jp dGUpCisJCQlpZiAod3JpdGUgfHwgZGVjb3cpCiAJCQkJZm9sbF9mbGFncyB8PSBGT0xMX1dSSVRF OwogCiAJCQljb25kX3Jlc2NoZWQoKTsKQEAgLTEzNDIsNiArMTYwOCw3IEBAIGludCBfX2dldF91 c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAKIAkJCWlmIChwYWdlcykgewogCQkJCXBhZ2Vz W2ldID0gcGFnZTsKIAorCQkJCVNldFBhZ2VEb250Q09XKHBhZ2UpOwogCQkJCWZsdXNoX2Fub25f cGFnZSh2bWEsIHBhZ2UsIHN0YXJ0KTsKIAkJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAkJ CX0KQEAgLTE4MjksNDUgKzIwOTYsNiBAQCBzdGF0aWMgaW5saW5lIGludCBwdGVfdW5tYXBfc2Ft ZShzdHJ1Y3QgCiB9CiAKIC8qCi0gKiBEbyBwdGVfbWt3cml0ZSwgYnV0IG9ubHkgaWYgdGhlIHZt YSBzYXlzIFZNX1dSSVRFLiAgV2UgZG8gdGhpcyB3aGVuCi0gKiBzZXJ2aWNpbmcgZmF1bHRzIGZv ciB3cml0ZSBhY2Nlc3MuICBJbiB0aGUgbm9ybWFsIGNhc2UsIGRvIGFsd2F5cyB3YW50Ci0gKiBw dGVfbWt3cml0ZS4gIEJ1dCBnZXRfdXNlcl9wYWdlcyBjYW4gY2F1c2Ugd3JpdGUgZmF1bHRzIGZv ciBtYXBwaW5ncwotICogdGhhdCBkbyBub3QgaGF2ZSB3cml0aW5nIGVuYWJsZWQsIHdoZW4gdXNl ZCBieSBhY2Nlc3NfcHJvY2Vzc192bS4KLSAqLwotc3RhdGljIGlubGluZSBwdGVfdCBtYXliZV9t a3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JaWYgKGxp a2VseSh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQotCQlwdGUgPSBwdGVfbWt3cml0ZShwdGUp OwotCXJldHVybiBwdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3dfdXNlcl9wYWdlKHN0 cnVjdCBwYWdlICpkc3QsIHN0cnVjdCBwYWdlICpzcmMsIHVuc2lnbmVkIGxvbmcgdmEsIHN0cnVj dCAKdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQkvKgotCSAqIElmIHRoZSBzb3VyY2UgcGFnZSB3 YXMgYSBQRk4gbWFwcGluZywgd2UgZG9uJ3QgaGF2ZQotCSAqIGEgInN0cnVjdCBwYWdlIiBmb3Ig aXQuIFdlIGRvIGEgYmVzdC1lZmZvcnQgY29weSBieQotCSAqIGp1c3QgY29weWluZyBmcm9tIHRo ZSBvcmlnaW5hbCB1c2VyIGFkZHJlc3MuIElmIHRoYXQKLQkgKiBmYWlscywgd2UganVzdCB6ZXJv LWZpbGwgaXQuIExpdmUgd2l0aCBpdC4KLQkgKi8KLQlpZiAodW5saWtlbHkoIXNyYykpIHsKLQkJ dm9pZCAqa2FkZHIgPSBrbWFwX2F0b21pYyhkc3QsIEtNX1VTRVIwKTsKLQkJdm9pZCBfX3VzZXIg KnVhZGRyID0gKHZvaWQgX191c2VyICopKHZhICYgUEFHRV9NQVNLKTsKLQotCQkvKgotCQkgKiBU aGlzIHJlYWxseSBzaG91bGRuJ3QgZmFpbCwgYmVjYXVzZSB0aGUgcGFnZSBpcyB0aGVyZQotCQkg KiBpbiB0aGUgcGFnZSB0YWJsZXMuIEJ1dCBpdCBtaWdodCBqdXN0IGJlIHVucmVhZGFibGUsCi0J CSAqIGluIHdoaWNoIGNhc2Ugd2UganVzdCBnaXZlIHVwIGFuZCBmaWxsIHRoZSByZXN1bHQgd2l0 aAotCQkgKiB6ZXJvZXMuCi0JCSAqLwotCQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhr YWRkciwgdWFkZHIsIFBBR0VfU0laRSkpCi0JCQltZW1zZXQoa2FkZHIsIDAsIFBBR0VfU0laRSk7 Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2Uo ZHN0KTsKLQl9IGVsc2UKLQkJY29weV91c2VyX2hpZ2hwYWdlKGRzdCwgc3JjLCB2YSwgdm1hKTsK LX0KLQotLyoKICAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHByZXNlbnQgcGFnZXMsIHdoZW4gdXNl cnMgdHJ5IHRvIHdyaXRlCiAgKiB0byBhIHNoYXJlZCBwYWdlLiBJdCBpcyBkb25lIGJ5IGNvcHlp bmcgdGhlIHBhZ2UgdG8gYSBuZXcgYWRkcmVzcwogICogYW5kIGRlY3JlbWVudGluZyB0aGUgc2hh cmVkLXBhZ2UgY291bnRlciBmb3IgdGhlIG9sZCBwYWdlLgpAQCAtMTkzMCw2ICsyMTU4LDggQEAg c3RhdGljIGludCBkb193cF9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKgogCQl9CiAJCXJldXNlID0g cmV1c2Vfc3dhcF9wYWdlKG9sZF9wYWdlKTsKIAkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOworCQlW TV9CVUdfT04oUGFnZURvbnRDT1cob2xkX3BhZ2UpICYmICFyZXVzZSk7CisKIAl9IGVsc2UgaWYg KHVubGlrZWx5KCh2bWEtPnZtX2ZsYWdzICYgKFZNX1dSSVRFfFZNX1NIQVJFRCkpID09CiAJCQkJ CShWTV9XUklURXxWTV9TSEFSRUQpKSkgewogCQkvKgpAQCAtMjkzNSw4ICszMTY1LDkgQEAgaW50 IG1ha2VfcGFnZXNfcHJlc2VudCh1bnNpZ25lZCBsb25nIGFkZAogCUJVR19PTihhZGRyID49IGVu ZCk7CiAJQlVHX09OKGVuZCA+IHZtYS0+dm1fZW5kKTsKIAlsZW4gPSBESVZfUk9VTkRfVVAoZW5k LCBQQUdFX1NJWkUpIC0gYWRkci9QQUdFX1NJWkU7Ci0JcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3Vy cmVudCwgY3VycmVudC0+bW0sIGFkZHIsCi0JCQlsZW4sIHdyaXRlLCAwLCBOVUxMLCBOVUxMKTsK KwlyZXQgPSBfX2dldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCBhZGRyLAorCQkJ bGVuLCBHVVBfRkxBR1NfU1RBQ0sgfCAod3JpdGUgPyBHVVBfRkxBR1NfV1JJVEUgOiAwKSwKKwkJ CU5VTEwsIE5VTEwpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXJldHVybiByZXQg PT0gbGVuID8gMCA6IC1FRkFVTFQ7CkBAIC0zMDg1LDggKzMzMTYsOSBAQCBpbnQgYWNjZXNzX3By b2Nlc3Nfdm0oc3RydWN0IHRhc2tfc3RydWN0CiAJCXZvaWQgKm1hZGRyOwogCQlzdHJ1Y3QgcGFn ZSAqcGFnZSA9IE5VTEw7CiAKLQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwgYWRkciwg MSwKLQkJCQl3cml0ZSwgMSwgJnBhZ2UsICZ2bWEpOworCQlyZXQgPSBfX2dldF91c2VyX3BhZ2Vz KHRzaywgbW0sIGFkZHIsIDEsCisJCQkJR1VQX0ZMQUdTX0ZPUkNFIHwgR1VQX0ZMQUdTX1NUQUNL IHwKKwkJCQkod3JpdGUgPyBHVVBfRkxBR1NfV1JJVEUgOiAwKSwgJnBhZ2UsICZ2bWEpOwogCQlp ZiAocmV0IDw9IDApIHsKIAkJCS8qCiAJCQkgKiBDaGVjayBpZiB0aGlzIGlzIGEgVk1fSU8gfCBW TV9QRk5NQVAgVk1BLCB3aGljaApJbmRleDogbGludXgtMi42L2FyY2gveDg2L21tL2d1cC5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGxpbnV4LTIuNi5vcmlnL2FyY2gveDg2L21tL2d1cC5jCTIwMDktMDMtMTQg MDI6NDg6MDYuMDAwMDAwMDAwICsxMTAwCisrKyBsaW51eC0yLjYvYXJjaC94ODYvbW0vZ3VwLmMJ MjAwOS0wMy0xNCAwMjo0ODoxMi4wMDAwMDAwMDAgKzExMDAKQEAgLTgzLDExICs4MywxNCBAQCBz dGF0aWMgbm9pbmxpbmUgaW50IGd1cF9wdGVfcmFuZ2UocG1kX3QgCiAJCXN0cnVjdCBwYWdlICpw YWdlOwogCiAJCWlmICgocHRlX2ZsYWdzKHB0ZSkgJiAobWFzayB8IF9QQUdFX1NQRUNJQUwpKSAh PSBtYXNrKSB7CitmYWlsZWQ6CiAJCQlwdGVfdW5tYXAocHRlcCk7CiAJCQlyZXR1cm4gMDsKIAkJ fQogCQlWTV9CVUdfT04oIXBmbl92YWxpZChwdGVfcGZuKHB0ZSkpKTsKIAkJcGFnZSA9IHB0ZV9w YWdlKHB0ZSk7CisJCWlmICh1bmxpa2VseSghUGFnZURvbnRDT1cocGFnZSkpKQorCQkJZ290byBm YWlsZWQ7CiAJCWdldF9wYWdlKHBhZ2UpOwogCQlwYWdlc1sqbnJdID0gcGFnZTsKIAkJKCpucikr KzsKSW5kZXg6IGxpbnV4LTIuNi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaW51eC0yLjYub3JpZy9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAkyMDA5LTAzLTE0 IDAyOjQ4OjA2LjAwMDAwMDAwMCArMTEwMAorKysgbGludXgtMi42L2luY2x1ZGUvbGludXgvcGFn ZS1mbGFncy5oCTIwMDktMDMtMTQgMDI6NDg6MTMuMDAwMDAwMDAwICsxMTAwCkBAIC05NCw2ICs5 NCw3IEBAIGVudW0gcGFnZWZsYWdzIHsKIAlQR19yZWNsYWltLAkJLyogVG8gYmUgcmVjbGFpbWVk IGFzYXAgKi8KIAlQR19idWRkeSwJCS8qIFBhZ2UgaXMgZnJlZSwgb24gYnVkZHkgbGlzdHMgKi8K IAlQR19zd2FwYmFja2VkLAkJLyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi8KKwlQR19k b250Y293LAkJLyogRG9udCBDT1cgUGFnZUFub24gcGFnZSAqLwogI2lmZGVmIENPTkZJR19VTkVW SUNUQUJMRV9MUlUKIAlQR191bmV2aWN0YWJsZSwJCS8qIFBhZ2UgaXMgInVuZXZpY3RhYmxlIiAg Ki8KIAlQR19tbG9ja2VkLAkJLyogUGFnZSBpcyB2bWEgbWxvY2tlZCAqLwpAQCAtMjA4LDYgKzIw OSw4IEBAIF9fUEFHRUZMQUcoU2x1YkRlYnVnLCBzbHViX2RlYnVnKQogICovCiBURVNUUEFHRUZM QUcoV3JpdGViYWNrLCB3cml0ZWJhY2spIFRFU1RTQ0ZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2sp CiBfX1BBR0VGTEFHKEJ1ZGR5LCBidWRkeSkKK19fUEFHRUZMQUcoRG9udENPVywgZG9udGNvdykK K1NFVFBBR0VGTEFHKERvbnRDT1csIGRvbnRjb3cpCiBQQUdFRkxBRyhNYXBwZWRUb0Rpc2ssIG1h cHBlZHRvZGlzaykKIAogLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgZmlsZSByZWFk czsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi8KSW5kZXg6IGxpbnV4LTIuNi9tbS9w YWdlX2FsbG9jLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42Lm9yaWcvbW0vcGFnZV9hbGxvYy5j CTIwMDktMDMtMTMgMjA6MjU6MDIuMDAwMDAwMDAwICsxMTAwCisrKyBsaW51eC0yLjYvbW0vcGFn ZV9hbGxvYy5jCTIwMDktMDMtMTQgMDI6NDg6MTMuMDAwMDAwMDAwICsxMTAwCkBAIC0xMDAwLDYg KzEwMDAsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2hvdF9jb2xkX3BhZ2Uoc3RydWN0IHBhCiAJc3Ry dWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJX19DbGVh clBhZ2VEb250Q09XKHBhZ2UpOwogCWlmIChQYWdlQW5vbihwYWdlKSkKIAkJcGFnZS0+bWFwcGlu ZyA9IE5VTEw7CiAJaWYgKGZyZWVfcGFnZXNfY2hlY2socGFnZSkpCkluZGV4OiBsaW51eC0yLjYv a2VybmVsL2ZvcmsuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYub3JpZy9rZXJuZWwvZm9yay5j CTIwMDktMDMtMTQgMDI6NDg6MDYuMDAwMDAwMDAwICsxMTAwCisrKyBsaW51eC0yLjYva2VybmVs L2ZvcmsuYwkyMDA5LTAzLTE0IDE1OjEyOjA5LjAwMDAwMDAwMCArMTEwMApAQCAtMzUzLDcgKzM1 Myw3IEBAIHN0YXRpYyBpbnQgZHVwX21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0KIAkJcmJfcGFy ZW50ID0gJnRtcC0+dm1fcmI7CiAKIAkJbW0tPm1hcF9jb3VudCsrOwotCQlyZXR2YWwgPSBjb3B5 X3BhZ2VfcmFuZ2UobW0sIG9sZG1tLCBtcG50KTsKKwkJcmV0dmFsID0gY29weV9wYWdlX3Jhbmdl KG1tLCBvbGRtbSwgdG1wLCBtcG50KTsKIAogCQlpZiAodG1wLT52bV9vcHMgJiYgdG1wLT52bV9v cHMtPm9wZW4pCiAJCQl0bXAtPnZtX29wcy0+b3Blbih0bXApOwpJbmRleDogbGludXgtMi42L2Zz L2V4ZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYub3JpZy9mcy9leGVjLmMJMjAwOS0wMy0x MyAyMDoyNTowMC4wMDAwMDAwMDAgKzExMDAKKysrIGxpbnV4LTIuNi9mcy9leGVjLmMJMjAwOS0w My0xNCAwMjo0ODoxNC4wMDAwMDAwMDAgKzExMDAKQEAgLTE2NSw2ICsxNjUsMTMgQEAgZXhpdDoK IAogI2lmZGVmIENPTkZJR19NTVUKIAorI2RlZmluZSBHVVBfRkxBR1NfV1JJVEUgICAgICAgICAg ICAgICAgICAweDAxCisjZGVmaW5lIEdVUF9GTEFHU19TVEFDSyAgICAgICAgICAgICAgICAgIDB4 MTAKKworaW50IF9fZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBsZW4sIGlu dCBmbGFncywKKwkJICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKip2bWFzKTsKKwogc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfYXJnX3BhZ2Uoc3RydWN0IGxp bnV4X2JpbnBybSAqYnBybSwgdW5zaWduZWQgbG9uZyBwb3MsCiAJCWludCB3cml0ZSkKIHsKQEAg LTE3OCw4ICsxODUsMTEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfYXJnX3BhZ2Uoc3RydWN0 IAogCQkJcmV0dXJuIE5VTEw7CiAJfQogI2VuZGlmCi0JcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3Vy cmVudCwgYnBybS0+bW0sIHBvcywKLQkJCTEsIHdyaXRlLCAxLCAmcGFnZSwgTlVMTCk7CisJZG93 bl9yZWFkKCZicHJtLT5tbS0+bW1hcF9zZW0pOworCXJldCA9IF9fZ2V0X3VzZXJfcGFnZXMoY3Vy cmVudCwgYnBybS0+bW0sIHBvcywKKwkJCTEsIEdVUF9GTEFHU19TVEFDSyB8ICh3cml0ZSA/IEdV UF9GTEFHU19XUklURSA6IDApLAorCQkJJnBhZ2UsIE5VTEwpOworCXVwX3JlYWQoJmJwcm0tPm1t LT5tbWFwX3NlbSk7CiAJaWYgKHJldCA8PSAwKQogCQlyZXR1cm4gTlVMTDsKIApJbmRleDogbGlu dXgtMi42L21tL2ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGludXgtMi42Lm9yaWcvbW0vaW50 ZXJuYWwuaAkyMDA5LTAzLTEzIDIwOjI1OjAwLjAwMDAwMDAwMCArMTEwMAorKysgbGludXgtMi42 L21tL2ludGVybmFsLmgJMjAwOS0wMy0xNCAwMjo0ODoxNC4wMDAwMDAwMDAgKzExMDAKQEAgLTI3 MywxMCArMjczLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWluaXRfdmFsaWRhdGVfbWVtbW8K IH0KICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCiAKLSNkZWZpbmUgR1VQX0ZMQUdTX1dS SVRFICAgICAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIEdVUF9GTEFHU19GT1JDRSAgICAgICAg ICAgICAgICAgIDB4MgotI2RlZmluZSBHVVBfRkxBR1NfSUdOT1JFX1ZNQV9QRVJNSVNTSU9OUyAw eDQKLSNkZWZpbmUgR1VQX0ZMQUdTX0lHTk9SRV9TSUdLSUxMICAgICAgICAgMHg4CisjZGVmaW5l IEdVUF9GTEFHU19XUklURSAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgR1VQX0ZMQUdT X0ZPUkNFICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBHVVBfRkxBR1NfSUdOT1JFX1ZN QV9QRVJNSVNTSU9OUyAweDA0CisjZGVmaW5lIEdVUF9GTEFHU19JR05PUkVfU0lHS0lMTCAgICAg ICAgIDB4MDgKKyNkZWZpbmUgR1VQX0ZMQUdTX1NUQUNLICAgICAgICAgICAgICAgICAgMHgxMAog CiBpbnQgX19nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1t X3N0cnVjdCAqbW0sCiAJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgaW50IGxlbiwgaW50IGZs YWdzLAoACg== -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org