int loader_argc = 0;
char **loader_argv = NULL;
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(xmlopt)))
goto cleanup;
/* Initialize defaults. */
virDomainDef *
-virDomainDefNew(void)
+virDomainDefNew(virDomainXMLOption *xmlopt)
{
virDomainDef *ret;
ret->mem.soft_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
ret->mem.swap_hard_limit = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
+ if (xmlopt && xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI)
+ ret->scsiBusMaxUnit = SCSI_WIDE_BUS_MAX_CONT_UNIT;
+ else
+ ret->scsiBusMaxUnit = SCSI_NARROW_BUS_MAX_CONT_UNIT;
+
return ret;
error:
/* Find out the next usable "unit" of a specific controller */
static int
virDomainControllerSCSINextUnit(const virDomainDef *def,
- unsigned int max_unit,
unsigned int controller)
{
size_t i;
- for (i = 0; i < max_unit; i++) {
+ for (i = 0; i < def->scsiBusMaxUnit; i++) {
/* Default to assigning addresses using bus = target = 0 */
const virDomainDeviceDriveAddress addr = {controller, 0, 0, i};
}
-#define SCSI_WIDE_BUS_MAX_CONT_UNIT 16
-#define SCSI_NARROW_BUS_MAX_CONT_UNIT 7
-
static void
-virDomainHostdevAssignAddress(virDomainXMLOption *xmlopt,
+virDomainHostdevAssignAddress(virDomainXMLOption *xmlopt G_GNUC_UNUSED,
const virDomainDef *def,
virDomainHostdevDef *hostdev)
{
int next_unit = 0;
int controller = 0;
- unsigned int max_unit;
-
- if (xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI)
- max_unit = SCSI_WIDE_BUS_MAX_CONT_UNIT;
- else
- max_unit = SCSI_NARROW_BUS_MAX_CONT_UNIT;
/* NB: Do not attempt calling virDomainDefMaybeAddController to
* automagically add a "new" controller. Doing so will result in
* hostdev being added to the as yet to be created controller.
*/
do {
- next_unit = virDomainControllerSCSINextUnit(def, max_unit, controller);
+ next_unit = virDomainControllerSCSINextUnit(def, controller);
if (next_unit < 0)
controller++;
} while (next_unit < 0);
}
int
-virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt,
+virDomainDiskDefAssignAddress(virDomainXMLOption *xmlopt G_GNUC_UNUSED,
virDomainDiskDef *def,
const virDomainDef *vmdef)
{
def->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE;
- if (xmlopt->config.features & VIR_DOMAIN_DEF_FEATURE_WIDE_SCSI) {
+ if (vmdef->scsiBusMaxUnit > SCSI_NARROW_BUS_MAX_CONT_UNIT) {
/* For a wide SCSI bus we define the default mapping to be
* 16 units per bus, 1 bus per controller, many controllers.
* Unit 7 is the SCSI controller itself. Therefore unit 7
* cannot be assigned to disks and is skipped.
*/
- controller = idx / 15;
- unit = idx % 15;
+ controller = idx / (vmdef->scsiBusMaxUnit - 1);
+ unit = idx % (vmdef->scsiBusMaxUnit - 1);
/* Skip the SCSI controller at unit 7 */
if (unit >= 7)
g_autofree xmlNodePtr *nodes = NULL;
g_autofree char *tmp = NULL;
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(xmlopt)))
return NULL;
if (virDomainDefParseIDs(def, ctxt, flags, &uuid_generated) < 0)
virTristateSwitch packed;
};
+
+#define SCSI_WIDE_BUS_MAX_CONT_UNIT 16
+#define SCSI_NARROW_BUS_MAX_CONT_UNIT 7
+
+
/*
* Guest VM main configuration
*
callbacks failed for a non-critical reason
(was not able to fill in some data) and thus
should be re-run before starting */
+
+ unsigned int scsiBusMaxUnit;
};
virDomainNetDef *
virDomainNetDefNew(virDomainXMLOption *xmlopt);
-virDomainDef *virDomainDefNew(void);
+virDomainDef *virDomainDefNew(virDomainXMLOption *xmlopt);
void virDomainObjAssignDef(virDomainObj *domain,
virDomainDef *def,
virCheckFlags(VIR_DOMAIN_XML_COMMON_FLAGS, NULL);
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(priv->xmlopt)))
return NULL;
virUUIDFormat(domain->uuid, uuid_string);
virUUIDFormat(domain->uuid, uuid_string);
/* get domain definition */
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(priv->xmlopt)))
return -1;
/* get domain device definition */
* created.
*/
if ((vm = virDomainObjListFindByID(driver->domains, 0)) == NULL) {
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(driver->xmlopt)))
goto cleanup;
def->id = 0;
{
virDomainDef *def = NULL;
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(xmlopt)))
return NULL;
def->virtType = VIR_DOMAIN_VIRT_XEN;
{
virDomainDef *def = NULL;
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(xmlopt)))
return NULL;
def->virtType = VIR_DOMAIN_VIRT_XEN;
if (!(properties = virConfReadString(config, VIR_CONF_FLAG_LXC_FORMAT)))
return NULL;
- if (!(vmdef = virDomainDefNew()))
+ if (!(vmdef = virDomainDefNew(xmlopt)))
goto error;
if (virUUIDGenerate(vmdef->uuid) < 0) {
}
*line++ = '\0';
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(driver->xmlopt)))
goto cleanup;
def->virtType = VIR_DOMAIN_VIRT_OPENVZ;
if (!(xmlopt = virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) ||
!(proc->vm = virDomainObjNew(xmlopt)) ||
- !(proc->vm->def = virDomainDefNew()))
+ !(proc->vm->def = virDomainDefNew(xmlopt)))
goto cleanup;
proc->vm->pid = proc->pid;
if (openSessionForMachine(data, dom->uuid, &iid, &machine) < 0)
goto cleanup;
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(data->xmlopt)))
goto cleanup;
gVBoxAPI.UIMachine.GetAccessible(machine, &accessible);
return ret;
VBOX_IID_INITIALIZE(&iid);
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(data->xmlopt)))
return ret;
def->os.type = VIR_DOMAIN_OSTYPE_HVM;
return ret;
VBOX_IID_INITIALIZE(&iid);
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(data->xmlopt)))
return ret;
def->os.type = VIR_DOMAIN_OSTYPE_HVM;
goto cleanup;
if (!(def = virDomainSnapshotDefNew()) ||
- !(def->parent.dom = virDomainDefNew()))
+ !(def->parent.dom = virDomainDefNew(data->xmlopt)))
goto cleanup;
defdom = def->parent.dom;
def->parent.name = g_strdup(snapshot->name);
goto cleanup;
/* Allocate domain def */
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(xmlopt)))
goto cleanup;
def->virtType = VIR_DOMAIN_VIRT_VMWARE;
PRL_HANDLE job;
char uuidstr[VIR_UUID_STRING_BRACED_BUFLEN];
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(driver->xmlopt)))
goto error;
if (!(def->name = prlsdkGetStringParamVar(PrlVmCfg_GetName, sdkdom)))
}
/* create a fake definition and fill it with disks */
- if (!(fakedef = virDomainDefNew()))
+ if (!(fakedef = virDomainDefNew(xmlopt)))
return -1;
fakedef->ndisks = backup->ndisks + 1;
.caps = openvzCapsInit(),
};
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(driver.xmlopt)))
goto cleanup;
def->os.init = g_strdup("/sbin/init");
VIR_DOMAIN_DEF_PARSE_STATUS)))
return -1;
- if (!(vmdef = virDomainDefNew()))
+ if (!(vmdef = virDomainDefNew(data->driver->xmlopt)))
return -1;
virDomainDiskInsert(vmdef, disk);
test->vm = virDomainObjNew(xmlopt);
if (!test->vm)
goto error;
- if (!(test->vm->def = virDomainDefNew()))
+ if (!(test->vm->def = virDomainDefNew(xmlopt)))
goto error;
}
virDomainDef *def;
virSecurityLabelDef *secdef = NULL;
- if (!(def = virDomainDefNew()))
+ if (!(def = virDomainDefNew(NULL)))
goto error;
def->virtType = VIR_DOMAIN_VIRT_KVM;