162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/* Fallback per-CPU frame pointer holder
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
562306a36Sopenharmony_ci * Written by David Howells (dhowells@redhat.com)
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef _ASM_GENERIC_IRQ_REGS_H
962306a36Sopenharmony_ci#define _ASM_GENERIC_IRQ_REGS_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/percpu.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/*
1462306a36Sopenharmony_ci * Per-cpu current frame pointer - the location of the last exception frame on
1562306a36Sopenharmony_ci * the stack
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_ciDECLARE_PER_CPU(struct pt_regs *, __irq_regs);
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistatic inline struct pt_regs *get_irq_regs(void)
2062306a36Sopenharmony_ci{
2162306a36Sopenharmony_ci	return __this_cpu_read(__irq_regs);
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistatic inline struct pt_regs *set_irq_regs(struct pt_regs *new_regs)
2562306a36Sopenharmony_ci{
2662306a36Sopenharmony_ci	struct pt_regs *old_regs;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	old_regs = __this_cpu_read(__irq_regs);
2962306a36Sopenharmony_ci	__this_cpu_write(__irq_regs, new_regs);
3062306a36Sopenharmony_ci	return old_regs;
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci#endif /* _ASM_GENERIC_IRQ_REGS_H */
34