[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [XEN PATCH v3 05/11] xen: arm: add interfaces to save/restore the state of a PPI.
On Fri, 15 Nov 2019, Stewart Hildebrand wrote: > diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h > index f3f3fb7d7f..c3f4cd5069 100644 > --- a/xen/include/asm-arm/domain.h > +++ b/xen/include/asm-arm/domain.h > @@ -34,6 +34,17 @@ enum domain_type { > /* The hardware domain has always its memory direct mapped. */ > #define is_domain_direct_mapped(d) ((d) == hardware_domain) > > +struct hwppi_state { > + /* h/w state */ > + unsigned irq; It doesn't look like we need to save the irq number again here. > + unsigned long enabled:1; > + unsigned long pending:1; > + unsigned long active:1; > + > + /* Xen s/w state */ > + unsigned long inprogress:1; > +}; > + > struct vtimer { > struct vcpu *v; > int irq; > diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h > index 793d324b33..1164e0c7a6 100644 > --- a/xen/include/asm-arm/gic.h > +++ b/xen/include/asm-arm/gic.h > @@ -275,6 +275,26 @@ extern int gicv_setup(struct domain *d); > extern void gic_save_state(struct vcpu *v); > extern void gic_restore_state(struct vcpu *v); > > +/* > + * Save/restore the state of a single PPI which must be routed to > + * <current-vcpu> (that is, is defined to be injected to the current > + * vcpu). > + * > + * We expect the device which use this PPI to be quiet while we > + * save/restore. > + * > + * For instance we want to disable the timer before saving the state. > + * Otherwise we will mess up the state. > + */ > +struct hwppi_state; It is a bit awkward to have to do this "redefine" struct hwppi_state here. I know that the Xen headers file don't always include correctly, but could we move the full definition of struct hwppi_state here? domain.h is already including gic.h, so it should work? > +extern void gic_hwppi_state_init(struct hwppi_state *s, unsigned irq); > +extern void gic_hwppi_set_pending(struct hwppi_state *s); > +extern void gic_save_and_mask_hwppi(struct vcpu *v, unsigned irq, > + struct hwppi_state *s); > +extern void gic_restore_hwppi(struct vcpu *v, > + const unsigned virq, > + const struct hwppi_state *s); > + > /* SGI (AKA IPIs) */ > enum gic_sgi { > GIC_SGI_EVENT_CHECK = 0, > @@ -325,8 +345,10 @@ struct gic_hw_operations { > int (*init)(void); > /* Save GIC registers */ > void (*save_state)(struct vcpu *); > + void (*save_and_mask_hwppi)(struct irq_desc *desc, struct hwppi_state > *s); > /* Restore GIC registers */ > void (*restore_state)(const struct vcpu *); > + void (*restore_hwppi)(struct irq_desc *desc, const struct hwppi_state > *s); > /* Dump GIC LR register information */ > void (*dump_state)(const struct vcpu *); > > diff --git a/xen/include/asm-arm/irq.h b/xen/include/asm-arm/irq.h > index e14001b5c6..3b37a21c06 100644 > --- a/xen/include/asm-arm/irq.h > +++ b/xen/include/asm-arm/irq.h > @@ -96,6 +96,8 @@ void irq_set_affinity(struct irq_desc *desc, const > cpumask_t *cpu_mask); > */ > bool irq_type_set_by_domain(const struct domain *d); > > +void irq_set_virq(struct irq_desc *desc, unsigned virq); > + > #endif /* _ASM_HW_IRQ_H */ > /* > * Local variables: _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |