[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] -EINTR return in domain_relinquish_resources



On 21/01/2015 21:27, Konrad Rzeszutek Wilk wrote:
> As I was looking at some of the XSA I realized that the
> call-chain of:
>
>  domain_relinquish_resources
>    ->vcpu_destroy_pagetables
>      -> put_page_and_type_preemptible
>         -> __put_page_type
>               returns -EINTR
>
> which means we end up at:
>  618         rc = domain_relinquish_resources(d);                             
>        
>  619         if ( rc != 0 )                                                   
>        
>  620         {                                                                
>        
>  621             if ( rc == -ERESTART )                                       
>        
>  622                 rc = -EAGAIN;                                            
>        
>  623             break;             <=== with rc=-EINTR
>  624         }                                         
>
> And return -EINTR to user-space - which loop in 
> 'xc_domain_destroy' is only looking for:
>
>  112 int xc_domain_destroy(xc_interface *xch,                                 
>        
>  113                       uint32_t domid)                                    
>        
>  114 {                                                                        
>        
>  115     int ret;                                                             
>        
>  116     DECLARE_DOMCTL;                                                      
>        
>  117     domctl.cmd = XEN_DOMCTL_destroydomain;                               
>        
>  118     domctl.domain = (domid_t)domid;                                      
>        
>  119     do {                                                                 
>        
>  120         ret = do_domctl(xch, &domctl);                                   
>        
>  121     } while ( ret && (errno == EAGAIN) );                                
>        
>  122     return ret;                                                          
>        
>  123 }                                
>
> which to my reading looks like we would exit out and leave
> an DOMDYING_dying domain. Looking at the code it seems possible
> to continue on if the user does 'xl destroy <X>' guest again,
> but I was wondering if:
>
>  a). Should the toolstack (libxl or libxc) have the code to
>      handle -EINTR?
>
>  b). Or should the hypervisor convert the -EINTR to -ERESTART
>      (or -EAGAIN) - which most of the code (see users of
>      get_page_type_preemptible) do right now?

Good spot.

Other areas of similar code condense EINTR into ERESTART.  I think in
this case it is Xen's job to turn -EINTR into -EAGAIN as this hypercall
specifically has preemptibility  built into its normal use.

I wonder if there are other similar hypercall paths which need to catch
EINTR as well as ERESTART?

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.