01 Oct, 2020

2 commits

  • [ Upstream commit 3f4943d422c5febbb3c764670011a00eb2a86238 ]

    etm probe could be deferred due to the dependency in the trace
    path chain and may be retried. We need to clear the per-cpu
    etmdrvdata entry for the etm in case of a failure to avoid
    use-after-free cases as reported below:

    KASAN use-after-free bug in etm4_cpu_pm_notify():

    [ 8.574566] coresight etm0: CPU0: ETM v4.2 initialized
    [ 8.581920] BUG: KASAN: use-after-free in etm4_cpu_pm_notify+0x580/0x2024
    [ 8.581925] Read of size 8 at addr ffffff813304f8c8 by task swapper/3/0
    [ 8.581927]
    [ 8.581934] CPU: 3 PID: 0 Comm: swapper/3 Tainted: G S W 5.4.28 #314
    [ 8.587775] coresight etm1: CPU1: ETM v4.2 initialized
    [ 8.594195] Call trace:
    [ 8.594205] dump_backtrace+0x0/0x188
    [ 8.594209] show_stack+0x20/0x2c
    [ 8.594216] dump_stack+0xdc/0x144
    [ 8.594227] print_address_description+0x3c/0x494
    [ 8.594232] __kasan_report+0x144/0x168
    [ 8.601598] coresight etm2: CPU2: ETM v4.2 initialized
    [ 8.602563] kasan_report+0x10/0x18
    [ 8.602568] check_memory_region+0x1a4/0x1b4
    [ 8.602572] __kasan_check_read+0x18/0x24
    [ 8.602577] etm4_cpu_pm_notify+0x580/0x2024
    [ 8.665945] notifier_call_chain+0x5c/0x90
    [ 8.670166] __atomic_notifier_call_chain+0x90/0xf8
    [ 8.675182] cpu_pm_notify+0x40/0x6c
    [ 8.678858] cpu_pm_enter+0x38/0x80
    [ 8.682451] psci_enter_idle_state+0x34/0x70
    [ 8.686844] cpuidle_enter_state+0xb8/0x20c
    [ 8.691143] cpuidle_enter+0x38/0x4c
    [ 8.694820] call_cpuidle+0x3c/0x68
    [ 8.698408] do_idle+0x1a0/0x280
    [ 8.701729] cpu_startup_entry+0x24/0x28
    [ 8.705768] secondary_start_kernel+0x15c/0x170
    [ 8.710423]
    [ 8.711972] Allocated by task 242:
    [ 8.715473] __kasan_kmalloc+0xf0/0x1ac
    [ 8.719426] kasan_slab_alloc+0x14/0x1c
    [ 8.723375] __kmalloc_track_caller+0x23c/0x388
    [ 8.728040] devm_kmalloc+0x38/0x94
    [ 8.731632] etm4_probe+0x48/0x3c8
    [ 8.735140] amba_probe+0xbc/0x158
    [ 8.738645] really_probe+0x144/0x408
    [ 8.742412] driver_probe_device+0x70/0x140
    [ 8.746716] __device_attach_driver+0x9c/0x110
    [ 8.751287] bus_for_each_drv+0x90/0xd8
    [ 8.755236] __device_attach+0xb4/0x164
    [ 8.759188] device_initial_probe+0x20/0x2c
    [ 8.763490] bus_probe_device+0x34/0x94
    [ 8.767436] device_add+0x34c/0x3e0
    [ 8.771029] amba_device_try_add+0x68/0x440
    [ 8.775332] amba_deferred_retry_func+0x48/0xc8
    [ 8.779997] process_one_work+0x344/0x648
    [ 8.784127] worker_thread+0x2ac/0x47c
    [ 8.787987] kthread+0x128/0x138
    [ 8.791313] ret_from_fork+0x10/0x18
    [ 8.794993]
    [ 8.796532] Freed by task 242:
    [ 8.799684] __kasan_slab_free+0x15c/0x22c
    [ 8.803897] kasan_slab_free+0x10/0x1c
    [ 8.807761] kfree+0x25c/0x4bc
    [ 8.810913] release_nodes+0x240/0x2b0
    [ 8.814767] devres_release_all+0x3c/0x54
    [ 8.818887] really_probe+0x178/0x408
    [ 8.822661] driver_probe_device+0x70/0x140
    [ 8.826963] __device_attach_driver+0x9c/0x110
    [ 8.831539] bus_for_each_drv+0x90/0xd8
    [ 8.835487] __device_attach+0xb4/0x164
    [ 8.839431] device_initial_probe+0x20/0x2c
    [ 8.843732] bus_probe_device+0x34/0x94
    [ 8.847678] device_add+0x34c/0x3e0
    [ 8.851274] amba_device_try_add+0x68/0x440
    [ 8.855576] amba_deferred_retry_func+0x48/0xc8
    [ 8.860240] process_one_work+0x344/0x648
    [ 8.864366] worker_thread+0x2ac/0x47c
    [ 8.868228] kthread+0x128/0x138
    [ 8.871557] ret_from_fork+0x10/0x18
    [ 8.875231]
    [ 8.876782] The buggy address belongs to the object at ffffff813304f800
    [ 8.876782] which belongs to the cache kmalloc-1k of size 1024
    [ 8.889632] The buggy address is located 200 bytes inside of
    [ 8.889632] 1024-byte region [ffffff813304f800, ffffff813304fc00)
    [ 8.901761] The buggy address belongs to the page:
    [ 8.906695] page:ffffffff04ac1200 refcount:1 mapcount:0 mapping:ffffff8146c03800 index:0x0 compound_mapcount: 0
    [ 8.917047] flags: 0x4000000000010200(slab|head)
    [ 8.921799] raw: 4000000000010200 dead000000000100 dead000000000122 ffffff8146c03800
    [ 8.929753] raw: 0000000000000000 0000000000100010 00000001ffffffff 0000000000000000
    [ 8.937703] page dumped because: kasan: bad access detected
    [ 8.943433]
    [ 8.944974] Memory state around the buggy address:
    [ 8.949903] ffffff813304f780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [ 8.957320] ffffff813304f800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 8.964742] >ffffff813304f880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 8.972157] ^
    [ 8.977886] ffffff813304f900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 8.985298] ffffff813304f980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [ 8.992713] ==================================================================

    Fixes: f188b5e76aae ("coresight: etm4x: Save/restore state across CPU low power states")
    Reported-by: Sai Prakash Ranjan
    Tested-by: Sai Prakash Ranjan
    Cc: Mathieu Poirier
    Cc: Mike Leach
    Signed-off-by: Suzuki K Poulose
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20200518180242.7916-22-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Suzuki K Poulose
     
  • [ Upstream commit 397c7729665a3b07a7b4ce7215173df8e9112809 ]

    Some versions of Intel TH have an issue that prevents the multi mode of
    MSU from working correctly, resulting in no trace data and potentially
    stuck MSU pipeline.

    Disable multi mode on such devices.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Link: https://lore.kernel.org/r/20200317062215.15598-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Alexander Shishkin
     

