git: 730510dc1ab2 - main - bhyve: Allocate mmio_hint array based on number of guest CPUs.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 09 Mar 2022 23:57:31 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=730510dc1ab2049d707706241d9a6e73a6952a4e
commit 730510dc1ab2049d707706241d9a6e73a6952a4e
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-03-09 23:38:49 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-03-09 23:38:49 +0000
bhyve: Allocate mmio_hint array based on number of guest CPUs.
This avoids an instance of hardcoding VM_MAXCPU in userspace.
Reviewed by: grehan
Differential Revision: https://reviews.freebsd.org/D34489
---
usr.sbin/bhyve/bhyverun.c | 2 +-
usr.sbin/bhyve/mem.c | 9 ++++++---
usr.sbin/bhyve/mem.h | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c
index 734239b38a8b..0f3c6e60e1d9 100644
--- a/usr.sbin/bhyve/bhyverun.c
+++ b/usr.sbin/bhyve/bhyverun.c
@@ -1445,7 +1445,7 @@ main(int argc, char *argv[])
exit(4);
}
- init_mem();
+ init_mem(guest_ncpus);
init_inout();
kernemu_dev_init();
init_bootrom(ctx);
diff --git a/usr.sbin/bhyve/mem.c b/usr.sbin/bhyve/mem.c
index 49a468305769..0a1c4e29972b 100644
--- a/usr.sbin/bhyve/mem.c
+++ b/usr.sbin/bhyve/mem.c
@@ -68,7 +68,8 @@ RB_HEAD(mmio_rb_tree, mmio_rb_range) mmio_rb_root, mmio_rb_fallback;
* consecutive addresses in a range, it makes sense to cache the
* result of a lookup.
*/
-static struct mmio_rb_range *mmio_hint[VM_MAXCPU];
+static struct mmio_rb_range **mmio_hint;
+static int mmio_ncpu;
static pthread_rwlock_t mmio_rwlock;
@@ -352,7 +353,7 @@ unregister_mem(struct mem_range *memp)
RB_REMOVE(mmio_rb_tree, &mmio_rb_root, entry);
/* flush Per-vCPU cache */
- for (i=0; i < VM_MAXCPU; i++) {
+ for (i = 0; i < mmio_ncpu; i++) {
if (mmio_hint[i] == entry)
mmio_hint[i] = NULL;
}
@@ -367,9 +368,11 @@ unregister_mem(struct mem_range *memp)
}
void
-init_mem(void)
+init_mem(int ncpu)
{
+ mmio_ncpu = ncpu;
+ mmio_hint = calloc(ncpu, sizeof(*mmio_hint));
RB_INIT(&mmio_rb_root);
RB_INIT(&mmio_rb_fallback);
pthread_rwlock_init(&mmio_rwlock, NULL);
diff --git a/usr.sbin/bhyve/mem.h b/usr.sbin/bhyve/mem.h
index 38d773c43fdb..965079107476 100644
--- a/usr.sbin/bhyve/mem.h
+++ b/usr.sbin/bhyve/mem.h
@@ -52,7 +52,7 @@ struct mem_range {
#define MEM_F_RW 0x3
#define MEM_F_IMMUTABLE 0x4 /* mem_range cannot be unregistered */
-void init_mem(void);
+void init_mem(int ncpu);
int emulate_mem(struct vmctx *, int vcpu, uint64_t paddr, struct vie *vie,
struct vm_guest_paging *paging);