Yes, CPU matters apparently. I got hit by this badly.

I traced the chain of calls into the kernel, and apparently this has to
do with fpu related features.
you have to set eagerfpu=off in your kernel boot options. Also note that
there is a 6 options limit. Any option after the 6th will be ignored.

On 02/13/2017 04:40 PM, Natale Patriciello wrote:
> Hello,
>
> I have a UML configuration that worked fine with the 4.10.0-rc8 version
> in my previous laptop (i7-2740 cpu, blabla.. does it really matters?).
> With "worked fine" I mean that I was able to boot in my custom Archlinux
> image (on an Archlinux host perfectly updated).
>
> I then copied the image and the config in a new laptop (new i7-7700),
> run the make for the kernel, got the kernel binary. 
> When trying to start, I get the following message: (Sorry for the long 
> message!)
>
> $ ./linux mem=512M ubd0=/home/nat/Work/Linux_UML/fs/fs.ext4
> Core dump limits :
>       soft - NONE
>       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 environment variables for a tempdir.../tmp/nat
> Checking if /tmp/nat is on tmpfs...OK
> Checking PROT_EXEC mmap in /tmp/nat...OK
> Adding 11587584 bytes to physical memory to account for exec-shield gap
> Linux version 4.10.0-rc8-uml-00205-g7089db84e356-dirty (nat@judith) (gcc 
> version 6.3.1 20170109 (GCC) ) #16 Mon Feb 13 15:35:51 CET 2017
> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 131808
> Kernel command line: mem=512M ubd0=/home/nat/Work/Linux_UML/fs/fs.ext4 
> root=98:0
> PID hash table entries: 4096 (order: 3, 32768 bytes)
> Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
> Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
> Memory: 509848K/535604K available (2647K kernel code, 697K rwdata, 772K 
> rodata, 111K init, 171K bss, 25756K reserved, 0K cma-reserved)
> NR_IRQS:15
> clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, 
> max_idle_ns: 881590404426 ns
> Calibrating delay loop... 6889.47 BogoMIPS (lpj=34447360)
> pid_max: default: 32768 minimum: 301
> Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
> Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
> Checking that host ptys support output SIGIO...Yes
> Checking that host ptys support SIGIO on close...No, enabling workaround
> devtmpfs: initialized
> Using 2.6 host AIO
> clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 
> 19112604462750000 ns
> NET: Registered protocol family 16
> clocksource: Switched to clocksource timer
> VFS: Disk quotas dquot_6.6.0
> VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
> NET: Registered protocol family 2
> TCP established hash table entries: 8192 (order: 4, 65536 bytes)
> TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
> TCP: Hash tables configured (established 8192 bind 8192)
> UDP hash table entries: 512 (order: 2, 16384 bytes)
> UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
> NET: Registered protocol family 1
> console [stderr0] disabled
> mconsole (version 2) initialized on /home/nat/.uml/FdImtj/mconsole
> Checking host MADV_REMOVE support...OK
> futex hash table entries: 256 (order: 0, 6144 bytes)
> workingset: timestamp_bits=46 max_order=17 bucket_order=0
> Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
> io scheduler noop registered
> io scheduler deadline registered (default)
> NET: Registered protocol family 17
> Initialized stdio console driver
> Console initialized on /dev/tty0
> console [tty0] enabled
> Initializing software serial port version 1
> console [mc-1] enabled
> EXT4-fs (ubda): couldn't mount as ext3 due to feature incompatibilities
> EXT4-fs (ubda): couldn't mount as ext2 due to feature incompatibilities
> EXT4-fs (ubda): mounted filesystem with ordered data mode. Opts: (null)
> VFS: Mounted root (ext4 filesystem) readonly on device 98:0.
> devtmpfs: mounted
> This architecture does not have kernel memory protection.
> Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
>
> CPU: 0 PID: 1 Comm: init Not tainted 4.10.0-rc8-uml-00205-g7089db84e356-dirty 
> #16
> Stack:
>  80433ba0 60064332 80430b00 6031bae8
>  600905cc 601d4673 80433bb0 601c9a41
>  80433cd0 60090332 80433be0 6002d3b1
> Call Trace:
>  [<600905cc>] ? 
> printk+0x0/0x94
>  [<6001af21>] 
> show_stack+0x108/0x15e
>  [<60064332>] ? 
> dump_stack_print_info+0xe4/0xed
>  [<600905cc>] ? 
> printk+0x0/0x94
>  [<601d4673>] ? 
> bust_spinlocks+0x0/0x3b
>  [<601c9a41>] 
> dump_stack+0x2a/0x2c
>  [<60090332>] 
> panic+0x170/0x311
>  [<6002d3b1>] ? 
> set_signals+0x28/0x40
>  [<600f2c29>] ? 
> mntput+0x2f/0x31
>  [<600d723f>] ? 
> __fput+0x1d3/0x1e2
>  [<602aa6ec>] ? 
> _cond_resched+0x0/0x42
>  [<600d7292>] ? 
> ____fput+0x10/0x12
>  [<60089c12>] ? 
> cgroup_exit+0x8c/0xcb
>  [<600901c2>] ? 
> panic+0x0/0x311
>  [<60038a29>] 
> do_exit+0x3c3/0x89d
>  [<60038fd7>] 
> do_group_exit+0x8f/0x106
>  [<6002d1ac>] ? 
> block_signals+0x0/0x16
>  [<6002d1ac>] ? 
> block_signals+0x0/0x16
>  [<600423ae>] 
> get_signal+0x4af/0x4e3
>  [<6001ac75>] 
> do_signal+0x27/0x121
>  [<6002d3b1>] ? 
> set_signals+0x28/0x40
>  [<6002d389>] ? 
> set_signals+0x0/0x40
>  [<6004131d>] ? 
> force_sig+0x18/0x1a
>  [<60041932>] ? 
> force_sigsegv+0x5f/0x69
>  [<6001c2d8>] 
> fatal_sigsegv+0x46/0x52
>  [<60032a5f>] ? 
> put_fp_registers+0x10/0x12
>  [<6002fed5>] 
> userspace+0x12b/0x447
>  [<60019d6f>] ? 
> interrupt_end+0x0/0xa0
>  [<600dca10>] ? 
> do_execveat_common+0x519/0x649
>  [<600c9ce1>] ? 
> kmem_cache_alloc+0x0/0x103
>  [<600dcb61>] ? 
> do_execve+0x21/0x23
>  [<600183e4>] ? 
> run_init_process+0x3e/0x42
>  [<600183e8>] ? 
> try_to_run_init_process+0x0/0x44
>  [<600183fe>] ? 
> try_to_run_init_process+0x16/0x44
>  [<600183e8>] ? 
> try_to_run_init_process+0x0/0x44
>  [<60019b98>] 
> new_thread_handler+0xa1/0xa3
>
> I have investigated it, and the problem is in 
> arch/x86/um/os-Linux/registers.c :
>
>  49 int restore_fp_registers(int pid, unsigned long *fp_regs)
>  50 {
>  51   struct iovec iov;
>  52 
>  53   if (have_xstate_support) {
>  54     iov.iov_base = fp_regs;
>  55     iov.iov_len = sizeof(struct _xstate);
>  56     if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
>  57       return -errno;
>  58     return 0;
>  59   } else {
>  60     return restore_i387_registers(pid, fp_regs);
>  61   }
>  62 }
>
> At line 56, there is a ptrace call. This call exits with -14. The 14
> number means EFAULT. Well, after some tries, I patched the function to
> always enter the else branch, and then calling restore_i387_registers .
> With my big surprise, using this function allows me to boot correctly
> the system.
>
> Why I can't successfully boot with the stock kernel, with
> have_xstate_support ?
>
> Thank you
> N.
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> User-mode-linux-user mailing list
> User-mode-linux-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user


Attachment: signature.asc
Description: OpenPGP digital signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
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