From 6846b3b5127a9e041f18f0019c38c1fd08acfbaa Mon Sep 17 00:00:00 2001 From: Bjorn Helgaas Date: Wed, 14 Mar 2018 07:52:30 -0500 Subject: [PATCH] PCI: Report quirks that take more than 10ms With "initcall_debug", we report how long every PCI quirk took. Even without "initcall_debug", report the runtime of any quirk that takes longer than 10ms. This is to make it easier to notice quirks that slow down boot. This was motivated by a report from Paul Menzel that PCI final quirks took half a second at boot. Link: https://lkml.kernel.org/r/44cada166e42007d27b4c3e3aa0744d7@molgen.mpg.de Reported-by: Paul Menzel Signed-off-by: Bjorn Helgaas --- drivers/pci/quirks.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 4c6825f..05c49ba 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -3104,14 +3104,10 @@ 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; - - if (initcall_debug) { + if (initcall_debug) pci_info(dev, "calling %pF @ %i\n", fn, task_pid_nr(current)); - calltime = ktime_get(); - } - return calltime; + return ktime_get(); } static void fixup_debug_report(struct pci_dev *dev, ktime_t calltime, @@ -3120,12 +3116,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; + rettime = ktime_get(); + delta = ktime_sub(rettime, calltime); + duration = (unsigned long long) ktime_to_ns(delta) >> 10; + if (initcall_debug || duration > 10000) pci_info(dev, "%pF took %lld usecs\n", fn, duration); - } } /* -- 2.7.4