public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] lib: rework bitmap_parse
@ 2019-04-28  3:29 Yury Norov
  2019-04-28  3:29 ` [PATCH 1/6] lib/string: add strnchrnul() Yury Norov
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Yury Norov @ 2019-04-28  3:29 UTC (permalink / raw)
  To: Andrew Morton, Andy Shevchenko, Rasmus Villemoes, Dmitry Torokhov,
	David S . Miller, Stephen Rothwell, Amritha Nambiar,
	Willem de Bruijn, Kees Cook, Matthew Wilcox, Tobin C . Harding,
	Will Deacon, Miklos Szeredi, Vineet Gupta, Chris Wilson,
	Arnaldo Carvalho de Melo
  Cc: Yury Norov, linux-kernel, Yury Norov, Jens Axboe,
	Steffen Klassert

On top of next-20190418.

Similarly to recently revisited bitmap_parselist() [1],
bitmap_parse() is ineffective and overcomplicated.  This
series reworks it, aligns its interface with bitmap_parselist()
and makes usage simpler.

The series also adds a test for the function and fixes usage of it
in cpumask_parse() according to new design - drops the calculating
of length of an input string.

The following users would also consider to drop the length argument,
if possible:
drivers/block/drbd/drbd_main.c:2608
kernel/padata.c:924
net/core/net-sysfs.c:726
net/core/net-sysfs.c:1309
net/core/net-sysfs.c:1391

bitmap_parse() takes the array of numbers to be put into the map in
the BE order which is reversed to the natural LE order for bitmaps.
For example, to construct bitmap containing a bit on the position 42,
we have to put a line '400,0'. Current implementation reads chunk
one by one from the beginning ('400' before '0') and makes bitmap
shift after each successful parse. It makes the complexity of the
whole process as O(n^2). We can do it in reverse direction ('0'
before '400') and avoid shifting, but it requires reverse parsing
helpers.

Tested on arm64 and BE mips.

[1] https://lkml.org/lkml/2019/4/16/66

Yury Norov (6):
  lib/string: add strnchrnul()
  bitops: more BITS_TO_* macros
  lib/bitmap: make bitmap_parse_user a wrapper on bitmap_parse
  lib: rework bitmap_parse()
  lib: add test for bitmap_parse()
  cpumask: don't calculate length of the input string

 include/linux/bitmap.h       |   8 +-
 include/linux/bitops.h       |   3 +
 include/linux/cpumask.h      |   4 +-
 include/linux/string.h       |   3 +
 lib/bitmap.c                 | 197 +++++++++++++++++------------------
 lib/string.c                 |  20 ++++
 lib/test_bitmap.c            | 102 +++++++++++++++++-
 tools/include/linux/bitops.h |   9 +-
 8 files changed, 230 insertions(+), 116 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2019-05-01  0:37 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-28  3:29 [PATCH 0/4] lib: rework bitmap_parse Yury Norov
2019-04-28  3:29 ` [PATCH 1/6] lib/string: add strnchrnul() Yury Norov
2019-04-28 16:04   ` Andy Shevchenko
2019-04-28 18:26     ` Yury Norov
2019-04-28 19:22       ` Andy Shevchenko
2019-04-28 18:58   ` Rasmus Villemoes
2019-04-28  3:29 ` [PATCH 2/6] bitops: more BITS_TO_* macros Yury Norov
2019-04-28 16:06   ` Andy Shevchenko
2019-04-28  3:29 ` [PATCH 3/6] lib/bitmap: make bitmap_parse_user a wrapper on bitmap_parse Yury Norov
2019-04-28  3:29 ` [PATCH 4/6] lib: rework bitmap_parse() Yury Norov
2019-04-28 16:57   ` Andy Shevchenko
2019-05-01  0:37     ` Yury Norov
2019-04-28  3:29 ` [PATCH 5/6] lib: add test for bitmap_parse() Yury Norov
2019-04-28  3:29 ` [PATCH 6/6] cpumask: don't calculate length of the input string Yury Norov
2019-04-28 15:40 ` [PATCH 0/4] lib: rework bitmap_parse Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox