From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
To: "Andreas Färber" <afaerber@suse.de>
Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org,
blauwirbel@gmail.com, aliguori@amazon.com, pcrost@xilinx.com,
pbonzini@redhat.com, aurelien@aurel32.net, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH v1 22/22] petalogix-ml605: Make the LMB visible only to the CPU
Date: Tue, 17 Dec 2013 11:36:04 +1000 [thread overview]
Message-ID: <20131217013603.GJ2161@edvb> (raw)
In-Reply-To: <52AEF641.7050401@suse.de>
On Mon, Dec 16, 2013 at 01:46:57PM +0100, Andreas Färber wrote:
> Hi Edgar,
>
> Am 16.12.2013 09:06, schrieb edgar.iglesias@gmail.com:
> > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
> >
> > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
> > ---
> > hw/microblaze/petalogix_ml605_mmu.c | 17 ++++++++++++++++-
> > 1 file changed, 16 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c
> > index 4009ff5..0a13b0e 100644
> > --- a/hw/microblaze/petalogix_ml605_mmu.c
> > +++ b/hw/microblaze/petalogix_ml605_mmu.c
> > @@ -88,10 +88,18 @@ petalogix_ml605_init(QEMUMachineInitArgs *args)
> > hwaddr ddr_base = MEMORY_BASEADDR;
> > MemoryRegion *phys_lmb_bram = g_new(MemoryRegion, 1);
> > MemoryRegion *phys_ram = g_new(MemoryRegion, 1);
> > + MemoryRegion *sysmem_alias = g_new(MemoryRegion, 1);
> > + MemoryRegion *mr_cpu_root = g_new(MemoryRegion, 1);
> > + AddressSpace *as_cpu = g_malloc0(sizeof(*as_cpu));
> > qemu_irq irq[32], *cpu_irq;
> >
> > + /* Setup the CPU specific address-space. */
> > + memory_region_init(mr_cpu_root, NULL, "as-cpu-root", INT64_MAX);
> > + address_space_init(as_cpu, mr_cpu_root, "as/cpu");
> > +
> > /* init CPUs */
> > cpu = MICROBLAZE_CPU(object_new(TYPE_MICROBLAZE_CPU));
> > + qdev_prop_set_address_space(DEVICE(cpu), "address-space", as_cpu);
> > object_property_set_bool(OBJECT(cpu), true, "realized", &err);
> > if (err) {
> > error_report("%s", error_get_pretty(err));
> > @@ -100,11 +108,18 @@ petalogix_ml605_init(QEMUMachineInitArgs *args)
> >
> > env = &cpu->env;
> >
> > + /* Populate the CPU AS with the LMB only visible to the CPU. */
> > + memory_region_init_alias(sysmem_alias, NULL, "sysmem_alias",
> > + address_space_mem, 0,
> > + memory_region_size(address_space_mem));
> > + memory_region_add_subregion(mr_cpu_root, 0x00000000, sysmem_alias);
> > +
>
>
> Thanks for this series. I've been on vacation so couldn't review the
> previous RFC yet... I'm not entirely happy with the way this is pushing
> work to the machines here and wonder if we can simplify that some more:
>
> For one, I don't like the allocation of AddressSpace and MemoryRegion at
> machine level. Would it be possible to enforce allocating a per-CPU
> AddressSpace and MemoryRegion at cpu.c level, ideally as embedded value
> rather than pointer field? Otherwise CPU hot-add is going to get rather
> complicated and error-prone.
It depends how you see it. The CPU is the user of an AS, but not necessarily
the owner/creator of the AS/port. I think the AS should be created and owned
by the container/board that creates the CPU. PMM elaborates more on this
in his reply.
> TCG loads/saves should always have a CPU[Arch]State associated. Would it
> work to always alias the system MemoryRegion again at cpu.c level with
> lowest priority for range [0,UINT64_MAX] and let derived CPUs do per-CPU
> MemoryRegions by adding MemoryRegions with higher priority?
> I guess QTest is going to be a culprit for this approach as you
> mentioned in the cover letter?
> That would limit machine changes to adding to the new CPU MemoryRegion
> instead of the global system one where appropriate.
>
> Always allocating AddressSpace/MemoryRegion per CPU would at the same
> time avoid the need for these new qdev'y address space properties. If we
> do need the user to fiddle with this, then I would prefer making address
> spaces QOM objects and using a standard link<> property. An API to set
> it conveniently from code would of course still be fine then.
The reason why qdev props are nice for the CPU is that it makes the
interface to set the AS the same for all masters (DMA, CPUs etc).
For DMA capable devs, the device could even have multiple AS it operates
on which can be set by names. A CPU could in theory also need multiple AS,
but currently we have structural limitations that only allow support for one.
Cheers,
Edgar
>
> Regards,
> Andreas
>
> > /* Attach emulated BRAM through the LMB. */
> > memory_region_init_ram(phys_lmb_bram, NULL, "petalogix_ml605.lmb_bram",
> > LMB_BRAM_SIZE);
> > vmstate_register_ram_global(phys_lmb_bram);
> > - memory_region_add_subregion(address_space_mem, 0x00000000, phys_lmb_bram);
> > + memory_region_add_subregion_overlap(mr_cpu_root, 0x00000000,
> > + phys_lmb_bram, 2);
> >
> > memory_region_init_ram(phys_ram, NULL, "petalogix_ml605.ram", ram_size);
> > vmstate_register_ram_global(phys_ram);
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
prev parent reply other threads:[~2013-12-17 1:36 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-16 8:05 [Qemu-devel] [PATCH v1 00/22] Steps towards per CPU address-spaces edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 01/22] exec: Make tb_invalidate_phys_addr input an AS edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 02/22] exec: Make iotlb_to_region " edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 03/22] exec: Always initialize MemorySection address spaces edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 04/22] exec: Make memory_region_section_get_iotlb use section AS edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 05/22] memory: Add MemoryListener to typedefs.h edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 06/22] memory: Add address_space_find_by_name() edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 07/22] qdev: Add qdev property type for AddressSpaces edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 08/22] cpu: Add per-cpu address space edgar.iglesias
2013-12-16 12:11 ` Andreas Färber
2013-12-17 0:34 ` Edgar E. Iglesias
2013-12-17 0:54 ` Peter Maydell
2013-12-17 0:57 ` Peter Crosthwaite
2013-12-17 1:01 ` Edgar E. Iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 09/22] target-microblaze: Add address-space property edgar.iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 10/22] exec: On AS changes, only flush affected CPU TLBs edgar.iglesias
2013-12-16 12:54 ` Andreas Färber
2013-12-17 0:57 ` Edgar E. Iglesias
2013-12-16 8:05 ` [Qemu-devel] [PATCH v1 11/22] exec: Make ldl_*_phys input an AddressSpace edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 12/22] exec: Make ldq/ldub_*_phys " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 13/22] exec: Make lduw_*_phys " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 14/22] exec: Make stq_*_phys " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 15/22] exec: Make stl_*_phys " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 16/22] exec: Make stl_phys_notdirty " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 17/22] exec: Make stw_*_phys " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 18/22] exec: Make stb_phys " edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 19/22] exec: Make cpu_physical_memory_write_rom input an AS edgar.iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 20/22] exec: Make cpu_memory_rw_debug use the CPUs AS edgar.iglesias
2013-12-16 12:48 ` Andreas Färber
2013-12-17 0:52 ` Edgar E. Iglesias
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 21/22] petalogix-ml605: Create the CPU with object_new() edgar.iglesias
2013-12-16 12:14 ` Andreas Färber
2013-12-16 8:06 ` [Qemu-devel] [PATCH v1 22/22] petalogix-ml605: Make the LMB visible only to the CPU edgar.iglesias
2013-12-16 12:46 ` Andreas Färber
2013-12-16 13:29 ` Peter Maydell
2013-12-16 13:44 ` Andreas Färber
2013-12-16 13:51 ` Peter Maydell
2013-12-16 14:03 ` Andreas Färber
2013-12-16 15:09 ` Peter Maydell
2013-12-17 1:24 ` Edgar E. Iglesias
2013-12-17 1:36 ` Edgar E. Iglesias [this message]
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=20131217013603.GJ2161@edvb \
--to=edgar.iglesias@gmail.com \
--cc=afaerber@suse.de \
--cc=aliguori@amazon.com \
--cc=aurelien@aurel32.net \
--cc=blauwirbel@gmail.com \
--cc=pbonzini@redhat.com \
--cc=pcrost@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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).