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.