- Add support for syscall stack randomization. - Add support for atomic operations to the 32 & 64-bit BPF JIT. - Full support for KASAN on 64-bit Book3E. - Add a watchdog driver for the new PowerVM hypervisor watchdog. - Add a number of new selftests for the Power10 PMU support. - Add a driver for the PowerVM Platform KeyStore. - Increase the NMI watchdog timeout during live partition migration, to avoid timeouts due to increased memory access latency. - Add support for using the 'linux,pci-domain' device tree property for PCI domain assignment. - Many other small features and fixes. Thanks to: Alexey Kardashevskiy, Andy Shevchenko, Arnd Bergmann, Athira Rajeev, Bagas Sanjaya, Christophe Leroy, Erhard Furtner, Fabiano Rosas, Greg Kroah-Hartman, Greg Kurz, Haowen Bai, Hari Bathini, Jason A. Donenfeld, Jason Wang, Jiang Jian, Joel Stanley, Juerg Haefliger, Kajol Jain, Kees Cook, Laurent Dufour, Madhavan Srinivasan, Masahiro Yamada, Maxime Bizon, Miaoqian Lin, Murilo Opsfelder Araújo, Nathan Lynch, Naveen N. Rao, Nayna Jain, Nicholas Piggin, Ning Qiang, Pali Rohár, Petr Mladek, Rashmica Gupta, Sachin Sant, Scott Cheloha, Segher Boessenkool, Stephen Rothwell, Uwe Kleine-König, Wolfram Sang, Xiu Jianfeng, Zhouyi Zhou. -----BEGIN PGP SIGNATURE----- iQJHBAABCAAxFiEEJFGtCPCthwEv2Y/bUevqPMjhpYAFAmLuAPgTHG1wZUBlbGxl cm1hbi5pZC5hdQAKCRBR6+o8yOGlgBPpD/9kY/T0qlOXABxlZCgtqeAjPX+2xpnY BF+TlsN1TS1auFcEZL2BapmVacsvOeGEFDVuZHZvZJc69Hx+gSjnjFCnZjp6n+Yz wt6y9w9Pu0t/sjD5vNQ46O15/dXqm6RoVI7um12j/WLMN8Ko5+x3gKAyQONjQd2/ 1kPcxVH6FUosAdnCuvIcqCX4e4IIHl2ZkitHOTXoQUvUy9oAK/mOBnwqZ6zLGUKC E5M+Zyt4RFGxhPs48FkX6Nq6crDGU/P0VJpDKkR/t7GHnE67Bm70gZougAPrzrgP nx8zoTWgDKpqDeuqK7pFcyKgNS3dKbxsN3sAfKHOWu/YnV4wMyy+7fmwagMauki7 lXccKN6F/r+8JcMNx80Jp/dAw3ZdLceP38M3Ryf8IL6lTfkNySumUvrKJn6r1Cu1 wvzhgyEuDawss9KHdEmXcA2i3+XVZvitaipO7JWUC8pblrP1SJMoPfIIe9zh3y3M pyZj0TcGJ8XaK+badvI+PW/K/KeRgXEY8HpC3wDHSoIkli3OE4jDwXn6TiZgvm3n k0sKL8YSmQZ8hP8QAkR+r8NQKYqLlfyPxdslK5omDPxfub5Uzk9ZV2Ep7svkaiQn Wqjq27Dpz8+w0XPjsQ0Tkv+ByTkOhrawOH7x9SpFLHpv9g5otcYmS79NkO/htx8C 6LyPNx1VYn5IRA== =tRkm -----END PGP SIGNATURE----- Merge tag 'powerpc-6.0-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull powerpc updates from Michael Ellerman: - Add support for syscall stack randomization - Add support for atomic operations to the 32 & 64-bit BPF JIT - Full support for KASAN on 64-bit Book3E - Add a watchdog driver for the new PowerVM hypervisor watchdog - Add a number of new selftests for the Power10 PMU support - Add a driver for the PowerVM Platform KeyStore - Increase the NMI watchdog timeout during live partition migration, to avoid timeouts due to increased memory access latency - Add support for using the 'linux,pci-domain' device tree property for PCI domain assignment - Many other small features and fixes Thanks to Alexey Kardashevskiy, Andy Shevchenko, Arnd Bergmann, Athira Rajeev, Bagas Sanjaya, Christophe Leroy, Erhard Furtner, Fabiano Rosas, Greg Kroah-Hartman, Greg Kurz, Haowen Bai, Hari Bathini, Jason A. Donenfeld, Jason Wang, Jiang Jian, Joel Stanley, Juerg Haefliger, Kajol Jain, Kees Cook, Laurent Dufour, Madhavan Srinivasan, Masahiro Yamada, Maxime Bizon, Miaoqian Lin, Murilo Opsfelder Araújo, Nathan Lynch, Naveen N. Rao, Nayna Jain, Nicholas Piggin, Ning Qiang, Pali Rohár, Petr Mladek, Rashmica Gupta, Sachin Sant, Scott Cheloha, Segher Boessenkool, Stephen Rothwell, Uwe Kleine-König, Wolfram Sang, Xiu Jianfeng, and Zhouyi Zhou. * tag 'powerpc-6.0-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (191 commits) powerpc/64e: Fix kexec build error EDAC/ppc_4xx: Include required of_irq header directly powerpc/pci: Fix PHB numbering when using opal-phbid powerpc/64: Init jump labels before parse_early_param() selftests/powerpc: Avoid GCC 12 uninitialised variable warning powerpc/cell/axon_msi: Fix refcount leak in setup_msi_msg_address powerpc/xive: Fix refcount leak in xive_get_max_prio powerpc/spufs: Fix refcount leak in spufs_init_isolated_loader powerpc/perf: Include caps feature for power10 DD1 version powerpc: add support for syscall stack randomization powerpc: Move system_call_exception() to syscall.c powerpc/powernv: rename remaining rng powernv_ functions to pnv_ powerpc/powernv/kvm: Use darn for H_RANDOM on Power9 powerpc/powernv: Avoid crashing if rng is NULL selftests/powerpc: Fix matrix multiply assist test powerpc/signal: Update comment for clarity powerpc: make facility_unavailable_exception 64s powerpc/platforms/83xx/suspend: Remove write-only global variable powerpc/platforms/83xx/suspend: Prevent unloading the driver powerpc/platforms/83xx/suspend: Reorder to get rid of a forward declaration ...
197 lines
5.4 KiB
C
197 lines
5.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_POWERPC_KEXEC_H
|
|
#define _ASM_POWERPC_KEXEC_H
|
|
#ifdef __KERNEL__
|
|
|
|
#if defined(CONFIG_FSL_BOOKE) || defined(CONFIG_44x)
|
|
|
|
/*
|
|
* On FSL-BookE we setup a 1:1 mapping which covers the first 2GiB of memory
|
|
* and therefore we can only deal with memory within this range
|
|
*/
|
|
#define KEXEC_SOURCE_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
|
|
#define KEXEC_DESTINATION_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
|
|
#define KEXEC_CONTROL_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1)
|
|
|
|
#else
|
|
|
|
/*
|
|
* Maximum page that is mapped directly into kernel memory.
|
|
* XXX: Since we copy virt we can use any page we allocate
|
|
*/
|
|
#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
|
|
|
|
/*
|
|
* Maximum address we can reach in physical address mode.
|
|
* XXX: I want to allow initrd in highmem. Otherwise set to rmo on LPAR.
|
|
*/
|
|
#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
|
|
|
|
/* Maximum address we can use for the control code buffer */
|
|
#ifdef __powerpc64__
|
|
#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
|
|
#else
|
|
/* TASK_SIZE, probably left over from use_mm ?? */
|
|
#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
|
|
#endif
|
|
#endif
|
|
|
|
#define KEXEC_CONTROL_PAGE_SIZE 4096
|
|
|
|
/* The native architecture */
|
|
#ifdef __powerpc64__
|
|
#define KEXEC_ARCH KEXEC_ARCH_PPC64
|
|
#else
|
|
#define KEXEC_ARCH KEXEC_ARCH_PPC
|
|
#endif
|
|
|
|
#define KEXEC_STATE_NONE 0
|
|
#define KEXEC_STATE_IRQS_OFF 1
|
|
#define KEXEC_STATE_REAL_MODE 2
|
|
|
|
#ifndef __ASSEMBLY__
|
|
#include <asm/reg.h>
|
|
|
|
typedef void (*crash_shutdown_t)(void);
|
|
|
|
#ifdef CONFIG_KEXEC_CORE
|
|
|
|
/*
|
|
* This function is responsible for capturing register states if coming
|
|
* via panic or invoking dump using sysrq-trigger.
|
|
*/
|
|
static inline void crash_setup_regs(struct pt_regs *newregs,
|
|
struct pt_regs *oldregs)
|
|
{
|
|
if (oldregs)
|
|
memcpy(newregs, oldregs, sizeof(*newregs));
|
|
else
|
|
ppc_save_regs(newregs);
|
|
}
|
|
|
|
extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
|
|
master to copy new code to 0 */
|
|
extern int crashing_cpu;
|
|
extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *));
|
|
extern void crash_ipi_callback(struct pt_regs *);
|
|
extern int crash_wake_offline;
|
|
|
|
struct kimage;
|
|
struct pt_regs;
|
|
extern void default_machine_kexec(struct kimage *image);
|
|
extern void default_machine_crash_shutdown(struct pt_regs *regs);
|
|
extern int crash_shutdown_register(crash_shutdown_t handler);
|
|
extern int crash_shutdown_unregister(crash_shutdown_t handler);
|
|
|
|
extern void crash_kexec_prepare(void);
|
|
extern void crash_kexec_secondary(struct pt_regs *regs);
|
|
int __init overlaps_crashkernel(unsigned long start, unsigned long size);
|
|
extern void reserve_crashkernel(void);
|
|
extern void machine_kexec_mask_interrupts(void);
|
|
|
|
static inline bool kdump_in_progress(void)
|
|
{
|
|
return crashing_cpu >= 0;
|
|
}
|
|
|
|
void relocate_new_kernel(unsigned long indirection_page, unsigned long reboot_code_buffer,
|
|
unsigned long start_address) __noreturn;
|
|
|
|
void kexec_copy_flush(struct kimage *image);
|
|
|
|
#if defined(CONFIG_CRASH_DUMP) && defined(CONFIG_PPC_RTAS)
|
|
void crash_free_reserved_phys_range(unsigned long begin, unsigned long end);
|
|
#define crash_free_reserved_phys_range crash_free_reserved_phys_range
|
|
#endif
|
|
|
|
#ifdef CONFIG_KEXEC_FILE
|
|
extern const struct kexec_file_ops kexec_elf64_ops;
|
|
|
|
#define ARCH_HAS_KIMAGE_ARCH
|
|
|
|
struct kimage_arch {
|
|
struct crash_mem *exclude_ranges;
|
|
|
|
unsigned long backup_start;
|
|
void *backup_buf;
|
|
void *fdt;
|
|
};
|
|
|
|
char *setup_kdump_cmdline(struct kimage *image, char *cmdline,
|
|
unsigned long cmdline_len);
|
|
int setup_purgatory(struct kimage *image, const void *slave_code,
|
|
const void *fdt, unsigned long kernel_load_addr,
|
|
unsigned long fdt_load_addr);
|
|
|
|
#ifdef CONFIG_PPC64
|
|
struct kexec_buf;
|
|
|
|
int arch_kexec_kernel_image_probe(struct kimage *image, void *buf, unsigned long buf_len);
|
|
#define arch_kexec_kernel_image_probe arch_kexec_kernel_image_probe
|
|
|
|
int arch_kimage_file_post_load_cleanup(struct kimage *image);
|
|
#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
|
|
|
|
int arch_kexec_locate_mem_hole(struct kexec_buf *kbuf);
|
|
#define arch_kexec_locate_mem_hole arch_kexec_locate_mem_hole
|
|
|
|
int load_crashdump_segments_ppc64(struct kimage *image,
|
|
struct kexec_buf *kbuf);
|
|
int setup_purgatory_ppc64(struct kimage *image, const void *slave_code,
|
|
const void *fdt, unsigned long kernel_load_addr,
|
|
unsigned long fdt_load_addr);
|
|
unsigned int kexec_extra_fdt_size_ppc64(struct kimage *image);
|
|
int setup_new_fdt_ppc64(const struct kimage *image, void *fdt,
|
|
unsigned long initrd_load_addr,
|
|
unsigned long initrd_len, const char *cmdline);
|
|
#endif /* CONFIG_PPC64 */
|
|
|
|
#endif /* CONFIG_KEXEC_FILE */
|
|
|
|
#else /* !CONFIG_KEXEC_CORE */
|
|
static inline void crash_kexec_secondary(struct pt_regs *regs) { }
|
|
|
|
static inline int overlaps_crashkernel(unsigned long start, unsigned long size)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void reserve_crashkernel(void) { ; }
|
|
|
|
static inline int crash_shutdown_register(crash_shutdown_t handler)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int crash_shutdown_unregister(crash_shutdown_t handler)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline bool kdump_in_progress(void)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
static inline void crash_ipi_callback(struct pt_regs *regs) { }
|
|
|
|
static inline void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *))
|
|
{
|
|
}
|
|
|
|
#endif /* CONFIG_KEXEC_CORE */
|
|
|
|
#ifdef CONFIG_PPC_BOOK3S_64
|
|
#include <asm/book3s/64/kexec.h>
|
|
#endif
|
|
|
|
#ifndef reset_sprs
|
|
#define reset_sprs reset_sprs
|
|
static inline void reset_sprs(void)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif /* ! __ASSEMBLY__ */
|
|
#endif /* __KERNEL__ */
|
|
#endif /* _ASM_POWERPC_KEXEC_H */
|