All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleksii Kurochko <oleksii.kurochko@gmail.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: "Romain Caritey" <Romain.Caritey@microchip.com>,
	"Baptiste Le Duc" <baptiste.le-duc@vates.tech>,
	"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>,
	"Julien Grall" <julien@xen.org>,
	"Roger Pau Monné" <roger@xenproject.org>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v1 16/17] xen/riscv: add guest load emulation for trapped MMIO accesses
Date: Wed, 19 Aug 2026 13:00:29 +0200	[thread overview]
Message-ID: <abe3e920-7cbc-4714-9fb1-0553c2f539e0@gmail.com> (raw)
In-Reply-To: <20a4599a-f14e-4c7f-a765-52c1ab667516@suse.com>



On 8/13/26 9:28 AM, Jan Beulich wrote:
> On 13.08.2026 09:15, Jan Beulich wrote:
>> On 29.07.2026 15:40, Oleksii Kurochko wrote:
>>>   static int emulate_load(unsigned long fault_addr, unsigned long htinst)
>>>   {
>>> -    return -EOPNOTSUPP;
>>> +    struct cpu_user_regs *regs = vcpu_guest_cpu_user_regs(current);
>>> +    mmio_info_t info = { .is_write = false };
>>> +    unsigned long insn;
>>> +    unsigned int shift = 0, len, insn_len;
>>> +    bool is_unsigned = false;
>>> +    int rc;
>>> +
>>> +    if ( decode_trapped_insn(htinst, &insn, &insn_len) )
>>> +        return 0;
>>> +
>>> +    /* Decode length of MMIO and whether it is a sign- or zero-extending load */
>>> +    if ( (insn & INSN_MASK_LB) == INSN_MATCH_LB )
>>> +        len = 1;
>>> +    else if ( (insn & INSN_MASK_LBU) == INSN_MATCH_LBU )
>>> +    {
>>> +        len = 1;
>>> +        is_unsigned = true;
>>> +    }
>>> +    else if ( (insn & INSN_MASK_LH) == INSN_MATCH_LH )
>>> +        len = 2;
>>> +    else if ( (insn & INSN_MASK_LHU) == INSN_MATCH_LHU )
>>> +    {
>>> +        len = 2;
>>> +        is_unsigned = true;
>>> +    }
>>> +    else if ( (insn & INSN_MASK_LW) == INSN_MATCH_LW )
>>> +        len = 4;
>>
>> Already up to here this demonstrates a weakness of the INSN_MASK_*
>> set of #define-s (which I similarly observe in binutils, and I expect it
>> all has the same questionable origin). All INSN_MASK_L* and INSN_MASK_FL*
>> (also INSN_MASK_S* and INSN_MASK_FS*) are identical, allowing for a nice
>> switch() to be used here in principle. That said, with access width
>> nicely encoded in FUNCT3, it's not even clear whether a switch() would
>> end up being needed / efficient.
>>
>> Otoh none of these masks cover the pseudoinsns that htinst may supply.
>>
>> Further, what about A-extension insns? Some (if not all) of them can
>> plausibly be used on MMIO, I think.
> 
> Because of the further additions that are going to be needed, may I also
> suggest to consider putting emulation code in its own file (emulate.c
> perhaps), rather than directly in traps.c?

Good point. It really makes sense to move emulation now to emulate.c.

Thanks.

~ Oleksii


  reply	other threads:[~2026-08-19 11:01 UTC|newest]

