The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=069e2fb5506f8301cd9e2da1946c718bd268c50c
commit 069e2fb5506f8301cd9e2da1946c718bd268c50c Author: Konstantin Belousov <[email protected]> AuthorDate: 2025-10-25 09:14:59 +0000 Commit: Konstantin Belousov <[email protected]> CommitDate: 2025-11-04 04:11:12 +0000 exterror(9): add two helpers The exterr_set_from() function sets current thread extended error from the pre-filled struct kexterr. The exterr_clear() function clears some struct kexterr. Reviewed by: mckusick Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D53351 --- sys/kern/sys_generic.c | 19 +++++++++++++++++++ sys/sys/exterrvar.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index 7d666da9f88b..a61341df436c 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -2345,3 +2345,22 @@ exterr_set(int eerror, int category, const char *mmsg, uintptr_t pp1, } return (eerror); } + +int +exterr_set_from(const struct kexterr *ke) +{ + struct thread *td; + + td = curthread; + if ((td->td_pflags2 & TDP2_UEXTERR) != 0) { + td->td_pflags2 |= TDP2_EXTERR; + td->td_kexterr = *ke; + } + return (td->td_kexterr.error); +} + +void +exterr_clear(struct kexterr *ke) +{ + memset(ke, 0, sizeof(*ke)); +} diff --git a/sys/sys/exterrvar.h b/sys/sys/exterrvar.h index 5fce8ae7ffbe..1e07f6afb547 100644 --- a/sys/sys/exterrvar.h +++ b/sys/sys/exterrvar.h @@ -69,6 +69,8 @@ _EXTERROR_MACRO(__VA_ARGS__, _SET_ERROR2, _SET_ERROR1, \ _SET_ERROR0)(__VA_ARGS__) +void exterr_clear(struct kexterr *ke); +int exterr_set_from(const struct kexterr *ke); int exterr_set(int eerror, int category, const char *mmsg, uintptr_t pp1, uintptr_t pp2, int line); int exterr_to_ue(struct thread *td, struct uexterror *ue);
