On 16/5/25 04:02, Xu Yilun wrote:
IMHO, I think it might be helpful that you can picture out what are the
minimum requirements (function/life cycle) to the current IOMMUFD TSM
bind architecture:

1.host tsm_bind (preparation) is in IOMMUFD, triggered by QEMU handling
the TVM-HOST call.
2. TDI acceptance is handled in guest_request() to accept the TDI after
the validation in the TVM)

I'll try my best to brainstorm and make a flow in ASCII.

(*) means new feature


       Guest          Guest TSM       QEMU           VFIO            IOMMUFD    
   host TSM          KVM
       -----          ---------       ----           ----            -------    
   --------          ---
1.                                                                              
 *Connect(IDE)
2.                                 Init vdev
3.                                *create dmabuf
4.                                               *export dmabuf
5.                                create memslot
6.                                                                              
                *import dmabuf
7.                                setup shared DMA
8.                                                                 create hwpt
9.                                               attach hwpt
10.                                  kvm run
11.enum shared dev
12.*Connect(Bind)
13.                  *GHCI Bind
14.                                  *Bind
15                                                                 CC viommu 
alloc
16.                                                                vdevice 
allloc
16.                                              *attach vdev


This "attach vdev" - we are still deciding if it goes to IOMMUFD or VFIO, right?


17.                                                               *setup CC 
viommu
18                                                                 *tsm_bind
19.                                                                             
     *bind
20.*Attest
21.               *GHCI get CC info
22.                                 *get CC info
23.                                                                *vdev guest 
req
24.                                                                             
    *guest req
25.*Accept
26.             *GHCI accept MMIO/DMA
27.                                *accept MMIO/DMA
28.                                                               *vdev guest 
req
29.                                                                             
    *guest req
30.                                                                             
                 *map private MMIO
31.             *GHCI start tdi
32.                                *start tdi
33.                                                               *vdev guest 
req
34.                                                                             
    *guest req


I am not sure I follow the layout here. "start tdi" and "accept MMIO/DMA" are under 
"QEMU" but QEMU cannot do anything by itself and has to call VFIO or some other driver...

35.Workload...
36.*disconnect(Unbind)

Is this a case of PCI hotunplug? Or just killing QEMU/shutting down the VM? Or 
stopping trusting the device and switching it to untrusted mode, to work with 
SWIOTLB or DiscardManager?

37.              *GHCI unbind
38.                                *Unbind
39.                                            *detach vdev
40.                                                               *tsm_unbind
41.                                                                             
    *TDX stop tdi
42.                                                                             
    *TDX disable mmio cb
43.                                            *cb dmabuf revoke


... like VFIO and hostTSM - "TDX stop tdi" and "cb dmabuf revoke" are not under 
QEMU.


44.                                                                             
                  *unmap private MMIO
45.                                                                             
    *TDX disable dma cb
46.                                                              *cb disable CC 
viommu
47.                                                                             
    *TDX tdi free
48.                                                                             
    *enable mmio
49.                                            *cb dmabuf recover


What is the difference between "cb dmabuf revoke" and "cb dmabuf recover"?


50.workable shared dev

TSM unbind is a little verbos & specific to TDX Connect, but SEV TSM could
ignore these callback. Just implement an "unbind" tsm ops.


Well, something need to clear RMP entries, can be done in the TDI unbind or 
whenever you will do it.

And the chart applies for AMD too, more or less. Thanks,


Thanks,
Yilun


and which part/where need to be modified in the current architecture to
reach there. Try to fold vendor-specific knowledge as much as possible,
but still keep them modular in the TSM driver and let's see how it looks
like. Maybe some example TSM driver code to demonstrate together with
VFIO dma-buf patch.

If some where is extremely hacky in the TSM driver, let's see how they
can be lift to the upper level or the upper call passes more parameters
to them.



--
Alexey

Reply via email to