Re: page size change on MIPS

2011-02-08 Thread Mulyadi Santosa
Hi...

On Tue, Feb 8, 2011 at 14:35, naveen yadav yad.nav...@gmail.com wrote:
 Hi All,

 I debug this issue further, I check in kernel  File name is
 binfmt_elf.c and function name is  create_elf_tables()

 I put a debug print here to check what kernel is reading from user space.

                if (__put_user((elf_addr_t)p, argv++))
                        return -EFAULT;
                len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
                printk(\n Lenght of arg=%ld,%s \n,len,(void __user *)p);
                if (!len || len  MAX_ARG_STRLEN)
                        return -EINVAL;
                p += len;
        }


 when Page size is 16KB  o/p is

 Lenght of arg=6,/init

 when Page size is 64KB  o/p is

 Lenght of arg=1,

 so I got null when it read from ELF

hum? very strange so essentially it can't read...or to be precise,
properly read command arguments (including the executable name
itself)?

maybe the problem lies somewhere in the initrd/initramfs?


-- 
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com

___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: page size change on MIPS

2011-02-05 Thread Mulyadi Santosa
On Sat, Feb 5, 2011 at 00:25, David Daney dda...@caviumnetworks.com wrote:
 Section headers are not relevant to any of this.  You need to look at
 the program headers.  Try 'readelf -l'

Sorry for jumping in. I think this is the data we needed in this case:
readelf --program-headers /bin/ls | grep -A 10 PHDR
  PHDR   0x34 0x08048034 0x08048034 0x00120 0x00120 R E 0x4
  INTERP 0x000154 0x08048154 0x08048154 0x00013 0x00013 R   0x1
  [Requesting program interpreter: /lib/ld-linux.so.2]
  LOAD   0x00 0x08048000 0x08048000 0x17fd8 0x17fd8 R E 0x1000
...etc

If alignment isn't compatible with the expected address or
realocation work done by the loader, there comes the crash I guess

-- 
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com

___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: page size change on MIPS

2011-02-04 Thread David Daney
On 02/03/2011 08:16 PM, naveen yadav wrote:
 Hi, I am adding readelf info also .

 mips-linux-gnu-readelf -S squashfs-root/bin/busybox
 There are 35 section headers, starting at offset 0x174290:


Section headers are not relevant to any of this.  You need to look at 
the program headers.  Try 'readelf -l'

David Daney


[...]


 On Mon, Jan 31, 2011 at 6:38 PM, Ralf Baechler...@linux-mips.org  wrote:
 On Sun, Jan 30, 2011 at 08:32:43PM +0530, Himanshu Aggarwal wrote:

 Why should the application or the toolchains depend on pagesize? I am
 not very clear on this. Can someone explain it?

 To allow loading directly with mmap the executable file's layout must
 be such that it's it's segments are on offsets that are a multiple of
 the page size so in turn the linker must know that alignment.

   Ralf





___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: page size change on MIPS

2011-01-28 Thread naveen yadav
Hi all

I try changing the kernel_execve() function as suggested, but it fails,
I am using code sourcery toolchain 4.4.1 but it still fails. I am
using 2.6.30.9 kernel and this function is part of it.



Kind regards


