M ip/il.c => ip/il.c +5 -3
@@ 1015,7 1015,9 @@ loop:
break;
}
if(ic->timeout >= ic->fasttime) {
- ilrexmit(ic);
+ ilsendctl(p, nil, Ilquery, ic->next, ic->recvd, ilnextqt(ic));
+ ic->querytime = Querytime;
+ ic->timeout = 0;
ilbackoff(ic);
}
if(ic->timeout >= ic->slowtime) {
@@ 1109,8 1111,8 @@ iltimers(Ilcb *ic)
int pt;
ic->timeout = 0;
- pt = (ic->delay>>LogAGain) + ic->unackedbytes/(ic->rate>>LogAGain) + ic->mdev;
- ic->fasttime = Acktime + pt + Iltickms - 1;
+ pt = (ic->delay>>LogAGain) + ic->unackedbytes/(ic->rate>>LogAGain) + (ic->mdev>>(LogDGain-1));
+ ic->fasttime = pt + Iltickms - 1;
if(ic->fasttime > Fasttime)
ic->fasttime = Fasttime;
ic->slowtime = (Slowtime/Seconds)*pt;
M pc/trap.c => pc/trap.c +6 -3
@@ 492,10 492,13 @@ noted(Ureg* ureg, ulong arg0)
* Check the segment selectors are all valid, otherwise
* a fault will be taken on attempting to return to the
* user process.
+ * Take care with the comparisons as different processor
+ * generations push segment descriptors in different ways.
*/
- if(nureg->cs != UESEL || nureg->ss != UDSEL || nureg->ds != UDSEL
- || nureg->es != UDSEL || nureg->fs != UDSEL || nureg->gs != UDSEL){
- pprint("bad segement selector in noted\n");
+ if((nureg->cs & 0xFFFF) != UESEL || (nureg->ss & 0xFFFF) != UDSEL
+ || (nureg->ds & 0xFFFF) != UDSEL || (nureg->es & 0xFFFF) != UDSEL
+ || (nureg->fs & 0xFFFF) != UDSEL || (nureg->gs & 0xFFFF) != UDSEL){
+ pprint("bad segment selector in noted\n");
qunlock(&up->debug);
pexit("Suicide", 0);
}