1. 10 Aug, 2020 1 commit
  2. 08 Aug, 2020 1 commit
  3. 07 Aug, 2020 38 commits
    • Linus Torvalds's avatar
      Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux · 30185b69
      Linus Torvalds authored
      Pull clk updates from Stephen Boyd:
       "It looks like a smaller batch of clk updates this time around.
      
        In the core framework we just have some minor tweaks and a debugfs
        feature, so not much to see there. The driver updates are fairly well
        split between AT91 and Qualcomm clk support. Adding those two drivers
        together equals about 50% of the diffstat.
      
        Otherwise, the big amount of work this time was on supporting
        Broadcom's Raspberry Pi firmware clks.
      
        Highlights:
      
        Core:
         - Document clk_hw_round_rate() so it gets some more use
         - Remove unused __clk_get_flags()
         - Add a prepare/enable debugfs feature similar to rate setting
      
        New Drivers:
         - Add support for SAMA7G5 SoC clks
         - Enable CPU clks on Qualcomm IPQ6018 SoCs
         - Enable CPU clks on Qualcomm MSM8996 SoCs
         - GPU clk support for Qualcomm SM8150 and SM8250 SoCs
         - Audio clks on Qualcomm SC7180 SoCs
         - Microchip Sparx5 DPLL clk
         - Add support for the new Renesas RZ/G2H (R8A774E1) SoC
      
        Updates:
         - Make defines for bcm63xx-gate clks to use in DT
         - Support BCM2711 SoC firmware clks
         - Add HDMI clks for BCM2711 SoCs
         - Add RTC related clks on Ingenic SoCs
         - Support USB PHY clks on Ingenic SoCs
         - Support gate clks on BCM6318 SoCs
         - RMU and DMAC/GPIO clock support for Actions Semi S500 SoCs
         - Use poll_timeout functions in Rockchip clk driver
         - Support Rockchip rk3288w SoC variant
         - Mark mac_lbtest critical on Rockchip rk3188
         - Add CAAM clock support for i.MX vf610 driver
         - Add MU root clock support for i.MX imx8mp driver
         - Amlogic g12: add neural network accelerator clock sources
         - Amlogic meson8: remove critical flag for main PLL divider
         - Amlogic meson8: add video decoder clock gates
         - Convert one more Renesas DT binding to json-schema
         - Enhance critical clock handling on Renesas platforms to only
           consider clocks that were enabled at boot time"
      
      * tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (79 commits)
        clk: qcom: gcc: Make disp gpll0 branch aon for sc7180/sdm845
        ipq806x: gcc: add support for child probe
        clk: qcom: msm8996: Make symbol 'cpu_msm8996_clks' static
        clk: qcom: ipq8074: Add correct index for PCIe clocks
        clk: <linux/clk-provider.h>: drop a duplicated word
        clk: renesas: cpg-mssr: Add r8a774e1 support
        dt-bindings: clock: renesas,cpg-mssr: Document r8a774e1
        clk: Drop duplicate selection in Kconfig
        clk: qcom: smd: Add support for MSM8992/4 rpm clocks
        clk: qcom: ipq8074: Add missing clocks for pcie
        dt-bindings: clock: qcom: ipq8074: Add missing bindings for PCIe
        Replace HTTP links with HTTPS ones: Common CLK framework
        clk: qcom: Add CPU clock driver for msm8996
        dt-bindings: clk: qcom: Add bindings for CPU clock for msm8996
        soc: qcom: Separate kryo l2 accessors from PMU driver
        clk: meson: meson8b: add the vclk2_en gate clock
        clk: meson: meson8b: add the vclk_en gate clock
        clk: qcom: Fix return value check in apss_ipq6018_probe()
        clk: bcm: dvp: Add missing module informations
        clk: meson: meson8b: Drop CLK_IS_CRITICAL from fclk_div2
        ...
      30185b69
    • Linus Torvalds's avatar
      Merge branch 'work.fdpic' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 0f43283b
      Linus Torvalds authored
      Pull fdpick coredump update from Al Viro:
       "Switches fdpic coredumps away from original aout dumping primitives to
        the same kind of regset use as regular elf coredumps do"
      
      * 'work.fdpic' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
        [elf-fdpic] switch coredump to regsets
        [elf-fdpic] use elf_dump_thread_status() for the dumper thread as well
        [elf-fdpic] move allocation of elf_thread_status into elf_dump_thread_status()
        [elf-fdpic] coredump: don't bother with cyclic list for per-thread objects
        kill elf_fpxregs_t
        take fdpic-related parts of elf_prstatus out
        unexport linux/elfcore.h
      0f43283b
    • Linus Torvalds's avatar
      Merge tag 'kallsyms_show_value-fix-v5.9-rc1' of... · 6ba0d2e4
      Linus Torvalds authored
      Merge tag 'kallsyms_show_value-fix-v5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux
      
      Pull sysfs module section fix from Kees Cook:
       "Fix sysfs module section output overflow.
      
        About a month after my kallsyms_show_value() refactoring landed, 0day
        noticed that there was a path through the kernfs binattr read handlers
        that did not have PAGE_SIZEd buffers, and the module "sections" read
        handler made a bad assumption about this, resulting in it stomping on
        memory when reached through small-sized splice() calls.
      
        I've added a set of tests to find these kinds of regressions more
        quickly in the future as well"
      Sefltests-acked-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      
      * tag 'kallsyms_show_value-fix-v5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
        selftests: splice: Check behavior of full and short splices
        module: Correctly truncate sysfs sections output
      6ba0d2e4
    • Linus Torvalds's avatar
      Merge tag 'seccomp-v5.9-rc1-fix1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux · 1fa2c0a0
      Linus Torvalds authored
      Pull seccomp fix from Kees Cook:
       "This fixes my typo in the SCM_RIGHTS refactoring that broke compat
        handling.
      
        Thanks to Thadeu Lima de Souza Cascardo for tracking it down, and to
        Christian Zigotzky and Alex Xu for their reports"
      
      * tag 'seccomp-v5.9-rc1-fix1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
        net/scm: Fix typo in SCM_RIGHTS compat refactoring
      1fa2c0a0
    • Linus Torvalds's avatar
      Merge tag 'pm-5.9-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · f6235eb1
      Linus Torvalds authored
      Pull more power management updates from Rafael Wysocki:
       "These are mostly ARM cpufreq driver updates plus a cpufreq core
        cleanup, an ARM-wide change to make schedutil the default scaling
        governor, an intel_pstate driver fix and some runtime PM changes
        regarding kerneldoc comments.
      
        Specifics:
      
         - Add adaptive voltage scaling (AVS) support to the brcmstb cpufreq
           driver and clean it up (Florian Fainelli, Markus Mayer).
      
         - Add a new Tegra cpufreq driver and clean up the existing one (Jon
           Hunter, Sumit Gupta).
      
         - Add bandwidth level support to the Qcom cpufreq driver along with
           OPP changes (Sibi Sankar).
      
         - Clean up the sti, cpufreq-dt, ap806, CPPC cpufreq drivers (Viresh
           Kumar, Lee Jones, Ivan Kokshaysky, Sven Auhagen, Xin Hao).
      
         - Make schedutil the default governor for ARM (Valentin Schneider).
      
         - Fix dependency issues for the imx cpufreq driver (Walter Lozano).
      
         - Clean up cached_resolved_idx handlihng in the cpufreq core (Viresh
           Kumar).
      
         - Fix the intel_pstate driver to use the correct maximum frequency
           value when MSR_TURBO_RATIO_LIMIT is 0 (Srinivas Pandruvada).
      
         - Provide kenrneldoc comments for multiple runtime PM helpers and
           improve the pm_runtime_get_if_active() kerneldoc (Rafael Wysocki)"
      
      * tag 'pm-5.9-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (22 commits)
        cpufreq: intel_pstate: Fix cpuinfo_max_freq when MSR_TURBO_RATIO_LIMIT is 0
        PM: runtime: Improve kerneldoc of pm_runtime_get_if_active()
        PM: runtime: Add kerneldoc comments to multiple helpers
        cpufreq: make schedutil the default for arm and arm64
        cpufreq: cached_resolved_idx can not be negative
        cpufreq: Add Tegra194 cpufreq driver
        dt-bindings: arm: Add NVIDIA Tegra194 CPU Complex binding
        cpufreq: imx: Select NVMEM_IMX_OCOTP
        cpufreq: sti-cpufreq: Fix some formatting and misspelling issues
        cpufreq: tegra186: Simplify probe return path
        cpufreq: CPPC: Reuse caps variable in few routines
        cpufreq: ap806: fix cpufreq driver needs ap cpu clk
        cpufreq: cppc: Reorder code and remove apply_hisi_workaround variable
        cpufreq: dt: fix oops on armada37xx
        cpufreq: brcmstb-avs-cpufreq: send S2_ENTER / S2_EXIT commands to AVS
        cpufreq: brcmstb-avs-cpufreq: Support polling AVS firmware
        cpufreq: brcmstb-avs-cpufreq: more flexible interface for __issue_avs_command()
        cpufreq: qcom: Disable fast switch when scaling DDR/L3
        cpufreq: qcom: Update the bandwidth levels on frequency change
        OPP: Add and export helper to set bandwidth
        ...
      f6235eb1
    • Linus Torvalds's avatar
      Merge tag 'for-5.9/dm-changes' of... · 2f12d440
      Linus Torvalds authored
      Merge tag 'for-5.9/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
      
      Pull device mapper updates from Mike Snitzer:
      
       - DM multipath locking fixes around m->flags tests and improvements to
         bio-based code so that it follows patterns established by
         request-based code.
      
       - Request-based DM core improvement to eliminate unnecessary call to
         blk_mq_queue_stopped().
      
       - Add "panic_on_corruption" error handling mode to DM verity target.
      
       - DM bufio fix to to perform buffer cleanup from a workqueue rather
         than wait for IO in reclaim context from shrinker.
      
       - DM crypt improvement to optionally avoid async processing via
         workqueues for reads and/or writes -- via "no_read_workqueue" and
         "no_write_workqueue" features. This more direct IO processing
         improves latency and throughput with faster storage. Avoiding
         workqueue IO submission for writes (DM_CRYPT_NO_WRITE_WORKQUEUE) is a
         requirement for adding zoned block device support to DM crypt.
      
       - Add zoned block device support to DM crypt. Makes use of
         DM_CRYPT_NO_WRITE_WORKQUEUE and a new optional feature
         (DM_CRYPT_WRITE_INLINE) that allows write completion to wait for
         encryption to complete. This allows write ordering to be preserved,
         which is needed for zoned block devices.
      
       - Fix DM ebs target's check for REQ_OP_FLUSH.
      
       - Fix DM core's report zones support to not report more zones than were
         requested.
      
       - A few small compiler warning fixes.
      
       - DM dust improvements to return output directly to the user rather
         than require they scrape the system log for output.
      
      * tag 'for-5.9/dm-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
        dm: don't call report zones for more than the user requested
        dm ebs: Fix incorrect checking for REQ_OP_FLUSH
        dm init: Set file local variable static
        dm ioctl: Fix compilation warning
        dm raid: Remove empty if statement
        dm verity: Fix compilation warning
        dm crypt: Enable zoned block device support
        dm crypt: add flags to optionally bypass kcryptd workqueues
        dm bufio: do buffer cleanup from a workqueue
        dm rq: don't call blk_mq_queue_stopped() in dm_stop_queue()
        dm dust: add interface to list all badblocks
        dm dust: report some message results directly back to user
        dm verity: add "panic_on_corruption" error handling mode
        dm mpath: use double checked locking in fast path
        dm mpath: rename current_pgpath to pgpath in multipath_prepare_ioctl
        dm mpath: rework __map_bio()
        dm mpath: factor out multipath_queue_bio
        dm mpath: push locking down to must_push_back_rq()
        dm mpath: take m->lock spinlock when testing QUEUE_IF_NO_PATH
        dm mpath: changes from initial m->flags locking audit
      2f12d440
    • Linus Torvalds's avatar
      Merge tag 'media/v5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media · fa73e212
      Linus Torvalds authored
      Pull media updates from Mauro Carvalho Chehab:
      
       - Legacy soc_camera driver was removed from staging
      
       - New I2C sensor related drivers: dw9768, ch7322, max9271, rdacm20
      
       - TI vpe driver code was re-organized and had new features added
      
       - Added Xilinx MIPI CSI-2 Rx Subsystem driver
      
       - Added support for Infrared Toy and IR Droid devices
      
       - Lots of random driver fixes, new features and cleanups
      
      * tag 'media/v5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (318 commits)
        media: camss: fix memory leaks on error handling paths in probe
        media: davinci: vpif_capture: fix potential double free
        media: radio: remove redundant assignment to variable retval
        media: allegro: fix potential null dereference on header
        media: mtk-mdp: Fix a refcounting bug on error in init
        media: allegro: fix an error pointer vs NULL check
        media: meye: fix missing pm_mchip_mode field
        media: cafe-driver: use generic power management
        media: saa7164: use generic power management
        media: v4l2-dev/ioctl: Fix document for VIDIOC_QUERYCAP
        media: v4l2: Correct kernel-doc inconsistency
        media: v4l2: Correct kernel-doc inconsistency
        media: dvbdev.h: keep * together with the type
        media: v4l2-subdev.h: keep * together with the type
        media: videobuf2: Print videobuf2 buffer state by name
        media: colorspaces-details.rst: fix V4L2_COLORSPACE_JPEG description
        media: tw68: use generic power management
        media: meye: use generic power management
        media: cx88: use generic power management
        media: cx25821: use generic power management
        ...
      fa73e212
    • Linus Torvalds's avatar
      Merge tag 'mailbox-v5.9' of git://git.linaro.org/landing-teams/working/fujitsu/integration · 75dee3b6
      Linus Torvalds authored
      Pull mailbox updates from Jassi Brar:
       "mediatek:
         - add support for mt6779 gce
         - shutdown cleanup and address shift support
      
        qcom:
         - add msm8994 apcs and sdm660 hmss compatibility
      
        imx:
         - mark PM funcs __maybe
      
        pcc:
         - put acpi table before bailout
      
        misc:
         - replace http with https links"
      
      * tag 'mailbox-v5.9' of git://git.linaro.org/landing-teams/working/fujitsu/integration:
        mailbox: mediatek: cmdq: clear task in channel before shutdown
        mailbox: cmdq: support mt6779 gce platform definition
        mailbox: cmdq: variablize address shift in platform
        dt-binding: gce: add gce header file for mt6779
        mailbox: qcom: Add msm8994 apcs compatible
        mailbox: qcom: Add sdm660 hmss compatible
        mailbox: imx: Mark PM functions as __maybe_unused
        mailbox: pcc: Put the PCCT table for error path
        mailbox: Replace HTTP links with HTTPS ones
      75dee3b6
    • Kees Cook's avatar
      net/scm: Fix typo in SCM_RIGHTS compat refactoring · 16b89f69
      Kees Cook authored
      When refactoring the SCM_RIGHTS code, I accidentally mis-merged my
      native/compat diffs, which entirely broke using SCM_RIGHTS in compat
      mode. Use the correct helper.
      Reported-by: default avatarChristian Zigotzky <chzigotzky@xenosoft.de>
      Link: https://lists.ozlabs.org/pipermail/linuxppc-dev/2020-August/216156.htmlReported-by: default avatar"Alex Xu (Hello71)" <alex_y_xu@yahoo.ca>
      Link: https://lore.kernel.org/lkml/1596812929.lz7fuo8r2w.none@localhost/Suggested-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
      Fixes: c0029de5 ("net/scm: Regularize compat handling of scm_detach_fds()")
      Tested-by: default avatarAlex Xu (Hello71) <alex_y_xu@yahoo.ca>
      Acked-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      16b89f69
    • Linus Torvalds's avatar
      Merge tag 'dmaengine-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine · ce615f5c
      Linus Torvalds authored
      Pull dmaengine updates from Vinod Koul:
       "Core:
         - Support out of order dma completion
         - Support for repeating transaction
      
        New controllers:
         - Support for Actions S700 DMA engine
         - Renesas R8A774E1, r8a7742 controller binding
         - New driver for Xilinx DPDMA controller
      
        Other:
         - Support of out of order dma completion in idxd driver
         - W=1 warning cleanup of subsystem
         - Updates to ti-k3-dma, dw, idxd drivers"
      
      * tag 'dmaengine-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine: (68 commits)
        dmaengine: dw: Don't include unneeded header to platform data header
        dmaengine: Actions: Add support for S700 DMA engine
        dmaengine: Actions: get rid of bit fields from dma descriptor
        dt-bindings: dmaengine: convert Actions Semi Owl SoCs bindings to yaml
        dmaengine: idxd: add missing invalid flags field to completion
        dmaengine: dw: Initialize max_sg_burst capability
        dmaengine: dw: Introduce max burst length hw config
        dmaengine: dw: Initialize min and max burst DMA device capability
        dmaengine: dw: Set DMA device max segment size parameter
        dmaengine: dw: Take HC_LLP flag into account for noLLP auto-config
        dmaengine: Introduce DMA-device device_caps callback
        dmaengine: Introduce max SG burst capability
        dmaengine: Introduce min burst length capability
        dt-bindings: dma: dw: Add max burst transaction length property
        dt-bindings: dma: dw: Convert DW DMAC to DT binding
        dmaengine: ti: k3-udma: Query throughput level information from hardware
        dmaengine: ti: k3-udma: Use defines for capabilities register parsing
        dmaengine: xilinx: dpdma: Fix kerneldoc warning
        dmaengine: xilinx: dpdma: add missing kernel doc
        dmaengine: xilinx: dpdma: remove comparison of unsigned expression
        ...
      ce615f5c
    • Linus Torvalds's avatar
      Merge branch 'akpm' (patches from Andrew) · 81e11336
      Linus Torvalds authored
      Merge misc updates from Andrew Morton:
      
       - a few MM hotfixes
      
       - kthread, tools, scripts, ntfs and ocfs2
      
       - some of MM
      
      Subsystems affected by this patch series: kthread, tools, scripts, ntfs,
      ocfs2 and mm (hofixes, pagealloc, slab-generic, slab, slub, kcsan,
      debug, pagecache, gup, swap, shmem, memcg, pagemap, mremap, mincore,
      sparsemem, vmalloc, kasan, pagealloc, hugetlb and vmscan).
      
      * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (162 commits)
        mm: vmscan: consistent update to pgrefill
        mm/vmscan.c: fix typo
        khugepaged: khugepaged_test_exit() check mmget_still_valid()
        khugepaged: retract_page_tables() remember to test exit
        khugepaged: collapse_pte_mapped_thp() protect the pmd lock
        khugepaged: collapse_pte_mapped_thp() flush the right range
        mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible
        mm: thp: replace HTTP links with HTTPS ones
        mm/page_alloc: fix memalloc_nocma_{save/restore} APIs
        mm/page_alloc.c: skip setting nodemask when we are in interrupt
        mm/page_alloc: fallbacks at most has 3 elements
        mm/page_alloc: silence a KASAN false positive
        mm/page_alloc.c: remove unnecessary end_bitidx for [set|get]_pfnblock_flags_mask()
        mm/page_alloc.c: simplify pageblock bitmap access
        mm/page_alloc.c: extract the common part in pfn_to_bitidx()
        mm/page_alloc.c: replace the definition of NR_MIGRATETYPE_BITS with PB_migratetype_bits
        mm/shuffle: remove dynamic reconfiguration
        mm/memory_hotplug: document why shuffle_zone() is relevant
        mm/page_alloc: remove nr_free_pagecache_pages()
        mm: remove vm_total_pages
        ...
      81e11336
    • Shakeel Butt's avatar
      mm: vmscan: consistent update to pgrefill · 912c0572
      Shakeel Butt authored
      The vmstat pgrefill is useful together with pgscan and pgsteal stats to
      measure the reclaim efficiency.  However vmstat's pgrefill is not updated
      consistently at system level.  It gets updated for both global and memcg
      reclaim however pgscan and pgsteal are updated for only global reclaim.
      So, update pgrefill only for global reclaim.  If someone is interested in
      the stats representing both system level as well as memcg level reclaim,
      then consult the root memcg's memory.stat instead of /proc/vmstat.
      Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarYafang Shao <laoar.shao@gmail.com>
      Acked-by: default avatarRoman Gushchin <guro@fb.com>
      Acked-by: default avatarChris Down <chris@chrisdown.name>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Michal Hocko <mhocko@kernel.org>
      Link: http://lkml.kernel.org/r/20200711011459.1159929-1-shakeelb@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      912c0572
    • dylan-meiners's avatar
    • Hugh Dickins's avatar
      khugepaged: khugepaged_test_exit() check mmget_still_valid() · bbe98f9c
      Hugh Dickins authored
      Move collapse_huge_page()'s mmget_still_valid() check into
      khugepaged_test_exit() itself.  collapse_huge_page() is used for anon THP
      only, and earned its mmget_still_valid() check because it inserts a huge
      pmd entry in place of the page table's pmd entry; whereas
      collapse_file()'s retract_page_tables() or collapse_pte_mapped_thp()
      merely clears the page table's pmd entry.  But core dumping without mmap
      lock must have been as open to mistaking a racily cleared pmd entry for a
      page table at physical page 0, as exit_mmap() was.  And we certainly have
      no interest in mapping as a THP once dumping core.
      
      Fixes: 59ea6d06 ("coredump: fix race condition between collapse_huge_page() and core dumping")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: <stable@vger.kernel.org>	[4.8+]
      Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021217020.27773@eggly.anvilsSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      bbe98f9c
    • Hugh Dickins's avatar
      khugepaged: retract_page_tables() remember to test exit · 18e77600
      Hugh Dickins authored
      Only once have I seen this scenario (and forgot even to notice what forced
      the eventual crash): a sequence of "BUG: Bad page map" alerts from
      vm_normal_page(), from zap_pte_range() servicing exit_mmap();
      pmd:00000000, pte values corresponding to data in physical page 0.
      
      The pte mappings being zapped in this case were supposed to be from a huge
      page of ext4 text (but could as well have been shmem): my belief is that
      it was racing with collapse_file()'s retract_page_tables(), found *pmd
      pointing to a page table, locked it, but *pmd had become 0 by the time
      start_pte was decided.
      
      In most cases, that possibility is excluded by holding mmap lock; but
      exit_mmap() proceeds without mmap lock.  Most of what's run by khugepaged
      checks khugepaged_test_exit() after acquiring mmap lock:
      khugepaged_collapse_pte_mapped_thps() and hugepage_vma_revalidate() do so,
      for example.  But retract_page_tables() did not: fix that.
      
      The fix is for retract_page_tables() to check khugepaged_test_exit(),
      after acquiring mmap lock, before doing anything to the page table.
      Getting the mmap lock serializes with __mmput(), which briefly takes and
      drops it in __khugepaged_exit(); then the khugepaged_test_exit() check on
      mm_users makes sure we don't touch the page table once exit_mmap() might
      reach it, since exit_mmap() will be proceeding without mmap lock, not
      expecting anyone to be racing with it.
      
      Fixes: f3f0e1d2 ("khugepaged: add support of collapse for tmpfs/shmem pages")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: <stable@vger.kernel.org>	[4.8+]
      Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021215400.27773@eggly.anvilsSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      18e77600
    • Hugh Dickins's avatar
      khugepaged: collapse_pte_mapped_thp() protect the pmd lock · 119a5fc1
      Hugh Dickins authored
      When retract_page_tables() removes a page table to make way for a huge
      pmd, it holds huge page lock, i_mmap_lock_write, mmap_write_trylock and
      pmd lock; but when collapse_pte_mapped_thp() does the same (to handle the
      case when the original mmap_write_trylock had failed), only
      mmap_write_trylock and pmd lock are held.
      
      That's not enough.  One machine has twice crashed under load, with "BUG:
      spinlock bad magic" and GPF on 6b6b6b6b6b6b6b6b.  Examining the second
      crash, page_vma_mapped_walk_done()'s spin_unlock of pvmw->ptl (serving
      page_referenced() on a file THP, that had found a page table at *pmd)
      discovers that the page table page and its lock have already been freed by
      the time it comes to unlock.
      
      Follow the example of retract_page_tables(), but we only need one of huge
      page lock or i_mmap_lock_write to secure against this: because it's the
      narrower lock, and because it simplifies collapse_pte_mapped_thp() to know
      the hpage earlier, choose to rely on huge page lock here.
      
      Fixes: 27e1f827 ("khugepaged: enable collapse pmd for pte-mapped THP")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: <stable@vger.kernel.org>	[5.4+]
      Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021213070.27773@eggly.anvilsSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      119a5fc1
    • Hugh Dickins's avatar
      khugepaged: collapse_pte_mapped_thp() flush the right range · 723a80da
      Hugh Dickins authored
      pmdp_collapse_flush() should be given the start address at which the huge
      page is mapped, haddr: it was given addr, which at that point has been
      used as a local variable, incremented to the end address of the extent.
      
      Found by source inspection while chasing a hugepage locking bug, which I
      then could not explain by this.  At first I thought this was very bad;
      then saw that all of the page translations that were not flushed would
      actually still point to the right pages afterwards, so harmless; then
      realized that I know nothing of how different architectures and models
      cache intermediate paging structures, so maybe it matters after all -
      particularly since the page table concerned is immediately freed.
      
      Much easier to fix than to think about.
      
      Fixes: 27e1f827 ("khugepaged: enable collapse pmd for pte-mapped THP")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: <stable@vger.kernel.org>	[5.4+]
      Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2008021204390.27773@eggly.anvilsSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      723a80da
    • Peter Xu's avatar
      mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible · 75802ca6
      Peter Xu authored
      This is found by code observation only.
      
      Firstly, the worst case scenario should assume the whole range was covered
      by pmd sharing.  The old algorithm might not work as expected for ranges
      like (1g-2m, 1g+2m), where the adjusted range should be (0, 1g+2m) but the
      expected range should be (0, 2g).
      
      Since at it, remove the loop since it should not be required.  With that,
      the new code should be faster too when the invalidating range is huge.
      
      Mike said:
      
      : With range (1g-2m, 1g+2m) within a vma (0, 2g) the existing code will only
      : adjust to (0, 1g+2m) which is incorrect.
      :
      : We should cc stable.  The original reason for adjusting the range was to
      : prevent data corruption (getting wrong page).  Since the range is not
      : always adjusted correctly, the potential for corruption still exists.
      :
      : However, I am fairly confident that adjust_range_if_pmd_sharing_possible
      : is only gong to be called in two cases:
      :
      : 1) for a single page
      : 2) for range == entire vma
      :
      : In those cases, the current code should produce the correct results.
      :
      : To be safe, let's just cc stable.
      
      Fixes: 017b1660 ("mm: migration: fix migration of huge PMD shared pages")
      Signed-off-by: default avatarPeter Xu <peterx@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Matthew Wilcox <willy@infradead.org>
      Cc: <stable@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20200730201636.74778-1-peterx@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      75802ca6
    • Alexander A. Klimov's avatar
      mm: thp: replace HTTP links with HTTPS ones · 42742d9b
      Alexander A. Klimov authored
      Rationale:
      Reduces attack surface on kernel devs opening the links for MITM
      as HTTPS traffic is much harder to manipulate.
      
      Deterministic algorithm:
      For each file:
        If not .svg:
          For each line:
            If doesn't contain `xmlns`:
              For each link, `http://[^# 	]*(?:\w|/)`:
      	  If neither `gnu\.org/license`, nor `mozilla\.org/MPL`:
                  If both the HTTP and HTTPS versions
                  return 200 OK and serve the same content:
                    Replace HTTP with HTTPS.
      
      [akpm@linux-foundation.org: fix amd.com URL, per Vlastimil]
      Signed-off-by: default avatarAlexander A. Klimov <grandmaster@al2klimov.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Link: http://lkml.kernel.org/r/20200713164345.36088-1-grandmaster@al2klimov.deSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      42742d9b
    • Joonsoo Kim's avatar
      mm/page_alloc: fix memalloc_nocma_{save/restore} APIs · 8510e69c
      Joonsoo Kim authored
      Currently, memalloc_nocma_{save/restore} API that prevents CMA area
      in page allocation is implemented by using current_gfp_context(). However,
      there are two problems of this implementation.
      
      First, this doesn't work for allocation fastpath. In the fastpath,
      original gfp_mask is used since current_gfp_context() is introduced in
      order to control reclaim and it is on slowpath. So, CMA area can be
      allocated through the allocation fastpath even if
      memalloc_nocma_{save/restore} APIs are used. Currently, there is just
      one user for these APIs and it has a fallback method to prevent actual
      problem.
      Second, clearing __GFP_MOVABLE in current_gfp_context() has a side effect
      to exclude the memory on the ZONE_MOVABLE for allocation target.
      
      To fix these problems, this patch changes the implementation to exclude
      CMA area in page allocation. Main point of this change is using the
      alloc_flags. alloc_flags is mainly used to control allocation so it fits
      for excluding CMA area in allocation.
      
      Fixes: d7fefcc8 (mm/cma: add PF flag to force non cma alloc)
      Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Roman Gushchin <guro@fb.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: "Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>
      Link: http://lkml.kernel.org/r/1595468942-29687-1-git-send-email-iamjoonsoo.kim@lge.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8510e69c
    • Muchun Song's avatar
      mm/page_alloc.c: skip setting nodemask when we are in interrupt · 182f3d7a
      Muchun Song authored
      When we are in the interrupt context, it is irrelevant to the current task
      context.  If we use current task's mems_allowed, we can be fair to alloc
      pages in the fast path and fall back to slow path memory allocation when
      the current node(which is the current task mems_allowed) does not have
      enough memory to allocate.  In this case, it slows down the memory
      allocation speed of interrupt context.  So we can skip setting the
      nodemask to allow any node to allocate memory, so that fast path
      allocation can success.
      Signed-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarPekka Enberg <penberg@kernel.org>
      Cc: David Hildenbrand <david@redhat.com>
      Link: http://lkml.kernel.org/r/20200706025921.53683-1-songmuchun@bytedance.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      182f3d7a
    • Wei Yang's avatar
      mm/page_alloc: fallbacks at most has 3 elements · da415663
      Wei Yang authored
      MIGRAGE_TYPES is used to be the mark of end and there are at most 3
      elements for the one dimension array.
      
      Reduce to 3 to save little memory.
      Signed-off-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
      Link: http://lkml.kernel.org/r/20200625231022.18784-1-richard.weiyang@linux.alibaba.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      da415663
    • Qian Cai's avatar
      mm/page_alloc: silence a KASAN false positive · 9e15afa5
      Qian Cai authored
      kernel_init_free_pages() will use memset() on s390 to clear all pages from
      kmalloc_order() which will override KASAN redzones because a redzone was
      setup from the end of the allocation size to the end of the last page.
      Silence it by not reporting it there.  An example of the report is,
      
       BUG: KASAN: slab-out-of-bounds in __free_pages_ok
       Write of size 4096 at addr 000000014beaa000
       Call Trace:
       show_stack+0x152/0x210
       dump_stack+0x1f8/0x248
       print_address_description.isra.13+0x5e/0x4d0
       kasan_report+0x130/0x178
       check_memory_region+0x190/0x218
       memset+0x34/0x60
       __free_pages_ok+0x894/0x12f0
       kfree+0x4f2/0x5e0
       unpack_to_rootfs+0x60e/0x650
       populate_rootfs+0x56/0x358
       do_one_initcall+0x1f4/0xa20
       kernel_init_freeable+0x758/0x7e8
       kernel_init+0x1c/0x170
       ret_from_fork+0x24/0x28
       Memory state around the buggy address:
       000000014bea9f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
       000000014bea9f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      >000000014beaa000: 03 fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe
                          ^
       000000014beaa080: fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe
       000000014beaa100: fe fe fe fe fe fe fe fe fe fe fe fe fe fe
      
      Fixes: 6471384a ("mm: security: introduce init_on_alloc=1 and init_on_free=1 boot options")
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Tested-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Acked-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Link: http://lkml.kernel.org/r/20200610052154.5180-1-cai@lca.pwSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      9e15afa5
    • Wei Yang's avatar
      mm/page_alloc.c: remove unnecessary end_bitidx for [set|get]_pfnblock_flags_mask() · 535b81e2
      Wei Yang authored
      After previous cleanup, the end_bitidx is not necessary any more.
      Signed-off-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Link: http://lkml.kernel.org/r/20200623124201.8199-4-richard.weiyang@linux.alibaba.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      535b81e2
    • Wei Yang's avatar
      mm/page_alloc.c: simplify pageblock bitmap access · d93d5ab9
      Wei Yang authored
      Due to commit e58469ba ("mm: page_alloc: use word-based accesses for
      get/set pageblock bitmaps"), pageblock bitmap is accessed with word-based
      access.  This operation could be simplified a little.
      
      Intuitively, if we want to get a bit range [start_idx, end_idx] in a word,
      we can do like this:
      
          mask = (1 << (end_bitidx - start_bitidx + 1)) - 1;
          ret = (word >> start_idx) & mask;
      
      And also if we want to set a bit range [start_idx, end_idx] with flags, we
      can do the same by just shift start_bitidx.
      
      By doing so we reduce some instructions for these two helper functions:
      
                                      Before   Patched
          set_pfnblock_flags_mask     209      198(-5%)
          get_pfnblock_flags_mask     101      87(-13%)
      
      Since the syntax is changed a little, we need to check the whole 4-bit
      migrate_type instead of part of it.
      Signed-off-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Link: http://lkml.kernel.org/r/20200623124201.8199-3-richard.weiyang@linux.alibaba.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d93d5ab9
    • Wei Yang's avatar
      mm/page_alloc.c: extract the common part in pfn_to_bitidx() · 399b795b
      Wei Yang authored
      The return value calculation is the same both for SPARSEMEM or not.
      
      Just take it out.
      Signed-off-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Link: http://lkml.kernel.org/r/20200623124201.8199-2-richard.weiyang@linux.alibaba.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      399b795b
    • Wei Yang's avatar
      mm/page_alloc.c: replace the definition of NR_MIGRATETYPE_BITS with PB_migratetype_bits · d38ac97f
      Wei Yang authored
      We already have the definition of PB_migratetype_bits and current
      NR_MIGRATETYPE_BITS looks like a cyclic definition.
      
      Just use PB_migratetype_bits is enough.
      Signed-off-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Mel Gorman <mgorman@suse.de>
      Link: http://lkml.kernel.org/r/20200623124201.8199-1-richard.weiyang@linux.alibaba.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d38ac97f
    • David Hildenbrand's avatar
      mm/shuffle: remove dynamic reconfiguration · 83919535
      David Hildenbrand authored
      Commit e900a918 ("mm: shuffle initial free memory to improve
      memory-side-cache utilization") promised "autodetection of a
      memory-side-cache (to be added in a follow-on patch)" over a year ago.
      
      The original series included patches [1], however, they were dropped
      during review [2] to be followed-up later.
      
      Due to lack of platforms that publish an HMAT, autodetection is currently
      not implemented.  However, manual activation is actively used [3].  Let's
      simplify for now and re-add when really (ever?) needed.
      
      [1] https://lkml.kernel.org/r/154510700291.1941238.817190985966612531.stgit@dwillia2-desk3.amr.corp.intel.com
      [2] https://lkml.kernel.org/r/154690326478.676627.103843791978176914.stgit@dwillia2-desk3.amr.corp.intel.com
      [3] https://lkml.kernel.org/r/CAPcyv4irwGUU2x+c6b4L=KbB1dnasNKaaZd6oSpYjL9kfsnROQ@mail.gmail.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarWei Yang <richard.weiyang@linux.alibaba.com>
      Acked-by: default avatarDan Williams <dan.j.williams@intel.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Minchan Kim <minchan@kernel.org>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: Wei Yang <richard.weiyang@gmail.com>
      Cc: Mel Gorman <mgorman@techsingularity.net>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Link: http://lkml.kernel.org/r/20200624094741.9918-4-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      83919535
    • David Hildenbrand's avatar
      mm/memory_hotplug: document why shuffle_zone() is relevant · 93146d98
      David Hildenbrand authored
      It's not completely obvious why we have to shuffle the complete zone -
      introduced in commit e900a918 ("mm: shuffle initial free memory to
      improve memory-side-cache utilization") - because some sort of shuffling
      is already performed when onlining pages via __free_one_page(), placing
      MAX_ORDER-1 pages either to the head or the tail of the freelist.  Let's
      document why we have to shuffle the complete zone when exposing larger,
      contiguous physical memory areas to the buddy.
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarDan Williams <dan.j.williams@intel.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Alexander Duyck <alexander.h.duyck@linux.intel.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Link: http://lkml.kernel.org/r/20200624094741.9918-3-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      93146d98
    • David Hildenbrand's avatar
      mm/page_alloc: remove nr_free_pagecache_pages() · 56b9413b
      David Hildenbrand authored
      nr_free_pagecache_pages() isn't used outside page_alloc.c anymore - and
      the name does not really help to understand what's going on.  Let's
      open-code it instead and add a comment.
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarWei Yang <richard.weiyang@gmail.com>
      Reviewed-by: default avatarPankaj Gupta <pankaj.gupta.linux@gmail.com>
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Minchan Kim <minchan@kernel.org>
      Cc: Huang Ying <ying.huang@intel.com>
      Link: http://lkml.kernel.org/r/20200619132410.23859-3-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      56b9413b
    • David Hildenbrand's avatar
      mm: remove vm_total_pages · 0a18e607
      David Hildenbrand authored
      The global variable "vm_total_pages" is a relic from older days.  There is
      only a single user that reads the variable - build_all_zonelists() - and
      the first thing it does is update it.
      
      Use a local variable in build_all_zonelists() instead and remove the
      global variable.
      Signed-off-by: default avatarDavid Hildenbrand <david@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarWei Yang <richard.weiyang@gmail.com>
      Reviewed-by: default avatarPankaj Gupta <pankaj.gupta.linux@gmail.com>
      Reviewed-by: default avatarMike Rapoport <rppt@linux.ibm.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Huang Ying <ying.huang@intel.com>
      Cc: Minchan Kim <minchan@kernel.org>
      Link: http://lkml.kernel.org/r/20200619132410.23859-2-david@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0a18e607
    • Charan Teja Reddy's avatar
      mm, page_alloc: skip ->waternark_boost for atomic order-0 allocations · f80b08fc
      Charan Teja Reddy authored
      When boosting is enabled, it is observed that rate of atomic order-0
      allocation failures are high due to the fact that free levels in the
      system are checked with ->watermark_boost offset.  This is not a problem
      for sleepable allocations but for atomic allocations which looks like
      regression.
      
      This problem is seen frequently on system setup of Android kernel running
      on Snapdragon hardware with 4GB RAM size.  When no extfrag event occurred
      in the system, ->watermark_boost factor is zero, thus the watermark
      configurations in the system are:
      
         _watermark = (
                [WMARK_MIN] = 1272, --> ~5MB
                [WMARK_LOW] = 9067, --> ~36MB
                [WMARK_HIGH] = 9385), --> ~38MB
         watermark_boost = 0
      
      After launching some memory hungry applications in Android which can cause
      extfrag events in the system to an extent that ->watermark_boost can be
      set to max i.e.  default boost factor makes it to 150% of high watermark.
      
         _watermark = (
                [WMARK_MIN] = 1272, --> ~5MB
                [WMARK_LOW] = 9067, --> ~36MB
                [WMARK_HIGH] = 9385), --> ~38MB
         watermark_boost = 14077, -->~57MB
      
      With default system configuration, for an atomic order-0 allocation to
      succeed, having free memory of ~2MB will suffice.  But boosting makes the
      min_wmark to ~61MB thus for an atomic order-0 allocation to be successful
      system should have minimum of ~23MB of free memory(from calculations of
      zone_watermark_ok(), min = 3/4(min/2)).  But failures are observed despite
      system is having ~20MB of free memory.  In the testing, this is
      reproducible as early as first 300secs since boot and with furtherlowram
      configurations(<2GB) it is observed as early as first 150secs since boot.
      
      These failures can be avoided by excluding the ->watermark_boost in
      watermark caluculations for atomic order-0 allocations.
      
      [akpm@linux-foundation.org: fix comment grammar, reflow comment]
      [charante@codeaurora.org: fix suggested by Mel Gorman]
        Link: http://lkml.kernel.org/r/31556793-57b1-1c21-1a9d-22674d9bd938@codeaurora.orgSigned-off-by: default avatarCharan Teja Reddy <charante@codeaurora.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Vinayak Menon <vinmenon@codeaurora.org>
      Cc: Mel Gorman <mgorman@techsingularity.net>
      Link: http://lkml.kernel.org/r/1589882284-21010-1-git-send-email-charante@codeaurora.orgSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f80b08fc
    • Jaewon Kim's avatar
      page_alloc: consider highatomic reserve in watermark fast · f27ce0e1
      Jaewon Kim authored
      zone_watermark_fast was introduced by commit 48ee5f36 ("mm,
      page_alloc: shortcut watermark checks for order-0 pages").  The commit
      simply checks if free pages is bigger than watermark without additional
      calculation such like reducing watermark.
      
      It considered free cma pages but it did not consider highatomic reserved.
      This may incur exhaustion of free pages except high order atomic free
      pages.
      
      Assume that reserved_highatomic pageblock is bigger than watermark min,
      and there are only few free pages except high order atomic free.  Because
      zone_watermark_fast passes the allocation without considering high order
      atomic free, normal reclaimable allocation like GFP_HIGHUSER will consume
      all the free pages.  Then finally order-0 atomic allocation may fail on
      allocation.
      
      This means watermark min is not protected against non-atomic allocation.
      The order-0 atomic allocation with ALLOC_HARDER unwantedly can be failed.
      Additionally the __GFP_MEMALLOC allocation with ALLOC_NO_WATERMARKS also
      can be failed.
      
      To avoid the problem, zone_watermark_fast should consider highatomic
      reserve.  If the actual size of high atomic free is counted accurately
      like cma free, we may use it.  On this patch just use
      nr_reserved_highatomic.  Additionally introduce
      __zone_watermark_unusable_free to factor out common parts between
      zone_watermark_fast and __zone_watermark_ok.
      
      This is an example of ALLOC_HARDER allocation failure using v4.19 based
      kernel.
      
       Binder:9343_3: page allocation failure: order:0, mode:0x480020(GFP_ATOMIC), nodemask=(null)
       Call trace:
       [<ffffff8008f40f8c>] dump_stack+0xb8/0xf0
       [<ffffff8008223320>] warn_alloc+0xd8/0x12c
       [<ffffff80082245e4>] __alloc_pages_nodemask+0x120c/0x1250
       [<ffffff800827f6e8>] new_slab+0x128/0x604
       [<ffffff800827b0cc>] ___slab_alloc+0x508/0x670
       [<ffffff800827ba00>] __kmalloc+0x2f8/0x310
       [<ffffff80084ac3e0>] context_struct_to_string+0x104/0x1cc
       [<ffffff80084ad8fc>] security_sid_to_context_core+0x74/0x144
       [<ffffff80084ad880>] security_sid_to_context+0x10/0x18
       [<ffffff800849bd80>] selinux_secid_to_secctx+0x20/0x28
       [<ffffff800849109c>] security_secid_to_secctx+0x3c/0x70
       [<ffffff8008bfe118>] binder_transaction+0xe68/0x454c
       Mem-Info:
       active_anon:102061 inactive_anon:81551 isolated_anon:0
        active_file:59102 inactive_file:68924 isolated_file:64
        unevictable:611 dirty:63 writeback:0 unstable:0
        slab_reclaimable:13324 slab_unreclaimable:44354
        mapped:83015 shmem:4858 pagetables:26316 bounce:0
        free:2727 free_pcp:1035 free_cma:178
       Node 0 active_anon:408244kB inactive_anon:326204kB active_file:236408kB inactive_file:275696kB unevictable:2444kB isolated(anon):0kB isolated(file):256kB mapped:332060kB dirty:252kB writeback:0kB shmem:19432kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no
       Normal free:10908kB min:6192kB low:44388kB high:47060kB active_anon:409160kB inactive_anon:325924kB active_file:235820kB inactive_file:276628kB unevictable:2444kB writepending:252kB present:3076096kB managed:2673676kB mlocked:2444kB kernel_stack:62512kB pagetables:105264kB bounce:0kB free_pcp:4140kB local_pcp:40kB free_cma:712kB
       lowmem_reserve[]: 0 0
       Normal: 505*4kB (H) 357*8kB (H) 201*16kB (H) 65*32kB (H) 1*64kB (H) 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 10236kB
       138826 total pagecache pages
       5460 pages in swap cache
       Swap cache stats: add 8273090, delete 8267506, find 1004381/4060142
      
      This is an example of ALLOC_NO_WATERMARKS allocation failure using v4.14
      based kernel.
      
       kswapd0: page allocation failure: order:0, mode:0x140000a(GFP_NOIO|__GFP_HIGHMEM|__GFP_MOVABLE), nodemask=(null)
       kswapd0 cpuset=/ mems_allowed=0
       CPU: 4 PID: 1221 Comm: kswapd0 Not tainted 4.14.113-18770262-userdebug #1
       Call trace:
       [<0000000000000000>] dump_backtrace+0x0/0x248
       [<0000000000000000>] show_stack+0x18/0x20
       [<0000000000000000>] __dump_stack+0x20/0x28
       [<0000000000000000>] dump_stack+0x68/0x90
       [<0000000000000000>] warn_alloc+0x104/0x198
       [<0000000000000000>] __alloc_pages_nodemask+0xdc0/0xdf0
       [<0000000000000000>] zs_malloc+0x148/0x3d0
       [<0000000000000000>] zram_bvec_rw+0x410/0x798
       [<0000000000000000>] zram_rw_page+0x88/0xdc
       [<0000000000000000>] bdev_write_page+0x70/0xbc
       [<0000000000000000>] __swap_writepage+0x58/0x37c
       [<0000000000000000>] swap_writepage+0x40/0x4c
       [<0000000000000000>] shrink_page_list+0xc30/0xf48
       [<0000000000000000>] shrink_inactive_list+0x2b0/0x61c
       [<0000000000000000>] shrink_node_memcg+0x23c/0x618
       [<0000000000000000>] shrink_node+0x1c8/0x304
       [<0000000000000000>] kswapd+0x680/0x7c4
       [<0000000000000000>] kthread+0x110/0x120
       [<0000000000000000>] ret_from_fork+0x10/0x18
       Mem-Info:
       active_anon:111826 inactive_anon:65557 isolated_anon:0\x0a active_file:44260 inactive_file:83422 isolated_file:0\x0a unevictable:4158 dirty:117 writeback:0 unstable:0\x0a            slab_reclaimable:13943 slab_unreclaimable:43315\x0a mapped:102511 shmem:3299 pagetables:19566 bounce:0\x0a free:3510 free_pcp:553 free_cma:0
       Node 0 active_anon:447304kB inactive_anon:262228kB active_file:177040kB inactive_file:333688kB unevictable:16632kB isolated(anon):0kB isolated(file):0kB mapped:410044kB d irty:468kB writeback:0kB shmem:13196kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no
       Normal free:14040kB min:7440kB low:94500kB high:98136kB reserved_highatomic:32768KB active_anon:447336kB inactive_anon:261668kB active_file:177572kB inactive_file:333768k           B unevictable:16632kB writepending:480kB present:4081664kB managed:3637088kB mlocked:16632kB kernel_stack:47072kB pagetables:78264kB bounce:0kB free_pcp:2280kB local_pcp:720kB free_cma:0kB        [ 4738.329607] lowmem_reserve[]: 0 0
       Normal: 860*4kB (H) 453*8kB (H) 180*16kB (H) 26*32kB (H) 34*64kB (H) 6*128kB (H) 2*256kB (H) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 14232kB
      
      This is trace log which shows GFP_HIGHUSER consumes free pages right
      before ALLOC_NO_WATERMARKS.
      
        <...>-22275 [006] ....   889.213383: mm_page_alloc: page=00000000d2be5665 pfn=970744 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213385: mm_page_alloc: page=000000004b2335c2 pfn=970745 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213387: mm_page_alloc: page=00000000017272e1 pfn=970278 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213389: mm_page_alloc: page=00000000c4be79fb pfn=970279 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213391: mm_page_alloc: page=00000000f8a51d4f pfn=970260 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213393: mm_page_alloc: page=000000006ba8f5ac pfn=970261 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213395: mm_page_alloc: page=00000000819f1cd3 pfn=970196 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
        <...>-22275 [006] ....   889.213396: mm_page_alloc: page=00000000f6b72a64 pfn=970197 order=0 migratetype=0 nr_free=3650 gfp_flags=GFP_HIGHUSER|__GFP_ZERO
      kswapd0-1207  [005] ...1   889.213398: mm_page_alloc: page= (null) pfn=0 order=0 migratetype=1 nr_free=3650 gfp_flags=GFP_NOWAIT|__GFP_HIGHMEM|__GFP_NOWARN|__GFP_MOVABLE
      
      [jaewon31.kim@samsung.com: remove redundant code for high-order]
        Link: http://lkml.kernel.org/r/20200623035242.27232-1-jaewon31.kim@samsung.comReported-by: default avatarYong-Taek Lee <ytk.lee@samsung.com>
      Suggested-by: default avatarMinchan Kim <minchan@kernel.org>
      Signed-off-by: default avatarJaewon Kim <jaewon31.kim@samsung.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarBaoquan He <bhe@redhat.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarMel Gorman <mgorman@techsingularity.net>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Yong-Taek Lee <ytk.lee@samsung.com>
      Cc: Michal Hocko <mhocko@kernel.org>
      Link: http://lkml.kernel.org/r/20200619235958.11283-1-jaewon31.kim@samsung.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f27ce0e1
    • Vlastimil Babka's avatar
      mm, page_alloc: use unlikely() in task_capc() · deba0487
      Vlastimil Babka authored
      Hugh noted that task_capc() could use unlikely(), as most of the time
      there is no capture in progress and we are in page freeing hot path.
      Indeed adding unlikely() produces assembly that better matches the
      assumption and moves all the tests away from the hot path.
      
      I have also noticed that we don't need to test for cc->direct_compaction
      as the only place we set current->task_capture is compact_zone_order()
      which also always sets cc->direct_compaction true.
      Suggested-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarHugh Dickins <hughd@googlecom>
      Acked-by: default avatarMel Gorman <mgorman@techsingularity.net>
      Cc: Alex Shi <alex.shi@linux.alibaba.com>
      Cc: Li Wang <liwang@redhat.com>
      Link: http://lkml.kernel.org/r/4a24f7af-3aa5-6e80-4ae6-8f253b562039@suse.czSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      deba0487
    • Andrey Konovalov's avatar
      kasan: adjust kasan_stack_oob for tag-based mode · 51dcc81c
      Andrey Konovalov authored
      Use OOB_TAG_OFF as access offset to land the access into the next granule.
      Suggested-by: default avatarWalter Wu <walter-zh.wu@mediatek.com>
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Elena Petrova <lenaptr@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Ard Biesheuvel <ardb@kernel.org>
      Link: http://lkml.kernel.org/r/403b259f1de49a7a3694531c851ac28326a586a8.1596199677.git.andreyknvl@google.com
      Link: http://lkml.kernel.org/r/3063ab1411e92bce36061a96e25b651212e70ba6.1596544734.git.andreyknvl@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      51dcc81c
    • Andrey Konovalov's avatar
      kasan: allow enabling stack tagging for tag-based mode · cae9dc35
      Andrey Konovalov authored
      Use CONFIG_KASAN_STACK to enable stack tagging.
      
      Note, that HWASAN short granules [1] are disabled. Supporting those will
      require more kernel changes.
      
      [1] https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.htmlSigned-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Elena Petrova <lenaptr@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Walter Wu <walter-zh.wu@mediatek.com>
      Cc: Ard Biesheuvel <ardb@kernel.org>
      Link: http://lkml.kernel.org/r/e7febb907b539c3730780df587ce0b38dc558c3d.1596199677.git.andreyknvl@google.com
      Link: http://lkml.kernel.org/r/99f7d90a4237431bf5988599fb41358e92876eb0.1596544734.git.andreyknvl@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      cae9dc35
    • Andrey Konovalov's avatar
      kasan, arm64: don't instrument functions that enable kasan · f9409d58
      Andrey Konovalov authored
      This patch prepares Software Tag-Based KASAN for stack tagging support.
      
      With stack tagging enabled, KASAN tags stack variable in each function in
      its prologue.  In start_kernel() stack variables get tagged before KASAN
      is enabled via setup_arch()->kasan_init().  As the result the tags for
      start_kernel()'s stack variables end up in the temporary shadow memory.
      Later when KASAN gets enabled, switched to normal shadow, and starts
      checking tags, this leads to false-positive reports, as proper tags are
      missing in normal shadow.
      
      Disable KASAN instrumentation for start_kernel().  Also disable it for
      arm64's setup_arch() as a precaution (it doesn't have any stack variables
      right now).
      
      [andreyknvl@google.com: reorder attributes for start_kernel()]
        Link: http://lkml.kernel.org/r/26fb6165a17abcf61222eda5184c030fb6b133d1.1596544734.git.andreyknvl@google.comSigned-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: Catalin Marinas <catalin.marinas@arm.com>	[arm64]
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Elena Petrova <lenaptr@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Walter Wu <walter-zh.wu@mediatek.com>
      Cc: Ard Biesheuvel <ardb@kernel.org>
      Link: http://lkml.kernel.org/r/55d432671a92e931ab8234b03dc36b14d4c21bfb.1596199677.git.andreyknvl@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f9409d58
    • Andrey Konovalov's avatar
      efi: provide empty efi_enter_virtual_mode implementation · 2c547f9d
      Andrey Konovalov authored
      When CONFIG_EFI is not enabled, we might get an undefined reference to
      efi_enter_virtual_mode() error, if this efi_enabled() call isn't inlined
      into start_kernel().  This happens in particular, if start_kernel() is
      annodated with __no_sanitize_address.
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarAndrey Konovalov <andreyknvl@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
      Cc: Alexander Potapenko <glider@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Elena Petrova <lenaptr@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
      Cc: Walter Wu <walter-zh.wu@mediatek.com>
      Link: http://lkml.kernel.org/r/6514652d3a32d3ed33d6eb5c91d0af63bf0d1a0c.1596544734.git.andreyknvl@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2c547f9d