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 commit 'v2.6.26' into bkl-removal
This commit is contained in:
@@ -259,6 +259,8 @@ if BROKEN
|
||||
source "drivers/mtd/Kconfig"
|
||||
endif
|
||||
|
||||
source "drivers/leds/Kconfig"
|
||||
|
||||
#This is just to shut up some Kconfig warnings, so no prompt.
|
||||
config INPUT
|
||||
bool
|
||||
|
||||
@@ -77,7 +77,6 @@ include $(srctree)/$(ARCH_DIR)/Makefile-os-$(OS)
|
||||
KERNEL_DEFINES = $(strip -Derrno=kernel_errno -Dsigprocmask=kernel_sigprocmask \
|
||||
-Dmktime=kernel_mktime $(ARCH_KERNEL_DEFINES))
|
||||
KBUILD_CFLAGS += $(KERNEL_DEFINES)
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-unit-at-a-time,)
|
||||
|
||||
PHONY += linux
|
||||
|
||||
|
||||
@@ -32,4 +32,11 @@ cflags-y += $(call cc-option,-mpreferred-stack-boundary=2)
|
||||
# an unresolved reference.
|
||||
cflags-y += -ffreestanding
|
||||
|
||||
# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
|
||||
# a lot more stack due to the lack of sharing of stacklots. Also, gcc
|
||||
# 4.3.0 needs -funit-at-a-time for extern inline functions.
|
||||
KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
|
||||
echo $(call cc-option,-fno-unit-at-a-time); \
|
||||
else echo $(call cc-option,-funit-at-a-time); fi ;)
|
||||
|
||||
KBUILD_CFLAGS += $(cflags-y)
|
||||
|
||||
@@ -21,3 +21,6 @@ HEADER_ARCH := x86
|
||||
|
||||
LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64
|
||||
LINK-y += -m64
|
||||
|
||||
# Do unit-at-a-time unconditionally on x86_64, following the host
|
||||
KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
|
||||
|
||||
@@ -50,7 +50,7 @@ static int pcap_open(void *data)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
pri->compiled = kmalloc(sizeof(struct bpf_program),
|
||||
pri->compiled = uml_kmalloc(sizeof(struct bpf_program),
|
||||
UM_GFP_KERNEL);
|
||||
if (pri->compiled == NULL) {
|
||||
printk(UM_KERN_ERR "pcap_open : kmalloc failed\n");
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
#include "irq_user.h"
|
||||
#include "irq_kern.h"
|
||||
#include "ubd_user.h"
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "mem.h"
|
||||
#include "mem_kern.h"
|
||||
|
||||
@@ -299,6 +299,6 @@ extern int os_arch_prctl(int pid, int code, unsigned long *addr);
|
||||
extern int get_pty(void);
|
||||
|
||||
/* sys-$ARCH/task_size.c */
|
||||
extern unsigned long os_get_task_size(void);
|
||||
extern unsigned long os_get_top_address(void);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
static struct fs_struct init_fs = INIT_FS;
|
||||
struct mm_struct init_mm = INIT_MM(init_mm);
|
||||
static struct files_struct init_files = INIT_FILES;
|
||||
static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
|
||||
static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
|
||||
EXPORT_SYMBOL(init_mm);
|
||||
|
||||
@@ -60,6 +60,11 @@ EXPORT_SYMBOL(os_rcv_fd);
|
||||
EXPORT_SYMBOL(run_helper);
|
||||
EXPORT_SYMBOL(start_thread);
|
||||
|
||||
EXPORT_SYMBOL(add_sigio_fd);
|
||||
EXPORT_SYMBOL(ignore_sigio_fd);
|
||||
EXPORT_SYMBOL(deactivate_fd);
|
||||
EXPORT_SYMBOL(sigio_broken);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
/* required for SMP */
|
||||
|
||||
@@ -274,7 +274,7 @@ int __init linux_main(int argc, char **argv)
|
||||
if (have_root == 0)
|
||||
add_arg(DEFAULT_COMMAND_LINE);
|
||||
|
||||
host_task_size = os_get_task_size();
|
||||
host_task_size = os_get_top_address();
|
||||
/*
|
||||
* TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps
|
||||
* out
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sched.h>
|
||||
#include <linux/limits.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include "kern_constants.h"
|
||||
|
||||
@@ -55,7 +55,7 @@ static int ptrace_dump_regs(int pid)
|
||||
* Signals that are OK to receive in the stub - we'll just continue it.
|
||||
* SIGWINCH will happen when UML is inside a detached screen.
|
||||
*/
|
||||
#define STUB_SIG_MASK (1 << SIGVTALRM)
|
||||
#define STUB_SIG_MASK ((1 << SIGVTALRM) | (1 << SIGWINCH))
|
||||
|
||||
/* Signals that the stub will finish with - anything else is an error */
|
||||
#define STUB_DONE_MASK (1 << SIGTRAP)
|
||||
|
||||
@@ -121,8 +121,10 @@ static int stop_ptraced_child(int pid, int exitcode, int mustexit)
|
||||
{
|
||||
int status, n, ret = 0;
|
||||
|
||||
if (ptrace(PTRACE_CONT, pid, 0, 0) < 0)
|
||||
fatal_perror("stop_ptraced_child : ptrace failed");
|
||||
if (ptrace(PTRACE_CONT, pid, 0, 0) < 0) {
|
||||
perror("stop_ptraced_child : ptrace failed");
|
||||
return -1;
|
||||
}
|
||||
CATCH_EINTR(n = waitpid(pid, &status, 0));
|
||||
if (!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
|
||||
int exit_with = WEXITSTATUS(status);
|
||||
@@ -212,7 +214,7 @@ static void __init check_sysemu(void)
|
||||
if (n < 0)
|
||||
fatal_perror("check_sysemu : wait failed");
|
||||
if (!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
|
||||
fatal("check_sysemu : expected SIGTRAP, got status = %d",
|
||||
fatal("check_sysemu : expected SIGTRAP, got status = %d\n",
|
||||
status);
|
||||
|
||||
if (ptrace(PTRACE_GETREGS, pid, 0, regs) < 0)
|
||||
@@ -254,9 +256,11 @@ static void __init check_sysemu(void)
|
||||
|
||||
if (WIFSTOPPED(status) &&
|
||||
(WSTOPSIG(status) == (SIGTRAP|0x80))) {
|
||||
if (!count)
|
||||
fatal("check_ptrace : SYSEMU_SINGLESTEP "
|
||||
"doesn't singlestep");
|
||||
if (!count) {
|
||||
non_fatal("check_ptrace : SYSEMU_SINGLESTEP "
|
||||
"doesn't singlestep");
|
||||
goto fail;
|
||||
}
|
||||
n = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_RET_OFFSET,
|
||||
os_getpid());
|
||||
if (n < 0)
|
||||
@@ -266,9 +270,12 @@ static void __init check_sysemu(void)
|
||||
}
|
||||
else if (WIFSTOPPED(status) && (WSTOPSIG(status) == SIGTRAP))
|
||||
count++;
|
||||
else
|
||||
fatal("check_ptrace : expected SIGTRAP or "
|
||||
"(SIGTRAP | 0x80), got status = %d", status);
|
||||
else {
|
||||
non_fatal("check_ptrace : expected SIGTRAP or "
|
||||
"(SIGTRAP | 0x80), got status = %d\n",
|
||||
status);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
if (stop_ptraced_child(pid, 0, 0) < 0)
|
||||
goto fail_stopped;
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <asm/user.h>
|
||||
#include <sys/ptrace.h>
|
||||
#include <sys/user.h>
|
||||
#include "kern_constants.h"
|
||||
#include "longjmp.h"
|
||||
#include "user.h"
|
||||
@@ -75,7 +76,7 @@ int put_fp_registers(int pid, unsigned long *regs)
|
||||
|
||||
void arch_init_registers(int pid)
|
||||
{
|
||||
struct user_fxsr_struct fpx_regs;
|
||||
struct user_fpxregs_struct fpx_regs;
|
||||
int err;
|
||||
|
||||
err = ptrace(PTRACE_GETFPXREGS, pid, 0, &fpx_regs);
|
||||
|
||||
@@ -63,7 +63,7 @@ static int page_ok(unsigned long page)
|
||||
return ok;
|
||||
}
|
||||
|
||||
unsigned long os_get_task_size(void)
|
||||
unsigned long os_get_top_address(void)
|
||||
{
|
||||
struct sigaction sa, old;
|
||||
unsigned long bottom = 0;
|
||||
@@ -76,9 +76,9 @@ unsigned long os_get_task_size(void)
|
||||
* hosts, but shouldn't hurt otherwise.
|
||||
*/
|
||||
unsigned long top = 0xffffd000 >> UM_KERN_PAGE_SHIFT;
|
||||
unsigned long test;
|
||||
unsigned long test, original;
|
||||
|
||||
printf("Locating the top of the address space ... ");
|
||||
printf("Locating the bottom of the address space ... ");
|
||||
fflush(stdout);
|
||||
|
||||
/*
|
||||
@@ -89,16 +89,31 @@ unsigned long os_get_task_size(void)
|
||||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = SA_NODEFER;
|
||||
if (sigaction(SIGSEGV, &sa, &old)) {
|
||||
perror("os_get_task_size");
|
||||
perror("os_get_top_address");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!page_ok(bottom)) {
|
||||
fprintf(stderr, "Address 0x%x no good?\n",
|
||||
bottom << UM_KERN_PAGE_SHIFT);
|
||||
/* Manually scan the address space, bottom-up, until we find
|
||||
* the first valid page (or run out of them).
|
||||
*/
|
||||
for (bottom = 0; bottom < top; bottom++) {
|
||||
if (page_ok(bottom))
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we've got this far, we ran out of pages. */
|
||||
if (bottom == top) {
|
||||
fprintf(stderr, "Unable to determine bottom of address "
|
||||
"space.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("0x%x\n", bottom << UM_KERN_PAGE_SHIFT);
|
||||
printf("Locating the top of the address space ... ");
|
||||
fflush(stdout);
|
||||
|
||||
original = bottom;
|
||||
|
||||
/* This could happen with a 4G/4G split */
|
||||
if (page_ok(top))
|
||||
goto out;
|
||||
@@ -114,7 +129,7 @@ unsigned long os_get_task_size(void)
|
||||
out:
|
||||
/* Restore the old SIGSEGV handling */
|
||||
if (sigaction(SIGSEGV, &old, NULL)) {
|
||||
perror("os_get_task_size");
|
||||
perror("os_get_top_address");
|
||||
exit(1);
|
||||
}
|
||||
top <<= UM_KERN_PAGE_SHIFT;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
unsigned long os_get_task_size(unsigned long shift)
|
||||
unsigned long os_get_top_address(unsigned long shift)
|
||||
{
|
||||
/* The old value of CONFIG_TOP_ADDR */
|
||||
return 0x7fc0000000;
|
||||
|
||||
@@ -106,6 +106,10 @@ static void deliver_alarm(void)
|
||||
unsigned long long this_tick = os_nsecs();
|
||||
int one_tick = UM_NSEC_PER_SEC / UM_HZ;
|
||||
|
||||
/* Protection against the host's time going backwards */
|
||||
if ((last_tick != 0) && (this_tick < last_tick))
|
||||
this_tick = last_tick;
|
||||
|
||||
if (last_tick == 0)
|
||||
last_tick = this_tick - one_tick;
|
||||
|
||||
@@ -148,6 +152,9 @@ static int after_sleep_interval(struct timespec *ts)
|
||||
start_usecs = usec;
|
||||
|
||||
start_usecs -= skew / UM_NSEC_PER_USEC;
|
||||
if (start_usecs < 0)
|
||||
start_usecs = 0;
|
||||
|
||||
tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC,
|
||||
.tv_usec = start_usecs % UM_USEC_PER_SEC });
|
||||
interval = ((struct itimerval) { { 0, usec }, tv });
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
#include "linux/module.h"
|
||||
#include "asm/string.h"
|
||||
#include <linux/module.h>
|
||||
#include <asm/string.h>
|
||||
#include <asm/checksum.h>
|
||||
|
||||
/*XXX: we need them because they would be exported by x86_64 */
|
||||
#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4
|
||||
EXPORT_SYMBOL(memcpy);
|
||||
#else
|
||||
EXPORT_SYMBOL(__memcpy);
|
||||
#endif
|
||||
EXPORT_SYMBOL(csum_partial);
|
||||
|
||||
Reference in New Issue
Block a user