summaryrefslogtreecommitdiffstats
path: root/hw/pci
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-07-24 13:33:07 +0100
committerPeter Maydell <peter.maydell@linaro.org>2015-09-07 14:19:00 +0100
commit9bff5d8135fc3f37932d4177727d293aa93ce79b (patch)
treebac17f7f5fc93589344f68492aa5b8f1b02d0169 /hw/pci
parent4169198617dc8d3e80697964b91eaea551e7f956 (diff)
downloadhqemu-9bff5d8135fc3f37932d4177727d293aa93ce79b.zip
hqemu-9bff5d8135fc3f37932d4177727d293aa93ce79b.tar.gz
hw/pci: Use pow2ceil() rather than hand-calculation
A couple of places in hw/pci use an inline calculation to round a size up to the next largest power of 2. We have a utility routine for this, so use it. (The behaviour of the old code is different if the size value is 0 -- it would leave it as 0 rather than rounding up to 1, but in both cases we know the size can't be 0. In the case where the size value had bit 31 set, the old code would invoke undefined behaviour; the new code will give a result of 0. Presumably that could never happen either.) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Message-id: 1437741192-20955-2-git-send-email-peter.maydell@linaro.org
Diffstat (limited to 'hw/pci')
-rw-r--r--hw/pci/msix.c4
-rw-r--r--hw/pci/pci.c4
2 files changed, 2 insertions, 6 deletions
diff --git a/hw/pci/msix.c b/hw/pci/msix.c
index 7716bf3..2fdada4 100644
--- a/hw/pci/msix.c
+++ b/hw/pci/msix.c
@@ -314,9 +314,7 @@ int msix_init_exclusive_bar(PCIDevice *dev, unsigned short nentries,
bar_size = bar_pba_offset + bar_pba_size;
}
- if (bar_size & (bar_size - 1)) {
- bar_size = 1 << qemu_fls(bar_size);
- }
+ bar_size = pow2ceil(bar_size);
name = g_strdup_printf("%s-msix", dev->name);
memory_region_init(&dev->msix_exclusive_bar, OBJECT(dev), name, bar_size);
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 9f57aea..4700e95 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2071,9 +2071,7 @@ static void pci_add_option_rom(PCIDevice *pdev, bool is_default_rom,
g_free(path);
return;
}
- if (size & (size - 1)) {
- size = 1 << qemu_fls(size);
- }
+ size = pow2ceil(size);
vmsd = qdev_get_vmsd(DEVICE(pdev));
OpenPOWER on IntegriCloud