mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
82869ac57b
Add support for hibernate/suspend-to-disk. Suspend borrows code from cpu_suspend() to write cpu state onto the stack, before calling swsusp_save() to save the memory image. Restore creates a set of temporary page tables, covering only the linear map, copies the restore code to a 'safe' page, then uses the copy to restore the memory image. The copied code executes in the lower half of the address space, and once complete, restores the original kernel's page tables. It then calls into cpu_resume(), and follows the normal cpu_suspend() path back into the suspend code. To restore a kernel using KASLR, the address of the page tables, and cpu_resume() are stored in the hibernate arch-header and the el2 vectors are pivotted via the 'safe' page in low memory. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Tested-by: Kevin Hilman <khilman@baylibre.com> # Tested on Juno R2 Signed-off-by: James Morse <james.morse@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
58 lines
2.1 KiB
Makefile
58 lines
2.1 KiB
Makefile
#
|
|
# Makefile for the linux kernel.
|
|
#
|
|
|
|
CPPFLAGS_vmlinux.lds := -DTEXT_OFFSET=$(TEXT_OFFSET)
|
|
AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
|
|
CFLAGS_armv8_deprecated.o := -I$(src)
|
|
|
|
CFLAGS_REMOVE_ftrace.o = -pg
|
|
CFLAGS_REMOVE_insn.o = -pg
|
|
CFLAGS_REMOVE_return_address.o = -pg
|
|
|
|
# Object file lists.
|
|
arm64-obj-y := debug-monitors.o entry.o irq.o fpsimd.o \
|
|
entry-fpsimd.o process.o ptrace.o setup.o signal.o \
|
|
sys.o stacktrace.o time.o traps.o io.o vdso.o \
|
|
hyp-stub.o psci.o cpu_ops.o insn.o \
|
|
return_address.o cpuinfo.o cpu_errata.o \
|
|
cpufeature.o alternative.o cacheinfo.o \
|
|
smp.o smp_spin_table.o topology.o smccc-call.o
|
|
|
|
extra-$(CONFIG_EFI) := efi-entry.o
|
|
|
|
OBJCOPYFLAGS := --prefix-symbols=__efistub_
|
|
$(obj)/%.stub.o: $(obj)/%.o FORCE
|
|
$(call if_changed,objcopy)
|
|
|
|
arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \
|
|
sys_compat.o entry32.o \
|
|
../../arm/kernel/opcodes.o
|
|
arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o
|
|
arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o
|
|
arm64-obj-$(CONFIG_ARM64_MODULE_PLTS) += module-plts.o
|
|
arm64-obj-$(CONFIG_PERF_EVENTS) += perf_regs.o perf_callchain.o
|
|
arm64-obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o
|
|
arm64-obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o
|
|
arm64-obj-$(CONFIG_CPU_PM) += sleep.o suspend.o
|
|
arm64-obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
|
arm64-obj-$(CONFIG_JUMP_LABEL) += jump_label.o
|
|
arm64-obj-$(CONFIG_KGDB) += kgdb.o
|
|
arm64-obj-$(CONFIG_EFI) += efi.o efi-entry.stub.o
|
|
arm64-obj-$(CONFIG_PCI) += pci.o
|
|
arm64-obj-$(CONFIG_ARMV8_DEPRECATED) += armv8_deprecated.o
|
|
arm64-obj-$(CONFIG_ACPI) += acpi.o
|
|
arm64-obj-$(CONFIG_ARM64_ACPI_PARKING_PROTOCOL) += acpi_parking_protocol.o
|
|
arm64-obj-$(CONFIG_PARAVIRT) += paravirt.o
|
|
arm64-obj-$(CONFIG_RANDOMIZE_BASE) += kaslr.o
|
|
arm64-obj-$(CONFIG_HIBERNATION) += hibernate.o hibernate-asm.o
|
|
|
|
obj-y += $(arm64-obj-y) vdso/
|
|
obj-m += $(arm64-obj-m)
|
|
head-y := head.o
|
|
extra-y += $(head-y) vmlinux.lds
|
|
|
|
# vDSO - this must be built first to generate the symbol offsets
|
|
$(call objectify,$(arm64-obj-y)): $(obj)/vdso/vdso-offsets.h
|
|
$(obj)/vdso/vdso-offsets.h: $(obj)/vdso
|