qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: "Andreas Färber" <andreas.faerber@web.de>
Cc: Avi Kivity <avi@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Gerd Hoffmann <kraxel@redhat.com>, Alexander Graf <agraf@suse.de>,
	qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v3 5/6] vga: Use linear mapping + dirty logging in chain 4 memory access mode
Date: Mon, 12 Sep 2011 17:57:16 +0200	[thread overview]
Message-ID: <4E6E2BDC.3060702@siemens.com> (raw)
In-Reply-To: <4E6E2A06.8010900@siemens.com>

On 2011-09-12 17:49, Jan Kiszka wrote:
> On 2011-09-12 17:45, Andreas Färber wrote:
>> Am 12.09.2011 17:33, schrieb Jan Kiszka:
>>> On 2011-09-12 17:20, Alexander Graf wrote:
>>>> Jan Kiszka wrote:
>>>>> Most VGA memory access modes require MMIO handling as they demand weird
>>>>> logic to get a byte from or into the video RAM. However, there is one
>>>>> exception: chain 4 mode with all memory planes enabled for writing. This
>>>>> mode actually allows lineary mapping, which can then be combined with
>>>>> dirty logging to accelerate KVM.
>>>>>
>>>>> This patch accelerates specifically VBE accesses like they are used by
>>>>> grub in graphical mode. Not only the standard VGA adapter benefits from
>>>>> this, also vmware and spice in VGA mode.
>>>>>
>>>>> CC: Gerd Hoffmann <kraxel@redhat.com>
>>>>> CC: Avi Kivity <avi@redhat.com>
>>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>>>   
>>>> [...]
>>>>
>>>>> +static void vga_update_memory_access(VGACommonState *s)
>>>>> +{
>>>>> +    MemoryRegion *region, *old_region = s->chain4_alias;
>>>>> +    target_phys_addr_t base, offset, size;
>>>>> +
>>>>> +    s->chain4_alias = NULL;
>>>>> +
>>>>> +    if ((s->sr[0x02] & 0xf) == 0xf && s->sr[0x04] & 0x08) {
>>>>> +        offset = 0;
>>>>> +        switch ((s->gr[6] >> 2) & 3) {
>>>>> +        case 0:
>>>>> +            base = 0xa0000;
>>>>> +            size = 0x20000;
>>>>> +            break;
>>>>> +        case 1:
>>>>> +            base = 0xa0000;
>>>>> +            size = 0x10000;
>>>>> +            offset = s->bank_offset;
>>>>> +            break;
>>>>> +        case 2:
>>>>> +            base = 0xb0000;
>>>>> +            size = 0x8000;
>>>>> +            break;
>>>>> +        case 3:
>>>>> +            base = 0xb8000;
>>>>> +            size = 0x8000;
>>>>> +            break;
>>>>> +        }
>>>>> +        region = g_malloc(sizeof(*region));
>>>>> +        memory_region_init_alias(region, "vga.chain4", &s->vram, offset, size);
>>>>> +        memory_region_add_subregion_overlap(s->legacy_address_space, base,
>>>>> +                                            region, 2);
>>>>>   
>>>> This one eventually gives me the following in info mtree with -M g3beige
>>>> on qemu-system-ppc:
>>>>
>>>> (qemu) info mtree
>>>> memory
>>>> system addr 00000000 off 00000000 size 7fffffffffffffff
>>>> -vga.chain4 addr 000a0000 off 00000000 size 10000
>>>> -macio addr 80880000 off 00000000 size 80000
>>>> --macio-nvram addr 00060000 off 00000000 size 20000
>>>> --pmac-ide addr 00020000 off 00000000 size 1000
>>>> --cuda addr 00016000 off 00000000 size 2000
>>>> --escc-bar addr 00013000 off 00000000 size 40
>>>> --dbdma addr 00008000 off 00000000 size 1000
>>>> --heathrow-pic addr 00000000 off 00000000 size 1000
>>>> -vga.rom addr 80800000 off 00000000 size 10000
>>>> -vga.vram addr 80000000 off 00000000 size 800000
>>>> -vga-lowmem addr 800a0000 off 00000000 size 20000
>>>> -escc addr 80013000 off 00000000 size 40
>>>> -isa-mmio addr fe000000 off 00000000 size 200000
>>>> I/O
>>>> io addr 00000000 off 00000000 size 10000
>>>> -cmd646-bmdma addr 00000700 off 00000000 size 10
>>>> --cmd646-bmdma-ioport addr 0000000c off 00000000 size 4
>>>> --cmd646-bmdma-bus addr 00000008 off 00000000 size 4
>>>> --cmd646-bmdma-ioport addr 00000004 off 00000000 size 4
>>>> --cmd646-bmdma-bus addr 00000000 off 00000000 size 4
>>>> -cmd646-cmd addr 00000680 off 00000000 size 4
>>>> -cmd646-data addr 00000600 off 00000000 size 8
>>>> -cmd646-cmd addr 00000580 off 00000000 size 4
>>>> -cmd646-data addr 00000500 off 00000000 size 8
>>>> -ne2000 addr 00000400 off 00000000 size 100
>>>>
>>>> This ends up overmapping 0xa0000, effectively overwriting kernel data.
>>>> If I #if 0 the offending chunk out, everything is fine. I would assume
>>>> that chain4 really needs to be inside of lowmem? No idea about VGA, but
>>>> I'm sure you know what's going on :).
>>> Does this help?
>>>
>>> diff --git a/hw/vga.c b/hw/vga.c
>>> index 125fb29..0a0c5a6 100644
>>> --- a/hw/vga.c
>>> +++ b/hw/vga.c
>>> @@ -181,6 +181,7 @@ static void vga_update_memory_access(VGACommonState *s)
>>>              size = 0x8000;
>>>              break;
>>>          }
>>> +        base += isa_mem_base;
>>>          region = g_malloc(sizeof(*region));
>>>          memory_region_init_alias(region, "vga.chain4", &s->vram, offset, size);
>>>          memory_region_add_subregion_overlap(s->legacy_address_space, base,
>>
>> No longer oopses, but the screen looks chaotic now (black bar at bottom,
>> part of contents at top etc.).
> 
> Does this PPC machine map the ISA range and forward VGA accesses to the
> adapter in general?

If it does, please post a dump of the VGACommonState while the screen is
corrupted (gdb or via device_show [1]. Maybe I missed some condition
that prevents chain4 optimizations, and your guest triggers this.

Jan

[1] http://thread.gmane.org/gmane.comp.emulators.qemu/114853

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

  reply	other threads:[~2011-09-12 15:57 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-22 17:12 [Qemu-devel] [PATCH v3 0/6] vga: dirty log cleanup, more linear mapping Jan Kiszka
2011-08-22 17:12 ` [Qemu-devel] [PATCH v3 1/6] vmware-vga: Register reset service Jan Kiszka
2011-08-22 17:12 ` [Qemu-devel] [PATCH v3 2/6] vmware-vga: Disable verbose mode Jan Kiszka
2011-08-22 17:12 ` [Qemu-devel] [PATCH v3 3/6] vmware-vga: Remove dead DIRECT_VRAM mode Jan Kiszka
2011-08-22 17:12 ` [Qemu-devel] [PATCH v3 4/6] vmware-vga: Eliminate vga_dirty_log_restart Jan Kiszka
2011-08-22 17:12 ` [Qemu-devel] [PATCH v3 5/6] vga: Use linear mapping + dirty logging in chain 4 memory access mode Jan Kiszka
2011-08-25  7:19   ` Avi Kivity
2011-08-25  9:07     ` Jan Kiszka
2011-08-25  9:16       ` Avi Kivity
2011-08-25  9:21         ` Jan Kiszka
2011-08-25 10:45           ` Avi Kivity
2011-08-25 10:51             ` Jan Kiszka
2011-08-25 11:19               ` Avi Kivity
2011-08-25 11:28                 ` Jan Kiszka
2011-09-12 15:20   ` Alexander Graf
2011-09-12 15:33     ` Jan Kiszka
2011-09-12 15:45       ` Andreas Färber
2011-09-12 15:49         ` Jan Kiszka
2011-09-12 15:57           ` Jan Kiszka [this message]
2011-09-13  7:39             ` Alexander Graf
2011-09-13  8:14               ` Jan Kiszka
2011-09-13  8:17                 ` Alexander Graf
2011-09-13  8:19                 ` Andreas Färber
2011-09-13  8:40                 ` Alexander Graf
2011-09-13  9:00                   ` Jan Kiszka
2011-09-13  9:42                     ` Alexander Graf
2011-09-13 11:34                       ` Jan Kiszka
2011-09-13 19:39                         ` Blue Swirl
2011-09-14  7:11                           ` Avi Kivity
2011-09-14  7:42                             ` Alexander Graf
2011-09-14  8:02                               ` Jan Kiszka
2011-09-14  8:17                               ` Avi Kivity
2011-09-14  8:20                                 ` Jan Kiszka
2011-09-14  8:22                                   ` Avi Kivity
2011-09-14  8:24                                     ` Jan Kiszka
2011-09-14  8:27                                       ` Alexander Graf
2011-09-14  8:33                                         ` Jan Kiszka
2011-09-14  8:35                                         ` Avi Kivity
2011-09-14 20:06                                           ` Blue Swirl
2011-09-14 20:14                                             ` Alexander Graf
2011-09-14 20:16                                               ` Avi Kivity
2011-09-14 20:35                                                 ` Alexander Graf
2011-09-14 20:42                                                   ` Richard Henderson
2011-09-14 21:27                                                     ` Andreas Färber
2011-09-14 21:41                                                     ` Alexander Graf
2011-09-15  1:24                                                       ` Benjamin Herrenschmidt
2011-09-15  7:32                                                         ` Avi Kivity
2011-09-15  7:35                                                         ` Alexander Graf
2011-09-15 10:01                                                           ` Benjamin Herrenschmidt
2011-09-15 11:31                                                             ` Avi Kivity
2011-09-17 21:40                                                               ` Blue Swirl
2011-09-18 11:28                                                                 ` Avi Kivity
2011-09-19  9:15                                                                 ` Alexander Graf
2011-09-19  9:22                                                                   ` Avi Kivity
2011-09-19  9:36                                                                     ` Alexander Graf
2011-09-19  9:48                                                                       ` Avi Kivity
2011-09-14 20:15                                             ` Avi Kivity
2011-09-14 20:25                                               ` Blue Swirl
2011-09-15  7:30                                                 ` Avi Kivity
2011-09-13  9:43                     ` Andreas Färber
2011-09-12 20:21     ` Blue Swirl
2011-09-13  6:54       ` Alexander Graf
2011-09-13  7:51         ` Avi Kivity
2011-09-13  7:54           ` Alexander Graf
2011-09-13  8:10             ` Avi Kivity
2011-08-22 17:12 ` [Qemu-devel] [PATCH v3 6/6] vga: Drop some unused fields Jan Kiszka
2011-08-22 20:18 ` [Qemu-devel] [PATCH v3 0/6] vga: dirty log cleanup, more linear mapping Anthony Liguori
2011-08-22 20:36   ` Jan Kiszka

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=4E6E2BDC.3060702@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=agraf@suse.de \
    --cc=aliguori@us.ibm.com \
    --cc=andreas.faerber@web.de \
    --cc=avi@redhat.com \
    --cc=kraxel@redhat.com \
    --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 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).