Re: [Qemu-devel] How to access guest memory from qemu device internal
> -Origin email- > From: Peter Maydell > Sent Time: Monday, November 24, 2014 > To: Kaiyuan > Cc: Greg Kurz , qemu-devel > Subject: Re: [Qemu-devel] How to access guest memory from qemu device internal > > On 23 November 2014 at 13:18, Kaiyuan wrote: > > Thanks for your explanation about guest physical/virtual > > address and host physical/virtual address, and I think I > > asked a wrong question. Is there a function that translates > > guest Physical address to host Virtual address so that I > > can access guest space by a host pointer? > > You can use cpu_physical_memory_map() and _unmap() > for this kind of thing. (Make sure you unmap afterwards.) > > -- PMM Thank you very much for your help!Kaiyuan Liang
Re: [Qemu-devel] How to access guest memory from qemu device internal
On 23 November 2014 at 13:18, Kaiyuan wrote: > Thanks for your explanation about guest physical/virtual > address and host physical/virtual address, and I think I > asked a wrong question. Is there a function that translates > guest Physical address to host Virtual address so that I > can access guest space by a host pointer? You can use cpu_physical_memory_map() and _unmap() for this kind of thing. (Make sure you unmap afterwards.) -- PMM
Re: [Qemu-devel] How to access guest memory from qemu device internal
> -Origin email- > From: Peter Maydell > Sent Time: Friday, November 21, 2014 > To: Kaiyuan > Cc: Greg Kurz , qemu-devel > Subject: Re: [Qemu-devel] Fw:Re:Re: How to access guest memory from qemu > device internal > > On 21 November 2014 09:17, Kaiyuan wrote: > > Thanks, Greg. It's useful to me. cpu_physical_memory_read() > > looks like a wrapper of translating guest addr to host addr > > Is there a function that translates guest address to host > > physical address? > > No, QEMU never deals with host physical addresses at all. > In general there are three address types that might be > in use: > * guest virtual address > * guest physical address > * host virtual address (only relevant if talking to RAM, > rather than an emulated device) > > For devices, the guest within the VM should deal with > converting a virtual address to a guest physical address, > and should write guest physical addresses to the device. > [If you think about real hardware, where the device is > separate from the CPU, there's no way the device can know > about guest virtual addresses, which are handled by the > CPU's built in MMU.] > > So the function Greg suggests is the one you want. > > -- PMM Thanks for your explanation about guest physical/virtual address and host physical/virtual address, and I think I asked a wrong question. Is there a function that translates guest Physical address to host Virtual address so that I can access guest space by a host pointer?
Re: [Qemu-devel] How to access guest memory from qemu device internal
On Thu, 20 Nov 2014 21:25:18 +0800 (GMT+08:00) Kaiyuan wrote: > Hello, all > > I added a custom device to qemu. This device is attached to sysbus by mmio > and has an address register in which device should access the guest memory > the register point to. > I write a bare-metal program that pass an address like 0x1234ABCD to this > address register. Inside qemu device code I added, if device reads value from > register and directly accesses this value of 0x1234ABCD, it will access host > memory 0x1234ABCD rather than guest memory 0x1234ABCD. > Does qemu provide some functions that allow device to access guest memory > address? > Have a look at *_phys* functions in the QEMU header file (cpu_physical_memory_read() for exemple). > Thanks, > Kaiyuan Liang > -- G
[Qemu-devel] How to access guest memory from qemu device internal
Hello, all I added a custom device to qemu. This device is attached to sysbus by mmio and has an address register in which device should access the guest memory the register point to. I write a bare-metal program that pass an address like 0x1234ABCD to this address register. Inside qemu device code I added, if device reads value from register and directly accesses this value of 0x1234ABCD, it will access host memory 0x1234ABCD rather than guest memory 0x1234ABCD. Does qemu provide some functions that allow device to access guest memory address? Thanks, Kaiyuan Liang