kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH 0/3] x86: realmode: fixes
@ 2020-06-26  9:23 Nadav Amit
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr Nadav Amit
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Nadav Amit @ 2020-06-26  9:23 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm, Nadav Amit

Some fixes for realmode tests.

Nadav Amit (3):
  x86: realmode: initialize idtr
  x86: realmode: hlt loop as fallback on exit
  x86: realmode: fix lss test

 x86/realmode.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr
  2020-06-26  9:23 [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Nadav Amit
@ 2020-06-26  9:23 ` Nadav Amit
  2020-06-26 10:41   ` Paolo Bonzini
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 2/3] x86: realmode: hlt loop as fallback on exit Nadav Amit
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Nadav Amit @ 2020-06-26  9:23 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm, Nadav Amit

The realmode test does not initialize the IDTR, assuming that its base
is zero and its limit 0x3ff. Initialize it, as the BIOS might not set it
as such.

Signed-off-by: Nadav Amit <namit@vmware.com>
---
 x86/realmode.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/x86/realmode.c b/x86/realmode.c
index 234d607..ef79f7e 100644
--- a/x86/realmode.c
+++ b/x86/realmode.c
@@ -1799,6 +1799,7 @@ void realmode_start(void)
 unsigned long long r_gdt[] = { 0, 0x9b000000ffff, 0x93000000ffff };
 
 struct table_descr r_gdt_descr = { sizeof(r_gdt) - 1, &r_gdt };
+struct table_descr r_idt_descr = { 0x3ff, 0 };
 
 asm(
 	".section .init \n\t"
@@ -1819,6 +1820,7 @@ asm(
 	".text \n\t"
 	"start: \n\t"
 	"lgdt r_gdt_descr \n\t"
+	"lidt r_idt_descr \n\t"
 	"ljmp $8, $1f; 1: \n\t"
 	".code16gcc \n\t"
 	"mov $16, %eax \n\t"
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [kvm-unit-tests PATCH 2/3] x86: realmode: hlt loop as fallback on exit
  2020-06-26  9:23 [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Nadav Amit
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr Nadav Amit
@ 2020-06-26  9:23 ` Nadav Amit
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 3/3] x86: realmode: fix lss test Nadav Amit
  2020-06-26 10:43 ` [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Paolo Bonzini
  3 siblings, 0 replies; 6+ messages in thread
From: Nadav Amit @ 2020-06-26  9:23 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm, Nadav Amit

For systems without emulated devices (e.g., bare-metal), use halt-loop
when exiting the realmode test.

Signed-off-by: Nadav Amit <namit@vmware.com>
---
 x86/realmode.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/x86/realmode.c b/x86/realmode.c
index ef79f7e..301b013 100644
--- a/x86/realmode.c
+++ b/x86/realmode.c
@@ -115,6 +115,10 @@ static int failed;
 static void exit(int code)
 {
 	outb(code, 0xf4);
+
+	while (1) {
+		asm volatile("hlt" ::: "memory");
+	}
 }
 
 struct regs {
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [kvm-unit-tests PATCH 3/3] x86: realmode: fix lss test
  2020-06-26  9:23 [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Nadav Amit
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr Nadav Amit
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 2/3] x86: realmode: hlt loop as fallback on exit Nadav Amit
@ 2020-06-26  9:23 ` Nadav Amit
  2020-06-26 10:43 ` [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Paolo Bonzini
  3 siblings, 0 replies; 6+ messages in thread
From: Nadav Amit @ 2020-06-26  9:23 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kvm, Nadav Amit

Running lss with some random descriptor and then performing pop does not
work so well. Use mov instructions instead of push/pop pair.

Signed-off-by: Nadav Amit <namit@vmware.com>
---
 x86/realmode.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/x86/realmode.c b/x86/realmode.c
index 301b013..90ecd13 100644
--- a/x86/realmode.c
+++ b/x86/realmode.c
@@ -1378,10 +1378,10 @@ static void test_lds_lss(void)
 		outregs.eax == (unsigned long)desc.address &&
 		outregs.ebx == desc.sel);
 
-	MK_INSN(lss, "pushl %ss\n\t"
+	MK_INSN(lss, "mov %ss, %dx\n\t"
 		     "lss (%ebx), %eax\n\t"
 		     "mov %ss, %ebx\n\t"
-		     "popl %ss\n\t");
+		     "mov %dx, %ss\n\t");
 	exec_in_big_real_mode(&insn_lss);
 	report("lss", R_AX | R_BX,
 		outregs.eax == (unsigned long)desc.address &&
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr Nadav Amit
@ 2020-06-26 10:41   ` Paolo Bonzini
  0 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2020-06-26 10:41 UTC (permalink / raw)
  To: Nadav Amit; +Cc: kvm

On 26/06/20 11:23, Nadav Amit wrote:
> The realmode test does not initialize the IDTR, assuming that its base
> is zero and its limit 0x3ff. Initialize it, as the BIOS might not set it
> as such.

Rather the bootloader: realmode.flat is started as multiboot, that is in
a 32-bit protected mode environment---which includes an IDT.

Paolo

> Signed-off-by: Nadav Amit <namit@vmware.com>
> ---
>  x86/realmode.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/x86/realmode.c b/x86/realmode.c
> index 234d607..ef79f7e 100644
> --- a/x86/realmode.c
> +++ b/x86/realmode.c
> @@ -1799,6 +1799,7 @@ void realmode_start(void)
>  unsigned long long r_gdt[] = { 0, 0x9b000000ffff, 0x93000000ffff };
>  
>  struct table_descr r_gdt_descr = { sizeof(r_gdt) - 1, &r_gdt };
> +struct table_descr r_idt_descr = { 0x3ff, 0 };
>  
>  asm(
>  	".section .init \n\t"
> @@ -1819,6 +1820,7 @@ asm(
>  	".text \n\t"
>  	"start: \n\t"
>  	"lgdt r_gdt_descr \n\t"
> +	"lidt r_idt_descr \n\t"
>  	"ljmp $8, $1f; 1: \n\t"
>  	".code16gcc \n\t"
>  	"mov $16, %eax \n\t"
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [kvm-unit-tests PATCH 0/3] x86: realmode: fixes
  2020-06-26  9:23 [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Nadav Amit
                   ` (2 preceding siblings ...)
  2020-06-26  9:23 ` [kvm-unit-tests PATCH 3/3] x86: realmode: fix lss test Nadav Amit
@ 2020-06-26 10:43 ` Paolo Bonzini
  3 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2020-06-26 10:43 UTC (permalink / raw)
  To: Nadav Amit; +Cc: kvm

On 26/06/20 11:23, Nadav Amit wrote:
> Some fixes for realmode tests.
> 
> Nadav Amit (3):
>   x86: realmode: initialize idtr
>   x86: realmode: hlt loop as fallback on exit
>   x86: realmode: fix lss test
> 
>  x86/realmode.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 

Queued, thanks.

Paolo


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-06-26 10:43 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-26  9:23 [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Nadav Amit
2020-06-26  9:23 ` [kvm-unit-tests PATCH 1/3] x86: realmode: initialize idtr Nadav Amit
2020-06-26 10:41   ` Paolo Bonzini
2020-06-26  9:23 ` [kvm-unit-tests PATCH 2/3] x86: realmode: hlt loop as fallback on exit Nadav Amit
2020-06-26  9:23 ` [kvm-unit-tests PATCH 3/3] x86: realmode: fix lss test Nadav Amit
2020-06-26 10:43 ` [kvm-unit-tests PATCH 0/3] x86: realmode: fixes Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).