public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: 刘晓建 <zjliu@nudt.edu.cn>
To: kvm@vger.kernel.org
Subject: [PATCH 1/3] KVM: pci passthrough un-page-aligned mmio device on machines w/o VT-d
Date: Mon, 15 Dec 2008 22:57:42 +0800	[thread overview]
Message-ID: <429353062.11415@nudt.edu.cn> (raw)

the following patches apply to KVM-79. however, just now I viewed the code in
KVM-81, and saw the problem remains.

when assigning a pci device to guest os, the qemu can not guarantee the device's
virtual iomem address has the same page offset with the real one.
for example: in native linux, the the starting iomem address for my via-rhine nic
is 0x00000000df9fff00, which is not page aligned. But QEMU will emulate this nic
has a page aligned mmio address. This difference will make guest os access the
wrong address when it tries to do mmio.

It seems Han Weidong has disabled QEMU assign this kinds of devices to guest os.
The following patch will remove this constraint.
---
 diff -uNr kvm-79/bios/rombios32.c kvm-79-fixed/bios/rombios32.c
--- kvm-79/bios/rombios32.c 2008-11-12 19:48:01.000000000 +0800
+++ kvm-79-fixed/bios/rombios32.c 2008-12-12 11:38:41.000000000 +0800
@@ -931,7 +931,9 @@
                     paddr = &pci_bios_bigmem_addr;
                 else
                     paddr = &pci_bios_mem_addr;
-                *paddr = (*paddr + size - 1) & ~(size - 1);
+
+   /* To preserve the iomem page offset. --Xiaojian Liu */
+                *paddr = ((*paddr + size - 1) & ~(size - 1)) | (val & 0x0fff);
                 pci_set_io_region_addr(d, i, *paddr);
                 *paddr += size;
             }

Xiaojian Liu



             reply	other threads:[~2008-12-15 15:05 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-15 14:57 刘晓建 [this message]
2008-12-16  6:37 ` [PATCH 1/3] KVM: pci passthrough un-page-aligned mmio device on machines w/o VT-d Han, Weidong

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=429353062.11415@nudt.edu.cn \
    --to=zjliu@nudt.edu.cn \
    --cc=kvm@vger.kernel.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