git: 069e2fb5506f - main - exterror(9): add two helpers
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 04 Nov 2025 04:11:56 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=069e2fb5506f8301cd9e2da1946c718bd268c50c
commit 069e2fb5506f8301cd9e2da1946c718bd268c50c
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-10-25 09:14:59 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
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);