1. 07 9月, 2017 16 次提交
    • C
      mm: track actual nr_scanned during shrink_slab() · d460acb5
      Chris Wilson 提交于
      Some shrinkers may only be able to free a bunch of objects at a time,
      and so free more than the requested nr_to_scan in one pass.
      
      Whilst other shrinkers may find themselves even unable to scan as many
      objects as they counted, and so underreport.  Account for the extra
      freed/scanned objects against the total number of objects we intend to
      scan, otherwise we may end up penalising the slab far more than
      intended.  Similarly, we want to add the underperforming scan to the
      deferred pass so that we try harder and harder in future passes.
      
      Link: http://lkml.kernel.org/r/20170822135325.9191-1-chris@chris-wilson.co.ukSigned-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Hillf Danton <hillf.zj@alibaba-inc.com>
      Cc: Minchan Kim <minchan@kernel.org>
      Cc: Vlastimil Babka <vbabka@suse.cz>
      Cc: Mel Gorman <mgorman@techsingularity.net>
      Cc: Shaohua Li <shli@fb.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d460acb5
    • A
      mm/slub.c: add a naive detection of double free or corruption · ce6fa91b
      Alexander Popov 提交于
      Add an assertion similar to "fasttop" check in GNU C Library allocator
      as a part of SLAB_FREELIST_HARDENED feature.  An object added to a
      singly linked freelist should not point to itself.  That helps to detect
      some double free errors (e.g. CVE-2017-2636) without slub_debug and
      KASAN.
      
      Link: http://lkml.kernel.org/r/1502468246-1262-1-git-send-email-alex.popov@linux.comSigned-off-by: NAlexander Popov <alex.popov@linux.com>
      Acked-by: NChristoph Lameter <cl@linux.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Cc: Paul E McKenney <paulmck@linux.vnet.ibm.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Andy Lutomirski <luto@kernel.org>
      Cc: Nicolas Pitre <nicolas.pitre@linaro.org>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Tycho Andersen <tycho@docker.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ce6fa91b
    • K
      mm: add SLUB free list pointer obfuscation · 2482ddec
      Kees Cook 提交于
      This SLUB free list pointer obfuscation code is modified from Brad
      Spengler/PaX Team's code in the last public patch of grsecurity/PaX
      based on my understanding of the code.  Changes or omissions from the
      original code are mine and don't reflect the original grsecurity/PaX
      code.
      
      This adds a per-cache random value to SLUB caches that is XORed with
      their freelist pointer address and value.  This adds nearly zero
      overhead and frustrates the very common heap overflow exploitation
      method of overwriting freelist pointers.
      
      A recent example of the attack is written up here:
      
        http://cyseclabs.com/blog/cve-2016-6187-heap-off-by-one-exploit
      
      and there is a section dedicated to the technique the book "A Guide to
      Kernel Exploitation: Attacking the Core".
      
      This is based on patches by Daniel Micay, and refactored to minimize the
      use of #ifdef.
      
      With 200-count cycles of "hackbench -g 20 -l 1000" I saw the following
      run times:
      
       before:
       	mean 10.11882499999999999995
      	variance .03320378329145728642
      	stdev .18221905304181911048
      
        after:
      	mean 10.12654000000000000014
      	variance .04700556623115577889
      	stdev .21680767106160192064
      
      The difference gets lost in the noise, but if the above is to be taken
      literally, using CONFIG_FREELIST_HARDENED is 0.07% slower.
      
      Link: http://lkml.kernel.org/r/20170802180609.GA66807@beastSigned-off-by: NKees Cook <keescook@chromium.org>
      Suggested-by: NDaniel Micay <danielmicay@gmail.com>
      Cc: Rik van Riel <riel@redhat.com>
      Cc: Tycho Andersen <tycho@docker.com>
      Cc: Alexander Popov <alex.popov@linux.com>
      Cc: Christoph Lameter <cl@linux.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2482ddec
    • A
      slub: tidy up initialization ordering · ea37df54
      Alexander Potapenko 提交于
       - free_kmem_cache_nodes() frees the cache node before nulling out a
         reference to it
      
       - init_kmem_cache_nodes() publishes the cache node before initializing
         it
      
      Neither of these matter at runtime because the cache nodes cannot be
      looked up by any other thread.  But it's neater and more consistent to
      reorder these.
      
      Link: http://lkml.kernel.org/r/20170707083408.40410-1-glider@google.comSigned-off-by: NAlexander Potapenko <glider@google.com>
      Acked-by: NChristoph Lameter <cl@linux.com>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      ea37df54
    • J
      ocfs2: clean up some dead code · 964f14a0
      Jun Piao 提交于
      clean up some unused functions and parameters.
      
      Link: http://lkml.kernel.org/r/598A5E21.2080807@huawei.comSigned-off-by: NJun Piao <piaojun@huawei.com>
      Reviewed-by: NAlex Chen <alex.chen@huawei.com>
      Cc: Mark Fasheh <mfasheh@versity.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Joseph Qi <jiangqi903@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      964f14a0
    • J
      ocfs2: make ocfs2_set_acl() static · 01ffb56b
      Jan Kara 提交于
      The function is never called outside of fs/ocfs2/acl.c.
      
      Link: http://lkml.kernel.org/r/20170801141252.19675-2-jack@suse.czSigned-off-by: NJan Kara <jack@suse.cz>
      Cc: Mark Fasheh <mfasheh@versity.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Joseph Qi <jiangqi903@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      01ffb56b
    • M
      modpost: simplify sec_name() · 6124c04c
      Masahiro Yamada 提交于
      There is code duplication between sec_name() and sech_name().  Simplify
      sec_name() by re-using sech_name().  Also, move them up to remove the
      forward declaration of sec_name().
      
      Link: http://lkml.kernel.org/r/1502248721-22009-1-git-send-email-yamada.masahiro@socionext.comSigned-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: NKees Cook <keescook@chromium.org>
      Cc: Nicholas Piggin <npiggin@gmail.com>
      Cc: Jessica Yu <jeyu@redhat.com>
      Cc: Chris Metcalf <cmetcalf@mellanox.com>
      Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      6124c04c
    • N
      dax: initialize variable pfn before using it · 2f52074d
      Nicolas Iooss 提交于
      dax_pmd_insert_mapping() contains the following code:
      
              pfn_t pfn;
              if (bdev_dax_pgoff(bdev, sector, size, &pgoff) != 0)
                  goto fallback;
              /* ... */
          fallback:
            trace_dax_pmd_insert_mapping_fallback(inode, vmf, length, pfn, ret);
      
      When the condition in the if statement fails, the function calls
      trace_dax_pmd_insert_mapping_fallback() with an uninitialized pfn value.
      
      This issue has been found while building the kernel with clang.  The
      compiler reported:
      
          fs/dax.c:1280:6: error: variable 'pfn' is used uninitialized
          whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
              if (bdev_dax_pgoff(bdev, sector, size, &pgoff) != 0)
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          fs/dax.c:1310:60: note: uninitialized use occurs here
            trace_dax_pmd_insert_mapping_fallback(inode, vmf, length, pfn, ret);
                                                                           ^~~
      
      Link: http://lkml.kernel.org/r/20170903083000.587-1-nicolas.iooss_linux@m4x.orgSigned-off-by: NNicolas Iooss <nicolas.iooss_linux@m4x.org>
      Reviewed-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      2f52074d
    • R
      dax: use PG_PMD_COLOUR instead of open coding · 917f3452
      Ross Zwisler 提交于
      Use ~PG_PMD_COLOUR in dax_entry_waitqueue() instead of open coding an
      equivalent page offset mask.
      
      Link: http://lkml.kernel.org/r/20170822222436.18926-2-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Cc: "Slusarz, Marcin" <marcin.slusarz@intel.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      917f3452
    • R
      dax: explain how read(2)/write(2) addresses are validated · a2e050f5
      Ross Zwisler 提交于
      Add a comment explaining how the user addresses provided to read(2) and
      write(2) are validated in the DAX I/O path.
      
      We call dax_copy_from_iter() or copy_to_iter() on these without calling
      access_ok() first in the DAX code, and there was a concern that the user
      might be able to read/write to arbitrary kernel addresses with this
      path.
      
      Link: http://lkml.kernel.org/r/20170816173615.10098-1-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a2e050f5
    • R
      dax: move all DAX radix tree defs to fs/dax.c · 527b19d0
      Ross Zwisler 提交于
      Now that we no longer insert struct page pointers in DAX radix trees the
      page cache code no longer needs to know anything about DAX exceptional
      entries.  Move all the DAX exceptional entry definitions from dax.h to
      fs/dax.c.
      
      Link: http://lkml.kernel.org/r/20170724170616.25810-6-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Suggested-by: NJan Kara <jack@suse.cz>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      527b19d0
    • R
      dax: remove DAX code from page_cache_tree_insert() · d01ad197
      Ross Zwisler 提交于
      Now that we no longer insert struct page pointers in DAX radix trees we
      can remove the special casing for DAX in page_cache_tree_insert().
      
      This also allows us to make dax_wake_mapping_entry_waiter() local to
      fs/dax.c, removing it from dax.h.
      
      Link: http://lkml.kernel.org/r/20170724170616.25810-5-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Suggested-by: NJan Kara <jack@suse.cz>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d01ad197
    • R
      dax: use common 4k zero page for dax mmap reads · 91d25ba8
      Ross Zwisler 提交于
      When servicing mmap() reads from file holes the current DAX code
      allocates a page cache page of all zeroes and places the struct page
      pointer in the mapping->page_tree radix tree.
      
      This has three major drawbacks:
      
      1) It consumes memory unnecessarily. For every 4k page that is read via
         a DAX mmap() over a hole, we allocate a new page cache page. This
         means that if you read 1GiB worth of pages, you end up using 1GiB of
         zeroed memory. This is easily visible by looking at the overall
         memory consumption of the system or by looking at /proc/[pid]/smaps:
      
      	7f62e72b3000-7f63272b3000 rw-s 00000000 103:00 12   /root/dax/data
      	Size:            1048576 kB
      	Rss:             1048576 kB
      	Pss:             1048576 kB
      	Shared_Clean:          0 kB
      	Shared_Dirty:          0 kB
      	Private_Clean:   1048576 kB
      	Private_Dirty:         0 kB
      	Referenced:      1048576 kB
      	Anonymous:             0 kB
      	LazyFree:              0 kB
      	AnonHugePages:         0 kB
      	ShmemPmdMapped:        0 kB
      	Shared_Hugetlb:        0 kB
      	Private_Hugetlb:       0 kB
      	Swap:                  0 kB
      	SwapPss:               0 kB
      	KernelPageSize:        4 kB
      	MMUPageSize:           4 kB
      	Locked:                0 kB
      
      2) It is slower than using a common zero page because each page fault
         has more work to do. Instead of just inserting a common zero page we
         have to allocate a page cache page, zero it, and then insert it. Here
         are the average latencies of dax_load_hole() as measured by ftrace on
         a random test box:
      
          Old method, using zeroed page cache pages:	3.4 us
          New method, using the common 4k zero page:	0.8 us
      
         This was the average latency over 1 GiB of sequential reads done by
         this simple fio script:
      
           [global]
           size=1G
           filename=/root/dax/data
           fallocate=none
           [io]
           rw=read
           ioengine=mmap
      
      3) The fact that we had to check for both DAX exceptional entries and
         for page cache pages in the radix tree made the DAX code more
         complex.
      
      Solve these issues by following the lead of the DAX PMD code and using a
      common 4k zero page instead.  As with the PMD code we will now insert a
      DAX exceptional entry into the radix tree instead of a struct page
      pointer which allows us to remove all the special casing in the DAX
      code.
      
      Note that we do still pretty aggressively check for regular pages in the
      DAX radix tree, especially where we take action based on the bits set in
      the page.  If we ever find a regular page in our radix tree now that
      most likely means that someone besides DAX is inserting pages (which has
      happened lots of times in the past), and we want to find that out early
      and fail loudly.
      
      This solution also removes the extra memory consumption.  Here is that
      same /proc/[pid]/smaps after 1GiB of reading from a hole with the new
      code:
      
      	7f2054a74000-7f2094a74000 rw-s 00000000 103:00 12   /root/dax/data
      	Size:            1048576 kB
      	Rss:                   0 kB
      	Pss:                   0 kB
      	Shared_Clean:          0 kB
      	Shared_Dirty:          0 kB
      	Private_Clean:         0 kB
      	Private_Dirty:         0 kB
      	Referenced:            0 kB
      	Anonymous:             0 kB
      	LazyFree:              0 kB
      	AnonHugePages:         0 kB
      	ShmemPmdMapped:        0 kB
      	Shared_Hugetlb:        0 kB
      	Private_Hugetlb:       0 kB
      	Swap:                  0 kB
      	SwapPss:               0 kB
      	KernelPageSize:        4 kB
      	MMUPageSize:           4 kB
      	Locked:                0 kB
      
      Overall system memory consumption is similarly improved.
      
      Another major change is that we remove dax_pfn_mkwrite() from our fault
      flow, and instead rely on the page fault itself to make the PTE dirty
      and writeable.  The following description from the patch adding the
      vm_insert_mixed_mkwrite() call explains this a little more:
      
         "To be able to use the common 4k zero page in DAX we need to have our
          PTE fault path look more like our PMD fault path where a PTE entry
          can be marked as dirty and writeable as it is first inserted rather
          than waiting for a follow-up dax_pfn_mkwrite() =>
          finish_mkwrite_fault() call.
      
          Right now we can rely on having a dax_pfn_mkwrite() call because we
          can distinguish between these two cases in do_wp_page():
      
                  case 1: 4k zero page => writable DAX storage
                  case 2: read-only DAX storage => writeable DAX storage
      
          This distinction is made by via vm_normal_page(). vm_normal_page()
          returns false for the common 4k zero page, though, just as it does
          for DAX ptes. Instead of special casing the DAX + 4k zero page case
          we will simplify our DAX PTE page fault sequence so that it matches
          our DAX PMD sequence, and get rid of the dax_pfn_mkwrite() helper.
          We will instead use dax_iomap_fault() to handle write-protection
          faults.
      
          This means that insert_pfn() needs to follow the lead of
          insert_pfn_pmd() and allow us to pass in a 'mkwrite' flag. If
          'mkwrite' is set insert_pfn() will do the work that was previously
          done by wp_page_reuse() as part of the dax_pfn_mkwrite() call path"
      
      Link: http://lkml.kernel.org/r/20170724170616.25810-4-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      91d25ba8
    • R
      dax: relocate some dax functions · e30331ff
      Ross Zwisler 提交于
      dax_load_hole() will soon need to call dax_insert_mapping_entry(), so it
      needs to be moved lower in dax.c so the definition exists.
      
      dax_wake_mapping_entry_waiter() will soon be removed from dax.h and be
      made static to dax.c, so we need to move its definition above all its
      callers.
      
      Link: http://lkml.kernel.org/r/20170724170616.25810-3-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e30331ff
    • R
      mm: add vm_insert_mixed_mkwrite() · b2770da6
      Ross Zwisler 提交于
      When servicing mmap() reads from file holes the current DAX code
      allocates a page cache page of all zeroes and places the struct page
      pointer in the mapping->page_tree radix tree.  This has three major
      drawbacks:
      
      1) It consumes memory unnecessarily. For every 4k page that is read via
         a DAX mmap() over a hole, we allocate a new page cache page. This
         means that if you read 1GiB worth of pages, you end up using 1GiB of
         zeroed memory.
      
      2) It is slower than using a common zero page because each page fault
         has more work to do. Instead of just inserting a common zero page we
         have to allocate a page cache page, zero it, and then insert it.
      
      3) The fact that we had to check for both DAX exceptional entries and
         for page cache pages in the radix tree made the DAX code more
         complex.
      
      This series solves these issues by following the lead of the DAX PMD
      code and using a common 4k zero page instead.  This reduces memory usage
      and decreases latencies for some workloads, and it simplifies the DAX
      code, removing over 100 lines in total.
      
      This patch (of 5):
      
      To be able to use the common 4k zero page in DAX we need to have our PTE
      fault path look more like our PMD fault path where a PTE entry can be
      marked as dirty and writeable as it is first inserted rather than
      waiting for a follow-up dax_pfn_mkwrite() => finish_mkwrite_fault()
      call.
      
      Right now we can rely on having a dax_pfn_mkwrite() call because we can
      distinguish between these two cases in do_wp_page():
      
      	case 1: 4k zero page => writable DAX storage
      	case 2: read-only DAX storage => writeable DAX storage
      
      This distinction is made by via vm_normal_page().  vm_normal_page()
      returns false for the common 4k zero page, though, just as it does for
      DAX ptes.  Instead of special casing the DAX + 4k zero page case we will
      simplify our DAX PTE page fault sequence so that it matches our DAX PMD
      sequence, and get rid of the dax_pfn_mkwrite() helper.  We will instead
      use dax_iomap_fault() to handle write-protection faults.
      
      This means that insert_pfn() needs to follow the lead of
      insert_pfn_pmd() and allow us to pass in a 'mkwrite' flag.  If 'mkwrite'
      is set insert_pfn() will do the work that was previously done by
      wp_page_reuse() as part of the dax_pfn_mkwrite() call path.
      
      Link: http://lkml.kernel.org/r/20170724170616.25810-2-ross.zwisler@linux.intel.comSigned-off-by: NRoss Zwisler <ross.zwisler@linux.intel.com>
      Reviewed-by: NJan Kara <jack@suse.cz>
      Acked-by: NKirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b2770da6
    • D
      metag/numa: remove the unused parent_node() macro · f0cd3406
      Dou Liyang 提交于
      Commit a7be6e5a ("mm: drop useless local parameters of
      __register_one_node()") removes the last user of parent_node().
      
      The parent_node() macro in METAG architecture is unnecessary.
      
      Remove it for cleanup.
      
      Link: http://lkml.kernel.org/r/1501076076-1974-4-git-send-email-douly.fnst@cn.fujitsu.comSigned-off-by: NDou Liyang <douly.fnst@cn.fujitsu.com>
      Reported-by: NMichael Ellerman <mpe@ellerman.id.au>
      Cc: James Hogan <james.hogan@imgtec.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      f0cd3406
  2. 06 9月, 2017 19 次提交
    • L
      Merge tag 'devprop-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · e7d0c41e
      Linus Torvalds 提交于
      Pull device properties framework updates from Rafael Wysocki:
       "These introduce fwnode operations for all of the separate types of
        'firmware nodes' that can be handled by the device properties
        framework, make the framework use const fwnode arguments all over, add
        a helper for the consolidated handling of node references and switch
        over the framework to the new UUID API.
      
        Specifics:
      
         - Introduce fwnode operations for all of the separate types of
           'firmware nodes' that can be handled by the device properties
           framework and drop the type field from struct fwnode_handle (Sakari
           Ailus, Arnd Bergmann).
      
         - Make the device properties framework use const fwnode arguments
           where possible (Sakari Ailus).
      
         - Add a helper for the consolidated handling of node references to
           the device properties framework (Sakari Ailus).
      
         - Switch over the ACPI part of the device properties framework to the
           new UUID API (Andy Shevchenko)"
      
      * tag 'devprop-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
        ACPI: device property: Switch to use new generic UUID API
        device property: export irqchip_fwnode_ops
        device property: Introduce fwnode_property_get_reference_args
        device property: Constify fwnode property API
        device property: Constify argument to pset fwnode backend
        ACPI: Constify internal fwnode arguments
        ACPI: Constify acpi_bus helper functions, switch to macros
        ACPI: Prepare for constifying acpi_get_next_subnode() fwnode argument
        device property: Get rid of struct fwnode_handle type field
        ACPI: Use IS_ERR_OR_NULL() instead of non-NULL check in is_acpi_data_node()
      e7d0c41e
    • L
      Merge tag 'acpi-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · 53ac64aa
      Linus Torvalds 提交于
      Pull ACPI updates from Rafael Wysocki:
       "These include a usual ACPICA code update (this time to upstream
        revision 20170728), a fix for a boot crash on some systems with
        Thunderbolt devices connected at boot time, a rework of the handling
        of PCI bridges when setting up device wakeup, new support for Apple
        device properties, support for DMA configurations reported via ACPI on
        ARM64, APEI-related updates, ACPI EC driver updates and assorted minor
        modifications in several places.
      
        Specifics:
      
         - Update the ACPICA code in the kernel to upstream revision 20170728
           including:
            * Alias operator handling update (Bob Moore).
            * Deferred resolution of reference package elements (Bob Moore).
            * Support for the _DMA method in walk resources (Bob Moore).
            * Tables handling update and support for deferred table
              verification (Lv Zheng).
            * Update of SMMU models for IORT (Robin Murphy).
            * Compiler and disassembler updates (Alex James, Erik Schmauss,
              Ganapatrao Kulkarni, James Morse).
            * Tools updates (Erik Schmauss, Lv Zheng).
            * Assorted minor fixes and cleanups (Bob Moore, Kees Cook, Lv
              Zheng, Shao Ming).
      
         - Rework the initialization of non-wakeup GPEs with method handlers
           in order to address a boot crash on some systems with Thunderbolt
           devices connected at boot time where we miss an early hotplug event
           due to a delay in GPE enabling (Rafael Wysocki).
      
         - Rework the handling of PCI bridges when setting up ACPI-based
           device wakeup in order to avoid disabling wakeup for bridges
           prematurely (Rafael Wysocki).
      
         - Consolidate Apple DMI checks throughout the tree, add support for
           Apple device properties to the device properties framework and use
           these properties for the handling of I2C and SPI devices on Apple
           systems (Lukas Wunner).
      
         - Add support for _DMA to the ACPI-based device properties lookup
           code and make it possible to use the information from there to
           configure DMA regions on ARM64 systems (Lorenzo Pieralisi).
      
         - Fix several issues in the APEI code, add support for exporting the
           BERT error region over sysfs and update APEI MAINTAINERS entry with
           reviewers information (Borislav Petkov, Dongjiu Geng, Loc Ho, Punit
           Agrawal, Tony Luck, Yazen Ghannam).
      
         - Fix a potential initialization ordering issue in the ACPI EC driver
           and clean it up somewhat (Lv Zheng).
      
         - Update the ACPI SPCR driver to extend the existing XGENE 8250
           workaround in it to a new platform (m400) and to work around an
           Xgene UART clock issue (Graeme Gregory).
      
         - Add a new utility function to the ACPI core to support using ACPI
           OEM ID / OEM Table ID / Revision for system identification in
           blacklisting or similar and switch over the existing code already
           using this information to this new interface (Toshi Kani).
      
         - Fix an xpower PMIC issue related to GPADC reads that always return
           0 without extra pin manipulations (Hans de Goede).
      
         - Add statements to print debug messages in a couple of places in the
           ACPI core for easier diagnostics (Rafael Wysocki).
      
         - Clean up the ACPI processor driver slightly (Colin Ian King, Hanjun
           Guo).
      
         - Clean up the ACPI x86 boot code somewhat (Andy Shevchenko).
      
         - Add a quirk for Dell OptiPlex 9020M to the ACPI backlight driver
           (Alex Hung).
      
         - Assorted fixes, cleanups and updates related to ACPI (Amitoj Kaur
           Chawla, Bhumika Goyal, Frank Rowand, Jean Delvare, Punit Agrawal,
           Ronald Tschalär, Sumeet Pawnikar)"
      
      * tag 'acpi-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (75 commits)
        ACPI / APEI: Suppress message if HEST not present
        intel_pstate: convert to use acpi_match_platform_list()
        ACPI / blacklist: add acpi_match_platform_list()
        ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources
        ACPI: make device_attribute const
        ACPI / sysfs: Extend ACPI sysfs to provide access to boot error region
        ACPI: APEI: fix the wrong iteration of generic error status block
        ACPI / processor: make function acpi_processor_check_duplicates() static
        ACPI / EC: Clean up EC GPE mask flag
        ACPI: EC: Fix possible issues related to EC initialization order
        ACPI / PM: Add debug statements to acpi_pm_notify_handler()
        ACPI: Add debug statements to acpi_global_event_handler()
        ACPI / scan: Enable GPEs before scanning the namespace
        ACPICA: Make it possible to enable runtime GPEs earlier
        ACPICA: Dispatch active GPEs at init time
        ACPI: SPCR: work around clock issue on xgene UART
        ACPI: SPCR: extend XGENE 8250 workaround to m400
        ACPI / LPSS: Don't abort ACPI scan on missing mem resource
        mailbox: pcc: Drop uninformative output during boot
        ACPI/IORT: Add IORT named component memory address limits
        ...
      53ac64aa
    • L
      Merge tag 'pm-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · 43964409
      Linus Torvalds 提交于
      Pull power management updates from Rafael Wysocki:
       "This time (again) cpufreq gets the majority of changes which mostly
        are driver updates (including a major consolidation of intel_pstate),
        some schedutil governor modifications and core cleanups.
      
        There also are some changes in the system suspend area, mostly related
        to diagnostics and debug messages plus some renames of things related
        to suspend-to-idle. One major change here is that suspend-to-idle is
        now going to be preferred over S3 on systems where the ACPI tables
        indicate to do so and provide requsite support (the Low Power Idle S0
        _DSM in particular). The system sleep documentation and the tools
        related to it are updated too.
      
        The rest is a few cpuidle changes (nothing major), devfreq updates,
        generic power domains (genpd) framework updates and a few assorted
        modifications elsewhere.
      
        Specifics:
      
         - Drop the P-state selection algorithm based on a PID controller from
           intel_pstate and make it use the same P-state selection method
           (based on the CPU load) for all types of systems in the active mode
           (Rafael Wysocki, Srinivas Pandruvada).
      
         - Rework the cpufreq core and governors to make it possible to take
           cross-CPU utilization updates into account and modify the schedutil
           governor to actually do so (Viresh Kumar).
      
         - Clean up the handling of transition latency information in the
           cpufreq core and untangle it from the information on which drivers
           cannot do dynamic frequency switching (Viresh Kumar).
      
         - Add support for new SoCs (MT2701/MT7623 and MT7622) to the mediatek
           cpufreq driver and update its DT bindings (Sean Wang).
      
         - Modify the cpufreq dt-platdev driver to autimatically create
           cpufreq devices for the new (v2) Operating Performance Points (OPP)
           DT bindings and update its whitelist of supported systems (Viresh
           Kumar, Shubhrajyoti Datta, Marc Gonzalez, Khiem Nguyen, Finley
           Xiao).
      
         - Add support for Ux500 to the cpufreq-dt driver and drop the
           obsolete dbx500 cpufreq driver (Linus Walleij, Arnd Bergmann).
      
         - Add new SoC (R8A7795) support to the cpufreq rcar driver (Khiem
           Nguyen).
      
         - Fix and clean up assorted issues in the cpufreq drivers and core
           (Arvind Yadav, Christophe Jaillet, Colin Ian King, Gustavo Silva,
           Julia Lawall, Leonard Crestez, Rob Herring, Sudeep Holla).
      
         - Update the IO-wait boost handling in the schedutil governor to make
           it less aggressive (Joel Fernandes).
      
         - Rework system suspend diagnostics to make it print fewer messages
           to the kernel log by default, add a sysfs knob to allow more
           suspend-related messages to be printed and add Low Power S0 Idle
           constraints checks to the ACPI suspend-to-idle code (Rafael
           Wysocki, Srinivas Pandruvada).
      
         - Prefer suspend-to-idle over S3 on ACPI-based systems with the
           ACPI_FADT_LOW_POWER_S0 flag set and the Low Power Idle S0 _DSM
           interface present in the ACPI tables (Rafael Wysocki).
      
         - Update documentation related to system sleep and rename a number of
           items in the code to make it cleare that they are related to
           suspend-to-idle (Rafael Wysocki).
      
         - Export a variable allowing device drivers to check the target
           system sleep state from the core system suspend code (Florian
           Fainelli).
      
         - Clean up the cpuidle subsystem to handle the polling state on x86
           in a more straightforward way and to use %pOF instead of full_name
           (Rafael Wysocki, Rob Herring).
      
         - Update the devfreq framework to fix and clean up a few minor issues
           (Chanwoo Choi, Rob Herring).
      
         - Extend diagnostics in the generic power domains (genpd) framework
           and clean it up slightly (Thara Gopinath, Rob Herring).
      
         - Fix and clean up a couple of issues in the operating performance
           points (OPP) framework (Viresh Kumar, Waldemar Rymarkiewicz).
      
         - Add support for RV1108 to the rockchip-io Adaptive Voltage Scaling
           (AVS) driver (David Wu).
      
         - Fix the usage of notifiers in CPU power management on some
           platforms (Alex Shi).
      
         - Update the pm-graph system suspend/hibernation and boot profiling
           utility (Todd Brandt).
      
         - Make it possible to run the cpupower utility without CPU0 (Prarit
           Bhargava)"
      
      * tag 'pm-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (87 commits)
        cpuidle: Make drivers initialize polling state
        cpuidle: Move polling state initialization code to separate file
        cpuidle: Eliminate the CPUIDLE_DRIVER_STATE_START symbol
        cpufreq: imx6q: Fix imx6sx low frequency support
        cpufreq: speedstep-lib: make several arrays static, makes code smaller
        PM: docs: Delete the obsolete states.txt document
        PM: docs: Describe high-level PM strategies and sleep states
        PM / devfreq: Fix memory leak when fail to register device
        PM / devfreq: Add dependency on PM_OPP
        PM / devfreq: Move private devfreq_update_stats() into devfreq
        PM / devfreq: Convert to using %pOF instead of full_name
        PM / AVS: rockchip-io: add io selectors and supplies for RV1108
        cpufreq: ti: Fix 'of_node_put' being called twice in error handling path
        cpufreq: dt-platdev: Drop few entries from whitelist
        cpufreq: dt-platdev: Automatically create cpufreq device with OPP v2
        ARM: ux500: don't select CPUFREQ_DT
        cpuidle: Convert to using %pOF instead of full_name
        cpufreq: Convert to using %pOF instead of full_name
        PM / Domains: Convert to using %pOF instead of full_name
        cpufreq: Cap the default transition delay value to 10 ms
        ...
      43964409
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid · b42a362e
      Linus Torvalds 提交于
      Pull HID update from Jiri Kosina:
      
       - Wacom driver fixes/updates (device name generation improvements,
         touch ring status support) from Jason Gerecke
      
       - T100 touchpad support from Hans de Goede
      
       - support for batteries driven by HID input reports, from Dmitry
         Torokhov
      
       - Arnd pointed out that driver_lock semaphore is superfluous, as driver
         core already provides all the necessary concurency protection.
         Removal patch from Binoy Jayan
      
       - logical minimum numbering improvements in sensor-hub driver, from
         Srinivas Pandruvada
      
       - support for Microsoft Win8 Wireless Radio Controls extensions from
         João Paulo Rechi Vita
      
       - assorted small fixes and device ID additions
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (28 commits)
        HID: prodikeys: constify snd_rawmidi_ops structures
        HID: sensor: constify platform_device_id
        HID: input: throttle battery uevents
        HID: usbmouse: constify usb_device_id and fix space before '[' error
        HID: usbkbd: constify usb_device_id and fix space before '[' error.
        HID: hid-sensor-hub: Force logical minimum to 1 for power and report state
        HID: wacom: Do not completely map WACOM_HID_WD_TOUCHRINGSTATUS usage
        HID: asus: Add T100CHI bluetooth keyboard dock touchpad support
        HID: ntrig: constify attribute_group structures.
        HID: logitech-hidpp: constify attribute_group structures.
        HID: sensor: constify attribute_group structures.
        HID: multitouch: constify attribute_group structures.
        HID: multitouch: use proper symbolic constant for 0xff310076 application
        HID: multitouch: Support Asus T304UA media keys
        HID: multitouch: Support HID_GD_WIRELESS_RADIO_CTLS
        HID: input: optionally use device id in battery name
        HID: input: map digitizer battery usage
        HID: Remove the semaphore driver_lock
        HID: wacom: add USB_HID dependency
        HID: add ALWAYS_POLL quirk for Logitech 0xc077
        ...
      b42a362e
    • L
      Merge tag 'gpio-v4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio · 70b8e9eb
      Linus Torvalds 提交于
      Pull GPIO updates from Linus Walleij:
       "This is the bulk of the GPIO changes for the v4.14 cycle.
      
        Not so much changes this time, phew. David Daney and Bartosz
        Golaszewski did all the really interesting work in infrastructure
        improvement across GPIO and IRQ core, hats off for them and to tglx
        and Marc Z for general help with these patch sets.
      
        Core changes:
      
         - Allow the GPIO irqchip to allocate IRQs dynamically. This is an
           important change on systems where only a restricted number of IRQs,
           lesser than the number of GPIO lines, can be utilized. Now we can
           allocate these on a first-come-first-served basis instead of
           hogging up valuable IRQ lines.
      
         - Serious fix-up of the kerneldoc documentation and inclusion into
           the kerneldoc builds.
      
         - Pulled in the IRQ simulator from the IRQ core tree and use this in
           the GPIO mockup driver for exhaustive testing of interrupt
           abilities.
      
        New drivers:
      
         - New driver for ThunderX and OCTEON-TX. This is especially
           interesting as it picks up improvements from the IRQ core that
           allow us to handle fasteoi ACKs upwards in a hierarchy when there
           are IRQ flag latches on several levels in a hierarchy. Very
           interesting work here.
      
         - New subdriver for Renesas R-Car r8a7745 (RZ/G1E).
      
        Misc:
      
         - Several fixes and improvements for Xilinx Zynq GPIO.
      
         - Support an enablement GPIO for the 74x164 GPIO.
      
         - Switch a bunch of chips to use devres to allocate irq descriptors.
      
         - A bunch of constification fixes"
      
      * tag 'gpio-v4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (63 commits)
        gpio: mockup: remove unused variable gc
        gpio: pl061: constify amba_id
        Revert "gpiolib: request the gpio before querying its direction"
        gpio: twl6040: remove unneeded forward declaration
        gpio: zevio: make gpio_chip const
        gpio: add gpio_add_lookup_tables() to add several tables at once
        gpio: rcar: Add r8a7745 (RZ/G1E) support
        gpio: brcmstb: check return value of gpiochip_irqchip_add()
        MAINTAINERS: Add entry for THUNDERX GPIO Driver.
        gpio: Add gpio driver support for ThunderX and OCTEON-TX
        gpio: mockup: use irq_sim
        gpio: mxs: use devres for irq generic chip
        gpio: mxc: use devres for irq generic chip
        gpio: pch: use devres for irq generic chip
        gpio: ml-ioh: use devres for irq generic chip
        gpio: sta2x11: use devres for irq generic chip
        gpio: sta2x11: disallow unbinding the driver
        gpio: mxs: disallow unbinding the driver
        gpio: mxc: disallow unbinding the driver
        gpio: aspeed: Remove reference to clock name in debounce warning message
        ...
      70b8e9eb
    • L
      Merge tag 'pinctrl-v4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl · d16605c9
      Linus Torvalds 提交于
      Pull pin control updates from Linus Walleij:
       "This is the big bulk of pin control changes for the v4.14 kernel.
        There are just a few bigger changes (new drivers mostly) and then a
        lot of small patches all over the place.
      
        Core changes:
         - Decision to wrap the sleep mode of the Spreadtrum and in the future
           others into a specially tagged state. The generic DT bindings and
           the new Spreadtrum driver conforms to this. Others should be moved
           over if possible.
      
        New drivers:
         - Spreadtrum SoCs especially the SC9860 SoC.
         - Storlink/Cortina Gemini 3512 and 3516 SoCs.
      
        New subdrivers:
         - Intel Denverton subdriver.
         - Intel Cannon Lake subdriver.
         - Intel Lewisburg subdriver.
         - Allwinner sunxi: R40 subdriver for A10.
         - Socionext uniphier PXs3 subdriver.
         - Rockchip RK3128 subdriver.
         - Renesas SH-PFC R8A77995 subdriver.
      
        Miscellaneous:
         - Qualcomm APQ8064 can handle general purpose clock muxing.
         - Mediatek MT7623 PCIe mux data fixed up.
         - Intel GPIO IRQs are disabled during suspend.
         - Several fixes and addtions to Renesas r8a7796.
         - Qualcomm SPMI GPIO supports dtest route and LV/MV subtype.
         - Input schmitt trigger support in Rockchip RV1108.
         - Aspeed G4 and G5 USB host/device pin control control added.
         - Qualcomm IPQ4019 has matured with a few missing pin groups and
           control bits put in place.
         - Lots of constification, this is the latest in cocinelle fixes"
      
      * tag 'pinctrl-v4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (147 commits)
        Revert "pinctrl: sunxi: Don't enforce bias disable (for now)"
        pinctrl: uniphier: fix members of rmii group for Pro4
        pinctrl: Delete an error message
        pinctrl: core: Delete an error message
        pinctrl: intel: Read back TX buffer state
        pinctrl: rockchip: Add rv1108 recalculated iomux support
        pinctrl: intel: Decrease indentation in intel_gpio_set()
        pinctrl: rza1: Remove suffix from gpiochip label
        pinctrl: qcom: spmi-gpio: Correct power_source range check
        pinctrl: freescale: make mxs_regs const
        pinctrl: aspeed: Rework strap register write logic for the AST2500
        pinctrl: rza1: off by one in rza1_parse_gpiochip()
        pinctrl: qcom: General Purpose clocks for apq8064
        pinctrl: sprd: Add Spreadtrum pin control driver
        dt-bindings: pinctrl: Add DT bindings for Spreadtrum SC9860
        pinctrl: Add sleep related state to indicate sleep related configs
        pinctrl: mediatek: update PCIe mux data for MT7623
        pinctrl: intel: Add Intel Lewisburg GPIO support
        pinctrl: intel: Add Intel Cannon Lake PCH-H pin controller support
        pinctrl: aspeed: Fix ast2500 strap register write logic
        ...
      d16605c9
    • L
      Merge tag 'regulator-v4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator · fe9e3138
      Linus Torvalds 提交于
      Pull regulator updates from Mark Brown:
       "This is an extremely quiet release for the regulator subsystem, it's
        all fairly minor fixes and cleanups plus a few new drivers and ddevice
        ID additions:
      
         - Support for MediaTek MT6380, Ricoh RC5T619 and ST Voltage Reference
           Buffers"
      
      * tag 'regulator-v4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (24 commits)
        regulator: Add support for stm32-vrefbuf
        regulator: Add STM32 Voltage Reference Buffer
        regulator: pv88090: Exception handling for out of bounds
        regulator: da9063: Return an error code on probe failure
        regulator: rn5t618: add RC5T619 PMIC support
        regulator: ltc3589: constify i2c_device_id
        regulator: fan53555: fix I2C device ids
        regulator: add fixes with MT6397 dt-bindings shouldn't reference driver
        regulator: add fixes with MT6323 dt-bindings shouldn't reference driver
        regulator: add fixes with MT6311 dt-bindings shouldn't reference driver
        regulator: Add document for MediaTek MT6380 regulator
        regulator: mt6380: Add support for MT6380
        regulator: pwm-regulator: Remove unneeded gpiod NULL check
        regulator: core: fix a possible race in disable_work handling
        regulator: fan53555: Use of_device_get_match_data() to simplify probe
        regulator: of: regulator_of_get_init_data() missing of_node_get()
        regulator: pwm-regulator: fix example syntax
        regulator: Convert to using %pOF instead of full_name
        regulator: cpcap: Add OF mode mapping
        regulator: cpcap: Fix standby mode
        ...
      fe9e3138
    • L
      Merge tag 'spi-v4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi · b88f5577
      Linus Torvalds 提交于
      Pull spi updates from Mark Brown:
       "A fairly quiet release for the SPI subsystem:
      
         - Move to using IDR for allocating bus numbers
      
         - Modernisation of the ep93xx driver, removing a lot of open coding
           and using the framework more
      
         - The tools have been moved to use the standard tools build system
           and an install target added (there will be a fairly trivial
           conflict with tip resulting from the changes in the main tools
           Makefile)
      
         - A refactoring of the Qualcomm QUP driver which enables new variants
           to be supported
      
         - Explicit support for the Freescale i.MX53 and i.MX6 SPI, Renesas
           R-Car H3 and Rockchip RV1108 controllers"
      
      * tag 'spi-v4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi: (71 commits)
        spi: spi-falcon: drop check of boot select
        spi: imx: fix use of native chip-selects with devicetree
        spi: pl022: constify amba_id
        spi: imx: fix little-endian build
        spi: omap: Allocate bus number from spi framework
        spi: Kernel coding style fixes
        spi: imx: dynamic burst length adjust for PIO mode
        spi: Pick spi bus number from Linux idr or spi alias
        spi: rockchip: configure CTRLR1 according to size and data frame
        spi: altera: Consolidate TX/RX data register access
        spi: altera: Switch to SPI core transfer queue management
        spi: rockchip: add compatible string for rv1108 spi
        spi: qup: fix 64-bit build warning
        spi: qup: hide warning for uninitialized variable
        spi: spi-ep93xx: use the default master transfer queueing mechanism
        spi: spi-ep93xx: remove private data 'current_msg'
        spi: spi-ep93xx: pass the spi_master pointer around
        spi: spi-ep93xx: absorb the interrupt enable/disable helpers
        spi: spi-ep93xx: add spi master prepare_transfer_hardware()
        spi: spi-ep93xx: use 32-bit read/write for all registers
        ...
      b88f5577
    • L
      Merge tag 'edac_for_4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp · 16a832a2
      Linus Torvalds 提交于
      Pull EDAC updates from Borislav Petkov:
      
       - pnd2_edac: A minimal sideband driver (Tony Luck)
      
       - small-ish cleanups and fixes all over the place
      
      * tag 'edac_for_4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
        EDAC, mce_amd: Get rid of local var in amd_filter_mce()
        EDAC, mce_amd: Get rid of most struct cpuinfo_x86 uses
        EDAC, mce_amd: Rename decode_smca_errors() to decode_smca_error()
        EDAC: Make device_type const
        EDAC, pnd2: Properly toggle hidden state for P2SB PCI device
        EDAC, pnd2: Conditionally unhide/hide the P2SB PCI device to read BAR
        EDAC, pnd2: Mask off the lower four bits of a BAR
        EDAC, thunderx: Fix error handling path in thunderx_lmc_probe()
        EDAC, altera: Fix error handling path in altr_edac_device_probe()
        EDAC, pnd2: Build in a minimal sideband driver for Apollo Lake
        EDAC, sb_edac: Classify memory mirroring modes
        EDAC, cpc925, ppc4xx: Convert to using %pOF instead of full_name
        EDAC: Get rid of mci->mod_ver
        EDAC: Constify attribute_group structures
        EDAC, mce_amd: Use cpu_to_node() to find the node ID
      16a832a2
    • L
      Merge tag 'char-misc-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc · bafb0762
      Linus Torvalds 提交于
      Pull char/misc driver updates from Greg KH:
       "Here is the big char/misc driver update for 4.14-rc1.
      
        Lots of different stuff in here, it's been an active development cycle
        for some reason. Highlights are:
      
         - updated binder driver, this brings binder up to date with what
           shipped in the Android O release, plus some more changes that
           happened since then that are in the Android development trees.
      
         - coresight updates and fixes
      
         - mux driver file renames to be a bit "nicer"
      
         - intel_th driver updates
      
         - normal set of hyper-v updates and changes
      
         - small fpga subsystem and driver updates
      
         - lots of const code changes all over the driver trees
      
         - extcon driver updates
      
         - fmc driver subsystem upadates
      
         - w1 subsystem minor reworks and new features and drivers added
      
         - spmi driver updates
      
        Plus a smattering of other minor driver updates and fixes.
      
        All of these have been in linux-next with no reported issues for a
        while"
      
      * tag 'char-misc-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (244 commits)
        ANDROID: binder: don't queue async transactions to thread.
        ANDROID: binder: don't enqueue death notifications to thread todo.
        ANDROID: binder: Don't BUG_ON(!spin_is_locked()).
        ANDROID: binder: Add BINDER_GET_NODE_DEBUG_INFO ioctl
        ANDROID: binder: push new transactions to waiting threads.
        ANDROID: binder: remove proc waitqueue
        android: binder: Add page usage in binder stats
        android: binder: fixup crash introduced by moving buffer hdr
        drivers: w1: add hwmon temp support for w1_therm
        drivers: w1: refactor w1_slave_show to make the temp reading functionality separate
        drivers: w1: add hwmon support structures
        eeprom: idt_89hpesx: Support both ACPI and OF probing
        mcb: Fix an error handling path in 'chameleon_parse_cells()'
        MCB: add support for SC31 to mcb-lpc
        mux: make device_type const
        char: virtio: constify attribute_group structures.
        Documentation/ABI: document the nvmem sysfs files
        lkdtm: fix spelling mistake: "incremeted" -> "incremented"
        perf: cs-etm: Fix ETMv4 CONFIGR entry in perf.data file
        nvmem: include linux/err.h from header
        ...
      bafb0762
    • L
      Merge tag 'driver-core-4.14-rc1' of... · 44b1671f
      Linus Torvalds 提交于
      Merge tag 'driver-core-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
      
      Pull driver core update from Greg KH:
       "Here is the "big" driver core update for 4.14-rc1.
      
        It's really not all that big, the largest thing here being some
        firmware tests to help ensure that that crazy api is working properly.
      
        There's also a new uevent for when a driver is bound or unbound from a
        device, fixing a hole in the driver model that's been there since the
        very beginning. Many thanks to Dmitry for being persistent and
        pointing out how wrong I was about this all along :)
      
        Patches for the new uevents are already in the systemd tree, if people
        want to play around with them.
      
        Otherwise just a number of other small api changes and updates here,
        nothing major. All of these patches have been in linux-next for a
        while with no reported issues"
      
      * tag 'driver-core-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (28 commits)
        driver core: bus: Fix a potential double free
        Do not disable driver and bus shutdown hook when class shutdown hook is set.
        base: topology: constify attribute_group structures.
        base: Convert to using %pOF instead of full_name
        kernfs: Clarify lockdep name for kn->count
        fbdev: uvesafb: remove DRIVER_ATTR() usage
        xen: xen-pciback: remove DRIVER_ATTR() usage
        driver core: Document struct device:dma_ops
        mod_devicetable: Remove excess description from structured comment
        test_firmware: add batched firmware tests
        firmware: enable a debug print for batched requests
        firmware: define pr_fmt
        firmware: send -EINTR on signal abort on fallback mechanism
        test_firmware: add test case for SIGCHLD on sync fallback
        initcall_debug: add deferred probe times
        Input: axp20x-pek - switch to using devm_device_add_group()
        Input: synaptics_rmi4 - use devm_device_add_group() for attributes in F01
        Input: gpio_keys - use devm_device_add_group() for attributes
        driver core: add devm_device_add_group() and friends
        driver core: add device_{add|remove}_group() helpers
        ...
      44b1671f
    • L
      Merge tag 'staging-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging · bf1d6b2c
      Linus Torvalds 提交于
      Pull staging/IIO driver updates from Greg KH:
       "Here is the big staging and IIO driver update for 4.14-rc1.
      
        Lots of staging driver fixes and cleanups, including some reorginizing
        of the lustre header files to try to impose some sanity on what is,
        and what is not, the uapi for that filesystem.
      
        There are some tty core changes in here as well, as the speakup
        drivers need them, and that's ok with me, they are sane and the
        speakup code is getting nicer because of it.
      
        There is also the addition of the obiligatory new wifi driver, just
        because it has been a release or two since we added our last one...
      
        Other than that, lots and lots of small coding style fixes, as usual.
      
        All of these have been in linux-next for a while with no reported
        issues"
      
      * tag 'staging-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (612 commits)
        staging:rtl8188eu:core Fix remove unneccessary else block
        staging: typec: fusb302: make structure fusb302_psy_desc static
        staging: unisys: visorbus: make two functions static
        staging: fsl-dpaa2/eth: fix off-by-one FD ctrl bitmaks
        staging: r8822be: Simplify deinit_priv()
        staging: r8822be: Remove some dead code
        staging: vboxvideo: Use CONFIG_DRM_KMS_FB_HELPER to check for fbdefio availability
        staging:rtl8188eu Fix comparison to NULL
        staging: rts5208: rename mmc_ddr_tunning_rx_cmd to mmc_ddr_tuning_rx_cmd
        Staging: Pi433: style fix - tabs and spaces
        staging: pi433: fix spelling mistake: "preample" -> "preamble"
        staging:rtl8188eu:core Fix Code Indent
        staging: typec: fusb302: Export current-limit through a power_supply class dev
        staging: typec: fusb302: Add support for USB2 charger detection through extcon
        staging: typec: fusb302: Use client->irq as irq if set
        staging: typec: fusb302: Get max snk mv/ma/mw from device-properties
        staging: typec: fusb302: Set max supply voltage to 5V
        staging: typec: tcpm: Add get_current_limit tcpc_dev callback
        staging:rtl8188eu Use __func__ instead of function name
        staging: lustre: coding style fixes found by checkpatch.pl
        ...
      bf1d6b2c
    • L
      Merge tag 'tty-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty · e63a94f1
      Linus Torvalds 提交于
      Pull tty/serial updates from Greg KH:
       "Here is the big tty/serial driver update for 4.14-rc1.
      
        Well, not all that big, just a number of small serial driver fixes,
        and a new serial driver. Also in here are some much needed goldfish
        tty driver (emulator) fixes to try to get that codebase under control.
      
        All of these have been in linux-next for a while with no reported
        issues"
      
      * tag 'tty-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (94 commits)
        tty: goldfish: Implement support for kernel 'earlycon' parameter
        tty: goldfish: Use streaming DMA for r/w operations on Ranchu platforms
        tty: goldfish: Refactor constants to better reflect their nature
        serial: 8250_port: Remove useless NULL checks
        earlycon: initialise baud field of earlycon device structure
        tty: hvcs: make ktermios const
        pty: show associative slave of ptmx in fdinfo
        tty: n_gsm: Add compat_ioctl
        tty: hvcs: constify vio_device_id
        tty: hvc_vio: constify vio_device_id
        tty: mips_ejtag_fdc: constify mips_cdmm_device_id
        Introduce 8250_men_mcb
        mcb: introduce mcb_get_resource()
        serial: imx: Avoid post-PIO cleanup if TX DMA is started
        tty: serial: imx: disable irq after suspend
        serial: 8250_uniphier: add suspend/resume support
        serial: 8250_uniphier: use CHAR register for canary to detect power-off
        serial: 8250_uniphier: fix serial port index in private data
        serial: 8250: of: Add new port type for MediaTek BTIF controller on MT7622/23 SoC
        dt-bindings: serial: 8250: Add MediaTek BTIF controller bindings
        ...
      e63a94f1
    • L
      Merge tag 'usb-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb · 1a3b85ea
      Linus Torvalds 提交于
      Pull USB/PHY driver updates from Greg KH:
       "Here is the large USB and PHY driver update for 4.14-rc1.
      
        Not all that exciting, a few new PHY drivers, the usual mess of gadget
        driver updates and fixes, and of course, xhci updates to try to tame
        that beast.
      
        A number of usb-serial updates and other small fixes all over the USB
        driver tree are in here as well. Full details are in the shortlog.
      
        All of these have been in linux-next for a while with no reported
        issues"
      
      * tag 'usb-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (171 commits)
        usbip: vhci-hcd: make vhci_hc_driver const
        usb: phy: Avoid unchecked dereference warning
        usb: imx21-hcd: make imx21_hc_driver const
        usb: host: make ehci_fsl_overrides const and __initconst
        dt-bindings: mt8173-mtu3: add generic compatible and rename file
        dt-bindings: mt8173-xhci: add generic compatible and rename file
        usb: xhci-mtk: add generic compatible string
        usbip: auto retry for concurrent attach
        USB: serial: option: simplify 3 D-Link device entries
        USB: serial: option: add support for D-Link DWM-157 C1
        usb: core: usbport: fix "BUG: key not in .data" when lockdep is enabled
        usb: chipidea: usb2: check memory allocation failure
        usb: Add device quirk for Logitech HD Pro Webcam C920-C
        usb: misc: lvstest: add entry to place port in compliance mode
        usb: xhci: Support enabling of compliance mode for xhci 1.1
        usb:xhci:Fix regression when ATI chipsets detected
        usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard
        usb: gadget: make snd_pcm_hardware const
        usb: common: use of_property_read_bool()
        USB: core: constify vm_operations_struct
        ...
      1a3b85ea
    • L
      Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux · 04759194
      Linus Torvalds 提交于
      Pull arm64 updates from Catalin Marinas:
      
       - VMAP_STACK support, allowing the kernel stacks to be allocated in the
         vmalloc space with a guard page for trapping stack overflows. One of
         the patches introduces THREAD_ALIGN and changes the generic
         alloc_thread_stack_node() to use this instead of THREAD_SIZE (no
         functional change for other architectures)
      
       - Contiguous PTE hugetlb support re-enabled (after being reverted a
         couple of times). We now have the semantics agreed in the generic mm
         layer together with API improvements so that the architecture code
         can detect between contiguous and non-contiguous huge PTEs
      
       - Initial support for persistent memory on ARM: DC CVAP instruction
         exposed to user space (HWCAP) and the in-kernel pmem API implemented
      
       - raid6 improvements for arm64: faster algorithm for the delta syndrome
         and implementation of the recovery routines using Neon
      
       - FP/SIMD refactoring and removal of support for Neon in interrupt
         context. This is in preparation for full SVE support
      
       - PTE accessors converted from inline asm to cmpxchg so that we can use
         LSE atomics if available (ARMv8.1)
      
       - Perf support for Cortex-A35 and A73
      
       - Non-urgent fixes and cleanups
      
      * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (75 commits)
        arm64: cleanup {COMPAT_,}SET_PERSONALITY() macro
        arm64: introduce separated bits for mm_context_t flags
        arm64: hugetlb: Cleanup setup_hugepagesz
        arm64: Re-enable support for contiguous hugepages
        arm64: hugetlb: Override set_huge_swap_pte_at() to support contiguous hugepages
        arm64: hugetlb: Override huge_pte_clear() to support contiguous hugepages
        arm64: hugetlb: Handle swap entries in huge_pte_offset() for contiguous hugepages
        arm64: hugetlb: Add break-before-make logic for contiguous entries
        arm64: hugetlb: Spring clean huge pte accessors
        arm64: hugetlb: Introduce pte_pgprot helper
        arm64: hugetlb: set_huge_pte_at Add WARN_ON on !pte_present
        arm64: kexec: have own crash_smp_send_stop() for crash dump for nonpanic cores
        arm64: dma-mapping: Mark atomic_pool as __ro_after_init
        arm64: dma-mapping: Do not pass data to gen_pool_set_algo()
        arm64: Remove the !CONFIG_ARM64_HW_AFDBM alternative code paths
        arm64: Ignore hardware dirty bit updates in ptep_set_wrprotect()
        arm64: Move PTE_RDONLY bit handling out of set_pte_at()
        kvm: arm64: Convert kvm_set_s2pte_readonly() from inline asm to cmpxchg()
        arm64: Convert pte handling from inline asm to using (cmp)xchg
        arm64: neon/efi: Make EFI fpsimd save/restore variables static
        ...
      04759194
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux · 9e85ae6a
      Linus Torvalds 提交于
      Pull s390 updates from Martin Schwidefsky:
       "The first part of the s390 updates for 4.14:
      
         - Add machine type 0x3906 for IBM z14
      
         - Add IBM z14 TLB flushing improvements for KVM guests
      
         - Exploit the TOD clock epoch extension to provide a continuous TOD
           clock afer 2042/09/17
      
         - Add NIAI spinlock hints for IBM z14
      
         - Rework the vmcp driver and use CMA for the respone buffer of z/VM
           CP commands
      
         - Drop some s390 specific asm headers and use the generic version
      
         - Add block discard for DASD-FBA devices under z/VM
      
         - Add average request times to DASD statistics
      
         - A few of those constify patches which seem to be in vogue right now
      
         - Cleanup and bug fixes"
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (50 commits)
        s390/mm: avoid empty zero pages for KVM guests to avoid postcopy hangs
        s390/dasd: Add discard support for FBA devices
        s390/zcrypt: make CPRBX const
        s390/uaccess: avoid mvcos jump label
        s390/mm: use generic mm_hooks
        s390/facilities: fix typo
        s390/vmcp: simplify vmcp_response_free()
        s390/topology: Remove the unused parent_node() macro
        s390/dasd: Change unsigned long long to unsigned long
        s390/smp: convert cpuhp_setup_state() return code to zero on success
        s390: fix 'novx' early parameter handling
        s390/dasd: add average request times to dasd statistics
        s390/scm: use common completion path
        s390/pci: log changes to uid checking
        s390/vmcp: simplify vmcp_ioctl()
        s390/vmcp: return -ENOTTY for unknown ioctl commands
        s390/vmcp: split vmcp header file and move to uapi
        s390/vmcp: make use of contiguous memory allocator
        s390/cpcmd,vmcp: avoid GFP_DMA allocations
        s390/vmcp: fix uaccess check and avoid undefined behavior
        ...
      9e85ae6a
    • L
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha · 6caffe21
      Linus Torvalds 提交于
      Pull alpha updates from Matt Turner:
       "This contains some small clean up patches I've neglected, and some
        build improvements from Ben Hutchings"
      
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha:
        alpha: math-emu: Fix modular build
        alpha: Restore symbol versions for symbols exported from assembly
        alpha: defconfig: Cleanup from old Kconfig options
        alpha: use kobj_to_dev()
        alpha: squash lines for immediate return
        alpha: kernel: Use vma_pages()
        alpha: silence a buffer overflow warning
        alpha: marvel: make use of raw_spinlock variants
        alpha: cleanup: remove __NR_sys_epoll_*, leave __NR_epoll_*
        alpha: use generic fb.h
      6caffe21
    • L
      Merge branch 'parisc-4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux · f32c9e05
      Linus Torvalds 提交于
      Pull parisc updates from Helge Deller:
       "Major changes include:
      
         - Full support of the firmware Page Deallocation Table with
           MADV_HWPOISON and MADV_SOFT_OFFLINE. A kernel thread scans
           regularily for new bad memory pages.
      
         - Full support for self-extracting kernel.
      
         - Added UBSAN support.
      
         - Lots of section mismatch fixes across all parisc drivers.
      
         - Added examples for %pF and %pS usage in printk-formats.txt"
      
      * 'parisc-4.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: (28 commits)
        printk-formats.txt: Add examples for %pF and %pS usage
        parisc: Fix up devices below a PCI-PCI MegaRAID controller bridge
        parisc/core: Fix section mismatches
        parisc/ipmi_si_intf: Fix section mismatches on parisc platform
        parisc/input/hilkbd: Fix section mismatches
        parisc/net/lasi_82596: Fix section mismatches
        parisc/serio: Fix section mismatches in gscps2 and hp_sdc drivers
        parisc: Fix section mismatches in parisc core drivers
        parisc/parport_gsc: Fix section mismatches
        parisc/scsi/lasi700: Fix section mismatches
        parisc/scsi/zalon: Fix section mismatches
        parisc/8250_gsc: Fix section mismatches
        parisc/mux: Fix section mismatches
        parisc/sticore: Fix section mismatches
        parisc/harmony: Fix section mismatches
        parisc: Wire up support for self-extracting kernel
        parisc: Make existing core files reuseable for bootloader
        parisc: Add core code for self-extracting kernel
        parisc: Enable UBSAN support
        parisc/random: Add machine specific randomness
        ...
      f32c9e05
    • L
      Merge tag 'm68k-for-v4.14-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k · d1ce4956
      Linus Torvalds 提交于
      Pull m68k updates from Geert Uytterhoeven:
      
        - restore symbol versions for symbols exported from assembly
      
        - defconfig updates
      
        - Mac fixes
      
      * tag 'm68k-for-v4.14-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
        m68k/mac: Avoid soft-lockup warning after mach_power_off
        m68k/mac: Don't hang waiting for Cuda power-down command
        m68k: Restore symbol versions for symbols exported from assembly
        m68k/defconfig: Update defconfigs for v4.13-rc1
      d1ce4956
  3. 05 9月, 2017 5 次提交