10 Jun, 2023

40 commits

  • Now in ocfs2_local_free_info(), it returns 0 even if it actually fails.
    Though it doesn't cause any real problem since the only caller
    dquot_disable() ignores the return value, we'd better return correct as it
    is.

    Link: https://lkml.kernel.org/r/20230528132033.217664-1-joseph.qi@linux.alibaba.com
    Signed-off-by: Joseph Qi
    Cc: Mark Fasheh
    Cc: Joel Becker
    Cc: Junxiao Bi
    Cc: Joseph Qi
    Cc: Changwei Ge
    Cc: Gang He
    Cc: Jun Piao
    Signed-off-by: Andrew Morton

    Joseph Qi
     
  • Avoid calculating array size twice in kexec_purgatory_setup_sechdrs().
    Once using array_size(), and once open-coded.

    Flagged by Coccinelle:

    .../kexec_file.c:881:8-25: WARNING: array_size is already used (line 877) to compute the same size

    No functional change intended.
    Compile tested only.

    Link: https://lkml.kernel.org/r/20230525-kexec-array_size-v1-1-8b4bf4f7500a@kernel.org
    Signed-off-by: Simon Horman
    Acked-by: Baoquan He
    Cc: Eric W. Biederman
    Cc: Zhen Lei
    Signed-off-by: Andrew Morton

    Simon Horman
     
  • mult_frac() evaluates _all_ arguments multiple times in the body.

    Clarify comment while I'm at it.

    Link: https://lkml.kernel.org/r/f9f9fdbb-ec8e-4f5e-a998-2a58627a1a43@p183
    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Andrew Morton

    Alexey Dobriyan
     
  • With the recent feature added to enable perf events to use pseudo NMIs as
    interrupts on platforms which support GICv3 or later, its now been
    possible to enable hard lockup detector (or NMI watchdog) on arm64
    platforms. So enable corresponding support.

    One thing to note here is that normally lockup detector is initialized
    just after the early initcalls but PMU on arm64 comes up much later as
    device_initcall(). To cope with that, override
    arch_perf_nmi_is_available() to let the watchdog framework know PMU not
    ready, and inform the framework to re-initialize lockup detection once PMU
    has been initialized.

    [dianders@chromium.org: only HAVE_HARDLOCKUP_DETECTOR_PERF if the PMU config is enabled]
    Link: https://lkml.kernel.org/r/20230523073952.1.I60217a63acc35621e13f10be16c0cd7c363caf8c@changeid
    Link: https://lkml.kernel.org/r/20230519101840.v5.18.Ia44852044cdcb074f387e80df6b45e892965d4a1@changeid
    Co-developed-by: Sumit Garg
    Signed-off-by: Sumit Garg
    Co-developed-by: Pingfan Liu
    Signed-off-by: Pingfan Liu
    Signed-off-by: Lecopzer Chen
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • Set safe maximum CPU frequency to 5 GHz in case a particular platform
    doesn't implement cpufreq driver. Although, architecture doesn't put any
    restrictions on maximum frequency but 5 GHz seems to be safe maximum given
    the available Arm CPUs in the market which are clocked much less than 5
    GHz.

    On the other hand, we can't make it much higher as it would lead to a
    large hard-lockup detection timeout on parts which are running slower (eg.
    1GHz on Developerbox) and doesn't possess a cpufreq driver.

    Link: https://lkml.kernel.org/r/20230519101840.v5.17.Ia9d02578e89c3f44d3cb12eec8b0176603c8ab2f@changeid
    Co-developed-by: Sumit Garg
    Signed-off-by: Sumit Garg
    Co-developed-by: Pingfan Liu
    Signed-off-by: Pingfan Liu
    Signed-off-by: Lecopzer Chen
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Lecopzer Chen
     
  • When lockup_detector_init()->watchdog_hardlockup_probe(), PMU may be not
    ready yet. E.g. on arm64, PMU is not ready until
    device_initcall(armv8_pmu_driver_init). And it is deeply integrated with
    the driver model and cpuhp. Hence it is hard to push this initialization
    before smp_init().

    But it is easy to take an opposite approach and try to initialize the
    watchdog once again later. The delayed probe is called using workqueues.
    It need to allocate memory and must be proceed in a normal context. The
    delayed probe is able to use if watchdog_hardlockup_probe() returns
    non-zero which means the return code returned when PMU is not ready yet.

    Provide an API - lockup_detector_retry_init() for anyone who needs to
    delayed init lockup detector if they had ever failed at
    lockup_detector_init().

    The original assumption is: nobody should use delayed probe after
    lockup_detector_check() which has __init attribute. That is, anyone uses
    this API must call between lockup_detector_init() and
    lockup_detector_check(), and the caller must have __init attribute

    Link: https://lkml.kernel.org/r/20230519101840.v5.16.If4ad5dd5d09fb1309cebf8bcead4b6a5a7758ca7@changeid
    Reviewed-by: Petr Mladek
    Co-developed-by: Pingfan Liu
    Signed-off-by: Pingfan Liu
    Signed-off-by: Lecopzer Chen
    Signed-off-by: Douglas Anderson
    Suggested-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Lecopzer Chen
     
  • On arm64, NMI support needs to be detected at runtime. Add a weak
    function to the perf hardlockup detector so that an architecture can
    implement it to detect whether NMIs are available.

    Link: https://lkml.kernel.org/r/20230519101840.v5.15.Ic55cb6f90ef5967d8aaa2b503a4e67c753f64d3a@changeid
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • Implement a hardlockup detector that doesn't doesn't need any extra
    arch-specific support code to detect lockups. Instead of using something
    arch-specific we will use the buddy system, where each CPU watches out for
    another one. Specifically, each CPU will use its softlockup hrtimer to
    check that the next CPU is processing hrtimer interrupts by verifying that
    a counter is increasing.

    NOTE: unlike the other hard lockup detectors, the buddy one can't easily
    show what's happening on the CPU that locked up just by doing a simple
    backtrace. It relies on some other mechanism in the system to get
    information about the locked up CPUs. This could be support for NMI
    backtraces like [1], it could be a mechanism for printing the PC of locked
    CPUs at panic time like [2] / [3], or it could be something else. Even
    though that means we still rely on arch-specific code, this arch-specific
    code seems to often be implemented even on architectures that don't have a
    hardlockup detector.

    This style of hardlockup detector originated in some downstream Android
    trees and has been rebased on / carried in ChromeOS trees for quite a long
    time for use on arm and arm64 boards. Historically on these boards we've
    leveraged mechanism [2] / [3] to get information about hung CPUs, but we
    could move to [1].

    Although the original motivation for the buddy system was for use on
    systems without an arch-specific hardlockup detector, it can still be
    useful to use even on systems that _do_ have an arch-specific hardlockup
    detector. On x86, for instance, there is a 24-part patch series [4] in
    progress switching the arch-specific hard lockup detector from a scarce
    perf counter to a less-scarce hardware resource. Potentially the buddy
    system could be a simpler alternative to free up the perf counter but
    still get hard lockup detection.

    Overall, pros (+) and cons (-) of the buddy system compared to an
    arch-specific hardlockup detector (which might be implemented using
    perf):
    + The buddy system is usable on systems that don't have an
    arch-specific hardlockup detector, like arm32 and arm64 (though it's
    being worked on for arm64 [5]).
    + The buddy system may free up scarce hardware resources.
    + If a CPU totally goes out to lunch (can't process NMIs) the buddy
    system could still detect the problem (though it would be unlikely
    to be able to get a stack trace).
    + The buddy system uses the same timer function to pet the hardlockup
    detector on the running CPU as it uses to detect hardlockups on
    other CPUs. Compared to other hardlockup detectors, this means it
    generates fewer interrupts and thus is likely better able to let
    CPUs stay idle longer.
    - If all CPUs are hard locked up at the same time the buddy system
    can't detect it.
    - If we don't have SMP we can't use the buddy system.
    - The buddy system needs an arch-specific mechanism (possibly NMI
    backtrace) to get info about the locked up CPU.

    [1] https://lore.kernel.org/r/20230419225604.21204-1-dianders@chromium.org
    [2] https://issuetracker.google.com/172213129
    [3] https://docs.kernel.org/trace/coresight/coresight-cpu-debug.html
    [4] https://lore.kernel.org/lkml/20230301234753.28582-1-ricardo.neri-calderon@linux.intel.com/
    [5] https://lore.kernel.org/linux-arm-kernel/20220903093415.15850-1-lecopzer.chen@mediatek.com/

    Link: https://lkml.kernel.org/r/20230519101840.v5.14.I6bf789d21d0c3d75d382e7e51a804a7a51315f2c@changeid
    Signed-off-by: Colin Cross
    Signed-off-by: Matthias Kaehlcke
    Signed-off-by: Guenter Roeck
    Signed-off-by: Tzung-Bi Shih
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • The fact that there watchdog_hardlockup_enable(),
    watchdog_hardlockup_disable(), and watchdog_hardlockup_probe() are
    declared __weak means that the configured hardlockup detector can define
    non-weak versions of those functions if it needs to. Instead of doing
    this, the perf hardlockup detector hooked itself into the default __weak
    implementation, which was a bit awkward. Clean this up.

    From comments, it looks as if the original design was done because the
    __weak function were expected to implemented by the architecture and not
    by the configured hardlockup detector. This got awkward when we tried to
    add the buddy lockup detector which was not arch-specific but wanted to
    hook into those same functions.

    This is not expected to have any functional impact.

    Link: https://lkml.kernel.org/r/20230519101840.v5.13.I847d9ec852449350997ba00401d2462a9cb4302b@changeid
    Signed-off-by: Douglas Anderson
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • Do a search and replace of:
    - NMI_WATCHDOG_ENABLED => WATCHDOG_HARDLOCKUP_ENABLED
    - SOFT_WATCHDOG_ENABLED => WATCHDOG_SOFTOCKUP_ENABLED
    - watchdog_nmi_ => watchdog_hardlockup_
    - nmi_watchdog_available => watchdog_hardlockup_available
    - nmi_watchdog_user_enabled => watchdog_hardlockup_user_enabled
    - soft_watchdog_user_enabled => watchdog_softlockup_user_enabled
    - NMI_WATCHDOG_DEFAULT => WATCHDOG_HARDLOCKUP_DEFAULT

    Then update a few comments near where names were changed.

    This is specifically to make it less confusing when we want to introduce
    the buddy hardlockup detector, which isn't using NMIs. As part of this,
    we sanitized a few names for consistency.

    [trix@redhat.com: make variables static]
    Link: https://lkml.kernel.org/r/20230525162822.1.I0fb41d138d158c9230573eaa37dc56afa2fb14ee@changeid
    Link: https://lkml.kernel.org/r/20230519101840.v5.12.I91f7277bab4bf8c0cb238732ed92e7ce7bbd71a6@changeid
    Signed-off-by: Douglas Anderson
    Signed-off-by: Tom Rix
    Reviewed-by: Tom Rix
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • In preparation for the buddy hardlockup detector, which wants the same
    petting logic as the current perf hardlockup detector, move the code to
    watchdog.c. While doing this, rename the global variable to match others
    nearby. As part of this change we have to change the code to account for
    the fact that the CPU we're running on might be different than the one
    we're checking.

    Currently the code in watchdog.c is guarded by
    CONFIG_HARDLOCKUP_DETECTOR_PERF, which makes this change seem silly.
    However, a future patch will change this.

    Link: https://lkml.kernel.org/r/20230519101840.v5.11.I00dfd6386ee00da25bf26d140559a41339b53e57@changeid
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • In preparation for the buddy hardlockup detector where the CPU checking
    for lockup might not be the currently running CPU, add a "cpu" parameter
    to watchdog_hardlockup_check().

    As part of this change, make hrtimer_interrupts an atomic_t since now the
    CPU incrementing the value and the CPU reading the value might be
    different. Technially this could also be done with just READ_ONCE and
    WRITE_ONCE, but atomic_t feels a little cleaner in this case.

    While hrtimer_interrupts is made atomic_t, we change
    hrtimer_interrupts_saved from "unsigned long" to "int". The "int" is
    needed to match the data type backing atomic_t for hrtimer_interrupts.
    Even if this changes us from 64-bits to 32-bits (which I don't think is
    true for most compilers), it doesn't really matter. All we ever do is
    increment it every few seconds and compare it to an old value so 32-bits
    is fine (even 16-bits would be). The "signed" vs "unsigned" also doesn't
    matter for simple equality comparisons.

    hrtimer_interrupts_saved is _not_ switched to atomic_t nor even accessed
    with READ_ONCE / WRITE_ONCE. The hrtimer_interrupts_saved is always
    consistently accessed with the same CPU. NOTE: with the upcoming "buddy"
    detector there is one special case. When a CPU goes offline/online then
    we can change which CPU is the one to consistently access a given instance
    of hrtimer_interrupts_saved. We still can't end up with a partially
    updated hrtimer_interrupts_saved, however, because we end up petting all
    affected CPUs to make sure the new and old CPU can't end up somehow
    read/write hrtimer_interrupts_saved at the same time.

    Link: https://lkml.kernel.org/r/20230519101840.v5.10.I3a7d4dd8c23ac30ee0b607d77feb6646b64825c0@changeid
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • These are tiny style changes:
    - Add a blank line before a "return".
    - Renames two globals to use the "watchdog_hardlockup" prefix.
    - Store processor id in "unsigned int" rather than "int".
    - Minor comment rewording.
    - Use "else" rather than extra returns since it seemed more symmetric.

    Link: https://lkml.kernel.org/r/20230519101840.v5.9.I818492c326b632560b09f20d2608455ecf9d3650@changeid
    Reviewed-by: Petr Mladek
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • The perf hardlockup detector works by looking at interrupt counts and
    seeing if they change from run to run. The interrupt counts are managed
    by the common watchdog code via its watchdog_timer_fn().

    Currently the API between the perf detector and the common code is a
    function: is_hardlockup(). When the hard lockup detector sees that
    function return true then it handles printing out debug info and inducing
    a panic if necessary.

    Let's change the API a little bit in preparation for the buddy hardlockup
    detector. The buddy hardlockup detector wants to print nearly the same
    debug info and have nearly the same panic behavior. That means we want to
    move all that code to the common file. For now, the code in the common
    file will only be there if the perf hardlockup detector is enabled, but
    eventually it will be selected by a common config.

    Right now, this _just_ moves the code from the perf detector file to the
    common file and changes the names. It doesn't make the changes that the
    buddy hardlockup detector will need and doesn't do any style cleanups. A
    future patch will do cleanup to make it more obvious what changed.

    With the above, we no longer have any callers of is_hardlockup() outside
    of the "watchdog.c" file, so we can remove it from the header, make it
    static, and move it to the same "#ifdef" block as our new
    watchdog_hardlockup_check(). While doing this, it can be noted that even
    if no hardlockup detectors were configured the existing code used to still
    have the code for counting/checking "hrtimer_interrupts" even if the perf
    hardlockup detector wasn't configured. We didn't need to do that, so move
    all the "hrtimer_interrupts" counting to only be there if the perf
    hardlockup detector is configured as well.

    This change is expected to be a no-op.

    Link: https://lkml.kernel.org/r/20230519101840.v5.8.Id4133d3183e798122dc3b6205e7852601f289071@changeid
    Signed-off-by: Douglas Anderson
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • The code currently in "watchdog_hld.c" is for detecting hardlockups using
    perf, as evidenced by the line in the Makefile that only compiles this
    file if CONFIG_HARDLOCKUP_DETECTOR_PERF is defined. Rename the file to
    prepare for the buddy hardlockup detector, which doesn't use perf.

    It could be argued that the new name makes it less obvious that this is a
    hardlockup detector. While true, it's not hard to remember that the
    "perf" detector is always a hardlockup detector and it's nice not to have
    names that are too convoluted.

    Link: https://lkml.kernel.org/r/20230519101840.v5.7.Ice803cb078d0e15fb2cbf49132f096ee2bd4199d@changeid
    Signed-off-by: Douglas Anderson
    Acked-by: Nicholas Piggin
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • In preparation for the buddy hardlockup detector, add comments to
    touch_nmi_watchdog() to make it obvious that it touches the configured
    hardlockup detector regardless of whether it's backed by an NMI. Also
    note that arch_touch_nmi_watchdog() may not be architecture-specific.

    Ideally, we'd like to rename these functions but that is a fairly
    disruptive change touching a lot of drivers. After discussion [1] the
    plan is to defer this until a good time.

    [1] https://lore.kernel.org/r/ZFy0TX1tfhlH8gxj@alley

    [akpm@linux-foundation.org: comment changes, per Petr]
    Link: https://lkml.kernel.org/r/ZGyONWPXpE1DcxA5@alley
    Link: https://lkml.kernel.org/r/20230519101840.v5.6.I4e47cbfa1bb2ebbcdb5ca16817aa2887f15dc82c@changeid
    Signed-off-by: Douglas Anderson
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • hardlockup_detector_event_create() should create perf_event on the current
    CPU. Preemption could not get disabled because
    perf_event_create_kernel_counter() allocates memory. Instead, the CPU
    locality is achieved by processing the code in a per-CPU bound kthread.

    Add a check to prevent mistakes when calling the code in another code
    path.

    Link: https://lkml.kernel.org/r/20230519101840.v5.5.I654063e53782b11d53e736a8ad4897ffd207406a@changeid
    Signed-off-by: Pingfan Liu
    Co-developed-by: Lecopzer Chen
    Signed-off-by: Lecopzer Chen
    Signed-off-by: Douglas Anderson
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Pingfan Liu
     
  • Nobody cares about the return value of watchdog_nmi_enable(), changing its
    prototype to void.

    Link: https://lkml.kernel.org/r/20230519101840.v5.4.Ic3a19b592eb1ac4c6f6eade44ffd943e8637b6e5@changeid
    Signed-off-by: Pingfan Liu
    Signed-off-by: Lecopzer Chen
    Signed-off-by: Douglas Anderson
    Reviewed-by: Petr Mladek
    Acked-by: Nicholas Piggin
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Lecopzer Chen
     
  • No reference to WATCHDOG_DEFAULT, remove it.

    Link: https://lkml.kernel.org/r/20230519101840.v5.3.I6a729209a1320e0ad212176e250ff945b8f91b2a@changeid
    Signed-off-by: Pingfan Liu
    Signed-off-by: Lecopzer Chen
    Signed-off-by: Douglas Anderson
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Lecopzer Chen
     
  • Currently, in the watchdog_overflow_callback() we first check to see if
    the watchdog had been touched and _then_ we handle the workaround for
    turbo mode. This order should be reversed.

    Specifically, "touching" the hardlockup detector's watchdog should avoid
    lockups being detected for one period that should be roughly the same
    regardless of whether we're running turbo or not. That means that we
    should do the extra accounting for turbo _before_ we look at (and clear)
    the global indicating that we've been touched.

    NOTE: this fix is made based on code inspection. I am not aware of any
    reports where the old code would have generated false positives. That
    being said, this order seems more correct and also makes it easier down
    the line to share code with the "buddy" hardlockup detector.

    Link: https://lkml.kernel.org/r/20230519101840.v5.2.I843b0d1de3e096ba111a179f3adb16d576bef5c7@changeid
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Douglas Anderson
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Colin Cross
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Nicholas Piggin
    Cc: Petr Mladek
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • Patch series "watchdog/hardlockup: Add the buddy hardlockup detector", v5.

    This patch series adds the "buddy" hardlockup detector. In brief, the
    buddy hardlockup detector can detect hardlockups without arch-level
    support by having CPUs checkup on a "buddy" CPU periodically.

    Given the new design of this patch series, testing all combinations is
    fairly difficult. I've attempted to make sure that all combinations of
    CONFIG_ options are good, but it wouldn't surprise me if I missed
    something. I apologize in advance and I'll do my best to fix any
    problems that are found.

    This patch (of 18):

    The real watchdog_update_hrtimer_threshold() is defined in
    kernel/watchdog_hld.c. That file is included if
    CONFIG_HARDLOCKUP_DETECTOR_PERF and the function is defined in that file
    if CONFIG_HARDLOCKUP_CHECK_TIMESTAMP.

    The dummy version of the function in "nmi.h" didn't get that quite right.
    While this doesn't appear to be a huge deal, it's nice to make it
    consistent.

    It doesn't break builds because CHECK_TIMESTAMP is only defined by x86 so
    others don't get a double definition, and x86 uses perf lockup detector,
    so it gets the out of line version.

    Link: https://lkml.kernel.org/r/20230519101840.v5.18.Ia44852044cdcb074f387e80df6b45e892965d4a1@changeid
    Link: https://lkml.kernel.org/r/20230519101840.v5.1.I8cbb2f4fa740528fcfade4f5439b6cdcdd059251@changeid
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Douglas Anderson
    Reviewed-by: Nicholas Piggin
    Reviewed-by: Petr Mladek
    Cc: Andi Kleen
    Cc: Catalin Marinas
    Cc: Chen-Yu Tsai
    Cc: Christophe Leroy
    Cc: Daniel Thompson
    Cc: "David S. Miller"
    Cc: Guenter Roeck
    Cc: Ian Rogers
    Cc: Lecopzer Chen
    Cc: Marc Zyngier
    Cc: Mark Rutland
    Cc: Masayoshi Mizuma
    Cc: Matthias Kaehlcke
    Cc: Michael Ellerman
    Cc: Pingfan Liu
    Cc: Randy Dunlap
    Cc: "Ravi V. Shankar"
    Cc: Ricardo Neri
    Cc: Stephane Eranian
    Cc: Stephen Boyd
    Cc: Sumit Garg
    Cc: Tzung-Bi Shih
    Cc: Will Deacon
    Cc: Colin Cross
    Signed-off-by: Andrew Morton

    Douglas Anderson
     
  • The entry points for the decompressor don't always have a prototype
    included in the .c file:

    lib/decompress_inflate.c:42:17: error: no previous prototype for '__gunzip' [-Werror=missing-prototypes]
    lib/decompress_unxz.c:251:17: error: no previous prototype for 'unxz' [-Werror=missing-prototypes]
    lib/decompress_unzstd.c:331:17: error: no previous prototype for 'unzstd' [-Werror=missing-prototypes]

    Include the correct headers for unxz and unzstd, and mark the inflate
    function above as unconditionally 'static' to avoid these warnings.

    Link: https://lkml.kernel.org/r/20230517131936.936840-1-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Nick Terrell
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • Booting with the QEMU command line:
    "qemu-system-x86_64 -append root=/dev/vda rootfstype=ext4 ..."
    will panic if ext4 is not builtin and a request to load the ext4 module
    fails.

    [ 1.729006] VFS: Cannot open root device "vda" or unknown-block(253,0): error -19
    [ 1.730603] Please append a correct "root=" boot option; here are the available partitions:
    [ 1.732323] fd00 256000 vda
    [ 1.732329] driver: virtio_blk
    [ 1.734194] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
    [ 1.734771] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-rc2+ #53
    [ 1.735194] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.10.2-1ubuntu1 04/01/2014
    [ 1.735772] Call Trace:
    [ 1.735950]
    [ 1.736113] dump_stack_lvl+0x32/0x50
    [ 1.736367] panic+0x108/0x310
    [ 1.736570] mount_block_root+0x161/0x310
    [ 1.736849] ? rdinit_setup+0x40/0x40
    [ 1.737088] prepare_namespace+0x10c/0x180
    [ 1.737393] kernel_init_freeable+0x354/0x450
    [ 1.737707] ? rest_init+0xd0/0xd0
    [ 1.737945] kernel_init+0x16/0x130
    [ 1.738196] ret_from_fork+0x1f/0x30

    As a hint, print all the bdev fstypes which are available.

    [akpm@linux-foundation.org: fix spelling in printk message]
    Link: https://lkml.kernel.org/r/20230518035321.1672-1-angus.chen@jaguarmicro.com
    Signed-off-by: Angus Chen
    Acked-by: Nick Desaulniers
    Cc: Masahiro Yamada
    Cc: Mike Rapoport (IBM)
    Cc: Paul E. McKenney
    Cc: Peter Zijlstra
    Cc: Vlastimil Babka
    Cc: Al Viro
    Signed-off-by: Andrew Morton

    Angus Chen
     
  • A number of internal functions in kcov are only called from generated code
    and don't technically need a declaration, but 'make W=1' warns about
    global symbols without a prototype:

    kernel/kcov.c:199:14: error: no previous prototype for '__sanitizer_cov_trace_pc' [-Werror=missing-prototypes]
    kernel/kcov.c:264:14: error: no previous prototype for '__sanitizer_cov_trace_cmp1' [-Werror=missing-prototypes]
    kernel/kcov.c:270:14: error: no previous prototype for '__sanitizer_cov_trace_cmp2' [-Werror=missing-prototypes]
    kernel/kcov.c:276:14: error: no previous prototype for '__sanitizer_cov_trace_cmp4' [-Werror=missing-prototypes]
    kernel/kcov.c:282:14: error: no previous prototype for '__sanitizer_cov_trace_cmp8' [-Werror=missing-prototypes]
    kernel/kcov.c:288:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp1' [-Werror=missing-prototypes]
    kernel/kcov.c:295:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp2' [-Werror=missing-prototypes]
    kernel/kcov.c:302:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp4' [-Werror=missing-prototypes]
    kernel/kcov.c:309:14: error: no previous prototype for '__sanitizer_cov_trace_const_cmp8' [-Werror=missing-prototypes]
    kernel/kcov.c:316:14: error: no previous prototype for '__sanitizer_cov_trace_switch' [-Werror=missing-prototypes]

    Adding prototypes for these in a header solves that problem, but now there
    is a mismatch between the built-in type and the prototype on 64-bit
    architectures because they expect some functions to take a 64-bit
    'unsigned long' argument rather than an 'unsigned long long' u64 type:

    include/linux/kcov.h:84:6: error: conflicting types for built-in function '__sanitizer_cov_trace_switch'; expected 'void(long long unsigned int, void *)' [-Werror=builtin-declaration-mismatch]
    84 | void __sanitizer_cov_trace_switch(u64 val, u64 *cases);
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Avoid this as well with a custom type definition.

    Link: https://lkml.kernel.org/r/20230517124944.929997-1-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Andrey Konovalov
    Cc: Dmitry Vyukov
    Cc: Rong Tao
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • The arch_get_vdso_data() function is defined separately on each
    architecture, but only called when CONFIG_TIME_NS is set. If the
    definition is a global function, this causes a W=1 warning without
    TIME_NS:

    arch/x86/entry/vdso/vma.c:35:19: error: no previous prototype for 'arch_get_vdso_data' [-Werror=missing-prototypes]

    Move the prototype out of the #ifdef block to reliably turn off that
    warning.

    Link: https://lkml.kernel.org/r/20230517131102.934196-15-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • There are a few __weak functions in kernel/fork.c, which architectures
    can override. If there is no prototype, the compiler warns about them:

    kernel/fork.c:164:13: error: no previous prototype for 'arch_release_task_struct' [-Werror=missing-prototypes]
    kernel/fork.c:991:20: error: no previous prototype for 'arch_task_cache_init' [-Werror=missing-prototypes]
    kernel/fork.c:1086:12: error: no previous prototype for 'arch_dup_task_struct' [-Werror=missing-prototypes]

    There are already prototypes in a number of architecture specific headers
    that have addressed those warnings before, but it's much better to have
    these in a single place so the warning no longer shows up anywhere.

    Link: https://lkml.kernel.org/r/20230517131102.934196-14-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • cifs_root_data() is defined in cifs and called from early init code, but
    lacks a global prototype:

    fs/cifs/cifsroot.c:83:12: error: no previous prototype for 'cifs_root_data'

    Move the declaration from do_mounts.c into an appropriate header.

    Link: https://lkml.kernel.org/r/20230517131102.934196-13-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • The init/main.c file contains some extern declarations for functions
    defined in architecture code, and it defines some other functions that are
    called from architecture code with a custom prototype. Both of those
    result in warnings with 'make W=1':

    init/calibrate.c:261:37: error: no previous prototype for 'calibrate_delay_is_known' [-Werror=missing-prototypes]
    init/main.c:790:20: error: no previous prototype for 'mem_encrypt_init' [-Werror=missing-prototypes]
    init/main.c:792:20: error: no previous prototype for 'poking_init' [-Werror=missing-prototypes]
    arch/arm64/kernel/irq.c:122:13: error: no previous prototype for 'init_IRQ' [-Werror=missing-prototypes]
    arch/arm64/kernel/time.c:55:13: error: no previous prototype for 'time_init' [-Werror=missing-prototypes]
    arch/x86/kernel/process.c:935:13: error: no previous prototype for 'arch_post_acpi_subsys_init' [-Werror=missing-prototypes]
    init/calibrate.c:261:37: error: no previous prototype for 'calibrate_delay_is_known' [-Werror=missing-prototypes]
    kernel/fork.c:991:20: error: no previous prototype for 'arch_task_cache_init' [-Werror=missing-prototypes]

    Add prototypes for all of these in include/linux/init.h or another
    appropriate header, and remove the duplicate declarations from
    architecture specific code.

    [sfr@canb.auug.org.au: declare time_init_early()]
    Link: https://lkml.kernel.org/r/20230519124311.5167221c@canb.auug.org.au
    Link: https://lkml.kernel.org/r/20230517131102.934196-12-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Stephen Rothwell
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • An extra #include statement is needed to ensure the prototypes for debugfs
    interfaces are visible, avoiding this warning:

    lib/kunit/debugfs.c:28:6: error: no previous prototype for 'kunit_debugfs_cleanup' [-Werror=missing-prototypes]
    lib/kunit/debugfs.c:33:6: error: no previous prototype for 'kunit_debugfs_init' [-Werror=missing-prototypes]
    lib/kunit/debugfs.c:102:6: error: no previous prototype for 'kunit_debugfs_create_suite' [-Werror=missing-prototypes]
    lib/kunit/debugfs.c:118:6: error: no previous prototype for 'kunit_debugfs_destroy_suite' [-Werror=missing-prototypes]

    Link: https://lkml.kernel.org/r/20230517131102.934196-10-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Reviewed-by: David Gow
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • A few panic() related functions have a global definition but not
    declaration, which causes a warning with W=1:

    kernel/panic.c:710:6: error: no previous prototype for '__warn_printk' [-Werror=missing-prototypes]
    kernel/panic.c:756:24: error: no previous prototype for '__stack_chk_fail' [-Werror=missing-prototypes]
    kernel/exit.c:1917:32: error: no previous prototype for 'abort' [-Werror=missing-prototypes]

    __warn_printk() is called both as a global function when CONFIG_BUG
    is enabled, and as a local function in other configs. The other
    two here are called indirectly from generated or assembler code.

    Add prototypes for all of these.

    Link: https://lkml.kernel.org/r/20230517131102.934196-9-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • Building with W=1 shows warnings about two functions that have no
    declaration or caller in certain configurations:

    kernel/panic.c:688:6: error: no previous prototype for 'warn_slowpath_fmt' [-Werror=missing-prototypes]
    kernel/panic.c:710:6: error: no previous prototype for '__warn_printk' [-Werror=missing-prototypes]

    Enclose the definition in the same #ifdef check as the declaration.

    Link: https://lkml.kernel.org/r/20230517131102.934196-8-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • lockevent_read() has a __weak definition and the only caller in
    kernel/locking/lock_events.c, plus a strong definition in qspinlock_stat.h
    that overrides it, but no other declaration. This causes a W=1 warning:

    kernel/locking/lock_events.c:61:16: error: no previous prototype for 'lockevent_read' [-Werror=missing-prototypes]

    Add shared prototype to avoid the warnings.

    Link: https://lkml.kernel.org/r/20230517131102.934196-7-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • The devmem_is_allowed() function is defined in a file of the same name,
    but the declaration is in asm/io.h, which is not included there, causing a
    W=1 warning:

    lib/devmem_is_allowed.c:20:5: error: no previous prototype for 'devmem_is_allowed' [-Werror=missing-prototypes]

    Include the appropriate header to avoid the warning.

    Link: https://lkml.kernel.org/r/20230517131102.934196-6-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • There are two definitions of this function, but the second one lacks the
    'static' annotation:

    mm/sparse.c:704:25: error: no previous prototype for 'populate_section_memmap' [-Werror=missing-prototypes]

    Link: https://lkml.kernel.org/r/20230517131102.934196-4-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • The __kernel_map_pages() function is mainly used for
    CONFIG_DEBUG_PAGEALLOC, but has a number of architecture specific
    definitions that may also be used in other configurations, as well as a
    global fallback definition for architectures that do not support
    DEBUG_PAGEALLOC.

    When the option is disabled, any definitions without the prototype cause a
    warning:

    mm/page_poison.c:102:6: error: no previous prototype for '__kernel_map_pages' [-Werror=missing-prototypes]

    The function is a trivial nop here, so just declare it anyway
    to avoid the warning.

    Link: https://lkml.kernel.org/r/20230517131102.934196-3-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • Patch series "mm/init/kernel: missing-prototypes warnings".

    These are patches addressing -Wmissing-prototypes warnings in common
    kernel code and memory management code files that usually get merged
    through the -mm tree.

    This patch (of 12):

    This function is called whenever CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK or
    CONFIG_HAVE_SETUP_PER_CPU_AREA, but only declared when the former is set:

    mm/percpu.c:3055:12: error: no previous prototype for 'pcpu_embed_first_chunk' [-Werror=missing-prototypes]

    There is no real point in hiding declarations, so just remove
    the #ifdef here.

    Link: https://lkml.kernel.org/r/20230517131102.934196-1-arnd@kernel.org
    Link: https://lkml.kernel.org/r/20230517131102.934196-2-arnd@kernel.org
    Signed-off-by: Arnd Bergmann
    Cc: Boqun Feng
    Cc: Catalin Marinas
    Cc: Christoph Lameter
    Cc: Dennis Zhou
    Cc: Eric Paris
    Cc: Heiko Carstens
    Cc: Helge Deller
    Cc: Ingo Molnar
    Cc: Michael Ellerman
    Cc: Michal Simek
    Cc: Palmer Dabbelt
    Cc: Paul Moore
    Cc: Pavel Machek
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Russell King
    Cc: Tejun Heo
    Cc: Thomas Bogendoerfer
    Cc: Thomas Gleixner
    Cc: Waiman Long
    Cc: Will Deacon
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • Before commit 93e72b3c612adcaca1 ("squashfs: migrate from ll_rw_block
    usage to BIO"), compressed blocks read by squashfs were cached in the page
    cache, but that is not the case after that commit. That has lead to
    squashfs having to re-read a lot of sectors from disk/flash.

    For example, the first sectors of every metadata block need to be read
    twice from the disk. Once partially to read the length, and a second time
    to read the block itself. Also, in linear reads of large files, the last
    sectors of one data block are re-read from disk when reading the next data
    block, since the compressed blocks are of variable sizes and not aligned
    to device blocks. This extra I/O results in a degrade in read performance
    of, for example, ~16% in one scenario on my ARM platform using squashfs
    with dm-verity and NAND.

    Since the decompressed data is cached in the page cache or squashfs'
    internal metadata and fragment caches, caching _all_ compressed pages
    would lead to a lot of double caching and is undesirable. But make the
    code cache any disk blocks which were only partially requested, since
    these are the ones likely to include data which is needed by other file
    system blocks. This restores read performance in my test scenario.

    The compressed block caching is only applied when the disk block size is
    equal to the page size, to avoid having to deal with caching sub-page
    reads.

    [akpm@linux-foundation.org: fs/squashfs/block.c needs linux/pagemap.h]
    [vincent.whitchurch@axis.com: fix page update race]
    Link: https://lkml.kernel.org/r/20230526-squashfs-cache-fixup-v1-1-d54a7fa23e7b@axis.com
    [vincent.whitchurch@axis.com: fix page indices]
    Link: https://lkml.kernel.org/r/20230526-squashfs-cache-fixup-v1-2-d54a7fa23e7b@axis.com
    [akpm@linux-foundation.org: fix layout, per hch]
    Link: https://lkml.kernel.org/r/20230510-squashfs-cache-v4-1-3bd394e1ee71@axis.com
    Signed-off-by: Vincent Whitchurch
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Phillip Lougher
    Signed-off-by: Andrew Morton

    Vincent Whitchurch
     
  • Squashfs has stopped using buffers heads in 93e72b3c612adcaca1
    ("squashfs: migrate from ll_rw_block usage to BIO").

    Link: https://lkml.kernel.org/r/20230517071622.245151-1-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Reviewed-by: Pankaj Raghav
    Reviewed-by: Phillip Lougher
    Signed-off-by: Andrew Morton

    Christoph Hellwig
     
  • Since commit f1c1a9ee00e4 ("fork: Move memcg_charge_kernel_stack()
    into CONFIG_VMAP_STACK"), memcg_charge_kernel_stack() has been moved
    into CONFIG_VMAP_STACK block, so the CONFIG_VMAP_STACK check can be
    removed.

    Furthermore, memcg_charge_kernel_stack() is only invoked by
    alloc_thread_stack_node() instead of dup_task_struct(). If
    memcg_kmem_charge_page() fails, the uncharge process is handled in
    memcg_charge_kernel_stack() itself instead of free_thread_stack(),
    so remove the incorrect comments.

    If memcg_charge_kernel_stack() fails to charge pages used by kernel
    stack, only charged pages need to be uncharged. It's unnecessary to
    uncharge those pages which memory cgroup pointer is NULL.

    [akpm@linux-foundation.org: remove assertion that PAGE_SIZE is a multiple of 1k]
    Link: https://lkml.kernel.org/r/20230508064458.32855-1-haifeng.xu@shopee.com
    Signed-off-by: Haifeng Xu
    Cc: Andy Lutomirski
    Cc: Daniel Bristot de Oliveira
    Cc: Sebastian Andrzej Siewior
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton

    Haifeng Xu
     
  • Add signed intptr_t given that a) it is standard type and b) uintptr_t is
    in tree.

    Link: https://lkml.kernel.org/r/ed66b9e4-1fb7-45be-9bb9-d4bc291c691f@p183
    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Andrew Morton

    Alexey Dobriyan