[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] xen/arm: pci: fix check in pci_check_bar()


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
  • Date: Tue, 11 Jul 2023 11:46:47 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BDDZwL1ASjyPqenwXuqG6HJNX/FSDxegFg/UU6wCrVA=; b=WQ+M8AZCBaYfniOrxEwJGcIYuI/2skWBTYFQmga0ZU0k9OkMkuT70iq1COR8EKCZrGon0XGekj8CP1yoT4ycyRbut8asygDFeDK6IZwy3SbZ7yYh1d1wRjvnAGUWdqjWrBq0gv7ygMFKbJzpV8WKKPlhXH0ue4TQPjrhcA6gE3u99wuLpp9vYR8o57yVlTzTzZu4WJDSmO4WbTe2uuT62zXGwRNeU9oLzweZXjdwSbpfr11MMyqJwvosx1EO020QLfEr4dF3UXhc7wTyrCSP85/zeM5hRFa4BEPTbin84+AfZMJLWmVZx1VDlEEKO3wHB5hxMocNHtEmQFSQUcOV5w==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EuwP71lsQ8G3P/KMgRtEhku2J+hxPMVUwyyRHdDHJmi6CGMdH1FM2SB1fMcA77eGickuZmEaCtcIV6WtGDwZjFbUudVomC89NMSOFXUGnYdAwo1ml+iRWSZUYJfJCoJy17XKc2hEkrP0/a07ufaW7bvr2yZOrIbdWL8Pp8YID1+MHt0aCEVbLnMNQNbjxNk2jJ2dw5nNXdkfhLVu/zUBEU9FtUuinM6apszXRCgIKsKcEl846PhsQqpQwJHprvGE4/sMvGOh/qqcDMh7hdGcT2nbYM5NbB9EERYsGA5BzrkN5K0WxCv4M5SbCXLXpe6fVwfRyeKpZkVY0QUdSLzp/w==
  • Cc: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Rahul Singh <rahul.singh@xxxxxxx>
  • Delivery-date: Tue, 11 Jul 2023 15:47:06 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

When mapping BARs for vPCI, it's valid for a BAR start address to equal the BAR
end address (i.e. s == e). However, pci_check_bar() currently returns false in
this case, which results in Xen not mapping the BAR. In this example boot log,
Linux has mapped the BARs, but since Xen did not map them, Linux encounters a
data abort and panics:

[    2.593300] pci 0000:00:00.0: BAR 0: assigned [mem 0x50008000-0x50008fff]
[    2.593682] pci 0000:00:00.0: BAR 2: assigned [mem 0x50009000-0x50009fff]
[    2.594066] pci 0000:00:00.0: BAR 4: assigned [mem 0x5000a000-0x5000afff]
...
[    2.810502] virtio-pci 0000:00:00.0: enabling device (0000 -> 0002)
(XEN) 0000:00:00.0: not mapping BAR [50008, 50008] invalid position
(XEN) 0000:00:00.0: not mapping BAR [50009, 50009] invalid position
(XEN) 0000:00:00.0: not mapping BAR [5000a, 5000a] invalid position
[    2.817502] virtio-pci 0000:00:00.0: virtio_pci: leaving for legacy driver
[    2.817853] virtio-pci 0000:00:00.0: enabling bus mastering
(XEN) arch/arm/traps.c:1992:d0v0 HSR=0x00000093010045 pc=0xffff8000089507d4 
gva=0xffff80000c46d012 gpa=0x00000050008012
[    2.818397] Unable to handle kernel ttbr address size fault at virtual 
address ffff80000c46d012
...

Fix this by changing the condition in pci_check_bar().

Fixes: cc80e2bab0d0 ("xen/pci: replace call to is_memory_hole to pci_check_bar")
Signed-off-by: Stewart Hildebrand <stewart.hildebrand@xxxxxxx>
---
 xen/arch/arm/pci/pci-host-common.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/arm/pci/pci-host-common.c 
b/xen/arch/arm/pci/pci-host-common.c
index 7cdfc89e5211..e0ec526f9776 100644
--- a/xen/arch/arm/pci/pci-host-common.c
+++ b/xen/arch/arm/pci/pci-host-common.c
@@ -406,7 +406,7 @@ bool pci_check_bar(const struct pci_dev *pdev, mfn_t start, 
mfn_t end)
         .is_valid = false
     };
 
-    if ( s >= e )
+    if ( s > e )
         return false;
 
     dt_node = pci_find_host_bridge_node(pdev);

base-commit: b831326ee2f9ed94523b3d8b0fb2da2a82113e9e
-- 
2.41.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.