19 Aug, 2020

1 commit

  • [ Upstream commit d021f5c5ff679432c5e9faee0fd7350db2efb97c ]

    Reading TMC mode register without proper coresight power
    management can lead to exceptions like the one in the call
    trace below in tmc_read_unprepare_etb() when the trace data
    is read after the sink is disabled. So fix this by having
    a check for coresight sysfs mode before reading TMC mode
    management register in tmc_read_unprepare_etb() similar to
    tmc_read_prepare_etb().

    SError Interrupt on CPU6, code 0xbe000411 -- SError
    pstate: 80400089 (Nzcv daIf +PAN -UAO)
    pc : tmc_read_unprepare_etb+0x74/0x108
    lr : tmc_read_unprepare_etb+0x54/0x108
    sp : ffffff80d9507c30
    x29: ffffff80d9507c30 x28: ffffff80b3569a0c
    x27: 0000000000000000 x26: 00000000000a0001
    x25: ffffff80cbae9550 x24: 0000000000000010
    x23: ffffffd07296b0f0 x22: ffffffd0109ee028
    x21: 0000000000000000 x20: ffffff80d19e70e0
    x19: ffffff80d19e7080 x18: 0000000000000000
    x17: 0000000000000000 x16: 0000000000000000
    x15: 0000000000000000 x14: 0000000000000000
    x13: 0000000000000000 x12: 0000000000000000
    x11: 0000000000000000 x10: dfffffd000000001
    x9 : 0000000000000000 x8 : 0000000000000002
    x7 : ffffffd071d0fe78 x6 : 0000000000000000
    x5 : 0000000000000080 x4 : 0000000000000001
    x3 : ffffffd071d0fe98 x2 : 0000000000000000
    x1 : 0000000000000004 x0 : 0000000000000001
    Kernel panic - not syncing: Asynchronous SError Interrupt

    Fixes: 4525412a5046 ("coresight: tmc: making prepare/unprepare functions generic")
    Reported-by: Mike Leach
    Signed-off-by: Sai Prakash Ranjan
    Tested-by: Mike Leach
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20200716175746.3338735-14-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Sai Prakash Ranjan
     

22 Jul, 2020

4 commits

  • commit e78e1fdb282726beaf88aa75943682217e6ded0e upstream.

    Connecting master to an output port when GTH driver module is not loaded
    triggers a NULL dereference:

    > RIP: 0010:intel_th_set_output+0x35/0x70 [intel_th]
    > Call Trace:
    > ? sth_stm_link+0x12/0x20 [intel_th_sth]
    > stm_source_link_store+0x164/0x270 [stm_core]
    > dev_attr_store+0x17/0x30
    > sysfs_kf_write+0x3e/0x50
    > kernfs_fop_write+0xda/0x1b0
    > __vfs_write+0x1b/0x40
    > vfs_write+0xb9/0x1a0
    > ksys_write+0x67/0xe0
    > __x64_sys_write+0x1a/0x20
    > do_syscall_64+0x57/0x1d0
    > entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Make sure the module in question is loaded and return an error if not.

    Signed-off-by: Alexander Shishkin
    Fixes: 39f4034693b7c ("intel_th: Add driver infrastructure for Intel(R) Trace Hub devices")
    Reviewed-by: Andy Shevchenko
    Reported-by: Ammy Yi
    Tested-by: Ammy Yi
    Cc: stable@vger.kernel.org # v4.4
    Link: https://lore.kernel.org/r/20200706161339.55468-5-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit fd73d74a32bfaaf259441322cc5a1c83caaa94f2 upstream.

    This adds support for the Trace Hub in Emmitsburg PCH.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org # v4.14+
    Link: https://lore.kernel.org/r/20200706161339.55468-4-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 6227585dc7b6a5405fc08dc322f98cb95e2f0eb4 upstream.

    This adds support for the Trace Hub in Tiger Lake PCH-H.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org # v4.14+
    Link: https://lore.kernel.org/r/20200706161339.55468-3-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 203c1f615052921901b7a8fbe2005d8ea6add076 upstream.

    This adds support for the Trace Hub in Jasper Lake CPU.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org # v4.14+
    Link: https://lore.kernel.org/r/20200706161339.55468-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     

24 Jun, 2020

1 commit

  • [ Upstream commit 347adb0d6385c3220dc01ab61807a5b1892901cc ]

    On some QCOM platforms like SC7180, SDM845 and SM8150,
    reading TMC mode register without proper coresight power
    management can lead to async exceptions like the one in
    the call trace below in tmc_read_prepare_etb(). This can
    happen if the user tries to read the TMC etf data via
    device node without setting up source and the sink first.
    Fix this by having a check for coresight sysfs mode
    before reading TMC mode management register.

    Kernel panic - not syncing: Asynchronous SError Interrupt
    CPU: 7 PID: 2605 Comm: hexdump Tainted: G S 5.4.30 #122
    Call trace:
    dump_backtrace+0x0/0x188
    show_stack+0x20/0x2c
    dump_stack+0xdc/0x144
    panic+0x168/0x36c
    panic+0x0/0x36c
    arm64_serror_panic+0x78/0x84
    do_serror+0x130/0x138
    el1_error+0x84/0xf8
    tmc_read_prepare_etb+0x88/0xb8
    tmc_open+0x40/0xd8
    misc_open+0x120/0x158
    chrdev_open+0xb8/0x1a4
    do_dentry_open+0x268/0x3a0
    vfs_open+0x34/0x40
    path_openat+0x39c/0xdf4
    do_filp_open+0x90/0x10c
    do_sys_open+0x150/0x3e8
    __arm64_compat_sys_openat+0x28/0x34
    el0_svc_common+0xa8/0x160
    el0_svc_compat_handler+0x2c/0x38
    el0_svc_compat+0x8/0x10

    Fixes: 4525412a5046 ("coresight: tmc: making prepare/unprepare functions generic")
    Reported-by: Stephen Boyd
    Suggested-by: Mathieu Poirier
    Signed-off-by: Sai Prakash Ranjan
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20200518180242.7916-14-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Sasha Levin

    Sai Prakash Ranjan
     

25 Mar, 2020

4 commits

  • commit 283f87c0d5d32b4a5c22636adc559bca82196ed3 upstream.

    The operands of time_after() are in a wrong order in both instances in
    the sys-t driver. Fix that.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Fixes: 39f10239df75 ("stm class: p_sys-t: Add support for CLOCKSYNC packets")
    Fixes: d69d5e83110f ("stm class: Add MIPI SyS-T protocol support")
    Cc: stable@vger.kernel.org # v4.20+
    Link: https://lore.kernel.org/r/20200317062215.15598-3-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit add492d2e9446a77ede9bb43699ec85ca8fc1aba upstream.

    This adds support for the Trace Hub in Elkhart Lake CPU.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20200317062215.15598-7-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit ce666be89a8a09c5924ff08fc32e119f974bdab6 upstream.

    There are a few places in the driver that end up returning ENOTSUPP to
    the user, replace those with EINVAL.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Fixes: ba82664c134ef ("intel_th: Add Memory Storage Unit driver")
    Cc: stable@vger.kernel.org # v4.4+
    Link: https://lore.kernel.org/r/20200317062215.15598-6-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 885f123554bbdc1807ca25a374be6e9b3bddf4de upstream.

    The unexpected state warning should only warn on illegal state
    transitions. Fix that.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Fixes: 615c164da0eb4 ("intel_th: msu: Introduce buffer interface")
    Cc: stable@vger.kernel.org # v5.4+
    Link: https://lore.kernel.org/r/20200317062215.15598-5-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     

31 Dec, 2019

4 commits

  • commit 05b686b573cfb35a227c30787083a6631ff0f0c9 upstream.

    Commit 6cac7866c2741 ("intel_th: msu: Add a sysfs attribute to trigger
    window switch") adds a NULL pointer dereference in the case when there are
    no windows allocated:

    > BUG: kernel NULL pointer dereference, address: 0000000000000000
    > #PF: supervisor read access in kernel mode
    > #PF: error_code(0x0000) - not-present page
    > PGD 0 P4D 0
    > Oops: 0000 1 SMP
    > CPU: 5 PID: 1110 Comm: bash Not tainted 5.5.0-rc1+ #1
    > RIP: 0010:msc_win_switch+0xa/0x80 [intel_th_msu]
    > Call Trace:
    > ? win_switch_store+0x9b/0xc0 [intel_th_msu]
    > dev_attr_store+0x17/0x30
    > sysfs_kf_write+0x3e/0x50
    > kernfs_fop_write+0xda/0x1b0
    > __vfs_write+0x1b/0x40
    > vfs_write+0xb9/0x1a0
    > ksys_write+0x67/0xe0
    > __x64_sys_write+0x1a/0x20
    > do_syscall_64+0x57/0x1d0
    > entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Fix that by disallowing window switching with multiwindow buffers without
    windows.

    Signed-off-by: Alexander Shishkin
    Fixes: 6cac7866c274 ("intel_th: msu: Add a sysfs attribute to trigger window switch")
    Reviewed-by: Andy Shevchenko
    Reported-by: Ammy Yi
    Tested-by: Ammy Yi
    Cc: stable@vger.kernel.org # v5.2+
    Link: https://lore.kernel.org/r/20191217115527.74383-5-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit ab832e38e4f0f45b16c3633714d868b7ec6b33b4 upstream.

    Commit aac8da65174a ("intel_th: msu: Start handling IRQs") implicitly
    relies on the use of devm_request_irq() to subsequently free the irqs on
    device removal, but in case of the pci_free_irq_vectors() API, the
    handlers need to be freed before it is called. Therefore, at the moment
    the driver's remove path trips a BUG_ON(irq_has_action()):

    > kernel BUG at drivers/pci/msi.c:375!
    > invalid opcode: 0000 1 SMP
    > CPU: 2 PID: 818 Comm: rmmod Not tainted 5.5.0-rc1+ #1
    > RIP: 0010:free_msi_irqs+0x67/0x1c0
    > pci_disable_msi+0x116/0x150
    > pci_free_irq_vectors+0x1b/0x20
    > intel_th_pci_remove+0x22/0x30 [intel_th_pci]
    > pci_device_remove+0x3e/0xb0
    > device_release_driver_internal+0xf0/0x1c0
    > driver_detach+0x4c/0x8f
    > bus_remove_driver+0x5c/0xd0
    > driver_unregister+0x31/0x50
    > pci_unregister_driver+0x40/0x90
    > intel_th_pci_driver_exit+0x10/0xad6 [intel_th_pci]
    > __x64_sys_delete_module+0x147/0x290
    > ? exit_to_usermode_loop+0xd7/0x120
    > do_syscall_64+0x57/0x1b0
    > entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Fix this by explicitly freeing irqs before freeing the vectors. We keep
    using the devm_* variants because they are still useful in early error
    paths.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Fixes: aac8da65174a ("intel_th: msu: Start handling IRQs")
    Reported-by: Ammy Yi
    Tested-by: Ammy Yi
    Cc: stable@vger.kernel.org # v5.2+
    Link: https://lore.kernel.org/r/20191217115527.74383-4-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 88385866bab8d5e18c7f45d1023052c783572e03 upstream.

    This adds support for Intel Trace Hub in Elkhart Lake.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20191217115527.74383-3-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit e4de2a5d51f97a6e720a1c0911f93e2d8c2f1c08 upstream.

    This adds Intel(R) Trace Hub PCI ID for Comet Lake PCH-V.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc:
    Link: https://lore.kernel.org/r/20191217115527.74383-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     

18 Dec, 2019

5 commits

  • commit edda32dabedb01f98b9d7b9a4492c13357834bbe upstream.

    When tracing etm data of multiple threads on multiple cpus through perf
    interface, some link devices are shared between paths of different cpus.
    It creates race conditions when different cpus wants to enable/disable
    the same link device at the same time.

    Example 1:
    Two cpus want to enable different ports of a coresight funnel, thus
    calling the funnel enable operation at the same time. But the funnel
    enable operation isn't reentrantable.

    Example 2:
    For an enabled coresight dynamic replicator with refcnt=1, one cpu wants
    to disable it, while another cpu wants to enable it. Ideally we still have
    an enabled replicator with refcnt=1 at the end. But in reality the result
    is uncertain.

    Since coresight devices claim themselves when enabled for self-hosted
    usage, the race conditions above usually make the link devices not usable
    after many cycles.

    To fix the race conditions, this patch uses spinlocks to serialize
    enabling/disabling link devices.

    Fixes: a06ae8609b3d ("coresight: add CoreSight core layer framework")
    Signed-off-by: Yabin Cui
    Signed-off-by: Mathieu Poirier
    Cc: stable # 5.3
    Link: https://lore.kernel.org/r/20191104181251.26732-14-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Yabin Cui
     
  • commit 0a8f72fafb3f72a08df4ee491fcbeaafd6de85fd upstream.

    Commit c7fd62bc69d02 ("stm class: Introduce framing protocol drivers")
    forgot to tear down the link between an stm device and its protocol
    driver when policy is removed. This leads to an invalid pointer reference
    if one tries to write to an stm device after the policy has been removed
    and the protocol driver module unloaded, leading to the below splat:

    > BUG: unable to handle page fault for address: ffffffffc0737068
    > #PF: supervisor read access in kernel mode
    > #PF: error_code(0x0000) - not-present page
    > PGD 3d780f067 P4D 3d780f067 PUD 3d7811067 PMD 492781067 PTE 0
    > Oops: 0000 [#1] SMP NOPTI
    > CPU: 1 PID: 26122 Comm: cat Not tainted 5.4.0-rc5+ #1
    > RIP: 0010:stm_output_free+0x40/0xc0 [stm_core]
    > Call Trace:
    > stm_char_release+0x3e/0x70 [stm_core]
    > __fput+0xc6/0x260
    > ____fput+0xe/0x10
    > task_work_run+0x9d/0xc0
    > exit_to_usermode_loop+0x103/0x110
    > do_syscall_64+0x19d/0x1e0
    > entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Fix this by tearing down the link from an stm device to its protocol
    driver when the policy involving that driver is removed.

    Signed-off-by: Alexander Shishkin
    Fixes: c7fd62bc69d02 ("stm class: Introduce framing protocol drivers")
    Reported-by: Ammy Yi
    Tested-by: Ammy Yi
    CC: stable@vger.kernel.org # v4.20+
    Link: https://lore.kernel.org/r/20191114064201.43089-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 6e6c18bcb78c0dc0601ebe216bed12c844492d0c upstream.

    This adds support for the Trace Hub in Tiger Lake CPU.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20191120130806.44028-4-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 6a1743422a7c0fda26764a544136cac13e5ae486 upstream.

    This adds support for the Trace Hub in Ice Lake CPU.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20191120130806.44028-3-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • commit 512592779a337feb5905d8fcf9498dbf33672d4a upstream.

    Commit a753bfcfdb1f ("intel_th: Make the switch allocate its subdevices")
    factored out intel_th_subdevice_alloc() from intel_th_populate(), but got
    the error path wrong, resulting in two instances of a double put_device()
    on a freshly initialized, but not 'added' device.

    Fix this by only doing one put_device() in the error path.

    Signed-off-by: Alexander Shishkin
    Fixes: a753bfcfdb1f ("intel_th: Make the switch allocate its subdevices")
    Reported-by: Wen Yang
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org # v4.14+
    Link: https://lore.kernel.org/r/20191120130806.44028-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     

13 Dec, 2019

1 commit

  • commit 2fe6899e36aa174abefd017887f9cfe0cb60c43a upstream.

    A number of issues are fixed relating to sysfs input validation:-

    1) bb_ctrl_store() - incorrect compare of bit select field to absolute
    value. Reworked per ETMv4 specification.
    2) seq_event_store() - incorrect mask value - register has two
    event values.
    3) cyc_threshold_store() - must mask with max before checking min
    otherwise wrapped values can set illegal value below min.
    4) res_ctrl_store() - update to mask off all res0 bits.

    Reviewed-by: Leo Yan
    Reviewed-by: Mathieu Poirier
    Signed-off-by: Mike Leach
    Fixes: a77de2637c9eb ("coresight: etm4x: moving sysFS entries to a dedicated file")
    Cc: stable # 4.9+
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20191104181251.26732-6-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Mike Leach
     

