Patchwork [v1,1/1] xilinx_axidma: Do not set DMA .notify to NULL after notify

login
register
mail settings
Submitter Peter Crosthwaite
Date June 7, 2013, 3:05 a.m.
Message ID <c09de8a7bc669239a1c2f87594d29076fdb49491.1370573523.git.peter.crosthwaite@xilinx.com>
Download mbox | patch
Permalink /patch/249587/
State New
Headers show

Comments

Peter Crosthwaite - June 7, 2013, 3:05 a.m.
From: Wendy Liang <jliang@xilinx.com>

If a stream notify function is not ready, it may re-populate the notify call-
back to indicate it should be re-polled later. This break in this usage, as
immediately following the notify() call, .notify is set to NULL. reverse the
ordering of the notify call and NULL assignment accordingly.

[PC: Reworked commit message]

Signed-off-by: Wendy Liang <jliang@xilinx.com>
Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
---
 hw/dma/xilinx_axidma.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Edgar Iglesias - June 10, 2013, 11:10 a.m.
On Fri, Jun 07, 2013 at 01:05:38PM +1000, peter.crosthwaite@xilinx.com wrote:
> From: Wendy Liang <jliang@xilinx.com>
> 
> If a stream notify function is not ready, it may re-populate the notify call-
> back to indicate it should be re-polled later. This break in this usage, as
> immediately following the notify() call, .notify is set to NULL. reverse the
> ordering of the notify call and NULL assignment accordingly.
> 
> [PC: Reworked commit message]
> 
> Signed-off-by: Wendy Liang <jliang@xilinx.com>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>


Applied master, thanks Wendy and Peter.

ACK for stable.
Acked-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>


> ---
>  hw/dma/xilinx_axidma.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
> index 3a3ef8a..50054cf 100644
> --- a/hw/dma/xilinx_axidma.c
> +++ b/hw/dma/xilinx_axidma.c
> @@ -514,8 +514,9 @@ static void axidma_write(void *opaque, hwaddr addr,
>              break;
>      }
>      if (sid == 1 && d->notify) {
> -        d->notify(d->notify_opaque);
> +        StreamCanPushNotifyFn notifytmp = d->notify;
>          d->notify = NULL;
> +        notifytmp(d->notify_opaque);
>      }
>      stream_update_irq(s);
>  }
> -- 
> 1.8.3.rc1.44.gb387c77.dirty
>

Patch

diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index 3a3ef8a..50054cf 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -514,8 +514,9 @@  static void axidma_write(void *opaque, hwaddr addr,
             break;
     }
     if (sid == 1 && d->notify) {
-        d->notify(d->notify_opaque);
+        StreamCanPushNotifyFn notifytmp = d->notify;
         d->notify = NULL;
+        notifytmp(d->notify_opaque);
     }
     stream_update_irq(s);
 }