qemu-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: shared memory mechanism other than ivshmem


From: Sanjeev Kumar
Subject: Re: shared memory mechanism other than ivshmem
Date: Fri, 17 May 2024 18:32:10 +0530

Hi Gustavo,
I understood difference between the two patchsets. thanks for the ivshmem-flat. i will try to get info from QNX side how to access the memory location in QNX. with the ivshmem-flat enabled, i am able to see shmem in "info qtree" as below
(qemu) info qtree
bus: main-system-bus
  type System
  dev: ivshmem-flat, id ""
    gpio-out "sysbus-irq" 1
    chardev = "ivshmem_flat"
    shmem-size = 4194304 (0x400000)
    x-irq-qompath = "/machine/unattached/device[4]/gic/unnamed-gpio-in[0]"
    x-bus-address-iomem = 1074786304 (0x400ff000)
    x-bus-address-shmem = 1074790400 (0x40100000)
    mmio 00000000400ff000/0000000000000010
    mmio 0000000040100000/0000000000400000

now need to explore in guest os(QNX) on how to read this memory location.

On Thu, May 16, 2024 at 11:35 PM Sanjeev Kumar <reachsanjeev7@gmail.com> wrote:
Hi Gustavo,
Thanks for your reply. Will try it out.
But i see two set of patches.
https://lore.kernel.org/qemu-devel/20240222222218.2261956-1-gustavo.romero@linaro.org/

And

https://lore.kernel.org/qemu-devel/20231127052024.435743-2-gustavo.romero@linaro.org/

First one looks latest. But when i use them, it is throwing error of property is missing  

x-bus-qompath

Please check and let me know which is correct patchset to use.

Thanks & Regards

On Thu, 16 May 2024 at 3:59 PM, Gustavo Romero <gustavo.romero@linaro.org> wrote:
Hi Sanjeev,

On 5/16/24 11:22 AM, Sanjeev Kumar wrote:
> Hi Philippe,
> I have taken patches from the link you provided
> and built QEMU and started appending below line to QEMU
>
> -chardev socket,path=/tmp/ivshmem_socket,id=ivshmem_flat -device ivshmem-flat,chardev=ivshmem_flat,x-irq-qompath='/machine/unattached/device[4]/gic/unnamed-gpio-in[0]',x-bus-qompath='/sysbus'
>
> and QEMU boots without any error
>
> I would like to get some help regarding data writing and reading from shared memory.
>
> when using ivshmem-plain, i used to write data from host like
> echo "hello" > /dev/shm/shm1 and in guest i was reading from pci bus BAR and i was able to get data.
>
> similarly can you please help me with ivshmem-flat like where is the location to write/read the data from host and in guest.

Writing/reading from the host must work the same way as in ivshmem PCI. It's
ultimately the ivshmem-server's duty to create, map, and distribute the file
descriptors to the VMs (guests), so nothing changes. I haven't tried it tho,
I testes it directly writing it from the other guest running Linux with ivshmem
PCI attached. But, it should work the same, yep.

I don't know anything about QNX, but if you have access to real addresses, this
would work the same as in Zephyr (where I tested it). You just need to pass to
the ivshmem-flat driver the address where you want to map the shm and the MMRs
using the x-bus-address-shmem and the x-bus-address-iomem, respectively, like,
for instance:

x-bus-address-iomem=0x400FF000,x-bus-address-shmem=0x40100000

then you can read/write directly from/to the address specified in by
x-bus-address-shmem that data will appear in the other peers (guests)
and also should be able to get accessed from the host as well.

For instance, in Zephyr I used the following test to exercise ivshmem-flat
from the Cortex-M guest, which has the addresses hardcoded and uses them
directly:

https://github.com/gromero/zephyr/commit/73fbd481e352b25ae5483ba5048a2182b90b7f00#diff-16fa1f481a49b995d0d1a62da37b9f33033f5ee477035e73465e7208521ddbe0R9-R96


HTH,
Gustavo

reply via email to

[Prev in Thread] Current Thread [Next in Thread]