All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Yury Norov <yury.norov@gmail.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, Jens Axboe <axboe@kernel.dk>,
	Steffen Klassert <steffen.klassert@secunet.com>
Subject: Re: [PATCH 5/7] lib: rework bitmap_parse()
Date: Mon, 9 Sep 2019 13:06:08 +0300	[thread overview]
Message-ID: <20190909100608.GR2680@smile.fi.intel.com> (raw)
In-Reply-To: <20190909033021.11600-6-yury.norov@gmail.com>

On Sun, Sep 08, 2019 at 08:30:19PM -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 const char *bitmap_get_x32_reverse(const char *start,
> +					const char *end, u32 *num)
> +{
> +	u32 ret = 0;
> +	int c, i;
> +

> +	if (!isxdigit(*end))
> +		return ERR_PTR(-EINVAL);

This seems redundant...

> +
> +	for (i = 0; i < 32; i += 4) {

> +		c = hex_to_bin(*end--);
> +		if (c < 0)
> +			return ERR_PTR(-EINVAL);

...because this will do the same check.

Am I right?

> +
> +		ret |= c << i;
> +
> +		if (start > end || __end_of_region(*end))
> +			goto out;
> +	}
> +

> +	if (isxdigit(*end))
> +		return ERR_PTR(-EOVERFLOW);

hex_to_bin() doesn't rely on ctype array, won't drain caches.
I guess it's not a fast path, so, either will work.

> +out:
> +	*num = ret;
> +	return end;
> +}

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2019-09-09 10:06 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-09  3:30 [PATCH v4 0/7] lib: rework bitmap_parse Yury Norov
2019-09-09  3:30 ` [PATCH 1/7] lib/string: add strnchrnul() Yury Norov
2019-09-09  3:30 ` [PATCH 2/7] bitops: more BITS_TO_* macros Yury Norov
2019-09-09  3:30 ` [PATCH 3/7] lib: add test for bitmap_parse() Yury Norov
2019-09-09  3:30 ` [PATCH 4/7] lib: make bitmap_parse_user a wrapper on 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 [this message]
2019-09-09  3:30 ` [PATCH 6/7] lib: new testcases for bitmap_parse{_user} Yury Norov
2019-09-09  3:30 ` [PATCH 7/7] cpumask: don't calculate length of the input string Yury Norov
  -- strict thread matches above, loose matches on Subject: below --
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
2019-07-21 21:27 [PATCH v3 0/7] lib: rework bitmap_parse Yury Norov
2019-07-21 21:27 ` [PATCH 5/7] lib: rework bitmap_parse() Yury Norov
2019-07-22 13:37   ` Andy Shevchenko
2019-05-01  1:06 [PATCH 0/7] lib: rework bitmap_parse Yury Norov
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
2019-05-24  2:51       ` Andrew Morton

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=20190909100608.GR2680@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=acme@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=amritha.nambiar@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=yury.norov@gmail.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.