03 Aug, 2018

1 commit

  • [ Upstream commit f3c01d2f3ade6790db67f80fef60df84424f8964 ]

    Currently, __vunmap flow is,
    1) Release the VM area
    2) Free the debug objects corresponding to that vm area.

    This leave some race window open.
    1) Release the VM area
    1.5) Some other client gets the same vm area
    1.6) This client allocates new debug objects on the same
    vm area
    2) Free the debug objects corresponding to this vm area.

    Here, we actually free 'other' client's debug objects.

    Fix this by freeing the debug objects first and then releasing the VM
    area.

    Link: http://lkml.kernel.org/r/1523961828-9485-2-git-send-email-cpandya@codeaurora.org
    Signed-off-by: Chintan Pandya
    Reviewed-by: Andrew Morton
    Cc: Ard Biesheuvel
    Cc: Byungchul Park
    Cc: Catalin Marinas
    Cc: Florian Fainelli
    Cc: Johannes Weiner
    Cc: Laura Abbott
    Cc: Vlastimil Babka
    Cc: Wei Yang
    Cc: Yisheng Xie
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Chintan Pandya
     

25 Feb, 2018

1 commit

  • commit 698d0831ba87b92ae10b15e8203cfd59f5a59a35 upstream.

    Kai Heng Feng has noticed that BUG_ON(PageHighMem(pg)) triggers in
    drivers/media/common/saa7146/saa7146_core.c since 19809c2da28a ("mm,
    vmalloc: use __GFP_HIGHMEM implicitly").

    saa7146_vmalloc_build_pgtable uses vmalloc_32 and it is reasonable to
    expect that the resulting page is not in highmem. The above commit
    aimed to add __GFP_HIGHMEM only for those requests which do not specify
    any zone modifier gfp flag. vmalloc_32 relies on GFP_VMALLOC32 which
    should do the right thing. Except it has been missed that GFP_VMALLOC32
    is an alias for GFP_KERNEL on 32b architectures. Thanks to Matthew to
    notice this.

    Fix the problem by unconditionally setting GFP_DMA32 in GFP_VMALLOC32
    for !64b arches (as a bailout). This should do the right thing and use
    ZONE_NORMAL which should be always below 4G on 32b systems.

    Debugged by Matthew Wilcox.

    [akpm@linux-foundation.org: coding-style fixes]
    Link: http://lkml.kernel.org/r/20180212095019.GX21609@dhcp22.suse.cz
    Fixes: 19809c2da28a ("mm, vmalloc: use __GFP_HIGHMEM implicitly”)
    Signed-off-by: Michal Hocko
    Reported-by: Kai Heng Feng
    Cc: Matthew Wilcox
    Cc: Laura Abbott
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Michal Hocko
     

14 Oct, 2017

1 commit

  • This reverts commits 5d17a73a2ebe ("vmalloc: back off when the current
    task is killed") and 171012f56127 ("mm: don't warn when vmalloc() fails
    due to a fatal signal").

    Commit 5d17a73a2ebe ("vmalloc: back off when the current task is
    killed") made all vmalloc allocations from a signal-killed task fail.
    We have seen crashes in the tty driver from this, where a killed task
    exiting tries to switch back to N_TTY, fails n_tty_open because of the
    vmalloc failing, and later crashes when dereferencing tty->disc_data.

    Arguably, relying on a vmalloc() call to succeed in order to properly
    exit a task is not the most robust way of doing things. There will be a
    follow-up patch to the tty code to fall back to the N_NULL ldisc.

    But the justification to make that vmalloc() call fail like this isn't
    convincing, either. The patch mentions an OOM victim exhausting the
    memory reserves and thus deadlocking the machine. But the OOM killer is
    only one, improbable source of fatal signals. It doesn't make sense to
    fail allocations preemptively with plenty of memory in most cases.

    The patch doesn't mention real-life instances where vmalloc sites would
    exhaust memory, which makes it sound more like a theoretical issue to
    begin with. But just in case, the OOM access to memory reserves has
    been restricted on the allocator side in cd04ae1e2dc8 ("mm, oom: do not
    rely on TIF_MEMDIE for memory reserves access"), which should take care
    of any theoretical concerns on that front.

    Revert this patch, and the follow-up that suppresses the allocation
    warnings when we fail the allocations due to a signal.

    Link: http://lkml.kernel.org/r/20171004185906.GB2136@cmpxchg.org
    Fixes: 171012f56127 ("mm: don't warn when vmalloc() fails due to a fatal signal")
    Signed-off-by: Johannes Weiner
    Acked-by: Vlastimil Babka
    Acked-by: Michal Hocko
    Cc: Alan Cox
    Cc: Christoph Hellwig
    Cc: Dmitry Vyukov
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Johannes Weiner
     

07 Sep, 2017

2 commits

  • Although llist provides proper APIs, they are not used. Make them used.

    Link: http://lkml.kernel.org/r/1502095374-16112-1-git-send-email-byungchul.park@lge.com
    Signed-off-by: Byungchul Park
    Cc: zijun_hu
    Cc: Michal Hocko
    Cc: Vlastimil Babka
    Cc: Joel Fernandes
    Cc: Andrey Ryabinin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Byungchul Park
     
  • In pcpu_get_vm_areas(), it checks each range is not overlapped. To make
    sure it is, only (N^2)/2 comparison is necessary, while current code
    does N^2 times. By starting from the next range, it achieves the goal
    and the continue could be removed.

    Also,

    - the overlap check of two ranges could be done with one clause

    - one typo in comment is fixed.

    Link: http://lkml.kernel.org/r/20170803063822.48702-1-richard.weiyang@gmail.com
    Signed-off-by: Wei Yang
    Acked-by: Tejun Heo
    Cc: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Wei Yang
     

19 Aug, 2017

1 commit

  • Commit 19809c2da28a ("mm, vmalloc: use __GFP_HIGHMEM implicitly") added
    use of __GFP_HIGHMEM for allocations. vmalloc_32 may use
    GFP_DMA/GFP_DMA32 which does not play nice with __GFP_HIGHMEM and will
    trigger a BUG in gfp_zone.

    Only add __GFP_HIGHMEM if we aren't using GFP_DMA/GFP_DMA32.

    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1482249
    Link: http://lkml.kernel.org/r/20170816220705.31374-1-labbott@redhat.com
    Fixes: 19809c2da28a ("mm, vmalloc: use __GFP_HIGHMEM implicitly")
    Signed-off-by: Laura Abbott
    Acked-by: Michal Hocko
    Cc: Vlastimil Babka
    Cc: "Kirill A. Shutemov"
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Laura Abbott
     

13 Jul, 2017

1 commit

  • __GFP_REPEAT was designed to allow retry-but-eventually-fail semantic to
    the page allocator. This has been true but only for allocations
    requests larger than PAGE_ALLOC_COSTLY_ORDER. It has been always
    ignored for smaller sizes. This is a bit unfortunate because there is
    no way to express the same semantic for those requests and they are
    considered too important to fail so they might end up looping in the
    page allocator for ever, similarly to GFP_NOFAIL requests.

    Now that the whole tree has been cleaned up and accidental or misled
    usage of __GFP_REPEAT flag has been removed for !costly requests we can
    give the original flag a better name and more importantly a more useful
    semantic. Let's rename it to __GFP_RETRY_MAYFAIL which tells the user
    that the allocator would try really hard but there is no promise of a
    success. This will work independent of the order and overrides the
    default allocator behavior. Page allocator users have several levels of
    guarantee vs. cost options (take GFP_KERNEL as an example)

    - GFP_KERNEL & ~__GFP_RECLAIM - optimistic allocation without _any_
    attempt to free memory at all. The most light weight mode which even
    doesn't kick the background reclaim. Should be used carefully because
    it might deplete the memory and the next user might hit the more
    aggressive reclaim

    - GFP_KERNEL & ~__GFP_DIRECT_RECLAIM (or GFP_NOWAIT)- optimistic
    allocation without any attempt to free memory from the current
    context but can wake kswapd to reclaim memory if the zone is below
    the low watermark. Can be used from either atomic contexts or when
    the request is a performance optimization and there is another
    fallback for a slow path.

    - (GFP_KERNEL|__GFP_HIGH) & ~__GFP_DIRECT_RECLAIM (aka GFP_ATOMIC) -
    non sleeping allocation with an expensive fallback so it can access
    some portion of memory reserves. Usually used from interrupt/bh
    context with an expensive slow path fallback.

    - GFP_KERNEL - both background and direct reclaim are allowed and the
    _default_ page allocator behavior is used. That means that !costly
    allocation requests are basically nofail but there is no guarantee of
    that behavior so failures have to be checked properly by callers
    (e.g. OOM killer victim is allowed to fail currently).

    - GFP_KERNEL | __GFP_NORETRY - overrides the default allocator behavior
    and all allocation requests fail early rather than cause disruptive
    reclaim (one round of reclaim in this implementation). The OOM killer
    is not invoked.

    - GFP_KERNEL | __GFP_RETRY_MAYFAIL - overrides the default allocator
    behavior and all allocation requests try really hard. The request
    will fail if the reclaim cannot make any progress. The OOM killer
    won't be triggered.

    - GFP_KERNEL | __GFP_NOFAIL - overrides the default allocator behavior
    and all allocation requests will loop endlessly until they succeed.
    This might be really dangerous especially for larger orders.

    Existing users of __GFP_REPEAT are changed to __GFP_RETRY_MAYFAIL
    because they already had their semantic. No new users are added.
    __alloc_pages_slowpath is changed to bail out for __GFP_RETRY_MAYFAIL if
    there is no progress and we have already passed the OOM point.

    This means that all the reclaim opportunities have been exhausted except
    the most disruptive one (the OOM killer) and a user defined fallback
    behavior is more sensible than keep retrying in the page allocator.

    [akpm@linux-foundation.org: fix arch/sparc/kernel/mdesc.c]
    [mhocko@suse.com: semantic fix]
    Link: http://lkml.kernel.org/r/20170626123847.GM11534@dhcp22.suse.cz
    [mhocko@kernel.org: address other thing spotted by Vlastimil]
    Link: http://lkml.kernel.org/r/20170626124233.GN11534@dhcp22.suse.cz
    Link: http://lkml.kernel.org/r/20170623085345.11304-3-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Acked-by: Vlastimil Babka
    Cc: Alex Belits
    Cc: Chris Wilson
    Cc: Christoph Hellwig
    Cc: Darrick J. Wong
    Cc: David Daney
    Cc: Johannes Weiner
    Cc: Mel Gorman
    Cc: NeilBrown
    Cc: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

11 Jul, 2017

1 commit

  • When ioremap a 67112960 bytes vm_area with the vmallocinfo:
    [..]
    0xec79b000-0xec7fa000 389120 ftl_add_mtd+0x4d0/0x754 pages=94 vmalloc
    0xec800000-0xecbe1000 4067328 kbox_proc_mem_write+0x104/0x1c4 phys=8b520000 ioremap

    we get the result:
    0xf1000000-0xf5001000 67112960 devm_ioremap+0x38/0x7c phys=40000000 ioremap

    For the align for ioremap must be less than '1 << IOREMAP_MAX_ORDER':

    if (flags & VM_IOREMAP)
    align = 1ul << clamp_t(int, get_count_order_long(size),
    PAGE_SHIFT, IOREMAP_MAX_ORDER);

    So it makes idiot like me a litte puzzled why this was a jump the
    vm_area from 0xec800000-0xecbe1000 to 0xf1000000-0xf5001000, and leaving
    0xed000000-0xf1000000 as a big hole.

    This patch is to show all of vm_area, including vmas which are freeing
    but still in the vmap_area_list, to make it more clear about why we will
    get 0xf1000000-0xf5001000 in the above case. And we will get a
    vmallocinfo like:

    [..]
    0xec79b000-0xec7fa000 389120 ftl_add_mtd+0x4d0/0x754 pages=94 vmalloc
    0xec800000-0xecbe1000 4067328 kbox_proc_mem_write+0x104/0x1c4 phys=8b520000 ioremap
    [..]
    0xece7c000-0xece7e000 8192 unpurged vm_area
    0xece7e000-0xece83000 20480 vm_map_ram
    0xf0099000-0xf00aa000 69632 vm_map_ram

    after this patch.

    Link: http://lkml.kernel.org/r/1496649682-20710-1-git-send-email-xieyisheng1@huawei.com
    Signed-off-by: Yisheng Xie
    Cc: Michal Hocko
    Cc: zijun_hu
    Cc: "Kirill A . Shutemov"
    Cc: Tim Chen
    Cc: Hanjun Guo
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yisheng Xie
     

07 Jul, 2017

1 commit

  • Kmemleak requires that vmalloc'ed objects have a minimum reference count
    of 2: one in the corresponding vm_struct object and the other owned by
    the vmalloc() caller. There are cases, however, where the original
    vmalloc() returned pointer is lost and, instead, a pointer to vm_struct
    is stored (see free_thread_stack()). Kmemleak currently reports such
    objects as leaks.

    This patch adds support for treating any surplus references to an object
    as additional references to a specified object. It introduces the
    kmemleak_vmalloc() API function which takes a vm_struct pointer and sets
    its surplus reference passing to the actual vmalloc() returned pointer.
    The __vmalloc_node_range() calling site has been modified accordingly.

    Link: http://lkml.kernel.org/r/1495726937-23557-4-git-send-email-catalin.marinas@arm.com
    Signed-off-by: Catalin Marinas
    Reported-by: "Luis R. Rodriguez"
    Cc: Michal Hocko
    Cc: Andy Lutomirski
    Cc: "Luis R. Rodriguez"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Catalin Marinas
     

24 Jun, 2017

1 commit

  • Existing code that uses vmalloc_to_page() may assume that any address
    for which is_vmalloc_addr() returns true may be passed into
    vmalloc_to_page() to retrieve the associated struct page.

    This is not un unreasonable assumption to make, but on architectures
    that have CONFIG_HAVE_ARCH_HUGE_VMAP=y, it no longer holds, and we need
    to ensure that vmalloc_to_page() does not go off into the weeds trying
    to dereference huge PUDs or PMDs as table entries.

    Given that vmalloc() and vmap() themselves never create huge mappings or
    deal with compound pages at all, there is no correct answer in this
    case, so return NULL instead, and issue a warning.

    When reading /proc/kcore on arm64, you will hit an oops as soon as you
    hit the huge mappings used for the various segments that make up the
    mapping of vmlinux. With this patch applied, you will no longer hit the
    oops, but the kcore contents willl be incorrect (these regions will be
    zeroed out)

    We are fixing this for kcore specifically, so it avoids vread() for
    those regions. At least one other problematic user exists, i.e.,
    /dev/kmem, but that is currently broken on arm64 for other reasons.

    Link: http://lkml.kernel.org/r/20170609082226.26152-1-ard.biesheuvel@linaro.org
    Signed-off-by: Ard Biesheuvel
    Acked-by: Mark Rutland
    Reviewed-by: Laura Abbott
    Cc: Michal Hocko
    Cc: zhong jiang
    Cc: Dave Hansen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     

13 May, 2017

1 commit

  • Commit 1f5307b1e094 ("mm, vmalloc: properly track vmalloc users") has
    pulled asm/pgtable.h include dependency to linux/vmalloc.h and that
    turned out to be a bad idea for some architectures. E.g. m68k fails
    with

    In file included from arch/m68k/include/asm/pgtable_mm.h:145:0,
    from arch/m68k/include/asm/pgtable.h:4,
    from include/linux/vmalloc.h:9,
    from arch/m68k/kernel/module.c:9:
    arch/m68k/include/asm/mcf_pgtable.h: In function 'nocache_page':
    >> arch/m68k/include/asm/mcf_pgtable.h:339:43: error: 'init_mm' undeclared (first use in this function)
    #define pgd_offset_k(address) pgd_offset(&init_mm, address)

    as spotted by kernel build bot. nios2 fails for other reason

    In file included from include/asm-generic/io.h:767:0,
    from arch/nios2/include/asm/io.h:61,
    from include/linux/io.h:25,
    from arch/nios2/include/asm/pgtable.h:18,
    from include/linux/mm.h:70,
    from include/linux/pid_namespace.h:6,
    from include/linux/ptrace.h:9,
    from arch/nios2/include/uapi/asm/elf.h:23,
    from arch/nios2/include/asm/elf.h:22,
    from include/linux/elf.h:4,
    from include/linux/module.h:15,
    from init/main.c:16:
    include/linux/vmalloc.h: In function '__vmalloc_node_flags':
    include/linux/vmalloc.h:99:40: error: 'PAGE_KERNEL' undeclared (first use in this function); did you mean 'GFP_KERNEL'?

    which is due to the newly added #include , which on nios2
    includes and thus and which
    again includes .

    Tweaking that around just turns out a bigger headache than necessary.
    This patch reverts 1f5307b1e094 and reimplements the original fix in a
    different way. __vmalloc_node_flags can stay static inline which will
    cover vmalloc* functions. We only have one external user
    (kvmalloc_node) and we can export __vmalloc_node_flags_caller and
    provide the caller directly. This is much simpler and it doesn't really
    need any games with header files.

    [akpm@linux-foundation.org: coding-style fixes]
    [mhocko@kernel.org: revert old comment]
    Link: http://lkml.kernel.org/r/20170509211054.GB16325@dhcp22.suse.cz
    Fixes: 1f5307b1e094 ("mm, vmalloc: properly track vmalloc users")
    Link: http://lkml.kernel.org/r/20170509153702.GR6481@dhcp22.suse.cz
    Signed-off-by: Michal Hocko
    Cc: Tobias Klauser
    Cc: Geert Uytterhoeven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

12 May, 2017

1 commit

  • Pull more arm64 updates from Catalin Marinas:

    - Silence module allocation failures when CONFIG_ARM*_MODULE_PLTS is
    enabled. This requires a check for __GFP_NOWARN in alloc_vmap_area()

    - Improve/sanitise user tagged pointers handling in the kernel

    - Inline asm fixes/cleanups

    * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
    arm64: Silence first allocation with CONFIG_ARM64_MODULE_PLTS=y
    ARM: Silence first allocation with CONFIG_ARM_MODULE_PLTS=y
    mm: Silence vmap() allocation failures based on caller gfp_flags
    arm64: uaccess: suppress spurious clang warning
    arm64: atomic_lse: match asm register sizes
    arm64: armv8_deprecated: ensure extension of addr
    arm64: uaccess: ensure extension of access_ok() addr
    arm64: ensure extension of smp_store_release value
    arm64: xchg: hazard against entire exchange variable
    arm64: documentation: document tagged pointer stack constraints
    arm64: entry: improve data abort handling of tagged pointers
    arm64: hw_breakpoint: fix watchpoint matching for tagged pointers
    arm64: traps: fix userspace cache maintenance emulation on a tagged pointer

    Linus Torvalds
     

11 May, 2017

1 commit

  • If the caller has set __GFP_NOWARN don't print the following message:
    vmap allocation for size 15736832 failed: use vmalloc= to increase
    size.

    This can happen with the ARM/Linux or ARM64/Linux module loader built
    with CONFIG_ARM{,64}_MODULE_PLTS=y which does a first attempt at loading
    a large module from module space, then falls back to vmalloc space.

    Acked-by: Michal Hocko
    Signed-off-by: Florian Fainelli
    Signed-off-by: Catalin Marinas

    Florian Fainelli
     

09 May, 2017

3 commits

  • __vmalloc* allows users to provide gfp flags for the underlying
    allocation. This API is quite popular

    $ git grep "=[[:space:]]__vmalloc\|return[[:space:]]*__vmalloc" | wc -l
    77

    The only problem is that many people are not aware that they really want
    to give __GFP_HIGHMEM along with other flags because there is really no
    reason to consume precious lowmemory on CONFIG_HIGHMEM systems for pages
    which are mapped to the kernel vmalloc space. About half of users don't
    use this flag, though. This signals that we make the API unnecessarily
    too complex.

    This patch simply uses __GFP_HIGHMEM implicitly when allocating pages to
    be mapped to the vmalloc space. Current users which add __GFP_HIGHMEM
    are simplified and drop the flag.

    Link: http://lkml.kernel.org/r/20170307141020.29107-1-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Reviewed-by: Matthew Wilcox
    Cc: Al Viro
    Cc: Vlastimil Babka
    Cc: David Rientjes
    Cc: Cristopher Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     
  • __vmalloc_node_flags used to be static inline but this has changed by
    "mm: introduce kv[mz]alloc helpers" because kvmalloc_node needs to use
    it as well and the code is outside of the vmalloc proper. I haven't
    realized that changing this will lead to a subtle bug though. The
    function is responsible to track the caller as well. This caller is
    then printed by /proc/vmallocinfo. If __vmalloc_node_flags is not
    inline then we would get only direct users of __vmalloc_node_flags as
    callers (e.g. v[mz]alloc) which reduces usefulness of this debugging
    feature considerably. It simply doesn't help to see that the given
    range belongs to vmalloc as a caller:

    0xffffc90002c79000-0xffffc90002c7d000 16384 vmalloc+0x16/0x18 pages=3 vmalloc N0=3
    0xffffc90002c81000-0xffffc90002c85000 16384 vmalloc+0x16/0x18 pages=3 vmalloc N1=3
    0xffffc90002c8d000-0xffffc90002c91000 16384 vmalloc+0x16/0x18 pages=3 vmalloc N1=3
    0xffffc90002c95000-0xffffc90002c99000 16384 vmalloc+0x16/0x18 pages=3 vmalloc N1=3

    We really want to catch the _caller_ of the vmalloc function. Fix this
    issue by making __vmalloc_node_flags static inline again.

    Link: http://lkml.kernel.org/r/20170502134657.12381-1-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Cc: Vlastimil Babka
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     
  • Patch series "kvmalloc", v5.

    There are many open coded kmalloc with vmalloc fallback instances in the
    tree. Most of them are not careful enough or simply do not care about
    the underlying semantic of the kmalloc/page allocator which means that
    a) some vmalloc fallbacks are basically unreachable because the kmalloc
    part will keep retrying until it succeeds b) the page allocator can
    invoke a really disruptive steps like the OOM killer to move forward
    which doesn't sound appropriate when we consider that the vmalloc
    fallback is available.

    As it can be seen implementing kvmalloc requires quite an intimate
    knowledge if the page allocator and the memory reclaim internals which
    strongly suggests that a helper should be implemented in the memory
    subsystem proper.

    Most callers, I could find, have been converted to use the helper
    instead. This is patch 6. There are some more relying on __GFP_REPEAT
    in the networking stack which I have converted as well and Eric Dumazet
    was not opposed [2] to convert them as well.

    [1] http://lkml.kernel.org/r/20170130094940.13546-1-mhocko@kernel.org
    [2] http://lkml.kernel.org/r/1485273626.16328.301.camel@edumazet-glaptop3.roam.corp.google.com

    This patch (of 9):

    Using kmalloc with the vmalloc fallback for larger allocations is a
    common pattern in the kernel code. Yet we do not have any common helper
    for that and so users have invented their own helpers. Some of them are
    really creative when doing so. Let's just add kv[mz]alloc and make sure
    it is implemented properly. This implementation makes sure to not make
    a large memory pressure for > PAGE_SZE requests (__GFP_NORETRY) and also
    to not warn about allocation failures. This also rules out the OOM
    killer as the vmalloc is a more approapriate fallback than a disruptive
    user visible action.

    This patch also changes some existing users and removes helpers which
    are specific for them. In some cases this is not possible (e.g.
    ext4_kvmalloc, libcfs_kvzalloc) because those seems to be broken and
    require GFP_NO{FS,IO} context which is not vmalloc compatible in general
    (note that the page table allocation is GFP_KERNEL). Those need to be
    fixed separately.

    While we are at it, document that __vmalloc{_node} about unsupported gfp
    mask because there seems to be a lot of confusion out there.
    kvmalloc_node will warn about GFP_KERNEL incompatible (which are not
    superset) flags to catch new abusers. Existing ones would have to die
    slowly.

    [sfr@canb.auug.org.au: f2fs fixup]
    Link: http://lkml.kernel.org/r/20170320163735.332e64b7@canb.auug.org.au
    Link: http://lkml.kernel.org/r/20170306103032.2540-2-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Signed-off-by: Stephen Rothwell
    Reviewed-by: Andreas Dilger [ext4 part]
    Acked-by: Vlastimil Babka
    Cc: John Hubbard
    Cc: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

03 May, 2017

1 commit

  • Pull documentation update from Jonathan Corbet:
    "A reasonably busy cycle for documentation this time around. There is a
    new guide for user-space API documents, rather sparsely populated at
    the moment, but it's a start. Markus improved the infrastructure for
    converting diagrams. Mauro has converted much of the USB documentation
    over to RST. Plus the usual set of fixes, improvements, and tweaks.

    There's a bit more than the usual amount of reaching out of
    Documentation/ to fix comments elsewhere in the tree; I have acks for
    those where I could get them"

    * tag 'docs-4.12' of git://git.lwn.net/linux: (74 commits)
    docs: Fix a couple typos
    docs: Fix a spelling error in vfio-mediated-device.txt
    docs: Fix a spelling error in ioctl-number.txt
    MAINTAINERS: update file entry for HSI subsystem
    Documentation: allow installing man pages to a user defined directory
    Doc/PM: Sync with intel_powerclamp code behavior
    zr364xx.rst: usb/devices is now at /sys/kernel/debug/
    usb.rst: move documentation from proc_usb_info.txt to USB ReST book
    convert philips.txt to ReST and add to media docs
    docs-rst: usb: update old usbfs-related documentation
    arm: Documentation: update a path name
    docs: process/4.Coding.rst: Fix a couple of document refs
    docs-rst: fix usb cross-references
    usb: gadget.h: be consistent at kernel doc macros
    usb: composite.h: fix two warnings when building docs
    usb: get rid of some ReST doc build errors
    usb.rst: get rid of some Sphinx errors
    usb/URB.txt: convert to ReST and update it
    usb/persist.txt: convert to ReST and add to driver-api book
    usb/hotplug.txt: convert to ReST and add to driver-api book
    ...

    Linus Torvalds
     

03 Apr, 2017

1 commit

  • ./lib/string.c:134: WARNING: Inline emphasis start-string without end-string.
    ./mm/filemap.c:522: WARNING: Inline interpreted text or phrase reference start-string without end-string.
    ./mm/filemap.c:1283: ERROR: Unexpected indentation.
    ./mm/filemap.c:3003: WARNING: Inline interpreted text or phrase reference start-string without end-string.
    ./mm/vmalloc.c:1544: WARNING: Inline emphasis start-string without end-string.
    ./mm/page_alloc.c:4245: ERROR: Unexpected indentation.
    ./ipc/util.c:676: ERROR: Unexpected indentation.
    ./drivers/pci/irq.c:35: WARNING: Block quote ends without a blank line; unexpected unindent.
    ./security/security.c:109: ERROR: Unexpected indentation.
    ./security/security.c:110: WARNING: Definition list ends without a blank line; unexpected unindent.
    ./block/genhd.c:275: WARNING: Inline strong start-string without end-string.
    ./block/genhd.c:283: WARNING: Inline strong start-string without end-string.
    ./include/linux/clk.h:134: WARNING: Inline emphasis start-string without end-string.
    ./include/linux/clk.h:134: WARNING: Inline emphasis start-string without end-string.
    ./ipc/util.c:477: ERROR: Unknown target name: "s".

    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Bjorn Helgaas
    Signed-off-by: Jonathan Corbet

    mchehab@s-opensource.com
     

17 Mar, 2017

1 commit

  • When vmalloc() fails it prints a very lengthy message with all the
    details about memory consumption assuming that it happened due to OOM.

    However, vmalloc() can also fail due to fatal signal pending. In such
    case the message is quite confusing because it suggests that it is OOM
    but the numbers suggest otherwise. The messages can also pollute
    console considerably.

    Don't warn when vmalloc() fails due to fatal signal pending.

    Link: http://lkml.kernel.org/r/20170313114425.72724-1-dvyukov@google.com
    Signed-off-by: Dmitry Vyukov
    Reviewed-by: Matthew Wilcox
    Acked-by: Kirill A. Shutemov
    Acked-by: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dmitry Vyukov
     

10 Mar, 2017

1 commit


03 Mar, 2017

1 commit

  • …sors into <linux/sched/signal.h>

    task_struct::signal and task_struct::sighand are pointers, which would normally make it
    straightforward to not define those types in sched.h.

    That is not so, because the types are accompanied by a myriad of APIs (macros and inline
    functions) that dereference them.

    Split the types and the APIs out of sched.h and move them into a new header, <linux/sched/signal.h>.

    With this change sched.h does not know about 'struct signal' and 'struct sighand' anymore,
    trying to put accessors into sched.h as a test fails the following way:

    ./include/linux/sched.h: In function ‘test_signal_types’:
    ./include/linux/sched.h:2461:18: error: dereferencing pointer to incomplete type ‘struct signal_struct’
    ^

    This reduces the size and complexity of sched.h significantly.

    Update all headers and .c code that relied on getting the signal handling
    functionality from <linux/sched.h> to include <linux/sched/signal.h>.

    The list of affected files in the preparatory patch was partly generated by
    grepping for the APIs, and partly by doing coverage build testing, both
    all[yes|mod|def|no]config builds on 64-bit and 32-bit x86, and an array of
    cross-architecture builds.

    Nevertheless some (trivial) build breakage is still expected related to rare
    Kconfig combinations and in-flight patches to various kernel code, but most
    of it should be handled by this patch.

    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>

    Ingo Molnar
     

25 Feb, 2017

2 commits

  • cleanup rest of dma_addr_t and phys_addr_t type casting in mm
    use %pad for dma_addr_t
    use %pa for phys_addr_t

    Link: http://lkml.kernel.org/r/1486618489-13912-1-git-send-email-miles.chen@mediatek.com
    Signed-off-by: Miles Chen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Miles Chen
     
  • __vmalloc_area_node() allocates pages to cover the requested vmalloc
    size. This can be a lot of memory. If the current task is killed by
    the OOM killer, and thus has an unlimited access to memory reserves, it
    can consume all the memory theoretically. Fix this by checking for
    fatal_signal_pending and back off early.

    Link: http://lkml.kernel.org/r/20170201092706.9966-4-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Reviewed-by: Christoph Hellwig
    Cc: Tetsuo Handa
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

23 Feb, 2017

2 commits

  • warn_alloc is currently used for to report an allocation failure or an
    allocation stall. We print some details of the allocation request like
    the gfp mask and the request order. We do not print the allocation
    nodemask which is important when debugging the reason for the allocation
    failure as well. We alreaddy print the nodemask in the OOM report.

    Add nodemask to warn_alloc and print it in warn_alloc as well.

    Link: http://lkml.kernel.org/r/20170117091543.25850-3-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Acked-by: Mel Gorman
    Acked-by: Hillf Danton
    Cc: Johannes Weiner
    Cc: Vlastimil Babka
    Cc: David Rientjes
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     
  • Use rb_entry_safe() instead of open-coding it.

    Link: http://lkml.kernel.org/r/81bb9820e5b9e4a1c596b3e76f88abf8c4a76cb0.1482221947.git.geliangtang@gmail.com
    Signed-off-by: Geliang Tang
    Acked-by: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Geliang Tang
     

25 Dec, 2016

1 commit


13 Dec, 2016

8 commits

  • Use cond_resched_lock to avoid holding the vmap_area_lock for a
    potentially long time and thus creating bad latencies for various
    workloads.

    [hch: split from a larger patch by Joel, wrote the crappy changelog]
    Link: http://lkml.kernel.org/r/1479474236-4139-11-git-send-email-hch@lst.de
    Signed-off-by: Joel Fernandes
    Signed-off-by: Christoph Hellwig
    Tested-by: Jisheng Zhang
    Cc: Andrey Ryabinin
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joel Fernandes
     
  • The purge_lock spinlock causes high latencies with non RT kernel. This
    has been reported multiple times on lkml [1] [2] and affects
    applications like audio.

    This patch replaces it with a mutex to allow preemption while holding
    the lock.

    Thanks to Joel Fernandes for the detailed report and analysis as well as
    an earlier attempt at fixing this issue.

    [1] http://lists.openwall.net/linux-kernel/2016/03/23/29
    [2] https://lkml.org/lkml/2016/10/9/59

    Link: http://lkml.kernel.org/r/1479474236-4139-10-git-send-email-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Tested-by: Jisheng Zhang
    Cc: Andrey Ryabinin
    Cc: Joel Fernandes
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • We will take a sleeping lock in later in this series, so this adds the
    proper safeguards.

    Link: http://lkml.kernel.org/r/1479474236-4139-9-git-send-email-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Tested-by: Jisheng Zhang
    Cc: Andrey Ryabinin
    Cc: Joel Fernandes
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • We are going to use sleeping lock for freeing vmap. However some
    vfree() users want to free memory from atomic (but not from interrupt)
    context. For this we add vfree_atomic() - deferred variation of vfree()
    which can be used in any atomic context (except NMIs).

    [akpm@linux-foundation.org: tweak comment grammar]
    [aryabinin@virtuozzo.com: use raw_cpu_ptr() instead of this_cpu_ptr()]
    Link: http://lkml.kernel.org/r/1481553981-3856-1-git-send-email-aryabinin@virtuozzo.com
    Link: http://lkml.kernel.org/r/1479474236-4139-5-git-send-email-hch@lst.de
    Signed-off-by: Andrey Ryabinin
    Signed-off-by: Christoph Hellwig
    Cc: Joel Fernandes
    Cc: Jisheng Zhang
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrey Ryabinin
     
  • Move the purge_lock synchronization to the callers, move the call to
    purge_fragmented_blocks_allcpus at the beginning of the function to the
    callers that need it, move the force_flush behavior to the caller that
    needs it, and pass start and end by value instead of by reference.

    No change in behavior.

    Link: http://lkml.kernel.org/r/1479474236-4139-4-git-send-email-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Tested-by: Jisheng Zhang
    Cc: Andrey Ryabinin
    Cc: Joel Fernandes
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Just inline it into the only caller.

    Link: http://lkml.kernel.org/r/1479474236-4139-3-git-send-email-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Tested-by: Jisheng Zhang
    Cc: Andrey Ryabinin
    Cc: Joel Fernandes
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Patch series "reduce latency in __purge_vmap_area_lazy", v2.

    This patch (of 10):

    Sort out the long lock hold times in __purge_vmap_area_lazy. It is
    based on a patch from Joel.

    Inline free_unmap_vmap_area_noflush() it into the only caller.

    Link: http://lkml.kernel.org/r/1479474236-4139-2-git-send-email-hch@lst.de
    Signed-off-by: Christoph Hellwig
    Tested-by: Jisheng Zhang
    Cc: Andrey Ryabinin
    Cc: Joel Fernandes
    Cc: Chris Wilson
    Cc: John Dias
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Hellwig
     
  • Many seq_file helpers exist for simplifying implementation of virtual
    files especially, for /proc nodes. however, the helpers for iteration
    over list_head are available but aren't adopted to implement
    /proc/vmallocinfo currently.

    Simplify /proc/vmallocinfo implementation by using existing seq_file
    helpers.

    Link: http://lkml.kernel.org/r/57FDF2E5.1000201@zoho.com
    Signed-off-by: zijun_hu
    Acked-by: Michal Hocko
    Cc: David Rientjes
    Cc: Tejun Heo
    Cc: Ingo Molnar
    Cc: Joonsoo Kim
    Cc: Stephen Rothwell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    zijun_hu
     

08 Oct, 2016

2 commits

  • warn_alloc_failed is currently used from the page and vmalloc
    allocators. This is a good reuse of the code except that vmalloc would
    appreciate a slightly different warning message. This is already
    handled by the fmt parameter except that

    "%s: page allocation failure: order:%u, mode:%#x(%pGg)"

    is printed anyway. This might be quite misleading because it might be a
    vmalloc failure which leads to the warning while the page allocator is
    not the culprit here. Fix this by always using the fmt string and only
    print the context that makes sense for the particular context (e.g.
    order makes only very little sense for the vmalloc context).

    Rename the function to not miss any user and also because a later patch
    will reuse it also for !failure cases.

    Link: http://lkml.kernel.org/r/20160929084407.7004-2-mhocko@kernel.org
    Signed-off-by: Michal Hocko
    Acked-by: Vlastimil Babka
    Cc: Tetsuo Handa
    Cc: Johannes Weiner
    Cc: Mel Gorman
    Cc: Dave Hansen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     
  • It causes double align requirement for __get_vm_area_node() if parameter
    size is power of 2 and VM_IOREMAP is set in parameter flags, for example
    size=0x10000 -> fls_long(0x10000)=17 -> align=0x20000

    get_count_order_long() is implemented and can be used instead of
    fls_long() for fixing the bug, for example size=0x10000 ->
    get_count_order_long(0x10000)=16 -> align=0x10000

    [akpm@linux-foundation.org: s/get_order_long()/get_count_order_long()/]
    [zijun_hu@zoho.com: fixes]
    Link: http://lkml.kernel.org/r/57AABC8B.1040409@zoho.com
    [akpm@linux-foundation.org: locate get_count_order_long() next to get_count_order()]
    [akpm@linux-foundation.org: move get_count_order[_long] definitions to pick up fls_long()]
    [zijun_hu@htc.com: move out get_count_order[_long]() from __KERNEL__ scope]
    Link: http://lkml.kernel.org/r/57B2C4CE.80303@zoho.com
    Link: http://lkml.kernel.org/r/fc045ecf-20fa-0722-b3ac-9a6140488fad@zoho.com
    Signed-off-by: zijun_hu
    Cc: Tejun Heo
    Cc: Johannes Weiner
    Cc: Minchan Kim
    Cc: David Rientjes
    Signed-off-by: zijun_hu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    zijun_hu
     

27 Jul, 2016

1 commit

  • Currently, to charge a non-slab allocation to kmemcg one has to use
    alloc_kmem_pages helper with __GFP_ACCOUNT flag. A page allocated with
    this helper should finally be freed using free_kmem_pages, otherwise it
    won't be uncharged.

    This API suits its current users fine, but it turns out to be impossible
    to use along with page reference counting, i.e. when an allocation is
    supposed to be freed with put_page, as it is the case with pipe or unix
    socket buffers.

    To overcome this limitation, this patch moves charging/uncharging to
    generic page allocator paths, i.e. to __alloc_pages_nodemask and
    free_pages_prepare, and zaps alloc/free_kmem_pages helpers. This way,
    one can use any of the available page allocation functions to get the
    allocated page charged to kmemcg - it's enough to pass __GFP_ACCOUNT,
    just like in case of kmalloc and friends. A charged page will be
    automatically uncharged on free.

    To make it possible, we need to mark pages charged to kmemcg somehow.
    To avoid introducing a new page flag, we make use of page->_mapcount for
    marking such pages. Since pages charged to kmemcg are not supposed to
    be mapped to userspace, it should work just fine. There are other
    (ab)users of page->_mapcount - buddy and balloon pages - but we don't
    conflict with them.

    In case kmemcg is compiled out or not used at runtime, this patch
    introduces no overhead to generic page allocator paths. If kmemcg is
    used, it will be plus one gfp flags check on alloc and plus one
    page->_mapcount check on free, which shouldn't hurt performance, because
    the data accessed are hot.

    Link: http://lkml.kernel.org/r/a9736d856f895bcb465d9f257b54efe32eda6f99.1464079538.git.vdavydov@virtuozzo.com
    Signed-off-by: Vladimir Davydov
    Cc: Johannes Weiner
    Cc: Michal Hocko
    Cc: Eric Dumazet
    Cc: Minchan Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vladimir Davydov
     

04 Jun, 2016

1 commit

  • When remapping pages accounting for 4G or more memory space, the
    operation 'count << PAGE_SHIFT' overflows as it is performed on an
    integer. Solution: cast before doing the bitshift.

    [akpm@linux-foundation.org: fix vm_unmap_ram() also]
    [akpm@linux-foundation.org: fix vmap() as well, per Guillermo]
    Link: http://lkml.kernel.org/r/etPan.57175fb3.7a271c6b.2bd@naudit.es
    Signed-off-by: Guillermo Julián Moreno
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Guillermo Julián Moreno
     

24 May, 2016

1 commit

  • Pull drm updates from Dave Airlie:
    "Here's the main drm pull request for 4.7, it's been a busy one, and
    I've been a bit more distracted in real life this merge window. Lots
    more ARM drivers, not sure if it'll ever end. I think I've at least
    one more coming the next merge window.

    But changes are all over the place, support for AMD Polaris GPUs is in
    here, some missing GM108 support for nouveau (found in some Lenovos),
    a bunch of MST and skylake fixes.

    I've also noticed a few fixes from Arnd in my inbox, that I'll try and
    get in asap, but I didn't think they should hold this up.

    New drivers:
    - Hisilicon kirin display driver
    - Mediatek MT8173 display driver
    - ARC PGU - bitstreamer on Synopsys ARC SDP boards
    - Allwinner A13 initial RGB output driver
    - Analogix driver for DisplayPort IP found in exynos and rockchip

    DRM Core:
    - UAPI headers fixes and C++ safety
    - DRM connector reference counting
    - DisplayID mode parsing for Dell 5K monitors
    - Removal of struct_mutex from drivers
    - Connector registration cleanups
    - MST robustness fixes
    - MAINTAINERS updates
    - Lockless GEM object freeing
    - Generic fbdev deferred IO support

    panel:
    - Support for a bunch of new panels

    i915:
    - VBT refactoring
    - PLL computation cleanups
    - DSI support for BXT
    - Color manager support
    - More atomic patches
    - GEM improvements
    - GuC fw loading fixes
    - DP detection fixes
    - SKL GPU hang fixes
    - Lots of BXT fixes

    radeon/amdgpu:
    - Initial Polaris support
    - GPUVM/Scheduler/Clock/Power improvements
    - ASYNC pageflip support
    - New mesa feature support

    nouveau:
    - GM108 support
    - Power sensor support improvements
    - GR init + ucode fixes.
    - Use GPU provided topology information

    vmwgfx:
    - Add host messaging support

    gma500:
    - Some cleanups and fixes

    atmel:
    - Bridge support
    - Async atomic commit support

    fsl-dcu:
    - Timing controller for LCD support
    - Pixel clock polarity support

    rcar-du:
    - Misc fixes

    exynos:
    - Pipeline clock support
    - Exynoss4533 SoC support
    - HW trigger mode support
    - export HDMI_PHY clock
    - DECON5433 fixes
    - Use generic prime functions
    - use DMA mapping APIs

    rockchip:
    - Lots of little fixes

    vc4:
    - Render node support
    - Gamma ramp support
    - DPI output support

    msm:
    - Mostly cleanups and fixes
    - Conversion to generic struct fence

    etnaviv:
    - Fix for prime buffer handling
    - Allow hangcheck to be coalesced with other wakeups

    tegra:
    - Gamme table size fix"

    * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (1050 commits)
    drm/edid: add displayid detailed 1 timings to the modelist. (v1.1)
    drm/edid: move displayid validation to it's own function.
    drm/displayid: Iterate over all DisplayID blocks
    drm/edid: move displayid tiled block parsing into separate function.
    drm: Nuke ->vblank_disable_allowed
    drm/vmwgfx: Report vmwgfx version to vmware.log
    drm/vmwgfx: Add VMWare host messaging capability
    drm/vmwgfx: Kill some lockdep warnings
    drm/nouveau/gr/gf100-: fix race condition in fecs/gpccs ucode
    drm/nouveau/core: recognise GM108 chipsets
    drm/nouveau/gr/gm107-: fix touching non-existent ppcs in attrib cb setup
    drm/nouveau/gr/gk104-: share implementation of ppc exception init
    drm/nouveau/gr/gk104-: move rop_active_fbps init to nonctx
    drm/nouveau/bios/pll: check BIT table version before trying to parse it
    drm/nouveau/bios/pll: prevent oops when limits table can't be parsed
    drm/nouveau/volt/gk104: round up in gk104_volt_set
    drm/nouveau/fb/gm200: setup mmu debug buffer registers at init()
    drm/nouveau/fb/gk20a,gm20b: setup mmu debug buffer registers at init()
    drm/nouveau/fb/gf100-: allocate mmu debug buffers
    drm/nouveau/fb: allow chipset-specific actions for oneinit()
    ...

    Linus Torvalds
     

21 May, 2016

1 commit

  • When mixing lots of vmallocs and set_memory_*() (which calls
    vm_unmap_aliases()) I encountered situations where the performance
    degraded severely due to the walking of the entire vmap_area list each
    invocation.

    One simple improvement is to add the lazily freed vmap_area to a
    separate lockless free list, such that we then avoid having to walk the
    full list on each purge.

    Signed-off-by: Chris Wilson
    Reviewed-by: Roman Pen
    Cc: Joonas Lahtinen
    Cc: Tvrtko Ursulin
    Cc: Daniel Vetter
    Cc: David Rientjes
    Cc: Joonsoo Kim
    Cc: Roman Pen
    Cc: Mel Gorman
    Cc: Toshi Kani
    Cc: Shawn Lin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Wilson