Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934593AbZJIXoS (ORCPT ); Fri, 9 Oct 2009 19:44:18 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1761651AbZJIXoP (ORCPT ); Fri, 9 Oct 2009 19:44:15 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:57829 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761619AbZJIXoM (ORCPT ); Fri, 9 Oct 2009 19:44:12 -0400 Date: Fri, 9 Oct 2009 16:41:00 -0700 From: Andrew Morton To: Akinobu Mita Cc: linux-kernel@vger.kernel.org, FUJITA Tomonori , "David S. Miller" , sparclinux@vger.kernel.org, Benjamin Herrenschmidt , Paul Mackerras , linuxppc-dev@ozlabs.org, Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, Greg Kroah-Hartman , Lothar Wassmann , linux-usb@vger.kernel.org, Roland Dreier , Yevgeny Petrilin , netdev@vger.kernel.org, Tony Luck , Fenghua Yu , linux-ia64@vger.kernel.org, linux-altix@sgi.com Subject: Re: [PATCH 2/8] bitmap: Introduce bitmap_set, bitmap_clear, bitmap_find_next_zero_area Message-Id: <20091009164100.85a36188.akpm@linux-foundation.org> In-Reply-To: <1255076961-21325-2-git-send-email-akinobu.mita@gmail.com> References: <1255076961-21325-1-git-send-email-akinobu.mita@gmail.com> <1255076961-21325-2-git-send-email-akinobu.mita@gmail.com> X-Mailer: Sylpheed 2.4.8 (GTK+ 2.12.9; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2477 Lines: 89 On Fri, 9 Oct 2009 17:29:15 +0900 Akinobu Mita wrote: > This introduces new bitmap functions: > > bitmap_set: Set specified bit area > bitmap_clear: Clear specified bit area > bitmap_find_next_zero_area: Find free bit area > > These are stolen from iommu helper. > > I changed the return value of bitmap_find_next_zero_area if there is > no zero area. > > find_next_zero_area in iommu helper: returns -1 > bitmap_find_next_zero_area: return >= bitmap size I'll plan to merge this patch into 2.6.32 so we can trickle all the other patches into subsystems in an orderly fashion. > +void bitmap_set(unsigned long *map, int i, int len) > +{ > + int end = i + len; > + > + while (i < end) { > + __set_bit(i, map); > + i++; > + } > +} This is really inefficient, isn't it? It's a pretty trivial matter to romp through memory 32 or 64 bits at a time. > +EXPORT_SYMBOL(bitmap_set); > + > +void bitmap_clear(unsigned long *map, int start, int nr) > +{ > + int end = start + nr; > + > + while (start < end) { > + __clear_bit(start, map); > + start++; > + } > +} > +EXPORT_SYMBOL(bitmap_clear); Ditto. > +unsigned long bitmap_find_next_zero_area(unsigned long *map, > + unsigned long size, > + unsigned long start, > + unsigned int nr, > + unsigned long align_mask) > +{ > + unsigned long index, end, i; > +again: > + index = find_next_zero_bit(map, size, start); > + > + /* Align allocation */ > + index = (index + align_mask) & ~align_mask; > + > + end = index + nr; > + if (end >= size) > + return end; > + i = find_next_bit(map, end, index); > + if (i < end) { > + start = i + 1; > + goto again; > + } > + return index; > +} > +EXPORT_SYMBOL(bitmap_find_next_zero_area); This needs documentation, please. It appears that `size' is the size of the bitmap and `nr' is the number of zeroed bits we're looking for, but an inattentive programmer could get those reversed. Also the semantics of `align_mask' could benefit from spelling out. Is the alignment with respect to memory boundaries or with respect to `map' or with respect to map+start or what? And why does align_mask exist at all? I was a bit surprised to see it there. In which scenarios will it be non-zero? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/