From ec14c35f2da207a42454840d8b9ca01f1ed60a4c Mon Sep 17 00:00:00 2001 From: John Winans Date: Fri, 10 Jun 1994 09:03:26 +0000 Subject: [PATCH] changed invalid link messages and limited print storm possibility --- src/drv/drvBitBus.c | 87 +++++++++++++++++++++++++----------------- src/drv/drvPEPBitBus.c | 20 +++++++--- 2 files changed, 68 insertions(+), 39 deletions(-) diff --git a/src/drv/drvBitBus.c b/src/drv/drvBitBus.c index 0c7f7edf8..725b981aa 100644 --- a/src/drv/drvBitBus.c +++ b/src/drv/drvBitBus.c @@ -1033,39 +1033,7 @@ int link; /* All data bytes have been sent, put on busy list and release */ /* Don't add to busy list if was a RAC_RESET_SLAVE */ - if (pnode->txMsg.cmd != RAC_RESET_SLAVE) - { - /* Lock the busy list */ - semTake(plink->busyList.sem, WAIT_FOREVER); - - /* set the retire time */ - pnode->retire = tickGet(); - if (pnode->ageLimit) - pnode->retire += pnode->ageLimit; - else - pnode->retire += 5 * sysClkRateGet(); - - if (plink->busyList.head == NULL) - dogStart = 1; - else - dogStart = 0; - - /* Add pnode to the busy list */ - listAddTail(&(plink->busyList), pnode); - - /* Count the outstanding messages */ - (plink->deviceStatus[pnode->txMsg.node])++; - - semGive(plink->busyList.sem); - - /* If just added something to an empty busy list, start the dog */ - if (dogStart) - { - now = tickGet(); - wdStart(pXvmeLink[link]->watchDogId, plink->busyList.head->retire - now, xvmeTmoHandler, link); - } - } - else + if ((pnode->txMsg.cmd == RAC_RESET_SLAVE) && (pnode->txMsg.tasks == 0)) { /* Finish the transaction here if was a RAC_RESET_SLAVE */ /* if (bbDebug) */ @@ -1098,6 +1066,38 @@ int link; /* -- BUG -- I don't really need this */ /* taskDelay(15); */ /* wait while bug is resetting */ } + else + { + /* Lock the busy list */ + semTake(plink->busyList.sem, WAIT_FOREVER); + + /* set the retire time */ + pnode->retire = tickGet(); + if (pnode->ageLimit) + pnode->retire += pnode->ageLimit; + else + pnode->retire += 5 * sysClkRateGet(); + + if (plink->busyList.head == NULL) + dogStart = 1; + else + dogStart = 0; + + /* Add pnode to the busy list */ + listAddTail(&(plink->busyList), pnode); + + /* Count the outstanding messages */ + (plink->deviceStatus[pnode->txMsg.node])++; + + semGive(plink->busyList.sem); + + /* If just added something to an empty busy list, start the dog */ + if (dogStart) + { + now = tickGet(); + wdStart(pXvmeLink[link]->watchDogId, plink->busyList.head->retire - now, xvmeTmoHandler, link); + } + } /* Tell the 8044 to fire out the message now */ pXvmeLink[link]->bbRegs->cmnd = BB_SEND_CMD; /* forward it now */ @@ -1155,7 +1155,8 @@ qBBReq(pdpvt, prio) struct dpvtBitBusHead *pdpvt; int prio; { - char message[100]; + static linkErrFlags[BB_NUM_LINKS]; /* Supposedly init'd to zero */ + char message[200]; if ((prio < 0) || (prio >= BB_NUM_PRIO)) { @@ -1163,12 +1164,30 @@ int prio; errMessage(S_BB_badPrio, message); return(ERROR); } +#if 0 if (checkLink(pdpvt->link) == ERROR) { sprintf(message, "invalid link requested in call to qbbreq(%08.8X, %d)\n", pdpvt, prio); errMessage(S_BB_rfu1, message); return(ERROR); } +#else + if (checkLink(pdpvt->link) == ERROR) + { + if (pdpvt->link >= BB_NUM_LINKS) + { + sprintf(message, "qbbreq(%08.8X, %d) %d\n", pdpvt, prio, pdpvt->link); + errMessage(S_BB_badlink, message); + } + else if (linkErrFlags[pdpvt->link] == 0) + { /* Anti-message swamping check */ + linkErrFlags[pdpvt->link] = 1; + sprintf(message, "qbbreq(%08.8X, %d) %d... card not present\n", pdpvt, prio, pdpvt->link); + errMessage(S_BB_badlink, message); + } + return(ERROR); + } +#endif if (bbDebug>5) printf("qbbreq(0x%08.8X, %d): transaction queued\n", pdpvt, prio); if (bbDebug>6) diff --git a/src/drv/drvPEPBitBus.c b/src/drv/drvPEPBitBus.c index fce7e3195..99eae7166 100644 --- a/src/drv/drvPEPBitBus.c +++ b/src/drv/drvPEPBitBus.c @@ -1192,7 +1192,8 @@ qBBReq(pdpvt, prio) struct dpvtBitBusHead *pdpvt; int prio; { - char message[100]; + char message[200]; + static linkErrFlags[BB_NUM_LINKS]; /* Supposedly init'd to zero */ if ((prio < 0) || (prio >= BB_NUM_PRIO)) { sprintf(message, @@ -1202,11 +1203,20 @@ int prio; return(ERROR); } - if (checkLink(pdpvt->link) == ERROR) { - sprintf(message, - "invalid link number requested in call to qbbreq(%08.8X, %d) %d\n", + if (checkLink(pdpvt->link) == ERROR) + { + if (pdpvt->link >= BB_NUM_LINKS) + { + sprintf(message, "qbbreq(%08.8X, %d) %d\n", pdpvt, prio, pdpvt->link); + errMessage(S_BB_badlink, message); + } + else if (linkErrFlags[pdpvt->link] == 0) + { /* Anti-message swamping check */ + linkErrFlags[pdpvt->link] = 1; + sprintf(message, "qbbreq(%08.8X, %d) %d... card not present\n", pdpvt, prio, pdpvt->link); - errMessage(S_BB_rfu1, message); + errMessage(S_BB_badlink, message); + } return(ERROR); }