Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6846b3b5 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Bjorn Helgaas
Browse files

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: default avatarPaul Menzel <pmenzel@molgen.mpg.de>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent d89bd919
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -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,13 +3116,12 @@ 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;
	if (initcall_debug || duration > 10000)
		pci_info(dev, "%pF took %lld usecs\n", fn, duration);
}
}

/*
 * Some BIOS implementations leave the Intel GPU interrupts enabled,