qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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;

  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).