qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Igor Mammedov <imammedo@redhat.com>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: peter.maydell@linaro.org, gleb@redhat.com, mst@redhat.com,
	jan.kiszka@siemens.com, qemu-devel@nongnu.org,
	lcapitulino@redhat.com, kraxel@redhat.com, quintela@redhat.com,
	armbru@redhat.com, yang.z.zhang@intel.com, ehabkost@redhat.com,
	stefano.stabellini@eu.citrix.com, aderumier@odiso.com,
	anthony.perard@citrix.com, alex.williamson@redhat.com,
	rth@twiddle.net, kwolf@redhat.com, aliguori@us.ibm.com,
	claudio.fontana@huawei.com, pbonzini@redhat.com,
	afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 17/21] introduce memory_region_get_address() and use it in kvm/ioapic
Date: Fri, 26 Apr 2013 16:17:54 +0200	[thread overview]
Message-ID: <20130426161754.583e3f6b@thinkpad> (raw)
In-Reply-To: <CAAu8pHtGnd0g243TQb0uHQixeX7iqB0sVnPGCsqN2DFghx5HPQ@mail.gmail.com>

On Thu, 25 Apr 2013 18:37:19 +0000
Blue Swirl <blauwirbel@gmail.com> wrote:

> On Tue, Apr 23, 2013 at 8:29 AM, Igor Mammedov <imammedo@redhat.com> wrote:
> > kvm/ioapic is relying on the fact that SysBus device
> > maps mmio regions with offset counted from start of system memory.
> > But if ioapic's region is moved to another sub-region which doesn't
> > start at the beginning of system memory then using offset isn't correct.
> 
> But base_address in only initialized once, never changed. Does this
> patch matter now?
this code path is used on only at machine start-up but also on resets and
post migration to initialize IO-APIC. And unfortunately KVM API takes not
only base address but a bunch of other parameters in that ioctl, so splitting
it doesn't look feasible for 1.5. Patch is useful in aspect that it hides
direct access to parent's internals and without dangling SysBusDevice
internals it allows to convert kvm/ioapic to ICCDevice [next patch in series],
leaving code a bit cleaner.

BTW:
there is an improved patch:
http://permalink.gmane.org/gmane.comp.emulators.qemu/208512

that instead of introducing a new function improves current
memory_region_find() API.

> The correct solution would be to track changes to APICBASE register at
> PIIX3 chipset level and adjust mapping and KVM base also from there.
That we would probably need a change in KVM API first to allow set
IO-APIC's base separately.
 
