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"); |
