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

Re: [Xen-devel] [PATCH] passthrough: release assigned PCI devices earlier during domain shutdown



On 24/02/2012 08:28, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:

> At least with xend, where there's not even a tool stack side attempt to
> de-assign devices during domain shutdown, this allows immediate re-
> starts of a domain to work reliably. (There's no apparent reason why
> c/s 18010:c1577f094ae4 chose to put this in the asynchronous part of
> domain destruction).
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Acked-by: Keir Fraser <keir@xxxxxxx>

> --- a/xen/arch/ia64/xen/domain.c
> +++ b/xen/arch/ia64/xen/domain.c
> @@ -673,10 +673,8 @@ void arch_domain_destroy(struct domain *
> free_xenheap_pages(d->shared_info,
>   get_order_from_shift(XSI_SHIFT));
>  
> - if ( iommu_enabled && need_iommu(d) ) {
> -  pci_release_devices(d);
> + if ( iommu_enabled && need_iommu(d) )
> iommu_domain_destroy(d);
> - }
>  
> tlb_track_destroy(d);
>  
> @@ -1721,6 +1719,8 @@ int domain_relinquish_resources(struct d
>  
> switch (d->arch.relres) {
> case RELRES_not_started:
> +  pci_release_devices(d);
> +
> /* Relinquish guest resources for VT-i domain. */
> if (is_hvm_domain(d))
> vmx_relinquish_guest_resources(d);
> --- a/xen/arch/x86/domain.c
> +++ b/xen/arch/x86/domain.c
> @@ -657,7 +657,6 @@ void arch_domain_destroy(struct domain *
>          xfree(d->arch.pv_domain.e820);
>  
>      vmce_destroy_msr(d);
> -    pci_release_devices(d);
>      free_domain_pirqs(d);
>      if ( !is_idle_domain(d) )
>          iommu_domain_destroy(d);
> @@ -2101,6 +2100,8 @@ int domain_relinquish_resources(struct d
>      switch ( d->arch.relmem )
>      {
>      case RELMEM_not_started:
> +        pci_release_devices(d);
> +
>          /* Tear down paging-assistance stuff. */
>          paging_teardown(d);
>  
> --- a/xen/drivers/passthrough/iommu.c
> +++ b/xen/drivers/passthrough/iommu.c
> @@ -574,7 +574,8 @@ int iommu_do_domctl(
>          break;
>  
>      case XEN_DOMCTL_assign_device:
> -        if ( unlikely((d = get_domain_by_id(domctl->domain)) == NULL) )
> +        if ( unlikely((d = get_domain_by_id(domctl->domain)) == NULL) ||
> +             unlikely(d->is_dying) )
>          {
>              printk(XENLOG_G_ERR
>                     "XEN_DOMCTL_assign_device: get_domain_by_id() failed\n");
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel



_______________________________________________
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®.