diff mbox

[v3] kvmtool: handle x86 firmware smaller than 128k

Message ID 20171107080424.1573-1-kraxel@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Gerd Hoffmann Nov. 7, 2017, 8:04 a.m. UTC
Firmware images smaller than the bios memory region (0xe0000 -> 0xfffff)
must be mapped at the end of the region because the x86 cpu reset vector
is 0xffff0.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 x86/boot.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Darren Kenny Nov. 7, 2017, 8:23 a.m. UTC | #1
LGTM,

Reviewed-by: Darren Kenny <darren.kenny@oracle.com>

Thanks,

Darren.

On Tue, Nov 07, 2017 at 09:04:24AM +0100, Gerd Hoffmann wrote:
>Firmware images smaller than the bios memory region (0xe0000 -> 0xfffff)
>must be mapped at the end of the region because the x86 cpu reset vector
>is 0xffff0.
>
>Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>---
> x86/boot.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/x86/boot.c b/x86/boot.c
>index 61535eb57b..b7a4262d89 100644
>--- a/x86/boot.c
>+++ b/x86/boot.c
>@@ -28,7 +28,7 @@ bool kvm__load_firmware(struct kvm *kvm, const char *firmware_filename)
> 	if (st.st_size > MB_FIRMWARE_BIOS_SIZE)
> 		die("firmware image %s is too big to fit in memory (%Lu KB).\n", firmware_filename, (u64)(st.st_size / 1024));
>
>-	p = guest_flat_to_host(kvm, MB_FIRMWARE_BIOS_BEGIN);
>+	p = guest_flat_to_host(kvm, MB_BIOS_END + 1 - st.st_size);
>
> 	while ((nr = read(fd, p, st.st_size)) > 0)
> 		p += nr;
>-- 
>2.9.3
>
diff mbox

Patch

diff --git a/x86/boot.c b/x86/boot.c
index 61535eb57b..b7a4262d89 100644
--- a/x86/boot.c
+++ b/x86/boot.c
@@ -28,7 +28,7 @@  bool kvm__load_firmware(struct kvm *kvm, const char *firmware_filename)
 	if (st.st_size > MB_FIRMWARE_BIOS_SIZE)
 		die("firmware image %s is too big to fit in memory (%Lu KB).\n", firmware_filename, (u64)(st.st_size / 1024));
 
-	p = guest_flat_to_host(kvm, MB_FIRMWARE_BIOS_BEGIN);
+	p = guest_flat_to_host(kvm, MB_BIOS_END + 1 - st.st_size);
 
 	while ((nr = read(fd, p, st.st_size)) > 0)
 		p += nr;