Re: [PATCH v3] config_tool: add MAX_PCI_BUS_NUM in UI

Junjie Mao

Yuanyuan Zhao <yuanyuan.zhao@...> writes:

Add MAX_PCI_BUS_NUM in UI for user.
If user defined MAX_PCI_BUS_NUM is greater than the value
calculated by board.xml, use user defined MAX_PCI_BUS_NUM.

1.Remove minoccurs.
2.Add assertion for user default MAX_PCI_BUS_NUM error.

2.Set default as 0.

Signed-off-by: Yuanyuan Zhao <yuanyuan.zhao@...>
misc/config_tools/schema/config.xsd | 5 +++++
misc/config_tools/static_allocators/ | 9 ++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/misc/config_tools/schema/config.xsd b/misc/config_tools/schema/config.xsd
index ddea58c22..4cb164725 100644
--- a/misc/config_tools/schema/config.xsd
+++ b/misc/config_tools/schema/config.xsd
@@ -172,6 +172,11 @@ If your VM is not a security VM, leave this option unchecked. </xs:documentation
+ <xs:element name="MAX_PCI_BUS_NUM" type="xs:integer" default="0">
+ <xs:annotation acrn:views="">
+ <xs:documentation>Specify the maximum number of PCI buses. The default value is calculated from the board configuration file. Integer from 1 to 256.</xs:documentation>
+ </xs:annotation>
+ </xs:element>
<xs:element name="MAX_PCI_DEV_NUM" default="96">
<xs:annotation acrn:title="Max PCI devices" acrn:views="advanced">
<xs:documentation>Specify the maximum number of PCI devices. This impacts the amount of memory used to maintain information about these PCI devices. The default value is calculated from the board configuration file. If you have PCI devices that were not detected by the Board Inspector, you may need to change this maximum value.</xs:documentation>
diff --git a/misc/config_tools/static_allocators/ b/misc/config_tools/static_allocators/
index 141afca9c..a83cbfc31 100644
--- a/misc/config_tools/static_allocators/
+++ b/misc/config_tools/static_allocators/
@@ -5,6 +5,7 @@
# SPDX-License-Identifier: BSD-3-Clause

+from struct import calcsize
Why importing this module?

import common

def powerof2_roundup(value):
@@ -22,5 +23,11 @@ def create_max_ir_entries(scenario_etree, allocation_etree):

def fn(board_etree, scenario_etree, allocation_etree):
pci_bus_nums = board_etree.xpath("//bus[@type='pci']/@address")
- common.append_node("/acrn-config/platform/MAX_PCI_BUS_NUM", hex(max(map(lambda x: int(x, 16), pci_bus_nums)) + 1), allocation_etree)
+ calc_pci_bus_nums = (max(map(lambda x: int(x, 16), pci_bus_nums)) + 1)
+ user_def_pci_bus_nums = common.get_node(f"//MAX_PCI_BUS_NUM/text()", scenario_etree)
+ if user_def_pci_bus_nums == '0':
+ common.append_node("/acrn-config/platform/MAX_PCI_BUS_NUM", hex(calc_pci_bus_nums), allocation_etree)
+ else:
+ assert calc_pci_bus_nums <= int(user_def_pci_bus_nums), f"MAX_PCI_BUS_NUM should be greater than {calc_pci_bus_nums}"
To print critical errors, please initialize the logging module in and use logging.error instead of using assertions which may
print a backtrace that is not that helpful in this case. Also you may
print user_def_pci_bus_nums as well for diagnosing purpose.

Best Regards
Junjie Mao

+ common.append_node("/acrn-config/platform/MAX_PCI_BUS_NUM", hex(int(user_def_pci_bus_nums)), allocation_etree)
create_max_ir_entries(scenario_etree, allocation_etree)

Join to automatically receive all group messages.