git: 2412b82929a6 - stable/13 - bhyve: Allocate mmio_hint array based on number of guest CPUs.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 11 May 2022 18:56:06 UTC
The branch stable/13 has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=2412b82929a6a31d40f396b3c20fc1d2d9e31289
commit 2412b82929a6a31d40f396b3c20fc1d2d9e31289
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2022-03-09 23:38:49 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-05-11 18:47:58 +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
(cherry picked from commit 730510dc1ab2049d707706241d9a6e73a6952a4e)
---
usr.sbin/bhyve/bhyverun.c | 2 +-
usr.sbin/bhyve/mem.c | 11 +++++++----
usr.sbin/bhyve/mem.h | 2 +-
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c
index e4d96d2293fa..8a1a82cefc7c 100644
--- a/usr.sbin/bhyve/bhyverun.c
+++ b/usr.sbin/bhyve/bhyverun.c
@@ -1421,7 +1421,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 90aefe45c856..85c4ad0eaf46 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;
@@ -349,8 +350,8 @@ unregister_mem(struct mem_range *memp)
assert((mr->flags & MEM_F_IMMUTABLE) == 0);
RB_REMOVE(mmio_rb_tree, &mmio_rb_root, entry);
- /* flush Per-vCPU cache */
- for (i=0; i < VM_MAXCPU; i++) {
+ /* flush Per-vCPU cache */
+ for (i = 0; i < mmio_ncpu; i++) {
if (mmio_hint[i] == entry)
mmio_hint[i] = NULL;
}
@@ -365,9 +366,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);