Skip to content
Snippets Groups Projects
  1. Dec 02, 2024
    • Sebastian Reichel's avatar
      arm64: dts: rockchip: rk3588-rock5b: add USB-C support · d8869298
      Sebastian Reichel authored and Sebastian Reichel's avatar Sebastian Reichel committed
      
      Add hardware description for the USB-C port in the Radxa Rock 5 Model B.
      This describes the OHCI, EHCI and XHCI USB parts, but not yet the
      DisplayPort AltMode (bindings are not yet upstream).
      
      For now the fusb302 node is marked with status "fail", since the board
      is usually powered through the USB-C port. Handling of errors can result
      in hard resets, which removed the bus power for some time resulting in
      a board reset.
      
      The main problem right now is that devices are supposed to interact with
      the power-supply within 5 seconds after the plug event according to the
      USB PD specification. This is more or less impossible to achieve when
      the kernel is the first software communicating with the power-supply.
      
      Currently the most likely workaround will be USB-PD handling added to
      U-Boot. In that case U-Boot can update the status to "okay". That way
      booting a kernel with the updated DT on an old U-Boot avoids a reset
      loop.
      
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      d8869298
  2. Nov 30, 2024
    • Huacai Chen's avatar
      sh: cpuinfo: Fix a warning for CONFIG_CPUMASK_OFFSTACK · 3c891f7c
      Huacai Chen authored
      
      When CONFIG_CPUMASK_OFFSTACK and CONFIG_DEBUG_PER_CPU_MAPS are selected,
      cpu_max_bits_warn() generates a runtime warning similar as below when
      showing /proc/cpuinfo. Fix this by using nr_cpu_ids (the runtime limit)
      instead of NR_CPUS to iterate CPUs.
      
      [    3.052463] ------------[ cut here ]------------
      [    3.059679] WARNING: CPU: 3 PID: 1 at include/linux/cpumask.h:108 show_cpuinfo+0x5e8/0x5f0
      [    3.070072] Modules linked in: efivarfs autofs4
      [    3.076257] CPU: 0 PID: 1 Comm: systemd Not tainted 5.19-rc5+ #1052
      [    3.099465] Stack : 9000000100157b08 9000000000f18530 9000000000cf846c 9000000100154000
      [    3.109127]         9000000100157a50 0000000000000000 9000000100157a58 9000000000ef7430
      [    3.118774]         90000001001578e8 0000000000000040 0000000000000020 ffffffffffffffff
      [    3.128412]         0000000000aaaaaa 1ab25f00eec96a37 900000010021de80 900000000101c890
      [    3.138056]         0000000000000000 0000000000000000 0000000000000000 0000000000aaaaaa
      [    3.147711]         ffff8000339dc220 0000000000000001 0000000006ab4000 0000000000000000
      [    3.157364]         900000000101c998 0000000000000004 9000000000ef7430 0000000000000000
      [    3.167012]         0000000000000009 000000000000006c 0000000000000000 0000000000000000
      [    3.176641]         9000000000d3de08 9000000001639390 90000000002086d8 00007ffff0080286
      [    3.186260]         00000000000000b0 0000000000000004 0000000000000000 0000000000071c1c
      [    3.195868]         ...
      [    3.199917] Call Trace:
      [    3.203941] [<90000000002086d8>] show_stack+0x38/0x14c
      [    3.210666] [<9000000000cf846c>] dump_stack_lvl+0x60/0x88
      [    3.217625] [<900000000023d268>] __warn+0xd0/0x100
      [    3.223958] [<9000000000cf3c90>] warn_slowpath_fmt+0x7c/0xcc
      [    3.231150] [<9000000000210220>] show_cpuinfo+0x5e8/0x5f0
      [    3.238080] [<90000000004f578c>] seq_read_iter+0x354/0x4b4
      [    3.245098] [<90000000004c2e90>] new_sync_read+0x17c/0x1c4
      [    3.252114] [<90000000004c5174>] vfs_read+0x138/0x1d0
      [    3.258694] [<90000000004c55f8>] ksys_read+0x70/0x100
      [    3.265265] [<9000000000cfde9c>] do_syscall+0x7c/0x94
      [    3.271820] [<9000000000202fe4>] handle_syscall+0xc4/0x160
      [    3.281824] ---[ end trace 8b484262b4b8c24c ]---
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      Reviewed-by: default avatarJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
      Tested-by: default avatarJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
      Signed-off-by: default avatarJohn Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
      3c891f7c
  3. Nov 29, 2024
    • Vasily Gorbik's avatar
      Revert "s390/mm: Allow large pages for KASAN shadow mapping" · cc00550b
      Vasily Gorbik authored
      
      This reverts commit ff123eb7.
      
      Allowing large pages for KASAN shadow mappings isn't inherently wrong,
      but adding POPULATE_KASAN_MAP_SHADOW to large_allowed() exposes an issue
      in can_large_pud() and can_large_pmd().
      
      Since commit d8073dc6 ("s390/mm: Allow large pages only for aligned
      physical addresses"), both can_large_pud() and can_large_pmd() call _pa()
      to check if large page physical addresses are aligned. However, _pa()
      has a side effect: it allocates memory in POPULATE_KASAN_MAP_SHADOW
      mode. This results in massive memory leaks.
      
      The proper fix would be to address both large_allowed() and _pa()'s side
      effects, but for now, revert this change to avoid the leaks.
      
      Fixes: ff123eb7 ("s390/mm: Allow large pages for KASAN shadow mapping")
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      cc00550b
  4. Nov 28, 2024
  5. Nov 27, 2024
    • Gerald Schaefer's avatar
      s390/mm: Add PTE_MARKER support for hugetlbfs mappings · 487ef5d4
      Gerald Schaefer authored
      
      Commit 8a13897f ("mm: userfaultfd: support UFFDIO_POISON for
      hugetlbfs") added support for PTE_MARKER_POISONED for hugetlbfs, but
      PTE_MARKER also needs support for swap entries. For s390, swap entries
      were only supported on PTE level, not on the PMD/PUD levels that are used
      for large hugetlbfs mappings.
      
      Therefore, when writing a PTE_MARKER_POISONED entry, the resulting entry
      on PMD/PUD level would be an invalid / empty entry. Further access would
      then generate a pagefault loop, instead of the expected SIGBUS. It is a
      loop inside the kernel, but interruptible and uffd fault handling also
      calls schedule() in between, so at least it won't completely block the
      system.
      
      Previous commits prepared support for swap entries on PMD/PUD levels.
      PTE_MARKER support for hugetlbfs can now be enabled by simply adding an
      extra is_pte_marker() check to huge_pte_none_mostly(). Fault handling
      code also needs to be adjusted to expect the VM_FAULT_HWPOISON_LARGE
      fault flag, which was not possible on s390 before.
      
      Reviewed-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
      Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      487ef5d4
    • Gerald Schaefer's avatar
      s390/mm: Introduce region-third and segment table swap entries · f934f6be
      Gerald Schaefer authored
      
      Introduce region-third (PUD) and segment table (PMD) swap entries, and
      make hugetlbfs RSTE <-> PTE conversion code aware of them, so that they
      can be used for hugetlbfs PTE_MARKER entries. Future work could also
      build on this to enable THP_SWAP and THP_MIGRATION for s390.
      
      Similar to PTE swap entries, bits 0-51 can be used to store the swap
      offset, but bits 57-61 cannot be used for swap type because that overlaps
      with the INVALID and TABLE TYPE bits. PMD/PUD swap entries must be invalid,
      and have a correct table type so that pud_folded() check still works.
      
      Bits 53-57 can be used for swap type, but those include the PROTECT bit.
      So unlike swap PTEs, the PROTECT bit cannot be used to mark the swap entry.
      Use the "Common-Segment/Region" bit 59 instead for that.
      
      Also remove the !MACHINE_HAS_NX check in __set_huge_pte_at(). Otherwise,
      that would clear the _SEGMENT_ENTRY_NOEXEC bit also for swap entries, where
      it is used for encoding the swap type. The architecture only requires this
      bit to be 0 for PTEs, with !MACHINE_HAS_NX, not for segment or region-third
      entries. And the check is also redundant, because after __pte_to_rste()
      conversion, for non-swap PTEs it would only be set if it was already set in
      the PTE, which should never be the case for !MACHINE_HAS_NX.
      
      This is a prerequisite for hugetlbfs PTE_MARKER support on s390, which
      is needed to fix a regression introduced with commit 8a13897f
      ("mm: userfaultfd: support UFFDIO_POISON for hugetlbfs"). That commit
      depends on the availability of swap entries for hugetlbfs, which were
      not available for s390 so far.
      
      Reviewed-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
      Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      f934f6be
    • Gerald Schaefer's avatar
      s390/mm: Introduce region-third and segment table entry present bits · 03e6db16
      Gerald Schaefer authored
      
      Introduce region-third and segment table entry present SW bits, and adjust
      pmd/pud_present() accordingly.
      
      Also add pmd/pud_present() checks to pmd/pud_leaf(), to return false for
      future swap entries. Same logic applies to pmd_trans_huge(), make that
      return pmd_leaf() instead of duplicating the same check.
      
      huge_pte_offset() also needs to be adjusted, current code would return
      NULL for !pud_present(). Use the same logic as in the generic version,
      which allows for !pud_present() swap entries.
      
      Similar to PTE, bit 63 can be used for the new SW present bit in region
      and segment table entries. For segment-table entries (PMD) the architecture
      says that "Bits 62-63 are available for programming", so they are safe to
      use. The same is true for large leaf region-third-table entries (PUD).
      
      However, for non-leaf region-third-table entries, bits 62-63 indicate the
      TABLE LENGTH and both must be set to 1. But such entries would always be
      considered as present, so it is safe to use bit 63 as PRESENT bit for PUD.
      They also should not conflict with bit 62 potentially later used for
      preserving SOFT_DIRTY in swap entries, because they are not swap entries.
      
      Valid PMDs / PUDs should always have the present bit set, so add it to
      the various pgprot defines, and also _SEGMENT_ENTRY which is OR'ed e.g.
      in pmd_populate(). _REGION3_ENTRY wouldn't need any change, as the present
      bit is already included in the TABLE LENGTH, but also explicitly add it
      there, for completeness, and just in case the bit would ever be changed.
      
      gmap code needs some adjustment, to also OR the _SEGMENT_ENTRY, like it
      is already done gmap_shadow_pgt() when creating new PMDs, but not in
      __gmap_link(). Otherwise, the gmap PMDs would not be considered present,
      e.g. when using pmd_leaf() checks in gmap code. The various WARN_ON
      checks in gmap code also need adjustment, to tolerate the new present
      bit.
      
      This is a prerequisite for hugetlbfs PTE_MARKER support on s390, which
      is needed to fix a regression introduced with commit 8a13897f
      ("mm: userfaultfd: support UFFDIO_POISON for hugetlbfs"). That commit
      depends on the availability of swap entries for hugetlbfs, which were
      not available for s390 so far.
      
      Reviewed-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
      Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      03e6db16
    • Gerald Schaefer's avatar
      s390/mm: Rearrange region-third and segment table entry SW bits · ae1b9fb2
      Gerald Schaefer authored
      
      Rearrange region-third and segment table entry SW bits, in order to
      make room for future encoding of region/segment table swap entries.
      
      Also adjust _SEGMENT_ENTRY_GMAP_UC and _SEGMENT_ENTRY_GMAP_IN bits in
      gmap code. Those should only apply for gmap PMDs, and not really depend
      on or conflict with host PMD bits, but for consistency also adjust them:
      - _SEGMENT_ENTRY_GMAP_UC "dirty (migration)" was using the same bit as
        _SEGMENT_ENTRY_SOFT_DIRTY in the host PMD -> make it use the new
        SOFT_DIRTY bit 63 (0x0002)
      - _SEGMENT_ENTRY_GMAP_IN "invalidation notify bit" was using 0x8000,
        which was an unused bit in the host PMD, that is now used for
        _SEGMENT_ENTRY_WRITE -> make it use bit 52 (0x0800) instead, which is
        still unused in the host PMD
      
      This is a prerequisite for hugetlbfs PTE_MARKER support on s390, which
      is needed to fix a regression introduced with commit 8a13897f
      ("mm: userfaultfd: support UFFDIO_POISON for hugetlbfs"). That commit
      depends on the availability of swap entries for hugetlbfs, which were
      not available for s390 so far.
      
      Reviewed-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
      Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      ae1b9fb2
    • Heiko Carstens's avatar
      KVM: s390: Increase size of union sca_utility to four bytes · f93d6d62
      Heiko Carstens authored
      
      kvm_s390_update_topology_change_report() modifies a single bit within
      sca_utility using cmpxchg(). Given that the size of the sca_utility union
      is two bytes this generates very inefficient code. Change the size to four
      bytes, so better code can be generated.
      
      Even though the size of sca_utility doesn't reflect architecture anymore
      this seems to be the easiest and most pragmatic approach to avoid
      inefficient code.
      
      Acked-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
      Acked-by: default avatarJanosch Frank <frankja@linux.ibm.com>
      Link: https://lore.kernel.org/r/20241126102515.3178914-4-hca@linux.ibm.com
      
      
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      f93d6d62
    • Heiko Carstens's avatar
      KVM: s390: Remove one byte cmpxchg() usage · 7061c639
      Heiko Carstens authored
      
      Within sca_clear_ext_call() cmpxchg() is used to clear one or two bytes
      (depending on sca format). The cmpxchg() calls are not supposed to fail; if
      so that would be a bug. Given that cmpxchg() usage on one and two byte
      areas generates very inefficient code, replace them with block concurrent
      WRITE_ONCE() calls, and remove the WARN_ON().
      
      Acked-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
      Acked-by: default avatarJanosch Frank <frankja@linux.ibm.com>
      Link: https://lore.kernel.org/r/20241126102515.3178914-3-hca@linux.ibm.com
      
      
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      7061c639
    • Heiko Carstens's avatar
      KVM: s390: Use try_cmpxchg() instead of cmpxchg() loops · 5618c53d
      Heiko Carstens authored
      
      Convert all cmpxchg() loops to try_cmpxchg() loops. With gcc 14 and the
      usage of flag output operands in try_cmpxchg() this allows the compiler to
      generate slightly better code.
      
      Acked-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
      Acked-by: default avatarJanosch Frank <frankja@linux.ibm.com>
      Link: https://lore.kernel.org/r/20241126102515.3178914-2-hca@linux.ibm.com
      
      
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      5618c53d
    • Chen-Yu Tsai's avatar
      arm64: dts: mediatek: mt8173-elm-hana: Mark touchscreens and trackpads as fail · aac9e2af
      Chen-Yu Tsai authored
      
      Instead of having them all available, mark them all as "fail-needs-probe"
      and have the implementation try to probe which one is present.
      
      Also remove the shared resource workaround by moving the pinctrl entry
      for the trackpad interrupt line back into the individual trackpad nodes.
      
      Cc: <stable+noautosel@kernel.org> # Needs accompanying new driver to work
      Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
      Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
      Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Acked-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      aac9e2af
    • Michael Ellerman's avatar
      powerpc/prom_init: Fixup missing powermac #size-cells · cf89c943
      Michael Ellerman authored
      
      On some powermacs `escc` nodes are missing `#size-cells` properties,
      which is deprecated and now triggers a warning at boot since commit
      045b14ca ("of: WARN on deprecated #address-cells/#size-cells
      handling").
      
      For example:
      
        Missing '#size-cells' in /pci@f2000000/mac-io@c/escc@13000
        WARNING: CPU: 0 PID: 0 at drivers/of/base.c:133 of_bus_n_size_cells+0x98/0x108
        Hardware name: PowerMac3,1 7400 0xc0209 PowerMac
        ...
        Call Trace:
          of_bus_n_size_cells+0x98/0x108 (unreliable)
          of_bus_default_count_cells+0x40/0x60
          __of_get_address+0xc8/0x21c
          __of_address_to_resource+0x5c/0x228
          pmz_init_port+0x5c/0x2ec
          pmz_probe.isra.0+0x144/0x1e4
          pmz_console_init+0x10/0x48
          console_init+0xcc/0x138
          start_kernel+0x5c4/0x694
      
      As powermacs boot via prom_init it's possible to add the missing
      properties to the device tree during boot, avoiding the warning. Note
      that `escc-legacy` nodes are also missing `#size-cells` properties, but
      they are skipped by the macio driver, so leave them alone.
      
      Depends-on: 045b14ca ("of: WARN on deprecated #address-cells/#size-cells handling")
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Reviewed-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
      Link: https://patch.msgid.link/20241126025710.591683-1-mpe@ellerman.id.au
      cf89c943
    • Yang Li's avatar
      powerpc/machdep: Remove duplicated include in svm.c · e4a45654
      Yang Li authored
      
      The header files linux/mem_encrypt.h is included twice in svm.c,
      so one inclusion of each can be removed.
      
      Reported-by: default avatarAbaci Robot <abaci@linux.alibaba.com>
      Closes: https://bugzilla.openanolis.cn/show_bug.cgi?id=11750
      
      
      Signed-off-by: default avatarYang Li <yang.lee@linux.alibaba.com>
      Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
      Link: https://patch.msgid.link/20241107010259.46308-1-yang.lee@linux.alibaba.com
      e4a45654
    • Masahiro Yamada's avatar
      kbuild: add $(objtree)/ prefix to some in-kernel build artifacts · 214c0eea
      Masahiro Yamada authored
      
      $(objtree) refers to the top of the output directory of kernel builds.
      
      This commit adds the explicit $(objtree)/ prefix to build artifacts
      needed for building external modules.
      
      This change has no immediate impact, as the top-level Makefile
      currently defines:
      
        objtree         := .
      
      This commit prepares for supporting the building of external modules
      in a different directory.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Reviewed-by: default avatarNicolas Schier <nicolas@fjasle.eu>
      214c0eea
    • Rong Xu's avatar
      kbuild: Add Propeller configuration for kernel build · d5dc9583
      Rong Xu authored
      Add the build support for using Clang's Propeller optimizer. Like
      AutoFDO, Propeller uses hardware sampling to gather information
      about the frequency of execution of different code paths within a
      binary. This information is then used to guide the compiler's
      optimization decisions, resulting in a more efficient binary.
      
      The support requires a Clang compiler LLVM 19 or later, and the
      create_llvm_prof tool
      (https://github.com/google/autofdo/releases/tag/v0.30.1). This
      commit is limited to x86 platforms that support PMU features
      like LBR on Intel machines and AMD Zen3 BRS.
      
      Here is an example workflow for building an AutoFDO+Propeller
      optimized kernel:
      
      1) Build the kernel on the host machine, with AutoFDO and Propeller
         build config
            CONFIG_AUTOFDO_CLANG=y
            CONFIG_PROPELLER_CLANG=y
         then
            $ make LLVM=1 CLANG_AUTOFDO_PROFILE=<autofdo_profile>
      
      “<autofdo_profile>” is the profile collected when doing a non-Propeller
      AutoFDO build. This step builds a kernel that has the same optimization
      level as AutoFDO, plus a metadata section that records basic block
      information. This kernel image runs as fast as an AutoFDO optimized
      kernel.
      
      2) Install the kernel on test/production machines.
      
      3) Run the load tests. The '-c' option in perf specifies the sample
         event period. We suggest using a suitable prime number,
         like 500009, for this purpose.
         For Intel platforms:
            $ perf record -e BR_INST_RETIRED.NEAR_TAKEN:k -a -N -b -c <count> \
              -o <perf_file> -- <loadtest>
         For AMD platforms:
            The supported system are: Zen3 with BRS, or Zen4 with amd_lbr_v2
            # To see if Zen3 support LBR:
            $ cat proc/cpuinfo | grep " brs"
            # To see if Zen4 support LBR:
            $ cat proc/cpuinfo | grep amd_lbr_v2
            # If the result is yes, then collect the profile using:
            $ perf record --pfm-events RETIRED_TAKEN_BRANCH_INSTRUCTIONS:k -a \
              -N -b -c <count> -o <perf_file> -- <loadtest>
      
      4) (Optional) Download the raw perf file to the host machine.
      
      5) Generate Propeller profile:
         $ create_llvm_prof --binary=<vmlinux> --profile=<perf_file> \
           --format=propeller --propeller_output_module_name \
           --out=<propeller_profile_prefix>_cc_profile.txt \
           --propeller_symorder=<propeller_profile_prefix>_ld_profile.txt
      
         “create_llvm_prof” is the profile conversion tool, and a prebuilt
         binary for linux can be found on
         https://github.com/google/autofdo/releases/tag/v0.30.1
      
       (can also build
         from source).
      
         "<propeller_profile_prefix>" can be something like
         "/home/user/dir/any_string".
      
         This command generates a pair of Propeller profiles:
         "<propeller_profile_prefix>_cc_profile.txt" and
         "<propeller_profile_prefix>_ld_profile.txt".
      
      6) Rebuild the kernel using the AutoFDO and Propeller profile files.
            CONFIG_AUTOFDO_CLANG=y
            CONFIG_PROPELLER_CLANG=y
         and
            $ make LLVM=1 CLANG_AUTOFDO_PROFILE=<autofdo_profile> \
              CLANG_PROPELLER_PROFILE_PREFIX=<propeller_profile_prefix>
      
      Co-developed-by: default avatarHan Shen <shenhan@google.com>
      Signed-off-by: default avatarHan Shen <shenhan@google.com>
      Signed-off-by: default avatarRong Xu <xur@google.com>
      Suggested-by: default avatarSriraman Tallam <tmsriram@google.com>
      Suggested-by: default avatarKrzysztof Pszeniczny <kpszeniczny@google.com>
      Suggested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Suggested-by: default avatarStephane Eranian <eranian@google.com>
      Tested-by: default avatarYonghong Song <yonghong.song@linux.dev>
      Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      d5dc9583
    • Rong Xu's avatar
      vmlinux.lds.h: Adjust symbol ordering in text output section · 0043ecea
      Rong Xu authored
      
      When the -ffunction-sections compiler option is enabled, each function
      is placed in a separate section named .text.function_name rather than
      putting all functions in a single .text section.
      
      However, using -function-sections can cause problems with the
      linker script. The comments included in include/asm-generic/vmlinux.lds.h
      note these issues.:
        “TEXT_MAIN here will match .text.fixup and .text.unlikely if dead
         code elimination is enabled, so these sections should be converted
         to use ".." first.”
      
      It is unclear whether there is a straightforward method for converting
      a suffix to "..".
      
      This patch modifies the order of subsections within the text output
      section. Specifically, it changes current order:
        .text.hot, .text, .text_unlikely, .text.unknown, .text.asan
      to the new order:
        .text.asan, .text.unknown, .text_unlikely, .text.hot, .text
      
      Here is the rationale behind the new layout:
      
      The majority of the code resides in three sections: .text.hot, .text,
      and .text.unlikely, with .text.unknown containing a negligible amount.
      .text.asan is only generated in ASAN builds.
      
      The primary goal is to group code segments based on their execution
      frequency (hotness).
      
      First, we want to place .text.hot adjacent to .text. Since we cannot put
      .text.hot after .text (Due to constraints with -ffunction-sections,
      placing .text.hot after .text is problematic), we need to put
      .text.hot before .text.
      
      Then it comes to .text.unlikely, we cannot put it after .text (same
      -ffunction-sections issue) . Therefore, we position .text.unlikely
      before .text.hot.
      
      .text.unknown and .tex.asan follow the same logic.
      
      This revised ordering effectively reverses the original arrangement (for
      .text.unlikely, .text.unknown, and .tex.asan), maintaining a similar level
      of affinity between sections.
      
      It also places .text.hot section at the beginning of a page to better
      utilize the TLB entry.
      
      Note that the limitation arises because the linker script employs glob
      patterns instead of regular expressions for string matching. While there
      is a method to maintain the current order using complex patterns, this
      significantly complicates the pattern and increases the likelihood of
      errors.
      
      This patch also changes vmlinux.lds.S for the sparc64 architecture to
      accommodate specific symbol placement requirements.
      
      Co-developed-by: default avatarHan Shen <shenhan@google.com>
      Signed-off-by: default avatarHan Shen <shenhan@google.com>
      Signed-off-by: default avatarRong Xu <xur@google.com>
      Suggested-by: default avatarSriraman Tallam <tmsriram@google.com>
      Suggested-by: default avatarKrzysztof Pszeniczny <kpszeniczny@google.com>
      Tested-by: default avatarYonghong Song <yonghong.song@linux.dev>
      Tested-by: default avatarYabin Cui <yabinc@google.com>
      Tested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reviewed-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      0043ecea
    • Rong Xu's avatar
      MIPS: Place __kernel_entry at the beginning of text section · 52892ed6
      Rong Xu authored
      
      Mark __kernel_entry as ".head.text" and place HEAD_TEXT before
      TEXT_TEXT in the linker script. This ensures that __kernel_entry
      will be placed at the beginning of text section.
      
      Drop mips from scripts/head-object-list.txt.
      
      Signed-off-by: default avatarRong Xu <xur@google.com>
      Reported-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
      Closes: https://lore.kernel.org/lkml/c6719149-8531-4174-824e-a3caf4bc6d0e@alliedtelesis.co.nz/T/
      
      
      Tested-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      52892ed6
  6. Nov 26, 2024
    • Palmer Dabbelt's avatar
      RISC-V: Remove unnecessary include from compat.h · 8d4f1e05
      Palmer Dabbelt authored
      Without this I get a bunch of build errors like
      
          In file included from ./include/linux/sched/task_stack.h:12,
                           from ./arch/riscv/include/asm/compat.h:12,
                           from ./arch/riscv/include/asm/pgtable.h:115,
                           from ./include/linux/pgtable.h:6,
                           from ./include/linux/mm.h:30,
                           from arch/riscv/kernel/asm-offsets.c:8:
          ./include/linux/kasan.h:50:37: error: ‘MAX_PTRS_PER_PTE’ undeclared here (not in a function); did you mean ‘PTRS_PER_PTE’?
             50 | extern pte_t kasan_early_shadow_pte[MAX_PTRS_PER_PTE + PTE_HWTABLE_PTRS];
                |                                     ^~~~~~~~~~~~~~~~
                |                                     PTRS_PER_PTE
          ./include/linux/kasan.h:51:8: error: unknown type name ‘pmd_t’; did you mean ‘pgd_t’?
             51 | extern pmd_t kasan_early_shadow_pmd[MAX_PTRS_PER_PMD];
                |        ^~~~~
                |        pgd_t
          ./include/linux/kasan.h:51:37: error: ‘MAX_PTRS_PER_PMD’ undeclared here (not in a function); did you mean ‘PTRS_PER_PGD’?
             51 | extern pmd_t kasan_early_shadow_pmd[MAX_PTRS_PER_PMD];
                |                                     ^~~~~~~~~~~~~~~~
                |                                     PTRS_PER_PGD
          ./include/linux/kasan.h:52:8: error: unknown type name ‘pud_t’; did you mean ‘pgd_t’?
             52 | extern pud_t kasan_early_shadow_pud[MAX_PTRS_PER_PUD];
                |        ^~~~~
                |        pgd_t
          ./include/linux/kasan.h:52:37: error: ‘MAX_PTRS_PER_PUD’ undeclared here (not in a function); did you mean ‘PTRS_PER_PGD’?
             52 | extern pud_t kasan_early_shadow_pud[MAX_PTRS_PER_PUD];
                |                                     ^~~~~~~~~~~~~~~~
                |                                     PTRS_PER_PGD
          ./include/linux/kasan.h:53:8: error: unknown type name ‘p4d_t’; did you mean ‘pgd_t’?
             53 | extern p4d_t kasan_early_shadow_p4d[MAX_PTRS_PER_P4D];
                |        ^~~~~
                |        pgd_t
          ./include/linux/kasan.h:53:37: error: ‘MAX_PTRS_PER_P4D’ undeclared here (not in a function); did you mean ‘PTRS_PER_PGD’?
             53 | extern p4d_t kasan_early_shadow_p4d[MAX_PTRS_PER_P4D];
                |                                     ^~~~~~~~~~~~~~~~
                |                                     PTRS_PER_PGD
      
      Link: https://lore.kernel.org/r/20241126143250.29708-1-palmer@rivosinc.com
      
      
      Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
      8d4f1e05
    • Zhou Wang's avatar
      irqchip/gicv3-its: Add workaround for hip09 ITS erratum 162100801 · f82e62d4
      Zhou Wang authored
      
      When enabling GICv4.1 in hip09, VMAPP fails to clear some caches during
      the unmap operation, which can causes vSGIs to be lost.
      
      To fix the issue, invalidate the related vPE cache through GICR_INVALLR
      after VMOVP.
      
      Suggested-by: default avatarMarc Zyngier <maz@kernel.org>
      Co-developed-by: default avatarNianyao Tang <tangnianyao@huawei.com>
      Signed-off-by: default avatarNianyao Tang <tangnianyao@huawei.com>
      Signed-off-by: default avatarZhou Wang <wangzhou1@hisilicon.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: default avatarMarc Zyngier <maz@kernel.org>
      f82e62d4
    • Sebastian Andrzej Siewior's avatar
      x86/CPU/AMD: Terminate the erratum_1386_microcode array · ff6cdc40
      Sebastian Andrzej Siewior authored
      
      The erratum_1386_microcode array requires an empty entry at the end.
      Otherwise x86_match_cpu_with_stepping() will continue iterate the array after
      it ended.
      
      Add an empty entry to erratum_1386_microcode to its end.
      
      Fixes: 29ba89f1 ("x86/CPU/AMD: Improve the erratum 1386 workaround")
      Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
      Cc: <stable@kernel.org>
      Link: https://lore.kernel.org/r/20241126134722.480975-1-bigeasy@linutronix.de
      ff6cdc40
    • Huacai Chen's avatar
      LoongArch: Update Loongson-3 default config file · 3c272a75
      Huacai Chen authored
      
      1, Enable ACPI_BGRT.
      2, Enable MODULE COMPRESS.
      3, Enable common DM targets.
      4, Enable FS_ENCRYPTION and FS_VERITY.
      5, Enable CPUFreq governors and drivers.
      6, Enable PVPANIC MMIO and PCI drivers.
      7, Enable some HID input drivers.
      8, Enable some ASoC codec drivers.
      9, Enable some Realtek WiFi drivers.
      10, Remove some obsolete config options.
      
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      3c272a75
    • Binbin Zhou's avatar
      LoongArch: dts: Add I2S support to Loongson-2K2000 · 900f6267
      Binbin Zhou authored
      
      The module is supported, adding it.
      
      Not all Loongson-2K1000 boards have an i2s interface, here is an example
      of enabling it:
      
      sound {
      	compatible = "loongson,ls-audio-card";
      	model = "Loongson-ASoC";
      	mclk-fs = <512>;
      
      	cpu {
      		sound-dai = <&i2s>;
      	};
      
      	codec {
      		sound-dai = <&es8323>;
      	};
      };
      
      &i2c1 {
      	status = "okay";
      	#address-cells = <1>;
      	#size-cells = <0>;
      
      	es8323:es8323@10 {
      		compatible = "everest,es8323";
      		reg = <0x10>;
      		#sound-dai-cells = <0>;
      	};
      };
      
      &i2s {
      	status = "okay";
      
      	clock-frequency = <175000000>;
      	#sound-dai-cells = <0>;
      };
      
      Signed-off-by: default avatarBinbin Zhou <zhoubinbin@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      900f6267
    • Binbin Zhou's avatar
      LoongArch: dts: Add I2S support to Loongson-2K1000 · b7915af6
      Binbin Zhou authored
      
      The module is supported, adding it.
      
      Not all Loongson-2K1000 boards have an i2s interface, here is an example
      of enabling it:
      
      sound {
      	compatible = "loongson,ls-audio-card";
      	model = "Loongson-ASoC";
      	mclk-fs = <512>;
      
      	cpu {
      		sound-dai = <&i2s>;
      	};
      
      	codec {
      		sound-dai = <&uda1342>;
      	};
      };
      
      &apbdma2 {
      	status = "okay";
      };
      
      &apbdma3 {
      	status = "okay";
      };
      
      &i2c3 {
      	status = "okay";
      
      	pinctrl-0 = <&i2c1_pins_default>;
      	pinctrl-names = "default";
      
      	#address-cells = <1>;
      	#size-cells = <0>;
      
      	uda1342: codec@1a {
      		compatible = "nxp,uda1342";
      		reg = <0x1a>;
      		#sound-dai-cells = <0>;
      	};
      };
      
      &i2s {
      	status = "okay";
      
      	pinctrl-0 = <&hda_pins_default>;
      	pinctrl-names = "default";
      };
      
      Signed-off-by: default avatarBinbin Zhou <zhoubinbin@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      b7915af6
    • Huacai Chen's avatar
      LoongArch: Allow to enable PREEMPT_LAZY · 704f06ee
      Huacai Chen authored
      
      LoongArch has supported PREEMPT_RT now. It uses GENERIC_ENTRY, so just
      add the TIF bit (TIF_NEED_RESCHED_LAZY) related definitions and select
      the Kconfig symbol (ARCH_HAS_PREEMPT_LAZY) is enough to make it go.
      
      Signed-off-by: default avatarXi Ruoyao <xry111@xry111.site>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      704f06ee
    • Huacai Chen's avatar
      LoongArch: Allow to enable PREEMPT_RT · be2ea982
      Huacai Chen authored
      
      It is really time.
      
      LoongArch has all the required architecture related changes, that have
      been identified over time, in order to enable PREEMPT_RT. With the recent
      printk changes, the last known road block has been addressed.
      
      Allow to enable PREEMPT_RT on LoongArch.
      
      Below are the latency data from cyclictest on a 4-core Loongson-3A5000
      machine, with a "make -j8" kernel building workload in the background.
      
      1. PREEMPT kernel with default configuration:
      
      ./cyclictest -a -t -m -i200 -d0 -p99
      policy: fifo: loadavg: 8.78 8.96 8.64 10/296 64800
      T: 0 ( 4592) P:99 I:200 C:14838617 Min:   3 Act:    6 Avg:    8 Max:    844
      T: 1 ( 4593) P:99 I:200 C:14838765 Min:   3 Act:    9 Avg:    8 Max:    909
      T: 2 ( 4594) P:99 I:200 C:14838510 Min:   3 Act:    7 Avg:    8 Max:    832
      T: 3 ( 4595) P:99 I:200 C:14838631 Min:   3 Act:    8 Avg:    8 Max:    931
      
      2. PREEMPT_RT kernel with default configuration:
      
      ./cyclictest -a -t -m -i200 -d0 -p99
      policy: fifo: loadavg: 10.38 10.47 10.35 9/336 77788
      T: 0 ( 3941) P:99 I:200 C:19439626 Min:   3 Act:   12 Avg:    8 Max:    227
      T: 1 ( 3942) P:99 I:200 C:19439624 Min:   2 Act:   11 Avg:    8 Max:    184
      T: 2 ( 3943) P:99 I:200 C:19439623 Min:   3 Act:    4 Avg:    7 Max:    223
      T: 3 ( 3944) P:99 I:200 C:19439623 Min:   2 Act:   10 Avg:    7 Max:    226
      
      3. PREEMPT_RT kernel with tuned configuration:
      
      ./cyclictest -a -t -m -i200 -d0 -p99
      policy: fifo: loadavg: 10.52 10.66 10.62 12/334 109397
      T: 0 ( 4765) P:99 I:200 C:29335186 Min:   3 Act:    6 Avg:    8 Max:     62
      T: 1 ( 4766) P:99 I:200 C:29335185 Min:   3 Act:   10 Avg:    8 Max:     52
      T: 2 ( 4767) P:99 I:200 C:29335184 Min:   3 Act:    8 Avg:    8 Max:     64
      T: 3 ( 4768) P:99 I:200 C:29335183 Min:   3 Act:   12 Avg:    8 Max:     53
      
      Main instruments of tuned configuration include: Disable the boot rom
      space in BIOS, in order to avoid kernel's speculative access to low-
      speed memory (i.e. boot rom space); Disable CPUFreq scaling; Disable
      RTC synchronization in the ntpd/chronyd service (also avoid other RTC
      accesses when running low-latency workloads).
      
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      be2ea982
    • Huacai Chen's avatar
      LoongArch: Select HAVE_POSIX_CPU_TIMERS_TASK_WORK · 826d2af6
      Huacai Chen authored
      
      Move POSIX CPU timer expiry and signal delivery into task context to
      allow PREEMPT_RT setups to coexist with KVM.
      
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      826d2af6
    • Huacai Chen's avatar
      LoongArch: Fix sleeping in atomic context for PREEMPT_RT · 88fd2b70
      Huacai Chen authored
      
      Commit bab1c299 ("LoongArch: Fix sleeping in atomic context in
      setup_tlb_handler()") changes the gfp flag from GFP_KERNEL to GFP_ATOMIC
      for alloc_pages_node(). However, for PREEMPT_RT kernels we can still get
      a "sleeping in atomic context" error:
      
      [    0.372259] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
      [    0.372266] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1
      [    0.372268] preempt_count: 1, expected: 0
      [    0.372270] RCU nest depth: 1, expected: 1
      [    0.372272] 3 locks held by swapper/1/0:
      [    0.372274]  #0: 900000000c9f5e60 (&pcp->lock){+.+.}-{3:3}, at: get_page_from_freelist+0x524/0x1c60
      [    0.372294]  #1: 90000000087013b8 (rcu_read_lock){....}-{1:3}, at: rt_spin_trylock+0x50/0x140
      [    0.372305]  #2: 900000047fffd388 (&zone->lock){+.+.}-{3:3}, at: __rmqueue_pcplist+0x30c/0xea0
      [    0.372314] irq event stamp: 0
      [    0.372316] hardirqs last  enabled at (0): [<0000000000000000>] 0x0
      [    0.372322] hardirqs last disabled at (0): [<9000000005947320>] copy_process+0x9c0/0x26e0
      [    0.372329] softirqs last  enabled at (0): [<9000000005947320>] copy_process+0x9c0/0x26e0
      [    0.372335] softirqs last disabled at (0): [<0000000000000000>] 0x0
      [    0.372341] CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Not tainted 6.12.0-rc7+ #1891
      [    0.372346] Hardware name: Loongson Loongson-3A5000-7A1000-1w-CRB/Loongson-LS3A5000-7A1000-1w-CRB, BIOS vUDK2018-LoongArch-V2.0.0-prebeta9 10/21/2022
      [    0.372349] Stack : 0000000000000089 9000000005a0db9c 90000000071519c8 9000000100388000
      [    0.372486]         900000010038b890 0000000000000000 900000010038b898 9000000007e53788
      [    0.372492]         900000000815bcc8 900000000815bcc0 900000010038b700 0000000000000001
      [    0.372498]         0000000000000001 4b031894b9d6b725 00000000055ec000 9000000100338fc0
      [    0.372503]         00000000000000c4 0000000000000001 000000000000002d 0000000000000003
      [    0.372509]         0000000000000030 0000000000000003 00000000055ec000 0000000000000003
      [    0.372515]         900000000806d000 9000000007e53788 00000000000000b0 0000000000000004
      [    0.372521]         0000000000000000 0000000000000000 900000000c9f5f10 0000000000000000
      [    0.372526]         90000000076f12d8 9000000007e53788 9000000005924778 0000000000000000
      [    0.372532]         00000000000000b0 0000000000000004 0000000000000000 0000000000070000
      [    0.372537]         ...
      [    0.372540] Call Trace:
      [    0.372542] [<9000000005924778>] show_stack+0x38/0x180
      [    0.372548] [<90000000071519c4>] dump_stack_lvl+0x94/0xe4
      [    0.372555] [<900000000599b880>] __might_resched+0x1a0/0x260
      [    0.372561] [<90000000071675cc>] rt_spin_lock+0x4c/0x140
      [    0.372565] [<9000000005cbb768>] __rmqueue_pcplist+0x308/0xea0
      [    0.372570] [<9000000005cbed84>] get_page_from_freelist+0x564/0x1c60
      [    0.372575] [<9000000005cc0d98>] __alloc_pages_noprof+0x218/0x1820
      [    0.372580] [<900000000593b36c>] tlb_init+0x1ac/0x298
      [    0.372585] [<9000000005924b74>] per_cpu_trap_init+0x114/0x140
      [    0.372589] [<9000000005921964>] cpu_probe+0x4e4/0xa60
      [    0.372592] [<9000000005934874>] start_secondary+0x34/0xc0
      [    0.372599] [<900000000715615c>] smpboot_entry+0x64/0x6c
      
      This is because in PREEMPT_RT kernels normal spinlocks are replaced by
      rt spinlocks and rt_spin_lock() will cause sleeping. Fix it by disabling
      NUMA optimization completely for PREEMPT_RT kernels.
      
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      88fd2b70
    • Huacai Chen's avatar
      LoongArch: Reduce min_delta for the arch clockevent device · af4b67da
      Huacai Chen authored
      
      Now the min_delta is 0x600 (1536) for LoongArch's constant clockevent
      device. For a 100MHz hardware timer this means ~15us. This is a little
      big, especially for PREEMPT_RT enabled kernels. So reduce it to 100 for
      PREEMPT_RT kernel, and 1000 for others (we don't want too small values
      to affect performance).
      
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      af4b67da
    • Tiezhu Yang's avatar
      LoongArch: BPF: Sign-extend return values · 73c359d1
      Tiezhu Yang authored
      
      (1) Description of Problem:
      
      When testing BPF JIT with the latest compiler toolchains on LoongArch,
      there exist some strange failed test cases, dmesg shows something like
      this:
      
        # dmesg -t | grep FAIL | head -1
        ... ret -3 != -3 (0xfffffffd != 0xfffffffd)FAIL ...
      
      (2) Steps to Reproduce:
      
        # echo 1 > /proc/sys/net/core/bpf_jit_enable
        # modprobe test_bpf
      
      (3) Additional Info:
      
      There are no failed test cases compiled with the lower version of GCC
      such as 13.3.0, while the problems only appear with higher version of
      GCC such as 14.2.0.
      
      This is because the problems were hidden by the lower version of GCC due
      to redundant sign extension instructions generated by compiler, but with
      optimization of higher version of GCC, the sign extension instructions
      have been removed.
      
      (4) Root Cause Analysis:
      
      The LoongArch architecture does not expose sub-registers, and hold all
      32-bit values in a sign-extended format. While BPF, on the other hand,
      exposes sub-registers, and use zero-extension (similar to arm64/x86).
      
      This has led to some subtle bugs, where a BPF JITted program has not
      sign-extended the a0 register (return value in LoongArch land), passed
      the return value up the kernel, for example:
      
        | int from_bpf(void);
        |
        | long foo(void)
        | {
        |    return from_bpf();
        | }
      
      Here, a0 would be 0xffffffff instead of the expected 0xffffffffffffffff.
      
      Internally, the LoongArch JIT uses a5 as a dedicated register for BPF
      return values. That is to say, the LoongArch BPF uses a5 for BPF return
      values, which are zero-extended, whereas the LoongArch ABI uses a0 which
      is sign-extended.
      
      (5) Final Solution:
      
      Keep a5 zero-extended, but explicitly sign-extend a0 (which is used
      outside BPF land). Because libbpf currently defines the return value
      of an ebpf program as a 32-bit unsigned integer, just use addi.w to
      extend bit 31 into bits 63 through 32 of a5 to a0. This is similar to
      commit 2f1b0d3d ("riscv, bpf: Sign-extend return values").
      
      Fixes: 5dc61552 ("LoongArch: Add BPF JIT support")
      Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      73c359d1
    • Tiezhu Yang's avatar
      LoongArch: Fix build failure with GCC 15 (-std=gnu23) · 947d5d03
      Tiezhu Yang authored
      
      Whenever I try to build the kernel with upcoming GCC 15 which defaults
      to -std=gnu23 I get a build failure:
      
        CC      arch/loongarch/vdso/vgetcpu.o
      In file included from ./include/uapi/linux/posix_types.h:5,
                       from ./include/uapi/linux/types.h:14,
                       from ./include/linux/types.h:6,
                       from ./include/linux/kasan-checks.h:5,
                       from ./include/asm-generic/rwonce.h:26,
                       from ./arch/loongarch/include/generated/asm/rwonce.h:1,
                       from ./include/linux/compiler.h:317,
                       from ./include/asm-generic/bug.h:5,
                       from ./arch/loongarch/include/asm/bug.h:60,
                       from ./include/linux/bug.h:5,
                       from ./include/linux/mmdebug.h:5,
                       from ./include/linux/mm.h:6,
                       from ./arch/loongarch/include/asm/vdso.h:10,
                       from arch/loongarch/vdso/vgetcpu.c:6:
      ./include/linux/stddef.h:11:9: error: expected identifier before 'false'
         11 |         false   = 0,
            |         ^~~~~
      ./include/linux/types.h:35:33: error: two or more data types in declaration specifiers
         35 | typedef _Bool                   bool;
            |                                 ^~~~
      ./include/linux/types.h:35:1: warning: useless type name in empty declaration
         35 | typedef _Bool                   bool;
            | ^~~~~~~
      
      The kernel builds explicitly with -std=gnu11 in top Makefile, but
      arch/loongarch/vdso does not use KBUILD_CFLAGS from the rest of the
      kernel, just add -std=gnu11 flag to arch/loongarch/vdso/Makefile.
      
      By the way, commit e8c07082 ("Kbuild: move to -std=gnu11") did a
      similar change for arch/arm64/kernel/vdso32/Makefile.
      
      Fixes: c6b99bed ("LoongArch: Add VDSO and VSYSCALL support")
      Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      947d5d03
    • Huacai Chen's avatar
      LoongArch: Explicitly specify code model in Makefile · e67e0eb6
      Huacai Chen authored
      
      LoongArch's toolchain may change the default code model from normal to
      medium. This is unnecessary for kernel, and generates some relocations
      which cannot be handled by the module loader. So explicitly specify the
      code model to normal in Makefile (for Rust 'normal' is 'small').
      
      Cc: stable@vger.kernel.org
      Tested-by: default avatarHaiyong Sun <sunhaiyong@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      e67e0eb6
Loading