Re: pmap attempts at copying to executable pages both on mips and powerpc/booke
Rin Okuyama <[email protected]> Tue, 20 Sep 2016 20:34:38 +0900
| Newsgroups | gmane.os.netbsd.devel.kernel,gmane.os.netbsd.ports.mips.devel,gmane.os.netbsd.ports.powerpc |
|---|---|
| Message-ID | <[email protected]> |
Sorry for my long silence.
On 2016/09/17 6:02, Nick Hudson wrote:
> On 09/16/16 14:19, Rin Okuyama wrote:
>> I reported a reproducible failure of KASSERT on powerpc/booke in which
>> destination of pmap_copy_page(9) is executable:
>>
>> https://mail-index.netbsd.org/port-powerpc/2016/09/11/msg003498.html
>>
>> By adding the similar KASSERTs to mips kernel, I observed the same
>> failure on ERLITE (evbmips64-eb):
>>
>> # uname -mpr
>> 7.99.38 evbmips mips64eb
>> # cd /usr/pkgsrc/lang/perl5; make
>> (snip)
>> => Checking for portability problems in extracted files
>> (snip)
>> Use which C compiler? [gcc]
>> execve_loadvm: check exec failed 8
>> execve_loadvm: check exec failed 8
>> execve_loadvm: check exec failed 8
>> execve_loadvm: check exec failed 8
>> Checking for GNU cc in disguise and/or its version number...
>> panic: kernel diagnostic assertion "!VM_PAGEMD_EXECPAGE_P(VM_PAGE_TO_MD(dst_pg))" failed: file "/var/build/src/sys/arch/mips/mips/pmap_machdep.c", line 628
>> kernel: breakpoint trap
>> Stopped in pid 2328.1 (sed) at netbsd:cpu_Debugger+0x4: jr ra
>> bdslot: nop
>>
> Matt fixed it with src/sys/uvm/pmap/pmap.c:1.22
Thanks to Matt's fix, I succeeded to build perl5 without kernel panic both
on mips and powerpc/booke.
However, unfortunately, something is still wrong. top(1) reports resources
of some processes are negative:
% top
...
PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
...
573 root 85 0 4304K -3832K nanoslp 0:01 0.00% 0.00% cron
...
The simplest example to reproduce this error may be the following script:
#!/bin/sh
for i in `seq 1 100`; do
echo $i | echo > /dev/null
done
echo 'hit enter to exit'
read i
top reports resource of sh executing this script is negative, both on
mips and powerpc/booke. On the other hand, the following scripts do *not*
cause the problem:
#!/bin/sh
for i in `seq 1 100`; do
echo $i > /dev/null
done
echo 'hit enter to exit'
read i
#!/bin/sh
yes | echo > /dev/null
I therefore guess that this problem occurs when pipes are created many
times, regardless of amount of data flow.
At the moment, I don't know whether this problem is related to pmap or
not. But, at least, it occurs on mips and powerpc/booke, whereas it does
not on amd64, arm/allwinner, and powerpc/ibm4xx.
Thanks,
Rin