[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/8] IRQ: generalize [gs]et_irq_regs()
Hi Jan, On 11/01/2024 07:32, Jan Beulich wrote: Move functions (and their data) to common code, and invoke the functions on Arm as well. This is in preparation of dropping the register parameters from handler functions. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx> --- To limit visibility of the per-CPU data item, we may want to consider making the functions out-of-line ones (in common/irq.c). --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -221,6 +221,7 @@ void do_IRQ(struct cpu_user_regs *regs, { struct irq_desc *desc = irq_to_desc(irq); struct irqaction *action; + struct cpu_user_regs *old_regs = set_irq_regs(regs);perfc_incr(irqs); @@ -288,6 +289,7 @@ out:out_no_end: spin_unlock(&desc->lock); irq_exit(); + set_irq_regs(old_regs); } [...] +/* + * Per-cpu interrupted context register state - the top-most interrupt frame + * on the stack. + */ +DECLARE_PER_CPU(struct cpu_user_regs *, irq_regs); + +static inline struct cpu_user_regs *get_irq_regs(void) +{ + return this_cpu(irq_regs); +} + +static inline struct cpu_user_regs *set_irq_regs(struct cpu_user_regs *new_regs) +{ + struct cpu_user_regs *old_regs, **pp_regs = &this_cpu(irq_regs); + + old_regs = *pp_regs; + *pp_regs = new_regs; NIT: As you move the code, can you add a newline before the return? + return old_regs; +} + struct domain; struct vcpu; Cheers, -- Julien Grall
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |