[PATCH 8/8] docs: update riscv/virt.rst with kernel-irqchip=split support

Daniel Henrique Barboza posted 8 patches 1 month, 2 weeks ago
There is a newer version of this series
[PATCH 8/8] docs: update riscv/virt.rst with kernel-irqchip=split support
Posted by Daniel Henrique Barboza 1 month, 2 weeks ago
Also add a new page, docs/specs/riscv-aia.rst, where we're documenting
the state of AIA support in QEMU w.r.t the controllers being emulated or
not depending on the AIA and accelerator settings.

Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
---
 docs/specs/index.rst       |  1 +
 docs/specs/riscv-aia.rst   | 83 ++++++++++++++++++++++++++++++++++++++
 docs/system/riscv/virt.rst |  7 ++++
 3 files changed, 91 insertions(+)
 create mode 100644 docs/specs/riscv-aia.rst

diff --git a/docs/specs/index.rst b/docs/specs/index.rst
index 6495ed5ed9..9a7d61161f 100644
--- a/docs/specs/index.rst
+++ b/docs/specs/index.rst
@@ -36,3 +36,4 @@ guest hardware that is specific to QEMU.
    vmgenid
    rapl-msr
    rocker
+   riscv-aia
diff --git a/docs/specs/riscv-aia.rst b/docs/specs/riscv-aia.rst
new file mode 100644
index 0000000000..8097e2f897
--- /dev/null
+++ b/docs/specs/riscv-aia.rst
@@ -0,0 +1,83 @@
+.. _riscv-aia:
+
+RISC-V AIA support for RISC-V machines
+======================================
+
+AIA (Advanced Interrupt Architecture) support is implemented in the ``virt``
+RISC-V machine for TCG and KVM accelerators.
+
+The support consists of two main modes:
+
+- "aia=aplic": adds one or more APLIC (Advanced Platform Level Interrupt Controller)
+  devices
+- "aia=aplic-imsic": adds one or more APLIC device and an IMSIC (Incoming MSI
+   Controller) device for each CPU
+
+From an user standpoint, these modes will behave the same regardless of the accelerator
+used.  From a developer standpoint the accelerator settings will change what it being
+emulated in userspace versus what is being emulated by an in-kernel irqchip.
+
+When running TCG, all controllers are emulated in userspace, including machine mode
+(m-mode) APLIC and IMSIC (when applicable).
+
+When running KVM:
+
+- no m-mode is provided, so there is no m-mode APLIC or IMSIC emulation regardless of
+  the AIA mode chosen
+- with "aia=aplic", s-mode APLIC will be emulated by userspace
+- with "aia=aplic-imsic" there are two possibilities.  If no additional KVM option
+  is provided there will be no APLIC or IMSIC emulation in userspace, and the virtual
+  machine will use the provided in-kernel APLIC and IMSIC controllers.  If the user
+  chooses to use the irqchip in split mode via "-accel kvm,kernel-irqchip=split",
+  s-mode APLIC will be emulated while using the s-mode IMSIC from the irqchip
+
+The following table summarizes how the AIA and accelerator options defines what
+we will emulate in userspace:
+
+
+.. list-table:: How AIA and accel options changes controller emulation
+   :widths: 25 25 25 25 25 25 25
+   :header-rows: 1
+
+   * - Accel
+     - Accel props
+     - AIA type
+     - APLIC m-mode
+     - IMSIC m-mode
+     - APLIC s-mode
+     - IMSIC s-mode
+   * - tcg
+     - ---
+     - aplic
+     - emul
+     - n/a
+     - emul
+     - n/a
+   * - tcg
+     - ---
+     - aplic-imsic
+     - emul
+     - emul
+     - emul
+     - emul
+   * - kvm
+     - ---
+     - aplic
+     - n/a
+     - n/a
+     - emul
+     - n/a
+   * - kvm
+     - none
+     - aplic-imsic
+     - n/a
+     - n/a
+     - in-kernel
+     - in-kernel
+   * - kvm
+     - irqchip=split
+     - aplic-imsic
+     - n/a
+     - n/a
+     - emul
+     - in-kernel
diff --git a/docs/system/riscv/virt.rst b/docs/system/riscv/virt.rst
index 9a06f95a34..8cbedf73ef 100644
--- a/docs/system/riscv/virt.rst
+++ b/docs/system/riscv/virt.rst
@@ -110,6 +110,13 @@ The following machine-specific options are supported:
   MSIs. When not specified, this option is assumed to be "none" which selects
   SiFive PLIC to handle wired interrupts.
 
+  This option also interacts with '-accel kvm'.  When using "aia=aplic-imsic"
+  with KVM, it is possible to set the use of the kernel irqchip in split mode
+  by using "-accel kvm,kernel-irqchip=split".  In this case the ``virt`` machine
+  will emulate the APLIC controller instead of using the APLIC controller from
+  the irqchip.  See :ref:`riscv-aia` for more details on all available AIA
+  modes.
+
 - aia-guests=nnn
 
   The number of per-HART VS-level AIA IMSIC pages to be emulated for a guest
