Here is why:
kernel bcopy and userland bcopy semantics were never the same. bcopy
in the kernel did not traditionally handle overlap.
ovbcopy in the kernel was the traditional "overlapping bcopy".
Lets take a step back here. The point of the macros was to provide
legacy interfaces so we could transition to mem* without disrupting
large parts of the code still being repeatedly merged, like the KAME
merges in net*/. Having purged the last ovbcopy from the kernel,
replacing them all with memmove, we didn't need ovbcopy any more so we
didn't need a macro.
Now, by leaving bcopy as memcpy, we make it clear that if you are
purging bcopys, you should replace them with memcpys. If we used
memmoves everywhere, it would lose very painstaking optimizations made
in the original code during which the ovbcopy/bcopy distinction was
held. Making bcopy into memmove is BAD BAD BAD.
It has been argued we should add an ovbcopy->memmove macro, but that
is precisely what we do not want -- if someone needs ovbcopy, what
they really want to write memmove, not ovbcopy. We don't want NEW code
with ovbcopy, having laboriously gotten rid of it.
In fact, the bcopy/bzero/bcmps in the kernel should all be purged. We
held off on doing net*/ to make the kame merge easier, and similarly
held off on some other places, but the time has come.
Anyway, for all these reasons, bcopy is changed back to memcpy.
hardware-assisted soft interrupts on all boards.
(Note: VMEChip2-less 162/172 not yet tested)
This greatly simplifies the `rei' path and allows
interrupt nesting to be tracked somewhat more easily.
As a result we now have a working CLKF_INTR() macro
and can detect uvm_fault() being called from an interrupt
(although there may still be a very short race detecting
the latter; need to investigate further).
Fix longstanding bug where we should have been checking
against Channel B's settings to see whether to apply tag
usage. Oops.
Some more 2300 support- macroize access to request queue in/out pointers.
Firmware crashes now handled in platform outer code via an isp_async call.
If we get a LIP, and we're on a private or public loop, kill off all
active commands as if they had been killed by a 'SCSI Bus Reset'. I've
seen data corruption on commands that complete 'normally' after a LIP.
Bad.