On 2016-11-22 21:43, Intelsat wrote:
> Hi,
> 
> I tried to get the output of the initialization via the vga console and did 
> so as described in the documentation. I added the parameters to the boot 
> cmdline, restarted ubuntu, opened a console and typed:
> 
> #vbetool vbemode set 3 && jailhouse enable configs/sysconfig.cell
> 
> What I got is this:
> 
> ....
> Adding PCI device ff:06.3 to cell "RootCell"
> FATAL: Unsupported MSI/MSI-X state, device 00:1b.0, cap 5
> Stopping CPU 0 (Cell: "RootCell")
> 
> I restarted my linux to see what kind of device this is and what the 
> system.cell configuration says:
> 
> sysconfig.cell:
> 
> ....
> /* PCIDevice: 00:1b.0 */
> {
>     .type = JAILHOUSE_PCI_TYPE_DEVICE,
>     .iommu = 1,
>     .domain = 0xd8,
>     .bar_mask = {
>            0xffffc000, 0xffffffff, 0x00000000,
>            0x00000000, 0x00000000, 0x00000000,
>     },
>     .caps_start = 26,
>     .num_caps = 5,
>     .num_msi_vectors = 1,
>     .msi_64bits = 1,
>     .num_msix_vectors = 0,
>     .msix_region_size = 0x0,
>     .msix_address = 0x0,
> },
> ....
> 
> lspci:
> 
> 00:1b.0 Audio device: Intel Corporation 82801J1 (ICH10 Family) HD Audio 
> Controller
> 
> I couldn't disable the PCI device, tried it in BIOS, but there is no option 
> for it. So does that mean my hardware is incompatible with Jailhouse or is 
> there any chance to get rid of that error?

Interesting. Haven't seen such kind of issues for a long time. Let's
look into more details:

diff --git a/hypervisor/arch/x86/pci.c b/hypervisor/arch/x86/pci.c
index c2b54ff..97f2af1 100644
--- a/hypervisor/arch/x86/pci.c
+++ b/hypervisor/arch/x86/pci.c
@@ -338,6 +338,7 @@ int arch_pci_update_msi(struct pci_device *device,
 
        for (n = 0; n < vectors; n++) {
                irq_msg = pci_translate_msi_vector(device, n, vectors, msi);
+               printk("%s:%d: irq_msq %llx %ld, ir: %d\n", __FUNCTION__, 
__LINE__, *(u64 *)&irq_msg, sizeof(irq_msg), 
iommu_cell_emulates_ir(device->cell));
                result = iommu_map_interrupt(device->cell, bdf, n, irq_msg);
                // HACK for QEMU
                if (result == -ENOSYS) {
diff --git a/hypervisor/arch/x86/vtd.c b/hypervisor/arch/x86/vtd.c
index 55435f0..ef522ad 100644
--- a/hypervisor/arch/x86/vtd.c
+++ b/hypervisor/arch/x86/vtd.c
@@ -956,6 +956,7 @@ int iommu_map_interrupt(struct cell *cell, u16 device_id, 
unsigned int vector,
        int base_index;
 
        base_index = vtd_find_int_remap_region(device_id);
+       printk("%s:%d: base_index %d, vector: %d, limit: %d\n", __FUNCTION__, 
__LINE__, base_index, vector, system_config->interrupt_limit);
        if (base_index < 0)
                return base_index;
 
@@ -964,6 +965,7 @@ int iommu_map_interrupt(struct cell *cell, u16 device_id, 
unsigned int vector,
                return -ERANGE;
 
        irte = int_remap_table[base_index + vector];
+       printk("%s:%d: irte %llx-%llx\n", __FUNCTION__, __LINE__, irte.raw[0], 
irte.raw[1]);
        if (!irte.field.assigned || irte.field.sid != device_id)
                return -ERANGE;
 

Meanwhile, you may get away with unbinding the driver of that device
prior to enabling Jailhouse + removing its entry from the sysconfig PCI
table. But that may also just get you to the next device with similar
issues.

Jan

-- 
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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to