[bug report] [media] adv7511: add new video encoder

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Hans Verkuil,

The patch 5a544cce2177: "[media] adv7511: add new video encoder" from
Aug 23, 2013 (linux-next), leads to the following Smatch static
checker warning:

	drivers/media/i2c/adv7511-v4l2.c:929 adv7511_isr()
	warn: sleeping in IRQ context

drivers/media/i2c/adv7511-v4l2.c
    912 static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)

This is a new check so I'm not positive I understand everything
correctly yet.  This looks at functions which are passed to
request_irq() and assumes that they are not threaded.  Also the "_isr"
here stands for Interrupt Service Routine.

    913 {
    914         u8 irq_status;
    915         u8 cec_irq;
    916 
    917         /* disable interrupts to prevent a race condition */
    918         adv7511_set_isr(sd, false);
    919         irq_status = adv7511_rd(sd, 0x96);
    920         cec_irq = adv7511_rd(sd, 0x97);
    921         /* clear detected interrupts */
    922         adv7511_wr(sd, 0x96, irq_status);
    923         adv7511_wr(sd, 0x97, cec_irq);
    924 
    925         v4l2_dbg(1, debug, sd, "%s: irq 0x%x, cec-irq 0x%x\n", __func__,
    926                  irq_status, cec_irq);
    927 
    928         if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
--> 929                 adv7511_check_monitor_present_status(sd);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
v4l2_ctrl_s_ctrl() takes a mutex so this is a sleeping function.

    930         if (irq_status & MASK_ADV7511_EDID_RDY_INT)
    931                 adv7511_check_edid_status(sd);
    932 
    933 #if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
    934         if (cec_irq & 0x38)
    935                 adv_cec_tx_raw_status(sd, cec_irq);
    936 
    937         if (cec_irq & 1) {
    938                 struct adv7511_state *state = get_adv7511_state(sd);
    939                 struct cec_msg msg;
    940 
    941                 msg.len = adv7511_cec_read(sd, 0x25) & 0x1f;
 
regards,
dan carpenter



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux