* [PATCH] swiotlb-xen: update dev_addr after swapping pages
@ 2017-01-19 18:39 Stefano Stabellini
2017-01-19 23:58 ` Boris Ostrovsky
0 siblings, 1 reply; 5+ messages in thread
From: Stefano Stabellini @ 2017-01-19 18:39 UTC (permalink / raw)
To: xen-devel
Cc: jgross, Pooya.Keshavarzi, sstabellini, boris.ostrovsky,
konrad.wilk
In xen_swiotlb_map_page and xen_swiotlb_map_sg_attrs, if the original
page is not suitable, we swap it for another page from the swiotlb
pool.
In these cases, we don't update the previously calculated dma address
for the page before calling xen_dma_map_page. Thus, we end up calling
xen_dma_map_page passing the wrong dev_addr, resulting in
xen_dma_map_page mistakenly assuming that the page is foreign when it is
local.
Fix the bug by updating dev_addr appropriately.
This change has no effect on x86, because xen_dma_map_page is a stub
there.
Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
Tested-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index f905d6e..f8afc6d 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -414,9 +414,9 @@ dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
if (map == SWIOTLB_MAP_ERROR)
return DMA_ERROR_CODE;
+ dev_addr = xen_phys_to_bus(map);
xen_dma_map_page(dev, pfn_to_page(map >> PAGE_SHIFT),
dev_addr, map & ~PAGE_MASK, size, dir, attrs);
- dev_addr = xen_phys_to_bus(map);
/*
* Ensure that the address returned is DMA'ble
@@ -575,13 +575,14 @@ void xen_swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
sg_dma_len(sgl) = 0;
return 0;
}
+ dev_addr = xen_phys_to_bus(map);
xen_dma_map_page(hwdev, pfn_to_page(map >> PAGE_SHIFT),
dev_addr,
map & ~PAGE_MASK,
sg->length,
dir,
attrs);
- sg->dma_address = xen_phys_to_bus(map);
+ sg->dma_address = dev_addr;
} else {
/* we are not interested in the dma_addr returned by
* xen_dma_map_page, only in the potential cache flushes executed
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] swiotlb-xen: update dev_addr after swapping pages
2017-01-19 18:39 [PATCH] swiotlb-xen: update dev_addr after swapping pages Stefano Stabellini
@ 2017-01-19 23:58 ` Boris Ostrovsky
2017-01-20 0:27 ` Konrad Rzeszutek Wilk
0 siblings, 1 reply; 5+ messages in thread
From: Boris Ostrovsky @ 2017-01-19 23:58 UTC (permalink / raw)
To: Stefano Stabellini, xen-devel; +Cc: jgross, Pooya.Keshavarzi, konrad.wilk
On 01/19/2017 01:39 PM, Stefano Stabellini wrote:
> In xen_swiotlb_map_page and xen_swiotlb_map_sg_attrs, if the original
> page is not suitable, we swap it for another page from the swiotlb
> pool.
>
> In these cases, we don't update the previously calculated dma address
> for the page before calling xen_dma_map_page. Thus, we end up calling
> xen_dma_map_page passing the wrong dev_addr, resulting in
> xen_dma_map_page mistakenly assuming that the page is foreign when it is
> local.
>
> Fix the bug by updating dev_addr appropriately.
>
> This change has no effect on x86, because xen_dma_map_page is a stub
> there.
>
> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
> Signed-off-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
> Tested-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
>
> diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
> index f905d6e..f8afc6d 100644
> --- a/drivers/xen/swiotlb-xen.c
> +++ b/drivers/xen/swiotlb-xen.c
> @@ -414,9 +414,9 @@ dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
> if (map == SWIOTLB_MAP_ERROR)
> return DMA_ERROR_CODE;
>
> + dev_addr = xen_phys_to_bus(map);
> xen_dma_map_page(dev, pfn_to_page(map >> PAGE_SHIFT),
> dev_addr, map & ~PAGE_MASK, size, dir, attrs);
> - dev_addr = xen_phys_to_bus(map);
>
> /*
> * Ensure that the address returned is DMA'ble
> @@ -575,13 +575,14 @@ void xen_swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr,
Interesting that git diff picked xen_swiotlb_unmap_page() here instead
of xen_swiotlb_map_sg_attrs()
-boris
> sg_dma_len(sgl) = 0;
> return 0;
> }
> + dev_addr = xen_phys_to_bus(map);
> xen_dma_map_page(hwdev, pfn_to_page(map >> PAGE_SHIFT),
> dev_addr,
> map & ~PAGE_MASK,
> sg->length,
> dir,
> attrs);
> - sg->dma_address = xen_phys_to_bus(map);
> + sg->dma_address = dev_addr;
> } else {
> /* we are not interested in the dma_addr returned by
> * xen_dma_map_page, only in the potential cache flushes executed
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] swiotlb-xen: update dev_addr after swapping pages
2017-01-19 23:58 ` Boris Ostrovsky
@ 2017-01-20 0:27 ` Konrad Rzeszutek Wilk
2017-01-20 0:29 ` Stefano Stabellini
0 siblings, 1 reply; 5+ messages in thread
From: Konrad Rzeszutek Wilk @ 2017-01-20 0:27 UTC (permalink / raw)
To: Boris Ostrovsky; +Cc: jgross, xen-devel, Pooya.Keshavarzi, Stefano Stabellini
On Thu, Jan 19, 2017 at 06:58:46PM -0500, Boris Ostrovsky wrote:
> On 01/19/2017 01:39 PM, Stefano Stabellini wrote:
> > In xen_swiotlb_map_page and xen_swiotlb_map_sg_attrs, if the original
> > page is not suitable, we swap it for another page from the swiotlb
> > pool.
> >
> > In these cases, we don't update the previously calculated dma address
> > for the page before calling xen_dma_map_page. Thus, we end up calling
> > xen_dma_map_page passing the wrong dev_addr, resulting in
> > xen_dma_map_page mistakenly assuming that the page is foreign when it is
> > local.
> >
> > Fix the bug by updating dev_addr appropriately.
> >
> > This change has no effect on x86, because xen_dma_map_page is a stub
> > there.
> >
> > Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
> > Signed-off-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
> > Tested-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
>
> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
I can carry it via my swiotlb.git tree or if there are some extra
things on the Xen tree - it can go through that?
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] swiotlb-xen: update dev_addr after swapping pages
2017-01-20 0:27 ` Konrad Rzeszutek Wilk
@ 2017-01-20 0:29 ` Stefano Stabellini
2017-01-20 13:47 ` Konrad Rzeszutek Wilk
0 siblings, 1 reply; 5+ messages in thread
From: Stefano Stabellini @ 2017-01-20 0:29 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk
Cc: jgross, xen-devel, Boris Ostrovsky, Stefano Stabellini,
Pooya.Keshavarzi
On Thu, 19 Jan 2017, Konrad Rzeszutek Wilk wrote:
> On Thu, Jan 19, 2017 at 06:58:46PM -0500, Boris Ostrovsky wrote:
> > On 01/19/2017 01:39 PM, Stefano Stabellini wrote:
> > > In xen_swiotlb_map_page and xen_swiotlb_map_sg_attrs, if the original
> > > page is not suitable, we swap it for another page from the swiotlb
> > > pool.
> > >
> > > In these cases, we don't update the previously calculated dma address
> > > for the page before calling xen_dma_map_page. Thus, we end up calling
> > > xen_dma_map_page passing the wrong dev_addr, resulting in
> > > xen_dma_map_page mistakenly assuming that the page is foreign when it is
> > > local.
> > >
> > > Fix the bug by updating dev_addr appropriately.
> > >
> > > This change has no effect on x86, because xen_dma_map_page is a stub
> > > there.
> > >
> > > Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
> > > Signed-off-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
> > > Tested-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
> >
> > Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
>
> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>
> I can carry it via my swiotlb.git tree or if there are some extra
> things on the Xen tree - it can go through that?
It might be best to go via swiotlb.git: I don't think we have anything
on the Xen tree at the moment -- Juergen has just sent a pull request
for it.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] swiotlb-xen: update dev_addr after swapping pages
2017-01-20 0:29 ` Stefano Stabellini
@ 2017-01-20 13:47 ` Konrad Rzeszutek Wilk
0 siblings, 0 replies; 5+ messages in thread
From: Konrad Rzeszutek Wilk @ 2017-01-20 13:47 UTC (permalink / raw)
To: Stefano Stabellini; +Cc: jgross, xen-devel, Boris Ostrovsky, Pooya.Keshavarzi
On Thu, Jan 19, 2017 at 04:29:19PM -0800, Stefano Stabellini wrote:
> On Thu, 19 Jan 2017, Konrad Rzeszutek Wilk wrote:
> > On Thu, Jan 19, 2017 at 06:58:46PM -0500, Boris Ostrovsky wrote:
> > > On 01/19/2017 01:39 PM, Stefano Stabellini wrote:
> > > > In xen_swiotlb_map_page and xen_swiotlb_map_sg_attrs, if the original
> > > > page is not suitable, we swap it for another page from the swiotlb
> > > > pool.
> > > >
> > > > In these cases, we don't update the previously calculated dma address
> > > > for the page before calling xen_dma_map_page. Thus, we end up calling
> > > > xen_dma_map_page passing the wrong dev_addr, resulting in
> > > > xen_dma_map_page mistakenly assuming that the page is foreign when it is
> > > > local.
> > > >
> > > > Fix the bug by updating dev_addr appropriately.
> > > >
> > > > This change has no effect on x86, because xen_dma_map_page is a stub
> > > > there.
> > > >
> > > > Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
> > > > Signed-off-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
> > > > Tested-by: Pooya Keshavarzi <Pooya.Keshavarzi@de.bosch.com>
> > >
> > > Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> >
> > Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> >
> > I can carry it via my swiotlb.git tree or if there are some extra
> > things on the Xen tree - it can go through that?
>
> It might be best to go via swiotlb.git: I don't think we have anything
> on the Xen tree at the moment -- Juergen has just sent a pull request
> for it.
OK, let me queue it up and run it through the tests.
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-01-20 13:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-19 18:39 [PATCH] swiotlb-xen: update dev_addr after swapping pages Stefano Stabellini
2017-01-19 23:58 ` Boris Ostrovsky
2017-01-20 0:27 ` Konrad Rzeszutek Wilk
2017-01-20 0:29 ` Stefano Stabellini
2017-01-20 13:47 ` Konrad Rzeszutek Wilk
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).