From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754344AbdL1V1f (ORCPT ); Thu, 28 Dec 2017 16:27:35 -0500 Received: from mail.kernel.org ([198.145.29.99]:58762 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751220AbdL1V1d (ORCPT ); Thu, 28 Dec 2017 16:27:33 -0500 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 042482187C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=helgaas@kernel.org Date: Thu, 28 Dec 2017 15:27:23 -0600 From: Bjorn Helgaas To: Paul Menzel Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, David Woodhouse , Andy Shevchenko , linux-usb@vger.kernel.org Subject: Re: `pci_apply_final_quirks()` taking half a second Message-ID: <20171228212723.GB211339@bhelgaas-glaptop.roam.corp.google.com> References: <44cada166e42007d27b4c3e3aa0744d7@molgen.mpg.de> <20170408154128.GA16832@bhelgaas-glaptop.roam.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Dec 26, 2017 at 04:55:20PM +0100, Paul Menzel wrote: > Am 08.04.2017 um 17:41 schrieb Bjorn Helgaas: > >On Fri, Apr 07, 2017 at 11:07:15PM +0200, Paul Menzel wrote: > > >>Measuring where time is spent during boot with `systemd-bootchart` > >>on an Asus A780FullHD, it turns out that half a second is spent in > >>`pci_apply_final_quirks()`. > > > >I agree, that seems like a crazy amount of time. > > > >Can you figure out how to turn on pr_debug() (via the dynamic debug > >mess or whatever) and boot with "initcall_debug"? That should tell us > >how long each quirk took. > > I am sorry for taking so long to reply. I finally added `dyndbg=file > quirks.c +p` to the command line of Linux 4.13.13. This is on > another AMD system (Asus F285M Pro). > > ``` > […] > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:00.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_no_pm_reset+0x0/0x20 returned after 0 usecs for 0000:00:01.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:18.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:18.1 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:18.2 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:18.3 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:18.4 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_mmio_always_on+0x0/0x10 returned after 0 usecs for > 0000:00:18.5 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > pci_fixup_video+0x0/0x110 returned after 4 usecs for 0000:00:01.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 197 usecs for > 0000:00:10.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 127 usecs for > 0000:00:10.1 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 88643 usecs for > 0000:00:12.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 137 usecs for > 0000:00:12.2 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > pci_fixup_amd_ehci_pme+0x0/0x30 returned after 1 usecs for > 0000:00:12.2 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 85770 usecs for > 0000:00:13.0 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 134 usecs for > 0000:00:13.2 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > pci_fixup_amd_ehci_pme+0x0/0x30 returned after 1 usecs for > 0000:00:13.2 > Dez 26 16:21:46 asus-f2a85-pro kernel: pci fixup > quirk_usb_early_handoff+0x0/0x6b0 returned after 125 usecs for > 0000:03:00.0[…] > ``` > > So it’s `pci fixup quirk_usb_early_handoff` taking around 85 ms, and > that twice. Wow. That's pretty painful, but of course I don't know how to fix it. >>From looking at quirk_usb_early_handoff(), it may depend on BIOS details. Maybe the USB folks will have some ideas. >>From the PCI perspective, we could do something like the following to make slow quirks more noticeable and perhaps provide a little hint that quirk performance is important. commit a9eec698db04ccffa1fe43634752220a2fd2108d Author: Bjorn Helgaas Date: Thu Dec 28 13:23:03 2017 -0600 PCI: Report quirks that take more than 10ms When the "initcall_debug" kernel parameter is used, we report the runtime of each PCI quirk. In addition, report the runtime of any quirk that takes more than 10ms to execute. The purpose is to make it easier to notice quirks that slow down boot. Signed-off-by: Bjorn Helgaas diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index fd49b976973f..96008ff78a1a 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -3105,16 +3105,12 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x0e0d, quirk_intel_ntb); static ktime_t fixup_debug_start(struct pci_dev *dev, void (*fn)(struct pci_dev *dev)) { - ktime_t calltime = 0; - - dev_dbg(&dev->dev, "calling %pF\n", fn); if (initcall_debug) { - pr_debug("calling %pF @ %i for %s\n", - fn, task_pid_nr(current), dev_name(&dev->dev)); - calltime = ktime_get(); + dev_info(&dev->dev, "calling %pF @ %i\n", + fn, task_pid_nr(current)); } - return calltime; + return ktime_get(); } static void fixup_debug_report(struct pci_dev *dev, ktime_t calltime, @@ -3123,12 +3119,11 @@ static void fixup_debug_report(struct pci_dev *dev, ktime_t calltime, ktime_t delta, rettime; unsigned long long duration; - if (initcall_debug) { - rettime = ktime_get(); - delta = ktime_sub(rettime, calltime); - duration = (unsigned long long) ktime_to_ns(delta) >> 10; - pr_debug("pci fixup %pF returned after %lld usecs for %s\n", - fn, duration, dev_name(&dev->dev)); + rettime = ktime_get(); + delta = ktime_sub(rettime, calltime); + duration = (unsigned long long) ktime_to_ns(delta) >> 10; + if (initcall_debug || duration > 10000) { + dev_info(&dev->dev, "%pF took %lld usecs\n", fn, duration); } } From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: `pci_apply_final_quirks()` taking half a second From: Bjorn Helgaas Message-Id: <20171228212723.GB211339@bhelgaas-glaptop.roam.corp.google.com> Date: Thu, 28 Dec 2017 15:27:23 -0600 To: Paul Menzel Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, David Woodhouse , Andy Shevchenko , linux-usb@vger.kernel.org List-ID: T24gVHVlLCBEZWMgMjYsIDIwMTcgYXQgMDQ6NTU6MjBQTSArMDEwMCwgUGF1bCBNZW56ZWwgd3Jv dGU6Cj4gQW0gMDguMDQuMjAxNyB1bSAxNzo0MSBzY2hyaWViIEJqb3JuIEhlbGdhYXM6Cj4gPk9u IEZyaSwgQXByIDA3LCAyMDE3IGF0IDExOjA3OjE1UE0gKzAyMDAsIFBhdWwgTWVuemVsIHdyb3Rl Ogo+IAo+ID4+TWVhc3VyaW5nIHdoZXJlIHRpbWUgaXMgc3BlbnQgZHVyaW5nIGJvb3Qgd2l0aCBg c3lzdGVtZC1ib290Y2hhcnRgCj4gPj5vbiBhbiBBc3VzIEE3ODBGdWxsSEQsIGl0IHR1cm5zIG91 dCB0aGF0IGhhbGYgYSBzZWNvbmQgaXMgc3BlbnQgaW4KPiA+PmBwY2lfYXBwbHlfZmluYWxfcXVp cmtzKClgLgo+ID4KPiA+SSBhZ3JlZSwgdGhhdCBzZWVtcyBsaWtlIGEgY3JhenkgYW1vdW50IG9m IHRpbWUuCj4gPgo+ID5DYW4geW91IGZpZ3VyZSBvdXQgaG93IHRvIHR1cm4gb24gcHJfZGVidWco KSAodmlhIHRoZSBkeW5hbWljIGRlYnVnCj4gPm1lc3Mgb3Igd2hhdGV2ZXIpIGFuZCBib290IHdp dGggImluaXRjYWxsX2RlYnVnIj8gIFRoYXQgc2hvdWxkIHRlbGwgdXMKPiA+aG93IGxvbmcgZWFj aCBxdWlyayB0b29rLgo+IAo+IEkgYW0gc29ycnkgZm9yIHRha2luZyBzbyBsb25nIHRvIHJlcGx5 LiBJIGZpbmFsbHkgYWRkZWQgYGR5bmRiZz1maWxlCj4gcXVpcmtzLmMgK3BgIHRvIHRoZSBjb21t YW5kIGxpbmUgb2YgTGludXggNC4xMy4xMy4gVGhpcyBpcyBvbgo+IGFub3RoZXIgQU1EIHN5c3Rl bSAoQXN1cyBGMjg1TSBQcm8pLgo+IAo+IGBgYAo+IFvigKZdCj4gRGV6IDI2IDE2OjIxOjQ2IGFz dXMtZjJhODUtcHJvIGtlcm5lbDogcGNpIGZpeHVwCj4gcXVpcmtfbW1pb19hbHdheXNfb24rMHgw LzB4MTAgcmV0dXJuZWQgYWZ0ZXIgMCB1c2VjcyBmb3IKPiAwMDAwOjAwOjAwLjAKPiBEZXogMjYg MTY6MjE6NDYgYXN1cy1mMmE4NS1wcm8ga2VybmVsOiBwY2kgZml4dXAKPiBxdWlya19ub19wbV9y ZXNldCsweDAvMHgyMCByZXR1cm5lZCBhZnRlciAwIHVzZWNzIGZvciAwMDAwOjAwOjAxLjAKPiBE ZXogMjYgMTY6MjE6NDYgYXN1cy1mMmE4NS1wcm8ga2VybmVsOiBwY2kgZml4dXAKPiBxdWlya19t bWlvX2Fsd2F5c19vbisweDAvMHgxMCByZXR1cm5lZCBhZnRlciAwIHVzZWNzIGZvcgo+IDAwMDA6 MDA6MTguMAo+IERleiAyNiAxNjoyMTo0NiBhc3VzLWYyYTg1LXBybyBrZXJuZWw6IHBjaSBmaXh1 cAo+IHF1aXJrX21taW9fYWx3YXlzX29uKzB4MC8weDEwIHJldHVybmVkIGFmdGVyIDAgdXNlY3Mg Zm9yCj4gMDAwMDowMDoxOC4xCj4gRGV6IDI2IDE2OjIxOjQ2IGFzdXMtZjJhODUtcHJvIGtlcm5l bDogcGNpIGZpeHVwCj4gcXVpcmtfbW1pb19hbHdheXNfb24rMHgwLzB4MTAgcmV0dXJuZWQgYWZ0 ZXIgMCB1c2VjcyBmb3IKPiAwMDAwOjAwOjE4LjIKPiBEZXogMjYgMTY6MjE6NDYgYXN1cy1mMmE4 NS1wcm8ga2VybmVsOiBwY2kgZml4dXAKPiBxdWlya19tbWlvX2Fsd2F5c19vbisweDAvMHgxMCBy ZXR1cm5lZCBhZnRlciAwIHVzZWNzIGZvcgo+IDAwMDA6MDA6MTguMwo+IERleiAyNiAxNjoyMTo0 NiBhc3VzLWYyYTg1LXBybyBrZXJuZWw6IHBjaSBmaXh1cAo+IHF1aXJrX21taW9fYWx3YXlzX29u KzB4MC8weDEwIHJldHVybmVkIGFmdGVyIDAgdXNlY3MgZm9yCj4gMDAwMDowMDoxOC40Cj4gRGV6 IDI2IDE2OjIxOjQ2IGFzdXMtZjJhODUtcHJvIGtlcm5lbDogcGNpIGZpeHVwCj4gcXVpcmtfbW1p b19hbHdheXNfb24rMHgwLzB4MTAgcmV0dXJuZWQgYWZ0ZXIgMCB1c2VjcyBmb3IKPiAwMDAwOjAw OjE4LjUKPiBEZXogMjYgMTY6MjE6NDYgYXN1cy1mMmE4NS1wcm8ga2VybmVsOiBwY2kgZml4dXAK PiBwY2lfZml4dXBfdmlkZW8rMHgwLzB4MTEwIHJldHVybmVkIGFmdGVyIDQgdXNlY3MgZm9yIDAw MDA6MDA6MDEuMAo+IERleiAyNiAxNjoyMTo0NiBhc3VzLWYyYTg1LXBybyBrZXJuZWw6IHBjaSBm aXh1cAo+IHF1aXJrX3VzYl9lYXJseV9oYW5kb2ZmKzB4MC8weDZiMCByZXR1cm5lZCBhZnRlciAx OTcgdXNlY3MgZm9yCj4gMDAwMDowMDoxMC4wCj4gRGV6IDI2IDE2OjIxOjQ2IGFzdXMtZjJhODUt cHJvIGtlcm5lbDogcGNpIGZpeHVwCj4gcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYrMHgwLzB4NmIw IHJldHVybmVkIGFmdGVyIDEyNyB1c2VjcyBmb3IKPiAwMDAwOjAwOjEwLjEKPiBEZXogMjYgMTY6 MjE6NDYgYXN1cy1mMmE4NS1wcm8ga2VybmVsOiBwY2kgZml4dXAKPiBxdWlya191c2JfZWFybHlf aGFuZG9mZisweDAvMHg2YjAgcmV0dXJuZWQgYWZ0ZXIgODg2NDMgdXNlY3MgZm9yCj4gMDAwMDow MDoxMi4wCj4gRGV6IDI2IDE2OjIxOjQ2IGFzdXMtZjJhODUtcHJvIGtlcm5lbDogcGNpIGZpeHVw Cj4gcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYrMHgwLzB4NmIwIHJldHVybmVkIGFmdGVyIDEzNyB1 c2VjcyBmb3IKPiAwMDAwOjAwOjEyLjIKPiBEZXogMjYgMTY6MjE6NDYgYXN1cy1mMmE4NS1wcm8g a2VybmVsOiBwY2kgZml4dXAKPiBwY2lfZml4dXBfYW1kX2VoY2lfcG1lKzB4MC8weDMwIHJldHVy bmVkIGFmdGVyIDEgdXNlY3MgZm9yCj4gMDAwMDowMDoxMi4yCj4gRGV6IDI2IDE2OjIxOjQ2IGFz dXMtZjJhODUtcHJvIGtlcm5lbDogcGNpIGZpeHVwCj4gcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYr MHgwLzB4NmIwIHJldHVybmVkIGFmdGVyIDg1NzcwIHVzZWNzIGZvcgo+IDAwMDA6MDA6MTMuMAo+ IERleiAyNiAxNjoyMTo0NiBhc3VzLWYyYTg1LXBybyBrZXJuZWw6IHBjaSBmaXh1cAo+IHF1aXJr X3VzYl9lYXJseV9oYW5kb2ZmKzB4MC8weDZiMCByZXR1cm5lZCBhZnRlciAxMzQgdXNlY3MgZm9y Cj4gMDAwMDowMDoxMy4yCj4gRGV6IDI2IDE2OjIxOjQ2IGFzdXMtZjJhODUtcHJvIGtlcm5lbDog cGNpIGZpeHVwCj4gcGNpX2ZpeHVwX2FtZF9laGNpX3BtZSsweDAvMHgzMCByZXR1cm5lZCBhZnRl ciAxIHVzZWNzIGZvcgo+IDAwMDA6MDA6MTMuMgo+IERleiAyNiAxNjoyMTo0NiBhc3VzLWYyYTg1 LXBybyBrZXJuZWw6IHBjaSBmaXh1cAo+IHF1aXJrX3VzYl9lYXJseV9oYW5kb2ZmKzB4MC8weDZi MCByZXR1cm5lZCBhZnRlciAxMjUgdXNlY3MgZm9yCj4gMDAwMDowMzowMC4wW+KApl0KPiBgYGAK PiAKPiBTbyBpdOKAmXMgYHBjaSBmaXh1cCBxdWlya191c2JfZWFybHlfaGFuZG9mZmAgdGFraW5n IGFyb3VuZCA4NSBtcywgYW5kCj4gdGhhdCB0d2ljZS4KCldvdy4gIFRoYXQncyBwcmV0dHkgcGFp bmZ1bCwgYnV0IG9mIGNvdXJzZSBJIGRvbid0IGtub3cgaG93IHRvIGZpeCBpdC4KRnJvbSBsb29r aW5nIGF0IHF1aXJrX3VzYl9lYXJseV9oYW5kb2ZmKCksIGl0IG1heSBkZXBlbmQgb24gQklPUwpk ZXRhaWxzLiAgTWF5YmUgdGhlIFVTQiBmb2xrcyB3aWxsIGhhdmUgc29tZSBpZGVhcy4KCkZyb20g dGhlIFBDSSBwZXJzcGVjdGl2ZSwgd2UgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxv d2luZyB0bwptYWtlIHNsb3cgcXVpcmtzIG1vcmUgbm90aWNlYWJsZSBhbmQgcGVyaGFwcyBwcm92 aWRlIGEgbGl0dGxlIGhpbnQKdGhhdCBxdWlyayBwZXJmb3JtYW5jZSBpcyBpbXBvcnRhbnQuCgoK Y29tbWl0IGE5ZWVjNjk4ZGIwNGNjZmZhMWZlNDM2MzQ3NTIyMjBhMmZkMjEwOGQKQXV0aG9yOiBC am9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPgpEYXRlOiAgIFRodSBEZWMgMjggMTM6 MjM6MDMgMjAxNyAtMDYwMAoKICAgIFBDSTogUmVwb3J0IHF1aXJrcyB0aGF0IHRha2UgbW9yZSB0 aGFuIDEwbXMKICAgIAogICAgV2hlbiB0aGUgImluaXRjYWxsX2RlYnVnIiBrZXJuZWwgcGFyYW1l dGVyIGlzIHVzZWQsIHdlIHJlcG9ydCB0aGUgcnVudGltZQogICAgb2YgZWFjaCBQQ0kgcXVpcmsu ICBJbiBhZGRpdGlvbiwgcmVwb3J0IHRoZSBydW50aW1lIG9mIGFueSBxdWlyayB0aGF0IHRha2Vz CiAgICBtb3JlIHRoYW4gMTBtcyB0byBleGVjdXRlLiAgVGhlIHB1cnBvc2UgaXMgdG8gbWFrZSBp dCBlYXNpZXIgdG8gbm90aWNlCiAgICBxdWlya3MgdGhhdCBzbG93IGRvd24gYm9vdC4KICAgIAog ICAgU2lnbmVkLW9mZi1ieTogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4KLS0t ClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmli ZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5r ZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcv bWFqb3Jkb21vLWluZm8uaHRtbAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIv ZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggZmQ0OWI5NzY5NzNmLi45NjAwOGZmNzhhMWEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5j CkBAIC0zMTA1LDE2ICszMTA1LDEyIEBAIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVO RE9SX0lEX0lOVEVMLCAweDBlMGQsIHF1aXJrX2ludGVsX250Yik7CiBzdGF0aWMga3RpbWVfdCBm aXh1cF9kZWJ1Z19zdGFydChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCSB2b2lkICgqZm4pKHN0 cnVjdCBwY2lfZGV2ICpkZXYpKQogewotCWt0aW1lX3QgY2FsbHRpbWUgPSAwOwotCi0JZGV2X2Ri ZygmZGV2LT5kZXYsICJjYWxsaW5nICVwRlxuIiwgZm4pOwogCWlmIChpbml0Y2FsbF9kZWJ1Zykg ewotCQlwcl9kZWJ1ZygiY2FsbGluZyAgJXBGIEAgJWkgZm9yICVzXG4iLAotCQkJIGZuLCB0YXNr X3BpZF9ucihjdXJyZW50KSwgZGV2X25hbWUoJmRldi0+ZGV2KSk7Ci0JCWNhbGx0aW1lID0ga3Rp bWVfZ2V0KCk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgImNhbGxpbmcgJXBGIEAgJWlcbiIsCisJ CQkgZm4sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAl9CiAKLQlyZXR1cm4gY2FsbHRpbWU7CisJ cmV0dXJuIGt0aW1lX2dldCgpOwogfQogCiBzdGF0aWMgdm9pZCBmaXh1cF9kZWJ1Z19yZXBvcnQo c3RydWN0IHBjaV9kZXYgKmRldiwga3RpbWVfdCBjYWxsdGltZSwKQEAgLTMxMjMsMTIgKzMxMTks MTEgQEAgc3RhdGljIHZvaWQgZml4dXBfZGVidWdfcmVwb3J0KHN0cnVjdCBwY2lfZGV2ICpkZXYs IGt0aW1lX3QgY2FsbHRpbWUsCiAJa3RpbWVfdCBkZWx0YSwgcmV0dGltZTsKIAl1bnNpZ25lZCBs b25nIGxvbmcgZHVyYXRpb247CiAKLQlpZiAoaW5pdGNhbGxfZGVidWcpIHsKLQkJcmV0dGltZSA9 IGt0aW1lX2dldCgpOwotCQlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7Ci0J CWR1cmF0aW9uID0gKHVuc2lnbmVkIGxvbmcgbG9uZykga3RpbWVfdG9fbnMoZGVsdGEpID4+IDEw OwotCQlwcl9kZWJ1ZygicGNpIGZpeHVwICVwRiByZXR1cm5lZCBhZnRlciAlbGxkIHVzZWNzIGZv ciAlc1xuIiwKLQkJCSBmbiwgZHVyYXRpb24sIGRldl9uYW1lKCZkZXYtPmRldikpOworCXJldHRp bWUgPSBrdGltZV9nZXQoKTsKKwlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7 CisJZHVyYXRpb24gPSAodW5zaWduZWQgbG9uZyBsb25nKSBrdGltZV90b19ucyhkZWx0YSkgPj4g MTA7CisJaWYgKGluaXRjYWxsX2RlYnVnIHx8IGR1cmF0aW9uID4gMTAwMDApIHsKKwkJZGV2X2lu Zm8oJmRldi0+ZGV2LCAiJXBGIHRvb2sgJWxsZCB1c2Vjc1xuIiwgZm4sIGR1cmF0aW9uKTsKIAl9 CiB9CiAK