From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhai, Edwin" Subject: Re: [PATCH] [RESEND] KVM:VMX: Add support for Pause-Loop Exiting Date: Wed, 30 Sep 2009 09:01:51 +0800 Message-ID: <4AC2ADFF.300@intel.com> References: <4ABA2AD7.6080008@intel.com> <4ABA2C22.7020000@redhat.com> <4ABC18C6.9070202@intel.com> <4ABF2221.4000505@redhat.com> <4AC082F9.1060502@intel.com> <4AC20CDB.2070203@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------000809070307000800060504" Cc: "kvm@vger.kernel.org" , "Zhai, Edwin" To: Avi Kivity Return-path: Received: from mga14.intel.com ([143.182.124.37]:16687 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750699AbZI3BBt (ORCPT ); Tue, 29 Sep 2009 21:01:49 -0400 In-Reply-To: <4AC20CDB.2070203@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------000809070307000800060504 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Avi, I modify it according your comments. The only thing I want to keep is the module param ple_gap/window. Although they are not per-guest, they can be used to find the right value, and disable PLE for debug purpose. Thanks, Avi Kivity wrote: > On 09/28/2009 11:33 AM, Zhai, Edwin wrote: > >> Avi Kivity wrote: >> >>> +#define KVM_VMX_DEFAULT_PLE_GAP 41 >>> +#define KVM_VMX_DEFAULT_PLE_WINDOW 4096 >>> +static int __read_mostly ple_gap = KVM_VMX_DEFAULT_PLE_GAP; >>> +module_param(ple_gap, int, S_IRUGO); >>> + >>> +static int __read_mostly ple_window = KVM_VMX_DEFAULT_PLE_WINDOW; >>> +module_param(ple_window, int, S_IRUGO); >>> >>> Shouldn't be __read_mostly since they're read very rarely >>> (__read_mostly should be for variables that are very often read, and >>> rarely written). >>> >> In general, they are read only except that experienced user may try >> different parameter for perf tuning. >> > > > __read_mostly doesn't just mean it's read mostly. It also means it's > read often. Otherwise it's just wasting space in hot cachelines. > > >>> I'm not even sure they should be parameters. >>> >> For different spinlock in different OS, and for different workloads, >> we need different parameter for tuning. It's similar as the enable_ept. >> > > No, global parameters don't work for tuning workloads and guests since > they cannot be modified on a per-guest basis. enable_ept is only useful > for debugging and testing. > > >>>> + set_current_state(TASK_INTERRUPTIBLE); >>>> + schedule_hrtimeout(&expires, HRTIMER_MODE_ABS); >>>> + >>>> >>> Please add a tracepoint for this (since it can cause significant >>> change in behaviour), >>> >> Isn't trace_kvm_exit(exit_reason, ...) enough? We can tell the PLE >> vmexit from other vmexits. >> > > Right. I thought of the software spinlock detector, but that's another > problem. > > I think you can drop the sleep_time parameter, it can be part of the > function. Also kvm_vcpu_sleep() is confusing, we also sleep on halt. > Please call it kvm_vcpu_on_spin() or something (since that's what the > guest is doing). > > --------------000809070307000800060504 Content-Type: application/octet-stream; name="kvm_ple_hrtimer_v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="kvm_ple_hrtimer_v3.patch" S1ZNOlZNWDogQWRkIHN1cHBvcnQgZm9yIFBhdXNlLUxvb3AgRXhpdGluZwoKTmV3IE5ITSBw cm9jZXNzb3JzIHdpbGwgc3VwcG9ydCBQYXVzZS1Mb29wIEV4aXRpbmcgYnkgYWRkaW5nIDIg Vk0tZXhlY3V0aW9uCmNvbnRyb2wgZmllbGRzOgpQTEVfR2FwICAgIC0gdXBwZXIgYm91bmQg b24gdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUKICAgICAgICAg ICAgIGV4ZWN1dGlvbnMgb2YgUEFVU0UgaW4gYSBsb29wLgpQTEVfV2luZG93IC0gdXBwZXIg Ym91bmQgb24gdGhlIGFtb3VudCBvZiB0aW1lIGEgZ3Vlc3QgaXMgYWxsb3dlZCB0byBleGVj dXRlIGluCiAgICAgICAgICAgICBhIFBBVVNFIGxvb3AKCklmIHRoZSB0aW1lLCBiZXR3ZWVu IHRoaXMgZXhlY3V0aW9uIG9mIFBBVVNFIGFuZCBwcmV2aW91cyBvbmUsIGV4Y2VlZHMgdGhl ClBMRV9HYXAsIHByb2Nlc3NvciBjb25zaWRlciB0aGlzIFBBVVNFIGJlbG9uZ3MgdG8gYSBu ZXcgbG9vcC4KT3RoZXJ3aXNlLCBwcm9jZXNzb3IgZGV0ZXJtaW5zIHRoZSB0aGUgdG90YWwg ZXhlY3V0aW9uIHRpbWUgb2YgdGhpcyBsb29wKHNpbmNlCjFzdCBQQVVTRSBpbiB0aGlzIGxv b3ApLCBhbmQgdHJpZ2dlcnMgYSBWTSBleGl0IGlmIHRvdGFsIHRpbWUgZXhjZWVkcyB0aGUK UExFX1dpbmRvdy4KKiBSZWZlciBTRE0gdm9sdW1lIDNiIHNlY3Rpb24gMjEuNi4xMyAmIDIy LjEuMy4KClBhdXNlLUxvb3AgRXhpdGluZyBjYW4gYmUgdXNlZCB0byBkZXRlY3QgTG9jay1I b2xkZXIgUHJlZW1wdGlvbiwgd2hlcmUgb25lIFZQCmlzIHNjaGVkLW91dCBhZnRlciBob2xk IGEgc3BpbmxvY2ssIHRoZW4gb3RoZXIgVlBzIGZvciBzYW1lIGxvY2sgYXJlIHNjaGVkLWlu CnRvIHdhc3RlIHRoZSBDUFUgdGltZS4KCk91ciB0ZXN0cyBpbmRpY2F0ZSB0aGF0IG1vc3Qg c3BpbmxvY2tzIGFyZSBoZWxkIGZvciBsZXNzIHRoYW4gMjEyIGN5Y2xlcy4KUGVyZm9ybWFu Y2UgdGVzdHMgc2hvdyB0aGF0IHdpdGggMlggTFAgb3Zlci1jb21taXRtZW50IHdlIGNhbiBn ZXQgKzIlIHBlcmYKaW1wcm92ZW1lbnQgZm9yIGtlcm5lbCBidWlsZChFdmVuIG1vcmUgcGVy ZiBnYWluIHdpdGggbW9yZSBMUHMpLgoKU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3 aW4uemhhaUBpbnRlbC5jb20+CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20v dm14LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAppbmRleCAyNzI1MTRjLi4yYjQ5 NDU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaAorKysgYi9hcmNo L3g4Ni9pbmNsdWRlL2FzbS92bXguaApAQCAtNTYsNiArNTYsNyBAQAogI2RlZmluZSBTRUNP TkRBUllfRVhFQ19FTkFCTEVfVlBJRCAgICAgICAgICAgICAgMHgwMDAwMDAyMAogI2RlZmlu ZSBTRUNPTkRBUllfRVhFQ19XQklOVkRfRVhJVElORwkJMHgwMDAwMDA0MAogI2RlZmluZSBT RUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QJMHgwMDAwMDA4MAorI2RlZmluZSBT RUNPTkRBUllfRVhFQ19QQVVTRV9MT09QX0VYSVRJTkcJMHgwMDAwMDQwMAogCiAKICNkZWZp bmUgUElOX0JBU0VEX0VYVF9JTlRSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEK QEAgLTE0NCw2ICsxNDUsOCBAQCBlbnVtIHZtY3NfZmllbGQgewogCVZNX0VOVFJZX0lOU1RS VUNUSU9OX0xFTiAgICAgICAgPSAweDAwMDA0MDFhLAogCVRQUl9USFJFU0hPTEQgICAgICAg ICAgICAgICAgICAgPSAweDAwMDA0MDFjLAogCVNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wg ICAgICAgPSAweDAwMDA0MDFlLAorCVBMRV9HQVAgICAgICAgICAgICAgICAgICAgICAgICAg PSAweDAwMDA0MDIwLAorCVBMRV9XSU5ET1cgICAgICAgICAgICAgICAgICAgICAgPSAweDAw MDA0MDIyLAogCVZNX0lOU1RSVUNUSU9OX0VSUk9SICAgICAgICAgICAgPSAweDAwMDA0NDAw LAogCVZNX0VYSVRfUkVBU09OICAgICAgICAgICAgICAgICAgPSAweDAwMDA0NDAyLAogCVZN X0VYSVRfSU5UUl9JTkZPICAgICAgICAgICAgICAgPSAweDAwMDA0NDA0LApAQCAtMjQ4LDYg KzI1MSw3IEBAIGVudW0gdm1jc19maWVsZCB7CiAjZGVmaW5lIEVYSVRfUkVBU09OX01TUl9S RUFEICAgICAgICAgICAgMzEKICNkZWZpbmUgRVhJVF9SRUFTT05fTVNSX1dSSVRFICAgICAg ICAgICAzMgogI2RlZmluZSBFWElUX1JFQVNPTl9NV0FJVF9JTlNUUlVDVElPTiAgIDM2Cisj ZGVmaW5lIEVYSVRfUkVBU09OX1BBVVNFX0lOU1RSVUNUSU9OICAgNDAKICNkZWZpbmUgRVhJ VF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZCSA0MQogI2RlZmluZSBFWElUX1JFQVNPTl9U UFJfQkVMT1dfVEhSRVNIT0xEIDQzCiAjZGVmaW5lIEVYSVRfUkVBU09OX0FQSUNfQUNDRVNT ICAgICAgICAgNDQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2 L2t2bS92bXguYwppbmRleCAzZmUwZDQyLi43YjE5MWJiIDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC02MSw2ICs2MSwyNSBA QCBtb2R1bGVfcGFyYW1fbmFtZWQodW5yZXN0cmljdGVkX2d1ZXN0LAogc3RhdGljIGludCBf X3JlYWRfbW9zdGx5IGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSA9IDA7CiBtb2R1bGVf cGFyYW0oZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlLCBib29sLCBTX0lSVUdPKTsKIAor LyoKKyAqIFRoZXNlIDIgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb25maWcgdGhlIGNvbnRy b2xzIGZvciBQYXVzZS1Mb29wIEV4aXRpbmc6CisgKiBwbGVfZ2FwOiAgICB1cHBlciBib3Vu ZCBvbiB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZQorICogICAg ICAgICAgICAgZXhlY3V0aW9ucyBvZiBQQVVTRSBpbiBhIGxvb3AuIEFsc28gaW5kaWNhdGUg aWYgcGxlIGVuYWJsZWQuCisgKiAgICAgICAgICAgICBBY2NvcmRpbmcgdG8gdGVzdCwgdGhp cyB0aW1lIGlzIHVzdWFsbHkgc21hbGwgdGhhbiA0MSBjeWNsZXMuCisgKiBwbGVfd2luZG93 OiB1cHBlciBib3VuZCBvbiB0aGUgYW1vdW50IG9mIHRpbWUgYSBndWVzdCBpcyBhbGxvd2Vk IHRvIGV4ZWN1dGUKKyAqICAgICAgICAgICAgIGluIGEgUEFVU0UgbG9vcC4gVGVzdHMgaW5k aWNhdGUgdGhhdCBtb3N0IHNwaW5sb2NrcyBhcmUgaGVsZCBmb3IKKyAqICAgICAgICAgICAg IGxlc3MgdGhhbiAyXjEyIGN5Y2xlcworICogVGltZSBpcyBtZWFzdXJlZCBiYXNlZCBvbiBh IGNvdW50ZXIgdGhhdCBydW5zIGF0IHRoZSBzYW1lIHJhdGUgYXMgdGhlIFRTQywKKyAqIHJl ZmVyIFNETSB2b2x1bWUgM2Igc2VjdGlvbiAyMS42LjEzICYgMjIuMS4zLgorICovCisjZGVm aW5lIEtWTV9WTVhfREVGQVVMVF9QTEVfR0FQICAgIDQxCisjZGVmaW5lIEtWTV9WTVhfREVG QVVMVF9QTEVfV0lORE9XIDQwOTYKK3N0YXRpYyBpbnQgcGxlX2dhcCA9IEtWTV9WTVhfREVG QVVMVF9QTEVfR0FQOworbW9kdWxlX3BhcmFtKHBsZV9nYXAsIGludCwgU19JUlVHTyk7CisK K3N0YXRpYyBpbnQgcGxlX3dpbmRvdyA9IEtWTV9WTVhfREVGQVVMVF9QTEVfV0lORE9XOwor bW9kdWxlX3BhcmFtKHBsZV93aW5kb3csIGludCwgU19JUlVHTyk7CisKIHN0cnVjdCB2bWNz IHsKIAl1MzIgcmV2aXNpb25faWQ7CiAJdTMyIGFib3J0OwpAQCAtMzE5LDYgKzMzOCwxMiBA QCBzdGF0aWMgaW5saW5lIGludCBjcHVfaGFzX3ZteF91bnJlc3RyaWN0ZWRfZ3Vlc3Qodm9p ZCkKIAkJU0VDT05EQVJZX0VYRUNfVU5SRVNUUklDVEVEX0dVRVNUOwogfQogCitzdGF0aWMg aW5saW5lIGludCBjcHVfaGFzX3ZteF9wbGUodm9pZCkKK3sKKwlyZXR1cm4gdm1jc19jb25m aWcuY3B1X2Jhc2VkXzJuZF9leGVjX2N0cmwgJgorCQlTRUNPTkRBUllfRVhFQ19QQVVTRV9M T09QX0VYSVRJTkc7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHZtX25lZWRfdmlydHVhbGl6 ZV9hcGljX2FjY2Vzc2VzKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlyZXR1cm4gZmxleHByaW9y aXR5X2VuYWJsZWQgJiYKQEAgLTEyNTYsNyArMTI4MSw4IEBAIHN0YXRpYyBfX2luaXQgaW50 IHNldHVwX3ZtY3NfY29uZmlnKHN0cnVjdCB2bWNzX2NvbmZpZyAqdm1jc19jb25mKQogCQkJ U0VDT05EQVJZX0VYRUNfV0JJTlZEX0VYSVRJTkcgfAogCQkJU0VDT05EQVJZX0VYRUNfRU5B QkxFX1ZQSUQgfAogCQkJU0VDT05EQVJZX0VYRUNfRU5BQkxFX0VQVCB8Ci0JCQlTRUNPTkRB UllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1Q7CisJCQlTRUNPTkRBUllfRVhFQ19VTlJFU1RS SUNURURfR1VFU1QgfAorCQkJU0VDT05EQVJZX0VYRUNfUEFVU0VfTE9PUF9FWElUSU5HOwog CQlpZiAoYWRqdXN0X3ZteF9jb250cm9scyhtaW4yLCBvcHQyLAogCQkJCQlNU1JfSUEzMl9W TVhfUFJPQ0JBU0VEX0NUTFMyLAogCQkJCQkmX2NwdV9iYXNlZF8ybmRfZXhlY19jb250cm9s KSA8IDApCkBAIC0xNDAwLDYgKzE0MjYsOSBAQCBzdGF0aWMgX19pbml0IGludCBoYXJkd2Fy ZV9zZXR1cCh2b2lkKQogCWlmIChlbmFibGVfZXB0ICYmICFjcHVfaGFzX3ZteF9lcHRfMm1f cGFnZSgpKQogCQlrdm1fZGlzYWJsZV9sYXJnZXBhZ2VzKCk7CiAKKwlpZiAoIWNwdV9oYXNf dm14X3BsZSgpKQorCQlwbGVfZ2FwID0gMDsKKwogCXJldHVybiBhbGxvY19rdm1fYXJlYSgp OwogfQogCkBAIC0yMzEyLDkgKzIzNDEsMTYgQEAgc3RhdGljIGludCB2bXhfdmNwdV9zZXR1 cChzdHJ1Y3QgdmNwdV92bXggKnZteCkKIAkJCWV4ZWNfY29udHJvbCAmPSB+U0VDT05EQVJZ X0VYRUNfRU5BQkxFX0VQVDsKIAkJaWYgKCFlbmFibGVfdW5yZXN0cmljdGVkX2d1ZXN0KQog CQkJZXhlY19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1Q7 CisJCWlmICghcGxlX2dhcCkKKwkJCWV4ZWNfY29udHJvbCAmPSB+U0VDT05EQVJZX0VYRUNf UEFVU0VfTE9PUF9FWElUSU5HOwogCQl2bWNzX3dyaXRlMzIoU0VDT05EQVJZX1ZNX0VYRUNf Q09OVFJPTCwgZXhlY19jb250cm9sKTsKIAl9CiAKKwlpZiAocGxlX2dhcCkgeworCQl2bWNz X3dyaXRlMzIoUExFX0dBUCwgcGxlX2dhcCk7CisJCXZtY3Nfd3JpdGUzMihQTEVfV0lORE9X LCBwbGVfd2luZG93KTsKKwl9CisKIAl2bWNzX3dyaXRlMzIoUEFHRV9GQVVMVF9FUlJPUl9D T0RFX01BU0ssICEhYnlwYXNzX2d1ZXN0X3BmKTsKIAl2bWNzX3dyaXRlMzIoUEFHRV9GQVVM VF9FUlJPUl9DT0RFX01BVENILCAhIWJ5cGFzc19ndWVzdF9wZik7CiAJdm1jc193cml0ZTMy KENSM19UQVJHRVRfQ09VTlQsIDApOyAgICAgICAgICAgLyogMjIuMi4xICovCkBAIC0zMzYy LDYgKzMzOTgsMTkgQEAgb3V0OgogfQogCiAvKgorICogSW5kaWNhdGUgYSBidXN5LXdhaXRp bmcgdmNwdSBpbiBzcGlubG9jay4gV2UgZG8gbm90IGVuYWJsZSB0aGUgUEFVU0UKKyAqIGV4 aXRpbmcsIHNvIG9ubHkgZ2V0IGhlcmUgb24gY3B1IHdpdGggUEFVU0UtTG9vcC1FeGl0aW5n LgorICovCitzdGF0aWMgaW50IGhhbmRsZV9wYXVzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs CisJCQkJc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJc2tpcF9lbXVsYXRlZF9pbnN0 cnVjdGlvbih2Y3B1KTsKKwlrdm1fdmNwdV9vbl9zcGluKHZjcHUpOworCisJcmV0dXJuIDE7 Cit9CisKKy8qCiAgKiBUaGUgZXhpdCBoYW5kbGVycyByZXR1cm4gMSBpZiB0aGUgZXhpdCB3 YXMgaGFuZGxlZCBmdWxseSBhbmQgZ3Vlc3QgZXhlY3V0aW9uCiAgKiBtYXkgcmVzdW1lLiAg T3RoZXJ3aXNlIHRoZXkgc2V0IHRoZSBrdm1fcnVuIHBhcmFtZXRlciB0byBpbmRpY2F0ZSB3 aGF0IG5lZWRzCiAgKiB0byBiZSBkb25lIHRvIHVzZXJzcGFjZSBhbmQgcmV0dXJuIDAuCkBA IC0zMzk3LDYgKzM0NDYsNyBAQCBzdGF0aWMgaW50ICgqa3ZtX3ZteF9leGl0X2hhbmRsZXJz W10pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkgPSB7CiAJW0VYSVRfUkVBU09OX01DRV9EVVJJ TkdfVk1FTlRSWV0gICAgICA9IGhhbmRsZV9tYWNoaW5lX2NoZWNrLAogCVtFWElUX1JFQVNP Tl9FUFRfVklPTEFUSU9OXQkgICAgICA9IGhhbmRsZV9lcHRfdmlvbGF0aW9uLAogCVtFWElU X1JFQVNPTl9FUFRfTUlTQ09ORklHXSAgICAgICAgICAgPSBoYW5kbGVfZXB0X21pc2NvbmZp ZywKKwlbRVhJVF9SRUFTT05fUEFVU0VfSU5TVFJVQ1RJT05dICAgICAgID0gaGFuZGxlX3Bh dXNlLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBrdm1fdm14X21heF9leGl0X2hhbmRsZXJz ID0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGlu dXgva3ZtX2hvc3QuaAppbmRleCAwYmY5ZWU5Li4wYzg2YjFkIDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBA IC0yODcsNiArMjg3LDcgQEAgaW50IGt2bV9pc192aXNpYmxlX2dmbihzdHJ1Y3Qga3ZtICpr dm0sIGdmbl90IGdmbik7CiB2b2lkIG1hcmtfcGFnZV9kaXJ0eShzdHJ1Y3Qga3ZtICprdm0s IGdmbl90IGdmbik7CiAKIHZvaWQga3ZtX3ZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2 Y3B1KTsKK3ZvaWQga3ZtX3ZjcHVfb25fc3BpbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwog dm9pZCBrdm1fcmVzY2hlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbG9h ZF9ndWVzdF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX3B1dF9ndWVz dF9mcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2 bV9tYWluLmMgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCmluZGV4IGUyN2I3YTkuLmYzNjUxOWIg MTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21h aW4uYwpAQCAtMTA5NSw2ICsxMDk1LDE3IEBAIHZvaWQga3ZtX3Jlc2NoZWQoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1KQogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3Jlc2NoZWQpOwogCit2 b2lkIGt2bV92Y3B1X29uX3NwaW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCS8qIFNs ZWVwIGZvciAxMDAgdXMsIGFuZCBob3BlIGxvY2staG9sZGVyIGdvdCBzY2hlZHVsZWQgKi8K KwlrdGltZV90IGV4cGlyZXM7CisKKwlleHBpcmVzID0ga3RpbWVfYWRkX25zKGt0aW1lX2dl dCgpLCAxMDAwMDBVTCk7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxF KTsKKwlzY2hlZHVsZV9ocnRpbWVvdXQoJmV4cGlyZXMsIEhSVElNRVJfTU9ERV9BQlMpOwor fQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3ZjcHVfb25fc3Bpbik7CisKIHN0YXRpYyBpbnQg a3ZtX3ZjcHVfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9m YXVsdCAqdm1mKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IHZtYS0+dm1fZmlsZS0+ cHJpdmF0ZV9kYXRhOwo= --------------000809070307000800060504--