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 v3 32/39] xen/riscv: save and clear the old IMSIC VS-file on vCPU migration
Date: Fri, 6 Nov 2026 10:52:04 +0100 [thread overview]
Message-ID: <83bd8ba2-9053-44ac-a15e-fa6ea52429e2@gmail.com> (raw)
In-Reply-To: <1793721767.8631fc262581453bbf619ec5b2062170.1a1a22617dd000403d@vates.tech>
On 11/3/26 5:02 PM, Baptiste Le Duc wrote:
>> When a vCPU migrates to another pCPU, its guest interrupt file has to
>> move as well: the eidelivery, eithreshold and eip/eie state of the old
>> IMSIC VS-file has to be carried over to the newly acquired one.
>>
>> Once all interrupt producers have been retargeted to the new VS-file,
>> so that nothing can reach the old one anymore, read the state of the
>> old one and clear it at the same time. This has to be done on the pCPU
>> owning the old VS-file, as a guest interrupt file is only accessible
>> through vsiselect/vsireg with hstatus.VGEIN selecting it. After that
>> the old VS-file is no longer in use and its guest external interrupt
>> number can be released.
>>
>> The state is saved into struct imsic_mrif. Its eix[] array follows the
>> layout of a memory-resident interrupt file (MRIF) as defined by the AIA
>> specification: pairs of 64-bit interrupt-pending and interrupt-enable
>> doublewords, each pair covering 64 interrupt identities. eithreshold
>> and eidelivery aren't part of an MRIF and are stored next to it as they
>> belong to the interrupt file state too. Using the MRIF layout allows
>> the same structure to hold the interrupt file of a vCPU which doesn't
>> own a guest interrupt file, which is how the AIA specification
>> describes MRIFs being used by a hypervisor.
>
> I think it's worth mentioning that this MRIF structure could be reused
> for software interrupt files later.
I'm fine with making that explicit. I tried to cover it with "... a vCPU
which doesn't own a guest interrupt file ...", and adding "hardware"
should make it clearer: "... a vCPU which doesn't own a hardware guest
interrupt file ...". I think that covers your suggestion as well, so
I'll add it.
To be honest, I'm a bit unsure how much to say about software interrupt
files at this point: some earlier commit messages mentioned them, and I
was asked to drop that, as they are neither introduced nor used yet.
That's why I'd rather keep the wording implicit as above, but if you
still prefer them to be named explicitly, I can add a sentence.
At this point, I'm honestly getting a bit confused about how commit
messages are supposed to be written.
>> [ ... 172 lines skipped ... ]
>> +static void cf_check imsic_vsfile_local_read_clear(void *data)
>> +{
>> + unsigned int i;
>> + const struct imsic_vsfile_data *idata = data;
>> + struct imsic_mrif *mrif = idata->mrif;
>> + unsigned long new_hstatus, old_hstatus, old_vsiselect;
>> +
>> + /*
>> + * The file is reached by retargeting hstatus.VGEIN, and
>> + * imsic_vs_csr_swap() alters vsiselect. Both belong to the vCPU running
>> + * on this pCPU, so restore them before returning.
>> + */
> You're saving the registers here, not restoring them.
It was about CSR_HSTATUS, and CSR_VSISELECT which are stored and restored:
+ csr_write(CSR_HSTATUS, old_hstatus);
+ csr_write(CSR_VSISELECT, old_vsiselect);
> I'd use something
> like:
> /*
> * vsiselect/vsireg only reach the guest interrupt file selected by
> * hstatus.VGEIN, so point VGEIN at this file for the access.
> * hstatus and vsiselect hold the state of the vCPU running on this
> * pCPU; save them here and restore them before returning.
> */
I agree that this option is clearer.
Also, as the same switch to a guest interrupt file is done in
three more places (in the prev patches), I'll factor it out into
imsic_vsfile_select() and imsic_vsfile_deselect(), with your wording as
the comment on them.
>
>> + old_vsiselect = csr_read(CSR_VSISELECT);
>> + old_hstatus = csr_read(CSR_HSTATUS);
>> + new_hstatus = old_hstatus & ~HSTATUS_VGEIN;
>> + new_hstatus |= MASK_INSR(idata->hgei, HSTATUS_VGEIN);
>> + csr_write(CSR_HSTATUS, new_hstatus);
>> +
>> + /*
>> + * No atomic accessors are needed to store the values into the MRIF here,
>> + * as imsic_vsfile_read_clear() is always called with a pointer to a
>> + * temporary MRIF on the stack.
>> + */
> Nit: is this blank line really needed?
>
No real need. Lets drop it.
Thanks for review!
~ Oleksii
next prev parent reply other threads:[~2026-11-06 9:52 UTC|newest]
Thread overview: 152+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 16:18 [PATCH v3 00/39] [PATCH v2 00/39] [RISC-V] virtual interrupt controller (vAPLIC/vIMSIC) support Oleksii Kurochko
2026-09-30 16:18 ` [PATCH v3 01/39] xen/riscv: drop INSN_{16,32}BIT_MASK and report unknown instruction lengths Oleksii Kurochko
2026-10-05 10:01 ` Baptiste Le Duc
2026-10-08 14:35 ` Jan Beulich
2026-09-30 16:18 ` [PATCH v3 02/39] xen/riscv: set the domain type for 64-bit kernel images Oleksii Kurochko
2026-10-05 10:01 ` Baptiste Le Duc
2026-10-08 14:36 ` Jan Beulich
2026-09-30 16:18 ` [PATCH v3 03/39] xen/riscv: introduce csr_volatile_read64() Oleksii Kurochko
2026-10-05 10:01 ` Baptiste Le Duc
2026-10-09 13:29 ` Oleksii Kurochko
2026-10-08 14:46 ` Jan Beulich
2026-10-09 14:00 ` Oleksii Kurochko
2026-10-09 14:19 ` Jan Beulich
2026-09-30 16:18 ` [PATCH v3 04/39] xen/riscv: request a G-stage flush on vmenter when VMIDs are disabled Oleksii Kurochko
2026-10-05 10:01 ` Baptiste Le Duc
2026-10-08 14:53 ` Jan Beulich
2026-09-30 16:18 ` [PATCH v3 05/39] xen/riscv: use ~0 instead of ULONG_MAX to disable the VS-timer Oleksii Kurochko
2026-10-08 14:54 ` Jan Beulich
2026-09-30 16:18 ` [PATCH v3 06/39] xen/riscv: introduce device-agnostic MMIO emulation dispatch Oleksii Kurochko
2026-10-05 10:01 ` Baptiste Le Duc
2026-10-08 14:57 ` Jan Beulich
2026-10-12 13:51 ` Oleksii Kurochko
2026-10-12 13:50 ` Oleksii Kurochko
2026-10-12 15:28 ` Jan Beulich
2026-10-14 10:51 ` Oleksii Kurochko
2026-09-30 16:18 ` [PATCH v3 07/39] xen/riscv: introduce CPU_NONE Oleksii Kurochko
2026-10-05 14:53 ` Baptiste Le Duc
2026-10-12 14:27 ` Oleksii Kurochko
2026-10-12 15:40 ` Jan Beulich
2026-10-14 11:35 ` Oleksii Kurochko
2026-09-30 16:18 ` [PATCH v3 08/39] xen/riscv: implement virtual APLIC MMIO emulation Oleksii Kurochko
2026-10-05 14:53 ` Baptiste Le Duc
2026-10-13 16:06 ` Oleksii Kurochko
2026-10-14 6:16 ` Jan Beulich
2026-10-14 11:45 ` Oleksii Kurochko
2026-10-14 13:52 ` Jan Beulich
2026-10-15 14:57 ` Oleksii Kurochko
2026-09-30 16:18 ` [PATCH v3 09/39] xen/riscv: build the target hart index via aplic_hart_index() Oleksii Kurochko
2026-10-06 9:02 ` Baptiste Le Duc
2026-10-14 13:42 ` Oleksii Kurochko
2026-10-14 14:03 ` Jan Beulich
2026-10-15 8:32 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 10/39] xen/riscv: add helper to check APLIC MSI mode Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 11/39] xen/riscv: implement vCPU context switching Oleksii Kurochko
2026-10-06 16:50 ` Baptiste Le Duc
2026-10-07 8:04 ` Jan Beulich
2026-10-07 8:27 ` Baptiste Le Duc
2026-10-14 14:05 ` Oleksii Kurochko
2026-11-10 15:52 ` Jan Beulich
2026-11-12 11:00 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 12/39] xen/riscv: save and restore vsiselect on vCPU context switch Oleksii Kurochko
2026-10-07 8:53 ` Baptiste Le Duc
2026-10-14 14:53 ` Oleksii Kurochko
2026-11-10 16:46 ` Jan Beulich
2026-09-30 16:23 ` [PATCH v3 13/39] xen/riscv: introduce vintc_ctxt_switch_{from,to}() Oleksii Kurochko
2026-10-07 9:11 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 14/39] xen/riscv: add IMSIC vCPU context switch handlers Oleksii Kurochko
2026-10-08 9:54 ` Baptiste Le Duc
2026-10-14 15:12 ` Oleksii Kurochko
2026-11-10 16:49 ` Jan Beulich
2026-09-30 16:23 ` [PATCH v3 15/39] xen/riscv: extend exception tables with type and data fields Oleksii Kurochko
2026-10-20 14:59 ` Baptiste Le Duc
2026-11-04 11:00 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 16/39] xen/riscv: decouple INSN_PSEUDO_VS_* from the hypervisor's XLEN Oleksii Kurochko
2026-10-20 14:59 ` Baptiste Le Duc
2026-11-10 16:52 ` Jan Beulich
2026-09-30 16:23 ` [PATCH v3 17/39] xen/riscv: add guest page fault handling stub Oleksii Kurochko
2026-10-20 14:59 ` Baptiste Le Duc
2026-11-04 11:33 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 18/39] xen/riscv: implement trap redirection to a guest Oleksii Kurochko
2026-10-20 15:22 ` Baptiste Le Duc
[not found] ` <179250973602.489973.14893581320042795275.b4-review@b4>
2026-10-20 15:25 ` Baptiste Le Duc
2026-11-04 11:41 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 19/39] xen/riscv: detect Shtvala Oleksii Kurochko
2026-10-20 15:26 ` Baptiste Le Duc
2026-11-10 16:53 ` Jan Beulich
2026-09-30 16:23 ` [PATCH v3 20/39] xen/riscv: resolve the faulting guest physical address Oleksii Kurochko
2026-10-21 11:45 ` Baptiste Le Duc
2026-11-04 11:49 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 21/39] xen/riscv: add guest memory read helper Oleksii Kurochko
2026-10-21 14:56 ` Baptiste Le Duc
2026-11-04 12:25 ` Oleksii Kurochko
2026-10-21 15:11 ` Baptiste Le Duc
2026-11-04 12:39 ` Oleksii Kurochko
2026-11-04 13:28 ` Jan Beulich
2026-11-04 15:25 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 22/39] xen/riscv: look up the exception table for any trap taken in Xen context Oleksii Kurochko
2026-10-21 15:28 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 23/39] xen/riscv: add helpers for decoding a trapped load or store Oleksii Kurochko
2026-10-22 10:02 ` Baptiste Le Duc
2026-11-04 16:38 ` Oleksii Kurochko
2026-11-05 8:17 ` Jan Beulich
2026-11-05 8:48 ` Oleksii Kurochko
2026-11-05 9:35 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 24/39] xen/riscv: add guest load emulation for trapped MMIO accesses Oleksii Kurochko
2026-10-15 14:59 ` Oleksii Kurochko
2026-10-22 12:13 ` Baptiste Le Duc
2026-11-04 16:44 ` Oleksii Kurochko
2026-10-22 12:30 ` Baptiste Le Duc
2026-11-04 16:46 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 25/39] xen/riscv: add guest store " Oleksii Kurochko
2026-10-22 12:37 ` Baptiste Le Duc
2026-11-04 16:51 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 26/39] xen/riscv: introduce arch_move_irqs() Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 27/39] xen/riscv: handle the case when no vCPU migration is needed Oleksii Kurochko
2026-10-22 12:39 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 28/39] xen/riscv: introduce vaplic_reconfigure_target() Oleksii Kurochko
2026-10-22 13:38 ` Baptiste Le Duc
2026-11-05 11:43 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 29/39] xen/riscv: prepare new IMSIC VS-file Oleksii Kurochko
2026-10-23 12:55 ` Baptiste Le Duc
2026-11-05 12:49 ` Oleksii Kurochko
2026-11-05 15:27 ` Baptiste Le Duc
2026-11-05 16:41 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 30/39] xen/riscv: implement APLIC-IMSIC-hart sync barrier for vCPU migration Oleksii Kurochko
2026-10-06 14:25 ` Oleksii Kurochko
2026-10-23 13:51 ` Baptiste Le Duc
2026-11-05 14:21 ` Oleksii Kurochko
2026-11-05 15:32 ` Baptiste Le Duc
2026-11-05 15:49 ` Oleksii Kurochko
2026-11-05 15:59 ` Baptiste Le Duc
2026-11-05 16:26 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 31/39] xen/riscv: remap interrupts to new IMSIC VS-file Oleksii Kurochko
2026-10-26 14:06 ` Baptiste Le Duc
2026-11-05 16:57 ` Oleksii Kurochko
2026-11-06 13:26 ` Baptiste Le Duc
2026-11-09 10:19 ` Oleksii Kurochko
2026-11-09 15:01 ` Oleksii Kurochko
2026-11-09 15:22 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 32/39] xen/riscv: save and clear the old IMSIC VS-file on vCPU migration Oleksii Kurochko
2026-11-03 16:02 ` Baptiste Le Duc
2026-11-06 9:52 ` Oleksii Kurochko [this message]
2026-11-06 13:31 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 33/39] xen/riscv: restore register state in the new IMSIC VS-file Oleksii Kurochko
2026-11-03 16:45 ` Baptiste Le Duc
2026-11-06 10:04 ` Oleksii Kurochko
2026-11-06 13:33 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 34/39] xen/riscv: add basic VGEIN management for AIA guests Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 35/39] xen/riscv: wake up a descheduled vCPU on a guest external interrupt Oleksii Kurochko
2026-11-04 10:37 ` Baptiste Le Duc
2026-11-06 10:58 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 36/39] xen/riscv: map IMSIC interrupt file for vCPUs Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 37/39] xen/riscv: implement continue_new_vcpu() Oleksii Kurochko
2026-11-04 14:00 ` Baptiste Le Duc
2026-11-06 11:31 ` Oleksii Kurochko
2026-09-30 16:23 ` [PATCH v3 38/39] xen/riscv: set the guest's XLEN explicitly in hstatus.VSXL Oleksii Kurochko
2026-11-04 14:37 ` Baptiste Le Duc
2026-11-06 11:59 ` Oleksii Kurochko
2026-11-06 13:43 ` Baptiste Le Duc
2026-09-30 16:23 ` [PATCH v3 39/39] xen/riscv: introduce IMSIC h/w interrupt file attaching to vcpu Oleksii Kurochko
2026-11-04 15:06 ` Baptiste Le Duc
2026-11-06 12:31 ` 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=83bd8ba2-9053-44ac-a15e-fa6ea52429e2@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.