1. 16 May, 2023 1 commit
  2. 15 May, 2023 20 commits
    • Mark Brown's avatar
      ASoC: SOF: Intel: hda-mlink: fixes and extensions · 9be0b3a0
      Mark Brown authored
      Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
      
      With additional testing with multiple links and multiple DAI types, we
      found a couple of mistakes with refcounts, base address, missing
      initialization.
      
      A new helper was also added due to a change in the SoundWire
      programming sequences, with the host driver in charge of setting up
      the DMA channel mapping instead of the firmware.
      9be0b3a0
    • Ranjani Sridharan's avatar
      ASoC: SOF: topology: Fix tuples array allocation · 1c0d023c
      Ranjani Sridharan authored
      The memory allocated for the tuples array assumes that there's 1
      instance of all tokens already. So for those tokens that have multiple
      instances in topology, we need to exclude the initial instance that has
      already been accounted for.
      
      Fixes: 4fdef47a ("ASoC: SOF: ipc4-topology: Add new tokens for input/output pin format count")
      Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230515085200.17094-1-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      1c0d023c
    • Ranjani Sridharan's avatar
      ASoC: SOF: Separate the tokens for input and output pin index · be3c2153
      Ranjani Sridharan authored
      Using the same token ID for both input and output format pin index
      results in collisions and incorrect pin index getting parsed from
      topology.
      
      Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com
      Reviewed-by: Paul Olaru <paul.olaru@oss.nxp.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230515104403.32207-1-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      be3c2153
    • Mark Brown's avatar
      ASoC: SOF: Various runtime pm fixes, improvements · aa70f36f
      Mark Brown authored
      Merge series from Peter Ujfalusi <peter.ujfalusi@linux.intel.com>:
      
      Three patch to correct error path PM runtime handling in few places.
      
      Regards,
      Peter
      ---
      Pierre-Louis Bossart (3):
        ASoC: SOF: debug: conditionally bump runtime_pm counter on exceptions
        ASoC: SOF: pcm: fix pm_runtime imbalance in error handling
        ASoC: SOF: sof-client-probes: fix pm_runtime imbalance in error
          handling
      
       sound/soc/sof/debug.c             |  4 ++--
       sound/soc/sof/pcm.c               | 11 ++++++-----
       sound/soc/sof/sof-client-probes.c | 14 ++++++++------
       3 files changed, 16 insertions(+), 13 deletions(-)
      
      --
      2.40.1
      aa70f36f
    • Lucas Tanure's avatar
      MAINTAINERS: Remove self from Cirrus Codec drivers · dc60b67d
      Lucas Tanure authored
      I'm leaving Cirrus Logic, and will no longer have access to
      hardware and documentation necessary to be effective in a
      maintainership role.
      
      Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com
      Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com
      Link: https://lore.kernel.org/r/20230512154503.741718-1-rf@opensource.cirrus.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      dc60b67d
    • Simon Trimmer's avatar
      ASoC: cs35l56: Prevent unbalanced pm_runtime in dsp_work() on SoundWire · 17082e09
      Simon Trimmer authored
      Flush the SoundWire interrupt handler work instead of cancelling it.
      
      When a SoundWire interrupt is triggered the pm_runtime is held
      until the work has completed. It's therefore unsafe to cancel
      the work, it must be flushed.
      
      Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com
      Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com
      Link: https://lore.kernel.org/r/20230512144237.739000-1-rf@opensource.cirrus.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      17082e09
    • Ranjani Sridharan's avatar
      ASoC: SOF: topology: Fix logic for copying tuples · 41c5305c
      Ranjani Sridharan authored
      Topology could have more instances of the tokens being searched for than
      the number of sets that need to be copied. Stop copying token after the
      limit of number of token instances has been reached. This worked before
      only by chance as we had allocated more size for the tuples array than
      the number of actual tokens being parsed.
      
      Fixes: 7006d20e ("ASoC: SOF: Introduce IPC3 ops")
      Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230512114630.24439-1-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      41c5305c
    • Kai Vehmanen's avatar
      ASoC: SOF: pm: save io region state in case of errors in resume · 171b53be
      Kai Vehmanen authored
      If there are failures in DSP runtime resume, the device state will not
      reach active and this makes it impossible e.g. to retrieve a possible
      DSP panic dump via "exception" debugfs node. If
      CONFIG_SND_SOC_SOF_DEBUG_ENABLE_DEBUGFS_CACHE=y is set, the data in
      cache is stale. If debugfs cache is not used, the region simply cannot
      be read.
      
      To allow debugging these scenarios, update the debugfs cache contents in
      resume error handler. User-space can then later retrieve DSP panic and
      other state via debugfs (requires SOF debugfs cache to be enabled in
      build).
      
      Reported-by: Curtis Malainey <cujomalainey@chromium.org
      Link: https://github.com/thesofproject/linux/issues/4274
      Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com
      Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Curtis Malainey <cujomalainey@chromium.org
      Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230512104638.21376-1-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      171b53be
    • Krzysztof Kozlowski's avatar
      ASoC: MAINTAINERS: drop Krzysztof Kozlowski from Samsung audio · 647b5f5f
      Krzysztof Kozlowski authored
      Remove Krzysztof Kozlowski from maintainer of Samsung SoC Audio drivers
      and change the status to maintenance (no one is reality being paid for
      looking at this).
      
      Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org
      Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com
      Link: https://lore.kernel.org/r/20230513090228.4340-1-krzysztof.kozlowski@linaro.org
      Signed-off-by: Mark Brown <broonie@kernel.org
      647b5f5f
    • Douglas Anderson's avatar
      ASoC: mediatek: mt8186: Fix use-after-free in driver remove path · a93d2afd
      Douglas Anderson authored
      When devm runs function in the "remove" path for a device it runs them
      in the reverse order. That means that if you have parts of your driver
      that aren't using devm or are using "roll your own" devm w/
      devm_add_action_or_reset() you need to keep that in mind.
      
      The mt8186 audio driver didn't quite get this right. Specifically, in
      mt8186_init_clock() it called mt8186_audsys_clk_register() and then
      went on to call a bunch of other devm function. The caller of
      mt8186_init_clock() used devm_add_action_or_reset() to call
      mt8186_deinit_clock() but, because of the intervening devm functions,
      the order was wrong.
      
      Specifically at probe time, the order was:
      1. mt8186_audsys_clk_register()
      2. afe_priv->clk = devm_kcalloc(...)
      3. afe_priv->clk[i] = devm_clk_get(...)
      
      At remove time, the order (which should have been 3, 2, 1) was:
      1. mt8186_audsys_clk_unregister()
      3. Free all of afe_priv->clk[i]
      2. Free afe_priv->clk
      
      The above seemed to be causing a use-after-free. Luckily, it's easy to
      fix this by simply using devm more correctly. Let's move the
      devm_add_action_or_reset() to the right place. In addition to fixing
      the use-after-free, code inspection shows that this fixes a leak
      (missing call to mt8186_audsys_clk_unregister()) that would have
      happened if any of the syscon_regmap_lookup_by_phandle() calls in
      mt8186_init_clock() had failed.
      
      Fixes: 55b423d5 ("ASoC: mediatek: mt8186: support audio clock control in platform driver")
      Signed-off-by: Douglas Anderson <dianders@chromium.org
      Link: https://lore.kernel.org/r/20230511092437.1.I31cceffc8c45bb1af16eb613e197b3df92cdc19e@changeid
      Signed-off-by: Mark Brown <broonie@kernel.org
      a93d2afd
    • Peter Ujfalusi's avatar
      ASoC: SOF: ipc3-topology: Make sure that only one cmd is sent in dai_config · 4708449e
      Peter Ujfalusi authored
      The commands in sof_ipc_dai_config.flags are encoded as bits:
      1 (bit0) - hw_params
      2 (bit1) - hw_free
      4 (bit2) - pause
      
      These are commands, they cannot be combined as one would assume, for
      example
      3 (bit0 | bit1) is invalid.
      
      This can happen right at the second start of a stream as at the end of the
      first stream we set the hw_free command (bit1) and on the second start we
      would OR on top of it the hw_params (bit0).
      
      Fixes: b66bfc3a ("ASoC: SOF: sof-audio: Fix broken early bclk feature for SSP")
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Link: https://lore.kernel.org/r/20230512110317.5180-1-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      4708449e
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: sof-client-probes: fix pm_runtime imbalance in error handling · bc424273
      Pierre-Louis Bossart authored
      When an error occurs, we need to make sure the device can pm_runtime
      suspend instead of keeping it active.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230512103315.8921-4-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      bc424273
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: pcm: fix pm_runtime imbalance in error handling · da0fe8fd
      Pierre-Louis Bossart authored
      When an error occurs, we need to make sure the device can pm_runtime
      suspend instead of keeping it active.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230512103315.8921-3-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      da0fe8fd
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: debug: conditionally bump runtime_pm counter on exceptions · 3de97586
      Pierre-Louis Bossart authored
      When a firmware IPC error happens during a pm_runtime suspend, we
      ignore the error and suspend anyways. However, the code
      unconditionally increases the runtime_pm counter. This results in a
      confusing configuration where the code will suspend, resume but never
      suspend again due to the use of pm_runtime_get_noresume().
      
      The intent of the counter increase was to prevent entry in D3, but if
      that transition to D3 is already started it cannot be stopped. In
      addition, there's no point in that case in trying to prevent anything,
      the firmware error is handled and the next resume will re-initialize
      the firmware completely.
      
      This patch changes the logic to prevent suspend when the device is
      pm_runtime active and has a use_count > 0.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com
      Link: https://lore.kernel.org/r/20230512103315.8921-2-peter.ujfalusi@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      3de97586
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: Intel: hda-mlink: add helper to program SoundWire PCMSyCM registers · ccc2f0c1
      Pierre-Louis Bossart authored
      These registers enable the HDaudio DMA hardware to split/merge data
      from different PDIs, possibly on different links.
      
      This capability exists for all types of HDaudio extended links, but
      for now is only required for SoundWire. In the SSP/DMIC case, the IP
      is programmed by the DSP firmware.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Rander Wang <rander.wang@intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Link: https://lore.kernel.org/r/20230512174611.84372-7-pierre-louis.bossart@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      ccc2f0c1
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: Intel: hda-mlink: initialize instance_offset member · 9643456e
      Pierre-Louis Bossart authored
      We defined the values but never initialized it for SoundWire/SSP, fix
      this miss.
      
      A Fixes: tag is not provided as instance_offset was not used so far,
      so nothing was really broken. This patch is only required for the
      SoundWire support in the following patch.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Rander Wang <rander.wang@intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Link: https://lore.kernel.org/r/20230512174611.84372-6-pierre-louis.bossart@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      9643456e
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: Intel: hda-mlink: use 'ml_addr' parameter consistently · 7dfd1ccd
      Pierre-Louis Bossart authored
      We mix the use of hlink->ml_addr and the 'ml_addr' parameter. It's the
      same thing, let's align on using the parameter.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Rander Wang <rander.wang@intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Link: https://lore.kernel.org/r/20230512174611.84372-5-pierre-louis.bossart@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      7dfd1ccd
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: Intel: hda-mlink: fix base_ptr computation · af8c32b1
      Pierre-Louis Bossart authored
      The base_ptr value needs to be derived from the remap_addr pointer,
      not the ml_addr. This base_ptr was used only in debug logs that were
      so far not contributed upstream so the issue was not detected. It
      needs to be fixed for SoundWire support on LunarLake.
      
      Fixes: 17c9b6ec ("ASoC: SOF: Intel: hda-mlink: add structures to parse ALT links")
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Reviewed-by: Rander Wang <rander.wang@intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Link: https://lore.kernel.org/r/20230512174611.84372-4-pierre-louis.bossart@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      af8c32b1
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: Intel: hda-mlink: add helper to get SoundWire hlink · dcb88fc4
      Pierre-Louis Bossart authored
      Same functionality as for DMIC/SSP with different ID.
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Rander Wang <rander.wang@intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Link: https://lore.kernel.org/r/20230512174611.84372-3-pierre-louis.bossart@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      dcb88fc4
    • Pierre-Louis Bossart's avatar
      ASoC: SOF: Intel: hda-mlink: fix sublink refcounting · 7430dea4
      Pierre-Louis Bossart authored
      In hindsight it was a very bad idea to use the same refcount for
      Extended and 'legacy' HDaudio multi-links. The existing solution only
      powers-up the first sublink, which causes SoundWire and SSP tests to
      fail when more than one DAI is used concurrently. Solving this problem
      requires per-sublink refcounting, as suggested in this patch.
      
      The existing refcounting remains for 'legacy' HdAudio links, mainly to
      avoid changing the obscure programming sequence in
      snd_hdac_ext_bus_link_put().
      
      Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com
      Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com
      Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com
      Link: https://lore.kernel.org/r/20230512174611.84372-2-pierre-louis.bossart@linux.intel.com
      Signed-off-by: Mark Brown <broonie@kernel.org
      7430dea4
  3. 12 May, 2023 5 commits
  4. 11 May, 2023 4 commits
  5. 09 May, 2023 1 commit
  6. 08 May, 2023 6 commits
  7. 07 May, 2023 3 commits
    • Linus Torvalds's avatar
      Linux 6.4-rc1 · ac9a7868
      Linus Torvalds authored
      ac9a7868
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-for-v6.4-3-2023-05-06' of... · f085df1b
      Linus Torvalds authored
      Merge tag 'perf-tools-for-v6.4-3-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull perf tool updates from Arnaldo Carvalho de Melo:
       "Third version of perf tool updates, with the build problems with with
        using a 'vmlinux.h' generated from the main build fixed, and the bpf
        skeleton build disabled by default.
      
        Build:
      
         - Require libtraceevent to build, one can disable it using
           NO_LIBTRACEEVENT=1.
      
           It is required for tools like 'perf sched', 'perf kvm', 'perf
           trace', etc.
      
           libtraceevent is available in most distros so installing
           'libtraceevent-devel' should be a one-time event to continue
           building perf as usual.
      
           Using NO_LIBTRACEEVENT=1 produces tooling that is functional and
           sufficient for lots of users not interested in those libtraceevent
           dependent features.
      
         - Allow Python support in 'perf script' when libtraceevent isn't
           linked, as not all features requires it, for instance Intel PT does
           not use tracepoints.
      
         - Error if the python interpreter needed for jevents to work isn't
           available and NO_JEVENTS=1 isn't set, preventing a build without
           support for JSON vendor events, which is a rare but possible
           condition. The two check error messages:
      
              $(error ERROR: No python interpreter needed for jevents generation. Install python or build with NO_JEVENTS=1.)
              $(error ERROR: Python interpreter needed for jevents generation too old (older than 3.6). Install a newer python or build with NO_JEVENTS=1.)
      
         - Make libbpf 1.0 the minimum required when building with out of
           tree, distro provided libbpf.
      
         - Use libsdtc++'s and LLVM's libcxx's __cxa_demangle, a portable C++
           demangler, add 'perf test' entry for it.
      
         - Make binutils libraries opt in, as distros disable building with it
           due to licensing, they were used for C++ demangling, for instance.
      
         - Switch libpfm4 to opt-out rather than opt-in, if libpfm-devel (or
           equivalent) isn't installed, we'll just have a build warning:
      
             Makefile.config:1144: libpfm4 not found, disables libpfm4 support. Please install libpfm4-dev
      
         - Add a feature test for scandirat(), that is not implemented so far
           in musl and uclibc, disabling features that need it, such as
           scanning for tracepoints in /sys/kernel/tracing/events.
      
        perf BPF filters:
      
         - New feature where BPF can be used to filter samples, for instance:
      
            $ sudo ./perf record -e cycles --filter 'period > 1000' true
            $ sudo ./perf script
                 perf-exec 2273949 546850.708501:       5029 cycles:  ffffffff826f9e25 finish_wait+0x5 ([kernel.kallsyms])
                 perf-exec 2273949 546850.708508:      32409 cycles:  ffffffff826f9e25 finish_wait+0x5 ([kernel.kallsyms])
                 perf-exec 2273949 546850.708526:     143369 cycles:  ffffffff82b4cdbf xas_start+0x5f ([kernel.kallsyms])
                 perf-exec 2273949 546850.708600:     372650 cycles:  ffffffff8286b8f7 __pagevec_lru_add+0x117 ([kernel.kallsyms])
                 perf-exec 2273949 546850.708791:     482953 cycles:  ffffffff829190de __mod_memcg_lruvec_state+0x4e ([kernel.kallsyms])
                      true 2273949 546850.709036:     501985 cycles:  ffffffff828add7c tlb_gather_mmu+0x4c ([kernel.kallsyms])
                      true 2273949 546850.709292:     503065 cycles:      7f2446d97c03 _dl_map_object_deps+0x973 (/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2)
      
         - In addition to 'period' (PERF_SAMPLE_PERIOD), the other
           PERF_SAMPLE_ can be used for filtering, and also some other sample
           accessible values, from tools/perf/Documentation/perf-record.txt:
      
              Essentially the BPF filter expression is:
      
              <term> <operator> <value> (("," | "||") <term> <operator> <value>)*
      
           The <term> can be one of:
              ip, id, tid, pid, cpu, time, addr, period, txn, weight, phys_addr,
              code_pgsz, data_pgsz, weight1, weight2, weight3, ins_lat, retire_lat,
              p_stage_cyc, mem_op, mem_lvl, mem_snoop, mem_remote, mem_lock,
              mem_dtlb, mem_blk, mem_hops
      
           The <operator> can be one of:
              ==, !=, >, >=, <, <=, &
      
           The <value> can be one of:
              <number> (for any term)
              na, load, store, pfetch, exec (for mem_op)
              l1, l2, l3, l4, cxl, io, any_cache, lfb, ram, pmem (for mem_lvl)
              na, none, hit, miss, hitm, fwd, peer (for mem_snoop)
              remote (for mem_remote)
              na, locked (for mem_locked)
              na, l1_hit, l1_miss, l2_hit, l2_miss, any_hit, any_miss, walk, fault (for mem_dtlb)
              na, by_data, by_addr (for mem_blk)
              hops0, hops1, hops2, hops3 (for mem_hops)
      
        perf lock contention:
      
         - Show lock type with address.
      
         - Track and show mmap_lock, siglock and per-cpu rq_lock with address.
           This is done for mmap_lock by following the current->mm pointer:
      
            $ sudo ./perf lock con -abl -- sleep 10
             contended   total wait     max wait     avg wait            address   symbol
             ...
                 16344    312.30 ms      2.22 ms     19.11 us   ffff8cc702595640
                 17686    310.08 ms      1.49 ms     17.53 us   ffff8cc7025952c0
                     3     84.14 ms     45.79 ms     28.05 ms   ffff8cc78114c478   mmap_lock
                  3557     76.80 ms     68.75 us     21.59 us   ffff8cc77ca3af58
                     1     68.27 ms     68.27 ms     68.27 ms   ffff8cda745dfd70
                     9     54.53 ms      7.96 ms      6.06 ms   ffff8cc7642a48b8   mmap_lock
                 14629     44.01 ms     60.00 us      3.01 us   ffff8cc7625f9ca0
                  3481     42.63 ms    140.71 us     12.24 us   ffffffff937906ac   vmap_area_lock
                 16194     38.73 ms     42.15 us      2.39 us   ffff8cd397cbc560
                    11     38.44 ms     10.39 ms      3.49 ms   ffff8ccd6d12fbb8   mmap_lock
                     1      5.43 ms      5.43 ms      5.43 ms   ffff8cd70018f0d8
                  1674      5.38 ms    422.93 us      3.21 us   ffffffff92e06080   tasklist_lock
                   581      4.51 ms    130.68 us      7.75 us   ffff8cc9b1259058
                     5      3.52 ms      1.27 ms    703.23 us   ffff8cc754510070
                   112      3.47 ms     56.47 us     31.02 us   ffff8ccee38b3120
                   381      3.31 ms     73.44 us      8.69 us   ffffffff93790690   purge_vmap_area_lock
                   255      3.19 ms     36.35 us     12.49 us   ffff8d053ce30c80
      
         - Update default map size to 16384.
      
         - Allocate single letter option -M for --map-nr-entries, as it is
           proving being frequently used.
      
         - Fix struct rq lock access for older kernels with BPF's CO-RE
           (Compile once, run everywhere).
      
         - Fix problems found with MSAn.
      
        perf report/top:
      
         - Add inline information when using --call-graph=fp or lbr, as was
           already done to the --call-graph=dwarf callchain mode.
      
         - Improve the 'srcfile' sort key performance by really using an
           optimization introduced in 6.2 for the 'srcline' sort key that
           avoids calling addr2line for comparision with each sample.
      
        perf sched:
      
         - Make 'perf sched latency/map/replay' to use "sched:sched_waking"
           instead of "sched:sched_waking", consistent with 'perf record'
           since d566a9c2 ("perf sched: Prefer sched_waking event when it
           exists").
      
        perf ftrace:
      
         - Make system wide the default target for latency subcommand, run the
           following command then generate some network traffic and press
           control+C:
      
             # perf ftrace latency -T __kfree_skb
           ^C
               DURATION     |      COUNT | GRAPH                                          |
                0 - 1    us |         27 | #############                                  |
                1 - 2    us |         22 | ###########                                    |
                2 - 4    us |          8 | ####                                           |
                4 - 8    us |          5 | ##                                             |
                8 - 16   us |         24 | ############                                   |
               16 - 32   us |          2 | #                                              |
               32 - 64   us |          1 |                                                |
               64 - 128  us |          0 |                                                |
              128 - 256  us |          0 |                                                |
              256 - 512  us |          0 |                                                |
              512 - 1024 us |          0 |                                                |
                1 - 2    ms |          0 |                                                |
                2 - 4    ms |          0 |                                                |
                4 - 8    ms |          0 |                                                |
                8 - 16   ms |          0 |                                                |
               16 - 32   ms |          0 |                                                |
               32 - 64   ms |          0 |                                                |
               64 - 128  ms |          0 |                                                |
              128 - 256  ms |          0 |                                                |
              256 - 512  ms |          0 |                                                |
              512 - 1024 ms |          0 |                                                |
                1 - ...   s |          0 |                                                |
             #
      
        perf top:
      
         - Add --branch-history (LBR: Last Branch Record) option, just like
           already available for 'perf record'.
      
         - Fix segfault in thread__comm_len() where thread->comm was being
           used outside thread->comm_lock.
      
        perf annotate:
      
         - Allow configuring objdump and addr2line in ~/.perfconfig., so that
           you can use alternative binaries, such as llvm's.
      
        perf kvm:
      
         - Add TUI mode for 'perf kvm stat report'.
      
        Reference counting:
      
         - Add reference count checking infrastructure to check for use after
           free, done to the 'cpumap', 'namespaces', 'maps' and 'map' structs,
           more to come.
      
           To build with it use -DREFCNT_CHECKING=1 in the make command line
           to build tools/perf. Documented at:
      
             https://perf.wiki.kernel.org/index.php/Reference_Count_Checking
      
         - The above caught, for instance, fix, present in this series:
      
              - Fix maps use after put in 'perf test "Share thread maps"':
      
                'maps' is copied from leader, but the leader is put on line 79
                and then 'maps' is used to read the reference count below - so
                a use after put, with the put of maps happening within
                thread__put.
      
           Fixed by reversing the order of puts so that the leader is put
           last.
      
         - Also several fixes were made to places where reference counts were
           not being held.
      
         - Make this one of the tests in 'make -C tools/perf build-test' to
           regularly build test it and to make sure no direct access to the
           reference counted structs are made, doing that via accessors to
           check the validity of the struct pointer.
      
        ARM64:
      
         - Fix 'perf report' segfault when filtering coresight traces by
           sparse lists of CPUs.
      
         - Add support for 'simd' as a sort field for 'perf report', to show
           ARM's NEON SIMD's predicate flags: "partial" and "empty".
      
        arm64 vendor events:
      
         - Add N1 metrics.
      
        Intel vendor events:
      
         - Add graniterapids, grandridge and sierraforrest events.
      
         - Refresh events for: alderlake, aldernaken, broadwell, broadwellde,
           broadwellx, cascadelakx, haswell, haswellx, icelake, icelakex,
           jaketown, meteorlake, knightslanding, sandybridge, sapphirerapids,
           silvermont, skylake, tigerlake and westmereep-dp
      
         - Refresh metrics for alderlake-n, broadwell, broadwellde,
           broadwellx, haswell, haswellx, icelakex, ivybridge, ivytown and
           skylakex.
      
        perf stat:
      
         - Implement --topdown using JSON metrics.
      
         - Add TopdownL1 JSON metric as a default if present, but disable it
           for now for some Intel hybrid architectures, a series of patches
           addressing this is being reviewed and will be submitted for v6.5.
      
         - Use metrics for --smi-cost.
      
         - Update topdown documentation.
      
        Vendor events (JSON) infrastructure:
      
         - Add support for computing and printing metric threshold values. For
           instance, here is one found in thesapphirerapids json file:
      
             {
                 "BriefDescription": "Percentage of cycles spent in System Management Interrupts.",
                 "MetricExpr": "((msr@aperf@ - cycles) / msr@aperf@ if msr@smi@ > 0 else 0)",
                 "MetricGroup": "smi",
                 "MetricName": "smi_cycles",
                 "MetricThreshold": "smi_cycles > 0.1",
                 "ScaleUnit": "100%"
             },
      
         - Test parsing metric thresholds with the fake PMU in 'perf test
           pmu-events'.
      
         - Support for printing metric thresholds in 'perf list'.
      
         - Add --metric-no-threshold option to 'perf stat'.
      
         - Add rand (reverse and) and has_pmem (optane memory) support to
           metrics.
      
         - Sort list of input files to avoid depending on the order from
           readdir() helping in obtaining reproducible builds.
      
        S/390:
      
         - Add common metrics: - CPI (cycles per instruction), prbstate (ratio
           of instructions executed in problem state compared to total number
           of instructions), l1mp (Level one instruction and data cache misses
           per 100 instructions).
      
         - Add cache metrics for z13, z14, z15 and z16.
      
         - Add metric for TLB and cache.
      
        ARM:
      
         - Add raw decoding for SPE (Statistical Profiling Extension) v1.3 MTE
           (Memory Tagging Extension) and MOPS (Memory Operations) load/store.
      
        Intel PT hardware tracing:
      
         - Add event type names UINTR (User interrupt delivered) and UIRET
           (Exiting from user interrupt routine), documented in table 32-50
           "CFE Packet Type and Vector Fields Details" in the Intel Processor
           Trace chapter of The Intel SDM Volume 3 version 078.
      
         - Add support for new branch instructions ERETS and ERETU.
      
         - Fix CYC timestamps after standalone CBR
      
        ARM CoreSight hardware tracing:
      
         - Allow user to override timestamp and contextid settings.
      
         - Fix segfault in dso lookup.
      
         - Fix timeless decode mode detection.
      
         - Add separate decode paths for timeless and per-thread modes.
      
        auxtrace:
      
         - Fix address filter entire kernel size.
      
        Miscellaneous:
      
         - Fix use-after-free and unaligned bugs in the PLT handling routines.
      
         - Use zfree() to reduce chances of use after free.
      
         - Add missing 0x prefix for addresses printed in hexadecimal in 'perf
           probe'.
      
         - Suppress massive unsupported target platform errors in the unwind
           code.
      
         - Fix return incorrect build_id size in elf_read_build_id().
      
         - Fix 'perf scripts intel-pt-events.py' IPC output for Python 2 .
      
         - Add missing new parameter in kfree_skb tracepoint to the python
           scripts using it.
      
         - Add 'perf bench syscall fork' benchmark.
      
         - Add support for printing PERF_MEM_LVLNUM_UNC (Uncached access) in
           'perf mem'.
      
         - Fix wrong size expectation for perf test 'Setup struct
           perf_event_attr' caused by the patch adding
           perf_event_attr::config3.
      
         - Fix some spelling mistakes"
      
      * tag 'perf-tools-for-v6.4-3-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (365 commits)
        Revert "perf build: Make BUILD_BPF_SKEL default, rename to NO_BPF_SKEL"
        Revert "perf build: Warn for BPF skeletons if endian mismatches"
        perf metrics: Fix SEGV with --for-each-cgroup
        perf bpf skels: Stop using vmlinux.h generated from BTF, use subset of used structs + CO-RE
        perf stat: Separate bperf from bpf_profiler
        perf test record+probe_libc_inet_pton: Fix call chain match on x86_64
        perf test record+probe_libc_inet_pton: Fix call chain match on s390
        perf tracepoint: Fix memory leak in is_valid_tracepoint()
        perf cs-etm: Add fix for coresight trace for any range of CPUs
        perf build: Fix unescaped # in perf build-test
        perf unwind: Suppress massive unsupported target platform errors
        perf script: Add new parameter in kfree_skb tracepoint to the python scripts using it
        perf script: Print raw ip instead of binary offset for callchain
        perf symbols: Fix return incorrect build_id size in elf_read_build_id()
        perf list: Modify the warning message about scandirat(3)
        perf list: Fix memory leaks in print_tracepoint_events()
        perf lock contention: Rework offset calculation with BPF CO-RE
        perf lock contention: Fix struct rq lock access
        perf stat: Disable TopdownL1 on hybrid
        perf stat: Avoid SEGV on counter->name
        ...
      f085df1b
    • Linus Torvalds's avatar
      Merge tag 'core-debugobjects-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 17784de6
      Linus Torvalds authored
      Pull debugobjects fix from Thomas Gleixner:
       "A single fix for debugobjects:
      
        The recent fix to ensure atomicity of lookup and allocation
        inadvertently broke the pool refill mechanism, so that debugobject
        OOMs now in certain situations. The reason is that the functions which
        got updated no longer invoke debug_objecs_init(), which is now the
        only place to care about refilling the tracking object pool.
      
        Restore the original behaviour by adding explicit refill opportunities
        to those places"
      
      * tag 'core-debugobjects-2023-05-06' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        debugobject: Ensure pool refill (again)
      17784de6