Jeremy, Please apply the bug fix to the origin/xen/master branch. Originally I was thinking it should go to to origin/xen/dom0/swiotlb-new, but that has a different logic that in which this patch would not work properly (the drivers/pci/xen-iommu.c initializes itself irregardless if the Xen-SWIOTLB had been initialized before). I would have posted a couple of patches for that branch (swiotlb-new) but alas, I am going to be on vacation for the next couple of days. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Konrad Rzeszutek Wilk
2009-Dec-22 19:05 UTC
[Xen-devel] [PATCH] [xen/swiotlb] Enable Xen-SWIOTLB only if running in privileged domain or if in non-privileged with iommu=soft.
Previous to this patch we would unconditionally enable Xen-SWIOTLB
if running in PV context. That does not work with Xen 3.4.2 as it has a
security check to disable exchanging of MFNs if no PCI devices have been
passed through. In 4.0 there is an additional check to allow 2MB super-pages
- we accidentally circumvented that by exchanging pages under the 2MB chunk size
even without any PCI devices passed through.
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
arch/x86/xen/pci-swiotlb.c | 6 ++++--
drivers/pci/xen-pcifront.c | 2 ++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/x86/xen/pci-swiotlb.c b/arch/x86/xen/pci-swiotlb.c
index ecdbfe2..6195eb9 100644
--- a/arch/x86/xen/pci-swiotlb.c
+++ b/arch/x86/xen/pci-swiotlb.c
@@ -960,7 +960,8 @@ xen_swiotlb_fixup(void *buf, size_t size, unsigned long
nslabs)
dma_bits);
} while (rc && dma_bits++ < max_dma_bits);
if (rc)
- panic(KERN_ERR "xen_create_contiguous_region failed\n");
+ panic(KERN_ERR "xen_create_contiguous_region failed: "
+ "rc: %d\n", rc);
i += slabs;
} while(i < nslabs);
@@ -984,7 +985,8 @@ static struct dma_map_ops xen_swiotlb_dma_ops = {
void __init xen_swiotlb_init(void)
{
- if (xen_domain()) {
+ /* For PV guest, only if iommu=soft is passed in. */
+ if (xen_pv_domain() && (xen_initial_domain() || swiotlb)) {
printk(KERN_INFO "PCI-DMA: Using Xen software bounce buffering for IO
(Xen-SWIOTLB)\n");
xen_swiotlb_init_with_default_size(64 * (1<<20)); /* default to 64MB */
dma_ops = &xen_swiotlb_dma_ops;
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index cc3b51b..3436202 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -1052,6 +1052,8 @@ static void __init_refok pcifront_backend_changed(struct
xenbus_device *xdev,
case XenbusStateInitWait:
case XenbusStateInitialised:
case XenbusStateClosed:
+ dev_warn(&xdev->dev, "Device is in %d state. Need to change
"
+ "state on the privileged domain.\n", be_state);
break;
case XenbusStateConnected:
--
1.6.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
On 12/22/2009 11:04 AM, Konrad Rzeszutek Wilk wrote:> Originally I was thinking it should go to to origin/xen/dom0/swiotlb-new, > but that has a different logic that in which this patch would not > work properly (the drivers/pci/xen-iommu.c initializes itself irregardless > if the Xen-SWIOTLB had been initialized before).Are you saying that the logic of xen/master is different from its constituent branches?> I would have > posted a couple of patches for that branch (swiotlb-new) but alas, > I am going to be on vacation for the next couple of days. >No problem. I''m taking a long break over Christmas/NY (visit family in Australia) and will be back on Jan 18th. I expect I''ll be tracking email, but I won''t be doing anything major. J _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On Tue, Dec 22, 2009 at 12:17:54PM -0800, Jeremy Fitzhardinge wrote:> On 12/22/2009 11:04 AM, Konrad Rzeszutek Wilk wrote: >> Originally I was thinking it should go to to origin/xen/dom0/swiotlb-new, >> but that has a different logic that in which this patch would not >> work properly (the drivers/pci/xen-iommu.c initializes itself irregardless >> if the Xen-SWIOTLB had been initialized before). > > Are you saying that the logic of xen/master is different from its > constituent branches?Yes for the SWIOTLB. You added the ''xen_swiotlb'' flag which is not yet in the xen/master tree.> >> I would have >> posted a couple of patches for that branch (swiotlb-new) but alas, >> I am going to be on vacation for the next couple of days. >> > > No problem. I''m taking a long break over Christmas/NY (visit family in > Australia) and will be back on Jan 18th. I expect I''ll be tracking > email, but I won''t be doing anything major.Enjoy your holidays! (the posting to the other branches are not that important - they can wait after New Year). _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel