Browse Source

Plan 9 from Bell Labs 2005-11-10

David du Colombier 18 years ago
parent
commit
9c4a17693f

+ 17 - 17
dist/replica/_plan9.db

@@ -383,7 +383,7 @@
 386/bin/replica/setupdirs - 775 sys sys 1020319083 44
 386/bin/replica/updatedb - 775 sys sys 1130594777 95918
 386/bin/resample - 775 sys sys 1130594778 120772
-386/bin/rio - 775 sys sys 1131109833 309227
+386/bin/rio - 775 sys sys 1131595241 309753
 386/bin/rm - 775 sys sys 1130594779 61365
 386/bin/rx - 775 sys sys 1130594779 82087
 386/bin/sam - 775 sys sys 1130594780 158504
@@ -7776,7 +7776,7 @@ sys/src/9/alphapc/mem.h - 664 sys sys 1077408326 3131
 sys/src/9/alphapc/memmove.s - 664 sys sys 1015012786 2936
 sys/src/9/alphapc/memset.s - 664 sys sys 1015012786 844
 sys/src/9/alphapc/mkfile - 664 sys sys 1109218102 1682
-sys/src/9/alphapc/mmu.c - 664 sys sys 1131289708 4945
+sys/src/9/alphapc/mmu.c - 664 sys sys 1131538486 4981
 sys/src/9/alphapc/pci.c - 664 sys sys 1039753420 7868
 sys/src/9/alphapc/screen.h - 664 sys sys 1131289708 3818
 sys/src/9/alphapc/sd53c8xx.c - 664 sys sys 1131289709 50963
@@ -7811,7 +7811,7 @@ sys/src/9/bitsy/main.c - 664 sys sys 1131289775 8816
 sys/src/9/bitsy/map - 664 sys sys 1017695515 236
 sys/src/9/bitsy/mem.h - 664 sys sys 1055700932 8049
 sys/src/9/bitsy/mkfile - 664 sys sys 1131289775 2459
-sys/src/9/bitsy/mmu.c - 664 sys sys 1123438209 11261
+sys/src/9/bitsy/mmu.c - 664 sys sys 1131538486 11298
 sys/src/9/bitsy/mouse.c - 664 sys sys 1017695516 962
 sys/src/9/bitsy/paqfiles - 20000000775 sys sys 1020011250 0
 sys/src/9/bitsy/paqfiles/cpurc - 664 sys sys 1020011249 3524
@@ -7903,7 +7903,7 @@ sys/src/9/mtx/l.s - 664 sys sys 1067722599 10730
 sys/src/9/mtx/main.c - 664 sys sys 1131289814 8307
 sys/src/9/mtx/mem.h - 664 sys sys 1026848200 5959
 sys/src/9/mtx/mkfile - 664 sys sys 1072972534 1520
-sys/src/9/mtx/mmu.c - 664 sys sys 1123438210 4421
+sys/src/9/mtx/mmu.c - 664 sys sys 1131538486 4458
 sys/src/9/mtx/mtx - 664 sys sys 1056336297 416
 sys/src/9/mtx/mtxcpu - 664 sys sys 1039753442 421
 sys/src/9/mtx/pci.c - 664 sys sys 1087657434 16662
@@ -7919,7 +7919,7 @@ sys/src/9/pc/apmjump.s - 664 sys sys 1032058947 1527
 sys/src/9/pc/archmp.c - 664 sys sys 1131290214 2357
 sys/src/9/pc/audio.h - 664 sys sys 1015014513 343
 sys/src/9/pc/cga.c - 664 sys sys 1015014513 1843
-sys/src/9/pc/dat.h - 664 sys sys 1131290217 6462
+sys/src/9/pc/dat.h - 664 sys sys 1131537242 6554
 sys/src/9/pc/devarch.c - 664 sys sys 1131290259 18594
 sys/src/9/pc/devether.c - 664 sys sys 1131290265 10315
 sys/src/9/pc/devfloppy.c - 664 sys sys 1055689885 20024
@@ -7958,7 +7958,7 @@ sys/src/9/pc/ethermii.h - 664 sys sys 1086873891 3258
 sys/src/9/pc/etherrhine.c - 664 sys sys 1081706478 13799
 sys/src/9/pc/ethersink.c - 664 sys sys 1048644103 1076
 sys/src/9/pc/ethersmc.c - 664 sys sys 1071245461 15103
-sys/src/9/pc/ethervt6102.c - 664 sys sys 1131290379 22572
+sys/src/9/pc/ethervt6102.c - 664 sys sys 1131538568 22616
 sys/src/9/pc/etherwavelan.c - 664 sys sys 1131290380 3747
 sys/src/9/pc/floppy.h - 664 sys sys 1055700609 3835
 sys/src/9/pc/fns.h - 664 sys sys 1131290383 4461
@@ -7972,12 +7972,12 @@ sys/src/9/pc/kbd.c - 664 sys sys 1130848300 12362
 sys/src/9/pc/l.s - 664 sys sys 1131290403 28347
 sys/src/9/pc/main.c - 664 sys sys 1131290418 15224
 sys/src/9/pc/mem.h - 664 sys sys 1131290422 5209
