All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, kraxel@redhat.com,
	Anthony Liguori <anthony@codemonkey.ws>,
	pbonzini@redhat.com, Laszlo Ersek <lersek@redhat.com>,
	afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH v8 18/26] i386: define pc guest info
Date: Sun, 6 Oct 2013 22:59:40 +0300	[thread overview]
Message-ID: <20131006195940.GA19709@redhat.com> (raw)
In-Reply-To: <20131004181842.0696600c@nial.usersys.redhat.com>

On Fri, Oct 04, 2013 at 06:18:42PM +0200, Igor Mammedov wrote:
> On Thu, 3 Oct 2013 18:05:35 +0300
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > This defines a structure that will be used to fill in acpi tables
> > where relevant properties are not yet available using QOM.
> > 
> > Reviewed-by: Laszlo Ersek <lersek@redhat.com>
> > Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
> > Tested-by: Gerd Hoffmann <kraxel@redhat.com>
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> >  include/hw/i386/pc.h |  9 +++++++++
> >  hw/i386/pc.c         | 31 +++++++++++++++++++++++++++++++
> >  2 files changed, 40 insertions(+)
> > 
> > diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> > index 9b2ddc4..085a621 100644
> > --- a/include/hw/i386/pc.h
> > +++ b/include/hw/i386/pc.h
> > @@ -9,6 +9,9 @@
> >  #include "hw/i386/ioapic.h"
> >  
> >  #include "qemu/range.h"
> > +#include "qemu/bitmap.h"
> > +#include "sysemu/sysemu.h"
> > +#include "hw/pci/pci.h"
> >  
> >  /* PC-style peripherals (also used by other machines).  */
> >  
> > @@ -20,6 +23,12 @@ typedef struct PcPciInfo {
> >  struct PcGuestInfo {
> >      bool has_pci_info;
> >      bool isapc_ram_fw;
> > +    hwaddr ram_size;
> > +    unsigned apic_id_limit;
> > +    bool apic_xrupt_override;
> > +    uint64_t numa_nodes;
> > +    uint64_t *node_mem;
> > +    uint64_t *node_cpu;
> >      FWCfgState *fw_cfg;
> >  };
> >  
> > diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> > index 0c313fe..dbae9da 100644
> > --- a/hw/i386/pc.c
> > +++ b/hw/i386/pc.c
> > @@ -1028,6 +1028,23 @@ static void pc_fw_cfg_guest_info(PcGuestInfo *guest_info)
> >      fw_cfg_add_file(guest_info->fw_cfg, "etc/pci-info", info, sizeof *info);
> >  }
> >  
> > +static void pc_set_cpu_guest_info(CPUState *cpu, PcGuestInfo *guest_info)
> > +{
> > +    CPUClass *klass = CPU_GET_CLASS(cpu);
> > +    uint64_t apic_id = klass->get_arch_id(cpu);
> > +    int j;
> > +
> > +    assert(apic_id < guest_info->apic_id_limit);
> > +
> > +    for (j = 0; j < guest_info->numa_nodes; j++) {
> > +        assert(cpu->cpu_index < max_cpus);
> > +        if (test_bit(cpu->cpu_index, node_cpumask[j])) {
> > +            guest_info->node_cpu[apic_id] = cpu_to_le64(j);
> > +            break;
> > +        }
> > +    }
> > +}
> > +
> >  typedef struct PcGuestInfoState {
> >      PcGuestInfo info;
> >      Notifier machine_done;
> > @@ -1047,6 +1064,20 @@ PcGuestInfo *pc_guest_info_init(ram_addr_t below_4g_mem_size,
> >  {
> >      PcGuestInfoState *guest_info_state = g_malloc0(sizeof *guest_info_state);
> >      PcGuestInfo *guest_info = &guest_info_state->info;
> > +    CPUState *cpu;
> > +
> > +    guest_info->ram_size = below_4g_mem_size + above_4g_mem_size;
> > +    guest_info->apic_id_limit = pc_apic_id_limit(max_cpus);
> > +    guest_info->apic_xrupt_override = kvm_allows_irq0_override();
> > +    guest_info->numa_nodes = nb_numa_nodes;
> > +    guest_info->node_mem = g_memdup(node_mem, guest_info->numa_nodes *
> > +                                    sizeof *guest_info->node_mem);
> > +    guest_info->node_cpu = g_malloc0(guest_info->apic_id_limit *
> > +                                     sizeof *guest_info->node_cpu);
> > +
> > +    CPU_FOREACH(cpu) {
> > +        pc_set_cpu_guest_info(cpu, guest_info);
> > +    }
> 
> pc_guest_info_init() is called only once, now lets suppose we hotplug CPUs
> and then reboot guest. Hotadded CPUs won't be accounted in guest_info.node_cpu
> since it's initialized only once and is never updated. As result guest will
> get stale SRAT table.
> 
> Using a callback in acpi_setup/update could allow to get an updated guest_info.

While I agree it's a bug, it's also exactly what happens at the
moment with ACPI in BIOS: BIOS gets the info from
FW CFG file which is only updated once during qemu
initialization.

So I'll take a look at fixing this, but I don't think
it's a blocker for merging this patchset.
Makes sense?

> >      guest_info_state->machine_done.notify = pc_guest_info_machine_done;
> >      qemu_add_machine_init_done_notifier(&guest_info_state->machine_done);

  reply	other threads:[~2013-10-06 19:57 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-03 15:04 [Qemu-devel] [PATCH v8 00/26] qemu: generate acpi tables for the guest Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 01/26] cleanup object.h: include error.h directly Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 02/26] qom: cleanup struct Error references Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 03/26] qom: add pointer to int property helpers Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 04/26] pci: fix up w64 size calculation helper Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 05/26] fw_cfg: interface to trigger callback on read Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 06/26] loader: support for unmapped ROM blobs Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 07/26] pcie_host: expose UNMAPPED macro Michael S. Tsirkin
2013-10-03 15:04 ` [Qemu-devel] [PATCH v8 08/26] pcie_host: expose address format Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 09/26] q35: use macro for MCFG property name Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 10/26] q35: expose mmcfg size as a property Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 11/26] i386: add ACPI table files from seabios Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 12/26] acpi: add rules to compile ASL source Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 13/26] acpi: pre-compiled ASL files Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 14/26] acpi: ssdt pcihp: updat generated file Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 15/26] loader: use file path size from fw_cfg.h Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 16/26] i386: add bios linker/loader Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 17/26] loader: allow adding ROMs in done callbacks Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 18/26] i386: define pc guest info Michael S. Tsirkin
2013-10-04 16:18   ` Igor Mammedov
2013-10-06 19:59     ` Michael S. Tsirkin [this message]
2013-10-06 20:44     ` Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 19/26] acpi/piix: add macros for acpi property names Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 20/26] piix: APIs for pc guest info Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 21/26] ich9: " Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 22/26] pvpanic: add API to access io port Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 23/26] hpet: add API to find it Michael S. Tsirkin
2013-10-03 15:05 ` [Qemu-devel] [PATCH v8 24/26] i386: ACPI table generation code from seabios Michael S. Tsirkin
2013-10-04 16:03   ` Igor Mammedov
2013-10-03 15:06 ` [Qemu-devel] [PATCH v8 25/26] ssdt: fix PBLK length Michael S. Tsirkin
2013-10-03 15:06 ` [Qemu-devel] [PATCH v8 26/26] ssdt-proc: update generated file 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=20131006195940.GA19709@redhat.com \
    --to=mst@redhat.com \
    --cc=afaerber@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=imammedo@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=lersek@redhat.com \
    --cc=pbonzini@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.