1. 08 1月, 2022 1 次提交
  2. 23 12月, 2021 1 次提交
  3. 22 12月, 2021 1 次提交
  4. 21 12月, 2021 2 次提交
  5. 16 12月, 2021 1 次提交
  6. 15 12月, 2021 1 次提交
  7. 14 12月, 2021 10 次提交
    • E
      exit/kthread: Move the exit code for kernel threads into struct kthread · 6b124879
      Eric W. Biederman 提交于
      The exit code of kernel threads has different semantics than the
      exit_code of userspace tasks.  To avoid confusion and allow
      the userspace implementation to change as needed move
      the kernel thread exit code into struct kthread.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      6b124879
    • E
      kthread: Ensure struct kthread is present for all kthreads · 40966e31
      Eric W. Biederman 提交于
      Today the rules are a bit iffy and arbitrary about which kernel
      threads have struct kthread present.  Both idle threads and thread
      started with create_kthread want struct kthread present so that is
      effectively all kernel threads.  Make the rule that if PF_KTHREAD
      and the task is running then struct kthread is present.
      
      This will allow the kernel thread code to using tsk->exit_code
      with different semantics from ordinary processes.
      
      To make ensure that struct kthread is present for all
      kernel threads move it's allocation into copy_process.
      
      Add a deallocation of struct kthread in exec for processes
      that were kernel threads.
      
      Move the allocation of struct kthread for the initial thread
      earlier so that it is not repeated for each additional idle
      thread.
      
      Move the initialization of struct kthread into set_kthread_struct
      so that the structure is always and reliably initailized.
      
      Clear set_child_tid in free_kthread_struct to ensure the kthread
      struct is reliably freed during exec.  The function
      free_kthread_struct does not need to clear vfork_done during exec as
      exec_mm_release called from exec_mmap has already cleared vfork_done.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      40966e31
    • E
      exit: Rename complete_and_exit to kthread_complete_and_exit · cead1855
      Eric W. Biederman 提交于
      Update complete_and_exit to call kthread_exit instead of do_exit.
      
      Change the name to reflect this change in functionality.  All of the
      users of complete_and_exit are causing the current kthread to exit so
      this change makes it clear what is happening.
      
      Move the implementation of kthread_complete_and_exit from
      kernel/exit.c to to kernel/kthread.c.  As this function is kthread
      specific it makes most sense to live with the kthread functions.
      
      There are no functional change.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      cead1855
    • E
      exit: Rename module_put_and_exit to module_put_and_kthread_exit · ca3574bd
      Eric W. Biederman 提交于
      Update module_put_and_exit to call kthread_exit instead of do_exit.
      
      Change the name to reflect this change in functionality.  All of the
      users of module_put_and_exit are causing the current kthread to exit
      so this change makes it clear what is happening.  There is no
      functional change.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      ca3574bd
    • E
      exit: Implement kthread_exit · bbda86e9
      Eric W. Biederman 提交于
      The way the per task_struct exit_code is used by kernel threads is not
      quite compatible how it is used by userspace applications.  The low
      byte of the userspace exit_code value encodes the exit signal.  While
      kthreads just use the value as an int holding ordinary kernel function
      exit status like -EPERM.
      
      Add kthread_exit to clearly separate the two kinds of uses.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      bbda86e9
    • E
      exit: Stop exporting do_exit · eb55e716
      Eric W. Biederman 提交于
      Now that there are no more modular uses of do_exit remove the EXPORT_SYMBOL.
      Suggested-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      eb55e716
    • E
      exit: Stop poorly open coding do_task_dead in make_task_dead · 7f80a2fd
      Eric W. Biederman 提交于
      When the kernel detects it is oops or otherwise force killing a task
      while it exits the code poorly attempts to permanently stop the task
      from scheduling.
      
      I say poorly because it is possible for a task in TASK_UINTERRUPTIBLE
      to be woken up.
      
      As it makes no sense for the task to continue call do_task_dead
      instead which actually does the work and permanently removes the task
      from the scheduler.  Guaranteeing the task will never be woken
      up again.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      7f80a2fd
    • E
      exit: Move oops specific logic from do_exit into make_task_dead · 05ea0424
      Eric W. Biederman 提交于
      The beginning of do_exit has become cluttered and difficult to read as
      it is filled with checks to handle things that can only happen when
      the kernel is operating improperly.
      
      Now that we have a dedicated function for cleaning up a task when the
      kernel is operating improperly move the checks there.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      05ea0424
    • E
      exit: Add and use make_task_dead. · 0e25498f
      Eric W. Biederman 提交于
      There are two big uses of do_exit.  The first is it's design use to be
      the guts of the exit(2) system call.  The second use is to terminate
      a task after something catastrophic has happened like a NULL pointer
      in kernel code.
      
      Add a function make_task_dead that is initialy exactly the same as
      do_exit to cover the cases where do_exit is called to handle
      catastrophic failure.  In time this can probably be reduced to just a
      light wrapper around do_task_dead. For now keep it exactly the same so
      that there will be no behavioral differences introducing this new
      concept.
      
      Replace all of the uses of do_exit that use it for catastraphic
      task cleanup with make_task_dead to make it clear what the code
      is doing.
      
      As part of this rename rewind_stack_do_exit
      rewind_stack_and_make_dead.
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      0e25498f
    • E
      exit/s390: Remove dead reference to do_exit from copy_thread · 5e354747
      Eric W. Biederman 提交于
      My s390 assembly is not particularly good so I have read the history
      of the reference to do_exit copy_thread and have been able to
      verify that do_exit is not used.
      
      The general argument is that s390 has been changed to use the generic
      kernel_thread and kernel_execve and the generic versions do not call
      do_exit.  So it is strange to see a do_exit reference sitting there.
      
      The history of the do_exit reference in s390's version of copy_thread
      seems conclusive that the do_exit reference is something that lingers
      and should have been removed several years ago.
      
      Up through 8d19f15a60be ("[PATCH] s390 update (1/27): arch.")  the
      s390 code made a call to the exit(2) system call when a kernel thread
      finished.  Then kernel_thread_starter was added which branched
      directly to the value in register 11 when the kernel thread finshed.
      The value in register 11 was set in kernel_thread to
      "regs.gprs[11] = (unsigned long) do_exit"
      
      In commit 37fe5d41 ("s390: fold kernel_thread_helper() into
      ret_from_fork()") kernel_thread_starter was moved into entry.S and
      entry64.S unchanged (except for the syntax differences between inline
      assemly and in the assembly file).
      
      In commit f9a7e025 ("s390: switch to generic kernel_thread()") the
      assignment to "gprs[11]" was moved into copy_thread from the old
      kernel_thread.  The helper kernel_thread_starter was still being used
      and was still branching to "%r11" at the end.
      
      In commit 30dcb099 ("s390: switch to saner kernel_execve()
      semantics") kernel_thread_starter was changed to unconditionally
      branch to sysc_tracenogo instead to %r11 which held the value of
      do_exit.  Unfortunately copy_thread was not updated to stop passing
      do_exit in "gprs[11]".
      
      In commit 56e62a73 ("s390: convert to generic entry")
      kernel_thread_starter was replaced by __ret_from_fork.  And the code
      still continued to pass do_exit in "gprs[11]" despite __ret_from_fork
      not caring in the slightest.
      
      Remove this dead reference to do_exit to make it clear that s390 is
      not doing anything with do_exit in copy_thread.
      
      Cc: Heiko Carstens <hca@linux.ibm.com>
      Cc: Vasily Gorbik <gor@linux.ibm.com>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: Alexander Gordeev <agordeev@linux.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Fixes: 30dcb099 ("s390: switch to saner kernel_execve() semantics")
      History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.gitAcked-by: NHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      5e354747
  8. 04 12月, 2021 1 次提交
    • E
      Merge SA_IMMUTABLE-fixes-for-v5.16-rc2 · 9d3f401c
      Eric W. Biederman 提交于
      I completed the first batch of signal changes for v5.17 against
      v5.16-rc1 before the SA_IMMUTABLE fixes where completed.  Which leaves
      me with two lines of development that I want on my signal development
      branch both rooted at v5.16-rc1.  Especially as I am hoping
      to reach the point of being able to remove SA_IMMUTABLE.
      
      Linus merged my SA_IMUTABLE fixes as:
      7af959b5 ("Merge branch 'SA_IMMUTABLE-fixes-for-v5.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace")
      
      To avoid rebasing the development changes that are currently complete I am
      merging the work I sent upstream to Linus to make my life simpler.
      
      The SA_IMMUTABLE changes as they are described in Linus's merge commit.
      
      Pull exit-vs-signal handling fixes from Eric Biederman:
       "This is a small set of changes where debuggers were no longer able to
        intercept synchronous SIGTRAP and SIGSEGV, introduced by the exit
        cleanups.
      
        This is essentially the change you suggested with all of i's dotted
        and the t's crossed so that ptrace can intercept all of the cases it
        has been able to intercept the past, and all of the cases that made it
        to exit without giving ptrace a chance still don't give ptrace a
        chance"
      
      * 'SA_IMMUTABLE-fixes-for-v5.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace:
        signal: Replace force_fatal_sig with force_exit_sig when in doubt
        signal: Don't always set SA_IMMUTABLE for forced signals
      Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      9d3f401c
  9. 19 11月, 2021 2 次提交
  10. 18 11月, 2021 4 次提交
    • E
      signal: requeuing undeliverable signals · 5ae9497d
      Eric W. Biederman 提交于
      Kyle Huey recently reported[1] that rr gets confused if SIGKILL prevents
      ptrace_signal from delivering a signal, as the kernel setups up a signal
      frame for a signal that rr did not have a chance to observe with ptrace.
      
      In looking into it I found a couple of bugs and a quality of
      implementation issue.
      
      - The test for signal_group_exit should be inside the for loop in get_signal.
      - Signals should be requeued on the same queue they were dequeued from.
      - When a fatal signal is pending ptrace_signal should not return another
        signal for delivery.
      
      Kyle Huey has verified[2] an earlier version of this change.
      
      I have reworked things one more time to completely fix the issues
      raised, and to keep the code maintainable long term.
      
      I have smoke tested this code and combined with a careful review I
      expect this code to work fine.  Kyle if you can double check that
      my last round of changes still works for rr I would appreciate it.
      
      Eric W. Biederman (3):
            signal: In get_signal test for signal_group_exit every time through the loop
            signal: Requeue signals in the appropriate queue
            signal: Requeue ptrace signals
      
       fs/signalfd.c                |  5 +++--
       include/linux/sched/signal.h |  7 ++++---
       kernel/signal.c              | 44 ++++++++++++++++++++++++++------------------
       3 files changed, 33 insertions(+), 23 deletions(-)
      
      [1] https://lkml.kernel.org/r/20211101034147.6203-1-khuey@kylehuey.com
      [2] https://lkml.kernel.org/r/CAP045ApAX725ZfujaK-jJNkfCo5s+oVFpBvNfPJk+DKY8K7d=Q@mail.gmail.comTested-by: NKyle Huey <khuey@kylehuey.com>
      Link: https://lkml.kernel.org/r/87bl2kekig.fsf_-_@email.froward.int.ebiederm.orgSigned-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      5ae9497d
    • E
      signal: Requeue ptrace signals · b171f667
      Eric W. Biederman 提交于
      Kyle Huey <me@kylehuey.com> writes:
      
      > rr, a userspace record and replay debugger[0], uses the recorded register
      > state at PTRACE_EVENT_EXIT to find the point in time at which to cease
      > executing the program during replay.
      >
      > If a SIGKILL races with processing another signal in get_signal, it is
      > possible for the kernel to decline to notify the tracer of the original
      > signal. But if the original signal had a handler, the kernel proceeds
      > with setting up a signal handler frame as if the tracer had chosen to
      > deliver the signal unmodified to the tracee. When the kernel goes to
      > execute the signal handler that it has now modified the stack and registers
      > for, it will discover the pending SIGKILL, and terminate the tracee
      > without executing the handler. When PTRACE_EVENT_EXIT is delivered to
      > the tracer, however, the effects of handler setup will be visible to
      > the tracer.
      >
      > Because rr (the tracer) was never notified of the signal, it is not aware
      > that a signal handler frame was set up and expects the state of the program
      > at PTRACE_EVENT_EXIT to be a state that will be reconstructed naturally
      > by allowing the program to execute from the last event. When that fails
      > to happen during replay, rr will assert and die.
      >
      > The following patches add an explicit check for a newly pending SIGKILL
      > after the ptracer has been notified and the siglock has been reacquired.
      > If this happens, we stop processing the current signal and proceed
      > immediately to handling the SIGKILL. This makes the state reported at
      > PTRACE_EVENT_EXIT the unmodified state of the program, and also avoids the
      > work to set up a signal handler frame that will never be used.
      >
      > [0] https://rr-project.org/
      
      The problem is that while the traced process makes it into ptrace_stop,
      the tracee is killed before the tracer manages to wait for the
      tracee and discover which signal was about to be delivered.
      
      More generally the problem is that while siglock was dropped a signal
      with process wide effect is short cirucit delivered to the entire
      process killing it, but the process continues to try and deliver another
      signal.
      
      In general it impossible to avoid all cases where work is performed
      after the process has been killed.  In particular if the process is
      killed after get_signal returns the code will simply not know it has
      been killed until after delivering the signal frame to userspace.
      
      On the other hand when the code has already discovered the process
      has been killed and taken user space visible action that shows
      the kernel knows the process has been killed, it is just silly
      to then write the signal frame to the user space stack.
      
      Instead of being silly detect the process has been killed
      in ptrace_signal and requeue the signal so the code can pretend
      it was simply never dequeued for delivery.
      
      To test the process has been killed I use fatal_signal_pending rather
      than signal_group_exit to match the test in signal_pending_state which
      is used in schedule which is where ptrace_stop detects the process has
      been killed.
      
      Requeuing the signal so the code can pretend it was simply never
      dequeued improves the user space visible behavior that has been
      present since ebf5ebe31d2c ("[PATCH] signal-fixes-2.5.59-A4").
      
      Kyle Huey verified that this change in behavior and makes rr happy.
      Reported-by: NKyle Huey <khuey@kylehuey.com>
      Reported-by: NMarko Mäkelä <marko.makela@mariadb.com>
      History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.giReviewed-by: NKees Cook <keescook@chromium.org>
      Link: https://lkml.kernel.org/r/87tugcd5p2.fsf_-_@email.froward.int.ebiederm.orgSigned-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      b171f667
    • E
      signal: Requeue signals in the appropriate queue · 5768d890
      Eric W. Biederman 提交于
      In the event that a tracer changes which signal needs to be delivered
      and that signal is currently blocked then the signal needs to be
      requeued for later delivery.
      
      With the advent of CLONE_THREAD the kernel has 2 signal queues per
      task.  The per process queue and the per task queue.  Update the code
      so that if the signal is removed from the per process queue it is
      requeued on the per process queue.  This is necessary to make it
      appear the signal was never dequeued.
      
      The rr debugger reasonably believes that the state of the process from
      the last ptrace_stop it observed until PTRACE_EVENT_EXIT can be recreated
      by simply letting a process run.  If a SIGKILL interrupts a ptrace_stop
      this is not true today.
      
      So return signals to their original queue in ptrace_signal so that
      signals that are not delivered appear like they were never dequeued.
      
      Fixes: 794aa320b79d ("[PATCH] sigfix-2.5.40-D6")
      History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.giReviewed-by: NKees Cook <keescook@chromium.org>
      Link: https://lkml.kernel.org/r/87zgq4d5r4.fsf_-_@email.froward.int.ebiederm.orgSigned-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      5768d890
    • E
      signal: In get_signal test for signal_group_exit every time through the loop · e7f7c99b
      Eric W. Biederman 提交于
      Recently while investigating a problem with rr and signals I noticed
      that siglock is dropped in ptrace_signal and get_signal does not jump
      to relock.
      
      Looking farther to see if the problem is anywhere else I see that
      do_signal_stop also returns if signal_group_exit is true.  I believe
      that test can now never be true, but it is a bit hard to trace
      through and be certain.
      
      Testing signal_group_exit is not expensive, so move the test for
      signal_group_exit into the for loop inside of get_signal to ensure
      the test is never skipped improperly.
      
      This has been a potential problem since I added the test for
      signal_group_exit was added.
      
      Fixes: 35634ffa ("signal: Always notice exiting tasks")
      Reviewed-by: NKees Cook <keescook@chromium.org>
      Link: https://lkml.kernel.org/r/875yssekcd.fsf_-_@email.froward.int.ebiederm.orgSigned-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
      e7f7c99b
  11. 15 11月, 2021 14 次提交
    • L
      Linux 5.16-rc1 · fa55b7dc
      Linus Torvalds 提交于
      fa55b7dc
    • G
      kconfig: Add support for -Wimplicit-fallthrough · dee2b702
      Gustavo A. R. Silva 提交于
      Add Kconfig support for -Wimplicit-fallthrough for both GCC and Clang.
      
      The compiler option is under configuration CC_IMPLICIT_FALLTHROUGH,
      which is enabled by default.
      
      Special thanks to Nathan Chancellor who fixed the Clang bug[1][2]. This
      bugfix only appears in Clang 14.0.0, so older versions still contain
      the bug and -Wimplicit-fallthrough won't be enabled for them, for now.
      
      This concludes a long journey and now we are finally getting rid
      of the unintentional fallthrough bug-class in the kernel, entirely. :)
      
      Link: https://github.com/llvm/llvm-project/commit/9ed4a94d6451046a51ef393cd62f00710820a7e8 [1]
      Link: https://bugs.llvm.org/show_bug.cgi?id=51094 [2]
      Link: https://github.com/KSPP/linux/issues/115
      Link: https://github.com/ClangBuiltLinux/linux/issues/236Co-developed-by: NKees Cook <keescook@chromium.org>
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Co-developed-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: NGustavo A. R. Silva <gustavoars@kernel.org>
      Reviewed-by: NNathan Chancellor <nathan@kernel.org>
      Tested-by: NNathan Chancellor <nathan@kernel.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      dee2b702
    • L
      Merge tag 'xfs-5.16-merge-5' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux · ce49bfc8
      Linus Torvalds 提交于
      Pull xfs cleanups from Darrick Wong:
       "The most 'exciting' aspect of this branch is that the xfsprogs
        maintainer and I have worked through the last of the code
        discrepancies between kernel and userspace libxfs such that there are
        no code differences between the two except for #includes.
      
        IOWs, diff suffices to demonstrate that the userspace tools behave the
        same as the kernel, and kernel-only bits are clearly marked in the
        /kernel/ source code instead of just the userspace source.
      
        Summary:
      
         - Clean up open-coded swap() calls.
      
         - A little bit of #ifdef golf to complete the reunification of the
           kernel and userspace libxfs source code"
      
      * tag 'xfs-5.16-merge-5' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
        xfs: sync xfs_btree_split macros with userspace libxfs
        xfs: #ifdef out perag code for userspace
        xfs: use swap() to make dabtree code cleaner
      ce49bfc8
    • L
      Merge tag 'for-5.16/parisc-3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux · c3b68c27
      Linus Torvalds 提交于
      Pull more parisc fixes from Helge Deller:
       "Fix a build error in stracktrace.c, fix resolving of addresses to
        function names in backtraces, fix single-stepping in assembly code and
        flush userspace pte's when using set_pte_at()"
      
      * tag 'for-5.16/parisc-3' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
        parisc/entry: fix trace test in syscall exit path
        parisc: Flush kernel data mapping in set_pte_at() when installing pte for user page
        parisc: Fix implicit declaration of function '__kernel_text_address'
        parisc: Fix backtrace to always include init funtion names
      c3b68c27
    • L
      Merge tag 'sh-for-5.16' of git://git.libc.org/linux-sh · 24318ae8
      Linus Torvalds 提交于
      Pull arch/sh updates from Rich Felker.
      
      * tag 'sh-for-5.16' of git://git.libc.org/linux-sh:
        sh: pgtable-3level: Fix cast to pointer from integer of different size
        sh: fix READ/WRITE redefinition warnings
        sh: define __BIG_ENDIAN for math-emu
        sh: math-emu: drop unused functions
        sh: fix kconfig unmet dependency warning for FRAME_POINTER
        sh: Cleanup about SPARSE_IRQ
        sh: kdump: add some attribute to function
        maple: fix wrong return value of maple_bus_init().
        sh: boot: avoid unneeded rebuilds under arch/sh/boot/compressed/
        sh: boot: add intermediate vmlinux.bin* to targets instead of extra-y
        sh: boards: Fix the cacography in irq.c
        sh: check return code of request_irq
        sh: fix trivial misannotations
      24318ae8
    • L
      Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm · 6ea45c57
      Linus Torvalds 提交于
      Pull ARM fixes from Russell King:
      
       - Fix early_iounmap
      
       - Drop cc-option fallbacks for architecture selection
      
      * tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm:
        ARM: 9156/1: drop cc-option fallbacks for architecture selection
        ARM: 9155/1: fix early early_iounmap()
      6ea45c57
    • L
      Merge tag 'devicetree-fixes-for-5.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux · 0d1503d8
      Linus Torvalds 提交于
      Pull devicetree fixes from Rob Herring:
      
       - Two fixes due to DT node name changes on Arm, Ltd. boards
      
       - Treewide rename of Ingenic CGU headers
      
       - Update ST email addresses
      
       - Remove Netlogic DT bindings
      
       - Dropping few more cases of redundant 'maxItems' in schemas
      
       - Convert toshiba,tc358767 bridge binding to schema
      
      * tag 'devicetree-fixes-for-5.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
        dt-bindings: watchdog: sunxi: fix error in schema
        bindings: media: venus: Drop redundant maxItems for power-domain-names
        dt-bindings: Remove Netlogic bindings
        clk: versatile: clk-icst: Ensure clock names are unique
        of: Support using 'mask' in making device bus id
        dt-bindings: treewide: Update @st.com email address to @foss.st.com
        dt-bindings: media: Update maintainers for st,stm32-hwspinlock.yaml
        dt-bindings: media: Update maintainers for st,stm32-cec.yaml
        dt-bindings: mfd: timers: Update maintainers for st,stm32-timers
        dt-bindings: timer: Update maintainers for st,stm32-timer
        dt-bindings: i2c: imx: hardware do not restrict clock-frequency to only 100 and 400 kHz
        dt-bindings: display: bridge: Convert toshiba,tc358767.txt to yaml
        dt-bindings: Rename Ingenic CGU headers to ingenic,*.h
      0d1503d8
    • L
      Merge tag 'timers-urgent-2021-11-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 622c72b6
      Linus Torvalds 提交于
      Pull timer fix from Thomas Gleixner:
       "A single fix for POSIX CPU timers to address a problem where POSIX CPU
        timer delivery stops working for a new child task because
        copy_process() copies state information which is only valid for the
        parent task"
      
      * tag 'timers-urgent-2021-11-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        posix-cpu-timers: Clear task::posix_cputimers_work in copy_process()
      622c72b6
    • L
      Merge tag 'irq-urgent-2021-11-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · c36e33e2
      Linus Torvalds 提交于
      Pull irq fixes from Thomas Gleixner:
       "A set of fixes for the interrupt subsystem
      
        Core code:
      
         - A regression fix for the Open Firmware interrupt mapping code where
           a interrupt controller property in a node caused a map property in
           the same node to be ignored.
      
        Interrupt chip drivers:
      
         - Workaround a limitation in SiFive PLIC interrupt chip which
           silently ignores an EOI when the interrupt line is masked.
      
         - Provide the missing mask/unmask implementation for the CSKY MP
           interrupt controller.
      
        PCI/MSI:
      
         - Prevent a use after free when PCI/MSI interrupts are released by
           destroying the sysfs entries before freeing the memory which is
           accessed in the sysfs show() function.
      
         - Implement a mask quirk for the Nvidia ION AHCI chip which does not
           advertise masking capability despite implementing it. Even worse
           the chip comes out of reset with all MSI entries masked, which due
           to the missing masking capability never get unmasked.
      
         - Move the check which prevents accessing the MSI[X] masking for XEN
           back into the low level accessors. The recent consolidation missed
           that these accessors can be invoked from places which do not have
           that check which broke XEN. Move them back to he original place
           instead of sprinkling tons of these checks all over the code"
      
      * tag 'irq-urgent-2021-11-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        of/irq: Don't ignore interrupt-controller when interrupt-map failed
        irqchip/sifive-plic: Fixup EOI failed when masked
        irqchip/csky-mpintc: Fixup mask/unmask implementation
        PCI/MSI: Destroy sysfs before freeing entries
        PCI: Add MSI masking quirk for Nvidia ION AHCI
        PCI/MSI: Deal with devices lying about their MSI mask capability
        PCI/MSI: Move non-mask check back into low level accessors
      c36e33e2
    • L
      Merge tag 'locking-urgent-2021-11-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 218cc8b8
      Linus Torvalds 提交于
      Pull x86 static call update from Thomas Gleixner:
       "A single fix for static calls to make the trampoline patching more
        robust by placing explicit signature bytes after the call trampoline
        to prevent patching random other jumps like the CFI jump table
        entries"
      
      * tag 'locking-urgent-2021-11-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        static_call,x86: Robustify trampoline patching
      218cc8b8
    • L
      Merge tag 'sched_urgent_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · fc661f2d
      Linus Torvalds 提交于
      Pull scheduler fixes from Borislav Petkov:
      
       - Avoid touching ~100 config files in order to be able to select the
         preemption model
      
       - clear cluster CPU masks too, on the CPU unplug path
      
       - prevent use-after-free in cfs
      
       - Prevent a race condition when updating CPU cache domains
      
       - Factor out common shared part of smp_prepare_cpus() into a common
         helper which can be called by both baremetal and Xen, in order to fix
         a booting of Xen PV guests
      
      * tag 'sched_urgent_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        preempt: Restore preemption model selection configs
        arch_topology: Fix missing clear cluster_cpumask in remove_cpu_topology()
        sched/fair: Prevent dead task groups from regaining cfs_rq's
        sched/core: Mitigate race cpus_share_cache()/update_top_cache_domain()
        x86/smp: Factor out parts of native_smp_prepare_cpus()
      fc661f2d
    • L
      Merge tag 'perf_urgent_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · f7018be2
      Linus Torvalds 提交于
      Pull perf fixes from Borislav Petkov:
      
       - Prevent unintentional page sharing by checking whether a page
         reference to a PMU samples page has been acquired properly before
         that
      
       - Make sure the LBR_SELECT MSR is saved/restored too
      
       - Reset the LBR_SELECT MSR when resetting the LBR PMU to clear any
         residual data left
      
      * tag 'perf_urgent_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        perf/core: Avoid put_page() when GUP fails
        perf/x86/vlbr: Add c->flags to vlbr event constraints
        perf/x86/lbr: Reset LBR_SELECT during vlbr reset
      f7018be2
    • L
      Merge tag 'x86_urgent_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 1654e95e
      Linus Torvalds 提交于
      Pull x86 fixes from Borislav Petkov:
      
       - Add the model number of a new, Raptor Lake CPU, to intel-family.h
      
       - Do not log spurious corrected MCEs on SKL too, due to an erratum
      
       - Clarify the path of paravirt ops patches upstream
      
       - Add an optimization to avoid writing out AMX components to sigframes
         when former are in init state
      
      * tag 'x86_urgent_for_v5.16_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/cpu: Add Raptor Lake to Intel family
        x86/mce: Add errata workaround for Skylake SKX37
        MAINTAINERS: Add some information to PARAVIRT_OPS entry
        x86/fpu: Optimize out sigframe xfeatures when in init state
      1654e95e
    • L
      Merge tag 'perf-tools-for-v5.16-2021-11-13' of... · 35c8fad4
      Linus Torvalds 提交于
      Merge tag 'perf-tools-for-v5.16-2021-11-13' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull more perf tools updates from Arnaldo Carvalho de Melo:
       "Hardware tracing:
      
         - ARM:
            * Print the size of the buffer size consistently in hexadecimal in
              ARM Coresight.
            * Add Coresight snapshot mode support.
            * Update --switch-events docs in 'perf record'.
            * Support hardware-based PID tracing.
            * Track task context switch for cpu-mode events.
      
         - Vendor events:
            * Add metric events JSON file for power10 platform
      
        perf test:
      
         - Get 'perf test' unit tests closer to kunit.
      
         - Topology tests improvements.
      
         - Remove bashisms from some tests.
      
        perf bench:
      
         - Fix memory leak of perf_cpu_map__new() in the futex benchmarks.
      
        libbpf:
      
         - Add some more weak libbpf functions o allow building with the
           libbpf versions, old ones, present in distros.
      
        libbeauty:
      
         - Translate [gs]setsockopt 'level' argument integer values to
           strings.
      
        tools headers UAPI:
      
         - Sync futex_waitv, arch prctl, sound, i195_drm and msr-index files
           with the kernel sources.
      
        Documentation:
      
         - Add documentation to 'struct symbol'.
      
         - Synchronize the definition of enum perf_hw_id with code in
           tools/perf/design.txt"
      
      * tag 'perf-tools-for-v5.16-2021-11-13' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux: (67 commits)
        perf tests: Remove bash constructs from stat_all_pmu.sh
        perf tests: Remove bash construct from record+zstd_comp_decomp.sh
        perf test: Remove bash construct from stat_bpf_counters.sh test
        perf bench futex: Fix memory leak of perf_cpu_map__new()
        tools arch x86: Sync the msr-index.h copy with the kernel sources
        tools headers UAPI: Sync drm/i915_drm.h with the kernel sources
        tools headers UAPI: Sync sound/asound.h with the kernel sources
        tools headers UAPI: Sync linux/prctl.h with the kernel sources
        tools headers UAPI: Sync arch prctl headers with the kernel sources
        perf tools: Add more weak libbpf functions
        perf bpf: Avoid memory leak from perf_env__insert_btf()
        perf symbols: Factor out annotation init/exit
        perf symbols: Bit pack to save a byte
        perf symbols: Add documentation to 'struct symbol'
        tools headers UAPI: Sync files changed by new futex_waitv syscall
        perf test bpf: Use ARRAY_CHECK() instead of ad-hoc equivalent, addressing array_size.cocci warning
        perf arm-spe: Support hardware-based PID tracing
        perf arm-spe: Save context ID in record
        perf arm-spe: Update --switch-events docs in 'perf record'
        perf arm-spe: Track task context switch for cpu-mode events
        ...
      35c8fad4
  12. 14 11月, 2021 2 次提交
    • T
      Merge tag 'irqchip-fixes-5.16-1' of... · 979292af
      Thomas Gleixner 提交于
      Merge tag 'irqchip-fixes-5.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into irq/urgent
      
      Pull irqchip fixes from Marc Zyngier:
      
        - Address an issue with the SiFive PLIC being unable to EOI
          a masked interrupt
      
        - Move the disable/enable methods in the CSky mpintc to
          mask/unmask
      
        - Fix a regression in the OF irq code where an interrupt-controller
          property in the same node as an interrupt-map property would get
          ignored
      
      Link: https://lore.kernel.org/all/20211112173459.4015233-1-maz@kernel.org
      979292af
    • L
      Merge tag 'zstd-for-linus-v5.16' of git://github.com/terrelln/linux · c8c10954
      Linus Torvalds 提交于
      Pull zstd update from Nick Terrell:
       "Update to zstd-1.4.10.
      
        Add myself as the maintainer of zstd and update the zstd version in
        the kernel, which is now 4 years out of date, to a much more recent
        zstd release. This includes bug fixes, much more extensive fuzzing,
        and performance improvements. And generates the kernel zstd
        automatically from upstream zstd, so it is easier to keep the zstd
        verison up to date, and we don't fall so far out of date again.
      
        This includes 5 commits that update the zstd library version:
      
         - Adds a new kernel-style wrapper around zstd.
      
           This wrapper API is functionally equivalent to the subset of the
           current zstd API that is currently used. The wrapper API changes to
           be kernel style so that the symbols don't collide with zstd's
           symbols. The update to zstd-1.4.10 maintains the same API and
           preserves the semantics, so that none of the callers need to be
           updated. All callers are updated in the commit, because there are
           zero functional changes.
      
         - Adds an indirection for `lib/decompress_unzstd.c` so it doesn't
           depend on the layout of `lib/zstd/` to include every source file.
           This allows the next patch to be automatically generated.
      
         - Imports the zstd-1.4.10 source code. This commit is automatically
           generated from upstream zstd (https://github.com/facebook/zstd).
      
         - Adds me (terrelln@fb.com) as the maintainer of `lib/zstd`.
      
         - Fixes a newly added build warning for clang.
      
        The discussion around this patchset has been pretty long, so I've
        included a FAQ-style summary of the history of the patchset, and why
        we are taking this approach.
      
        Why do we need to update?
        -------------------------
      
        The zstd version in the kernel is based off of zstd-1.3.1, which is
        was released August 20, 2017. Since then zstd has seen many bug fixes
        and performance improvements. And, importantly, upstream zstd is
        continuously fuzzed by OSS-Fuzz, and bug fixes aren't backported to
        older versions. So the only way to sanely get these fixes is to keep
        up to date with upstream zstd.
      
        There are no known security issues that affect the kernel, but we need
        to be able to update in case there are. And while there are no known
        security issues, there are relevant bug fixes. For example the problem
        with large kernel decompression has been fixed upstream for over 2
        years [1]
      
        Additionally the performance improvements for kernel use cases are
        significant. Measured for x86_64 on my Intel i9-9900k @ 3.6 GHz:
      
         - BtrFS zstd compression at levels 1 and 3 is 5% faster
      
         - BtrFS zstd decompression+read is 15% faster
      
         - SquashFS zstd decompression+read is 15% faster
      
         - F2FS zstd compression+write at level 3 is 8% faster
      
         - F2FS zstd decompression+read is 20% faster
      
         - ZRAM decompression+read is 30% faster
      
         - Kernel zstd decompression is 35% faster
      
         - Initramfs zstd decompression+build is 5% faster
      
        On top of this, there are significant performance improvements coming
        down the line in the next zstd release, and the new automated update
        patch generation will allow us to pull them easily.
      
        How is the update patch generated?
        ----------------------------------
      
        The first two patches are preparation for updating the zstd version.
        Then the 3rd patch in the series imports upstream zstd into the
        kernel. This patch is automatically generated from upstream. A script
        makes the necessary changes and imports it into the kernel. The
        changes are:
      
         - Replace all libc dependencies with kernel replacements and rewrite
           includes.
      
         - Remove unncessary portability macros like: #if defined(_MSC_VER).
      
         - Use the kernel xxhash instead of bundling it.
      
        This automation gets tested every commit by upstream's continuous
        integration. When we cut a new zstd release, we will submit a patch to
        the kernel to update the zstd version in the kernel.
      
        The automated process makes it easy to keep the kernel version of zstd
        up to date. The current zstd in the kernel shares the guts of the
        code, but has a lot of API and minor changes to work in the kernel.
        This is because at the time upstream zstd was not ready to be used in
        the kernel envrionment as-is. But, since then upstream zstd has
        evolved to support being used in the kernel as-is.
      
        Why are we updating in one big patch?
        -------------------------------------
      
        The 3rd patch in the series is very large. This is because it is
        restructuring the code, so it both deletes the existing zstd, and
        re-adds the new structure. Future updates will be directly
        proportional to the changes in upstream zstd since the last import.
        They will admittidly be large, as zstd is an actively developed
        project, and has hundreds of commits between every release. However,
        there is no other great alternative.
      
        One option ruled out is to replay every upstream zstd commit. This is
        not feasible for several reasons:
      
         - There are over 3500 upstream commits since the zstd version in the
           kernel.
      
         - The automation to automatically generate the kernel update was only
           added recently, so older commits cannot easily be imported.
      
         - Not every upstream zstd commit builds.
      
         - Only zstd releases are "supported", and individual commits may have
           bugs that were fixed before a release.
      
        Another option to reduce the patch size would be to first reorganize
        to the new file structure, and then apply the patch. However, the
        current kernel zstd is formatted with clang-format to be more
        "kernel-like". But, the new method imports zstd as-is, without
        additional formatting, to allow for closer correlation with upstream,
        and easier debugging. So the patch wouldn't be any smaller.
      
        It also doesn't make sense to import upstream zstd commit by commit
        going forward. Upstream zstd doesn't support production use cases
        running of the development branch. We have a lot of post-commit
        fuzzing that catches many bugs, so indiviudal commits may be buggy,
        but fixed before a release. So going forward, I intend to import every
        (important) zstd release into the Kernel.
      
        So, while it isn't ideal, updating in one big patch is the only patch
        I see forward.
      
        Who is responsible for this code?
        ---------------------------------
      
        I am. This patchset adds me as the maintainer for zstd. Previously,
        there was no tree for zstd patches. Because of that, there were
        several patches that either got ignored, or took a long time to merge,
        since it wasn't clear which tree should pick them up. I'm officially
        stepping up as maintainer, and setting up my tree as the path through
        which zstd patches get merged. I'll make sure that patches to the
        kernel zstd get ported upstream, so they aren't erased when the next
        version update happens.
      
        How is this code tested?
        ------------------------
      
        I tested every caller of zstd on x86_64 (BtrFS, ZRAM, SquashFS, F2FS,
        Kernel, InitRAMFS). I also tested Kernel & InitRAMFS on i386 and
        aarch64. I checked both performance and correctness.
      
        Also, thanks to many people in the community who have tested these
        patches locally.
      
        Lastly, this code will bake in linux-next before being merged into
        v5.16.
      
        Why update to zstd-1.4.10 when zstd-1.5.0 has been released?
        ------------------------------------------------------------
      
        This patchset has been outstanding since 2020, and zstd-1.4.10 was the
        latest release when it was created. Since the update patch is
        automatically generated from upstream, I could generate it from
        zstd-1.5.0.
      
        However, there were some large stack usage regressions in zstd-1.5.0,
        and are only fixed in the latest development branch. And the latest
        development branch contains some new code that needs to bake in the
        fuzzer before I would feel comfortable releasing to the kernel.
      
        Once this patchset has been merged, and we've released zstd-1.5.1, we
        can update the kernel to zstd-1.5.1, and exercise the update process.
      
        You may notice that zstd-1.4.10 doesn't exist upstream. This release
        is an artifical release based off of zstd-1.4.9, with some fixes for
        the kernel backported from the development branch. I will tag the
        zstd-1.4.10 release after this patchset is merged, so the Linux Kernel
        is running a known version of zstd that can be debugged upstream.
      
        Why was a wrapper API added?
        ----------------------------
      
        The first versions of this patchset migrated the kernel to the
        upstream zstd API. It first added a shim API that supported the new
        upstream API with the old code, then updated callers to use the new
        shim API, then transitioned to the new code and deleted the shim API.
        However, Cristoph Hellwig suggested that we transition to a kernel
        style API, and hide zstd's upstream API behind that. This is because
        zstd's upstream API is supports many other use cases, and does not
        follow the kernel style guide, while the kernel API is focused on the
        kernel's use cases, and follows the kernel style guide.
      
        Where is the previous discussion?
        ---------------------------------
      
        Links for the discussions of the previous versions of the patch set
        below. The largest changes in the design of the patchset are driven by
        the discussions in v11, v5, and v1. Sorry for the mix of links, I
        couldn't find most of the the threads on lkml.org"
      
      Link: https://lkml.org/lkml/2020/9/29/27 [1]
      Link: https://www.spinics.net/lists/linux-crypto/msg58189.html [v12]
      Link: https://lore.kernel.org/linux-btrfs/20210430013157.747152-1-nickrterrell@gmail.com/ [v11]
      Link: https://lore.kernel.org/lkml/20210426234621.870684-2-nickrterrell@gmail.com/ [v10]
      Link: https://lore.kernel.org/linux-btrfs/20210330225112.496213-1-nickrterrell@gmail.com/ [v9]
      Link: https://lore.kernel.org/linux-f2fs-devel/20210326191859.1542272-1-nickrterrell@gmail.com/ [v8]
      Link: https://lkml.org/lkml/2020/12/3/1195 [v7]
      Link: https://lkml.org/lkml/2020/12/2/1245 [v6]
      Link: https://lore.kernel.org/linux-btrfs/20200916034307.2092020-1-nickrterrell@gmail.com/ [v5]
      Link: https://www.spinics.net/lists/linux-btrfs/msg105783.html [v4]
      Link: https://lkml.org/lkml/2020/9/23/1074 [v3]
      Link: https://www.spinics.net/lists/linux-btrfs/msg105505.html [v2]
      Link: https://lore.kernel.org/linux-btrfs/20200916034307.2092020-1-nickrterrell@gmail.com/ [v1]
      Signed-off-by: NNick Terrell <terrelln@fb.com>
      Tested By: Paul Jones <paul@pauljones.id.au>
      Tested-by: NOleksandr Natalenko <oleksandr@natalenko.name>
      Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang v13.0.0 on x86-64
      Tested-by: NJean-Denis Girard <jd.girard@sysnux.pf>
      
      * tag 'zstd-for-linus-v5.16' of git://github.com/terrelln/linux:
        lib: zstd: Add cast to silence clang's -Wbitwise-instead-of-logical
        MAINTAINERS: Add maintainer entry for zstd
        lib: zstd: Upgrade to latest upstream zstd version 1.4.10
        lib: zstd: Add decompress_sources.h for decompress_unzstd
        lib: zstd: Add kernel-specific API
      c8c10954