-sys/src/9/pc/memory.c - 664 sys sys 1131461842 18127
+sys/src/9/pc/memory.c - 664 sys sys 1131573303 18191
 sys/src/9/pc/mkfile - 664 sys sys 1131294850 3580
 sys/src/9/pc/mmu.c - 664 sys sys 1131497813 22628
 sys/src/9/pc/mouse.c - 664 sys sys 1098479254 7057
-sys/src/9/pc/mp.c - 664 sys sys 1131326235 17157
-sys/src/9/pc/mp.h - 664 sys sys 1131290475 6638
+sys/src/9/pc/mp.c - 664 sys sys 1131538523 17317
+sys/src/9/pc/mp.h - 664 sys sys 1131538511 6652
 sys/src/9/pc/nv_dma.h - 664 sys sys 1081384508 12943
 sys/src/9/pc/pc - 664 sys sys 1131290481 1427
 sys/src/9/pc/pcauth - 664 sys sys 1131290482 714
@@ -8000,7 +8000,7 @@ sys/src/9/pc/realmode.c - 664 sys sys 1131294602 2658
 sys/src/9/pc/rebootcode.s - 664 sys sys 1015014522 988
 sys/src/9/pc/screen.c - 664 sys sys 1131290512 13460
 sys/src/9/pc/screen.h - 664 sys sys 1131290516 4156
-sys/src/9/pc/sd53c8xx.c - 664 sys sys 1131290539 55206
+sys/src/9/pc/sd53c8xx.c - 664 sys sys 1131538448 55207
 sys/src/9/pc/sd53c8xx.n - 664 sys sys 1131290556 12657
 sys/src/9/pc/sdata.c - 664 sys sys 1131290578 52168
 sys/src/9/pc/sdmv50xx.c - 664 sys sys 1131290638 25780
@@ -8052,7 +8052,7 @@ sys/src/9/port/dev.c - 664 sys sys 1131289870 8219
 sys/src/9/port/devaudio.c - 664 sys sys 1067722761 21130
 sys/src/9/port/devbridge.c - 664 sys sys 1055688301 24308
 sys/src/9/port/devcap.c - 664 sys sys 1048644215 4113
-sys/src/9/port/devcons.c - 664 sys sys 1130759309 22495
+sys/src/9/port/devcons.c - 664 sys sys 1131537286 23004
 sys/src/9/port/devdraw.c - 664 sys sys 1131289870 43537
 sys/src/9/port/devdup.c - 664 sys sys 1014931172 2332
 sys/src/9/port/devenv.c - 664 sys sys 1048644225 6992
@@ -8101,12 +8101,12 @@ sys/src/9/port/mksystab - 664 sys sys 1014931176 783
 sys/src/9/port/mul64fract.c - 664 sys sys 1071671674 867
 sys/src/9/port/netif.c - 664 sys sys 1066514951 13421
 sys/src/9/port/netif.h - 664 sys sys 1066514947 2975
-sys/src/9/port/page.c - 664 sys sys 1131289949 8449
+sys/src/9/port/page.c - 664 sys sys 1131537265 11124
 sys/src/9/port/parse.c - 664 sys sys 1014931177 2026
 sys/src/9/port/pgrp.c - 664 sys sys 1072704671 3940
 sys/src/9/port/portclock.c - 664 sys sys 1102093397 4556
-sys/src/9/port/portdat.h - 664 sys sys 1131289971 22628
-sys/src/9/port/portfns.h - 664 sys sys 1131289972 10925
+sys/src/9/port/portdat.h - 664 sys sys 1131537261 22702
+sys/src/9/port/portfns.h - 664 sys sys 1131537254 11022
 sys/src/9/port/portmkfile - 664 sys sys 1124708650 2052
 sys/src/9/port/print.c - 664 sys sys 1014931178 227
 sys/src/9/port/proc.c - 664 sys sys 1131289980 28264
@@ -8118,7 +8118,7 @@ sys/src/9/port/sd.h - 664 sys sys 1131289990 2494
 sys/src/9/port/segment.c - 664 sys sys 1131298540 13722
 sys/src/9/port/swap.c - 664 sys sys 1055688551 6980
 sys/src/9/port/sysfile.c - 664 sys sys 1126586199 22173
-sys/src/9/port/sysproc.c - 664 sys sys 1131298541 15159
+sys/src/9/port/sysproc.c - 664 sys sys 1131537275 15145
 sys/src/9/port/systab.h - 664 sys sys 1062721698 3044
 sys/src/9/port/taslock.c - 664 sys sys 1131290039 3928
 sys/src/9/port/thwack.c - 664 sys sys 1057323394 7253
@@ -8151,7 +8151,7 @@ sys/src/9/ppc/main.c - 664 sys sys 1131290117 9075
 sys/src/9/ppc/mcc.c - 664 sys sys 1059490752 9667
 sys/src/9/ppc/mem.h - 664 sys sys 1091021860 7002
 sys/src/9/ppc/mkfile - 664 sys sys 1067722849 1813
-sys/src/9/ppc/mmu.c - 664 sys sys 1123438210 4897
+sys/src/9/ppc/mmu.c - 664 sys sys 1131538486 4934
 sys/src/9/ppc/msaturn.c - 664 sys sys 1072705482 2801
 sys/src/9/ppc/msaturn.h - 664 sys sys 1059490753 99
 sys/src/9/ppc/mtx.c - 664 sys sys 1059490753 177
@@ -12741,7 +12741,7 @@ sys/src/cmd/rio/data.c - 664 sys sys 1014926356 6169
 sys/src/cmd/rio/fns.h - 664 sys sys 1039133251 1065
 sys/src/cmd/rio/fsys.c - 664 sys sys 1019678647 13259
 sys/src/cmd/rio/mkfile - 664 sys sys 1111249068 431
-sys/src/cmd/rio/rio.c - 664 sys sys 1131375663 22143
+sys/src/cmd/rio/rio.c - 664 sys sys 1131571117 22788
 sys/src/cmd/rio/scrl.c - 664 sys sys 1014926357 3245
 sys/src/cmd/rio/time.c - 664 sys sys 1014926357 1829
 sys/src/cmd/rio/util.c - 664 sys sys 1014926357 2061

+ 17 - 17
dist/replica/plan9.db

@@ -383,7 +383,7 @@
 386/bin/replica/setupdirs - 775 sys sys 1020319083 44
 386/bin/replica/updatedb - 775 sys sys 1130594777 95918
 386/bin/resample - 775 sys sys 1130594778 120772
-386/bin/rio - 775 sys sys 1131109833 309227
+386/bin/rio - 775 sys sys 1131595241 309753
 386/bin/rm - 775 sys sys 1130594779 61365
 386/bin/rx - 775 sys sys 1130594779 82087
 386/bin/sam - 775 sys sys 1130594780 158504
@@ -7776,7 +7776,7 @@ sys/src/9/alphapc/mem.h - 664 sys sys 1077408326 3131
 sys/src/9/alphapc/memmove.s - 664 sys sys 1015012786 2936
 sys/src/9/alphapc/memset.s - 664 sys sys 1015012786 844
 sys/src/9/alphapc/mkfile - 664 sys sys 1109218102 1682
-sys/src/9/alphapc/mmu.c - 664 sys sys 1131289708 4945
+sys/src/9/alphapc/mmu.c - 664 sys sys 1131538486 4981
 sys/src/9/alphapc/pci.c - 664 sys sys 1039753420 7868
 sys/src/9/alphapc/screen.h - 664 sys sys 1131289708 3818
 sys/src/9/alphapc/sd53c8xx.c - 664 sys sys 1131289709 50963
@@ -7811,7 +7811,7 @@ sys/src/9/bitsy/main.c - 664 sys sys 1131289775 8816
 sys/src/9/bitsy/map - 664 sys sys 1017695515 236
 sys/src/9/bitsy/mem.h - 664 sys sys 1055700932 8049
 sys/src/9/bitsy/mkfile - 664 sys sys 1131289775 2459
-sys/src/9/bitsy/mmu.c - 664 sys sys 1123438209 11261
+sys/src/9/bitsy/mmu.c - 664 sys sys 1131538486 11298
 sys/src/9/bitsy/mouse.c - 664 sys sys 1017695516 962
 sys/src/9/bitsy/paqfiles - 20000000775 sys sys 1020011250 0
 sys/src/9/bitsy/paqfiles/cpurc - 664 sys sys 1020011249 3524
@@ -7903,7 +7903,7 @@ sys/src/9/mtx/l.s - 664 sys sys 1067722599 10730
 sys/src/9/mtx/main.c - 664 sys sys 1131289814 8307
 sys/src/9/mtx/mem.h - 664 sys sys 1026848200 5959
 sys/src/9/mtx/mkfile - 664 sys sys 1072972534 1520
-sys/src/9/mtx/mmu.c - 664 sys sys 1123438210 4421
+sys/src/9/mtx/mmu.c - 664 sys sys 1131538486 4458
 sys/src/9/mtx/mtx - 664 sys sys 1056336297 416
 sys/src/9/mtx/mtxcpu - 664 sys sys 1039753442 421
 sys/src/9/mtx/pci.c - 664 sys sys 1087657434 16662
@@ -7919,7 +7919,7 @@ sys/src/9/pc/apmjump.s - 664 sys sys 1032058947 1527
 sys/src/9/pc/archmp.c - 664 sys sys 1131290214 2357
 sys/src/9/pc/audio.h - 664 sys sys 1015014513 343
 sys/src/9/pc/cga.c - 664 sys sys 1015014513 1843
-sys/src/9/pc/dat.h - 664 sys sys 1131290217 6462
+sys/src/9/pc/dat.h - 664 sys sys 1131537242 6554
 sys/src/9/pc/devarch.c - 664 sys sys 1131290259 18594
 sys/src/9/pc/devether.c - 664 sys sys 1131290265 10315
 sys/src/9/pc/devfloppy.c - 664 sys sys 1055689885 20024
