Re: [Qemu-devel] How to access guest memory from qemu device internal
-Origin email- From: Peter Maydell peter.mayd...@linaro.org Sent Time: Friday, November 21, 2014 To: Kaiyuan kaiyu...@tju.edu.cn Cc: Greg Kurz gk...@linux.vnet.ibm.com, qemu-devel qemu-devel@nongnu.org Subject: Re: [Qemu-devel] Fw:Re:Re: How to access guest memory from qemu device internal On 21 November 2014 09:17, Kaiyuan kaiyu...@tju.edu.cn 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 23 November 2014 at 13:18, Kaiyuan kaiyu...@tju.edu.cn 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 peter.mayd...@linaro.org Sent Time: Monday, November 24, 2014 To: Kaiyuan kaiyu...@tju.edu.cn Cc: Greg Kurz gk...@linux.vnet.ibm.com, qemu-devel qemu-devel@nongnu.org Subject: Re: [Qemu-devel] How to access guest memory from qemu device internal On 23 November 2014 at 13:18, Kaiyuan kaiyu...@tju.edu.cn 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
[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
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 kaiyu...@tju.edu.cn 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 exec/cpu-common.h QEMU header file (cpu_physical_memory_read() for exemple). Thanks, Kaiyuan Liang -- G