On Thu, Jan 27, 2011 at 11:14 PM, David Daney dda...@caviumnetworks.com wrote:
 On 01/27/2011 07:18 AM, adnan iqbal wrote:

 Please try this. One line of code is added ( move    %1, $7).


 int kernel_execve(const char *filename, char *const argv[], char *const
 envp[])
 {
        register unsigned long __a0 asm($4) = (unsigned long) filename;
        register unsigned long __a1 asm($5) = (unsigned long) argv;
        register unsigned long __a2 asm($6) = (unsigned long) envp;
        register unsigned long __a3 asm($7);
        unsigned long __v0;
        __asm__ volatile (                                     \n
               .set    noreorder                               \n
               li      $2, %5          # __NR_execve           \n
               syscall                                         \n
               move    %0, $2                                  \n
           move    %1, $7                    \n
               .set    reorder                                 \n
        : =r (__v0), =r (__a3)
        : r (__a0), r (__a1), r (__a2), i (__NR_execve)
        : $2, $8, $9, $10, $11, $12, $13, $14, $15,
 $24,
          memory);


        if (__a3 == 0)
                return __v0;
        return -__v0;
 }


 I don't know where you got that code.  But really you should do what glibc
 does.  glibc gets it correct.

 At a minimum you are missing hi and lo clobbers.

 If the code works with 16K pages, and not 64K pages, then this snippet is
 not the problem.  Likely your problem is the layout of the PHDRs in the
 executable is not compatible with the page size.

 David Daney



 On Thu, Jan 27, 2011 at 7:55 PM, naveen yadavyad.nav...@gmail.com
  wrote:

 Hi David,

 thanks for your response.

 I check and found that kernel is booting with 16KB page size with
 ramdisk booting. But when I change to 64KB it give me

 : applet not found
                  Kernel panic - not syncing: Attempted to kill init!
 so I check and found that it is not able to execute well the system
 call in kernel_execve function.
 I am using codesourcercy toolchain(4.3.1). So is there a way to debug
 this problem or how to debug below function.

 int kernel_execve(const char *filename, char *const argv[], char *const
 envp[])
 {
        register unsigned long __a0 asm($4) = (unsigned long) filename;
        register unsigned long __a1 asm($5) = (unsigned long) argv;
        register unsigned long __a2 asm($6) = (unsigned long) envp;
        register unsigned long __a3 asm($7);
        unsigned long __v0;
        __asm__ volatile (                                     \n
               .set    noreorder                               \n
               li      $2, %5          # __NR_execve           \n
               syscall                                         \n
               move    %0, $2                                  \n
               .set    reorder                                 \n
        : =r (__v0), =r (__a3)
        : r (__a0), r (__a1), r (__a2), i (__NR_execve)
        : $2, $8, $9, $10, $11, $12, $13, $14, $15,
 $24,
          memory);


        if (__a3 == 0)
                return __v0;
        return -__v0;
 }


 On Tue, Jan 25, 2011 at 12:26 AM, David Daneydda...@caviumnetworks.com
 wrote:

 On 01/24/2011 07:02 AM, naveen yadav wrote:

 Hi All,


 we are using mips32r2  so I want to know which all pages size it can
 support?
 When I modify arch/mips/Kconfig.  it boot sucessfully on 16KB page
 size. but hang/not boot crash when change page size to 8KB,32KB and 64
 KB.

 I don't think 8KB and 32KB work on most mips32r2 processors.  You would

 have

 to check the processor manual to be sure.



 We are using 2.6.30 kernel.

 At Page Size 8KB and 32KB  it hang in unpack_to_rootfs() function of
 init/initramfs.c

 64KB it hangs when execute init  Kernel panic - not syncing: Attempted
 to kill init!

 I regularly run 4K, 16K, and 64K page sizes with a Debian rootfs.  If
 you
 run with a broken uClibc toolchain that doesn't support larger pages, it
 will of course fail.  In this case the problem is with your toolchain,

 not

 the kernel.

 David Daney



 config PAGE_SIZE_4KB
         bool 4kB
         help
          This option select the standard 4kB Linux page size.  On some
          R3000-family processors this is the only available page size.
  Using
          4kB page size will minimize memory consumption and is
 therefore
          recommended for low memory systems.

 config PAGE_SIZE_8KB
         bool 8kB
        depends on (EXPERIMENTAL   CPU_R8000) || CPU_CAVIUM_OCTEON
         help
           Using 8kB page size will result in higher performance kernel

 at

           the price of higher memory consumption.  This option is
 available
           only on R8000 and cnMIPS 

Re: page size change on MIPS

2011-01-28 Thread David Daney
On 01/24/2011 07:02 AM, naveen yadav wrote:
 Hi All,


 we are using mips32r2  so I want to know which all pages size it can support?
 When I modify arch/mips/Kconfig.  it boot sucessfully on 16KB page
 size. but hang/not boot crash when change page size to 8KB,32KB and 64
 KB.

I don't think 8KB and 32KB work on most mips32r2 processors.  You would 
have to check the processor manual to be sure.



 We are using 2.6.30 kernel.

 At Page Size 8KB and 32KB  it hang in unpack_to_rootfs() function of
 init/initramfs.c

 64KB it hangs when execute init  Kernel panic - not syncing: Attempted
 to kill init!

I regularly run 4K, 16K, and 64K page sizes with a Debian rootfs.  If 
you run with a broken uClibc toolchain that doesn't support larger 
pages, it will of course fail.  In this case the problem is with your 
toolchain, not the kernel.