@@ -7958,7 +7958,7 @@ sys/src/9/pc/ethermii.h - 664 sys sys 1086873891 3258
 sys/src/9/pc/etherrhine.c - 664 sys sys 1081706478 13799
 sys/src/9/pc/ethersink.c - 664 sys sys 1048644103 1076
 sys/src/9/pc/ethersmc.c - 664 sys sys 1071245461 15103
-sys/src/9/pc/ethervt6102.c - 664 sys sys 1131290379 22572
+sys/src/9/pc/ethervt6102.c - 664 sys sys 1131538568 22616
 sys/src/9/pc/etherwavelan.c - 664 sys sys 1131290380 3747
 sys/src/9/pc/floppy.h - 664 sys sys 1055700609 3835
 sys/src/9/pc/fns.h - 664 sys sys 1131290383 4461
@@ -7972,12 +7972,12 @@ sys/src/9/pc/kbd.c - 664 sys sys 1130848300 12362
 sys/src/9/pc/l.s - 664 sys sys 1131290403 28347
 sys/src/9/pc/main.c - 664 sys sys 1131290418 15224
 sys/src/9/pc/mem.h - 664 sys sys 1131290422 5209
-sys/src/9/pc/memory.c - 664 sys sys 1131461842 18127
+sys/src/9/pc/memory.c - 664 sys sys 1131573303 18191
 sys/src/9/pc/mkfile - 664 sys sys 1131294850 3580
 sys/src/9/pc/mmu.c - 664 sys sys 1131497813 22628
 sys/src/9/pc/mouse.c - 664 sys sys 1098479254 7057
-sys/src/9/pc/mp.c - 664 sys sys 1131326235 17157
-sys/src/9/pc/mp.h - 664 sys sys 1131290475 6638
+sys/src/9/pc/mp.c - 664 sys sys 1131538523 17317
+sys/src/9/pc/mp.h - 664 sys sys 1131538511 6652
 sys/src/9/pc/nv_dma.h - 664 sys sys 1081384508 12943
 sys/src/9/pc/pc - 664 sys sys 1131290481 1427
 sys/src/9/pc/pcauth - 664 sys sys 1131290482 714
@@ -8000,7 +8000,7 @@ sys/src/9/pc/realmode.c - 664 sys sys 1131294602 2658
 sys/src/9/pc/rebootcode.s - 664 sys sys 1015014522 988
 sys/src/9/pc/screen.c - 664 sys sys 1131290512 13460
 sys/src/9/pc/screen.h - 664 sys sys 1131290516 4156
-sys/src/9/pc/sd53c8xx.c - 664 sys sys 1131290539 55206
+sys/src/9/pc/sd53c8xx.c - 664 sys sys 1131538448 55207
 sys/src/9/pc/sd53c8xx.n - 664 sys sys 1131290556 12657
 sys/src/9/pc/sdata.c - 664 sys sys 1131290578 52168
 sys/src/9/pc/sdmv50xx.c - 664 sys sys 1131290638 25780
@@ -8052,7 +8052,7 @@ sys/src/9/port/dev.c - 664 sys sys 1131289870 8219
 sys/src/9/port/devaudio.c - 664 sys sys 1067722761 21130
 sys/src/9/port/devbridge.c - 664 sys sys 1055688301 24308
 sys/src/9/port/devcap.c - 664 sys sys 1048644215 4113
-sys/src/9/port/devcons.c - 664 sys sys 1130759309 22495
+sys/src/9/port/devcons.c - 664 sys sys 1131537286 23004
 sys/src/9/port/devdraw.c - 664 sys sys 1131289870 43537
 sys/src/9/port/devdup.c - 664 sys sys 1014931172 2332
 sys/src/9/port/devenv.c - 664 sys sys 1048644225 6992
@@ -8101,12 +8101,12 @@ sys/src/9/port/mksystab - 664 sys sys 1014931176 783
 sys/src/9/port/mul64fract.c - 664 sys sys 1071671674 867
 sys/src/9/port/netif.c - 664 sys sys 1066514951 13421
 sys/src/9/port/netif.h - 664 sys sys 1066514947 2975
-sys/src/9/port/page.c - 664 sys sys 1131289949 8449
+sys/src/9/port/page.c - 664 sys sys 1131537265 11124
 sys/src/9/port/parse.c - 664 sys sys 1014931177 2026
 sys/src/9/port/pgrp.c - 664 sys sys 1072704671 3940
 sys/src/9/port/portclock.c - 664 sys sys 1102093397 4556
-sys/src/9/port/portdat.h - 664 sys sys 1131289971 22628
-sys/src/9/port/portfns.h - 664 sys sys 1131289972 10925
+sys/src/9/port/portdat.h - 664 sys sys 1131537261 22702
+sys/src/9/port/portfns.h - 664 sys sys 1131537254 11022
 sys/src/9/port/portmkfile - 664 sys sys 1124708650 2052
 sys/src/9/port/print.c - 664 sys sys 1014931178 227
 sys/src/9/port/proc.c - 664 sys sys 1131289980 28264
