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
When binding AHCI controller to virtual machine, the attached ATA device cannot be recognized for the following reason:
The first Identify PACKET CMD will be failed without dobut which will lead PORT_IRQ_TF_ERR be set in PxIS due to ERR bit set to 1 in D2H Register FIS(PxTFD.STS.ERR=1). In this case, the first CMD will be timeout for seabios only polling PORT_IRQ_D2H_REG_FIS & PORT_IRQ_PIOS_FIS before triggering error handling which leads AHCI controller is an error state, then the second IDENTIFY CMD cannot be issued by AHCI controller, no ATA device will be detected.
In AHCI spec HBA Port State Machine section(5.3.8.1 and 5.3.16.5), we can see this sequence: RegFIS:Entry --> ERR:FatalTaskfile (PxTFD.STS.ERR=1) --> ERR:WaitForClear, no entry for PORT_IRQ_D2H_REG_FIS/PORT_IRQ_PIOS_FIS to be set at this time.
May be we can also add PORT_IRQ_TF_ERR bit check when polling command completion status?
fail log:
02.386: |bffa6000| AHCI/1: link up
02.387: |bffa6000| AHCI/1: send cmd ...
02.387: |bffa7000| phys_free bffa9c00 (detail=0xbffaa320)
02.396: |bffa7000| phys_free bffaa200 (detail=0xbffaa1d0)
02.396: |bffa7000| phys_free bffaa000 (detail=0xbffaa1a0)
02.396: |bffa7000| phys_free bffaa380 (detail=0xbffaa350)
02.400: \bffa7000/ End thread
02.401: phys_free bffa7000 (detail=0xbffaa170)
34.391: |bffa6000| WARNING - Timeout at ahci_command:153!
34.392: |bffa6000| AHCI/1: send cmd ...
66.397: |bffa6000| WARNING - Timeout at ahci_command:153!
Signed-off-by: zhaoxin\runaguooc <RunaGuo-oc(a)zhaoxin.com>
---
src/hw/ahci.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/hw/ahci.c b/src/hw/ahci.c index d45b430..bab5c35 100644
--- a/src/hw/ahci.c
+++ b/src/hw/ahci.c
@@ -104,7 +104,7 @@ static void ahci_port_writel(struct ahci_ctrl_s *ctrl, u32 pnr, u32 reg, u32 val static int ahci_command(struct ahci_port_s *port_gf, int iswrite, int isatapi,
void *buffer, u32 bsize) {
- u32 val, status, success, flags, intbits, error;
+ u32 val, status, success, flags, intbits, error, tf;
struct ahci_ctrl_s *ctrl = port_gf->ctrl;
struct ahci_cmd_s *cmd = port_gf->cmd;
struct ahci_fis_s *fis = port_gf->fis; @@ -148,6 +148,14 @@ static int ahci_command(struct ahci_port_s *port_gf, int iswrite, int isatapi,
error = GET_LOWFLAT(fis->rfis[3]);
break;
}
+
+ if(intbits & PORT_IRQ_TF_ERR){
+ tf = ahci_port_readl(ctrl,pnr,PORT_TFDATA);
+ status = tf & 0xff;
+ error = tf & 0xff00;
+ break;
+ }
+
}
if (timer_check(end)) {
warn_timeout();
--
2.17.1
From: Stefan Ott <stefan(a)ott.net>
Some USB keyboards use max packet sizes beyond the current maximum
supported by SeaBIOS.
This increases the available size to support these keyboards.
Signed-off-by: Stefan Ott <stefan(a)ott.net>
---
src/hw/usb-hid.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/hw/usb-hid.c b/src/hw/usb-hid.c
index a22765b..92c6b19 100644
--- a/src/hw/usb-hid.c
+++ b/src/hw/usb-hid.c
@@ -56,7 +56,7 @@ struct keyevent {
u8 keys[6];
};
-#define MAX_KBD_EVENT 10
+#define MAX_KBD_EVENT 16
static int
usb_kbd_setup(struct usbdevice_s *usbdev
--
2.30.1
Most time, When a vm with seabios start. The bios will display such info:
-----
Seabios (version rel-1.13-0 ......)
Machine UUID ...
IPXE ..
IPXE..
Booting from DVD/CD...
Press any key to boot from CD or DVD.
---
It means that have a bootable cdrom to boot. But If we want to boot from cdrom, we must press any key as what the warning had said. If it is possible to boot from DVD/CD automatically, instead of pressing a key by hand?
Looking forward to your feedback,
YiguangChen
Hello, Helge! I meant, to use:
#ifdef CONFIG_PA_RISC // PA-RISC code #else // x86 code #endif
Then if CONFIG_PA_RISC is not defined, the compilation will go as before without the need of toolchain modification.
But, of course, you're right, the difference is not that big.
Best regards, Valentine.
> +#if CONFIG_X86
I understand that Helge adapted sources for PA-RISC, but will not it be more convenient to use#if CONFIG_PA_RISC
So that by default SeaBIOS would compile as usual?
Best regards,Valentine
---From: Helge DellerDate: 12.02.2021 1:08 (GMT+03:00)Subject: [SeaBIOS] [PATCH 28/31] string.c: reimplement mem*_far() functions for PA-RISC