1. 01 Dec, 2020 2 commits
    • Hans Verkuil's avatar
      media: pulse8-cec: fix duplicate free at disconnect or probe error · 024e01de
      Hans Verkuil authored
      Commit 601282d6 ("media: pulse8-cec: use adap_free callback") used
      the adap_free callback to clean up on disconnect. What I forgot was that
      in the probe it will call cec_delete_adapter() followed by kfree(pulse8)
      if an error occurs. But by using the adap_free callback,
      cec_delete_adapter() is already freeing the pulse8 struct.
      
      This wasn't noticed since normally the probe works fine, but Pulse-Eight
      published a new firmware version that caused a probe error, so now it
      hits this bug. This affects firmware version 12, but probably any
      version >= 10.
      
      Commit aa9eda76 ("media: pulse8-cec: close serio in disconnect, not
      adap_free") made this worse by adding the line 'pulse8->serio = NULL'
      right after the call to cec_unregister_adapter in the disconnect()
      function. Unfortunately, cec_unregister_adapter will typically call
      cec_delete_adapter (unless a filehandle to the cec device is still
      open), which frees the pulse8 struct. So now it will also crash on a
      simple unplug of the Pulse-Eight device.
      
      With this fix both the unplug issue and a probe() error situation are
      handled correctly again.
      
      It will still fail to probe() with a v12 firmware, that's something
      to look at separately.
      Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
      Reported-by: default avatarMaxime Ripard <mripard@kernel.org>
      Tested-by: default avatarMaxime Ripard <mripard@kernel.org>
      Fixes: aa9eda76 ("media: pulse8-cec: close serio in disconnect, not adap_free")
      Fixes: 601282d6 ("media: pulse8-cec: use adap_free callback")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      024e01de
    • Sean Young's avatar
      media: mtk-cir: fix calculation of chk period · d904eb0b
      Sean Young authored
      Since commit 528222d8 ("media: rc: harmonize infrared durations to
      microseconds"), the calculation of the chk period is wrong. As a result,
      all reported IR will have incorrect timings.
      
      Now that the calculations are done in microseconds rather than nanoseconds,
      we can fold the calculations in a simpler form with less rounding error.
      Tested-by: default avatarFrank Wunderlich <frank-w@public-files.de>
      Fixes: 528222d8 ("media: rc: harmonize infrared durations to microseconds")
      Signed-off-by: default avatarSean Young <sean@mess.org>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      d904eb0b
  2. 26 Nov, 2020 36 commits
  3. 16 Nov, 2020 2 commits
    • Stanimir Varbanov's avatar
      media: venus: pm_helpers: Fix kernel module reload · 9215f6bb
      Stanimir Varbanov authored
      After initial kernel module load during kernel boot and removing
      the module and try to load it again an Unable to handle kernel
      paging request is observed:
      
      Unable to handle kernel paging request at virtual address ffffa44f7416eae0
       Mem abort info:
         ESR = 0x96000047
         EC = 0x25: DABT (current EL), IL = 32 bits
         SET = 0, FnV = 0
         EA = 0, S1PTW = 0
       Data abort info:
         ISV = 0, ISS = 0x00000047
         CM = 0, WnR = 1
       swapper pgtable: 4k pages, 48-bit VAs, pgdp=000000008147c000
       [ffffa44f7416eae0] pgd=000000017df9f003, p4d=000000017df9f003,
       pud=000000017df9e003, pmd=000000017df9b003, pte=0000000000000000
       Internal error: Oops: 96000047 [#1] PREEMPT SMP
       Modules linked in: venus_core(+) snd_soc_wsa881x regmap_sdw af_alg
        snd_soc_wcd934x soundwire_qcom gpio_wcd934x q6asm_dai q6routing
        q6adm q6afe_dai snd_soc_hdmi_codec q6afe q6asm q6dsp_common q6cor
        display_connector rmtfs_mem drm ip_tables x_tables ipv6
        [last unloaded: venus_core]
       CPU: 6 PID: 889 Comm: modprobe Tainted: G        W      5.10.0-rc1+ #8
       Hardware name: Thundercomm Dragonboard 845c (DT)
       pstate: 80400085 (Nzcv daIf +PAN -UAO -TCO BTYPE=--)
       pc : queued_spin_lock_slowpath+0x1dc/0x3c8
       lr : do_raw_spin_lock+0xc0/0x118
       sp : ffff8000142cb7b0
       x29: ffff8000142cb7b0 x28: 0000000000000013
       x27: ffffa44f72de5690 x26: 0000000000000003
       x25: ffff17c2d00f8080 x24: ffff17c2c0d78010
       x23: ffff17c2c0d4f700 x22: ffff17c2d00f8080
       x21: 0000000000000000 x20: ffffa44f74148000
       x19: ffff17c2c0d4f8f8 x18: 0000000000000000
       x17: 0000000000000000 x16: ffffa44f7342f158
       x15: 0000000000000040 x14: ffffa44f746e8320
       x13: 0000000000000228 x12: 0000000000000020
       x11: 0000000000000000 x10: 00000000001c0000
       x9 : 0000000000000000 x8 : ffff17c33d746ac0
       x7 : ffff17c2c109b000 x6 : ffffa44f7416eac0
       x5 : ffff17c33d746ac0 x4 : 0000000000000000
       x3 : ffff17c2c0d4f8f8 x2 : ffffa44f7416eae0
       x1 : ffffa44f7416eae0 x0 : ffff17c33d746ac8
       Call trace:
        queued_spin_lock_slowpath+0x1dc/0x3c8
        do_raw_spin_lock+0xc0/0x118
        _raw_spin_lock_irqsave+0x80/0x14c
        __pm_runtime_resume+0x38/0xb8
        device_link_add+0x3b8/0x5d0
        core_get_v4+0x268/0x2d8 [venus_core]
        venus_probe+0x108/0x458 [venus_core]
        platform_drv_probe+0x54/0xa8
        really_probe+0xe4/0x3b0
        driver_probe_device+0x58/0xb8
        device_driver_attach+0x74/0x80
        __driver_attach+0x58/0xe8
        bus_for_each_dev+0x70/0xc0
        driver_attach+0x24/0x30
        bus_add_driver+0x150/0x1f8
        driver_register+0x64/0x120
        __platform_driver_register+0x48/0x58
        qcom_venus_driver_init+0x20/0x1000 [venus_core]
        do_one_initcall+0x84/0x458
        do_init_module+0x58/0x208
        load_module+0x1ec0/0x26a8
        __do_sys_finit_module+0xb8/0xf8
        __arm64_sys_finit_module+0x20/0x30
        el0_svc_common.constprop.0+0x7c/0x1c0
        do_el0_svc+0x24/0x90
        el0_sync_handler+0x180/0x188
        el0_sync+0x174/0x180
       Code: 91002100 8b0200c2 f861d884 aa0203e1 (f8246828)
       ---[ end trace f1f687c15fd6b2ca ]---
       note: modprobe[889] exited with preempt_count 1
      
      After revisit the OPP part of the code I found that OPP pmdomain
      is detached with direct call to dev_pm_domain_detach instead of
      OPP wraper for detaching pmdomains with OPP table. Correct this
      by calling the OPP dev_pm_opp_detach_genpd.
      
      Fixes: 9a538b83 ('media: venus: core: Add support for opp tables/perf voting')
      Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      9215f6bb
    • Stanimir Varbanov's avatar
      media: venus: venc: Fix setting of profile and level · a7a20f72
      Stanimir Varbanov authored
      The profile and level in op_set_ctrl was recently changed but during
      v4l2_ctrl_handler_setup profile and level control values are mangled.
      
      Fixes: 435c53c3 ("media: venus: venc: Use helper to set profile and level")
      Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      a7a20f72