From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=57442 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P4HGY-0003HE-MT for qemu-devel@nongnu.org; Fri, 08 Oct 2010 14:02:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P4HGX-0001g9-Do for qemu-devel@nongnu.org; Fri, 08 Oct 2010 14:01:58 -0400 Received: from e34.co.us.ibm.com ([32.97.110.152]:53605) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P4HGX-0001fN-8R for qemu-devel@nongnu.org; Fri, 08 Oct 2010 14:01:57 -0400 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e34.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id o98HqJ0E024427 for ; Fri, 8 Oct 2010 11:52:19 -0600 Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o98I1rBa199390 for ; Fri, 8 Oct 2010 12:01:53 -0600 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o98I1qJh003278 for ; Fri, 8 Oct 2010 12:01:53 -0600 Message-ID: <4CAF5C8C.6090805@linux.vnet.ibm.com> Date: Fri, 08 Oct 2010 13:01:48 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1286552914-27014-1-git-send-email-stefanha@linux.vnet.ibm.com> <1286552914-27014-2-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: <1286552914-27014-2-git-send-email-stefanha@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH v2 1/7] qcow2: Make get_bits_from_size() common List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi Cc: Kevin Wolf , Avi Kivity , qemu-devel@nongnu.org, Christoph Hellwig On 10/08/2010 10:48 AM, Stefan Hajnoczi wrote: > The get_bits_from_size() calculates the log base-2 of a number. This is > useful in bit manipulation code working with power-of-2s. > > Currently used by qcow2 and needed by qed in a follow-on patch. > > Signed-off-by: Stefan Hajnoczi > Acked-by: Anthony Liguori Regards, Anthony Liguori > --- > block/qcow2.c | 22 ---------------------- > cutils.c | 18 ++++++++++++++++++ > qemu-common.h | 1 + > 3 files changed, 19 insertions(+), 22 deletions(-) > > diff --git a/block/qcow2.c b/block/qcow2.c > index ee3481b..6e25812 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -794,28 +794,6 @@ static int qcow2_change_backing_file(BlockDriverState *bs, > return qcow2_update_ext_header(bs, backing_file, backing_fmt); > } > > -static int get_bits_from_size(size_t size) > -{ > - int res = 0; > - > - if (size == 0) { > - return -1; > - } > - > - while (size != 1) { > - /* Not a power of two */ > - if (size& 1) { > - return -1; > - } > - > - size>>= 1; > - res++; > - } > - > - return res; > -} > - > - > static int preallocate(BlockDriverState *bs) > { > uint64_t nb_sectors; > diff --git a/cutils.c b/cutils.c > index 5883737..6c32198 100644 > --- a/cutils.c > +++ b/cutils.c > @@ -283,3 +283,21 @@ int fcntl_setfl(int fd, int flag) > } > #endif > > +/** > + * Get the number of bits for a power of 2 > + * > + * The following is true for powers of 2: > + * n == 1<< get_bits_from_size(n) > + */ > +int get_bits_from_size(size_t size) > +{ > + if (size == 0 || (size& (size - 1))) { > + return -1; > + } > + > +#if defined(_WIN32)&& defined(__x86_64__) > + return __builtin_ctzll(size); > +#else > + return __builtin_ctzl(size); > +#endif > +} > diff --git a/qemu-common.h b/qemu-common.h > index 81aafa0..e0ca398 100644 > --- a/qemu-common.h > +++ b/qemu-common.h > @@ -153,6 +153,7 @@ time_t mktimegm(struct tm *tm); > int qemu_fls(int i); > int qemu_fdatasync(int fd); > int fcntl_setfl(int fd, int flag); > +int get_bits_from_size(size_t size); > > /* path.c */ > void init_paths(const char *prefix); >