Merge tag 'docs-5.0' of git://git.lwn.net/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 29 Dec 2018 19:21:49 +0000 (11:21 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 29 Dec 2018 19:21:49 +0000 (11:21 -0800)
Pull documentation update from Jonathan Corbet:
 "A fairly normal cycle for documentation stuff. We have a new document
  on perf security, more Italian translations, more improvements to the
  memory-management docs, improvements to the pathname lookup
  documentation, and the usual array of smaller fixes.

  As is often the case, there are a few reaches outside of
  Documentation/ to adjust kerneldoc comments"

* tag 'docs-5.0' of git://git.lwn.net/linux: (38 commits)
  docs: improve pathname-lookup document structure
  configfs: fix wrong name of struct in documentation
  docs/mm-api: link slab_common.c to "The Slab Cache" section
  slab: make kmem_cache_create{_usercopy} description proper kernel-doc
  doc:process: add links where missing
  docs/core-api: make mm-api.rst more structured
  x86, boot: documentation whitespace fixup
  Documentation: devres: note checking needs when converting
  doc:it: add some process/* translations
  doc:it: fixes in process/1.Intro
  Documentation: convert path-lookup from markdown to resturctured text
  Documentation/admin-guide: update admin-guide index.rst
  Documentation/admin-guide: introduce perf-security.rst file
  scripts/kernel-doc: Fix struct and struct field attribute processing
  Documentation: dev-tools: Fix typos in index.rst
  Correct gen_init_cpio tool's documentation
  Document /proc/pid PID reuse behavior
  Documentation: update path-lookup.md for parallel lookups
  Documentation: Use "while" instead of "whilst"
  dmaengine: Add mailing list address to the documentation
  ...

1  2 
Documentation/admin-guide/kernel-parameters.txt
Documentation/admin-guide/security-bugs.rst
Documentation/driver-model/devres.txt
Documentation/filesystems/proc.txt
Documentation/gpu/drm-uapi.rst
Documentation/media/uapi/v4l/extended-controls.rst
Documentation/networking/device_drivers/dec/de4x5.txt
Documentation/networking/rxrpc.txt
Documentation/x86/boot.txt
include/linux/slab.h
mm/slab_common.c

                        APC and your system crashes randomly.
  
        apic=           [APIC,X86] Advanced Programmable Interrupt Controller
-                       Change the output verbosity whilst booting
+                       Change the output verbosity while booting
                        Format: { quiet (default) | verbose | debug }
                        Change the amount of debugging information output
                        when initialising the APIC and IO-APIC components.
                        cut the overhead, others just disable the usage. So
                        only cgroup_disable=memory is actually worthy}
  
 -      cgroup_no_v1=   [KNL] Disable one, multiple, all cgroup controllers in v1
 -                      Format: { controller[,controller...] | "all" }
 +      cgroup_no_v1=   [KNL] Disable cgroup controllers and named hierarchies in v1
 +                      Format: { { controller | "all" | "named" }
 +                                [,{ controller | "all" | "named" }...] }
                        Like cgroup_disable, but only applies to cgroup v1;
                        the blacklisted controllers remain available in cgroup2.
 +                      "all" blacklists all controllers and "named" disables
 +                      named mounts. Specifying both "all" and "named" disables
 +                      all v1 hierarchies.
  
        cgroup.memory=  [KNL] Pass options to the cgroup memory controller.
                        Format: <string>
        cpuidle.off=1   [CPU_IDLE]
                        disable the cpuidle sub-system
  
 +      cpuidle.governor=
 +                      [CPU_IDLE] Name of the cpuidle governor to use.
 +
        cpufreq.off=1   [CPU_FREQ]
                        disable the cpufreq sub-system
  
                        causing system reset or hang due to sending
                        INIT from AP to BSP.
  
 -      disable_counter_freezing [HW]
 +      perf_v4_pmi=    [X86,INTEL]
 +                      Format: <bool>
                        Disable Intel PMU counter freezing feature.
                        The feature only exists starting from
                        Arch Perfmon v4 (Skylake and newer).
                        off
                                Disables hypervisor mitigations and doesn't
                                emit any warnings.
 +                              It also drops the swap size and available
 +                              RAM limit restriction on both hypervisor and
 +                              bare metal.
  
                        Default is 'flush'.
  
                        check bypass). With this option data leaks are possible
                        in the system.
  
 -      nospectre_v2    [X86] Disable all mitigations for the Spectre variant 2
 +      nospectre_v2    [X86,PPC_FSL_BOOK3E] Disable all mitigations for the Spectre variant 2
                        (indirect branch prediction) vulnerability. System may
                        allow data leaks with this option, which is equivalent
                        to spectre_v2=off.
                        before loading.
                        See Documentation/blockdev/ramdisk.txt.
  
 +      psi=            [KNL] Enable or disable pressure stall information
 +                      tracking.
 +                      Format: <bool>
 +
        psmouse.proto=  [HW,MOUSE] Highest PS2 mouse protocol extension to
                        probe for; one of (bare|imps|exps|lifebook|any).
        psmouse.rate=   [HW,MOUSE] Set desired mouse report rate, in reports
                        in microseconds.  The default of zero says
                        no holdoff.
  
 -      rcutorture.cbflood_inter_holdoff= [KNL]
 -                      Set holdoff time (jiffies) between successive
 -                      callback-flood tests.
 -
 -      rcutorture.cbflood_intra_holdoff= [KNL]
 -                      Set holdoff time (jiffies) between successive
 -                      bursts of callbacks within a given callback-flood
 -                      test.
 -
 -      rcutorture.cbflood_n_burst= [KNL]
 -                      Set the number of bursts making up a given
 -                      callback-flood test.  Set this to zero to
 -                      disable callback-flood testing.
 -
 -      rcutorture.cbflood_n_per_burst= [KNL]
 -                      Set the number of callbacks to be registered
 -                      in a given burst of a callback-flood test.
 -
        rcutorture.fqs_duration= [KNL]
                        Set duration of force_quiescent_state bursts
                        in microseconds.
                        Set wait time between force_quiescent_state bursts
                        in seconds.
  
 +      rcutorture.fwd_progress= [KNL]
 +                      Enable RCU grace-period forward-progress testing
 +                      for the types of RCU supporting this notion.
 +
 +      rcutorture.fwd_progress_div= [KNL]
 +                      Specify the fraction of a CPU-stall-warning
 +                      period to do tight-loop forward-progress testing.
 +
 +      rcutorture.fwd_progress_holdoff= [KNL]
 +                      Number of seconds to wait between successive
 +                      forward-progress tests.
 +
 +      rcutorture.fwd_progress_need_resched= [KNL]
 +                      Enclose cond_resched() calls within checks for
 +                      need_resched() during tight-loop forward-progress
 +                      testing.
 +
        rcutorture.gp_cond= [KNL]
                        Use conditional/asynchronous update-side
                        primitives, if available.
  
        spectre_v2=     [X86] Control mitigation of Spectre variant 2
                        (indirect branch speculation) vulnerability.
 +                      The default operation protects the kernel from
 +                      user space attacks.
  
 -                      on   - unconditionally enable
 -                      off  - unconditionally disable
 +                      on   - unconditionally enable, implies
 +                             spectre_v2_user=on
 +                      off  - unconditionally disable, implies
 +                             spectre_v2_user=off
                        auto - kernel detects whether your CPU model is
                               vulnerable
  
                        CONFIG_RETPOLINE configuration option, and the
                        compiler with which the kernel was built.
  
 +                      Selecting 'on' will also enable the mitigation
 +                      against user space to user space task attacks.
 +
 +                      Selecting 'off' will disable both the kernel and
 +                      the user space protections.
 +
                        Specific mitigations can also be selected manually:
  
                        retpoline         - replace indirect branches
                        Not specifying this option is equivalent to
                        spectre_v2=auto.
  
 +      spectre_v2_user=
 +                      [X86] Control mitigation of Spectre variant 2
 +                      (indirect branch speculation) vulnerability between
 +                      user space tasks
 +
 +                      on      - Unconditionally enable mitigations. Is
 +                                enforced by spectre_v2=on
 +
 +                      off     - Unconditionally disable mitigations. Is
 +                                enforced by spectre_v2=off
 +
 +                      prctl   - Indirect branch speculation is enabled,
 +                                but mitigation can be enabled via prctl
 +                                per thread.  The mitigation control state
 +                                is inherited on fork.
 +
 +                      prctl,ibpb
 +                              - Like "prctl" above, but only STIBP is
 +                                controlled per thread. IBPB is issued
 +                                always when switching between different user
 +                                space processes.
 +
 +                      seccomp
 +                              - Same as "prctl" above, but all seccomp
 +                                threads will enable the mitigation unless
 +                                they explicitly opt out.
 +
 +                      seccomp,ibpb
 +                              - Like "seccomp" above, but only STIBP is
 +                                controlled per thread. IBPB is issued
 +                                always when switching between different
 +                                user space processes.
 +
 +                      auto    - Kernel selects the mitigation depending on
 +                                the available CPU features and vulnerability.
 +
 +                      Default mitigation:
 +                      If CONFIG_SECCOMP=y then "seccomp", otherwise "prctl"
 +
 +                      Not specifying this option is equivalent to
 +                      spectre_v2_user=auto.
 +
        spec_store_bypass_disable=
                        [HW] Control Speculative Store Bypass (SSB) Disable mitigation
                        (Speculative Store Bypass vulnerability)
                                        prevent spurious wakeup);
                                n = USB_QUIRK_DELAY_CTRL_MSG (Device needs a
                                        pause after every control message);
 +                              o = USB_QUIRK_HUB_SLOW_RESET (Hub needs extra
 +                                      delay after resetting its port);
                        Example: quirks=0781:5580:bk,0a5c:5834:gij
  
        usbhid.mousepoll=
@@@ -32,19 -32,18 +32,19 @@@ Disclosure and embargoed informatio
  The security list is not a disclosure channel.  For that, see Coordination
  below.
  
 -Once a robust fix has been developed, our preference is to release the
 -fix in a timely fashion, treating it no differently than any of the other
 -thousands of changes and fixes the Linux kernel project releases every
 -month.
 -
 -However, at the request of the reporter, we will postpone releasing the
 -fix for up to 5 business days after the date of the report or after the
 -embargo has lifted; whichever comes first.  The only exception to that
 -rule is if the bug is publicly known, in which case the preference is to
 -release the fix as soon as it's available.
 +Once a robust fix has been developed, the release process starts.  Fixes
 +for publicly known bugs are released immediately.
 +
 +Although our preference is to release fixes for publicly undisclosed bugs
 +as soon as they become available, this may be postponed at the request of
 +the reporter or an affected party for up to 7 calendar days from the start
 +of the release process, with an exceptional extension to 14 calendar days
 +if it is agreed that the criticality of the bug requires more time.  The
 +only valid reason for deferring the publication of a fix is to accommodate
 +the logistics of QA and large scale rollouts which require release
 +coordination.
  
- Whilst embargoed information may be shared with trusted individuals in
+ While embargoed information may be shared with trusted individuals in
  order to develop a fix, such information will not be published alongside
  the fix or on any other disclosure channel without the permission of the
  reporter.  This includes but is not limited to the original bug report
@@@ -132,6 -132,13 +132,13 @@@ devres.  Complexity is shifted from les
  to better maintained higher layer.  Also, as init failure path is
  shared with exit path, both can get more testing.
  
+ Note though that when converting current calls or assignments to
+ managed devm_* versions it is up to you to check if internal operations
+ like allocating memory, have failed. Managed resources pertains to the
+ freeing of these resources *only* - all other checks needed are still
+ on you. In some cases this may mean introducing checks that were not
+ necessary before moving to the managed devm_* calls.
  
    3. Devres group
    ---------------
@@@ -254,8 -261,8 +261,8 @@@ GPI
    devm_gpiod_get_index_optional()
    devm_gpiod_get_optional()
    devm_gpiod_put()
 +  devm_gpiod_unhinge()
    devm_gpiochip_add_data()
 -  devm_gpiochip_remove()
    devm_gpio_request()
    devm_gpio_request_one()
    devm_gpio_free()
@@@ -125,6 -125,13 +125,13 @@@ process running on the system, which i
  The link  self  points  to  the  process reading the file system. Each process
  subdirectory has the entries listed in Table 1-1.
  
+ Note that an open a file descriptor to /proc/<pid> or to any of its
+ contained files or subdirectories does not prevent <pid> being reused
+ for some other process in the event that <pid> exits. Operations on
+ open /proc/<pid> file descriptors corresponding to dead processes
+ never act on any new process that the kernel may, through chance, have
+ also assigned the process ID <pid>. Instead, operations on these FDs
+ usually fail with ESRCH.
  
  Table 1-1: Process specific entries in /proc
  ..............................................................................
@@@ -182,7 -189,6 +189,7 @@@ read the file /proc/PID/status
    VmSwap:        0 kB
    HugetlbPages:          0 kB
    CoreDumping:    0
 +  THP_enabled:          1
    Threads:        1
    SigQ:   0/28578
    SigPnd: 0000000000000000
    CapPrm: 0000000000000000
    CapEff: 0000000000000000
    CapBnd: ffffffffffffffff
+   CapAmb: 0000000000000000
    NoNewPrivs:     0
    Seccomp:        0
+   Speculation_Store_Bypass:       thread vulnerable
    voluntary_ctxt_switches:        0
    nonvoluntary_ctxt_switches:     1
  
@@@ -215,7 -223,7 +224,7 @@@ asynchronous manner and the value may n
  snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
  It's slow but very precise.
  
- Table 1-2: Contents of the status files (as of 4.8)
+ Table 1-2: Contents of the status files (as of 4.19)
  ..............................................................................
   Field                       Content
   Name                        filename of the executable
   HugetlbPages                size of hugetlb memory portions
   CoreDumping                 process's memory is currently being dumped
                               (killing the process may lead to a corrupted core)
 + THP_enabled               process is allowed to use THP (returns 0 when
 +                           PR_SET_THP_DISABLE is set on the process
   Threads                     number of threads
   SigQ                        number of signals queued/max. number for queue
   SigPnd                      bitmap of pending signals for the thread
   CapPrm                      bitmap of permitted capabilities
   CapEff                      bitmap of effective capabilities
   CapBnd                      bitmap of capabilities bounding set
+  CapAmb                      bitmap of ambient capabilities
   NoNewPrivs                  no_new_privs, like prctl(PR_GET_NO_NEW_PRIV, ...)
   Seccomp                     seccomp mode, like prctl(PR_GET_SECCOMP, ...)
+  Speculation_Store_Bypass    speculative store bypass mitigation status
   Cpus_allowed                mask of CPUs on which this process may run
   Cpus_allowed_list           Same as previous, but in "list format"
   Mems_allowed                mask of memory nodes allowed to this process
@@@ -428,7 -436,6 +439,7 @@@ SwapPss:               0 k
  KernelPageSize:        4 kB
  MMUPageSize:           4 kB
  Locked:                0 kB
 +THPeligible:           0
  VmFlags: rd ex mr mw me dw
  
  the first of these lines shows the same information as is displayed for the
@@@ -466,8 -473,6 +477,8 @@@ replaced by copy-on-write) part of the 
  "SwapPss" shows proportional swap share of this mapping. Unlike "Swap", this
  does not take into account swapped out page of underlying shmem objects.
  "Locked" indicates whether the mapping is locked in memory or not.
 +"THPeligible" indicates whether the mapping is eligible for THP pages - 1 if
 +true, 0 otherwise.
  
  "VmFlags" field deserves a separate description. This member represents the kernel
  flags associated with the particular virtual memory area in two letter encoded
@@@ -502,9 -507,7 +513,9 @@@ manner. The codes are the following
  
  Note that there is no guarantee that every flag and associated mnemonic will
  be present in all further kernel releases. Things get changed, the flags may
 -be vanished or the reverse -- new added.
 +be vanished or the reverse -- new added. Interpretation of their meaning
 +might change in future as well. So each consumer of these flags has to
 +follow each specific kernel version for the exact semantic.
  
  This file is only present if the CONFIG_MMU kernel configuration option is
  enabled.
@@@ -190,16 -190,13 +190,16 @@@ ENOSPC
  
          Simply running out of kernel/system memory is signalled through ENOMEM.
  
- EPERM/EACCESS:
+ EPERM/EACCES:
          Returned for an operation that is valid, but needs more privileges.
          E.g. root-only or much more common, DRM master-only operations return
          this when when called by unpriviledged clients. There's no clear
-         difference between EACCESS and EPERM.
+         difference between EACCES and EPERM.
  
  ENODEV:
 +        The device is not (yet) present or fully initialized.
 +
 +EOPNOTSUPP:
          Feature (like PRIME, modesetting, GEM) is not supported by the driver.
  
  ENXIO:
@@@ -1,11 -1,4 +1,11 @@@
 -.. -*- coding: utf-8; mode: rst -*-
 +.. Permission is granted to copy, distribute and/or modify this
 +.. document under the terms of the GNU Free Documentation License,
 +.. Version 1.1 or any later version published by the Free Software
 +.. Foundation, with no Invariant Sections, no Front-Cover Texts
 +.. and no Back-Cover Texts. A copy of the license is included at
 +.. Documentation/media/uapi/fdl-appendix.rst.
 +..
 +.. TODO: replace it to GFDL-1.1-or-later WITH no-invariant-sections
  
  .. _extended-controls:
  
@@@ -1117,16 -1110,10 +1117,16 @@@ enum v4l2_mpeg_video_h264_loop_filter_m
  
  ``V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA (integer)``
      Loop filter alpha coefficient, defined in the H264 standard.
 +    This value corresponds to the slice_alpha_c0_offset_div2 slice header
 +    field, and should be in the range of -6 to +6, inclusive. The actual alpha
 +    offset FilterOffsetA is twice this value.
      Applicable to the H264 encoder.
  
  ``V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA (integer)``
      Loop filter beta coefficient, defined in the H264 standard.
 +    This corresponds to the slice_beta_offset_div2 slice header field, and
 +    should be in the range of -6 to +6, inclusive. The actual beta offset
 +    FilterOffsetB is twice this value.
      Applicable to the H264 encoder.
  
  .. _v4l2-mpeg-video-h264-entropy-mode:
@@@ -1518,11 -1505,6 +1518,11 @@@ enum v4l2_mpeg_video_h264_hierarchical_
      configuring a stateless hardware decoding pipeline for MPEG-2.
      The bitstream parameters are defined according to :ref:`mpeg2part2`.
  
 +    .. note::
 +
 +       This compound control is not yet part of the public kernel API and
 +       it is expected to change.
 +
  .. c:type:: v4l2_ctrl_mpeg2_slice_params
  
  .. cssclass:: longtable
      Specifies quantization matrices (as extracted from the bitstream) for the
      associated MPEG-2 slice data.
  
 +    .. note::
 +
 +       This compound control is not yet part of the public kernel API and
 +       it is expected to change.
 +
  .. c:type:: v4l2_ctrl_mpeg2_quantization
  
  .. cssclass:: longtable
@@@ -4003,7 -3980,7 +4003,7 @@@ demodulator. It receives radio frequenc
  converts that received signal to lower intermediate frequency (IF) or
  baseband frequency (BB). Tuners that could do baseband output are often
  called Zero-IF tuners. Older tuners were typically simple PLL tuners
- inside a metal box, whilst newer ones are highly integrated chips
+ inside a metal box, while newer ones are highly integrated chips
  without a metal box "silicon tuners". These controls are mostly
  applicable for new feature rich silicon tuners, just because older
  tuners does not have much adjustable features.
@@@ -84,7 -84,7 +84,7 @@@
  
      Automedia detection is included so that in  principle you can disconnect
      from, e.g.  TP, reconnect  to BNC  and  things will still work  (after a
-     pause whilst the   driver figures out   where its media went).  My tests
+     pause while the   driver figures out   where its media went).  My tests
      using ping showed that it appears to work....
  
      By  default,  the driver will  now   autodetect any  DECchip based card.
@@@ -661,7 -661,7 +661,7 @@@ A server would be set up to accept oper
        setsockopt(server, SOL_RXRPC, RXRPC_SECURITY_KEYRING, "AFSkeys", 7);
  
       The keyring can be manipulated after it has been given to the socket. This
-      permits the server to add more keys, replace keys, etc. whilst it is live.
+      permits the server to add more keys, replace keys, etc. while it is live.
  
   (3) A local address must then be bound:
  
@@@ -1032,7 -1032,7 +1032,7 @@@ The kernel interface functions are as f
                                    struct sockaddr_rxrpc *srx,
                                    struct key *key);
  
-      This attempts to partially reinitialise a call and submit it again whilst
+      This attempts to partially reinitialise a call and submit it again while
       reusing the original call's Tx queue to avoid the need to repackage and
       re-encrypt the data to be sent.  call indicates the call to retry, srx the
       new address to send it to and key the encryption key to use for signing or
  
        u32 rxrpc_kernel_check_life(struct socket *sock,
                                    struct rxrpc_call *call);
 +      void rxrpc_kernel_probe_life(struct socket *sock,
 +                                   struct rxrpc_call *call);
  
 -     This returns a number that is updated when ACKs are received from the peer
 -     (notably including PING RESPONSE ACKs which we can elicit by sending PING
 -     ACKs to see if the call still exists on the server).  The caller should
 -     compare the numbers of two calls to see if the call is still alive after
 -     waiting for a suitable interval.
 +     The first function returns a number that is updated when ACKs are received
 +     from the peer (notably including PING RESPONSE ACKs which we can elicit by
 +     sending PING ACKs to see if the call still exists on the server).  The
 +     caller should compare the numbers of two calls to see if the call is still
 +     alive after waiting for a suitable interval.
  
       This allows the caller to work out if the server is still contactable and
-      if the call is still alive on the server whilst waiting for the server to
+      if the call is still alive on the server while waiting for the server to
       process a client operation.
  
 -     This function may transmit a PING ACK.
 +     The second function causes a ping ACK to be transmitted to try to provoke
 +     the peer into responding, which would then cause the value returned by the
 +     first function to change.  Note that this must be called in TASK_RUNNING
 +     state.
  
   (*) Get reply timestamp.
  
@@@ -1149,14 -1144,14 +1149,14 @@@ adjusted through sysctls in /proc/net/r
   (*) connection_expiry
  
       The amount of time in seconds after a connection was last used before we
-      remove it from the connection list.  Whilst a connection is in existence,
+      remove it from the connection list.  While a connection is in existence,
       it serves as a placeholder for negotiated security; when it is deleted,
       the security must be renegotiated.
  
   (*) transport_expiry
  
       The amount of time in seconds after a transport was last used before we
-      remove it from the transport list.  Whilst a transport is in existence, it
+      remove it from the transport list.  While a transport is in existence, it
       serves to anchor the peer data and keeps the connection ID counter.
  
   (*) rxrpc_rx_window_size
@@@ -58,9 -58,21 +58,9 @@@ Protocol 2.11:       (Kernel 3.6) Added a fie
                protocol entry point.
  
  Protocol 2.12:        (Kernel 3.8) Added the xloadflags field and extension fields
-               to struct boot_params for loading bzImage and ramdisk
+               to struct boot_params for loading bzImage and ramdisk
                above 4G in 64bit.
  
 -Protocol 2.13:        (Kernel 3.14) Support 32- and 64-bit flags being set in
 -              xloadflags to support booting a 64-bit kernel from 32-bit
 -              EFI
 -
 -Protocol 2.14:        (Kernel 4.20) Added acpi_rsdp_addr holding the physical
 -              address of the ACPI RSDP table.
 -              The bootloader updates version with:
 -              0x8000 | min(kernel-version, bootloader-version)
 -              kernel-version being the protocol version supported by
 -              the kernel and bootloader-version the protocol version
 -              supported by the bootloader.
 -
  **** MEMORY LAYOUT
  
  The traditional memory map for the kernel loader, used for Image or
@@@ -197,6 -209,7 +197,6 @@@ Offset     Proto   Name            Meanin
  0258/8        2.10+   pref_address    Preferred loading address
  0260/4        2.10+   init_size       Linear memory required during initialization
  0264/4        2.11+   handover_offset Offset of handover entry point
 -0268/8        2.14+   acpi_rsdp_addr  Physical address of RSDP table
  
  (1) For backwards compatibility, if the setup_sects field contains 0, the
      real value is 4.
@@@ -309,7 -322,7 +309,7 @@@ Protocol:  2.00
    Contains the magic number "HdrS" (0x53726448).
  
  Field name:   version
 -Type:         modify
 +Type:         read
  Offset/size:  0x206/2
  Protocol:     2.00+
  
    e.g. 0x0204 for version 2.04, and 0x0a11 for a hypothetical version
    10.17.
  
 -  Up to protocol version 2.13 this information is only read by the
 -  bootloader. From protocol version 2.14 onwards the bootloader will
 -  write the used protocol version or-ed with 0x8000 to the field. The
 -  used protocol version will be the minimum of the supported protocol
 -  versions of the bootloader and the kernel.
 -
  Field name:   realmode_swtch
  Type:         modify (optional)
  Offset/size:  0x208/4
@@@ -744,6 -763,17 +744,6 @@@ Offset/size:      0x264/
  
    See EFI HANDOVER PROTOCOL below for more details.
  
 -Field name:   acpi_rsdp_addr
 -Type:         write
 -Offset/size:  0x268/8
 -Protocol:     2.14+
 -
 -  This field can be set by the boot loader to tell the kernel the
 -  physical address of the ACPI RSDP table.
 -
 -  A value of 0 indicates the kernel should fall back to the standard
 -  methods to locate the RSDP.
 -
  
  **** THE IMAGE CHECKSUM
  
diff --combined include/linux/slab.h
@@@ -314,22 -314,22 +314,22 @@@ kmalloc_caches[NR_KMALLOC_TYPES][KMALLO
  
  static __always_inline enum kmalloc_cache_type kmalloc_type(gfp_t flags)
  {
 -      int is_dma = 0;
 -      int type_dma = 0;
 -      int is_reclaimable;
 -
  #ifdef CONFIG_ZONE_DMA
 -      is_dma = !!(flags & __GFP_DMA);
 -      type_dma = is_dma * KMALLOC_DMA;
 -#endif
 -
 -      is_reclaimable = !!(flags & __GFP_RECLAIMABLE);
 +      /*
 +       * The most common case is KMALLOC_NORMAL, so test for it
 +       * with a single branch for both flags.
 +       */
 +      if (likely((flags & (__GFP_DMA | __GFP_RECLAIMABLE)) == 0))
 +              return KMALLOC_NORMAL;
  
        /*
 -       * If an allocation is both __GFP_DMA and __GFP_RECLAIMABLE, return
 -       * KMALLOC_DMA and effectively ignore __GFP_RECLAIMABLE
 +       * At least one of the flags has to be set. If both are, __GFP_DMA
 +       * is more important.
         */
 -      return type_dma + (is_reclaimable & !is_dma) * KMALLOC_RECLAIM;
 +      return flags & __GFP_DMA ? KMALLOC_DMA : KMALLOC_RECLAIM;
 +#else
 +      return flags & __GFP_RECLAIMABLE ? KMALLOC_RECLAIM : KMALLOC_NORMAL;
 +#endif
  }
  
  /*
@@@ -444,7 -444,7 +444,7 @@@ static __always_inline void *kmem_cache
  {
        void *ret = kmem_cache_alloc(s, flags);
  
 -      kasan_kmalloc(s, ret, size, flags);
 +      ret = kasan_kmalloc(s, ret, size, flags);
        return ret;
  }
  
@@@ -455,7 -455,7 +455,7 @@@ kmem_cache_alloc_node_trace(struct kmem
  {
        void *ret = kmem_cache_alloc_node(s, gfpflags, node);
  
 -      kasan_kmalloc(s, ret, size, gfpflags);
 +      ret = kasan_kmalloc(s, ret, size, gfpflags);
        return ret;
  }
  #endif /* CONFIG_TRACING */
