Date: Tue, 3 Jun 2025 04:07:40 GMT From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 6d43260d49e6 - main - ktrace: generate events on extended errors Message-ID: <202506030407.55347esq071205@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=6d43260d49e6af7de43a0a3181178d7a3ee20613 commit 6d43260d49e6af7de43a0a3181178d7a3ee20613 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2025-05-31 21:42:49 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2025-06-03 02:47:38 +0000 ktrace: generate events on extended errors The ktrexterr() function is provided unconditionally, to mitigate the issue of missed include of "opt_ktrace.h" before using exterrvar.h otherwise. Reviewed by: brooks Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D50633 --- sys/kern/kern_ktrace.c | 29 +++++++++++++++++++++++++++++ sys/sys/exterrvar.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c index 973f19d1d060..96ab5c26973f 100644 --- a/sys/kern/kern_ktrace.c +++ b/sys/kern/kern_ktrace.c @@ -106,6 +106,7 @@ struct ktr_request { struct ktr_fault ktr_fault; struct ktr_faultend ktr_faultend; struct ktr_struct_array ktr_struct_array; + struct ktr_exterr ktr_exterr; } ktr_data; STAILQ_ENTRY(ktr_request) ktr_list; }; @@ -128,6 +129,7 @@ static const int data_lengths[] = { [KTR_STRUCT_ARRAY] = sizeof(struct ktr_struct_array), [KTR_ARGS] = 0, [KTR_ENVS] = 0, + [KTR_EXTERR] = sizeof(struct ktr_exterr), }; static STAILQ_HEAD(, ktr_request) ktr_free; @@ -1035,8 +1037,35 @@ ktrfaultend(int result) ktr_enqueuerequest(td, req); ktrace_exit(td); } + +void +ktrexterr(struct thread *td) +{ + struct ktr_request *req; + struct ktr_exterr *ktre; + + if (!KTRPOINT(td, KTR_EXTERR)) + return; + + req = ktr_getrequest(KTR_EXTERR); + if (req == NULL) + return; + ktre = &req->ktr_data.ktr_exterr; + if (exterr_to_ue(td, &ktre->ue) == 0) + ktr_enqueuerequest(td, req); + else + ktr_freerequest(req); + ktrace_exit(td); +} #endif /* KTRACE */ +#ifndef KTRACE +void +ktrexterr(struct thread *td __unused) +{ +} +#endif + /* Interface and common routines */ #ifndef _SYS_SYSPROTO_H_ diff --git a/sys/sys/exterrvar.h b/sys/sys/exterrvar.h index 7e842f553866..4b168446e23b 100644 --- a/sys/sys/exterrvar.h +++ b/sys/sys/exterrvar.h @@ -46,12 +46,14 @@ _Td->td_kexterr.p1 = (uintptr_t)pp1; \ _Td->td_kexterr.p2 = (uintptr_t)pp2; \ _Td->td_kexterr.src_line = __LINE__; \ + ktrexterr(_Td); \ } \ } while (0) #define SET_ERROR0(eerror, mmsg) SET_ERROR2(eerror, mmsg, 0, 0) #define SET_ERROR1(eerror, mmsg, pp1) SET_ERROR2(eerror, mmsg, pp1, 0) int exterr_to_ue(struct thread *td, struct uexterror *ue); +void ktrexterr(struct thread *td); #else /* _KERNEL */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506030407.55347esq071205>