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 <[email protected]>

Reviewed-by: Julien Grall <[email protected]>

---
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

Reply via email to