git: 60c4869ed58d - main - sgx: replace tailq pointers with iterators
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 19 Apr 2025 22:16:57 UTC
The branch main has been updated by dougm:
URL: https://cgit.FreeBSD.org/src/commit/?id=60c4869ed58d98c27b0f4a35713963cda46e6a46
commit 60c4869ed58d98c27b0f4a35713963cda46e6a46
Author: Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-04-19 22:15:20 +0000
Commit: Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-04-19 22:16:46 +0000
sgx: replace tailq pointers with iterators
In sgx code, use iterators to replace tailq pointers for page
manipulation.
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D49919
---
sys/amd64/sgx/sgx.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/sys/amd64/sgx/sgx.c b/sys/amd64/sgx/sgx.c
index 1cc268102b1f..af8adb763214 100644
--- a/sys/amd64/sgx/sgx.c
+++ b/sys/amd64/sgx/sgx.c
@@ -346,13 +346,17 @@ sgx_epc_page_remove(struct sgx_softc *sc,
}
static void
-sgx_page_remove(struct sgx_softc *sc, vm_page_t p)
+sgx_page_remove(struct sgx_softc *sc, vm_page_t p,
+ struct pctrie_iter *pages)
{
struct epc_page *epc;
vm_paddr_t pa;
uint64_t offs;
- (void)vm_page_remove(p);
+ if (pages != NULL)
+ (void)vm_page_iter_remove(pages, p);
+ else
+ (void) vm_page_remove(p);
dprintf("%s: p->pidx %ld\n", __func__, p->pindex);
@@ -369,8 +373,9 @@ static void
sgx_enclave_remove(struct sgx_softc *sc,
struct sgx_enclave *enclave)
{
+ struct pctrie_iter pages;
vm_object_t object;
- vm_page_t p, p_secs, p_next;
+ vm_page_t p, p_secs;
mtx_lock(&sc->mtx);
TAILQ_REMOVE(&sc->enclaves, enclave, next);
@@ -378,6 +383,7 @@ sgx_enclave_remove(struct sgx_softc *sc,
object = enclave->object;
+ vm_page_iter_init(&pages, object);
VM_OBJECT_WLOCK(object);
/*
@@ -385,20 +391,21 @@ sgx_enclave_remove(struct sgx_softc *sc,
* then remove SECS page.
*/
restart:
- TAILQ_FOREACH_SAFE(p, &object->memq, listq, p_next) {
+ VM_RADIX_FOREACH(p, &pages) {
if (p->pindex == SGX_SECS_VM_OBJECT_INDEX)
continue;
- if (vm_page_busy_acquire(p, VM_ALLOC_WAITFAIL) == 0)
+ if (vm_page_busy_acquire(p, VM_ALLOC_WAITFAIL) == 0) {
+ pctrie_iter_reset(&pages);
goto restart;
- sgx_page_remove(sc, p);
+ }
+ sgx_page_remove(sc, p, &pages);
}
p_secs = vm_page_grab(object, SGX_SECS_VM_OBJECT_INDEX,
VM_ALLOC_NOCREAT);
/* Now remove SECS page */
if (p_secs != NULL)
- sgx_page_remove(sc, p_secs);
+ sgx_page_remove(sc, p_secs, NULL);
- KASSERT(TAILQ_EMPTY(&object->memq) == 1, ("not empty"));
KASSERT(object->resident_page_count == 0, ("count"));
VM_OBJECT_WUNLOCK(object);
@@ -729,7 +736,7 @@ sgx_ioctl_create(struct sgx_softc *sc, struct sgx_enclave_create *param)
p = vm_page_grab(enclave->object,
- SGX_VA_PAGES_OFFS - SGX_SECS_VM_OBJECT_INDEX,
VM_ALLOC_NOCREAT);
- sgx_page_remove(sc, p);
+ sgx_page_remove(sc, p, NULL);
VM_OBJECT_WUNLOCK(object);
goto error;
}
@@ -743,7 +750,7 @@ sgx_ioctl_create(struct sgx_softc *sc, struct sgx_enclave_create *param)
p = vm_page_grab(enclave->object,
- SGX_VA_PAGES_OFFS - SGX_SECS_VM_OBJECT_INDEX,
VM_ALLOC_NOCREAT);
- sgx_page_remove(sc, p);
+ sgx_page_remove(sc, p, NULL);
VM_OBJECT_WUNLOCK(object);
goto error;
}