Skip to content
  1. May 09, 2017
    • Michal Hocko's avatar
      mm, vmalloc: use __GFP_HIGHMEM implicitly · 19809c2d
      Michal Hocko authored
      
      
      __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: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: default avatarMatthew Wilcox <mawilcox@microsoft.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Cristopher Lameter <cl@linux.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      19809c2d
    • Huang Ying's avatar
      mm, swap: use kvzalloc to allocate some swap data structures · 54f180d3
      Huang Ying authored
      
      
      Now vzalloc() is used in swap code to allocate various data structures,
      such as swap cache, swap slots cache, cluster info, etc.  Because the
      size may be too large on some system, so that normal kzalloc() may fail.
      But using kzalloc() has some advantages, for example, less memory
      fragmentation, less TLB pressure, etc.  So change the data structure
      allocation in swap code to use kvzalloc() which will try kzalloc()
      firstly, and fallback to vzalloc() if kzalloc() failed.
      
      In general, although kmalloc() will reduce the number of high-order
      pages in short term, vmalloc() will cause more pain for memory
      fragmentation in the long term.  And the swap data structure allocation
      that is changed in this patch is expected to be long term allocation.
      
      From Dave Hansen:
       "for example, we have a two-page data structure. vmalloc() takes two
        effectively random order-0 pages, probably from two different 2M pages
        and pins them. That "kills" two 2M pages. kmalloc(), allocating two
        *contiguous* pages, will not cross a 2M boundary. That means it will
        only "kill" the possibility of a single 2M page. More 2M pages == less
        fragmentation.
      
      The allocation in this patch occurs during swap on time, which is
      usually done during system boot, so usually we have high opportunity to
      allocate the contiguous pages successfully.
      
      The allocation for swap_map[] in struct swap_info_struct is not changed,
      because that is usually quite large and vmalloc_to_page() is used for
      it.  That makes it a little harder to change.
      
      Link: http://lkml.kernel.org/r/20170407064911.25447-1-ying.huang@intel.com
      Signed-off-by: default avatarHuang Ying <ying.huang@intel.com>
      Acked-by: default avatarTim Chen <tim.c.chen@intel.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarRik van Riel <riel@redhat.com>
      Cc: Dave Hansen <dave.hansen@intel.com>
      Cc: Hugh Dickins <hughd@google.com>
      Cc: Shaohua Li <shli@kernel.org>
      Cc: Minchan Kim <minchan@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      54f180d3
    • Michal Hocko's avatar
      drivers/md/bcache/super.c: use kvmalloc · bc4e54f6
      Michal Hocko authored
      
      
      bcache_device_init uses kmalloc for small requests and vmalloc for those
      which are larger than 64 pages.  This alone is a strange criterion.
      Moreover kmalloc can fallback to vmalloc on the failure.  Let's simply
      use kvmalloc instead as it knows how to handle the fallback properly
      
      Link: http://lkml.kernel.org/r/20170306103327.2766-5-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Kent Overstreet <kent.overstreet@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      bc4e54f6
    • Michal Hocko's avatar
      drivers/md/dm-ioctl.c: use kvmalloc rather than opencoded variant · d224e938
      Michal Hocko authored
      
      
      copy_params uses kmalloc with vmalloc fallback.  We already have a
      helper for that - kvmalloc.  This caller requires GFP_NOIO semantic so
      it hasn't been converted with many others by previous patches.  All we
      need to achieve this semantic is to use the scope
      memalloc_noio_{save,restore} around kvmalloc.
      
      Link: http://lkml.kernel.org/r/20170306103327.2766-4-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Mikulas Patocka <mpatocka@redhat.com>
      Cc: Mike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d224e938
    • Michal Hocko's avatar
      net: use kvmalloc with __GFP_REPEAT rather than open coded variant · da6bc57a
      Michal Hocko authored
      
      
      fq_alloc_node, alloc_netdev_mqs and netif_alloc* open code kmalloc with
      vmalloc fallback.  Use the kvmalloc variant instead.  Keep the
      __GFP_REPEAT flag based on explanation from Eric:
      
       "At the time, tests on the hardware I had in my labs showed that
        vmalloc() could deliver pages spread all over the memory and that was
        a small penalty (once memory is fragmented enough, not at boot time)"
      
      The way how the code is constructed means, however, that we prefer to go
      and hit the OOM killer before we fall back to the vmalloc for requests
      <=32kB (with 4kB pages) in the current code.  This is rather disruptive
      for something that can be achived with the fallback.  On the other hand
      __GFP_REPEAT doesn't have any useful semantic for these requests.  So
      the effect of this patch is that requests which fit into 32kB will fall
      back to vmalloc easier now.
      
      Link: http://lkml.kernel.org/r/20170306103327.2766-3-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: David Miller <davem@davemloft.net>
      Cc: Shakeel Butt <shakeelb@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      da6bc57a
    • Michal Hocko's avatar
      treewide: use kv[mz]alloc* rather than opencoded variants · 752ade68
      Michal Hocko authored
      
      
      There are many code paths opencoding kvmalloc.  Let's use the helper
      instead.  The main difference to kvmalloc is that those users are
      usually not considering all the aspects of the memory allocator.  E.g.
      allocation requests <= 32kB (with 4kB pages) are basically never failing
      and invoke OOM killer to satisfy the allocation.  This sounds too
      disruptive for something that has a reasonable fallback - the vmalloc.
      On the other hand those requests might fallback to vmalloc even when the
      memory allocator would succeed after several more reclaim/compaction
      attempts previously.  There is no guarantee something like that happens
      though.
      
      This patch converts many of those places to kv[mz]alloc* helpers because
      they are more conservative.
      
      Link: http://lkml.kernel.org/r/20170306103327.2766-2-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> # Xen bits
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: Andreas Dilger <andreas.dilger@intel.com> # Lustre
      Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> # KVM/s390
      Acked-by: Dan Williams <dan.j.williams@intel.com> # nvdim
      Acked-by: David Sterba <dsterba@suse.com> # btrfs
      Acked-by: Ilya Dryomov <idryomov@gmail.com> # Ceph
      Acked-by: Tariq Toukan <tariqt@mellanox.com> # mlx4
      Acked-by: Leon Romanovsky <leonro@mellanox.com> # mlx5
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Cc: Anton Vorontsov <anton@enomsg.org>
      Cc: Colin Cross <ccross@android.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
      Cc: Ben Skeggs <bskeggs@redhat.com>
      Cc: Kent Overstreet <kent.overstreet@gmail.com>
      Cc: Santosh Raspatur <santosh@chelsio.com>
      Cc: Hariprasad S <hariprasad@chelsio.com>
      Cc: Yishai Hadas <yishaih@mellanox.com>
      Cc: Oleg Drokin <oleg.drokin@intel.com>
      Cc: "Yan, Zheng" <zyan@redhat.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      752ade68
    • Michal Hocko's avatar
      fs/xattr.c: zero out memory copied to userspace in getxattr · 81be3dee
      Michal Hocko authored
      getxattr uses vmalloc to allocate memory if kzalloc fails.  This is
      filled by vfs_getxattr and then copied to the userspace.  vmalloc,
      however, doesn't zero out the memory so if the specific implementation
      of the xattr handler is sloppy we can theoretically expose a kernel
      memory.  There is no real sign this is really the case but let's make
      sure this will not happen and use vzalloc instead.
      
      Fixes: 779302e6
      
       ("fs/xattr.c:getxattr(): improve handling of allocation failures")
      Link: http://lkml.kernel.org/r/20170306103327.2766-1-mhocko@kernel.org
      Acked-by: default avatarKees Cook <keescook@chromium.org>
      Reported-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: <stable@vger.kernel.org>	[3.6+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      81be3dee
    • Michal Hocko's avatar
      net/ipv6/ila/ila_xlat.c: simplify a strange allocation pattern · 847f716f
      Michal Hocko authored
      
      
      alloc_ila_locks seemed to c&p from alloc_bucket_locks allocation pattern
      which is quite unusual.  The default allocation size is 320 *
      sizeof(spinlock_t) which is sub page unless lockdep is enabled when the
      performance benefit is really questionable and not worth the subtle code
      IMHO.  Also note that the context when we call ila_init_net (modprobe or
      a task creating a net namespace) has to be properly configured.
      
      Let's just simplify the code and use kvmalloc helper which is a
      transparent way to use kmalloc with vmalloc fallback.
      
      Link: http://lkml.kernel.org/r/20170306103032.2540-5-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Tom Herbert <tom@herbertland.com>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      847f716f
    • Michal Hocko's avatar
      lib/rhashtable.c: simplify a strange allocation pattern · 43ca5bc4
      Michal Hocko authored
      
      
      alloc_bucket_locks allocation pattern is quite unusual.  We are
      preferring vmalloc when CONFIG_NUMA is enabled.  The rationale is that
      vmalloc will respect the memory policy of the current process and so the
      backing memory will get distributed over multiple nodes if the requester
      is configured properly.  At least that is the intention, in reality
      rhastable is shrunk and expanded from a kernel worker so no mempolicy
      can be assumed.
      
      Let's just simplify the code and use kvmalloc helper, which is a
      transparent way to use kmalloc with vmalloc fallback, if the caller is
      allowed to block and use the flag otherwise.
      
      Link: http://lkml.kernel.org/r/20170306103032.2540-4-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: Tom Herbert <tom@herbertland.com>
      Cc: Eric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      43ca5bc4
    • Michal Hocko's avatar
      mm: support __GFP_REPEAT in kvmalloc_node for >32kB · 6c5ab651
      Michal Hocko authored
      vhost code uses __GFP_REPEAT when allocating vhost_virtqueue resp.
      vhost_vsock because it would really like to prefer kmalloc to the
      vmalloc fallback - see 23cc5a99
      
       ("vhost-net: extend device
      allocation to vmalloc") for more context.  Michael Tsirkin has also
      noted:
      
       "__GFP_REPEAT overhead is during allocation time. Using vmalloc means
        all accesses are slowed down. Allocation is not on data path, accesses
        are."
      
      The similar applies to other vhost_kvzalloc users.
      
      Let's teach kvmalloc_node to handle __GFP_REPEAT properly.  There are
      two things to be careful about.  First we should prevent from the OOM
      killer and so have to involve __GFP_NORETRY by default and secondly
      override __GFP_REPEAT for !costly order requests as the __GFP_REPEAT is
      ignored for !costly orders.
      
      Supporting __GFP_REPEAT like semantic for !costly request is possible it
      would require changes in the page allocator.  This is out of scope of
      this patch.
      
      This patch shouldn't introduce any functional change.
      
      Link: http://lkml.kernel.org/r/20170306103032.2540-3-mhocko@kernel.org
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6c5ab651
    • Michal Hocko's avatar
      mm, vmalloc: properly track vmalloc users · 1f5307b1
      Michal Hocko authored
      
      
      __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: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1f5307b1
    • Michal Hocko's avatar
      mm: introduce kv[mz]alloc helpers · a7c3e901
      Michal Hocko authored
      
      
      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: default avatarMichal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
      Reviewed-by: Andreas Dilger <adilger@dilger.ca>	[ext4 part]
      Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
      Cc: John Hubbard <jhubbard@nvidia.com>
      Cc: David Miller <davem@davemloft.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a7c3e901
    • Davidlohr Bueso's avatar
      sysv,ipc: cacheline align kern_ipc_perm · 60f3e00d
      Davidlohr Bueso authored
      Assign 'struct kern_ipc_perm' its own cacheline to avoid false sharing
      with sysv ipc calls.
      
      While the structure itself is rather read-mostly throughout the lifespan
      of ipc, the spinlock causes most of the invalidations.  One example is
      commit 31a7c474
      
       ("ipc/sem.c: cacheline align the ipc spinlock for
      semaphores").  Therefore, extend this to all ipc.
      
      The effect of cacheline alignment on sems can be seen in sembench, which
      deals mostly with semtimedop wait/wakes is seen to improve raw
      throughput (worker loops) between 8 to 12% on a 24-core x86 with over 4
      threads.
      
      Link: http://lkml.kernel.org/r/1486673582-6979-4-git-send-email-dave@stgolabs.net
      Signed-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
      Cc: Manfred Spraul <manfred@colorfullife.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      60f3e00d
    • Davidlohr Bueso's avatar
      ipc/shm: some shmat cleanups · f0cb8802
      Davidlohr Bueso authored
      
      
      Clean up early flag and address some minutia.
      
      Link: http://lkml.kernel.org/r/1486673582-6979-3-git-send-email-dave@stgolabs.net
      Signed-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
      Cc: Manfred Spraul <manfred@colorfullife.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f0cb8802
    • Arnd Bergmann's avatar
      initramfs: use vfs_stat/lstat directly · 046aa126
      Arnd Bergmann authored
      
      
      sys_newlstat is a system call implementation that is meant for user
      space, and that copies kernel-internal data structure to the user
      format, which is not needed for in-kernel users.
      
      Further, as we rearrange the system call implementation so we can extend
      it with 64-bit time_t, the prototype for sys_newlstat changes.
      
      This changes the initramfs code to use vfs_lstat directly, to get it out
      of the way of the time_t changes, and make it slightly more efficient in
      the process.  Along the same lines we also replace sys_stat and
      sys_stat64 with vfs_stat.
      
      Link: http://lkml.kernel.org/r/20170314214932.4052842-1-arnd@arndb.de
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      046aa126
    • Daniel Thompson's avatar
      initramfs: provide a way to ignore image provided by bootloader · cff75e0b
      Daniel Thompson authored
      
      
      Many "embedded" architectures provide CMDLINE_FORCE to allow the kernel
      to override the command line provided by an inflexible bootloader.
      However there is currrently no way for the kernel to override the
      initramfs image provided by the bootloader meaning there are still ways
      for bootloaders to make things difficult for us.
      
      Fix this by introducing INITRAMFS_FORCE which can prevent the kernel
      from loading the bootloader supplied image.
      
      We use CMDLINE_FORCE (and its friend CMDLINE_EXTEND) to imply that the
      system has an inflexible bootloader.  This allow us to avoid presenting
      this config option to users of systems where inflexible bootloaders
      aren't usually a problem.
      
      Link: http://lkml.kernel.org/r/20170217121940.30126-1-daniel.thompson@linaro.org
      Signed-off-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@l...>
      cff75e0b
    • Guenter Roeck's avatar
      lib/zlib_inflate/inftrees.c: fix potential buffer overflow · da5e108b
      Guenter Roeck authored
      
      
      smatch says:
      
        WARNING: please, no spaces at the start of a line
        #30: FILE: lib/zlib_inflate/inftrees.c:112:
        +    for (min = 1; min < MAXBITS; min++)$
      
        total: 0 errors, 1 warnings, 8 lines checked
      
      NOTE: For some of the reported defects, checkpatch may be able to
            mechanically convert to the typical style using --fix or --fix-inplace.
      
      ./patches/zlib-inflate-fix-potential-buffer-overflow.patch has style problems, please review.
      
      NOTE: If any of the errors are false positives, please report
            them to the maintainer, see CHECKPATCH in MAINTAINERS.
      
      Please run checkpatch prior to sending patches
      
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      da5e108b
    • Dmitry Vyukov's avatar
      lib/fault-inject.c: use correct check for interrupts · f2ad37da
      Dmitry Vyukov authored
      
      
      in_interrupt() also returns true when bh is disabled in task context.
      That's not what fail_task() wants to check.  Use the new in_task()
      predicate that does the right thing.
      
      Link: http://lkml.kernel.org/r/20170321091805.140676-1-dvyukov@google.com
      Signed-off-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Reviewed-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f2ad37da
    • Dmitry Vyukov's avatar
      kcov: simplify interrupt check · f61e869d
      Dmitry Vyukov authored
      
      
      in_interrupt() semantics are confusing and wrong for most users as it
      also returns true when bh is disabled.  Thus we open coded a proper
      check for interrupts in __sanitizer_cov_trace_pc() with a lengthy
      explanatory comment.
      
      Use the new in_task() predicate instead.
      
      Link: http://lkml.kernel.org/r/20170321091026.139655-1-dvyukov@google.com
      Signed-off-by: default avatarDmitry Vyukov <dvyukov@google.com>
      Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
      Cc: James Morse <james.morse@arm.com>
      Cc: Alexander Popov <alex.popov@linux.com>
      Cc: Andrey Konovalov <andreyknvl@google.com>
      Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f61e869d
    • Zhang Xiao's avatar
      taskstats: add e/u/stime for TGID command · 8c733420
      Zhang Xiao authored
      
      
      The elapsed time, user CPU time and system CPU time for the thread group
      status request are presently left at zero.  Fill these in.
      
      [akpm@linux-foundation.org: run ktime_get_ns() a single time]
      [akpm@linux-foundation.org: include linux/sched/cputime.h for task_cputime()]
      Link: http://lkml.kernel.org/r/1488508424-12322-1-git-send-email-xiao.zhang@windriver.com
      Signed-off-by: default avatarZhang Xiao <xiao.zhang@windriver.com>
      Cc: Balbir Singh <bsingharora@gmail.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8c733420
    • Kirill Tkhai's avatar
      pidns: expose task pid_ns_for_children to userspace · eaa0d190
      Kirill Tkhai authored
      
      
      pid_ns_for_children set by a task is known only to the task itself, and
      it's impossible to identify it from outside.
      
      It's a big problem for checkpoint/restore software like CRIU, because it
      can't correctly handle tasks, that do setns(CLONE_NEWPID) in proccess of
      their work.
      
      This patch solves the problem, and it exposes pid_ns_for_children to ns
      directory in standard way with the name "pid_for_children":
      
        ~# ls /proc/5531/ns -l | grep pid
        lrwxrwxrwx 1 root root 0 Jan 14 16:38 pid -> pid:[4026531836]
        lrwxrwxrwx 1 root root 0 Jan 14 16:38 pid_for_children -> pid:[4026532286]
      
      Link: http://lkml.kernel.org/r/149201123914.6007.2187327078064239572.stgit@localhost.localdomain
      Signed-off-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
      Cc: Andrei Vagin <avagin@virtuozzo.com>
      Cc: Andreas Gruenbacher <agruenba@redhat.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Kerrisk <mtk.manpages@googlemail.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Paul Moore <paul@paul-moore.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Serge Hallyn <serge@hallyn.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eaa0d190
    • Kirill Tkhai's avatar
      ns: allow ns_entries to have custom symlink content · 25b14e92
      Kirill Tkhai authored
      
      
      Patch series "Expose task pid_ns_for_children to userspace".
      
      pid_ns_for_children set by a task is known only to the task itself, and
      it's impossible to identify it from outside.
      
      It's a big problem for checkpoint/restore software like CRIU, because it
      can't correctly handle tasks, that do setns(CLONE_NEWPID) in proccess of
      their work.  If they have a custom pid_ns_for_children before dump, they
      must have the same ns after restore.  Otherwise, restored task bumped
      into enviroment it does not expect.
      
      This patchset solves the problem.  It exposes pid_ns_for_children to ns
      directory in standard way with the name "pid_for_children":
      
        ~# ls /proc/5531/ns -l | grep pid
        lrwxrwxrwx 1 root root 0 Jan 14 16:38 pid -> pid:[4026531836]
        lrwxrwxrwx 1 root root 0 Jan 14 16:38 pid_for_children -> pid:[4026532286]
      
      This patch (of 2):
      
      Make possible to have link content prefix yyy different from the link
      name xxx:
      
        $ readlink /proc/[pid]/ns/xxx
        yyy:[4026531838]
      
      This will be used in next patch.
      
      Link: http://lkml.kernel.org/r/149201120318.6007.7362655181033883000.stgit@localhost.localdomain
      Signed-off-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
      Reviewed-by: default avatarCyrill Gorcunov <gorcunov@openvz.org>
      Acked-by: default avatarAndrei Vagin <avagin@virtuozzo.com>
      Cc: Andreas Gruenbacher <agruenba@redhat.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Kerrisk <mtk.manpages@googlemail.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Paul Moore <paul@paul-moore.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Serge Hallyn <serge@hallyn.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      25b14e92
    • Kirill Tkhai's avatar
      pidns: disable pid allocation if pid_ns_prepare_proc() is failed in alloc_pid() · 8896c23d
      Kirill Tkhai authored
      alloc_pidmap() advances pid_namespace::last_pid.  When first pid
      allocation fails, then next created process will have pid 2 and
      pid_ns_prepare_proc() won't be called.  So, pid_namespace::proc_mnt will
      never be initialized (not to mention that there won't be a child
      reaper).
      
      I saw crash stack of such case on kernel 3.10:
      
          BUG: unable to handle kernel NULL pointer dereference at (null)
          IP: proc_flush_task+0x8f/0x1b0
          Call Trace:
              release_task+0x3f/0x490
              wait_consider_task.part.10+0x7ff/0xb00
              do_wait+0x11f/0x280
              SyS_wait4+0x7d/0x110
      
      We may fix this by restore of last_pid in 0 or by prohibiting of futher
      allocations.  Since there was a similar issue in Oleg Nesterov's commit
      314a8ad0
      
       ("pidns: fix free_pid() to handle the first fork failure").
      and it was fixed via prohibiting allocation, let's follow this way, and
      do the same.
      
      Link: http://lkml.kernel.org/r/149201021004.4863.6762095011554287922.stgit@localhost.localdomain
      Signed-off-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
      Acked-by: default avatarCyrill Gorcunov <gorcunov@openvz.org>
      Cc: Andrei Vagin <avagin@virtuozzo.com>
      Cc: Andreas Gruenbacher <agruenba@redhat.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Michael Kerrisk <mtk.manpages@googlemail.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Paul Moore <paul@paul-moore.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Andy Lutomirski <luto@amacapital.net>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Serge Hallyn <serge@hallyn.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8896c23d
    • Hari Bathini's avatar
      powerpc/fadump: update documentation about crashkernel parameter reuse · 92019efc
      Hari Bathini authored
      
      
      As we are reusing crashkernel parameter instead of fadump_reserve_mem
      parameter to specify the memory to reserve for fadump's crash kernel,
      update the documentation accordingly.
      
      Link: http://lkml.kernel.org/r/149035347559.6881.14224829694291758581.stgit@hbathini.in.ibm.com
      Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
      Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Dave Young <dyoung@redhat.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Cc: Vivek Goyal <vgoyal@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      92019efc
    • Hari Bathini's avatar
      powerpc/fadump: reuse crashkernel parameter for fadump memory reservation · 11550dc0
      Hari Bathini authored
      
      
      fadump supports specifying memory to reserve for fadump's crash kernel
      with fadump_reserve_mem kernel parameter.  This parameter currently
      supports passing a fixed memory size, like fadump_reserve_mem=<size>
      only.  This patch aims to add support for other syntaxes like
      range-based memory size
      <range1>:<size1>[,<range2>:<size2>,<range3>:<size3>,...] which allows
      using the same parameter to boot the kernel with different system RAM
      sizes.
      
      As crashkernel parameter already supports the above mentioned syntaxes,
      this patch deprecates fadump_reserve_mem parameter and reuses
      crashkernel parameter instead, to specify memory for fadump's crash
      kernel memory reservation as well.  If any offset is provided in
      crashkernel parameter, it will be ignored in case of fadump, as fadump
      reserves memory at end of RAM.
      
      Advantages using crashkernel parameter instead of fadump_reserve_mem
      parameter are one less kernel parameter overall, code reuse and support
      for multiple syntaxes to specify memory.
      
      Suggested-by: default avatarDave Young <dyoung@redhat.com>
      Link: http://lkml.kernel.org/r/149035346749.6881.911095631212975718.stgit@hbathini.in.ibm.com
      Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
      Reviewed-by: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Dave Young <dyoung@redhat.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Vivek Goyal <vgoyal@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      11550dc0
    • Hari Bathini's avatar
      powerpc/fadump: remove dependency with CONFIG_KEXEC · 22bd0177
      Hari Bathini authored
      
      
      Now that crashkernel parameter parsing and vmcoreinfo related code is
      moved under CONFIG_CRASH_CORE instead of CONFIG_KEXEC_CORE, remove
      dependency with CONFIG_KEXEC for CONFIG_FA_DUMP.  While here, get rid of
      definitions of fadump_append_elf_note() & fadump_final_note() functions
      to reuse similar functions compiled under CONFIG_CRASH_CORE.
      
      Link: http://lkml.kernel.org/r/149035343956.6881.1536459326017709354.stgit@hbathini.in.ibm.com
      Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
      Reviewed-by: default avatarMahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Acked-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Dave Young <dyoung@redhat.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Vivek Goyal <vgoyal@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      22bd0177
    • Hari Bathini's avatar
      ia64: reuse append_elf_note() and final_note() functions · 51dbd925
      Hari Bathini authored
      
      
      Get rid of multiple definitions of append_elf_note() & final_note()
      functions.  Reuse these functions compiled under CONFIG_CRASH_CORE Also,
      define Elf_Word and use it instead of generic u32 or the more specific
      Elf64_Word.
      
      Link: http://lkml.kernel.org/r/149035342324.6881.11667840929850361402.stgit@hbathini.in.ibm.com
      Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
      Acked-by: default avatarDave Young <dyoung@redhat.com>
      Acked-by: default avatarTony Luck <tony.luck@intel.com>
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Cc: Vivek Goyal <vgoyal@redhat.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      51dbd925
    • Hari Bathini's avatar
      crash: move crashkernel parsing and vmcore related code under CONFIG_CRASH_CORE · 692f66f2
      Hari Bathini authored
      
      
      Patch series "kexec/fadump: remove dependency with CONFIG_KEXEC and
      reuse crashkernel parameter for fadump", v4.
      
      Traditionally, kdump is used to save vmcore in case of a crash.  Some
      architectures like powerpc can save vmcore using architecture specific
      support instead of kexec/kdump mechanism.  Such architecture specific
      support also needs to reserve memory, to be used by dump capture kernel.
      crashkernel parameter can be a reused, for memory reservation, by such
      architecture specific infrastructure.
      
      This patchset removes dependency with CONFIG_KEXEC for crashkernel
      parameter and vmcoreinfo related code as it can be reused without kexec
      support.  Also, crashkernel parameter is reused instead of
      fadump_reserve_mem to reserve memory for fadump.
      
      The first patch moves crashkernel parameter parsing and vmcoreinfo
      related code under CONFIG_CRASH_CORE instead of CONFIG_KEXEC_CORE.  The
      second patch reuses the definitions of append_elf_note() & final_note()
      functions under CONFIG_CRASH_CORE in IA64 arch code.  The third patch
      removes dependency on CONFIG_KEXEC for firmware-assisted dump (fadump)
      in powerpc.  The next patch reuses crashkernel parameter for reserving
      memory for fadump, instead of the fadump_reserve_mem parameter.  This
      has the advantage of using all syntaxes crashkernel parameter supports,
      for fadump as well.  The last patch updates fadump kernel documentation
      about use of crashkernel parameter.
      
      This patch (of 5):
      
      Traditionally, kdump is used to save vmcore in case of a crash.  Some
      architectures like powerpc can save vmcore using architecture specific
      support instead of kexec/kdump mechanism.  Such architecture specific
      support also needs to reserve memory, to be used by dump capture kernel.
      crashkernel parameter can be a reused, for memory reservation, by such
      architecture specific infrastructure.
      
      But currently, code related to vmcoreinfo and parsing of crashkernel
      parameter is built under CONFIG_KEXEC_CORE.  This patch introduces
      CONFIG_CRASH_CORE and moves the above mentioned code under this config,
      allowing code reuse without dependency on CONFIG_KEXEC.  There is no
      functional change with this patch.
      
      Link: http://lkml.kernel.org/r/149035338104.6881.4550894432615189948.stgit@hbathini.in.ibm.com
      Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
      Acked-by: default avatarDave Young <dyoung@redhat.com>
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Eric Biederman <ebiederm@xmission.com>
      Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
      Cc: Vivek Goyal <vgoyal@redhat.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      692f66f2
    • Alexey Dobriyan's avatar
      cpumask: make "nr_cpumask_bits" unsigned · c311c797
      Alexey Dobriyan authored
      
      
      Bit searching functions accept "unsigned long" indices but
      "nr_cpumask_bits" is "int" which is signed, so inevitable sign
      extensions occur on x86_64.  Those MOVSX are #1 MOVSX bloat by number of
      uses across whole kernel.
      
      Change "nr_cpumask_bits" to unsigned, this number can't be negative
      after all.  It allows to do implicit zero-extension on x86_64 without
      MOVSX.
      
      Change signed comparisons into unsigned comparisons where necessary.
      
      Other uses looks fine because it is either argument passed to a function
      or comparison is already unsigned.
      
      Net win on allyesconfig type of kernel: ~2.8 KB (!)
      
      	add/remove: 0/0 grow/shrink: 8/725 up/down: 93/-2926 (-2833)
      	function                                     old     new   delta
      	xen_exit_mmap                                691     735     +44
      	qstat_read                                   426     440     +14
      	__cpufreq_cooling_register                  1678    1687      +9
      	trace_rb_cpu_prepare                         447     455      +8
      	vermagic                                      54      60      +6
      	nfp_driver_version                            54      60      +6
      	rcu_torture_stats_print                     1147    1151      +4
      	find_next_push_cpu                           267     269      +2
      	xen_irq_resume                               961     960      -1
      				...
      	init_vp_index                                946     906     -40
      	od_set_powersave_bias                        328     281     -47
      	power_cpu_exit                               193     139     -54
      	arch_show_interrupts                        3538    3484     -54
      	select_idle_sibling                         1558    1471     -87
      	Total: Before=158358910, After=158356077, chg -0.00%
      
      Same arguments apply to "nr_cpu_ids" but I haven't yet found enough
      courage to delve into this issue (and proper fix may require new type
      "cpu_t" which is whole separate story).
      
      Link: http://lkml.kernel.org/r/20170309205322.GA1728@avx2
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c311c797
    • Hoeun Ryu's avatar
      fork: free vmapped stacks in cache when cpus are offline · 19659c59
      Hoeun Ryu authored
      
      
      Using virtually mapped stack, kernel stacks are allocated via vmalloc.
      
      In the current implementation, two stacks per cpu can be cached when
      tasks are freed and the cached stacks are used again in task
      duplications.  But the cached stacks may remain unfreed even when cpu
      are offline.  By adding a cpu hotplug callback to free the cached stacks
      when a cpu goes offline, the pages of the cached stacks are not wasted.
      
      Link: http://lkml.kernel.org/r/1487076043-17802-1-git-send-email-hoeun.ryu@gmail.com
      Signed-off-by: default avatarHoeun Ryu <hoeun.ryu@gmail.com>
      Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Mateusz Guzik <mguzik@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      19659c59
    • Kees Cook's avatar
      reiserfs: use designated initializers · 7fe6a42e
      Kees Cook authored
      
      
      Prepare to mark sensitive kernel structures for randomization by making
      sure they're using designated initializers.  These were identified
      during allyesconfig builds of x86, arm, and arm64, with most initializer
      fixes extracted from grsecurity.
      
      Link: http://lkml.kernel.org/r/20170329210419.GA40066@beast
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Cc: Jan Kara <jack@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7fe6a42e
    • Joe Perches's avatar
      checkpatch: improve the SUSPECT_CODE_INDENT test · f6950a73
      Joe Perches authored
      
      
      The current SUSPECT_CODE_INDENT test does not recognize several
      defective code style defects where code following a logical test is
      inappropriately indented.
      
      Before this patch, for code like:
      
      	if (foo)
      	bar();
      
      checkpatch would not emit a warning.
      
      Improve the test to warn when code after a logical test has the same
      indentation as the logical test.
      
      Perform the same indentation test for "else" blocks too.
      
      Link: http://lkml.kernel.org/r/df2374b68c4a68af2b7ef08afe486584811f610a.1493683942.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f6950a73
    • Joe Perches's avatar
      checkpatch: improve the embedded function name test for patch contexts · 74fd4f34
      Joe Perches authored
      
      
      The current test works only for a single patch context as it is done in
      the foreach ($rawlines) loop that precedes the loop where the actual
      $context_function variable is used.
      
      Move the set of $context_function into the foreach (@lines) loop where
      it is useful for each patch context.
      
      Link: http://lkml.kernel.org/r/6c675a31c74fbfad4fc45b9f462303d60ca2a283.1493486091.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      74fd4f34
    • Jerome Forissier's avatar
      checkpatch: add --typedefsfile · 75ad8c57
      Jerome Forissier authored
      
      
      When using checkpatch on out-of-tree code, it may occur that some
      project-specific types are used, which will cause spurious warnings.
      Add the --typedefsfile option as a way to extend the known types and
      deal with this issue.
      
      This was developed for OP-TEE [1].  We run a Travis job on all pull
      requests [2], and checkpatch is part of that.  The typical false warning
      we get on a regular basis is with some pointers to functions returning
      TEE_Result [3], which is a typedef from the GlobalPlatform APIs.  We
      consider it is acceptable to use GP types in the OP-TEE core
      implementation, that's why this patch would be helpful for us.
      
      [1] https://github.com/OP-TEE/optee_os
      [2] https://travis-ci.org/OP-TEE/optee_os/builds
      [3] https://travis-ci.org/OP-TEE/optee_os/builds/193355335#L1733
      
      Link: http://lkml.kernel.org/r/ba1124d6dfa599bb0dd1d8919dd45dd09ce541a4.1492702192.git.jerome.forissier@linaro.org
      Signed-off-by: default avatarJerome Forissier <jerome.forissier@linaro.org>
      Cc: Joe Perches <joe@perches.com>
      Cc: Andy Whitcroft <apw@canonical.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      75ad8c57
    • Joe Perches's avatar
      checkpatch: improve k.alloc with multiplication and sizeof test · 1b4a2ed4
      Joe Perches authored
      
      
      Find multi-line uses of k.alloc by using the $stat variable and not the
      $line variable.  This can still --fix only the single line variant
      though.
      
      Link: http://lkml.kernel.org/r/3f4b23d37cd4c7d8628eefc25afe83ba8fb3ab55.1493167076.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1b4a2ed4
    • Wei Wang's avatar
      checkpatch: special audit for revert commit line · e882dbfc
      Wei Wang authored
      
      
      Currently checkpatch.pl does not recognize git's default commit revert
      message and will complain about the hash format.  Add special audit for
      revert commit message line to fix it.
      
      Link: http://lkml.kernel.org/r/20170411191532.74381-1-wvw@google.com
      Signed-off-by: default avatarWei Wang <wvw@google.com>
      Acked-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e882dbfc
    • Joe Perches's avatar
      checkpatch: clarify the EMBEDDED_FUNCTION_NAME message · e4b7d309
      Joe Perches authored
      
      
      Try to make the conversion of embedded function names to "%s: ", __func__
      a bit clearer.
      
      Add a bit more information to the comment describing the test too.
      
      Link: http://lkml.kernel.org/r/38f5d32f0aec1cd98cb9ceeedd6a736cc9a802db.1491759835.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e4b7d309
    • Joe Perches's avatar
      checkpatch: improve MULTISTATEMENT_MACRO_USE_DO_WHILE test · e795556a
      Joe Perches authored
      
      
      The logic currrently misses macros that start with an if statement.
      
      e.g.:    #define foo(bar)   if (bar) baz;
      
      Add a test for macro content that starts with if
      
      Link: http://lkml.kernel.org/r/a9d41aafe1673889caf1a9850208fb7fd74107a0.1491783914.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Reported-by: default avatarAndreas Mohr <andi@lisas.de>
      Original-patch-by: default avatarAlfonso Lima <alfonsolimaastor@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e795556a
    • Joe Perches's avatar
      checkpatch: avoid suggesting struct definitions should be const · d9190e4e
      Joe Perches authored
      
      
      Many structs are generally used const and there is a known list of these
      structs.
      
      struct definitions should not be generally be declared const.
      
      Add a test for the lack of an open brace immediately after the struct to
      avoid definitions.
      
      This avoids the false positive "struct foo should normally be const"
      message only when the open brace is on the same line as the definition.
      
      Link: http://lkml.kernel.org/r/0dce709150d712e66f1b90b03827634b53b28085.1491845946.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Cc: Arthur Brainville <ybalrid@ybalrid.info>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d9190e4e
    • Joe Perches's avatar
      checkpatch: allow space leading blank lines in email headers · eb3a58de
      Joe Perches authored
      
      
      Allow a leading space and otherwise blank link in the email headers as
      it can be a line wrapped Spamassassin multiple line string or any other
      valid rfc 2822/5322 email header.
      
      The line with space causes checkpatch to erroneously think that it's in
      the content body, as opposed to headers and thus flag a mail header as
      an unwrapped long comment line.
      
      Link: http://lkml.kernel.org/r/d75a9f0b78b3488078429f4037d9fff3bdfa3b78.1490247180.git.joe@perches.com
      Signed-off-by: default avatarJoe Perches &lt;joe@perches.com&gt;Reported-by: Darren Hart (VMware) <dvhart@infradead.org>
      Tested-by: default avatarDarren Hart (VMware) <dvhart@infradead.org>
      Reviewed-by: default avatarDarren Hart (VMware) <dvhart@vmware.com>
      Original-patch-by: default avatarJohn 'Warthog9' Hawley (VMware) <warthog9@eaglescrag.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eb3a58de