David Daney



 config PAGE_SIZE_4KB
  bool 4kB
  help
   This option select the standard 4kB Linux page size.  On some
   R3000-family processors this is the only available page size.  Using
   4kB page size will minimize memory consumption and is therefore
   recommended for low memory systems.

 config PAGE_SIZE_8KB
  bool 8kB
 depends on (EXPERIMENTAL  CPU_R8000) || CPU_CAVIUM_OCTEON
  help
Using 8kB page size will result in higher performance kernel at
the price of higher memory consumption.  This option is available
only on R8000 and cnMIPS processors.  Note that you will need a
suitable Linux distribution to support this.

 config PAGE_SIZE_16KB
  bool 16kB
 depends on !CPU_R3000  !CPU_TX39XX
  help
Using 16kB page size will result in higher performance kernel at
the price of higher memory consumption.  This option is available 
 on
all non-R3000 family processors.  Note that you will need a 
 suitable
Linux distribution to support this.

 config PAGE_SIZE_32KB
  bool 32kB
  help
Using 32kB page size will result in higher performance kernel at
the price of higher memory consumption.  This option is available
only on cnMIPS cores.  Note that you will need a suitable Linux
distribution to support this.

 config PAGE_SIZE_64KB
  bool 64kB
 depends on EXPERIMENTAL  !CPU_R3000  !CPU_TX39XX
  help
Using 64kB page size will result in higher performance kernel at
the price of higher memory consumption.  This option is available 
 on
all non-R3000 family processor.  Not that at the time of this
writing this option is still high experimental.




___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: page size change on MIPS

2011-01-28 Thread Kevin D. Kissell
On 01/24/11 10:56, David Daney wrote:
 On 01/24/2011 07:02 AM, naveen yadav wrote:
 Hi All,


 we are using mips32r2  so I want to know which all pages size it can 
 support?
 When I modify arch/mips/Kconfig.  it boot sucessfully on 16KB page
 size. but hang/not boot crash when change page size to 8KB,32KB and 64
 KB.

 I don't think 8KB and 32KB work on most mips32r2 processors.  You 
 would have to check the processor manual to be sure.

In principle, one should be able to detect this at run-time, by writing 
a sequence of values into the PageMask register and seeing which masks 
'stick'.

/K.


___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: page size change on MIPS

2011-01-28 Thread David Daney
On 01/28/2011 01:18 AM, naveen yadav wrote:
 Hi all

 I try changing the kernel_execve() function as suggested, but it fails,
 I am using code sourcery toolchain 4.4.1 but it still fails. I am
 using 2.6.30.9 kernel and this function is part of it.



Quit trying to change kernel_execve().  It is perfect as it is.

The problem is elsewhere.



 Kind regards


Thank you.


 On Thu, Jan 27, 2011 at 11:14 PM, David Daneydda...@caviumnetworks.com  
 wrote:
 On 01/27/2011 07:18 AM, adnan iqbal wrote:

 Please try this. One line of code is added ( move%1, $7).


 int kernel_execve(const char *filename, char *const argv[], char *const
 envp[])
 {
 register unsigned long __a0 asm($4) = (unsigned long) filename;
 register unsigned long __a1 asm($5) = (unsigned long) argv;
 register unsigned long __a2 asm($6) = (unsigned long) envp;
 register unsigned long __a3 asm($7);
 unsigned long __v0;
 __asm__ volatile ( \n
.setnoreorder   \n
li  $2, %5  # __NR_execve   \n
syscall \n
move%0, $2  \n
move%1, $7\n
.setreorder \n
 : =r (__v0), =r (__a3)
 : r (__a0), r (__a1), r (__a2), i (__NR_execve)
 : $2, $8, $9, $10, $11, $12, $13, $14, $15,
 $24,
   memory);


 if (__a3 == 0)
 return __v0;
 return -__v0;
 }


 I don't know where you got that code.  But really you should do what glibc
 does.  glibc gets it correct.

 At a minimum you are missing hi and lo clobbers.

Ignore that ^ advice.


 If the code works with 16K pages, and not 64K pages, then this snippet is
 not the problem.  Likely your problem is the layout of the PHDRs in the
 executable is not compatible with the page size.


