All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cornelia Huck <cohuck@redhat.com>
To: eric.auger@redhat.com, qemu-arm@nongnu.org, qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>
Subject: Re: [PATCH RFC] arm/kvm: report registers we failed to set
Date: Wed, 13 Aug 2025 12:01:54 +0200	[thread overview]
Message-ID: <875xerfskt.fsf@redhat.com> (raw)
In-Reply-To: <88812eea-08e3-48f5-b2f8-75ab0fff573b@redhat.com>

On Tue, Aug 12 2025, Eric Auger <eric.auger@redhat.com> wrote:

> Hi Connie,
>
> On 7/21/25 6:19 PM, Cornelia Huck wrote:
>> If we fail migration because of a mismatch of some registers between
>> source and destination, the error message is not very informative:
>>
>> qemu-system-aarch64: error while loading state for instance 0x0 ofdevice 'cpu'
>> qemu-system-aarch64: Failed to put registers after init: Invalid argument
>>
>> At least try to give the user a hint which registers had a problem,
>> even if they cannot really do anything about it right now.
>>
>> Sample output:
>>
>> Could not set register op0:3 op1:0 crn:0 crm:0 op2:0 to c00fac31 (is 413fd0c1)
>>
>> We could be even more helpful once we support writable ID registers,
>> at which point the user might actually be able to configure something
>> that is migratable.
>>
>> Suggested-by: Eric Auger <eric.auger@redhat.com>
>> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
>> ---
>>
>> Notes:
>> - This currently prints the list of failing registers for every call to
>>   write_list_to_kvmstate(), in particular for every cpu -- we might want
>>   to reduce that.
>> - If the macros aren't too ugly (or we manage to improve them), there
>>   might be other places where they could be useful.
>>
>> ---
>>  target/arm/kvm.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 53 insertions(+)
>>
>> diff --git a/target/arm/kvm.c b/target/arm/kvm.c
>> index 667234485547..ac6502e0c78f 100644
>> --- a/target/arm/kvm.c
>> +++ b/target/arm/kvm.c
>> @@ -900,6 +900,24 @@ bool write_kvmstate_to_list(ARMCPU *cpu)
>>      return ok;
>>  }
>>  
>> +/* pretty-print a KVM register */
>> +#define CP_REG_ARM64_SYSREG_OP(_reg, _op)                       \
>> +    ((uint8_t)((_reg & CP_REG_ARM64_SYSREG_ ## _op ## _MASK) >> \
>> +               CP_REG_ARM64_SYSREG_ ## _op ## _SHIFT))
>> +
>> +#define PRI_CP_REG_ARM64_SYSREG(_reg)                    \
>> +    ({                                                   \
>> +        char _out[32];                                   \
>> +        snprintf(_out, sizeof(_out),                     \
>> +                 "op0:%d op1:%d crn:%d crm:%d op2:%d",   \
>> +                 CP_REG_ARM64_SYSREG_OP(_reg, OP0),      \
>> +                 CP_REG_ARM64_SYSREG_OP(_reg, OP1),      \
>> +                 CP_REG_ARM64_SYSREG_OP(_reg, CRN),      \
>> +                 CP_REG_ARM64_SYSREG_OP(_reg, CRM),      \
>> +                 CP_REG_ARM64_SYSREG_OP(_reg, OP2));     \
>> +        _out;                                            \
>> +    })
>> +
> I am afraid this is too simplistic.
> Refering to linux/Documentation/virt/kvm/api.rst 4.68 KVM_SET_ONE_REG
> ARM registers section
> there are different groups of registers (upper 16b) and not all regs are
> further identified by op0-2, crn, crm.
> I think it would be valuable to output the group type and then the
> formatted lower 16b, depending on the group type.
>
> For instance 64b ARM FW pseudo reg is formatted as
> 0x6030 0000 0014 <regno:16>
>
> a diff on reg 0 results in
> qemu-system-aarch64: Could not set register op0:0 op1:0 crn:0 crm:0
> op2:0 to 10003 (is 10001)
> qemu-system-aarch64: error while loading state for instance 0x0 of
> device 'cpu'
> qemu-system-aarch64: Could not set register op0:0 op1:0 crn:0 crm:0
> op2:0 to 10003 (is 10001)
> qemu-system-aarch64: Failed to put registers after init: Invalid argument

You mean smth like

Could not set FW pseudo register <regno> to <val> (is <val>)
Could not set ID register <decoding> to <val> (is <val>)

?



  reply	other threads:[~2025-08-13 10:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-21 16:19 [PATCH RFC] arm/kvm: report registers we failed to set Cornelia Huck
2025-07-22 16:11 ` Sebastian Ott
2025-07-23  9:59   ` Cornelia Huck
2025-08-12 18:11 ` Eric Auger
2025-08-13 10:01   ` Cornelia Huck [this message]
2025-08-13 12:43     ` Eric Auger

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=875xerfskt.fsf@redhat.com \
    --to=cohuck@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.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.