1. 17 Nov, 2022 5 commits
    • Zhou Guanghui's avatar
      scsi: iscsi: Fix possible memory leak when device_register() failed · f014165f
      Zhou Guanghui authored
      If device_register() returns error, the name allocated by the
      dev_set_name() need be freed. As described in the comment of
      device_register(), we should use put_device() to give up the reference in
      the error path.
      
      Fix this by calling put_device(), the name will be freed in the
      kobject_cleanup(), and this patch modified resources will be released by
      calling the corresponding callback function in the device_release().
      Signed-off-by: default avatarZhou Guanghui <zhouguanghui1@huawei.com>
      Link: https://lore.kernel.org/r/20221110033729.1555-1-zhouguanghui1@huawei.comReviewed-by: default avatarMike Christie <michael.christie@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      f014165f
    • Benjamin Block's avatar
      scsi: zfcp: Fix double free of FSF request when qdio send fails · 0954256e
      Benjamin Block authored
      We used to use the wrong type of integer in 'zfcp_fsf_req_send()' to cache
      the FSF request ID when sending a new FSF request. This is used in case the
      sending fails and we need to remove the request from our internal hash
      table again (so we don't keep an invalid reference and use it when we free
      the request again).
      
      In 'zfcp_fsf_req_send()' we used to cache the ID as 'int' (signed and 32
      bit wide), but the rest of the zfcp code (and the firmware specification)
      handles the ID as 'unsigned long'/'u64' (unsigned and 64 bit wide [s390x
      ELF ABI]).  For one this has the obvious problem that when the ID grows
      past 32 bit (this can happen reasonably fast) it is truncated to 32 bit
      when storing it in the cache variable and so doesn't match the original ID
      anymore.  The second less obvious problem is that even when the original ID
      has not yet grown past 32 bit, as soon as the 32nd bit is set in the
      original ID (0x80000000 = 2'147'483'648) we will have a mismatch when we
      cast it back to 'unsigned long'. As the cached variable is of a signed
      type, the compiler will choose a sign-extending instruction to load the 32
      bit variable into a 64 bit register (e.g.: 'lgf %r11,188(%r15)'). So once
      we pass the cached variable into 'zfcp_reqlist_find_rm()' to remove the
      request again all the leading zeros will be flipped to ones to extend the
      sign and won't match the original ID anymore (this has been observed in
      practice).
      
      If we can't successfully remove the request from the hash table again after
      'zfcp_qdio_send()' fails (this happens regularly when zfcp cannot notify
      the adapter about new work because the adapter is already gone during
      e.g. a ChpID toggle) we will end up with a double free.  We unconditionally
      free the request in the calling function when 'zfcp_fsf_req_send()' fails,
      but because the request is still in the hash table we end up with a stale
      memory reference, and once the zfcp adapter is either reset during recovery
      or shutdown we end up freeing the same memory twice.
      
      The resulting stack traces vary depending on the kernel and have no direct
      correlation to the place where the bug occurs. Here are three examples that
      have been seen in practice:
      
        list_del corruption. next->prev should be 00000001b9d13800, but was 00000000dead4ead. (next=00000001bd131a00)
        ------------[ cut here ]------------
        kernel BUG at lib/list_debug.c:62!
        monitor event: 0040 ilc:2 [#1] PREEMPT SMP
        Modules linked in: ...
        CPU: 9 PID: 1617 Comm: zfcperp0.0.1740 Kdump: loaded
        Hardware name: ...
        Krnl PSW : 0704d00180000000 00000003cbeea1f8 (__list_del_entry_valid+0x98/0x140)
                   R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:1 PM:0 RI:0 EA:3
        Krnl GPRS: 00000000916d12f1 0000000080000000 000000000000006d 00000003cb665cd6
                   0000000000000001 0000000000000000 0000000000000000 00000000d28d21e8
                   00000000d3844000 00000380099efd28 00000001bd131a00 00000001b9d13800
                   00000000d3290100 0000000000000000 00000003cbeea1f4 00000380099efc70
        Krnl Code: 00000003cbeea1e8: c020004f68a7        larl    %r2,00000003cc8d7336
                   00000003cbeea1ee: c0e50027fd65        brasl   %r14,00000003cc3e9cb8
                  #00000003cbeea1f4: af000000            mc      0,0
                  >00000003cbeea1f8: c02000920440        larl    %r2,00000003cd12aa78
                   00000003cbeea1fe: c0e500289c25        brasl   %r14,00000003cc3fda48
                   00000003cbeea204: b9040043            lgr     %r4,%r3
                   00000003cbeea208: b9040051            lgr     %r5,%r1
                   00000003cbeea20c: b9040032            lgr     %r3,%r2
        Call Trace:
         [<00000003cbeea1f8>] __list_del_entry_valid+0x98/0x140
        ([<00000003cbeea1f4>] __list_del_entry_valid+0x94/0x140)
         [<000003ff7ff502fe>] zfcp_fsf_req_dismiss_all+0xde/0x150 [zfcp]
         [<000003ff7ff49cd0>] zfcp_erp_strategy_do_action+0x160/0x280 [zfcp]
         [<000003ff7ff4a22e>] zfcp_erp_strategy+0x21e/0xca0 [zfcp]
         [<000003ff7ff4ad34>] zfcp_erp_thread+0x84/0x1a0 [zfcp]
         [<00000003cb5eece8>] kthread+0x138/0x150
         [<00000003cb557f3c>] __ret_from_fork+0x3c/0x60
         [<00000003cc4172ea>] ret_from_fork+0xa/0x40
        INFO: lockdep is turned off.
        Last Breaking-Event-Address:
         [<00000003cc3e9d04>] _printk+0x4c/0x58
        Kernel panic - not syncing: Fatal exception: panic_on_oops
      
      or:
      
        Unable to handle kernel pointer dereference in virtual kernel address space
        Failing address: 6b6b6b6b6b6b6000 TEID: 6b6b6b6b6b6b6803
        Fault in home space mode while using kernel ASCE.
        AS:0000000063b10007 R3:0000000000000024
        Oops: 0038 ilc:3 [#1] SMP
        Modules linked in: ...
        CPU: 10 PID: 0 Comm: swapper/10 Kdump: loaded
        Hardware name: ...
        Krnl PSW : 0404d00180000000 000003ff7febaf8e (zfcp_fsf_reqid_check+0x86/0x158 [zfcp])
                   R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:1 PM:0 RI:0 EA:3
        Krnl GPRS: 5a6f1cfa89c49ac3 00000000aff2c4c8 6b6b6b6b6b6b6b6b 00000000000002a8
                   0000000000000000 0000000000000055 0000000000000000 00000000a8515800
                   0700000000000000 00000000a6e14500 00000000aff2c000 000000008003c44c
                   000000008093c700 0000000000000010 00000380009ebba8 00000380009ebb48
        Krnl Code: 000003ff7febaf7e: a7f4003d            brc     15,000003ff7febaff8
                   000003ff7febaf82: e32020000004        lg      %r2,0(%r2)
                  #000003ff7febaf88: ec2100388064        cgrj    %r2,%r1,8,000003ff7febaff8
                  >000003ff7febaf8e: e3b020100020        cg      %r11,16(%r2)
                   000003ff7febaf94: a774fff7            brc     7,000003ff7febaf82
                   000003ff7febaf98: ec280030007c        cgij    %r2,0,8,000003ff7febaff8
                   000003ff7febaf9e: e31020080004        lg      %r1,8(%r2)
                   000003ff7febafa4: e33020000004        lg      %r3,0(%r2)
        Call Trace:
         [<000003ff7febaf8e>] zfcp_fsf_reqid_check+0x86/0x158 [zfcp]
         [<000003ff7febbdbc>] zfcp_qdio_int_resp+0x6c/0x170 [zfcp]
         [<000003ff7febbf90>] zfcp_qdio_irq_tasklet+0xd0/0x108 [zfcp]
         [<0000000061d90a04>] tasklet_action_common.constprop.0+0xdc/0x128
         [<000000006292f300>] __do_softirq+0x130/0x3c0
         [<0000000061d906c6>] irq_exit_rcu+0xfe/0x118
         [<000000006291e818>] do_io_irq+0xc8/0x168
         [<000000006292d516>] io_int_handler+0xd6/0x110
         [<000000006292d596>] psw_idle_exit+0x0/0xa
        ([<0000000061d3be50>] arch_cpu_idle+0x40/0xd0)
         [<000000006292ceea>] default_idle_call+0x52/0xf8
         [<0000000061de4fa4>] do_idle+0xd4/0x168
         [<0000000061de51fe>] cpu_startup_entry+0x36/0x40
         [<0000000061d4faac>] smp_start_secondary+0x12c/0x138
         [<000000006292d88e>] restart_int_handler+0x6e/0x90
        Last Breaking-Event-Address:
         [<000003ff7febaf94>] zfcp_fsf_reqid_check+0x8c/0x158 [zfcp]
        Kernel panic - not syncing: Fatal exception in interrupt
      
      or:
      
        Unable to handle kernel pointer dereference in virtual kernel address space
        Failing address: 523b05d3ae76a000 TEID: 523b05d3ae76a803
        Fault in home space mode while using kernel ASCE.
        AS:0000000077c40007 R3:0000000000000024
        Oops: 0038 ilc:3 [#1] SMP
        Modules linked in: ...
        CPU: 3 PID: 453 Comm: kworker/3:1H Kdump: loaded
        Hardware name: ...
        Workqueue: kblockd blk_mq_run_work_fn
        Krnl PSW : 0404d00180000000 0000000076fc0312 (__kmalloc+0xd2/0x398)
                   R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:1 PM:0 RI:0 EA:3
        Krnl GPRS: ffffffffffffffff 523b05d3ae76abf6 0000000000000000 0000000000092a20
                   0000000000000002 00000007e49b5cc0 00000007eda8f000 0000000000092a20
                   00000007eda8f000 00000003b02856b9 00000000000000a8 523b05d3ae76abf6
                   00000007dd662000 00000007eda8f000 0000000076fc02b2 000003e0037637a0
        Krnl Code: 0000000076fc0302: c004000000d4	brcl	0,76fc04aa
                   0000000076fc0308: b904001b		lgr	%r1,%r11
                  #0000000076fc030c: e3106020001a	algf	%r1,32(%r6)
                  >0000000076fc0312: e31010000082	xg	%r1,0(%r1)
                   0000000076fc0318: b9040001		lgr	%r0,%r1
                   0000000076fc031c: e30061700082	xg	%r0,368(%r6)
                   0000000076fc0322: ec59000100d9	aghik	%r5,%r9,1
                   0000000076fc0328: e34003b80004	lg	%r4,952
        Call Trace:
         [<0000000076fc0312>] __kmalloc+0xd2/0x398
         [<0000000076f318f2>] mempool_alloc+0x72/0x1f8
         [<000003ff8027c5f8>] zfcp_fsf_req_create.isra.7+0x40/0x268 [zfcp]
         [<000003ff8027f1bc>] zfcp_fsf_fcp_cmnd+0xac/0x3f0 [zfcp]
         [<000003ff80280f1a>] zfcp_scsi_queuecommand+0x122/0x1d0 [zfcp]
         [<000003ff800b4218>] scsi_queue_rq+0x778/0xa10 [scsi_mod]
         [<00000000771782a0>] __blk_mq_try_issue_directly+0x130/0x208
         [<000000007717a124>] blk_mq_request_issue_directly+0x4c/0xa8
         [<000003ff801302e2>] dm_mq_queue_rq+0x2ea/0x468 [dm_mod]
         [<0000000077178c12>] blk_mq_dispatch_rq_list+0x33a/0x818
         [<000000007717f064>] __blk_mq_do_dispatch_sched+0x284/0x2f0
         [<000000007717f44c>] __blk_mq_sched_dispatch_requests+0x1c4/0x218
         [<000000007717fa7a>] blk_mq_sched_dispatch_requests+0x52/0x90
         [<0000000077176d74>] __blk_mq_run_hw_queue+0x9c/0xc0
         [<0000000076da6d74>] process_one_work+0x274/0x4d0
         [<0000000076da7018>] worker_thread+0x48/0x560
         [<0000000076daef18>] kthread+0x140/0x160
         [<000000007751d144>] ret_from_fork+0x28/0x30
        Last Breaking-Event-Address:
         [<0000000076fc0474>] __kmalloc+0x234/0x398
        Kernel panic - not syncing: Fatal exception: panic_on_oops
      
      To fix this, simply change the type of the cache variable to 'unsigned
      long', like the rest of zfcp and also the argument for
      'zfcp_reqlist_find_rm()'. This prevents truncation and wrong sign extension
      and so can successfully remove the request from the hash table.
      
      Fixes: e60a6d69 ("[SCSI] zfcp: Remove function zfcp_reqlist_find_safe")
      Cc: <stable@vger.kernel.org> #v2.6.34+
      Signed-off-by: default avatarBenjamin Block <bblock@linux.ibm.com>
      Link: https://lore.kernel.org/r/979f6e6019d15f91ba56182f1aaf68d61bf37fc6.1668595505.git.bblock@linux.ibm.comReviewed-by: default avatarSteffen Maier <maier@linux.ibm.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      0954256e
    • Yuan Can's avatar
      scsi: scsi_debug: Fix possible UAF in sdebug_add_host_helper() · e208a1d7
      Yuan Can authored
      If device_register() fails in sdebug_add_host_helper(), it will goto clean
      and sdbg_host will be freed, but sdbg_host->host_list will not be removed
      from sdebug_host_list, then list traversal may cause UAF. Fix it.
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarYuan Can <yuancan@huawei.com>
      Link: https://lore.kernel.org/r/20221117084421.58918-1-yuancan@huawei.comAcked-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      e208a1d7
    • Yang Yingliang's avatar
      scsi: target: tcm_loop: Fix possible name leak in tcm_loop_setup_hba_bus() · bc68e428
      Yang Yingliang authored
      If device_register() fails in tcm_loop_setup_hba_bus(), the name allocated
      by dev_set_name() need be freed. As comment of device_register() says, it
      should use put_device() to give up the reference in the error path. So fix
      this by calling put_device(), then the name can be freed in kobject_cleanup().
      The 'tl_hba' will be freed in tcm_loop_release_adapter(), so it don't need
      goto error label in this case.
      
      Fixes: 3703b2c5 ("[SCSI] tcm_loop: Add multi-fabric Linux/SCSI LLD fabric module")
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Link: https://lore.kernel.org/r/20221115015042.3652261-1-yangyingliang@huawei.comReviewed-by: default avatarMike Christie <michael.chritie@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      bc68e428
    • Shin'ichiro Kawasaki's avatar
      scsi: mpi3mr: Suppress command reply debug prints · 7d21fcfb
      Shin'ichiro Kawasaki authored
      After it receives command reply, mpi3mr driver checks command result. If
      the result is not zero, it prints out command information. This debug
      information is confusing since they are printed even when the non-zero
      result is expected. "Power-on or device reset occurred" is printed for Test
      Unit Ready command at drive detection. Inquiry failure for unsupported VPD
      page header is also printed. They are harmless but look like failures.
      
      To avoid the confusion, print the command reply debug information only when
      the module parameter logging_level has value MPI3_DEBUG_SCSI_ERROR= 64, in
      same manner as mpt3sas driver.
      Signed-off-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
      Link: https://lore.kernel.org/r/20221111014449.1649968-1-shinichiro.kawasaki@wdc.comReviewed-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      7d21fcfb
  2. 08 Nov, 2022 2 commits
  3. 07 Nov, 2022 1 commit
  4. 22 Oct, 2022 5 commits
  5. 21 Oct, 2022 1 commit
  6. 18 Oct, 2022 2 commits
  7. 16 Oct, 2022 10 commits
    • Linus Torvalds's avatar
      Linux 6.1-rc1 · 9abf2313
      Linus Torvalds authored
      9abf2313
    • Linus Torvalds's avatar
      Merge tag 'random-6.1-rc1-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random · f1947d7c
      Linus Torvalds authored
      Pull more random number generator updates from Jason Donenfeld:
       "This time with some large scale treewide cleanups.
      
        The intent of this pull is to clean up the way callers fetch random
        integers. The current rules for doing this right are:
      
         - If you want a secure or an insecure random u64, use get_random_u64()
      
         - If you want a secure or an insecure random u32, use get_random_u32()
      
           The old function prandom_u32() has been deprecated for a while
           now and is just a wrapper around get_random_u32(). Same for
           get_random_int().
      
         - If you want a secure or an insecure random u16, use get_random_u16()
      
         - If you want a secure or an insecure random u8, use get_random_u8()
      
         - If you want secure or insecure random bytes, use get_random_bytes().
      
           The old function prandom_bytes() has been deprecated for a while
           now and has long been a wrapper around get_random_bytes()
      
         - If you want a non-uniform random u32, u16, or u8 bounded by a
           certain open interval maximum, use prandom_u32_max()
      
           I say "non-uniform", because it doesn't do any rejection sampling
           or divisions. Hence, it stays within the prandom_*() namespace, not
           the get_random_*() namespace.
      
           I'm currently investigating a "uniform" function for 6.2. We'll see
           what comes of that.
      
        By applying these rules uniformly, we get several benefits:
      
         - By using prandom_u32_max() with an upper-bound that the compiler
           can prove at compile-time is ≤65536 or ≤256, internally
           get_random_u16() or get_random_u8() is used, which wastes fewer
           batched random bytes, and hence has higher throughput.
      
         - By using prandom_u32_max() instead of %, when the upper-bound is
           not a constant, division is still avoided, because
           prandom_u32_max() uses a faster multiplication-based trick instead.
      
         - By using get_random_u16() or get_random_u8() in cases where the
           return value is intended to indeed be a u16 or a u8, we waste fewer
           batched random bytes, and hence have higher throughput.
      
        This series was originally done by hand while I was on an airplane
        without Internet. Later, Kees and I worked on retroactively figuring
        out what could be done with Coccinelle and what had to be done
        manually, and then we split things up based on that.
      
        So while this touches a lot of files, the actual amount of code that's
        hand fiddled is comfortably small"
      
      * tag 'random-6.1-rc1-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/crng/random:
        prandom: remove unused functions
        treewide: use get_random_bytes() when possible
        treewide: use get_random_u32() when possible
        treewide: use get_random_{u8,u16}() when possible, part 2
        treewide: use get_random_{u8,u16}() when possible, part 1
        treewide: use prandom_u32_max() when possible, part 2
        treewide: use prandom_u32_max() when possible, part 1
      f1947d7c
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-for-v6.1-2-2022-10-16' of... · 8636df94
      Linus Torvalds authored
      Merge tag 'perf-tools-for-v6.1-2-2022-10-16' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull more perf tools updates from Arnaldo Carvalho de Melo:
      
       - Use BPF CO-RE (Compile Once, Run Everywhere) to support old kernels
         when using bperf (perf BPF based counters) with cgroups.
      
       - Support HiSilicon PCIe Performance Monitoring Unit (PMU), that
         monitors bandwidth, latency, bus utilization and buffer occupancy.
      
         Documented in Documentation/admin-guide/perf/hisi-pcie-pmu.rst.
      
       - User space tasks can migrate between CPUs, so when tracing selected
         CPUs, system-wide sideband is still needed, fix it in the setup of
         Intel PT on hybrid systems.
      
       - Fix metricgroups title message in 'perf list', it should state that
         the metrics groups are to be used with the '-M' option, not '-e'.
      
       - Sync the msr-index.h copy with the kernel sources, adding support for
         using "AMD64_TSC_RATIO" in filter expressions in 'perf trace' as well
         as decoding it when printing the MSR tracepoint arguments.
      
       - Fix program header size and alignment when generating a JIT ELF in
         'perf inject'.
      
       - Add multiple new Intel PT 'perf test' entries, including a jitdump
         one.
      
       - Fix the 'perf test' entries for 'perf stat' CSV and JSON output when
         running on PowerPC due to an invalid topology number in that arch.
      
       - Fix the 'perf test' for arm_coresight failures on the ARM Juno
         system.
      
       - Fix the 'perf test' attr entry for PERF_FORMAT_LOST, adding this
         option to the or expression expected in the intercepted
         perf_event_open() syscall.
      
       - Add missing condition flags ('hs', 'lo', 'vc', 'vs') for arm64 in the
         'perf annotate' asm parser.
      
       - Fix 'perf mem record -C' option processing, it was being chopped up
         when preparing the underlying 'perf record -e mem-events' and thus
         being ignored, requiring using '-- -C CPUs' as a workaround.
      
       - Improvements and tidy ups for 'perf test' shell infra.
      
       - Fix Intel PT information printing segfault in uClibc, where a NULL
         format was being passed to fprintf.
      
      * tag 'perf-tools-for-v6.1-2-2022-10-16' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (23 commits)
        tools arch x86: Sync the msr-index.h copy with the kernel sources
        perf auxtrace arm64: Add support for parsing HiSilicon PCIe Trace packet
        perf auxtrace arm64: Add support for HiSilicon PCIe Tune and Trace device driver
        perf auxtrace arm: Refactor event list iteration in auxtrace_record__init()
        perf tests stat+json_output: Include sanity check for topology
        perf tests stat+csv_output: Include sanity check for topology
        perf intel-pt: Fix system_wide dummy event for hybrid
        perf intel-pt: Fix segfault in intel_pt_print_info() with uClibc
        perf test: Fix attr tests for PERF_FORMAT_LOST
        perf test: test_intel_pt.sh: Add 9 tests
        perf inject: Fix GEN_ELF_TEXT_OFFSET for jit
        perf test: test_intel_pt.sh: Add jitdump test
        perf test: test_intel_pt.sh: Tidy some alignment
        perf test: test_intel_pt.sh: Print a message when skipping kernel tracing
        perf test: test_intel_pt.sh: Tidy some perf record options
        perf test: test_intel_pt.sh: Fix return checking again
        perf: Skip and warn on unknown format 'configN' attrs
        perf list: Fix metricgroups title message
        perf mem: Fix -C option behavior for perf mem record
        perf annotate: Add missing condition flags for arm64
        ...
      8636df94
    • Linus Torvalds's avatar
      Merge tag 'kbuild-fixes-v6.1' of... · 2df76606
      Linus Torvalds authored
      Merge tag 'kbuild-fixes-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild
      
      Pull Kbuild fixes from Masahiro Yamada:
      
       - Fix CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y compile error for the
         combination of Clang >= 14 and GAS <= 2.35.
      
       - Drop vmlinux.bz2 from the rpm package as it just annoyingly increased
         the package size.
      
       - Fix modpost error under build environments using musl.
      
       - Make *.ll files keep value names for easier debugging
      
       - Fix single directory build
      
       - Prevent RISC-V from selecting the broken DWARF5 support when Clang
         and GAS are used together.
      
      * tag 'kbuild-fixes-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
        lib/Kconfig.debug: Add check for non-constant .{s,u}leb128 support to DWARF5
        kbuild: fix single directory build
        kbuild: add -fno-discard-value-names to cmd_cc_ll_c
        scripts/clang-tools: Convert clang-tidy args to list
        modpost: put modpost options before argument
        kbuild: Stop including vmlinux.bz2 in the rpm's
        Kconfig.debug: add toolchain checks for DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
        Kconfig.debug: simplify the dependency of DEBUG_INFO_DWARF4/5
      2df76606
    • Linus Torvalds's avatar
      Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux · 2fcd8f10
      Linus Torvalds authored
      Pull more clk updates from Stephen Boyd:
       "This is the final part of the clk patches for this merge window.
      
        The clk rate range series needed another week to fully bake. Maxime
        fixed the bug that broke clk notifiers and prevented this from being
        included in the first pull request. He also added a unit test on top
        to make sure it doesn't break so easily again. The majority of the
        series fixes up how the clk_set_rate_*() APIs work, particularly
        around when the rate constraints are dropped and how they move around
        when reparenting clks. Overall it's a much needed improvement to the
        clk rate range APIs that used to be pretty broken if you looked
        sideways.
      
        Beyond the core changes there are a few driver fixes for a compilation
        issue or improper data causing clks to fail to register or have the
        wrong parents. These are good to get in before the first -rc so that
        the system actually boots on the affected devices"
      
      * tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (31 commits)
        clk: tegra: Fix Tegra PWM parent clock
        clk: at91: fix the build with binutils 2.27
        clk: qcom: gcc-msm8660: Drop hardcoded fixed board clocks
        clk: mediatek: clk-mux: Add .determine_rate() callback
        clk: tests: Add tests for notifiers
        clk: Update req_rate on __clk_recalc_rates()
        clk: tests: Add missing test case for ranges
        clk: qcom: clk-rcg2: Take clock boundaries into consideration for gfx3d
        clk: Introduce the clk_hw_get_rate_range function
        clk: Zero the clk_rate_request structure
        clk: Stop forwarding clk_rate_requests to the parent
        clk: Constify clk_has_parent()
        clk: Introduce clk_core_has_parent()
        clk: Switch from __clk_determine_rate to clk_core_round_rate_nolock
        clk: Add our request boundaries in clk_core_init_rate_req
        clk: Introduce clk_hw_init_rate_request()
        clk: Move clk_core_init_rate_req() from clk_core_round_rate_nolock() to its caller
        clk: Change clk_core_init_rate_req prototype
        clk: Set req_rate on reparenting
        clk: Take into account uncached clocks in clk_set_rate_range()
        ...
      2fcd8f10
    • Linus Torvalds's avatar
      Merge tag '6.1-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6 · b08cd744
      Linus Torvalds authored
      Pull more cifs updates from Steve French:
      
       - fix a regression in guest mounts to old servers
      
       - improvements to directory leasing (caching directory entries safely
         beyond the root directory)
      
       - symlink improvement (reducing roundtrips needed to process symlinks)
      
       - an lseek fix (to problem where some dir entries could be skipped)
      
       - improved ioctl for returning more detailed information on directory
         change notifications
      
       - clarify multichannel interface query warning
      
       - cleanup fix (for better aligning buffers using ALIGN and round_up)
      
       - a compounding fix
      
       - fix some uninitialized variable bugs found by Coverity and the kernel
         test robot
      
      * tag '6.1-rc-smb3-client-fixes-part2' of git://git.samba.org/sfrench/cifs-2.6:
        smb3: improve SMB3 change notification support
        cifs: lease key is uninitialized in two additional functions when smb1
        cifs: lease key is uninitialized in smb1 paths
        smb3: must initialize two ACL struct fields to zero
        cifs: fix double-fault crash during ntlmssp
        cifs: fix static checker warning
        cifs: use ALIGN() and round_up() macros
        cifs: find and use the dentry for cached non-root directories also
        cifs: enable caching of directories for which a lease is held
        cifs: prevent copying past input buffer boundaries
        cifs: fix uninitialised var in smb2_compound_op()
        cifs: improve symlink handling for smb2+
        smb3: clarify multichannel warning
        cifs: fix regression in very old smb1 mounts
        cifs: fix skipping to incorrect offset in emit_cached_dirents
      b08cd744
    • Tetsuo Handa's avatar
      Revert "cpumask: fix checking valid cpu range". · 80493877
      Tetsuo Handa authored
      This reverts commit 78e5a339 ("cpumask: fix checking valid cpu range").
      
      syzbot is hitting WARN_ON_ONCE(cpu >= nr_cpumask_bits) warning at
      cpu_max_bits_warn() [1], for commit 78e5a339 ("cpumask: fix checking
      valid cpu range") is broken.  Obviously that patch hits WARN_ON_ONCE()
      when e.g.  reading /proc/cpuinfo because passing "cpu + 1" instead of
      "cpu" will trivially hit cpu == nr_cpumask_bits condition.
      
      Although syzbot found this problem in linux-next.git on 2022/09/27 [2],
      this problem was not fixed immediately.  As a result, that patch was
      sent to linux.git before the patch author recognizes this problem, and
      syzbot started failing to test changes in linux.git since 2022/10/10
      [3].
      
      Andrew Jones proposed a fix for x86 and riscv architectures [4].  But
      [2] and [5] indicate that affected locations are not limited to arch
      code.  More delay before we find and fix affected locations, less tested
      kernel (and more difficult to bisect and fix) before release.
      
      We should have inspected and fixed basically all cpumask users before
      applying that patch.  We should not crash kernels in order to ask
      existing cpumask users to update their code, even if limited to
      CONFIG_DEBUG_PER_CPU_MAPS=y case.
      
      Link: https://syzkaller.appspot.com/bug?extid=d0fd2bf0dd6da72496dd [1]
      Link: https://syzkaller.appspot.com/bug?extid=21da700f3c9f0bc40150 [2]
      Link: https://syzkaller.appspot.com/bug?extid=51a652e2d24d53e75734 [3]
      Link: https://lkml.kernel.org/r/20221014155845.1986223-1-ajones@ventanamicro.com [4]
      Link: https://syzkaller.appspot.com/bug?extid=4d46c43d81c3bd155060 [5]
      Reported-by: default avatarAndrew Jones <ajones@ventanamicro.com>
      Reported-by: syzbot+d0fd2bf0dd6da72496dd@syzkaller.appspotmail.com
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Cc: Yury Norov <yury.norov@gmail.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      80493877
    • Nathan Chancellor's avatar
      lib/Kconfig.debug: Add check for non-constant .{s,u}leb128 support to DWARF5 · 0a6de78c
      Nathan Chancellor authored
      When building with a RISC-V kernel with DWARF5 debug info using clang
      and the GNU assembler, several instances of the following error appear:
      
        /tmp/vgettimeofday-48aa35.s:2963: Error: non-constant .uleb128 is not supported
      
      Dumping the .s file reveals these .uleb128 directives come from
      .debug_loc and .debug_ranges:
      
        .Ldebug_loc0:
                .byte   4                               # DW_LLE_offset_pair
                .uleb128 .Lfunc_begin0-.Lfunc_begin0    #   starting offset
                .uleb128 .Ltmp1-.Lfunc_begin0           #   ending offset
                .byte   1                               # Loc expr size
                .byte   90                              # DW_OP_reg10
                .byte   0                               # DW_LLE_end_of_list
      
        .Ldebug_ranges0:
                .byte   4                               # DW_RLE_offset_pair
                .uleb128 .Ltmp6-.Lfunc_begin0           #   starting offset
                .uleb128 .Ltmp27-.Lfunc_begin0          #   ending offset
                .byte   4                               # DW_RLE_offset_pair
                .uleb128 .Ltmp28-.Lfunc_begin0          #   starting offset
                .uleb128 .Ltmp30-.Lfunc_begin0          #   ending offset
                .byte   0                               # DW_RLE_end_of_list
      
      There is an outstanding binutils issue to support a non-constant operand
      to .sleb128 and .uleb128 in GAS for RISC-V but there does not appear to
      be any movement on it, due to concerns over how it would work with
      linker relaxation.
      
      To avoid these build errors, prevent DWARF5 from being selected when
      using clang and an assembler that does not have support for these symbol
      deltas, which can be easily checked in Kconfig with as-instr plus the
      small test program from the dwz test suite from the binutils issue.
      
      Link: https://sourceware.org/bugzilla/show_bug.cgi?id=27215
      Link: https://github.com/ClangBuiltLinux/linux/issues/1719Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      0a6de78c
    • Masahiro Yamada's avatar
      kbuild: fix single directory build · 3753af77
      Masahiro Yamada authored
      Commit f110e5a2 ("kbuild: refactor single builds of *.ko") was wrong.
      
      KBUILD_MODULES _is_ needed for single builds.
      
      Otherwise, "make foo/bar/baz/" does not build module objects at all.
      
      Fixes: f110e5a2 ("kbuild: refactor single builds of *.ko")
      Reported-by: default avatarDavid Sterba <dsterba@suse.cz>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Tested-by: default avatarDavid Sterba <dsterba@suse.com>
      3753af77
    • Linus Torvalds's avatar
      Merge tag 'slab-for-6.1-rc1-hotfix' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab · 1501278b
      Linus Torvalds authored
      Pull slab hotfix from Vlastimil Babka:
       "A single fix for the common-kmalloc series, for warnings on mips and
        sparc64 reported by Guenter Roeck"
      
      * tag 'slab-for-6.1-rc1-hotfix' of git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab:
        mm/slab: use kmalloc_node() for off slab freelist_idx_t array allocation
      1501278b
  8. 15 Oct, 2022 14 commits
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of https://github.com/openrisc/linux · 36d8a3ed
      Linus Torvalds authored
      Pull OpenRISC updates from Stafford Horne:
       "I have relocated to London so not much work from me while I get
        settled.
      
        Still, OpenRISC picked up two patches in this window:
      
         - Fix for kernel page table walking from Jann Horn
      
         - MAINTAINER entry cleanup from Palmer Dabbelt"
      
      * tag 'for-linus' of https://github.com/openrisc/linux:
        MAINTAINERS: git://github -> https://github.com for openrisc
        openrisc: Fix pagewalk usage in arch_dma_{clear, set}_uncached
      36d8a3ed
    • Linus Torvalds's avatar
      Merge tag 'pci-v6.1-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci · 41410965
      Linus Torvalds authored
      Pull pci fix from Bjorn Helgaas:
       "Revert the attempt to distribute spare resources to unconfigured
        hotplug bridges at boot time.
      
        This fixed some dock hot-add scenarios, but Jonathan Cameron reported
        that it broke a topology with a multi-function device where one
        function was a Switch Upstream Port and the other was an Endpoint"
      
      * tag 'pci-v6.1-fixes-1' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
        Revert "PCI: Distribute available resources for root buses, too"
      41410965
    • Hyeonggon Yoo's avatar
      mm/slab: use kmalloc_node() for off slab freelist_idx_t array allocation · e36ce448
      Hyeonggon Yoo authored
      After commit d6a71648 ("mm/slab: kmalloc: pass requests larger than
      order-1 page to page allocator"), SLAB passes large ( > PAGE_SIZE * 2)
      requests to buddy like SLUB does.
      
      SLAB has been using kmalloc caches to allocate freelist_idx_t array for
      off slab caches. But after the commit, freelist_size can be bigger than
      KMALLOC_MAX_CACHE_SIZE.
      
      Instead of using pointer to kmalloc cache, use kmalloc_node() and only
      check if the kmalloc cache is off slab during calculate_slab_order().
      If freelist_size > KMALLOC_MAX_CACHE_SIZE, no looping condition happens
      as it allocates freelist_idx_t array directly from buddy.
      
      Link: https://lore.kernel.org/all/20221014205818.GA1428667@roeck-us.net/Reported-and-tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Fixes: d6a71648 ("mm/slab: kmalloc: pass requests larger than order-1 page to page allocator")
      Signed-off-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
      Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
      e36ce448
    • Palmer Dabbelt's avatar
      MAINTAINERS: git://github -> https://github.com for openrisc · 34a0bac0
      Palmer Dabbelt authored
      Github deprecated the git:// links about a year ago, so let's move to
      the https:// URLs instead.
      Reported-by: default avatarConor Dooley <conor.dooley@microchip.com>
      Link: https://github.blog/2021-09-01-improving-git-protocol-security-github/Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
      Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
      34a0bac0
    • Steve French's avatar
      smb3: improve SMB3 change notification support · e3e94634
      Steve French authored
      Change notification is a commonly supported feature by most servers,
      but the current ioctl to request notification when a directory is
      changed does not return the information about what changed
      (even though it is returned by the server in the SMB3 change
      notify response), it simply returns when there is a change.
      
      This ioctl improves upon CIFS_IOC_NOTIFY by returning the notify
      information structure which includes the name of the file(s) that
      changed and why. See MS-SMB2 2.2.35 for details on the individual
      filter flags and the file_notify_information structure returned.
      
      To use this simply pass in the following (with enough space
      to fit at least one file_notify_information structure)
      
      struct __attribute__((__packed__)) smb3_notify {
             uint32_t completion_filter;
             bool     watch_tree;
             uint32_t data_len;
             uint8_t  data[];
      } __packed;
      
      using CIFS_IOC_NOTIFY_INFO 0xc009cf0b
       or equivalently _IOWR(CIFS_IOCTL_MAGIC, 11, struct smb3_notify_info)
      
      The ioctl will block until the server detects a change to that
      directory or its subdirectories (if watch_tree is set).
      Acked-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
      Acked-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      e3e94634
    • Steve French's avatar
      cifs: lease key is uninitialized in two additional functions when smb1 · 2bff0659
      Steve French authored
      cifs_open and _cifsFileInfo_put also end up with lease_key uninitialized
      in smb1 mounts.  It is cleaner to set lease key to zero in these
      places where leases are not supported (smb1 can not return lease keys
      so the field was uninitialized).
      
      Addresses-Coverity: 1514207 ("Uninitialized scalar variable")
      Addresses-Coverity: 1514331 ("Uninitialized scalar variable")
      Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      2bff0659
    • Steve French's avatar
      cifs: lease key is uninitialized in smb1 paths · 625b60d4
      Steve French authored
      It is cleaner to set lease key to zero in the places where leases are not
      supported (smb1 can not return lease keys so the field was uninitialized).
      
      Addresses-Coverity: 1513994 ("Uninitialized scalar variable")
      Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      625b60d4
    • Steve French's avatar
      smb3: must initialize two ACL struct fields to zero · f09bd695
      Steve French authored
      Coverity spotted that we were not initalizing Stbz1 and Stbz2 to
      zero in create_sd_buf.
      
      Addresses-Coverity: 1513848 ("Uninitialized scalar variable")
      Cc: <stable@vger.kernel.org>
      Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      f09bd695
    • Paulo Alcantara's avatar
      cifs: fix double-fault crash during ntlmssp · b854b4ee
      Paulo Alcantara authored
      The crash occurred because we were calling memzero_explicit() on an
      already freed sess_data::iov[1] (ntlmsspblob) in sess_free_buffer().
      
      Fix this by not calling memzero_explicit() on sess_data::iov[1] as
      it's already by handled by callers.
      
      Fixes: a4e430c8 ("cifs: replace kfree() with kfree_sensitive() for sensitive data")
      Reviewed-by: default avatarEnzo Matsumiya <ematsumiya@suse.de>
      Signed-off-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      b854b4ee
    • Arnaldo Carvalho de Melo's avatar
      tools arch x86: Sync the msr-index.h copy with the kernel sources · a3a36565
      Arnaldo Carvalho de Melo authored
      To pick up the changes in:
      
        b8d1d163 ("x86/apic: Don't disable x2APIC if locked")
        ca5b7c0d ("perf/x86/amd/lbr: Add LbrExtV2 branch record support")
      
      Addressing these tools/perf build warnings:
      
          diff -u tools/arch/x86/include/asm/msr-index.h arch/x86/include/asm/msr-index.h
          Warning: Kernel ABI header at 'tools/arch/x86/include/asm/msr-index.h' differs from latest version at 'arch/x86/include/asm/msr-index.h'
      
      That makes the beautification scripts to pick some new entries:
      
        $ tools/perf/trace/beauty/tracepoints/x86_msr.sh > before
        $ cp arch/x86/include/asm/msr-index.h tools/arch/x86/include/asm/msr-index.h
        $ tools/perf/trace/beauty/tracepoints/x86_msr.sh > after
        $ diff -u before after
        --- before	2022-10-14 18:06:34.294561729 -0300
        +++ after	2022-10-14 18:06:41.285744044 -0300
        @@ -264,6 +264,7 @@
         	[0xc0000102 - x86_64_specific_MSRs_offset] = "KERNEL_GS_BASE",
         	[0xc0000103 - x86_64_specific_MSRs_offset] = "TSC_AUX",
         	[0xc0000104 - x86_64_specific_MSRs_offset] = "AMD64_TSC_RATIO",
        +	[0xc000010e - x86_64_specific_MSRs_offset] = "AMD64_LBR_SELECT",
         	[0xc000010f - x86_64_specific_MSRs_offset] = "AMD_DBG_EXTN_CFG",
         	[0xc0000300 - x86_64_specific_MSRs_offset] = "AMD64_PERF_CNTR_GLOBAL_STATUS",
         	[0xc0000301 - x86_64_specific_MSRs_offset] = "AMD64_PERF_CNTR_GLOBAL_CTL",
        $
      
      Now one can trace systemwide asking to see backtraces to where that MSR
      is being read/written, see this example with a previous update:
      
        # perf trace -e msr:*_msr/max-stack=32/ --filter="msr>=IA32_U_CET && msr<=IA32_INT_SSP_TAB"
        ^C#
      
      If we use -v (verbose mode) we can see what it does behind the scenes:
      
        # perf trace -v -e msr:*_msr/max-stack=32/ --filter="msr>=IA32_U_CET && msr<=IA32_INT_SSP_TAB"
        Using CPUID AuthenticAMD-25-21-0
        0x6a0
        0x6a8
        New filter for msr:read_msr: (msr>=0x6a0 && msr<=0x6a8) && (common_pid != 597499 && common_pid != 3313)
        0x6a0
        0x6a8
        New filter for msr:write_msr: (msr>=0x6a0 && msr<=0x6a8) && (common_pid != 597499 && common_pid != 3313)
        mmap size 528384B
        ^C#
      
      Example with a frequent msr:
      
        # perf trace -v -e msr:*_msr/max-stack=32/ --filter="msr==IA32_SPEC_CTRL" --max-events 2
        Using CPUID AuthenticAMD-25-21-0
        0x48
        New filter for msr:read_msr: (msr==0x48) && (common_pid != 2612129 && common_pid != 3841)
        0x48
        New filter for msr:write_msr: (msr==0x48) && (common_pid != 2612129 && common_pid != 3841)
        mmap size 528384B
        Looking at the vmlinux_path (8 entries long)
        symsrc__init: build id mismatch for vmlinux.
        Using /proc/kcore for kernel data
        Using /proc/kallsyms for symbols
           0.000 Timer/2525383 msr:write_msr(msr: IA32_SPEC_CTRL, val: 6)
                                             do_trace_write_msr ([kernel.kallsyms])
                                             do_trace_write_msr ([kernel.kallsyms])
                                             __switch_to_xtra ([kernel.kallsyms])
                                             __switch_to ([kernel.kallsyms])
                                             __schedule ([kernel.kallsyms])
                                             schedule ([kernel.kallsyms])
                                             futex_wait_queue_me ([kernel.kallsyms])
                                             futex_wait ([kernel.kallsyms])
                                             do_futex ([kernel.kallsyms])
                                             __x64_sys_futex ([kernel.kallsyms])
                                             do_syscall_64 ([kernel.kallsyms])
                                             entry_SYSCALL_64_after_hwframe ([kernel.kallsyms])
                                             __futex_abstimed_wait_common64 (/usr/lib64/libpthread-2.33.so)
           0.030 :0/0 msr:write_msr(msr: IA32_SPEC_CTRL, val: 2)
                                             do_trace_write_msr ([kernel.kallsyms])
                                             do_trace_write_msr ([kernel.kallsyms])
                                             __switch_to_xtra ([kernel.kallsyms])
                                             __switch_to ([kernel.kallsyms])
                                             __schedule ([kernel.kallsyms])
                                             schedule_idle ([kernel.kallsyms])
                                             do_idle ([kernel.kallsyms])
                                             cpu_startup_entry ([kernel.kallsyms])
                                             secondary_startup_64_no_verify ([kernel.kallsyms])
        #
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Daniel Sneddon <daniel.sneddon@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Link: https://lore.kernel.org/lkml/Y0nQkz2TUJxwfXJd@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a3a36565
    • Qi Liu's avatar
      perf auxtrace arm64: Add support for parsing HiSilicon PCIe Trace packet · 5e91e57e
      Qi Liu authored
      Add support for using 'perf report --dump-raw-trace' to parse PTT packet.
      
      Example usage:
      
      Output will contain raw PTT data and its textual representation, such
      as (8DW format):
      
      0 0 0x5810 [0x30]: PERF_RECORD_AUXTRACE size: 0x400000  offset: 0
      ref: 0xa5d50c725  idx: 0  tid: -1  cpu: 0
      .
      . ... HISI PTT data: size 4194304 bytes
      .  00000000: 00 00 00 00                                 Prefix
      .  00000004: 08 20 00 60                                 Header DW0
      .  00000008: ff 02 00 01                                 Header DW1
      .  0000000c: 20 08 00 00                                 Header DW2
      .  00000010: 10 e7 44 ab                                 Header DW3
      .  00000014: 2a a8 1e 01                                 Time
      .  00000020: 00 00 00 00                                 Prefix
      .  00000024: 01 00 00 60                                 Header DW0
      .  00000028: 0f 1e 00 01                                 Header DW1
      .  0000002c: 04 00 00 00                                 Header DW2
      .  00000030: 40 00 81 02                                 Header DW3
      .  00000034: ee 02 00 00                                 Time
      ....
      
      This patch only add basic parsing support according to the definition of
      the PTT packet described in Documentation/trace/hisi-ptt.rst. And the
      fields of each packet can be further decoded following the PCIe Spec's
      definition of TLP packet.
      Signed-off-by: default avatarQi Liu <liuqi115@huawei.com>
      Signed-off-by: default avatarYicong Yang <yangyicong@hisilicon.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Bjorn Helgaas <helgaas@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: John Garry <john.garry@huawei.com>
      Cc: Jonathan Cameron <jonathan.cameron@huawei.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Mike Leach <mike.leach@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Qi Liu <liuqi6124@gmail.com>
      Cc: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Zeng Prime <prime.zeng@huawei.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-pci@vger.kernel.org
      Cc: linuxarm@huawei.com
      Link: https://lore.kernel.org/r/20220927081400.14364-4-yangyicong@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5e91e57e
    • Qi Liu's avatar
      perf auxtrace arm64: Add support for HiSilicon PCIe Tune and Trace device driver · 057381a7
      Qi Liu authored
      HiSilicon PCIe tune and trace device (PTT) could dynamically tune the
      PCIe link's events, and trace the TLP headers).
      
      This patch add support for PTT device in perf tool, so users could use
      'perf record' to get TLP headers trace data.
      Reviewed-by: default avatarLeo Yan <leo.yan@linaro.org>
      Signed-off-by: default avatarQi Liu <liuqi115@huawei.com>
      Signed-off-by: default avatarYicong Yang <yangyicong@hisilicon.com>
      Acked-by: default avatarJohn Garry <john.garry@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Bjorn Helgaas <helgaas@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jonathan Cameron <jonathan.cameron@huawei.com>
      Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Mike Leach <mike.leach@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Qi Liu <liuqi6124@gmail.com>
      Cc: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Zeng Prime <prime.zeng@huawei.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-pci@vger.kernel.org
      Cc: linuxarm@huawei.com
      Link: https://lore.kernel.org/r/20220927081400.14364-3-yangyicong@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      057381a7
    • Qi Liu's avatar
      perf auxtrace arm: Refactor event list iteration in auxtrace_record__init() · 45a3975f
      Qi Liu authored
      Add find_pmu_for_event() and use to simplify logic in
      auxtrace_record_init(). find_pmu_for_event() will be reused in
      subsequent patches.
      Reviewed-by: default avatarJohn Garry <john.garry@huawei.com>
      Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Reviewed-by: default avatarLeo Yan <leo.yan@linaro.org>
      Signed-off-by: default avatarQi Liu <liuqi115@huawei.com>
      Signed-off-by: default avatarYicong Yang <yangyicong@hisilicon.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Bjorn Helgaas <helgaas@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Mike Leach <mike.leach@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Qi Liu <liuqi6124@gmail.com>
      Cc: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Zeng Prime <prime.zeng@huawei.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linux-pci@vger.kernel.org
      Cc: linuxarm@huawei.com
      Link: https://lore.kernel.org/r/20220927081400.14364-2-yangyicong@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      45a3975f
    • Athira Rajeev's avatar
      perf tests stat+json_output: Include sanity check for topology · 58d4802a
      Athira Rajeev authored
      Testcase stat+json_output.sh fails in powerpc:
      
      	86: perf stat JSON output linter : FAILED!
      
      The testcase "stat+json_output.sh" verifies perf stat JSON output. The
      test covers aggregation modes like per-socket, per-core, per-die, -A
      (no_aggr mode) along with few other tests. It counts expected fields for
      various commands. For example say -A (i.e, AGGR_NONE mode), expects 7
      fields in the output having "CPU" as first field. Same way, for
      per-socket, it expects the first field in result to point to socket id.
      The testcases compares the result with expected count.
      
      The values for socket, die, core and cpu are fetched from topology
      directory:
      
        /sys/devices/system/cpu/cpu*/topology.
      
      For example, socket value is fetched from "physical_package_id" file of
      topology directory.  (cpu__get_topology_int() in util/cpumap.c)
      
      If a platform fails to fetch the topology information, values will be
      set to -1. For example, incase of pSeries platform of powerpc, value for
      "physical_package_id" is restricted and not exposed. So, -1 will be
      assigned.
      
      Perf code has a checks for valid cpu id in "aggr_printout"
      (stat-display.c), which displays the fields. So, in cases where topology
      values not exposed, first field of the output displaying will be empty.
      This cause the testcase to fail, as it counts  number of fields in the
      output.
      
      Incase of -A (AGGR_NONE mode,), testcase expects 7 fields in the output,
      becos of -1 value obtained from topology files for some, only 6 fields
      are printed. Hence a testcase failure reported due to mismatch in number
      of fields in the output.
      
      Patch here adds a sanity check in the testcase for topology.  Check will
      help to skip the test if -1 value found.
      
      Fixes: 0c343af2 ("perf test: JSON format checking")
      Reported-by: default avatarDisha Goel <disgoel@linux.vnet.ibm.com>
      Suggested-by: default avatarIan Rogers <irogers@google.com>
      Suggested-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarAthira Jajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Claire Jensen <cjense@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: linuxppc-dev@lists.ozlabs.org
      Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: Nageswara R Sastry <rnsastry@linux.ibm.com>
      Link: https://lore.kernel.org/r/20221006155149.67205-2-atrajeev@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      58d4802a