1. 19 Oct, 2017 1 commit
  2. 09 Sep, 2017 1 commit
    • Yury Norov's avatar
      lib/bitmap.c: make bitmap_parselist() thread-safe and much faster · 0a5ce083
      Yury Norov authored
      Current implementation of bitmap_parselist() uses a static variable to
      save local state while setting bits in the bitmap.  It is obviously wrong
      if we assume execution in multiprocessor environment.  Fortunately, it's
      possible to rewrite this portion of code to avoid using the static
      variable.
      
      It is also possible to set bits in the mask per-range with bitmap_set(),
      not per-bit, as it is implemented now, with set_bit(); which is way
      faster.
      
      The important side effect of this change is that setting bits in this
      function from now is not per-bit atomic and less memory-ordered.  This is
      because set_bit() guarantees the order of memory accesses, while
      bitmap_set() does not.  I think that it is the advantage of the new
      approach, because the bitmap_parselist() is intended to initialise bit
      arrays, and user should protect the whole bitmap during initialisation if
      needed.  So protecting individual bits looks expensive and useless.  Also,
      other range-oriented functions in lib/bitmap.c don't worry much about
      atomicity.
      
      With all that, setting 2k bits in map with the pattern like 0-2047:128/256
      becomes ~50 times faster after applying the patch in my testing
      environment (arm64 hosted on qemu).
      
      The second patch of the series adds the test for bitmap_parselist().  It's
      not intended to cover all tricky cases, just to make sure that I didn't
      screw up during rework.
      
      Link: http://lkml.kernel.org/r/20170807225438.16161-1-ynorov@caviumnetworks.comSigned-off-by: default avatarYury Norov <ynorov@caviumnetworks.com>
      Cc: Noam Camus <noamca@mellanox.com>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Matthew Wilcox <mawilcox@microsoft.com>
      Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0a5ce083
  3. 10 Jul, 2017 1 commit
  4. 02 Apr, 2017 1 commit
  5. 11 Oct, 2016 1 commit
    • Noam Camus's avatar
      lib/bitmap.c: enhance bitmap syntax · 2d13e6ca
      Noam Camus authored
      Today there are platforms with many CPUs (up to 4K).  Trying to boot only
      part of the CPUs may result in too long string.
      
      For example lets take NPS platform that is part of arch/arc.  This
      platform have SMP system with 256 cores each with 16 HW threads (SMT
      machine) where HW thread appears as CPU to the kernel.  In this example
      there is total of 4K CPUs.  When one tries to boot only part of the HW
      threads from each core the string representing the map may be long...  For
      example if for sake of performance we decided to boot only first half of
      HW threads of each core the map will look like:
      0-7,16-23,32-39,...,4080-4087
      
      This patch introduce new syntax to accommodate with such use case.  I
      added an optional postfix to a range of CPUs which will choose according
      to given modulo the desired range of reminders i.e.:
      
          <cpus range>:sed_size/group_size
      
      For example, above map can be described in new syntax like this:
      0-4095:8/16
      
      Note that this patch is backward compatible with current syntax.
      
      [akpm@linux-foundation.org: rework documentation]
      Link: http://lkml.kernel.org/r/1473579629-4283-1-git-send-email-noamca@mellanox.comSigned-off-by: default avatarNoam Camus <noamca@mellanox.com>
      Cc: David Decotigny <decot@googlers.com>
      Cc: Ben Hutchings <ben@decadent.org.uk>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Pan Xinhui <xinhui@linux.vnet.ibm.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2d13e6ca
  6. 15 Jul, 2016 1 commit
  7. 20 Feb, 2016 1 commit
  8. 10 Sep, 2015 3 commits
  9. 26 Jun, 2015 2 commits
    • Sudeep Holla's avatar
      bitmap: remove explicit newline handling using scnprintf format string · 9cf79d11
      Sudeep Holla authored
      bitmap_print_to_pagebuf uses scnprintf to copy the cpumask/list to page
      buffer.  It handles the newline and trailing null character explicitly.
      
      It's unnecessary and also partially duplicated as scnprintf already adds
      trailing null character.  The newline can be passed through format
      string to scnprintf.  This patch does that simplification.
      
      However theoretically there's one behavior difference: when the buffer
      is too small, the original code would still output '\n' at the end while
      the new code(with this patch) would just continue to print the formatted
      string.  Since this function is dealing with only page buffers, it's
      highly unlikely to hit that corner case.
      
      This patch will help in auditing the users of bitmap_print_to_pagebuf to
      verify that the buffer passed is large enough and get rid of it
      completely by replacing them with direct scnprintf()
      
      [akpm@linux-foundation.org: tweak comment]
      Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
      Suggested-by: default avatarPawel Moll <Pawel.Moll@arm.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      9cf79d11
    • Chris Metcalf's avatar
      __bitmap_parselist: fix bug in empty string handling · 2528a8b8
      Chris Metcalf authored
      bitmap_parselist("", &mask, nmaskbits) will erroneously set bit zero in
      the mask.  The same bug is visible in cpumask_parselist() since it is
      layered on top of the bitmask code, e.g.  if you boot with "isolcpus=",
      you will actually end up with cpu zero isolated.
      
      The bug was introduced in commit 4b060420 ("bitmap, irq: add
      smp_affinity_list interface to /proc/irq") when bitmap_parselist() was
      generalized to support userspace as well as kernelspace.
      
      Fixes: 4b060420 ("bitmap, irq: add smp_affinity_list interface to /proc/irq")
      Signed-off-by: default avatarChris Metcalf <cmetcalf@ezchip.com>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2528a8b8
  10. 17 Apr, 2015 1 commit
  11. 14 Feb, 2015 12 commits
  12. 13 Feb, 2015 5 commits
  13. 13 Dec, 2014 1 commit
  14. 07 Nov, 2014 1 commit
  15. 29 Oct, 2014 1 commit
  16. 09 Sep, 2014 1 commit
  17. 07 Aug, 2014 6 commits