memtest86_/work-around-4G-virtual-overflow

43 lines
1.3 KiB
Plaintext

--- memtest86+-2.01/init.c.orig 2008-11-26 13:28:22.000000000 +0100
+++ memtest86+-2.01/init.c 2008-11-28 16:06:50.000000000 +0100
@@ -238,7 +238,7 @@
unsigned long addr_hi;
};
extern unsigned char pdp[];
- extern struct pde pd2[];
+ extern struct pde pd1[];
unsigned long window = page >> 19;
if (FLAT || (window == mapped_window)) {
return 0;
@@ -266,11 +266,11 @@
* Bit 6 = Dirty. 1 = memory has been written to.
* Bit 7 = Page Size. 1 = page size is 2 MBytes
* --------------------------------------------------*/
- pd2[i].addr_lo = ((window & 1) << 31) + ((i & 0x3ff) << 21) + 0xE3;
- pd2[i].addr_hi = (window >> 1);
+ pd1[i].addr_lo = ((window & 1) << 31) + ((i & 0x3ff) << 21) + 0xE3;
+ pd1[i].addr_hi = (window >> 1);
}
paging_off();
- if (window > 1) {
+ if (window > 0) {
paging_on(pdp);
}
mapped_window = window;
@@ -281,13 +281,13 @@
{
void *result;
if (FLAT || (page_addr < 0x80000)) {
- /* If the address is less that 1GB directly use the address */
+ /* If the address is less than 2GB directly use the address */
result = (void *)(page_addr << 12);
}
else {
unsigned long alias;
alias = page_addr & 0x7FFFF;
- alias += 0x80000;
+ alias += 0x40000;
result = (void *)(alias << 12);
}
return result;