Re: CONFIG_HIMEM instability?

Anthony DeRobertis (asd@suespammers.org)
Mon, 7 Jan 2002 06:49:44 -0500


On Sunday, January 6, 2002, at 11:57 , Tony Hoyle wrote:
>
> Unfortunately memtest86 is incompatible with this mobo, but the
> memory checks out on another machine I tried it on, so I expect
> it's OK.

I've had DIMMs not get along. So have other people. This little
tester seems to find that fairly well, stunningly --- even when
Memtest86 can't find them at all. It found mine in about 30min
(512mb box); another persons in an hour or two.

Adjust the defines up top.

PS: You did report the failure to the memtest86 people, right?

#include <iostream>
#include <cstdlib>
#include <ctime>
#ifdef TWO_PROCESSOR
# include <unistd.h>
# include <cstdio>
#endif

#define BLOCK_TYPE int
#define BLOCK_SIZE (32*1024*1024/sizeof(BLOCK_TYPE)) /* = 32MB */
#define BLOCK_COUNT (15) /* = 480MB */

using namespace std;

void FillBlock(BLOCK_TYPE *ptr);
void CheckBlock(BLOCK_TYPE *ptr, int seed, int ident, int proc);

int main() {
BLOCK_TYPE *block[BLOCK_COUNT];
int seed[BLOCK_COUNT];

cerr << "Allocating Blocks...\n";
for (int x = 0; x < BLOCK_COUNT; ++x)
block[x] = new BLOCK_TYPE[BLOCK_SIZE];
cerr << "Done allocating blocks.\n";

cerr << "Filling blocks...\n";
for (int x = 0; x < BLOCK_COUNT; ++x) {
int rnd = rand();
srand(rnd);
seed[x] = rnd;
FillBlock(block[x]);
};
cerr << "Done filling blocks.\n";
#ifdef TWO_PROCESSOR
int proc_ident;
{
int res = fork();
if (res == 0) {
srand(time(NULL));
proc_ident = 1;
} else if (res == -1) {
perror("fork");
exit(1);
} else
proc_ident = 0;
}
#else
int proc_ident = 0;
#endif
cerr << "Running test. This will take forever.\n";
while (1) {
int which = (rand() % BLOCK_COUNT);
CheckBlock(block[which], seed[which], which, proc_ident);
}

return 0;
}

void FillBlock(BLOCK_TYPE *ptr) {
for (BLOCK_TYPE *stop = ptr+BLOCK_SIZE-1; ptr < stop; ++ptr)
*ptr = rand();
}

void CheckBlock(BLOCK_TYPE *ptr, int seed, int ident, int proc) {
int old = rand();
srand(seed);
for (BLOCK_TYPE *stop = ptr+BLOCK_SIZE-1; ptr < stop; ++ptr) {
BLOCK_TYPE got = *ptr;
BLOCK_TYPE want = rand();
if (got != want)
cerr << "Block #" << ident << " (" << proc << ") not OK; *"
<< ptr << " = " << got << ", not " << want << "!\n";
}
srand(old);
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/