From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tetsu Yamamoto Subject: Re: [PATCH] xm reboot/shutdown/sysrq to HVM domain Date: Wed, 18 Oct 2006 18:52:22 +0900 Message-ID: <4535F956.4040706@jp.fujitsu.com> References: <4526005B.1020906@jp.fujitsu.com> <20061006095902.GA2767@cam.ac.uk> <452B4F1A.4050109@jp.fujitsu.com> <20061012105108.GA3056@cam.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080308090909080808010804" Return-path: In-Reply-To: <20061012105108.GA3056@cam.ac.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Steven Smith Cc: xen-devel@lists.xensource.com, sos22@srcf.ucam.org List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------080308090909080808010804 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Hi Steven, Thank you for your comments. The attached is modified patch based on your comments. The functions which can not be used from the module on HVM domain are moved to the new file machine_reboot.c, and several #ifdefs are removed. However, reboot.c still has two parts of #ifdef CONFIG_XEN because some functions called in common functions are not EXPORT_SYMBOL: - sys_reboot - Some functions called in __do_suspend Regards, Tetsu Yamamoto Signed-off-by: Tetsu Yamamoto Steven Smith wrote: >>>> This patch enhances 'xm reboot'/'xm shutdown' commands to >>>> reboot/shutdown guest Linux on HVM domain as gracefully as para-Linux. >>>> In addtion, sysrq key signal can be sent to HVM domain by 'xm sysrq' >>>> command. >>> Thanks, that's really useful. I have a couple of comments about the >>> patch, though: >>> >>> -- It looks like you had some problems with ctrl_alt_del(), and instead >>> used kill_proc(cad_pid, SIGINT, 1). What was the reason for this? >> The symbol ctrl_alt_del() can't be found when it is used in loadable >> module. On build, the warning message is shown that ctrl_alt_del() is >> undefined, and on loading, the error message is shown that it is unknown >> symbol. I'm not sure why this happens, but I tried kill_proc(), which >> is called in ctrl_alt_del(), it works correctly. > Ah, okay, ctrl_alt_del isn't an EXPORT_SYMBOL. That's unfortunate, > and this looks like a sensible work-around. > >>> -- You've introduced a lot of #ifdefs into reboot.c. It might be >>> easier to just split the file in two; did you look at this at all? >> reboot.c has common process to deal with reboot/shutdown/sysrq for >> para-linux (built in kernel) and full-linux (loadable module), so I >> think that it would be better to be one file in consideration of code >> maintenance. > I'm not talking about duplicating the code. As far as I can see, you > share the following functions with PV reboot.c: > > -- shutdown_process > -- __shutdown_handler > -- shutdown_handler > -- sysrq_handler > -- setup_shutdown_event > -- setup_shutdown_watcher > > You don't share: > > -- machine_emergency_restart > -- machine_restart > -- machine_halt > -- machine_power_off > -- switch_idle_mm > -- pre_suspend > -- post_suspend > -- __do_suspend > -- kthread_create_on_cpu > > To put it another way, your patch #if's out more than half the file. > Given that, I think the code would be more maintainable if you moved > machine_* and __do_suspend to a new file, perhaps machine_reboot.c. > >>> -- You set reboot_module from within a xenbus transaction. I don't >>> think that's necessary, since xenbus_writes are supposed to be >>> atomic anyway. >> The reason why I use xenbus_write is that I could not find other >> interface to write xenstore through xenbus module for HVM. I'm not sure >> which interface you suggest to use, but for example, xb_write() is not >> exported, so it can not be called from reboot module. If I should use >> other interface, please let me know. > I'm not objecting to the use of xenbus_write, but the use of > xenbus_transaction_start: you're only doing one write, so you can just > go xenbus_write(XBT_NULL, "control", "reboot_module", "installed") > rather than having the loop in setup_shutdown_event. > > I'm also not sure why this is #ifndef CONFIG_XEN. It seems like it > would be a good idea to set reboot_module in PV domains as well, just > for consistency. > >> +#ifndef CONFIG_XEN >> +MODULE_LICENSE("Dual BSD/GPL"); >> +#endif /* !CONFIG_XEN */ > Does this actually need the #ifdefs? If we're CONFIG_XEN, we're not a > module, so MODULE_LICENSE gets preprocessored away, doesn't it? > >> static int shutdown_process(void *__unused) >> { >> @@ -222,12 +232,17 @@ static int shutdown_process(void *__unus >> >> if ((shutting_down == SHUTDOWN_POWEROFF) || >> (shutting_down == SHUTDOWN_HALT)) { >> +#ifdef CONFIG_XEN >> if (execve("/sbin/poweroff", poweroff_argv, envp) < 0) { >> sys_reboot(LINUX_REBOOT_MAGIC1, >> LINUX_REBOOT_MAGIC2, >> LINUX_REBOOT_CMD_POWER_OFF, >> NULL); >> } >> +#else /* !CONFIG_XEN */ >> + call_usermodehelper_keys("/sbin/poweroff", poweroff_argv, envp, NULL, 0); >> + >> +#endif /* !CONFIG_XEN */ > Hmm... it might make sense to use call_usermodehelper_keys in the > CONFIG_XEN case. Did you try that? > >> static void __shutdown_handler(void *unused) >> { >> int err; >> >> +#ifdef CONFIG_XEN >> if (shutting_down != SHUTDOWN_SUSPEND) >> err = kernel_thread(shutdown_process, NULL, >> CLONE_FS | CLONE_FILES); >> else >> err = kthread_create_on_cpu(__do_suspend, NULL, "suspend", 0); >> >> +#else /* !CONFIG_XEN */ >> + err = kernel_thread(shutdown_process, NULL, >> + CLONE_FS | CLONE_FILES); >> +#endif /* !CONFIG_XEN */ >> + > I don't understand why this was necessary. Surely __do_suspend just > returns an error if called from non-CONFIG_XEN? > > Steven. --------------080308090909080808010804 Content-Type: text/plain; name="reboot.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="reboot.patch" ZGlmZiAtciAzOGY5YmQ3YTRjZTYgbGludXgtMi42LXhlbi1zcGFyc2UvZHJpdmVycy94ZW4v Y29yZS9NYWtlZmlsZQotLS0gYS9saW51eC0yLjYteGVuLXNwYXJzZS9kcml2ZXJzL3hlbi9j b3JlL01ha2VmaWxlCVR1ZSBPY3QgMDMgMTE6Mzk6MjIgMjAwNiArMDEwMAorKysgYi9saW51 eC0yLjYteGVuLXNwYXJzZS9kcml2ZXJzL3hlbi9jb3JlL01ha2VmaWxlCU1vbiBPY3QgMTYg MTk6NDM6NTEgMjAwNiArMDkwMApAQCAtOSw1ICs5LDUgQEAgb2JqLSQoQ09ORklHX0hPVFBM VUdfQ1BVKQkrPSBjcHVfaG90cGx1Zwogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBj cHVfaG90cGx1Zy5vCiBvYmotJChDT05GSUdfWEVOX1NZU0ZTKQkJKz0geGVuX3N5c2ZzLm8K IG9iai0kKENPTkZJR19YRU5fU0tCVUZGKQkrPSBza2J1ZmYubwotb2JqLSQoQ09ORklHX1hF Tl9SRUJPT1QpCSs9IHJlYm9vdC5vCitvYmotJChDT05GSUdfWEVOX1JFQk9PVCkJKz0gcmVi b290Lm8gbWFjaGluZV9yZWJvb3Qubwogb2JqLSQoQ09ORklHX1hFTl9TTVBCT09UKQkrPSBz bXBib290Lm8KZGlmZiAtciAzOGY5YmQ3YTRjZTYgbGludXgtMi42LXhlbi1zcGFyc2UvZHJp dmVycy94ZW4vY29yZS9yZWJvb3QuYwotLS0gYS9saW51eC0yLjYteGVuLXNwYXJzZS9kcml2 ZXJzL3hlbi9jb3JlL3JlYm9vdC5jCVR1ZSBPY3QgMDMgMTE6Mzk6MjIgMjAwNiArMDEwMAor KysgYi9saW51eC0yLjYteGVuLXNwYXJzZS9kcml2ZXJzL3hlbi9jb3JlL3JlYm9vdC5jCVdl ZCBPY3QgMTggMTU6NDY6MzEgMjAwNiArMDkwMApAQCAtMSwyMTUgKzEsMTkgQEAKICNkZWZp bmUgX19LRVJORUxfU1lTQ0FMTFNfXwogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1 ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1 ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVk ZSA8bGludXgvc3RyaW5naWZ5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUg PGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPHhlbi9ldnRjaG4uaD4KICNpbmNsdWRl IDxhc20vaHlwZXJ2aXNvci5oPgotI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvZG9tMF9vcHMu aD4KICNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAj aW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPHhlbi9nbnR0YWIuaD4KLSNp bmNsdWRlIDx4ZW4veGVuY29ucy5oPgotI2luY2x1ZGUgPHhlbi9jcHVfaG90cGx1Zy5oPgor I2luY2x1ZGUgPHhlbi9yZWJvb3QuaD4KIAotZXh0ZXJuIHZvaWQgY3RybF9hbHRfZGVsKHZv aWQpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogCi0jZGVmaW5lIFNIVVRE T1dOX0lOVkFMSUQgIC0xCi0jZGVmaW5lIFNIVVRET1dOX1BPV0VST0ZGICAwCi0jZGVmaW5l IFNIVVRET1dOX1NVU1BFTkQgICAyCi0vKiBDb2RlIDMgaXMgU0hVVERPV05fQ1JBU0gsIHdo aWNoIHdlIGRvbid0IHVzZSBiZWNhdXNlIHRoZSBkb21haW4gY2FuIG9ubHkKLSAqIHJlcG9y dCBhIGNyYXNoLCBub3QgYmUgaW5zdHJ1Y3RlZCB0byBjcmFzaCEKLSAqIEhBTFQgaXMgdGhl IHNhbWUgYXMgUE9XRVJPRkYsIGFzIGZhciBhcyB3ZSdyZSBjb25jZXJuZWQuICBUaGUgdG9v bHMgdXNlCi0gKiB0aGUgZGlzdGluY3Rpb24gd2hlbiB3ZSByZXR1cm4gdGhlIHJlYXNvbiBj b2RlIHRvIHRoZW0uCi0gKi8KLSNkZWZpbmUgU0hVVERPV05fSEFMVCAgICAgIDQKLQotI2lm IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLQotLyoKLSAqIFBv d2VyIG9mZiBmdW5jdGlvbiwgaWYgYW55Ci0gKi8KLXZvaWQgKCpwbV9wb3dlcl9vZmYpKHZv aWQpOwotRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmYpOwotCi12b2lkIG1hY2hpbmVfZW1l cmdlbmN5X3Jlc3RhcnQodm9pZCkKLXsKLQkvKiBXZSByZWFsbHkgd2FudCB0byBnZXQgcGVu ZGluZyBjb25zb2xlIGRhdGEgb3V0IGJlZm9yZSB3ZSBkaWUuICovCi0JeGVuY29uc19mb3Jj ZV9mbHVzaCgpOwotCUhZUEVSVklTT1Jfc2h1dGRvd24oU0hVVERPV05fcmVib290KTsKLX0K LQotdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQotewotCW1hY2hpbmVf ZW1lcmdlbmN5X3Jlc3RhcnQoKTsKLX0KLQotdm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKLXsK LQltYWNoaW5lX3Bvd2VyX29mZigpOwotfQotCi12b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZv aWQpCi17Ci0JLyogV2UgcmVhbGx5IHdhbnQgdG8gZ2V0IHBlbmRpbmcgY29uc29sZSBkYXRh IG91dCBiZWZvcmUgd2UgZGllLiAqLwotCXhlbmNvbnNfZm9yY2VfZmx1c2goKTsKLQlpZiAo cG1fcG93ZXJfb2ZmKQotCQlwbV9wb3dlcl9vZmYoKTsKLQlIWVBFUlZJU09SX3NodXRkb3du KFNIVVRET1dOX3Bvd2Vyb2ZmKTsKLX0KLQotaW50IHJlYm9vdF90aHJ1X2Jpb3MgPSAwOwkv KiBmb3IgZG1pX3NjYW4uYyAqLwotRVhQT1JUX1NZTUJPTChtYWNoaW5lX3Jlc3RhcnQpOwot RVhQT1JUX1NZTUJPTChtYWNoaW5lX2hhbHQpOwotRVhQT1JUX1NZTUJPTChtYWNoaW5lX3Bv d2VyX29mZik7Ci0KLSNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9f eDg2XzY0X18pICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFN0b3AvcGlj a2xlIGNhbGxiYWNrIGhhbmRsaW5nLgotICovCi0KLS8qIElnbm9yZSBtdWx0aXBsZSBzaHV0 ZG93biByZXF1ZXN0cy4gKi8KLXN0YXRpYyBpbnQgc2h1dHRpbmdfZG93biA9IFNIVVRET1dO X0lOVkFMSUQ7CiBzdGF0aWMgdm9pZCBfX3NodXRkb3duX2hhbmRsZXIodm9pZCAqdW51c2Vk KTsKIHN0YXRpYyBERUNMQVJFX1dPUksoc2h1dGRvd25fd29yaywgX19zaHV0ZG93bl9oYW5k bGVyLCBOVUxMKTsKLQotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZf NjRfXykKLQotLyogRW5zdXJlIHdlIHJ1biBvbiB0aGUgaWRsZSB0YXNrIHBhZ2UgdGFibGVz IHNvIHRoYXQgd2Ugd2lsbAotICAgc3dpdGNoIHBhZ2UgdGFibGVzIGJlZm9yZSBydW5uaW5n IHVzZXIgc3BhY2UuIFRoaXMgaXMgbmVlZGVkCi0gICBvbiBhcmNoaXRlY3R1cmVzIHdpdGgg c2VwYXJhdGUga2VybmVsIGFuZCB1c2VyIHBhZ2UgdGFibGVzCi0gICBiZWNhdXNlIHRoZSB1 c2VyIHBhZ2UgdGFibGUgcG9pbnRlciBpcyBub3Qgc2F2ZWQvcmVzdG9yZWQuICovCi1zdGF0 aWMgdm9pZCBzd2l0Y2hfaWRsZV9tbSh2b2lkKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1t ID0gY3VycmVudC0+YWN0aXZlX21tOwotCi0JaWYgKG1tID09ICZpbml0X21tKQotCQlyZXR1 cm47Ci0KLQlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKLQlzd2l0Y2hfbW0obW0s ICZpbml0X21tLCBjdXJyZW50KTsKLQljdXJyZW50LT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsK LQltbWRyb3AobW0pOwotfQotCi1zdGF0aWMgdm9pZCBwcmVfc3VzcGVuZCh2b2lkKQotewot CUhZUEVSVklTT1Jfc2hhcmVkX2luZm8gPSAoc2hhcmVkX2luZm9fdCAqKWVtcHR5X3plcm9f cGFnZTsKLQljbGVhcl9maXhtYXAoRklYX1NIQVJFRF9JTkZPKTsKLQotCXhlbl9zdGFydF9p bmZvLT5zdG9yZV9tZm4gPSBtZm5fdG9fcGZuKHhlbl9zdGFydF9pbmZvLT5zdG9yZV9tZm4p OwotCXhlbl9zdGFydF9pbmZvLT5jb25zb2xlLmRvbVUubWZuID0KLQkJbWZuX3RvX3Bmbih4 ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLm1mbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBv c3Rfc3VzcGVuZCh2b2lkKQotewotCWludCBpLCBqLCBrLCBmcHA7Ci0JZXh0ZXJuIHVuc2ln bmVkIGxvbmcgbWF4X3BmbjsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyAqcGZuX3RvX21mbl9m cmFtZV9saXN0X2xpc3Q7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnBmbl90b19tZm5fZnJh bWVfbGlzdFtdOwotCi0Jc2V0X2ZpeG1hcChGSVhfU0hBUkVEX0lORk8sIHhlbl9zdGFydF9p bmZvLT5zaGFyZWRfaW5mbyk7Ci0KLQlIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gKHNoYXJl ZF9pbmZvX3QgKilmaXhfdG9fdmlydChGSVhfU0hBUkVEX0lORk8pOwotCi0JbWVtc2V0KGVt cHR5X3plcm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKLQotCUhZUEVSVklTT1Jfc2hhcmVkX2lu Zm8tPmFyY2gucGZuX3RvX21mbl9mcmFtZV9saXN0X2xpc3QgPQotCQl2aXJ0X3RvX21mbihw Zm5fdG9fbWZuX2ZyYW1lX2xpc3RfbGlzdCk7Ci0KLQlmcHAgPSBQQUdFX1NJWkUvc2l6ZW9m KHVuc2lnbmVkIGxvbmcpOwotCWZvciAoaSA9IDAsIGogPSAwLCBrID0gLTE7IGkgPCBtYXhf cGZuOyBpICs9IGZwcCwgaisrKSB7Ci0JCWlmICgoaiAlIGZwcCkgPT0gMCkgewotCQkJaysr OwotCQkJcGZuX3RvX21mbl9mcmFtZV9saXN0X2xpc3Rba10gPQotCQkJCXZpcnRfdG9fbWZu KHBmbl90b19tZm5fZnJhbWVfbGlzdFtrXSk7Ci0JCQlqID0gMDsKLQkJfQotCQlwZm5fdG9f bWZuX2ZyYW1lX2xpc3Rba11bal0gPQotCQkJdmlydF90b19tZm4oJnBoeXNfdG9fbWFjaGlu ZV9tYXBwaW5nW2ldKTsKLQl9Ci0JSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+YXJjaC5tYXhf cGZuID0gbWF4X3BmbjsKLX0KLQotI2Vsc2UgLyogIShkZWZpbmVkKF9faTM4Nl9fKSB8fCBk ZWZpbmVkKF9feDg2XzY0X18pKSAqLwotCi0jZGVmaW5lIHN3aXRjaF9pZGxlX21tKCkJKCh2 b2lkKTApCi0jZGVmaW5lIG1tX3Bpbl9hbGwoKQkJKCh2b2lkKTApCi0jZGVmaW5lIHByZV9z dXNwZW5kKCkJCSgodm9pZCkwKQotI2RlZmluZSBwb3N0X3N1c3BlbmQoKQkJKCh2b2lkKTAp Ci0KLSNlbmRpZgotCi1zdGF0aWMgaW50IF9fZG9fc3VzcGVuZCh2b2lkICppZ25vcmUpCi17 Ci0JaW50IGVycjsKLQotCWV4dGVybiB2b2lkIHRpbWVfcmVzdW1lKHZvaWQpOwotCi0JQlVH X09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKTsKLQlCVUdfT04oaW5faW50ZXJydXB0KCkp OwotCi0jaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQotCWlm ICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkgewotCQlw cmludGsoS0VSTl9XQVJOSU5HICJDYW5ub3Qgc3VzcGVuZCBpbiAiCi0JCSAgICAgICAiYXV0 b190cmFuc2xhdGVkX3BoeXNtYXAgbW9kZS5cbiIpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7 Ci0JfQotI2VuZGlmCi0KLQllcnIgPSBzbXBfc3VzcGVuZCgpOwotCWlmIChlcnIpCi0JCXJl dHVybiBlcnI7Ci0KLQl4ZW5idXNfc3VzcGVuZCgpOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7 Ci0KLQltbV9waW5fYWxsKCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlwcmVlbXB0X2Vu YWJsZSgpOwotCi0JZ250dGFiX3N1c3BlbmQoKTsKLQotCXByZV9zdXNwZW5kKCk7Ci0KLQkv KgotCSAqIFdlJ2xsIHN0b3Agc29tZXdoZXJlIGluc2lkZSB0aGlzIGh5cGVyY2FsbC4gV2hl biBpdCByZXR1cm5zLAotCSAqIHdlJ2xsIHN0YXJ0IHJlc3VtaW5nIGFmdGVyIHRoZSByZXN0 b3JlLgotCSAqLwotCUhZUEVSVklTT1Jfc3VzcGVuZCh2aXJ0X3RvX21mbih4ZW5fc3RhcnRf aW5mbykpOwotCi0Jc2h1dHRpbmdfZG93biA9IFNIVVRET1dOX0lOVkFMSUQ7Ci0KLQlwb3N0 X3N1c3BlbmQoKTsKLQotCWdudHRhYl9yZXN1bWUoKTsKLQotCWlycV9yZXN1bWUoKTsKLQot CXRpbWVfcmVzdW1lKCk7Ci0KLQlzd2l0Y2hfaWRsZV9tbSgpOwotCi0JbG9jYWxfaXJxX2Vu YWJsZSgpOwotCi0JeGVuY29uc19yZXN1bWUoKTsKLQotCXhlbmJ1c19yZXN1bWUoKTsKLQot CXNtcF9yZXN1bWUoKTsKLQotCXJldHVybiBlcnI7Ci19CiAKIHN0YXRpYyBpbnQgc2h1dGRv d25fcHJvY2Vzcyh2b2lkICpfX3VudXNlZCkKIHsKQEAgLTIyMiwxMSArMjYsMTMgQEAgc3Rh dGljIGludCBzaHV0ZG93bl9wcm9jZXNzKHZvaWQgKl9fdW51cwogCiAJaWYgKChzaHV0dGlu Z19kb3duID09IFNIVVRET1dOX1BPV0VST0ZGKSB8fAogCSAgICAoc2h1dHRpbmdfZG93biA9 PSBTSFVURE9XTl9IQUxUKSkgewotCQlpZiAoZXhlY3ZlKCIvc2Jpbi9wb3dlcm9mZiIsIHBv d2Vyb2ZmX2FyZ3YsIGVudnApIDwgMCkgeworCQlpZiAoY2FsbF91c2VybW9kZWhlbHBlcl9r ZXlzKCIvc2Jpbi9wb3dlcm9mZiIsIHBvd2Vyb2ZmX2FyZ3YsIGVudnAsIE5VTEwsIDApIDwg MCkgeworI2lmZGVmIENPTkZJR19YRU4KIAkJCXN5c19yZWJvb3QoTElOVVhfUkVCT09UX01B R0lDMSwKIAkJCQkgICBMSU5VWF9SRUJPT1RfTUFHSUMyLAogCQkJCSAgIExJTlVYX1JFQk9P VF9DTURfUE9XRVJfT0ZGLAogCQkJCSAgIE5VTEwpOworI2VuZGlmIC8qIENPTkZJR19YRU4g Ki8KIAkJfQogCX0KIApAQCAtMjM1LDI5ICs0MSwyMSBAQCBzdGF0aWMgaW50IHNodXRkb3du X3Byb2Nlc3Modm9pZCAqX191bnVzCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3Ro cmVhZF9jcmVhdGVfb25fY3B1KGludCAoKmYpKHZvaWQgKmFyZyksCi0JCQkJIHZvaWQgKmFy ZywKLQkJCQkgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgaW50IGNwdSkKLXsKLQlzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnA7Ci0JcCA9IGt0aHJlYWRfY3JlYXRlKGYsIGFyZywgbmFtZSk7Ci0J aWYgKElTX0VSUihwKSkKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0Ja3RocmVhZF9iaW5kKHAs IGNwdSk7Ci0Jd2FrZV91cF9wcm9jZXNzKHApOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMg dm9pZCBfX3NodXRkb3duX2hhbmRsZXIodm9pZCAqdW51c2VkKQogewogCWludCBlcnI7CiAK KyNpZmRlZiBDT05GSUdfWEVOCiAJaWYgKHNodXR0aW5nX2Rvd24gIT0gU0hVVERPV05fU1VT UEVORCkKIAkJZXJyID0ga2VybmVsX3RocmVhZChzaHV0ZG93bl9wcm9jZXNzLCBOVUxMLAog CQkJCSAgICBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTsKIAllbHNlCiAJCWVyciA9IGt0aHJl YWRfY3JlYXRlX29uX2NwdShfX2RvX3N1c3BlbmQsIE5VTEwsICJzdXNwZW5kIiwgMCk7Cisj ZWxzZSAvKiAhQ09ORklHX1hFTiAqLworCQllcnIgPSBrZXJuZWxfdGhyZWFkKHNodXRkb3du X3Byb2Nlc3MsIE5VTEwsCisJCQkJICAgIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOworI2Vu ZGlmIC8qICFDT05GSUdfWEVOICovCiAKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VS Tl9XQVJOSU5HICJFcnJvciBjcmVhdGluZyBzaHV0ZG93biBwcm9jZXNzICglZCk6ICIKQEAg LTI3Miw2ICs3MCw4IEBAIHN0YXRpYyB2b2lkIHNodXRkb3duX2hhbmRsZXIoc3RydWN0IHhl bmIKIAljaGFyICpzdHI7CiAJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7CiAJaW50 IGVycjsKKworCWludCBjYWRfcGlkID0gMTsgCiAKIAlpZiAoc2h1dHRpbmdfZG93biAhPSBT SFVURE9XTl9JTlZBTElEKQogCQlyZXR1cm47CkBAIC0yOTgsNyArOTgsNyBAQCBzdGF0aWMg dm9pZCBzaHV0ZG93bl9oYW5kbGVyKHN0cnVjdCB4ZW5iCiAJaWYgKHN0cmNtcChzdHIsICJw b3dlcm9mZiIpID09IDApCiAJCXNodXR0aW5nX2Rvd24gPSBTSFVURE9XTl9QT1dFUk9GRjsK IAllbHNlIGlmIChzdHJjbXAoc3RyLCAicmVib290IikgPT0gMCkKLQkJY3RybF9hbHRfZGVs KCk7CisJCWtpbGxfcHJvYyhjYWRfcGlkLCBTSUdJTlQsIDEpOwogCWVsc2UgaWYgKHN0cmNt cChzdHIsICJzdXNwZW5kIikgPT0gMCkKIAkJc2h1dHRpbmdfZG93biA9IFNIVVRET1dOX1NV U1BFTkQ7CiAJZWxzZSBpZiAoc3RyY21wKHN0ciwgImhhbHQiKSA9PSAwKQpAQCAtMzc4LDYg KzE3OCw5IEBAIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NodXRkb3duX2V2ZW50KHYKIAkJ Lm5vdGlmaWVyX2NhbGwgPSBzZXR1cF9zaHV0ZG93bl93YXRjaGVyCiAJfTsKIAlyZWdpc3Rl cl94ZW5zdG9yZV9ub3RpZmllcigmeGVuc3RvcmVfbm90aWZpZXIpOworCisJeGVuYnVzX3dy aXRlKFhCVF9OSUwsICJjb250cm9sIiwgInJlYm9vdF9tb2R1bGUiLCAiaW5zdGFsbGVkIik7 CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC1yIDM4ZjliZDdhNGNlNiB0b29scy9weXRob24v eGVuL3hlbmQvaW1hZ2UucHkKLS0tIGEvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL2ltYWdlLnB5 CVR1ZSBPY3QgMDMgMTE6Mzk6MjIgMjAwNiArMDEwMAorKysgYi90b29scy9weXRob24veGVu L3hlbmQvaW1hZ2UucHkJTW9uIE9jdCAxNiAxODo1Mjo0OSAyMDA2ICswOTAwCkBAIC0yODEs NiArMjgxLDcgQEAgY2xhc3MgSFZNSW1hZ2VIYW5kbGVyKEltYWdlSGFuZGxlcik6CiAgICAg ICAgIGxvZy5kZWJ1ZygiYXBpYyAgICAgICAgICAgPSAlZCIsIHNlbGYuYXBpYykKIAogICAg ICAgICBzZWxmLnJlZ2lzdGVyX3NodXRkb3duX3dhdGNoKCkKKyAgICAgICAgc2VsZi5yZWdp c3Rlcl9yZWJvb3RfbW9kdWxlX3dhdGNoKCkKIAogICAgICAgICByZXR1cm4geGMuaHZtX2J1 aWxkKGRvbSAgICAgICAgICAgID0gc2VsZi52bS5nZXREb21pZCgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGltYWdlICAgICAgICAgID0gc2VsZi5rZXJuZWwsCkBAIC0zODMs NiArMzg0LDcgQEAgY2xhc3MgSFZNSW1hZ2VIYW5kbGVyKEltYWdlSGFuZGxlcik6CiAKICAg ICBkZWYgZGVzdHJveShzZWxmKToKICAgICAgICAgc2VsZi51bnJlZ2lzdGVyX3NodXRkb3du X3dhdGNoKCk7CisgICAgICAgIHNlbGYudW5yZWdpc3Rlcl9yZWJvb3RfbW9kdWxlX3dhdGNo KCk7CiAgICAgICAgIGltcG9ydCBzaWduYWwKICAgICAgICAgaWYgbm90IHNlbGYucGlkOgog ICAgICAgICAgICAgcmV0dXJuCkBAIC00MjUsNiArNDI3LDM5IEBAIGNsYXNzIEhWTUltYWdl SGFuZGxlcihJbWFnZUhhbmRsZXIpOgogICAgICAgICAgICAgICAgIHZtLnJlZnJlc2hTaHV0 ZG93bih2bS5pbmZvKQogCiAgICAgICAgIHJldHVybiAxICMgS2VlcCB3YXRjaGluZworCisg ICAgZGVmIHJlZ2lzdGVyX3JlYm9vdF9tb2R1bGVfd2F0Y2goc2VsZik6CisgICAgICAgICIi IiBhZGQgeGVuIHN0b3JlIHdhdGNoIG9uIGNvbnRyb2wvcmVib290X21vZHVsZSAiIiIKKyAg ICAgICAgc2VsZi5yZWJvb3RNb2R1bGVXYXRjaCA9IHhzd2F0Y2goc2VsZi52bS5kb21wYXRo ICsgIi9jb250cm9sL3JlYm9vdF9tb2R1bGUiLCBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmh2bV9yZWJvb3RfbW9kdWxlKQorICAgICAgICBsb2cuZGVi dWcoImh2bSByZWJvb3QgbW9kdWxlIHdhdGNoIHJlZ2lzdGVyZWQiKQorCisgICAgZGVmIHVu cmVnaXN0ZXJfcmVib290X21vZHVsZV93YXRjaChzZWxmKToKKyAgICAgICAgIiIiUmVtb3Zl IHRoZSB3YXRjaCBvbiB0aGUgY29udHJvbC9yZWJvb3RfbW9kdWxlLCBpZiBhbnkuIE5vdGhy b3cKKyAgICAgICAgZ3VhcmFudGVlLiIiIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAg IGlmIHNlbGYucmVib290TW9kdWxlV2F0Y2g6CisgICAgICAgICAgICAgICAgc2VsZi5yZWJv b3RNb2R1bGVXYXRjaC51bndhdGNoKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg bG9nLmV4Y2VwdGlvbigiVW53YXRjaGluZyBodm0gcmVib290IG1vZHVsZSB3YXRjaCBmYWls ZWQuIikKKyAgICAgICAgc2VsZi5yZWJvb3RNb2R1bGVXYXRjaCA9IE5vbmUKKyAgICAgICAg bG9nLmRlYnVnKCJodm0gcmVib290IG1vZHVsZSB3YXRjaCB1bnJlZ2lzdGVyZWQiKQorCisg ICAgZGVmIGh2bV9yZWJvb3RfbW9kdWxlKHNlbGYsIF8pOgorICAgICAgICAiIiIgd2F0Y2gg Y2FsbCBiYWNrIG9uIG5vZGUgY29udHJvbC9yZWJvb3RfbW9kdWxlLAorICAgICAgICAgICAg aWYgbm9kZSBjaGFuZ2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisgICAgICAg ICIiIgorICAgICAgICB4ZCA9IHhlbi54ZW5kLlhlbmREb21haW4uaW5zdGFuY2UoKQorICAg ICAgICB2bSA9IHhkLmRvbWFpbl9sb29rdXAoIHNlbGYudm0uZ2V0RG9taWQoKSApCisKKyAg ICAgICAgcmVib290X21vZHVsZV9zdGF0dXMgPSB2bS5yZWFkRG9tKCdjb250cm9sL3JlYm9v dF9tb2R1bGUnKQorICAgICAgICBsb2cuZGVidWcoImh2bV9yZWJvb3RfbW9kdWxlIGZpcmVk LCBtb2R1bGUgc3RhdHVzPSVzIiwgcmVib290X21vZHVsZV9zdGF0dXMpCisgICAgICAgIGlm IHJlYm9vdF9tb2R1bGVfc3RhdHVzID09ICdpbnN0YWxsZWQnOgorICAgICAgICAgICAgc2Vs Zi51bnJlZ2lzdGVyX3NodXRkb3duX3dhdGNoKCkKKworICAgICAgICByZXR1cm4gMSAjIEtl ZXAgd2F0Y2hpbmcKKwogCiBjbGFzcyBJQTY0X0hWTV9JbWFnZUhhbmRsZXIoSFZNSW1hZ2VI YW5kbGVyKToKIApkaWZmIC1yIDM4ZjliZDdhNGNlNiB1bm1vZGlmaWVkX2RyaXZlcnMvbGlu dXgtMi42L01ha2VmaWxlCi0tLSBhL3VubW9kaWZpZWRfZHJpdmVycy9saW51eC0yLjYvTWFr ZWZpbGUJVHVlIE9jdCAwMyAxMTozOToyMiAyMDA2ICswMTAwCisrKyBiL3VubW9kaWZpZWRf ZHJpdmVycy9saW51eC0yLjYvTWFrZWZpbGUJTW9uIE9jdCAxNiAxODo1Mjo0OSAyMDA2ICsw OTAwCkBAIC00LDMgKzQsNCBAQCBvYmotbSArPSB4ZW5idXMvCiBvYmotbSArPSB4ZW5idXMv CiBvYmotbSArPSBibGtmcm9udC8KIG9iai1tICs9IG5ldGZyb250Lworb2JqLW0gKz0gdXRp bC8KZGlmZiAtciAzOGY5YmQ3YTRjZTYgdW5tb2RpZmllZF9kcml2ZXJzL2xpbnV4LTIuNi9t a2J1aWxkdHJlZQotLS0gYS91bm1vZGlmaWVkX2RyaXZlcnMvbGludXgtMi42L21rYnVpbGR0 cmVlCVR1ZSBPY3QgMDMgMTE6Mzk6MjIgMjAwNiArMDEwMAorKysgYi91bm1vZGlmaWVkX2Ry aXZlcnMvbGludXgtMi42L21rYnVpbGR0cmVlCU1vbiBPY3QgMTYgMTg6NTI6NDkgMjAwNiAr MDkwMApAQCAtMTQsNiArMTQsNyBAQCBsbiAtc2YgJHtYTH0vZHJpdmVycy94ZW4vY29yZS9n bnR0YWIuYyBwCiBsbiAtc2YgJHtYTH0vZHJpdmVycy94ZW4vY29yZS9nbnR0YWIuYyBwbGF0 Zm9ybS1wY2kKIGxuIC1zZiAke1hMfS9kcml2ZXJzL3hlbi9jb3JlL2ZlYXR1cmVzLmMgcGxh dGZvcm0tcGNpCiBsbiAtc2YgJHtYTH0vZHJpdmVycy94ZW4vY29yZS94ZW5fcHJvYy5jIHhl bmJ1cworbG4gLXNmICR7WEx9L2RyaXZlcnMveGVuL2NvcmUvcmVib290LmMgdXRpbAogCiBt a2RpciAtcCBpbmNsdWRlCiBta2RpciAtcCBpbmNsdWRlL3hlbgpkaWZmIC1yIDM4ZjliZDdh NGNlNiBsaW51eC0yLjYteGVuLXNwYXJzZS9kcml2ZXJzL3hlbi9jb3JlL21hY2hpbmVfcmVi b290LmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr IGIvbGludXgtMi42LXhlbi1zcGFyc2UvZHJpdmVycy94ZW4vY29yZS9tYWNoaW5lX3JlYm9v dC5jCU1vbiBPY3QgMTYgMjE6NTU6MzIgMjAwNiArMDkwMApAQCAtMCwwICsxLDIwNiBAQAor I2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5o PgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+Cisj aW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNp bmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5j bHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8eGVuL2V2dGNobi5oPgorI2lu Y2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9kb20w X29wcy5oPgorI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUu aD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8eGVuL2dudHRhYi5o PgorI2luY2x1ZGUgPHhlbi94ZW5jb25zLmg+CisjaW5jbHVkZSA8eGVuL2NwdV9ob3RwbHVn Lmg+CisjaW5jbHVkZSA8eGVuL3JlYm9vdC5oPgorCisjaWYgZGVmaW5lZChfX2kzODZfXykg fHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisvKgorICogUG93ZXIgb2ZmIGZ1bmN0aW9uLCBp ZiBhbnkKKyAqLwordm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7CitFWFBPUlRfU1lNQk9M KHBtX3Bvd2VyX29mZik7CisKK3ZvaWQgbWFjaGluZV9lbWVyZ2VuY3lfcmVzdGFydCh2b2lk KQoreworCS8qIFdlIHJlYWxseSB3YW50IHRvIGdldCBwZW5kaW5nIGNvbnNvbGUgZGF0YSBv dXQgYmVmb3JlIHdlIGRpZS4gKi8KKwl4ZW5jb25zX2ZvcmNlX2ZsdXNoKCk7CisJSFlQRVJW SVNPUl9zaHV0ZG93bihTSFVURE9XTl9yZWJvb3QpOworfQorCit2b2lkIG1hY2hpbmVfcmVz dGFydChjaGFyICogX191bnVzZWQpCit7CisJbWFjaGluZV9lbWVyZ2VuY3lfcmVzdGFydCgp OworfQorCit2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKQoreworCW1hY2hpbmVfcG93ZXJfb2Zm KCk7Cit9CisKK3ZvaWQgbWFjaGluZV9wb3dlcl9vZmYodm9pZCkKK3sKKwkvKiBXZSByZWFs bHkgd2FudCB0byBnZXQgcGVuZGluZyBjb25zb2xlIGRhdGEgb3V0IGJlZm9yZSB3ZSBkaWUu ICovCisJeGVuY29uc19mb3JjZV9mbHVzaCgpOworCWlmIChwbV9wb3dlcl9vZmYpCisJCXBt X3Bvd2VyX29mZigpOworCUhZUEVSVklTT1Jfc2h1dGRvd24oU0hVVERPV05fcG93ZXJvZmYp OworfQorCitpbnQgcmVib290X3RocnVfYmlvcyA9IDA7CS8qIGZvciBkbWlfc2Nhbi5jICov CitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfcmVzdGFydCk7CitFWFBPUlRfU1lNQk9MKG1hY2hp bmVfaGFsdCk7CitFWFBPUlRfU1lNQk9MKG1hY2hpbmVfcG93ZXJfb2ZmKTsKKworI2VuZGlm IC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KKworI2lm IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworLyogRW5zdXJl IHdlIHJ1biBvbiB0aGUgaWRsZSB0YXNrIHBhZ2UgdGFibGVzIHNvIHRoYXQgd2Ugd2lsbAor ICAgc3dpdGNoIHBhZ2UgdGFibGVzIGJlZm9yZSBydW5uaW5nIHVzZXIgc3BhY2UuIFRoaXMg aXMgbmVlZGVkCisgICBvbiBhcmNoaXRlY3R1cmVzIHdpdGggc2VwYXJhdGUga2VybmVsIGFu ZCB1c2VyIHBhZ2UgdGFibGVzCisgICBiZWNhdXNlIHRoZSB1c2VyIHBhZ2UgdGFibGUgcG9p bnRlciBpcyBub3Qgc2F2ZWQvcmVzdG9yZWQuICovCitzdGF0aWMgdm9pZCBzd2l0Y2hfaWRs ZV9tbSh2b2lkKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+YWN0aXZl X21tOworCisJaWYgKG1tID09ICZpbml0X21tKQorCQlyZXR1cm47CisKKwlhdG9taWNfaW5j KCZpbml0X21tLm1tX2NvdW50KTsKKwlzd2l0Y2hfbW0obW0sICZpbml0X21tLCBjdXJyZW50 KTsKKwljdXJyZW50LT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKKwltbWRyb3AobW0pOworfQor CitzdGF0aWMgdm9pZCBwcmVfc3VzcGVuZCh2b2lkKQoreworCUhZUEVSVklTT1Jfc2hhcmVk X2luZm8gPSAoc2hhcmVkX2luZm9fdCAqKWVtcHR5X3plcm9fcGFnZTsKKwljbGVhcl9maXht YXAoRklYX1NIQVJFRF9JTkZPKTsKKworCXhlbl9zdGFydF9pbmZvLT5zdG9yZV9tZm4gPSBt Zm5fdG9fcGZuKHhlbl9zdGFydF9pbmZvLT5zdG9yZV9tZm4pOworCXhlbl9zdGFydF9pbmZv LT5jb25zb2xlLmRvbVUubWZuID0KKwkJbWZuX3RvX3Bmbih4ZW5fc3RhcnRfaW5mby0+Y29u c29sZS5kb21VLm1mbik7Cit9CisKK3N0YXRpYyB2b2lkIHBvc3Rfc3VzcGVuZCh2b2lkKQor eworCWludCBpLCBqLCBrLCBmcHA7CisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsK KwlleHRlcm4gdW5zaWduZWQgbG9uZyAqcGZuX3RvX21mbl9mcmFtZV9saXN0X2xpc3Q7CisJ ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnBmbl90b19tZm5fZnJhbWVfbGlzdFtdOworCisJc2V0 X2ZpeG1hcChGSVhfU0hBUkVEX0lORk8sIHhlbl9zdGFydF9pbmZvLT5zaGFyZWRfaW5mbyk7 CisKKwlIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gKHNoYXJlZF9pbmZvX3QgKilmaXhfdG9f dmlydChGSVhfU0hBUkVEX0lORk8pOworCisJbWVtc2V0KGVtcHR5X3plcm9fcGFnZSwgMCwg UEFHRV9TSVpFKTsKKworCUhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPmFyY2gucGZuX3RvX21m bl9mcmFtZV9saXN0X2xpc3QgPQorCQl2aXJ0X3RvX21mbihwZm5fdG9fbWZuX2ZyYW1lX2xp c3RfbGlzdCk7CisKKwlmcHAgPSBQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwor CWZvciAoaSA9IDAsIGogPSAwLCBrID0gLTE7IGkgPCBtYXhfcGZuOyBpICs9IGZwcCwgaisr KSB7CisJCWlmICgoaiAlIGZwcCkgPT0gMCkgeworCQkJaysrOworCQkJcGZuX3RvX21mbl9m cmFtZV9saXN0X2xpc3Rba10gPQorCQkJCXZpcnRfdG9fbWZuKHBmbl90b19tZm5fZnJhbWVf bGlzdFtrXSk7CisJCQlqID0gMDsKKwkJfQorCQlwZm5fdG9fbWZuX2ZyYW1lX2xpc3Rba11b al0gPQorCQkJdmlydF90b19tZm4oJnBoeXNfdG9fbWFjaGluZV9tYXBwaW5nW2ldKTsKKwl9 CisJSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+YXJjaC5tYXhfcGZuID0gbWF4X3BmbjsKK30K KworI2Vsc2UgLyogIShkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18p KSAqLworCisjZGVmaW5lIHN3aXRjaF9pZGxlX21tKCkJKCh2b2lkKTApCisjZGVmaW5lIG1t X3Bpbl9hbGwoKQkJKCh2b2lkKTApCisjZGVmaW5lIHByZV9zdXNwZW5kKCkJCSgodm9pZCkw KQorI2RlZmluZSBwb3N0X3N1c3BlbmQoKQkJKCh2b2lkKTApCisKKyNlbmRpZgorCitpbnQg X19kb19zdXNwZW5kKHZvaWQgKmlnbm9yZSkKK3sKKwlpbnQgZXJyOworCisJZXh0ZXJuIHZv aWQgdGltZV9yZXN1bWUodm9pZCk7CisKKwlCVUdfT04oc21wX3Byb2Nlc3Nvcl9pZCgpICE9 IDApOworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9f KSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0 b190cmFuc2xhdGVkX3BoeXNtYXApKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5v dCBzdXNwZW5kIGluICIKKwkJICAgICAgICJhdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCBtb2Rl LlxuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisjZW5kaWYKKworCWVyciA9IHNt cF9zdXNwZW5kKCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXhlbmJ1c19zdXNw ZW5kKCk7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCW1tX3Bpbl9hbGwoKTsKKwlsb2Nh bF9pcnFfZGlzYWJsZSgpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlnbnR0YWJfc3VzcGVu ZCgpOworCisJcHJlX3N1c3BlbmQoKTsKKworCS8qCisJICogV2UnbGwgc3RvcCBzb21ld2hl cmUgaW5zaWRlIHRoaXMgaHlwZXJjYWxsLiBXaGVuIGl0IHJldHVybnMsCisJICogd2UnbGwg c3RhcnQgcmVzdW1pbmcgYWZ0ZXIgdGhlIHJlc3RvcmUuCisJICovCisJSFlQRVJWSVNPUl9z dXNwZW5kKHZpcnRfdG9fbWZuKHhlbl9zdGFydF9pbmZvKSk7CisKKwlzaHV0dGluZ19kb3du ID0gU0hVVERPV05fSU5WQUxJRDsKKworCXBvc3Rfc3VzcGVuZCgpOworCisJZ250dGFiX3Jl c3VtZSgpOworCisJaXJxX3Jlc3VtZSgpOworCisJdGltZV9yZXN1bWUoKTsKKworCXN3aXRj aF9pZGxlX21tKCk7CisKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwl4ZW5jb25zX3Jlc3Vt ZSgpOworCisJeGVuYnVzX3Jlc3VtZSgpOworCisJc21wX3Jlc3VtZSgpOworCisJcmV0dXJu IGVycjsKK30KKworaW50IGt0aHJlYWRfY3JlYXRlX29uX2NwdShpbnQgKCpmKSh2b2lkICph cmcpLAorCQkJCSB2b2lkICphcmcsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIGlu dCBjcHUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCXAgPSBrdGhyZWFkX2NyZWF0 ZShmLCBhcmcsIG5hbWUpOworCWlmIChJU19FUlIocCkpCisJCXJldHVybiBQVFJfRVJSKHAp OworCWt0aHJlYWRfYmluZChwLCBjcHUpOworCXdha2VfdXBfcHJvY2VzcyhwKTsKKwlyZXR1 cm4gMDsKK30KZGlmZiAtciAzOGY5YmQ3YTRjZTYgbGludXgtMi42LXhlbi1zcGFyc2UvaW5j bHVkZS94ZW4vcmVib290LmgKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5 NzAgKzAwMDAKKysrIGIvbGludXgtMi42LXhlbi1zcGFyc2UvaW5jbHVkZS94ZW4vcmVib290 LmgJTW9uIE9jdCAxNiAyMjozNToyMiAyMDA2ICswOTAwCkBAIC0wLDAgKzEsMTkgQEAKKyNk ZWZpbmUgU0hVVERPV05fSU5WQUxJRCAgLTEKKyNkZWZpbmUgU0hVVERPV05fUE9XRVJPRkYg IDAKKyNkZWZpbmUgU0hVVERPV05fU1VTUEVORCAgIDIKKy8qIENvZGUgMyBpcyBTSFVURE9X Tl9DUkFTSCwgd2hpY2ggd2UgZG9uJ3QgdXNlIGJlY2F1c2UgdGhlIGRvbWFpbiBjYW4gb25s eQorICogcmVwb3J0IGEgY3Jhc2gsIG5vdCBiZSBpbnN0cnVjdGVkIHRvIGNyYXNoIQorICog SEFMVCBpcyB0aGUgc2FtZSBhcyBQT1dFUk9GRiwgYXMgZmFyIGFzIHdlJ3JlIGNvbmNlcm5l ZC4gIFRoZSB0b29scyB1c2UKKyAqIHRoZSBkaXN0aW5jdGlvbiB3aGVuIHdlIHJldHVybiB0 aGUgcmVhc29uIGNvZGUgdG8gdGhlbS4KKyAqLworI2RlZmluZSBTSFVURE9XTl9IQUxUICAg ICAgNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdG9wL3BpY2tsZSBjYWxs YmFjayBoYW5kbGluZy4KKyAqLworCisvKiBJZ25vcmUgbXVsdGlwbGUgc2h1dGRvd24gcmVx dWVzdHMuICovCitzdGF0aWMgaW50IHNodXR0aW5nX2Rvd24gPSBTSFVURE9XTl9JTlZBTElE OworCitpbnQga3RocmVhZF9jcmVhdGVfb25fY3B1KGludCAoKmYpKHZvaWQgKiksIHZvaWQg KiwgY29uc3QgY2hhciAqLCBpbnQpOworaW50IF9fZG9fc3VzcGVuZCh2b2lkICopOwo= --------------080308090909080808010804 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 --------------080308090909080808010804--