2011-05-06 15:33:46

by Dimitri Sivanich

[permalink] [raw]
Subject: [PATCH] x86: poll waiting for I/OAT DMA channel status

For certain system configurations a 5 usec udelay before checking I/OAT DMA
channel status is sometimes not sufficient, resulting in a false failure
status and unnecessary freeing of channel resources. Conversely, for many
configurations 5 usec is longer than necessary.

Loop for up to 20 usec waiting for successful status before failing.

Signed-off-by: Dimitri Sivanich <[email protected]>
___

drivers/dma/ioat/dma_v2.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

Index: linux/drivers/dma/ioat/dma_v2.c
===================================================================
--- linux.orig/drivers/dma/ioat/dma_v2.c
+++ linux/drivers/dma/ioat/dma_v2.c
@@ -507,6 +507,7 @@ int ioat2_alloc_chan_resources(struct dm
struct ioat_ring_ent **ring;
u64 status;
int order;
+ int i = 0;

/* have we already been set up? */
if (ioat->ring)
@@ -547,8 +548,11 @@ int ioat2_alloc_chan_resources(struct dm
ioat2_start_null_desc(ioat);

/* check that we got off the ground */
- udelay(5);
- status = ioat_chansts(chan);
+ do {
+ udelay(1);
+ status = ioat_chansts(chan);
+ } while (i++ < 20 && !is_ioat_active(status) && !is_ioat_idle(status));
+
if (is_ioat_active(status) || is_ioat_idle(status)) {
set_bit(IOAT_RUN, &chan->state);
return 1 << ioat->alloc_order;


2011-05-26 01:30:16

by Dan Williams

[permalink] [raw]
Subject: Re: [PATCH] x86: poll waiting for I/OAT DMA channel status

On Fri, May 6, 2011 at 8:33 AM, Dimitri Sivanich <[email protected]> wrote:
> For certain system configurations a 5 usec udelay before checking I/OAT DMA
> channel status is sometimes not sufficient, resulting in a false failure
> status and unnecessary freeing of channel resources. ?Conversely, for many
> configurations 5 usec is longer than necessary.
>
> Loop for up to 20 usec waiting for successful status before failing.
>
> Signed-off-by: Dimitri Sivanich <[email protected]>
> ___

Applied, but for future reference fix your scripts to use "---"
instead of "___" for the separator after the Signed-off-by otherwise
the diffstat information gets included in the changelog when apply the
patch with "git am".

--
Dan