[Sound-open-firmware] [PATCH v2 2/2] Do not check trace buffer fullness while a

yanwang yan.wang at linux.intel.com
Tue Dec 5 11:46:54 CET 2017


Hi, Liam,
	I have renamed it as v3.
	Thanks.

Yan Wang

On Tue, 2017-12-05 at 10:02 +0000, Liam Girdwood wrote:
> On Tue, 2017-12-05 at 15:09 +0800, yan.wang at linux.intel.com wrote:
> > 
> > From: Yan Wang <yan.wang at linux.intel.com>
> > 
> > The purpose of checking half fullness is sending trace data as soon
> > as 
> > possible. It will avoid local DMA trace buffer full and unsent
> > trace
> > data 
> > overwritten.
> > If DMA trace copying is running currently, it is unnecessary to
> > checking 
> > half fullness local DMA trace buffer.
> > 
> > The following is implementation details:
> > 1. Add one flag in DMA trace data strcuture.
> > 2. Set/unset this flag in trace_work() callback.
> > 3. Add checking for this flag in dtrace_event().
> > 
> > Signed-off-by: Yan Wang <yan.wang at linux.intel.com>
> > ---
> >  src/include/reef/dma-trace.h |  1 +
> >  src/lib/dma-trace.c          | 17 +++++++++++++++++
> >  2 files changed, 18 insertions(+)
> > 
> > diff --git a/src/include/reef/dma-trace.h b/src/include/reef/dma-
> > trace.h
> > index 641a4dc..21824f3 100644
> > --- a/src/include/reef/dma-trace.h
> > +++ b/src/include/reef/dma-trace.h
> > @@ -60,6 +60,7 @@ struct dma_trace_data {
> >  	uint32_t host_size;
> >  	struct work dmat_work;
> >  	uint32_t enabled;
> > +	uint32_t dmat_work_flag;
> 
> Best to rename this as copy_in_progress.
> 
> > 
> >  	spinlock_t lock;
> >  };
> >  
> > diff --git a/src/lib/dma-trace.c b/src/lib/dma-trace.c
> > index 763e955..9dfe7c7 100644
> > --- a/src/lib/dma-trace.c
> > +++ b/src/lib/dma-trace.c
> > @@ -56,6 +56,9 @@ static uint64_t trace_work(void *data, uint64_t
> > delay)
> >  	if (avail == 0)
> >  		return DMA_TRACE_US;
> >  
> > +	/* DMA trace copying is working */
> > +	d->dmat_work_flag = 1;
> > +
> >  	/* make sure we dont write more than buffer */
> >  	if (avail > DMA_TRACE_LOCAL_SIZE)
> >  		avail = DMA_TRACE_LOCAL_SIZE;
> > @@ -100,7 +103,12 @@ static uint64_t trace_work(void *data,
> > uint64_t
> > delay)
> >  
> >  out:
> >  	spin_lock_irq(&d->lock, flags);
> > +
> >  	buffer->avail -= size;
> > +
> > +	/* DMA trace copying is done */
> > +	d->dmat_work_flag = 0;
> > +
> >  	spin_unlock_irq(&d->lock, flags);
> >  
> >  	/* reschedule the trace copying work */
> > @@ -138,6 +146,7 @@ int dma_trace_init(struct dma_trace_data *d)
> >  	buffer->avail = 0;
> >  	d->host_offset = 0;
> >  	d->enabled = 0;
> > +	d->dmat_work_flag = 0;
> >  
> >  	list_init(&d->config.elem_list);
> >  	work_init(&d->dmat_work, trace_work, d, WORK_ASYNC);
> > @@ -226,6 +235,14 @@ void dtrace_event(const char *e, uint32_t
> > length)
> >  
> >  	spin_lock_irq(&trace_data->lock, flags);
> >  	dtrace_add_event(e, length);
> > +
> > +	/* if DMA trace copying is working */
> > +	/* don't check if local buffer is half full */
> > +	if (trace_data->dmat_work_flag) {
> > +		spin_unlock_irq(&trace_data->lock, flags);
> > +		return;
> > +	}
> > +
> >  	spin_unlock_irq(&trace_data->lock, flags);
> >  
> >  	/* schedule copy now if buffer > 50% full */
> ---------------------------------------------------------------------
> Intel Corporation (UK) Limited
> Registered No. 1134945 (England)
> Registered Office: Pipers Way, Swindon SN3 1RJ
> VAT No: 860 2173 47
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
> _______________________________________________
> Sound-open-firmware mailing list
> Sound-open-firmware at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/sound-open-firmware


More information about the Sound-open-firmware mailing list