Received: by 2002:a05:6358:701b:b0:131:369:b2a3 with SMTP id 27csp2179181rwo; Sun, 23 Jul 2023 09:09:35 -0700 (PDT) X-Google-Smtp-Source: APBJJlEKKJLgL6TTkRR3ezmY3F5kGO90usvCMsNzaSzLGGsjgcTcCRITN/6pezGRPhIGjhMDwqdG X-Received: by 2002:a05:6a00:cc3:b0:664:aff0:240 with SMTP id b3-20020a056a000cc300b00664aff00240mr6440094pfv.33.1690128575009; Sun, 23 Jul 2023 09:09:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690128574; cv=none; d=google.com; s=arc-20160816; b=FGCf+ZhHahmbJMijVvH/tNQXgVGx1pfdhWcEQxDjOnaOmGqf2iXqCMoZ5chnFbItjH eQ11sHqmsxO7HSS8lQTOfqMYnfvza3yjNyVqWQMZCG09okLTZ3EK+eyUPon3AR1n7d5N HfZa853anAD8IUK9L0sYJkyzXBMoIm2qQw35DChR5ZkAVdWUNDF2T0HpcUh0LmXsu2fc K52Y24Tdc4TCa07s5GUJPkzMjeisNvA90RZb5Nm9VB7WvHPqJz+eh0X/mfwFY0c00AuK h6iR47Gbjff7Dd0wZALJqlJkFrN8xw257LGfEU6B50Hznp1Mcrz8qF6i1lFh+KFqjmpk 4gAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=5cmykefcdNhgVGfJdHuYylH/HeDsJaOrk0SIp3sP/JU=; fh=d0NYWzlzWTM6vHUSJ3AuzOnx+2vuzVYW8PUsSOOCs6I=; b=bnMAKf4hDcgoE+NVMX4wMh63oqtFyTR1vnXR9gu8UNXgTsh0O8N2ABQ7x9cBqFDRAv civglPUkmtp8zPDdKTeOYtKmF+11vphEA1AUAugeOCfJyltyZ6mWv+4fXfDD0PfLSBwQ LOU8PwizCK2C3bZ6YWVPd9AU274XJhJIrdLVe9gd6smDUP3OIElROJXktyC1uwyqmtnJ nPwSK4qKUzQJe1m0VbnFfkV7WpEEJIwjd/gXh6/wYxB/WD96hJcexvdtv9Ef42Av3R4/ FukMqBjEk74dCxi/E5jpfDYGqOiHwq1rcar5WAMefZOvrPMFoObzV3mtxS+NAETtSOOU zAwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=ov+BpRiY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l191-20020a633ec8000000b00543d32f92ecsi7174318pga.472.2023.07.23.09.09.22; Sun, 23 Jul 2023 09:09:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=ov+BpRiY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S229732AbjGWPiX (ORCPT + 99 others); Sun, 23 Jul 2023 11:38:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58694 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229446AbjGWPiW (ORCPT ); Sun, 23 Jul 2023 11:38:22 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13E0C1AD for ; Sun, 23 Jul 2023 08:38:22 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-6682909acadso1930810b3a.3 for ; Sun, 23 Jul 2023 08:38:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690126701; x=1690731501; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=5cmykefcdNhgVGfJdHuYylH/HeDsJaOrk0SIp3sP/JU=; b=ov+BpRiYgea8xlcwARUtusVDTtfXt0zC6EKRxm30xUvDkrhLHUSDhTWZZ05ThCkDae ueVPCpms5Hz1wArm+Xv97aKJKegOtTzyJbI/bpYtmxV43ZNJit1sBbtq/sOkIIxmXfU4 VE2pXWsTDWyYyI03oGoNMVaYnN0yhgwRkxFMxq3laR09aOD2oY8A0SAR51lITXOSoc6J G5vX21/kavKXM9w0kyEi/Lpw4RODOTLJM8FSL+DAphZWsJQSIWmO1Nc1vpkYliaQLWRF DGFO1ksWTWyx2hKOQjOLddkIgZmu/yOzSRzBuPg29DKsBRJ+es4gqP4a1nQbglI6B9/G mbkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690126701; x=1690731501; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5cmykefcdNhgVGfJdHuYylH/HeDsJaOrk0SIp3sP/JU=; b=UG4T4aEGC9kyzKGRn9rw4ScduM+ht8bc2e05FVIjMgQ8oTeU0I0ZuzEe8Iuesgk11N xMiqx/yjW89Q7Ah6+qopz8KymY/2X467hQS8sfSq65gjvoymV2D95RaW6mmPgisdTWFa ezeOyvVHLAP6EKjRgy6qP2EItr5zWA7OJD8ffiDOGHZaKhjjh18kYvAgcLbDFPfEWzOZ WNSIWMbR8d1mU7Oxr9h+0t8WpYRNjT/6kRxCUTK5hzM7+Ymf1rsxSWNbwVGRPN/G6G9R m0SfL3bmCuj7mNdou+r3fyheoEvW5CIourAluHWD7auFhTaXRDPdY5gFHbnuIO2iE432 wFqQ== X-Gm-Message-State: ABy/qLaVyr8yaGec/rPgRfXdJATCPrvrDKyaV3ysRn/TKpya9Nnpmewf 9T0SNXFSeGW1TN9Tehh7ti8= X-Received: by 2002:a17:902:bd96:b0:1b1:99c9:8ce1 with SMTP id q22-20020a170902bd9600b001b199c98ce1mr4921708pls.51.1690126701353; Sun, 23 Jul 2023 08:38:21 -0700 (PDT) Received: from localhost ([216.228.127.130]) by smtp.gmail.com with ESMTPSA id s21-20020a170902989500b001b03842ab78sm7055043plp.89.2023.07.23.08.38.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Jul 2023 08:38:20 -0700 (PDT) Date: Sun, 23 Jul 2023 08:38:18 -0700 From: Yury Norov To: Alexander Potapenko Cc: catalin.marinas@arm.com, will@kernel.org, pcc@google.com, andreyknvl@gmail.com, andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, eugenis@google.com, syednwaris@gmail.com, william.gray@linaro.org, Arnd Bergmann Subject: Re: [PATCH v4 1/5] lib/bitmap: add bitmap_{set,get}_value() Message-ID: References: <20230720173956.3674987-1-glider@google.com> <20230720173956.3674987-2-glider@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Jul 22, 2023 at 06:57:26PM -0700, Yury Norov wrote: > On Thu, Jul 20, 2023 at 07:39:52PM +0200, Alexander Potapenko wrote: > > +/** > > + * bitmap_write - write n-bit 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, up to BITS_PER_LONG > > + */ > > +static inline void bitmap_write(unsigned long *map, > > + unsigned long value, > > + unsigned long start, unsigned long nbits) > > +{ > > + size_t index = BIT_WORD(start); > > + unsigned long offset = start % BITS_PER_LONG; > > + unsigned long space = BITS_PER_LONG - offset; > > + > > + if (unlikely(!nbits)) > > + return; > > + value &= GENMASK(nbits - 1, 0); > > Strictly speaking, a 'value' shouldn't contain set bits beyond nbits > because otherwise it's an out-of-bonds type of error. > > This is kind of gray zone to me, because it's a caller's responsibility > to provide correct input. But on the other hand, it would be a great > headache debugging corrupted bitmaps. > > Now that we've got a single user of the bitmap_write, and even more, > it's wrapped with a helper, I think it would be reasonable to trim a > 'value' in the helper, if needed. > > Anyways, the comment must warn about that loudly... OK. I spent a night with that, and I'm still not sure. Pseudo code that implements it looks like this: for (bit = 0; bit < nbits; bit++) assign_bit(start + bit, bitmap, val & BIT(bit)); And it ignores trailing bits. So if we're optimizing this pattern, we'd ignore these bits just as well... Either way, whatever we decide, let's stay clear with our intentions and mention explicitly that tail bits are either must be zero, or ignored. Alexander, can you add the snippet above to the comments for the bitmap_write() and bitmap_read(), as well as in the test? Also, if we decide to clear tail of the input value, would BITMAP_LAST_WORD_MASK() generate better code than GENMASK(nbits - 1, 0) does? Commets are very appreciated. Thanks, Yury