Am Wed, 17 May 2017 12:45:19 +0200 schrieb "[ext] Henning Schild" <henning.sch...@siemens.com>:
> Am Wed, 17 May 2017 02:13:24 -0700 > schrieb jonas <jo...@retotech.se>: > > > Den tisdag 16 maj 2017 kl. 16:54:35 UTC+2 skrev Henning Schild: > > > You do not need to know the number, the uio-driver knows it. And > > > the bare metal inmate does not need to know it since it is just > > > writing to a register to trigger it. > > > It looks like it is working. After loading the driver you should > > > see a new entry in /proc/interrupts. And when the inmate runs you > > > should see the counter going up. > > > > Unfortunately not (just yet...). I've commented out the part where > > the bare-metal ivshmem-demo inmate writes to the IO-mapped ivshmem > > register of the virtual PCI device. The last thing I see in the > > inmate terminal window (after adding the printout prior to writing > > to the ivshmem register area) is: IVSHMEM: 00:00.0 sending IRQ (by > > writing to 0x7c00000c) > > > > In the terminal window of the Linux root-cell I see: > > FATAL: Invalid ivshmem register read, number 04 > > FATAL: forbidden access (exception class 0x24) > > pc=0xbf00b018 cpsr=0x600c0193 hsr=0x93800006 > > r0=0x0000007c r1=0xdd4f3600 r2=0x00010001 r3=0xdf948000 > > r4=0xc08d0000 r5=0xdd144290 r6=0xc0959325 r7=0x0000007c > > r8=0x0000007c r9=0xc08a3a40 r10=0x00000000 r11=0xc08d1e0c > > r12=0xc08d1e10 r13=0xc08d1e00 > > r14=0xc03d4dfc Parking CPU 0 (Cell: "Banana-Pi") > > Seems like the Intx path was never really tested with the uio driver. > I think the problem is caused be the interrupt handler > ivshmem_handler in uio_ivshmem.c > It is trying to read the IntrStatus register which jailhouse does not > implement. Just make the function a pure "return IRQ_HANDLED;" and you > should get further. Actually you error indicates that the interrupt > was received because Linux ran the basic uio handler. I do not remember why the Status register is not implemented by jailhouse, maybe Jan does. Or i would have to read up in the archive and see whether it was ever part of the patchsets that introduced ivshmem. I just pushed a patch to the jailhouse-next branch, it compiles but i did not test it .... You could give it a try. Henning > > If i comment out the line in the bare-metal inmate where the > > register is written (in ivshmem_demo.c:send_irq(), > > mmio_write32(d->registers + 3, 1);), all seems to be well and I am > > able to verify that the shared memory has been updated by the > > bare-metal inmate from within the root cell. I've also been able to > > verify that the contents of the shared memory area is picked up by > > the bare-metal inmate. No interrupts from the inmate to the root > > cell though (of course). > > > > Since I'm able to access the virtual PCI device register area using > > mmio_read32() from the inmate, it looks like the area has not been > > mapped for write access (by Jailhouse)? Am I missing some PCI device > > configuration entry? > > > > I tried to find where the FATAL:-printouts come from and found > > traces to jailhouse/hypervisor/ivshmem.c:ivshmem_register_mmio() > > and jailhouse/hypervisor/arch/arm/traps.c:arch_handle_trap(). I > > don't know what to do with this information at the moment. Is it > > possible to dump some call-stack from the hypervisor when fatal > > errors occur? > > The function ivshmem_register_mmio was the right place to look. Now if > you look at the error you see that linux tried to read register 4. And > that register is not handled by jailhouse, have a look at > IVSHMEM_REG_* in ivshmem.c. > > > > Getting an IRQ sent to the inmate will be more tricky, you will > > > need to program the GIC where the x86 code does "int_set_handler". > > > The gic-demo should give a clue. > > > > Yep, I've started looking at this example. Thanks for verifying that > > this is the way forward. > > > > > > > > > Does the uio_ivshmem driver take care of generating interrupts > > > > from the root-cell to the bare metal cell, or do I need to > > > > modify this as well? > > > > > > The uio-driver does not actually do anything. It just makes the > > > ressources of the "hardware" visible to userland. I suggest you > > > have a look at the jailhouse specific README. > > > https://github.com/henning-schild/ivshmem-guest-code/blob/jailhouse/README.jailhouse > > > If you did not come across this file yet you might be on the wrong > > > branch of ivshmem-guest-code. > > > > I've seen it. I'm on the jailhouse branch of ivshmem-guest-code. > > > > Thanks - Jonas > -- 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 jailhouse-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.