提交 ae7410e7 编写于 作者: G Guennadi Liakhovetski 提交者: Mauro Carvalho Chehab

V4L/DVB (11323): pxa-camera: simplify the .buf_queue path by merging two loops

pxa_dma_update_sg_tail() is called only once, runs exactly the same loop as the
caller and has to recalculate the last element in an sg-list, that the caller
has already calculated. Eliminate redundancy by merging the two loops and
re-using the calculated pointer. This also saves a bit of performance which is
always good during video-capture.
Signed-off-by: NGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: NRobert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 8c62e221
......@@ -566,15 +566,6 @@ static void pxa_dma_stop_channels(struct pxa_camera_dev *pcdev)
}
}
static void pxa_dma_update_sg_tail(struct pxa_camera_dev *pcdev,
struct pxa_buffer *buf)
{
int i;
for (i = 0; i < pcdev->channels; i++)
pcdev->sg_tail[i] = buf->dmas[i].sg_cpu + buf->dmas[i].sglen;
}
static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,
struct pxa_buffer *buf)
{
......@@ -585,12 +576,13 @@ static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,
buf_last_desc = buf->dmas[i].sg_cpu + buf->dmas[i].sglen;
buf_last_desc->ddadr = DDADR_STOP;
if (!pcdev->sg_tail[i])
continue;
pcdev->sg_tail[i]->ddadr = buf->dmas[i].sg_dma;
}
if (pcdev->sg_tail[i])
/* Link the new buffer to the old tail */
pcdev->sg_tail[i]->ddadr = buf->dmas[i].sg_dma;
pxa_dma_update_sg_tail(pcdev, buf);
/* Update the channel tail */
pcdev->sg_tail[i] = buf_last_desc;
}
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册