Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Apr 2026 18:16:19 +0000
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: fe2957f591b5 - main - sys: Switch td_kstack from vm_offset_t to char *
Message-ID:  <69ea61f3.45e97.67e95ff1@gitrepo.freebsd.org>

index | next in thread | raw e-mail

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.


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69ea61f3.45e97.67e95ff1>