[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] struct vcpu_guest_core_reg stable ABI?

Hi Andrew & Jan,

On 5/16/19 8:58 AM, Jan Beulich wrote:
On 15.05.19 at 22:12, <andrew.cooper3@xxxxxxxxxx> wrote:
On 15/05/2019 20:58, Julien Grall wrote:
Hi all,

It looks like the structures vcpu_guest_core_regs and
vcpu_guest_context does not correctly reflect the AArch64 state. For
instance, all Arm64 system registers (e.g sctlr, cpsr, spsr_el1)
should be 64-bit wide not 32-bit wide.

On ARMv8.0, some of the registers have only the low 32-bit defined,
the rest is RES0. RES0 only means they are reserved for future use, it
does not mean they can be ignored. Newer revision (such as
ARMv8.0-SSBS) actually began to define bit in the top 32-bit.

This means that the structures vcpu_guest_core_regs and
vcpu_guest_context would not be able to store the top 32-bit and
therefore misrepresenting the hardware.

 From my understanding, vcpu_guest_context is defined between the tools
and Xen. So it would be possible to modify it without caring on
backward compatibly.

Howerver, struct vcpu_guest_core_reg seems to be outside of the
#ifdef. So I assume it is part of the stable ABI. Am I correct?

Do you have any suggestion how this could safely be extended?

Stuff like this should never have been in the public API to begin with.
x86 has some nasty issues which I have yet to find a good-enough way to fix.

For ARM, and future architectures, I'd use the fact that there are no
non-tools interfaces which use this structure to allow yourself the
wiggleroom to declare history a mistake, and fix it by making it tools-only.

I'm unconvinced of the "declare history a mistake" part, but I agree
with the suggestion of simply moving the structure declaration down
into the guarded area. It simply was a mistake to not put it there in
the first place.

Thank you both of you for the feedback. I will prepare a patch to make struct vcpu_guest_core_regs tools only.


Julien Grall

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.