<listitem><para>This allows inserting additional entries into the <command>systemd-boot</command>
menu. For details see
- <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry></para>
+ <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
<xi:include href="version-info.xml" xpointer="v258"/></listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>io.systemd.boot.loglevel=</varname><replaceable>LEVEL</replaceable></term>
+
+ <listitem><para>This allows configuration of the log level, and is read by <command>systemd-boot</command>.
+ For details see
+ <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
+
+ <xi:include href="version-info.xml" xpointer="v259"/></listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<xi:include href="version-info.xml" xpointer="v258"/></listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>io.systemd.boot.loglevel</varname></term>
+ <listitem><para>If set, the value of this string is used as log level. Valid values (from most to
+ least critical) are <literal>emerg</literal>, <literal>alert</literal>, <literal>crit</literal>,
+ <literal>err</literal>, <literal>warning</literal>, <literal>notice</literal>, <literal>info</literal>,
+ and <literal>debug</literal>.</para>
+
+ <xi:include href="version-info.xml" xpointer="v259"/></listitem>
+ </varlistentry>
</variablelist>
</refsect1>
uint64_t init_usec;
bool menu = false;
+ /* set loglevel early to simplify debugging before loader.conf is loaded */
+ log_set_max_level_from_smbios();
+
init_usec = time_usec();
err = BS->HandleProtocol(image, MAKE_GUID_PTR(EFI_LOADED_IMAGE_PROTOCOL), (void **) &loaded_image);
#include "efi-log.h"
#include "efi-string-table.h"
#include "proto/rng.h"
+#include "smbios.h"
#include "util.h"
+#include "vmm.h"
static unsigned log_count = 0;
static LogLevel log_max_level = LOG_INFO;
return 0;
}
+void log_set_max_level_from_smbios(void) {
+ int r;
+
+ if (is_confidential_vm())
+ return; /* Don't consume SMBIOS in Confidential Computing contexts */
+
+ const char *level_str = smbios_find_oem_string("io.systemd.boot.loglevel=", /* after= */ NULL);
+ if (!level_str)
+ return;
+
+ r = log_set_max_level_from_string(level_str);
+ if (r < 0)
+ log_warning("Failed to parse log level '%s', ignoring.", level_str);
+}
+
void freeze(void) {
for (;;)
BS->Stall(60 * 1000 * 1000);
LogLevel log_get_max_level(void) _pure_;
int log_set_max_level(LogLevel level);
int log_set_max_level_from_string(const char *e);
+void log_set_max_level_from_smbios(void);
_noreturn_ void freeze(void);
void log_wait(void);