This project is mirrored from https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git. Pull mirroring updated .
  1. 09 Feb, 2021 10 commits
    • Shuo Liu's avatar
      virt: acrn: Introduce irqfd · aa3b483f
      Shuo Liu authored
      
      
      irqfd is a mechanism to inject a specific interrupt to a User VM using a
      decoupled eventfd mechanism.
      
      Vhost is a kernel-level virtio server which uses eventfd for interrupt
      injection. To support vhost on ACRN, irqfd is introduced in HSM.
      
      HSM provides ioctls to associate a virtual Message Signaled Interrupt
      (MSI) with an eventfd. The corresponding virtual MSI will be injected
      into a User VM once the eventfd got signal.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-17-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aa3b483f
    • Shuo Liu's avatar
      virt: acrn: Introduce ioeventfd · d8ad5151
      Shuo Liu authored
      
      
      ioeventfd is a mechanism to register PIO/MMIO regions to trigger an
      eventfd signal when written to by a User VM. ACRN userspace can register
      any arbitrary I/O address with a corresponding eventfd and then pass the
      eventfd to a specific end-point of interest for handling.
      
      Vhost is a kernel-level virtio server which uses eventfd for signalling.
      To support vhost on ACRN, ioeventfd is introduced in HSM.
      
      A new I/O client dedicated to ioeventfd is associated with a User VM
      during VM creation. HSM provides ioctls to associate an I/O region with
      a eventfd. The I/O client signals a eventfd once its corresponding I/O
      region is matched with an I/O request.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-16-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d8ad5151
    • Shuo Liu's avatar
      virt: acrn: Introduce interfaces to query C-states and P-states allowed by hypervisor · 3d679d5a
      Shuo Liu authored
      
      
      The C-states and P-states data are used to support CPU power management.
      The hypervisor controls C-states and P-states for a User VM.
      
      ACRN userspace need to query the data from the hypervisor to build ACPI
      tables for a User VM.
      
      HSM provides ioctls for ACRN userspace to query C-states and P-states
      data obtained from the hypervisor.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-14-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3d679d5a
    • Shuo Liu's avatar
      virt: acrn: Introduce interrupt injection interfaces · c7cf8d27
      Shuo Liu authored
      
      
      ACRN userspace need to inject virtual interrupts into a User VM in
      devices emulation.
      
      HSM needs provide interfaces to do so.
      
      Introduce following interrupt injection interfaces:
      
      ioctl ACRN_IOCTL_SET_IRQLINE:
        Pass data from userspace to the hypervisor, and inform the hypervisor
        to inject a virtual IOAPIC GSI interrupt to a User VM.
      
      ioctl ACRN_IOCTL_INJECT_MSI:
        Pass data struct acrn_msi_entry from userspace to the hypervisor, and
        inform the hypervisor to inject a virtual MSI to a User VM.
      
      ioctl ACRN_IOCTL_VM_INTR_MONITOR:
        Set a 4-Kbyte aligned shared page for statistics information of
        interrupts of a User VM.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-13-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c7cf8d27
    • Shuo Liu's avatar
      virt: acrn: Introduce interfaces for PCI device passthrough · ce011e13
      Shuo Liu authored
      
      
      PCI device passthrough enables an OS in a virtual machine to directly
      access a PCI device in the host. It promises almost the native
      performance, which is required in performance-critical scenarios of
      ACRN.
      
      HSM provides the following ioctls:
       - Assign - ACRN_IOCTL_ASSIGN_PCIDEV
         Pass data struct acrn_pcidev from userspace to the hypervisor, and
         inform the hypervisor to assign a PCI device to a User VM.
      
       - De-assign - ACRN_IOCTL_DEASSIGN_PCIDEV
         Pass data struct acrn_pcidev from userspace to the hypervisor, and
         inform the hypervisor to de-assign a PCI device from a User VM.
      
       - Set a interrupt of a passthrough device - ACRN_IOCTL_SET_PTDEV_INTR
         Pass data struct acrn_ptdev_irq from userspace to the hypervisor,
         and inform the hypervisor to map a INTx interrupt of passthrough
         device of User VM.
      
       - Reset passthrough device interrupt - ACRN_IOCTL_RESET_PTDEV_INTR
         Pass data struct acrn_ptdev_irq from userspace to the hypervisor,
         and inform the hypervisor to unmap a INTx interrupt of passthrough
         device of User VM.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-12-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ce011e13
    • Shuo Liu's avatar
      virt: acrn: Introduce PCI configuration space PIO accesses combiner · 3c4c3316
      Shuo Liu authored
      
      
      A User VM can access its virtual PCI configuration spaces via port IO
      approach, which has two following steps:
       1) writes address into port 0xCF8
       2) put/get data in/from port 0xCFC
      
      To distribute a complete PCI configuration space access one time, HSM
      need to combine such two accesses together.
      
      Combine two paired PIO I/O requests into one PCI I/O request and
      continue the I/O request distribution.
      
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-11-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3c4c3316
    • Shuo Liu's avatar
      virt: acrn: Introduce I/O request management · 72f293de
      Shuo Liu authored
      
      
      An I/O request of a User VM, which is constructed by the hypervisor, is
      distributed by the ACRN Hypervisor Service Module to an I/O client
      corresponding to the address range of the I/O request.
      
      For each User VM, there is a shared 4-KByte memory region used for I/O
      requests communication between the hypervisor and Service VM. An I/O
      request is a 256-byte structure buffer, which is 'struct
      acrn_io_request', that is filled by an I/O handler of the hypervisor
      when a trapped I/O access happens in a User VM. ACRN userspace in the
      Service VM first allocates a 4-KByte page and passes the GPA (Guest
      Physical Address) of the buffer to the hypervisor. The buffer is used as
      an array of 16 I/O request slots with each I/O request slot being 256
      bytes. This array is indexed by vCPU ID.
      
      An I/O client, which is 'struct acrn_ioreq_client', is responsible for
      handling User VM I/O requests whose accessed GPA falls in a certain
      range. Multiple I/O clients can be associated with each User VM. There
      is a special client associated with each User VM, called the default
      client, that handles all I/O requests that do not fit into the range of
      any other I/O clients. The ACRN userspace acts as the default client for
      each User VM.
      
      The state transitions of a ACRN I/O request are as follows.
      
         FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ...
      
      FREE: this I/O request slot is empty
      PENDING: a valid I/O request is pending in this slot
      PROCESSING: the I/O request is being processed
      COMPLETE: the I/O request has been processed
      
      An I/O request in COMPLETE or FREE state is owned by the hypervisor. HSM
      and ACRN userspace are in charge of processing the others.
      
      The processing flow of I/O requests are listed as following:
      
      a) The I/O handler of the hypervisor will fill an I/O request with
         PENDING state when a trapped I/O access happens in a User VM.
      b) The hypervisor makes an upcall, which is a notification interrupt, to
         the Service VM.
      c) The upcall handler schedules a worker to dispatch I/O requests.
      d) The worker looks for the PENDING I/O requests, assigns them to
         different registered clients based on the address of the I/O accesses,
         updates their state to PROCESSING, and notifies the corresponding
         client to handle.
      e) The notified client handles the assigned I/O requests.
      f) The HSM updates I/O requests states to COMPLETE and notifies the
         hypervisor of the completion via hypercalls.
      
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Acked-by: default avatarDavidlohr Bueso <dbueso@suse.de>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-10-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      72f293de
    • Shuo Liu's avatar
      virt: acrn: Introduce EPT mapping management · 88f537d5
      Shuo Liu authored
      
      
      The HSM provides hypervisor services to the ACRN userspace. While
      launching a User VM, ACRN userspace needs to allocate memory and request
      the ACRN Hypervisor to set up the EPT mapping for the VM.
      
      A mapping cache is introduced for accelerating the translation between
      the Service VM kernel virtual address and User VM physical address.
      
      >From the perspective of the hypervisor, the types of GPA of User VM can be
      listed as following:
         1) RAM region, which is used by User VM as system ram.
         2) MMIO region, which is recognized by User VM as MMIO. MMIO region is
            used to be utilized for devices emulation.
      
      Generally, User VM RAM regions mapping is set up before VM started and
      is released in the User VM destruction. MMIO regions mapping may be set
      and unset dynamically during User VM running.
      
      To achieve this, ioctls ACRN_IOCTL_SET_MEMSEG and ACRN_IOCTL_UNSET_MEMSEG
      are introduced in HSM.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-9-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      88f537d5
    • Shuo Liu's avatar
      virt: acrn: Introduce an ioctl to set vCPU registers state · 2ad2aaee
      Shuo Liu authored
      
      
      A virtual CPU of User VM has different context due to the different
      registers state. ACRN userspace needs to set the virtual CPU
      registers state (e.g. giving a initial registers state to a virtual
      BSP of a User VM).
      
      HSM provides an ioctl ACRN_IOCTL_SET_VCPU_REGS to do the virtual CPU
      registers state setting. The ioctl passes the registers state from ACRN
      userspace to the hypervisor directly.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-8-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2ad2aaee
    • Shuo Liu's avatar
      virt: acrn: Introduce VM management interfaces · 9c5137ae
      Shuo Liu authored
      
      
      The VM management interfaces expose several VM operations to ACRN
      userspace via ioctls. For example, creating VM, starting VM, destroying
      VM and so on.
      
      The ACRN Hypervisor needs to exchange data with the ACRN userspace
      during the VM operations. HSM provides VM operation ioctls to the ACRN
      userspace and communicates with the ACRN Hypervisor for VM operations
      via hypercalls.
      
      HSM maintains a list of User VM. Each User VM will be bound to an
      existing file descriptor of /dev/acrn_hsm. The User VM will be
      destroyed when the file descriptor is closed.
      
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Yu Wang <yu1.wang@intel.com>
      Cc: Reinette Chatre <reinette.chatre@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarZhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: default avatarReinette Chatre <reinette.chatre@intel.com>
      Signed-off-by: default avatarShuo Liu <shuo.a.liu@intel.com>
      Link: https://lore.kernel.org/r/20210207031040.49576-7-shuo.a.liu@intel.com
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9c5137ae