04 Nov, 2019

7 commits

  • This adds support for Intel TH on Jasper Lake PCH.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20191028070651.9770-8-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • This adds support for Intel TH on Comet Lake PCH.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20191028070651.9770-7-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • 'mode' is malloced in mode_store() and should be freed before leaving
    from the error handling cases, otherwise it will cause memory leak.

    Fixes: 615c164da0eb ("intel_th: msu: Introduce buffer interface")
    Signed-off-by: Wei Yongjun
    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Link: https://lore.kernel.org/lkml/20190801013825.182543-1-weiyongjun1@huawei.com/
    Link: https://lore.kernel.org/r/20191028070651.9770-6-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Wei Yongjun
     
  • The shift of the unsigned int win->nr_blocks by PAGE_SHIFT may
    potentially overflow. Note that the intended return of this shift
    is expected to be a size_t however the shift is being performed as
    an unsigned int. Fix this by casting win->nr_blocks to a size_t
    before performing the shift.

    Addresses-Coverity: ("Unintentional integer overflow")
    Fixes: 615c164da0eb ("intel_th: msu: Introduce buffer interface")
    Signed-off-by: Colin Ian King
    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Link: https://lore.kernel.org/lkml/20190726113151.8967-1-colin.king@canonical.com/
    Link: https://lore.kernel.org/r/20191028070651.9770-5-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Colin Ian King
     
  • Commit 615c164da0eb ("intel_th: msu: Introduce buffer interface") forgot
    to add a NULL pointer check for the value returned from kstrdup(), which
    will be troublesome if the allocation fails.

    Fix that by adding the check.

    Addresses-Coverity: ("Dereference null return")
    Fixes: 615c164da0eb ("intel_th: msu: Introduce buffer interface")
    Signed-off-by: Colin Ian King
    [alexander.shishkin: amended the commit message]
    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Link: https://lore.kernel.org/lkml/20190726120421.9650-1-colin.king@canonical.com/
    Link: https://lore.kernel.org/r/20191028070651.9770-4-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Colin Ian King
     
  • Commit 615c164da0eb ("intel_th: msu: Introduce buffer interface") added a
    mutex that it forgot to initialize, resulting in a lockdep splat.

    Fix that by initializing the mutex statically.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Fixes: 615c164da0eb ("intel_th: msu: Introduce buffer interface")
    Link: https://lore.kernel.org/r/20191028070651.9770-3-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     
  • Commit 8116db57cf16 ("intel_th: Add switch triggering support") added
    a trigger assertion of the CTS, but forgot to de-assert it at the end
    of the sequence. This results in window switches randomly not happening.

    Fix that by de-asserting the trigger at the end of the window switch
    sequence.

    Signed-off-by: Alexander Shishkin
    Reviewed-by: Andy Shevchenko
    Fixes: 8116db57cf16 ("intel_th: Add switch triggering support")
    Cc: stable
    Link: https://lore.kernel.org/r/20191028070651.9770-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman

    Alexander Shishkin
     

