On Tue, 30 Aug 2005, Marc Aurele La France wrote:
On Tue, 30 Aug 2005, Bang Jun-Young wrote:On Mon, 29 Aug 2005 17:49:02 +0900, Bang Jun-Young <junyoung@xxxxxxxxx> wrote:I got the following error when I ran XFree86 tagged xf-4_5_99_10 with vesa driver on a VMware virtual machine running NetBSD/i386:
Fatal server error:xf86MapVidMem: could not mmap /dev/mem [s=ffec0000,a=ffeb9898] (Invalid argument)
I have found that this was caused by changes made in helper_exec.c r1.28. Reverting to r1.27 fixed the problem.
Upon some experiments, I have found that the following code is causing the problem:
CARD32 x_inl(CARD16 port) { CARD32 val; if (port & 0x0003U) { UnalignedIO(Int10Current, "read", port, 4); if (port & 0x0001U) { val = x_inb(port); val |= (CARD32)x_inw(port + 1) << 8; val |= (CARD32)x_inb(port + 3) << 24; } else { val = x_inw(port); val |= (CARD32)x_inw(port + 2) << 16; } } ... snipped ... }
It seems that a unaligned dword-sized IO can't be separated to smaller word/byte-sized IO's. I'm not sure if this is a bug of VMware virtual graphics adapter.
It is, one I pointed out to VMWare sometime ago. I'll commit a workaround for this soon. Thanks for reminding me of VMWare's unaligned accesses.
The attached should work with the vmware driver. Please also try this with the vesa driver.
Thanks. Marc. +----------------------------------+-----------------------------------+ | Marc Aurele La France | work: 1-780-492-9310 | | Academic Information and | fax: 1-780-492-1729 | | Communications Technologies | email: tsi@xxxxxxxxxxx | | 352 General Services Building +-----------------------------------+ | University of Alberta | | | Edmonton, Alberta | Standard disclaimers apply | | T6G 2H1 | | | CANADA | | +----------------------------------+-----------------------------------+ XFree86 developer and VP. ATI driver and X server internals.
Attachment:
vmware.diff.gz
Description: Binary data