Hi,

This patch does not apply to the current media tree.

commit cf3167cf1e969b17671a4d3d956d22718a8ceb85)
Author: Antti Palosaari <cr...@iki.fi>
Date:   Fri Sep 26 22:45:36 2014 -0300

    [media] pt3: fix DTV FE I2C driver load error paths
    
Best wishes,
-- 
Kamil Debski
Samsung R&D Institute Poland


> -----Original Message-----
> From: Kiran AVND [mailto:avnd.ki...@samsung.com]
> Sent: Friday, September 26, 2014 6:52 AM
> To: linux-media@vger.kernel.org
> Cc: k.deb...@samsung.com; wuchen...@chromium.org; posc...@chromium.org;
> aru...@samsung.com; i...@chromium.org; prathyus...@samsung.com;
> arun...@samsung.com; ki...@chromium.org
> Subject: [PATCH v2 07/14] [media] s5p-mfc: Don't crash the kernel if
> the watchdog kicks in.
> 
> From: Pawel Osciak <posc...@chromium.org>
> 
> If the software watchdog kicks in, the watchdog worker is not
> synchronized with hardware interrupts and does not block other
> instances. It's possible for it to clear the hw_lock, making other
> instances trigger a BUG() on hw_lock checks. Since it's not fatal to
> clear the hw_lock to zero twice, just WARN in those cases for now. We
> should not explode, as firmware will return errors as needed for other
> instances after it's reloaded, or they will time out.
> 
> A clean fix should involve killing other instances when watchdog kicks
> in, but requires a major redesign of locking in the driver.
> 
> Signed-off-by: Pawel Osciak <posc...@chromium.org>
> Signed-off-by: Kiran AVND <avnd.ki...@samsung.com>
> ---
>  drivers/media/platform/s5p-mfc/s5p_mfc.c |   25 +++++++---------------
> ---
>  1 file changed, 7 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c
> b/drivers/media/platform/s5p-mfc/s5p_mfc.c
> index 3fc2f8a..8d5da0c 100644
> --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
> +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
> @@ -337,8 +337,7 @@ static void s5p_mfc_handle_frame(struct s5p_mfc_ctx
> *ctx,
>               ctx->state = MFCINST_RES_CHANGE_INIT;
>               s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
>               wake_up_ctx(ctx, reason, err);
> -             if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -                     BUG();
> +             WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>               s5p_mfc_clock_off();
>               s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
>               return;
> @@ -410,8 +409,7 @@ leave_handle_frame:
>               clear_work_bit(ctx);
>       s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
>       wake_up_ctx(ctx, reason, err);
> -     if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -             BUG();
> +     WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>       s5p_mfc_clock_off();
>       /* if suspending, wake up device and do not try_run again*/
>       if (test_bit(0, &dev->enter_suspend))
> @@ -458,8 +456,7 @@ static void s5p_mfc_handle_error(struct s5p_mfc_dev
> *dev,
>                       break;
>               }
>       }
> -     if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -             BUG();
> +     WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>       s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
>       s5p_mfc_clock_off();
>       wake_up_dev(dev, reason, err);
> @@ -513,8 +510,7 @@ static void s5p_mfc_handle_seq_done(struct
> s5p_mfc_ctx *ctx,
>       }
>       s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
>       clear_work_bit(ctx);
> -     if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -             BUG();
> +     WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>       s5p_mfc_clock_off();
>       s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
>       wake_up_ctx(ctx, reason, err);
> @@ -552,19 +548,13 @@ static void s5p_mfc_handle_init_buffers(struct
> s5p_mfc_ctx *ctx,
>               } else {
>                       ctx->dpb_flush_flag = 0;
>               }
> -             if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -                     BUG();
> -
> +             WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>               s5p_mfc_clock_off();
> -
>               wake_up(&ctx->queue);
>               s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
>       } else {
> -             if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -                     BUG();
> -
> +             WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>               s5p_mfc_clock_off();
> -
>               wake_up(&ctx->queue);
>       }
>  }
> @@ -638,8 +628,7 @@ static irqreturn_t s5p_mfc_irq(int irq, void *priv)
>                               mfc_err("post_frame_start() failed\n");
>                       s5p_mfc_hw_call(dev->mfc_ops, clear_int_flags, dev);
>                       wake_up_ctx(ctx, reason, err);
> -                     if (test_and_clear_bit(0, &dev->hw_lock) == 0)
> -                             BUG();
> +                     WARN_ON(test_and_clear_bit(0, &dev->hw_lock) == 0);
>                       s5p_mfc_clock_off();
>                       s5p_mfc_hw_call(dev->mfc_ops, try_run, dev);
>               } else {
> --
> 1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to