19 Sep, 2019

1 commit

  • Pull char/misc driver updates from Greg KH:
    "Here is the big char/misc driver pull request for 5.4-rc1.

    As has been happening in previous releases, more and more individual
    driver subsystem trees are ending up in here. Now if that is good or
    bad I can't tell, but hopefully it makes your life easier as it's more
    of an aggregation of trees together to one merge point for you.

    Anyway, lots of stuff in here:
    - habanalabs driver updates
    - thunderbolt driver updates
    - misc driver updates
    - coresight and intel_th hwtracing driver updates
    - fpga driver updates
    - extcon driver updates
    - some dma driver updates
    - char driver updates
    - android binder driver updates
    - nvmem driver updates
    - phy driver updates
    - parport driver fixes
    - pcmcia driver fix
    - uio driver updates
    - w1 driver updates
    - configfs fixes
    - other assorted driver updates

    All of these have been in linux-next for a long time with no reported
    issues"

    * tag 'char-misc-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (200 commits)
    misc: mic: Use PTR_ERR_OR_ZERO rather than its implementation
    habanalabs: correctly cast variable to __le32
    habanalabs: show correct id in error print
    habanalabs: stop using the acronym KMD
    habanalabs: display card name as sensors header
    habanalabs: add uapi to retrieve aggregate H/W events
    habanalabs: add uapi to retrieve device utilization
    habanalabs: Make the Coresight timestamp perpetual
    habanalabs: explicitly set the queue-id enumerated numbers
    habanalabs: print to kernel log when reset is finished
    habanalabs: replace __le32_to_cpu with le32_to_cpu
    habanalabs: replace __cpu_to_le32/64 with cpu_to_le32/64
    habanalabs: Handle HW_IP_INFO if device disabled or in reset
    habanalabs: Expose devices after initialization is done
    habanalabs: improve security in Debug IOCTL
    habanalabs: use default structure for user input in Debug IOCTL
    habanalabs: Add descriptive name to PSOC app status register
    habanalabs: Add descriptive names to PSOC scratch-pad registers
    habanalabs: create two char devices per ASIC
    habanalabs: change device_setup_cdev() to be more generic
    ...

    Linus Torvalds
     

18 Sep, 2019

