Hi,

On 6/11/19 11:05 PM, Wayne wrote:
> Jan/Ralf,
> 
> I was able to get past issues 1 and 3 above by using Jan's kernel config
> from this thread:
> 
> https://groups.google.com/forum/#!searchin/jailhouse-dev/Re$3A$20Failed$20to$20boot$20jailhouse%7Csort:relevance/jailhouse-dev/M7UO89XFIk0/Qi40DDuMBAAJ";.
>  
> 
> The DMA issue was resolved by disabling kernel option CONFIG_ISA_DMA_API
> as stated in another thread, and reflected in the config file above.
> 
> So now I think i've almost got the non-root linux booting.  I'm stuck at
> the point where its trying to mount a filesystem and since i'm not
> providing an initramfs it panics.

Perfect!

> 
> Similar to the output below:
> 
> [ 1.080178] VFS: Cannot open root device "(null)" or unknown-block(0,0):
> error -6
> [ 1.087662] Please append a correct "root=" boot option; here are the
> available partitions:
> [ 1.096013] Kernel panic - not syncing: VFS: Unable to mount root fs on
> unknown-block(0,0)
> 
> I have just a couple more questions:
> 1. In general, is it true that an inmate will takeover control from the
> root of any resource in the following arrays, or are there some cases
> where they get "shared" between the root and inmate?

Depends.

>      A. ".mem_regions" -> Shared?

May be shared with the root cell (i.e., if the region has the flag
JAILHOUSE_MEM_ROOTSHARED set).

>      B. ".irqchips" -> Shared?

Shared with whom? Only one guest runs on a CPU. This guest will have
full access to the irqchip. Some accesses must be intercepted.

>      C. ".pio_bitmap" -> Inmate takes control of these if matching
> between inmate and root

Exclusive control.

>      D. ".pci_devices" -> Inmate takes control?

Exclusive control.

>      E. ".pci_caps" -> Inmate takes control?

Exclusive control.

> 
> 2. Along the same lines, going back to my ttyS0 issue mentioned above
> while trying to share it:
> 
>        If I allocate the following to the linux non root cell (and set
> to -1 in the root)

BTW, there's generally no need to set -1 in the root cell -- it will be
taken away when the non-root cell is created.

>      .pio_bitmap = {
>           [0x3f8/8 ... 0x3ff/8] = 0x00   /* serial 2*/
>        }
> 
>        Then on the root cell I randomly get a PIO read fault on "0x3FE"
> when the non-root is booting, i'm not sure what process is causing this.

- Are you sure you remove the device from the kernel cmdline?
- Are you sure that there doesn't spawn a tty? Check with systemctl.
- lsof | grep ttyS
- The root-cell might receive the serial device's interrupt, while its
  ports are assigned to the non-root cell. Does the crash happen when
  you type in a character to the serial line?

  In this case, assign the interrupt to the non-root cell. You will need
  it in any case there once you have a initrd and want to type in stuff.

So there must be some reason why the crash happens. The hard way is to
add 8250.nr_uarts=0 in your kernel cmdline of the root cell.

> 
>        if I leave out the pio mapping in the non-root linux, and
> alolothat block in the root cell instead then the non-root linux gets a
> PIO read fault on "0x3F9" while booting.       
>        Ralf mentioned that Linux would not try enumerate the device if
> its set to -1 ( [0x3f8/8 ... 0x3ff/8] = -1)  , but the non-root seems to
> attempt to do something with it anyway:
> 
> "[    0.956146]Serial: 8250/16550 driver, 1 ports, IRQ sharing enabled"
> "FATAL: Invalid PIO read, port: 3f9: size 1"  

Hmm. At least that's what I thought. I don't know how enumeration of
platform devices works exactly, but reconsidering this, the behaviour
above makes sense: How would it know that a platform device is not
present, depending of the configuration of the pio_bitmap.

Anyway, 8250 drivers have some cmdline parameters that can be used to
control initialisation (e.g., see the nr_uarts parameters above).

> 
>        Is it possible to map the same pio block in both the root and
> non-root with a different mask?  Or does the non-root just override it? 
> It seems like the latter is true.    

Exactly. That's not a) possible, and b) does not really make sense.

  Ralf

> 
> Thanks again Jan and Ralf for your help getting to this point.
> 
> 
> On Tue, Jun 11, 2019 at 2:13 PM Wayne <[email protected]
> <mailto:[email protected]>> wrote:
> 
>     Jan & Ralf:
> 
>     I have a little good news, I have successfully gotten the non-root
>     linux to display some startup output based on your suggestions. 
>     Also, there must have been some small difference between the stock
>     linux-x86-demo cell config and the one I tweaked.  I went back to
>     the original and made some minor changes and it started displaying
>     the serial output now for the non-root node.
> 
>     I ended up making the root cell the primary user of the ttyS0
>     device, and just having the non-root linux output to the hypervisor
>     virtual console (console=jailhouse).  In my setup, there appears to
>     be some process still attempting to use the ttyS0 randomly on the
>     root linux, and that causes the hypervisor to halt it if I don't
>     leave it in the PIO array.  Not sure who is doing it.
> 
> 
>     This is where i'm at now.  The non-root linux keeps running into
>     points where it tries to access PIO and gets parked:
> 
>     1. First crash:
> 
>     [    0.424925]kworker/u6:0 (27) used greated stack depth: 14656
>     bytes left
>     [    0.425807]futex has table entries: 1024 (order: 4, 65536 bytes)
>     "FATAL: Invalid PIO write, port: 70: size 1"
>     ...
>     Parking CPU 3 (Cell: "linux-x86-demo")
> 
>     According to /proc/ioports, 70 has to do with the Realtime clock
>     (rtc0).  I was able to temporarily add the 70 mapping to the
>     non-root linux, but should it be there at all?  I tried to disable
>     RTC support in the guest kernel config.
> 
> 
>     2. On the next attempt, I then got further with a crash trying to
>     initialize Ser device ttyS0:
> 
>     "[    0.956146]Serial: 8250/16550 driver, 1 ports, IRQ sharing enabled"
>     "FATAL: Invalid PIO read, port: 3f9: size 1"
>     ...
>     Parking CPU 3 (Cell: "linux-x86-demo")
> 
>     I can get around that if I allow the non-root access in its pio
>     table, but then I have a problem above with the root linux randomly
>     trying to use it.
> 
> 
>     3. Now with the temporary adjustments to the non-root pio table
>     above I get here:
> 
>     "[    0.972399]clocksource:Switched to clocksource tsc"
>     "FATAL: Invalid PIO read, port: 87: size 1"
>     ...
>     Parking CPU 3 (Cell: "linux-x86-demo")
> 
>     According to proc/ioports this one has to do with "dma page
>     request". It isn't mapped in my root linux PIO or non-root linux array.
> 
> 
>     Aside from the serial conflict, it seems like these should remain
>     controlled by the root linux or hypervisor.   Do you use a
>     particular bare minimum x86 kernel config on your machine for the
>     guest to get around these?  I know Jan mentioned the
>     jailhouse-images project might have something, but I couldn't find
>     it digging around quick.
> 
>     Thanks to you both for your responses and patience.  I got the root
>     linux up and going on my own, but the non-root guest is proving to
>     be more difficult.
> 
>     Wayne
> 
> 
> 
>     On Tue, Jun 11, 2019 at 11:31 AM Ralf Ramsauer
>     <[email protected]
>     <mailto:[email protected]>> wrote:
> 
>         Hi,
> 
>         On 6/10/19 7:45 PM, Wayne wrote:
>         > Thank you for your responses Ralf and Jan.
>         >
>         > Yes, I have successfully gotten both the apic-demo and
>         tiny-demo cells
>         > to work on my system before attempting to load the non-root
>         linux.  I
>         > can see serial output from them.
>         >
>         > However, if I try to share the UART between root and inmate
>         for them I
>         > run into a crash on the hypervisor if the root linux attempts
>         to write
>         > to the UART (after creating/starting a demo).  Does the root
>         linux lose
>         > access once an inmate is created/started?  Or am I missing
>         something
>         > from my System config or tiny-demo config that allows them to
>         share?  I
>         > attached the crash in hypervisor_output.txt.
>         >
>         > Also, I noticed the tiny-demo output on the UART gets mirrored
>         on the
> 
>         Yes, according to your config,
>         JAILHOUSE_CELL_VIRTUAL_CONSOLE_ACTIVE is
>         set. This means that the guest will use the virtual console. The
>         virtual
>         console uses the hypervisor output which depends whatever is set
>         in your
>         system configuration. In your case the hypervisor uses 3f8.
> 
>         And additionally, the inmate also a valid .console set. Again,
>         3f8. This
>         means, it will use the console *and* the hypervisor debug
>         hypercall. In
>         your case, both outputs are routed to the same device which
>         explains the
>         mirroring.
> 
>         > Jailhouse virtual console.  Does that mean that its writing to the
>         > serial through the hypervisor and not directly accessing ttyS0
>         itself?
> 
>         Exactly.
> 
>         > If so, is there a way to create the cell to write ttyS0
>         directly as a
>         > test?  To see if it exhibits same behavior as the non-root linux.
> 
>         Sure, simply align the .address field of .console, and allow
>         access to
>         that port via .pio_bitmap.
> 
>         >
>         > FYI, I create the tiny-demo like this:
>         >
>         > jailhouse cell create configs/x86/tiny-demo.cell
>         > jailhouse cell load tiny-demo inmates/demos/x86/tiny-demo.cell  
>         > jailhouse cell start tiny-demo
>         >
>         > Going back to my original non-root linux question, I don't see any
>         > output when connected over ttyS0.  Its address is 0x3f8
>         ("serial 1") in
>         > the PIO, and that seems to work fine for the other simple
>         demos, minus
>         > the hypervisor crash issue above when sharing.  I know there
>         is the
>         > other "serial 2" port but I haven't tried to use that one.
> 
>         I see that port on our Dell server as well. It's present, but I
>         don't
>         know where it's connected to.
> 
>         Let me just summarise your issue:
> 
>         You only have one serial line available, right? From the root-cell's
>         POV, it's ttyS0 on 3f8.
> 
>         I would propose to share ttyS0 between the hypervisor and non-root
>         Linux. This means:
> 
>           - Don't let the root-cell use ttyS0. Remove any console=ttyS0
>             parameters from you commandline. Ensure that noone else accesses
>             ttyS0 (e.g., getty@ttyS0 or other friends)
> 
>           - Set 3f8 as debug_console in your master.c (seems you already
>         have)
> 
>           - Allow 3f8 access in the linux-demo.c (already set in the default
>             linux-demo
> 
>           - Disallow 2f8 access in linux-demo.c:
>         -               [ 0x2f8/8 ...  0x2ff/8] = 0, /* serial2 */
>         +               [ 0x2f8/8 ...  0x2ff/8] = -1, /* serial2 */
> 
>             I don't know how Linux enumerates serial devices, but this
>         ensures
>             that Linux won't see the unconnected serial line and map
>         ttyS0 to
>             3f8
> 
>         >
>         > non root linux launched with:
>         > /tools/jailhouse cell linux configs/x86/linux-x86.cell
>         > /boot/vmlinux-4.1.16-Guest -c "console=ttyS0,115200"
> 
>         Then, this should actually work...
> 
>         And if not, then console=jailhouse0 should work.
> 
>         >
>         > I can try the 4.19 siemens kernel and "next" branch for
>         jailhouse you
>         > suggested.  Do you think that combination will resolve the missing
>         > serial for the non-root linux?  Otherwise, did my kernel
>         config, system
>         > config, and non-root linux cell configs look OK?
> 
>         I didn't look at it, but we should at least - even if some flags are
>         still incorrect - see the "Uncompressing kernel..." thing.
> 
>         Wait -- one thing you could try: Deactivate CONFIG_EFI and
>         especially
>         CONFIG_EFI_STUBS. I'm not sure, but it could be that EFI_STUBS
>         change
>         the header format that our bootloader patches.
> 
>         >
>         > Thanks again for your help.
> 
>         No problem. But it's not yet working. ;-)
> 
>           Ralf
> 
>         >
>         >
>         > On Fri, Jun 7, 2019 at 5:30 PM Ralf Ramsauer
>         > <[email protected]
>         <mailto:[email protected]>
>         > <mailto:[email protected]
>         <mailto:[email protected]>>> wrote:
>         >
>         >     Hi Wayne,
>         >
>         >     On 6/7/19 10:04 PM, Wayne wrote:
>         >     > Hi Ralf,
>         >     >
>         >     > Thank you for your responses.  I have attached the
>         requested config
>         >     > files.  I am now just trying to use the same bzImage for
>         the root and
>         >     > the non-root linux node.
>         >
>         >     One question that you didn't answer: do apic-demo or
>         tiny-demo work?
>         >     They need to to have correct .console parameter set, so
>         ensure that
>         >     parameters are set if you run those demos in your
>         linux-demo cell. Just
>         >     compare it to tiny-demo.c or apic-demo.c
>         >
>         >     >
>         >     > Yes, I am using vanilla 4.16 because the documentation
>         indicated
>         >     that it
>         >     > is the first mainline release to officially support
>         Jailhouse Guest
>         >     > images.  Do you suggest that I use something else?
>         >
>         >     As Jan already wrote: Try to use Siemens' 4.19 branch.
>         >
>         >     >
>         >     > Right now i'm just trying to get some serial output from
>         the non-root
>         >     > Linux.  Hopefully, I have that configured correctly. 
>         Ideally, I would
>         >     > like to share the same serial console for the Root node
>         and non-root
>         >     > node eventually if possible.  I have been OK with using
>         the virtual
>         >     > console (jailhouse console -f) for the Hypervisor output.
>         >
>         >     In addition to Jan's comment:
>         >
>         >     Currently you only have access to the jailhouse console
>         via 'jailhouse
>         >     console' from your root cell. Imagine your root cell
>         crashes for some
>         >     reason. You will never see the fault reason, which makes
>         things hard to
>         >     debug.
>         >
>         >     I would suggest to configure the hypervisor to use the
>         serial console.
>         >     You can share the device with the non-root Linux, that's
>         no problem.
>         >
>         >     In this case, the non-root kernel's output will always be
>         printed to the
>         >     serial console. Directly, if you choose console=ttySx, and
>         indirectly
>         >     via the hypervisor if you choose console=jailhouse.
>         >
>         >     BTW: According to your config, your system is a PowerEdge,
>         and the
>         >     non-root cell gets both, 0x2f8 and 0x3f8. Are you sure
>         that ttyS1 is the
>         >     correct console that you are connected to?
>         >
>         >     Just mentioning this as we have a similar machine here,
>         and, afair, both
>         >     platform serial device are 'usable', but one ends in the
>         nirvana while
>         >     it is accessible.
>         >
>         >     Ah, and one last thing: try to switch to the current next
>         branch for
>         >     jailhouse. Jan just integrated a few patches from me that
>         might also be
>         >     relevant for your machine.
>         >
>         >     HTH
>         >       Ralf
>         >
>         >     >
>         >     > Wayne
>         >     >
>         >     > On Fri, Jun 7, 2019 at 9:10 AM Ralf Ramsauer
>         >     > <[email protected]
>         <mailto:[email protected]>
>         >     <mailto:[email protected]
>         <mailto:[email protected]>>
>         >     > <mailto:[email protected]
>         <mailto:[email protected]>
>         >     <mailto:[email protected]
>         <mailto:[email protected]>>>> wrote:
>         >     >
>         >     >     Hi,
>         >     >
>         >     >     On 6/7/19 2:28 PM, Wayne wrote:
>         >     >     > Hello,
>         >     >     >
>         >     >     > I am new to Linux development and Jailhouse.  I have
>         >     successfully
>         >     >     booted
>         >     >     > the Jailhouse Hypervisor and root cell on a bare
>         metal X86 Linux
>         >     >     system
>         >     >     > (No QEMU).  I am now trying to load a non-root
>         Linux cell
>         >     and I have a
>         >     >     > few questions.  Jailhouse accepts and starts my
>         non-root
>         >     linux cell
>         >     >     > configuration and I see it as "running" through the
>         >     "jailhouse cell
>         >     >     > list" command.  However, I don't see any serial
>         output from the
>         >     >     > "non-root linux" cell booting up.  I’m not sure
>         what the
>         >     non-root node
>         >     >     > is doing at this point.
>         >     >
>         >     >     Ok, first of all, can you see any output from
>         Jailhouse's demo
>         >     inmates
>         >     >     (e.g., tiny-demo or apic-demo)?
>         >     >
>         >     >     >
>         >     >     >                My root node is a 4.16 kernel
>         configured this
>         >     way:
>         >     >     >                               1.
>         CONFIG_JAILHOUSE_GUEST is
>         >     not set
>         >     >     >                               2. CONFIG_SERIO=y
>         >     >     >                               3.
>         >     CONFIG_SERIAL_8250_RUNTIME_UARTS=4
>         >     >     >
>         >     >     >                My non-root node is a 4.16 kernel
>         configured
>         >     this way:
>         >     >     >                               1.
>         CONFIG_JAILHOUSE_GUEST=y
>         >     >     >                               2. CONFIG_SERIO=m
>         (can't seem
>         >     to disable
>         >     >     > completely in my config for 4.16)
>         >     >     >                               3.
>         >     CONFIG_SERIAL_8250_RUNTIME_UARTS=1
>         >     >
>         >     >     Could you please provide a full .config? What branch
>         are you
>         >     exactly
>         >     >     using? Vanilla 4.16?
>         >     >
>         >     >     Please attach your system config and your non-root linux
>         >     config as well.
>         >     >
>         >     >     You may also want to try
>         https://github.com/siemens/linux . See
>         >     >     jailhouse-enabling branches for some releases.
>         >     >
>         >     >     >
>         >     >     > In general, do the kernel config settings have to
>         match between
>         >     >     the root
>         >     >     > node and non-linux or is the above fine?
>         >     >
>         >     >     No, they do not have to be the same, but they can.
>         Still, an
>         >     analysis
>         >     >     requires your .config.
>         >     >
>         >     >     >
>         >     >     > The vmlinux-4.1.16-Guest bzImage is approx 7MB,
>         and the
>         >     inmate node is
>         >     >     > allocated ~75MB of RAM.
>         >     >     >
>         >     >     > I have a single UART, so I have configured the
>         root cell
>         >     system config
>         >     >     > to output to the virtual hypervisor console:
>         >     >
>         >     >     Wait... You configured your root-cell to use the
>         hypervisor debug
>         >     >     console? How? It's only available once the hypervisor is
>         >     enabled. How
>         >     >     should this work?
>         >     >
>         >     >     But let's have a look at your configuration first.
>         >     >
>         >     >     So you want to:
>         >     >       - Have the UART (0x3f8) available in the non-root cell
>         >     >       - Use 0x3f8 as hypervisor debug console as well
>         >     >       - No console for root-cell
>         >     >
>         >     >     Did I get this right?
>         >     >
>         >     >       Ralf
>         >     >
>         >     >     >
>         >     >     > .flags = JAILHOUSE_SYS_VIRTUAL_DEBUG_CONSOLE,
>         >     >     >
>         >     >     > .debug_console = {
>         >     >     > .type = JAILHOUSE_CON_TYPE_NONE,
>         >     >     > },
>         >     >     >
>         >     >     > and I have configured the non-root linux cell to
>         output to
>         >     the UART:
>         >     >     >
>         >     >     > (Added serial 0x3f8 to pio bitmap for non-root
>         linux) and
>         >     started the
>         >     >     > node with this:
>         >     >     >
>         >     >     > ./tools/jailhouse cell linux
>         configs/x86/linux-x86.cell
>         >     >     > /boot/vmlinux-4.1.16-Guest -c "console=ttyS0,115200"
>         >     >     > (Note I also tried "console=jailhouse" in the
>         command above,
>         >     and that
>         >     >     > produces the same result)
>         >     >     >
>         >     >     > I then see the following on my hypervisor console
>         >     (./tools/jailhouse
>         >     >     > console -f):
>         >     >     >
>         >     >     > Created cell "linux-x86-demo"
>         >     >     > ...
>         >     >     > Cell "linux-x86-demo" can be loaded
>         >     >     > Started cell "linux-x86-demo"
>         >     >     >
>         >     >     > After a little while I do get a parked CPU error
>         on the root
>         >     node,
>         >     >     looks
>         >     >     > like its trying to do something with the UART as well:
>         >     >     > FATAL: Invalid PIO read, port: 3fe size: 1
>         >     >     >
>         >     >     > I would expect something to pop out on the UART
>         from the
>         >     non-root
>         >     >     linux
>         >     >     > node first.  Note that root node has serial 0x3f8
>         disabled
>         >     in its pio
>         >     >     > bitmap.
>         >     >     >
>         >     >     > I verifed that the UART is functioning by allowing the
>         >     hypervisor to
>         >     >     > print to it and also performed an echo test over
>         ttyS0.
>         >     >     >
>         >     >     > I have tried several configurations of
>         kernel.....including your
>         >     >     current
>         >     >     > "queues/jailhouse" branch head kernel for the
>         non-root node,
>         >     along
>         >     >     with
>         >     >     > the kernel config for 4.7 posted in this thread
>         below (but I
>         >     get same
>         >     >     > result as above when I start it, no kernel output):
>         >     >     >              
>         >     >     >
>         >     >   
>         >   
>            
> "https://groups.google.com/forum/#!searchin/jailhouse-dev/Re$3A$20Failed$20to$20boot$20jailhouse%7Csort:relevance/jailhouse-dev/M7UO89XFIk0/Qi40DDuMBAAJ";.
>         >     >     >
>         >     >     > Any information you can provide to me will be
>         helpful.  I'm
>         >     not sure
>         >     >     > what might be going wrong here.
>         >     >     >
>         >     >     > Thanks,
>         >     >     > Wayne
>         >     >     >
>         >     >     > --
>         >     >     > You received this message because you are
>         subscribed to the
>         >     Google
>         >     >     > Groups "Jailhouse" group.
>         >     >     > To unsubscribe from this group and stop receiving
>         emails
>         >     from it, send
>         >     >     > an email to
>         [email protected]
>         <mailto:jailhouse-dev%[email protected]>
>         >     <mailto:jailhouse-dev%[email protected]
>         <mailto:jailhouse-dev%[email protected]>>
>         >     >     <mailto:jailhouse-dev%[email protected]
>         <mailto:jailhouse-dev%[email protected]>
>         >     <mailto:jailhouse-dev%[email protected]
>         <mailto:jailhouse-dev%[email protected]>>>
>         >     >     > <mailto:[email protected]
>         <mailto:jailhouse-dev%[email protected]>
>         >     <mailto:jailhouse-dev%[email protected]
>         <mailto:jailhouse-dev%[email protected]>>
>         >     >     <mailto:jailhouse-dev%[email protected]
>         <mailto:jailhouse-dev%[email protected]>
>         >     <mailto:jailhouse-dev%[email protected]
>         <mailto:jailhouse-dev%[email protected]>>>>.
>         >     >     > To view this discussion on the web visit
>         >     >     >
>         >     >   
>         >   
>           
> https://groups.google.com/d/msgid/jailhouse-dev/CA%2B%2BKhc2iKk1J6%2B0huh5__dS4HyujXzV9r%2BLbKLzuVZ4K3Bt5eA%40mail.gmail.com
>         >     >     >
>         >     >   
>         >   
>           
> <https://groups.google.com/d/msgid/jailhouse-dev/CA%2B%2BKhc2iKk1J6%2B0huh5__dS4HyujXzV9r%2BLbKLzuVZ4K3Bt5eA%40mail.gmail.com?utm_medium=email&utm_source=footer>.
>         >     >     > For more options, visit
>         https://groups.google.com/d/optout.
>         >     >
>         >
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Jailhouse" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected]
> <mailto:[email protected]>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jailhouse-dev/CA%2B%2BKhc0O2zSeuLLY3MaeRW7cQrWbq-6Y2BHJg%2Bx_j6nk%3DECa_A%40mail.gmail.com
> <https://groups.google.com/d/msgid/jailhouse-dev/CA%2B%2BKhc0O2zSeuLLY3MaeRW7cQrWbq-6Y2BHJg%2Bx_j6nk%3DECa_A%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/ad13aaa6-41ac-14fd-33fe-fa4f6dfc789e%40oth-regensburg.de.
For more options, visit https://groups.google.com/d/optout.

Reply via email to