[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 3/7] qxl: refactor rounding up to a nearest power of
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL 3/7] qxl: refactor rounding up to a nearest power of 2 |
Date: |
Wed, 4 Mar 2015 15:30:45 +0100 |
From: Radim Krčmář <address@hidden>
We already have pow2floor, mirror it and use instead of a function with
similar results (same in used domain), to clarify our intent.
Signed-off-by: Radim Krčmář <address@hidden>
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/display/qxl.c | 23 +++++------------------
include/qemu-common.h | 3 +++
util/cutils.c | 14 ++++++++++++++
3 files changed, 22 insertions(+), 18 deletions(-)
diff --git a/hw/display/qxl.c b/hw/display/qxl.c
index 92f2d50..94ff52a 100644
--- a/hw/display/qxl.c
+++ b/hw/display/qxl.c
@@ -300,19 +300,6 @@ void qxl_spice_reset_cursor(PCIQXLDevice *qxl)
qxl->ssd.cursor = cursor_builtin_hidden();
}
-
-static inline uint32_t msb_mask(uint32_t val)
-{
- uint32_t mask;
-
- do {
- mask = ~(val - 1) & val;
- val &= ~mask;
- } while (mask < val);
-
- return mask;
-}
-
static ram_addr_t qxl_rom_size(void)
{
uint32_t required_rom_size = sizeof(QXLRom) + sizeof(QXLModes) +
@@ -1921,10 +1908,10 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl)
qxl->vram32_size = 4096;
qxl->vram_size = 4096;
}
- qxl->vgamem_size = msb_mask(qxl->vgamem_size * 2 - 1);
- qxl->vga.vram_size = msb_mask(qxl->vga.vram_size * 2 - 1);
- qxl->vram32_size = msb_mask(qxl->vram32_size * 2 - 1);
- qxl->vram_size = msb_mask(qxl->vram_size * 2 - 1);
+ qxl->vgamem_size = pow2ceil(qxl->vgamem_size);
+ qxl->vga.vram_size = pow2ceil(qxl->vga.vram_size);
+ qxl->vram32_size = pow2ceil(qxl->vram32_size);
+ qxl->vram_size = pow2ceil(qxl->vram_size);
}
static int qxl_init_common(PCIQXLDevice *qxl)
@@ -1956,7 +1943,7 @@ static int qxl_init_common(PCIQXLDevice *qxl)
break;
case 4: /* qxl-4 */
pci_device_rev = QXL_REVISION_STABLE_V12;
- io_size = msb_mask(QXL_IO_RANGE_SIZE * 2 - 1);
+ io_size = pow2ceil(QXL_IO_RANGE_SIZE);
break;
default:
error_report("Invalid revision %d for qxl device (max %d)",
diff --git a/include/qemu-common.h b/include/qemu-common.h
index 644b46d..1b5cffb 100644
--- a/include/qemu-common.h
+++ b/include/qemu-common.h
@@ -418,6 +418,9 @@ static inline bool is_power_of_2(uint64_t value)
/* round down to the nearest power of 2*/
int64_t pow2floor(int64_t value);
+/* round up to the nearest power of 2 (0 if overflow) */
+uint64_t pow2ceil(uint64_t value);
+
#include "qemu/module.h"
/*
diff --git a/util/cutils.c b/util/cutils.c
index dbe7412..c2250d1 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -483,6 +483,20 @@ int64_t pow2floor(int64_t value)
return value;
}
+/* round up to the nearest power of 2 (0 if overflow) */
+uint64_t pow2ceil(uint64_t value)
+{
+ uint8_t nlz = clz64(value);
+
+ if (is_power_of_2(value)) {
+ return value;
+ }
+ if (!nlz) {
+ return 0;
+ }
+ return 1ULL << (64 - nlz);
+}
+
/*
* Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128)
* Input is limited to 14-bit numbers
--
1.8.3.1
- [Qemu-devel] [PULL 0/7] spice patch queue, Gerd Hoffmann, 2015/03/04
- [Qemu-devel] [PULL 3/7] qxl: refactor rounding up to a nearest power of 2,
Gerd Hoffmann <=
- [Qemu-devel] [PULL 1/7] qxl: document minimal video memory for new modes, Gerd Hoffmann, 2015/03/04
- [Qemu-devel] [PULL 7/7] hmp: info spice: take out webdav, Gerd Hoffmann, 2015/03/04
- [Qemu-devel] [PULL 2/7] spice: fix invalid memory access to vga.vram, Gerd Hoffmann, 2015/03/04
- [Qemu-devel] [PULL 5/7] qxl: drop update_displaychangelistener call for secondary qxl devices, Gerd Hoffmann, 2015/03/04
- [Qemu-devel] [PULL 4/7] vga: refactor vram_size clamping and rounding, Gerd Hoffmann, 2015/03/04