Module Name: src Committed By: rin Date: Wed Mar 4 13:01:52 UTC 2020
Modified Files: src/sys/arch/powerpc/booke: copyout.c Log Message: Comment out full function of optimized version of copyoutstr(9), which has never been enabled so far. Only for clarity. No binary changes. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/powerpc/booke/copyout.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/booke/copyout.c diff -u src/sys/arch/powerpc/booke/copyout.c:1.5 src/sys/arch/powerpc/booke/copyout.c:1.6 --- src/sys/arch/powerpc/booke/copyout.c:1.5 Sun Apr 7 05:25:55 2019 +++ src/sys/arch/powerpc/booke/copyout.c Wed Mar 4 13:01:52 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: copyout.c,v 1.5 2019/04/07 05:25:55 thorpej Exp $ */ +/* $NetBSD: copyout.c,v 1.6 2020/03/04 13:01:52 rin Exp $ */ /*- * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: copyout.c,v 1.5 2019/04/07 05:25:55 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: copyout.c,v 1.6 2020/03/04 13:01:52 rin Exp $"); #define __UFETCHSTORE_PRIVATE @@ -400,6 +400,7 @@ copyout(const void *vksaddr, void *vudad return 0; } +#if 1 int copyoutstr(const void *ksaddr, void *udaddr, size_t len, size_t *lenp) { @@ -423,7 +424,6 @@ copyoutstr(const void *ksaddr, void *uda const uint8_t *ksaddr8 = ksaddr; size_t copylen = 0; -#if 1 uint8_t *udaddr8 = (void *)udaddr; while (copylen++ < len) { @@ -432,7 +432,37 @@ copyoutstr(const void *ksaddr, void *uda if (data == 0) break; } + + pcb->pcb_onfault = NULL; + if (lenp) + *lenp = copylen; + return 0; +} #else +/* XXX This version of copyoutstr(9) has never beeen enabled so far. */ +int +copyoutstr(const void *ksaddr, void *udaddr, size_t len, size_t *lenp) +{ + struct pcb * const pcb = lwp_getpcb(curlwp); + struct faultbuf env; + + if (__predict_false(len == 0)) { + if (lenp) + *lenp = 0; + return 0; + } + + if (setfault(&env)) { + pcb->pcb_onfault = NULL; + if (lenp) + *lenp = 0; + return EFAULT; + } + + const register_t ds_msr = mfmsr() | PSL_DS; + const uint8_t *ksaddr8 = ksaddr; + size_t copylen = 0; + uint32_t *udaddr32 = (void *)((uintptr_t)udaddr & ~3); size_t boff = (uintptr_t)udaddr & 3; @@ -523,10 +553,10 @@ copyoutstr(const void *ksaddr, void *uda copyout_le32_with_mask(udaddr32, data, mask, ds_msr); copylen += wlen; } -#endif pcb->pcb_onfault = NULL; if (lenp) *lenp = copylen; return 0; } +#endif