All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcel Apfelbaum <marcel@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>, qemu-devel@nongnu.org
Cc: mst@redhat.com, marcel.a@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 1/3] acpi: update RSDP on guest access
Date: Mon, 09 Feb 2015 16:11:14 +0200	[thread overview]
Message-ID: <54D8C002.4090808@redhat.com> (raw)
In-Reply-To: <1423490395-22054-2-git-send-email-imammedo@redhat.com>

On 02/09/2015 03:59 PM, Igor Mammedov wrote:
> From: "Michael S. Tsirkin" <mst@redhat.com>
>
> RSDT offset can change across reboots and that makes
> immutable RSDP, which is build at startup, point to
> incorrect place in ACPI table blob. That results in
> BIOS corrupting tables and guest OS failing to find
> ACPI tables.
> We really should have put it in a ROM region, but
> we can't change that for old machine types,
> let's just set the callback and update it explicitly.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> ---
> v2:
>    * do not forget to pass build_state to callback
>      otherwise it's NOP.
> ---
>   hw/i386/acpi-build.c | 15 +++++++++------
>   1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 4944249..5b2b017 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -1526,6 +1526,7 @@ struct AcpiBuildState {
>       /* Is table patched? */
>       uint8_t patched;
>       PcGuestInfo *guest_info;
> +    void *rsdp;
>   } AcpiBuildState;
>
>   static bool acpi_get_mcfg(AcpiMcfgInfo *mcfg)
> @@ -1660,8 +1661,6 @@ void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables)
>
>       /* We'll expose it all to Guest so we want to reduce
>        * chance of size changes.
> -     * RSDP is small so it's easy to keep it immutable, no need to
> -     * bother with alignment.
>        *
>        * We used to align the tables to 4k, but of course this would
>        * too simple to be enough.  4k turned out to be too small an
> @@ -1733,6 +1732,7 @@ static void acpi_build_update(void *build_opaque, uint32_t offset)
>
>       memcpy(qemu_get_ram_ptr(build_state->table_ram), tables.table_data->data,
>              build_state->table_size);
> +    memcpy(build_state->rsdp, tables.rsdp->data, acpi_data_len(tables.rsdp));
>
>       cpu_physical_memory_set_dirty_range_nocode(build_state->table_ram,
>                                                  build_state->table_size);
> @@ -1805,11 +1805,14 @@ void acpi_setup(PcGuestInfo *guest_info)
>                       tables.tcpalog->data, acpi_data_len(tables.tcpalog));
>
>       /*
> -     * RSDP is small so it's easy to keep it immutable, no need to
> -     * bother with ROM blobs.
> +     * Though RSDP is small, its contents isn't immutable, so
> +     * update it along with the rest of tables on guest access.
>        */
> -    fw_cfg_add_file(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE,
> -                    tables.rsdp->data, acpi_data_len(tables.rsdp));
> +    fw_cfg_add_file_callback(guest_info->fw_cfg, ACPI_BUILD_RSDP_FILE,
> +                             acpi_build_update, build_state,
> +                             tables.rsdp->data, acpi_data_len(tables.rsdp));
> +
> +    build_state->rsdp = tables.rsdp->data;
>
>       qemu_register_reset(acpi_build_reset, build_state);
>       acpi_build_reset(build_state);
>

Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>

  reply	other threads:[~2015-02-09 14:11 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-09 13:59 [Qemu-devel] [PATCH v4 0/3] pc: acpi-build: make linker & RSDP tables dynamic Igor Mammedov
2015-02-09 13:59 ` [Qemu-devel] [PATCH v4 1/3] acpi: update RSDP on guest access Igor Mammedov
2015-02-09 14:11   ` Marcel Apfelbaum [this message]
2015-02-09 13:59 ` [Qemu-devel] [PATCH v4 2/3] pc: acpi-build: update linker " Igor Mammedov
2015-02-09 14:11   ` Marcel Apfelbaum
2015-02-15 19:45   ` Michael S. Tsirkin
2015-02-09 13:59 ` [Qemu-devel] [PATCH v4 3/3] pc: acpi-build: migrate RSDP table Igor Mammedov
2015-02-09 14:19   ` Marcel Apfelbaum
2015-02-15 19:45   ` Michael S. Tsirkin

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=54D8C002.4090808@redhat.com \
    --to=marcel@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=marcel.a@redhat.com \
    --cc=mst@redhat.com \
    --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.