aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2021-06-09 16:49:53 -0600
committerWerner Zeh <werner.zeh@siemens.com>2021-06-14 05:20:59 +0000
commitcb4287423150179da5a744884830e4abaae9a66f (patch)
tree7de1ee5650b452ff2474d5ba4101fb623a81b515 /src
parent83156682d6e027dd5ef49be55b676c401ca9f1b8 (diff)
lib/hardwaremain: Print individual boot state callback durations
This is useful when trying to find which callbacks are taking the longest time. BUG=b:179092979 TEST=See bootstate durations in logs BS: callback (0xcb79d4d8) @ src/security/vboot/bootmode.c:53 (0 ms). BS: callback (0xcb79cf20) @ src/vendorcode/google/chromeos/ramoops.c:30 (0 ms). BS: callback (0xcb79cef0) @ src/vendorcode/google/chromeos/cr50_enable_update.c:160 (18 ms). Signed-off-by: Raul E Rangel <rrangel@chromium.org> Change-Id: Ifb145fea32ad4e0b694bdb7cdcdd43dce4cc0d27 Reviewed-on: https://review.coreboot.org/c/coreboot/+/55374 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Julius Werner <jwerner@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/lib/hardwaremain.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c
index 7ab2ade912..90c910a320 100644
--- a/src/lib/hardwaremain.c
+++ b/src/lib/hardwaremain.c
@@ -264,6 +264,7 @@ static void bs_call_callbacks(struct boot_state *state,
boot_state_sequence_t seq)
{
struct boot_phase *phase = &state->phases[seq];
+ struct mono_time mt_start, mt_stop;
while (1) {
if (phase->callbacks != NULL) {
@@ -277,8 +278,16 @@ static void bs_call_callbacks(struct boot_state *state,
if (CONFIG(DEBUG_BOOT_STATE)) {
printk(BIOS_DEBUG, "BS: callback (%p) @ %s.\n",
bscb, bscb_location(bscb));
+ timer_monotonic_get(&mt_start);
}
bscb->callback(bscb->arg);
+ if (CONFIG(DEBUG_BOOT_STATE)) {
+ timer_monotonic_get(&mt_stop);
+ printk(BIOS_DEBUG, "BS: callback (%p) @ %s (%ld ms).\n", bscb,
+ bscb_location(bscb),
+ mono_time_diff_microseconds(&mt_start, &mt_stop)
+ / USECS_PER_MSEC);
+ }
continue;
}