From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Morton Subject: Re: [PATCH net-next v7 01/19] lib/bitmap.c: conversion routines to/from u32 array Date: Mon, 8 Feb 2016 15:36:35 -0800 Message-ID: <20160208153635.67df5ac2576138088a859087@linux-foundation.org> References: <1454893743-6285-1-git-send-email-ddecotig@gmail.com> <1454893743-6285-2-git-send-email-ddecotig@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1454893743-6285-2-git-send-email-ddecotig-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: David Decotigny Cc: "David S. Miller" , Ben Hutchings , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mips-6z/3iImG2C8G8FEW9MqTrA@public.gmane.org, fcoe-devel-s9riP+hp16TNLxjTenLetw@public.gmane.org, Tejun Heo , Eric Dumazet , Eugenia Emantayev , Or Gerlitz , Ido Shamay , Joe Perches , Saeed Mahameed , Govindarajulu Varadarajan <_govind-KK0ffGbhmjU@public.gmane.org>, Venkata Duvvuru , Jeff Kirsher , Pravin B Shelar , Ed Swierk , Robert Love , "James E.J. Bottomley" , Yuval Mintz , Rasmus Villemoes , David Decotigny List-Id: linux-api@vger.kernel.org On Sun, 7 Feb 2016 17:08:45 -0800 David Decotigny wrote: > From: David Decotigny > > Aimed at transferring bitmaps to/from user-space in a 32/64-bit agnostic > way. > > Tested: > unit tests (next patch) on qemu i386, x86_64, ppc, ppc64 BE and LE, > ARM. > > @@ -1060,6 +1062,90 @@ int bitmap_allocate_region(unsigned long *bitmap, unsigned int pos, int order) > EXPORT_SYMBOL(bitmap_allocate_region); > > /** > + * bitmap_from_u32array - copy the contents of a u32 array of bits to bitmap > + * @bitmap: array of unsigned longs, the destination bitmap, non NULL > + * @nbits: number of bits in @bitmap > + * @buf: array of u32 (in host byte order), the source bitmap, non NULL > + * @nwords: number of u32 words in @buf > + * > + * copy min(nbits, 32*nwords) bits from @buf to @bitmap, remaining > + * bits between nword and nbits in @bitmap (if any) are cleared. In > + * last word of @bitmap, the bits beyond nbits (if any) are kept > + * unchanged. > + */ This will leave the caller not knowing how many valid bits are actually present in the resulting bitmap. To determine that, the caller will need to perform (duplicated) math on `nbits' and `nwords'. > +void bitmap_from_u32array(unsigned long *bitmap, unsigned int nbits, > + const u32 *buf, unsigned int nwords) So how about we make this return the number of valid bits in *bitmap? > +/** > + * bitmap_to_u32array - copy the contents of bitmap to a u32 array of bits > + * @buf: array of u32 (in host byte order), the dest bitmap, non NULL > + * @nwords: number of u32 words in @buf > + * @bitmap: array of unsigned longs, the source bitmap, non NULL > + * @nbits: number of bits in @bitmap > + * > + * copy min(nbits, 32*nwords) bits from @bitmap to @buf. Remaining > + * bits after nbits in @buf (if any) are cleared. > + */ > +void bitmap_to_u32array(u32 *buf, unsigned int nwords, > + const unsigned long *bitmap, unsigned int nbits) Ditto.