xen: destroy_hvm_domain: Try xendevicemodel_shutdown
xc_interface_open etc. is not going to work if we have dropped privilege, but xendevicemodel_shutdown will if everything is new enough. xendevicemodel_shutdown is only availabe in Xen 4.10 and later, so provide a stub for earlier versions. Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
This commit is contained in:
		
							parent
							
								
									85f3c64da3
								
							
						
					
					
						commit
						6b47c2aa78
					
				| @ -1386,9 +1386,21 @@ void destroy_hvm_domain(bool reboot) | ||||
| { | ||||
|     xc_interface *xc_handle; | ||||
|     int sts; | ||||
|     int rc; | ||||
| 
 | ||||
|     unsigned int reason = reboot ? SHUTDOWN_reboot : SHUTDOWN_poweroff; | ||||
| 
 | ||||
|     if (xen_dmod) { | ||||
|         rc = xendevicemodel_shutdown(xen_dmod, xen_domid, reason); | ||||
|         if (!rc) { | ||||
|             return; | ||||
|         } | ||||
|         if (errno != ENOTTY /* old Xen */) { | ||||
|             perror("xendevicemodel_shutdown failed"); | ||||
|         } | ||||
|         /* well, try the old thing then */ | ||||
|     } | ||||
| 
 | ||||
|     xc_handle = xc_interface_open(0, 0, 0); | ||||
|     if (xc_handle == NULL) { | ||||
|         fprintf(stderr, "Cannot acquire xenctrl handle\n"); | ||||
|  | ||||
| @ -108,6 +108,13 @@ static inline int xentoolcore_restrict_all(domid_t domid) | ||||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| static inline int xendevicemodel_shutdown(xendevicemodel_handle *dmod, | ||||
|                                           domid_t domid, unsigned int reason) | ||||
| { | ||||
|     errno = ENOTTY; | ||||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| #else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 41000 */ | ||||
| 
 | ||||
| #include <xentoolcore.h> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ian Jackson
						Ian Jackson