1. 02 9月, 2014 1 次提交
    • C
      [media] media: fix kernel deadlock due to tuner pull-out while playing · 7a0af6ed
      Changbing Xiong 提交于
      Normally, ADAP_STREAMING bit is set in dvb_usb_start_feed and cleared in
      dvb_usb_stop_feed.
      
      But in exceptional cases, for example, when the tv is playing programs
      and the tuner is pulled out, then dvb_usbv2_disconnect is called.
      
      In such case, it will first call dvb_usbv2_adapter_frontend_exit to stop
      dvb_frontend_thread, and then call dvb_usbv2_adapter_dvb_exit to clear
      ADAP_STREAMING bit.
      
      At this point, if dvb_frontend_thread is sleeping and waiting for
      ADAP_STREAMING to be cleared to get out of sleep. then
      dvb_frontend_thread can never be stoped, because clearing ADAP_STREAMING
      bit is performed after dvb_frontend_thread is stopped (i.e. performed in
      dvb_usbv2_adapter_dvb_exit).
      
      So, deadlock:
      
      [  240.822037] INFO: task khubd:497 blocked for more than 120 seconds.
      [  240.822655] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      [  240.830493] khubd           D c0013b3c     0   497      2 0x00000000
      [  240.836996] [<c0013b3c>] (__schedule+0x200/0x54c) from [<c00110f4>] (schedule_timeout+0x14c/0x19c)
      [  240.845940] [<c00110f4>] (schedule_timeout+0x14c/0x19c) from [<c00137f4>] (wait_for_common+0xac/0x150)
      [  240.855234] [<c00137f4>] (wait_for_common+0xac/0x150) from [<c004989c>] (kthread_stop+0x58/0x90)
      [  240.864004] [<c004989c>] (kthread_stop+0x58/0x90) from [<c03b2ebc>] (dvb_frontend_stop+0x3c/0x9c)
      [  240.872849] [<c03b2ebc>] (dvb_frontend_stop+0x3c/0x9c) from [<c03b2f3c>] (dvb_unregister_frontend+0x20/0xd8)
      [  240.882666] [<c03b2f3c>] (dvb_unregister_frontend+0x20/0xd8) from [<c03ed938>] (dvb_usbv2_exit+0x68/0xfc)
      [  240.892204] [<c03ed938>] (dvb_usbv2_exit+0x68/0xfc) from [<c03eda18>] (dvb_usbv2_disconnect+0x4c/0x70)
      [  240.901499] [<c03eda18>] (dvb_usbv2_disconnect+0x4c/0x70) from [<c031c050>] (usb_unbind_interface+0x58/0x188)
      [  240.911395] [<c031c050>] (usb_unbind_interface+0x58/0x188) from [<c02c3e78>] (__device_release_driver+0x74/0xd0)
      [  240.921544] [<c02c3e78>] (__device_release_driver+0x74/0xd0) from [<c02c3ef0>] (device_release_driver+0x1c/0x28)
      [  240.931697] [<c02c3ef0>] (device_release_driver+0x1c/0x28) from [<c02c39b8>] (bus_remove_device+0xc4/0xe4)
      [  240.941332] [<c02c39b8>] (bus_remove_device+0xc4/0xe4) from [<c02c1344>] (device_del+0xf4/0x178)
      [  240.950106] [<c02c1344>] (device_del+0xf4/0x178) from [<c0319eb0>] (usb_disable_device+0xa0/0x1c8)
      [  240.959040] [<c0319eb0>] (usb_disable_device+0xa0/0x1c8) from [<c03128b4>] (usb_disconnect+0x88/0x188)
      [  240.968326] [<c03128b4>] (usb_disconnect+0x88/0x188) from [<c0313edc>] (hub_thread+0x4d0/0x1200)
      [  240.977100] [<c0313edc>] (hub_thread+0x4d0/0x1200) from [<c0049690>] (kthread+0xa4/0xb0)
      [  240.985174] [<c0049690>] (kthread+0xa4/0xb0) from [<c0009118>] (ret_from_fork+0x14/0x3c)
      [  240.993259] INFO: task kdvb-ad-0-fe-0:3256 blocked for more than 120 seconds.
      [  241.000349] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      [  241.008162] kdvb-ad-0-fe-0  D c0013b3c     0  3256      2 0x00000000
      [  241.014507] [<c0013b3c>] (__schedule+0x200/0x54c) from [<c03eda44>] (wait_schedule+0x8/0x10)
      [  241.022924] [<c03eda44>] (wait_schedule+0x8/0x10) from [<c001120c>] (__wait_on_bit+0x74/0xb8)
      [  241.031434] [<c001120c>] (__wait_on_bit+0x74/0xb8) from [<c00112b8>] (out_of_line_wait_on_bit+0x68/0x70)
      [  241.040902] [<c00112b8>] (out_of_line_wait_on_bit+0x68/0x70) from [<c03e5e88>] (dvb_usb_fe_sleep+0xf4/0xfc)
      [  241.050618] [<c03e5e88>] (dvb_usb_fe_sleep+0xf4/0xfc) from [<c03b4b74>] (dvb_frontend_thread+0x124/0x4e8)
      [  241.060164] [<c03b4b74>] (dvb_frontend_thread+0x124/0x4e8) from [<c0049690>] (kthread+0xa4/0xb0)
      [  241.068929] [<c0049690>] (kthread+0xa4/0xb0) from [<c0009118>] (ret_from_fork+0x14/0x3c)
      
      Fix it by calling dvb_usbv2_adapter_frontend_exit() latter.
      
      Test enviroment: odroidx2 + Hauppauge(WinTV-Aero-M)
      Signed-off-by: NChangbing Xiong <cb.xiong@samsung.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      7a0af6ed
  2. 27 8月, 2014 35 次提交
  3. 22 8月, 2014 4 次提交
    • R
      [media] media: ttpci: fix av7110 build to be compatible with CONFIG_INPUT_EVDEV · b250392f
      Randy Dunlap 提交于
      Fix build when CONFIG_INPUT_EVDEV=m and DVB_AV7110=y.
      Only build av7110_ir.c when CONFIG_INPUT_EVDEV is compatible with
      CONFIG_DVB_AV7110.
      
      Fixes these build errors:
      
      drivers/built-in.o: In function `input_sync':
      av7110_ir.c:(.text+0x1223ac): undefined reference to `input_event'
      drivers/built-in.o: In function `av7110_emit_key':
      av7110_ir.c:(.text+0x12247c): undefined reference to `input_event'
      av7110_ir.c:(.text+0x122495): undefined reference to `input_event'
      av7110_ir.c:(.text+0x122569): undefined reference to `input_event'
      av7110_ir.c:(.text+0x1225a7): undefined reference to `input_event'
      drivers/built-in.o:av7110_ir.c:(.text+0x122629): more undefined
      references to `input_event' follow
      drivers/built-in.o: In function `av7110_ir_init':
      (.text+0x1227e4): undefined reference to `input_allocate_device'
      drivers/built-in.o: In function `av7110_ir_init':
      (.text+0x12298f): undefined reference to `input_register_device'
      drivers/built-in.o: In function `av7110_ir_init':
      (.text+0x12299e): undefined reference to `input_free_device'
      drivers/built-in.o: In function `av7110_ir_exit':
      (.text+0x122a94): undefined reference to `input_unregister_device'
      
      drivers/built-in.o: In function `av7110_detach':
      av7110.c:(.text+0x228d4a): undefined reference to `av7110_ir_exit'
      drivers/built-in.o: In function `arm_thread':
      av7110.c:(.text+0x22a404): undefined reference to `av7110_check_ir_config'
      av7110.c:(.text+0x22a626): undefined reference to `av7110_check_ir_config'
      drivers/built-in.o: In function `av7110_attach':
      av7110.c:(.text+0x22b08c): undefined reference to `av7110_ir_init'
      Signed-off-by: NRandy Dunlap <rdunlap@infradead.org>
      Reported-by: NRandy Dunlap <rdunlap@infradead.org>
      Reported-by: NJim Davis <jim.epost@gmail.com>
      Reported-by: NFengguang Wu <fengguang.wu@intel.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      b250392f
    • M
      [media] usbtv: Make it dependent on ALSA · 85c1abcb
      Mauro Carvalho Chehab 提交于
      Now that alsa code is part of the driver, it can be compiled
      only if alsa is enabled.
      
         drivers/built-in.o: In function `snd_usbtv_hw_free':
      >> usbtv-audio.c:(.text+0x21eb55): undefined reference to `snd_pcm_lib_free_pages'
         drivers/built-in.o: In function `snd_usbtv_hw_params':
      >> usbtv-audio.c:(.text+0x21eb72): undefined reference to `snd_pcm_lib_malloc_pages'
         drivers/built-in.o: In function `usbtv_audio_urb_received':
      >> usbtv-audio.c:(.text+0x21ed66): undefined reference to `snd_pcm_link_rwlock'
      >> usbtv-audio.c:(.text+0x21ed9f): undefined reference to `snd_pcm_link_rwlock'
      >> usbtv-audio.c:(.text+0x21edf5): undefined reference to `snd_pcm_period_elapsed'
         drivers/built-in.o: In function `usbtv_audio_init':
      >> (.text+0x21f00a): undefined reference to `snd_card_new'
         drivers/built-in.o: In function `usbtv_audio_init':
      >> (.text+0x21f0a2): undefined reference to `snd_pcm_new'
         drivers/built-in.o: In function `usbtv_audio_init':
      >> (.text+0x21f0e5): undefined reference to `snd_pcm_set_ops'
         drivers/built-in.o: In function `usbtv_audio_init':
      >> (.text+0x21f103): undefined reference to `snd_pcm_lib_preallocate_pages_for_all'
         drivers/built-in.o: In function `usbtv_audio_init':
      >> (.text+0x21f10c): undefined reference to `snd_card_register'
         drivers/built-in.o: In function `usbtv_audio_init':
      >> (.text+0x21f12a): undefined reference to `snd_card_free'
         drivers/built-in.o: In function `usbtv_audio_free':
      >> (.text+0x21f15c): undefined reference to `snd_card_free'
      >> drivers/built-in.o:(.data+0x43250): undefined reference to `snd_pcm_lib_ioctl'
      Reported-by: Nkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      85c1abcb
    • S
      [media] media: fix au0828 dvb suspend/resume to call dvb_frontend_suspend/resume · 66cae530
      Shuah Khan 提交于
      au0828 doesn't resume correctly and TV tuning fails with
      xc_set_signal_source(0) failed message. Change au0828 dvb
      suspend and resume interfaces to suspend and resume frontend
      during suspend and resume respectively. dvb_frontend_suspend()
      suspends tuner and fe using tuner and fe ops. dvb_frontend_resume()
      resumes fe and tuner using fe and tuner ops ini before waking up
      the frontend. With this change HVR950Q suspend and resume work
      when system gets suspended when digital function is tuned to a
      channel and with active TV stream, and after resume it went right
      back to active TV stream.
      Signed-off-by: NShuah Khan <shuah.kh@samsung.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      66cae530
    • F
      [media] em28xx-v4l: fix video buffer field order reporting in progressive mode · 662c97cf
      Frank Schaefer 提交于
      The correct field order in progressive mode is V4L2_FIELD_NONE, not V4L2_FIELD_INTERLACED.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NFrank Schäfer <fschaefer.oss@googlemail.com>
      Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
      662c97cf