@@ -8118,7 +8118,7 @@ sys/src/9/port/sd.h - 664 sys sys 1131289990 2494
 sys/src/9/port/segment.c - 664 sys sys 1131298540 13722
 sys/src/9/port/swap.c - 664 sys sys 1055688551 6980
 sys/src/9/port/sysfile.c - 664 sys sys 1126586199 22173
-sys/src/9/port/sysproc.c - 664 sys sys 1131298541 15159
+sys/src/9/port/sysproc.c - 664 sys sys 1131537275 15145
 sys/src/9/port/systab.h - 664 sys sys 1062721698 3044
 sys/src/9/port/taslock.c - 664 sys sys 1131290039 3928
 sys/src/9/port/thwack.c - 664 sys sys 1057323394 7253
@@ -8151,7 +8151,7 @@ sys/src/9/ppc/main.c - 664 sys sys 1131290117 9075
 sys/src/9/ppc/mcc.c - 664 sys sys 1059490752 9667
 sys/src/9/ppc/mem.h - 664 sys sys 1091021860 7002
 sys/src/9/ppc/mkfile - 664 sys sys 1067722849 1813
-sys/src/9/ppc/mmu.c - 664 sys sys 1123438210 4897
+sys/src/9/ppc/mmu.c - 664 sys sys 1131538486 4934
 sys/src/9/ppc/msaturn.c - 664 sys sys 1072705482 2801
 sys/src/9/ppc/msaturn.h - 664 sys sys 1059490753 99
 sys/src/9/ppc/mtx.c - 664 sys sys 1059490753 177
@@ -12741,7 +12741,7 @@ sys/src/cmd/rio/data.c - 664 sys sys 1014926356 6169
 sys/src/cmd/rio/fns.h - 664 sys sys 1039133251 1065
 sys/src/cmd/rio/fsys.c - 664 sys sys 1019678647 13259
 sys/src/cmd/rio/mkfile - 664 sys sys 1111249068 431
-sys/src/cmd/rio/rio.c - 664 sys sys 1131375663 22143
+sys/src/cmd/rio/rio.c - 664 sys sys 1131571117 22788
 sys/src/cmd/rio/scrl.c - 664 sys sys 1014926357 3245
 sys/src/cmd/rio/time.c - 664 sys sys 1014926357 1829
 sys/src/cmd/rio/util.c - 664 sys sys 1014926357 2061

+ 17 - 0
dist/replica/plan9.log

@@ -22852,3 +22852,20 @@
 1131424234 0 c 386/bin/aux/vga - 775 sys sys 1131422827 333645
 1131462044 0 c sys/src/9/pc/memory.c - 664 sys sys 1131461842 18127
 1131498052 0 c sys/src/9/pc/mmu.c - 664 sys sys 1131497813 22628
+1131537661 0 c sys/src/9/pc/dat.h - 664 sys sys 1131537242 6554
+1131537661 1 c sys/src/9/port/devcons.c - 664 sys sys 1131537286 23004
+1131537661 2 c sys/src/9/port/page.c - 664 sys sys 1131537265 11124
+1131537661 3 c sys/src/9/port/portdat.h - 664 sys sys 1131537261 22702
+1131537661 4 c sys/src/9/port/portfns.h - 664 sys sys 1131537254 11022
+1131537661 5 c sys/src/9/port/sysproc.c - 664 sys sys 1131537275 15145
+1131539460 0 c sys/src/9/alphapc/mmu.c - 664 sys sys 1131538486 4981
+1131539460 1 c sys/src/9/bitsy/mmu.c - 664 sys sys 1131538486 11298
+1131539460 2 c sys/src/9/mtx/mmu.c - 664 sys sys 1131538486 4458
+1131539460 3 c sys/src/9/pc/mp.c - 664 sys sys 1131538523 17317
+1131539460 4 c sys/src/9/pc/mp.h - 664 sys sys 1131538511 6652
+1131539460 5 c sys/src/9/pc/sd53c8xx.c - 664 sys sys 1131538448 55207
+1131539460 6 c sys/src/9/pc/ethervt6102.c - 664 sys sys 1131538568 22616
+1131539460 7 c sys/src/9/ppc/mmu.c - 664 sys sys 1131538486 4934
+1131571869 0 c sys/src/cmd/rio/rio.c - 664 sys sys 1131571117 22788
+1131573669 0 c sys/src/9/pc/memory.c - 664 sys sys 1131573303 18191
+1131595273 0 c 386/bin/rio - 775 sys sys 1131595241 309753

+ 4 - 0
sys/src/9/alphapc/mmu.c

@@ -278,3 +278,7 @@ checkmmu(ulong, ulong)
 {
 }
 
+void
+countpagerefs(ulong*, int)
+{
+}

+ 9 - 1
sys/src/9/bitsy/mmu.c

