Re: Strange memory problem with Linux booted from U-Boot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




I tried your program with several 'val' values including ~0 and
0. The results were the same. In spite of using character pointers
on large negative integers, everything worked. What was the observed
kernel problem?? Perhaps, the kernel's printk() was not as kind
as g++ and you got some strange printed results??

On Mon, 28 Mar 2005, Ara Avanesyan wrote:

Hi,

I need some help on solving this strange problem.
Here is what I have,
I have a loadable module (linux.2.4.20) which contains a 2 mb static gloabal
array.
When I load it from linux booted via U-Boot the system crashes.
Everything works ok if I do the same thing with the same linux booted with
RedBoot.
Before loading the module I check the current meminfo and get the same
result both times.

Additional information:
The same error occurs if I just run depmod -a.

system: Avila board 64 MB RAM, ixdp425 architecture, U-Boot: 1.1.2.
Linux is MontaVista(R) Linux(R) Professional Edition 3.1.

Ok, now an amazing reproduction of the same problem from user mode:
the code below works for val = (~0), but not for 0, or even (~ff).
Again, it works fine for linux booted from RedBoot.

Some glue or something where and what to look?
Any ideas of what potentially could cause this problem?

Please CC me on reply.

Thanks!
Ara

Several days ago I posted this question to U-boot mailing list but got not
much help there:)

____
error message:
Unable to handle kernel paging request at virtual address e59f30f8
mm = c000a320 pgd = c3e60000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: 0
CPU: 0
pc 2 [<c0054f64>]    lr : [<00000000>]    Tainted: GF
sp : c3e45e94  ip : c3e45eb4  fp : c3e45eb0
r10: 00000000  r9 : c3e45f04  r8 : 00000004
r7 : 00000004  r6 : c016a000  r5 : c3e44000  r4 : e59f3054
r3 : e91ba870  r2 : c019cc70  r1 : 00000000  r0 : 00000000
Flags: nzCv  IRQs on  FIQs on  Mode SVC_32 Control: 39FF  Table: 03E60000
DAC: 00000015
Process klogd (pid: 89, stack limit = 0xc3e443a0)
Stack: (0xc3e45e94 to 0xc3e46000)

___
Now the (user level) code:

#include <iostream>

using namespace std;

const int pass = 64;
const int size = 2 * 1024 * 1024;
const int val = 0xffffff00;
int main()
{
   cout << "starting val == " << hex << val << endl;
   char *buf = new char[size];
   cout << "allocated memory of " << size << " bytes. buf == " << (int)buf
<< endl;

   for (int j = 0; j < pass; j++)
   {
       cout << "passing " << j << endl;
       for (int i = 0; i < size; i++)
       {
           buf[i] = val;
       }
       cout << "passed" << endl;
   }

   cout << "freeing" << endl;
   delete []buf;
   cout << "finished!" << endl;
   return 0;
}

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


Cheers,
Dick Johnson
Penguin : Linux version 2.6.11 on an i686 machine (5537.79 BogoMips).
 Notice : All mail here is now cached for review by Dictator Bush.
                 98.36% of all statistics are fiction.
Script started on Mon 28 Mar 2005 11:12:26 AM EST
LINUX> g++ -o xxx -Wall -O2 xxx.cpp

LINUX> ./xxx

starting val == ffffffff

allocated memory of 200000 bytes. buf == b7dde008

passing 0

passed

passing 1

passed

passing 2

passed

passing 3

passed

passing 4

passed

passing 5

passed

passing 6

passed

passing 7

passed

passing 8

passed

passing 9

passed

passing a

passed

passing b

passed

passing c

passed

passing d

passed

passing e

passed

passing f

passed

passing 10

passed

passing 11

passed

passing 12

passed

passing 13

passed

passing 14

passed

passing 15

passed

passing 16

passed

passing 17

passed

passing 18

passed

passing 19

passed

passing 1a

passed

passing 1b

passed

passing 1c

passed

passing 1d

passed

passing 1e

passed

passing 1f

passed

passing 20

passed

passing 21

passed

passing 22

passed

passing 23

passed

passing 24

passed

passing 25

passed

passing 26

passed

passing 27

passed

passing 28

passed

passing 29

passed

passing 2a

passed

passing 2b

passed

passing 2c

passed

passing 2d

passed

passing 2e

passed

passing 2f

passed

passing 30

passed

passing 31

passed

passing 32

passed

passing 33

passed

passing 34

passed

passing 35

passed

passing 36

passed

passing 37

passed

passing 38

passed

passing 39

passed

passing 3a

passed

passing 3b

passed

passing 3c

passed

passing 3d

passed

passing 3e

passed

passing 3f

passed

freeing

finished!

LINUX> exit


Script done on Mon 28 Mar 2005 11:12:59 AM EST

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux