You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'akpm' (second patchbomb from Andrew Morton)
Merge more incoming from Andrew Morton:
"Two new syscalls:
memfd_create in "shm: add memfd_create() syscall"
kexec_file_load in "kexec: implementation of new syscall kexec_file_load"
And:
- Most (all?) of the rest of MM
- Lots of the usual misc bits
- fs/autofs4
- drivers/rtc
- fs/nilfs
- procfs
- fork.c, exec.c
- more in lib/
- rapidio
- Janitorial work in filesystems: fs/ufs, fs/reiserfs, fs/adfs,
fs/cramfs, fs/romfs, fs/qnx6.
- initrd/initramfs work
- "file sealing" and the memfd_create() syscall, in tmpfs
- add pci_zalloc_consistent, use it in lots of places
- MAINTAINERS maintenance
- kexec feature work"
* emailed patches from Andrew Morton <akpm@linux-foundation.org: (193 commits)
MAINTAINERS: update nomadik patterns
MAINTAINERS: update usb/gadget patterns
MAINTAINERS: update DMA BUFFER SHARING patterns
kexec: verify the signature of signed PE bzImage
kexec: support kexec/kdump on EFI systems
kexec: support for kexec on panic using new system call
kexec-bzImage64: support for loading bzImage using 64bit entry
kexec: load and relocate purgatory at kernel load time
purgatory: core purgatory functionality
purgatory/sha256: provide implementation of sha256 in purgaotory context
kexec: implementation of new syscall kexec_file_load
kexec: new syscall kexec_file_load() declaration
kexec: make kexec_segment user buffer pointer a union
resource: provide new functions to walk through resources
kexec: use common function for kimage_normal_alloc() and kimage_crash_alloc()
kexec: move segment verification code in a separate function
kexec: rename unusebale_pages to unusable_pages
kernel: build bin2c based on config option CONFIG_BUILD_BIN2C
bin2c: move bin2c in scripts/basic
shm: wait for pins to be released when sealing
...
This commit is contained in:
@@ -783,8 +783,13 @@ endchoice
|
||||
|
||||
endmenu # "RCU Subsystem"
|
||||
|
||||
config BUILD_BIN2C
|
||||
bool
|
||||
default n
|
||||
|
||||
config IKCONFIG
|
||||
tristate "Kernel .config support"
|
||||
select BUILD_BIN2C
|
||||
---help---
|
||||
This option enables the complete Linux kernel ".config" file
|
||||
contents to be saved in the kernel. It provides documentation
|
||||
|
||||
+6
-6
@@ -539,12 +539,6 @@ void __init prepare_namespace(void)
|
||||
{
|
||||
int is_floppy;
|
||||
|
||||
if (root_delay) {
|
||||
printk(KERN_INFO "Waiting %d sec before mounting root device...\n",
|
||||
root_delay);
|
||||
ssleep(root_delay);
|
||||
}
|
||||
|
||||
/*
|
||||
* wait for the known devices to complete their probing
|
||||
*
|
||||
@@ -571,6 +565,12 @@ void __init prepare_namespace(void)
|
||||
if (initrd_load())
|
||||
goto out;
|
||||
|
||||
if (root_delay) {
|
||||
pr_info("Waiting %d sec before mounting root device...\n",
|
||||
root_delay);
|
||||
ssleep(root_delay);
|
||||
}
|
||||
|
||||
/* wait for any asynchronous scanning to complete */
|
||||
if ((ROOT_DEV == 0) && root_wait) {
|
||||
printk(KERN_INFO "Waiting for root device %s...\n",
|
||||
|
||||
+5
-5
@@ -311,9 +311,9 @@ static int exit_code;
|
||||
static int decompress_error;
|
||||
static int crd_infd, crd_outfd;
|
||||
|
||||
static int __init compr_fill(void *buf, unsigned int len)
|
||||
static long __init compr_fill(void *buf, unsigned long len)
|
||||
{
|
||||
int r = sys_read(crd_infd, buf, len);
|
||||
long r = sys_read(crd_infd, buf, len);
|
||||
if (r < 0)
|
||||
printk(KERN_ERR "RAMDISK: error while reading compressed data");
|
||||
else if (r == 0)
|
||||
@@ -321,13 +321,13 @@ static int __init compr_fill(void *buf, unsigned int len)
|
||||
return r;
|
||||
}
|
||||
|
||||
static int __init compr_flush(void *window, unsigned int outcnt)
|
||||
static long __init compr_flush(void *window, unsigned long outcnt)
|
||||
{
|
||||
int written = sys_write(crd_outfd, window, outcnt);
|
||||
long written = sys_write(crd_outfd, window, outcnt);
|
||||
if (written != outcnt) {
|
||||
if (decompress_error == 0)
|
||||
printk(KERN_ERR
|
||||
"RAMDISK: incomplete write (%d != %d)\n",
|
||||
"RAMDISK: incomplete write (%ld != %ld)\n",
|
||||
written, outcnt);
|
||||
decompress_error = 1;
|
||||
return -1;
|
||||
|
||||
+45
-15
@@ -19,6 +19,29 @@
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/utime.h>
|
||||
|
||||
static ssize_t __init xwrite(int fd, const char *p, size_t count)
|
||||
{
|
||||
ssize_t out = 0;
|
||||
|
||||
/* sys_write only can write MAX_RW_COUNT aka 2G-4K bytes at most */
|
||||
while (count) {
|
||||
ssize_t rv = sys_write(fd, p, count);
|
||||
|
||||
if (rv < 0) {
|
||||
if (rv == -EINTR || rv == -EAGAIN)
|
||||
continue;
|
||||
return out ? out : rv;
|
||||
} else if (rv == 0)
|
||||
break;
|
||||
|
||||
p += rv;
|
||||
out += rv;
|
||||
count -= rv;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
static __initdata char *message;
|
||||
static void __init error(char *x)
|
||||
{
|
||||
@@ -174,7 +197,7 @@ static __initdata enum state {
|
||||
} state, next_state;
|
||||
|
||||
static __initdata char *victim;
|
||||
static __initdata unsigned count;
|
||||
static unsigned long count __initdata;
|
||||
static __initdata loff_t this_header, next_header;
|
||||
|
||||
static inline void __init eat(unsigned n)
|
||||
@@ -186,7 +209,7 @@ static inline void __init eat(unsigned n)
|
||||
|
||||
static __initdata char *vcollected;
|
||||
static __initdata char *collected;
|
||||
static __initdata int remains;
|
||||
static long remains __initdata;
|
||||
static __initdata char *collect;
|
||||
|
||||
static void __init read_into(char *buf, unsigned size, enum state next)
|
||||
@@ -213,7 +236,7 @@ static int __init do_start(void)
|
||||
|
||||
static int __init do_collect(void)
|
||||
{
|
||||
unsigned n = remains;
|
||||
unsigned long n = remains;
|
||||
if (count < n)
|
||||
n = count;
|
||||
memcpy(collect, victim, n);
|
||||
@@ -346,7 +369,8 @@ static int __init do_name(void)
|
||||
static int __init do_copy(void)
|
||||
{
|
||||
if (count >= body_len) {
|
||||
sys_write(wfd, victim, body_len);
|
||||
if (xwrite(wfd, victim, body_len) != body_len)
|
||||
error("write error");
|
||||
sys_close(wfd);
|
||||
do_utime(vcollected, mtime);
|
||||
kfree(vcollected);
|
||||
@@ -354,7 +378,8 @@ static int __init do_copy(void)
|
||||
state = SkipIt;
|
||||
return 0;
|
||||
} else {
|
||||
sys_write(wfd, victim, count);
|
||||
if (xwrite(wfd, victim, count) != count)
|
||||
error("write error");
|
||||
body_len -= count;
|
||||
eat(count);
|
||||
return 1;
|
||||
@@ -384,7 +409,7 @@ static __initdata int (*actions[])(void) = {
|
||||
[Reset] = do_reset,
|
||||
};
|
||||
|
||||
static int __init write_buffer(char *buf, unsigned len)
|
||||
static long __init write_buffer(char *buf, unsigned long len)
|
||||
{
|
||||
count = len;
|
||||
victim = buf;
|
||||
@@ -394,11 +419,11 @@ static int __init write_buffer(char *buf, unsigned len)
|
||||
return len - count;
|
||||
}
|
||||
|
||||
static int __init flush_buffer(void *bufv, unsigned len)
|
||||
static long __init flush_buffer(void *bufv, unsigned long len)
|
||||
{
|
||||
char *buf = (char *) bufv;
|
||||
int written;
|
||||
int origLen = len;
|
||||
long written;
|
||||
long origLen = len;
|
||||
if (message)
|
||||
return -1;
|
||||
while ((written = write_buffer(buf, len)) < len && !message) {
|
||||
@@ -417,13 +442,13 @@ static int __init flush_buffer(void *bufv, unsigned len)
|
||||
return origLen;
|
||||
}
|
||||
|
||||
static unsigned my_inptr; /* index of next byte to be processed in inbuf */
|
||||
static unsigned long my_inptr; /* index of next byte to be processed in inbuf */
|
||||
|
||||
#include <linux/decompress/generic.h>
|
||||
|
||||
static char * __init unpack_to_rootfs(char *buf, unsigned len)
|
||||
static char * __init unpack_to_rootfs(char *buf, unsigned long len)
|
||||
{
|
||||
int written, res;
|
||||
long written;
|
||||
decompress_fn decompress;
|
||||
const char *compress_name;
|
||||
static __initdata char msg_buf[64];
|
||||
@@ -457,7 +482,7 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len)
|
||||
decompress = decompress_method(buf, len, &compress_name);
|
||||
pr_debug("Detected %s compressed data\n", compress_name);
|
||||
if (decompress) {
|
||||
res = decompress(buf, len, NULL, flush_buffer, NULL,
|
||||
int res = decompress(buf, len, NULL, flush_buffer, NULL,
|
||||
&my_inptr, error);
|
||||
if (res)
|
||||
error("decompressor failed");
|
||||
@@ -603,8 +628,13 @@ static int __init populate_rootfs(void)
|
||||
fd = sys_open("/initrd.image",
|
||||
O_WRONLY|O_CREAT, 0700);
|
||||
if (fd >= 0) {
|
||||
sys_write(fd, (char *)initrd_start,
|
||||
initrd_end - initrd_start);
|
||||
ssize_t written = xwrite(fd, (char *)initrd_start,
|
||||
initrd_end - initrd_start);
|
||||
|
||||
if (written != initrd_end - initrd_start)
|
||||
pr_err("/initrd.image: incomplete write (%zd != %ld)\n",
|
||||
written, initrd_end - initrd_start);
|
||||
|
||||
sys_close(fd);
|
||||
free_initrd();
|
||||
}
|
||||
|
||||
+12
-11
@@ -6,7 +6,7 @@
|
||||
* GK 2/5/95 - Changed to support mounting root fs via NFS
|
||||
* Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96
|
||||
* Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96
|
||||
* Simplified starting of init: Michael A. Griffith <grif@acm.org>
|
||||
* Simplified starting of init: Michael A. Griffith <grif@acm.org>
|
||||
*/
|
||||
|
||||
#define DEBUG /* Enable initcall_debug */
|
||||
@@ -136,7 +136,7 @@ static char *ramdisk_execute_command;
|
||||
* Used to generate warnings if static_key manipulation functions are used
|
||||
* before jump_label_init is called.
|
||||
*/
|
||||
bool static_key_initialized __read_mostly = false;
|
||||
bool static_key_initialized __read_mostly;
|
||||
EXPORT_SYMBOL_GPL(static_key_initialized);
|
||||
|
||||
/*
|
||||
@@ -159,8 +159,8 @@ static int __init set_reset_devices(char *str)
|
||||
|
||||
__setup("reset_devices", set_reset_devices);
|
||||
|
||||
static const char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
|
||||
const char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
|
||||
static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
|
||||
const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
|
||||
static const char *panic_later, *panic_param;
|
||||
|
||||
extern const struct obs_kernel_param __setup_start[], __setup_end[];
|
||||
@@ -199,7 +199,6 @@ static int __init obsolete_checksetup(char *line)
|
||||
* still work even if initially too large, it will just take slightly longer
|
||||
*/
|
||||
unsigned long loops_per_jiffy = (1<<12);
|
||||
|
||||
EXPORT_SYMBOL(loops_per_jiffy);
|
||||
|
||||
static int __init debug_kernel(char *str)
|
||||
@@ -376,8 +375,8 @@ static void __init setup_command_line(char *command_line)
|
||||
initcall_command_line =
|
||||
memblock_virt_alloc(strlen(boot_command_line) + 1, 0);
|
||||
static_command_line = memblock_virt_alloc(strlen(command_line) + 1, 0);
|
||||
strcpy (saved_command_line, boot_command_line);
|
||||
strcpy (static_command_line, command_line);
|
||||
strcpy(saved_command_line, boot_command_line);
|
||||
strcpy(static_command_line, command_line);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -445,8 +444,8 @@ void __init parse_early_options(char *cmdline)
|
||||
/* Arch code calls this early on, or if not, just before other parsing. */
|
||||
void __init parse_early_param(void)
|
||||
{
|
||||
static __initdata int done = 0;
|
||||
static __initdata char tmp_cmdline[COMMAND_LINE_SIZE];
|
||||
static int done __initdata;
|
||||
static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
|
||||
|
||||
if (done)
|
||||
return;
|
||||
@@ -500,7 +499,8 @@ static void __init mm_init(void)
|
||||
|
||||
asmlinkage __visible void __init start_kernel(void)
|
||||
{
|
||||
char * command_line, *after_dashes;
|
||||
char *command_line;
|
||||
char *after_dashes;
|
||||
extern const struct kernel_param __start___param[], __stop___param[];
|
||||
|
||||
/*
|
||||
@@ -572,7 +572,8 @@ asmlinkage __visible void __init start_kernel(void)
|
||||
* fragile until we cpu_idle() for the first time.
|
||||
*/
|
||||
preempt_disable();
|
||||
if (WARN(!irqs_disabled(), "Interrupts were enabled *very* early, fixing it\n"))
|
||||
if (WARN(!irqs_disabled(),
|
||||
"Interrupts were enabled *very* early, fixing it\n"))
|
||||
local_irq_disable();
|
||||
idr_init_cache();
|
||||
rcu_init();
|
||||
|
||||
Reference in New Issue
Block a user