From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vasileios Karakasis Subject: Re: realloc function Date: Mon, 03 Jan 2011 23:56:42 +0200 Message-ID: <4D22461A.4050206@cslab.ece.ntua.gr> References: <4D20B7E6.9020207@cslab.ece.ntua.gr> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig1165BBE63BCDAA65F6422CEE" Return-path: In-Reply-To: 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) --------------enig1165BBE63BCDAA65F6422CEE Content-Type: multipart/mixed; boundary="------------000902020807040507070209" This is a multi-part message in MIME format. --------------000902020807040507070209 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, I am sending you the updated patch (against the latest 2.0.6 version). I call numa_police_memory_int() only for the newly allocated pages, when the area is expanded. I also added a numa_realloc_onnode() function in the same fashion as that of the numa_alloc_onnode(), which sets a specific memory binding. I pass the MPOL_MF_MOVE flag to mbind(), but I am not sure if this is worth it, since the call becomes too slow even in the case of no page migration. Without the MPOL_MF_MOVE flag, of course, if the policy changes between realloc's, previously allocated pages won't be affected. Regards, On 01/03/2011 01:42 AM, Andi Kleen wrote: >=20 >> I am submitting a patch for a realloc function that might be useful. T= he >> proposed numa_realloc() is merely a wrapper to mremap(), which it call= s >> with the flag MREMAP_MAYMOVE. The policy of the vm area is copied by t= he >> kernel in case of moving. I am also submitting a test program, that >> keeps expanding an initial allocation until a limit is reached and >> checks the mempolicy of the expanded area in every iteration. >> >> My use case is a dynamic array implementation which uses realloc() to >> dynamically expand the array and I want to convert it to a numa-aware >> implementation. >=20 > You need to call numa_police_memory_int() in the function, otherwise > the policy won't be actually preserved. >=20 > -Andi >=20 >=20 --=20 V.K. --------------000902020807040507070209 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 MTEtMDEtMDMgMjM6MTU6MTQuMDAwMDAwMDAwICswMjAwCkBAIC04NzEsNiArODcxLDE3IEBA CiAJcmV0dXJuIG1lbTsKIH0gCiAKK3ZvaWQgKm51bWFfcmVhbGxvYyh2b2lkICpvbGRfYWRk ciwgc2l6ZV90IG9sZF9zaXplLCBzaXplX3QgbmV3X3NpemUpCit7CisJY2hhciAqbWVtOwor CW1lbSA9IG1yZW1hcChvbGRfYWRkciwgb2xkX3NpemUsIG5ld19zaXplLCBNUkVNQVBfTUFZ TU9WRSk7CisJaWYgKG1lbSA9PSAoY2hhciAqKS0xKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAo bmV3X3NpemUgPiBvbGRfc2l6ZSkKKwkJbnVtYV9wb2xpY2VfbWVtb3J5X2ludChtZW0gKyBv bGRfc2l6ZSwgbmV3X3NpemUgLSBvbGRfc2l6ZSk7CisJcmV0dXJuIG1lbTsKK30KKwogdm9p ZCAqbnVtYV9hbGxvY19pbnRlcmxlYXZlZF9zdWJzZXRfdjEoc2l6ZV90IHNpemUsIGNvbnN0 IG5vZGVtYXNrX3QgKm1hc2spCiB7CiAJY2hhciAqbWVtOwpAQCAtOTk3LDYgKzEwMDgsMjgg QEAKIAlyZXR1cm4gbWVtOyAJCiB9IAogCit2b2lkICpudW1hX3JlYWxsb2Nfb25ub2RlKHZv aWQgKm9sZF9hZGRyLCBzaXplX3Qgb2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSwKKwkJCQkJ CSAgaW50IG5vZGUpCit7CisJY2hhciAqbWVtOworCXN0cnVjdCBiaXRtYXNrICpibXA7CisK KwlibXAgPSBudW1hX2FsbG9jYXRlX25vZGVtYXNrKCk7CisJbnVtYV9iaXRtYXNrX3NldGJp dChibXAsIG5vZGUpOworCW1lbSA9IG1yZW1hcChvbGRfYWRkciwgb2xkX3NpemUsIG5ld19z aXplLCBNUkVNQVBfTUFZTU9WRSk7CisJaWYgKG1lbSA9PSAoY2hhciAqKS0xKSB7CisJCW1l bSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgaW50IG1iaW5kX2ZsYWdzX3NhdmUg PSBtYmluZF9mbGFnczsKKwkJbWJpbmRfZmxhZ3MgfD0gTVBPTF9NRl9NT1ZFOworCQlkb21i aW5kKG1lbSwgbmV3X3NpemUsIGJpbmRfcG9saWN5LCBibXApOworCQltYmluZF9mbGFncyA9 IG1iaW5kX2ZsYWdzX3NhdmU7CisJfQorCisJbnVtYV9iaXRtYXNrX2ZyZWUoYm1wKTsKKwly ZXR1cm4gbWVtOworfQorCiB2b2lkICpudW1hX2FsbG9jX2xvY2FsKHNpemVfdCBzaXplKSAK IHsgCiAJY2hhciAqbWVtOyAKZGlmZiAtdXJOIG51bWFjdGwtMi4wLjYtb3JpZy9NYWtlZmls ZSBudW1hY3RsLTIuMC42L01ha2VmaWxlCi0tLSBudW1hY3RsLTIuMC42LW9yaWcvTWFrZWZp bGUJMjAxMS0wMS0wMyAxNTowOToyMy4wMDAwMDAwMDAgKzAyMDAKKysrIG51bWFjdGwtMi4w LjYvTWFrZWZpbGUJMjAxMS0wMS0wMyAyMzoyMjo1Ny4wMDAwMDAwMDAgKzAyMDAKQEAgLTMx LDcgKzMxLDcgQEAKIAkgICAgICB0ZXN0L2FmdGVyIHRlc3QvYmVmb3JlIHRocmVhZHRlc3Qg dGVzdF9tb3ZlX3BhZ2VzIFwKIAkgICAgICB0ZXN0L21iaW5kX21pZ19wYWdlcyB0ZXN0L21p Z3JhdGVfcGFnZXMgXAogCSAgICAgIG1pZ3JhdGVwYWdlcyBtaWdzcGVlZCBtaWdzcGVlZC5v IGxpYm51bWEuYSBcCi0JICAgICAgdGVzdC9tb3ZlX3BhZ2VzCisJICAgICAgdGVzdC9tb3Zl X3BhZ2VzIHRlc3QvcmVhbGxvY190ZXN0CiBTT1VSQ0VTIDo9IGJpdG9wcy5jIGxpYm51bWEu YyBkaXN0YW5jZS5jIG1lbWhvZy5jIG51bWFjdGwuYyBudW1hZGVtby5jIFwKIAludW1hbW9u LmMgc2htLmMgc3RyZWFtX2xpYi5jIHN0cmVhbV9tYWluLmMgc3lzY2FsbC5jIHV0aWwuYyBt dC5jIFwKIAljbGVhcmNhY2hlLmMgdGVzdC8qLmMKQEAgLTQzLDcgKzQzLDcgQEAKIGFsbDog bnVtYWN0bCBtaWdyYXRlcGFnZXMgbWlnc3BlZWQgbGlibnVtYS5zbyBudW1hZGVtbyBudW1h bW9uIG1lbWhvZyBcCiAgICAgIHRlc3QvdHNoYXJlZCBzdHJlYW0gdGVzdC9teW5vZGUgdGVz dC9wYWdlc2l6ZSB0ZXN0L2Z0b2sgdGVzdC9wcmVmZXJlZCBcCiAgICAgIHRlc3QvcmFuZG1h cCB0ZXN0L25vZGVtYXAgdGVzdC9kaXN0YW5jZSB0ZXN0L3RiaXRtYXAgdGVzdC9tb3ZlX3Bh Z2VzIFwKLSAgICAgdGVzdC9tYmluZF9taWdfcGFnZXMgdGVzdC9taWdyYXRlX3BhZ2VzIGxp Ym51bWEuYQorICAgICB0ZXN0L21iaW5kX21pZ19wYWdlcyB0ZXN0L21pZ3JhdGVfcGFnZXMg dGVzdC9yZWFsbG9jX3Rlc3QgbGlibnVtYS5hCiAKIG51bWFjdGw6IG51bWFjdGwubyB1dGls Lm8gc2htLm8gYml0b3BzLm8gbGlibnVtYS5zbwogCkBAIC0xMjMsNiArMTIzLDggQEAKIAog dGVzdC9taWdyYXRlX3BhZ2VzOiB0ZXN0L21pZ3JhdGVfcGFnZXMuYyBsaWJudW1hLnNvCiAK K3Rlc3QvcmVhbGxvY190ZXN0OiB0ZXN0L3JlYWxsb2NfdGVzdC5jIGxpYm51bWEuc28KKwog LlBIT05ZOiBpbnN0YWxsIGFsbCBjbGVhbiBodG1sIGRlcGVuZAogCiBNQU5QQUdFUyA6PSBu dW1hLjMgbnVtYWN0bC44IG51bWFzdGF0LjggbWlncmF0ZXBhZ2VzLjggbWlnc3BlZWQuOApk aWZmIC11ck4gbnVtYWN0bC0yLjAuNi1vcmlnL251bWEuaCBudW1hY3RsLTIuMC42L251bWEu aAotLS0gbnVtYWN0bC0yLjAuNi1vcmlnL251bWEuaAkyMDExLTAxLTAzIDE1OjA5OjIzLjAw MDAwMDAwMCArMDIwMAorKysgbnVtYWN0bC0yLjAuNi9udW1hLmgJMjAxMS0wMS0wMyAyMTow NjowOC4wMDAwMDAwMDAgKzAyMDAKQEAgLTIwOCwxMCArMjA4LDE0IEBACiB2b2lkICpudW1h X2FsbG9jX2ludGVybGVhdmVkKHNpemVfdCBzaXplKTsKIC8qIEFsbG9jIG1lbW9yeSBsb2Nh dGVkIG9uIG5vZGUgKi8KIHZvaWQgKm51bWFfYWxsb2Nfb25ub2RlKHNpemVfdCBzaXplLCBp bnQgbm9kZSk7CisvKiBSZWFsbG9jIG1lbW9yeSBsb2NhdGVkIG9uIG5vZGUgKi8KK3ZvaWQg Km51bWFfcmVhbGxvY19vbm5vZGUodm9pZCAqb2xkX2FkZHIsIHNpemVfdCBvbGRfc2l6ZSwg c2l6ZV90IG5ld19zaXplLCBpbnQgbm9kZSk7CiAvKiBBbGxvYyBtZW1vcnkgb24gbG9jYWwg bm9kZSAqLwogdm9pZCAqbnVtYV9hbGxvY19sb2NhbChzaXplX3Qgc2l6ZSk7CiAvKiBBbGxv Y2F0aW9uIHdpdGggY3VycmVudCBwb2xpY3kgKi8KIHZvaWQgKm51bWFfYWxsb2Moc2l6ZV90 IHNpemUpOworLyogUmVhbGxvYyBtZW1vcnksIGJpbmRpbmcgcHJvcGVydGllcyBhcmUgcHJl c2VydmVkLiAqLwordm9pZCAqbnVtYV9yZWFsbG9jKHZvaWQgKm9sZF9hZGRyLCBzaXplX3Qg b2xkX3NpemUsIHNpemVfdCBuZXdfc2l6ZSk7CiAvKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQg YnkgdGhlIGZ1bmN0aW9ucyBhYm92ZSAqLwogdm9pZCBudW1hX2ZyZWUodm9pZCAqbWVtLCBz aXplX3Qgc2l6ZSk7CiAKQmluYXJ5IGZpbGVzIG51bWFjdGwtMi4wLjYtb3JpZy90ZXN0L21v dmVfcGFnZXMgYW5kIG51bWFjdGwtMi4wLjYvdGVzdC9tb3ZlX3BhZ2VzIGRpZmZlcgpkaWZm IC11ck4gbnVtYWN0bC0yLjAuNi1vcmlnL3Rlc3QvcmVhbGxvY190ZXN0LmMgbnVtYWN0bC0y LjAuNi90ZXN0L3JlYWxsb2NfdGVzdC5jCi0tLSBudW1hY3RsLTIuMC42LW9yaWcvdGVzdC9y ZWFsbG9jX3Rlc3QuYwkxOTcwLTAxLTAxIDAyOjAwOjAwLjAwMDAwMDAwMCArMDIwMAorKysg bnVtYWN0bC0yLjAuNi90ZXN0L3JlYWxsb2NfdGVzdC5jCTIwMTEtMDEtMDMgMjM6MTk6MzEu MDAwMDAwMDAwICswMjAwCkBAIC0wLDAgKzEsMTE5IEBACisjaW5jbHVkZSA8YXNzZXJ0Lmg+ CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1 bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSAibnVtYS5oIgorI2luY2x1ZGUgIm51bWFp Zi5oIgorCisjZGVmaW5lIERFRkFVTFRfTlJfUEFHRVMJMTAyNAorCitzdGF0aWMgaW50IHBh cnNlX2ludChjb25zdCBjaGFyICpzdHIpCit7CisJY2hhcgkqZW5kcHRyOworCWxvbmcJcmV0 ID0gc3RydG9sKHN0ciwgJmVuZHB0ciwgMCk7CisJaWYgKCplbmRwdHIgIT0gJ1wwJykgewor CQlmcHJpbnRmKHN0ZGVyciwgIltlcnJvcl0gc3RydG9sKCkgZmFpbGVkOiBwYXJzZSBlcnJv cjogJXNcbiIsIGVuZHB0cik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGVycm5vID09IEVS QU5HRSkKKwkJZnByaW50ZihzdGRlcnIsICJbd2FybmluZ10gc3RydG9sKCkgb3V0IG9mIHJh bmdlXG4iKTsKKworCWlmIChyZXQgPiBJTlRfTUFYIHx8IHJldCA8IElOVF9NSU4pIHsKKwkJ ZnByaW50ZihzdGRlcnIsICJbd2FybmluZ10gcGFyc2VfaW50KCkgb3V0IG9mIHJhbmdlXG4i KTsKKwkJcmV0ID0gKHJldCA+IDApID8gSU5UX01BWCA6IElOVF9NSU47CisJfQorCisJcmV0 dXJuIChpbnQpIHJldDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor eworCWNoYXIJKm1lbTsKKwlpbnQJCXBhZ2Vfc2l6ZSA9IG51bWFfcGFnZXNpemUoKTsKKwlp bnQJCW5vZGUgPSAwOworCWludAkJbnJfcGFnZXMgPSBERUZBVUxUX05SX1BBR0VTOworCisJ aWYgKG51bWFfYXZhaWxhYmxlKCkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAibnVtYSBp cyBub3QgYXZhaWxhYmxlIik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGFyZ2MgPiAxKQor CQlub2RlID0gcGFyc2VfaW50KGFyZ3ZbMV0pOworCWlmIChhcmdjID4gMikKKwkJbnJfcGFn ZXMgPSBwYXJzZV9pbnQoYXJndlsyXSk7CisJCisJbWVtID0gbnVtYV9hbGxvY19vbm5vZGUo cGFnZV9zaXplLCBub2RlKTsKKworCS8qIFN0b3JlIHRoZSBwb2xpY3kgb2YgdGhlIG5ld2x5 IGFsbG9jYXRlZCBhcmVhICovCisJdW5zaWduZWQgbG9uZwlub2RlbWFzazsKKwlpbnQJCQkJ bW9kZTsKKwlpbnQJCQkJbnJfbm9kZXMgPSBudW1hX251bV9wb3NzaWJsZV9ub2RlcygpOwor CWlmIChnZXRfbWVtcG9saWN5KCZtb2RlLCAmbm9kZW1hc2ssIG5yX25vZGVzLCBtZW0sCisJ CQkJCSAgTVBPTF9GX05PREUgfCBNUE9MX0ZfQUREUikgPCAwKSB7CisJCXBlcnJvcigiZ2V0 X21lbXBvbGljeSgpIGZhaWxlZCIpOworCQlleGl0KDEpOworCX0KKworCS8qIFByaW50IHNv bWUgaW5mbyAqLworCXByaW50ZigiUGFnZSBzaXplOiAlZFxuIiwgcGFnZV9zaXplKTsKKwlw cmludGYoIlBhZ2VzIHJlYWxsb2MnZWQ6ICVkXG4iLCBucl9wYWdlcyk7CisJcHJpbnRmKCJB bGxvY2F0ZSBkYXRhIGluIG5vZGU6ICVkXG4iLCBub2RlKTsKKworCS8qIFJlcXVlc3QgcGFn ZXMgdW50aWwgYSByZWFsbG9jIG1vdmVzIHRoZSBkYXRhICovCisJaW50IGk7CisJaW50IG5y X2lucGxhY2UgPSAwOworCWludCBucl9tb3ZlZCAgID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwg bnJfcGFnZXM7IGkrKykgeworCQkvKiBFbmxhcmdlIG1lbSB3aXRoIG9uZSBtb3JlIHBhZ2Ug Ki8KKyNpZmRlZiBURVNUX1JFQUxMT0NfT05OT0RFCisJCWNoYXIJKm5ld19tZW0gPSBudW1h X3JlYWxsb2Nfb25ub2RlKG1lbSwKKwkJCQkJCQkJCQkJICAgKGkrMSkqcGFnZV9zaXplLAor CQkJCQkJCQkJCQkgICAoaSsyKSpwYWdlX3NpemUsIG5vZGUpOworI2Vsc2UKKwkJY2hhcgkq bmV3X21lbSA9IG51bWFfcmVhbGxvYyhtZW0sIChpKzEpKnBhZ2Vfc2l6ZSwgKGkrMikqcGFn ZV9zaXplKTsKKyNlbmRpZgorCQlpZiAoIW5ld19tZW0pIHsKKwkJCXBlcnJvcigibnVtYV9y ZWFsbG9jKCkgZmFpbGVkIik7CisJCQlleGl0KDEpOworCQl9CisKKwkJaWYgKG5ld19tZW0g PT0gbWVtKQorCQkJKytucl9pbnBsYWNlOworCQllbHNlCisJCQkrK25yX21vdmVkOworCQlt ZW0gPSBuZXdfbWVtOworCisJCS8qIENoZWNrIHRoZSBwb2xpY3kgb2YgdGhlIHJlYWxsb2Mn ZWQgYXJlYSAqLworCQl1bnNpZ25lZCBsb25nCXJlYWxsb2Nfbm9kZW1hc2s7CisJCWludAkJ CQlyZWFsbG9jX21vZGU7CisJCWlmIChnZXRfbWVtcG9saWN5KCZyZWFsbG9jX21vZGUsICZy ZWFsbG9jX25vZGVtYXNrLAorCQkJCQkJICBucl9ub2RlcywgbWVtLCBNUE9MX0ZfTk9ERSB8 IE1QT0xfRl9BRERSKSA8IDApIHsKKwkJCXBlcnJvcigiZ2V0X21lbXBvbGljeSgpIGZhaWxl ZCIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWFzc2VydChyZWFsbG9jX25vZGVtYXNrID09 IG5vZGVtYXNrICYmCisJCQkgICByZWFsbG9jX21vZGUgPT0gbW9kZSAmJiAicG9saWN5IGNo YW5nZWQiKTsKKwl9CisKKwkvKiBTaHJpbmsgdG8gdGhlIG9yaWdpbmFsIHNpemUgKi8KKyNp ZmRlZiBURVNUX1JFQUxMT0NfT05OT0RFCisJbWVtID0gbnVtYV9yZWFsbG9jX29ubm9kZSht ZW0sIChucl9wYWdlcyArIDEpKnBhZ2Vfc2l6ZSwgcGFnZV9zaXplLCBub2RlKTsKKyNlbHNl CisJbWVtID0gbnVtYV9yZWFsbG9jKG1lbSwgKG5yX3BhZ2VzICsgMSkqcGFnZV9zaXplLCBw YWdlX3NpemUpOworI2VuZGlmCQorCWlmICghbWVtKSB7CisJCXBlcnJvcigibnVtYV9yZWFs bG9jKCkgZmFpbGVkIik7CisJCWV4aXQoMSk7CisJfQorCisJbnVtYV9mcmVlKG1lbSwgcGFn ZV9zaXplKTsKKwlwcmludGYoIkluLXBsYWNlIHJlYWxsb2NzOiAlZFxuIiwgbnJfaW5wbGFj ZSk7CisJcHJpbnRmKCJNb3ZlZCByZWFsbG9jczogJWRcbiIsIG5yX21vdmVkKTsKKwlyZXR1 cm4gMDsKK30KZGlmZiAtdXJOIG51bWFjdGwtMi4wLjYtb3JpZy92ZXJzaW9ucy5sZHNjcmlw dCBudW1hY3RsLTIuMC42L3ZlcnNpb25zLmxkc2NyaXB0Ci0tLSBudW1hY3RsLTIuMC42LW9y aWcvdmVyc2lvbnMubGRzY3JpcHQJMjAxMS0wMS0wMyAxNTowOToyMy4wMDAwMDAwMDAgKzAy MDAKKysrIG51bWFjdGwtMi4wLjYvdmVyc2lvbnMubGRzY3JpcHQJMjAxMS0wMS0wMyAyMTow OToxMy4wMDAwMDAwMDAgKzAyMDAKQEAgLTg3LDYgKzg3LDggQEAKICAgICBudW1hX2FsbG9j X2ludGVybGVhdmVkX3N1YnNldDsKICAgICBudW1hX2FsbG9jX2xvY2FsOwogICAgIG51bWFf YWxsb2Nfb25ub2RlOworICAgIG51bWFfcmVhbGxvY19vbm5vZGU7CisgICAgbnVtYV9yZWFs bG9jOwogICAgIG51bWFfYWxsb2NhdGVfY3B1bWFzazsKICAgICBudW1hX2FsbG9jYXRlX25v ZGVtYXNrOwogICAgIG51bWFfYXZhaWxhYmxlOwo= --------------000902020807040507070209-- --------------enig1165BBE63BCDAA65F6422CEE 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) iEYEARECAAYFAk0iRhoACgkQHUHhfRemepz9mgCfb8OCa18cxZPYjPcW5Nam/m3u zaQAoMSj8QITrBMzXwlr8NN0kLRo+mfk =McAD -----END PGP SIGNATURE----- --------------enig1165BBE63BCDAA65F6422CEE--