I can confirm that this is an upstream bug in the Linux kernel and still affects all kernels up to and including 2.6.38.*. A fix has now been merged into 2.6.39 but it's a very trivial single letter change.
The git commit is 39b68976ac653cfdc7f872a293e8b7928de2dcc6 in Linus's mainline tree and H. Peter Anvin describes it as:
# When we use BIOS function e801 to probe memory, we should use ax/bx
# (or cx/dx) as a pair, not mix and match. This was a typo during the
# translation from assembly code, and breaks at least one set of
# machines in the field (which return cx = dx = 0).
I can confirm that this is an upstream bug in the Linux kernel and still affects all kernels up to and including 2.6.38.*. A fix has now been merged into 2.6.39 but it's a very trivial single letter change.
The git commit is 39b68976ac653cf dc7f872a293e8b7 928de2dcc6 in Linus's mainline tree and H. Peter Anvin describes it as:
# When we use BIOS function e801 to probe memory, we should use ax/bx
# (or cx/dx) as a pair, not mix and match. This was a typo during the
# translation from assembly code, and breaks at least one set of
# machines in the field (which return cx = dx = 0).
The commit in Linus's tree is here:
http:// git.kernel. org/?p= linux/kernel/ git/torvalds/ linux-2. 6.git;a= commit; h=39b68976ac653 cfdc7f872a293e8 b7928de2dcc6
Hope this helps!