2 commits

  • …anaszewski/linux-leds

    Pull LED updates from Jacek Anaszewski:
    "In this cycle we've finally managed to contribute the patch set
    sorting out LED naming issues. Besides that there are many changes
    scattered among various LED class drivers and triggers.

    LED naming related improvements:

    - add new 'function' and 'color' fwnode properties and deprecate
    'label' property which has been frequently abused for conveying
    vendor specific names that have been available in sysfs anyway

    - introduce a set of standard LED_FUNCTION* definitions

    - introduce a set of standard LED_COLOR_ID* definitions

    - add a new {devm_}led_classdev_register_ext() API with the
    capability of automatic LED name composition basing on the
    properties available in the passed fwnode; the function is
    backwards compatible in a sense that it uses 'label' data, if
    present in the fwnode, for creating LED name

    - add tools/leds/get_led_device_info.sh script for retrieving LED
    vendor, product and bus names, if applicable; it also performs
    basic validation of an LED name

    - update following drivers and their DT bindings to use the new LED
    registration API:

    - leds-an30259a, leds-gpio, leds-as3645a, leds-aat1290, leds-cr0014114,
    leds-lm3601x, leds-lm3692x, leds-lp8860, leds-lt3593, leds-sc27xx-blt

    Other LED class improvements:

    - replace {devm_}led_classdev_register() macros with inlines

    - allow to call led_classdev_unregister() unconditionally

    - switch to use fwnode instead of be stuck with OF one

    LED triggers improvements:

    - led-triggers:
    - fix dereferencing of null pointer
    - fix a memory leak bug

    - ledtrig-gpio:
    - GPIO 0 is valid

    Drop superseeded apu2/3 support from leds-apu since for apu2+ a newer,
    more complete driver exists, based on a generic driver for the AMD
    SOCs gpio-controller, supporting LEDs as well other devices:

    - drop profile field from priv data

    - drop iosize field from priv data

    - drop enum_apu_led_platform_types

    - drop superseeded apu2/3 led support

    - add pr_fmt prefix for better log output

    - fix error message on probing failure

    Other misc fixes and improvements to existing LED class drivers:

    - leds-ns2, leds-max77650:
    - add of_node_put() before return

    - leds-pwm, leds-is31fl32xx:
    - use struct_size() helper

    - leds-lm3697, leds-lm36274, leds-lm3532:
    - switch to use fwnode_property_count_uXX()

    - leds-lm3532:
    - fix brightness control for i2c mode
    - change the define for the fs current register
    - fixes for the driver for stability
    - add full scale current configuration
    - dt: Add property for full scale current.
    - avoid potentially unpaired regulator calls
    - move static keyword to the front of declarations
    - fix optional led-max-microamp prop error handling

    - leds-max77650:
    - add of_node_put() before return
    - add MODULE_ALIAS()
    - Switch to fwnode property API

    - leds-as3645a:
    - fix misuse of strlcpy

    - leds-netxbig:
    - add of_node_put() in netxbig_leds_get_of_pdata()
    - remove legacy board-file support

    - leds-is31fl319x:
    - simplify getting the adapter of a client

    - leds-ti-lmu-common:
    - fix coccinelle issue
    - move static keyword to the front of declaration

    - leds-syscon:
    - use resource managed variant of device register

    - leds-ktd2692:
    - fix a typo in the name of a constant

    - leds-lp5562:
    - allow firmware files up to the maximum length

    - leds-an30259a:
    - fix typo

    - leds-pca953x:
    - include the right header"

    * tag 'leds-for-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds: (72 commits)
    leds: lm3532: Fix optional led-max-microamp prop error handling
    led: triggers: Fix dereferencing of null pointer
    leds: ti-lmu-common: Move static keyword to the front of declaration
    leds: lm3532: Move static keyword to the front of declarations
    leds: trigger: gpio: GPIO 0 is valid
    leds: pwm: Use struct_size() helper
    leds: is31fl32xx: Use struct_size() helper
    leds: ti-lmu-common: Fix coccinelle issue in TI LMU
    leds: lm3532: Avoid potentially unpaired regulator calls
    leds: syscon: Use resource managed variant of device register
    leds: Replace {devm_}led_classdev_register() macros with inlines
    leds: Allow to call led_classdev_unregister() unconditionally
    leds: lm3532: Add full scale current configuration
    dt: lm3532: Add property for full scale current.
    leds: lm3532: Fixes for the driver for stability
    leds: lm3532: Change the define for the fs current register
    leds: lm3532: Fix brightness control for i2c mode
    leds: Switch to use fwnode instead of be stuck with OF one
    leds: max77650: Switch to fwnode property API
    led: triggers: Fix a memory leak bug
    ...

    Linus Torvalds
     
  • Pull documentation updates from Jonathan Corbet:
    "It's a somewhat calmer cycle for docs this time, as the churn of the
    mass RST conversion is happily mostly behind us.

    - A new document on reproducible builds.

    - We finally got around to zapping the documentation for hardware
    support that was removed in 2004; one doesn't want to rush these
    things.

    - The usual assortment of fixes, typo corrections, etc"

    * tag 'docs-5.4' of git://git.lwn.net/linux: (67 commits)
    Documentation: kbuild: Add document about reproducible builds
    docs: printk-formats: Stop encouraging use of unnecessary %h[xudi] and %hh[xudi]
    Documentation: Add "earlycon=sbi" to the admin guide
    doc:lock: remove reference to clever use of read-write lock
    devices.txt: improve entry for comedi (char major 98)
    docs: mtd: Update spi nor reference driver
    doc: arm64: fix grammar dtb placed in no attributes region
    Documentation: sysrq: don't recommend 'S' 'U' before 'B'
    mailmap: Update email address for Quentin Perret
    docs: ftrace: clarify when tracing is disabled by the trace file
    docs: process: fix broken link
    Documentation/arm/samsung-s3c24xx: Remove stray U+FEFF character to fix title
    Documentation/arm/sa1100/assabet: Fix 'make assabet_defconfig' command
    Documentation/arm/sa1100: Remove some obsolete documentation
    docs/zh_CN: update Chinese howto.rst for latexdocs making
    Documentation: virt: Fix broken reference to virt tree's index
    docs: Fix typo on pull requests guide
    kernel-doc: Allow anonymous enum
    Documentation: sphinx: Don't parse socket() as identifier reference
    Documentation: sphinx: Add missing comma to list of strings
    ...

    Linus Torvalds
     

04 Sep, 2019

8 commits

  • This patch adds barrier packets in the trace stream when the offset in the
    data buffer needs to be moved forward. Otherwise the decoder isn't aware
    of the break in the stream and can't synchronise itself with the trace
    data.

    Signed-off-by: Mathieu Poirier
    Tested-by: Yabin Cui
    Reviewed-by: Leo Yan
    Link: https://lore.kernel.org/r/20190829202842.580-18-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Mathieu Poirier
     
  • If less space is available in the perf ring buffer than the ETR buffer,
    barrier packets inserted in the trace stream by tmc_sync_etr_buf() are
    skipped over when the head of the buffer is moved forward, resulting in
    traces that can't be decoded.

    This patch decouples the process of syncing ETR buffers and the addition
    of barrier packets in order to perform the latter once the offset in the
    trace buffer has been properly computed.

    Signed-off-by: Mathieu Poirier
    Reviewed-by: Leo Yan
    Link: https://lore.kernel.org/r/20190829202842.580-17-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Mathieu Poirier
     
  • Make the computation of a memory mask representing the width of the memory
    bus into a function so that it can be re-used by the ETR driver.

    Signed-off-by: Mathieu Poirier
    Reviewed-by: Leo Yan
    Link: https://lore.kernel.org/r/20190829202842.580-16-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Mathieu Poirier
     
  • When tracing etm data of multiple threads on multiple cpus through
    perf interface, each cpu has a unique etr_perf_buffer while sharing
    the same etr device. There is no guarantee that the last cpu starts
    etm tracing also stops last. This makes perf_data check fail.

    Fix it by checking etr_buf instead of etr_perf_buffer.
    Also move the code setting and clearing perf_buf to more suitable
    places.

    Fixes: 3147da92a8a8 ("coresight: tmc-etr: Allocate and free ETR memory buffers for CPU-wide scenarios")
    Signed-off-by: Yabin Cui
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20190829202842.580-15-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Yabin Cui
     
  • TMC etr always copies all available data to perf aux buffer, which
    may exceed the available space in perf aux buffer. It isn't suitable
    for not-snapshot mode, because:
    1) It may overwrite previously written data.
    2) It may make the perf_event_mmap_page->aux_head report having more
    or less data than the reality.

    So change to only copy the latest data fitting the available space in
    perf aux buffer.

    Signed-off-by: Yabin Cui
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20190829202842.580-14-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Yabin Cui
     
  • To improve clarity, let's update the comment for etm4_os_unlock
    to use the name of the register as per the ETM architecture
    specification.

    The existing comment is also misleading as it suggests any value
    written to TRCOSLAR unlocks the trace registers, however it must
    be '0' - let's also correct this.

    Signed-off-by: Andrew Murray
    Reviewed-by: Suzuki K Poulose
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20190829202842.580-13-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Andrew Murray
     
  • Given that the user-exposed module parameter for 'boot_enable' matches
    the variable that it sets, let's use module_param instead of
    module_param_named.

    Let's also use octal permissions (checkpatch recommends this) and
    provide a module parameter description.

    Signed-off-by: Andrew Murray
    Reviewed-by: Suzuki K Poulose
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20190829202842.580-12-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Andrew Murray
     
  • Synchronization is recommended before disabling the trace registers
    to prevent any start or stop points being speculative at the point
    of disabling the unit (section 7.3.77 of ARM IHI 0064D).

    Synchronization is also recommended after programming the trace
    registers to ensure all updates are committed prior to normal code
    resuming (section 4.3.7 of ARM IHI 0064D).

    Let's ensure these syncronization points are present in the code
    and clearly commented.

    Note that we could rely on the barriers in CS_LOCK and
    coresight_disclaim_device_unlocked or the context switch to user
    space - however coresight may be of use in the kernel.

    On armv8 the mb macro is defined as dsb(sy) - Given that the etm4x is
    only used on armv8 let's directly use dsb(sy) instead of mb(). This
    removes some ambiguity and makes it easier to correlate the code with
    the TRM.

    Signed-off-by: Andrew Murray
    Reviewed-by: Suzuki K Poulose
    [Fixed capital letter for "use" in title]
    Signed-off-by: Mathieu Poirier
    Link: https://lore.kernel.org/r/20190829202842.580-11-mathieu.poirier@linaro.org
    Signed-off-by: Greg Kroah-Hartman

    Andrew Murray