summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorragge <ragge@NetBSD.org>1994-10-08 15:46:15 +0000
committerragge <ragge@NetBSD.org>1994-10-08 15:46:15 +0000
commit5a58654e8aef1aa6702fcf5ff2b783c79dfa511e (patch)
treea7cda00a995d1aca5f5d6297a13cbd5bd9487e60
parente2ce91ebf4b7522d794083cba495006081e3eebb (diff)
Fixed bugs according to old memory system.
-rw-r--r--sys/arch/vax/uba/uba.c41
-rw-r--r--sys/arch/vax/uba/uda.c10
-rw-r--r--sys/dev/dec/qbus/uba.c41
3 files changed, 53 insertions, 39 deletions
diff --git a/sys/arch/vax/uba/uba.c b/sys/arch/vax/uba/uba.c
index 5fe28c2ecb6..620284e3efe 100644
--- a/sys/arch/vax/uba/uba.c
+++ b/sys/arch/vax/uba/uba.c
@@ -33,7 +33,7 @@
*
* from: @(#)uba.c 7.10 (Berkeley) 12/16/90
* also from: @(#)autoconf.c 7.20 (Berkeley) 5/9/91
- * $Id: uba.c,v 1.1 1994/08/02 20:21:22 ragge Exp $
+ * $Id: uba.c,v 1.2 1994/10/08 15:46:15 ragge Exp $
*/
/* All bugs are subject to removal without further notice */
@@ -603,25 +603,32 @@ ubasetup(int uban,struct buf *bp,int flags) {
temp |= UBAMR_BO;
if ((bp->b_flags & B_PHYS) == 0)
pte = kvtopte(bp->b_un.b_addr);
-/* else if (bp->b_flags & B_PAGET)
- pte = &Usrptmap[btokmx((struct pte *)bp->b_un.b_addr)]; */
- else {
- printf("bp->b_flags: %x\n",bp->b_flags);
- printf("bp->b_un.b_addr: %x\n",bp->b_un.b_addr);
- printf("bp->b_proc: %x\n",bp->b_proc);
- printf("stopp.\n");
+ else if (bp->b_flags & B_PAGET) {
+ printf("B_PAGET\n");
asm("halt");
- rp = bp->b_flags&B_DIRTY ? &pageproc[2] : bp->b_proc;
- v = vax_btop(bp->b_un.b_addr);
-/* if (bp->b_flags & B_UAREA)
- pte = &rp->p_addr[v];
- else
- pte = vtopte(rp, v);
-*/
+/* pte = &Usrptmap[btokmx((struct pte *)bp->b_un.b_addr)]; */
+ } else {
+ if( bp->b_flags&B_DIRTY){
+ rp=&pageproc[2];
+ printf("B_DIRTY\n");
+ asm("halt");
+ } else {
+ rp =bp->b_proc;
+ }
+ v = vax_btop(PxTOP0((u_int)bp->b_un.b_addr));
+ if (bp->b_flags & B_UAREA){
+ printf("B_UAREA\n");
+ asm("halt");
+/* pte = &rp->p_addr[v]; */
+ } else {
+/*
+ * It may be better to use pmap_extract() here somewhere,
+ * but so far we do it "the hard way" :)
+ */
+ pte=&rp->p_vmspace->vm_pmap.pm_ptab[v];
+ }
}
io = &uh->uh_mr[reg];
-/* printf("pte: %x\n",pte);
- printf("npf: %x, reg: %x, io: %x\n",npf,reg,io); */
while (--npf > 0) {
pfnum = pte->pg_pfn;
if (pfnum == 0)
diff --git a/sys/arch/vax/uba/uda.c b/sys/arch/vax/uba/uda.c
index aed1de92132..fa23b93d8cd 100644
--- a/sys/arch/vax/uba/uda.c
+++ b/sys/arch/vax/uba/uda.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)uda.c 7.32 (Berkeley) 2/13/91
- * $Id: uda.c,v 1.1 1994/08/02 20:21:30 ragge Exp $
+ * $Id: uda.c,v 1.2 1994/10/08 15:46:17 ragge Exp $
*/
/*
@@ -1029,14 +1029,14 @@ udastrat1(bp)
*/
um = (ui = udadinfo[unit])->ui_mi;
dp = &udautab[unit];
- APPEND(bp, dp, b_actf);
+ MSCP_APPEND(bp, dp, b_actf);
if (dp->b_active == 0 && (ui->ui_flags & UNIT_REQUEUE) == 0) {
- APPEND(dp, &um->um_tab, b_hash.le_next);
+ MSCP_APPEND(dp, &um->um_tab, b_hash.le_next);
dp->b_active++;
}
-/* Was: APPEND(bp, dp, av_forw);
+/* Was: MSCP_APPEND(bp, dp, av_forw);
if (dp->b_active == 0 && (ui->ui_flags & UNIT_REQUEUE) == 0) {
- APPEND(dp, &um->um_tab, b_forw);
+ MSCP_APPEND(dp, &um->um_tab, b_forw);
dp->b_active++;
}
*/
diff --git a/sys/dev/dec/qbus/uba.c b/sys/dev/dec/qbus/uba.c
index 5fe28c2ecb6..620284e3efe 100644
--- a/sys/dev/dec/qbus/uba.c
+++ b/sys/dev/dec/qbus/uba.c
@@ -33,7 +33,7 @@
*
* from: @(#)uba.c 7.10 (Berkeley) 12/16/90
* also from: @(#)autoconf.c 7.20 (Berkeley) 5/9/91
- * $Id: uba.c,v 1.1 1994/08/02 20:21:22 ragge Exp $
+ * $Id: uba.c,v 1.2 1994/10/08 15:46:15 ragge Exp $
*/
/* All bugs are subject to removal without further notice */
@@ -603,25 +603,32 @@ ubasetup(int uban,struct buf *bp,int flags) {
temp |= UBAMR_BO;
if ((bp->b_flags & B_PHYS) == 0)
pte = kvtopte(bp->b_un.b_addr);
-/* else if (bp->b_flags & B_PAGET)
- pte = &Usrptmap[btokmx((struct pte *)bp->b_un.b_addr)]; */
- else {
- printf("bp->b_flags: %x\n",bp->b_flags);
- printf("bp->b_un.b_addr: %x\n",bp->b_un.b_addr);
- printf("bp->b_proc: %x\n",bp->b_proc);
- printf("stopp.\n");
+ else if (bp->b_flags & B_PAGET) {
+ printf("B_PAGET\n");
asm("halt");
- rp = bp->b_flags&B_DIRTY ? &pageproc[2] : bp->b_proc;
- v = vax_btop(bp->b_un.b_addr);
-/* if (bp->b_flags & B_UAREA)
- pte = &rp->p_addr[v];
- else
- pte = vtopte(rp, v);
-*/
+/* pte = &Usrptmap[btokmx((struct pte *)bp->b_un.b_addr)]; */
+ } else {
+ if( bp->b_flags&B_DIRTY){
+ rp=&pageproc[2];
+ printf("B_DIRTY\n");
+ asm("halt");
+ } else {
+ rp =bp->b_proc;
+ }
+ v = vax_btop(PxTOP0((u_int)bp->b_un.b_addr));
+ if (bp->b_flags & B_UAREA){
+ printf("B_UAREA\n");
+ asm("halt");
+/* pte = &rp->p_addr[v]; */
+ } else {
+/*
+ * It may be better to use pmap_extract() here somewhere,
+ * but so far we do it "the hard way" :)
+ */
+ pte=&rp->p_vmspace->vm_pmap.pm_ptab[v];
+ }
}
io = &uh->uh_mr[reg];
-/* printf("pte: %x\n",pte);
- printf("npf: %x, reg: %x, io: %x\n",npf,reg,io); */
while (--npf > 0) {
pfnum = pte->pg_pfn;
if (pfnum == 0)