projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
this hangs occasionally when oo 0 vectors
[unix-history]
/
usr
/
src
/
sys
/
vax
/
uba
/
up.c
diff --git
a/usr/src/sys/vax/uba/up.c
b/usr/src/sys/vax/uba/up.c
index
d8aa654
..
68e02e4
100644
(file)
--- a/
usr/src/sys/vax/uba/up.c
+++ b/
usr/src/sys/vax/uba/up.c
@@
-1,5
+1,6
@@
-/* %H% 3.1
1
%G% */
+/* %H% 3.1
2
%G% */
+#define spl5 spl6
/*
* Emulex UNIBUS disk driver with overlapped seeks and ECC recovery.
*
/*
* Emulex UNIBUS disk driver with overlapped seeks and ECC recovery.
*
@@
-333,6
+334,9
@@
register unit;
softas |= 1<<unit;
return (0);
}
softas |= 1<<unit;
return (0);
}
+ if (dp->b_active)
+ goto done;
+ dp->b_active = 1;
if ((upaddr->upcs2 & 07) != unit) {
upaddr->upcs2 = unit;
DELAY(sdelay);
if ((upaddr->upcs2 & 07) != unit) {
upaddr->upcs2 = unit;
DELAY(sdelay);
@@
-353,9
+357,6
@@
register unit;
printf("VV done ds %o, er? %o %o %o\n", upaddr->upds, upaddr->uper1, upaddr->uper2, upaddr->uper3);
didie = 1;
}
printf("VV done ds %o, er? %o %o %o\n", upaddr->upds, upaddr->uper1, upaddr->uper2, upaddr->uper3);
didie = 1;
}
- if (dp->b_active)
- goto done;
- dp->b_active = 1;
if ((upaddr->upds & (DPR|MOL)) != (DPR|MOL))
goto done;
/*
if ((upaddr->upds & (DPR|MOL)) != (DPR|MOL))
goto done;
/*
@@
-544,6
+545,7
@@
upintr()
int osoftas;
int needie = 1;
int osoftas;
int needie = 1;
+ (void) spl6();
if (uptab.b_active) {
/*
* The drive is transferring, thus the hardware
if (uptab.b_active) {
/*
* The drive is transferring, thus the hardware
@@
-629,12
+631,6
@@
printf("as=%d act %d %d %d\n", as, uptab.b_active, uputab[0].b_active, uputab[1]
* on this drive with the upustart routine (if any).
*/
if (uptab.b_active) {
* on this drive with the upustart routine (if any).
*/
if (uptab.b_active) {
- if ((upaddr->upcs2 & 07) != unit) {
- upaddr->upcs2 = unit;
- DELAY(sdelay);
- nwaitcs2++;
- } else
- neasycs2++;
if (uptab.b_errcnt >= 16) {
upaddr->upcs1 = RTC|GO|IE;
DELAY(idelay);
if (uptab.b_errcnt >= 16) {
upaddr->upcs1 = RTC|GO|IE;
DELAY(idelay);