diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/x86/boot/compressed | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'arch/x86/boot/compressed')
-rw-r--r-- | arch/x86/boot/compressed/Makefile | 5 | ||||
-rw-r--r-- | arch/x86/boot/compressed/head_64.S | 2 | ||||
-rw-r--r-- | arch/x86/boot/compressed/misc.c | 35 | ||||
-rw-r--r-- | arch/x86/boot/compressed/mkpiggy.c | 9 |
4 files changed, 40 insertions, 11 deletions
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile index 0c229551eead..09664efb9cee 100644 --- a/arch/x86/boot/compressed/Makefile +++ b/arch/x86/boot/compressed/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | # create a compressed vmlinux image from the original vmlinux | 4 | # create a compressed vmlinux image from the original vmlinux |
5 | # | 5 | # |
6 | 6 | ||
7 | targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o | 7 | targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.xz vmlinux.bin.lzo head_$(BITS).o misc.o string.o cmdline.o early_serial_console.o piggy.o |
8 | 8 | ||
9 | KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 | 9 | KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2 |
10 | KBUILD_CFLAGS += -fno-strict-aliasing -fPIC | 10 | KBUILD_CFLAGS += -fno-strict-aliasing -fPIC |
@@ -49,12 +49,15 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE | |||
49 | $(call if_changed,bzip2) | 49 | $(call if_changed,bzip2) |
50 | $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE | 50 | $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE |
51 | $(call if_changed,lzma) | 51 | $(call if_changed,lzma) |
52 | $(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE | ||
53 | $(call if_changed,xzkern) | ||
52 | $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE | 54 | $(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE |
53 | $(call if_changed,lzo) | 55 | $(call if_changed,lzo) |
54 | 56 | ||
55 | suffix-$(CONFIG_KERNEL_GZIP) := gz | 57 | suffix-$(CONFIG_KERNEL_GZIP) := gz |
56 | suffix-$(CONFIG_KERNEL_BZIP2) := bz2 | 58 | suffix-$(CONFIG_KERNEL_BZIP2) := bz2 |
57 | suffix-$(CONFIG_KERNEL_LZMA) := lzma | 59 | suffix-$(CONFIG_KERNEL_LZMA) := lzma |
60 | suffix-$(CONFIG_KERNEL_XZ) := xz | ||
58 | suffix-$(CONFIG_KERNEL_LZO) := lzo | 61 | suffix-$(CONFIG_KERNEL_LZO) := lzo |
59 | 62 | ||
60 | quiet_cmd_mkpiggy = MKPIGGY $@ | 63 | quiet_cmd_mkpiggy = MKPIGGY $@ |
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S index 52f85a196fa0..35af09d13dc1 100644 --- a/arch/x86/boot/compressed/head_64.S +++ b/arch/x86/boot/compressed/head_64.S | |||
@@ -182,7 +182,7 @@ no_longmode: | |||
182 | hlt | 182 | hlt |
183 | jmp 1b | 183 | jmp 1b |
184 | 184 | ||
185 | #include "../../kernel/verify_cpu_64.S" | 185 | #include "../../kernel/verify_cpu.S" |
186 | 186 | ||
187 | /* | 187 | /* |
188 | * Be careful here startup_64 needs to be at a predictable | 188 | * Be careful here startup_64 needs to be at a predictable |
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 8f7bef8e9fff..3a19d04cebeb 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c | |||
@@ -139,6 +139,10 @@ static int lines, cols; | |||
139 | #include "../../../../lib/decompress_unlzma.c" | 139 | #include "../../../../lib/decompress_unlzma.c" |
140 | #endif | 140 | #endif |
141 | 141 | ||
142 | #ifdef CONFIG_KERNEL_XZ | ||
143 | #include "../../../../lib/decompress_unxz.c" | ||
144 | #endif | ||
145 | |||
142 | #ifdef CONFIG_KERNEL_LZO | 146 | #ifdef CONFIG_KERNEL_LZO |
143 | #include "../../../../lib/decompress_unlzo.c" | 147 | #include "../../../../lib/decompress_unlzo.c" |
144 | #endif | 148 | #endif |
@@ -229,18 +233,35 @@ void *memset(void *s, int c, size_t n) | |||
229 | ss[i] = c; | 233 | ss[i] = c; |
230 | return s; | 234 | return s; |
231 | } | 235 | } |
232 | 236 | #ifdef CONFIG_X86_32 | |
233 | void *memcpy(void *dest, const void *src, size_t n) | 237 | void *memcpy(void *dest, const void *src, size_t n) |
234 | { | 238 | { |
235 | int i; | 239 | int d0, d1, d2; |
236 | const char *s = src; | 240 | asm volatile( |
237 | char *d = dest; | 241 | "rep ; movsl\n\t" |
242 | "movl %4,%%ecx\n\t" | ||
243 | "rep ; movsb\n\t" | ||
244 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) | ||
245 | : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src) | ||
246 | : "memory"); | ||
238 | 247 | ||
239 | for (i = 0; i < n; i++) | ||
240 | d[i] = s[i]; | ||
241 | return dest; | 248 | return dest; |
242 | } | 249 | } |
250 | #else | ||
251 | void *memcpy(void *dest, const void *src, size_t n) | ||
252 | { | ||
253 | long d0, d1, d2; | ||
254 | asm volatile( | ||
255 | "rep ; movsq\n\t" | ||
256 | "movq %4,%%rcx\n\t" | ||
257 | "rep ; movsb\n\t" | ||
258 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) | ||
259 | : "0" (n >> 3), "g" (n & 7), "1" (dest), "2" (src) | ||
260 | : "memory"); | ||
243 | 261 | ||
262 | return dest; | ||
263 | } | ||
264 | #endif | ||
244 | 265 | ||
245 | static void error(char *x) | 266 | static void error(char *x) |
246 | { | 267 | { |
@@ -338,7 +359,7 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap, | |||
338 | if (heap > 0x3fffffffffffUL) | 359 | if (heap > 0x3fffffffffffUL) |
339 | error("Destination address too large"); | 360 | error("Destination address too large"); |
340 | #else | 361 | #else |
341 | if (heap > ((-__PAGE_OFFSET-(512<<20)-1) & 0x7fffffff)) | 362 | if (heap > ((-__PAGE_OFFSET-(128<<20)-1) & 0x7fffffff)) |
342 | error("Destination address too large"); | 363 | error("Destination address too large"); |
343 | #endif | 364 | #endif |
344 | #ifndef CONFIG_RELOCATABLE | 365 | #ifndef CONFIG_RELOCATABLE |
diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c index 5c228129d175..46a823882437 100644 --- a/arch/x86/boot/compressed/mkpiggy.c +++ b/arch/x86/boot/compressed/mkpiggy.c | |||
@@ -62,7 +62,12 @@ int main(int argc, char *argv[]) | |||
62 | if (fseek(f, -4L, SEEK_END)) { | 62 | if (fseek(f, -4L, SEEK_END)) { |
63 | perror(argv[1]); | 63 | perror(argv[1]); |
64 | } | 64 | } |
65 | fread(&olen, sizeof olen, 1, f); | 65 | |
66 | if (fread(&olen, sizeof(olen), 1, f) != 1) { | ||
67 | perror(argv[1]); | ||
68 | return 1; | ||
69 | } | ||
70 | |||
66 | ilen = ftell(f); | 71 | ilen = ftell(f); |
67 | olen = getle32(&olen); | 72 | olen = getle32(&olen); |
68 | fclose(f); | 73 | fclose(f); |
@@ -74,7 +79,7 @@ int main(int argc, char *argv[]) | |||
74 | 79 | ||
75 | offs = (olen > ilen) ? olen - ilen : 0; | 80 | offs = (olen > ilen) ? olen - ilen : 0; |
76 | offs += olen >> 12; /* Add 8 bytes for each 32K block */ | 81 | offs += olen >> 12; /* Add 8 bytes for each 32K block */ |
77 | offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ | 82 | offs += 64*1024 + 128; /* Add 64K + 128 bytes slack */ |
78 | offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ | 83 | offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ |
79 | 84 | ||
80 | printf(".section \".rodata..compressed\",\"a\",@progbits\n"); | 85 | printf(".section \".rodata..compressed\",\"a\",@progbits\n"); |