From 72be7ec7db2856ea384b04de600be73d36f2f9b9 Mon Sep 17 00:00:00 2001 From: John Winans Date: Wed, 3 Feb 1993 11:29:07 +0000 Subject: [PATCH] added link-wide message limit --- src/drv/drvBitBus.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/drv/drvBitBus.c b/src/drv/drvBitBus.c index 0d6b84140..a07c11b3a 100644 --- a/src/drv/drvBitBus.c +++ b/src/drv/drvBitBus.c @@ -1,4 +1,3 @@ -/* drvBitBus.c */ /* share/src/drv $Id$ */ /* * Original Author: Ned Arnold @@ -107,6 +106,7 @@ reportBB() if (pXvmeLink[i] != NULL) { printf("Link %d (address 0x%08.8X) present and initialized.\n", i, pXvmeLink[i]->bbRegs); + printf(" %d mesages on busy list\n", pXvmeLink[i]->pbbLink->busyList.elements); } else { @@ -199,12 +199,14 @@ initBB() pXvmeLink[i]->pbbLink->queue[j].tail = NULL; FASTLOCKINIT(&(pXvmeLink[i]->pbbLink->queue[j].sem)); FASTUNLOCK(&(pXvmeLink[i]->pbbLink->queue[j].sem)); + pXvmeLink[i]->pbbLink->queue[j].elements = 0; } /* init the busy message list */ FASTLOCKINIT(&(pXvmeLink[i]->pbbLink->busyList.sem)); pXvmeLink[i]->pbbLink->busyList.head = NULL; pXvmeLink[i]->pbbLink->busyList.tail = NULL; + pXvmeLink[i]->pbbLink->busyList.elements = 0; for (j=0; jhead = pnode; + plist->elements++; + return(0); } /****************************************************************************** @@ -359,6 +363,8 @@ struct dpvtBitBusHead *pnode; plist->tail = pnode; /* this is the 'new' tail node */ + plist->elements++; + return(0); } @@ -384,6 +390,8 @@ struct dpvtBitBusHead *pnode; if (plist->tail == pnode) plist->tail = pnode->prev; + plist->elements--; + return(0); } @@ -552,6 +560,7 @@ int link; wdCancel(pXvmeLink[link]->watchDogId); /* Wake up Link Task in case was waiting on "this" node */ +/* BUG -- this may require miving into the BB_RCMD state */ semGive(pXvmeLink[link]->pbbLink->linkEventSem); FASTUNLOCK(&(pXvmeLink[link]->pbbLink->busyList.sem)); @@ -935,7 +944,7 @@ int link; printf("xvmeTxTask(%d): got an event\n", link); working = 1; - while ((working != 0) && (pXvmeLink[link]->abortFlag == 0)) + while ((working != 0) && (pXvmeLink[link]->abortFlag == 0) && (plink->busyList.elements < BB_MAX_OUTSTANDING_MSGS)) { working = 0;