From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: [PATCH 04/11] [XEN] NUMA memory allocation strategies Date: Sun, 4 Apr 2010 15:30:22 -0400 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e6d7dfa7534d9404836e3ec6 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --0016e6d7dfa7534d9404836e3ec6 Content-Type: text/plain; charset=ISO-8859-1 The patch implements the CONFINE/STRIPE/SPLIT NUMA allocation strategies : - CONFINE : Confine the VM memory allocation to a single node. As opposed to the current method of doing this in python, the patch implements this in libxc(along with other strategies) and with assurance that the memory actually comes from the selected node. - STRIPE : If the VM memory doesn't fit in a single node and if the VM is not compiled with guest-numa-support, the memory is allocated striped across a selected max-set of nodes. - SPLIT : If the VM memory doesn't fit in a single node and if the VM is compiled with guest-numa-support, the memory is allocated split (equally for now) from the min-set of nodes. The VM is then made aware of this NUMA allocation (virtual NUMA enlightenment). -dulloor Signed-off-by: Dulloor Rao --0016e6d7dfa7534d9404836e3ec6 Content-Type: text/x-patch; charset=US-ASCII; name="xen-04-node-mem-allocation.patch" Content-Disposition: attachment; filename="xen-04-node-mem-allocation.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g7m8r5az0 ZGlmZiAtciBjNjM2Mjg3ZWFiM2MgLXIgZDZiN2FiZjBkMmQ1IHRvb2xzL2xpYnhjL01ha2VmaWxl Ci0tLSBhL3Rvb2xzL2xpYnhjL01ha2VmaWxlCVR1ZSBNYXIgMzAgMjE6MTg6MjUgMjAxMCAtMDQw MAorKysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQlXZWQgTWFyIDMxIDE5OjM5OjU4IDIwMTAgLTA0 MDAKQEAgLTI1LDYgKzI1LDcgQEAKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX21lbV9ldmVudC5j CiBDVFJMX1NSQ1MteSAgICAgICArPSB4Y19tZW1fcGFnaW5nLmMKIENUUkxfU1JDUy15ICAgICAg ICs9IHhjX21lbXNoci5jCitDVFJMX1NSQ1MteSAgICAgICArPSB4Y19kb21fbnVtYS5jCiBDVFJM X1NSQ1MtJChDT05GSUdfWDg2KSArPSB4Y19wYWdldGFiLmMKIENUUkxfU1JDUy0kKENPTkZJR19M aW51eCkgKz0geGNfbGludXguYwogQ1RSTF9TUkNTLSQoQ09ORklHX1N1bk9TKSArPSB4Y19zb2xh cmlzLmMKZGlmZiAtciBjNjM2Mjg3ZWFiM2MgLXIgZDZiN2FiZjBkMmQ1IHRvb2xzL2xpYnhjL3hj X2RvbS5oCi0tLSBhL3Rvb2xzL2xpYnhjL3hjX2RvbS5oCVR1ZSBNYXIgMzAgMjE6MTg6MjUgMjAx MCAtMDQwMAorKysgYi90b29scy9saWJ4Yy94Y19kb20uaAlXZWQgTWFyIDMxIDE5OjM5OjU4IDIw MTAgLTA0MDAKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8eGVuL2xpYmVsZi9saWJlbGYuaD4K KyNpbmNsdWRlIDx4ZW4vbWVtb3J5Lmg+CiAKICNkZWZpbmUgSU5WQUxJRF9QMk1fRU5UUlkgICAo KHhlbl9wZm5fdCktMSkKIApAQCAtMTAyLDYgKzEwMyw3IEBACiAgICAgaW50IHhlbl92ZXJzaW9u OwogICAgIHhlbl9jYXBhYmlsaXRpZXNfaW5mb190IHhlbl9jYXBzOwogCisgICAgc3RydWN0IHhl bl9kb21haW5fbnVtYV9sYXlvdXQgKm51bWFfbGF5b3V0OwogICAgIC8qIGtlcm5lbCBsb2FkZXIs IGFyY2ggaG9va3MgKi8KICAgICBzdHJ1Y3QgeGNfZG9tX2xvYWRlciAqa2VybmVsX2xvYWRlcjsK ICAgICB2b2lkICpwcml2YXRlX2xvYWRlcjsKZGlmZiAtciBjNjM2Mjg3ZWFiM2MgLXIgZDZiN2Fi ZjBkMmQ1IHRvb2xzL2xpYnhjL3hjX2RvbV9jb3JlLmMKLS0tIGEvdG9vbHMvbGlieGMveGNfZG9t X2NvcmUuYwlUdWUgTWFyIDMwIDIxOjE4OjI1IDIwMTAgLTA0MDAKKysrIGIvdG9vbHMvbGlieGMv eGNfZG9tX2NvcmUuYwlXZWQgTWFyIDMxIDE5OjM5OjU4IDIwMTAgLTA0MDAKQEAgLTE5LDYgKzE5 LDcgQEAKIAogI2luY2x1ZGUgInhnX3ByaXZhdGUuaCIKICNpbmNsdWRlICJ4Y19kb20uaCIKKyNp bmNsdWRlICJ4Y19kb21fbnVtYS5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlYnVn Z2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwpAQCAtNjc4LDggKzY3OSwxMyBAQAogICAgICAgICAgICAgICAgICAgX19G VU5DVElPTl9fLCBtZW1fbWIsIG5yX3BhZ2VzLCAxIDw8IChwYWdlX3NoaWZ0LTEwKSk7CiAgICAg ZG9tLT50b3RhbF9wYWdlcyA9IG5yX3BhZ2VzOwogCi0gICAgeGNfZG9tX3ByaW50ZigiJXM6IDB4 JSIgUFJJcGZuICIgcGFnZXNcbiIsCi0gICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGRv bS0+dG90YWxfcGFnZXMpOworICAgIHhjX2RvbV9wcmludGYoIiVzOiAweCUiIFBSSXBmbiAiIHBh Z2VzXG4iLCBfX0ZVTkNUSU9OX18sIGRvbS0+dG90YWxfcGFnZXMpOworCisgICAgaWYgKHhjX3Nl dHVwX2RvbWFpbl9udW1hX2xheW91dChkb20pKQorICAgIHsKKyAgICAgICAgLyogSWdub3JlIHRo ZSBlcnJvciBhbmQgcHJvY2VlZCBhcyBub24tbnVtYSBndWVzdCAqLworICAgICAgICB4Y19kb21f cHJpbnRmKCIlczogeGNfc2V0dXBfZG9tYWluX2xheW91dCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05f Xyk7CisgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLXIgYzYzNjI4N2VhYjNjIC1yIGQ2 YjdhYmYwZDJkNSB0b29scy9saWJ4Yy94Y19kb21fbnVtYS5jCi0tLSAvZGV2L251bGwJVGh1IEph biAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3Rvb2xzL2xpYnhjL3hjX2RvbV9udW1hLmMJ V2VkIE1hciAzMSAxOTozOTo1OCAyMDEwIC0wNDAwCkBAIC0wLDAgKzEsNTEyIEBACisvKiBYRU4g R3Vlc3QgTlVNQSAobWVtb3J5IHBsYWNlbWVudCkgCisgKiBBdXRob3IgOiBEdWxsb29yIChkdWxs b29yQGdhdGVjaC5lZHUpICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ4Z19w cml2YXRlLmgiCisjaW5jbHVkZSAieGNfZG9tLmgiCisjaW5jbHVkZSAieGNfZG9tX251bWEuaCIK KworI2RlZmluZSBLQiAoMTAyNCkKKyNkZWZpbmUgTUIgKEtCICogS0IpCisKKyNkZWZpbmUgcGZu X3RvX3BhZGRyKHBmbikgKCh4ZW5fcGFkZHJfdCkocGZuKSA8PCBQQUdFX1NISUZUX1g4NikKKwor LyogbnVtYSBsYXlvdXQgc3RydWN0dXJlcyAqLworeGNfbWFjaGluZV9udW1hX2xheW91dF90IHBo eXNfbnVtYV9sYXlvdXQ7Cit4Y19kb21haW5fbnVtYV9sYXlvdXRfdCBwdl9udW1hX2xheW91dDsK Kwordm9pZCBkdW1wX2d1ZXN0X251bWFfbGF5b3V0KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwK KyAgICAgICAgICAgICAgICAgICAgICAgIHhjX2RvbWFpbl9udW1hX2xheW91dF90ICpsYXlvdXQp Cit7CisgICAgdW5zaWduZWQgaW50IGksIGo7CisgICAgY2hhciB2Y3B1bWFza1sxMjhdID0gIiI7 CisgICAgeGNfZG9tX3ByaW50ZigiJXMgY2FsbGVkIDpcbiBOVU1BLUxBWU9VVChEb20lZCkgOiB2 Y3B1cygldSksIHZub2RlcygldSkiLAorICAgICAgICBfX0ZVTkNUSU9OX18sIGRvbS0+Z3Vlc3Rf ZG9taWQsIGxheW91dC0+bWF4X3ZjcHVzLCBsYXlvdXQtPm1heF92bm9kZXMpOworICAgIHN3aXRj aCAobGF5b3V0LT50eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBYRU5fRE9NX05VTUFfQ09ORklO RUQ6CisgICAgICAgICAgICB4Y19kb21fcHJpbnRmKCIsIHR5cGUoQ09ORklORUQpXG4iKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFhFTl9ET01fTlVNQV9TUExJVDoKKyAgICAg ICAgICAgIHhjX2RvbV9wcmludGYoIiwgdHlwZShTUExJVClcbiIpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgWEVOX0RPTV9OVU1BX1NUUklQRUQ6CisgICAgICAgICAgICB4Y19k b21fcHJpbnRmKCIsIHR5cGUoU1RSSVBFRClcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB4Y19kb21fcHJpbnRmKCIsIHR5cGUoVU5ERUZJTkVE KVxuIik7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBsYXlvdXQtPm1heF92bm9kZXM7IGkr KykKKyAgICB7CisgICAgICAgIHN0cnVjdCB4ZW5fdm5vZGVfZGF0YSAqdm5vZGVfZGF0YSA9ICZs YXlvdXQtPnZub2RlX2RhdGFbaV07CisjaWYgMAorICAgICAgICB4Y19jcHVtYXNrX3NjbnByaW50 Zih2Y3B1bWFzaywgc2l6ZW9mKHZjcHVtYXNrKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICooKGNwdW1hc2tfdCAqKSZ2bm9kZV9kYXRhLT52Y3B1X21hc2spKTsKKyNlbmRpZgor ICAgICAgICB4Y19kb21fcHJpbnRmKCJ2bm9kZVsldV06bW5vZGUoJXUpLCBub2RlX25yX3BhZ2Vz KCVseCksIFwKKyAgICAgICAgICAgICAgICB2Y3B1X21hc2soJXMpXG4iLCB2bm9kZV9kYXRhLT52 bm9kZV9pZCwgdm5vZGVfZGF0YS0+bW5vZGVfaWQsCisgICAgICAgICAgICAgICAgdm5vZGVfZGF0 YS0+bnJfcGFnZXMsIHZjcHVtYXNrKTsKKyAgICB9CisKKyAgICB4Y19kb21fcHJpbnRmKCJ2bm9k ZSBkaXN0YW5jZXMgOlxuIik7CisgICAgZm9yIChpID0gMDsgaSA8IGxheW91dC0+bWF4X3Zub2Rl czsgaSsrKQorICAgICAgICB4Y19kb21fcHJpbnRmKCJcdHZub2RlWyV1XSIsIGkpOworICAgIGZv ciAoaSA9IDA7IGkgPCBsYXlvdXQtPm1heF92bm9kZXM7IGkrKykKKyAgICB7CisgICAgICAgIHhj X2RvbV9wcmludGYoIlxudm5vZGVbJXVdIiwgaSk7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBs YXlvdXQtPm1heF92bm9kZXM7IGorKykKKyAgICAgICAgICAgIHhjX2RvbV9wcmludGYoIlx0JXUi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC0+dm5vZGVfZGlzdGFuY2VbaSps YXlvdXQtPm1heF92bm9kZXMgKyBqXSk7CisgICAgICAgIHhjX2RvbV9wcmludGYoIlxuIik7Cisg ICAgfQorICAgIHJldHVybjsKK30KKworc3RhdGljIGludAoreGNfcmVhZF9tYWNoaW5lX251bWFf bGF5b3V0KGludCB4Y19oYW5kbGUsIHhjX21hY2hpbmVfbnVtYV9sYXlvdXRfdCAqbGF5b3V0KQor eworICAgIGludCByYywgaTsKKyAgICBzdHJ1Y3QgeGVubWVtX251bWFfb3AgbWVtb3A7CisKKyAg ICB4Y19kb21fcHJpbnRmKCIlczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCisgICAgbWVt c2V0KGxheW91dCwgMCwgc2l6ZW9mKCpsYXlvdXQpKTsKKworICAgIG1lbW9wLmNtZCA9IFhFTk1F TV9tYWNoaW5lX251bWFfbGF5b3V0OworICAgIG1lbW9wLnUubWluZm8ubWF4X25vZGVzID0gWENf TUFYX05PREVTOworICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKG1lbW9wLnUubWluZm8ubm9kZV9k aXN0YW5jZSwgbGF5b3V0LT5ub2RlX2Rpc3RhbmNlKTsKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRs ZShtZW1vcC51Lm1pbmZvLm5vZGVfZGF0YSwgbGF5b3V0LT5ub2RlX2RhdGEpOworCisgICAgcmMg PSAwOworICAgIGlmIChsb2NrX3BhZ2VzKCZtZW1vcCwgc2l6ZW9mKHN0cnVjdCB4ZW5tZW1fbnVt YV9vcCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrX3BhZ2Vz KGxheW91dCwgc2l6ZW9mKCpsYXlvdXQpKSkKKyAgICB7CisgICAgICAgIHJjID0gLTE7CisgICAg ICAgIFBFUlJPUigiQ291bGQgbm90IGxvY2sgbWVtb3J5IGZvciBYZW4gaHlwZXJjYWxsIik7Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICgocmMgPSB4Y19tZW1vcnlfb3AoeGNf aGFuZGxlLCBYRU5NRU1fbnVtYV9vcCwgJm1lbW9wKSkpCisgICAgeworICAgICAgICByYyA9IC0x OworICAgICAgICB4Y19kb21fcHJpbnRmKCIlczogWEVOTUVNX21hY2hpbmVfbnVtYV9sYXlvdXQg ZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBnb3RvIHVubG9jazsKKyAgICB9CisK KyAgICBsYXlvdXQtPm1heF9ub2RlcyA9IG1lbW9wLnUubWluZm8ubWF4X25vZGVzOworICAgIGZv ciAoaSA9IDA7IGkgPCBsYXlvdXQtPm1heF9ub2RlczsgaSsrKQorICAgIHsKKyAgICAgICAgeGNf ZG9tX3ByaW50ZigibW5vZGVbJWRdIDogc2l6ZSglbHUgTUIpLCBmcmVlKCVsdSBNQilcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC0+bm9kZV9kYXRhW2ldLm5vZGVf aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXlvdXQtPm5vZGVfZGF0YVtp XS5ub2RlX21lbXNpemUvTUIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGF5 b3V0LT5ub2RlX2RhdGFbaV0ubm9kZV9tZW1mcmVlL01CKSk7CisgICAgICAgIGxheW91dC0+bWVt c2l6ZSArPSBsYXlvdXQtPm5vZGVfZGF0YVtpXS5ub2RlX21lbXNpemU7CisgICAgICAgIGxheW91 dC0+bWVtZnJlZSArPSBsYXlvdXQtPm5vZGVfZGF0YVtpXS5ub2RlX21lbWZyZWU7CisgICAgfQor Cit1bmxvY2s6CisgICAgdW5sb2NrX3BhZ2VzKCZtZW1vcCwgc2l6ZW9mKHN0cnVjdCB4ZW5tZW1f bnVtYV9vcCkpOworb3V0OgorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludAoreGNfZ2V0 X21heF92Y3B1cyhpbnQgeGNfaGFuZGxlLCB1aW50MzJfdCBkb21pZCkKK3sKKyAgICBERUNMQVJF X0RPTUNUTDsKKyAgICBkb21jdGwuY21kID0gWEVOX0RPTUNUTF9nZXRkb21haW5pbmZvOworICAg IGRvbWN0bC5kb21haW4gPSAoZG9taWRfdClkb21pZDsKKyAgICByZXR1cm4gKChkb19kb21jdGwo eGNfaGFuZGxlLCAmZG9tY3RsKSA8IDApCisgICAgICAgICAgICA/IDAgOiAoZG9tY3RsLnUuZ2V0 ZG9tYWluaW5mby5tYXhfdmNwdV9pZCsxKSk7Cit9CisKKy8qIFN0YXRpYyBOVU1BIGRpc3RyaWJ1 dGlvbiA6CisgKiBHdWVzdCBub3QgY29tcGlsZWQgZm9yIE5VTUEgKG51bWFfa2VybmVsPTAgaW4g Y29uZmlnKQorICogWzFdIChtYXhfdm5vZGVzPT0xKSA9PiBDT05GSU5FRAorICogWzJdIChtYXhf dm5vZGVzPjEpID0+IFNUUklQRUQKKyAqIEd1ZXN0IGNvbXBpbGVkIGZvciBOVU1BIChudW1hX2tl cm5lbD0xIGluIGNvbmZpZykKKyAqIFsxXSAobWF4X3Zub2Rlcz09MSkgPT4gQ09ORklORUQgCisg KiBbMl0gKG1heF92bm9kZXM+MSAmJiBtYXhfdmNwdXM8bWF4X3Zub2RlcykgPT4gU1RSSVBFRCAK KyAqIFszXSAobWF4X3Zub2Rlcz4xICYmIG1heF92Y3B1cz5tYXhfdm5vZGVzKSA9PiBTUExJVAor ICogV2UgYWxsb2NhdGUgdGhlIG1lbW9yeSBmcm9tIHRvcCBub2RlIChub2RlIHdpdGggbWF4IGF2 YWlsIG1lbW9yeSkgZm9yCisgKiBOVU1BLWF3YXJlIGd1ZXN0cy4gRm9yIHRoZSBvdGhlciBndWVz dHMsIHdoZXRoZXIgb3Igbm90IGNvbXBpbGVkIHdpdGgKKyAqIE5VTUEsIHdlIGFsbG9jYXRlIGZy b20gYm90dG9tIG5vZGUgKG5vZGUgd2l0aCBtaW4gYXZhaWwgbWVtb3J5KS4gVGhpcworICogYWxs b3dzIGZvciBhIHN0YXRpYyB0ZWNobmlxdWUsIHdoZXJlIHRoZSBmcmFnbWVudGF0aW9uICh3aXRo aW4gYSBub2RlKQorICogY2FuIGJlIGtlcHQgdG8gbWluaW11bS4KKyAqCisgKiBEeW5hbWljIE5V TUEgZGlzdHJpYnV0aW9uIDoKKyAqIEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhbHNvIGFsbG93 IGZvciBkeW5hbWljIGJhbGFuY2luZyB0ZWNobmlxdWVzIC0KKyAqIG1pZ3JhdGlvbiBvZiBWTXMg YmV0d2VlbiBub2RlcyAtIHRvIHJlZHVjZSBzdHJpcGluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLgor ICovCisKKy8qIEFzc3VtaW5nIChudW1hX2tlcm5lbD09MSkgZm9yIG5vdyAKKyAqIFhYWDogV2Ug c2hvdWxkIHVzZSBhbiBlbGYteGVuLWZlYXR1cmUtbm90ZSBpbnN0ZWFkLCB3aGljaCBpcyAKKyAq IHNldCBiYXNlZCBvbiBDT05GSUdfTlVNQSBhbmQgQ09ORklHX05VTUFfRU1VCisgKi8KKworLyog Rm9yIHRoZSBudW1hLWF3YXJlIGd1ZXN0cywgd2Ugd291bGQgbGlrZSB0byBwcmVzZW50IGEgc3lt bWV0cmljYWwKKyAqIHRvcG9sb2d5IGluIHRlcm1zIG9mIHRoZSBkaXN0cmlidXRpb24gb2YgY29t cHV0aW5nIHJlc291cmNlcyBvdmVyIHRoZQorICogdmlydHVhbCBub2RlcyAob2YgbWVtb3J5KS4K KyAqIFdlIHJlcXVpcmUgdGhlIG51bWEtYXdhcmUgZ3Vlc3RzIHRvIGhhdmUgKDJebikgdmNwdXMs IHNvIHRoYXQKKyAqIHRoZSBkaXN0cmlidXRpb24gb3ZlciB0aGUgbm9kZXMgY2FuIGJlIGRvbmUg YXMgc3ltbWV0cmljYWxseQorICogYXMgcG9zc2libGUuIFdlIGZpbmQgdGhlIG1pbiAoMl5rKSBu b2RlcyB3aGljaCBjYW4gZml0IGluIGVudGlyZSAKKyAqIGRvbWFpbidzIG1lbW9yeS4gRWFjaCBv ZiB0aGUga21pbiBub2RlcyBhcmUgdGhlbiBhc3NpZ25lZCAyXihuLWspIHZjcHVzLAorICogd2hl cmUgKG4+PWspLiBPZmNvdXJzZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIGFueSBvdGhlciBkaXN0 cmlidXRpb24KKyAqIGJ5IGp1c3QgbW9kaWZ5aW5nIHRoZSBzZWxlY3Rpb24gZnVuY3Rpb24uCisg Ki8KKworc3RhdGljIHVpbnQ2NF90IG5vZGVfcGFnZXNfc2VsZWN0ZWRbWENfTUFYX05PREVTXTsK KworLyogVGhlIGZ1bmN0aW9uIG1ha2VzIGEgKGdyZWVkeSkgYmVzdCBmaXQgc2VsZWN0aW9uIG9m IG51bV92bm9kZXMgb2YKKyAqIHZub2RlX3NpemUgZWFjaC4gVGhlIG51bWJlciBvZiBwYWdlcyBz ZWxlY3RlZCBmcm9tIGVhY2ggbm9kZSBhcmUgcmV0dXJuZWQKKyAqIGluIHRoZSBub2RlX3BhZ2Vz X3NlbGVjdGVkIGFycmF5LgorICogVGhlIGJlc3RfZml0IHJhbmtpbmcgaXMgYmFzZWQgb24gdGhl IGZyYWN0aW9uKHVwIHRvIDEwMjQgcGFydHMpIG9mIG5vZGUKKyAqIG1lbW9yeSBvY2N1cGllZCwg aWYgdGhlIG5vZGUgaXMgc2VsZWN0ZWQuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgMSBp ZiBzZWxlY3Rpb24gZmFpbHMuICovCitzdGF0aWMgaW50IHhjX3NlbGVjdF9iZXN0X2ZpdF9ub2Rl cyh4Y19tYWNoaW5lX251bWFfbGF5b3V0X3QgKnBoeXNfbGF5b3V0LAorICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgbnVtX3Zub2RlcywgdWludDY0X3Qgdm5vZGVfcGFnZXMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgKm5vZGVzX3BhZ2VzLCB1aW50MzJfdCBw YWdlX3NoaWZ0KQoreworICAgIGludCBpLCBudW1fbm9kZXNfc2VsZWN0ZWQ7CisgICAgdWludDY0 X3QgYmVzdF9maXRfcmFuazsKKworICAgIHhjX2RvbV9wcmludGYoIiVzOiBjYWxsZWRcbiIsIF9f RlVOQ1RJT05fXyk7CisjZGVmaW5lIElOVkFMSURfTk9ERSAofjApCisjZGVmaW5lIE5PREVfRklU X1JBTktfU0hJRlQgKDEwKQorICAgIGJlc3RfZml0X3JhbmsgPSAwOworCisgICAgZG8geworICAg ICAgICBpbnQgc2VsZWN0ZWRfbm9kZSA9IElOVkFMSURfTk9ERTsKKyAgICAgICAgZm9yIChpPTA7 IGk8cGh5c19sYXlvdXQtPm1heF9ub2RlczsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBz dHJ1Y3QgeGVubWVtX25vZGVfZGF0YSAqbm9kZV9kYXRhOworICAgICAgICAgICAgdWludDY0X3Qg bm9kZV9zaXplcGFnZXMsIG5vZGVfZnJlZXBhZ2VzOworICAgICAgICAgICAgdWludDY0X3Qgbm9k ZV9maXRfcmFuazsKKworICAgICAgICAgICAgLyogTm9kZSBpcyBhbHJlYWR5IHNlbGVjdGVkICov CisgICAgICAgICAgICBpZiAobm9kZXNfcGFnZXNbaV0pCisgICAgICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgICAgIG5vZGVfZGF0YSA9ICZwaHlzX2xheW91dC0+bm9kZV9kYXRhW2ld OworICAgICAgICAgICAgbm9kZV9zaXplcGFnZXMgPSAobm9kZV9kYXRhLT5ub2RlX21lbXNpemUg Pj4gcGFnZV9zaGlmdCk7CisgICAgICAgICAgICBub2RlX2ZyZWVwYWdlcyA9IChub2RlX2RhdGEt Pm5vZGVfbWVtZnJlZSA+PiBwYWdlX3NoaWZ0KTsKKworICAgICAgICAgICAgaWYgKG5vZGVfZnJl ZXBhZ2VzIDwgdm5vZGVfcGFnZXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgICAgIG5vZGVfZml0X3JhbmsgPSAoKG5vZGVfc2l6ZXBhZ2VzLW5vZGVfZnJlZXBhZ2VzLXZu b2RlX3BhZ2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgTk9ERV9G SVRfUkFOS19TSElGVCkgLyBub2RlX3NpemVwYWdlczsKKworICAgICAgICAgICAgaWYgKG5vZGVf Zml0X3JhbmsgPiBiZXN0X2ZpdF9yYW5rKQorICAgICAgICAgICAgICAgIHNlbGVjdGVkX25vZGUg PSBpOworICAgICAgICB9CisKKyAgICAgICAgLyogTm9kZXMgY291bGQgbm90IGJlIHNlbGVjdGVk LiBCYWlsIG91dCAhICovCisgICAgICAgIGlmIChzZWxlY3RlZF9ub2RlID09IElOVkFMSURfTk9E RSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBub2Rlc19wYWdlc1tzZWxlY3Rl ZF9ub2RlXSA9IHZub2RlX3BhZ2VzOworICAgICAgICBudW1fbm9kZXNfc2VsZWN0ZWQrKzsKKyAg ICB9IHdoaWxlKG51bV9ub2Rlc19zZWxlY3RlZCA8IG51bV92bm9kZXMpOworI3VuZGVmIE5PREVf RklUX1JBTktfU0hJRlQKKyN1bmRlZiBJTlZBTElEX05PREUKKyAgICByZXR1cm4gMDsKK30KKwor LyogU29ydCB0aGUgcGh5cyBub2RlcyBpbiB0aGUgZGVjcmVhc2luZyBvcmRlciBvZiBmcmVlIG5v ZGUgbWVtb3J5ICovCitzdGF0aWMgdm9pZCB4Y19zb3J0X25vZGVsb2FkKHhjX21hY2hpbmVfbnVt YV9sYXlvdXRfdCAqcGh5c19sYXlvdXQpCit7CisgICAgaW50IGksIGo7CisgICAgdWludDMyX3Qg bWF4X25vZGVzOworCisgICAgbWF4X25vZGVzID0gcGh5c19sYXlvdXQtPm1heF9ub2RlczsKKwor ICAgIGZvciAoaSA9IDA7IGkgPCBtYXhfbm9kZXM7IGkrKykKKyAgICB7CisgICAgICAgIHVpbnQ2 NF90IGlfbm9kZV9tZW1mcmVlID0gcGh5c19sYXlvdXQtPm5vZGVfZGF0YVtpXS5ub2RlX21lbWZy ZWU7IAorICAgICAgICBmb3IgKGogPSBpKzE7IGogPCBtYXhfbm9kZXM7IGorKykKKyAgICAgICAg eworICAgICAgICAgICAgdWludDY0X3Qgal9ub2RlX21lbWZyZWUgPSBwaHlzX2xheW91dC0+bm9k ZV9kYXRhW2pdLm5vZGVfbWVtZnJlZTsgCisgICAgICAgICAgICBpZiAoaV9ub2RlX21lbWZyZWUg PiBqX25vZGVfbWVtZnJlZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qg eGVubWVtX25vZGVfZGF0YSB0bXBfbm9kZV9kYXRhOworICAgICAgICAgICAgICAgIHRtcF9ub2Rl X2RhdGEgPSBwaHlzX2xheW91dC0+bm9kZV9kYXRhW2ldOworICAgICAgICAgICAgICAgIHBoeXNf bGF5b3V0LT5ub2RlX2RhdGFbaV0gPSBwaHlzX2xheW91dC0+bm9kZV9kYXRhW2pdOworICAgICAg ICAgICAgICAgIHBoeXNfbGF5b3V0LT5ub2RlX2RhdGFbal0gPSB0bXBfbm9kZV9kYXRhOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisvKiBUaGUg ZnVuY3Rpb24gc2VsZWN0cyB0aGUgbm9kZXMgaW4gdGhlIGluY3JlYXNpbmcgb3JkZXIgb2YgZnJl ZSBub2RlIG1lbW9yeSwKKyAqIGFuZCBmaWxscyB0aGVtLiBUaGUgcGh5c2ljYWwgbWVtb3J5IG1h cCBmb3Igc3VjaCBhIGRvbWFpbiBpcyBzdHJpcGVkIAorICogYWNyb3NzIGFsbCB0aGUgc2VsZWN0 ZWQgbm9kZXMuIAorICogVGhlIHBoeXNfbGF5b3V0IG5vZGVfZGF0YSBzdHJ1Y3R1cmVzIGNvdWxk IGJlIHNvcnRlZCBpbnBsYWNlLiBTbywgd2UgCisgKiBzaG91bGQgYWx3YXlzIHVzZSBub2RlX2Rh dGEtPm5vZGVfaWQgd2hpbGUgdXNpbmcgdGhlIG5vZGVfZGlzdGFuY2UgYXJyYXkuICovCisjZGVm aW5lIFhDX05PREVfTUlOX0ZSRUVTSVpFICAgICg2NCAqIE1CKQorc3RhdGljIGludCB4Y19zZWxl Y3RfbWF4X2ZpdF9ub2Rlcyh4Y19tYWNoaW5lX251bWFfbGF5b3V0X3QgKnBoeXNfbGF5b3V0LAor ICAgICAgICB1aW50NjRfdCBwdl9kb21fcGFnZXMsIHVpbnQ2NF90ICpub2RlX3BhZ2VzLCB1aW50 MzJfdCBwYWdlX3NoaWZ0KQoreworICAgIGludCBpOworICAgIHVpbnQ2NF90IHB2X2FsbG9jX3Bh Z2VzOworCisgICAgeGNfZG9tX3ByaW50ZigiJXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsK KyAgICB4Y19zb3J0X25vZGVsb2FkKHBoeXNfbGF5b3V0KTsKKworICAgIHB2X2FsbG9jX3BhZ2Vz ID0gMDsKKyAgICBmb3IgKGk9MDsgaTxwaHlzX2xheW91dC0+bWF4X25vZGVzOyBpKyspCisgICAg eworICAgICAgICBzdHJ1Y3QgeGVubWVtX25vZGVfZGF0YSAqbm9kZV9kYXRhOworICAgICAgICB1 aW50NjRfdCBub2RlX2ZyZWVwYWdlcywgbm9kZV9tZW1mcmVlOworCisgICAgICAgIG5vZGVfZGF0 YSA9ICZwaHlzX2xheW91dC0+bm9kZV9kYXRhW2ldOworCisgICAgICAgIC8qIEluIG1heC1maXQs IGlmIHdlIHRyeSB0byBwYWNrIHRoZSBub2RlcyB0b28gYWdncmVzc2l2ZWx5CisgICAgICAgICAq IHdlIG1pZ2h0IGZhaWwgb24gYW55IHNtYWxsIGFsbG9jYXRpb24gKGZyb20geGVuIG5vZGUgaGVh cHMpICovCisgICAgICAgIG5vZGVfbWVtZnJlZSA9IG5vZGVfZGF0YS0+bm9kZV9tZW1mcmVlOwor ICAgICAgICBpZiAobm9kZV9tZW1mcmVlIDw9IFhDX05PREVfTUlOX0ZSRUVTSVpFKQorICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIG5vZGVfbWVtZnJlZSAtPSBYQ19OT0RFX01JTl9GUkVF U0laRTsKKworICAgICAgICBub2RlX2ZyZWVwYWdlcyA9IChub2RlX21lbWZyZWUgPj4gcGFnZV9z aGlmdCk7CisgICAgICAgIGlmICghbm9kZV9mcmVlcGFnZXMpCisgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICBpZiAobm9kZV9mcmVlcGFnZXMgPiAocHZfZG9tX3BhZ2VzLXB2X2FsbG9j X3BhZ2VzKSkKKyAgICAgICAgICAgIG5vZGVfZnJlZXBhZ2VzID0gKHB2X2RvbV9wYWdlcy1wdl9h bGxvY19wYWdlcyk7CisKKyAgICAgICAgbm9kZV9wYWdlc1tpXSA9IG5vZGVfZnJlZXBhZ2VzOwor ICAgICAgICBwdl9hbGxvY19wYWdlcyArPSBub2RlX2ZyZWVwYWdlczsKKyAgICB9CisKKyAgICBp ZiAocHZfYWxsb2NfcGFnZXMgIT0gcHZfZG9tX3BhZ2VzKQorICAgIHsKKyAgICAgICAgeGNfZG9t X3ByaW50ZigKKyAgICAgICAgICAgICAgICAiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnku IE1heWJlIGhhZCB0byBiYWxsb29uIG1vcmVcbiIsCisgICAgICAgICAgICAgICAgX19GVU5DVElP Tl9fKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworCisgICAgcmV0dXJuIDA7Cit9CisK Ky8qIFBvbGljaWVzIGZvciBub2RlIHNlbGVjdGlvbiBuZWVkIG1vcmUgcmVzZWFyY2gvZXhwZXJp ZW5jZS4KKyAqIEFsc28sIGxpdmUgbWlncmF0aW9uIG9mIHRoZSBWTXMgKHRvIG90aGVyIG5vZGVz KSBjb3VsZCBwcm92aWRlIAorICogcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcgYWNyb3NzIHRoZSBu b2Rlcy4gKi8KKyNkZWZpbmUgWENfVk5PREVfTUlOX1NJWkUgKDEyOCAqIE1CKQorc3RhdGljIGlu dCB4Y19zZWxlY3RfZG9tYWluX3Zub2RlcyhzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20sCisgICAg eGNfbWFjaGluZV9udW1hX2xheW91dF90ICpwaHlzX2xheW91dCwgeGNfZG9tYWluX251bWFfbGF5 b3V0X3QgKnB2X2xheW91dCkKK3sKKyAgICBpbnQgaTsKKyAgICB1aW50MzJfdCBwYWdlX3NoaWZ0 LCBudW1hX3N0cmF0ZWd5OworICAgIHhlbl9wZm5fdCBwdl9kb21fcGFnZXM7CisKKyAgICBwdl9k b21fcGFnZXMgPSBkb20tPnRvdGFsX3BhZ2VzOworICAgIHBhZ2Vfc2hpZnQgPSBYQ19ET01fUEFH RV9TSElGVChkb20pOworCisgICAgaWYgKHB2X2RvbV9wYWdlcyA+IChwaHlzX2xheW91dC0+bWVt ZnJlZSA+PiBwYWdlX3NoaWZ0KSkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wcmludGYoCisgICAg ICAgICAgICAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5IGZvciBwdiAodW5saWtlbHkgYWZ0ZXIgYmFs bG9vbiBjaGVja3MpXG4iLAorICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgICAg IHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBBdHRlbXB0IHRvIGNvbmZpbmUgdGhlIFZNIG9y IHNwbGl0IHRoZSBndWVzdCAoYW5kIG1ha2UgaXQgbnVtYSBhd2FyZSkgKi8KKyAgICBmb3IgKGkg PSAxOyBpIDw9IHBoeXNfbGF5b3V0LT5tYXhfbm9kZXM7IGk8PD0xKQorICAgIHsKKyAgICAgICAg dWludDY0X3Qgdm5vZGVfc2l6ZV9wYWdlczsKKworICAgICAgICBtZW1zZXQobm9kZV9wYWdlc19z ZWxlY3RlZCwgMCwgc2l6ZW9mKG5vZGVfcGFnZXNfc2VsZWN0ZWQpKTsKKworICAgICAgICB2bm9k ZV9zaXplX3BhZ2VzID0gcHZfZG9tX3BhZ2VzL2k7CisgICAgICAgIGlmICgodm5vZGVfc2l6ZV9w YWdlcyA8PCBwYWdlX3NoaWZ0KSA8IFhDX1ZOT0RFX01JTl9TSVpFKQorICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgaWYgKCF4Y19zZWxlY3RfYmVzdF9maXRfbm9kZXMocGh5c19sYXlvdXQs IGksIHZub2RlX3NpemVfcGFnZXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBub2RlX3BhZ2VzX3NlbGVjdGVkLCBwYWdlX3NoaWZ0KSkKKyAgICAgICAgewor ICAgICAgICAgICAgaWYgKGkgPiAxKQorICAgICAgICAgICAgICAgIG51bWFfc3RyYXRlZ3kgPSBY RU5fRE9NX05VTUFfU1BMSVQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbnVt YV9zdHJhdGVneSA9IFhFTl9ET01fTlVNQV9DT05GSU5FRDsKKyAgICAgICAgICAgIGdvdG8gc2Vs ZWN0aW9uX2RvbmU7CisgICAgICAgIH0KKyAgICAKKyAgICB9CisKKyAgICAvKiBUaGUgb3JkZXIg b2Ygbm9kZXMgaW4gcGh5c19sYXlvdXQgY291bGQgY2hhbmdlICovCisgICAgbWVtc2V0KG5vZGVf cGFnZXNfc2VsZWN0ZWQsIDAsIHNpemVvZihub2RlX3BhZ2VzX3NlbGVjdGVkKSk7CisgICAgaWYg KCF4Y19zZWxlY3RfbWF4X2ZpdF9ub2RlcyhwaHlzX2xheW91dCwgcHZfZG9tX3BhZ2VzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9wYWdlc19zZWxlY3RlZCwgcGFn ZV9zaGlmdCkpCisgICAgeworICAgICAgICBudW1hX3N0cmF0ZWd5ID0gWEVOX0RPTV9OVU1BX1NU UklQRUQ7CisgICAgICAgIGdvdG8gc2VsZWN0aW9uX2RvbmU7CisgICAgfQorCisgICAgeGNfZG9t X3ByaW50ZigKKyAgICAgICAgIiVzOiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgcHYgKEhhZCB0byBi YWxsb29uIG1vcmUgPylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOworICAgIHJldHVybiAtMTsKKwor c2VsZWN0aW9uX2RvbmU6CisKKyAgICBwdl9sYXlvdXQtPnZlcnNpb24gPSBYRU5fRE9NX05VTUFf SU5URVJGQUNFX1ZFUlNJT047CisgICAgcHZfbGF5b3V0LT50eXBlID0gbnVtYV9zdHJhdGVneTsK KworICAgIGlmICghKHB2X2xheW91dC0+bWF4X3ZjcHVzID0KKyAgICAgICAgICAgICAgICB4Y19n ZXRfbWF4X3ZjcHVzKGRvbS0+Z3Vlc3RfeGMsIGRvbS0+Z3Vlc3RfZG9taWQpKSkKKyAgICB7Cisg ICAgICAgIHhjX2RvbV9wcmludGYoIiVzOiB4Y19nZXRfbWF4X3ZjcHVzIGZhaWxlZCAhXG4iLCBf X0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gLTE7IAorICAgIH0KKworICAgIGZvciAoaSA9 IDA7IGkgPCBwaHlzX2xheW91dC0+bWF4X25vZGVzOyBpKyspCisgICAgeworICAgICAgICBzdHJ1 Y3QgeGVubWVtX25vZGVfZGF0YSAqbm9kZV9kYXRhOworICAgICAgICBzdHJ1Y3QgeGVuX3Zub2Rl X2RhdGEgKnZub2RlX2RhdGE7CisgICAgICAgIHVpbnQzMl90IHZub2RlX2lkOworCisgICAgICAg IGlmICghbm9kZV9wYWdlc19zZWxlY3RlZFtpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg ICAgICAgIG5vZGVfZGF0YSA9ICZwaHlzX2xheW91dC0+bm9kZV9kYXRhW2ldOworICAgICAgICB2 bm9kZV9pZCA9IHB2X2xheW91dC0+bWF4X3Zub2RlczsKKyAgICAgICAgdm5vZGVfZGF0YSA9ICZw dl9sYXlvdXQtPnZub2RlX2RhdGFbdm5vZGVfaWRdOworICAgICAgICB2bm9kZV9kYXRhLT52bm9k ZV9pZCA9IHZub2RlX2lkOworICAgICAgICB2bm9kZV9kYXRhLT5ucl9wYWdlcyA9IG5vZGVfcGFn ZXNfc2VsZWN0ZWRbaV07CisgICAgICAgIHZub2RlX2RhdGEtPm1ub2RlX2lkID0gbm9kZV9kYXRh LT5ub2RlX2lkOworCisgICAgICAgIHB2X2xheW91dC0+bWF4X3Zub2RlcysrOworICAgICAgICAv KiB2bm9kZV9kYXRhLT52Y3B1X21hc2sgaXMgc2V0IGxhdGVyIHdoZW4gZGlzdHJpYnV0aW5nIHRo ZQorICAgICAgICAgKiB2Y3B1cyBvdmVyIHZub2RlcyBhbmQgYXNzaWduaW5nIGFmZmluaXRpZXMg Ki8KKyAgICB9CisKKyAgICBkb20tPm51bWFfbGF5b3V0ID0gcHZfbGF5b3V0OworICAgIHJldHVy biAwOworfQorCitpbnQgeGNfc2V0dXBfZG9tYWluX251bWFfbGF5b3V0KHN0cnVjdCB4Y19kb21f aW1hZ2UgKmRvbSkKK3sKKyAgICBpbnQgeGNfaGFuZGxlOworICAgIHhjX21hY2hpbmVfbnVtYV9s YXlvdXRfdCAqcGh5c19sYXlvdXQ7CisgICAgeGNfZG9tYWluX251bWFfbGF5b3V0X3QgKnB2X2xh eW91dDsKKworICAgIHhjX2RvbV9wcmludGYoIiVzOiBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7 CisKKyAgICB4Y19oYW5kbGUgPSBkb20tPmd1ZXN0X3hjOworICAgIHBoeXNfbGF5b3V0ID0gJnBo eXNfbnVtYV9sYXlvdXQ7CisKKyAgICBpZiAoeGNfcmVhZF9tYWNoaW5lX251bWFfbGF5b3V0KHhj X2hhbmRsZSwgcGh5c19sYXlvdXQpKQorICAgIHsKKyAgICAgICAgeGNfZG9tX3ByaW50ZiggIiVz OiB4Y19yZWFkX21hY2hpbmVfbnVtYV9sYXlvdXQgZmFpbGVkXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9f KTsKKyAgICAgICAgcmV0dXJuIC0xOyAKKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBwdl9udW1h X2xheW91dCBkeW5hbWljYWxseSBmb3IgVk1zICovCisgICAgcHZfbGF5b3V0ID0gJnB2X251bWFf bGF5b3V0OworICAgIG1lbXNldChwdl9sYXlvdXQsIDAsIHNpemVvZigqcHZfbGF5b3V0KSk7CisK KyAgICBpZiAoeGNfc2VsZWN0X2RvbWFpbl92bm9kZXMoZG9tLCBwaHlzX2xheW91dCwgcHZfbGF5 b3V0KSkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wcmludGYoIiVzOiB4Y19zZWxlY3RfZG9tYWlu X3Zub2RlcyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgICBkdW1wX2d1ZXN0X251bWFfbGF5b3V0KGRvbSwgcHZfbGF5b3V0KTsKKyAgICAv KiBwdl9sYXlvdXQgaXMgdXNlZCBvbmx5IHRlbXBvcmFyaWx5IC0gWEVOTUVNX251bWFfb3AgdG8g c2V0IHRoZSAKKyAgICAgKiBudW1hX2xheW91dCBmb3IgdGhlIGRvbWFpbiAqLworICAgIHJldHVy biAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG5vZGUgbG9va3VwIGZvciBtZm5zICov CisjZGVmaW5lIE5VTUFfTk9fTk9ERSAweEZGCisjZGVmaW5lIE1FTU5PREVfQlVGU0laRSAoUEFH RV9TSVpFKQorCitzdGF0aWMgdWludDhfdCBtZW1ub2RlX2J1ZltNRU1OT0RFX0JVRlNJWkVdOwor CitzdGF0aWMgaW50IG1mbl90b19uaWQoc3RydWN0IHhlbm1lbV9tYWNoaW5lX25vZGVtYXAgKm1l bW5vZGUsIHhlbl9wZm5fdCBtZm4pCit7IAorCXVuc2lnbmVkIG5pZDsKKyAgICB1aW50OF90ICpt ZW1ub2RlX21hcDsKKyAgICB4ZW5fcGFkZHJfdCBhZGRyOworCisgICAgYWRkciA9IHBmbl90b19w YWRkcihtZm4pOworCWlmKChhZGRyID4+IG1lbW5vZGUtPnNoaWZ0KSA+PSBtZW1ub2RlLT5tYXBz aXplKQorICAgIHsKKyAgICAgICAgeGNfZG9tX3ByaW50ZigiKGFkZHIoJWx4KSA+PiBtZW1ub2Rl X3NoaWZ0KSA+PSBOT0RFTUFQU0laRSIsIGFkZHIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9 CisgICAgZ2V0X3hlbl9ndWVzdF9oYW5kbGUobWVtbm9kZV9tYXAsIG1lbW5vZGUtPm1hcCk7CisJ bmlkID0gbWVtbm9kZV9tYXBbYWRkciA+PiBtZW1ub2RlLT5zaGlmdF07IAorCXJldHVybiBuaWQ7 IAorfQorCitpbnQgeGNfZG9tYWluX25vZGVtZW1fZGlzdHJpYnV0aW9uKHN0cnVjdCB4Y19kb21f aW1hZ2UgKmRvbSkKK3sKKyAgICBpbnQgeGNfaGFuZGxlOworICAgIGludCByYywgbmlkLCBiYWRf bmlkOworICAgIHhlbl9wZm5fdCAqcDJtLCBwZm4sIG1heF9wZm47CisgICAgdWludDMyX3Qgbm9k ZVtYQ19NQVhfTk9ERVNdOworICAgIHN0cnVjdCB4ZW5tZW1fbnVtYV9vcCBtZW1vcDsKKworICAg IHhjX2RvbV9wcmludGYoIiVzOiBub2RlbWVtIGRpc3RyaWJ1dGlvbiBmb3IgZG9tYWluICVkXG4i LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18s IGRvbS0+Z3Vlc3RfZG9taWQpOworCisgICAgeGNfaGFuZGxlID0gZG9tLT5ndWVzdF94YzsKKyAg ICBwMm0gPSBkb20tPnAybV9ob3N0OworICAgIG1heF9wZm4gPSBkb20tPnRvdGFsX3BhZ2VzOwor CisgICAgbWVtb3AuY21kID0gWEVOTUVNX21hY2hpbmVfbm9kZW1hcDsKKyAgICBtZW1vcC51Lm1u b2RlbWFwLmJ1ZnNpemUgPSBNRU1OT0RFX0JVRlNJWkU7CisgICAgbWVtc2V0KG1lbW5vZGVfYnVm LCBOVU1BX05PX05PREUsIE1FTU5PREVfQlVGU0laRSk7CisgICAgc2V0X3hlbl9ndWVzdF9oYW5k bGUobWVtb3AudS5tbm9kZW1hcC5tYXAsIG1lbW5vZGVfYnVmKTsKKworICAgIGlmICggbG9ja19w YWdlcygmbWVtb3AsIHNpemVvZihzdHJ1Y3QgeGVubWVtX251bWFfb3ApKSB8fAorICAgICAgICAg ICAgbG9ja19wYWdlcyhtZW1ub2RlX2J1ZiwgTUVNTk9ERV9CVUZTSVpFKSkKKyAgICB7CisgICAg ICAgIHJjID0gLTE7CisgICAgICAgIFBFUlJPUigiQ291bGQgbm90IGxvY2sgbWVtb3J5IGZvciBY ZW4gaHlwZXJjYWxsIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICgocmMg PSB4Y19tZW1vcnlfb3AoeGNfaGFuZGxlLCBYRU5NRU1fbnVtYV9vcCwgJm1lbW9wKSkpCisgICAg eworICAgICAgICByYyA9IC0xOworICAgICAgICB4Y19kb21fcHJpbnRmKCIlczogWEVOTUVNX21l bW5vZGVfbWFwIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgZ290byB1bmxvY2s7 CisgICAgfQorCisgICAgYmFkX25pZCA9IDA7CisgICAgZm9yIChuaWQ9MDsgbmlkPFhDX01BWF9O T0RFUzsgbmlkKyspCisgICAgICAgIG5vZGVbbmlkXSA9IDA7CisgICAgZm9yIChwZm49MDsgcGZu PG1heF9wZm47IHBmbisrKQorICAgIHsKKyAgICAgICAgaW50IG5pZCA9IG1mbl90b19uaWQoJm1l bW9wLnUubW5vZGVtYXAsIHAybVtwZm5dKTsKKyAgICAgICAgaWYgKChuaWQgPCAwKSB8fCAobmlk ID49IFhDX01BWF9OT0RFUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhZF9uaWQrKzsKKyAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIG5vZGVbbmlkXSsrOworICAg IH0KKyAgICBmb3IgKG5pZD0wOyBuaWQ8WENfTUFYX05PREVTOyBuaWQrKykKKyAgICB7CisgICAg ICAgIGlmIChub2RlW25pZF0pCisgICAgICAgICAgICB4Y19kb21fcHJpbnRmKCJub2RlWyVkXSA9 ICV1XG4iLCBuaWQsIG5vZGVbbmlkXSk7CisgICAgfQorICAgIHhjX2RvbV9wcmludGYoImJhZCBu b2RlID0gJXVcbiIsYmFkX25pZCk7CisKKyAgICByYyA9IDA7Cit1bmxvY2s6CisgICAgdW5sb2Nr X3BhZ2VzKCZtZW1vcCwgc2l6ZW9mKHN0cnVjdCB4ZW5tZW1fbnVtYV9vcCkpOworICAgIHVubG9j a19wYWdlcyhtZW1ub2RlX2J1ZiwgTUVNTk9ERV9CVUZTSVpFKTsKK291dDoKKyAgICByZXR1cm4g cmM7Cit9CisKZGlmZiAtciBjNjM2Mjg3ZWFiM2MgLXIgZDZiN2FiZjBkMmQ1IHRvb2xzL2xpYnhj L3hjX2RvbV9udW1hLmgKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAw MDAKKysrIGIvdG9vbHMvbGlieGMveGNfZG9tX251bWEuaAlXZWQgTWFyIDMxIDE5OjM5OjU4IDIw MTAgLTA0MDAKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX1hDX0RPTV9OVU1BX0gKKyNkZWZp bmUgX19YQ19ET01fTlVNQV9ICisKKyNkZWZpbmUgWENfTUFYX05PREVTIDgKKworc3RydWN0IHhj X21hY2hpbmVfbnVtYV9sYXlvdXQgeworICAgIHVpbnQ2NF90IG1lbXNpemU7CisgICAgdWludDY0 X3QgbWVtZnJlZTsKKworICAgIHVpbnQzMl90IG1heF9ub2RlczsKKyAgICB1aW50MzJfdCBub2Rl X2Rpc3RhbmNlW1hDX01BWF9OT0RFUypYQ19NQVhfTk9ERVNdOworICAgIHN0cnVjdCB4ZW5tZW1f bm9kZV9kYXRhIG5vZGVfZGF0YVtYQ19NQVhfTk9ERVNdOworfTsKK3R5cGVkZWYgc3RydWN0IHhj X21hY2hpbmVfbnVtYV9sYXlvdXQgeGNfbWFjaGluZV9udW1hX2xheW91dF90OwordHlwZWRlZiBz dHJ1Y3QgeGVuX2RvbWFpbl9udW1hX2xheW91dCB4Y19kb21haW5fbnVtYV9sYXlvdXRfdDsKKwor ZXh0ZXJuIGludCB4Y19zZXR1cF9kb21haW5fbnVtYV9sYXlvdXQoc3RydWN0IHhjX2RvbV9pbWFn ZSAqZG9tKTsKK2V4dGVybiBpbnQgeGNfZG9tYWluX25vZGVtZW1fZGlzdHJpYnV0aW9uKHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSk7CitleHRlcm4gdm9pZCBkdW1wX2d1ZXN0X251bWFfbGF5b3V0 KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB4Y19kb21haW5fbnVtYV9sYXlvdXRfdCAqbGF5b3V0KTsKKyNlbmRpZgo= --0016e6d7dfa7534d9404836e3ec6 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --0016e6d7dfa7534d9404836e3ec6--