-- 
2.45.2
Re: [PATCH 8/8] docs: update riscv/virt.rst with kernel-irqchip=split support
Posted by Alistair Francis 5 days, 21 hours ago
On Fri, Oct 11, 2024 at 5:05 AM Daniel Henrique Barboza
<dbarboza@ventanamicro.com> wrote:
>
> Also add a new page, docs/specs/riscv-aia.rst, where we're documenting
> the state of AIA support in QEMU w.r.t the controllers being emulated or
> not depending on the AIA and accelerator settings.
>
> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  docs/specs/index.rst       |  1 +
>  docs/specs/riscv-aia.rst   | 83 ++++++++++++++++++++++++++++++++++++++
>  docs/system/riscv/virt.rst |  7 ++++
>  3 files changed, 91 insertions(+)
>  create mode 100644 docs/specs/riscv-aia.rst
>
> diff --git a/docs/specs/index.rst b/docs/specs/index.rst
> index 6495ed5ed9..9a7d61161f 100644
> --- a/docs/specs/index.rst
> +++ b/docs/specs/index.rst
> @@ -36,3 +36,4 @@ guest hardware that is specific to QEMU.
>     vmgenid
>     rapl-msr
>     rocker
> +   riscv-aia
> diff --git a/docs/specs/riscv-aia.rst b/docs/specs/riscv-aia.rst
> new file mode 100644
> index 0000000000..8097e2f897
> --- /dev/null
> +++ b/docs/specs/riscv-aia.rst
> @@ -0,0 +1,83 @@
> +.. _riscv-aia:
> +
> +RISC-V AIA support for RISC-V machines
> +======================================
> +
> +AIA (Advanced Interrupt Architecture) support is implemented in the ``virt``
> +RISC-V machine for TCG and KVM accelerators.
> +
> +The support consists of two main modes:
> +
> +- "aia=aplic": adds one or more APLIC (Advanced Platform Level Interrupt Controller)
> +  devices
> +- "aia=aplic-imsic": adds one or more APLIC device and an IMSIC (Incoming MSI
> +   Controller) device for each CPU
> +
> +From an user standpoint, these modes will behave the same regardless of the accelerator
> +used.  From a developer standpoint the accelerator settings will change what it being
> +emulated in userspace versus what is being emulated by an in-kernel irqchip.
> +
> +When running TCG, all controllers are emulated in userspace, including machine mode
> +(m-mode) APLIC and IMSIC (when applicable).
> +
> +When running KVM:
> +
> +- no m-mode is provided, so there is no m-mode APLIC or IMSIC emulation regardless of
> +  the AIA mode chosen
> +- with "aia=aplic", s-mode APLIC will be emulated by userspace
> +- with "aia=aplic-imsic" there are two possibilities.  If no additional KVM option
> +  is provided there will be no APLIC or IMSIC emulation in userspace, and the virtual
> +  machine will use the provided in-kernel APLIC and IMSIC controllers.  If the user
> +  chooses to use the irqchip in split mode via "-accel kvm,kernel-irqchip=split",
> +  s-mode APLIC will be emulated while using the s-mode IMSIC from the irqchip
> +
> +The following table summarizes how the AIA and accelerator options defines what
> +we will emulate in userspace:
> +
> +
> +.. list-table:: How AIA and accel options changes controller emulation
> +   :widths: 25 25 25 25 25 25 25
> +   :header-rows: 1
> +
> +   * - Accel
> +     - Accel props
> +     - AIA type
> +     - APLIC m-mode
> +     - IMSIC m-mode
> +     - APLIC s-mode
> +     - IMSIC s-mode
> +   * - tcg
> +     - ---
> +     - aplic
> +     - emul
> +     - n/a
> +     - emul
> +     - n/a
> +   * - tcg
> +     - ---
> +     - aplic-imsic
> +     - emul
> +     - emul
> +     - emul
> +     - emul
> +   * - kvm
> +     - ---
> +     - aplic
> +     - n/a
> +     - n/a
> +     - emul
> +     - n/a
> +   * - kvm
> +     - none
> +     - aplic-imsic
> +     - n/a
> +     - n/a
> +     - in-kernel
> +     - in-kernel
> +   * - kvm
> +     - irqchip=split
> +     - aplic-imsic
> +     - n/a
> +     - n/a
> +     - emul
> +     - in-kernel
> diff --git a/docs/system/riscv/virt.rst b/docs/system/riscv/virt.rst
> index 9a06f95a34..8cbedf73ef 100644
> --- a/docs/system/riscv/virt.rst
> +++ b/docs/system/riscv/virt.rst
> @@ -110,6 +110,13 @@ The following machine-specific options are supported:
>    MSIs. When not specified, this option is assumed to be "none" which selects
>    SiFive PLIC to handle wired interrupts.
>
> +  This option also interacts with '-accel kvm'.  When using "aia=aplic-imsic"
> +  with KVM, it is possible to set the use of the kernel irqchip in split mode
> +  by using "-accel kvm,kernel-irqchip=split".  In this case the ``virt`` machine
> +  will emulate the APLIC controller instead of using the APLIC controller from
> +  the irqchip.  See :ref:`riscv-aia` for more details on all available AIA
> +  modes.
> +
>  - aia-guests=nnn
>
>    The number of per-HART VS-level AIA IMSIC pages to be emulated for a guest
> --
> 2.45.2
>
>