1. 14 May, 2023 1 commit
  2. 11 May, 2023 1 commit
  3. 09 May, 2023 1 commit
    • Huacai Chen's avatar
      power: supply: Fix power_supply_get_battery_info() if parent is NULL · 44c524b6
      Huacai Chen authored
      After commit 27a2195e ("power: supply: core: auto-exposure
      of simple-battery data") we call power_supply_get_battery_info() in
      __power_supply_register(), but it causes test_battery crash with NULL
      pointer:
      
      [    7.524846] __power_supply_register: Expected proper parent device for 'test_battery'
      [    7.524856] CPU 3 Unable to handle kernel paging request at virtual address 0000000000000278, era == 9000000002fb279c, ra == 9000000003173434
      [    7.524862] Oops[#1]:
      [    7.524866] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 6.3.0+ #524
      [    7.524870] Hardware name: Loongson Loongson-3A5000-7A1000-1w-CRB/Loongson-LS3A5000-7A1000-1w-CRB, BIOS vUDK2018-LoongArch-V2.0.0-prebeta9 10/21/2022
      [    7.524872] pc 9000000002fb279c ra 9000000003173434 tp 90000001001f0000 sp 90000001001f3c00
      [    7.524875] a0 0000000000000000 a1 0000000000000000 a2 0000000000000000 a3 9000000004553e13
      [    7.524878] a4 9000000004553e16 a5 ffffffffffffffff a6 9000000003fd0948 a7 0000000000000030
      [    7.524881] t0 9000000003173434 t1 90000000035e2c00 t2 0000000000000001 t3 00000000fffff2b0
      [    7.524883] t4 0000000000000007 t5 fffffffffffffffe t6 0000000000000000 t7 0000000000000010
      [    7.524886] t8 00000000000000b4 u0 00000001c0840c76 s9 0000000000000000 s0 0000000000000000
      [    7.524889] s1 900000000370c458 s2 0000000000000001 s3 9000000101f81000 s4 9000000101f81038
      [    7.524891] s5 9000000101f813a0 s6 900000000370c398 s7 9000000003eebd18 s8 90000000037c0070
      [    7.524894]    ra: 9000000003173434 power_supply_get_battery_info+0xe4/0x710
      [    7.591224]   ERA: 9000000002fb279c __dev_fwnode+0x8/0x20
      [    7.853583]  CRMD: 000000b0 (PLV0 -IE -DA +PG DACF=CC DACM=CC -WE)
      [    7.859740]  PRMD: 00000004 (PPLV0 +PIE -PWE)
      [    7.864073]  EUEN: 00000000 (-FPE -SXE -ASXE -BTE)
      [    7.868839]  ECFG: 00071c1c (LIE=2-4,10-12 VS=7)
      [    7.873430] ESTAT: 00010000 [PIL] (IS= ECode=1 EsubCode=0)
      [    7.878884]  BADV: 0000000000000278
      [    7.882346]  PRID: 0014c010 (Loongson-64bit, Loongson-3A5000)
      [    7.888056] Modules linked in:
      [    7.891088] Process swapper/0 (pid: 1, threadinfo=0000000091357ee8, task=00000000313d98cb)
      [    7.899307] Stack : 00000000000000b4 900000000279aca8 0000000000000001 0000000000000000
      [    7.907274]         0000000000000049 0000000000000408 9000000100008c00 90000000035b6370
      [    7.915238]         900000000b801080 90000000029a440c 9000000003eb4680 9000000003eb4680
      [    7.923202]         9000000101f81038 900000000357cdcc 0000000000000001 900000000370c458
      [    7.931166]         9000000101f81000 90000000037c0070 9000000003eebd18 900000000370c398
      [    7.939131]         90000000045f4530 9000000101f81038 0000000000000000 0000000000000001
      [    7.947095]         900000000370c458 9000000101f81000 0000000000000000 9000000003173e64
      [    7.955059]         0000000000000026 9000000003de3880 9000000100562040 900000000357e07c
      [    7.963023]         000000000000026f 0000000000000001 90000001001f3d68 fffffffffffffff5
      [    7.970987]         90000000036d2ca8 90000000027429d8 90000000037c0030 0000000000000001
      [    7.978951]         ...
      [    7.981379] Call Trace:
      [    7.981382] [<9000000002fb279c>] __dev_fwnode+0x8/0x20
      [    7.988916] [<9000000003173434>] power_supply_get_battery_info+0xe4/0x710
      [    7.995666] [<9000000003173e64>] __power_supply_register+0x404/0x580
      [    8.001984] [<900000000379d368>] test_power_init+0x6c/0x124
      [    8.007527] [<90000000026e08f8>] do_one_initcall+0x58/0x1ec
      [    8.013066] [<9000000003761614>] kernel_init_freeable+0x290/0x310
      [    8.019127] [<90000000035b40e8>] kernel_init+0x24/0x11c
      [    8.024324] [<90000000026e2048>] ret_from_kernel_thread+0xc/0xa4
      [    8.030295]
      [    8.031769] Code: 4c000020  0015002c  03400000 <28c9e08c> 40000d80  02c06184  4c000020  28ca0084  4c000020
      
      Root cause: psy->dev.parent is NULL in power_supply_get_battery_info(),
      so change the else branch to be 'else if (psy->dev.parent)' and return
      -ENOENT if psy->dev.parent is NULL.
      
      Fixes: 27a2195e ("power: supply: core: auto-exposure of simple-battery data")
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      44c524b6
  4. 08 May, 2023 15 commits
    • Hans de Goede's avatar
      power: supply: bq24190: Call power_supply_changed() after updating input current · 77c2a309
      Hans de Goede authored
      The bq24192 model relies on external charger-type detection and once
      that is done the bq24190_charger code will update the input current.
      
      In this case, when the initial power_supply_changed() call is made
      from the interrupt handler, the input settings are 5V/0.5A which
      on many devices is not enough power to charge (while the device is on).
      
      On many devices the fuel-gauge relies in its external_power_changed
      callback to timely signal userspace about charging <-> discharging
      status changes. Add a power_supply_changed() call after updating
      the input current. This allows the fuel-gauge driver to timely recheck
      if the battery is charging after the new input current has been applied
      and then it can immediately notify userspace about this.
      
      Fixes: 18f8e6f6 ("power: supply: bq24190_charger: Get input_current_limit from our supplier")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      77c2a309
    • Hans de Goede's avatar
      power: supply: bq25890: Call power_supply_changed() after updating input current or voltage · ad3d9c77
      Hans de Goede authored
      The bq25892 model relies on external charger-type detection and once
      that is done the bq25890_charger code will update the input current
      and if pumpexpress is used also the input voltage.
      
      In this case, when the initial power_supply_changed() call is made
      from the interrupt handler, the input settings are 5V/0.5A which
      on many devices is not enough power to charge (while the device is on).
      
      On many devices the fuel-gauge relies in its external_power_changed
      callback to timely signal userspace about charging <-> discharging
      status changes. Add a power_supply_changed() call after updating
      the input current or voltage. This allows the fuel-gauge driver
      to timely recheck if the battery is charging after the new input
      settings have been applied and then it can immediately notify
      userspace about this.
      
      Fixes: 48f45b09 ("power: supply: bq25890: Support higher charging voltages through Pump Express+ protocol")
      Fixes: eab25b4f ("power: supply: bq25890: On the bq25892 set the IINLIM based on external charger detection")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      ad3d9c77
    • Hans de Goede's avatar
      power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + schedule() · 59dddea9
      Hans de Goede authored
      Use mod_delayed_work() instead of separate cancel_delayed_work_sync() +
      schedule_delayed_work() calls.
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      59dddea9
    • Hans de Goede's avatar
      power: supply: bq27xxx: After charger plug in/out wait 0.5s for things to stabilize · 59a99cd4
      Hans de Goede authored
      bq27xxx_external_power_changed() gets called when the charger is plugged
      in or out. Rather then immediately scheduling an update wait 0.5 seconds
      for things to stabilize, so that e.g. the (dis)charge current is stable
      when bq27xxx_battery_update() runs.
      
      Fixes: 740b755a ("bq27x00: Poll battery state")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      59a99cd4
    • Hans de Goede's avatar
      power: supply: bq27xxx: Ensure power_supply_changed() is called on current sign changes · 939a1161
      Hans de Goede authored
      On gauges where the current register is signed, there is no charging
      flag in the flags register. So only checking flags will not result
      in power_supply_changed() getting called when e.g. a charger is plugged
      in and the current sign changes from negative (discharging) to
      positive (charging).
      
      This causes userspace's notion of the status to lag until userspace
      does a poll.
      
      And when a power_supply_leds.c LED trigger is used to indicate charging
      status with a LED, this LED will lag until the capacity percentage
      changes, which may take many minutes (because the LED trigger only is
      updated on power_supply_changed() calls).
      
      Fix this by calling bq27xxx_battery_current_and_status() on gauges with
      a signed current register and checking if the status has changed.
      
      Fixes: 297a533b ("bq27x00: Cache battery registers")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      939a1161
    • Hans de Goede's avatar
      power: supply: bq27xxx: Move bq27xxx_battery_update() down · ff4c4a2a
      Hans de Goede authored
      Move the bq27xxx_battery_update() functions to below
      the bq27xxx_battery_current_and_status() function.
      
      This is just moving a block of text, no functional changes.
      
      This is a preparation patch for making bq27xxx_battery_update() check
      the status and have it call power_supply_changed() on status changes.
      
      Fixes: 297a533b ("bq27x00: Cache battery registers")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      ff4c4a2a
    • Hans de Goede's avatar
      power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status() · 35092c58
      Hans de Goede authored
      Add a cache parameter to bq27xxx_battery_current_and_status() so that
      it can optionally use cached flags instead of re-reading them itself.
      
      This is a preparation patch for making bq27xxx_battery_update() check
      the status and have it call power_supply_changed() on status changes.
      
      Fixes: 297a533b ("bq27x00: Cache battery registers")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      35092c58
    • Hans de Goede's avatar
      power: supply: bq27xxx: Fix poll_interval handling and races on remove · c00bc804
      Hans de Goede authored
      Before this patch bq27xxx_battery_teardown() was setting poll_interval = 0
      to avoid bq27xxx_battery_update() requeuing the delayed_work item.
      
      There are 2 problems with this:
      
      1. If the driver is unbound through sysfs, rather then the module being
         rmmod-ed, this changes poll_interval unexpectedly
      
      2. This is racy, after it being set poll_interval could be changed
         before bq27xxx_battery_update() checks it through
         /sys/module/bq27xxx_battery/parameters/poll_interval
      
      Fix this by added a removed attribute to struct bq27xxx_device_info and
      using that instead of setting poll_interval to 0.
      
      There also is another poll_interval related race on remove(), writing
      /sys/module/bq27xxx_battery/parameters/poll_interval will requeue
      the delayed_work item for all devices on the bq27xxx_battery_devices
      list and the device being removed was only removed from that list
      after cancelling the delayed_work item.
      
      Fix this by moving the removal from the bq27xxx_battery_devices list
      to before cancelling the delayed_work item.
      
      Fixes: 8cfaaa81 ("bq27x00_battery: Fix OOPS caused by unregistring bq27x00 driver")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      c00bc804
    • Hans de Goede's avatar
      power: supply: bq27xxx: Fix I2C IRQ race on remove · 444ff007
      Hans de Goede authored
      devm_request_threaded_irq() requested IRQs are only free-ed after
      the driver's remove function has ran. So the IRQ could trigger and
      call bq27xxx_battery_update() after bq27xxx_battery_teardown() has
      already run.
      
      Switch to explicitly free-ing the IRQ in bq27xxx_battery_i2c_remove()
      to fix this.
      
      Fixes: 8807feb9 ("power: bq27xxx_battery: Add interrupt handling support")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      444ff007
    • Hans de Goede's avatar
      power: supply: bq27xxx: Fix bq27xxx_battery_update() race condition · 5c34c0ae
      Hans de Goede authored
      bq27xxx_battery_update() assumes / requires that it is only run once,
      not multiple times at the same time. But there are 3 possible callers:
      
      1. bq27xxx_battery_poll() delayed_work item handler
      2. bq27xxx_battery_irq_handler_thread() I2C IRQ handler
      3. bq27xxx_battery_setup()
      
      And there is no protection against these racing with each other,
      fix this race condition by making all callers take di->lock:
      
      - Rename bq27xxx_battery_update() to bq27xxx_battery_update_unlocked()
      
      - Add new bq27xxx_battery_update() which takes di->lock and then calls
        bq27xxx_battery_update_unlocked()
      
      - Make stale cache check code in bq27xxx_battery_get_property(), which
        already takes di->lock directly to check the jiffies, call
        bq27xxx_battery_update_unlocked() instead of messing with
        the delayed_work item
      
      - Make bq27xxx_battery_update_unlocked() mod the delayed-work item
        so that the next poll is delayed to poll_interval milliseconds after
        the last update independent of the source of the update
      
      Fixes: 740b755a ("bq27x00: Poll battery state")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      5c34c0ae
    • Hans de Goede's avatar
      power: supply: leds: Fix blink to LED on transition · e4484643
      Hans de Goede authored
      When a battery's status changes from charging to full then
      the charging-blink-full-solid trigger tries to change
      the LED from blinking to solid/on.
      
      As is documented in include/linux/leds.h to deactivate blinking /
      to make the LED solid a LED_OFF must be send:
      
      """
               * Deactivate blinking again when the brightness is set to LED_OFF
               * via the brightness_set() callback.
      """
      
      led_set_brighness() calls with a brightness value other then 0 / LED_OFF
      merely change the brightness of the LED in its on state while it is
      blinking.
      
      So power_supply_update_bat_leds() must first send a LED_OFF event
      before the LED_FULL to disable blinking.
      
      Fixes: 6501f728 ("power_supply: Add new LED trigger charging-blink-solid-full")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Reviewed-by: default avatarVasily Khoruzhick <anarsoul@gmail.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      e4484643
    • Hans de Goede's avatar
      power: supply: sc27xx: Fix external_power_changed race · 4d5c129d
      Hans de Goede authored
      sc27xx_fgu_external_power_changed() dereferences data->battery,
      which gets sets in ab8500_btemp_probe() like this:
      
      	data->battery = devm_power_supply_register(dev, &sc27xx_fgu_desc,
                                                         &fgu_cfg);
      
      As soon as devm_power_supply_register() has called device_add()
      the external_power_changed callback can get called. So there is a window
      where sc27xx_fgu_external_power_changed() may get called while
      data->battery has not been set yet leading to a NULL pointer dereference.
      
      Fixing this is easy. The external_power_changed callback gets passed
      the power_supply which will eventually get stored in data->battery,
      so sc27xx_fgu_external_power_changed() can simply directly use
      the passed in psy argument which is always valid.
      
      After this change sc27xx_fgu_external_power_changed() is reduced to just
      "power_supply_changed(psy);" and it has the same prototype. While at it
      simply replace it with making the external_power_changed callback
      directly point to power_supply_changed.
      
      Cc: Orson Zhai <orsonzhai@gmail.com>
      Cc: Chunyan Zhang <zhang.lyra@gmail.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Reviewed-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      4d5c129d
    • Hans de Goede's avatar
      power: supply: bq25890: Fix external_power_changed race · 029a443b
      Hans de Goede authored
      bq25890_charger_external_power_changed() dereferences bq->charger,
      which gets sets in bq25890_power_supply_init() like this:
      
        bq->charger = devm_power_supply_register(bq->dev, &bq->desc, &psy_cfg);
      
      As soon as devm_power_supply_register() has called device_add()
      the external_power_changed callback can get called. So there is a window
      where bq25890_charger_external_power_changed() may get called while
      bq->charger has not been set yet leading to a NULL pointer dereference.
      
      This race hits during boot sometimes on a Lenovo Yoga Book 1 yb1-x90f
      when the cht_wcove_pwrsrc (extcon) power_supply is done with detecting
      the connected charger-type which happens to exactly hit the small window:
      
        BUG: kernel NULL pointer dereference, address: 0000000000000018
        <snip>
        RIP: 0010:__power_supply_is_supplied_by+0xb/0xb0
        <snip>
        Call Trace:
         <TASK>
         __power_supply_get_supplier_property+0x19/0x50
         class_for_each_device+0xb1/0xe0
         power_supply_get_property_from_supplier+0x2e/0x50
         bq25890_charger_external_power_changed+0x38/0x1b0 [bq25890_charger]
         __power_supply_changed_work+0x30/0x40
         class_for_each_device+0xb1/0xe0
         power_supply_changed_work+0x5f/0xe0
        <snip>
      
      Fixing this is easy. The external_power_changed callback gets passed
      the power_supply which will eventually get stored in bq->charger,
      so bq25890_charger_external_power_changed() can simply directly use
      the passed in psy argument which is always valid.
      
      Fixes: eab25b4f ("power: supply: bq25890: On the bq25892 set the IINLIM based on external charger detection")
      Cc: stable@vger.kernel.org
      Cc: Marek Vasut <marex@denx.de>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      029a443b
    • Hans de Goede's avatar
      power: supply: axp288_fuel_gauge: Fix external_power_changed race · f8319774
      Hans de Goede authored
      fuel_gauge_external_power_changed() dereferences info->bat,
      which gets sets in axp288_fuel_gauge_probe() like this:
      
        info->bat = devm_power_supply_register(dev, &fuel_gauge_desc, &psy_cfg);
      
      As soon as devm_power_supply_register() has called device_add()
      the external_power_changed callback can get called. So there is a window
      where fuel_gauge_external_power_changed() may get called while
      info->bat has not been set yet leading to a NULL pointer dereference.
      
      Fixing this is easy. The external_power_changed callback gets passed
      the power_supply which will eventually get stored in info->bat,
      so fuel_gauge_external_power_changed() can simply directly use
      the passed in psy argument which is always valid.
      
      Fixes: 30abb3d0 ("power: supply: axp288_fuel_gauge: Take lock before updating the valid flag")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      f8319774
    • Hans de Goede's avatar
      power: supply: ab8500: Fix external_power_changed race · a5299ce4
      Hans de Goede authored
      ab8500_btemp_external_power_changed() dereferences di->btemp_psy,
      which gets sets in ab8500_btemp_probe() like this:
      
              di->btemp_psy = devm_power_supply_register(dev, &ab8500_btemp_desc,
                                                         &psy_cfg);
      
      As soon as devm_power_supply_register() has called device_add()
      the external_power_changed callback can get called. So there is a window
      where ab8500_btemp_external_power_changed() may get called while
      di->btemp_psy has not been set yet leading to a NULL pointer dereference.
      
      Fixing this is easy. The external_power_changed callback gets passed
      the power_supply which will eventually get stored in di->btemp_psy,
      so ab8500_btemp_external_power_changed() can simply directly use
      the passed in psy argument which is always valid.
      
      And the same applies to ab8500_fg_external_power_changed().
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      a5299ce4
  5. 07 May, 2023 8 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
    • Linus Torvalds's avatar
      Merge tag 'v6.4-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 · 6f69c981
      Linus Torvalds authored
      Pull crypto fixes from Herbert Xu:
      
       - A long-standing bug in crypto_engine
      
       - A buggy but harmless check in the sun8i-ss driver
      
       - A regression in the CRYPTO_USER interface
      
      * tag 'v6.4-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
        crypto: api - Fix CRYPTO_USER checks for report function
        crypto: engine - fix crypto_queue backlog handling
        crypto: sun8i-ss - Fix a test in sun8i_ss_setup_ivs()
      6f69c981
    • Linus Torvalds's avatar
      Merge tag '6.4-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6 · 63342b1d
      Linus Torvalds authored
      Pull cifs fixes from Steve French:
       "smb3 client fixes, mostly DFS or reconnect related:
      
         - Two DFS connection sharing fixes
      
         - DFS refresh fix
      
         - Reconnect fix
      
         - Two potential use after free fixes
      
         - Also print prefix patch in mount debug msg
      
         - Two small cleanup fixes"
      
      * tag '6.4-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6:
        cifs: Remove unneeded semicolon
        cifs: fix sharing of DFS connections
        cifs: avoid potential races when handling multiple dfs tcons
        cifs: protect access of TCP_Server_Info::{origin,leaf}_fullpath
        cifs: fix potential race when tree connecting ipc
        cifs: fix potential use-after-free bugs in TCP_Server_Info::hostname
        cifs: print smb3_fs_context::source when mounting
        cifs: protect session status check in smb2_reconnect()
        SMB3.1.1: correct definition for app_instance_id create contexts
      63342b1d
    • Linus Torvalds's avatar
      Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux · d6b8a8c4
      Linus Torvalds authored
      Pull clk fixes from Stephen Boyd:
       "A couple more patches that would be good to get into -rc1:
      
         - Revert an i.MX patch that's causing video failures because division
           math goes sideways
      
         - Fix a clang + W=1 build isue where FIELD_PREP() is taking a 32-bit
           variable instead of the usual u64 type
      
         - Fix a Kconfig bug in the StarFive JH7110 clk config that selects a
           reset controller when it can't be selected"
      
      * tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux:
        clk: starfive: Fix RESET_STARFIVE_JH7110 can't be selected in a specified case
        clk: sp7021: Adjust width of _m in HWM_FIELD_PREP()
        Revert "clk: imx: composite-8m: Add support to determine_rate"
      d6b8a8c4
    • Linus Torvalds's avatar
      Merge tag 'mailbox-v6.4' of git://git.linaro.org/landing-teams/working/fujitsu/integration · 1c1094e4
      Linus Torvalds authored
      Pull mailbox updates from Jassi Brar:
      
       - mailbox api: allow direct registration to a channel and convert omap
         and pcc to use mbox_bind_client
      
       - omap and hi6220 : use of_property_read_bool
      
       - test: fix double-free and use spinlock header
      
       - rockchip and bcm-pdc: drop of_match_ptr
      
       - mpfs: change config symbol
      
       - mediatek gce: support MT6795
      
       - qcom apcs: consolidate of_device_id and support IPQ9574
      
      * tag 'mailbox-v6.4' of git://git.linaro.org/landing-teams/working/fujitsu/integration:
        dt-bindings: mailbox: qcom: add compatible for IPQ9574 SoC
        mailbox: qcom-apcs-ipc: do not grow the of_device_id
        dt-bindings: mailbox: qcom,apcs-kpss-global: use fallbacks for few variants
        dt-bindings: mailbox: mediatek,gce-mailbox: Add support for MT6795
        mailbox: mpfs: convert SOC_MICROCHIP_POLARFIRE to ARCH_MICROCHIP_POLARFIRE
        mailbox: bcm-pdc: drop of_match_ptr for ID table
        mailbox: rockchip: drop of_match_ptr for ID table
        mailbox: mailbox-test: Fix potential double-free in mbox_test_message_write()
        mailbox: mailbox-test: Explicitly include header for spinlock support
        mailbox: Use of_property_read_bool() for boolean properties
        mailbox: pcc: Use mbox_bind_client
        mailbox: omap: Use mbox_bind_client
        mailbox: Allow direct registration to a channel
      1c1094e4
    • Linus Torvalds's avatar
      Merge tag 'for-6.4/io_uring-2023-05-07' of git://git.kernel.dk/linux · 03e5cb7b
      Linus Torvalds authored
      Pull more io_uring updates from Jens Axboe:
       "Nothing major in here, just two different parts:
      
         - A small series from Breno that enables passing the full SQE down
           for ->uring_cmd().
      
           This is a prerequisite for enabling full network socket operations.
           Queued up a bit late because of some stylistic concerns that got
           resolved, would be nice to have this in 6.4-rc1 so the dependent
           work will be easier to handle for 6.5.
      
         - Fix for the huge page coalescing, which was a regression introduced
           in the 6.3 kernel release (Tobias)"
      
      * tag 'for-6.4/io_uring-2023-05-07' of git://git.kernel.dk/linux:
        io_uring: Remove unnecessary BUILD_BUG_ON
        io_uring: Pass whole sqe to commands
        io_uring: Create a helper to return the SQE size
        io_uring/rsrc: check for nonconsecutive pages
      03e5cb7b
  6. 06 May, 2023 14 commits