cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

io-request.rst (4475B)


      1.. SPDX-License-Identifier: GPL-2.0
      2
      3I/O request handling
      4====================
      5
      6An I/O request of a User VM, which is constructed by the hypervisor, is
      7distributed by the ACRN Hypervisor Service Module to an I/O client
      8corresponding to the address range of the I/O request. Details of I/O request
      9handling are described in the following sections.
     10
     111. I/O request
     12--------------
     13
     14For each User VM, there is a shared 4-KByte memory region used for I/O requests
     15communication between the hypervisor and Service VM. An I/O request is a
     16256-byte structure buffer, which is 'struct acrn_io_request', that is filled by
     17an I/O handler of the hypervisor when a trapped I/O access happens in a User
     18VM. ACRN userspace in the Service VM first allocates a 4-KByte page and passes
     19the GPA (Guest Physical Address) of the buffer to the hypervisor. The buffer is
     20used as an array of 16 I/O request slots with each I/O request slot being 256
     21bytes. This array is indexed by vCPU ID.
     22
     232. I/O clients
     24--------------
     25
     26An I/O client is responsible for handling User VM I/O requests whose accessed
     27GPA falls in a certain range. Multiple I/O clients can be associated with each
     28User VM. There is a special client associated with each User VM, called the
     29default client, that handles all I/O requests that do not fit into the range of
     30any other clients. The ACRN userspace acts as the default client for each User
     31VM.
     32
     33Below illustration shows the relationship between I/O requests shared buffer,
     34I/O requests and I/O clients.
     35
     36::
     37
     38     +------------------------------------------------------+
     39     |                                       Service VM     |
     40     |+--------------------------------------------------+  |
     41     ||      +----------------------------------------+  |  |
     42     ||      | shared page            ACRN userspace  |  |  |
     43     ||      |    +-----------------+  +------------+ |  |  |
     44     ||   +----+->| acrn_io_request |<-+  default   | |  |  |
     45     ||   |  | |  +-----------------+  | I/O client | |  |  |
     46     ||   |  | |  |       ...       |  +------------+ |  |  |
     47     ||   |  | |  +-----------------+                 |  |  |
     48     ||   |  +-|--------------------------------------+  |  |
     49     ||---|----|-----------------------------------------|  |
     50     ||   |    |                             kernel      |  |
     51     ||   |    |            +----------------------+     |  |
     52     ||   |    |            | +-------------+  HSM |     |  |
     53     ||   |    +--------------+             |      |     |  |
     54     ||   |                 | | I/O clients |      |     |  |
     55     ||   |                 | |             |      |     |  |
     56     ||   |                 | +-------------+      |     |  |
     57     ||   |                 +----------------------+     |  |
     58     |+---|----------------------------------------------+  |
     59     +----|-------------------------------------------------+
     60          |
     61     +----|-------------------------------------------------+
     62     |  +-+-----------+                                     |
     63     |  | I/O handler |              ACRN Hypervisor        |
     64     |  +-------------+                                     |
     65     +------------------------------------------------------+
     66
     673. I/O request state transition
     68-------------------------------
     69
     70The state transitions of an ACRN I/O request are as follows.
     71
     72::
     73
     74   FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ...
     75
     76- FREE: this I/O request slot is empty
     77- PENDING: a valid I/O request is pending in this slot
     78- PROCESSING: the I/O request is being processed
     79- COMPLETE: the I/O request has been processed
     80
     81An I/O request in COMPLETE or FREE state is owned by the hypervisor. HSM and
     82ACRN userspace are in charge of processing the others.
     83
     844. Processing flow of I/O requests
     85----------------------------------
     86
     87a. The I/O handler of the hypervisor will fill an I/O request with PENDING
     88   state when a trapped I/O access happens in a User VM.
     89b. The hypervisor makes an upcall, which is a notification interrupt, to
     90   the Service VM.
     91c. The upcall handler schedules a worker to dispatch I/O requests.
     92d. The worker looks for the PENDING I/O requests, assigns them to different
     93   registered clients based on the address of the I/O accesses, updates
     94   their state to PROCESSING, and notifies the corresponding client to handle.
     95e. The notified client handles the assigned I/O requests.
     96f. The HSM updates I/O requests states to COMPLETE and notifies the hypervisor
     97   of the completion via hypercalls.