> From: Miod Vallat <m...@online.fr> > Date: Sun, 28 May 2017 19:22:23 +0000 (UTC) > > > This makes MULTIPROCESSOR kernels use copyin32(9) to guarantee > > atomicity. This will break m88k GENERIC.MP; shouldn't be too > > difficult to fix for someone whu understands m88k assembly.
Looks plausible; ok kettenis@ > Index: subr.S > =================================================================== > RCS file: /OpenBSD/src/sys/arch/m88k/m88k/subr.S,v > retrieving revision 1.26 > diff -u -p -r1.26 subr.S > --- subr.S 21 Jun 2016 12:31:19 -0000 1.26 > +++ subr.S 28 May 2017 19:20:34 -0000 > @@ -372,6 +372,48 @@ ASLOCAL(Lciflt) > #undef DEST > #undef LEN > > +/* > + * Specific flavour for a single 32-bit word copy. > + * copyin32(from, to) > + * r2 == from (user source address) > + * r3 == to (kernel destination address) > + */ > + > +#define SRC %r2 > +#define DEST %r3 > + > +ENTRY(copyin32) > + /* check for source alignment */ > + mask %r8, SRC, 0x3 > + bcnd ne0, %r8, _ASM_LABEL(copyin32_misaligned) > + > + /* set up fault handler */ > + ldcr %r5, CPU > + ld %r6, %r5, CI_CURPCB > + or.u %r5, %r0, %hi16(_ASM_LABEL(Lciflt)) > + or %r5, %r5, %lo16(_ASM_LABEL(Lciflt)) > + st %r5, %r6, PCB_ONFAULT /* pcb_onfault = Lciflt */ > + > +#ifdef ERRATA__XXX_USR > + NOP > + ld.usr %r5, SRC, %r0 > + NOP > + NOP > + NOP > +#else > + ld.usr %r5, SRC, %r0 > +#endif > + st %r5, DEST, %r0 > + br.n _ASM_LABEL(Lcidone) > + or %r2, %r0, %r0 /* successful return */ > + > +ASLOCAL(copyin32_misaligned) > + jmp.n %r1 > + or %r2, %r0, EFAULT /* return fault */ > + > +#undef SRC > +#undef DEST > + > /*######################################################################*/ > /*######################################################################*/ > > >