From: Yury Norov <yury.norov@gmail.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
"David S . Miller" <davem@davemloft.net>,
Stephen Rothwell <sfr@canb.auug.org.au>,
Amritha Nambiar <amritha.nambiar@intel.com>,
Willem de Bruijn <willemb@google.com>,
Kees Cook <keescook@chromium.org>,
Matthew Wilcox <willy@infradead.org>,
"Tobin C . Harding" <tobin@kernel.org>,
Will Deacon <will.deacon@arm.com>,
Miklos Szeredi <mszeredi@redhat.com>,
Vineet Gupta <vineet.gupta1@synopsys.com>,
Chris Wilson <chris@chris-wilson.co.uk>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
linux-kernel@vger.kernel.org, Yury Norov <ynorov@marvell.com>,
Jens Axboe <axboe@kernel.dk>,
Steffen Klassert <steffen.klassert@secunet.com>
Subject: Re: [PATCH 5/7] lib: rework bitmap_parse()
Date: Thu, 9 May 2019 19:26:33 -0700 [thread overview]
Message-ID: <20190510022633.GA30629@yury-thinkpad> (raw)
In-Reply-To: <20190508084632.GY9224@smile.fi.intel.com>
Hi Andy,
Thanks for thorough review.
On Wed, May 08, 2019 at 11:46:32AM +0300, Andy Shevchenko wrote:
> On Tue, Apr 30, 2019 at 06:06:34PM -0700, Yury Norov wrote:
> > bitmap_parse() is ineffective and full of opaque variables and opencoded
> > parts. It leads to hard understanding and usage of it. This rework
> > includes:
> > - remove bitmap_shift_left() call from the cycle. Now it makes the
> > complexity of the algorithm as O(nbits^2). In the suggested approach
> > the input string is parsed in reverse direction, so no shifts needed;
> > - relax requirement on a single comma and no white spaces between chunks.
> > It is considered useful in scripting, and it aligns with
> > bitmap_parselist();
> > - split bitmap_parse() to small readable helpers;
> > - make an explicit calculation of the end of input line at the
> > beginning, so users of the bitmap_parse() won't bother doing this.
>
> > +static inline bool in_str(const char *start, const char *ptr)
> > +{
> > + return start <= ptr;
> > +}
> > +
>
> The explicit use of the conditional is better.
>
> --
> With Best Regards,
> Andy Shevchenko
I still think that is_str() is more verbose, but it's minor issue
anyways, so I obey. Below is the patch that removes the function.
It's up to Andrew finally, either apply it or not.
Thanks,
Yury
From 7438c15a0b165032a3e5a6d87daabe877dc8cbc8 Mon Sep 17 00:00:00 2001
From: Yury Norov <ynorov@marvell.com>
Date: Thu, 9 May 2019 17:54:23 -0700
Subject: [PATCH] lib: opencode in_str()
Signed-off-by: Yury Norov <ynorov@marvell.com>
---
lib/bitmap.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/lib/bitmap.c b/lib/bitmap.c
index ebcf4700ebed..ecf93d2982a5 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -454,11 +454,6 @@ static inline bool end_of_region(char c)
return __end_of_region(c) || end_of_str(c);
}
-static inline bool in_str(const char *start, const char *ptr)
-{
- return start <= ptr;
-}
-
/*
* The format allows commas and whitespases at the beginning
* of the region.
@@ -473,7 +468,7 @@ static const char *bitmap_find_region(const char *str)
static const char *bitmap_find_region_reverse(const char *start, const char *end)
{
- while (in_str(start, end) && __end_of_region(*end))
+ while (start <= end && __end_of_region(*end))
end--;
return end;
@@ -618,7 +613,7 @@ static const char *bitmap_get_x32_reverse(const char *start,
ret |= c << i;
- if (!in_str(start, end) || __end_of_region(*end))
+ if (start > end || __end_of_region(*end))
goto out;
}
@@ -653,7 +648,7 @@ int bitmap_parse(const char *start, unsigned int buflen,
u32 *bitmap = (u32 *)maskp;
int unset_bit;
- while (in_str(start, (end = bitmap_find_region_reverse(start, end)))) {
+ while (start <= (end = bitmap_find_region_reverse(start, end))) {
if (!chunks--)
return -EOVERFLOW;
--
2.17.1
next prev parent reply other threads:[~2019-05-10 2:26 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-01 1:06 [PATCH 0/7] lib: rework bitmap_parse Yury Norov
2019-05-01 1:06 ` [PATCH 1/7] lib/string: add strnchrnul() Yury Norov
2019-05-08 8:47 ` Andy Shevchenko
2019-05-01 1:06 ` [PATCH 2/7] bitops: more BITS_TO_* macros Yury Norov
2019-05-08 8:47 ` Andy Shevchenko
2019-05-01 1:06 ` [PATCH 3/7] lib: add test for bitmap_parse() Yury Norov
2019-05-08 8:47 ` Andy Shevchenko
2019-05-01 1:06 ` [PATCH 4/7] lib: make bitmap_parse_user a wrapper on bitmap_parse Yury Norov
2019-05-08 8:47 ` Andy Shevchenko
2019-05-01 1:06 ` [PATCH 5/7] lib: rework bitmap_parse() Yury Norov
2019-05-08 8:46 ` Andy Shevchenko
2019-05-10 2:26 ` Yury Norov [this message]
2019-05-24 2:51 ` Andrew Morton
2019-05-01 1:06 ` [PATCH 6/7] lib: new testcases for bitmap_parse{_user} Yury Norov
2019-05-08 8:47 ` Andy Shevchenko
2019-05-01 1:06 ` [PATCH 7/7] cpumask: don't calculate length of the input string Yury Norov
2019-05-08 8:48 ` Andy Shevchenko
2019-05-07 21:04 ` [PATCH 0/7] lib: rework bitmap_parse Yury Norov
-- strict thread matches above, loose matches on Subject: below --
2019-07-21 21:27 [PATCH v3 " Yury Norov
2019-07-21 21:27 ` [PATCH 5/7] lib: rework bitmap_parse() Yury Norov
2019-07-22 13:37 ` Andy Shevchenko
2019-09-09 3:30 [PATCH v4 0/7] lib: rework bitmap_parse Yury Norov
2019-09-09 3:30 ` [PATCH 5/7] lib: rework bitmap_parse() Yury Norov
2019-09-09 10:06 ` Andy Shevchenko
2020-01-02 4:30 [PATCH v5 0/7] lib: rework bitmap_parse Yury Norov
2020-01-02 4:30 ` [PATCH 5/7] lib: rework bitmap_parse() Yury Norov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190510022633.GA30629@yury-thinkpad \
--to=yury.norov@gmail.com \
--cc=acme@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=amritha.nambiar@intel.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=axboe@kernel.dk \
--cc=chris@chris-wilson.co.uk \
--cc=davem@davemloft.net \
--cc=dmitry.torokhov@gmail.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mszeredi@redhat.com \
--cc=sfr@canb.auug.org.au \
--cc=steffen.klassert@secunet.com \
--cc=tobin@kernel.org \
--cc=vineet.gupta1@synopsys.com \
--cc=will.deacon@arm.com \
--cc=willemb@google.com \
--cc=willy@infradead.org \
--cc=ynorov@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.