@@@ -486,48 -486,47 +486,47 @@@ static __always_inline void *kmalloc_la
   * kmalloc is the normal method of allocating memory
   * for objects smaller than page size in the kernel.
   *
-  * The @flags argument may be one of:
+  * The @flags argument may be one of the GFP flags defined at
+  * include/linux/gfp.h and described at
+  * :ref:`Documentation/core-api/mm-api.rst <mm-api-gfp-flags>`
   *
-  * %GFP_USER - Allocate memory on behalf of user.  May sleep.
+  * The recommended usage of the @flags is described at
+  * :ref:`Documentation/core-api/memory-allocation.rst <memory-allocation>`
   *
-  * %GFP_KERNEL - Allocate normal kernel ram.  May sleep.
+  * Below is a brief outline of the most useful GFP flags
   *
-  * %GFP_ATOMIC - Allocation will not sleep.  May use emergency pools.
-  *   For example, use this inside interrupt handlers.
+  * %GFP_KERNEL
+  *    Allocate normal kernel ram. May sleep.
   *
-  * %GFP_HIGHUSER - Allocate pages from high memory.
+  * %GFP_NOWAIT
+  *    Allocation will not sleep.
   *
-  * %GFP_NOIO - Do not do any I/O at all while trying to get memory.
+  * %GFP_ATOMIC
+  *    Allocation will not sleep.  May use emergency pools.
   *
-  * %GFP_NOFS - Do not make any fs calls while trying to get memory.
-  *
-  * %GFP_NOWAIT - Allocation will not sleep.
-  *
-  * %__GFP_THISNODE - Allocate node-local memory only.
-  *
-  * %GFP_DMA - Allocation suitable for DMA.
-  *   Should only be used for kmalloc() caches. Otherwise, use a
-  *   slab created with SLAB_DMA.
+  * %GFP_HIGHUSER
+  *    Allocate memory from high memory on behalf of user.
   *
   * Also it is possible to set different flags by OR'ing
   * in one or more of the following additional @flags:
   *
-  * %__GFP_HIGH - This allocation has high priority and may use emergency pools.
-  *
-  * %__GFP_NOFAIL - Indicate that this allocation is in no way allowed to fail
-  *   (think twice before using).
+  * %__GFP_HIGH
+  *    This allocation has high priority and may use emergency pools.
   *
-  * %__GFP_NORETRY - If memory is not immediately available,
-  *   then give up at once.
+  * %__GFP_NOFAIL
+  *    Indicate that this allocation is in no way allowed to fail
+  *    (think twice before using).
   *
-  * %__GFP_NOWARN - If allocation fails, don't issue any warnings.
+  * %__GFP_NORETRY
+  *    If memory is not immediately available,
+  *    then give up at once.
   *
-  * %__GFP_RETRY_MAYFAIL - Try really hard to succeed the allocation but fail
-  *   eventually.
+  * %__GFP_NOWARN
+  *    If allocation fails, don't issue any warnings.
   *
-  * There are other flags available as well, but these are not intended
-  * for general use, and so are not documented here. For a full list of
-  * potential flags, always refer to linux/gfp.h.
+  * %__GFP_RETRY_MAYFAIL
+  *    Try really hard to succeed the allocation but fail
+  *    eventually.
   */
  static __always_inline void *kmalloc(size_t size, gfp_t flags)
  {
diff --combined mm/slab_common.c
@@@ -406,8 -406,9 +406,9 @@@ out_free_cache
        goto out;
  }
  
- /*
-  * kmem_cache_create_usercopy - Create a cache.
+ /**
+  * kmem_cache_create_usercopy - Create a cache with a region suitable
+  * for copying to userspace
   * @name: A string which is used in /proc/slabinfo to identify this cache.
   * @size: The size of objects to be created in this cache.
   * @align: The required alignment for the objects.
   * @usersize: Usercopy region size
   * @ctor: A constructor for the objects.
   *
-  * Returns a ptr to the cache on success, NULL on failure.
   * Cannot be called within a interrupt, but can be interrupted.
   * The @ctor is run when new pages are allocated by the cache.
   *
   * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5)
   * to catch references to uninitialised memory.
   *
-  * %SLAB_RED_ZONE - Insert `Red' zones around the allocated memory to check
+  * %SLAB_RED_ZONE - Insert `Red` zones around the allocated memory to check
   * for buffer overruns.
   *
   * %SLAB_HWCACHE_ALIGN - Align the objects in this cache to a hardware
   * cacheline.  This can be beneficial if you're counting cycles as closely
   * as davem.
+  *
+  * Return: a pointer to the cache on success, NULL on failure.
   */
  struct kmem_cache *
  kmem_cache_create_usercopy(const char *name,
@@@ -514,6 -516,31 +516,31 @@@ out_unlock
  }
  EXPORT_SYMBOL(kmem_cache_create_usercopy);
  
+ /**
+  * kmem_cache_create - Create a cache.
+  * @name: A string which is used in /proc/slabinfo to identify this cache.
+  * @size: The size of objects to be created in this cache.
+  * @align: The required alignment for the objects.
+  * @flags: SLAB flags
+  * @ctor: A constructor for the objects.
+  *
+  * Cannot be called within a interrupt, but can be interrupted.
+  * The @ctor is run when new pages are allocated by the cache.
+  *
+  * The flags are
+  *
+  * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5)
+  * to catch references to uninitialised memory.
+  *
+  * %SLAB_RED_ZONE - Insert `Red` zones around the allocated memory to check
+  * for buffer overruns.
+  *
+  * %SLAB_HWCACHE_ALIGN - Align the objects in this cache to a hardware
+  * cacheline.  This can be beneficial if you're counting cycles as closely
+  * as davem.
+  *
+  * Return: a pointer to the cache on success, NULL on failure.
+  */
  struct kmem_cache *
  kmem_cache_create(const char *name, unsigned int size, unsigned int align,
                slab_flags_t flags, void (*ctor)(void *))
@@@ -724,7 -751,7 +751,7 @@@ void slab_deactivate_memcg_cache_rcu_sc
        css_get(&s->memcg_params.memcg->css);
  
        s->memcg_params.deact_fn = deact_fn;
 -      call_rcu_sched(&s->memcg_params.deact_rcu_head, kmemcg_deactivate_rcufn);
 +      call_rcu(&s->memcg_params.deact_rcu_head, kmemcg_deactivate_rcufn);
  }
  
  void memcg_deactivate_kmem_caches(struct mem_cgroup *memcg)
