Skip to contentSkip to conversation

KVM - Fix rmode_tss_base declaration

PATCH In review Jeff Dike 3 participants 6 messages Jun 6, 2007 – Jun 10, 2007 KVM

lore
Share & tools
lore

Jeff Dike

author
#0 lore raw

PATCH 1/1 KVM - Fix rmode_tss_base declaration

The long return value of rmode_tss_base is truncated by its declared return type of int.

--

 drivers/kvm/vmx.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/kvm/vmx.c +1 -1
Index: kvm/drivers/kvm/vmx.c
===================================================================
@@ -884,7 +884,7 @@ static void enter_pmode(struct kvm_vcpu 
 	vmcs_write32(GUEST_CS_AR_BYTES, 0x9b);
 }
 
-static int rmode_tss_base(struct kvm* kvm)
+static unsigned long rmode_tss_base(struct kvm* kvm)
 {
 	gfn_t base_gfn = kvm->memslots[0].base_gfn + kvm->memslots[0].npages - 3;
 	return base_gfn << PAGE_SHIFT;

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

#1 lore raw
Quoted 14 lines

The long return value of rmode_tss_base is truncated by its declared return type of int.

--
drivers/kvm/vmx.c | 2 +-

1 file changed, 1 insertion(+), 1 deletion(-)

Index: kvm/drivers/kvm/vmx.c
===================================================================

drivers/kvm/vmx.c static void enter_pmode(struct kvm_vcpu · line 887

Quoted 5 lines
drivers/kvm/vmx.c +1 -1
@@ -884,7 +884,7 @@ static void enter_pmode(struct kvm_vcpu 
 	vmcs_write32(GUEST_CS_AR_BYTES, 0x9b);
 }
 
-static int rmode_tss_base(struct kvm* kvm)
+static unsigned long rmode_tss_base(struct kvm* kvm)

Should use gpa_t instead.
-Xin

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

author
#2 lore raw
Quoted 4 lines · Xin B

drivers/kvm/vmx.c static void enter_pmode(struct kvm_vcpu · line 887

Quoted 2 lines
drivers/kvm/vmx.c +1 -1
-static int rmode_tss_base(struct kvm* kvm)
+static unsigned long rmode_tss_base(struct kvm* kvm)

Should use gpa_t instead.

Right you are, I didn't notice that type.

Will fix.

Jeff

Signature · 7 lines
Work email - jdike at linux dot intel dot com

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
#3 lore raw
Quoted 11 lines · Jeff Dike
Quoted 5 lines · Xin B

drivers/kvm/vmx.c static void enter_pmode(struct kvm_vcpu · line 887

Quoted 3 lines
drivers/kvm/vmx.c +1 -1
-static int rmode_tss_base(struct kvm* kvm)
+static unsigned long rmode_tss_base(struct kvm* kvm)

Should use gpa_t instead.

Right you are, I didn't notice that type.

Some extra logic is needed on i386 with >= 4GB. Current code will wraparound since gfn_t is 32-bits long, but casting it to 64-bits is not the answer since the processor will truncate it back to 32 bits (the return value is eventually used as a long in enter_rmode()).

Signature · 8 lines
Do not meddle in the internals of kernels, for they are subtle and quick to panic.


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
author
#4 lore raw
Quoted 4 lines · Avi Kivity

Some extra logic is needed on i386 with >= 4GB. Current code will wraparound since gfn_t is 32-bits long, but casting it to 64-bits is not the answer since the processor will truncate it back to 32 bits (the return value is eventually used as a long in enter_rmode()).

Is it necessary to initialize TR in enter_rmode? I can't see anything that says it has any meaning in real mode.

And if not, would not the guest be responsible for finding room for the TSS?

Jeff

Signature · 7 lines
Work email - jdike at linux dot intel dot com

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
#5 lore raw
Quoted 12 lines · Jeff Dike
Quoted 5 lines · Avi Kivity

Some extra logic is needed on i386 with >= 4GB. Current code will wraparound since gfn_t is 32-bits long, but casting it to 64-bits is not the answer since the processor will truncate it back to 32 bits (the return value is eventually used as a long in enter_rmode()).

Is it necessary to initialize TR in enter_rmode? I can't see anything that says it has any meaning in real mode.

VT doesn't support real mode. kvm uses virtual-8086 mode to virtualize real mode. Virtual 8086 mode does require a task state segment.

Signature · 1 line
error compiling committee.c: too many arguments to function