Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1464630pxb; Fri, 20 Nov 2020 10:05:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJyVyUh4p+bORyvnUbr6zQcf7+AalPEfbpV3y1Ltn7hDsStaUxVs6yu+cCgQyBZoMRTVAEDk X-Received: by 2002:a50:af21:: with SMTP id g30mr35404223edd.46.1605895542559; Fri, 20 Nov 2020 10:05:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605895542; cv=none; d=google.com; s=arc-20160816; b=h3VwIhbq0KnLZEwnrFi7kBj8hAy2F/cGXbYjqQ+eBqNOuoHrLgaXxUavIwqMpaZbLh yB/1d+AeYh73Hrq8NlG/N+oi9rZPno4ztkk4S2+okC2EDfdrFzIOfAT8p1rvH/bo5gXa MLlY0pUkZxMHke4MJBxBQYHehEZoiYBfel2G8d8PKE95TDtLbfV1Lvo+tQcJyOTu8qqT vuKXusNt0vSjS2EzFAYwaX0pNvZT8XCeIXb9jhAbK0R7688WZ4GJB84tRxZV2As8d/vq 2IgHkFaPMhTmyLypwwaBMKeDom78c+2pPWS7yOceJ9RD4aDF5zid8LJurzSJMP/OWqqf qeZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=5qvqz11R6f8JI5zsBDFVuBEzAMW6fNdbI/OnEdkYk48=; b=AFtm6o8HwN5MUHYtK7NJAUYqrw9k1NMkpiP67PuSuKsFjJNJZfBOhBmJ2xWS4RrOel wJvlNzw9+q9ErDzTq7kWDVbF9QdXSTwFMbF9mH0/7jyOO1wRfdZyJccyZ/dYazEzevGV R7Ish9CQsGtYnT4LqEweYrIIFLa9BKgLZa4Hn+x0dMD3jLbIgYAt/OucIxjyh1tV29QG W/Hkz/4O8Fy5t89hssjqNfRdMHtfOTDPa+LS/0CIqtMABoaT3uUErVMcjDkK3BQFFOfV cmCgP9GsgO0yl7E0eEiIiPSF3rjObs+eJmaDOM6KEdoZS3ENgV2Tbgb/UjvcT5UAJtRv hSmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=RHVlUyuc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a12si2223953edy.403.2020.11.20.10.05.18; Fri, 20 Nov 2020 10:05:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=RHVlUyuc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729304AbgKTSDJ (ORCPT + 99 others); Fri, 20 Nov 2020 13:03:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37010 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728278AbgKTSDI (ORCPT ); Fri, 20 Nov 2020 13:03:08 -0500 Received: from mail-il1-x144.google.com (mail-il1-x144.google.com [IPv6:2607:f8b0:4864:20::144]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 51516C0613CF; Fri, 20 Nov 2020 10:03:07 -0800 (PST) Received: by mail-il1-x144.google.com with SMTP id l12so9344532ilo.1; Fri, 20 Nov 2020 10:03:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=5qvqz11R6f8JI5zsBDFVuBEzAMW6fNdbI/OnEdkYk48=; b=RHVlUyuc/jgWCGOtrINdtrjVi44N6tl4aeFWrZQXyiJSNNMXTwj4bAuUGrJNx+KZtz 3eB0wDFU4t4X2hmzFLvaJj/MWsktOi6XOL26dZNs69o2n4KEnU28En57NqL9a2HmDre7 GCeWDuCmgWnLPIwFoasY0b2vDyGSfJ8fBs/GFvrhrfvRvXDjVYjItQRaJ5lsu6FBvV9f 6/xenz4/TMXRhcbTjSafEgOgjdyGkgn1pDjmz1McA8I2o/y5EOb17A5zgi4qYAmZGV3z EuSB+qy7OOn9NdxEwKv2U7FuSxkstVGLGvr9185+rOZVjMHeWkyYFJURQeyHvJgalCTb 6W9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=5qvqz11R6f8JI5zsBDFVuBEzAMW6fNdbI/OnEdkYk48=; b=q4UTZTs176d1ijZg+J42pW3dQK3kIY8mqSfavv0n4NXCepNRY+cJK2w85P9kxuoGkU UMJ5KB3G3cXTKUA6tjchkjnBDK8TydJ9bkQhU4F3UdiHB0RZgsSeSwqA+XzgoSUxiqk8 xIjFJG3rPR3PEALHuHK52IkcabzaeNAHErRTE2OmuXenW03PMvRUfUHw+vMLD7wsR0op PaWVDNqnXkLl92ecDTlJRkgUYWnfSZpxURhIyN03tCjx+oRlxS9NNjd0eMSJeueB4lOc +cC4Kba2kbKv+FcwUI7rn58tY3BoazNahRtDWNd7QeqLoq8AZder0mgj0PtnQvsN2vvo iXvw== X-Gm-Message-State: AOAM532YkpJd5OVmbU87Odm1cugDxZ9ZyQnr9EcEQayNznHGqzymTEXR DiZJI1IOckxpa8l2IuCBFp+jRKHD9lv03o1olKw1ZLRb4NE= X-Received: by 2002:a92:96c1:: with SMTP id g184mr16340833ilh.205.1605895385704; Fri, 20 Nov 2020 10:03:05 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Syed Nayyar Waris Date: Fri, 20 Nov 2020 23:32:53 +0530 Message-ID: Subject: Re: [PATCH 1/4] bitmap: Modify bitmap_set_value() to check bitmap length To: William Breathitt Gray Cc: Andrew Morton , Andy Shevchenko , Arnd Bergmann , Linux-Arch , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 20, 2020 at 11:29 PM William Breathitt Gray wrote: > > On Fri, Nov 20, 2020 at 11:14:16PM +0530, Syed Nayyar Waris wrote: > > Add explicit check to see if the value being written into the bitmap > > does not fall outside the bitmap. > > The situation that it is falling outside would never be possible in the > > code because the boundaries are required to be correct before the function > > is called. The responsibility is on the caller for ensuring the boundaries > > are correct. > > This is just to suppress the GCC -Wtype-limits warnings. > > Hi Syed, > > This commit message sounds a bit strange without the context of our > earlier discussion thread. Would you be able to reword the commit > message to explain the motivation for using __builtin_unreachable()? > > Thanks, > > William Breathitt Gray Hi William, Actually I explained the motivation for using __builtin_unreachable() in the cover letter. So, left it here in this patch. I am sending this patch again updating the commit message. Regards Syed Nayyar Waris > > > > > Cc: Arnd Bergmann > > Signed-off-by: Syed Nayyar Waris > > Acked-by: William Breathitt Gray > > --- > > include/linux/bitmap.h | 35 +++++++++++++++++++++-------------- > > 1 file changed, 21 insertions(+), 14 deletions(-) > > > > diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h > > index 386d08777342..efb6199ea1e7 100644 > > --- a/include/linux/bitmap.h > > +++ b/include/linux/bitmap.h > > @@ -78,8 +78,9 @@ > > * bitmap_get_value(map, start, nbits) Get bit value of size > > * 'nbits' from map at start > > * bitmap_set_value8(map, value, start) Set 8bit value to map at start > > - * bitmap_set_value(map, value, start, nbits) Set bit value of size 'nbits' > > - * of map at start > > + * bitmap_set_value(map, nbits, value, value_width, start) > > + * Set bit value of size value_width > > + * to map at start > > * > > * Note, bitmap_zero() and bitmap_fill() operate over the region of > > * unsigned longs, that is, bits behind bitmap till the unsigned long > > @@ -610,30 +611,36 @@ static inline void bitmap_set_value8(unsigned long *map, unsigned long value, > > } > > > > /** > > - * bitmap_set_value - set n-bit value within a memory region > > + * bitmap_set_value - set value within a memory region > > * @map: address to the bitmap memory region > > - * @value: value of nbits > > - * @start: bit offset of the n-bit value > > - * @nbits: size of value in bits (must be between 1 and BITS_PER_LONG inclusive). > > + * @nbits: size of map in bits > > + * @value: value of clump > > + * @value_width: size of value in bits (must be between 1 and BITS_PER_LONG inclusive) > > + * @start: bit offset of the value > > */ > > -static inline void bitmap_set_value(unsigned long *map, > > - unsigned long value, > > - unsigned long start, unsigned long nbits) > > +static inline void bitmap_set_value(unsigned long *map, unsigned long nbits, > > + unsigned long value, unsigned long value_width, > > + unsigned long start) > > { > > - const size_t index = BIT_WORD(start); > > + const unsigned long index = BIT_WORD(start); > > + const unsigned long length = BIT_WORD(nbits); > > const unsigned long offset = start % BITS_PER_LONG; > > const unsigned long ceiling = round_up(start + 1, BITS_PER_LONG); > > const unsigned long space = ceiling - start; > > > > - value &= GENMASK(nbits - 1, 0); > > + value &= GENMASK(value_width - 1, 0); > > > > - if (space >= nbits) { > > - map[index] &= ~(GENMASK(nbits - 1, 0) << offset); > > + if (space >= value_width) { > > + map[index] &= ~(GENMASK(value_width - 1, 0) << offset); > > map[index] |= value << offset; > > } else { > > map[index + 0] &= ~BITMAP_FIRST_WORD_MASK(start); > > map[index + 0] |= value << offset; > > - map[index + 1] &= ~BITMAP_LAST_WORD_MASK(start + nbits); > > + > > + if (index + 1 >= length) > > + __builtin_unreachable(); > > + > > + map[index + 1] &= ~BITMAP_LAST_WORD_MASK(start + value_width); > > map[index + 1] |= value >> space; > > } > > } > > -- > > 2.29.0 > >