git: c8dfc327db23 - main - stand/common: Add support for timestamp logging (tslog)

Colin Percival cperciva at FreeBSD.org
Mon Jun 21 03:29:09 UTC 2021


The branch main has been updated by cperciva:

URL: https://cgit.FreeBSD.org/src/commit/?id=c8dfc327db2373c721a35efe857cf07262fd7dd0

commit c8dfc327db2373c721a35efe857cf07262fd7dd0
Author:     Colin Percival <cperciva at FreeBSD.org>
AuthorDate: 2021-05-30 20:30:28 +0000
Commit:     Colin Percival <cperciva at FreeBSD.org>
CommitDate: 2021-06-21 03:09:43 +0000

    stand/common: Add support for timestamp logging (tslog)
    
    This adds tslog_init, which allocates a 2MB buffer for recording
    timestamped events; and tslog_publish, which takes the buffer and
    passes it to the kernel as a "preloaded module".  These functions
    will be used in a later commit.
    
    Reviewed by:    kevans
---
 stand/common/bootstrap.h |  2 ++
 stand/common/tslog.c     | 81 ++++++++++++++++++++++++++++++++++++++++++++++++
 stand/loader.mk          |  2 +-
 3 files changed, 84 insertions(+), 1 deletion(-)

diff --git a/stand/common/bootstrap.h b/stand/common/bootstrap.h
index d94d35b555e4..b7e1f8553f47 100644
--- a/stand/common/bootstrap.h
+++ b/stand/common/bootstrap.h
@@ -261,6 +261,8 @@ int file_addmodule(struct preloaded_file *, char *, int,
     struct kernel_module **);
 void file_removemetadata(struct preloaded_file *fp);
 int file_addbuf(const char *name, const char *type, size_t len, void *buf);
+int tslog_init(void);
+int tslog_publish(void);
 
 vm_offset_t build_font_module(vm_offset_t);
 
diff --git a/stand/common/tslog.c b/stand/common/tslog.c
new file mode 100644
index 000000000000..3851e760daf1
--- /dev/null
+++ b/stand/common/tslog.c
@@ -0,0 +1,81 @@
+/*-
+ * Copyright (c) 2021 Colin Percival
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+
+#include <stand.h>
+
+#include "bootstrap.h"
+
+/* Buffer for holding tslog data in string format. */
+#ifndef LOADER_TSLOGSIZE
+#define LOADER_TSLOGSIZE (2 * 1024 * 1024)
+#endif
+
+int
+tslog_init(void)
+{
+	void * tslog_buf;
+
+	/* Allocate buffer and pass to libsa tslog code. */
+	if ((tslog_buf = malloc(LOADER_TSLOGSIZE)) == NULL)
+		return (-1);
+	tslog_setbuf(tslog_buf, LOADER_TSLOGSIZE);
+
+	/* Record this as when we entered the loader. */
+	TSRAW("ENTER", "loader", NULL);
+
+	return (0);
+}
+
+/*
+ * Pass our tslog buffer as a preloaded "module" to the kernel.  This should
+ * be called as late as possible prior to the kernel being executed, since
+ * any timestamps logged after this is called will not be visible to the
+ * kernel.
+ */
+int
+tslog_publish(void)
+{
+	void * tslog_buf;
+	size_t tslog_bufpos;
+
+	/* Record a log entry for ending logging. */
+	TSRAW("EXIT", "loader", NULL);
+
+	/* Get the buffer and its current length. */
+	tslog_getbuf(&tslog_buf, &tslog_bufpos);
+
+	/* If we never allocated a buffer, return an error. */
+	if (tslog_buf == NULL)
+		return (-1);
+
+	/* Store the buffer where the kernel can read it. */
+	return (file_addbuf("TSLOG", "TSLOG data", tslog_bufpos, tslog_buf));
+}
diff --git a/stand/loader.mk b/stand/loader.mk
index 9dda8c6535ea..359aee58657c 100644
--- a/stand/loader.mk
+++ b/stand/loader.mk
@@ -6,7 +6,7 @@ CFLAGS+=-I${LDRSRC}
 
 SRCS+=	boot.c commands.c console.c devopen.c interp.c 
 SRCS+=	interp_backslash.c interp_parse.c ls.c misc.c 
-SRCS+=	module.c nvstore.c pnglite.c
+SRCS+=	module.c nvstore.c pnglite.c tslog.c
 
 CFLAGS.module.c += -I$(SRCTOP)/sys/teken -I${SRCTOP}/contrib/pnglite
 


More information about the dev-commits-src-all mailing list