While looking at VM bootup times, we stumbled over the fact that the NVMe
code only does I/O operations of up to 4kb at a given point in time. This
is usually ok, but if you have an OS that loads a lot of data on boot in
combination to network backed storage, it shows in bootup times.
There is no need to restrict ourselves to 4kb though. The INT13 call we
receive gives us much larger chunks which we can just map into a native
bigger NVMe I/O call if the request buffer is page aligned.
This patch implements all logic required to do the above and gives a
substantial performance boost on boot.
v1 -> v2:
- fix dprintf
- Fix bounds check on PRP list add logic
- Reduce PRP list to 15 entries embedded in the ns struct.
This reduces BIOS reserved memory footprint by 4kb.
v2 -> v3:
- new patch: nvme: Split requests by maximum allowed size
- Adjust the maximum request size to sector units. The hardware field
describes it in pages.
Alexander Graf (4):
nvme: Record maximum allowed request size
nvme: Allow to set PRP2
nvme: Pass large I/O requests as PRP lists
nvme: Split requests by maximum allowed size
src/hw/nvme-int.h | 16 ++++++-
src/hw/nvme.c | 122 +++++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 121 insertions(+), 17 deletions(-)
--
2.16.4
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879
This series implements support for SMBIOS 3.0 entry points in
SeaBIOS.
The main advantage of SMBIOS 3.0 entry points is the higher limit
for total table size. The SMBIOS 2.1 64435 bytes limit can be
easily hit in QEMU if creating virtual machines with more than
720 VCPUs.
Eduardo Habkost (19):
biostables: copy_fseg_table() function
util.h: Delete unused get_smbios_entry_point() prototype
smbios: Rename code specific for SMBIOS 2.1 entry points
smbios: Generic smbios_next() function
smbios: smbios_get_tables() function
smbios: Use smbios_get_tables()/smbios_next() at display_uuid()
smbios: smbios_major_version()/smbios_minor_version() helpers
tpm: Use smbios_get_tables()
csm: Don't check SMBios21Addr before calling copy_smbios_21()
smbios: Make SMBios21Addr variable static
smbios: Use smbios_next() at smbios_romfile_setup()
smbios: Extract SMBIOS table building code to separate function
smbios: Make smbios_build_tables() more generic
smbios: smbios_21_setup_entry_point() function
smbios: Make some smbios_build_tables() arguments optional
smbios: Make smbios_build_tables() ready for 64-bit tables
smbios: copy_smbios_30() function
smbios: Support SMBIOS 3.0 entry point at copy_table()
smbios: Support SMBIOS 3.0 entry point at smbios_romfile_setup()
src/std/smbios.h | 17 ++-
src/util.h | 5 +-
src/fw/biostables.c | 259 +++++++++++++++++++++++++++++++++-----------
src/fw/csm.c | 6 +-
src/fw/smbios.c | 12 +-
src/tcgbios.c | 12 +-
6 files changed, 227 insertions(+), 84 deletions(-)
--
2.28.0
This patch series make seabios linkable with lld.
This is beneficial for FreeBSD ports as well
https://svnweb.freebsd.org/ports/head/misc/seabios/Makefile
as they can drop an LLD_UNSAFE
As a maintainer of lld ELF, I have triaged numerous pieces of software.
seabios is the only one making use of
This drops the only instance https://sourceware.org/bugzilla/show_bug.cgi?id=12726
1, 2, 3 and 4 are really independent and can be applied in arbitrary order.
5 depends on 4. I originally combined 4 and 5 and that was why I don't think a patch series made sense.
Fangrui Song (5):
romlayout.S: Add missing SHF_ALLOC flag to .fixedaddr.\addr
Make rom16.o linkable with lld
Makefile: Change ET_EXEC to ET_REL so that lld can link bios.bin.elf
romlayout32flag.lds: Use `. +=` instead of `. =`
test-build.sh: Delete unneeded LD capability test
Makefile | 4 ++++
scripts/layoutrom.py | 13 ++++++++++---
scripts/test-build.sh | 42 +-----------------------------------------
src/romlayout.S | 2 +-
4 files changed, 16 insertions(+), 45 deletions(-)
--
2.26.0.292.g33ef6b2f38-goog
BUILD_MIN_BIOSTABLE reserves space in the f-segment. Some data
structures -- for example disk drives known to seabios -- must be
stored there, so the space available here limits the number of
devices seabios is able to manage.
This patch sets BUILD_MIN_BIOSTABLE to 8k for bios images being 256k or
larger in size. 32bit code is moved off in that case, so we have more
room in the f-segment then.
Signed-off-by: Gerd Hoffmann <kraxel(a)redhat.com>
---
scripts/layoutrom.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py
index 6616721d1b58..abebf0211fa9 100755
--- a/scripts/layoutrom.py
+++ b/scripts/layoutrom.py
@@ -651,6 +651,10 @@ def main():
# Read kconfig config file
config = scanconfig(cfgfile)
+ # larger roms have more room in the f-segment due to moving out 32bit code
+ if config.get('CONFIG_ROM_SIZE') >= 256:
+ BUILD_MIN_BIOSTABLE = 8192
+
# Figure out which sections to keep.
allsections = info16[0] + info32seg[0] + info32flat[0]
symbols = {'16': info16[1], '32seg': info32seg[1], '32flat': info32flat[1]}
--
2.31.1
Hi all,
We've had reports of users hitting KVM emulation failures in certain workloads
and were able to track down a missing NMI_DISABLE_BIT in call32_post() when
accessing CMOS ports. This patch disables NMIs on state restore, following other
accesses to CMOS_PORT_INDEX throughout the seabios code.
Heitor Alves de Siqueira (1):
stacks: fix missing NMI_DISABLE_BIT on call32_post()
src/stacks.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--
2.31.1
BUILD_MIN_BIOSTABLE reserves space in the f-segment. Some data
structures -- for example disk drives known to seabios -- must be
stored there, so the space available here limits the number of
devices seabios is able to manage.
This patch adds an config option for BUILD_MIN_BIOSTABLE so the size of
the reservation can be configured at build time. Default is 8k for bios
images being 256k or larger in size (32bit code is moved off then so we
have more room in the f-segment), 2k (current value) otherwise.
Signed-off-by: Gerd Hoffmann <kraxel(a)redhat.com>
---
Makefile | 2 +-
scripts/layoutrom.py | 3 ++-
src/Kconfig | 7 +++++++
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 3d8943ef5f25..ddcd1dff399d 100644
--- a/Makefile
+++ b/Makefile
@@ -172,7 +172,7 @@ $(OUT)romlayout16.lds: $(OUT)ccode32flat.o $(OUT)code32seg.o $(OUT)ccode16.o $(O
$(Q)$(OBJDUMP) -thr $(OUT)code32flat.o > $(OUT)code32flat.o.objdump
$(Q)$(OBJDUMP) -thr $(OUT)code32seg.o > $(OUT)code32seg.o.objdump
$(Q)$(OBJDUMP) -thr $(OUT)code16.o > $(OUT)code16.o.objdump
- $(Q)$(PYTHON) ./scripts/layoutrom.py $(OUT)code16.o.objdump $(OUT)code32seg.o.objdump $(OUT)code32flat.o.objdump $(OUT)$(KCONFIG_AUTOHEADER) $(OUT)romlayout16.lds $(OUT)romlayout32seg.lds $(OUT)romlayout32flat.lds
+ $(Q)$(PYTHON) ./scripts/layoutrom.py $(OUT)code16.o.objdump $(OUT)code32seg.o.objdump $(OUT)code32flat.o.objdump $(OUT)$(KCONFIG_AUTOHEADER) $(OUT)romlayout16.lds $(OUT)romlayout32seg.lds $(OUT)romlayout32flat.lds $(CONFIG_MIN_BIOSTABLE)
# These are actually built by scripts/layoutrom.py above, but by pulling them
# into an extra rule we prevent make -j from spawning layoutrom.py 4 times.
diff --git a/scripts/layoutrom.py b/scripts/layoutrom.py
index 6616721d1b58..94deca9fcc85 100755
--- a/scripts/layoutrom.py
+++ b/scripts/layoutrom.py
@@ -636,7 +636,8 @@ def scanconfig(file):
def main():
# Get output name
- in16, in32seg, in32flat, cfgfile, out16, out32seg, out32flat = sys.argv[1:]
+ in16, in32seg, in32flat, cfgfile, out16, out32seg, out32flat, biostable = sys.argv[1:]
+ BUILD_MIN_BIOSTABLE = biostable * 1024
# Read in the objdump information
infile16 = open(in16, 'r')
diff --git a/src/Kconfig b/src/Kconfig
index 3a8ffa15fded..95519fc50fa3 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -140,6 +140,13 @@ endchoice
it into 128 KB (which was big enouth for a long time) you'll
probably have to disable some featues such as xhci support.
+ config MIN_BIOSTABLE
+ int "biostable size (in KB)"
+ default 8 if ROM_SIZE >= 256
+ default 2
+ help
+ Memory space for BIOS tables in f-segment.
+
endmenu
menu "Hardware support"
--
2.31.1
Hi,
I wrote a few patches for qemu [1] and patch 10/11 exposes a bug
in seabios.
Sometimes the PS/2 keyboard initialization fails and seabios
doesn't detect the keyboard. This patch fixes the PS/2 keyboard
initialization.
I wouldn't be surprised if my patch also fixes PS/2 keyboard
initialization problems on bare metal. A few bug reports look
very similar to what I see on my computer with qemu.
With best regards,
Volker
v2:
Kevin suggested to call check_irqs() in run_thread().
[1] https://lists.nongnu.org/archive/html/qemu-devel/2021-05/msg02152.html
Volker Rümelin (1):
stacks: call check_irqs() in run_thread()
src/stacks.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
--
2.26.2