1. 21 10月, 2018 8 次提交
    • M
      xarray: Add XArray iterators · b803b428
      Matthew Wilcox 提交于
      The xa_for_each iterator allows the user to efficiently walk a range
      of the array, executing the loop body once for each entry in that
      range that matches the filter.  This commit also includes xa_find()
      and xa_find_after() which are helper functions for xa_for_each() but
      may also be useful in their own right.
      
      In the xas family of functions, we have xas_for_each(), xas_find(),
      xas_next_entry(), xas_for_each_tagged(), xas_find_tagged(),
      xas_next_tagged() and xas_pause().
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      b803b428
    • M
      xarray: Add XArray conditional store operations · 41aec91f
      Matthew Wilcox 提交于
      Like cmpxchg(), xa_cmpxchg will only store to the index if the current
      entry matches the old entry.  It returns the current entry, which is
      usually more useful than the errno returned by radix_tree_insert().
      For the users who really only want the errno, the xa_insert() wrapper
      provides a more convenient calling convention.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      41aec91f
    • M
      xarray: Add XArray unconditional store operations · 58d6ea30
      Matthew Wilcox 提交于
      xa_store() differs from radix_tree_insert() in that it will overwrite an
      existing element in the array rather than returning an error.  This is
      the behaviour which most users want, and those that want more complex
      behaviour generally want to use the xas family of routines anyway.
      
      For memory allocation, xa_store() will first attempt to request memory
      from the slab allocator; if memory is not immediately available, it will
      drop the xa_lock and allocate memory, keeping a pointer in the xa_state.
      It does not use the per-CPU cache, although those will continue to exist
      until all radix tree users are converted to the xarray.
      
      This patch also includes xa_erase() and __xa_erase() for a streamlined
      way to store NULL.  Since there is no need to allocate memory in order
      to store a NULL in the XArray, we do not need to trouble the user with
      deciding what memory allocation flags to use.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      58d6ea30
    • M
      xarray: Add XArray marks · 9b89a035
      Matthew Wilcox 提交于
      XArray marks are like the radix tree tags, only slightly more strongly
      typed.  They are renamed in order to distinguish them from tagged
      pointers.  This commit adds the basic get/set/clear operations.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      9b89a035
    • M
      xarray: Add XArray load operation · ad3d6c72
      Matthew Wilcox 提交于
      The xa_load function brings with it a lot of infrastructure; xa_empty(),
      xa_is_err(), and large chunks of the XArray advanced API that are used
      to implement xa_load.
      
      As the test-suite demonstrates, it is possible to use the XArray functions
      on a radix tree.  The radix tree functions depend on the GFP flags being
      stored in the root of the tree, so it's not possible to use the radix
      tree functions on an XArray.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      ad3d6c72
    • M
      xarray: Add documentation · 992a8e60
      Matthew Wilcox 提交于
      This is documentation on how to use the XArray, not details about its
      internal implementation.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      Acked-by: NJosef Bacik <jbacik@fb.com>
      992a8e60
    • M
      xarray: Define struct xa_node · 01959dfe
      Matthew Wilcox 提交于
      This is a direct replacement for struct radix_tree_node.  A couple of
      struct members have changed name, so convert those.  Use a #define so
      that radix tree users continue to work without change.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      Reviewed-by: NJosef Bacik <jbacik@fb.com>
      01959dfe
    • M
      xarray: Add definition of struct xarray · f8d5d0cc
      Matthew Wilcox 提交于
      This is a direct replacement for struct radix_tree_root.  Some of the
      struct members have changed name; convert those, and use a #define so
      that radix_tree users continue to work without change.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      Reviewed-by: NJosef Bacik <jbacik@fb.com>
      f8d5d0cc
  2. 30 9月, 2018 8 次提交
    • M
      xarray: Change definition of sibling entries · 02c02bf1
      Matthew Wilcox 提交于
      Instead of storing a pointer to the slot containing the canonical entry,
      store the offset of the slot.  Produces slightly more efficient code
      (~300 bytes) and simplifies the implementation.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      Reviewed-by: NJosef Bacik <jbacik@fb.com>
      02c02bf1
    • M
      xarray: Replace exceptional entries · 3159f943
      Matthew Wilcox 提交于
      Introduce xarray value entries and tagged pointers to replace radix
      tree exceptional entries.  This is a slight change in encoding to allow
      the use of an extra bit (we can now store BITS_PER_LONG - 1 bits in a
      value entry).  It is also a change in emphasis; exceptional entries are
      intimidating and different.  As the comment explains, you can choose
      to store values or pointers in the xarray and they are both first-class
      citizens.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      Reviewed-by: NJosef Bacik <jbacik@fb.com>
      3159f943
    • M
      idr: Permit any valid kernel pointer to be stored · 66ee620f
      Matthew Wilcox 提交于
      An upcoming change to the encoding of internal entries will set the bottom
      two bits to 0b10.  Unfortunately, m68k only aligns some data structures
      to 2 bytes, so the IDR will interpret them as internal entries and things
      will go badly wrong.
      
      Change the radix tree so that it stops either when the node indicates
      that it's the bottom of the tree (shift == 0) or when the entry is not an
      internal entry.  This means we cannot insert an arbitrary kernel pointer
      as a multiorder entry, but the IDR does not permit multiorder entries.
      
      Annoyingly, this means the IDR can no longer take advantage of the radix
      tree's ability to store a single entry at offset 0 without allocating
      memory.  A pointer which is 2-byte aligned cannot be stored directly in
      the root as it would be indistinguishable from a node, so we must allocate
      a node in order to store a 2-byte pointer at index 0.  The idr_replace()
      function does not take a GFP flags argument, so cannot allocate memory.
      If a user inserts a 4-byte aligned pointer at index 0 and then replaces
      it with a 2-byte aligned pointer, we must be able to store it.
      
      Arbitrary pointer values are still not permitted; pointers of the
      form 2 + (i * 4) for values of i between 0 and 1023 are reserved for
      the implementation.  These are not valid kernel pointers as they would
      point into the zero page.
      
      This change does cause a runtime memory consumption regression for
      the IDA.  I will recover that later.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      Tested-by: NGuenter Roeck <linux@roeck-us.net>
      66ee620f
    • M
      Update email address · 3d0186bb
      Matthew Wilcox 提交于
      Redirect some older email addresses that are in the git logs.
      Signed-off-by: NMatthew Wilcox <willy@infradead.org>
      3d0186bb
    • G
      Merge tag 'for-linus-20180929' of git://git.kernel.dk/linux-block · 291d0e5d
      Greg Kroah-Hartman 提交于
      Jens writes:
        "Block fixes for 4.19-rc6
      
         A set of fixes that should go into this release. This pull request
         contains:
      
         - A fix (hopefully) for the persistent grants for xen-blkfront. A
           previous fix from this series wasn't complete, hence reverted, and
           this one should hopefully be it. (Boris Ostrovsky)
      
         - Fix for an elevator drain warning with SMR devices, which is
           triggered when you switch schedulers (Damien)
      
         - bcache deadlock fix (Guoju Fang)
      
         - Fix for the block unplug tracepoint, which has had the
           timer/explicit flag reverted since 4.11 (Ilya)
      
         - Fix a regression in this series where the blk-mq timeout hook is
           invoked with the RCU read lock held, hence preventing it from
           blocking (Keith)
      
         - NVMe pull from Christoph, with a single multipath fix (Susobhan Dey)"
      
      * tag 'for-linus-20180929' of git://git.kernel.dk/linux-block:
        xen/blkfront: correct purging of persistent grants
        Revert "xen/blkfront: When purging persistent grants, keep them in the buffer"
        blk-mq: I/O and timer unplugs are inverted in blktrace
        bcache: add separate workqueue for journal_write to avoid deadlock
        xen/blkfront: When purging persistent grants, keep them in the buffer
        block: fix deadline elevator drain for zoned block devices
        blk-mq: Allow blocking queue tag iter callbacks
        nvme: properly propagate errors in nvme_mpath_init
      291d0e5d
    • G
      Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · e7541773
      Greg Kroah-Hartman 提交于
      Thomas writes:
        "A single fix for the AMD memory encryption boot code so it does not
         read random garbage instead of the cached encryption bit when a kexec
         kernel is allocated above the 32bit address limit."
      
      * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/boot: Fix kexec booting failure in the SEV bit detection code
      e7541773
    • G
      Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · e1ce697d
      Greg Kroah-Hartman 提交于
      Thomas writes:
        "Three small fixes for clocksource drivers:
         - Proper error handling in the Atmel PIT driver
         - Add CLOCK_SOURCE_SUSPEND_NONSTOP for TI SoCs so suspend works again
         - Fix the next event function for Facebook Backpack-CMM BMC chips so
           usleep(100) doesnt sleep several milliseconds"
      
      * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        clocksource/drivers/timer-atmel-pit: Properly handle error cases
        clocksource/drivers/fttmr010: Fix set_next_event handler
        clocksource/drivers/ti-32k: Add CLOCK_SOURCE_SUSPEND_NONSTOP flag for non-am43 SoCs
      e1ce697d
    • G
      Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · af17b3aa
      Greg Kroah-Hartman 提交于
      Thomas writes:
        "A single fix for a missing sanity check when a pinned event is tried
        to be read on the wrong CPU due to a legit event scheduling failure."
      
      * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        perf/core: Add sanity check to deal with pinned event failure
      af17b3aa
  3. 29 9月, 2018 12 次提交
  4. 28 9月, 2018 10 次提交
  5. 27 9月, 2018 2 次提交