Instead look at this issue.

 David Daney



 On Thu, Jan 27, 2011 at 7:55 PM, naveen yadavyad.nav...@gmail.com
   wrote:

 Hi David,

 thanks for your response.

 I check and found that kernel is booting with 16KB page size with
 ramdisk booting. But when I change to 64KB it give me

 : applet not found
   Kernel panic - not syncing: Attempted to kill init!
 so I check and found that it is not able to execute well the system
 call in kernel_execve function.
 I am using codesourcercy toolchain(4.3.1). So is there a way to debug
 this problem or how to debug below function.

 int kernel_execve(const char *filename, char *const argv[], char *const
 envp[])
 {
 register unsigned long __a0 asm($4) = (unsigned long) filename;
 register unsigned long __a1 asm($5) = (unsigned long) argv;
 register unsigned long __a2 asm($6) = (unsigned long) envp;
 register unsigned long __a3 asm($7);
 unsigned long __v0;
 __asm__ volatile ( \n
.setnoreorder   \n
li  $2, %5  # __NR_execve   \n
syscall \n
move%0, $2  \n
.setreorder \n
 : =r (__v0), =r (__a3)
 : r (__a0), r (__a1), r (__a2), i (__NR_execve)
 : $2, $8, $9, $10, $11, $12, $13, $14, $15,
 $24,
   memory);


 if (__a3 == 0)
 return __v0;
 return -__v0;
 }


 On Tue, Jan 25, 2011 at 12:26 AM, David Daneydda...@caviumnetworks.com
 wrote:

 On 01/24/2011 07:02 AM, naveen yadav wrote:

 Hi All,


 we are using mips32r2  so I want to know which all pages size it can
 support?
 When I modify arch/mips/Kconfig.  it boot sucessfully on 16KB page
 size. but hang/not boot crash when change page size to 8KB,32KB and 64
 KB.

 I don't think 8KB and 32KB work on most mips32r2 processors.  You would

 have

 to check the processor manual to be sure.



 We are using 2.6.30 kernel.

 At Page Size 8KB and 32KB  it hang in unpack_to_rootfs() function of
 init/initramfs.c

 64KB it hangs when execute init  Kernel panic - not syncing: Attempted
 to kill init!

 I regularly run 4K, 16K, and 64K page sizes with a Debian rootfs.  If
 you
 run with a broken uClibc toolchain that doesn't support larger pages, it
 will of course fail.  In this case the problem is with your toolchain,

 not

 the kernel.

 David Daney



 config PAGE_SIZE_4KB
  bool 4kB
  help
   This option select the standard 4kB Linux page size.  On some
   R3000-family processors this is the only available page size.
   Using
   4kB page size will minimize memory consumption and is
 therefore
   recommended for low memory systems.

 config PAGE_SIZE_8KB
  bool 8kB
 

page size change on MIPS

2011-01-24 Thread naveen yadav
Hi All,


we are using mips32r2  so I want to know which all pages size it can support?
When I modify arch/mips/Kconfig.  it boot sucessfully on 16KB page
size. but hang/not boot crash when change page size to 8KB,32KB and 64
KB.

We are using 2.6.30 kernel.

At Page Size 8KB and 32KB  it hang in unpack_to_rootfs() function of
init/initramfs.c

64KB it hangs when execute init  Kernel panic - not syncing: Attempted
to kill init!

config PAGE_SIZE_4KB
bool 4kB
help
 This option select the standard 4kB Linux page size.  On some
 R3000-family processors this is the only available page size.  Using
 4kB page size will minimize memory consumption and is therefore
 recommended for low memory systems.

config PAGE_SIZE_8KB
bool 8kB
   depends on (EXPERIMENTAL  CPU_R8000) || CPU_CAVIUM_OCTEON
help
  Using 8kB page size will result in higher performance kernel at
  the price of higher memory consumption.  This option is available
  only on R8000 and cnMIPS processors.  Note that you will need a
  suitable Linux distribution to support this.

config PAGE_SIZE_16KB
bool 16kB
   depends on !CPU_R3000  !CPU_TX39XX
help
  Using 16kB page size will result in higher performance kernel at
  the price of higher memory consumption.  This option is available on
  all non-R3000 family processors.  Note that you will need a suitable
  Linux distribution to support this.

config PAGE_SIZE_32KB
bool 32kB
help
  Using 32kB page size will result in higher performance kernel at
  the price of higher memory consumption.  This option is available
  only on cnMIPS cores.  Note that you will need a suitable Linux
  distribution to support this.

config PAGE_SIZE_64KB
bool 64kB
   depends on EXPERIMENTAL  !CPU_R3000  !CPU_TX39XX
help
  Using 64kB page size will result in higher performance kernel at
  the price of higher memory consumption.  This option is available on
  all non-R3000 family processor.  Not that at the time of this
  writing this option is still high experimental.

___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies