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

Re: [PATCH 2/2] x86/xen: Allow per-domain usage of hardware virtualized APIC


  • To: Jane Malalane <Jane.Malalane@xxxxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Wed, 2 Feb 2022 17:21:22 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=oX2XUgQZLdvJTKeETKdvaH3bGnwRKUNefaD29Rt6NWc=; b=CJKwiQTPScSfNmi9fA5E9VckzONDKfK2CTv9f4k8dZYXz+uQGGs61cCfXzTnt6FvrgD1ZTNbEAK6cjFlkJK8QTH7ABWaAtFNnVzh+R/GxpCgLdUV614g5ipQio4y6iNG6b4oPy39YtXZ8eFaa8ajuhiZS5+ayrPC224BLeBKwvO8fuLZsAxtqAf9i4lPRjcIcn1O7rKjP+OTu20MowTc6A4LJMrktqHV9OshdxfXxQEzTaGUXaGfiiTqzCBb8TarnD32lqZYwC5VSeqtKHXs57iEZG9jwacAyEJnIpmWLcz4/bKBRtcgVVKSX+Jvlzkt36bxtFrtWtC+xKhx8dAYUA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U8PHBfuGW3FT7deHRf+chzbWa/6TDM0DH1mNPyCC/JEoeuwOXFnlCT+XHsomQ8+cROcPKXFYmM12q91COhuh+zARcF/gl029IToOAxMiB//1lYAG+VmOSIhVxpvahOar1n5bf/Y7JHnj4m6Fu5ewBqXDgEZQXBhUPTwOq/XTWVangmPsUfR44ZlwZsTq9UwAqbrRqE7sLx/ad/vyxKK/43lWZimqcdIwAT36HUfTrsgpz0yJqh9gINeCKIGgcCr0Y24mkJTu1TTflKerF6hdCmjEBCz2ZuGjKAyvhmsdYOI4U83b73Y8sTiyYrsTab51Nz8BFe8bhSFTBFtA+MIc0A==
  • Authentication-results: esa3.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Anthony Perard <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Andrew Cooper <Andrew.Cooper3@xxxxxxxxxx>, George Dunlap <George.Dunlap@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Christian Lindig <christian.lindig@xxxxxxxxxx>, David Scott <dave@xxxxxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Wed, 02 Feb 2022 16:22:03 +0000
  • Ironport-data: A9a23:xTDdAaMKnnXClLTvrR0dkMFynXyQoLVcMsEvi/4bfWQNrUpxhDIEn GQaC22Ha6neZWT9f4sjPIvipx4GusDVmII1Twto+SlhQUwRpJueD7x1DKtR0wB+jCHnZBg6h ynLQoCYdKjYdpJYz/uUGuCJQUNUjMlkfZKhTr6UUsxNbVU8En1500o5w7RRbrNA2rBVPSvc4 bsenOWHULOV82Yc3rU8sv/rRLtH5ZweiRtA1rAMTakjUGz2zhH5OKk3N6CpR0YUd6EPdgKMq 0Qv+5nilo/R109F5tpICd8XeGVSKlLZFVDmZna7x8FOK/WNz8A/+v9TCRYSVatYoyiZkd8t8 /4XjJW5TV4ZbpfHn/wwCDANRkmSPYUekFPGCX22sMjVxEzaaXr8hf5pCSnaP6VBpLwxWzsXs 6VFdnZdNXhvhMrvqF6/YvNrick5atHiIasUu216zCGfBvEjKXzGa/uRvoQGh2th7ixINfnMb OcWZHlGUEyDYURMP1o+Eb07vPj90xETdBUH8QnI9MLb+VP71xdt2bLgNN7UfN2iRshPmEuc4 GXc8AzRAAweNdGZ4SqI9DSrnOCntR38XIUeBbip7MlAiVeYxnEQIBAOXF79qv684mayUsxSA 1YZ8S0vqe417kPDZsb5dw21pjiDpBF0c8pdFag25R+AzoLQ4h2FHS4UQzhZctskucQqAzsw2 TehndnkGDhuu729Um+G+/GfqjbaESoaN2gZfgcfUBAIpdLkpekOYgnnF4g5VvTv15usRG+2k 2viQDUCa6s7kN4F2PmA1gr+ijuo/6iZdAUy/iiMdzfwhu9mX7KNa4ut4FndyP9PKoeFU1WM1 EQ5d9iiAPMmVs/UynHUKAkZNPTwvqvebmWA6bJ6N8R5r1yQF2ifkZe8Cd2UDGNgKY46dDDge yc/UisBtcYIbBNGgUKaCr9d6vjGL4C8RLwJtdiON7Kih6SdkyfcpElTiba4hTyFraTVufhX1 W2nWcitF20GLq9s0SC7QewQuZdymHxlmj+KFMGmlkr3uVZ7WJJyYexdWGZik8hjtP/UyOkr2 4o32zS2J+V3D7SlP3i/HX87JlEWN3krba0aWOQMHtNv1jFOQTl7Y9eImOtJU9U8w8x9y7mUl lngBB4w4Aev1BXvdFTRAlg+OeyHYHqKhS9hVcDaFQz2iyFLjEfGxPp3SqbbipF8pbE6kK4pE 6JYEyhCa9wWIgn6F/0mRcCVhKRpdQixhBLIOCygYTMleIVnSRCP8djhFjYDPgFTZsZuncdh8 bCmyC3BRp8PG1ZrAMrMMar9xFKtp3kN3ul1WhKQcNVUfUzt9qlsKjDw0aBrc51dd02by2vIz RuSDDcZufLJ/90//u7WiP3WtIyuCeZ/QBZXRjGJ8basOCDG1WO/2oscAv2QdDXQWTqsqqWvb OlY1d/mN/gDkAoYuoZwCe8zn6k/+8Hut/lRyQE9RCfHaFGiC7VBJHia3JYQ6v0Rl+EB4QbvA xCB4NhXP7mNKfjJKl9JKVp3dPmH2NEVhiLWsaY/LnLl6XIl57GAS0hTYUWB0XQPMLtvPYo56 u49o8pKuRengx8nP9va3CBZ82OAci4JX6k978xIBYbqjkwgy01YYIyaASjzucndZ9JJO0gsA zmVmKud2OgMmhucKyI+RSrXwO5QpZUSoxQbnlYNKmOAlsfBmvJqjgZa9i46T1gNwxhKuw6p1 rOH66GhyX2ywgpV
  • Ironport-hdrordr: A9a23:C8Zfeqyvt/HOkozXvp5nKrPxtOskLtp133Aq2lEZdPULSKOlfp GV8MjziyWYtN9wYhAdcdDpAtjmfZr5z+8O3WB3B8beYOCGghrSEGgG1+XfKlLbak/DH4JmpM Jdmu1FeaHN5DtB/LfHCWuDYq8dKbC8mcjC74eurEuFDzsaE52Ihz0JdDpzeXcGIjWua6BJcK Z1saF81kWdkDksH4+GL0hAe9KGi8zAlZrgbxJDLxk76DOWhTftzLLhCRCX0joXTjsKmN4ZgC X4uj28wp/mn+Cwyxfa2WOWx5NKmOH5wt8GIMCXkMAaJhjllw7tToV8XL+puiwzvYiUmRwXue iJhy1lE9V46nvXcG3wiRzx2zP42DJr0HPmwU/wuwqUneXJABYBT+ZRj4NQdRXUr2A6ustn7a 5N12WF87JKEBLphk3Glpb1fiAvsnDxjWspkOYVgXAae5AZcqVtoYsW+14QOIscHRj99JssHI BVfY7hDc5tABOnhk3izypSKITGZAVwIv7GeDlPhiWt6UkWoJgjpHFogfD2nR87heUAotd/lq D5259T5cJzp/ktHNZA7dc6MLuK41P2MGDx2UKpUB3a/fI8SjrwQ6Ce2sRB2AjtQu1O8KcP
  • Ironport-sdr: ANsPVcZJiRCn47DXYyUQQ1W6NMHmhKTb7WQdUXLBvd8pcQGBDucRxMFOLSCQnB1/z/XKah1hZh CQUgauqG9i8MDeGqU3ugPyA03h7bCfNzS3pQCF3zsHuHs+LzqbE55j0vZFczjF65N6l7cGlkwJ /NXdAQ288rTl0qaHjQomBNaHhf38J+9xuv6sWSgXf0DNoCMqmBtFqWBspTCpgm2FOKUj2AssK3 bVnbNFSU/nvd+4fOB2d3qM4V0mrTG90YZittA6/weA+pdksh3LGAmztCmmpZIbBa99opa7YavC KP488YNQilTx30S6r/8xy+QH
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed, Feb 02, 2022 at 03:19:13PM +0000, Jane Malalane wrote:
> On 01/02/2022 10:02, Roger Pau Monné wrote:
> > On Thu, Jan 27, 2022 at 04:01:33PM +0000, Jane Malalane wrote:
> >> diff --git a/tools/libs/light/libxl_types.idl 
> >> b/tools/libs/light/libxl_types.idl
> >> index 42ac6c357b..db5eb0a0b3 100644
> >> --- a/tools/libs/light/libxl_types.idl
> >> +++ b/tools/libs/light/libxl_types.idl
> >> @@ -819,11 +825,44 @@ void 
> >> libxl__arch_domain_create_info_setdefault(libxl__gc *gc,
> >>   {
> >>   }
> >>   
> >> -void libxl__arch_domain_build_info_setdefault(libxl__gc *gc,
> >> -                                              libxl_domain_build_info 
> >> *b_info)
> >> +int libxl__arch_domain_build_info_setdefault(libxl__gc *gc,
> >> +                                             libxl_domain_build_info 
> >> *b_info,
> >> +                                             const libxl_physinfo 
> >> *physinfo)
> >>   {
> >> +    int rc;
> >> +    bool assisted_xapic;
> >> +    bool assisted_x2apic;
> >> +
> >>       libxl_defbool_setdefault(&b_info->acpi, true);
> >>       libxl_defbool_setdefault(&b_info->arch_x86.msr_relaxed, false);
> >> +
> >> +    libxl_defbool_setdefault(&b_info->arch_x86.assisted_xapic, false);
> >> +    libxl_defbool_setdefault(&b_info->arch_x86.assisted_x2apic, false);
> >> +
> >> +    assisted_xapic = libxl_defbool_val(b_info->arch_x86.assisted_xapic);
> >> +    assisted_x2apic = libxl_defbool_val(b_info->arch_x86.assisted_x2apic);
> >> +
> >> +    if ((assisted_xapic || assisted_x2apic) &&
> >> +        b_info->type == LIBXL_DOMAIN_TYPE_PV)
> >> +    {
> >> +        LOG(ERROR, "Interrupt Controller Virtualization not supported for 
> >> PV");
> >> +        rc = ERROR_INVAL;
> >> +        goto out;
> >> +    }
> >> +
> >> +    if ((assisted_xapic && !physinfo->cap_assisted_xapic) ||
> >> +         (assisted_x2apic && !physinfo->cap_assisted_x2apic))
> >> +    {
> >> +        LOG(ERROR, "x%sAPIC hardware supported emulation not available",
> >> +            assisted_xapic && !physinfo->cap_assisted_xapic ? "" : "2");
> >> +        rc =  ERROR_INVAL;
> >> +        goto out;
> >> +    }
> > 
> > I think the logic here is slightly wrong, as you are setting the
> > default value of assisted_x{2}apic to false, and we would instead like
> > to set it to the current value supported by the hardware in order to
> > keep current behavior.
> > 
> > Also the options are HVM/PVH only, so having them set for PV should
> > result in an error regardless of the set value, ie:
> > 
> > if (b_info->type == LIBXL_DOMAIN_TYPE_PV &&
> >      (!libxl_defbool_is_default(&b_info->arch_x86.assisted_xapic) ||
> >       !libxl_defbool_is_default(&b_info->arch_x86.assisted_x2apic)))
> >       ERROR
> > 
> > libxl_defbool_setdefault(&b_info->arch_x86.assisted_xapic,
> >                           physinfo->cap_assisted_xapic);
> > libxl_defbool_setdefault(&b_info->arch_x86.assisted_x2apic,
> >                           physinfo->cap_assisted_x2apic);
> > 
> > I don't think you need the local assisted_x{2}apic variables.
> 
> Makes sense. In that case, could I instead just have this?
> 
> if (b_info->type != LIBXL_DOMAIN_TYPE_PV)
> {
>      if (physinfo->cap_assisted_xapic)
>          libxl_defbool_setdefault(&b_info->arch_x86.assisted_xapic, true);
>      if (physinfo->cap_assisted_x2apic)
>          libxl_defbool_setdefault(&b_info->arch_x86.assisted_x2apic, true);

I think you actively need to set assisted_x{2}apic if they are using
default values, or else a later call to libxl_defbool_val will cause
an assert to trigger.

libxl_defbool_setdefault(&b_info->arch_x86.assisted_xapic,
                         physinfo->cap_assisted_xapic);


assisted_x{2}apic need to either resolve to true or false past this
point, but must not be left using it's default (uninitialized) value.

> }
> 
> Or do i still need to also check that assisted_x{2}apic hasn't been set 
> elsewhere for PV domains, in which case, I'm happy to add the code you 
> proposed above with this code I have here too.

I would prefer if we actively rejected options that don't make
sense.

It's wrong to try to set assisted_x{2}apic for PV because there's no
APIC at all in that case. I will defer to the maintainer, but I would
prefer if an error was reported in that case. I know we are not
consistent in that regard, so I'm not going to block what you propose.

Thanks, Roger.



 


Rackspace

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