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")

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?

> 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.

Reply via email to