Skip to content

Commit

Permalink
V4L/DVB (13433): cx18: Remove duplicate list traversal when processin…
Browse files Browse the repository at this point in the history
…g incoming MDLs

Update the incoming MDL's buffers' bytesused and sync the buffers for the cpu
in one pass instead of two.

Signed-off-by: Andy Walls <awalls@radix.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Andy Walls authored and Mauro Carvalho Chehab committed Dec 5, 2009
1 parent 127ce5f commit ad689d5
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 32 deletions.
27 changes: 8 additions & 19 deletions drivers/media/video/cx18/cx18-queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ struct cx18_mdl *cx18_dequeue(struct cx18_stream *s, struct cx18_queue *q)
return mdl;
}

static void _cx18_mdl_set_buf_bytesused(struct cx18_stream *s,
struct cx18_mdl *mdl)
static void _cx18_mdl_update_bufs_for_cpu(struct cx18_stream *s,
struct cx18_mdl *mdl)
{
struct cx18_buffer *buf;
u32 buf_size = s->buf_size;
Expand All @@ -116,11 +116,12 @@ static void _cx18_mdl_set_buf_bytesused(struct cx18_stream *s,
buf->bytesused = bytesused;
bytesused = 0;
}
cx18_buf_sync_for_cpu(s, buf);
}
}

static inline void cx18_mdl_set_buf_bytesused(struct cx18_stream *s,
struct cx18_mdl *mdl)
static inline void cx18_mdl_update_bufs_for_cpu(struct cx18_stream *s,
struct cx18_mdl *mdl)
{
struct cx18_buffer *buf;

Expand All @@ -129,8 +130,9 @@ static inline void cx18_mdl_set_buf_bytesused(struct cx18_stream *s,
list);
buf->bytesused = mdl->bytesused;
buf->readpos = 0;
cx18_buf_sync_for_cpu(s, buf);
} else {
_cx18_mdl_set_buf_bytesused(s, mdl);
_cx18_mdl_update_bufs_for_cpu(s, mdl);
}
}

Expand Down Expand Up @@ -191,8 +193,7 @@ struct cx18_mdl *cx18_queue_get_mdl(struct cx18_stream *s, u32 id,
ret->bytesused = bytesused;
ret->skipped = 0;
/* 0'ed readpos, m_flags & curr_buf when mdl went on q_busy */
cx18_mdl_set_buf_bytesused(s, ret);
cx18_mdl_sync_for_cpu(s, ret);
cx18_mdl_update_bufs_for_cpu(s, ret);
if (s->type != CX18_ENC_STREAM_TYPE_TS)
set_bit(CX18_F_M_NEED_SWAP, &ret->m_flags);
}
Expand Down Expand Up @@ -331,18 +332,6 @@ void cx18_load_queues(struct cx18_stream *s)
}
}

void _cx18_mdl_sync_for_cpu(struct cx18_stream *s, struct cx18_mdl *mdl)
{
int dma = s->dma;
u32 buf_size = s->buf_size;
struct pci_dev *pci_dev = s->cx->pci_dev;
struct cx18_buffer *buf;

list_for_each_entry(buf, &mdl->buf_list, list)
pci_dma_sync_single_for_cpu(pci_dev, buf->dma_handle,
buf_size, dma);
}

void _cx18_mdl_sync_for_device(struct cx18_stream *s, struct cx18_mdl *mdl)
{
int dma = s->dma;
Expand Down
13 changes: 0 additions & 13 deletions drivers/media/video/cx18/cx18-queue.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,6 @@ static inline void cx18_buf_sync_for_cpu(struct cx18_stream *s,
s->buf_size, s->dma);
}

void _cx18_mdl_sync_for_cpu(struct cx18_stream *s, struct cx18_mdl *mdl);

static inline void cx18_mdl_sync_for_cpu(struct cx18_stream *s,
struct cx18_mdl *mdl)
{
if (list_is_singular(&mdl->buf_list))
cx18_buf_sync_for_cpu(s, list_first_entry(&mdl->buf_list,
struct cx18_buffer,
list));
else
_cx18_mdl_sync_for_cpu(s, mdl);
}

static inline void cx18_buf_sync_for_device(struct cx18_stream *s,
struct cx18_buffer *buf)
{
Expand Down

0 comments on commit ad689d5

Please sign in to comment.