forked from Minki/linux
[media] s5p-jpeg: Fix lack of spin_lock protection
s5p_jpeg_device_run and s5p_jpeg_runtime_resume callbacks should have spin_lock protection as they alter device registers. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
f1347132a6
commit
b3c932a994
@ -930,7 +930,9 @@ static void s5p_jpeg_device_run(void *priv)
|
|||||||
struct s5p_jpeg_ctx *ctx = priv;
|
struct s5p_jpeg_ctx *ctx = priv;
|
||||||
struct s5p_jpeg *jpeg = ctx->jpeg;
|
struct s5p_jpeg *jpeg = ctx->jpeg;
|
||||||
struct vb2_buffer *src_buf, *dst_buf;
|
struct vb2_buffer *src_buf, *dst_buf;
|
||||||
unsigned long src_addr, dst_addr;
|
unsigned long src_addr, dst_addr, flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&ctx->jpeg->slock, flags);
|
||||||
|
|
||||||
src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
|
src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
|
||||||
dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
|
dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
|
||||||
@ -998,6 +1000,8 @@ static void s5p_jpeg_device_run(void *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
jpeg_start(jpeg->regs);
|
jpeg_start(jpeg->regs);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&ctx->jpeg->slock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int s5p_jpeg_job_ready(void *priv)
|
static int s5p_jpeg_job_ready(void *priv)
|
||||||
@ -1418,12 +1422,15 @@ static int s5p_jpeg_runtime_suspend(struct device *dev)
|
|||||||
static int s5p_jpeg_runtime_resume(struct device *dev)
|
static int s5p_jpeg_runtime_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct s5p_jpeg *jpeg = dev_get_drvdata(dev);
|
struct s5p_jpeg *jpeg = dev_get_drvdata(dev);
|
||||||
|
unsigned long flags;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = clk_prepare_enable(jpeg->clk);
|
ret = clk_prepare_enable(jpeg->clk);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&jpeg->slock, flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* JPEG IP allows storing two Huffman tables for each component
|
* JPEG IP allows storing two Huffman tables for each component
|
||||||
* We fill table 0 for each component
|
* We fill table 0 for each component
|
||||||
@ -1433,6 +1440,8 @@ static int s5p_jpeg_runtime_resume(struct device *dev)
|
|||||||
s5p_jpeg_set_hactbl(jpeg->regs);
|
s5p_jpeg_set_hactbl(jpeg->regs);
|
||||||
s5p_jpeg_set_hactblg(jpeg->regs);
|
s5p_jpeg_set_hactblg(jpeg->regs);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&jpeg->slock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user