git: fe2957f591b5 - main - sys: Switch td_kstack from vm_offset_t to char *
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 23 Apr 2026 18:16:19 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=fe2957f591b55d9cbd70cf1325048012fc833fbb
commit fe2957f591b55d9cbd70cf1325048012fc833fbb
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2026-04-23 17:05:54 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2026-04-23 17:05:54 +0000
sys: Switch td_kstack from vm_offset_t to char *
Effort: CHERI upstreaming
Reviewed by: kib
Sponsored by: AFRL, DARPA
Pull Request: https://github.com/freebsd/freebsd-src/pull/2068
---
sys/amd64/amd64/machdep.c | 8 ++++----
sys/amd64/include/proc.h | 2 +-
sys/amd64/include/stack.h | 8 ++++----
sys/arm/arm/machdep.c | 6 +++---
sys/arm/include/stack.h | 8 ++++----
sys/arm64/arm64/machdep.c | 2 +-
sys/arm64/include/machdep.h | 2 +-
sys/arm64/include/stack.h | 8 ++++----
sys/ddb/db_ps.c | 4 ++--
sys/ddb/db_thread.c | 2 +-
sys/i386/i386/machdep.c | 6 +++---
sys/i386/i386/trap.c | 2 +-
sys/i386/i386/vm_machdep.c | 4 ++--
sys/i386/include/stack.h | 4 ++--
sys/kern/kern_proc.c | 2 +-
sys/kern/kern_thread.c | 10 +++++-----
sys/kern/subr_asan.c | 4 ++--
sys/kern/subr_msan.c | 4 ++--
sys/powerpc/aim/mmu_oea.c | 2 +-
sys/powerpc/aim/mmu_oea64.c | 2 +-
sys/powerpc/aim/mmu_radix.c | 2 +-
sys/powerpc/booke/pmap.c | 2 +-
sys/powerpc/include/stack.h | 8 ++++----
sys/riscv/include/machdep.h | 2 +-
sys/riscv/include/stack.h | 8 ++++----
sys/riscv/riscv/machdep.c | 2 +-
sys/riscv/riscv/vm_machdep.c | 2 +-
sys/sys/proc.h | 2 +-
sys/vm/vm_glue.c | 12 ++++++------
29 files changed, 65 insertions(+), 65 deletions(-)
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 78199cb2ac03..21217ebdb9df 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -1365,10 +1365,10 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
/* Init basic tunables, hz etc */
init_param1();
- thread0.td_kstack = physfree - kernphys + KERNSTART;
+ thread0.td_kstack = (char *)physfree - kernphys + KERNSTART;
thread0.td_kstack_pages = kstack_pages;
kstack0_sz = thread0.td_kstack_pages * PAGE_SIZE;
- bzero((void *)thread0.td_kstack, kstack0_sz);
+ bzero(thread0.td_kstack, kstack0_sz);
physfree += kstack0_sz;
/*
@@ -1584,7 +1584,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
fpuinit();
/* make an initial tss so cpu can get interrupt stack on syscall! */
- rsp0 = thread0.td_md.md_stack_base;
+ rsp0 = (uintptr_t)thread0.td_md.md_stack_base;
/* Ensure the stack is aligned to 16 bytes */
rsp0 = STACKALIGN(rsp0);
PCPU_PTR(common_tss)->tss_rsp0 = rsp0;
@@ -1621,7 +1621,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
TSEXIT();
/* Location of kernel stack for locore */
- return (thread0.td_md.md_stack_base);
+ return ((uintptr_t)thread0.td_md.md_stack_base);
}
void
diff --git a/sys/amd64/include/proc.h b/sys/amd64/include/proc.h
index ff547981d599..47ad214e40dc 100644
--- a/sys/amd64/include/proc.h
+++ b/sys/amd64/include/proc.h
@@ -75,7 +75,7 @@ struct mdthread {
register_t md_efirt_tmp; /* (k) */
int md_efirt_dis_pf; /* (k) */
struct pcb md_pcb;
- vm_offset_t md_stack_base;
+ void *md_stack_base;
void *md_usr_fpu_save;
};
diff --git a/sys/amd64/include/stack.h b/sys/amd64/include/stack.h
index 848f35aad1a1..3c27266b775b 100644
--- a/sys/amd64/include/stack.h
+++ b/sys/amd64/include/stack.h
@@ -13,16 +13,16 @@
#define GET_STACK_USAGE(total, used) do { \
struct thread *td = curthread; \
(total) = td->td_kstack_pages * PAGE_SIZE; \
- (used) = (char *)td->td_kstack + \
- td->td_kstack_pages * PAGE_SIZE - \
+ (used) = td->td_kstack + td->td_kstack_pages * PAGE_SIZE - \
(char *)&td; \
} while (0)
static __inline bool
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
{
- return (va >= td->td_kstack && va + len >= va &&
- va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE);
+ return (va >= (vm_offset_t)td->td_kstack && va + len >= va &&
+ va + len <= (vm_offset_t)td->td_kstack + td->td_kstack_pages *
+ PAGE_SIZE);
}
#endif /* _SYS_PROC_H_ */
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c
index 1cd016f62e1b..a06e6773cd49 100644
--- a/sys/arm/arm/machdep.c
+++ b/sys/arm/arm/machdep.c
@@ -205,7 +205,7 @@ cpu_startup(void *dummy)
bufinit();
vm_pager_bufferinit();
- pcb->pcb_regs.sf_sp = (u_int)thread0.td_kstack +
+ pcb->pcb_regs.sf_sp = (uintptr_t)thread0.td_kstack +
USPACE_SVC_STACK_TOP;
pmap_set_pcb_pagedir(kernel_pmap, pcb);
}
@@ -373,7 +373,7 @@ pcpu0_init(void)
* Initialize proc0
*/
static void
-init_proc0(vm_offset_t kstack)
+init_proc0(void *kstack)
{
proc_linkup0(&proc0, &thread0);
thread0.td_kstack = kstack;
@@ -622,7 +622,7 @@ initarm(struct arm_boot_params *abp)
*/
/* Set stack for exception handlers */
undefined_init();
- init_proc0(kernelstack);
+ init_proc0((void *)kernelstack);
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
enable_interrupts(PSR_A);
pmap_bootstrap(0);
diff --git a/sys/arm/include/stack.h b/sys/arm/include/stack.h
index f6ac6eec7dae..e80d3dc060fd 100644
--- a/sys/arm/include/stack.h
+++ b/sys/arm/include/stack.h
@@ -69,15 +69,15 @@ void unwind_module_unloaded(struct linker_file *);
#define GET_STACK_USAGE(total, used) do { \
struct thread *td = curthread; \
(total) = td->td_kstack_pages * PAGE_SIZE - sizeof(struct pcb); \
- (used) = td->td_kstack + (total) - (vm_offset_t)&td; \
+ (used) = td->td_kstack + (total) - (char *)&td; \
} while (0)
static __inline bool
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
{
- return (va >= td->td_kstack && va + len >= va &&
- va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
- sizeof(struct pcb));
+ return (va >= (vm_offset_t)td->td_kstack && va + len >= va &&
+ va + len <= (vm_offset_t)td->td_kstack + td->td_kstack_pages *
+ PAGE_SIZE - sizeof(struct pcb));
}
#endif /* _SYS_PROC_H_ */
diff --git a/sys/arm64/arm64/machdep.c b/sys/arm64/arm64/machdep.c
index 2addc5af9568..2ef5a32d7d54 100644
--- a/sys/arm64/arm64/machdep.c
+++ b/sys/arm64/arm64/machdep.c
@@ -428,7 +428,7 @@ makectx(struct trapframe *tf, struct pcb *pcb)
}
static void
-init_proc0(vm_offset_t kstack)
+init_proc0(void *kstack)
{
struct pcpu *pcpup;
diff --git a/sys/arm64/include/machdep.h b/sys/arm64/include/machdep.h
index 3606690eb9ba..aea8b89b4f32 100644
--- a/sys/arm64/include/machdep.h
+++ b/sys/arm64/include/machdep.h
@@ -31,7 +31,7 @@
struct arm64_bootparams {
vm_offset_t modulep;
- vm_offset_t kern_stack;
+ void *kern_stack;
vm_paddr_t kern_ttbr0;
int boot_el; /* EL the kernel booted from */
int pad;
diff --git a/sys/arm64/include/stack.h b/sys/arm64/include/stack.h
index 3aa1e235884d..19e9e837e3ee 100644
--- a/sys/arm64/include/stack.h
+++ b/sys/arm64/include/stack.h
@@ -44,15 +44,15 @@ bool unwind_frame(struct thread *, struct unwind_state *);
#define GET_STACK_USAGE(total, used) do { \
struct thread *td = curthread; \
(total) = td->td_kstack_pages * PAGE_SIZE - sizeof(struct pcb); \
- (used) = td->td_kstack + (total) - (vm_offset_t)&td; \
+ (used) = td->td_kstack + (total) - (char *)&td; \
} while (0)
static __inline bool
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
{
- return (va >= td->td_kstack && va + len >= va &&
- va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
- sizeof(struct pcb));
+ return (va >= (vm_offset_t)td->td_kstack && va + len >= va &&
+ va + len <= (vm_offset_t)td->td_kstack + td->td_kstack_pages *
+ PAGE_SIZE - sizeof(struct pcb));
}
#endif /* _SYS_PROC_H_ */
diff --git a/sys/ddb/db_ps.c b/sys/ddb/db_ps.c
index a26cf8161294..8e027997ea75 100644
--- a/sys/ddb/db_ps.c
+++ b/sys/ddb/db_ps.c
@@ -358,8 +358,8 @@ DB_SHOW_COMMAND(thread, db_show_thread)
if (td->td_name[0] != '\0')
db_printf(" name: %s\n", td->td_name);
db_printf(" pcb: %p\n", td->td_pcb);
- db_printf(" stack: %p-%p\n", (void *)td->td_kstack,
- (void *)(td->td_kstack + td->td_kstack_pages * PAGE_SIZE - 1));
+ db_printf(" stack: %p-%p\n", td->td_kstack,
+ td->td_kstack + td->td_kstack_pages * PAGE_SIZE - 1);
db_printf(" flags: %#x ", td->td_flags);
db_printf(" pflags: %#x\n", td->td_pflags);
db_printf(" state: ");
diff --git a/sys/ddb/db_thread.c b/sys/ddb/db_thread.c
index 38ca9fa84f64..aac04868b9c9 100644
--- a/sys/ddb/db_thread.c
+++ b/sys/ddb/db_thread.c
@@ -84,7 +84,7 @@ db_show_threads(db_expr_t addr, bool hasaddr, db_expr_t cnt, char *mod)
thr = kdb_thr_first();
while (!db_pager_quit && thr != NULL) {
db_printf(" %6ld (%p) (stack %p) ", (long)thr->td_tid, thr,
- (void *)thr->td_kstack);
+ thr->td_kstack);
prev_jb = kdb_jmpbuf(jb);
if (setjmp(jb) == 0) {
if (db_trace_thread(thr, 1) != 0)
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index 821265cc2911..7dbaded419e6 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -1387,7 +1387,7 @@ init386(int first)
vm_offset_t addend;
size_t ucode_len;
- thread0.td_kstack = proc0kstack;
+ thread0.td_kstack = (char *)proc0kstack;
thread0.td_kstack_pages = TD0_KSTACK_PAGES;
/*
@@ -1499,8 +1499,8 @@ init386(int first)
PCPU_SET(fsgs_gdt, &gdt[GUFS_SEL].sd);
/* Initialize the tss (except for the final esp0) early for vm86. */
- common_tss0.tss_esp0 = thread0.td_kstack + thread0.td_kstack_pages *
- PAGE_SIZE - VM86_STACK_SPACE;
+ common_tss0.tss_esp0 = (vm_offset_t)thread0.td_kstack +
+ thread0.td_kstack_pages * PAGE_SIZE - VM86_STACK_SPACE;
common_tss0.tss_ss0 = GSEL(GDATA_SEL, SEL_KPL);
common_tss0.tss_ioopt = sizeof(struct i386tss) << 16;
gsel_tss = GSEL(GPROC0_SEL, SEL_KPL);
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index a8b7df42a283..44376550fc9f 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -201,7 +201,7 @@ trap_check_kstack(void)
if (stk >= PMAP_TRM_MIN_ADDRESS)
panic("td %p stack %#x in trampoline", td, stk);
if (!kstack_contains(td, stk, 0))
- panic("td %p stack %#x not in kstack VA %#x %d",
+ panic("td %p stack %#x not in kstack VA %p %d",
td, stk, td->td_kstack, td->td_kstack_pages);
}
#endif
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index 2d8491c38dab..672ec9360c35 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -87,7 +87,7 @@ _Static_assert(__OFFSETOF_MONITORBUF == offsetof(struct pcpu, pc_monitorbuf),
union savefpu *
get_pcb_user_save_td(struct thread *td)
{
- vm_offset_t p;
+ char *p;
p = td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
roundup2(cpu_max_ext_state_size, XSAVE_AREA_ALIGN);
@@ -108,7 +108,7 @@ get_pcb_user_save_pcb(struct pcb *pcb)
struct pcb *
get_pcb_td(struct thread *td)
{
- vm_offset_t p;
+ char *p;
p = td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
roundup2(cpu_max_ext_state_size, XSAVE_AREA_ALIGN) -
diff --git a/sys/i386/include/stack.h b/sys/i386/include/stack.h
index 9b48563fa1f6..3ab22df6190d 100644
--- a/sys/i386/include/stack.h
+++ b/sys/i386/include/stack.h
@@ -12,14 +12,14 @@
/* Get the current kernel thread stack usage. */
#define GET_STACK_USAGE(total, used) do { \
struct thread *td = curthread; \
- (total) = (vm_offset_t)get_pcb_td(td) - td->td_kstack; \
+ (total) = (char *)get_pcb_td(td) - td->td_kstack; \
(used) = (vm_offset_t)get_pcb_td(td) - (vm_offset_t)&td; \
} while (0)
static __inline bool
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
{
- return (va >= td->td_kstack && va + len >= va &&
+ return (va >= (vm_offset_t)td->td_kstack && va + len >= va &&
va + len <= (vm_offset_t)get_pcb_td(td));
}
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index a88ed6902f3a..43cb1f95b4ef 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -1327,7 +1327,7 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, int preferthread)
kp->ki_tid = td->td_tid;
kp->ki_numthreads = p->p_numthreads;
kp->ki_pcb = td->td_pcb;
- kp->ki_kstack = (void *)td->td_kstack;
+ kp->ki_kstack = td->td_kstack;
kp->ki_slptime = (ticks - td->td_slptick) / hz;
kp->ki_pri.pri_class = td->td_pri_class;
kp->ki_pri.pri_user = td->td_user_pri;
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index 4f9053460455..ec65bd16dd50 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -466,7 +466,7 @@ thread_init(void *mem, int size, int flags)
td->td_turnstile = turnstile_alloc();
EVENTHANDLER_DIRECT_INVOKE(thread_init, td);
umtx_thread_init(td);
- td->td_kstack = 0;
+ td->td_kstack = NULL;
td->td_sel = NULL;
return (0);
}
@@ -791,7 +791,7 @@ thread_alloc(int pages)
tid = tid_alloc();
td = uma_zalloc(thread_zone, M_WAITOK);
- KASSERT(td->td_kstack == 0, ("thread_alloc got thread with kstack"));
+ KASSERT(td->td_kstack == NULL, ("thread_alloc got thread with kstack"));
if (!vm_thread_new(td, pages)) {
uma_zfree(thread_zone, td);
tid_free(tid);
@@ -810,8 +810,8 @@ thread_alloc(int pages)
int
thread_recycle(struct thread *td, int pages)
{
- if (td->td_kstack == 0 || td->td_kstack_pages != pages) {
- if (td->td_kstack != 0)
+ if (td->td_kstack == NULL || td->td_kstack_pages != pages) {
+ if (td->td_kstack != NULL)
vm_thread_dispose(td);
if (!vm_thread_new(td, pages))
return (ENOMEM);
@@ -834,7 +834,7 @@ thread_free_batched(struct thread *td)
cpuset_rel(td->td_cpuset);
td->td_cpuset = NULL;
cpu_thread_free(td);
- if (td->td_kstack != 0)
+ if (td->td_kstack != NULL)
vm_thread_dispose(td);
callout_drain(&td->td_slpcallout);
/*
diff --git a/sys/kern/subr_asan.c b/sys/kern/subr_asan.c
index 867d232198b9..32f46acb5304 100644
--- a/sys/kern/subr_asan.c
+++ b/sys/kern/subr_asan.c
@@ -297,8 +297,8 @@ kasan_mark(const void *addr, size_t size, size_t redzsize, uint8_t code)
void
kasan_thread_alloc(struct thread *td)
{
- if (td->td_kstack != 0) {
- kasan_mark((void *)td->td_kstack, ptoa(td->td_kstack_pages),
+ if (td->td_kstack != NULL) {
+ kasan_mark(td->td_kstack, ptoa(td->td_kstack_pages),
ptoa(td->td_kstack_pages), 0);
}
}
diff --git a/sys/kern/subr_msan.c b/sys/kern/subr_msan.c
index dd69375f4ed1..861fa0e13724 100644
--- a/sys/kern/subr_msan.c
+++ b/sys/kern/subr_msan.c
@@ -461,8 +461,8 @@ kmsan_thread_alloc(struct thread *td)
__builtin_memset(mtd, 0, sizeof(*mtd));
mtd->ctx = 0;
- if (td->td_kstack != 0)
- kmsan_mark((void *)td->td_kstack, ptoa(td->td_kstack_pages),
+ if (td->td_kstack != NULL)
+ kmsan_mark(td->td_kstack, ptoa(td->td_kstack_pages),
KMSAN_STATE_UNINIT);
td->td_kmsan = mtd;
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c
index 447ca22931b3..d2105d22d07d 100644
--- a/sys/powerpc/aim/mmu_oea.c
+++ b/sys/powerpc/aim/mmu_oea.c
@@ -962,7 +962,7 @@ moea_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
va = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE;
virtual_avail = va + kstack_pages * PAGE_SIZE;
CTR2(KTR_PMAP, "moea_bootstrap: kstack0 at %#x (%#x)", pa, va);
- thread0.td_kstack = va;
+ thread0.td_kstack = (char *)va;
thread0.td_kstack_pages = kstack_pages;
for (i = 0; i < kstack_pages; i++) {
moea_kenter(va, pa);
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c
index 553d7857318d..27b214ccf1bf 100644
--- a/sys/powerpc/aim/mmu_oea64.c
+++ b/sys/powerpc/aim/mmu_oea64.c
@@ -1184,7 +1184,7 @@ moea64_late_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
va = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE;
virtual_avail = va + kstack_pages * PAGE_SIZE;
CTR2(KTR_PMAP, "moea64_bootstrap: kstack0 at %#x (%#x)", pa, va);
- thread0.td_kstack = va;
+ thread0.td_kstack = (char *)va;
thread0.td_kstack_pages = kstack_pages;
for (i = 0; i < kstack_pages; i++) {
moea64_kenter(va, pa);
diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
index 2764d82efbad..42b906de2ff4 100644
--- a/sys/powerpc/aim/mmu_radix.c
+++ b/sys/powerpc/aim/mmu_radix.c
@@ -2083,7 +2083,7 @@ mmu_radix_late_bootstrap(vm_offset_t start, vm_offset_t end)
va = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE;
virtual_avail = va + kstack_pages * PAGE_SIZE;
CTR2(KTR_PMAP, "moea64_bootstrap: kstack0 at %#x (%#x)", pa, va);
- thread0.td_kstack = va;
+ thread0.td_kstack = (char *)va;
for (i = 0; i < kstack_pages; i++) {
mmu_radix_kenter(va, pa);
pa += PAGE_SIZE;
diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c
index 2766b7338064..2ebe4d64fbaa 100644
--- a/sys/powerpc/booke/pmap.c
+++ b/sys/powerpc/booke/pmap.c
@@ -930,7 +930,7 @@ mmu_booke_bootstrap(vm_offset_t start, vm_offset_t kernelend)
/* Enter kstack0 into kernel map, provide guard page */
kstack0 = virtual_avail + KSTACK_GUARD_PAGES * PAGE_SIZE;
- thread0.td_kstack = kstack0;
+ thread0.td_kstack = (char *)kstack0;
thread0.td_kstack_pages = kstack_pages;
debugf("kstack_sz = 0x%08jx\n", (uintmax_t)kstack0_sz);
diff --git a/sys/powerpc/include/stack.h b/sys/powerpc/include/stack.h
index 2904c36fe208..928256b26468 100644
--- a/sys/powerpc/include/stack.h
+++ b/sys/powerpc/include/stack.h
@@ -39,15 +39,15 @@ extern int end[];
#define GET_STACK_USAGE(total, used) do { \
struct thread *td = curthread; \
(total) = td->td_kstack_pages * PAGE_SIZE - sizeof(struct pcb); \
- (used) = td->td_kstack + (total) - (vm_offset_t)&td; \
+ (used) = td->td_kstack + (total) - (char *)&td; \
} while (0)
static __inline bool
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
{
- return (va >= td->td_kstack && va + len >= va &&
- va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
- sizeof(struct pcb));
+ return (va >= (vm_offset_t)td->td_kstack && va + len >= va &&
+ va + len <= (vm_offset_t)td->td_kstack + td->td_kstack_pages *
+ PAGE_SIZE - sizeof(struct pcb));
}
#endif /* _SYS_PROC_H_ */
diff --git a/sys/riscv/include/machdep.h b/sys/riscv/include/machdep.h
index cfe95e5d81aa..101caa75af79 100644
--- a/sys/riscv/include/machdep.h
+++ b/sys/riscv/include/machdep.h
@@ -37,7 +37,7 @@
struct riscv_bootparams {
vm_offset_t kern_phys; /* Kernel base (physical) addr */
- vm_offset_t kern_stack;
+ void *kern_stack;
vm_offset_t dtbp_phys; /* Device tree blob physical addr */
vm_offset_t modulep; /* loader(8) metadata */
};
diff --git a/sys/riscv/include/stack.h b/sys/riscv/include/stack.h
index 4edd7107fe87..03b5794c2b13 100644
--- a/sys/riscv/include/stack.h
+++ b/sys/riscv/include/stack.h
@@ -54,15 +54,15 @@ bool unwind_frame(struct thread *, struct unwind_state *);
#define GET_STACK_USAGE(total, used) do { \
struct thread *td = curthread; \
(total) = td->td_kstack_pages * PAGE_SIZE - sizeof(struct pcb); \
- (used) = td->td_kstack + (total) - (vm_offset_t)&td; \
+ (used) = td->td_kstack + (total) - (char *)&td; \
} while (0)
static __inline bool
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
{
- return (va >= td->td_kstack && va + len >= va &&
- va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE -
- sizeof(struct pcb));
+ return (va >= (vm_offset_t)td->td_kstack && va + len >= va &&
+ va + len <= (vm_offset_t)td->td_kstack + td->td_kstack_pages *
+ PAGE_SIZE - sizeof(struct pcb));
}
#endif /* _SYS_PROC_H_ */
diff --git a/sys/riscv/riscv/machdep.c b/sys/riscv/riscv/machdep.c
index 3f454bdb1c8f..91219676454b 100644
--- a/sys/riscv/riscv/machdep.c
+++ b/sys/riscv/riscv/machdep.c
@@ -287,7 +287,7 @@ makectx(struct trapframe *tf, struct pcb *pcb)
}
static void
-init_proc0(vm_offset_t kstack)
+init_proc0(void *kstack)
{
struct pcpu *pcpup;
diff --git a/sys/riscv/riscv/vm_machdep.c b/sys/riscv/riscv/vm_machdep.c
index e0254f80e62f..206110157233 100644
--- a/sys/riscv/riscv/vm_machdep.c
+++ b/sys/riscv/riscv/vm_machdep.c
@@ -61,7 +61,7 @@
static void
cpu_set_pcb_frame(struct thread *td)
{
- td->td_pcb = (struct pcb *)((char *)td->td_kstack +
+ td->td_pcb = (struct pcb *)(td->td_kstack +
td->td_kstack_pages * PAGE_SIZE) - 1;
/*
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 7c4431ab0819..b560ea2e8020 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -367,7 +367,7 @@ struct thread {
/* LP64 hole */
struct callout td_slpcallout; /* (h) Callout for sleep. */
struct trapframe *td_frame; /* (k) */
- vm_offset_t td_kstack; /* (a) Kernel VA of kstack. */
+ char *td_kstack; /* (a) Pointer to kstack. */
u_short td_kstack_pages; /* (a) Size of the kstack. */
u_short td_kstack_domain; /* (a) Domain backing kstack KVA. */
volatile u_int td_critnest; /* (k*) Critical section nest level. */
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index 0b90f1804935..191711ec7765 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -540,7 +540,7 @@ vm_thread_new(struct thread *td, int pages)
ks_domain = vm_phys_domain(vtophys(ks));
KASSERT(ks_domain >= 0 && ks_domain < vm_ndomains,
("%s: invalid domain for kstack %p", __func__, (void *)ks));
- td->td_kstack = (vm_offset_t)ks;
+ td->td_kstack = ks;
td->td_kstack_pages = pages;
td->td_kstack_domain = ks_domain;
return (1);
@@ -556,8 +556,8 @@ vm_thread_dispose(struct thread *td)
int pages;
pages = td->td_kstack_pages;
- ks = (void *)td->td_kstack;
- td->td_kstack = 0;
+ ks = td->td_kstack;
+ td->td_kstack = NULL;
td->td_kstack_pages = 0;
td->td_kstack_domain = MAXMEMDOM;
if (pages == kstack_pages) {
@@ -727,8 +727,8 @@ SYSCTL_INT(_debug, OID_AUTO, max_kstack_used, CTLFLAG_RD,
void
intr_prof_stack_use(struct thread *td, struct trapframe *frame)
{
- vm_offset_t stack_top;
- vm_offset_t current;
+ char *stack_top;
+ char *current;
int used, prev_used;
/*
@@ -740,7 +740,7 @@ intr_prof_stack_use(struct thread *td, struct trapframe *frame)
return;
stack_top = td->td_kstack + td->td_kstack_pages * PAGE_SIZE;
- current = (vm_offset_t)(uintptr_t)&stack_top;
+ current = (char *)&stack_top;
/*
* Try to detect if interrupt is using kernel thread stack.