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: Mon, 28 Sep 2009 17:33:45 +0800 Message-ID: <4AC082F9.1060502@intel.com> References: <4ABA2AD7.6080008@intel.com> <4ABA2C22.7020000@redhat.com> <4ABC18C6.9070202@intel.com> <4ABF2221.4000505@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020700010104020806020305" Cc: "kvm@vger.kernel.org" , "Zhai, Edwin" To: Avi Kivity Return-path: Received: from mga03.intel.com ([143.182.124.21]:16598 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751661AbZI1Jdn (ORCPT ); Mon, 28 Sep 2009 05:33:43 -0400 In-Reply-To: <4ABF2221.4000505@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------020700010104020806020305 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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. > 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. > >> /* >> + * Indicate a busy-waiting vcpu in spinlock. We do not enable the PAUSE >> + * exiting, so only get here on cpu with PAUSE-Loop-Exiting. >> + */ >> +static int handle_pause(struct kvm_vcpu *vcpu, >> + struct kvm_run *kvm_run) >> +{ >> + ktime_t expires; >> + skip_emulated_instruction(vcpu); >> + >> + /* Sleep for 1 msec, and hope lock-holder got scheduled */ >> + expires = ktime_add_ns(ktime_get(), 1000000UL); >> >> > > I think this should be much lower, 50-100us. Maybe this should be a > parameter. With 1ms we losing significant cpu time if the congestion > clears. > I have made it a parameter with default value of 100 us. > >> + 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. > and move the logic to kvm_main.c. It will be reused by > the AMD implementation, possibly my software spinlock detector, > paravirtualized spinlocks, and hopefully other architectures. > Done. > >> + return 1; >> +} >> + >> +/* >> >> > > --------------020700010104020806020305 Content-Type: application/octet-stream; name="kvm_ple_hrtimer_v2.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="kvm_ple_hrtimer_v2.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 L2t2bS92bXguYwppbmRleCAzZmUwZDQyLi5lZDQwMzg2IDEwMDY0NAotLS0gYS9hcmNoL3g4 Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC02MSw2ICs2MSwzMSBA QCBtb2R1bGVfcGFyYW1fbmFtZWQodW5yZXN0cmljdGVkX2d1ZXN0LAogc3RhdGljIGludCBf X3JlYWRfbW9zdGx5IGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSA9IDA7CiBtb2R1bGVf cGFyYW0oZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlLCBib29sLCBTX0lSVUdPKTsKIAor LyoKKyAqIFRoZXNlIDIgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBjb25maWcgdGhlIGNvbnRy b2xzIGZvciBQYXVzZS1Mb29wIEV4aXRpbmc6CisgKiBwbGVfZ2FwOiAgICB1cHBlciBib3Vu ZCBvbiB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZQorICogICAg ICAgICAgICAgZXhlY3V0aW9ucyBvZiBQQVVTRSBpbiBhIGxvb3AuIEFsc28gaW5kaWNhdGUg aWYgcGxlIGVuYWJsZWQuCisgKiAgICAgICAgICAgICBBY2NvcmRpbmcgdG8gdGVzdCwgdGhp cyB0aW1lIGlzIHVzdWFsbHkgc21hbGwgdGhhbiA0MSBjeWNsZXMuCisgKiBwbGVfd2luZG93 OiB1cHBlciBib3VuZCBvbiB0aGUgYW1vdW50IG9mIHRpbWUgYSBndWVzdCBpcyBhbGxvd2Vk IHRvIGV4ZWN1dGUKKyAqICAgICAgICAgICAgIGluIGEgUEFVU0UgbG9vcC4gVGVzdHMgaW5k aWNhdGUgdGhhdCBtb3N0IHNwaW5sb2NrcyBhcmUgaGVsZCBmb3IKKyAqICAgICAgICAgICAg IGxlc3MgdGhhbiAyXjEyIGN5Y2xlcworICogVGltZSBpcyBtZWFzdXJlZCBiYXNlZCBvbiBh IGNvdW50ZXIgdGhhdCBydW5zIGF0IHRoZSBzYW1lIHJhdGUgYXMgdGhlIFRTQywKKyAqIHJl ZmVyIFNETSB2b2x1bWUgM2Igc2VjdGlvbiAyMS42LjEzICYgMjIuMS4zLgorICovCisjZGVm aW5lIEtWTV9WTVhfREVGQVVMVF9QTEVfR0FQICAgIDQxCisjZGVmaW5lIEtWTV9WTVhfREVG QVVMVF9QTEVfV0lORE9XIDQwOTYKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBwbGVfZ2Fw ID0gS1ZNX1ZNWF9ERUZBVUxUX1BMRV9HQVA7Cittb2R1bGVfcGFyYW0ocGxlX2dhcCwgaW50 LCBTX0lSVUdPKTsKKworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHBsZV93aW5kb3cgPSBL Vk1fVk1YX0RFRkFVTFRfUExFX1dJTkRPVzsKK21vZHVsZV9wYXJhbShwbGVfd2luZG93LCBp bnQsIFNfSVJVR08pOworCisvKgorICogcGxlX3NsZWVwIGNvbnRyb2xzIGhvdyBsb25nKHVz KSB0aGUgVkNQVSBzbGVlcCB1cG9uIGEgUExFIHZtZXhpdAorICovCitzdGF0aWMgaW50IF9f cmVhZF9tb3N0bHkgcGxlX3NsZWVwID0gMTAwOworbW9kdWxlX3BhcmFtKHBsZV9zbGVlcCwg aW50LCBTX0lSVUdPKTsKKwogc3RydWN0IHZtY3MgewogCXUzMiByZXZpc2lvbl9pZDsKIAl1 MzIgYWJvcnQ7CkBAIC0zMTksNiArMzQ0LDEyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9o YXNfdm14X3VucmVzdHJpY3RlZF9ndWVzdCh2b2lkKQogCQlTRUNPTkRBUllfRVhFQ19VTlJF U1RSSUNURURfR1VFU1Q7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9oYXNfdm14X3Bs ZSh2b2lkKQoreworCXJldHVybiB2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4ZWNfY3Ry bCAmCisJCVNFQ09OREFSWV9FWEVDX1BBVVNFX0xPT1BfRVhJVElORzsKK30KKwogc3RhdGlj IGlubGluZSBpbnQgdm1fbmVlZF92aXJ0dWFsaXplX2FwaWNfYWNjZXNzZXMoc3RydWN0IGt2 bSAqa3ZtKQogewogCXJldHVybiBmbGV4cHJpb3JpdHlfZW5hYmxlZCAmJgpAQCAtMTI1Niw3 ICsxMjg3LDggQEAgc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfdm1jc19jb25maWcoc3RydWN0 IHZtY3NfY29uZmlnICp2bWNzX2NvbmYpCiAJCQlTRUNPTkRBUllfRVhFQ19XQklOVkRfRVhJ VElORyB8CiAJCQlTRUNPTkRBUllfRVhFQ19FTkFCTEVfVlBJRCB8CiAJCQlTRUNPTkRBUllf RVhFQ19FTkFCTEVfRVBUIHwKLQkJCVNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVT VDsKKwkJCVNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVCB8CisJCQlTRUNPTkRB UllfRVhFQ19QQVVTRV9MT09QX0VYSVRJTkc7CiAJCWlmIChhZGp1c3Rfdm14X2NvbnRyb2xz KG1pbjIsIG9wdDIsCiAJCQkJCU1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUzIsCiAJCQkJ CSZfY3B1X2Jhc2VkXzJuZF9leGVjX2NvbnRyb2wpIDwgMCkKQEAgLTE0MDAsNiArMTQzMiw5 IEBAIHN0YXRpYyBfX2luaXQgaW50IGhhcmR3YXJlX3NldHVwKHZvaWQpCiAJaWYgKGVuYWJs ZV9lcHQgJiYgIWNwdV9oYXNfdm14X2VwdF8ybV9wYWdlKCkpCiAJCWt2bV9kaXNhYmxlX2xh cmdlcGFnZXMoKTsKIAorCWlmICghY3B1X2hhc192bXhfcGxlKCkpCisJCXBsZV9nYXAgPSAw OworCiAJcmV0dXJuIGFsbG9jX2t2bV9hcmVhKCk7CiB9CiAKQEAgLTIzMTIsOSArMjM0Nywx NiBAQCBzdGF0aWMgaW50IHZteF92Y3B1X3NldHVwKHN0cnVjdCB2Y3B1X3ZteCAqdm14KQog CQkJZXhlY19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19FTkFCTEVfRVBUOwogCQlpZiAo IWVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QpCiAJCQlleGVjX2NvbnRyb2wgJj0gflNFQ09O REFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKKwkJaWYgKCFwbGVfZ2FwKQorCQkJZXhl Y19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19QQVVTRV9MT09QX0VYSVRJTkc7CiAJCXZt Y3Nfd3JpdGUzMihTRUNPTkRBUllfVk1fRVhFQ19DT05UUk9MLCBleGVjX2NvbnRyb2wpOwog CX0KIAorCWlmIChwbGVfZ2FwKSB7CisJCXZtY3Nfd3JpdGUzMihQTEVfR0FQLCBwbGVfZ2Fw KTsKKwkJdm1jc193cml0ZTMyKFBMRV9XSU5ET1csIHBsZV93aW5kb3cpOworCX0KKwogCXZt Y3Nfd3JpdGUzMihQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFTSywgISFieXBhc3NfZ3Vlc3Rf cGYpOwogCXZtY3Nfd3JpdGUzMihQQUdFX0ZBVUxUX0VSUk9SX0NPREVfTUFUQ0gsICEhYnlw YXNzX2d1ZXN0X3BmKTsKIAl2bWNzX3dyaXRlMzIoQ1IzX1RBUkdFVF9DT1VOVCwgMCk7ICAg ICAgICAgICAvKiAyMi4yLjEgKi8KQEAgLTMzNjIsNiArMzQwNCwxOSBAQCBvdXQ6CiB9CiAK IC8qCisgKiBJbmRpY2F0ZSBhIGJ1c3ktd2FpdGluZyB2Y3B1IGluIHNwaW5sb2NrLiBXZSBk byBub3QgZW5hYmxlIHRoZSBQQVVTRQorICogZXhpdGluZywgc28gb25seSBnZXQgaGVyZSBv biBjcHUgd2l0aCBQQVVTRS1Mb29wLUV4aXRpbmcuCisgKi8KK3N0YXRpYyBpbnQgaGFuZGxl X3BhdXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQlzdHJ1Y3Qga3ZtX3J1biAqa3Zt X3J1bikKK3sKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOworCWt2bV92Y3B1 X3NsZWVwKHZjcHUsIHBsZV9zbGVlcCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKICAqIFRo ZSBleGl0IGhhbmRsZXJzIHJldHVybiAxIGlmIHRoZSBleGl0IHdhcyBoYW5kbGVkIGZ1bGx5 IGFuZCBndWVzdCBleGVjdXRpb24KICAqIG1heSByZXN1bWUuICBPdGhlcndpc2UgdGhleSBz ZXQgdGhlIGt2bV9ydW4gcGFyYW1ldGVyIHRvIGluZGljYXRlIHdoYXQgbmVlZHMKICAqIHRv IGJlIGRvbmUgdG8gdXNlcnNwYWNlIGFuZCByZXR1cm4gMC4KQEAgLTMzOTcsNiArMzQ1Miw3 IEBAIHN0YXRpYyBpbnQgKCprdm1fdm14X2V4aXRfaGFuZGxlcnNbXSkoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1KSA9IHsKIAlbRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZXSAgICAg ID0gaGFuZGxlX21hY2hpbmVfY2hlY2ssCiAJW0VYSVRfUkVBU09OX0VQVF9WSU9MQVRJT05d CSAgICAgID0gaGFuZGxlX2VwdF92aW9sYXRpb24sCiAJW0VYSVRfUkVBU09OX0VQVF9NSVND T05GSUddICAgICAgICAgICA9IGhhbmRsZV9lcHRfbWlzY29uZmlnLAorCVtFWElUX1JFQVNP Tl9QQVVTRV9JTlNUUlVDVElPTl0gICAgICAgPSBoYW5kbGVfcGF1c2UsCiB9OwogCiBzdGF0 aWMgY29uc3QgaW50IGt2bV92bXhfbWF4X2V4aXRfaGFuZGxlcnMgPQpkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmlu ZGV4IDBiZjllZTkuLjM3MjNkNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hv c3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTI4Nyw2ICsyODcsNyBA QCBpbnQga3ZtX2lzX3Zpc2libGVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsK IHZvaWQgbWFya19wYWdlX2RpcnR5KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIAog dm9pZCBrdm1fdmNwdV9ibG9jayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1f dmNwdV9zbGVlcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBzbGVlcF90 aW1lKTsKIHZvaWQga3ZtX3Jlc2NoZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQg a3ZtX2xvYWRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV9w dXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS92aXJ0 L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBlMjdiN2E5Li5m ZjAwNmNlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3Zt L2t2bV9tYWluLmMKQEAgLTEwOTUsNiArMTA5NSwxNyBAQCB2b2lkIGt2bV9yZXNjaGVkKHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9yZXNjaGVk KTsKIAordm9pZCBrdm1fdmNwdV9zbGVlcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2ln bmVkIGludCBzbGVlcF90aW1lKQoreworCS8qIFNsZWVwIGZvciByZXF1aXJlZCB0aW1lKHVz KSwgYW5kIGhvcGUgbG9jay1ob2xkZXIgZ290IHNjaGVkdWxlZCAqLworCWt0aW1lX3QgZXhw aXJlczsKKworCWV4cGlyZXMgPSBrdGltZV9hZGRfbnMoa3RpbWVfZ2V0KCksIDEwMDBVTCAq IHNsZWVwX3RpbWUpOworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7 CisJc2NoZWR1bGVfaHJ0aW1lb3V0KCZleHBpcmVzLCBIUlRJTUVSX01PREVfQUJTKTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKGt2bV92Y3B1X3NsZWVwKTsKKwogc3RhdGljIGludCBrdm1f dmNwdV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0 ICp2bWYpCiB7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gdm1hLT52bV9maWxlLT5wcml2 YXRlX2RhdGE7Cg== --------------020700010104020806020305--