const char *libxl_defbool_to_string(libxl_defbool b);
+#define LIBXL_NR_SPIS_DEFAULT (~(uint32_t)0)
#define LIBXL_TIMER_MODE_DEFAULT -1
#define LIBXL_MEMKB_DEFAULT ~0ULL
libxl_domain_config *d_config,
struct xen_domctl_createdomain *config)
{
- uint32_t nr_spis = 0;
+ uint32_t nr_spis = 0, cfg_nr_spis = d_config->b_info.arch_arm.nr_spis;
unsigned int i;
uint32_t vuart_irq, virtio_irq = 0;
bool vuart_enabled = false, virtio_enabled = false;
LOG(DEBUG, "Configure the domain");
- if (nr_spis > d_config->b_info.arch_arm.nr_spis) {
- LOG(ERROR, "Provided nr_spis value is too small (minimum required %u)\n",
- nr_spis);
- return ERROR_FAIL;
+ /* Check if a user provided a value or not */
+ if (cfg_nr_spis != LIBXL_NR_SPIS_DEFAULT) {
+ if (nr_spis > cfg_nr_spis) {
+ LOG(ERROR, "Provided nr_spis value is too small (minimum required %u)\n",
+ nr_spis);
+ return ERROR_FAIL;
+ }
+ config->arch.nr_spis = cfg_nr_spis;
+ } else {
+ config->arch.nr_spis = nr_spis;
}
- config->arch.nr_spis = max(nr_spis, d_config->b_info.arch_arm.nr_spis);
LOG(DEBUG, " - Allocate %u SPIs", config->arch.nr_spis);
switch (d_config->b_info.arch_arm.gic_version) {
("arch_arm", Struct(None, [("gic_version", libxl_gic_version),
("vuart", libxl_vuart_type),
("sve_vl", libxl_sve_type),
- ("nr_spis", uint32),
+ ("nr_spis", uint32, {'init_val': 'LIBXL_NR_SPIS_DEFAULT'}),
])),
("arch_x86", Struct(None, [("msr_relaxed", libxl_defbool),
])),