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

Re: [PATCH v2] tools/libxl: Correctly align the ACPI tables


  • To: Kevin Stefanov <kevin.stefanov@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Tue, 14 Sep 2021 18:23:17 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; 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; bh=kWgIW2qbylxRzv9ou/AJZm+kYnZkcCza3B6+Wu8228Y=; b=I2OIIV0KJuoAckAYCP3RLtYMAEDcTW5gMMqKUICg9ljqn6hvXcNCCmVxBTpGJtXxUDkkjDAtKzD8P7VFZBRaREwEFWPxcL1UQP81f7mzytotWmH8sZ6Y9MGmUZBcYBrXmiD88/3pTme5lq0CsbsZVMFyNU+fjhF9yI6qbPTaWza/nFfp99Hn6iYbW6QeZGQeUfLxe0y7vKvCz8QI1nc0Ok8mmtMONxY1nk6DW/JVp4gLGL6Lc26EUndcvIwxmNzBz4MMaLOe8AL6tsxuin6uRXjKXJ+Y6faukJrLn8OKVUBy3lw6Lt64StZLDfBTCPHyz1DaSSNfE5KyOk+p/F1aVw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IEpLDkPqHRiAd2p0V/W1yHPZSaeP+o+5MdJ77WtjleKV2LYeqf2yxWaYX8Yxc+RYQPO5v5GQvNtwYGAQ26hJj9d8HadAxdwc+Ifebp9qKVOq8pl3wA5/AyD3p4IbNZ4SvhJpbie1uF+O4V2rfhZFXYMgdxWaw0fRPrtuyqQzKs9QP6jcVTnaXeks5UsRYyoUhEw2r9poILYKOWO+oGIbTZmKFkWwmB9h+y7T2k4WDlVVuLRrekK4WTa97J9xzuo0Hrtz65ShkTLqWAi6ZydqruP364AkoWI3+qESEkm3FIgefMiz0WICS5BK/7YifZuT/EU24JuFhOuxI64+E5ROfw==
  • Authentication-results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
  • Cc: Ian Jackson <iwj@xxxxxxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>
  • Delivery-date: Tue, 14 Sep 2021 17:23:45 +0000
  • Ironport-data: A9a23:7r+Z0Km423y4SNhGpAabSpjo5gxQIURdPkR7XQ2eYbSJt1+Wr1Gzt xJNUWzXbv2MZzf0Ktl2YYW/oEgBv57WyoQ2G1dv+CthECMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BClVlxJVF/fngqoDUUYYoAQgsA185IMsdoUg7wbdh09c02YLR7z6l4 rseneWOYDdJ5BYsWo4kw/rrRMRH5amaVJsw5zTSVNgT1LPsvyB94KE3fMldG0DQUIhMdtNWc s6YpF2PEsE1yD92Yj+tuu6TnkTn2dc+NyDW4pZdc/DKbhSvOkXee0v0XRYRQR4/ttmHozx+4 I9Gr66xSyAoBK7JueoXXR5JSAtEbJQTrdcrIVDn2SCS50jPcn+qyPRyFkAme4Yf/46bA0kXq 6ZecmpUKEne2aTmm9pXScE17ignBODtMJkSpTdLyjbBAOx9aZvCX7/L9ZlT2zJYasVmQKyFP 5NIMmEHgBLofzcXZHslNakCrcT1tnn4fGxTuQK8qv9ii4TU5FMoi+W8WDbPQfSLWsd9jkuev njB/WnyHlcdLtP34SqI9Degi/HCmQv/WZkOD/uo+/hymlqRy2cPThoMWjOTo/O0l0q/UNJ3M FEP92wlqq1a3FOvZsnwWVu/unHsg/IHc4MOSatgsljLk/eKpVbCboQZctJfQIYtrv03Rxsr7 FyMvt3jCzt+65evGEvIo994sgiO1TgpwX4qPHFfFFZUvIa9+enfnTqUEY0yS/fdYsndXGiqm mHU9nBWa6A70JZTv5hX62wrlN5FSnLhdQcz+gyfdWas9AoRiGWNNtHwtASzARqtKu+kori9U JoswJP2AAMmV8jleMmxrAMlRu/BCxGtamG0vLKXN8N9nwlBAlb6FWyq3N2bGKuPGpxVEdMOS BSI0T69GbcJZCf6BUOJS9vpVqzGMpQM5fy6D6uJP7Kik7BadROd/TEGWKJj9zm2yyARfVUEE c7DK66EVC9CYYw+lWbeb7pNgNcDm3FlrUuOFM+T8vhS+efHDJJjYexeawXmgyFQxP7snTg5B P4Ea5LRmkkACbanCsQVmKZKRW03wbEALcmeg+Rcd/KZIxogH2ckCvTLxqgmdZAjlKNQ/tokN FnkMqOB4Fag13DBNyuQbXVvNOHmUZpl9CppNi0wJ1e4nXMkZN/3vqsYcpI2e5gh9fBikqEoH 6VUJZ3YD6QdUCnD9hQccYL58N5oeiO0iF/cJCGiejU+IcJtHlSb5t/+cwLz3yASFS7r59Amq rit21qDE5oOTghvFujMb/erww/jtHQRgrsqDUDJPsNSaAPn940zc379ifo+IsctLxTfx2TFi 1bKUElA/eSU+t076tjEg6yAvryFKeomExoIBXTf4Ja3KTLeojipz7hfXbvaZjvaTm71pvmvP L0H0/HmPfQbt19WqI4gQa1zxKcz6taz9b9XygNoQCfCY1ixU+4yJ3CH2Y9Et7FXx68fsgyzA xrd9t5fMLSPGcXkDF9Oe1Z1MrXdjakZymvI8PA4AETm/ysmrrOIXHJbMwSIlCEAfqB+N5kow Lt5tcMbg+BlZsHG7jpSYvhoylmx
  • Ironport-hdrordr: A9a23:k1zRfqwscXDG6XdgXDu1KrPwIr1zdoMgy1knxilNoH1uHvBw8v rEoB1173DJYVoqNk3I++rhBEDwexLhHPdOiOF6UItKNzOW21dAQrsSiLfK8nnNHDD/6/4Y9Y oISdkbNDQoNykZsfrH
  • Ironport-sdr: j15wnaleKkOGmh2IjJOYOPSnnww2v0J44Pj/DoL3zsyrETbWGvcd813HssyJMQ3/HK/6ugYRWM s5WZ/MIo0OjvJGX2WyS2JeGRFcGZs4CW+DOo49xCIIiYgQsBS4qXeSgdsily26/fcVobR7UAq7 /hhpcCEBeij2YrFqbWS7AlSRmoDbcvn5yJXOTz9SPDaYdAfmTfFAj1OW8DlZvRrDH8iQGfp9m5 3Zgb0rdcgCgYQ64RMQGI4Uu9MeGQAOK/b3JKlwHsrwJMqVJJRBvEEAAHUlM8h6KZcIc94BEhaX davOt3cy5Z7TVLVSzYYTf5l6
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 14/09/2021 17:43, Kevin Stefanov wrote:
> The memory allocator currently calculates alignment in libxl's virtual
> address space, rather than guest physical address space. This results
> in the FACS being commonly misaligned.
>
> Furthermore, the allocator has several other bugs.
>
> The opencoded align-up calculation is currently susceptible to a bug
> that occurs in the corner case that the buffer is already aligned to
> begin with. In that case, an align-sized memory hole is introduced.
>
> The while loop is dead logic because its effects are entirely and
> unconditionally overwritten immediately after it.
>
> Rework the memory allocator to align in guest physical address space
> instead of libxl's virtual memory and improve the calculation, drop
> errant extra page in allocated buffer for ACPI tables, and give some
> of the variables better names/types.
>
> Fixes: 14c0d328da2b ("libxl/acpi: Build ACPI tables for HVMlite guests")
> Signed-off-by: Kevin Stefanov <kevin.stefanov@xxxxxxxxxx>
> ---
> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> CC: Ian Jackson <iwj@xxxxxxxxxxxxxx>
> CC: Wei Liu <wl@xxxxxxx>
> CC: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> CC: Jan Beulich <jbeulich@xxxxxxxx>
>
> v2: Rewrite completely, to align in guest physical address space

It appears that patchew isn't running properly right now, but ...

> diff --git a/tools/libs/light/libxl_x86_acpi.c 
> b/tools/libs/light/libxl_x86_acpi.c
> index 3eca1c7a9f..8b6dee2e05 100644
> --- a/tools/libs/light/libxl_x86_acpi.c
> +++ b/tools/libs/light/libxl_x86_acpi.c
> @@ -208,10 +201,8 @@ int libxl__dom_load_acpi(libxl__gc *gc,
>      }
>  
>      /* Calculate how many pages are needed for the tables. */
> -    acpi_pages_num =
> -        ((libxl_ctxt.alloc_currp - (unsigned long)acpi_pages)
> -         >> libxl_ctxt.page_shift) +
> -        ((libxl_ctxt.alloc_currp & page_mask) ? 1 : 0);
> +    acpi_pages_num = (ALIGN(libxl_ctxt.guest_curr, libxl_ctxt.page_size) -
> +                      libxl_ctxt.guest_start) >> libxl_ctxt.page_shift;


... this hunk means page_mask lost its only user, and is now a
written-but-not-used variable, which some compilers will warn about.

The fix is easy, and just to drop that local variable too, which is
another 2 lines deleted in the resulting patch.

~Andrew




 


Rackspace

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