From: Alexander Graf <agraf@suse.de>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] s390x: initialize virtio dev region
Date: Fri, 11 Nov 2011 16:59:59 +0100 [thread overview]
Message-ID: <4EBD467F.7040107@suse.de> (raw)
In-Reply-To: <CAFEAcA8rcJfFs1-mBmrc2sWiivpoFq9+1PsCj5=wM2cjXT_2yQ@mail.gmail.com>
On 11/10/2011 03:19 AM, Peter Maydell wrote:
> On 10 November 2011 01:45, Alexander Graf<agraf@suse.de> wrote:
>> On 10.11.2011, at 02:36, Peter Maydell wrote:
>>> This looks a bit fishy -- cpu_physical_memory_map() takes a
>>> target_phys_addr_t but you're passing it a ram_addr_t.
>> Meh. Always those types ... :)
> In the simple case ("ram starts at 0, not multiply mapped, guest
> and host pointer widths the same") target_phys_addr_t's and
> ram_addr_t's are the same, but this isn't necessarily so; indeed
> one ram_addr_t can be mapped to multiple target_phys_addr_t's
> in some system models. So the two things aren't trivially
> interconvertible. (As it happens I think in this case you're
> actually just doing physical address calculations using the wrong
> type...)
This is the machine init function. The s390 virtio machine's ram layout
is defined to be exactly as I posted in the previous post. So there
won't be any ram starts at != 0 or multiple mappings :).
>> On 10.11.2011, at 02:36, Peter Maydell wrote:
>>> Also isn't this second-guessing the ram_addr_t of the region allocated
>>> inside memory_region_init_ram() ?
>> Not sure I understand? On s390-virtio we have to following ram layout:
>>
>> [ ----- RAM ---- | --- virtio device structs --- ]
>>
>> The size of the latter is added to my_ram_size by
>> s390_virtio_bus_init. All I'm trying to do is make sure that this
>> latter part of RAM is always 0, while the first part can still be
>> dynamically allocated.
> That comment was written on the assumption that you were actually
> trying to manipulate a ram_addr_t in your variable of type
> ram_addr_t; to expand on it a bit:
>
> I think that conceptually the only way to get the ram_addr_t for a
> bit of RAM should be that you got it back from qemu_ram_alloc()
> (or that you did the obvious arithmetic to get a ram_addr_t within
> a block given the start of one). As it happens qemu_ram_alloc()
> starts ram_addr_t's at 0 and works up with no gaps, but that's
> an implementation detail. (Also if anybody ever did something that
> meant there was another qemu_ram_alloc() call before the one done
> inside that memory_region_init_ram() then things would break.)
>
> In summary, either:
> (1) you need to ask the memory region for its ram_addr_t
> [there doesn't seem to be an API for this at the moment],
> do arithmetic on ram_addr_t's and use qemu_get_ram_ptr() to
> get a host pointer corresponding to that ram_addr_t
> or (2) you need to do your arithmetic in target_phys_addr_t's
> (and then you can say your RAM starts at physaddr 0, which
> is guaranteed, rather than at ram_addr_t 0, which isn't)
> and use cpu_physical_memory_map/unmap().
I still don't get it. What I want is:
for (i = ram_size; i < my_ram_size; i++)
stb_phys(env, i, 0);
cpu_physical_memory_map gives me a pointer to the memory region between
ram_size and my_ram_size. I memset(0) it. I don't see how I could
possibly have different offsets anywhere. If cpu_physical_memory_map
would take anything different than physical address, a lot of
assumptions in QEMU code would break.
Alex
next prev parent reply other threads:[~2011-11-11 15:59 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-10 1:19 [Qemu-devel] [PATCH] s390x: initialize virtio dev region Alexander Graf
2011-11-10 1:36 ` Peter Maydell
2011-11-10 1:45 ` Alexander Graf
2011-11-10 2:19 ` Peter Maydell
2011-11-11 15:59 ` Alexander Graf [this message]
2011-11-11 16:11 ` Peter Maydell
2011-11-11 16:24 ` Alexander Graf
2011-11-11 16:44 ` Peter Maydell
2011-11-11 16:46 ` Alexander Graf
2011-11-11 17:38 ` Alexander Graf
2011-11-11 17:40 ` Alexander Graf
2011-11-11 18:01 ` Peter Maydell
2011-11-11 22:43 ` Andreas Färber
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=4EBD467F.7040107@suse.de \
--to=agraf@suse.de \
--cc=peter.maydell@linaro.org \
--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.