On Mon, Jan 24, 2022 at 11:03:06AM +0100, Peter Zijlstra wrote: > > Either way, it looks like we'd need helpers along the lines of: > > > > | static __always_inline void umcg_enter_from_user(struct pt_regs *regs) > > | { > > | if (current->flags & PF_UMCG_WORKER) > > | umcg_sys_enter(regs, -1); > > | } > > | > > | static __always_inline void umcg_exit_to_user(struct pt_regs *regs) > > | { > > | if (current->flags & PF_UMCG_WORKER) > > | umcg_sys_exit(regs); > > | } > > Would something like: > > #ifndef arch_irqentry_irq_enter > static __always_inline bool arch_irqentry_irq_enter(struct pt_regs *regs) > { > if (!regs_irqs_disabled(regs)) { > local_irq_enable(); > return true; > } > return false; > } > #endif > > static __always_inline void irqentry_irq_enter(struct pt_regs *regs) > { > if (arch_irqentry_irq_inherit(regs)) { > if (user_mode(regs) && (current->flags & PF_UMCG_WORKER)) > umcg_sys_enter(regs, -1); > } > } > > Work? Then arm64 can do: > > static __always_inline bool arch_irqentry_irq_enter(struct pt_regs *regs) > { > local_daif_inherit(); > return interrupts_enabled(regs); > } > > or somesuch... Ah,.. just read your other email, so your concern is about the user_mode() thing due to ARM64 taking a different exception path for from-user vs from-kernel ? I don't mind too much if arm64 decides to open-code the umcg hooks, but please do it such that's hard to forget a spot.