diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2018-03-14 15:52:30 +0300 |
---|---|---|
committer | Bjorn Helgaas <helgaas@kernel.org> | 2018-03-19 21:08:38 +0300 |
commit | 6846b3b5127a9e041f18f0019c38c1fd08acfbaa (patch) | |
tree | 2d424bc936481e011bfe56542fe7daf40c20405b /drivers/pci/quirks.c | |
parent | d89bd9195db62f51a5aaa88d887d81a7967554bd (diff) | |
download | linux-6846b3b5127a9e041f18f0019c38c1fd08acfbaa.tar.xz |
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 <pmenzel@molgen.mpg.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 4c6825fc8b0f..05c49ba387b6 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); - } } /* |