public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [Patch] (big) real mode emulation - emulator_write_std
@ 2007-08-10 22:04 Nitin A Kamble
       [not found] ` <1186783440.6097.16.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Nitin A Kamble @ 2007-08-10 22:04 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel, Yu,  Wilfred


[-- Attachment #1.1.1.1: Type: text/plain, Size: 1212 bytes --]

Hi Avi,
  I have been collected quiet a few patches in my tree now. They are all
in dirty(style, debug) state. Now I started cleaning some of the code in
my tree, and cutting patches again. I plan to send you steady stream of
patches now. so you can expect lots of patches coming from me in coming
days now.

About the status of the big real mode; In my private tree I have evolved
the segment registers support for the emulator to next level now. I
think I can also cut that patch also and send it to you. now it is much
more complete than earlier. As of today the SuSe Linux 10.1 is
proceeding in the big-real mode into the int 10 call. that is with the
help emulation of about 20 new instructions, and also the infrastructure
support for those instructions.  Probably I should keep a count of
instructions emulated in the big real mode to gauge my progress. 

I am cutting my tree into simple patches, so it will be easy for you to
understand and apply/comment. 
    
Thanks & Regards,
Nitin 
Open Source Technology Center, Intel Corporation.
-------------------------------------------------------------------------
The mind is like a parachute; it works much better when it's open. 

[-- Attachment #1.1.1.2: Type: text/html, Size: 1856 bytes --]

[-- Attachment #1.1.2: emulator_write_std.patch --]
[-- Type: text/x-patch, Size: 1449 bytes --]

commit a757404387d3580f1a9dca86b2caf142103c6bdf
Author: Nitin A Kamble <nitin.a.kamble@intel.com>
Date:   Fri Aug 10 17:30:16 2007 -0700

    Implement the function emulator_write_std()
    
    Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>

diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index f7ff231..4a213e2 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -962,8 +962,35 @@ static int emulator_write_std(unsigned long addr,
 			      unsigned int bytes,
 			      struct kvm_vcpu *vcpu)
 {
-	pr_unimpl(vcpu, "emulator_write_std: addr %lx n %d\n", addr, bytes);
-	return X86EMUL_UNHANDLEABLE;
+	void *data = (void *) val;
+
+	while (bytes) {
+		gpa_t gpa;
+		unsigned offset = addr & (PAGE_SIZE-1);
+		unsigned tocopy = min(bytes, (unsigned)PAGE_SIZE - offset);
+		unsigned long pfn;
+		struct page *page;
+		void *page_virt;
+
+		gpa = vcpu->mmu.gva_to_gpa(vcpu, addr);
+		if (gpa == UNMAPPED_GVA)
+			return X86EMUL_PROPAGATE_FAULT;
+		pfn = gpa >> PAGE_SHIFT;
+		page = gfn_to_page(vcpu->kvm, pfn);
+		if (!page)
+			return X86EMUL_UNHANDLEABLE;
+		page_virt = kmap_atomic(page, KM_USER0);
+
+		memcpy(page_virt + offset, data, tocopy);
+
+		kunmap_atomic(page_virt, KM_USER0);
+
+		bytes -= tocopy;
+		data += tocopy;
+		addr += tocopy;
+	}
+
+	return X86EMUL_CONTINUE;
 }
 
 static struct kvm_io_device *vcpu_find_mmio_dev(struct kvm_vcpu *vcpu,

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

[-- Attachment #2: Type: text/plain, Size: 315 bytes --]

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

[-- Attachment #3: Type: text/plain, Size: 186 bytes --]

_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel

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

* Re: [Patch] (big) real mode emulation - emulator_write_std
       [not found] ` <1186783440.6097.16.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
@ 2007-08-13  8:46   ` Avi Kivity
       [not found]     ` <46C01A54.4010606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Avi Kivity @ 2007-08-13  8:46 UTC (permalink / raw)
  To: nitin.a.kamble-ral2JQCrhuEAvxtiuMwx3w; +Cc: kvm-devel, Yu,  Wilfred

Nitin A Kamble wrote:
> Hi Avi,
>   I have been collected quiet a few patches in my tree now. They are 
> all in dirty(style, debug) state. Now I started cleaning some of the 
> code in my tree, and cutting patches again. I plan to send you steady 
> stream of patches now. so you can expect lots of patches coming from 
> me in coming days now.
>
> About the status of the big real mode; In my private tree I have 
> evolved the segment registers support for the emulator to next level 
> now. I think I can also cut that patch also and send it to you. now it 
> is much more complete than earlier. As of today the SuSe Linux 10.1 is 
> proceeding in the big-real mode into the int 10 call. that is with the 
> help emulation of about 20 new instructions, and also the 
> infrastructure support for those instructions.  Probably I should keep 
> a count of instructions emulated in the big real mode to gauge my 
> progress.
>
> I am cutting my tree into simple patches, so it will be easy for you 
> to understand and apply/comment.
>     

> diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
> index f7ff231..4a213e2 100644
> --- a/drivers/kvm/kvm_main.c
> +++ b/drivers/kvm/kvm_main.c
> @@ -962,8 +962,35 @@ static int emulator_write_std(unsigned long addr,
>  			      unsigned int bytes,
>  			      struct kvm_vcpu *vcpu)
>  {
> -	pr_unimpl(vcpu, "emulator_write_std: addr %lx n %d\n", addr, bytes);
> -	return X86EMUL_UNHANDLEABLE;
> +	void *data = (void *) val;
> +
> +	while (bytes) {
> +		gpa_t gpa;
> +		unsigned offset = addr & (PAGE_SIZE-1);
> +		unsigned tocopy = min(bytes, (unsigned)PAGE_SIZE - offset);
> +		unsigned long pfn;
> +		struct page *page;
> +		void *page_virt;
> +
> +		gpa = vcpu->mmu.gva_to_gpa(vcpu, addr);
> +		if (gpa == UNMAPPED_GVA)
> +			return X86EMUL_PROPAGATE_FAULT;
> +		pfn = gpa >> PAGE_SHIFT;
> +		page = gfn_to_page(vcpu->kvm, pfn);
> +		if (!page)
> +			return X86EMUL_UNHANDLEABLE;
> +		page_virt = kmap_atomic(page, KM_USER0);
> +
> +		memcpy(page_virt + offset, data, tocopy);
> +
> +		kunmap_atomic(page_virt, KM_USER0);
> +
> +		bytes -= tocopy;
> +		data += tocopy;
> +		addr += tocopy;
> +	}
> +
> +	return X86EMUL_CONTINUE;
>  }
>  


This doesn't do the right thing if the write is targeted at a page 
table.  Just use emulator_write_emulated.


-- 
error compiling committee.c: too many arguments to function


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

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

* Re: [Patch] (big) real mode emulation - emulator_write_std
       [not found]     ` <46C01A54.4010606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
@ 2007-08-13 23:00       ` Kamble, Nitin A
  0 siblings, 0 replies; 3+ messages in thread
From: Kamble, Nitin A @ 2007-08-13 23:00 UTC (permalink / raw)
  To: Avi Kivity; +Cc: kvm-devel, Yu,  Wilfred

Hi Avi,
  I see. I tried using the function emulator_write_emulated() instead.
And I don't see any change because of that yet.

Thanks & Regards,
Nitin
Linux Open Source Technology Center, Intel Corporation
------------------------------------------------------------------------
--------
The Mind is like a parachute; it works much better when it's open.

-----Original Message-----
From: Avi Kivity [mailto:avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org] 
Sent: Monday, August 13, 2007 1:46 AM
To: Kamble, Nitin A
Cc: kvm-devel; Nakajima, Jun; Yu, Wilfred
Subject: Re: [Patch] (big) real mode emulation - emulator_write_std

Nitin A Kamble wrote:
> Hi Avi,
>   I have been collected quiet a few patches in my tree now. They are 
> all in dirty(style, debug) state. Now I started cleaning some of the 
> code in my tree, and cutting patches again. I plan to send you steady 
> stream of patches now. so you can expect lots of patches coming from 
> me in coming days now.
>
> About the status of the big real mode; In my private tree I have 
> evolved the segment registers support for the emulator to next level 
> now. I think I can also cut that patch also and send it to you. now it

> is much more complete than earlier. As of today the SuSe Linux 10.1 is

> proceeding in the big-real mode into the int 10 call. that is with the

> help emulation of about 20 new instructions, and also the 
> infrastructure support for those instructions.  Probably I should keep

> a count of instructions emulated in the big real mode to gauge my 
> progress.
>
> I am cutting my tree into simple patches, so it will be easy for you 
> to understand and apply/comment.
>     

> diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
> index f7ff231..4a213e2 100644
> --- a/drivers/kvm/kvm_main.c
> +++ b/drivers/kvm/kvm_main.c
> @@ -962,8 +962,35 @@ static int emulator_write_std(unsigned long addr,
>  			      unsigned int bytes,
>  			      struct kvm_vcpu *vcpu)
>  {
> -	pr_unimpl(vcpu, "emulator_write_std: addr %lx n %d\n", addr,
bytes);
> -	return X86EMUL_UNHANDLEABLE;
> +	void *data = (void *) val;
> +
> +	while (bytes) {
> +		gpa_t gpa;
> +		unsigned offset = addr & (PAGE_SIZE-1);
> +		unsigned tocopy = min(bytes, (unsigned)PAGE_SIZE -
offset);
> +		unsigned long pfn;
> +		struct page *page;
> +		void *page_virt;
> +
> +		gpa = vcpu->mmu.gva_to_gpa(vcpu, addr);
> +		if (gpa == UNMAPPED_GVA)
> +			return X86EMUL_PROPAGATE_FAULT;
> +		pfn = gpa >> PAGE_SHIFT;
> +		page = gfn_to_page(vcpu->kvm, pfn);
> +		if (!page)
> +			return X86EMUL_UNHANDLEABLE;
> +		page_virt = kmap_atomic(page, KM_USER0);
> +
> +		memcpy(page_virt + offset, data, tocopy);
> +
> +		kunmap_atomic(page_virt, KM_USER0);
> +
> +		bytes -= tocopy;
> +		data += tocopy;
> +		addr += tocopy;
> +	}
> +
> +	return X86EMUL_CONTINUE;
>  }
>  


This doesn't do the right thing if the write is targeted at a page 
table.  Just use emulator_write_emulated.


-- 
error compiling committee.c: too many arguments to function

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

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

end of thread, other threads:[~2007-08-13 23:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-10 22:04 [Patch] (big) real mode emulation - emulator_write_std Nitin A Kamble
     [not found] ` <1186783440.6097.16.camel-mpPvwfgnXtFHIUuj5cj4Omt3HXsI98Cx0E9HWUfgJXw@public.gmane.org>
2007-08-13  8:46   ` Avi Kivity
     [not found]     ` <46C01A54.4010606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-08-13 23:00       ` Kamble, Nitin A

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox