NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-vax/41139: pipe(2) seems broken on VAX



Izumi Tsutsui wrote:
> mhitch%lightning.msu.montana.edu@localhost wrote:
> 
>>  On Wed, 8 Apr 2009, Anders Magnusson wrote:
>>  
>>  > It may be worth trying, but it also may require significantly more code.
>>  > The movc3 instruction handles overlapping copies, but if the data block is
>>  > larger than 64k then it must be done manually.  This is only a problem 
>> for kcopy,
>>  > copy{in,out} should not overlap :-)
>>  
>>     It's not all that much code, at least for copy{in,out}:
>>  
>>  ENTRY(copyout, 0)
>>           movl    8(%ap),%r3
>>           blss    3f              # kernel space
>>           movl    4(%ap),%r1
>>           brb     2f
>>  
>>  ENTRY(copyin, 0)
>>           movl    4(%ap),%r1
>>           blss    3f              # kernel space
>>           movl    8(%ap),%r3
>>  2:      mfpr    $PR_ESP,%r2
>>           movab   1f,(%r2)
>>  4:      tstw    14(%ap)         # check if >= 64K
>>           bneq    5f
>>           movc3   12(%ap),(%r1),(%r3)
>>  1:      mfpr    $PR_ESP,%r2
>>           clrl    (%r2)
>>           ret
>>  5:      movc3   $0xfffc,(%r1),(%r3)
>>           subl2   $0xfffc,12(%ap)
>>           brb     4b
>>  
>>  3:      mnegl   $1,%r0
>>           ret
> 
> This fixes the pipe problem on 5.0.
> Should we commit it and pull up to 5.0?
>
Please do.

For an overlaying kcopy, it might be an idea to look at the memcpy code in 
libkern.

-- Ragge


Home | Main Index | Thread Index | Old Index