> 
> >
> > Fix kvm/ioapic by providing and using helper function that returns
> > absolute region address in respective address space.
> >
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> > Note:
> >   next patch "move IOAPIC to ICC bus" converts IOAPICs to ICCDevice
> >   and breaks SysBus device assumption used by kvm/ioapic.
> > ---
> >  hw/i386/kvm/ioapic.c  |    2 +-
> >  include/exec/memory.h |   10 ++++++++++
> >  memory.c              |   11 +++++++++++
> >  3 files changed, 22 insertions(+), 1 deletions(-)
> >
> > diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c
> > index a3bd519..b80d41a 100644
> > --- a/hw/i386/kvm/ioapic.c
> > +++ b/hw/i386/kvm/ioapic.c
> > @@ -96,7 +96,7 @@ static void kvm_ioapic_put(IOAPICCommonState *s)
> >
> >      kioapic->id = s->id;
> >      kioapic->ioregsel = s->ioregsel;
> > -    kioapic->base_address = s->busdev.mmio[0].addr;
> > +    kioapic->base_address = memory_region_get_address(&s->io_memory);
> >      kioapic->irr = s->irr;
> >      for (i = 0; i < IOAPIC_NUM_PINS; i++) {
> >          kioapic->redirtbl[i].bits = s->ioredtbl[i];
> > diff --git a/include/exec/memory.h b/include/exec/memory.h
> > index 9e88320..954f353 100644
> > --- a/include/exec/memory.h
> > +++ b/include/exec/memory.h
> > @@ -706,6 +706,16 @@ void memory_region_set_enabled(MemoryRegion *mr, bool enabled);
> >  void memory_region_set_address(MemoryRegion *mr, hwaddr addr);
> >
> >  /*
> > + * memory_region_get_address: get current the address of a region
> > + *
> > + * Returns the absolute address of a region.
> > + * May be used on regions that are currently part of a memory hierarchy.
> > + *
> > + * @mr: the region being queried
> > + */
> > +hwaddr memory_region_get_address(MemoryRegion *mr);
> > +
> > +/*
> >   * memory_region_set_alias_offset: dynamically update a memory alias's offset
> >   *
> >   * Dynamically updates the offset into the target region that an alias points
> > diff --git a/memory.c b/memory.c
> > index 75ca281..0651050 100644
> > --- a/memory.c
> > +++ b/memory.c
> > @@ -1413,6 +1413,17 @@ void memory_region_set_address(MemoryRegion *mr, hwaddr addr)
> >      memory_region_transaction_commit();
> >  }
> >
> > +hwaddr memory_region_get_address(MemoryRegion *mr)
> > +{
> > +    hwaddr addr = mr->addr;
> > +
> > +    while (mr->parent) {
> > +        mr = mr->parent;
> > +        addr += mr->addr;
> > +    }
> > +    return addr;
> > +}
> > +
> >  void memory_region_set_alias_offset(MemoryRegion *mr, hwaddr offset)
> >  {
> >      assert(mr->alias);
> > --
> > 1.7.1
> >


-- 
Regards,
  Igor

  reply	other threads:[~2013-04-26 14:18 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-23  8:29 [Qemu-devel] [PATCH 00/21 v5] target-i386: CPU hot-add with cpu-add QMP command Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 01/21] cpu: make kvm-stub.o a part of CPU library Igor Mammedov
2013-04-23 15:06   ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 02/21] cpu: call cpu_synchronize_post_init() from CPUClass.realize() if hotplugged Igor Mammedov
2013-04-23 15:59   ` Andreas Färber
2013-04-24 12:08     ` Andreas Färber
2013-04-24 13:34       ` Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 03/21] introduce cpu_resume(), for single CPU Igor Mammedov
2013-04-24 15:21   ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 04/21] cpu: resume CPU from CPUClass.cpu_common_realizefn() when it is hot-plugged Igor Mammedov
2013-04-24 15:37   ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 05/21] introduce CPU hot-plug notifier Igor Mammedov
2013-04-24 16:52   ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 06/21] target-i386: pc: update rtc_cmos on CPU hot-plug Igor Mammedov
2013-04-24 17:03   ` Andreas Färber
2013-04-24 20:04     ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 07/21] cpu: introduce get_arch_id() method and override it for target-i386 Igor Mammedov
2013-04-24 17:51   ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 08/21] exec: add qemu_for_each_cpu Igor Mammedov
2013-04-25 14:48   ` Andreas Färber
2013-04-23  8:29 ` [Qemu-devel] [PATCH 09/21] cpu: add helper cpu_exists(), to check if CPU with specified id exists Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 10/21] acpi_piix4: add infrastructure to send CPU hot-plug GPE to guest Igor Mammedov
2013-04-23 11:38   ` Juan Quintela
2013-04-23 12:54     ` Igor Mammedov
2013-04-23 13:04       ` Michael S. Tsirkin
2013-04-23 14:51         ` Igor Mammedov
2013-04-23 15:01           ` Michael S. Tsirkin
2013-04-23 13:16       ` Juan Quintela
2013-04-23 15:25       ` Juan Quintela
2013-04-23 15:53         ` Igor Mammedov
2013-04-23 13:43   ` Juan Quintela
2013-04-23 13:58     ` Eduardo Habkost
2013-04-23 14:10     ` Igor Mammedov
2013-04-23 16:27   ` [Qemu-devel] [PATCH 10/21 DISGISED v6] " Igor Mammedov
2013-04-24 15:56     ` Igor Mammedov
2013-04-24 16:03       ` Eduardo Habkost
2013-04-24 16:07         ` Paolo Bonzini
2013-04-24 16:09         ` Andreas Färber
2013-04-24 17:22           ` Igor Mammedov
2013-04-24 15:58   ` [Qemu-devel] [PATCH 08/19 v7] " Igor Mammedov
2013-04-24 16:06     ` Andreas Färber
2013-04-24 17:15       ` Igor Mammedov
2013-04-24 18:57   ` [Qemu-devel] [PATCH 10/21 v8] " Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 11/21] target-i386: introduce apic-id property Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 12/21] target-i386: introduce ICC bus/device/bridge Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 13/21] target-i386: cpu: attach ICC bus to CPU on its creation Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 14/21] target-i386: replace MSI_SPACE_SIZE with APIC_SPACE_SIZE Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 15/21] target-i386: kvmvapic: make expilict dependency on sysbus.h Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 16/21] target-i386: move APIC to ICC bus Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 17/21] introduce memory_region_get_address() and use it in kvm/ioapic Igor Mammedov
2013-04-23 17:02   ` Paolo Bonzini
2013-04-23 17:06   ` Peter Maydell
2013-04-23 17:14     ` Paolo Bonzini
2013-04-23 17:26       ` Peter Maydell
2013-04-23 17:39         ` Jan Kiszka
2013-04-23 18:00           ` Peter Maydell
2013-04-23 21:02             ` Paolo Bonzini
2013-04-23 21:39               ` Peter Maydell
2013-04-23 21:46                 ` Paolo Bonzini
2013-04-23 22:00                   ` Peter Maydell
2013-04-24 10:22                 ` Paolo Bonzini
2013-04-24 10:26                   ` Paolo Bonzini
2013-04-24 16:02   ` [Qemu-devel] [PATCH 15/19 v2] extend memory_region_find() " Igor Mammedov
2013-04-25 18:37   ` [Qemu-devel] [PATCH 17/21] introduce memory_region_get_address() " Blue Swirl
2013-04-26 14:17     ` Igor Mammedov [this message]
2013-04-26 17:35       ` Blue Swirl
2013-04-26 17:46         ` Igor Mammedov
2013-04-26 22:13           ` Paolo Bonzini
2013-04-27 10:09             ` Blue Swirl
2013-04-27 12:12               ` Paolo Bonzini
2013-04-27 20:57                 ` Blue Swirl
2013-04-29  9:49                   ` Paolo Bonzini
2013-04-29  9:55                   ` Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 18/21] target-i386: move IOAPIC to ICC bus Igor Mammedov
2013-04-23  8:29 ` [Qemu-devel] [PATCH 19/21] add hot_add_cpu hook to QEMUMachine and export machine_args Igor Mammedov
2013-04-24 17:25   ` Andreas Färber
2013-04-24 17:42     ` Igor Mammedov
2013-04-25 16:58     ` Eduardo Habkost
2013-04-23  8:29 ` [Qemu-devel] [PATCH 20/21] target-i386: implement machine->hot_add_cpu hook Igor Mammedov
2013-04-24 17:31   ` Andreas Färber
2013-04-24 19:14     ` Eduardo Habkost
2013-04-23  8:29 ` [Qemu-devel] [PATCH 21/21] QMP: add cpu-add command Igor Mammedov
2013-04-23 13:26   ` Luiz Capitulino
2013-04-23 14:15     ` Igor Mammedov
2013-04-24 19:44   ` Eric Blake

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=20130426161754.583e3f6b@thinkpad \
    --to=imammedo@redhat.com \
    --cc=aderumier@odiso.com \
    --cc=afaerber@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=anthony.perard@citrix.com \
    --cc=armbru@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=claudio.fontana@huawei.com \
    --cc=ehabkost@redhat.com \
    --cc=gleb@redhat.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=rth@twiddle.net \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=yang.z.zhang@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).