@@@ -839,11 -866,11 +866,11 @@@ static void flush_memcg_workqueue(struc
        mutex_unlock(&slab_mutex);
  
        /*
 -       * SLUB deactivates the kmem_caches through call_rcu_sched. Make
 +       * SLUB deactivates the kmem_caches through call_rcu. Make
         * sure all registered rcu callbacks have been invoked.
         */
        if (IS_ENABLED(CONFIG_SLUB))
 -              rcu_barrier_sched();
 +              rcu_barrier();
  
        /*
         * SLAB and SLUB create memcg kmem_caches through workqueue and SLUB
@@@ -1029,8 -1056,10 +1056,8 @@@ struct kmem_cache *kmalloc_slab(size_t 
  
                index = size_index[size_index_elem(size)];
        } else {
 -              if (unlikely(size > KMALLOC_MAX_CACHE_SIZE)) {
 -                      WARN_ON(1);
 +              if (WARN_ON_ONCE(size > KMALLOC_MAX_CACHE_SIZE))
                        return NULL;
 -              }
                index = fls(size - 1);
        }
  
@@@ -1202,7 -1231,7 +1229,7 @@@ void *kmalloc_order(size_t size, gfp_t 
        page = alloc_pages(flags, order);
        ret = page ? page_address(page) : NULL;
        kmemleak_alloc(ret, size, 1, flags);
 -      kasan_kmalloc_large(ret, size, flags);
 +      ret = kasan_kmalloc_large(ret, size, flags);
        return ret;
  }
  EXPORT_SYMBOL(kmalloc_order);
@@@ -1480,7 -1509,7 +1507,7 @@@ static __always_inline void *__do_kreal
                ks = ksize(p);
  
        if (ks >= new_size) {
 -              kasan_krealloc((void *)p, new_size, flags);
 +              p = kasan_krealloc((void *)p, new_size, flags);
                return (void *)p;
        }
  
@@@ -1532,7 -1561,7 +1559,7 @@@ void *krealloc(const void *p, size_t ne
        }
  
        ret = __do_krealloc(p, new_size, flags);
 -      if (ret && p != ret)
 +      if (ret && kasan_reset_tag(p) != kasan_reset_tag(ret))
                kfree(p);
  
        return ret;