qxl: refactor rounding up to a nearest power of 2
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ář <rkrcmar@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
876d516311
commit
bb7443f6d6
@ -300,19 +300,6 @@ void qxl_spice_reset_cursor(PCIQXLDevice *qxl)
|
|||||||
qxl->ssd.cursor = cursor_builtin_hidden();
|
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)
|
static ram_addr_t qxl_rom_size(void)
|
||||||
{
|
{
|
||||||
uint32_t required_rom_size = sizeof(QXLRom) + sizeof(QXLModes) +
|
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->vram32_size = 4096;
|
||||||
qxl->vram_size = 4096;
|
qxl->vram_size = 4096;
|
||||||
}
|
}
|
||||||
qxl->vgamem_size = msb_mask(qxl->vgamem_size * 2 - 1);
|
qxl->vgamem_size = pow2ceil(qxl->vgamem_size);
|
||||||
qxl->vga.vram_size = msb_mask(qxl->vga.vram_size * 2 - 1);
|
qxl->vga.vram_size = pow2ceil(qxl->vga.vram_size);
|
||||||
qxl->vram32_size = msb_mask(qxl->vram32_size * 2 - 1);
|
qxl->vram32_size = pow2ceil(qxl->vram32_size);
|
||||||
qxl->vram_size = msb_mask(qxl->vram_size * 2 - 1);
|
qxl->vram_size = pow2ceil(qxl->vram_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int qxl_init_common(PCIQXLDevice *qxl)
|
static int qxl_init_common(PCIQXLDevice *qxl)
|
||||||
@ -1956,7 +1943,7 @@ static int qxl_init_common(PCIQXLDevice *qxl)
|
|||||||
break;
|
break;
|
||||||
case 4: /* qxl-4 */
|
case 4: /* qxl-4 */
|
||||||
pci_device_rev = QXL_REVISION_STABLE_V12;
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
error_report("Invalid revision %d for qxl device (max %d)",
|
error_report("Invalid revision %d for qxl device (max %d)",
|
||||||
|
@ -418,6 +418,9 @@ static inline bool is_power_of_2(uint64_t value)
|
|||||||
/* round down to the nearest power of 2*/
|
/* round down to the nearest power of 2*/
|
||||||
int64_t pow2floor(int64_t value);
|
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"
|
#include "qemu/module.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -483,6 +483,20 @@ int64_t pow2floor(int64_t value)
|
|||||||
return 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)
|
* Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128)
|
||||||
* Input is limited to 14-bit numbers
|
* Input is limited to 14-bit numbers
|
||||||
|
Loading…
Reference in New Issue
Block a user