All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org
Cc: quintela@redhat.com, peterx@redhat.com, armbru@redhat.com,
	kwolf@redhat.com
Subject: [Qemu-devel] [PULL 4/8] host-utils: Simplify pow2ceil()
Date: Wed,  6 Sep 2017 19:41:29 +0100	[thread overview]
Message-ID: <20170906184133.25524-5-dgilbert@redhat.com> (raw)
In-Reply-To: <20170906184133.25524-1-dgilbert@redhat.com>

From: Markus Armbruster <armbru@redhat.com>

Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1501148776-16890-4-git-send-email-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 include/qemu/host-utils.h | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/include/qemu/host-utils.h b/include/qemu/host-utils.h
index 6c6005f5cf..5ac621cf1f 100644
--- a/include/qemu/host-utils.h
+++ b/include/qemu/host-utils.h
@@ -381,18 +381,23 @@ static inline uint64_t pow2floor(uint64_t value)
     return 0x8000000000000000ull >> clz64(value);
 }
 
-/* round up to the nearest power of 2 (0 if overflow) */
+/*
+ * Return @value rounded up to the nearest power of two modulo 2^64.
+ * This is *zero* for @value > 2^63, so be careful.
+ */
 static inline uint64_t pow2ceil(uint64_t value)
 {
-    uint8_t nlz = clz64(value);
-
-    if (is_power_of_2(value)) {
-        return value;
-    }
-    if (!nlz) {
-        return 0;
+    int n = clz64(value - 1);
+
+    if (!n) {
+        /*
+         * @value - 1 has no leading zeroes, thus @value - 1 >= 2^63
+         * Therefore, either @value == 0 or @value > 2^63.
+         * If it's 0, return 1, else return 0.
+         */
+        return !value;
     }
-    return 1ULL << (64 - nlz);
+    return 0x8000000000000000ull >> (n - 1);
 }
 
 /**
-- 
2.13.5

  parent reply	other threads:[~2017-09-06 18:41 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-06 18:41 [Qemu-devel] [PULL 0/8] migration queue Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` [Qemu-devel] [PULL 1/8] migration: Report when bdrv_inactivate_all fails Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` [Qemu-devel] [PULL 2/8] xbzrle: Drop unused cache_resize() Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` [Qemu-devel] [PULL 3/8] host-utils: Proactively fix pow2floor(), switch to unsigned Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` Dr. David Alan Gilbert (git) [this message]
2017-09-06 18:41 ` [Qemu-devel] [PULL 5/8] runstate/migrate: Two more transitions Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` [Qemu-devel] [PULL 6/8] migration: Reset rather than destroy main_thread_load_event Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` [Qemu-devel] [PULL 7/8] snapshot/tests: Try loadvm twice Dr. David Alan Gilbert (git)
2017-09-06 18:41 ` [Qemu-devel] [PULL 8/8] migration: dump str in migrate_set_state trace Dr. David Alan Gilbert (git)
2017-09-07 15:38 ` [Qemu-devel] [PULL 0/8] migration queue Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170906184133.25524-5-dgilbert@redhat.com \
    --to=dgilbert@redhat.com \
    --cc=armbru@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.