Please trim useless content. Did I missed anything interesting in your mail ?
On Sun, Jul 29, 2018 at 11:57:47PM +0200, Oliver Pinter wrote: > On 7/29/18, Konstantin Belousov <k...@freebsd.org> wrote: > > +ENTRY(copyin_smap) > > + PUSH_FRAME_POINTER > > + movq PCPU(CURPCB),%rax > > + movq $copyin_fault,PCB_ONFAULT(%rax) > > + testq %rdx,%rdx /* anything to do? */ > > + jz done_copyin > > + > > + /* > > + * make sure address is valid > > + */ > > + movq %rdi,%rax > > + addq %rdx,%rax > > + jc copyin_fault > > + movq $VM_MAXUSER_ADDRESS,%rcx > > + cmpq %rcx,%rax > > + ja copyin_fault > > + > > + xchgq %rdi,%rsi > > + movq %rdx,%rcx > > + movb %cl,%al > > + shrq $3,%rcx /* copy longword-wise */ > > missing cld from here In fact not. It is copyin_nosmap that got unneeded cld. See r327820, apparently I mis-merged this commit into the SMAP branch. > > > + stac > > + rep > > + movsq > > + movb %al,%cl > > + andb $7,%cl /* copy remaining bytes */ > > je done_copyin > > rep > > movsb > > + clac > > +ENTRY(copyinstr_smap) > > + PUSH_FRAME_POINTER > > + movq %rdx,%r8 /* %r8 = maxlen */ > > + movq %rcx,%r9 /* %r9 = *len */ > > + xchgq %rdi,%rsi /* %rdi = from, %rsi = to */ > > + movq PCPU(CURPCB),%rcx > > + movq $cpystrflt,PCB_ONFAULT(%rcx) > > + > > + movq $VM_MAXUSER_ADDRESS,%rax > > + > > + /* make sure 'from' is within bounds */ > > + subq %rsi,%rax > > + jbe cpystrflt > > + > > + /* restrict maxlen to <= VM_MAXUSER_ADDRESS-from */ > > + cmpq %rdx,%rax > > + jae 1f > > + movq %rax,%rdx > > + movq %rax,%r8 > > +1: > > + incq %rdx > > missing cld here Same. > > > + > > +2: > > + decq %rdx > > + jz copyinstr_succ > > cpystrflt_x: > /* set *lencopied and return %eax */ > movq PCPU(CURPCB),%rcx > movq $0,PCB_ONFAULT(%rcx) > > testq %r9,%r9 > jz 1f > subq %rdx,%r8 > movq %r8,(%r9) << Here you access user-space, with cleared > RFLAGS.AC from the fault handler. How does this instruction access userspace ? I do not see. > 1: > POP_FRAME_POINTER > ret So the patch below removes unneeded (mismerged) cld's left in the support.S. diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S index 9b8b2a40461..0aa307e6895 100644 --- a/sys/amd64/amd64/support.S +++ b/sys/amd64/amd64/support.S @@ -307,7 +307,6 @@ ENTRY(copyout_smap) movq %rdx,%rcx shrq $3,%rcx - cld stac rep movsq @@ -358,7 +357,6 @@ ENTRY(copyin_nosmap) movq %rdx,%rcx movb %cl,%al shrq $3,%rcx /* copy longword-wise */ - cld rep movsq movb %al,%cl @@ -887,7 +885,6 @@ ENTRY(copyinstr_nosmap) movq %rax,%r8 1: incq %rdx - cld 2: decq %rdx _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"