From: Oleksii Kurochko <oleksii.kurochko@gmail.com>
To: Baptiste Le Duc <baptiste.le-duc@vates.tech>
Cc: xen-devel@lists.xenproject.org,
"Romain Caritey" <Romain.Caritey@microchip.com>,
"Zheng Zhang" <zhangzheng@iscas.ac.cn>,
"Alistair Francis" <alistair.francis@wdc.com>,
"Connor Davis" <connojdavis@gmail.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Anthony PERARD" <anthony.perard@vates.tech>,
"Michal Orzel" <michal.orzel@amd.com>,
"Jan Beulich" <jbeulich@suse.com>,
"Julien Grall" <julien@xen.org>,
"Roger Pau Monné" <roger@xenproject.org>,
"Stefano Stabellini" <sstabellini@kernel.org>
Subject: Re: [PATCH v2 09/39] xen/riscv: implement virtual APLIC MMIO emulation
Date: Fri, 4 Sep 2026 16:02:10 +0200 [thread overview]
Message-ID: <66c96742-3ee2-4e76-948c-92ed6efaaac9@gmail.com> (raw)
In-Reply-To: <1788352275.8631fc262581453bbf619ec5b2062170.1a0621a2590000c4f3@vates.tech>
On 9/2/26 2:31 PM, Baptiste Le Duc wrote:
>> +
>> +static bool vaplic_emulate_store(const struct vcpu *curr, paddr_t addr,
>> + uint32_t value)
>> +{
>> + const struct domain *currd = curr->domain;
>> + unsigned int offset = addr & APLIC_CTRL_REGION_OFFSET_MASK;
>> +
>> + ASSERT(curr == current);
>> +
>> + switch ( offset )
>> + {
>> + case APLIC_SETIP_BASE ... APLIC_SETIP_LAST:
>> + case APLIC_CLRIP_BASE ... APLIC_CLRIP_LAST:
>> + case APLIC_SETIE_BASE ... APLIC_SETIE_LAST:
>> + case APLIC_CLRIE_BASE ... APLIC_CLRIE_LAST:
>> + {
>> + unsigned int word_idx =
>> + regoffset_to_word_idx(offset & APLIC_SETCLR_OFFSET_MASK);
>> +
>> + value &= generate_auth_mask(currd, word_idx);
>> +
>> + break;
>> + }
>> +
>> + case APLIC_SOURCECFG_BASE ... APLIC_SOURCECFG_LAST:
>> + if ( value & APLIC_SOURCECFG_D )
>> + {
>> + dprintk(XENLOG_ERR, "APLIC_SOURCECFG_D isn't supported\n");
>> +
>> + goto fail;
>> + }
>> +
>> + /*
>> + * As sourcecfg register starts from 1:
>> + * 0x0000 domaincfg
>> + * 0x0004 sourcecfg[1]
>> + * 0x0008 sourcecfg[2]
>> + * ...
>> + * 0x0FFC sourcecfg[1023]
>> + * It is necessary to calculate an interrupt number by subtracting
>> + * APLIC_DOMAINCFG instead of APLIC_SOURCECFG_BASE.
>> + */
>> + if ( !AUTH_IRQ_BIT(currd,
>> + regoffset_to_word_idx(offset - APLIC_DOMAINCFG)) )
>> + /* Interrupt not enabled, ignore it */
>> + return true;
>> +
>> + if ( value > APLIC_SOURCECFG_SM_LEVEL_LOW )
> This compares the whole value against 7, not the extracted SM field
> (bits [2:0]). A perfectly legal SM=0 write with any bit set in the
> reserved [9:3] range (e.g. value=8) gets rejected here even though the
> actual field is fine Should be MASK_EXTR(value, APLIC_SOURCECFG_SM) >
> APLIC_SOURCECFG_SM_LEVEL_LOW.
Agree, if() written in this way is incorrect in the way what is going
before this if().
I think that we don't need it at all and what we want instead is
ignoring write to others bits then D (bit10) and SM(bits 2:0) as they
are reserved and read as zeros.
/*
* Only D (bit 10) and SM (bits 2:0) are implemented, the rest
of the
* bits are reserved and read as zero, so ignore what a guest
writes
* to them.
*/
value &= (APLIC_SOURCECFG_D | APLIC_SOURCECFG_SM);
Probably it make sense to introduce and use it above:
/*
* All other bits of sourcecfg[] are reserved and read as zero, so drop
them on a write.
*/
#define APLIC_SOURCECFG_WMASK (APLIC_SOURCECFG_D |
APLIC_SOURCECFG_SM)
And ...
>
> SM is WARL. If SM invalid but other fields valid, shouldn't reject whole
> write. Instead override value.SM with current valid SM in this branch,
> so other valid fields still get written.
... considering that SM is WARL it means that technically any value
could be written to this field but read of this register should be
return always something valid. So considering that in the case of
SOURCECFG we don't have a shadow copy for vAPLIC and use just real h/w
we could ignore fully the value it is trying to write to SM field as
even it is something illegal h/w will choose something legal instead.
If one day we will need a copy of SOURCECFG for vAPLIC we will need to
do something like this to emulate behavior of real SOURCECFG:
/*
* SM is a WARL field. If the guest wrote reserved values (2 or 3),
* optionally coerce them to a supported default (e.g.,
Inactive/0).
*/
if ( value == 2 || value == 3 )
value = APLIC_SOURCECFG_SM_INACTIVE;
For now we can do nothing. I can put TODO:
/*
* SM is WARL, so the reserved values 0x2 and 0x3 need no handling
* here: vAPLIC keeps no shadow copy of sourcecfg[], the value is
* written straight to the h/w register and is read back from
it, so
* it is the h/w which substitutes a legal value for an illegal
one.
*
* TODO: when vAPLIC starts to shadow sourcecfg[], the WARL
behaviour
* will have to be emulated here instead, e.g.:
* if ( value == 0x2 || value == 0x3 )
* value = APLIC_SOURCECFG_SM_INACTIVE;
*/
Note that here it is okay not to use MASK_EXTR as we have always D=0 so
sourcecfg[i] value is basically SM field (as other bits are reserved and
are read only)
So my final suggestion is:
case APLIC_SOURCECFG_BASE ... APLIC_SOURCECFG_LAST:
+ /*
+ * Only D (bit 10) and SM (bits 2:0) are implemented, the rest
of the
+ * bits are reserved and read as zero, so ignore what a guest
writes
+ * to them.
+ */
+ value &= APLIC_SOURCECFG_WMASK;
+
if ( value & APLIC_SOURCECFG_D )
{
dprintk(XENLOG_ERR, "APLIC_SOURCECFG_D isn't supported\n");
@@ -169,6 +176,18 @@ static bool vaplic_emulate_store(const struct vcpu
*curr, paddr_t addr,
goto fail;
}
+ /*
+ * SM is WARL, so the reserved values 0x2 and 0x3 need no handling
+ * here: vAPLIC keeps no shadow copy of sourcecfg[], the value is
+ * written straight to the h/w register and is read back from
it, so
+ * it is the h/w which substitutes a legal value for an illegal
one.
+ *
+ * TODO: when vAPLIC starts to shadow sourcecfg[], the WARL
behaviour
+ * will have to be emulated here instead, e.g.:
+ * if ( value == 0x2 || value == 0x3 )
+ * value = APLIC_SOURCECFG_SM_INACTIVE;
+ */
+
/*
* As sourcecfg register starts from 1:
* 0x0000 domaincfg
@@ -184,15 +203,6 @@ static bool vaplic_emulate_store(const struct vcpu
*curr, paddr_t addr,
/* Interrupt not enabled, ignore it */
return true;
- if ( value > APLIC_SOURCECFG_SM_LEVEL_LOW )
- {
- gdprintk(XENLOG_ERR,
- "value(%#x) is incorrect for sourcecfg register\n",
- value);
-
- return true;
- }
-
break;
Does it make sense? Or I still missing something.
>> + {
>> + gdprintk(XENLOG_ERR,
>> + "value(%#x) is incorrect for sourcecfg register\n",
>> + value);
>> +
>> + return true;
>> + }
>> +
>> + break;
>> +
>> + case APLIC_TARGET_BASE ... APLIC_TARGET_LAST:
>> + {
>> + struct vaplic *vaplic = to_vaplic(currd);
>> + struct vcpu *target_vcpu;
>> + unsigned int guest_hart_idx = MASK_EXTR(value, APLIC_TARGET_HART_IDX);
>> + /*
>> + * Look at vaplic_emulate_load() for explanation why APLIC_GENMSI is
>> + * subtracted.
>> + */
>> + unsigned int srcn = regoffset_to_word_idx(offset - APLIC_GENMSI);
>> +
>> + if ( !AUTH_IRQ_BIT(currd, srcn) )
>> + /* Interrupt not enabled, ignore it */
>> + return true;
>> +
>> + target_vcpu = domain_vcpu(currd, guest_hart_idx);
>> +
>> + if ( !target_vcpu )
>> + {
>> + dprintk(XENLOG_ERR, "Invalid vCPU id in target register\n");
>> +
>> + /* Ignore such writings */
>> + return true;
>> + }
>> +
>> + if ( vaplic->regs.domaincfg & APLIC_DOMAINCFG_DM )
>> + {
>> + /*
>> + * A non-zero guest index asks for delivery to an interrupt file of
>> + * nested guest. The vIMSIC node has no riscv,guest-index-bits
>> + * property, so a guest is told its harts have no guest interrupt
>> + * files and the field is read-only zero for them. The write isn't
>> + * rejected (that would throw away a valid hart index and EIID);
>> + * instead the field is dropped, which is also what
>> + * aplic_msi_target_gen() does with it when programming the h/w.
>> + */
>> + if ( MASK_EXTR(value, APLIC_TARGET_GUEST_IDX) )
>> + {
>> + printk_once(XENLOG_WARNING
>> + "%pd: vAPLIC target guest index != 0 is unsupported\n",
>> + currd);
>> +
>> + /* Ignore such writes ... */
>> + return true;
>> + }
> Comment above this says "The write isn't rejected ... instead the field
> is dropped, which is also what aplic_msi_target_gen() does with it." But
> the code doesn't follow it as it returns true immediately here before
> the write occurred and without zeroing the guest index field.
It looks like the same question in the other thread [1] at the end.
If you don't mind lets continue discussion there. I responded there.
[1]
https://lore.kernel.org/xen-devel/cover.1787838835.git.oleksii.kurochko@gmail.com/T/#m0de75013bd31481a2f6abd6f36ccccb8ede87a20
>> +
>> + write_atomic(&vaplic->regs.target[srcn], value);
>> +
>> + value = aplic_msi_target_gen(target_vcpu, value);
>> + }
>> + else
>> + {
>> + /*
>> + * IPRIO is WARL and zero isn't a legal value for it, so normalize
>> + * it once: the guest then reads back exactly what it gets.
>> + */
>> + unsigned int iprio = MASK_EXTR(value, APLIC_TARGET_IPRIO) ?:
>> + APLIC_TARGET_IPRIO_DEFAULT;
>> + unsigned long h = cpuid_to_hartid(guest_hart_idx);
>> +
>> + value = MASK_INSR(guest_hart_idx, APLIC_TARGET_HART_IDX) |
>> + MASK_INSR(iprio, APLIC_TARGET_IPRIO);
>> +
>> + write_atomic(&vaplic->regs.target[srcn], value);
>> +
>> + value = MASK_INSR(h, APLIC_TARGET_HART_IDX) |
>> + MASK_INSR(iprio, APLIC_TARGET_IPRIO);
>> + }
>> +
>> + break;
>> + }
>> +
>> + case APLIC_SETIPNUM:
>> + case APLIC_SETIPNUM_LE:
>> + case APLIC_CLRIPNUM:
>> + case APLIC_SETIENUM:
>> + case APLIC_CLRIENUM:
>> + if ( !value || !AUTH_IRQ_BIT(currd, value) )
>> + return true;
>> +
>> + break;
>> +
>> + case APLIC_DOMAINCFG:
>> + {
>> + struct vaplic *vaplic = to_vaplic(currd);
>> +
>> + vaplic->regs.domaincfg = APLIC_DOMAINCFG_RO |
>> + (value & APLIC_DOMAINCFG_WMASK);
>> +
> APLIC_DOMAINCFG_WMASK includes APLIC_DOMAINCFG_DM, so
> the guest can clear DM through this write. But aplic.c:
> aplic_init_hw_interrupts() sets the real hardware APLIC's domaincfg to IE|DM
> exactly once and never touches it again. Is this expected?
Yes, it is expected as we are supporting now only APLIC+IMSIC in Xen and
it is the reason why we here started to provided a shadow copy of
domaincfg register for vAPLIC instead of using real APLIC domaincfg
register.
>
> Moreover, I saw that d8fbe0bbc7's commit message claims: "a guest's
> domaincfg.DM reads back as a fixed one, so is there situation where we would
> allow direct delivery mode? If not, the else branch should be dropped.
>
At the moment, we started with a support only when we are working in MSI
mode but commonly it is possible that IMSIC will be absent and we don't
have any other choice as started to support delivery mode.
Thanks for review!
~ Oleksii
next prev parent reply other threads:[~2026-09-04 14:02 UTC|newest]
Thread overview: 163+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 15:20 [PATCH v2 00/39] [RISC-V] virtual interrupt controller (vAPLIC/vIMSIC) support Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 01/39] xen/riscv: drop pregs from struct cpu_user_regs Oleksii Kurochko
2026-08-31 12:48 ` Baptiste Le Duc
2026-09-01 6:58 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 02/39] xen/riscv: drop bug.h's duplicate instruction length helpers Oleksii Kurochko
2026-08-31 12:48 ` Baptiste Le Duc
2026-09-01 7:01 ` Jan Beulich
2026-09-02 10:48 ` Oleksii Kurochko
2026-09-02 13:02 ` Jan Beulich
2026-09-02 13:45 ` Oleksii Kurochko
2026-09-02 14:27 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 03/39] xen/riscv: set the guest's XLEN explicitly in hstatus.VSXL Oleksii Kurochko
2026-08-31 12:48 ` Baptiste Le Duc
2026-09-01 7:03 ` Jan Beulich
2026-09-01 8:40 ` Oleksii Kurochko
2026-09-01 15:16 ` Jan Beulich
2026-09-01 15:20 ` Jan Beulich
2026-09-02 11:42 ` Oleksii Kurochko
2026-09-02 13:07 ` Jan Beulich
2026-09-02 13:29 ` Oleksii Kurochko
2026-09-02 14:31 ` Jan Beulich
2026-09-02 15:17 ` Oleksii Kurochko
2026-09-02 15:56 ` Oleksii Kurochko
2026-09-02 17:45 ` Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 04/39] xen/riscv: introduce csr_read64() Oleksii Kurochko
2026-08-27 15:36 ` Andrew Cooper
2026-08-31 12:42 ` Oleksii Kurochko
2026-09-01 7:07 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 05/39] xen/riscv: request a G-stage flush on vmenter when VMIDs are disabled Oleksii Kurochko
2026-08-31 12:48 ` Baptiste Le Duc
2026-09-01 8:43 ` Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 06/39] xen/riscv: use UINT64_MAX to disable the VS-timer Oleksii Kurochko
2026-08-31 12:48 ` Baptiste Le Duc
2026-09-01 7:12 ` Jan Beulich
2026-09-01 8:47 ` Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 07/39] xen/riscv: add missing APLIC register offsets, masks to asm/aplic.h Oleksii Kurochko
2026-09-01 15:36 ` Baptiste Le Duc
2026-09-01 15:53 ` Jan Beulich
2026-09-02 13:22 ` Jan Beulich
2026-09-02 13:52 ` Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 08/39] xen/riscv: introduce device-agnostic MMIO emulation dispatch Oleksii Kurochko
2026-09-01 15:36 ` Baptiste Le Duc
2026-09-03 10:28 ` Oleksii Kurochko
2026-09-09 13:24 ` Jan Beulich
2026-09-09 14:04 ` Oleksii Kurochko
2026-09-09 14:32 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 09/39] xen/riscv: implement virtual APLIC MMIO emulation Oleksii Kurochko
2026-09-02 11:51 ` Baptiste Le Duc
2026-09-04 11:58 ` Oleksii Kurochko
2026-09-04 12:03 ` Jan Beulich
2026-09-02 12:31 ` Baptiste Le Duc
2026-09-04 14:02 ` Oleksii Kurochko [this message]
2026-09-09 14:26 ` Jan Beulich
2026-09-10 10:37 ` Oleksii Kurochko
2026-09-10 11:14 ` Jan Beulich
2026-09-10 14:24 ` Oleksii Kurochko
2026-09-12 8:50 ` SeungJu Cheon
2026-08-27 15:20 ` [PATCH v2 10/39] xen/riscv: build the target hart index via aplic_hart_field() Oleksii Kurochko
2026-09-04 8:26 ` Baptiste Le Duc
2026-09-04 14:28 ` Oleksii Kurochko
2026-09-09 14:51 ` Jan Beulich
2026-09-09 14:52 ` Jan Beulich
2026-09-10 10:59 ` Oleksii Kurochko
2026-09-10 11:23 ` Jan Beulich
2026-09-10 12:44 ` Oleksii Kurochko
2026-09-10 12:57 ` Jan Beulich
2026-09-11 9:47 ` Oleksii Kurochko
2026-09-10 11:23 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 11/39] xen/riscv: add helper to check APLIC MSI mode Oleksii Kurochko
2026-09-04 8:26 ` Baptiste Le Duc
2026-09-09 14:53 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 12/39] xen/riscv: implement vCPU context switching Oleksii Kurochko
2026-09-02 14:42 ` Oleksii Kurochko
2026-09-04 8:26 ` Baptiste Le Duc
2026-09-04 8:33 ` Jan Beulich
2026-09-04 9:54 ` Baptiste Le Duc
2026-09-04 14:55 ` Oleksii Kurochko
2026-09-07 8:17 ` Jan Beulich
2026-09-08 9:06 ` Oleksii Kurochko
2026-09-05 7:25 ` Oleksii Kurochko
2026-09-10 13:29 ` Jan Beulich
2026-09-11 10:43 ` Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 13/39] xen/riscv: save and restore AIA state on vCPU context switch Oleksii Kurochko
2026-09-04 9:52 ` Baptiste Le Duc
2026-09-04 16:40 ` Oleksii Kurochko
2026-08-27 15:20 ` [PATCH v2 14/39] xen/riscv: introduce vintc_ctxt_switch_{from,to}() Oleksii Kurochko
2026-09-04 11:25 ` Baptiste Le Duc
2026-09-04 16:54 ` Oleksii Kurochko
2026-09-10 14:54 ` Jan Beulich
2026-08-27 15:20 ` [PATCH v2 15/39] xen/riscv: add IMSIC vCPU context switch handlers Oleksii Kurochko
2026-09-04 11:33 ` Baptiste Le Duc
2026-09-04 16:56 ` Oleksii Kurochko
2026-09-10 14:57 ` Jan Beulich
2026-09-11 11:19 ` Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 16/39] xen/riscv: extend exception tables with type and data fields Oleksii Kurochko
2026-09-07 15:57 ` Baptiste Le Duc
2026-09-08 6:06 ` Jan Beulich
2026-09-08 8:18 ` Baptiste Le Duc
2026-09-08 9:19 ` Oleksii Kurochko
2026-09-08 16:26 ` Baptiste Le Duc
2026-09-08 13:44 ` Jan Beulich
2026-09-09 11:20 ` Oleksii Kurochko
2026-09-09 12:22 ` Jan Beulich
2026-09-09 12:42 ` Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 17/39] xen/riscv: decouple INSN_PSEUDO_VS_* from the hypervisor's XLEN Oleksii Kurochko
2026-09-07 15:57 ` Baptiste Le Duc
2026-09-08 9:34 ` Oleksii Kurochko
2026-09-08 16:04 ` Baptiste Le Duc
2026-09-09 12:57 ` Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 18/39] xen/riscv: add guest page fault handling stub Oleksii Kurochko
2026-09-07 15:57 ` Baptiste Le Duc
2026-09-08 9:49 ` Oleksii Kurochko
2026-09-08 14:10 ` Jan Beulich
2026-09-09 15:09 ` Oleksii Kurochko
2026-09-10 6:38 ` Jan Beulich
2026-09-11 11:47 ` Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 19/39] xen/riscv: implement trap redirection to a guest Oleksii Kurochko
2026-09-07 15:57 ` Baptiste Le Duc
2026-09-08 10:01 ` Oleksii Kurochko
2026-09-08 14:58 ` Oleksii Kurochko
2026-09-08 15:05 ` Jan Beulich
2026-09-08 15:47 ` Baptiste Le Duc
2026-09-08 15:58 ` Jan Beulich
2026-09-08 14:16 ` Jan Beulich
2026-09-08 14:16 ` Jan Beulich
2026-09-08 15:25 ` Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 20/39] xen/riscv: detect Shtvala Oleksii Kurochko
2026-09-07 15:57 ` Baptiste Le Duc
2026-09-08 10:15 ` Oleksii Kurochko
2026-09-08 15:49 ` Baptiste Le Duc
2026-08-27 15:21 ` [PATCH v2 21/39] xen/riscv: resolve the faulting guest physical address Oleksii Kurochko
2026-09-09 12:04 ` Baptiste Le Duc
2026-09-11 12:56 ` Oleksii Kurochko
2026-09-10 15:06 ` Jan Beulich
2026-08-27 15:21 ` [PATCH v2 22/39] xen/riscv: add guest memory read helper Oleksii Kurochko
2026-09-09 12:04 ` Baptiste Le Duc
2026-09-10 15:19 ` Jan Beulich
2026-09-11 13:06 ` Oleksii Kurochko
2026-09-11 13:41 ` Oleksii Kurochko
2026-09-11 13:47 ` Jan Beulich
2026-09-11 13:50 ` Oleksii Kurochko
2026-09-10 15:28 ` Jan Beulich
2026-09-11 13:57 ` Oleksii Kurochko
2026-09-11 14:00 ` Jan Beulich
2026-09-11 14:29 ` Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 23/39] xen/riscv: look up the exception table for any trap taken in Xen context Oleksii Kurochko
2026-09-10 15:31 ` Jan Beulich
2026-08-27 15:21 ` [PATCH v2 24/39] xen/riscv: add helpers for decoding a trapped load or store Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 25/39] xen/riscv: add guest load emulation for trapped MMIO accesses Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 26/39] xen/riscv: add guest store " Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 27/39] xen/riscv: introduce arch_move_irqs() Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 28/39] xen/riscv: handle the case when no vCPU migration is needed Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 29/39] xen/riscv: introduce aplic_reconfigure_target() Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 30/39] xen/riscv: prepare new IMSIC VS-file Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 31/39] xen/riscv: implement APLIC-hart sync barrier for vCPU migration Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 32/39] xen/riscv: remap interrupts to new IMSIC VS-file Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 33/39] xen/riscv: dump old interrupt file to memory Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 34/39] xen/riscv: restore register state in the new IMSIC VS-file Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 35/39] xen/riscv: add basic VGEIN management for AIA guests Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 36/39] xen/riscv: wake up a descheduled vCPU on a guest external interrupt Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 37/39] xen/riscv: map IMSIC interrupt file for vCPUs Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 38/39] xen/riscv: implement continue_new_vcpu() Oleksii Kurochko
2026-08-27 15:21 ` [PATCH v2 39/39] xen/riscv: introduce IMSIC h/w interrupt file attaching to vcpu Oleksii Kurochko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=66c96742-3ee2-4e76-948c-92ed6efaaac9@gmail.com \
--to=oleksii.kurochko@gmail.com \
--cc=Romain.Caritey@microchip.com \
--cc=alistair.francis@wdc.com \
--cc=andrew.cooper3@citrix.com \
--cc=anthony.perard@vates.tech \
--cc=baptiste.le-duc@vates.tech \
--cc=connojdavis@gmail.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=michal.orzel@amd.com \
--cc=roger@xenproject.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
--cc=zhangzheng@iscas.ac.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.