Hi Jeff,

Thanks a lot for replying.

I have cloned my repository with Linus's. I am using this latest kernel now
[EMAIL PROTECTED]:~/linuxsrc/linux-2.6$ make kernelversion
2.6.27-rc4

Though I am not seeing the same issue, but still the linux process is not
running here is the screenshot

The steps I did are
make mrproper
make mrproper ARCH=um
make defconfig
make defconfig ARCH=um
make ARCH=um -j 2

[EMAIL PROTECTED]:~/linuxsrc/linux-2.6$ ./linux mem=256 ubda=./root_fs
Locating the bottom of the address space ... 0x10000
Locating the top of the address space ... 0xc0000000
Core dump limits :
    soft - 0
    hard - NONE
Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...OK
Checking advanced syscall emulation patch for ptrace...OK
Checking for tmpfs mount on /dev/shm...OK
Checking PROT_EXEC mmap in /dev/shm/...OK
Checking for the skas3 patch in the host:
  - /proc/mm...not found: No such file or directory
  - PTRACE_FAULTINFO...not found
  - PTRACE_LDT...not found
UML running in SKAS0 mode
setup_physmem - mapping -8093440 bytes of memory at 0x0x8800000 failed -
errno = -12


Attaching the strace output of ./linux

Please let me know if I am missing any step.

Thanks and Regards,
Prasad

On Wed, Aug 27, 2008 at 9:31 PM, Jeff Dike <[EMAIL PROTECTED]> wrote:

