Module Name: src Committed By: maxv Date: Sun Jul 19 07:35:08 UTC 2020
Modified Files: src/sys/arch/amd64/amd64: cpufunc.S src/sys/arch/amd64/include: frameasm.h src/sys/arch/i386/i386: cpufunc.S src/sys/arch/x86/include: pmap.h src/sys/arch/x86/x86: svs.c Log Message: Revert most of ad's movs/stos change. Instead do a lot simpler: declare svs_quad_copy() used by SVS only, with no need for instrumentation, because SVS is disabled when sanitizers are on. To generate a diff of this commit: cvs rdiff -u -r1.63 -r1.64 src/sys/arch/amd64/amd64/cpufunc.S cvs rdiff -u -r1.51 -r1.52 src/sys/arch/amd64/include/frameasm.h cvs rdiff -u -r1.48 -r1.49 src/sys/arch/i386/i386/cpufunc.S cvs rdiff -u -r1.124 -r1.125 src/sys/arch/x86/include/pmap.h cvs rdiff -u -r1.38 -r1.39 src/sys/arch/x86/x86/svs.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/amd64/amd64/cpufunc.S diff -u src/sys/arch/amd64/amd64/cpufunc.S:1.63 src/sys/arch/amd64/amd64/cpufunc.S:1.64 --- src/sys/arch/amd64/amd64/cpufunc.S:1.63 Wed Jun 24 18:09:37 2020 +++ src/sys/arch/amd64/amd64/cpufunc.S Sun Jul 19 07:35:08 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.S,v 1.63 2020/06/24 18:09:37 maxv Exp $ */ +/* $NetBSD: cpufunc.S,v 1.64 2020/07/19 07:35:08 maxv Exp $ */ /* * Copyright (c) 1998, 2007, 2008, 2020 The NetBSD Foundation, Inc. @@ -446,10 +446,13 @@ ENTRY(outl) ret END(outl) -ENTRY(x86_movs) +/* + * Used by SVS only, to make an atomic but fast copy. Doesn't have + * sanitizer instrumentation, but sanitizers disable SVS, so no problem. + */ +ENTRY(svs_quad_copy) movq %rdx,%rcx - KMSAN_REP_STOS(8) rep movsq ret -END(x86_movs) +END(svs_quad_copy) Index: src/sys/arch/amd64/include/frameasm.h diff -u src/sys/arch/amd64/include/frameasm.h:1.51 src/sys/arch/amd64/include/frameasm.h:1.52 --- src/sys/arch/amd64/include/frameasm.h:1.51 Sun Jun 21 16:53:37 2020 +++ src/sys/arch/amd64/include/frameasm.h Sun Jul 19 07:35:08 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: frameasm.h,v 1.51 2020/06/21 16:53:37 bouyer Exp $ */ +/* $NetBSD: frameasm.h,v 1.52 2020/07/19 07:35:08 maxv Exp $ */ #ifndef _AMD64_MACHINE_FRAMEASM_H #define _AMD64_MACHINE_FRAMEASM_H @@ -276,33 +276,11 @@ popq %rdx ; \ popq %rcx ; \ popq %rax -#define KMSAN_REP_STOS(scale) \ - pushq %rax ; \ - pushq %rcx ; \ - pushq %rdx ; \ - pushq %rsi ; \ - pushq %rdi ; \ - pushq %r8 ; \ - pushq %r9 ; \ - pushq %r10 ; \ - pushq %r11 ; \ - leaq (,%rcx,scale),%rsi ; \ - callq _C_LABEL(__msan_instrument_asm_store); \ - popq %r11 ; \ - popq %r10 ; \ - popq %r9 ; \ - popq %r8 ; \ - popq %rdi ; \ - popq %rsi ; \ - popq %rdx ; \ - popq %rcx ; \ - popq %rax #else #define KMSAN_ENTER /* nothing */ #define KMSAN_LEAVE /* nothing */ #define KMSAN_INIT_ARG(sz) /* nothing */ #define KMSAN_INIT_RET(sz) /* nothing */ -#define KMSAN_REP_STOS(scale) /* nothing */ #endif #ifdef KCOV Index: src/sys/arch/i386/i386/cpufunc.S diff -u src/sys/arch/i386/i386/cpufunc.S:1.48 src/sys/arch/i386/i386/cpufunc.S:1.49 --- src/sys/arch/i386/i386/cpufunc.S:1.48 Wed Jun 24 18:09:37 2020 +++ src/sys/arch/i386/i386/cpufunc.S Sun Jul 19 07:35:08 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.S,v 1.48 2020/06/24 18:09:37 maxv Exp $ */ +/* $NetBSD: cpufunc.S,v 1.49 2020/07/19 07:35:08 maxv Exp $ */ /*- * Copyright (c) 1998, 2007, 2020 The NetBSD Foundation, Inc. @@ -38,7 +38,7 @@ #include <sys/errno.h> #include <machine/asm.h> -__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.48 2020/06/24 18:09:37 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpufunc.S,v 1.49 2020/07/19 07:35:08 maxv Exp $"); #include "opt_xen.h" @@ -353,19 +353,3 @@ ENTRY(outl) outl %eax, %dx ret END(outl) - -ENTRY(x86_movs) - pushl %ebp - movl %esp,%ebp - pushl %edi - pushl %esi - movl 8(%ebp),%edi - movl 12(%ebp),%esi - movl 16(%ebp),%ecx - rep - movsl - popl %esi - popl %edi - leave - ret -END(x86_movs) Index: src/sys/arch/x86/include/pmap.h diff -u src/sys/arch/x86/include/pmap.h:1.124 src/sys/arch/x86/include/pmap.h:1.125 --- src/sys/arch/x86/include/pmap.h:1.124 Tue Jul 14 00:45:53 2020 +++ src/sys/arch/x86/include/pmap.h Sun Jul 19 07:35:08 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.124 2020/07/14 00:45:53 yamaguchi Exp $ */ +/* $NetBSD: pmap.h,v 1.125 2020/07/19 07:35:08 maxv Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -612,7 +612,7 @@ extern vaddr_t pmap_direct_end; #endif /* __HAVE_DIRECT_MAP */ -void x86_movs(void *, void *, long); +void svs_quad_copy(void *, void *, long); #endif /* _KERNEL */ Index: src/sys/arch/x86/x86/svs.c diff -u src/sys/arch/x86/x86/svs.c:1.38 src/sys/arch/x86/x86/svs.c:1.39 --- src/sys/arch/x86/x86/svs.c:1.38 Tue Jul 14 00:45:53 2020 +++ src/sys/arch/x86/x86/svs.c Sun Jul 19 07:35:08 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: svs.c,v 1.38 2020/07/14 00:45:53 yamaguchi Exp $ */ +/* $NetBSD: svs.c,v 1.39 2020/07/19 07:35:08 maxv Exp $ */ /* * Copyright (c) 2018-2020 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: svs.c,v 1.38 2020/07/14 00:45:53 yamaguchi Exp $"); +__KERNEL_RCSID(0, "$NetBSD: svs.c,v 1.39 2020/07/19 07:35:08 maxv Exp $"); #include "opt_svs.h" #include "opt_user_ldt.h" @@ -704,7 +704,7 @@ svs_pdir_switch(struct pmap *pmap) /* Copy user slots. */ mutex_enter(&ci->ci_svs_mtx); - x86_movs(ci->ci_svs_updir, pmap->pm_pdir, PDIR_SLOT_USERLIM); + svs_quad_copy(ci->ci_svs_updir, pmap->pm_pdir, PDIR_SLOT_USERLIM); mutex_exit(&ci->ci_svs_mtx); if (svs_pcid) {