Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/sys_generic.c
| Show First 20 Lines • Show All 2,305 Lines • ▼ Show 20 Lines | if (error != 0) { | ||||
| ksi.ksi_addr = uloc; | ksi.ksi_addr = uloc; | ||||
| trapsignal(td, &ksi); | trapsignal(td, &ksi); | ||||
| } | } | ||||
| } | } | ||||
| int | int | ||||
| sys_exterrctl(struct thread *td, struct exterrctl_args *uap) | sys_exterrctl(struct thread *td, struct exterrctl_args *uap) | ||||
| { | { | ||||
| return (kern_exterrctl(td, uap->op, uap->flags, uap->ptr)); | |||||
| } | |||||
| int | |||||
| kern_exterrctl(struct thread *td, u_int op, u_int flags, void *ptr) | |||||
| { | |||||
| uint32_t ver; | uint32_t ver; | ||||
| int error; | int error; | ||||
| if ((uap->flags & ~(EXTERRCTLF_FORCE)) != 0) | if ((flags & ~(EXTERRCTLF_FORCE)) != 0) | ||||
| return (EINVAL); | return (EINVAL); | ||||
| switch (uap->op) { | switch (op) { | ||||
| case EXTERRCTL_ENABLE: | case EXTERRCTL_ENABLE: | ||||
| if ((td->td_pflags2 & TDP2_UEXTERR) != 0 && | if ((td->td_pflags2 & TDP2_UEXTERR) != 0 && | ||||
| (uap->flags & EXTERRCTLF_FORCE) == 0) | (flags & EXTERRCTLF_FORCE) == 0) | ||||
| return (EBUSY); | return (EBUSY); | ||||
| td->td_pflags2 &= ~TDP2_UEXTERR; | td->td_pflags2 &= ~TDP2_UEXTERR; | ||||
| error = copyin(uap->ptr, &ver, sizeof(ver)); | error = copyin(ptr, &ver, sizeof(ver)); | ||||
| if (error != 0) | if (error != 0) | ||||
| return (error); | return (error); | ||||
| if (ver != UEXTERROR_VER) | if (ver != UEXTERROR_VER) | ||||
| return (EINVAL); | return (EINVAL); | ||||
| td->td_pflags2 |= TDP2_UEXTERR; | td->td_pflags2 |= TDP2_UEXTERR; | ||||
| td->td_exterr_ptr = uap->ptr; | td->td_exterr_ptr = ptr; | ||||
| return (0); | return (0); | ||||
| case EXTERRCTL_DISABLE: | case EXTERRCTL_DISABLE: | ||||
| if ((td->td_pflags2 & TDP2_UEXTERR) == 0) | if ((td->td_pflags2 & TDP2_UEXTERR) == 0) | ||||
| return (EINVAL); | return (EINVAL); | ||||
| td->td_pflags2 &= ~TDP2_UEXTERR; | td->td_pflags2 &= ~TDP2_UEXTERR; | ||||
| return (0); | return (0); | ||||
| case EXTERRCTL_UD: | case EXTERRCTL_UD: | ||||
| /* | /* | ||||
| ▲ Show 20 Lines • Show All 59 Lines • Show Last 20 Lines | |||||