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>
