diff --git a/src/vmm/LibVirtDriverKVM.cc b/src/vmm/LibVirtDriverKVM.cc
index e4c919ca62..a841e341d1 100644
--- a/src/vmm/LibVirtDriverKVM.cc
+++ b/src/vmm/LibVirtDriverKVM.cc
@@ -1088,6 +1088,14 @@ int LibVirtDriver::deployment_description_kvm(
num = vm->get_template_attribute("DISK", disk);
+ int sata_index = 0;
+ string sata_controllers;
+
+ if (machine.find("q35") != std::string::npos)
+ {
+ sata_index = 1;
+ }
+
for (int i=0; i < num ;i++)
{
type = disk[i]->vector_value("TYPE");
@@ -1562,22 +1570,44 @@ int LibVirtDriver::deployment_description_kvm(
file << "\t\t\t" << endl;
}
- // ---- SCSI target ----
-
+ // ---- Disk target ----
+ // * SATA bus
+ // - requires a controller per disk as it requires bus=0 and target=0
+ // - q35 adds ACHI controller in slot 0x1f function 2 (used for context)
+ // - A controller will be added for each disk starting from 1 if q35
+ // * SCSI bus
+ // - target is based on dev target to have a predictable order
if ( target[0] == 's' && target[1] == 'd' )
{
int target_number = target[2] - 'a';
- if ( target_number >= 0 && target_number < 256 )
+ if ( disk_bus == "sata" )
+ {
+ sata_controllers += ("\t\t