@@ -505,4 +505,12 @@ peekmmu(ulong va)
 	}
 }
 
-void checkmmu(ulong, ulong) { }
+void
+checkmmu(ulong, ulong)
+{
+}
+
+void
+countpagerefs(ulong*, int)
+{
+}

+ 9 - 1
sys/src/9/mtx/mmu.c

@@ -231,4 +231,12 @@ putmmu(ulong va, ulong pa, Page *pg)
 	}
 }
 
-void checkmmu(ulong, ulong) { }
+void
+checkmmu(ulong, ulong)
+{
+}
+
+void
+countpagerefs(ulong*, int)
+{
+}

+ 2 - 0
sys/src/9/pc/dat.h

@@ -111,7 +111,9 @@ struct PMMU
 	Page*	mmupdb;			/* page directory base */
 	Page*	mmufree;		/* unused page table pages */
 	Page*	mmuused;		/* used page table pages */
+	Page*	kmaptable;		/* page table used by kmap */
 	uint	lastkmap;		/* last entry used by kmap */
+	int	nkmap;		/* number of current kmaps */
 };
 
 /*

+ 1 - 0
sys/src/9/pc/ethervt6102.c

@@ -948,6 +948,7 @@ vt6102pci(void)
 		default:
 			continue;
 		case (0x3065<<16)|0x1106:	/* Rhine II */
+		case (0x3106<<16)|0x1106:	/* Rhine III */
 			break;
 		}
 

+ 4 - 2
sys/src/9/pc/memory.c

@@ -633,7 +633,8 @@ e820scan(void)
 {
 	int i;
 	Ureg u;
-	ulong cont, base, last, len;
+	ulong cont, base, len;
+	uvlong last;
 	Emap *e;
 
 	if(getconf("*norealmode") || getconf("*noe820scan"))
@@ -696,7 +697,8 @@ e820scan(void)
 		else
 			map(base, len, MemReserved);
 	}
-	
+	if(last < (1LL<<32))
+		map(last, (u32int)-last, MemUPA);
 	return 0;
 }
 

+ 5 - 1
sys/src/9/pc/mp.c

@@ -145,13 +145,14 @@ mkioapic(PCMPioapic* p)
 	/*
 	 * Map the I/O APIC.
 	 */
-	if((va = vmap(p->addr, 1024)) == 0)
+	if((va = vmap(p->addr, 1024)) == nil)
 		return 0;
 
 	apic = &mpapic[p->apicno];
 	apic->type = PcmpIOAPIC;
 	apic->apicno = p->apicno;
 	apic->addr = va;
+	apic->paddr = p->addr;
 	apic->flags = p->flags;
 
 	return apic;
@@ -483,6 +484,7 @@ mpinit(void)
 	 */
 	if((va = vmap(pcmp->lapicbase, 1024)) == nil)
 		return;
+	print("LAPIC: %.8lux %.8lux\n", pcmp->lapicbase, (ulong)va);
 
 	bpapic = nil;
 
@@ -514,6 +516,7 @@ mpinit(void)
 			 * first in the table before the others.
 			 */
 			apic->addr = va;
+			apic->paddr = pcmp->lapicbase;
 			if(apic->flags & PcmpBP)
 				bpapic = apic;
 		}
@@ -667,6 +670,7 @@ mpintrenablex(Vctl* v, int tbdf)
 			vno = lo & 0xFF;
 			n = mpintrinit(bus, aintr->intr, vno, v->irq);
 			n |= ApicLOGICAL;