Thread overview: 129+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-20 16:01 [PATCH v1 00/17] [RISC-V] virtual interrupt controller (vAPLIC/vIMSIC) support Oleksii Kurochko
2026-07-20 16:01 ` [PATCH v1 01/17] xen/riscv: manage IRQ_DISABLED flag in APLIC irq enable/disable callbacks Oleksii Kurochko
2026-07-27 15:19   ` Jan Beulich
2026-08-10 13:32   ` Baptiste Le Duc
2026-07-20 16:02 ` [PATCH v1 02/17] xen/riscv: add basic VGEIN management for AIA guests Oleksii Kurochko
2026-07-27 15:41   ` Jan Beulich
2026-07-29 14:55     ` Oleksii Kurochko
2026-07-30  7:42       ` Jan Beulich
2026-07-30 15:46         ` Oleksii Kurochko
2026-07-30 16:03           ` Jan Beulich
2026-07-31 14:59             ` Oleksii Kurochko
2026-08-03 10:37               ` Jan Beulich
2026-08-10 13:32   ` Baptiste Le Duc
2026-08-10 15:04     ` Oleksii Kurochko
2026-08-11  8:13       ` Baptiste Le Duc
2026-07-20 16:02 ` [PATCH v1 03/17] xen/riscv: add missing APLIC register offsets, masks to asm/aplic.h Oleksii Kurochko
2026-07-28 12:02   ` Jan Beulich
2026-07-29 15:26     ` Oleksii Kurochko
2026-07-30  7:53       ` Jan Beulich
2026-08-10 13:45   ` Baptiste Le Duc
2026-08-10 14:45     ` Oleksii Kurochko
2026-08-10 14:51       ` Baptiste Le Duc
2026-07-20 16:02 ` [PATCH v1 04/17] xen/riscv: introduce device-agnostic MMIO emulation dispatch Oleksii Kurochko
2026-07-28 12:23   ` Jan Beulich
2026-07-30 16:03     ` Oleksii Kurochko
2026-07-30 16:09       ` Jan Beulich
2026-07-31 15:24         ` Oleksii Kurochko
2026-08-03 10:41           ` Jan Beulich
2026-08-04 10:26             ` Oleksii Kurochko
2026-08-10 14:49   ` Baptiste Le Duc
2026-08-10 15:36     ` Oleksii Kurochko
2026-08-11  8:17       ` Baptiste Le Duc
2026-08-11 11:49         ` Oleksii Kurochko
2026-08-12  7:21           ` Jan Beulich
2026-08-12  7:47             ` Oleksii Kurochko
2026-07-20 16:02 ` [PATCH v1 05/17] xen/riscv: implement virtual APLIC MMIO emulation Oleksii Kurochko
2026-08-06 14:28   ` Jan Beulich
2026-08-07 16:08     ` Oleksii Kurochko
2026-08-11  9:21       ` Baptiste Le Duc
2026-08-11 14:36         ` Oleksii Kurochko
2026-08-11 15:29           ` Baptiste Le Duc
2026-08-11 16:24             ` Oleksii Kurochko
2026-08-12  9:47               ` Baptiste Le Duc
2026-08-12 10:05                 ` Oleksii Kurochko
2026-08-12  9:10       ` Jan Beulich
2026-08-12 11:51         ` Oleksii Kurochko
2026-08-12 11:56           ` Jan Beulich
2026-08-12 14:03   ` Baptiste Le Duc
2026-08-12 15:59     ` Oleksii Kurochko
2026-07-20 16:02 ` [PATCH v1 06/17] xen/riscv: map IMSIC interrupt file for vCPUs Oleksii Kurochko
2026-08-06 14:48   ` Jan Beulich
2026-08-10  8:50     ` Oleksii Kurochko
2026-08-12  9:16       ` Jan Beulich
2026-08-13  9:06   ` Baptiste Le Duc
2026-08-13  9:42     ` Oleksii Kurochko
2026-08-13  9:49       ` Baptiste Le Duc
2026-08-13  9:56         ` Oleksii Kurochko
2026-07-20 16:02 ` [PATCH v1 07/17] xen/riscv: introduce vCPU AIA initialization Oleksii Kurochko
2026-08-06 14:56   ` Jan Beulich
2026-08-10 10:01     ` Oleksii Kurochko
2026-08-13  9:24   ` Baptiste Le Duc
2026-08-13  9:31     ` Oleksii Kurochko
2026-08-13  9:47     ` Jan Beulich
2026-08-13 11:35       ` Oleksii Kurochko
2026-07-20 16:02 ` [PATCH v1 08/17] xen/riscv: add IMSIC state save/restore Oleksii Kurochko
2026-08-12 13:57   ` Jan Beulich
2026-08-17  9:23     ` Oleksii Kurochko
2026-08-13  9:30   ` Baptiste Le Duc
2026-08-13  9:34     ` Oleksii Kurochko
2026-08-13  9:51       ` Jan Beulich
2026-08-13 10:22         ` Oleksii Kurochko
2026-08-13 10:44           ` Jan Beulich
2026-08-13 10:56             ` Oleksii Kurochko
2026-08-13 11:04               ` Jan Beulich
2026-07-20 16:02 ` [PATCH v1 09/17] xen/riscv: add helper to check APLIC MSI mode Oleksii Kurochko
2026-08-12 14:08   ` Jan Beulich
2026-08-13  9:34   ` Baptiste Le Duc
2026-07-20 16:02 ` [PATCH v1 10/17] xen/riscv: introduce vintc_state_{save,restore}() Oleksii Kurochko
2026-08-12 14:13   ` Jan Beulich
2026-08-13  9:42   ` Baptiste Le Duc
2026-08-17  8:31     ` Oleksii Kurochko
2026-08-18  8:28       ` Baptiste Le Duc
2026-08-18  8:31         ` Jan Beulich
2026-08-18  8:40           ` Baptiste Le Duc
2026-07-20 16:02 ` [PATCH v1 11/17] xen/riscv: add vAPLIC state save/restore hooks Oleksii Kurochko
2026-08-12 14:19   ` Jan Beulich
2026-08-17  8:43     ` Oleksii Kurochko
2026-07-20 16:02 ` [PATCH v1 12/17] xen/riscv: extend exception tables with type and data fields Oleksii Kurochko
2026-08-12 14:37   ` Jan Beulich
2026-08-17 11:33     ` Oleksii Kurochko
2026-08-17 11:39       ` Oleksii Kurochko
2026-08-18  7:58         ` Jan Beulich
2026-08-18  8:17           ` Oleksii Kurochko
2026-08-18  7:56       ` Jan Beulich
2026-08-18  9:14         ` Oleksii Kurochko
2026-08-18  9:26           ` Jan Beulich
2026-08-18  9:40             ` Oleksii Kurochko
2026-08-18 10:30               ` Jan Beulich
2026-07-20 16:02 ` [PATCH v1 13/17] xen/riscv: add unprivileged guest memory read helper Oleksii Kurochko
2026-08-12 15:30   ` Jan Beulich
2026-08-17 15:36     ` Oleksii Kurochko
2026-08-18  8:17       ` Jan Beulich
2026-08-18 10:27         ` Oleksii Kurochko
2026-08-18 10:43           ` Jan Beulich
2026-08-18 13:38             ` Oleksii Kurochko
2026-08-18 14:16               ` Jan Beulich
2026-07-20 16:02 ` [PATCH v1 14/17] xen/riscv: add guest page fault handling stub Oleksii Kurochko
2026-08-12 15:48   ` Jan Beulich
2026-08-17 16:10     ` Oleksii Kurochko
2026-08-18  8:29       ` Jan Beulich
2026-08-18 16:04         ` Oleksii Kurochko
2026-08-19  8:59           ` Oleksii Kurochko
2026-08-19  9:52             ` Jan Beulich
2026-08-19  9:58               ` Oleksii Kurochko
2026-07-20 16:02 ` [PATCH v1 15/17] xen/riscv: implement trap redirection to a guest Oleksii Kurochko
2026-08-12 16:03   ` Jan Beulich
2026-08-18  7:47     ` Oleksii Kurochko
2026-08-18  8:35       ` Jan Beulich
2026-07-27 15:21 ` [PATCH v1 00/17] [RISC-V] virtual interrupt controller (vAPLIC/vIMSIC) support Jan Beulich
2026-07-29 13:41   ` Oleksii Kurochko
2026-07-29 13:40 ` [PATCH v1 16/17] xen/riscv: add guest load emulation for trapped MMIO accesses Oleksii Kurochko
2026-08-13  7:15   ` Jan Beulich
2026-08-13  7:28     ` Jan Beulich
2026-08-19 11:00       ` Oleksii Kurochko [this message]
2026-08-19 16:06     ` Oleksii Kurochko
2026-08-20  7:34       ` Jan Beulich
2026-08-20 13:38         ` Oleksii Kurochko
2026-08-20 14:08           ` Jan Beulich
2026-07-29 13:40 ` [PATCH v1 17/17] xen/riscv: add guest store " 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=abe3e920-7cbc-4714-9fb1-0553c2f539e0@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 \
    /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.