[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 12/12] xen/arm: Suspend/resume IOMMU on Xen suspend/resume
Hi, Mykola Kvach <xakep.amatop@xxxxxxxxx> writes: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > > This is done using generic iommu_suspend/resume functions that cause > IOMMU driver specific suspend/resume handlers to be called for enabled > IOMMU (if one has suspend/resume driver handlers implemented). > > These handlers work only when IPMMU-VMSA is used; otherwise, > we return an error during system suspend requests. > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx> > Tested-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> > --- > xen/arch/arm/suspend.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/xen/arch/arm/suspend.c b/xen/arch/arm/suspend.c > index b5398e5ca6..cb86426ebd 100644 > --- a/xen/arch/arm/suspend.c > +++ b/xen/arch/arm/suspend.c > @@ -4,6 +4,7 @@ > #include <asm/suspend.h> > #include <xen/console.h> > #include <xen/cpu.h> > +#include <xen/iommu.h> > #include <xen/llc-coloring.h> > #include <xen/sched.h> > > @@ -49,6 +50,13 @@ static long system_suspend(void *data) > > time_suspend(); > > + status = iommu_suspend(); > + if ( status ) > + { > + system_state = SYS_STATE_resume; > + goto resume_time; > + } > + > local_irq_save(flags); > status = gic_suspend(); > if ( status ) > @@ -105,6 +113,10 @@ static long system_suspend(void *data) > > resume_irqs: > local_irq_restore(flags); > + > + iommu_resume(); > + > + resume_time: > time_resume(); > > resume_nonboot_cpus: > @@ -140,6 +152,15 @@ int host_system_suspend(void) > return -ENOSYS; > } > > + /* TODO: drop check once suspend/resume support for SMMU is implemented > */ > +#ifndef CONFIG_IPMMU_VMSA This check is meaningless, as you can have CONFIG_IPMMU_VMSA enabled along with CONFIG_ARM_SMMU on a system with SMMU. I think it is enough that iommu_suspend() will fail during system_suspend(), isn't it? > + if ( iommu_enabled ) > + { > + dprintk(XENLOG_ERR, "IOMMU is enabled, suspend not supported yet\n"); > + return -ENOSYS; > + } > +#endif > + > /* > * system_suspend should be called when Dom0 finalizes the suspend > * procedure from its boot core (VCPU#0). However, Dom0's VCPU#0 could -- WBR, Volodymyr
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |