1. 14 Dec, 2022 24 commits
    • Huacai Chen's avatar
      LoongArch: Update Loongson-3 default config file · 5535f4f7
      Huacai Chen authored
      1, Enable suspend (ACPI S3) and hibernation (ACPI S4).
      2, Enable some options for FDT-based systems (e.g., SERIAL_OF_PLATFORM).
      3, Enable CONFIG_KALLSYMS_ALL and CONFIG_DEBUG_FS to convenient ftrace.
      4, Regenerate the whole file to keep the order of options be the same as
         the latest source code.
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      5535f4f7
    • Qing Zhang's avatar
      LoongArch: modules/ftrace: Initialize PLT at load time · 28ac0a9e
      Qing Zhang authored
      This patch implements ftrace trampolines through plt entry.
      
      Tested by forcing ftrace_make_call() to use the module PLT, and then
      loading up a module after setting up ftrace with:
      
      | echo ":mod:<module-name>" > set_ftrace_filter;
      | echo function > current_tracer;
      | modprobe <module-name>
      
      Since FTRACE_ADDR/FTRACE_REGS_ADDR is only defined when CONFIG_DYNAMIC_
      FTRACE is selected, we wrap their usage in module_init_ftrace_plt() with
      ifdeffery rather than using IS_ENABLED().
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      28ac0a9e
    • Qing Zhang's avatar
      LoongArch/ftrace: Add HAVE_FUNCTION_GRAPH_RET_ADDR_PTR support · a51ac524
      Qing Zhang authored
      ftrace_graph_ret_addr() can be called by stack unwinding code to convert
      a found stack return address ('ret') to its original value, in case the
      function graph tracer has modified it to be 'return_to_handler'. If the
      hasn't been modified, the unchanged value of 'ret' is returned.
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      a51ac524
    • Qing Zhang's avatar
      LoongArch/ftrace: Add HAVE_DYNAMIC_FTRACE_WITH_ARGS support · ac7127e1
      Qing Zhang authored
      Allow for arguments to be passed in to ftrace_regs by default. If this
      is set, then arguments and stack can be found from the pt_regs.
      
      1. HAVE_DYNAMIC_FTRACE_WITH_ARGS don't need special hook for graph
      tracer entry point, but instead we can use graph_ops::func function to
      install the return_hooker.
      
      2. Livepatch requires this option in the future.
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      ac7127e1
    • Qing Zhang's avatar
      LoongArch/ftrace: Add HAVE_DYNAMIC_FTRACE_WITH_REGS support · 8778ba2c
      Qing Zhang authored
      This patch implements CONFIG_DYNAMIC_FTRACE_WITH_REGS on LoongArch,
      which allows a traced function's arguments (and some other registers)
      to be captured into a struct pt_regs, allowing these to be inspected
      and modified.
      Co-developed-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      8778ba2c
    • Qing Zhang's avatar
      LoongArch/ftrace: Add dynamic function graph tracer support · 5fcfad3d
      Qing Zhang authored
      Once the function_graph tracer is enabled, a filtered function has the
      following call sequence:
      
      1) ftracer_caller     ==> on/off by ftrace_make_call/ftrace_make_nop
      2) ftrace_graph_caller
      3) ftrace_graph_call  ==> on/off by ftrace_en/disable_ftrace_graph_caller
      4) prepare_ftrace_return
      
      Considering the following DYNAMIC_FTRACE_WITH_REGS feature, it would be
      more extendable to have a ftrace_graph_caller function, instead of
      calling prepare_ftrace_return directly in ftrace_caller.
      Co-developed-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      5fcfad3d
    • Qing Zhang's avatar
      LoongArch/ftrace: Add dynamic function tracer support · 4733f09d
      Qing Zhang authored
      The compiler has inserted 2 NOPs before the regular function prologue.
      T series registers are available and safe because of LoongArch's psABI.
      
      At runtime, we can replace nop with bl to enable ftrace call and replace
      bl with nop to disable ftrace call. The bl instruction requires us to
      save the original RA value, so it saves RA at t0 here.
      
      Details are:
      
      | Compiled   |       Disabled         |        Enabled         |
      +------------+------------------------+------------------------+
      | nop        | move     t0, ra        | move    t0, ra         |
      | nop        | nop                    | bl      ftrace_caller  |
      | func_body  | func_body              | func_body              |
      
      The RA value will be recovered by ftrace_regs_entry, and restored into
      RA before returning to the regular function prologue. When a function is
      not being traced, the "move t0, ra" is not harmful.
      
      1) ftrace_make_call, ftrace_make_nop (in kernel/ftrace.c)
         The two functions turn each recorded call site of filtered functions
         into a call to ftrace_caller or nops.
      
      2) ftracce_update_ftrace_func (in kernel/ftrace.c)
         turns the nops at ftrace_call into a call to a generic entry for
         function tracers.
      
      3) ftrace_caller (in kernel/mcount_dyn.S)
         The entry where each _mcount call sites calls to once they are
         filtered to be traced.
      Co-developed-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      4733f09d
    • Qing Zhang's avatar
      LoongArch/ftrace: Add recordmcount support · a0a458fb
      Qing Zhang authored
      Recordmcount utility under scripts is run, after compiling each object,
      to find out all the locations of calling _mcount() and put them into
      specific seciton named __mcount_loc.
      
      Then the linker collects all such information into a table in the kernel
      image (between __start_mcount_loc and __stop_mcount_loc) for later use
      by ftrace.
      
      This patch adds LoongArch specific definitions to identify such locations.
      And on LoongArch, only the C version is used to build the kernel now that
      CONFIG_HAVE_C_RECORDMCOUNT is on.
      Acked-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      a0a458fb
    • Qing Zhang's avatar
      LoongArch/ftrace: Add basic support · dbe3ba30
      Qing Zhang authored
      This patch contains basic ftrace support for LoongArch. Specifically,
      function tracer (HAVE_FUNCTION_TRACER), function graph tracer (HAVE_
      FUNCTION_GRAPH_TRACER) are implemented following the instructions in
      Documentation/trace/ftrace-design.txt.
      
      Use `-pg` makes stub like a child function `void _mcount(void *ra)`.
      Thus, it can be seen store RA and alloc stack before `call _mcount`.
      Find `alloc stack` at first, and then find `store RA`.
      
      Note that the functions in both inst.c and time.c should not be hooked
      with the compiler's -pg option: to prevent infinite self-referencing for
      the former, and to ignore early setup stuff for the latter.
      Co-developed-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarJinyang He <hejinyang@loongson.cn>
      Signed-off-by: default avatarQing Zhang <zhangqing@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      dbe3ba30
    • Huacai Chen's avatar
      LoongArch: module: Use got/plt section indices for relocations · 9151dde4
      Huacai Chen authored
      Instead of saving a pointer to the .got, .plt and .plt_idx sections to
      apply {got,plt}-based relocations, save and use their section indices
      instead.
      
      The mod->arch.{core,init}.{got,plt} pointers were problematic for live-
      patch because they pointed within temporary section headers (provided by
      the module loader via info->sechdrs) that would be freed after module
      load. Since livepatch modules may need to apply relocations post-module-
      load (for example, to patch a module that is loaded later), using section
      indices to offset into the section headers (instead of accessing them
      through a saved pointer) allows livepatch modules on LoongArch to pass
      in their own copy of the section headers to apply_relocate_add() to
      apply delayed relocations.
      
      The method used is same as commit c8ebf64e ("arm64/module: use plt
      section indices for relocations").
      Signed-off-by: default avatarHongchen Zhang <zhanghongchen@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      9151dde4
    • Huacai Chen's avatar
      LoongArch: Add basic STACKPROTECTOR support · 09f33601
      Huacai Chen authored
      Add basic stack protector support similar to other architectures. A
      constant canary value is set at boot time, and with help of compiler's
      -fstack-protector we can detect stack corruption.
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      09f33601
    • Huacai Chen's avatar
      LoongArch: Add hibernation (ACPI S4) support · 7db54bfe
      Huacai Chen authored
      Add hibernation (Suspend to Disk, aka ACPI S4) support for LoongArch.
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      7db54bfe
    • Huacai Chen's avatar
      LoongArch: Add suspend (ACPI S3) support · 366bb35a
      Huacai Chen authored
      Add suspend (Suspend To RAM, aka ACPI S3) support for LoongArch.
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      366bb35a
    • Binbin Zhou's avatar
      LoongArch: Add processing ISA Node in DeviceTree · 27cab431
      Binbin Zhou authored
      Similar to commit 6d0068ad ("MIPS: Loongson64: Process ISA
      Node in DeviceTree"), we process ISA node in DeviceTree for FDT-based
      systems.
      
      Previously, we are hardcoding reserved ISA I/O Space in, now we are
      processing it I/O via DeviceTree directly. The ranges property of ISA
      node is used to determine the size and address of reserved I/O space.
      Signed-off-by: default avatarBinbin Zhou <zhoubinbin@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      27cab431
    • Binbin Zhou's avatar
      LoongArch: Add FDT booting support from efi system table · 88d4d957
      Binbin Zhou authored
      Since commit 40cd01a9("efi/loongarch: libstub: remove dependency on
      flattened DT"), we can parse the FDT from efi system table.
      
      And now, LoongArch is coming to support booting with FDT, so we add the
      relevant booting support as well as parameter parsing.
      Signed-off-by: default avatarBinbin Zhou <zhoubinbin@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      88d4d957
    • Huacai Chen's avatar
      LoongArch: Use alternative to optimize libraries · a275a82d
      Huacai Chen authored
      Use the alternative to optimize common libraries according whether CPU
      has UAL (hardware unaligned access support) feature, including memset(),
      memcopy(), memmove(), copy_user() and clear_user().
      
      We have tested UnixBench on a Loongson-3A5000 quad-core machine (1.6GHz):
      
      1, One copy, before patch:
      
      System Benchmarks Index Values               BASELINE       RESULT    INDEX
      Dhrystone 2 using register variables         116700.0    9566582.0    819.8
      Double-Precision Whetstone                       55.0       2805.3    510.1
      Execl Throughput                                 43.0       2120.0    493.0
      File Copy 1024 bufsize 2000 maxblocks          3960.0     209833.0    529.9
      File Copy 256 bufsize 500 maxblocks            1655.0      89400.0    540.2
      File Copy 4096 bufsize 8000 maxblocks          5800.0     320036.0    551.8
      Pipe Throughput                               12440.0     340624.0    273.8
      Pipe-based Context Switching                   4000.0     109939.1    274.8
      Process Creation                                126.0       4728.7    375.3
      Shell Scripts (1 concurrent)                     42.4       2223.1    524.3
      Shell Scripts (8 concurrent)                      6.0        883.1   1471.9
      System Call Overhead                          15000.0     518639.1    345.8
                                                                         ========
      System Benchmarks Index Score                                         500.2
      
      2, One copy, after patch:
      
      System Benchmarks Index Values               BASELINE       RESULT    INDEX
      Dhrystone 2 using register variables         116700.0    9567674.7    819.9
      Double-Precision Whetstone                       55.0       2805.5    510.1
      Execl Throughput                                 43.0       2392.7    556.4
      File Copy 1024 bufsize 2000 maxblocks          3960.0     417804.0   1055.1
      File Copy 256 bufsize 500 maxblocks            1655.0     112909.5    682.2
      File Copy 4096 bufsize 8000 maxblocks          5800.0    1255207.4   2164.2
      Pipe Throughput                               12440.0     555712.0    446.7
      Pipe-based Context Switching                   4000.0      99964.5    249.9
      Process Creation                                126.0       5192.5    412.1
      Shell Scripts (1 concurrent)                     42.4       2302.4    543.0
      Shell Scripts (8 concurrent)                      6.0        919.6   1532.6
      System Call Overhead                          15000.0     511159.3    340.8
                                                                         ========
      System Benchmarks Index Score                                         640.1
      
      3, Four copies, before patch:
      
      System Benchmarks Index Values               BASELINE       RESULT    INDEX
      Dhrystone 2 using register variables         116700.0   38268610.5   3279.2
      Double-Precision Whetstone                       55.0      11222.2   2040.4
      Execl Throughput                                 43.0       7892.0   1835.3
      File Copy 1024 bufsize 2000 maxblocks          3960.0     235149.6    593.8
      File Copy 256 bufsize 500 maxblocks            1655.0      74959.6    452.9
      File Copy 4096 bufsize 8000 maxblocks          5800.0     545048.5    939.7
      Pipe Throughput                               12440.0    1337359.0   1075.0
      Pipe-based Context Switching                   4000.0     473663.9   1184.2
      Process Creation                                126.0      17491.2   1388.2
      Shell Scripts (1 concurrent)                     42.4       6865.7   1619.3
      Shell Scripts (8 concurrent)                      6.0       1015.9   1693.1
      System Call Overhead                          15000.0    1899535.2   1266.4
                                                                         ========
      System Benchmarks Index Score                                        1278.3
      
      4, Four copies, after patch:
      
      System Benchmarks Index Values               BASELINE       RESULT    INDEX
      Dhrystone 2 using register variables         116700.0   38272815.5   3279.6
      Double-Precision Whetstone                       55.0      11222.8   2040.5
      Execl Throughput                                 43.0       8839.2   2055.6
      File Copy 1024 bufsize 2000 maxblocks          3960.0     313912.9    792.7
      File Copy 256 bufsize 500 maxblocks            1655.0      80976.1    489.3
      File Copy 4096 bufsize 8000 maxblocks          5800.0    1176594.3   2028.6
      Pipe Throughput                               12440.0    2100941.9   1688.9
      Pipe-based Context Switching                   4000.0     476696.4   1191.7
      Process Creation                                126.0      18394.7   1459.9
      Shell Scripts (1 concurrent)                     42.4       7172.2   1691.6
      Shell Scripts (8 concurrent)                      6.0       1058.3   1763.9
      System Call Overhead                          15000.0    1874714.7   1249.8
                                                                         ========
      System Benchmarks Index Score                                        1488.8
      Signed-off-by: default avatarJun Yi <yijun@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      a275a82d
    • Huacai Chen's avatar
      LoongArch: Add alternative runtime patching mechanism · 19e5eb15
      Huacai Chen authored
      Introduce the "alternative" mechanism from ARM64 and x86 for LoongArch
      to apply runtime patching. The main purpose of this patch is to provide
      a framework. In future we can use this mechanism (i.e., the ALTERNATIVE
      and ALTERNATIVE_2 macros) to optimize hotspot functions according to cpu
      features.
      Signed-off-by: default avatarJun Yi <yijun@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      19e5eb15
    • Huacai Chen's avatar
      LoongArch: Add unaligned access support · 61a6fccc
      Huacai Chen authored
      Loongson-2 series (Loongson-2K500, Loongson-2K1000) don't support
      unaligned access in hardware, while Loongson-3 series (Loongson-3A5000,
      Loongson-3C5000) are configurable whether support unaligned access in
      hardware. This patch add unaligned access emulation for those LoongArch
      processors without hardware support.
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      61a6fccc
    • Youling Tang's avatar
      LoongArch: BPF: Add BPF exception tables · dbcd7f5f
      Youling Tang authored
      Inspired by commit 80083428("bpf, arm64: Add BPF exception tables"),
      do similar to LoongArch to add BPF exception tables.
      
      When a tracing BPF program attempts to read memory without using the
      bpf_probe_read() helper, the verifier marks the load instruction with
      the BPF_PROBE_MEM flag. Since the LoongArch JIT does not currently
      recognize this flag it falls back to the interpreter.
      
      Add support for BPF_PROBE_MEM, by appending an exception table to the
      BPF program. If the load instruction causes a data abort, the fixup
      infrastructure finds the exception table and fixes up the fault, by
      clearing the destination register and jumping over the faulting
      instruction.
      
      To keep the compact exception table entry format, inspect the pc in
      fixup_exception(). A more generic solution would add a "handler" field
      to the table entry, like on x86, s390 and arm64, etc.
      Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      dbcd7f5f
    • Youling Tang's avatar
      LoongArch: Remove the .fixup section usage · 912bcfaf
      Youling Tang authored
      Use the `.L_xxx` label to improve fixup code and then remove the .fixup
      section usage.
      Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      912bcfaf
    • Youling Tang's avatar
      LoongArch: extable: Add a dedicated uaccess handler · 672999cf
      Youling Tang authored
      Inspired by commit 2e77a62c("arm64: extable: add a dedicated uaccess
      handler"), do similar to LoongArch to add a dedicated uaccess exception
      handler to update registers in exception context and subsequently return
      back into the function which faulted, so we remove the need for fixups
      specialized to each faulting instruction.
      
      Add gpr-num.h here because we need to map the same GPR names to integer
      constants, so that we can use this to build meta-data for the exception
      fixups.
      
      The compiler treats gpr 0 as zero rather than $r0, so set it separately
      to .L__gpr_num_zero, otherwise the following assembly error will occurs:
      
      {standard input}: Assembler messages:
      {standard input}:1074: Error: invalid operands (*UND* and *ABS* sections) for `<<'
      {standard input}:1160: Error: invalid operands (*UND* and *ABS* sections) for `<<'
      make[1]: *** [scripts/Makefile.build:249: fs/fcntl.o] Error 1
      Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      672999cf
    • Youling Tang's avatar
      LoongArch: extable: Add `type` and `data` fields · 26bc8244
      Youling Tang authored
      This is a LoongArch port of commit d6e2cc56 ("arm64: extable: add
      `type` and `data` fields").
      
      Subsequent patches will add specialized handlers for fixups, in addition
      to the simple PC fixup we have today. In preparation, this patch adds a
      new `type` field to struct exception_table_entry, and uses this to
      distinguish the fixup and other cases. A `data` field is also added so
      that subsequent patches can associate data specific to each exception
      site (e.g. register numbers).
      
      Handlers are named ex_handler_*() for consistency, following the example
      of x86. At the same time, get_ex_fixup() is split out into a helper so
      that it can be used by other ex_handler_*() functions in the subsequent
      patches.
      Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      26bc8244
    • Youling Tang's avatar
      LoongArch: Switch to relative exception tables · 3d36f429
      Youling Tang authored
      Similar to other architectures such as arm64, x86, riscv and so on, use
      offsets relative to the exception table entry values rather than their
      absolute addresses for both the exception location and the fixup.
      
      However, LoongArch label difference because it will actually produce two
      relocations, a pair of R_LARCH_ADD32 and R_LARCH_SUB32. Take simple code
      below for example:
      
      $ cat test_ex_table.S
      .section .text
      1:
              nop
      .section __ex_table,"a"
              .balign 4
              .long (1b - .)
      .previous
      
      $ loongarch64-unknown-linux-gnu-gcc -c test_ex_table.S
      $ loongarch64-unknown-linux-gnu-readelf -Wr test_ex_table.o
      
      Relocation section '.rela__ex_table' at offset 0x100 contains 2 entries:
          Offset            Info             Type         Symbol's Value   Symbol's Name + Addend
      0000000000000000 0000000600000032 R_LARCH_ADD32    0000000000000000  .L1^B1 + 0
      0000000000000000 0000000500000037 R_LARCH_SUB32    0000000000000000  L0^A + 0
      
      The modpost will complain the R_LARCH_SUB32 relocation, so we need to
      patch modpost.c to skip this relocation for .rela__ex_table section.
      Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      3d36f429
    • Youling Tang's avatar
      LoongArch: Consolidate __ex_table construction · 508f28c6
      Youling Tang authored
      Consolidate all the __ex_table constuction code with a _ASM_EXTABLE or
      _asm_extable helper.
      
      There should be no functional change as a result of this patch.
      Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      508f28c6
  2. 13 Dec, 2022 1 commit
  3. 12 Dec, 2022 5 commits
    • Rafael J. Wysocki's avatar
      Merge branches 'acpi-fan', 'acpi-pcc', 'acpi-misc' and 'pnp' · bee74dcb
      Rafael J. Wysocki authored
      Merge ACPI fan driver fixes, ACPI PCC driver fixes, miscellaneous ACPI
      cleanups and PNP updates for 6.2-rc1:
      
       - Make the ACPI fan driver use sysfs_emit_at() in its sysfs interface
         code (ye xingchen).
      
       - Fix the _FIF package extraction failure handling in the ACPI fan
         driver (Hanjun Guo).
      
       - Fix the PCC mailbox handling error code path (Huisong Li).
      
       - Avoid using PCC Opregions if there is no platform interrupt allocated
         for this purpose (Huisong Li).
      
       - Use sysfs_emit() instead of scnprintf() in the ACPI PAD driver and
         CPPC library (ye xingchen).
      
       - Fix some kernel-doc issues in the ACPI GSI processing code (Xiongfeng
         Wang).
      
       - Fix name memory leak in pnp_alloc_dev() (Yang Yingliang).
      
       - Do not disable PNP devices on suspend when they cannot be re-enabled
         on resume (Hans de Goede).
      
      * acpi-fan:
        ACPI: fan: Convert to use sysfs_emit_at() API
        ACPI: fan: Bail out if extract package failed
      
      * acpi-pcc:
        mailbox: pcc: Reset pcc_chan_count to zero in case of PCC probe failure
        ACPI: PCC: Setup PCC Opregion handler only if platform interrupt is available
      
      * acpi-misc:
        ACPI: use sysfs_emit() instead of scnprintf()
        ACPI: irq: Fix some kernel-doc issues
      
      * pnp:
        PNP: Do not disable devices on suspend when they cannot be re-enabled on resume
        PNP: fix name memory leak in pnp_alloc_dev()
      bee74dcb
    • Rafael J. Wysocki's avatar
      Merge branches 'acpi-apei', 'acpi-x86', 'acpi-battery' and 'acpi-pfrut' · 39f26d10
      Rafael J. Wysocki authored
      Make ACPI APEI updates, x86-specific ACPI updates, ACPI battery driver
      fix and ACPI PFRU/T driver fixes for 6.2-rc1:
      
       - Drop unsetting ACPI APEI driver data on remove (Uwe Kleine-König).
      
       - Use xchg_release() instead of cmpxchg() for updating new GHES cache
         slots (Ard Biesheuvel).
      
       - Clean up the ACPI APEI code (Sudeep Holla, Christophe JAILLET, Jay Lu).
      
       - Add new I2C device enumeration quirks for Medion Lifetab S10346 and
         Lenovo Yoga Tab 3 Pro (YT3-X90F) (Hans de Goede).
      
       - Make the ACPI battery driver notify user space about adding new
         battery hooks and removing the existing ones (Armin Wolf).
      
       - Modify the pfr_update and pfr_telemetry drivers to use ACPI_FREE()
         for freeing acpi_object structures to help diagnostics (Wang ShaoBo).
      
      * acpi-apei:
        ACPI: APEI: EINJ: Refactor available_error_type_show()
        ACPI: APEI: EINJ: Fix formatting errors
        ACPI: APEI: Remove a useless include
        ACPI: APEI: Silence missing prototype warnings
        apei/ghes: Use xchg_release() for updating new cache slot instead of cmpxchg()
        ACPI: APEI: Drop unsetting driver data on remove
      
      * acpi-x86:
        ACPI: x86: Add skip i2c clients quirk for Medion Lifetab S10346
        ACPI: x86: Add skip i2c clients quirk for Lenovo Yoga Tab 3 Pro (YT3-X90F)
      
      * acpi-battery:
        ACPI: battery: Call power_supply_changed() when adding hooks
      
      * acpi-pfrut:
        ACPI: pfr_update: use ACPI_FREE() to free acpi_object
        ACPI: pfr_telemetry: use ACPI_FREE() to free acpi_object
      39f26d10
    • Rafael J. Wysocki's avatar
      Merge branches 'acpi-pm', 'acpi-processor', 'acpi-ec' and 'acpi-video' · 6f158181
      Rafael J. Wysocki authored
      Make ACPI power management changes, ACPI processor driver updates, ACPI
      EC driver quirk and ACPI backlight driver updates for 6.2-rc1:
      
       - Print full name paths of ACPI power resources objects during
         enumeration (Kane Chen).
      
       - Eliminate a compiler warning regarding a missing function prototype
         in the ACPI power management code (Sudeep Holla).
      
       - Fix and clean up the ACPI processor driver (Rafael Wysocki, Li Zhong,
         Colin Ian King, Sudeep Holla).
      
       - Add quirk for the HP Pavilion Gaming 15-cx0041ur to the ACPI EC
         driver (Mia Kanashi).
      
       - Add some mew ACPI backlight handling quirks and update some existing
         ones (Hans de Goede).
      
       - Make the ACPI backlight driver prefer the native backlight control
         over vendor backlight control when possible (Hans de Goede).
      
      * acpi-pm:
        ACPI: PM: Silence missing prototype warning
        ACPI: PM: Print full name path while adding power resource
      
      * acpi-processor:
        ACPI: processor: perflib: Adjust acpi_processor_notify_smm() return value
        ACPI: processor: perflib: Rearrange acpi_processor_notify_smm()
        ACPI: processor: perflib: Rearrange unregistration routine
        ACPI: processor: perflib: Drop redundant parentheses
        ACPI: processor: perflib: Adjust white space
        ACPI: processor: idle: Drop unnecessary statements and parens
        ACPI: processor: Silence missing prototype warnings
        ACPI: processor_idle: Silence missing prototype warnings
        ACPI: processor: throttling: remove variable count
        ACPI: processor: idle: Check acpi_fetch_acpi_dev() return value
      
      * acpi-ec:
        ACPI: EC: Add quirk for the HP Pavilion Gaming 15-cx0041ur
      
      * acpi-video:
        ACPI: video: Prefer native over vendor
        ACPI: video: Simplify __acpi_video_get_backlight_type()
        ACPI: video: Add force_native quirk for Sony Vaio VPCY11S1E
        ACPI: video: Add force_vendor quirk for Sony Vaio PCG-FRV35
        ACPI: video: Change Sony Vaio VPCEH3U1E quirk to force_native
        ACPI: video: Change GIGABYTE GB-BXBT-2807 quirk to force_none
        ACPI: video: Add a few bugtracker links to DMI quirks
      6f158181
    • Rafael J. Wysocki's avatar
      Merge branches 'acpi-scan', 'acpi-bus', 'acpi-tables' and 'acpi-sysfs' · 45494d77
      Rafael J. Wysocki authored
      Merge ACPI changes related to device enumeration, device object
      managenet, operation region handling, table parsing and sysfs
      interface:
      
       - Use ZERO_PAGE(0) instead of empty_zero_page in the ACPI device
         enumeration code (Giulio Benetti).
      
       - Change the return type of the ACPI driver remove callback to void and
         update its users accordingly (Dawei Li).
      
       - Add general support for FFH address space type and implement the low-
         level part of it for ARM64 (Sudeep Holla).
      
       - Fix stale comments in the ACPI tables parsing code and make it print
         more messages related to MADT (Hanjun Guo, Huacai Chen).
      
       - Replace invocations of generic library functions with more kernel-
         specific counterparts in the ACPI sysfs interface (Christophe JAILLET,
         Xu Panda).
      
      * acpi-scan:
        ACPI: scan: substitute empty_zero_page with helper ZERO_PAGE(0)
      
      * acpi-bus:
        ACPI: FFH: Silence missing prototype warnings
        ACPI: make remove callback of ACPI driver void
        ACPI: bus: Fix the _OSC capability check for FFH OpRegion
        arm64: Add architecture specific ACPI FFH Opregion callbacks
        ACPI: Implement a generic FFH Opregion handler
      
      * acpi-tables:
        ACPI: tables: Fix the stale comments for acpi_locate_initial_tables()
        ACPI: tables: Print CORE_PIC information when MADT is parsed
      
      * acpi-sysfs:
        ACPI: sysfs: use sysfs_emit() to instead of scnprintf()
        ACPI: sysfs: Use kstrtobool() instead of strtobool()
      45494d77
    • Rafael J. Wysocki's avatar
      Merge branch 'acpica' · 888bc86e
      Rafael J. Wysocki authored
      Merge ACPICA changes, including bug fixes and cleanups as well as support
      for some recently defined data structures, for 6.2-rc1:
      
       - Make acpi_ex_load_op() match upstream implementation (Rafael Wysocki).
       - Add support for loong_arch-specific APICs in MADT (Huacai Chen).
       - Add support for fixed PCIe wake event (Huacai Chen).
       - Add EBDA pointer sanity checks (Vit Kabele).
       - Avoid accessing VGA memory when EBDA < 1KiB (Vit Kabele).
       - Add CCEL table support to both compiler/disassembler (Kuppuswamy
         Sathyanarayanan).
       - Add a couple of new UUIDs to the known UUID list (Bob Moore).
       - Add support for FFH Opregion special context data (Sudeep Holla).
       - Improve warning message for "invalid ACPI name" (Bob Moore).
       - Add support for CXL 3.0 structures (CXIMS & RDPAS) in the CEDT table
         (Alison Schofield).
       - Prepare IORT support for revision E.e (Robin Murphy).
       - Finish support for the CDAT table (Bob Moore).
       - Fix error code path in acpi_ds_call_control_method() (Rafael Wysocki).
       - Fix use-after-free in acpi_ut_copy_ipackage_to_ipackage() (Li Zetao).
       - Update the version of the ACPICA code in the kernel (Bob Moore).
      
      * acpica:
        ACPICA: Fix use-after-free in acpi_ut_copy_ipackage_to_ipackage()
        ACPICA: Fix error code path in acpi_ds_call_control_method()
        ACPICA: Update version to 20221020
        ACPICA: Add utcksum.o to the acpidump Makefile
        Revert "LoongArch: Provisionally add ACPICA data structures"
        ACPICA: Finish support for the CDAT table
        ACPICA: IORT: Update for revision E.e
        ACPICA: Add CXL 3.0 structures (CXIMS & RDPAS) to the CEDT table
        ACPICA: Improve warning message for "invalid ACPI name"
        ACPICA: Add support for FFH Opregion special context data
        ACPICA: Add a couple of new UUIDs to the known UUID list
        ACPICA: iASL: Add CCEL table to both compiler/disassembler
        ACPICA: Do not touch VGA memory when EBDA < 1ki_b
        ACPICA: Check that EBDA pointer is in valid memory
        ACPICA: Events: Support fixed PCIe wake event
        ACPICA: MADT: Add loong_arch-specific APICs support
        ACPICA: Make acpi_ex_load_op() match upstream
      888bc86e
  4. 11 Dec, 2022 3 commits
  5. 10 Dec, 2022 7 commits
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm · 296a7b7e
      Linus Torvalds authored
      Pull ARM fix from Russell King:
       "One further ARM fix for 6.1 from Wang Kefeng, fixing up the handling
        for kfence faults"
      
      * tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm:
        ARM: 9278/1: kfence: only handle translation faults
      296a7b7e
    • Tejun Heo's avatar
      memcg: fix possible use-after-free in memcg_write_event_control() · 4a7ba45b
      Tejun Heo authored
      memcg_write_event_control() accesses the dentry->d_name of the specified
      control fd to route the write call.  As a cgroup interface file can't be
      renamed, it's safe to access d_name as long as the specified file is a
      regular cgroup file.  Also, as these cgroup interface files can't be
      removed before the directory, it's safe to access the parent too.
      
      Prior to 347c4a87 ("memcg: remove cgroup_event->cft"), there was a
      call to __file_cft() which verified that the specified file is a regular
      cgroupfs file before further accesses.  The cftype pointer returned from
      __file_cft() was no longer necessary and the commit inadvertently dropped
      the file type check with it allowing any file to slip through.  With the
      invarients broken, the d_name and parent accesses can now race against
      renames and removals of arbitrary files and cause use-after-free's.
      
      Fix the bug by resurrecting the file type check in __file_cft().  Now that
      cgroupfs is implemented through kernfs, checking the file operations needs
      to go through a layer of indirection.  Instead, let's check the superblock
      and dentry type.
      
      Link: https://lkml.kernel.org/r/Y5FRm/cfcKPGzWwl@slm.duckdns.org
      Fixes: 347c4a87 ("memcg: remove cgroup_event->cft")
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Reported-by: default avatarJann Horn <jannh@google.com>
      Acked-by: default avatarRoman Gushchin <roman.gushchin@linux.dev>
      Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Michal Hocko <mhocko@kernel.org>
      Cc: Muchun Song <songmuchun@bytedance.com>
      Cc: Shakeel Butt <shakeelb@google.com>
      Cc: <stable@vger.kernel.org>	[3.14+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      4a7ba45b
    • Muchun Song's avatar
      MAINTAINERS: update Muchun Song's email · a501788a
      Muchun Song authored
      I'm moving to the @linux.dev account.  Map my old addresses and update it
      to my new address.
      
      Link: https://lkml.kernel.org/r/20221208115548.85244-1-songmuchun@bytedance.comSigned-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      a501788a
    • John Starks's avatar
      mm/gup: fix gup_pud_range() for dax · fcd0ccd8
      John Starks authored
      For dax pud, pud_huge() returns true on x86. So the function works as long
      as hugetlb is configured. However, dax doesn't depend on hugetlb.
      Commit 414fd080 ("mm/gup: fix gup_pmd_range() for dax") fixed
      devmap-backed huge PMDs, but missed devmap-backed huge PUDs. Fix this as
      well.
      
      This fixes the below kernel panic:
      
      general protection fault, probably for non-canonical address 0x69e7c000cc478: 0000 [#1] SMP
      	< snip >
      Call Trace:
      <TASK>
      get_user_pages_fast+0x1f/0x40
      iov_iter_get_pages+0xc6/0x3b0
      ? mempool_alloc+0x5d/0x170
      bio_iov_iter_get_pages+0x82/0x4e0
      ? bvec_alloc+0x91/0xc0
      ? bio_alloc_bioset+0x19a/0x2a0
      blkdev_direct_IO+0x282/0x480
      ? __io_complete_rw_common+0xc0/0xc0
      ? filemap_range_has_page+0x82/0xc0
      generic_file_direct_write+0x9d/0x1a0
      ? inode_update_time+0x24/0x30
      __generic_file_write_iter+0xbd/0x1e0
      blkdev_write_iter+0xb4/0x150
      ? io_import_iovec+0x8d/0x340
      io_write+0xf9/0x300
      io_issue_sqe+0x3c3/0x1d30
      ? sysvec_reschedule_ipi+0x6c/0x80
      __io_queue_sqe+0x33/0x240
      ? fget+0x76/0xa0
      io_submit_sqes+0xe6a/0x18d0
      ? __fget_light+0xd1/0x100
      __x64_sys_io_uring_enter+0x199/0x880
      ? __context_tracking_enter+0x1f/0x70
      ? irqentry_exit_to_user_mode+0x24/0x30
      ? irqentry_exit+0x1d/0x30
      ? __context_tracking_exit+0xe/0x70
      do_syscall_64+0x3b/0x90
      entry_SYSCALL_64_after_hwframe+0x61/0xcb
      RIP: 0033:0x7fc97c11a7be
      	< snip >
      </TASK>
      ---[ end trace 48b2e0e67debcaeb ]---
      RIP: 0010:internal_get_user_pages_fast+0x340/0x990
      	< snip >
      Kernel panic - not syncing: Fatal exception
      Kernel Offset: disabled
      
      Link: https://lkml.kernel.org/r/1670392853-28252-1-git-send-email-ssengar@linux.microsoft.com
      Fixes: 414fd080 ("mm/gup: fix gup_pmd_range() for dax")
      Signed-off-by: default avatarJohn Starks <jostarks@microsoft.com>
      Signed-off-by: default avatarSaurabh Sengar <ssengar@linux.microsoft.com>
      Cc: Jan Kara <jack@suse.cz>
      Cc: Yu Zhao <yuzhao@google.com>
      Cc: Jason Gunthorpe <jgg@nvidia.com>
      Cc: John Hubbard <jhubbard@nvidia.com>
      Cc: David Hildenbrand <david@redhat.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Alistair Popple <apopple@nvidia.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      fcd0ccd8
    • Liam Howlett's avatar
      mmap: fix do_brk_flags() modifying obviously incorrect VMAs · 6c28ca64
      Liam Howlett authored
      Add more sanity checks to the VMA that do_brk_flags() will expand.  Ensure
      the VMA matches basic merge requirements within the function before
      calling can_vma_merge_after().
      
      Drop the duplicate checks from vm_brk_flags() since they will be enforced
      later.
      
      The old code would expand file VMAs on brk(), which is functionally
      wrong and also dangerous in terms of locking because the brk() path
      isn't designed for file VMAs and therefore doesn't lock the file
      mapping.  Checking can_vma_merge_after() ensures that new anonymous
      VMAs can't be merged into file VMAs.
      
      See https://lore.kernel.org/linux-mm/CAG48ez1tJZTOjS_FjRZhvtDA-STFmdw8PEizPDwMGFd_ui0Nrw@mail.gmail.com/
      
      Link: https://lkml.kernel.org/r/20221205192304.1957418-1-Liam.Howlett@oracle.com
      Fixes: 2e7ce7d3 ("mm/mmap: change do_brk_flags() to expand existing VMA and add do_brk_munmap()")
      Signed-off-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
      Suggested-by: default avatarJann Horn <jannh@google.com>
      Cc: Jason A. Donenfeld <Jason@zx2c4.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: SeongJae Park <sj@kernel.org>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Yu Zhao <yuzhao@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      6c28ca64
    • David Hildenbrand's avatar
      mm/swap: fix SWP_PFN_BITS with CONFIG_PHYS_ADDR_T_64BIT on 32bit · 630dc25e
      David Hildenbrand authored
      We use "unsigned long" to store a PFN in the kernel and phys_addr_t to
      store a physical address.
      
      On a 64bit system, both are 64bit wide.  However, on a 32bit system, the
      latter might be 64bit wide.  This is, for example, the case on x86 with
      PAE: phys_addr_t and PTEs are 64bit wide, while "unsigned long" only spans
      32bit.
      
      The current definition of SWP_PFN_BITS without MAX_PHYSMEM_BITS misses
      that case, and assumes that the maximum PFN is limited by an 32bit
      phys_addr_t.  This implies, that SWP_PFN_BITS will currently only be able
      to cover 4 GiB - 1 on any 32bit system with 4k page size, which is wrong.
      
      Let's rely on the number of bits in phys_addr_t instead, but make sure to
      not exceed the maximum swap offset, to not make the BUILD_BUG_ON() in
      is_pfn_swap_entry() unhappy.  Note that swp_entry_t is effectively an
      unsigned long and the maximum swap offset shares that value with the swap
      type.
      
      For example, on an 8 GiB x86 PAE system with a kernel config based on
      Debian 11.5 (-> CONFIG_FLATMEM=y, CONFIG_X86_PAE=y), we will currently
      fail removing migration entries (remove_migration_ptes()), because
      mm/page_vma_mapped.c:check_pte() will fail to identify a PFN match as
      swp_offset_pfn() wrongly masks off PFN bits.  For example,
      split_huge_page_to_list()->...->remap_page() will leave migration entries
      in place and continue to unlock the page.
      
      Later, when we stumble over these migration entries (e.g., via
      /proc/self/pagemap), pfn_swap_entry_to_page() will BUG_ON() because these
      migration entries shouldn't exist anymore and the page was unlocked.
      
      [   33.067591] kernel BUG at include/linux/swapops.h:497!
      [   33.067597] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
      [   33.067602] CPU: 3 PID: 742 Comm: cow Tainted: G            E      6.1.0-rc8+ #16
      [   33.067605] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-1.fc36 04/01/2014
      [   33.067606] EIP: pagemap_pmd_range+0x644/0x650
      [   33.067612] Code: 00 00 00 00 66 90 89 ce b9 00 f0 ff ff e9 ff fb ff ff 89 d8 31 db e8 48 c6 52 00 e9 23 fb ff ff e8 61 83 56 00 e9 b6 fe ff ff <0f> 0b bf 00 f0 ff ff e9 38 fa ff ff 3e 8d 74 26 00 55 89 e5 57 31
      [   33.067615] EAX: ee394000 EBX: 00000002 ECX: ee394000 EDX: 00000000
      [   33.067617] ESI: c1b0ded4 EDI: 00024a00 EBP: c1b0ddb4 ESP: c1b0dd68
      [   33.067619] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 EFLAGS: 00010246
      [   33.067624] CR0: 80050033 CR2: b7a00000 CR3: 01bbbd20 CR4: 00350ef0
      [   33.067625] Call Trace:
      [   33.067628]  ? madvise_free_pte_range+0x720/0x720
      [   33.067632]  ? smaps_pte_range+0x4b0/0x4b0
      [   33.067634]  walk_pgd_range+0x325/0x720
      [   33.067637]  ? mt_find+0x1d6/0x3a0
      [   33.067641]  ? mt_find+0x1d6/0x3a0
      [   33.067643]  __walk_page_range+0x164/0x170
      [   33.067646]  walk_page_range+0xf9/0x170
      [   33.067648]  ? __kmem_cache_alloc_node+0x2a8/0x340
      [   33.067653]  pagemap_read+0x124/0x280
      [   33.067658]  ? default_llseek+0x101/0x160
      [   33.067662]  ? smaps_account+0x1d0/0x1d0
      [   33.067664]  vfs_read+0x90/0x290
      [   33.067667]  ? do_madvise.part.0+0x24b/0x390
      [   33.067669]  ? debug_smp_processor_id+0x12/0x20
      [   33.067673]  ksys_pread64+0x58/0x90
      [   33.067675]  __ia32_sys_ia32_pread64+0x1b/0x20
      [   33.067680]  __do_fast_syscall_32+0x4c/0xc0
      [   33.067683]  do_fast_syscall_32+0x29/0x60
      [   33.067686]  do_SYSENTER_32+0x15/0x20
      [   33.067689]  entry_SYSENTER_32+0x98/0xf1
      
      Decrease the indentation level of SWP_PFN_BITS and SWP_PFN_MASK to keep it
      readable and consistent.
      
      [david@redhat.com: rely on sizeof(phys_addr_t) and min_t() instead]
        Link: https://lkml.kernel.org/r/20221206105737.69478-1-david@redhat.com
      [david@redhat.com: use "int" for comparison, as we're only comparing numbers < 64]
        Link: https://lkml.kernel.org/r/1f157500-2676-7cef-a84e-9224ed64e540@redhat.com
      Link: https://lkml.kernel.org/r/20221205150857.167583-1-david@redhat.com
      Fixes: 0d206b5d ("mm/swap: add swp_offset_pfn() to fetch PFN from swap entry")
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Acked-by: default avatarPeter Xu <peterx@redhat.com>
      Reviewed-by: default avatarYang Shi <shy828301@gmail.com>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      630dc25e
    • Hugh Dickins's avatar
      tmpfs: fix data loss from failed fallocate · 44bcabd7
      Hugh Dickins authored
      Fix tmpfs data loss when the fallocate system call is interrupted by a
      signal, or fails for some other reason.  The partial folio handling in
      shmem_undo_range() forgot to consider this unfalloc case, and was liable
      to erase or truncate out data which had already been committed earlier.
      
      It turns out that none of the partial folio handling there is appropriate
      for the unfalloc case, which just wants to proceed to removal of whole
      folios: which find_get_entries() provides, even when partially covered.
      
      Original patch by Rui Wang.
      
      Link: https://lore.kernel.org/linux-mm/33b85d82.7764.1842e9ab207.Coremail.chenguoqic@163.com/
      Link: https://lkml.kernel.org/r/a5dac112-cf4b-7af-a33-f386e347fd38@google.com
      Fixes: b9a8a419 ("truncate,shmem: Handle truncates that split large folios")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Reported-by: default avatarGuoqi Chen <chenguoqic@163.com>
        Link: https://lore.kernel.org/all/20221101032248.819360-1-kernel@hev.cc/
      Cc: Rui Wang <kernel@hev.cc>
      Cc: Huacai Chen <chenhuacai@loongson.cn>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Vishal Moola (Oracle) <vishal.moola@gmail.com>
      Cc: <stable@vger.kernel.org>	[5.17+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      44bcabd7