Skip to content
  1. Jan 10, 2020
    • Bartosz Golaszewski's avatar
      kconfig: fix an "implicit declaration of function" warning · ba82f52e
      Bartosz Golaszewski authored
      
      
      strncasecmp() & strcasecmp() functions are declared in strings.h, not
      string.h. On most environments the former is implicitly included by
      the latter but on some setups, building menuconfig results in the
      following warning:
      
        HOSTCC  scripts/kconfig/mconf.o
      scripts/kconfig/mconf.c: In function ‘search_conf’:
      scripts/kconfig/mconf.c:423:6: warning: implicit declaration of function ‘strncasecmp’ [-Wimplicit-function-declaration]
        if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
            ^~~~~~~~~~~
      scripts/kconfig/mconf.c: In function ‘main’:
      scripts/kconfig/mconf.c:1021:8: warning: implicit declaration of function ‘strcasecmp’ [-Wimplicit-function-declaration]
         if (!strcasecmp(mode, "single_menu"))
              ^~~~~~~~~~
      
      Fix it by explicitly including strings.h.
      
      Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      ba82f52e
  2. Jan 07, 2020
    • Thomas Hebb's avatar
      kconfig: fix nesting of symbol help text · a9609686
      Thomas Hebb authored
      
      
      When we generate the help text of a symbol (e.g. when a user presses '?'
      in menuconfig), we do two things:
      
       1. We iterate through every prompt that belongs to that symbol,
          printing its text and its location in the menu tree.
       2. We print symbol-wide information that's not linked to a particular
          prompt, such as what it selects/is selected by and what it
          implies/is implied by.
      
      Each prompt we print for 1 starts with a line that's not indented
      indicating where the prompt is defined, then continues with indented
      lines that describe properties of that particular definition.
      
      Once we get to 2, however, we print all the global data indented as
      well! Visually, this makes it look like the symbol-wide data is
      associated with the last prompt we happened to print rather than
      the symbol as a whole.
      
      Fix this by removing the indentation for symbol-wide information.
      
      Before:
      
        Symbol: CPU_FREQ [=n]
        Type  : bool
        Defined at drivers/cpufreq/Kconfig:4
          Prompt: CPU Frequency scaling
          Location:
            -> CPU Power Management
              -> CPU Frequency scaling
          Selects: SRCU [=n]
          Selected by [n]:
          - ARCH_SA1100 [=n] && <choice>
      
      After:
      
        Symbol: CPU_FREQ [=n]
        Type  : bool
        Defined at drivers/cpufreq/Kconfig:4
          Prompt: CPU Frequency scaling
          Location:
            -> CPU Power Management
              -> CPU Frequency scaling
        Selects: SRCU [=n]
        Selected by [n]:
          - ARCH_SA1100 [=n] && <choice>
      
      Signed-off-by: default avatarThomas Hebb <tommyhebb@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      a9609686
    • Thomas Hebb's avatar
      kconfig: distinguish between dependencies and visibility in help text · 3460d0bc
      Thomas Hebb authored
      Kconfig makes a distinction between dependencies (defined by "depends
      on" expressions and enclosing "if" blocks) and visibility (which
      includes all dependencies, but also includes inline "if" expressions of
      individual properties as well as, for prompts, "visible if" expressions
      of enclosing menus).
      
      Before commit bcdedcc1 ("menuconfig: print more info for symbol
      without prompts"), the "Depends on" lines of a symbol's help text
      indicated the visibility of the prompt property they appeared under.
      After bcdedcc1
      
      , there was always only a single "Depends on" line,
      which indicated the visibility of the first P_SYMBOL property of the
      symbol. Since P_SYMBOLs never have inline if expressions, this was in
      effect the same as the dependencies of the menu item that the P_SYMBOL
      was attached to.
      
      Neither of these situations accurately conveyed the dependencies of a
      symbol--the first because it was actually the visibility, and the second
      because it only showed the dependencies from a single definition.
      
      With this series, we are back to printing separate dependencies for each
      definition, but we print the actual dependencies (rather than the
      visibility) in the "Depends on" line. However, it can still be useful to
      know the visibility of a prompt, so this patch adds a "Visible if" line
      that shows the visibility only if the visibility is different from the
      dependencies (which it isn't for most prompts in Linux).
      
      Before:
      
        Symbol: THUMB2_KERNEL [=n]
        Type  : bool
        Defined at arch/arm/Kconfig:1417
          Prompt: Compile the kernel in Thumb-2 mode
          Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) && !CPU_V6 [=n] && !CPU_V6K [=n]
          Location:
            -> Kernel Features
          Selects: ARM_UNWIND [=n]
      
      After:
      
         Symbol: THUMB2_KERNEL [=n]
         Type  : bool
         Defined at arch/arm/Kconfig:1417
           Prompt: Compile the kernel in Thumb-2 mode
           Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) && !CPU_V6 [=n] && !CPU_V6K [=n]
           Visible if: (CPU_V7 [=y] || CPU_V7M [=n]) && !CPU_V6 [=n] && !CPU_V6K [=n] && !CPU_THUMBONLY [=n]
           Location:
             -> Kernel Features
           Selects: ARM_UNWIND [=n]
      
      Signed-off-by: default avatarThomas Hebb <tommyhebb@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      3460d0bc
    • Thomas Hebb's avatar
      kconfig: list all definitions of a symbol in help text · edda15f2
      Thomas Hebb authored
      In Kconfig, each symbol (representing a config option) can be defined in
      multiple places. Each definition may or may not have a prompt, which
      allows the option to be set via an interface like menuconfig. Each
      definition has a set of dependencies, which determine whether its prompt
      is visible and whether other pieces of the definition, like a default
      value, take effect.
      
      Historically, a symbol's help text (i.e. what's shown when a user
      presses '?' in menuconfig) contained some symbol-wide information not
      tied to any particular definition (e.g. what other symbols it selects)
      as well as the location (file name and line number) and dependencies of
      each prompt. Notably, the help text did not show the location or
      dependencies of definitions without prompts.
      
      Because this made it hard to reason about symbols that had no prompts,
      commit bcdedcc1 ("menuconfig: print more info for symbol without
      prompts") changed the help text so that, instead of containing the
      location and dependencies of each prompt, it contained the location and
      dependencies of the symbol's first definition, regardless of whether or
      not that definition had a prompt.
      
      For symbols with only one definition, that change makes sense. However,
      it breaks down for symbols with multiple definitions: each definition
      has its own set of dependencies (the `dep` field of `struct menu`), and
      those dependencies are ORed together to get the symbol's dependency list
      (the `dir_dep` field of `struct symbol`). By printing only the
      dependencies of the first definition, the help text misleads users into
      believing that an option is more narrowly-applicable than it actually
      is.
      
      For an extreme example of this, we can look at the SYS_TEXT_BASE symbol
      in the Das U-Boot project (version 2019.10), which also uses Kconfig. (I
      unfortunately could not find an illustrative example in Linux.) This
      config option specifies the load address of the built binary and, as
      such, is applicable to basically every configuration possible. And yet,
      without this patch, its help text is as follows:
      
        Symbol: SYS_TEXT_BASE [=]
        Type  : hex
        Prompt: U-Boot base address
          Location:
            -> ARM architecture
        Prompt: Text Base
          Location:
            -> Boot images
          Defined at arch/arm/mach-aspeed/Kconfig:9
          Depends on: ARM [=n] && ARCH_ASPEED [=n]
      
      The help text indicates that the option is applicable only for a
      specific unselected architecture (aspeed), because that architecture's
      promptless definition (which just sets a default value), happens to be
      the first one seen. No definition or dependency information is printed
      for either of the two prompts listed.
      
      Because source locations and dependencies are fundamentally properties
      of definitions and not of symbols, we should treat them as such. This
      patch brings back the pre-bcdedcc1 behavior for definitions with
      prompts but also separately prints the location and dependencies of
      those without prompts, solving the original problem in a different way.
      With this change, our SYS_TEXT_BASE example becomes
      
         Symbol: SYS_TEXT_BASE [=]
         Type  : hex
         Defined at arch/arm/mach-stm32mp/Kconfig:83
           Prompt: U-Boot base address
           Depends on: ARM [=n] && ARCH_STM32MP [=n]
           Location:
             -> ARM architecture
         Defined at Kconfig:532
           Prompt: Text Base
           Depends on: !NIOS2 [=n] && !XTENSA [=n] && !EFI_APP [=n]
           Location:
             -> Boot images
         Defined at arch/arm/mach-aspeed/Kconfig:9
           Depends on: ARM [=n] && ARCH_ASPEED [=n]
         Defined  at arch/arm/mach-socfpga/Kconfig:25
           Depends on: ARM [=n] && ARCH_SOCFPGA [=n]
         <snip>
         Defined at board/sifive/fu540/Kconfig:15
           Depends on: RISCV [=n] && TARGET_SIFIVE_FU540 [=n]
      
      which is a much more accurate representation.
      
      Note that there is one notable difference between what gets printed for
      prompts after this change and what got printed before bcdedcc1
      
      : the
      "Depends on" line now accurately represents the prompt's dependencies
      instead of conflating those with the prompt's visibility (which can
      include extra conditions). See the patch later in this series titled
      "kconfig: distinguish between dependencies and visibility in help text"
      for more details and better handling of that nuance.
      
      Signed-off-by: default avatarThomas Hebb <tommyhebb@gmail.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      edda15f2
    • Tetsuo Handa's avatar
      kconfig: Add yes2modconfig and mod2yesconfig targets. · 89b90609
      Tetsuo Handa authored
      
      
      Since kernel configs provided by syzbot are close to "make allyesconfig",
      it takes long time to rebuild. This is especially waste of time when we
      need to rebuild for many times (e.g. doing manual printk() inspection,
      bisect operations).
      
      We can save time if we can exclude modules which are irrelevant to each
      problem. But "make localmodconfig" cannot exclude modules which are built
      into vmlinux because /sbin/lsmod output is used as the source of modules.
      
      Therefore, this patch adds "make yes2modconfig" which converts from =y
      to =m if possible. After confirming that the interested problem is still
      reproducible, we can try "make localmodconfig" (and/or manually tune
      based on "Modules linked in:" line) in order to exclude modules which are
      irrelevant to the interested problem. While we are at it, this patch also
      adds "make mod2yesconfig" which converts from =m to =y in case someone
      wants to convert from =m to =y after "make localmodconfig".
      
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      89b90609
    • Masahiro Yamada's avatar
      kconfig: use $(PERL) in Makefile · c8138a57
      Masahiro Yamada authored
      
      
      The top Makefile defines and exports the variable 'PERL'. Use it in
      case somebody wants to specify a particular version of perl from the
      command line.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      c8138a57
    • Masahiro Yamada's avatar
      kconfig: fix too deep indentation in Makefile · 1d135237
      Masahiro Yamada authored
      
      
      The indentation for if ... else ... fi is too deep. Fix it.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      1d135237
    • Masahiro Yamada's avatar
      kconfig: localmodconfig: fix indentation for closing brace · 68f0d627
      Masahiro Yamada authored
      
      
      This is the closing brace for the foreach loop. Fix the misleading
      indentation.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      68f0d627
    • Masahiro Yamada's avatar
      kconfig: localmodconfig: remove unused $config · 5edcef84
      Masahiro Yamada authored
      This is unused since commit cdfc4795
      
       ("kconfig: search for a config
      to base the local(mod|yes)config on").
      
      Having unused $config is confusing because $config is used as a local
      variable in various sub-routines.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      5edcef84
    • Masahiro Yamada's avatar
      kconfig: squash prop_alloc() into menu_add_prop() · adf7c5bd
      Masahiro Yamada authored
      
      
      prop_alloc() is only called from menu_add_prop(). Squash it.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      adf7c5bd
    • Masahiro Yamada's avatar
      kconfig: remove sym from struct property · 6397d96b
      Masahiro Yamada authored
      
      
      struct property can reference to the symbol that it is associated with
      by prop->menu->sym.
      
      Fix up the one usage of prop->sym, and remove sym from struct property.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      6397d96b
    • Masahiro Yamada's avatar
      kconfig: remove 'prompt' argument from menu_add_prop() · 2ffeef61
      Masahiro Yamada authored
      
      
      This function no longer uses the 'prompt' argument.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      2ffeef61
    • Masahiro Yamada's avatar
      kconfig: move prompt handling to menu_add_prompt() from menu_add_prop() · 024352ff
      Masahiro Yamada authored
      
      
      menu_add_prompt() is the only function that calls menu_add_prop() with
      non-NULL prompt.
      
      So, the code inside the if-conditional block of menu_add_prop() can be
      moved to menu_add_prompt().
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      024352ff
    • Masahiro Yamada's avatar
      kconfig: remove 'prompt' symbol · 1be6e791
      Masahiro Yamada authored
      
      
      Now that 'prompt' is only reduced from T_WORD_QUOTE without any action,
      use T_WORD_QUOTE directly.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      1be6e791
    • Masahiro Yamada's avatar
      kconfig: drop T_WORD from the RHS of 'prompt' symbol · 801b27db
      Masahiro Yamada authored
      Commit 8636a1f9
      
       ("treewide: surround Kconfig file paths with double
      quotes") killed use-cases to reduce an unquoted string into the 'prompt'
      symbol.
      
      Kconfig still allows to use an unquoted string in the context of menu,
      source, or prompt.
      
      So, you can omit quoting if the prompt is a single word:
      
          bool foo
      
      ..., but I do not think this is so useful.
      
      Let's require quoting:
      
          bool "foo"
      
      All the Kconfig files in the kernel are written in this way.
      
      Remove the T_WORD from the right-hand side of the symbol 'prompt'.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      801b27db
    • Masahiro Yamada's avatar
      kconfig: use parent->dep as the parentdep of 'menu' · de026ca9
      Masahiro Yamada authored
      
      
      In menu_finalize(), the dependency of a menu entry is propagated
      downwards.
      
      For the 'menu', parent->dep and parent->prompt->visible.expr have
      the same expression. Both accumulate the 'depends on' of itself and
      upper menu entries.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      de026ca9
    • Masahiro Yamada's avatar
      kconfig: remove the rootmenu check in menu_add_prop() · f64048a2
      Masahiro Yamada authored
      This reverts commit ba6ff60d ("kconfig: don't emit warning upon
      rootmenu's prompt redefinition").
      
      At that time, rootmenu.prompt was always set first, then it was set
      again if a "mainmenu" statement was specified in the Kconfig file.
      
      This is no longer the case since commit 0724a7c3
      
       ("kconfig: Don't
      leak main menus during parsing"). Remove the unneeded check.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      f64048a2
  3. Jan 06, 2020
    • Linus Torvalds's avatar
      Linux 5.5-rc5 · c79f46a2
      Linus Torvalds authored
      v5.5-rc5
      c79f46a2
    • Linus Torvalds's avatar
      Merge tag 'riscv/for-v5.5-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux · 768fc661
      Linus Torvalds authored
      Pull RISC-V fixes from Paul Walmsley:
       "Several fixes for RISC-V:
      
         - Fix function graph trace support
      
         - Prefix the CSR IRQ_* macro names with "RV_", to avoid collisions
           with macros elsewhere in the Linux kernel tree named "IRQ_TIMER"
      
         - Use __pa_symbol() when computing the physical address of a kernel
           symbol, rather than __pa()
      
         - Mark the RISC-V port as supporting GCOV
      
        One DT addition:
      
         - Describe the L2 cache controller in the FU540 DT file
      
        One documentation update:
      
         - Add patch acceptance guideline documentation"
      
      * tag 'riscv/for-v5.5-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
        Documentation: riscv: add patch acceptance guidelines
        riscv: prefix IRQ_ macro names with an RV_ namespace
        clocksource: riscv: add notrace to riscv_sched_clock
        riscv: ftrace: correct the condition logic in function graph tracer
        riscv: dts: Add DT support for SiFive L2 ca...
      768fc661
  4. Jan 05, 2020
    • Paul Walmsley's avatar
      Documentation: riscv: add patch acceptance guidelines · 0e194d9d
      Paul Walmsley authored
      
      
      Formalize, in kernel documentation, the patch acceptance policy for
      arch/riscv.  In summary, it states that as maintainers, we plan to
      only accept patches for new modules or extensions that have been
      frozen or ratified by the RISC-V Foundation.
      
      We've been following these guidelines for the past few months.  In the
      meantime, we've received quite a bit of feedback that it would be
      helpful to have these guidelines formally documented.
      
      Based on a suggestion from Matthew Wilcox, we also add a link to this
      file to Documentation/process/index.rst, to make this document easier
      to find.  The format of this document has also been changed to align
      to the format outlined in the maintainer entry profiles, in accordance
      with comments from Jon Corbet and Dan Williams.
      
      Signed-off-by: default avatarPaul Walmsley <paul.walmsley@sifive.com>
      Reviewed-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
      Cc: Palmer Dabbelt <palmer@dabbelt.com>
      Cc: Albert Ou <aou@eecs.berkeley.edu>
      Cc: Krste Asanovic <krste@berkeley.edu>
      Cc: Andrew Waterman <waterman@eecs.berkeley.edu>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      0e194d9d
    • Paul Walmsley's avatar
      riscv: prefix IRQ_ macro names with an RV_ namespace · 2f3035da
      Paul Walmsley authored
      "IRQ_TIMER", used in the arch/riscv CSR header file, is a sufficiently
      generic macro name that it's used by several source files across the
      Linux code base.  Some of these other files ultimately include the
      arch/riscv CSR include file, causing collisions.  Fix by prefixing the
      RISC-V csr.h IRQ_ macro names with an RV_ prefix.
      
      Fixes: a4c3733d
      
       ("riscv: abstract out CSR names for supervisor vs machine mode")
      Reported-by: default avatarOlof Johansson <olof@lixom.net>
      Acked-by: default avatarOlof Johansson <olof@lixom.net>
      Signed-off-by: default avatarPaul Walmsley <paul.walmsley@sifive.com>
      2f3035da
    • Zong Li's avatar
      clocksource: riscv: add notrace to riscv_sched_clock · 9d05c18e
      Zong Li authored
      
      
      When enabling ftrace graph tracer, it gets the tracing clock in
      ftrace_push_return_trace().  Eventually, it invokes riscv_sched_clock()
      to get the clock value.  If riscv_sched_clock() isn't marked with
      'notrace', it will call ftrace_push_return_trace() and cause infinite
      loop.
      
      The result of failure as follow:
      
      command: echo function_graph >current_tracer
      [   46.176787] Unable to handle kernel paging request at virtual address ffffffe04fb38c48
      [   46.177309] Oops [#1]
      [   46.177478] Modules linked in:
      [   46.177770] CPU: 0 PID: 256 Comm: $d Not tainted 5.5.0-rc1 #47
      [   46.177981] epc: ffffffe00035e59a ra : ffffffe00035e57e sp : ffffffe03a7569b0
      [   46.178216]  gp : ffffffe000d29b90 tp : ffffffe03a756180 t0 : ffffffe03a756968
      [   46.178430]  t1 : ffffffe00087f408 t2 : ffffffe03a7569a0 s0 : ffffffe03a7569f0
      [   46.178643]  s1 : ffffffe00087f408 a0 : 0000000ac054cda4 a1 : 000000000087f411
      [   46.178856]  a2 : 0000000ac054cda4 a3 : 0000000000373ca0 a4 : ffffffe04fb38c48
      [   46.179099]  a5 : 00000000153e22a8 a6 : 00000000005522ff a7 : 0000000000000005
      [   46.179338]  s2 : ffffffe03a756a90 s3 : ffffffe00032811c s4 : ffffffe03a756a58
      [   46.179570]  s5 : ffffffe000d29fe0 s6 : 0000000000000001 s7 : 0000000000000003
      [   46.179809]  s8 : 0000000000000003 s9 : 0000000000000002 s10: 0000000000000004
      [   46.180053]  s11: 0000000000000000 t3 : 0000003fc815749c t4 : 00000000000efc90
      [   46.180293]  t5 : ffffffe000d29658 t6 : 0000000000040000
      [   46.180482] status: 0000000000000100 badaddr: ffffffe04fb38c48 cause: 000000000000000f
      
      Signed-off-by: default avatarZong Li <zong.li@sifive.com>
      Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
      [paul.walmsley@sifive.com: cleaned up patch description]
      Fixes: 92e0d143
      
       ("clocksource/drivers/riscv_timer: Provide the sched_clock")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarPaul Walmsley <paul.walmsley@sifive.com>
      9d05c18e
    • Linus Torvalds's avatar
      Merge branch 'akpm' (patches from Andrew) · 36487907
      Linus Torvalds authored
      Merge misc fixes from Andrew Morton:
       "17 fixes"
      
      * emailed patches from Andrew Morton <akpm@linux-foundation.org>:
        hexagon: define ioremap_uc
        ocfs2: fix the crash due to call ocfs2_get_dlm_debug once less
        ocfs2: call journal flush to mark journal as empty after journal recovery when mount
        mm/hugetlb: defer freeing of huge pages if in non-task context
        mm/gup: fix memory leak in __gup_benchmark_ioctl
        mm/oom: fix pgtables units mismatch in Killed process message
        fs/posix_acl.c: fix kernel-doc warnings
        hexagon: work around compiler crash
        hexagon: parenthesize registers in asm predicates
        fs/namespace.c: make to_mnt_ns() static
        fs/nsfs.c: include headers for missing declarations
        fs/direct-io.c: include fs/internal.h for missing prototype
        mm: move_pages: return valid node id in status if the page is already on the target node
        memcg: account security cred as well to kmemcg
        kcov: fix struct layout for kcov_remote_arg
        mm/zsmalloc.c: fix the migrated zspage statistics.
        mm/memory_hotplug: shrink zones when offlining memory
      36487907
    • Linus Torvalds's avatar
      Merge tag 'apparmor-pr-2020-01-04' of... · a125bcda
      Linus Torvalds authored
      Merge tag 'apparmor-pr-2020-01-04' of git://git.kernel.org/pub/scm/linux/kernel/git/jj/linux-apparmor
      
      Pull apparmor fixes from John Johansen:
      
       - performance regression: only get a label reference if the fast path
         check fails
      
       - fix aa_xattrs_match() may sleep while holding a RCU lock
      
       - fix bind mounts aborting with -ENOMEM
      
      * tag 'apparmor-pr-2020-01-04' of git://git.kernel.org/pub/scm/linux/kernel/git/jj/linux-apparmor:
        apparmor: fix aa_xattrs_match() may sleep while holding a RCU lock
        apparmor: only get a label reference if the fast path check fails
        apparmor: fix bind mounts aborting with -ENOMEM
      a125bcda
    • John Johansen's avatar
      apparmor: fix aa_xattrs_match() may sleep while holding a RCU lock · 8c62ed27
      John Johansen authored
      aa_xattrs_match() is unfortunately calling vfs_getxattr_alloc() from a
      context protected by an rcu_read_lock. This can not be done as
      vfs_getxattr_alloc() may sleep regardles of the gfp_t value being
      passed to it.
      
      Fix this by breaking the rcu_read_lock on the policy search when the
      xattr match feature is requested and restarting the search if a policy
      changes occur.
      
      Fixes: 8e51f908
      
       ("apparmor: Add support for attaching profiles via xattr, presence and value")
      Reported-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
      Reported-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarJohn Johansen <john.johansen@canonical.com>
      8c62ed27
    • Linus Torvalds's avatar
      Merge tag 'mips_fixes_5.5_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux · c420ddda
      Linus Torvalds authored
      Pull MIPS fixes from Paul Burton:
       "A collection of MIPS fixes:
      
         - Fill the struct cacheinfo shared_cpu_map field with sensible
           values, notably avoiding issues with perf which was unhappy in the
           absence of these values.
      
         - A boot fix for Loongson 2E & 2F machines which was fallout from
           some refactoring performed this cycle.
      
         - A Kconfig dependency fix for the Loongson CPU HWMon driver.
      
         - A couple of VDSO fixes, ensuring gettimeofday() behaves
           appropriately for kernel configurations that don't include support
           for a clocksource the VDSO can use & fixing the calling convention
           for the n32 & n64 VDSOs which would previously clobber the $gp/$28
           register.
      
         - A build fix for vmlinuz compressed images which were
           inappropriately building with -fsanitize-coverage despite not being
           part of the kernel proper, then failing to link due to the missing
           __sanitizer_cov_trace_pc() function.
      
         - A couple of eBPF JIT fixes, including disabling it for MIPS32 due
           to a large number of issues with the code generated there &
           reflecting ISA dependencies in Kconfig to enforce that systems
           which don't support the JIT must include the interpreter"
      
      * tag 'mips_fixes_5.5_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
        MIPS: Avoid VDSO ABI breakage due to global register variable
        MIPS: BPF: eBPF JIT: check for MIPS ISA compliance in Kconfig
        MIPS: BPF: Disable MIPS32 eBPF JIT
        MIPS: Prevent link failure with kcov instrumentation
        MIPS: Kconfig: Use correct form for 'depends on'
        mips: Fix gettimeofday() in the vdso library
        MIPS: Fix boot on Fuloong2 systems
        mips: cacheinfo: report shared CPU map
      c420ddda
    • Nick Desaulniers's avatar
      hexagon: define ioremap_uc · 7312b706
      Nick Desaulniers authored
      Similar to commit 38e45d81 ("sparc64: implement ioremap_uc") define
      ioremap_uc for hexagon to avoid errors from
      -Wimplicit-function-definition.
      
      Link: http://lkml.kernel.org/r/20191209222956.239798-2-ndesaulniers@google.com
      Link: https://github.com/ClangBuiltLinux/linux/issues/797
      Fixes: e537654b
      
       ("lib: devres: add a helper function for ioremap_uc")
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Suggested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Acked-by: default avatarBrian Cain <bcain@codeaurora.org>
      Cc: Lee Jones <lee.jones@linaro.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Tuowen Zhao <ztuowen@gmail.com>
      Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
      Cc: Luis Chamberlain <mcgrof@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Allison Randal <allison@lohutok.net>
      Cc: Will Deacon <will@kernel.org>
      Cc: Richard Fontana <rfontana@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Boqun Feng <boqun.feng@gmail.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7312b706
    • Gang He's avatar
      ocfs2: fix the crash due to call ocfs2_get_dlm_debug once less · b73eba2a
      Gang He authored
      Because ocfs2_get_dlm_debug() function is called once less here, ocfs2
      file system will trigger the system crash, usually after ocfs2 file
      system is unmounted.
      
      This system crash is caused by a generic memory corruption, these crash
      backtraces are not always the same, for exapmle,
      
          ocfs2: Unmounting device (253,16) on (node 172167785)
          general protection fault: 0000 [#1] SMP PTI
          CPU: 3 PID: 14107 Comm: fence_legacy Kdump:
          Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
          RIP: 0010:__kmalloc+0xa5/0x2a0
          Code: 00 00 4d 8b 07 65 4d 8b
          RSP: 0018:ffffaa1fc094bbe8 EFLAGS: 00010286
          RAX: 0000000000000000 RBX: d310a8800d7a3faf RCX: 0000000000000000
          RDX: 0000000000000000 RSI: 0000000000000dc0 RDI: ffff96e68fc036c0
          RBP: d310a8800d7a3faf R08: ffff96e6ffdb10a0 R09: 00000000752e7079
          R10: 000000000001c513 R11: 0000000004091041 R12: 0000000000000dc0
          R13: 0000000000000039 R14: ffff96e68fc036c0 R15: ffff96e68fc0...
      b73eba2a
    • Kai Li's avatar
      ocfs2: call journal flush to mark journal as empty after journal recovery when mount · 397eac17
      Kai Li authored
      
      
      If journal is dirty when mount, it will be replayed but jbd2 sb log tail
      cannot be updated to mark a new start because journal->j_flag has
      already been set with JBD2_ABORT first in journal_init_common.
      
      When a new transaction is committed, it will be recored in block 1
      first(journal->j_tail is set to 1 in journal_reset).  If emergency
      restart happens again before journal super block is updated
      unfortunately, the new recorded trans will not be replayed in the next
      mount.
      
      The following steps describe this procedure in detail.
      1. mount and touch some files
      2. these transactions are committed to journal area but not checkpointed
      3. emergency restart
      4. mount again and its journals are replayed
      5. journal super block's first s_start is 1, but its s_seq is not updated
      6. touch a new file and its trans is committed but not checkpointed
      7. emergency restart again
      8. mount and journal is dirty, but trans committed in 6 will not be
      replayed.
      
      This exception happens easily when this lun is used by only one node.
      If it is used by multi-nodes, other node will replay its journal and its
      journal super block will be updated after recovery like what this patch
      does.
      
      ocfs2_recover_node->ocfs2_replay_journal.
      
      The following jbd2 journal can be generated by touching a new file after
      journal is replayed, and seq 15 is the first valid commit, but first seq
      is 13 in journal super block.
      
      logdump:
        Block 0: Journal Superblock
        Seq: 0   Type: 4 (JBD2_SUPERBLOCK_V2)
        Blocksize: 4096   Total Blocks: 32768   First Block: 1
        First Commit ID: 13   Start Log Blknum: 1
        Error: 0
        Feature Compat: 0
        Feature Incompat: 2 block64
        Feature RO compat: 0
        Journal UUID: 4ED3822C54294467A4F8E87D2BA4BC36
        FS Share Cnt: 1   Dynamic Superblk Blknum: 0
        Per Txn Block Limit    Journal: 0    Data: 0
      
        Block 1: Journal Commit Block
        Seq: 14   Type: 2 (JBD2_COMMIT_BLOCK)
      
        Block 2: Journal Descriptor
        Seq: 15   Type: 1 (JBD2_DESCRIPTOR_BLOCK)
        No. Blocknum        Flags
         0. 587             none
        UUID: 00000000000000000000000000000000
         1. 8257792         JBD2_FLAG_SAME_UUID
         2. 619             JBD2_FLAG_SAME_UUID
         3. 24772864        JBD2_FLAG_SAME_UUID
         4. 8257802         JBD2_FLAG_SAME_UUID
         5. 513             JBD2_FLAG_SAME_UUID JBD2_FLAG_LAST_TAG
        ...
        Block 7: Inode
        Inode: 8257802   Mode: 0640   Generation: 57157641 (0x3682809)
        FS Generation: 2839773110 (0xa9437fb6)
        CRC32: 00000000   ECC: 0000
        Type: Regular   Attr: 0x0   Flags: Valid
        Dynamic Features: (0x1) InlineData
        User: 0 (root)   Group: 0 (root)   Size: 7
        Links: 1   Clusters: 0
        ctime: 0x5de5d870 0x11104c61 -- Tue Dec  3 11:37:20.286280801 2019
        atime: 0x5de5d870 0x113181a1 -- Tue Dec  3 11:37:20.288457121 2019
        mtime: 0x5de5d870 0x11104c61 -- Tue Dec  3 11:37:20.286280801 2019
        dtime: 0x0 -- Thu Jan  1 08:00:00 1970
        ...
        Block 9: Journal Commit Block
        Seq: 15   Type: 2 (JBD2_COMMIT_BLOCK)
      
      The following is journal recovery log when recovering the upper jbd2
      journal when mount again.
      
      syslog:
        ocfs2: File system on device (252,1) was not unmounted cleanly, recovering it.
        fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 0
        fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 1
        fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 2
        fs/jbd2/recovery.c:(jbd2_journal_recover, 278): JBD2: recovery, exit status 0, recovered transactions 13 to 13
      
      Due to first commit seq 13 recorded in journal super is not consistent
      with the value recorded in block 1(seq is 14), journal recovery will be
      terminated before seq 15 even though it is an unbroken commit, inode
      8257802 is a new file and it will be lost.
      
      Link: http://lkml.kernel.org/r/20191217020140.2197-1-li.kai4@h3c.com
      Signed-off-by: default avatarKai Li <li.kai4@h3c.com>
      Reviewed-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Reviewed-by: default avatarChangwei Ge <gechangwei@live.cn>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      397eac17
    • Waiman Long's avatar
      mm/hugetlb: defer freeing of huge pages if in non-task context · c77c0a8a
      Waiman Long authored
      The following lockdep splat was observed when a certain hugetlbfs test
      was run:
      
        ================================
        WARNING: inconsistent lock state
        4.18.0-159.el8.x86_64+debug #1 Tainted: G        W --------- -  -
        --------------------------------
        inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
        swapper/30/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
        ffffffff9acdc038 (hugetlb_lock){+.?.}, at: free_huge_page+0x36f/0xaa0
        {SOFTIRQ-ON-W} state was registered at:
          lock_acquire+0x14f/0x3b0
          _raw_spin_lock+0x30/0x70
          __nr_hugepages_store_common+0x11b/0xb30
          hugetlb_sysctl_handler_common+0x209/0x2d0
          proc_sys_call_handler+0x37f/0x450
          vfs_write+0x157/0x460
          ksys_write+0xb8/0x170
          do_syscall_64+0xa5/0x4d0
          entry_SYSCALL_64_after_hwframe+0x6a/0xdf
        irq event stamp: 691296
        hardirqs last  enabled at (691296): [<ffffffff99bb034b>] _raw_spin_unlock_irqrestore+0x4b/0x60
        hardirqs last disabled at (691295): [<ffffffff99bb0...
      c77c0a8a
    • Navid Emamdoost's avatar
      mm/gup: fix memory leak in __gup_benchmark_ioctl · a7c46c0c
      Navid Emamdoost authored
      In the implementation of __gup_benchmark_ioctl() the allocated pages
      should be released before returning in case of an invalid cmd.  Release
      pages via kvfree().
      
      [akpm@linux-foundation.org: rework code flow, return -EINVAL rather than -1]
      Link: http://lkml.kernel.org/r/20191211174653.4102-1-navid.emamdoost@gmail.com
      Fixes: 714a3a1e
      
       ("mm/gup_benchmark.c: add additional pinning methods")
      Signed-off-by: default avatarNavid Emamdoost <navid.emamdoost@gmail.com>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
      Reviewed-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
      Cc: Keith Busch <keith.busch@intel.com>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: David Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a7c46c0c
    • Ilya Dryomov's avatar
      mm/oom: fix pgtables units mismatch in Killed process message · 941f762b
      Ilya Dryomov authored
      pr_err() expects kB, but mm_pgtables_bytes() returns the number of bytes.
      As everything else is printed in kB, I chose to fix the value rather than
      the string.
      
      Before:
      
      [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
      ...
      [   1878]  1000  1878   217253   151144  1269760        0             0 python
      ...
      Out of memory: Killed process 1878 (python) total-vm:869012kB, anon-rss:604572kB, file-rss:4kB, shmem-rss:0kB, UID:1000 pgtables:1269760kB oom_score_adj:0
      
      After:
      
      [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
      ...
      [   1436]  1000  1436   217253   151890  1294336        0             0 python
      ...
      Out of memory: Killed process 1436 (python) total-vm:869012kB, anon-rss:607516kB, file-rss:44kB, shmem-rss:0kB, UID:1000 pgtables:1264kB oom_score_adj:0
      
      Link: http://lkml.kernel.org/r/20191211202830.1600-1-idryomov@gmail.com
      Fixes: 70cb6d26
      
       ("mm/oom: add oom_score_adj and pgtables to Killed process message")
      Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarDavid Rientjes <rientjes@google.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Edward Chron <echron@arista.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      941f762b
    • Randy Dunlap's avatar
      fs/posix_acl.c: fix kernel-doc warnings · e39e773a
      Randy Dunlap authored
      Fix kernel-doc warnings in fs/posix_acl.c.
      Also fix one typo (setgit -> setgid).
      
        fs/posix_acl.c:647: warning: Function parameter or member 'inode' not described in 'posix_acl_update_mode'
        fs/posix_acl.c:647: warning: Function parameter or member 'mode_p' not described in 'posix_acl_update_mode'
        fs/posix_acl.c:647: warning: Function parameter or member 'acl' not described in 'posix_acl_update_mode'
      
      Link: http://lkml.kernel.org/r/29b0dc46-1f28-a4e5-b1d0-ba2b65629779@infradead.org
      Fixes: 07393101
      
       ("posix_acl: Clear SGID bit when setting file permissions")
      
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Acked-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Cc: Jan Kara <jack@suse.cz>
      Cc: Andreas Gruenbacher <agruenba@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e39e773a
    • Nick Desaulniers's avatar
      hexagon: work around compiler crash · 63e80314
      Nick Desaulniers authored
      
      
      Clang cannot translate the string "r30" into a valid register yet.
      
      Link: https://github.com/ClangBuiltLinux/linux/issues/755
      Link: http://lkml.kernel.org/r/20191028155722.23419-1-ndesaulniers@google.com
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Suggested-by: default avatarSid Manning <sidneym@quicinc.com>
      Reviewed-by: default avatarBrian Cain <bcain@codeaurora.org>
      Cc: Allison Randal <allison@lohutok.net>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Richard Fontana <rfontana@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      63e80314
    • Nick Desaulniers's avatar
      hexagon: parenthesize registers in asm predicates · 780a0cfd
      Nick Desaulniers authored
      
      
      Hexagon requires that register predicates in assembly be parenthesized.
      
      Link: https://github.com/ClangBuiltLinux/linux/issues/754
      Link: http://lkml.kernel.org/r/20191209222956.239798-3-ndesaulniers@google.com
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Suggested-by: default avatarSid Manning <sidneym@codeaurora.org>
      Acked-by: default avatarBrian Cain <bcain@codeaurora.org>
      Cc: Lee Jones <lee.jones@linaro.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Tuowen Zhao <ztuowen@gmail.com>
      Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
      Cc: Luis Chamberlain <mcgrof@kernel.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Allison Randal <allison@lohutok.net>
      Cc: Will Deacon <will@kernel.org>
      Cc: Richard Fontana <rfontana@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Boqun Feng <boqun.feng@gmail.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      780a0cfd
    • Eric Biggers's avatar
      fs/namespace.c: make to_mnt_ns() static · 213921f9
      Eric Biggers authored
      
      
      Make to_mnt_ns() static to address the following 'sparse' warning:
      
          fs/namespace.c:1731:22: warning: symbol 'to_mnt_ns' was not declared. Should it be static?
      
      Link: http://lkml.kernel.org/r/20191209234830.156260-1-ebiggers@kernel.org
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      213921f9
    • Eric Biggers's avatar
      fs/nsfs.c: include headers for missing declarations · 7bebd69e
      Eric Biggers authored
      
      
      Include linux/proc_fs.h and fs/internal.h to address the following
      'sparse' warnings:
      
          fs/nsfs.c:41:32: warning: symbol 'ns_dentry_operations' was not declared. Should it be static?
          fs/nsfs.c:145:5: warning: symbol 'open_related_ns' was not declared. Should it be static?
      
      Link: http://lkml.kernel.org/r/20191209234822.156179-1-ebiggers@kernel.org
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7bebd69e
    • Eric Biggers's avatar
      fs/direct-io.c: include fs/internal.h for missing prototype · b16155a0
      Eric Biggers authored
      
      
      Include fs/internal.h to address the following 'sparse' warning:
      
          fs/direct-io.c:591:5: warning: symbol 'sb_init_dio_done_wq' was not declared. Should it be static?
      
      Link: http://lkml.kernel.org/r/20191209234544.128302-1-ebiggers@kernel.org
      Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      b16155a0
    • Yang Shi's avatar
      mm: move_pages: return valid node id in status if the page is already on the target node · e0153fc2
      Yang Shi authored
      Felix Abecassis reports move_pages() would return random status if the
      pages are already on the target node by the below test program:
      
        int main(void)
        {
      	const long node_id = 1;
      	const long page_size = sysconf(_SC_PAGESIZE);
      	const int64_t num_pages = 8;
      
      	unsigned long nodemask =  1 << node_id;
      	long ret = set_mempolicy(MPOL_BIND, &nodemask, sizeof(nodemask));
      	if (ret < 0)
      		return (EXIT_FAILURE);
      
      	void **pages = malloc(sizeof(void*) * num_pages);
      	for (int i = 0; i < num_pages; ++i) {
      		pages[i] = mmap(NULL, page_size, PROT_WRITE | PROT_READ,
      				MAP_PRIVATE | MAP_POPULATE | MAP_ANONYMOUS,
      				-1, 0);
      		if (pages[i] == MAP_FAILED)
      			return (EXIT_FAILURE);
      	}
      
      	ret = set_mempolicy(MPOL_DEFAULT, NULL, 0);
      	if (ret < 0)
      		return (EXIT_FAILURE);
      
      	int *nodes = malloc(sizeof(int) * num_pages);
      	int *status = malloc(sizeof(int) * num_pages);
      	for (int i = 0; i < num_pages; ++i) {
      		nodes[i] = node_id;
      		status[i] = 0xd0; /* simulate garbage values */
      	}
      
      	ret = move_pages(0, num_pages, pages, nodes, status, MPOL_MF_MOVE);
      	printf("move_pages: %ld\n", ret);
      	for (int i = 0; i < num_pages; ++i)
      		printf("status[%d] = %d\n", i, status[i]);
        }
      
      Then running the program would return nonsense status values:
      
        $ ./move_pages_bug
        move_pages: 0
        status[0] = 208
        status[1] = 208
        status[2] = 208
        status[3] = 208
        status[4] = 208
        status[5] = 208
        status[6] = 208
        status[7] = 208
      
      This is because the status is not set if the page is already on the
      target node, but move_pages() should return valid status as long as it
      succeeds.  The valid status may be errno or node id.
      
      We can't simply initialize status array to zero since the pages may be
      not on node 0.  Fix it by updating status with node id which the page is
      already on.
      
      Link: http://lkml.kernel.org/r/1575584353-125392-1-git-send-email-yang.shi@linux.alibaba.com
      Fixes: a49bd4d7
      
       ("mm, numa: rework do_pages_move")
      Signed-off-by: default avatarYang Shi <yang.shi@linux.alibaba.com>
      Reported-by: default avatarFelix Abecassis <fabecassis@nvidia.com>
      Tested-by: default avatarFelix Abecassis <fabecassis@nvidia.com>
      Suggested-by: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
      Acked-by: default avatarChristoph Lameter <cl@linux.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Mel Gorman <mgorman@techsingularity.net>
      Cc: <stable@vger.kernel.org>	[4.17+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e0153fc2
    • Shakeel Butt's avatar
      memcg: account security cred as well to kmemcg · 84029fd0
      Shakeel Butt authored
      
      
      The cred_jar kmem_cache is already memcg accounted in the current kernel
      but cred->security is not.  Account cred->security to kmemcg.
      
      Recently we saw high root slab usage on our production and on further
      inspection, we found a buggy application leaking processes.  Though that
      buggy application was contained within its memcg but we observe much
      more system memory overhead, couple of GiBs, during that period.  This
      overhead can adversely impact the isolation on the system.
      
      One source of high overhead we found was cred->security objects, which
      have a lifetime of at least the life of the process which allocated
      them.
      
      Link: http://lkml.kernel.org/r/20191205223721.40034-1-shakeelb@google.com
      Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
      Acked-by: default avatarChris Down <chris@chrisdown.name>
      Reviewed-by: default avatarRoman Gushchin <guro@fb.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      84029fd0