no significant bugs in 80286 virtual memory

A. Lester Buck buck at siswat.UUCP
Sat Sep 17 17:12:43 AEST 1988


There have been several postings in comp.unix.microport recently
intimating that the "experts" know of a serious bug in the 80286.
It seems some 80286 instructions are not restartable after a virtual
memory fault, therefore a virtual memory operating system
is impossible on the 80286.

I happened to be interested in the 80286 buglist (Intel calls them
Errata) for other reasons, but I stopped by my local Intel sales
office a couple of weeks ago to get the latest information.  The
field applications engineer rumaged around for a while in their
files and came up with an Errata Sheet Update for 80286 dated
16 January 1985, as part of Tech Bits issued Feb 22, 1985,
reference no. MIP-19.  These fourteen pages document 9 errata and
4 documentation changes for the B-2/B-3 stepping of the chip
and 5 errata with 4 documentation changes for the C-2 stepping.
(The 5 are a subset of the original 9.)  I was told the current
stepping (I forget what it is or when it arrived) has NO known errata.

Here are the nine errata for the B-2/B-3 stepping:

1. Pullup BUSY and ERROR inputs
2. Coprocessor operand partially beyond limit of erc segment
3. CLK input requirements
4. POPF behavior
5. Don't remove interrupt signal early
6. Nested interrupts
7. Non-maskable interrupt
8. Protection Violations
9. Loading null selector values into ds or es registers

Here are the four documentation changes:

1. Single-stepping the INT n instruction
2. LOCK signal during INTA cycles
3. instructions longer than 10 bytes
4. ARPL instruction

I am not an 80286 expert, but the only thing that seems to effect
virtual memory is #8, Protection Violations.

[ begin Errata 8 excerpt]

	The protection violations involved usually indicate a probable
	software bug and restart is not desired if one of these violations
	occurs.  In a Protected Mode 80286 system with wait states during
	any bus cycles, when certain protection violations are detected by
	the 80286 component, and the component transfers control to the
	exception handling routine, the contents of the CX register may be
	unreliable.  (Whether CX contents are changed is a function of bus
	activity at the time interval microcode detects the protection
	violation.)

	Note that any "not present" exception when a CS, SS, DS, or ES
	segment is "not present" is entirely restartable, for virtual
	memory implementation.

	[ seven types of protection violation listed that no operating
	system should want to restart, like reading from execute-only
	code, or direct I/O at the wrong priority ]

	The following protection violation below may also lead to
	unreliable CX register contents.  The following protection
	violation is designed to be restartable for dynamically growable
	stacks, but due to the errata, is not restartable on this
	stepping in a system which has wait states in any bus cycles
	(for example, refresh cycles in systems with dynamic memory):

		8)	exception #SS(0) from attempted "PUSH" below
			the defined limit of the stack segment (restart
			allows dynamically growable stack segments).
		
		Notation...
			exception #SS() = exception #12 = Stack Fault
			The value in parentheses indicates the type
			of error code pushed on exception handler's
			stack.

[End of Errata 8 excerpt]

It seems that a perfectly good virtual memory operating system could
be written with all instructions restartable, except the feature
of a dynamically growable stack segment would not be available.
Is dynamic stack growth essential to Unix?

Is Intel not reporting a serious errata on the 80286?
It is hard for me to believe the 80286 has such a bad bug that
entire sections of the manual are rendered useless.

Let's have some hard facts to back up these rumors, if they are real.

-- 
A. Lester Buck		...!uunet!nuchat!moray!siswat!buck



More information about the Comp.unix.microport mailing list