+			lo &= ~(ApicRemoteIRR|ApicDELIVS);
 			if(n != lo || !(n & ApicLEVEL)){
 				print("mpintrenable: multiple botch irq%d, tbdf %uX, lo %8.8uX, n %8.8uX\n",
 					v->irq, tbdf, lo, n);

+ 1 - 0
sys/src/9/pc/mp.h

@@ -157,6 +157,7 @@ typedef struct Apic {
 	int	type;
 	int	apicno;
 	ulong*	addr;			/* register base address */
+	ulong	paddr;
 	int	flags;			/* PcmpBP|PcmpEN */
 
 	Lock;				/* I/O APIC: register access */

+ 1 - 1
sys/src/9/pc/sd53c8xx.c

@@ -2182,7 +2182,7 @@ buggery:
 		/*
 		 * Because we don't yet have an abstraction for the
 		 * addresses as seen from the controller side (and on
-		 * the 386 it doesn't matter), the follwong two lines
+		 * the 386 it doesn't matter), the following two lines
 		 * are different between the 386 and alpha copies of
 		 * this driver.
 		 */

+ 26 - 1
sys/src/9/port/devcons.c

@@ -227,10 +227,32 @@ print(char *fmt, ...)
 	return n;
 }
 
+/*
+ * Want to interlock iprints to avoid interlaced output on 
+ * multiprocessor, but don't want to deadlock if one processor
+ * dies during print and another has something important to say.
+ * Make a good faith effort.
+ */
+static Lock iprintlock;
+static int
+iprintcanlock(Lock *l)
+{
+	int i;
+	
+	for(i=0; i<1000; i++){
+		if(canlock(l))
+			return 1;
+		if(l->m == MACHP(m->machno))
+			return 0;
+		microdelay(100);
+	}
+	return 0;
+}
+
 int
 iprint(char *fmt, ...)
 {
-	int n, s;
+	int n, s, locked;
 	va_list arg;
 	char buf[PRINTSIZE];
 
@@ -238,9 +260,12 @@ iprint(char *fmt, ...)
 	va_start(arg, fmt);
 	n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf;
 	va_end(arg);
+	locked = iprintcanlock(&iprintlock);
 	if(screenputs != nil && iprintscreenputs)
 		screenputs(buf, n);
 	uartputs(buf, n);
+	if(locked)
+		unlock(&iprintlock);
 	splx(s);
 
 	return n;

+ 128 - 4
sys/src/9/port/page.c

@@ -22,11 +22,12 @@ pageinit(void)
 		pm = &palloc.mem[i];
 		np += pm->npage;
 	}
-	palloc.head = xalloc(np*sizeof(Page));
-	if(palloc.head == 0)
+	palloc.pages = xalloc(np*sizeof(Page));
+	if(palloc.pages == 0)
 		panic("pageinit");
 
 	color = 0;
+	palloc.head = palloc.pages;
 	p = palloc.head;
 	for(i=0; i<nelem(palloc.mem); i++){
 		pm = &palloc.mem[i];
@@ -44,7 +45,7 @@ pageinit(void)
 	palloc.head->prev = 0;
 	palloc.tail->next = 0;
 
-	palloc.user = p - palloc.head;
+	palloc.user = p - palloc.pages;
 	pkb = palloc.user*BY2PG/1024;
 	vkb = pkb + (conf.nswap*BY2PG)/1024;
 
@@ -323,7 +324,17 @@ retry:
 
 	pageunchain(np);
 	pagechaintail(np);
-
+/*
+* XXX - here's a bug? - np is on the freelist but it's not really free.
+* when we unlock palloc someone else can come in, decide to
+* use np, and then try to lock it.  they succeed after we've 
+* run copypage and cachepage and unlock(np).  then what?
+* they call pageunchain before locking(np), so it's removed
+* from the freelist, but still in the cache because of
+* cachepage below.  if someone else looks in the cache
+* before they remove it, the page will have a nonzero ref
+* once they finally lock(np).
+*/
 	lock(np);
 	unlock(&palloc);
 
@@ -526,3 +537,116 @@ freepte(Segment *s, Pte *p)
 	}
 	free(p);
 }
+
+ulong
+pagenumber(Page *p)
+{
+	return p-palloc.pages;
+}
+
+void
+checkpagerefs(void)
+{
+	int s;
+	ulong i, np, nwrong;
+	ulong *ref;
+	
+	np = palloc.user;
+	ref = malloc(np*sizeof ref[0]);
+	if(ref == nil){
+		print("checkpagerefs: out of memory\n");
+		return;
+	}
+	
+	/*
+	 * This may not be exact if there are other processes
+	 * holding refs to pages on their stacks.  The hope is
+	 * that if you run it on a quiescent system it will still
+	 * be useful.
+	 */
+	s = splhi();
+	lock(&palloc);
+	countpagerefs(ref, 0);
+	portcountpagerefs(ref, 0);
+	nwrong = 0;
+	for(i=0; i<np; i++){
+		if(palloc.pages[i].ref != ref[i]){
+			iprint("page %#.8lux ref %d actual %lud\n", 
+				palloc.pages[i].pa, palloc.pages[i].ref, ref[i]);
+			ref[i] = 1;
+			nwrong++;
+		}else
+			ref[i] = 0;
+	}
+	countpagerefs(ref, 1);
+	portcountpagerefs(ref, 1);
+	iprint("%lud mistakes found\n", nwrong);
+	unlock(&palloc);
+	splx(s);
+}
+
+void
+portcountpagerefs(ulong *ref, int print)
+{
+	ulong i, j, k, ns, n;
+	Page **pg, *entry;
+	Proc *p;
+	Pte *pte;
+	Segment *s;
+
+	/*
+	 * Pages in segments.  s->mark avoids double-counting.
+	 */
+	n = 0;
+	ns = 0;
+	for(i=0; i<conf.nproc; i++){
+		p = proctab(i);
+		for(j=0; j<NSEG; j++){
+			s = p->seg[j];
+			if(s)
+				s->mark = 0;
+		}
+	}
+	for(i=0; i<conf.nproc; i++){
+		p = proctab(i);
+		for(j=0; j<NSEG; j++){
+			s = p->seg[j];
+			if(s == nil || s->mark++)
+				continue;
+			ns++;
+			for(k=0; k<s->mapsize; k++){
+				pte = s->map[k];
+				if(pte == nil)
+					continue;
+				for(pg = pte->first; pg <= pte->last; pg++){
+					entry = *pg;
+					if(pagedout(entry))
+						continue;
+					if(print){
+						if(ref[pagenumber(entry)])
+							iprint("page %#.8lux in segment %#p\n", entry->pa, s);
+						continue;
+					}
+					if(ref[pagenumber(entry)]++ == 0)
+						n++;
+				}
+			}
+		}
+	}
+	if(!print){
+		iprint("%lud pages in %lud segments\n", n, ns);
+		for(i=0; i<conf.nproc; i++){
+			p = proctab(i);
+			for(j=0; j<NSEG; j++){
+				s = p->seg[j];
+				if(s == nil)
+					continue;
+				if(s->ref != s->mark){
+					iprint("segment %#.8lux (used by proc %lud pid %lud) has bad ref count %lud actual %lud\n",
+						s, i, p->pid, s->ref, s->mark);
+				}
+			}
+		}
+	}
+}
+

+ 2 - 0
sys/src/9/port/portdat.h

@@ -416,6 +416,7 @@ struct Segment
 	Pte	**map;
 	int	mapsize;
 	Pte	*ssegmap[SSEGMAPSIZE];
+	ulong	mark;	/* portcountrefs */
 };
 
 enum
@@ -494,6 +495,7 @@ struct Palloc
 	Page	*head;			/* most recently used */
 	Page	*tail;			/* least recently used */
 	ulong	freecount;		/* how many pages on free list now */
+	Page	*pages;			/* array of all pages */
 	ulong	user;			/* how many user pages */
 	Page	*hash[PGHSIZE];
 	Lock	hashlock;

+ 3 - 0
sys/src/9/port/portfns.h

@@ -45,6 +45,7 @@ void		copen(Chan*);
 Block*		concatblock(Block*);
 Block*		copyblock(Block*, int);
 void		copypage(Page*, Page*);
+void		countpagerefs(ulong*, int);
 int		cread(Chan*, uchar*, int, vlong);
 void		cunmount(Chan*, Chan*);
 void		cupdate(Chan*, uchar*, int, vlong);
@@ -204,6 +205,7 @@ Block*		packblock(Block*);
 Block*		padblock(Block*, int);
 void		pagechainhead(Page*);
 void		pageinit(void);
+ulong	pagenumber(Page*);
 void		pagersummary(void);
 void		panic(char*, ...);
 Cmdbuf*		parsecmd(char *a, int n);
@@ -214,6 +216,7 @@ void		pgrpcpy(Pgrp*, Pgrp*);
 void		pgrpnote(ulong, char*, long, int);
 void		pio(Segment *, ulong, ulong, Page **);
 #define		poperror()		up->nerrlab--
+void		portcountpagerefs(ulong*, int);
 int		postnote(Proc*, int, char*, int);
 int		pprint(char*, ...);
 int		preempted(void);

+ 2 - 4
sys/src/9/port/sysproc.c

@@ -12,14 +12,12 @@
 int	shargs(char*, int, char**);
 
 extern void checkpages(void);
+extern void checkpagerefs(void);
 
 long
 sysr1(ulong*)
 {
-	extern int chandebug;
-	
-	chandebug = !chandebug;
-	checkpages();
+	checkpagerefs();
 	return 0;
 }
 

+ 9 - 1
sys/src/9/ppc/mmu.c

@@ -258,4 +258,12 @@ putmmu(ulong va, ulong pa, Page *pg)
 
 }
 
-void checkmmu(ulong, ulong) { }
+void
+checkmmu(ulong, ulong)
+{
+}
+
+void
+countpagerefs(ulong*, int)
+{
+}

+ 36 - 1
sys/src/cmd/rio/rio.c

@@ -887,6 +887,38 @@ drag(Window *w, Rectangle *rp)
 	return ni;
 }
 
+Point
+cornerpt(Rectangle r, Point p, int which)
+{
+	switch(which){
+	case 0:	/* top left */
+		p = Pt(r.min.x, r.min.y);
+		break;
+	case 2:	/* top right */
+		p = Pt(r.max.x,r.min.y);
+		break;
+	case 6:	/* bottom left */
+		p = Pt(r.min.x, r.max.y);
+		break;
+	case 8:	/* bottom right */
+		p = Pt(r.max.x, r.max.y);
+		break;
+	case 1:	/* top edge */
+		p = Pt(p.x,r.min.y);
+		break;
+	case 5:	/* right edge */
+		p = Pt(r.max.x, p.y);
+		break;
+	case 7:	/* bottom edge */
+		p = Pt(p.x, r.max.y);
+		break;
+	case 3:		/* left edge */
+		p = Pt(r.min.x, p.y);
+		break;
+	}
+	return p;
+}
+
 Rectangle
 whichrect(Rectangle r, Point p, int which)
 {
@@ -928,8 +960,11 @@ bandsize(Window *w)
 	int which, but;
 
 	p = mouse->xy;
-	startp = p;
+	
 	which = whichcorner(w, p);
+	startp = cornerpt(w->screenr, p, which);
+	wmovemouse(w, startp);
+	readmouse(mousectl);
 	r = whichrect(w->screenr, p, which);
 	drawborder(r, 1);
 	or = r;