From: Alexander Graf <agraf@suse.de>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Anthony Perard <anthony.perard@citrix.com>,
"xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH] xen: avoid tracking the region 0xa0000 - 0xbffff
Date: Tue, 14 Jun 2011 17:24:17 +0200 [thread overview]
Message-ID: <4DF77D21.4020807@suse.de> (raw)
In-Reply-To: <alpine.DEB.2.00.1106141614440.12963@kaball-desktop>
On 06/14/2011 05:24 PM, Stefano Stabellini wrote:
> On Tue, 14 Jun 2011, Alexander Graf wrote:
>> On 14.06.2011, at 13:48, Stefano Stabellini wrote:
>>
>>> On Tue, 14 Jun 2011, Alexander Graf wrote:
>>>> On 03.06.2011, at 17:56,<stefano.stabellini@eu.citrix.com> <stefano.stabellini@eu.citrix.com> wrote:
>>>>
>>>>> From: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
>>>>>
>>>>> Xen can only do dirty bit tracking for one memory region, so we should
>>>>> explicitly avoid trying to track the legacy VGA region between 0xa0000
>>>>> and 0xbffff, rather than trying and failing.
>>>>>
>>>>> Signed-off-by: Stefano Stabellini<stefano.stabellini@eu.citrix.com>
>>>>> ---
>>>>> xen-all.c | 4 ++++
>>>>> 1 files changed, 4 insertions(+), 0 deletions(-)
>>>>>
>>>>> diff --git a/xen-all.c b/xen-all.c
>>>>> index 9a5c3ec..1fdc2e8 100644
>>>>> --- a/xen-all.c
>>>>> +++ b/xen-all.c
>>>>> @@ -218,6 +218,10 @@ static int xen_add_to_physmap(XenIOState *state,
>>>>> if (get_physmapping(state, start_addr, size)) {
>>>>> return 0;
>>>>> }
>>>>> + /* do not try to map legacy VGA memory */
>>>>> + if (start_addr>= 0xa0000&& start_addr + size<= 0xbffff) {
>>>> I don't quite like the hardcoded range here. What exactly is the issue? The fact that you can only map a single region? Then do a counter and fail when it's> 1.
>>> That is what we were doing before: succeeding the first time and
>>> failing from the second time on.
>>> By "coincidence" the second time was the range 0xa0000-0xbffff so
>>> everything worked as expected, but it wasn't obvious why.
>>> I am just trying to make sure that one year from now it will be clear
>>> just looking at the code why it works.
>>>
>>>
>>>> If you don't want to map the VGA region as memory slot, why not change the actual mapping code in the cirrus adapter?
>>> Because I didn't want to introduce any ugly if (xen_enable()) in generic
>>> code, if it is that simple to catch the issue from xen specific code.
>> Well sure, but 2 years from now yet another region will be introduced that might even be registered before the FB and everyone's puzzled again :). How about you print a warning when anyone tries to map anything after the first map? Or - as Jan suggests - implement multiple regions.
>>
>> If you prefer, you could even check for the VGA range as "known broken" and only print warnings on others.
> I can do that (actually we already do it) but it wouldn't change the
> fact that if somebody modifies hw/cirrus_vga.c:map_linear_vram to call
> cpu_register_physical_memory_log for the legacy range first, it would
> break xen, that is the problem I was trying to solve.
>
> In order to make the code more reliable, and also catch the scenario
> where another region is registered before the framebuffer, we could do
> something like this, but it is not very pretty:
I agree, but it's probably the most pretty one I've seen so far. I'll
let others comment on it too before taking it in.
Alex
>
>
> diff --git a/xen-all.c b/xen-all.c
> index 9a5c3ec..de1e724 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -214,6 +214,7 @@ static int xen_add_to_physmap(XenIOState *state,
> unsigned long i = 0;
> int rc = 0;
> XenPhysmap *physmap = NULL;
> + RAMBlock *block;
>
> if (get_physmapping(state, start_addr, size)) {
> return 0;
> @@ -221,7 +222,16 @@ static int xen_add_to_physmap(XenIOState *state,
> if (size<= 0) {
> return -1;
> }
> + /* only add the vga vram to physmap */
> + QLIST_FOREACH(block,&ram_list.blocks, next) {
> + if (!strcmp(block->idstr, "vga.vram")&& block->offset == phys_offset
> +&& start_addr> 0xbffff) {
> + goto go_physmap;
> + }
> + }
> + return -1;
>
> +go_physmap:
> DPRINTF("mapping vram to %llx - %llx, from %llx\n", start_addr, start_addr + size, phys_offset);
> for (i = 0; i< size>> TARGET_PAGE_BITS; i++) {
> unsigned long idx = (phys_offset>> TARGET_PAGE_BITS) + i;
next prev parent reply other threads:[~2011-06-14 15:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-03 15:56 [Qemu-devel] [PATCH] xen: avoid tracking the region 0xa0000 - 0xbffff stefano.stabellini
2011-06-03 15:56 ` [Qemu-devel] [PATCH] cirrus_vga: reset lfb_addr after a pci config write if the BAR is unmapped stefano.stabellini
2011-06-14 13:54 ` Alexander Graf
2011-06-14 16:25 ` Jan Kiszka
[not found] ` <D4463EE3-B9CE-45ED-9371-F2D3E3507898@suse.de>
2011-06-14 11:04 ` [Qemu-devel] [PATCH] xen: avoid tracking the region 0xa0000 - 0xbffff Jan Kiszka
2011-06-14 11:50 ` Stefano Stabellini
2011-06-14 11:59 ` Jan Kiszka
2011-06-14 16:47 ` [Qemu-devel] [Xen-devel] " Avi Kivity
2011-06-14 11:48 ` [Qemu-devel] " Stefano Stabellini
2011-06-14 11:52 ` Alexander Graf
2011-06-14 15:24 ` Stefano Stabellini
2011-06-14 15:24 ` Alexander Graf [this message]
2011-06-15 8:09 ` Alexander Graf
2011-06-15 16:27 ` Stefano Stabellini
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=4DF77D21.4020807@suse.de \
--to=agraf@suse.de \
--cc=anthony.perard@citrix.com \
--cc=qemu-devel@nongnu.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xensource.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).