Commit b3c932a9 authored by Jacek Anaszewski's avatar Jacek Anaszewski Committed by Mauro Carvalho Chehab

[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: default avatarJacek Anaszewski <j.anaszewski@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Acked-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent f1347132
...@@ -930,7 +930,9 @@ static void s5p_jpeg_device_run(void *priv) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment