We were sticking to hardcoded 256 entries there. We now scale better
for systems with more PCI device entries.

Signed-off-by: Gustavo Lima Chaves <[email protected]>
---
 tools/jailhouse-config-create | 14 ++++++++++++--
 tools/root-cell-config.c.tmpl |  2 +-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/tools/jailhouse-config-create b/tools/jailhouse-config-create
index b0b9557..ce2affc 100755
--- a/tools/jailhouse-config-create
+++ b/tools/jailhouse-config-create
@@ -21,6 +21,7 @@
 from __future__ import print_function
 import sys
 import os
+import math
 import re
 import argparse
 import struct
@@ -639,6 +640,7 @@ def parse_iomem(pcidevices):
 
 
 def parse_pcidevices():
+    int_src_cnt = 0
     devices = []
     caps = []
     basedir = '/sys/bus/pci/devices'
@@ -660,8 +662,9 @@ def parse_pcidevices():
                     d.caps[0].comments.append(str(d))
                     d.caps_start = len(caps)
                     caps.extend(d.caps)
+            int_src_cnt += max(d.num_msi_vectors, d.num_msix_vectors)
             devices.append(d)
-    return (devices, caps)
+    return (devices, caps, int_src_cnt)
 
 
 def parse_kernel_cmdline():
@@ -1146,7 +1149,13 @@ if jh_enabled == '1':
           file=sys.stderr)
     sys.exit(1)
 
-(pcidevices, pcicaps) = parse_pcidevices()
+IOAPIC_MAX_PINS = 120
+int_src_count = IOAPIC_MAX_PINS
+
+(pcidevices, pcicaps, cnt) = parse_pcidevices()
+
+int_src_count += cnt
+vtd_interrupt_limit = 2**math.ceil(math.log(int_src_count, 2))
 
 product = [input_readline('/sys/class/dmi/id/sys_vendor',
                           True).rstrip(),
@@ -1209,6 +1218,7 @@ kwargs = {
     'cpucount': cpucount,
     'irqchips': ioapics,
     'pm_timer_base': pm_timer_base,
+    'vtd_interrupt_limit': vtd_interrupt_limit,
     'mmconfig': mmconfig,
     'iommu_units': iommu_units,
     'debug_console': debug_console,
diff --git a/tools/root-cell-config.c.tmpl b/tools/root-cell-config.c.tmpl
index 0d2ea29..100429f 100644
--- a/tools/root-cell-config.c.tmpl
+++ b/tools/root-cell-config.c.tmpl
@@ -87,7 +87,7 @@ struct {
                        .pci_mmconfig_end_bus = ${hex(mmconfig.end_bus)},
                        .x86 = {
                                .pm_timer_address = ${hex(pm_timer_base)},
-                               .vtd_interrupt_limit = 256,
+                               .vtd_interrupt_limit = 
${int(vtd_interrupt_limit)},
                                % if iommu_units:
                                .iommu_units = {
                                        % for unit in iommu_units:
-- 
2.9.4

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