Using "lret $2" to return from an interrupt causes interrupts to be disabled in the calling program, since the INT instruction will have disabled interrupts. Instead, patch CF on the stack and use iret to return. Interestingly, the original PC BIOS had this bug in at least one place. Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Michael Brown <mcb30@etherboot.org>tags/v0.9.8
|
|
||
489 |
|
489 |
|
490 |
|
490 |
|
491 |
|
491 |
|
|
492 |
|
|
|
493 |
|
|
|
494 |
|
|
|
495 |
|
|
|
496 |
|
|
|
497 |
|
|
|
498 |
|
|
|
499 |
|
|
|
500 |
|
|
|
501 |
|
|
|
502 |
|
|
|
503 |
|
|
492 |
|
504 |
|
493 |
|
505 |
|
494 |
|
506 |
|
|
|
||
500 |
|
512 |
|
501 |
|
513 |
|
502 |
|
514 |
|
503 |
|
|
|
|
515 |
|
|
|
516 |
|
|
504 |
|
517 |
|
505 |
|
518 |
|
506 |
|
519 |
|
|
|
||
512 |
|
525 |
|
513 |
|
526 |
|
514 |
|
527 |
|
515 |
|
|
|
|
528 |
|
|
516 |
|
529 |
|
517 |
|
530 |
|
518 |
|
531 |
|
|
|
||
524 |
|
537 |
|
525 |
|
538 |
|
526 |
|
539 |
|
527 |
|
|
|
528 |
|
|
|
529 |
|
|
|
|
540 |
|
|
530 |
|
541 |
|
531 |
|
542 |
|
532 |
|
543 |
|
|
|
||
538 |
|
549 |
|
539 |
|
550 |
|
540 |
|
551 |
|
541 |
|
|
|
|
552 |
|
|
542 |
|
553 |
|
543 |
|
554 |
|
544 |
|
555 |
|
545 |
|
556 |
|
546 |
|
557 |
|
547 |
|
558 |
|
548 |
|
|
|
549 |
|
|
|
550 |
|
|
|
|
559 |
|
|
551 |
|
560 |
|
552 |
|
561 |
|
553 |
|
562 |
|
|
|
||
63 |
|
63 |
|
64 |
|
64 |
|
65 |
|
65 |
|
|
66 |
|
|
|
67 |
|
|
66 |
|
68 |
|
67 |
|
69 |
|
68 |
|
70 |
|
|
|
||
73 |
|
75 |
|
74 |
|
76 |
|
75 |
|
77 |
|
76 |
|
|
|
77 |
|
|
|
|
78 |
|
|
78 |
|
79 |
|
79 |
|
80 |
|
80 |
|
81 |
|
|
|
||
199 |
|
199 |
|
200 |
|
200 |
|
201 |
|
201 |
|
|
202 |
|
|
|
203 |
|
|
|
204 |
|
|
|
205 |
|
|
202 |
|
206 |
|
203 |
|
|
|
204 |
|
|
|
|
207 |
|
|
205 |
|
208 |
|
206 |
|
209 |
|
207 |
|
210 |
|