> 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
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
35.Workload...
36.*disconnect(Unbind)
37.              *GHCI unbind
38.                                *Unbind
39.                                            *detach vdev
40.                                                               *tsm_unbind
41.                                                                             
    *TDX stop tdi
42.                                                                             
    *TDX disable mmio cb
43.                                            *cb dmabuf revoke
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
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.

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.
> 

Reply via email to