powerpc updates for 4.9
Highlights:
- Major rework of Book3S 64-bit exception vectors (Nicholas Piggin)
- Use gas sections for arranging exception vectors et. al.
- Large set of TM cleanups and selftests (Cyril Bur)
- Enable transactional memory (TM) lazily for userspace (Cyril Bur)
- Support for XZ compression in the zImage wrapper (Oliver O'Halloran)
- Add support for bpf constant blinding (Naveen N. Rao)
- Beginnings of upstream support for PA Semi Nemo motherboards (Darren Stevens)
Fixes:
- Ensure .mem(init|exit).text are within _stext/_etext (Michael Ellerman)
- xmon: Don't use ld on 32-bit (Michael Ellerman)
- vdso64: Use double word compare on pointers (Anton Blanchard)
- powerpc/nvram: Fix an incorrect partition merge (Pan Xinhui)
- powerpc: Fix usage of _PAGE_RO in hugepage (Christophe Leroy)
- powerpc/mm: Update FORCE_MAX_ZONEORDER range to allow hugetlb w/4K (Aneesh Kumar K.V)
- Fix memory leak in queue_hotplug_event() error path (Andrew Donnellan)
- Replay hypervisor maintenance interrupt first (Nicholas Piggin)
Cleanups & features:
- Sparse fixes/cleanups (Daniel Axtens)
- Preserve CFAR value on SLB miss caused by access to bogus address (Paul Mackerras)
- Radix MMU fixups for POWER9 (Aneesh Kumar K.V)
- Support for setting used_(vsr|vr|spe) in sigreturn path (for CRIU) (Simon Guo)
- Optimise syscall entry for virtual, relocatable case (Nicholas Piggin)
- Optimise MSR handling in exception handling (Nicholas Piggin)
- Support for kexec with Radix MMU (Benjamin Herrenschmidt)
- powernv EEH fixes (Russell Currey)
- Suprise PCI hotplug support for powernv (Gavin Shan)
- Endian/sparse fixes for powernv PCI (Gavin Shan)
- Defconfig updates (Anton Blanchard)
- Various performance optimisations (Anton Blanchard)
- Align hot loops of memset() and backwards_memcpy()
- During context switch, check before setting mm_cpumask
- Remove static branch prediction in atomic{, 64}_add_unless
- Only disable HAVE_EFFICIENT_UNALIGNED_ACCESS on POWER7 little endian
- Set default CPU type to POWER8 for little endian builds
- KVM: PPC: Book3S HV: Migrate pinned pages out of CMA (Balbir Singh)
- cxl: Flush PSL cache before resetting the adapter (Frederic Barrat)
- cxl: replace loop with for_each_child_of_node(), remove unneeded of_node_put() (Andrew Donnellan)
- Fix HV facility unavailable to use correct handler (Nicholas Piggin)
- Remove unnecessary syscall trampoline (Nicholas Piggin)
- fadump: Fix build break when CONFIG_PROC_VMCORE=n (Michael Ellerman)
- Quieten EEH message when no adapters are found (Anton Blanchard)
- powernv: Add PHB register dump debugfs handle (Russell Currey)
- Use kprobe blacklist for exception handlers & asm functions (Nicholas Piggin)
- Document the syscall ABI (Nicholas Piggin)
- MAINTAINERS: Update cxl maintainers (Michael Neuling)
- powerpc: Remove all usages of NO_IRQ (Michael Ellerman)
Minor cleanups:
- Andrew Donnellan, Christophe Leroy, Colin Ian King, Cyril Bur, Frederic Barrat,
Pan Xinhui, PrasannaKumar Muralidharan, Rui Teng, Simon Guo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJX9x5ZAAoJEFHr6jzI4aWAWQ0P+gOhdtayMsRY0k0dzPmYaFr0
Ha5v968RJaNIyGGM9ARJg8h27PGMaSlBp/9zaYdk1G7xfv/DMR0uq8d8l5pjy/Zw
Jm72WE4PEX/zAcQxry6Y2fDdumO09crTBA/W0hM1UZzqu0bcVUfD+E51ZFYWW7yh
fyhT2YnlucxIcT34pxsLqwTIiZYG4xgN3+YGo0wohY1D1GHE3UZ7SXIglb49yM6v
ZeXrL7SOdERR1w88rC+g99P/cWng5HDS0wPLUbxGT5KIpoOSXOs7EbZwFqQBUy5O
37PB07K5dDyUbrm++l5lUigldF3W1OZQBN5+n8PciulxxwFX84pllTlAxv1p60JR
piEKZ8pl023IF7zMGatUG9qcNOcnbxdMsAhoEhlcFi9ulM/yLzbmRTKVfDYm+O/J
UI+YtcbsgdyOXMdGXCqdpeBNuuypgLG/g7gC8bnk3taS0LUUZLcXtRNuE4tcPJJe
v8FnszaLkjAi83Lmzt3fgZo7DI1RIPwDSw6fY+nBrxCRfEPRVx3f7KhmUXvSeol5
Ln9xpk4AtyQt1RHhckxXwWSUgvXVg2ltmz7ElqK4sQ9mO/D2ZIs6R6fPY4VlJLc4
/2yIV4RLIsbHmdv9IbJ8PBp0VTugSNdicZ904QiAHSZQv/i1mgYuXw3tjR6kuy9f
bKOzNJTwLV1WUsOlUpiq
=Jnn8
-----END PGP SIGNATURE-----
Merge tag 'powerpc-4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc updates from Michael Ellerman:
"Highlights:
- Major rework of Book3S 64-bit exception vectors (Nicholas Piggin)
- Use gas sections for arranging exception vectors et. al.
- Large set of TM cleanups and selftests (Cyril Bur)
- Enable transactional memory (TM) lazily for userspace (Cyril Bur)
- Support for XZ compression in the zImage wrapper (Oliver
O'Halloran)
- Add support for bpf constant blinding (Naveen N. Rao)
- Beginnings of upstream support for PA Semi Nemo motherboards
(Darren Stevens)
Fixes:
- Ensure .mem(init|exit).text are within _stext/_etext (Michael
Ellerman)
- xmon: Don't use ld on 32-bit (Michael Ellerman)
- vdso64: Use double word compare on pointers (Anton Blanchard)
- powerpc/nvram: Fix an incorrect partition merge (Pan Xinhui)
- powerpc: Fix usage of _PAGE_RO in hugepage (Christophe Leroy)
- powerpc/mm: Update FORCE_MAX_ZONEORDER range to allow hugetlb w/4K
(Aneesh Kumar K.V)
- Fix memory leak in queue_hotplug_event() error path (Andrew
Donnellan)
- Replay hypervisor maintenance interrupt first (Nicholas Piggin)
Various performance optimisations (Anton Blanchard):
- Align hot loops of memset() and backwards_memcpy()
- During context switch, check before setting mm_cpumask
- Remove static branch prediction in atomic{, 64}_add_unless
- Only disable HAVE_EFFICIENT_UNALIGNED_ACCESS on POWER7 little
endian
- Set default CPU type to POWER8 for little endian builds
Cleanups & features:
- Sparse fixes/cleanups (Daniel Axtens)
- Preserve CFAR value on SLB miss caused by access to bogus address
(Paul Mackerras)
- Radix MMU fixups for POWER9 (Aneesh Kumar K.V)
- Support for setting used_(vsr|vr|spe) in sigreturn path (for CRIU)
(Simon Guo)
- Optimise syscall entry for virtual, relocatable case (Nicholas
Piggin)
- Optimise MSR handling in exception handling (Nicholas Piggin)
- Support for kexec with Radix MMU (Benjamin Herrenschmidt)
- powernv EEH fixes (Russell Currey)
- Suprise PCI hotplug support for powernv (Gavin Shan)
- Endian/sparse fixes for powernv PCI (Gavin Shan)
- Defconfig updates (Anton Blanchard)
- KVM: PPC: Book3S HV: Migrate pinned pages out of CMA (Balbir Singh)
- cxl: Flush PSL cache before resetting the adapter (Frederic Barrat)
- cxl: replace loop with for_each_child_of_node(), remove unneeded
of_node_put() (Andrew Donnellan)
- Fix HV facility unavailable to use correct handler (Nicholas
Piggin)
- Remove unnecessary syscall trampoline (Nicholas Piggin)
- fadump: Fix build break when CONFIG_PROC_VMCORE=n (Michael
Ellerman)
- Quieten EEH message when no adapters are found (Anton Blanchard)
- powernv: Add PHB register dump debugfs handle (Russell Currey)
- Use kprobe blacklist for exception handlers & asm functions
(Nicholas Piggin)
- Document the syscall ABI (Nicholas Piggin)
- MAINTAINERS: Update cxl maintainers (Michael Neuling)
- powerpc: Remove all usages of NO_IRQ (Michael Ellerman)
Minor cleanups:
- Andrew Donnellan, Christophe Leroy, Colin Ian King, Cyril Bur,
Frederic Barrat, Pan Xinhui, PrasannaKumar Muralidharan, Rui Teng,
Simon Guo"
* tag 'powerpc-4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (156 commits)
powerpc/bpf: Add support for bpf constant blinding
powerpc/bpf: Implement support for tail calls
powerpc/bpf: Introduce accessors for using the tmp local stack space
powerpc/fadump: Fix build break when CONFIG_PROC_VMCORE=n
powerpc: tm: Enable transactional memory (TM) lazily for userspace
powerpc/tm: Add TM Unavailable Exception
powerpc: Remove do_load_up_transact_{fpu,altivec}
powerpc: tm: Rename transct_(*) to ck(\1)_state
powerpc: tm: Always use fp_state and vr_state to store live registers
selftests/powerpc: Add checks for transactional VSXs in signal contexts
selftests/powerpc: Add checks for transactional VMXs in signal contexts
selftests/powerpc: Add checks for transactional FPUs in signal contexts
selftests/powerpc: Add checks for transactional GPRs in signal contexts
selftests/powerpc: Check that signals always get delivered
selftests/powerpc: Add TM tcheck helpers in C
selftests/powerpc: Allow tests to extend their kill timeout
selftests/powerpc: Introduce GPR asm helper header file
selftests/powerpc: Move VMX stack frame macros to header file
selftests/powerpc: Rework FPU stack placement macros and move to header file
selftests/powerpc: Check for VSX preservation across userspace preemption
...
This commit is contained in:
commit
07021b4359
227 changed files with 5466 additions and 2926 deletions
105
Documentation/powerpc/syscall64-abi.txt
Normal file
105
Documentation/powerpc/syscall64-abi.txt
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
===============================================
|
||||
Power Architecture 64-bit Linux system call ABI
|
||||
===============================================
|
||||
|
||||
syscall
|
||||
=======
|
||||
|
||||
syscall calling sequence[*] matches the Power Architecture 64-bit ELF ABI
|
||||
specification C function calling sequence, including register preservation
|
||||
rules, with the following differences.
|
||||
|
||||
[*] Some syscalls (typically low-level management functions) may have
|
||||
different calling sequences (e.g., rt_sigreturn).
|
||||
|
||||
Parameters and return value
|
||||
---------------------------
|
||||
The system call number is specified in r0.
|
||||
|
||||
There is a maximum of 6 integer parameters to a syscall, passed in r3-r8.
|
||||
|
||||
Both a return value and a return error code are returned. cr0.SO is the return
|
||||
error code, and r3 is the return value or error code. When cr0.SO is clear,
|
||||
the syscall succeeded and r3 is the return value. When cr0.SO is set, the
|
||||
syscall failed and r3 is the error code that generally corresponds to errno.
|
||||
|
||||
Stack
|
||||
-----
|
||||
System calls do not modify the caller's stack frame. For example, the caller's
|
||||
stack frame LR and CR save fields are not used.
|
||||
|
||||
Register preservation rules
|
||||
---------------------------
|
||||
Register preservation rules match the ELF ABI calling sequence with the
|
||||
following differences:
|
||||
|
||||
r0: Volatile. (System call number.)
|
||||
r3: Volatile. (Parameter 1, and return value.)
|
||||
r4-r8: Volatile. (Parameters 2-6.)
|
||||
cr0: Volatile (cr0.SO is the return error condition)
|
||||
cr1, cr5-7: Nonvolatile.
|
||||
lr: Nonvolatile.
|
||||
|
||||
All floating point and vector data registers as well as control and status
|
||||
registers are nonvolatile.
|
||||
|
||||
Invocation
|
||||
----------
|
||||
The syscall is performed with the sc instruction, and returns with execution
|
||||
continuing at the instruction following the sc instruction.
|
||||
|
||||
Transactional Memory
|
||||
--------------------
|
||||
Syscall behavior can change if the processor is in transactional or suspended
|
||||
transaction state, and the syscall can affect the behavior of the transaction.
|
||||
|
||||
If the processor is in suspended state when a syscall is made, the syscall
|
||||
will be performed as normal, and will return as normal. The syscall will be
|
||||
performed in suspended state, so its side effects will be persistent according
|
||||
to the usual transactional memory semantics. A syscall may or may not result
|
||||
in the transaction being doomed by hardware.
|
||||
|
||||
If the processor is in transactional state when a syscall is made, then the
|
||||
behavior depends on the presence of PPC_FEATURE2_HTM_NOSC in the AT_HWCAP2 ELF
|
||||
auxiliary vector.
|
||||
|
||||
- If present, which is the case for newer kernels, then the syscall will not
|
||||
be performed and the transaction will be doomed by the kernel with the
|
||||
failure code TM_CAUSE_SYSCALL | TM_CAUSE_PERSISTENT in the TEXASR SPR.
|
||||
|
||||
- If not present (older kernels), then the kernel will suspend the
|
||||
transactional state and the syscall will proceed as in the case of a
|
||||
suspended state syscall, and will resume the transactional state before
|
||||
returning to the caller. This case is not well defined or supported, so this
|
||||
behavior should not be relied upon.
|
||||
|
||||
|
||||
vsyscall
|
||||
========
|
||||
|
||||
vsyscall calling sequence matches the syscall calling sequence, with the
|
||||
following differences. Some vsyscalls may have different calling sequences.
|
||||
|
||||
Parameters and return value
|
||||
---------------------------
|
||||
r0 is not used as an input. The vsyscall is selected by its address.
|
||||
|
||||
Stack
|
||||
-----
|
||||
The vsyscall may or may not use the caller's stack frame save areas.
|
||||
|
||||
Register preservation rules
|
||||
---------------------------
|
||||
r0: Volatile.
|
||||
cr1, cr5-7: Volatile.
|
||||
lr: Volatile.
|
||||
|
||||
Invocation
|
||||
----------
|
||||
The vsyscall is performed with a branch-with-link instruction to the vsyscall
|
||||
function address.
|
||||
|
||||
Transactional Memory
|
||||
--------------------
|
||||
vsyscalls will run in the same transactional state as the caller. A vsyscall
|
||||
may or may not result in the transaction being doomed by hardware.
|
||||
|
|
@ -3523,14 +3523,14 @@ F: drivers/net/ethernet/chelsio/cxgb4vf/
|
|||
|
||||
CXL (IBM Coherent Accelerator Processor Interface CAPI) DRIVER
|
||||
M: Ian Munsie <imunsie@au1.ibm.com>
|
||||
M: Michael Neuling <mikey@neuling.org>
|
||||
M: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Supported
|
||||
F: arch/powerpc/platforms/powernv/pci-cxl.c
|
||||
F: drivers/misc/cxl/
|
||||
F: include/misc/cxl*
|
||||
F: include/uapi/misc/cxl.h
|
||||
F: Documentation/powerpc/cxl.txt
|
||||
F: Documentation/powerpc/cxl.txt
|
||||
F: Documentation/ABI/testing/sysfs-class-cxl
|
||||
|
||||
CXLFLASH (IBM Coherent Accelerator Processor Interface CAPI Flash) SCSI DRIVER
|
||||
|
|
|
|||
|
|
@ -12,11 +12,6 @@ config 64BIT
|
|||
bool
|
||||
default y if PPC64
|
||||
|
||||
config WORD_SIZE
|
||||
int
|
||||
default 64 if PPC64
|
||||
default 32 if !PPC64
|
||||
|
||||
config ARCH_PHYS_ADDR_T_64BIT
|
||||
def_bool PPC64 || PHYS_64BIT
|
||||
|
||||
|
|
@ -101,7 +96,7 @@ config PPC
|
|||
select VIRT_TO_BUS if !PPC64
|
||||
select HAVE_IDE
|
||||
select HAVE_IOREMAP_PROT
|
||||
select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_LITTLE_ENDIAN
|
||||
select HAVE_EFFICIENT_UNALIGNED_ACCESS if !(CPU_LITTLE_ENDIAN && POWER7_CPU)
|
||||
select HAVE_KPROBES
|
||||
select HAVE_ARCH_KGDB
|
||||
select HAVE_KRETPROBES
|
||||
|
|
@ -167,6 +162,7 @@ config PPC
|
|||
select GENERIC_CPU_AUTOPROBE
|
||||
select HAVE_VIRT_CPU_ACCOUNTING
|
||||
select HAVE_ARCH_HARDENED_USERCOPY
|
||||
select HAVE_KERNEL_GZIP
|
||||
|
||||
config GENERIC_CSUM
|
||||
def_bool CPU_LITTLE_ENDIAN
|
||||
|
|
@ -637,7 +633,7 @@ config FORCE_MAX_ZONEORDER
|
|||
int "Maximum zone order"
|
||||
range 8 9 if PPC64 && PPC_64K_PAGES
|
||||
default "9" if PPC64 && PPC_64K_PAGES
|
||||
range 9 13 if PPC64 && !PPC_64K_PAGES
|
||||
range 13 13 if PPC64 && !PPC_64K_PAGES
|
||||
default "13" if PPC64 && !PPC_64K_PAGES
|
||||
range 9 64 if PPC32 && PPC_16K_PAGES
|
||||
default "9" if PPC32 && PPC_16K_PAGES
|
||||
|
|
|
|||
|
|
@ -43,31 +43,24 @@ NM := $(NM) --synthetic
|
|||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_PPC64),y)
|
||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||
OLDARCH := ppc64le
|
||||
# BITS is used as extension for files which are available in a 32 bit
|
||||
# and a 64 bit version to simplify shared Makefiles.
|
||||
# e.g.: obj-y += foo_$(BITS).o
|
||||
export BITS
|
||||
|
||||
ifdef CONFIG_PPC64
|
||||
BITS := 64
|
||||
else
|
||||
OLDARCH := ppc64
|
||||
endif
|
||||
else
|
||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||
OLDARCH := ppcle
|
||||
else
|
||||
OLDARCH := ppc
|
||||
endif
|
||||
BITS := 32
|
||||
endif
|
||||
|
||||
# It seems there are times we use this Makefile without
|
||||
# including the config file, but this replicates the old behaviour
|
||||
ifeq ($(CONFIG_WORD_SIZE),)
|
||||
CONFIG_WORD_SIZE := 32
|
||||
endif
|
||||
|
||||
UTS_MACHINE := $(OLDARCH)
|
||||
machine-y = ppc
|
||||
machine-$(CONFIG_PPC64) += 64
|
||||
machine-$(CONFIG_CPU_LITTLE_ENDIAN) += le
|
||||
UTS_MACHINE := $(subst $(space),,$(machine-y))
|
||||
|
||||
ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
|
||||
override LD += -EL
|
||||
override CROSS32AS += -mlittle-endian
|
||||
LDEMULATION := lppc
|
||||
GNUTARGET := powerpcle
|
||||
MULTIPLEWORD := -mno-multiple
|
||||
|
|
@ -89,10 +82,10 @@ aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mbig-endian)
|
|||
aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mlittle-endian
|
||||
|
||||
ifeq ($(HAS_BIARCH),y)
|
||||
override AS += -a$(CONFIG_WORD_SIZE)
|
||||
override LD += -m elf$(CONFIG_WORD_SIZE)$(LDEMULATION)
|
||||
override CC += -m$(CONFIG_WORD_SIZE)
|
||||
override AR := GNUTARGET=elf$(CONFIG_WORD_SIZE)-$(GNUTARGET) $(AR)
|
||||
override AS += -a$(BITS)
|
||||
override LD += -m elf$(BITS)$(LDEMULATION)
|
||||
override CC += -m$(BITS)
|
||||
override AR := GNUTARGET=elf$(BITS)-$(GNUTARGET) $(AR)
|
||||
endif
|
||||
|
||||
LDFLAGS_vmlinux-y := -Bstatic
|
||||
|
|
@ -179,7 +172,7 @@ KBUILD_CFLAGS += $(call cc-option,-msoft-float)
|
|||
KBUILD_CFLAGS += -pipe -Iarch/$(ARCH) $(CFLAGS-y)
|
||||
CPP = $(CC) -E $(KBUILD_CFLAGS)
|
||||
|
||||
CHECKFLAGS += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)__
|
||||
CHECKFLAGS += -m$(BITS) -D__powerpc__ -D__powerpc$(BITS)__
|
||||
ifdef CONFIG_CPU_BIG_ENDIAN
|
||||
CHECKFLAGS += -D__BIG_ENDIAN__
|
||||
else
|
||||
|
|
@ -234,7 +227,7 @@ KBUILD_CFLAGS += $(cpu-as-y)
|
|||
KBUILD_AFLAGS += $(aflags-y)
|
||||
KBUILD_CFLAGS += $(cflags-y)
|
||||
|
||||
head-y := arch/powerpc/kernel/head_$(CONFIG_WORD_SIZE).o
|
||||
head-y := arch/powerpc/kernel/head_$(BITS).o
|
||||
head-$(CONFIG_8xx) := arch/powerpc/kernel/head_8xx.o
|
||||
head-$(CONFIG_40x) := arch/powerpc/kernel/head_40x.o
|
||||
head-$(CONFIG_44x) := arch/powerpc/kernel/head_44x.o
|
||||
|
|
|
|||
|
|
@ -19,10 +19,15 @@
|
|||
|
||||
all: $(obj)/zImage
|
||||
|
||||
compress-$(CONFIG_KERNEL_GZIP) := CONFIG_KERNEL_GZIP
|
||||
compress-$(CONFIG_KERNEL_XZ) := CONFIG_KERNEL_XZ
|
||||
|
||||
BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||
-fno-strict-aliasing -Os -msoft-float -pipe \
|
||||
-fomit-frame-pointer -fno-builtin -fPIC -nostdinc \
|
||||
-isystem $(shell $(CROSS32CC) -print-file-name=include)
|
||||
-isystem $(shell $(CROSS32CC) -print-file-name=include) \
|
||||
-D$(compress-y)
|
||||
|
||||
ifdef CONFIG_PPC64_BOOT_WRAPPER
|
||||
BOOTCFLAGS += -m64
|
||||
endif
|
||||
|
|
@ -59,13 +64,30 @@ $(obj)/treeboot-currituck.o: BOOTCFLAGS += -mcpu=405
|
|||
$(obj)/treeboot-akebono.o: BOOTCFLAGS += -mcpu=405
|
||||
$(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
|
||||
|
||||
# The pre-boot decompressors pull in a lot of kernel headers and other source
|
||||
# files. This creates a bit of a dependency headache since we need to copy
|
||||
# these files into the build dir, fix up any includes and ensure that dependent
|
||||
# files are copied in the right order.
|
||||
|
||||
zlib := inffast.c inflate.c inftrees.c
|
||||
zlibheader := inffast.h inffixed.h inflate.h inftrees.h infutil.h
|
||||
zliblinuxheader := zlib.h zconf.h zutil.h
|
||||
# these need to be seperate variables because they are copied out of different
|
||||
# directories in the kernel tree. Sure you COULd merge them, but it's a
|
||||
# cure-is-worse-than-disease situation.
|
||||
zlib-decomp-$(CONFIG_KERNEL_GZIP) := decompress_inflate.c
|
||||
zlib-$(CONFIG_KERNEL_GZIP) := inffast.c inflate.c inftrees.c
|
||||
zlibheader-$(CONFIG_KERNEL_GZIP) := inffast.h inffixed.h inflate.h inftrees.h infutil.h
|
||||
zliblinuxheader-$(CONFIG_KERNEL_GZIP) := zlib.h zconf.h zutil.h
|
||||
|
||||
$(addprefix $(obj)/,$(zlib) cuboot-c2k.o gunzip_util.o main.o): \
|
||||
$(addprefix $(obj)/,$(zliblinuxheader)) $(addprefix $(obj)/,$(zlibheader))
|
||||
$(addprefix $(obj)/, decompress.o): \
|
||||
$(addprefix $(obj)/,$(zlib-decomp-y))
|
||||
|
||||
$(addprefix $(obj)/, $(zlib-decomp-y)): \
|
||||
$(addprefix $(obj)/,$(zliblinuxheader-y)) \
|
||||
$(addprefix $(obj)/,$(zlibheader-y)) \
|
||||
$(addprefix $(obj)/,$(zlib-y))
|
||||
|
||||
$(addprefix $(obj)/,$(zlib-y)): \
|
||||
$(addprefix $(obj)/,$(zliblinuxheader-y)) \
|
||||
$(addprefix $(obj)/,$(zlibheader-y))
|
||||
|
||||
libfdt := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
|
||||
libfdtheader := fdt.h libfdt.h libfdt_internal.h
|
||||
|
|
@ -73,10 +95,10 @@ libfdtheader := fdt.h libfdt.h libfdt_internal.h
|
|||
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o): \
|
||||
$(addprefix $(obj)/,$(libfdtheader))
|
||||
|
||||
src-wlib-y := string.S crt0.S crtsavres.S stdio.c main.c \
|
||||
src-wlib-y := string.S crt0.S crtsavres.S stdio.c decompress.c main.c \
|
||||
$(libfdt) libfdt-wrapper.c \
|
||||
ns16550.c serial.c simple_alloc.c div64.S util.S \
|
||||
gunzip_util.c elf_util.c $(zlib) devtree.c stdlib.c \
|
||||
elf_util.c $(zlib-y) devtree.c stdlib.c \
|
||||
oflib.c ofconsole.c cuboot.c mpsc.c cpm-serial.c \
|
||||
uartlite.c mpc52xx-psc.c opal.c opal-calls.S
|
||||
src-wlib-$(CONFIG_40x) += 4xx.c planetcore.c
|
||||
|
|
@ -125,23 +147,20 @@ obj-wlib := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-wlib))))
|
|||
obj-plat := $(addsuffix .o, $(basename $(addprefix $(obj)/, $(src-plat))))
|
||||
obj-plat: $(libfdt)
|
||||
|
||||
quiet_cmd_copy_zlib = COPY $@
|
||||
cmd_copy_zlib = sed "s@__used@@;s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
|
||||
quiet_cmd_copy_kern_src = COPY $@
|
||||
cmd_copy_kern_src = sed -f $(srctree)/arch/powerpc/boot/fixup-headers.sed $< > $@
|
||||
|
||||
quiet_cmd_copy_zlibheader = COPY $@
|
||||
cmd_copy_zlibheader = sed "s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
|
||||
# stddef.h for NULL
|
||||
quiet_cmd_copy_zliblinuxheader = COPY $@
|
||||
cmd_copy_zliblinuxheader = sed "s@<linux/string.h>@\"string.h\"@;s@<linux/kernel.h>@<stddef.h>@;s@<linux/\([^>]*\).*@\"\1\"@" $< > $@
|
||||
$(addprefix $(obj)/,$(zlib-y)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
|
||||
$(call cmd,copy_kern_src)
|
||||
|
||||
$(addprefix $(obj)/,$(zlib)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
|
||||
$(call cmd,copy_zlib)
|
||||
$(addprefix $(obj)/,$(zlibheader-y)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
|
||||
$(call cmd,copy_kern_src)
|
||||
|
||||
$(addprefix $(obj)/,$(zlibheader)): $(obj)/%: $(srctree)/lib/zlib_inflate/%
|
||||
$(call cmd,copy_zlibheader)
|
||||
$(addprefix $(obj)/,$(zliblinuxheader-y)): $(obj)/%: $(srctree)/include/linux/%
|
||||
$(call cmd,copy_kern_src)
|
||||
|
||||
$(addprefix $(obj)/,$(zliblinuxheader)): $(obj)/%: $(srctree)/include/linux/%
|
||||
$(call cmd,copy_zliblinuxheader)
|
||||
$(addprefix $(obj)/,$(zlib-decomp-y)): $(obj)/%: $(srctree)/lib/%
|
||||
$(call cmd,copy_kern_src)
|
||||
|
||||
quiet_cmd_copy_libfdt = COPY $@
|
||||
cmd_copy_libfdt = cp $< $@
|
||||
|
|
@ -150,17 +169,17 @@ $(addprefix $(obj)/,$(libfdt) $(libfdtheader)): $(obj)/%: $(srctree)/scripts/dtc
|
|||
$(call cmd,copy_libfdt)
|
||||
|
||||
$(obj)/empty.c:
|
||||
@touch $@
|
||||
$(Q)touch $@
|
||||
|
||||
$(obj)/zImage.lds: $(obj)/%: $(srctree)/$(src)/%.S
|
||||
$(CROSS32CC) $(cpp_flags) -E -Wp,-MD,$(depfile) -P -Upowerpc \
|
||||
-D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $<
|
||||
|
||||
$(obj)/zImage.coff.lds $(obj)/zImage.ps3.lds : $(obj)/%: $(srctree)/$(src)/%.S
|
||||
@cp $< $@
|
||||
$(Q)cp $< $@
|
||||
|
||||
clean-files := $(zlib) $(zlibheader) $(zliblinuxheader) \
|
||||
$(libfdt) $(libfdtheader) \
|
||||
clean-files := $(zlib-) $(zlibheader-) $(zliblinuxheader-) \
|
||||
$(zlib-decomp-) $(libfdt) $(libfdtheader) \
|
||||
empty.c zImage.coff.lds zImage.ps3.lds zImage.lds
|
||||
|
||||
quiet_cmd_bootcc = BOOTCC $@
|
||||
|
|
@ -207,10 +226,14 @@ CROSSWRAP := -C "$(CROSS_COMPILE)"
|
|||
endif
|
||||
endif
|
||||
|
||||
compressor-$(CONFIG_KERNEL_GZIP) := gz
|
||||
compressor-$(CONFIG_KERNEL_XZ) := xz
|
||||
|
||||
# args (to if_changed): 1 = (this rule), 2 = platform, 3 = dts 4=dtb 5=initrd
|
||||
quiet_cmd_wrap = WRAP $@
|
||||
cmd_wrap =$(CONFIG_SHELL) $(wrapper) -c -o $@ -p $2 $(CROSSWRAP) \
|
||||
$(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) vmlinux
|
||||
cmd_wrap =$(CONFIG_SHELL) $(wrapper) -Z $(compressor-y) -c -o $@ -p $2 \
|
||||
$(CROSSWRAP) $(if $3, -s $3)$(if $4, -d $4)$(if $5, -i $5) \
|
||||
vmlinux
|
||||
|
||||
image-$(CONFIG_PPC_PSERIES) += zImage.pseries
|
||||
image-$(CONFIG_PPC_POWERNV) += zImage.pseries
|
||||
|
|
@ -391,9 +414,9 @@ image-y := vmlinux.strip
|
|||
endif
|
||||
|
||||
$(obj)/zImage: $(addprefix $(obj)/, $(image-y))
|
||||
@rm -f $@; ln $< $@
|
||||
$(Q)rm -f $@; ln $< $@
|
||||
$(obj)/zImage.initrd: $(addprefix $(obj)/, $(initrd-y))
|
||||
@rm -f $@; ln $< $@
|
||||
$(Q)rm -f $@; ln $< $@
|
||||
|
||||
# Only install the vmlinux
|
||||
install: $(CONFIGURE) $(addprefix $(obj)/, $(image-y))
|
||||
|
|
@ -410,8 +433,9 @@ clean-files += $(image-) $(initrd-) cuImage.* dtbImage.* treeImage.* \
|
|||
zImage.maple simpleImage.* otheros.bld *.dtb
|
||||
|
||||
# clean up files cached by wrapper
|
||||
clean-kernel := vmlinux.strip vmlinux.bin
|
||||
clean-kernel += $(addsuffix .gz,$(clean-kernel))
|
||||
clean-kernel-base := vmlinux.strip vmlinux.bin
|
||||
clean-kernel := $(addsuffix .gz,$(clean-kernel-base))
|
||||
clean-kernel += $(addsuffix .xz,$(clean-kernel-base))
|
||||
# If not absolute clean-files are relative to $(obj).
|
||||
clean-files += $(addprefix $(objtree)/, $(clean-kernel))
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
#include "io.h"
|
||||
#include "ops.h"
|
||||
#include "elf.h"
|
||||
#include "gunzip_util.h"
|
||||
#include "mv64x60.h"
|
||||
#include "cuboot.h"
|
||||
#include "ppcboot.h"
|
||||
|
|
|
|||
148
arch/powerpc/boot/decompress.c
Normal file
148
arch/powerpc/boot/decompress.c
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
* Wrapper around the kernel's pre-boot decompression library.
|
||||
*
|
||||
* Copyright (C) IBM Corporation 2016.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include "elf.h"
|
||||
#include "page.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "ops.h"
|
||||
#include "reg.h"
|
||||
#include "types.h"
|
||||
|
||||
/*
|
||||
* The decompressor_*.c files play #ifdef games so they can be used in both
|
||||
* pre-boot and regular kernel code. We need these definitions to make the
|
||||
* includes work.
|
||||
*/
|
||||
|
||||
#define STATIC static
|
||||
#define INIT
|
||||
#define __always_inline inline
|
||||
|
||||
/*
|
||||
* The build process will copy the required zlib source files and headers
|
||||
* out of lib/ and "fix" the includes so they do not pull in other kernel
|
||||
* headers.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_KERNEL_GZIP
|
||||
# include "decompress_inflate.c"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_XZ
|
||||
# include "xz_config.h"
|
||||
# include "../../../lib/decompress_unxz.c"
|
||||
#endif
|
||||
|
||||
/* globals for tracking the state of the decompression */
|
||||
static unsigned long decompressed_bytes;
|
||||
static unsigned long limit;
|
||||
static unsigned long skip;
|
||||
static char *output_buffer;
|
||||
|
||||
/*
|
||||
* flush() is called by __decompress() when the decompressor's scratch buffer is
|
||||
* full.
|
||||
*/
|
||||
static long flush(void *v, unsigned long buffer_size)
|
||||
{
|
||||
unsigned long end = decompressed_bytes + buffer_size;
|
||||
unsigned long size = buffer_size;
|
||||
unsigned long offset = 0;
|
||||
char *in = v;
|
||||
char *out;
|
||||
|
||||
/*
|
||||
* if we hit our decompression limit, we need to fake an error to abort
|
||||
* the in-progress decompression.
|
||||
*/
|
||||
if (decompressed_bytes >= limit)
|
||||
return -1;
|
||||
|
||||
/* skip this entire block */
|
||||
if (end <= skip) {
|
||||
decompressed_bytes += buffer_size;
|
||||
return buffer_size;
|
||||
}
|
||||
|
||||
/* skip some data at the start, but keep the rest of the block */
|
||||
if (decompressed_bytes < skip && end > skip) {
|
||||
offset = skip - decompressed_bytes;
|
||||
|
||||
in += offset;
|
||||
size -= offset;
|
||||
decompressed_bytes += offset;
|
||||
}
|
||||
|
||||
out = &output_buffer[decompressed_bytes - skip];
|
||||
size = min(decompressed_bytes + size, limit) - decompressed_bytes;
|
||||
|
||||
memcpy(out, in, size);
|
||||
decompressed_bytes += size;
|
||||
|
||||
return buffer_size;
|
||||
}
|
||||
|
||||
static void print_err(char *s)
|
||||
{
|
||||
/* suppress the "error" when we terminate the decompressor */
|
||||
if (decompressed_bytes >= limit)
|
||||
return;
|
||||
|
||||
printf("Decompression error: '%s'\n\r", s);
|
||||
}
|
||||
|
||||
/**
|
||||
* partial_decompress - decompresses part or all of a compressed buffer
|
||||
* @inbuf: input buffer
|
||||
* @input_size: length of the input buffer
|
||||
* @outbuf: input buffer
|
||||
* @output_size: length of the input buffer
|
||||
* @skip number of output bytes to ignore
|
||||
*
|
||||
* This function takes compressed data from inbuf, decompresses and write it to
|
||||
* outbuf. Once output_size bytes are written to the output buffer, or the
|
||||
* stream is exhausted the function will return the number of bytes that were
|
||||
* decompressed. Otherwise it will return whatever error code the decompressor
|
||||
* reported (NB: This is specific to each decompressor type).
|
||||
*
|
||||
* The skip functionality is mainly there so the program and discover
|
||||
* the size of the compressed image so that it can ask firmware (if present)
|
||||
* for an appropriately sized buffer.
|
||||
*/
|
||||
long partial_decompress(void *inbuf, unsigned long input_size,
|
||||
void *outbuf, unsigned long output_size, unsigned long _skip)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* The skipped bytes needs to be included in the size of data we want
|
||||
* to decompress.
|
||||
*/
|
||||
output_size += _skip;
|
||||
|
||||
decompressed_bytes = 0;
|
||||
output_buffer = outbuf;
|
||||
limit = output_size;
|
||||
skip = _skip;
|
||||
|
||||
ret = __decompress(inbuf, input_size, NULL, flush, outbuf,
|
||||
output_size, NULL, print_err);
|
||||
|
||||
/*
|
||||
* If decompression was aborted due to an actual error rather than
|
||||
* a fake error that we used to abort, then we should report it.
|
||||
*/
|
||||
if (decompressed_bytes < limit)
|
||||
return ret;
|
||||
|
||||
return decompressed_bytes - skip;
|
||||
}
|
||||
12
arch/powerpc/boot/fixup-headers.sed
Normal file
12
arch/powerpc/boot/fixup-headers.sed
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# Copyright 2016 IBM Corporation.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 or later as
|
||||
# published by the Free Software Foundation.
|
||||
|
||||
s@#include <linux/decompress/mm\.h>@@;
|
||||
s@\"zlib_inflate/\([^\"]*\).*@"\1"@;
|
||||
s@<linux/kernel.h>@<stddef.h>@;
|
||||
|
||||
s@__used@@;
|
||||
s@<linux/\([^>]*\).*@"\1"@;
|
||||
|
|
@ -1,204 +0,0 @@
|
|||
/*
|
||||
* Copyright 2007 David Gibson, IBM Corporation.
|
||||
* Based on earlier work, Copyright (C) Paul Mackerras 1997.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "ops.h"
|
||||
#include "gunzip_util.h"
|
||||
|
||||
#define HEAD_CRC 2
|
||||
#define EXTRA_FIELD 4
|
||||
#define ORIG_NAME 8
|
||||
#define COMMENT 0x10
|
||||
#define RESERVED 0xe0
|
||||
|
||||
/**
|
||||
* gunzip_start - prepare to decompress gzip data
|
||||
* @state: decompressor state structure to be initialized
|
||||
* @src: buffer containing gzip compressed or uncompressed data
|
||||
* @srclen: size in bytes of the buffer at src
|
||||
*
|
||||
* If the buffer at @src contains a gzip header, this function
|
||||
* initializes zlib to decompress the data, storing the decompression
|
||||
* state in @state. The other functions in this file can then be used
|
||||
* to decompress data from the gzipped stream.
|
||||
*
|
||||
* If the buffer at @src does not contain a gzip header, it is assumed
|
||||
* to contain uncompressed data. The buffer information is recorded
|
||||
* in @state and the other functions in this file will simply copy
|
||||
* data from the uncompressed data stream at @src.
|
||||
*
|
||||
* Any errors, such as bad compressed data, cause an error to be
|
||||
* printed an the platform's exit() function to be called.
|
||||
*/
|
||||
void gunzip_start(struct gunzip_state *state, void *src, int srclen)
|
||||
{
|
||||
char *hdr = src;
|
||||
int hdrlen = 0;
|
||||
|
||||
memset(state, 0, sizeof(*state));
|
||||
|
||||
/* Check for gzip magic number */
|
||||
if ((hdr[0] == 0x1f) && (hdr[1] == 0x8b)) {
|
||||
/* gzip data, initialize zlib parameters */
|
||||
int r, flags;
|
||||
|
||||
state->s.workspace = state->scratch;
|
||||
if (zlib_inflate_workspacesize() > sizeof(state->scratch))
|
||||
fatal("insufficient scratch space for gunzip\n\r");
|
||||
|
||||
/* skip header */
|
||||
hdrlen = 10;
|
||||
flags = hdr[3];
|
||||
if (hdr[2] != Z_DEFLATED || (flags & RESERVED) != 0)
|
||||
fatal("bad gzipped data\n\r");
|
||||
if ((flags & EXTRA_FIELD) != 0)
|
||||
hdrlen = 12 + hdr[10] + (hdr[11] << 8);
|
||||
if ((flags & ORIG_NAME) != 0)
|
||||
while (hdr[hdrlen++] != 0)
|
||||
;
|
||||
if ((flags & COMMENT) != 0)
|
||||
while (hdr[hdrlen++] != 0)
|
||||
;
|
||||
if ((flags & HEAD_CRC) != 0)
|
||||
hdrlen += 2;
|
||||
if (hdrlen >= srclen)
|
||||
fatal("gunzip_start: ran out of data in header\n\r");
|
||||
|
||||
r = zlib_inflateInit2(&state->s, -MAX_WBITS);
|
||||
if (r != Z_OK)
|
||||
fatal("inflateInit2 returned %d\n\r", r);
|
||||
}
|
||||
|
||||
state->s.total_in = hdrlen;
|
||||
state->s.next_in = src + hdrlen;
|
||||
state->s.avail_in = srclen - hdrlen;
|
||||
}
|
||||
|
||||
/**
|
||||
* gunzip_partial - extract bytes from a gzip data stream
|
||||
* @state: gzip state structure previously initialized by gunzip_start()
|
||||
* @dst: buffer to store extracted data
|
||||
* @dstlen: maximum number of bytes to extract
|
||||
*
|
||||
* This function extracts at most @dstlen bytes from the data stream
|
||||
* previously associated with @state by gunzip_start(), decompressing
|
||||
* if necessary. Exactly @dstlen bytes are extracted unless the data
|
||||
* stream doesn't contain enough bytes, in which case the entire
|
||||
* remainder of the stream is decompressed.
|
||||
*
|
||||
* Returns the actual number of bytes extracted. If any errors occur,
|
||||
* such as a corrupted compressed stream, an error is printed an the
|
||||
* platform's exit() function is called.
|
||||
*/
|
||||
int gunzip_partial(struct gunzip_state *state, void *dst, int dstlen)
|
||||
{
|
||||
int len;
|
||||
|
||||
if (state->s.workspace) {
|
||||
/* gunzipping */
|
||||
int r;
|
||||
|
||||
state->s.next_out = dst;
|
||||
state->s.avail_out = dstlen;
|
||||
r = zlib_inflate(&state->s, Z_FULL_FLUSH);
|
||||
if (r != Z_OK && r != Z_STREAM_END)
|
||||
fatal("inflate returned %d msg: %s\n\r", r, state->s.msg);
|
||||
len = state->s.next_out - (Byte *)dst;
|
||||
} else {
|
||||
/* uncompressed image */
|
||||
len = min(state->s.avail_in, (uLong)dstlen);
|
||||
memcpy(dst, state->s.next_in, len);
|
||||
state->s.next_in += len;
|
||||
state->s.avail_in -= len;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
/**
|
||||
* gunzip_exactly - extract a fixed number of bytes from a gzip data stream
|
||||
* @state: gzip state structure previously initialized by gunzip_start()
|
||||
* @dst: buffer to store extracted data
|
||||
* @dstlen: number of bytes to extract
|
||||
*
|
||||
* This function extracts exactly @dstlen bytes from the data stream
|
||||
* previously associated with @state by gunzip_start(), decompressing
|
||||
* if necessary.
|
||||
*
|
||||
* If there are less @dstlen bytes available in the data stream, or if
|
||||
* any other errors occur, such as a corrupted compressed stream, an
|
||||
* error is printed an the platform's exit() function is called.
|
||||
*/
|
||||
void gunzip_exactly(struct gunzip_state *state, void *dst, int dstlen)
|
||||
{
|
||||
int len;
|
||||
|
||||
len = gunzip_partial(state, dst, dstlen);
|
||||
if (len < dstlen)
|
||||
fatal("\n\rgunzip_exactly: ran out of data!"
|
||||
" Wanted %d, got %d.\n\r", dstlen, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* gunzip_discard - discard bytes from a gzip data stream
|
||||
* @state: gzip state structure previously initialized by gunzip_start()
|
||||
* @len: number of bytes to discard
|
||||
*
|
||||
* This function extracts, then discards exactly @len bytes from the
|
||||
* data stream previously associated with @state by gunzip_start().
|
||||
* Subsequent gunzip_partial(), gunzip_exactly() or gunzip_finish()
|
||||
* calls will extract the data following the discarded bytes in the
|
||||
* data stream.
|
||||
*
|
||||
* If there are less @len bytes available in the data stream, or if
|
||||
* any other errors occur, such as a corrupted compressed stream, an
|
||||
* error is printed an the platform's exit() function is called.
|
||||
*/
|
||||
void gunzip_discard(struct gunzip_state *state, int len)
|
||||
{
|
||||
static char discard_buf[128];
|
||||
|
||||
while (len > sizeof(discard_buf)) {
|
||||
gunzip_exactly(state, discard_buf, sizeof(discard_buf));
|
||||
len -= sizeof(discard_buf);
|
||||
}
|
||||
|
||||
if (len > 0)
|
||||
gunzip_exactly(state, discard_buf, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* gunzip_finish - extract all remaining bytes from a gzip data stream
|
||||
* @state: gzip state structure previously initialized by gunzip_start()
|
||||
* @dst: buffer to store extracted data
|
||||
* @dstlen: maximum number of bytes to extract
|
||||
*
|
||||
* This function extracts all remaining data, or at most @dstlen
|
||||
* bytes, from the stream previously associated with @state by
|
||||
* gunzip_start(). zlib is then shut down, so it is an error to use
|
||||
* any of the functions in this file on @state until it is
|
||||
* re-initialized with another call to gunzip_start().
|
||||
*
|
||||
* If any errors occur, such as a corrupted compressed stream, an
|
||||
* error is printed an the platform's exit() function is called.
|
||||
*/
|
||||
int gunzip_finish(struct gunzip_state *state, void *dst, int dstlen)
|
||||
{
|
||||
int len;
|
||||
|
||||
len = gunzip_partial(state, dst, dstlen);
|
||||
|
||||
if (state->s.workspace) {
|
||||
zlib_inflateEnd(&state->s);
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
/*
|
||||
* Decompression convenience functions
|
||||
*
|
||||
* Copyright 2007 David Gibson, IBM Corporation.
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
#ifndef _PPC_BOOT_GUNZIP_UTIL_H_
|
||||
#define _PPC_BOOT_GUNZIP_UTIL_H_
|
||||
|
||||
#include "zlib.h"
|
||||
|
||||
/*
|
||||
* These functions are designed to make life easy for decompressing
|
||||
* kernel images, initrd images or any other gzip compressed image,
|
||||
* particularly if its useful to decompress part of the image (e.g. to
|
||||
* examine headers) before decompressing the remainder.
|
||||
*
|
||||
* To use:
|
||||
* - declare a gunzip_state structure
|
||||
* - use gunzip_start() to initialize the state, associating it
|
||||
* with a stream of compressed data
|
||||
* - use gunzip_partial(), gunzip_exactly() and gunzip_discard()
|
||||
* in any combination to extract pieces of data from the stream
|
||||
* - Finally use gunzip_finish() to extract the tail of the
|
||||
* compressed stream and wind up zlib
|
||||
*/
|
||||
|
||||
/* scratch space for gunzip; 46912 is from zlib_inflate_workspacesize() */
|
||||
#define GUNZIP_SCRATCH_SIZE 46912
|
||||
|
||||
struct gunzip_state {
|
||||
z_stream s;
|
||||
char scratch[46912];
|
||||
};
|
||||
|
||||
void gunzip_start(struct gunzip_state *state, void *src, int srclen);
|
||||
int gunzip_partial(struct gunzip_state *state, void *dst, int dstlen);
|
||||
void gunzip_exactly(struct gunzip_state *state, void *dst, int len);
|
||||
void gunzip_discard(struct gunzip_state *state, int len);
|
||||
int gunzip_finish(struct gunzip_state *state, void *dst, int len);
|
||||
|
||||
#endif /* _PPC_BOOT_GUNZIP_UTIL_H_ */
|
||||
|
|
@ -15,11 +15,8 @@
|
|||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "ops.h"
|
||||
#include "gunzip_util.h"
|
||||
#include "reg.h"
|
||||
|
||||
static struct gunzip_state gzstate;
|
||||
|
||||
struct addr_range {
|
||||
void *addr;
|
||||
unsigned long size;
|
||||
|
|
@ -30,15 +27,14 @@ struct addr_range {
|
|||
static struct addr_range prep_kernel(void)
|
||||
{
|
||||
char elfheader[256];
|
||||
void *vmlinuz_addr = _vmlinux_start;
|
||||
unsigned char *vmlinuz_addr = (unsigned char *)_vmlinux_start;
|
||||
unsigned long vmlinuz_size = _vmlinux_end - _vmlinux_start;
|
||||
void *addr = 0;
|
||||
struct elf_info ei;
|
||||
int len;
|
||||
long len;
|
||||
|
||||
/* gunzip the ELF header of the kernel */
|
||||
gunzip_start(&gzstate, vmlinuz_addr, vmlinuz_size);
|
||||
gunzip_exactly(&gzstate, elfheader, sizeof(elfheader));
|
||||
partial_decompress(vmlinuz_addr, vmlinuz_size,
|
||||
elfheader, sizeof(elfheader), 0);
|
||||
|
||||
if (!parse_elf64(elfheader, &ei) && !parse_elf32(elfheader, &ei))
|
||||
fatal("Error: not a valid PPC32 or PPC64 ELF file!\n\r");
|
||||
|
|
@ -51,7 +47,7 @@ static struct addr_range prep_kernel(void)
|
|||
* the kernel bss must be claimed (it will be zero'd by the
|
||||
* kernel itself)
|
||||
*/
|
||||
printf("Allocating 0x%lx bytes for kernel ...\n\r", ei.memsize);
|
||||
printf("Allocating 0x%lx bytes for kernel...\n\r", ei.memsize);
|
||||
|
||||
if (platform_ops.vmlinux_alloc) {
|
||||
addr = platform_ops.vmlinux_alloc(ei.memsize);
|
||||
|
|
@ -71,16 +67,21 @@ static struct addr_range prep_kernel(void)
|
|||
"device tree\n\r");
|
||||
}
|
||||
|
||||
/* Finally, gunzip the kernel */
|
||||
printf("gunzipping (0x%p <- 0x%p:0x%p)...", addr,
|
||||
/* Finally, decompress the kernel */
|
||||
printf("Decompressing (0x%p <- 0x%p:0x%p)...\n\r", addr,
|
||||
vmlinuz_addr, vmlinuz_addr+vmlinuz_size);
|
||||
/* discard up to the actual load data */
|
||||
gunzip_discard(&gzstate, ei.elfoffset - sizeof(elfheader));
|
||||
len = gunzip_finish(&gzstate, addr, ei.loadsize);
|
||||
|
||||
len = partial_decompress(vmlinuz_addr, vmlinuz_size,
|
||||
addr, ei.loadsize, ei.elfoffset);
|
||||
|
||||
if (len < 0)
|
||||
fatal("Decompression failed with error code %ld\n\r", len);
|
||||
|
||||
if (len != ei.loadsize)
|
||||
fatal("ran out of data! only got 0x%x of 0x%lx bytes.\n\r",
|
||||
len, ei.loadsize);
|
||||
printf("done 0x%x bytes\n\r", len);
|
||||
fatal("Decompression error: got 0x%lx bytes, expected 0x%lx.\n\r",
|
||||
len, ei.loadsize);
|
||||
|
||||
printf("Done! Decompressed 0x%lx bytes\n\r", len);
|
||||
|
||||
flush_cache(addr, ei.loadsize);
|
||||
|
||||
|
|
|
|||
|
|
@ -260,4 +260,7 @@ int __ilog2_u32(u32 n)
|
|||
return 31 - bit;
|
||||
}
|
||||
|
||||
long partial_decompress(void *inbuf, unsigned long input_size, void *outbuf,
|
||||
unsigned long output_size, unsigned long skip);
|
||||
|
||||
#endif /* _PPC_BOOT_OPS_H_ */
|
||||
|
|
|
|||
14
arch/powerpc/boot/stdbool.h
Normal file
14
arch/powerpc/boot/stdbool.h
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* Copyright (C) IBM Corporation 2016.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This file is only necessary because some of the pre-boot decompressors
|
||||
* expect stdbool.h to be available.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "types.h"
|
||||
13
arch/powerpc/boot/stdint.h
Normal file
13
arch/powerpc/boot/stdint.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Copyright (C) IBM Corporation 2016.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This file is only necessary because some of the pre-boot decompressors
|
||||
* expect stdint.h to be available.
|
||||
*/
|
||||
|
||||
#include "types.h"
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef _TYPES_H_
|
||||
#define _TYPES_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
typedef unsigned char u8;
|
||||
|
|
@ -34,4 +36,16 @@ typedef s64 int64_t;
|
|||
(void) (&_x == &_y); \
|
||||
_x > _y ? _x : _y; })
|
||||
|
||||
#define min_t(type, a, b) min(((type) a), ((type) b))
|
||||
#define max_t(type, a, b) max(((type) a), ((type) b))
|
||||
|
||||
typedef int bool;
|
||||
|
||||
#ifndef true
|
||||
#define true 1
|
||||
#endif
|
||||
|
||||
#ifndef false
|
||||
#define false 0
|
||||
#endif
|
||||
#endif /* _TYPES_H_ */
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
# -D dir specify directory containing data files used by script
|
||||
# (default ./arch/powerpc/boot)
|
||||
# -W dir specify working directory for temporary files (default .)
|
||||
# -z use gzip (legacy)
|
||||
# -Z zsuffix compression to use (gz, xz or none)
|
||||
|
||||
# Stop execution if any command fails
|
||||
set -e
|
||||
|
|
@ -38,7 +40,7 @@ dtb=
|
|||
dts=
|
||||
cacheit=
|
||||
binary=
|
||||
gzip=.gz
|
||||
compression=.gz
|
||||
pie=
|
||||
format=
|
||||
|
||||
|
|
@ -59,7 +61,8 @@ tmpdir=.
|
|||
usage() {
|
||||
echo 'Usage: wrapper [-o output] [-p platform] [-i initrd]' >&2
|
||||
echo ' [-d devtree] [-s tree.dts] [-c] [-C cross-prefix]' >&2
|
||||
echo ' [-D datadir] [-W workingdir] [--no-gzip] [vmlinux]' >&2
|
||||
echo ' [-D datadir] [-W workingdir] [-Z (gz|xz|none)]' >&2
|
||||
echo ' [--no-compression] [vmlinux]' >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
|
@ -126,8 +129,24 @@ while [ "$#" -gt 0 ]; do
|
|||
[ "$#" -gt 0 ] || usage
|
||||
tmpdir="$1"
|
||||
;;
|
||||
-z)
|
||||
compression=.gz
|
||||
;;
|
||||
-Z)
|
||||
shift
|
||||
[ "$#" -gt 0 ] || usage
|
||||
[ "$1" != "gz" -o "$1" != "xz" -o "$1" != "none" ] || usage
|
||||
|
||||
compression=".$1"
|
||||
|
||||
if [ $compression = ".none" ]; then
|
||||
compression=
|
||||
fi
|
||||
;;
|
||||
--no-gzip)
|
||||
gzip=
|
||||
# a "feature" of the the wrapper script is that it can be used outside
|
||||
# the kernel tree. So keeping this around for backwards compatibility.
|
||||
compression=
|
||||
;;
|
||||
-?)
|
||||
usage
|
||||
|
|
@ -140,6 +159,7 @@ while [ "$#" -gt 0 ]; do
|
|||
shift
|
||||
done
|
||||
|
||||
|
||||
if [ -n "$dts" ]; then
|
||||
if [ ! -r "$dts" -a -r "$object/dts/$dts" ]; then
|
||||
dts="$object/dts/$dts"
|
||||
|
|
@ -212,7 +232,7 @@ miboot|uboot*)
|
|||
;;
|
||||
cuboot*)
|
||||
binary=y
|
||||
gzip=
|
||||
compression=
|
||||
case "$platform" in
|
||||
*-mpc866ads|*-mpc885ads|*-adder875*|*-ep88xc)
|
||||
platformo=$object/cuboot-8xx.o
|
||||
|
|
@ -243,7 +263,7 @@ cuboot*)
|
|||
ps3)
|
||||
platformo="$object/ps3-head.o $object/ps3-hvcall.o $object/ps3.o"
|
||||
lds=$object/zImage.ps3.lds
|
||||
gzip=
|
||||
compression=
|
||||
ext=bin
|
||||
objflags="-O binary --set-section-flags=.bss=contents,alloc,load,data"
|
||||
ksection=.kernel:vmlinux.bin
|
||||
|
|
@ -310,27 +330,37 @@ mvme7100)
|
|||
esac
|
||||
|
||||
vmz="$tmpdir/`basename \"$kernel\"`.$ext"
|
||||
if [ -z "$cacheit" -o ! -f "$vmz$gzip" -o "$vmz$gzip" -ot "$kernel" ]; then
|
||||
${CROSS}objcopy $objflags "$kernel" "$vmz.$$"
|
||||
|
||||
strip_size=$(stat -c %s $vmz.$$)
|
||||
# Calculate the vmlinux.strip size
|
||||
${CROSS}objcopy $objflags "$kernel" "$vmz.$$"
|
||||
strip_size=$(stat -c %s $vmz.$$)
|
||||
|
||||
if [ -n "$gzip" ]; then
|
||||
if [ -z "$cacheit" -o ! -f "$vmz$compression" -o "$vmz$compression" -ot "$kernel" ]; then
|
||||
# recompress the image if we need to
|
||||
case $compression in
|
||||
.xz)
|
||||
xz --check=crc32 -f -6 "$vmz.$$"
|
||||
;;
|
||||
.gz)
|
||||
gzip -n -f -9 "$vmz.$$"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# drop the compression suffix so the stripped vmlinux is used
|
||||
compression=
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$cacheit" ]; then
|
||||
mv -f "$vmz.$$$gzip" "$vmz$gzip"
|
||||
mv -f "$vmz.$$$compression" "$vmz$compression"
|
||||
else
|
||||
vmz="$vmz.$$"
|
||||
fi
|
||||
else
|
||||
# Calculate the vmlinux.strip size
|
||||
${CROSS}objcopy $objflags "$kernel" "$vmz.$$"
|
||||
strip_size=$(stat -c %s $vmz.$$)
|
||||
rm -f $vmz.$$
|
||||
fi
|
||||
|
||||
vmz="$vmz$compression"
|
||||
|
||||
if [ "$make_space" = "y" ]; then
|
||||
# Round the size to next higher MB limit
|
||||
round_size=$(((strip_size + 0xfffff) & 0xfff00000))
|
||||
|
|
@ -346,8 +376,6 @@ if [ "$make_space" = "y" ]; then
|
|||
fi
|
||||
fi
|
||||
|
||||
vmz="$vmz$gzip"
|
||||
|
||||
# Extract kernel version information, some platforms want to include
|
||||
# it in the image header
|
||||
version=`${CROSS}strings "$kernel" | grep '^Linux version [-0-9.]' | \
|
||||
|
|
@ -417,6 +445,7 @@ if [ "$platform" != "miboot" ]; then
|
|||
if [ -n "$link_address" ] ; then
|
||||
text_start="-Ttext $link_address"
|
||||
fi
|
||||
#link everything
|
||||
${CROSS}ld -m $format -T $lds $text_start $pie -o "$ofile" \
|
||||
$platformo $tmp $object/wrapper.a
|
||||
rm $tmp
|
||||
|
|
|
|||
39
arch/powerpc/boot/xz_config.h
Normal file
39
arch/powerpc/boot/xz_config.h
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#ifndef __XZ_CONFIG_H__
|
||||
#define __XZ_CONFIG_H__
|
||||
|
||||
/*
|
||||
* most of this is copied from lib/xz/xz_private.h, we can't use their defines
|
||||
* since the boot wrapper is not built in the same environment as the rest of
|
||||
* the kernel.
|
||||
*/
|
||||
|
||||
#include "types.h"
|
||||
#include "swab.h"
|
||||
|
||||
static inline uint32_t swab32p(void *p)
|
||||
{
|
||||
uint32_t *q = p;
|
||||
|
||||
return swab32(*q);
|
||||
}
|
||||
|
||||
#ifdef __LITTLE_ENDIAN__
|
||||
#define get_le32(p) (*((uint32_t *) (p)))
|
||||
#else
|
||||
#define get_le32(p) swab32p(p)
|
||||
#endif
|
||||
|
||||
#define memeq(a, b, size) (memcmp(a, b, size) == 0)
|
||||
#define memzero(buf, size) memset(buf, 0, size)
|
||||
|
||||
/* prevent the inclusion of the xz-preboot MM headers */
|
||||
#define DECOMPR_MM_H
|
||||
#define memmove memmove
|
||||
#define XZ_EXTERN static
|
||||
|
||||
/* xz.h needs to be included directly since we need enum xz_mode */
|
||||
#include "../../../include/linux/xz.h"
|
||||
|
||||
#undef XZ_EXTERN
|
||||
|
||||
#endif
|
||||
|
|
@ -15,6 +15,8 @@ CONFIG_TASK_XACCT=y
|
|||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_LOG_CPU_MAX_BUF_SHIFT=13
|
||||
CONFIG_NUMA_BALANCING=y
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_MEMCG=y
|
||||
|
|
@ -95,7 +97,7 @@ CONFIG_BLK_DEV_IDECD=y
|
|||
CONFIG_BLK_DEV_GENERIC=y
|
||||
CONFIG_BLK_DEV_AMD74XX=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
|
|
@ -107,7 +109,7 @@ CONFIG_SCSI_CXGB4_ISCSI=m
|
|||
CONFIG_SCSI_BNX2_ISCSI=m
|
||||
CONFIG_BE2ISCSI=m
|
||||
CONFIG_SCSI_MPT2SAS=m
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SCSI_SYM53C8XX_2=m
|
||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
||||
CONFIG_SCSI_IPR=y
|
||||
CONFIG_SCSI_QLA_FC=m
|
||||
|
|
@ -149,10 +151,10 @@ CONFIG_TUN=m
|
|||
CONFIG_VETH=m
|
||||
CONFIG_VIRTIO_NET=m
|
||||
CONFIG_VHOST_NET=m
|
||||
CONFIG_VORTEX=y
|
||||
CONFIG_VORTEX=m
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_ACENIC_OMIT_TIGON_I=y
|
||||
CONFIG_PCNET32=y
|
||||
CONFIG_PCNET32=m
|
||||
CONFIG_TIGON3=y
|
||||
CONFIG_BNX2X=m
|
||||
CONFIG_CHELSIO_T1=m
|
||||
|
|
@ -163,6 +165,7 @@ CONFIG_E1000=y
|
|||
CONFIG_E1000E=y
|
||||
CONFIG_IXGB=m
|
||||
CONFIG_IXGBE=m
|
||||
CONFIG_I40E=m
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MYRI10GE=m
|
||||
CONFIG_QLGE=m
|
||||
|
|
@ -238,7 +241,7 @@ CONFIG_EXT2_FS_SECURITY=y
|
|||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_REISERFS_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_REISERFS_FS_XATTR=y
|
||||
CONFIG_REISERFS_FS_POSIX_ACL=y
|
||||
CONFIG_REISERFS_FS_SECURITY=y
|
||||
|
|
@ -253,10 +256,10 @@ CONFIG_NILFS2_FS=m
|
|||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_OVERLAY_FS=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
|
|
@ -310,6 +313,8 @@ CONFIG_CRYPTO_TEA=m
|
|||
CONFIG_CRYPTO_TWOFISH=m
|
||||
CONFIG_CRYPTO_LZO=m
|
||||
CONFIG_CRYPTO_DEV_NX=y
|
||||
CONFIG_CRYPTO_DEV_VMX=y
|
||||
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ CONFIG_TASKSTATS=y
|
|||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_LOG_CPU_MAX_BUF_SHIFT=13
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
|
|
@ -90,7 +92,7 @@ CONFIG_BLK_DEV_AMD74XX=y
|
|||
CONFIG_BLK_DEV_IDE_PMAC=y
|
||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
|
|
@ -103,7 +105,7 @@ CONFIG_BE2ISCSI=m
|
|||
CONFIG_SCSI_MPT2SAS=m
|
||||
CONFIG_SCSI_IBMVSCSI=y
|
||||
CONFIG_SCSI_IBMVFC=m
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SCSI_SYM53C8XX_2=m
|
||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
||||
CONFIG_SCSI_IPR=y
|
||||
CONFIG_SCSI_QLA_FC=m
|
||||
|
|
@ -149,10 +151,10 @@ CONFIG_NETCONSOLE=y
|
|||
CONFIG_TUN=m
|
||||
CONFIG_VIRTIO_NET=m
|
||||
CONFIG_VHOST_NET=m
|
||||
CONFIG_VORTEX=y
|
||||
CONFIG_VORTEX=m
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_ACENIC_OMIT_TIGON_I=y
|
||||
CONFIG_PCNET32=y
|
||||
CONFIG_PCNET32=m
|
||||
CONFIG_TIGON3=y
|
||||
CONFIG_BNX2X=m
|
||||
CONFIG_CHELSIO_T1=m
|
||||
|
|
@ -165,6 +167,7 @@ CONFIG_E1000=y
|
|||
CONFIG_E1000E=y
|
||||
CONFIG_IXGB=m
|
||||
CONFIG_IXGBE=m
|
||||
CONFIG_I40E=m
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MYRI10GE=m
|
||||
CONFIG_PASEMI_MAC=y
|
||||
|
|
@ -269,7 +272,7 @@ CONFIG_EXT2_FS_SECURITY=y
|
|||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_REISERFS_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_REISERFS_FS_XATTR=y
|
||||
CONFIG_REISERFS_FS_POSIX_ACL=y
|
||||
CONFIG_REISERFS_FS_SECURITY=y
|
||||
|
|
@ -284,10 +287,10 @@ CONFIG_NILFS2_FS=m
|
|||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_OVERLAY_FS=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
|
|
@ -347,6 +350,8 @@ CONFIG_CRYPTO_LZO=m
|
|||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_NX=y
|
||||
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
|
||||
CONFIG_CRYPTO_DEV_VMX=y
|
||||
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ CONFIG_TASK_XACCT=y
|
|||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_LOG_CPU_MAX_BUF_SHIFT=13
|
||||
CONFIG_NUMA_BALANCING=y
|
||||
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
|
||||
CONFIG_CGROUPS=y
|
||||
|
|
@ -95,7 +97,7 @@ CONFIG_BLK_DEV_IDECD=y
|
|||
CONFIG_BLK_DEV_GENERIC=y
|
||||
CONFIG_BLK_DEV_AMD74XX=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_CHR_DEV_ST=m
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
|
|
@ -108,7 +110,7 @@ CONFIG_BE2ISCSI=m
|
|||
CONFIG_SCSI_MPT2SAS=m
|
||||
CONFIG_SCSI_IBMVSCSI=y
|
||||
CONFIG_SCSI_IBMVFC=m
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SCSI_SYM53C8XX_2=m
|
||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
||||
CONFIG_SCSI_IPR=y
|
||||
CONFIG_SCSI_QLA_FC=m
|
||||
|
|
@ -150,10 +152,10 @@ CONFIG_TUN=m
|
|||
CONFIG_VETH=m
|
||||
CONFIG_VIRTIO_NET=m
|
||||
CONFIG_VHOST_NET=m
|
||||
CONFIG_VORTEX=y
|
||||
CONFIG_VORTEX=m
|
||||
CONFIG_ACENIC=m
|
||||
CONFIG_ACENIC_OMIT_TIGON_I=y
|
||||
CONFIG_PCNET32=y
|
||||
CONFIG_PCNET32=m
|
||||
CONFIG_TIGON3=y
|
||||
CONFIG_BNX2X=m
|
||||
CONFIG_CHELSIO_T1=m
|
||||
|
|
@ -166,6 +168,7 @@ CONFIG_E1000=y
|
|||
CONFIG_E1000E=y
|
||||
CONFIG_IXGB=m
|
||||
CONFIG_IXGBE=m
|
||||
CONFIG_I40E=m
|
||||
CONFIG_MLX4_EN=m
|
||||
CONFIG_MYRI10GE=m
|
||||
CONFIG_QLGE=m
|
||||
|
|
@ -241,7 +244,7 @@ CONFIG_EXT2_FS_SECURITY=y
|
|||
CONFIG_EXT4_FS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_EXT4_FS_SECURITY=y
|
||||
CONFIG_REISERFS_FS=y
|
||||
CONFIG_REISERFS_FS=m
|
||||
CONFIG_REISERFS_FS_XATTR=y
|
||||
CONFIG_REISERFS_FS_POSIX_ACL=y
|
||||
CONFIG_REISERFS_FS_SECURITY=y
|
||||
|
|
@ -256,10 +259,10 @@ CONFIG_NILFS2_FS=m
|
|||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_OVERLAY_FS=m
|
||||
CONFIG_ISO9660_FS=y
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_VFAT_FS=m
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
|
|
@ -314,6 +317,8 @@ CONFIG_CRYPTO_LZO=m
|
|||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_NX=y
|
||||
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
|
||||
CONFIG_CRYPTO_DEV_VMX=y
|
||||
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue