From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vasileios Karakasis Subject: Re: realloc function Date: Tue, 11 Jan 2011 00:12:36 +0200 Message-ID: <4D2B8454.3030900@cslab.ece.ntua.gr> References: <4D20B7E6.9020207@cslab.ece.ntua.gr> <4D22461A.4050206@cslab.ece.ntua.gr> <4D246000.8010404@cslab.ece.ntua.gr> <4D24879B.8060205@cslab.ece.ntua.gr> <20110105192532.GD25713@one.firstfloor.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigDFCA955E2D62F5F816F74247" Return-path: In-Reply-To: <20110105192532.GD25713@one.firstfloor.org> Sender: linux-numa-owner@vger.kernel.org List-ID: To: Andi Kleen Cc: linux-numa@vger.kernel.org, 'Kornilios Kourtis' This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigDFCA955E2D62F5F816F74247 Content-Type: multipart/mixed; boundary="------------030402030101080907080302" This is a multi-part message in MIME format. --------------030402030101080907080302 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, I am submitting the final patch. Essentially, it is my original enhanced with some comments about the rationale as we discussed it here and an entry + brief description in the man page. Regards, On 01/05/2011 09:25 PM, Andi Kleen wrote: > On Wed, Jan 05, 2011 at 05:00:43PM +0200, Vasileios Karakasis wrote: >> Peeking inside the mremap() source, I can see that the kernel already >> does this, i.e., mremap() preserves the policy of the original vm area= =2E >=20 > That is true. >> >> The problem is when the user has not specified a binding for the >> original mapping (default policy), in which case copying explicitly th= e >> policy from the old to the new pages won't work either; the new pages >> will still have MPOL_DEFAULT. So realloc() cannot guarantee that the n= ew >=20 >=20 > It would be possible to do >=20 > get_mempolicy MPOL_F_ADDR > if policy =3D=3D MPOL_DEFAULT: > get_mempolicy MPOL_F_NODE|MPOL_F_ADDR, &node > mbind MPOL_PREFERRED, node >=20 > But then you end up with preferred instead of default. It should > be usually the same, but may not in some corner cases. >=20 > I guess you're right and that case is too obscure to care about. > I guess your original patch without anything was good enough. > It may be worth it to add some comments on this rationale though. >=20 >=20 >> pages will be allocated on the same node as the preceding alloc(), >> unless there is a way to obtain the actual node that the pages of the >> original allocation were allocated on. In my opinion, this isn't a rea= l >> problem, because even the simple numa_alloc() using the default policy= , >> cannot guarantee that the pages will be allocated on the node of the >> calling cpu: what if the task is migrated to a different cpu on a >> different node, while touching (i.e., allocating) the pages with the >> police_memory_int()? >=20 > process policy and MPOL_DEFAULT are always just heuristics; such races > can always occur. They usually should not because the scheduler > does not migrate too frequently. >=20 > -Andi --=20 V.K. --------------030402030101080907080302 Content-Type: text/plain; name="numactl-2.0.6-realloc-patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="numactl-2.0.6-realloc-patch" ZGlmZiAtdXJOIG51bWFjdGwtMi4wLjYtb3JpZy9saWJudW1hLmMgbnVtYWN0bC0yLjAuNi9s aWJudW1hLmMKLS0tIG51bWFjdGwtMi4wLjYtb3JpZy9saWJudW1hLmMJMjAxMS0wMS0wMyAx NTowOToyMy4wMDAwMDAwMDAgKzAyMDAKKysrIG51bWFjdGwtMi4wLjYvbGlibnVtYS5jCTIw MTEtMDEtMTAgMjM6NDk6NTguMDAwMDAwMDAwICswMjAwCkBAIC04NzEsNiArODcxLDIzIEBA CiAJcmV0dXJuIG1lbTsKIH0gCiAKK3ZvaWQgKm51bWFfcmVhbGxvYyh2b2lkICpvbGRfYWRk ciwgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUpCit7CisJY2hhciAqbWVtOwor CW1lbSA9IG1yZW1hcChvbGRfYWRkciwgb2xkX3NpemUsIG5ld19zaXplLCBNUkVNQVBfTUFZ TU9WRSk7CisJaWYgKG1lbSA9PSAoY2hhciAqKS0xKQorCQlyZXR1cm4gTlVMTDsKKwkvKgor CSAqCVRoZSBtZW1vcnkgcG9saWN5IG9mIHRoZSBhbGxvY2F0ZWQgcGFnZXMgaXMgcHJlc2Vy dmVkIGJ5IG1yZW1hcCgpLCBzbworCSAqCXRoZXJlIGlzIG5vIG5lZWQgdG8gKHJlKXNldCBp dCBoZXJlLiBJZiB0aGUgcG9saWN5IG9mIHRoZSBvcmlnaW5hbAorCSAqCWFsbG9jYXRpb24g aXMgbm90IHNldCwgdGhlIG5ldyBwYWdlcyB3aWxsIGJlIGFsbG9jYXRlZCBhY2NvcmRpbmcg dG8gdGhlCisJICoJcHJvY2VzcycgbWVtcG9saWN5LiBUcnlpbmcgdG8gYWxsb2NhdGUgZXhw bGljaXRseSB0aGUgbmV3IHBhZ2VzIG9uIHRoZQorCSAqCXNhbWUgbm9kZSBhcyB0aGUgb3Jp Z2luYWwgb25lcyB3b3VsZCByZXF1aXJlIGNoYW5naW5nIHRoZSBwb2xpY3kgb2YgdGhlCisJ ICoJbmV3bHkgYWxsb2NhdGVkIHBhZ2VzLCB3aGljaCB2aW9sYXRlcyB0aGUgbnVtYV9yZWFs bG9jKCkgc2VtYW50aWNzLgorCSAqLyAKKwlyZXR1cm4gbWVtOworfQorCiB2b2lkICpudW1h X2FsbG9jX2ludGVybGVhdmVkX3N1YnNldF92MShzaXplX3Qgc2l6ZSwgY29uc3Qgbm9kZW1h c2tfdCAqbWFzaykKIHsKIAljaGFyICptZW07CmRpZmYgLXVyTiBudW1hY3RsLTIuMC42LW9y aWcvTWFrZWZpbGUgbnVtYWN0bC0yLjAuNi9NYWtlZmlsZQotLS0gbnVtYWN0bC0yLjAuNi1v cmlnL01ha2VmaWxlCTIwMTEtMDEtMDMgMTU6MDk6MjMuMDAwMDAwMDAwICswMjAwCisrKyBu dW1hY3RsLTIuMC42L01ha2VmaWxlCTIwMTEtMDEtMDMgMjM6MjI6NTcuMDAwMDAwMDAwICsw MjAwCkBAIC0zMSw3ICszMSw3IEBACiAJICAgICAgdGVzdC9hZnRlciB0ZXN0L2JlZm9yZSB0 aHJlYWR0ZXN0IHRlc3RfbW92ZV9wYWdlcyBcCiAJICAgICAgdGVzdC9tYmluZF9taWdfcGFn ZXMgdGVzdC9taWdyYXRlX3BhZ2VzIFwKIAkgICAgICBtaWdyYXRlcGFnZXMgbWlnc3BlZWQg bWlnc3BlZWQubyBsaWJudW1hLmEgXAotCSAgICAgIHRlc3QvbW92ZV9wYWdlcworCSAgICAg IHRlc3QvbW92ZV9wYWdlcyB0ZXN0L3JlYWxsb2NfdGVzdAogU09VUkNFUyA6PSBiaXRvcHMu YyBsaWJudW1hLmMgZGlzdGFuY2UuYyBtZW1ob2cuYyBudW1hY3RsLmMgbnVtYWRlbW8uYyBc CiAJbnVtYW1vbi5jIHNobS5jIHN0cmVhbV9saWIuYyBzdHJlYW1fbWFpbi5jIHN5c2NhbGwu YyB1dGlsLmMgbXQuYyBcCiAJY2xlYXJjYWNoZS5jIHRlc3QvKi5jCkBAIC00Myw3ICs0Myw3 IEBACiBhbGw6IG51bWFjdGwgbWlncmF0ZXBhZ2VzIG1pZ3NwZWVkIGxpYm51bWEuc28gbnVt YWRlbW8gbnVtYW1vbiBtZW1ob2cgXAogICAgICB0ZXN0L3RzaGFyZWQgc3RyZWFtIHRlc3Qv bXlub2RlIHRlc3QvcGFnZXNpemUgdGVzdC9mdG9rIHRlc3QvcHJlZmVyZWQgXAogICAgICB0 ZXN0L3JhbmRtYXAgdGVzdC9ub2RlbWFwIHRlc3QvZGlzdGFuY2UgdGVzdC90Yml0bWFwIHRl c3QvbW92ZV9wYWdlcyBcCi0gICAgIHRlc3QvbWJpbmRfbWlnX3BhZ2VzIHRlc3QvbWlncmF0 ZV9wYWdlcyBsaWJudW1hLmEKKyAgICAgdGVzdC9tYmluZF9taWdfcGFnZXMgdGVzdC9taWdy YXRlX3BhZ2VzIHRlc3QvcmVhbGxvY190ZXN0IGxpYm51bWEuYQogCiBudW1hY3RsOiBudW1h Y3RsLm8gdXRpbC5vIHNobS5vIGJpdG9wcy5vIGxpYm51bWEuc28KIApAQCAtMTIzLDYgKzEy Myw4IEBACiAKIHRlc3QvbWlncmF0ZV9wYWdlczogdGVzdC9taWdyYXRlX3BhZ2VzLmMgbGli bnVtYS5zbwogCit0ZXN0L3JlYWxsb2NfdGVzdDogdGVzdC9yZWFsbG9jX3Rlc3QuYyBsaWJu dW1hLnNvCisKIC5QSE9OWTogaW5zdGFsbCBhbGwgY2xlYW4gaHRtbCBkZXBlbmQKIAogTUFO UEFHRVMgOj0gbnVtYS4zIG51bWFjdGwuOCBudW1hc3RhdC44IG1pZ3JhdGVwYWdlcy44IG1p Z3NwZWVkLjgKZGlmZiAtdXJOIG51bWFjdGwtMi4wLjYtb3JpZy9udW1hLjMgbnVtYWN0bC0y LjAuNi9udW1hLjMKLS0tIG51bWFjdGwtMi4wLjYtb3JpZy9udW1hLjMJMjAxMS0wMS0wMyAx NTowOToyMy4wMDAwMDAwMDAgKzAyMDAKKysrIG51bWFjdGwtMi4wLjYvbnVtYS4zCTIwMTEt MDEtMTAgMjM6Mzk6MDIuMDAwMDAwMDAwICswMjAwCkBAIC04Nyw2ICs4Nyw4IEBACiAuQkkg InZvaWQgKm51bWFfYWxsb2NfaW50ZXJsZWF2ZWRfc3Vic2V0KHNpemVfdCAiIHNpemUgIiwg IHN0cnVjdCBiaXRtYXNrICoiIG5vZGVtYXNrICk7CiAuQkkgInZvaWQgKm51bWFfYWxsb2Mo c2l6ZV90ICIgc2l6ZSApOwogLmJyCisuQkkgInZvaWQgKm51bWFfcmVhbGxvYyh2b2lkICoi b2xkX2FkZHIgIiwgc2l6ZV90ICIgb2xkX3NpemUgIiwgc2l6ZV90ICIgbmV3X3NpemUgKTsK Ky5icgogLkJJICJ2b2lkIG51bWFfZnJlZSh2b2lkICoiIHN0YXJ0ICIsIHNpemVfdCAiIHNp emUgKTsKIC5zcAogLkJJICJpbnQgbnVtYV9ydW5fb25fbm9kZShpbnQgIiBub2RlICk7CkBA IC01OTksNiArNjAxLDM5IEBACiAuQlIgbnVtYV9mcmVlICgpLgogT24gZXJyb3JzIE5VTEwg aXMgcmV0dXJuZWQuCiAKKy5CUiBudW1hX3JlYWxsb2MgKCkKK2NoYW5nZXMgdGhlIHNpemUg b2YgdGhlIG1lbW9yeSBhcmVhIHBvaW50ZWQgdG8gYnkKKy5JIG9sZF9hZGRyCitmcm9tCisu SSBvbGRfc2l6ZQordG8KKy5JIG5ld19zaXplLgorVGhlIG1lbW9yeSBhcmVhIHBvaW50ZWQg dG8gYnkKKy5JIG9sZF9hZGRyCittdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aCBvbmUg b2YgdGhlCisuQlIgbnVtYV9hbGxvYyoKK2Z1bmN0aW9ucy4KK1RoZQorLkkgbmV3X3NpemUK K3dpbGwgYmUgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIHRoZSBzeXN0ZW0gcGFnZSBz aXplLiBUaGUgY29udGVudHMgb2YgdGhlCittZW1vcnkgYXJlYSB3aWxsIGJlIHVuY2hhbmdl ZCB0byB0aGUgbWluaW11bSBvZiB0aGUgb2xkIGFuZCBuZXcgc2l6ZXM7IG5ld2x5CithbGxv Y2F0ZWQgbWVtb3J5IHdpbGwgYmUgdW5pbml0aWFsaXplZC4gVGhlIG1lbW9yeSBwb2xpY3kg KGFuZCBub2RlIGJpbmRpbmdzKQorYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW5hbCBtZW1v cnkgYXJlYSB3aWxsIGJlIHByZXNlcnZlZCBpbiB0aGUgcmVzaXplZAorYXJlYS4gRm9yIGV4 YW1wbGUsIGlmIHRoZSBpbml0aWFsIGFyZWEgd2FzIGFsbG9jYXRlZCB3aXRoIGEgY2FsbCB0 bworLkJSIG51bWFfYWxsb2Nfb25ub2RlKCksCit0aGVuIHRoZSBuZXcgcGFnZXMgKGlmIHRo ZSBhcmVhIGlzIGVubGFyZ2VkKSB3aWxsIGJlIGFsbG9jYXRlZCBvbiB0aGUgc2FtZSBub2Rl LgorSG93ZXZlciwgaWYgbm8gbWVtb3J5IHBvbGljeSB3YXMgc2V0IGZvciB0aGUgb3JpZ2lu YWwgYXJlYSwgdGhlbgorLkJSIG51bWFfcmVhbGxvYyAoKQorY2Fubm90IGd1YXJhbnRlZSB0 aGF0IHRoZSBuZXcgcGFnZXMgd2lsbCBiZSBhbGxvY2F0ZWQgb24gdGhlIHNhbWUgbm9kZS4g T24KK3N1Y2Nlc3MsIHRoZSBhZGRyZXNzIG9mIHRoZSByZXNpemVkIGFyZWEgaXMgcmV0dXJu ZWQgKHdoaWNoIG1pZ2h0IGJlIGRpZmZlcmVudAorZnJvbSB0aGF0IG9mIHRoZSBpbml0aWFs IGFyZWEpLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZCBhbmQKKy5JIGVycm5vCitpcyBz ZXQgdG8gaW5kaWNhdGUgdGhlIGVycm9yLiBUaGUgcG9pbnRlciByZXR1cm5lZCBieQorLkJS IG51bWFfcmVhbGxvYyAoKQoraXMgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8KKy5CUiBudW1h X2ZyZWUgKCkuCisKKwogLkJSIG51bWFfZnJlZSAoKQogZnJlZXMKIC5JIHNpemUKZGlmZiAt dXJOIG51bWFjdGwtMi4wLjYtb3JpZy9udW1hLmggbnVtYWN0bC0yLjAuNi9udW1hLmgKLS0t IG51bWFjdGwtMi4wLjYtb3JpZy9udW1hLmgJMjAxMS0wMS0wMyAxNTowOToyMy4wMDAwMDAw MDAgKzAyMDAKKysrIG51bWFjdGwtMi4wLjYvbnVtYS5oCTIwMTEtMDEtMTEgMDA6MDY6MTIu MDAwMDAwMDAwICswMjAwCkBAIC0yMTIsNiArMjEyLDggQEAKIHZvaWQgKm51bWFfYWxsb2Nf bG9jYWwoc2l6ZV90IHNpemUpOwogLyogQWxsb2NhdGlvbiB3aXRoIGN1cnJlbnQgcG9saWN5 ICovCiB2b2lkICpudW1hX2FsbG9jKHNpemVfdCBzaXplKTsKKy8qIENoYW5nZSB0aGUgc2l6 ZSBvZiBhIG1lbW9yeSBhcmVhIHByZXNlcnZpbmcgdGhlIG1lbW9yeSBwb2xpY3kgKi8KK3Zv aWQgKm51bWFfcmVhbGxvYyh2b2lkICpvbGRfYWRkciwgc2l6ZV90IG9sZF9zaXplLCBzaXpl X3QgbmV3X3NpemUpOwogLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBmdW5jdGlv bnMgYWJvdmUgKi8KIHZvaWQgbnVtYV9mcmVlKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpOwog CmRpZmYgLXVyTiBudW1hY3RsLTIuMC42LW9yaWcvdGVzdC9yZWFsbG9jX3Rlc3QuYyBudW1h Y3RsLTIuMC42L3Rlc3QvcmVhbGxvY190ZXN0LmMKLS0tIG51bWFjdGwtMi4wLjYtb3JpZy90 ZXN0L3JlYWxsb2NfdGVzdC5jCTE5NzAtMDEtMDEgMDI6MDA6MDAuMDAwMDAwMDAwICswMjAw CisrKyBudW1hY3RsLTIuMC42L3Rlc3QvcmVhbGxvY190ZXN0LmMJMjAxMS0wMS0xMCAyMzo1 NTozNy4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwxMDggQEAKKyNpbmNsdWRlIDxhc3Nl cnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlICJudW1hLmgiCisjaW5jbHVkZSAi bnVtYWlmLmgiCisKKyNkZWZpbmUgREVGQVVMVF9OUl9QQUdFUwkxMDI0CisKK3N0YXRpYyBp bnQgcGFyc2VfaW50KGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyCSplbmRwdHI7CisJbG9u ZwlyZXQgPSBzdHJ0b2woc3RyLCAmZW5kcHRyLCAwKTsKKwlpZiAoKmVuZHB0ciAhPSAnXDAn KSB7CisJCWZwcmludGYoc3RkZXJyLCAiW2Vycm9yXSBzdHJ0b2woKSBmYWlsZWQ6IHBhcnNl IGVycm9yOiAlc1xuIiwgZW5kcHRyKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZXJybm8g PT0gRVJBTkdFKQorCQlmcHJpbnRmKHN0ZGVyciwgIlt3YXJuaW5nXSBzdHJ0b2woKSBvdXQg b2YgcmFuZ2VcbiIpOworCisJaWYgKHJldCA+IElOVF9NQVggfHwgcmV0IDwgSU5UX01JTikg eworCQlmcHJpbnRmKHN0ZGVyciwgIlt3YXJuaW5nXSBwYXJzZV9pbnQoKSBvdXQgb2YgcmFu Z2VcbiIpOworCQlyZXQgPSAocmV0ID4gMCkgPyBJTlRfTUFYIDogSU5UX01JTjsKKwl9CisK KwlyZXR1cm4gKGludCkgcmV0OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCit7CisJY2hhcgkqbWVtOworCWludAkJcGFnZV9zaXplID0gbnVtYV9wYWdlc2l6ZSgp OworCWludAkJbm9kZSA9IDA7CisJaW50CQlucl9wYWdlcyA9IERFRkFVTFRfTlJfUEFHRVM7 CisKKwlpZiAobnVtYV9hdmFpbGFibGUoKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJu dW1hIGlzIG5vdCBhdmFpbGFibGUiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoYXJnYyA+ IDEpCisJCW5vZGUgPSBwYXJzZV9pbnQoYXJndlsxXSk7CisJaWYgKGFyZ2MgPiAyKQorCQlu cl9wYWdlcyA9IHBhcnNlX2ludChhcmd2WzJdKTsKKwkKKwltZW0gPSBudW1hX2FsbG9jX29u bm9kZShwYWdlX3NpemUsIG5vZGUpOworCisJLyogU3RvcmUgdGhlIHBvbGljeSBvZiB0aGUg bmV3bHkgYWxsb2NhdGVkIGFyZWEgKi8KKwl1bnNpZ25lZCBsb25nCW5vZGVtYXNrOworCWlu dAkJCQltb2RlOworCWludAkJCQlucl9ub2RlcyA9IG51bWFfbnVtX3Bvc3NpYmxlX25vZGVz KCk7CisJaWYgKGdldF9tZW1wb2xpY3koJm1vZGUsICZub2RlbWFzaywgbnJfbm9kZXMsIG1l bSwKKwkJCQkJICBNUE9MX0ZfTk9ERSB8IE1QT0xfRl9BRERSKSA8IDApIHsKKwkJcGVycm9y KCJnZXRfbWVtcG9saWN5KCkgZmFpbGVkIik7CisJCWV4aXQoMSk7CisJfQorCisJLyogUHJp bnQgc29tZSBpbmZvICovCisJcHJpbnRmKCJQYWdlIHNpemU6ICVkXG4iLCBwYWdlX3NpemUp OworCXByaW50ZigiUGFnZXMgcmVhbGxvYydlZDogJWRcbiIsIG5yX3BhZ2VzKTsKKwlwcmlu dGYoIkFsbG9jYXRlIGRhdGEgaW4gbm9kZTogJWRcbiIsIG5vZGUpOworCisJaW50IGk7CisJ aW50IG5yX2lucGxhY2UgPSAwOworCWludCBucl9tb3ZlZCAgID0gMDsKKwlmb3IgKGkgPSAw OyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQkvKiBFbmxhcmdlIG1lbSB3aXRoIG9uZSBtb3Jl IHBhZ2UgKi8KKwkJY2hhcgkqbmV3X21lbSA9IG51bWFfcmVhbGxvYyhtZW0sIChpKzEpKnBh Z2Vfc2l6ZSwgKGkrMikqcGFnZV9zaXplKTsKKwkJaWYgKCFuZXdfbWVtKSB7CisJCQlwZXJy b3IoIm51bWFfcmVhbGxvYygpIGZhaWxlZCIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlm IChuZXdfbWVtID09IG1lbSkKKwkJCSsrbnJfaW5wbGFjZTsKKwkJZWxzZQorCQkJKytucl9t b3ZlZDsKKwkJbWVtID0gbmV3X21lbTsKKworCQkvKiBDaGVjayB0aGUgcG9saWN5IG9mIHRo ZSByZWFsbG9jJ2VkIGFyZWEgKi8KKwkJdW5zaWduZWQgbG9uZwlyZWFsbG9jX25vZGVtYXNr OworCQlpbnQJCQkJcmVhbGxvY19tb2RlOworCQlpZiAoZ2V0X21lbXBvbGljeSgmcmVhbGxv Y19tb2RlLCAmcmVhbGxvY19ub2RlbWFzaywKKwkJCQkJCSAgbnJfbm9kZXMsIG1lbSwgTVBP TF9GX05PREUgfCBNUE9MX0ZfQUREUikgPCAwKSB7CisJCQlwZXJyb3IoImdldF9tZW1wb2xp Y3koKSBmYWlsZWQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlhc3NlcnQocmVhbGxvY19u b2RlbWFzayA9PSBub2RlbWFzayAmJgorCQkJICAgcmVhbGxvY19tb2RlID09IG1vZGUgJiYg InBvbGljeSBjaGFuZ2VkIik7CisJfQorCisJLyogU2hyaW5rIHRvIHRoZSBvcmlnaW5hbCBz aXplICovCisJbWVtID0gbnVtYV9yZWFsbG9jKG1lbSwgKG5yX3BhZ2VzICsgMSkqcGFnZV9z aXplLCBwYWdlX3NpemUpOworCWlmICghbWVtKSB7CisJCXBlcnJvcigibnVtYV9yZWFsbG9j KCkgZmFpbGVkIik7CisJCWV4aXQoMSk7CisJfQorCisJbnVtYV9mcmVlKG1lbSwgcGFnZV9z aXplKTsKKwlwcmludGYoIkluLXBsYWNlIHJlYWxsb2NzOiAlZFxuIiwgbnJfaW5wbGFjZSk7 CisJcHJpbnRmKCJNb3ZlZCByZWFsbG9jczogJWRcbiIsIG5yX21vdmVkKTsKKwlyZXR1cm4g MDsKK30KZGlmZiAtdXJOIG51bWFjdGwtMi4wLjYtb3JpZy92ZXJzaW9ucy5sZHNjcmlwdCBu dW1hY3RsLTIuMC42L3ZlcnNpb25zLmxkc2NyaXB0Ci0tLSBudW1hY3RsLTIuMC42LW9yaWcv dmVyc2lvbnMubGRzY3JpcHQJMjAxMS0wMS0wMyAxNTowOToyMy4wMDAwMDAwMDAgKzAyMDAK KysrIG51bWFjdGwtMi4wLjYvdmVyc2lvbnMubGRzY3JpcHQJMjAxMS0wMS0xMCAxODozNjoz Ny4wMDAwMDAwMDAgKzAyMDAKQEAgLTg3LDYgKzg3LDcgQEAKICAgICBudW1hX2FsbG9jX2lu dGVybGVhdmVkX3N1YnNldDsKICAgICBudW1hX2FsbG9jX2xvY2FsOwogICAgIG51bWFfYWxs b2Nfb25ub2RlOworICAgIG51bWFfcmVhbGxvYzsKICAgICBudW1hX2FsbG9jYXRlX2NwdW1h c2s7CiAgICAgbnVtYV9hbGxvY2F0ZV9ub2RlbWFzazsKICAgICBudW1hX2F2YWlsYWJsZTsK --------------030402030101080907080302-- --------------enigDFCA955E2D62F5F816F74247 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAk0rhFoACgkQHUHhfRemepyVQQCcDmiaNWMgidCy1mbquDeQtd/n YhsAoOTb3bZ971V1W7qt8pKdildztEvU =i9Uy -----END PGP SIGNATURE----- --------------enigDFCA955E2D62F5F816F74247--