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

Re: [PATCH v2 03/39] xen/riscv: set the guest's XLEN explicitly in hstatus.VSXL





On 9/2/26 5:17 PM, Oleksii Kurochko wrote:


On 9/2/26 4:31 PM, Jan Beulich wrote:
On 02.09.2026 15:29, Oleksii Kurochko wrote:
On 9/2/26 3:07 PM, Jan Beulich wrote:
On 02.09.2026 13:42, Oleksii Kurochko wrote:
It will also affect then common code as vcpu_csr_init() could be then
called before domain type is set:

+++ b/xen/common/device-tree/dom0less-build.c
@@ -812,17 +812,18 @@ static int __init construct_domU(struct
kernel_info *kinfo,
        else if ( rc == 0 && !strcmp(dom0less_enhanced, "no- xenstore") )
            kinfo->dom0less_feature = DOM0LESS_ENHANCED_NO_XS;

-    if ( vcpu_create(d, 0) == NULL )
-        return -ENOMEM;
-
        d->max_pages = ((paddr_t)mem * SZ_1K) >> PAGE_SHIFT;

        rc = kernel_probe(kinfo, node);
        if ( rc < 0 )
            return rc;

+    /* The domain type needs to be known before the first vCPU is
created. */
        set_domain_type(d, kinfo);

+    if ( vcpu_create(d, 0) == NULL )
+        return -ENOMEM;

I don't understand the need for this, likely because I don't see why
domain_vsxl() would need calling from underneath vcpu_create().

The call trace will be the following:
    vcpu_create() -> arch_vcpu_create() -> vcpu_csr_init() ->
domain_vsxldomain_vsxl()

      unsigned int vsxl = domain_vsxl(v->domain);

      ...

      vcpu_guest_cpu_user_regs(v)->hstatus =
          HSTATUS_SPV | HSTATUS_SPVP | MASK_INSR(vsxl, HSTATUS_VSXL);

Without moving vcpu_create(d, 0) after set_domain_type(), domain_vsxl()
will return something wrong.

Question is - do you need to set ->hstatus this early?

Good point. I think that there is no really such need. It could be set (at least, VSXL) just before jumping to new vCPU where we know domain type for sure.

I planned to set VSXL bits here: https://lore.kernel.org/xen-devel/cover.1787838835.git.oleksii.kurochko@xxxxxxxxx/T/#m4144ea90815b48f2d281a2267cd28f50bd4cd54c

But it seems that I can't do that there as considering that platform can do VSXLEN == HSXLEN == 64 but someone will try do run
vCPU in 32bit mode we can't just crash domain in continue_new_vcpu().

Then still to set it in arch_vcpu_create() will be better (or in the construct_domain() if we want to avoid to change dom0less common code). At this stage it is easier to reject to create such vCPU which violates platform implementation.

~ Oleksii



 


Rackspace

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