On Thu, Oct 5, 2023 at 3:31 AM Shunsuke Mie <m...@igel.co.jp> wrote:
>
> Hi Jiri, Mattias and all.
>
> 2023年10月4日(水) 16:36 Mattias Nissler <mniss...@rivosinc.com>:
>>>
>>> hi shunsuke, all,
>>> what about vfio-user + qemu?
>
> Thank you for the suggestion.
>
>> FWIW, I have had some good success using VFIO-user to bridge software 
>> components to hardware designs. For the most part, I have been hooking up 
>> software endpoint models to hardware design components speaking the PCIe 
>> transaction layer protocol. The central piece you need is a way to translate 
>> between the VFIO-user protocol and PCIe transaction layer messages, 
>> basically converting ECAM accesses, memory accesses (DMA+MMIO), and 
>> interrupts between the two worlds. I have some code which implements the 
>> basics of that. It's certainly far from complete (TLP is a massive 
>> protocol), but it works well enough for me. I believe we should be able to 
>> open-source this if there's interest, let me know.
>
> It is what I want to do, but I'm not familiar with the vfio and vfio-user, 
> and I have a question. QEMU has a PCI TLP communication implementation for 
> Multi-process QEMU[1]. It is similar to your success.

I'm no qemu expert, but my understanding is that the plan is for the
existing multi-process QEMU implementation to eventually be
superseded/replaced by the VFIO-user based one (qemu folks, please
correct me if I'm wrong). From a functional perspective they are more
or less equivalent AFAICT.

> The multi-process qemu also communicates TLP over UDS. Could you let me know 
> your opinion about it?

Note that neither multi-process qemu nor VFIO-user actually pass
around TLPs, but rather have their own command language to encode
ECAM, MMIO, DMA, interrupts etc. However, translation from/to TLP is
possible and works well enough in my experience.

>
>> One thing to note is that there are currently some limits to bridging 
>> VFIO-user / TLP that I haven't figured out and/or will need further work: 
>> Advanced PCIe concepts like PASID, ATS/PRI, SR-IOV etc. may lack equivalents 
>> on the VFIO-user side that would have to be filled in. The folk behind 
>> libvfio-user[2] have been very approachable and open to improvements in my 
>> experience though.
>>
>> If I understand correctly, the specific goal here is testing PCIe endpoint 
>> designs against a Linux host. What you'd need for that is a PCI host 
>> controller for the Linux side to talk to and then hooking up endpoints on 
>> the transaction layer. QEMU can simulate host controllers that work with 
>> existing Linux drivers just fine. Then you can put a vfio-user-pci stub 
>> device (I don't think this has landed in qemu yet, but you can find the code 
>> at [1]) on the simulated PCI bus which will expose any software interactions 
>> with the endpoint as VFIO-user protocol messages over unix domain socket. 
>> The piece you need to bring is a VFIO-user server that handles these 
>> messages. Its task is basically translating between VFIO-user and TLP and 
>> then injecting TLP into your hardware design.
>
> Yes, If the pci host controller you said can be implemented, I can achieve my 
> goal.

I meant to say that the existing PCIe host controller implementations
in qemu can be used as is.

>
> To begin with, I'll investigate the vfio and libvfio-user.  Thanks!.
>
> [1] https://www.qemu.org/docs/master/system/multi-process.html
>
> Best,
> Shunsuke
>>
>>
>> [1] https://github.com/oracle/qemu/tree/vfio-user-p3.1 - I believe that's 
>> the latest version, Jagannathan Raman will know best
>> [2] https://github.com/nutanix/libvfio-user
>>
>

Reply via email to