> On Wed, Aug 20, 2008 at 01:11:23AM +0530, Prasad Joshi wrote:
> > I am getting this error after starting the UML.
> >
> > [EMAIL PROTECTED]:~/linuxsrc/linux-2.6.26-rc5_uml$ ./linux mem=128
> > ubda=/mnt/
> > Locating the top of the address space ... Address 0x0 no good?
>
> Do one of these three things:
>      use 2.6.26, as this was fixed in 2.6.26-rc6
>      on the host, echo 0 > /proc/sys/vm/mmap_min_addr
>      apply the patch below, which is the fix that went in to 2.6.26
>
>                             Jeff
>
> --
> Work email - jdike at linux dot intel dot com
>
> commit 40fb16a360d9c6459afee91dc793c1e3374feb94
> Author: Tom Spink <[EMAIL PROTECTED]>
> Date:   Thu Jun 5 22:46:12 2008 -0700
>
>    uml: deal with inaccessible address space start
>
>    This patch makes os_get_task_size locate the bottom of the address
> space,
>    as well as the top.  This is for systems which put a lower limit on mmap
>    addresses.  It works by manually scanning pages from zero onwards until
> a
>    valid page is found.
>
>    Because the bottom of the address space may not be zero, it's not
>    sufficient to assume the top of the address space is the size of the
>    address space.  The size is the difference between the top address and
>    bottom address.
>
>    [EMAIL PROTECTED]: changed the name to reflect that this function is
>    supposed to return the top of the process address space, not its size
> and
>    changed the return value to reflect that.  Also some minor formatting
>    changes]
>    Signed-off-by: Tom Spink <[EMAIL PROTECTED]>
>    Signed-off-by: Jeff Dike <[EMAIL PROTECTED]>
>    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
>    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
>
> diff --git a/arch/um/include/os.h b/arch/um/include/os.h
> index e2716ac..db5be46 100644
> --- a/arch/um/include/os.h
> +++ b/arch/um/include/os.h
> @@ -299,6 +299,6 @@ extern int os_arch_prctl(int pid, int code, unsigned
> long *addr);
>  extern int get_pty(void);
>
>  /* sys-$ARCH/task_size.c */
> -extern unsigned long os_get_task_size(void);
> +extern unsigned long os_get_top_address(void);
>
>  #endif
> diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
> index 9db85b2..8d84250 100644
> --- a/arch/um/kernel/um_arch.c
> +++ b/arch/um/kernel/um_arch.c
> @@ -274,7 +274,7 @@ int __init linux_main(int argc, char **argv)
>        if (have_root == 0)
>                add_arg(DEFAULT_COMMAND_LINE);
>
> -       host_task_size = os_get_task_size();
> +       host_task_size = os_get_top_address();
>        /*
>         * TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps
>         * out
> diff --git a/arch/um/os-Linux/sys-i386/task_size.c
> b/arch/um/os-Linux/sys-i386/task_size.c
> index ccb49b0..be04c1e 100644
> --- a/arch/um/os-Linux/sys-i386/task_size.c
> +++ b/arch/um/os-Linux/sys-i386/task_size.c
> @@ -63,7 +63,7 @@ static int page_ok(unsigned long page)
>        return ok;
>  }
>
> -unsigned long os_get_task_size(void)
> +unsigned long os_get_top_address(void)
>  {
>        struct sigaction sa, old;
>        unsigned long bottom = 0;
> @@ -76,9 +76,9 @@ unsigned long os_get_task_size(void)
>         * hosts, but shouldn't hurt otherwise.
>         */
>        unsigned long top = 0xffffd000 >> UM_KERN_PAGE_SHIFT;
> -       unsigned long test;
> +       unsigned long test, original;
>
> -       printf("Locating the top of the address space ... ");
> +       printf("Locating the bottom of the address space ... ");
>        fflush(stdout);
>
>        /*
> @@ -89,16 +89,31 @@ unsigned long os_get_task_size(void)
>        sigemptyset(&sa.sa_mask);
>        sa.sa_flags = SA_NODEFER;
>        if (sigaction(SIGSEGV, &sa, &old)) {
> -               perror("os_get_task_size");
> +               perror("os_get_top_address");
>                exit(1);
>        }
>
> -       if (!page_ok(bottom)) {
> -               fprintf(stderr, "Address 0x%x no good?\n",
> -                       bottom << UM_KERN_PAGE_SHIFT);
> +       /* Manually scan the address space, bottom-up, until we find
> +        * the first valid page (or run out of them).
> +        */
> +       for (bottom = 0; bottom < top; bottom++) {
> +               if (page_ok(bottom))
> +                       break;
> +       }
> +
> +       /* If we've got this far, we ran out of pages. */
> +       if (bottom == top) {
> +               fprintf(stderr, "Unable to determine bottom of address "
> +                       "space.\n");
>                exit(1);
>        }
>
> +       printf("0x%x\n", bottom << UM_KERN_PAGE_SHIFT);
> +       printf("Locating the top of the address space ... ");
> +       fflush(stdout);
> +
> +       original = bottom;
> +
>        /* This could happen with a 4G/4G split */
>        if (page_ok(top))
>                goto out;
> @@ -114,7 +129,7 @@ unsigned long os_get_task_size(void)
>  out:
>        /* Restore the old SIGSEGV handling */
>        if (sigaction(SIGSEGV, &old, NULL)) {
> -               perror("os_get_task_size");
> +               perror("os_get_top_address");
>                exit(1);
>        }
>        top <<= UM_KERN_PAGE_SHIFT;
> diff --git a/arch/um/os-Linux/sys-x86_64/task_size.c
> b/arch/um/os-Linux/sys-x86_64/task_size.c
> index fad6f57..26a0dd1 100644
> --- a/arch/um/os-Linux/sys-x86_64/task_size.c
> +++ b/arch/um/os-Linux/sys-x86_64/task_size.c
> @@ -1,4 +1,4 @@
> -unsigned long os_get_task_size(unsigned long shift)
> +unsigned long os_get_top_address(unsigned long shift)
>  {
>        /* The old value of CONFIG_TOP_ADDR */
>        return 0x7fc0000000;
>

Attachment: uml_proc
Description: Binary data

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-user mailing list
User-mode-linux-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user

Reply via email to