Commit fb7db41c authored by Simon Glass's avatar Simon Glass
Browse files

bootstage: Allow marking a particular line of code



Add a function which allows a (file, function, line number) to be marked
in bootstage.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
Reviewed-by: default avatarChe-Liang Chiou <clchiou@chromium.org>
parent 2e65959b
......@@ -30,6 +30,8 @@
#include <common.h>
#include <libfdt.h>
#include <malloc.h>
#include <linux/compiler.h>
DECLARE_GLOBAL_DATA_PTR;
......@@ -117,6 +119,33 @@ ulong bootstage_mark_name(enum bootstage_id id, const char *name)
return bootstage_add_record(id, name, flags, timer_get_boot_us());
}
ulong bootstage_mark_code(const char *file, const char *func, int linenum)
{
char *str, *p;
__maybe_unused char *end;
int len = 0;
/* First work out the length we need to allocate */
if (linenum != -1)
len = 11;
if (func)
len += strlen(func);
if (file)
len += strlen(file);
str = malloc(len + 1);
p = str;
end = p + len;
if (file)
p += snprintf(p, end - p, "%s,", file);
if (linenum != -1)
p += snprintf(p, end - p, "%d", linenum);
if (func)
p += snprintf(p, end - p, ": %s", func);
return bootstage_mark_name(BOOTSTAGE_ID_ALLOC, str);
}
uint32_t bootstage_start(enum bootstage_id id, const char *name)
{
struct bootstage_record *rec = &record[id];
......
......@@ -266,6 +266,19 @@ ulong bootstage_error(enum bootstage_id id);
ulong bootstage_mark_name(enum bootstage_id id, const char *name);
/**
* Mark a time stamp in the given function and line number
*
* See BOOTSTAGE_MARKER() for a convenient macro.
*
* @param file Filename to record (NULL if none)
* @param func Function name to record
* @param linenum Line number to record
* @return recorded time stamp
*/
ulong bootstage_mark_code(const char *file, const char *func,
int linenum);
/**
* Mark the start of a bootstage activity. The end will be marked later with
* bootstage_accum() and at that point we accumulate the time taken. Calling
......@@ -358,6 +371,12 @@ static inline ulong bootstage_mark_name(enum bootstage_id id, const char *name)
return 0;
}
static inline ulong bootstage_mark_code(const char *file, const char *func,
int linenum)
{
return 0;
}
static inline uint32_t bootstage_start(enum bootstage_id id, const char *name)
{
return 0;
......@@ -379,4 +398,8 @@ static inline int bootstage_unstash(void *base, int size)
}
#endif /* CONFIG_BOOTSTAGE */
/* Helper macro for adding a bootstage to a line of code */
#define BOOTSTAGE_MARKER() \
bootstage_mark_code(__FILE__, __func__, __LINE__)
#endif
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment