@@ -247,7 +247,55 @@ func (qc *QemuContext) AddDisk(ctx *hypervisor.VmContext, sourceType string, blo
247247		}
248248	}
249249
250- 	newDiskAddSession (ctx , qc , filename , format , id , result )
250+ 	commands  :=  make ([]* QmpCommand , 2 )
251+ 	devName  :=  scsiId2Name (id )
252+ 	if  ! blockInfo .Dax  {
253+ 		commands [0 ] =  & QmpCommand {
254+ 			Execute : "human-monitor-command" ,
255+ 			Arguments : map [string ]interface {}{
256+ 				"command-line" : "drive_add dummy file="  + 
257+ 					filename  +  ",if=none,id="  +  "drive"  +  strconv .Itoa (id ) +  ",format="  +  format  +  ",cache=writeback" ,
258+ 			},
259+ 		}
260+ 		commands [1 ] =  & QmpCommand {
261+ 			Execute : "device_add" ,
262+ 			Arguments : map [string ]interface {}{
263+ 				"driver" : "scsi-hd" , "bus" : "scsi0.0" , "scsi-id" : strconv .Itoa (id ),
264+ 				"drive" : "drive"  +  strconv .Itoa (id ), "id" : "scsi-disk"  +  strconv .Itoa (id ),
265+ 			},
266+ 		}
267+ 	} else  {
268+ 		// get the size 
269+ 		fi , e  :=  os .Stat (filename )
270+ 		if  e  !=  nil  {
271+ 			result  <-  & hypervisor.DeviceFailed {}
272+ 			return 
273+ 		}
274+ 		size  :=  fi .Size ()
275+ 		// compose qmp commands 
276+ 		// hmp: object_add memory-backend-file,id=mem2,share=off,mem-path=/path/to/dax.img,size=10G 
277+ 		// hmp: device_add nvdimm,id=nvdimm2,memdev=mem2 
278+ 		commands [0 ] =  & QmpCommand {
279+ 			Execute : "human-monitor-command" ,
280+ 			Arguments : map [string ]interface {}{
281+ 				"command-line" : "object_add memory-backend-file,id=mem"  +  strconv .Itoa (blockInfo .PmemId ) + 
282+ 					",share=on,mem-path="  +  filename  +  ",size="  +  strconv .FormatInt (size , 10 ),
283+ 			},
284+ 		}
285+ 		commands [1 ] =  & QmpCommand {
286+ 			Execute : "device_add" ,
287+ 			Arguments : map [string ]interface {}{
288+ 				"driver" : "nvdimm" , "memdev" : "mem"  +  strconv .Itoa (blockInfo .PmemId ), "id" : "nvdimm"  +  strconv .Itoa (blockInfo .PmemId ),
289+ 			},
290+ 		}
291+ 		devName  =  "pmem"  +  strconv .Itoa (blockInfo .PmemId )
292+ 	}
293+ 	qc .qmp  <-  & QmpSession {
294+ 		commands : commands ,
295+ 		respond : defaultRespond (result , & hypervisor.BlockdevInsertedEvent {
296+ 			DeviceName : devName ,
297+ 		}),
298+ 	}
251299}
252300
253301func  (qc  * QemuContext ) RemoveDisk (ctx  * hypervisor.VmContext , blockInfo  * hypervisor.DiskDescriptor , callback  hypervisor.VmEvent , result  chan <-  hypervisor.VmEvent ) {
0 commit comments