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' (patches from Andrew)
Merge yet more updates from Andrew Morton: - Oleg's "wait/ptrace: assume __WALL if the child is traced". It's a kernel-based workaround for existing userspace issues. - A few hotfixes - befs cleanups - nilfs2 updates - sys_wait() changes - kexec updates - kdump - scripts/gdb updates - the last of the MM queue - a few other misc things * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (84 commits) kgdb: depends on VT drm/amdgpu: make amdgpu_mn_get wait for mmap_sem killable drm/radeon: make radeon_mn_get wait for mmap_sem killable drm/i915: make i915_gem_mmap_ioctl wait for mmap_sem killable uprobes: wait for mmap_sem for write killable prctl: make PR_SET_THP_DISABLE wait for mmap_sem killable exec: make exec path waiting for mmap_sem killable aio: make aio_setup_ring killable coredump: make coredump_wait wait for mmap_sem for write killable vdso: make arch_setup_additional_pages wait for mmap_sem for write killable ipc, shm: make shmem attach/detach wait for mmap_sem killable mm, fork: make dup_mmap wait for mmap_sem for write killable mm, proc: make clear_refs killable mm: make vm_brk killable mm, elf: handle vm_brk error mm, aout: handle vm_brk failures mm: make vm_munmap killable mm: make vm_mmap killable mm: make mmap_sem for write waits killable for mm syscalls MAINTAINERS: add co-maintainer for scripts/gdb ...
This commit is contained in:
@@ -268,3 +268,8 @@ among NILFS2 files can be depicted as follows:
|
||||
( regular file, directory, or symlink )
|
||||
|
||||
For detail on the format of each file, please see include/linux/nilfs2_fs.h.
|
||||
|
||||
There are no patents or other intellectual property that we protect
|
||||
with regard to the design of NILFS2. It is allowed to replicate the
|
||||
design in hopes that other operating systems could share (mount, read,
|
||||
write, etc.) data stored in this format.
|
||||
|
||||
@@ -139,6 +139,27 @@ Examples of using the Linux-provided gdb helpers
|
||||
start_comm = "swapper/2\000\000\000\000\000\000"
|
||||
}
|
||||
|
||||
o Dig into a radix tree data structure, such as the IRQ descriptors:
|
||||
(gdb) print (struct irq_desc)$lx_radix_tree_lookup(irq_desc_tree, 18)
|
||||
$6 = {
|
||||
irq_common_data = {
|
||||
state_use_accessors = 67584,
|
||||
handler_data = 0x0 <__vectors_start>,
|
||||
msi_desc = 0x0 <__vectors_start>,
|
||||
affinity = {{
|
||||
bits = {65535}
|
||||
}}
|
||||
},
|
||||
irq_data = {
|
||||
mask = 0,
|
||||
irq = 18,
|
||||
hwirq = 27,
|
||||
common = 0xee803d80,
|
||||
chip = 0xc0eb0854 <gic_data>,
|
||||
domain = 0xee808000,
|
||||
parent_data = 0x0 <__vectors_start>,
|
||||
chip_data = 0xc0eb0854 <gic_data>
|
||||
} <... trimmed ...>
|
||||
|
||||
List of commands and functions
|
||||
------------------------------
|
||||
|
||||
@@ -15,15 +15,16 @@
|
||||
|
||||
define bttnobp
|
||||
set $tasks_off=((size_t)&((struct task_struct *)0)->tasks)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->pids[1].pid_list.next)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->thread_group.next)
|
||||
set $init_t=&init_task
|
||||
set $next_t=(((char *)($init_t->tasks).next) - $tasks_off)
|
||||
set var $stacksize = sizeof(union thread_union)
|
||||
while ($next_t != $init_t)
|
||||
set $next_t=(struct task_struct *)$next_t
|
||||
printf "\npid %d; comm %s:\n", $next_t.pid, $next_t.comm
|
||||
printf "===================\n"
|
||||
set var $stackp = $next_t.thread.esp
|
||||
set var $stack_top = ($stackp & ~4095) + 4096
|
||||
set var $stackp = $next_t.thread.sp
|
||||
set var $stack_top = ($stackp & ~($stacksize - 1)) + $stacksize
|
||||
|
||||
while ($stackp < $stack_top)
|
||||
if (*($stackp) > _stext && *($stackp) < _sinittext)
|
||||
@@ -31,13 +32,13 @@ define bttnobp
|
||||
end
|
||||
set $stackp += 4
|
||||
end
|
||||
set $next_th=(((char *)$next_t->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_t->thread_group.next) - $pid_off)
|
||||
while ($next_th != $next_t)
|
||||
set $next_th=(struct task_struct *)$next_th
|
||||
printf "\npid %d; comm %s:\n", $next_t.pid, $next_t.comm
|
||||
printf "===================\n"
|
||||
set var $stackp = $next_t.thread.esp
|
||||
set var $stack_top = ($stackp & ~4095) + 4096
|
||||
set var $stackp = $next_t.thread.sp
|
||||
set var $stack_top = ($stackp & ~($stacksize - 1)) + stacksize
|
||||
|
||||
while ($stackp < $stack_top)
|
||||
if (*($stackp) > _stext && *($stackp) < _sinittext)
|
||||
@@ -45,7 +46,7 @@ define bttnobp
|
||||
end
|
||||
set $stackp += 4
|
||||
end
|
||||
set $next_th=(((char *)$next_th->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_th->thread_group.next) - $pid_off)
|
||||
end
|
||||
set $next_t=(char *)($next_t->tasks.next) - $tasks_off
|
||||
end
|
||||
@@ -54,42 +55,44 @@ document bttnobp
|
||||
dump all thread stack traces on a kernel compiled with !CONFIG_FRAME_POINTER
|
||||
end
|
||||
|
||||
define btthreadstack
|
||||
set var $pid_task = $arg0
|
||||
|
||||
printf "\npid %d; comm %s:\n", $pid_task.pid, $pid_task.comm
|
||||
printf "task struct: "
|
||||
print $pid_task
|
||||
printf "===================\n"
|
||||
set var $stackp = $pid_task.thread.sp
|
||||
set var $stacksize = sizeof(union thread_union)
|
||||
set var $stack_top = ($stackp & ~($stacksize - 1)) + $stacksize
|
||||
set var $stack_bot = ($stackp & ~($stacksize - 1))
|
||||
|
||||
set $stackp = *((unsigned long *) $stackp)
|
||||
while (($stackp < $stack_top) && ($stackp > $stack_bot))
|
||||
set var $addr = *(((unsigned long *) $stackp) + 1)
|
||||
info symbol $addr
|
||||
set $stackp = *((unsigned long *) $stackp)
|
||||
end
|
||||
end
|
||||
document btthreadstack
|
||||
dump a thread stack using the given task structure pointer
|
||||
end
|
||||
|
||||
|
||||
define btt
|
||||
set $tasks_off=((size_t)&((struct task_struct *)0)->tasks)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->pids[1].pid_list.next)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->thread_group.next)
|
||||
set $init_t=&init_task
|
||||
set $next_t=(((char *)($init_t->tasks).next) - $tasks_off)
|
||||
while ($next_t != $init_t)
|
||||
set $next_t=(struct task_struct *)$next_t
|
||||
printf "\npid %d; comm %s:\n", $next_t.pid, $next_t.comm
|
||||
printf "===================\n"
|
||||
set var $stackp = $next_t.thread.esp
|
||||
set var $stack_top = ($stackp & ~4095) + 4096
|
||||
set var $stack_bot = ($stackp & ~4095)
|
||||
btthreadstack $next_t
|
||||
|
||||
set $stackp = *($stackp)
|
||||
while (($stackp < $stack_top) && ($stackp > $stack_bot))
|
||||
set var $addr = *($stackp + 4)
|
||||
info symbol $addr
|
||||
set $stackp = *($stackp)
|
||||
end
|
||||
|
||||
set $next_th=(((char *)$next_t->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_t->thread_group.next) - $pid_off)
|
||||
while ($next_th != $next_t)
|
||||
set $next_th=(struct task_struct *)$next_th
|
||||
printf "\npid %d; comm %s:\n", $next_t.pid, $next_t.comm
|
||||
printf "===================\n"
|
||||
set var $stackp = $next_t.thread.esp
|
||||
set var $stack_top = ($stackp & ~4095) + 4096
|
||||
set var $stack_bot = ($stackp & ~4095)
|
||||
|
||||
set $stackp = *($stackp)
|
||||
while (($stackp < $stack_top) && ($stackp > $stack_bot))
|
||||
set var $addr = *($stackp + 4)
|
||||
info symbol $addr
|
||||
set $stackp = *($stackp)
|
||||
end
|
||||
set $next_th=(((char *)$next_th->pids[1].pid_list.next) - $pid_off)
|
||||
btthreadstack $next_th
|
||||
set $next_th=(((char *)$next_th->thread_group.next) - $pid_off)
|
||||
end
|
||||
set $next_t=(char *)($next_t->tasks.next) - $tasks_off
|
||||
end
|
||||
@@ -101,7 +104,7 @@ end
|
||||
define btpid
|
||||
set var $pid = $arg0
|
||||
set $tasks_off=((size_t)&((struct task_struct *)0)->tasks)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->pids[1].pid_list.next)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->thread_group.next)
|
||||
set $init_t=&init_task
|
||||
set $next_t=(((char *)($init_t->tasks).next) - $tasks_off)
|
||||
set var $pid_task = 0
|
||||
@@ -113,29 +116,18 @@ define btpid
|
||||
set $pid_task = $next_t
|
||||
end
|
||||
|
||||
set $next_th=(((char *)$next_t->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_t->thread_group.next) - $pid_off)
|
||||
while ($next_th != $next_t)
|
||||
set $next_th=(struct task_struct *)$next_th
|
||||
if ($next_th.pid == $pid)
|
||||
set $pid_task = $next_th
|
||||
end
|
||||
set $next_th=(((char *)$next_th->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_th->thread_group.next) - $pid_off)
|
||||
end
|
||||
set $next_t=(char *)($next_t->tasks.next) - $tasks_off
|
||||
end
|
||||
|
||||
printf "\npid %d; comm %s:\n", $pid_task.pid, $pid_task.comm
|
||||
printf "===================\n"
|
||||
set var $stackp = $pid_task.thread.esp
|
||||
set var $stack_top = ($stackp & ~4095) + 4096
|
||||
set var $stack_bot = ($stackp & ~4095)
|
||||
|
||||
set $stackp = *($stackp)
|
||||
while (($stackp < $stack_top) && ($stackp > $stack_bot))
|
||||
set var $addr = *($stackp + 4)
|
||||
info symbol $addr
|
||||
set $stackp = *($stackp)
|
||||
end
|
||||
btthreadstack $pid_task
|
||||
end
|
||||
document btpid
|
||||
backtrace of pid
|
||||
@@ -145,7 +137,7 @@ end
|
||||
define trapinfo
|
||||
set var $pid = $arg0
|
||||
set $tasks_off=((size_t)&((struct task_struct *)0)->tasks)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->pids[1].pid_list.next)
|
||||
set $pid_off=((size_t)&((struct task_struct *)0)->thread_group.next)
|
||||
set $init_t=&init_task
|
||||
set $next_t=(((char *)($init_t->tasks).next) - $tasks_off)
|
||||
set var $pid_task = 0
|
||||
@@ -157,13 +149,13 @@ define trapinfo
|
||||
set $pid_task = $next_t
|
||||
end
|
||||
|
||||
set $next_th=(((char *)$next_t->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_t->thread_group.next) - $pid_off)
|
||||
while ($next_th != $next_t)
|
||||
set $next_th=(struct task_struct *)$next_th
|
||||
if ($next_th.pid == $pid)
|
||||
set $pid_task = $next_th
|
||||
end
|
||||
set $next_th=(((char *)$next_th->pids[1].pid_list.next) - $pid_off)
|
||||
set $next_th=(((char *)$next_th->thread_group.next) - $pid_off)
|
||||
end
|
||||
set $next_t=(char *)($next_t->tasks.next) - $tasks_off
|
||||
end
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
# 2) Generate timeconst.h
|
||||
# 3) Generate asm-offsets.h (may need bounds.h and timeconst.h)
|
||||
# 4) Check for missing system calls
|
||||
# 5) Generate constants.py (may need bounds.h)
|
||||
|
||||
# Default sed regexp - multiline due to syntax constraints
|
||||
define sed-y
|
||||
@@ -96,5 +97,14 @@ quiet_cmd_syscalls = CALL $<
|
||||
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
|
||||
$(call cmd,syscalls)
|
||||
|
||||
#####
|
||||
# 5) Generate constants for Python GDB integration
|
||||
#
|
||||
|
||||
extra-$(CONFIG_GDB_SCRIPTS) += build_constants_py
|
||||
|
||||
build_constants_py: $(obj)/$(timeconst-file) $(obj)/$(bounds-file)
|
||||
@$(MAKE) $(build)=scripts/gdb/linux $@
|
||||
|
||||
# Keep these three files during make clean
|
||||
no-clean-files := $(bounds-file) $(offsets-file) $(timeconst-file)
|
||||
|
||||
@@ -4993,6 +4993,7 @@ F: drivers/scsi/gdt*
|
||||
|
||||
GDB KERNEL DEBUGGING HELPER SCRIPTS
|
||||
M: Jan Kiszka <jan.kiszka@siemens.com>
|
||||
M: Kieran Bingham <kieran@bingham.xyz>
|
||||
S: Supported
|
||||
F: scripts/gdb/
|
||||
|
||||
@@ -8038,6 +8039,7 @@ NILFS2 FILESYSTEM
|
||||
M: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
|
||||
L: linux-nilfs@vger.kernel.org
|
||||
W: http://nilfs.sourceforge.net/
|
||||
W: http://nilfs.osdn.jp/
|
||||
T: git git://github.com/konis/nilfs2.git
|
||||
S: Supported
|
||||
F: Documentation/filesystems/nilfs2.txt
|
||||
|
||||
@@ -12,7 +12,6 @@ CONFIG_CGROUPS=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_NAMESPACES=y
|
||||
|
||||
@@ -7,7 +7,6 @@ CONFIG_CGROUPS=y
|
||||
CONFIG_CGROUP_DEBUG=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_NAMESPACES=y
|
||||
|
||||
@@ -420,7 +420,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
||||
npages = 1; /* for sigpage */
|
||||
npages += vdso_total_pages;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
hint = sigpage_addr(mm, npages);
|
||||
addr = get_unmapped_area(NULL, hint, npages << PAGE_SHIFT, 0, 0);
|
||||
if (IS_ERR_VALUE(addr)) {
|
||||
|
||||
@@ -95,7 +95,8 @@ int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp)
|
||||
};
|
||||
void *ret;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
current->mm->context.vdso = (void *)addr;
|
||||
|
||||
/* Map vectors page at the high address. */
|
||||
@@ -163,7 +164,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm,
|
||||
/* Be sure to map the data page */
|
||||
vdso_mapping_len = vdso_text_len + PAGE_SIZE;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
vdso_base = get_unmapped_area(NULL, 0, vdso_mapping_len, 0, 0);
|
||||
if (IS_ERR_VALUE(vdso_base)) {
|
||||
ret = ERR_PTR(vdso_base);
|
||||
|
||||
@@ -65,7 +65,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
||||
unsigned long vdso_base;
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
|
||||
/* Try to get it loaded right near ld.so/glibc. */
|
||||
vdso_base = STACK_TOP;
|
||||
|
||||
@@ -164,6 +164,7 @@ void smp_flush_cache_all(void)
|
||||
spin_unlock(&flushcache_lock);
|
||||
preempt_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(smp_flush_cache_all);
|
||||
|
||||
void smp_flush_cache_all_interrupt(void)
|
||||
{
|
||||
|
||||
@@ -3117,6 +3117,7 @@ config MIPS32_N32
|
||||
config BINFMT_ELF32
|
||||
bool
|
||||
default y if MIPS32_O32 || MIPS32_N32
|
||||
select ELFCORE
|
||||
|
||||
endmenu
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_MEMCG_KMEM=y
|
||||
|
||||
@@ -25,7 +25,6 @@ CONFIG_TASK_XACCT=y
|
||||
CONFIG_TASK_IO_ACCOUNTING=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
|
||||
@@ -104,7 +104,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
||||
struct resource gic_res;
|
||||
int ret;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
|
||||
/*
|
||||
* Determine total area size. This includes the VDSO data itself, the
|
||||
|
||||
@@ -11,7 +11,6 @@ CONFIG_CGROUPS=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
CONFIG_RELAY=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EXPERT=y
|
||||
|
||||
@@ -195,7 +195,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
||||
* and end up putting it elsewhere.
|
||||
* Add enough to the size so that the result can be aligned.
|
||||
*/
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
vdso_base = get_unmapped_area(NULL, vdso_base,
|
||||
(vdso_pages << PAGE_SHIFT) +
|
||||
((VDSO_ALIGNMENT - 1) & PAGE_MASK),
|
||||
|
||||
@@ -43,13 +43,13 @@ static int machine_kdump_pm_cb(struct notifier_block *nb, unsigned long action,
|
||||
switch (action) {
|
||||
case PM_SUSPEND_PREPARE:
|
||||
case PM_HIBERNATION_PREPARE:
|
||||
if (crashk_res.start)
|
||||
crash_map_reserved_pages();
|
||||
if (kexec_crash_image)
|
||||
arch_kexec_unprotect_crashkres();
|
||||
break;
|
||||
case PM_POST_SUSPEND:
|
||||
case PM_POST_HIBERNATION:
|
||||
if (crashk_res.start)
|
||||
crash_unmap_reserved_pages();
|
||||
if (kexec_crash_image)
|
||||
arch_kexec_protect_crashkres();
|
||||
break;
|
||||
default:
|
||||
return NOTIFY_DONE;
|
||||
@@ -60,6 +60,8 @@ static int machine_kdump_pm_cb(struct notifier_block *nb, unsigned long action,
|
||||
static int __init machine_kdump_pm_init(void)
|
||||
{
|
||||
pm_notifier(machine_kdump_pm_cb, 0);
|
||||
/* Create initial mapping for crashkernel memory */
|
||||
arch_kexec_unprotect_crashkres();
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(machine_kdump_pm_init);
|
||||
@@ -146,6 +148,8 @@ static int kdump_csum_valid(struct kimage *image)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CRASH_DUMP
|
||||
|
||||
/*
|
||||
* Map or unmap crashkernel memory
|
||||
*/
|
||||
@@ -167,21 +171,25 @@ static void crash_map_pages(int enable)
|
||||
}
|
||||
|
||||
/*
|
||||
* Map crashkernel memory
|
||||
* Unmap crashkernel memory
|
||||
*/
|
||||
void crash_map_reserved_pages(void)
|
||||
void arch_kexec_protect_crashkres(void)
|
||||
{
|
||||
crash_map_pages(1);
|
||||
if (crashk_res.end)
|
||||
crash_map_pages(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Unmap crashkernel memory
|
||||
* Map crashkernel memory
|
||||
*/
|
||||
void crash_unmap_reserved_pages(void)
|
||||
void arch_kexec_unprotect_crashkres(void)
|
||||
{
|
||||
crash_map_pages(0);
|
||||
if (crashk_res.end)
|
||||
crash_map_pages(1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Give back memory to hypervisor before new kdump is loaded
|
||||
*/
|
||||
|
||||
@@ -216,7 +216,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
|
||||
* it at vdso_base which is the "natural" base for it, but we might
|
||||
* fail and end up putting it elsewhere.
|
||||
*/
|
||||
down_write(&mm->mmap_sem);
|
||||
if (down_write_killable(&mm->mmap_sem))
|
||||
return -EINTR;
|
||||
vdso_base = get_unmapped_area(NULL, 0, vdso_pages << PAGE_SHIFT, 0, 0);
|
||||
if (IS_ERR_VALUE(vdso_base)) {
|
||||
rc = vdso_base;
|
||||
|
||||
@@ -10,7 +10,6 @@ CONFIG_CGROUPS=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CGROUP_DEVICE=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_RESOURCE_COUNTERS=y
|
||||
CONFIG_CGROUP_MEMCG=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_NAMESPACES=y
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user