From mboxrd@z Thu Jan 1 00:00:00 1970 From: Malcolm Crossley Subject: [PATCH v3] hw/passthrough: Prevent QEMU from mapping PCI option ROM at address 0 Date: Mon, 12 May 2014 15:37:00 +0100 Message-ID: <1399905420-4782-1-git-send-email-malcolm.crossley@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org, Ian.Jackson@citrix.com, JBeulich@suse.com, Ian.Campbell@citrix.com, Paul.Durrant@citrix.com Cc: Malcolm Crossley List-Id: xen-devel@lists.xenproject.org The PCI option ROM BAR uses the LSB to indicate if the BAR is enabled. The AMD graphics driver sets the address bit's of the BAR to 0 but leaves the LSB set to 1. Whilst this is not good practice, QEMU should be ignoring the non address parts of the BAR. This patch adds masking of the bits 0-10 (4k page) parts of the BAR before comparing the address to 0. Signed-off-by: Malcolm Crossley --- hw/pass-through.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/hw/pass-through.c b/hw/pass-through.c index 304c438..f83c88c 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -2208,7 +2208,7 @@ static void pt_bar_mapping_one(struct pt_dev *ptdev, int bar, int io_enable, } /* prevent guest software mapping memory resource to 00000000h */ - if ((base->bar_flag == PT_BAR_FLAG_MEM) && (r_addr == 0)) + if ((base->bar_flag == PT_BAR_FLAG_MEM) && ((r_addr & PCI_ROM_ADDRESS_MASK) == 0)) r_addr = -1; /* align resource size (memory type only) */ -- 1.7.1