mirror of
https://github.com/suyu-emu/horinux.git
synced 2026-09-21 14:15:21 -07:00
Merge branch 'akpm' (second patch-bomb from Andrew)
Merge second patchbomb from Andrew Morton: - the rest of MM - misc fs fixes - add execveat() syscall - new ratelimit feature for fault-injection - decompressor updates - ipc/ updates - fallocate feature creep - fsnotify cleanups - a few other misc things * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (99 commits) cgroups: Documentation: fix trivial typos and wrong paragraph numberings parisc: percpu: update comments referring to __get_cpu_var percpu: update local_ops.txt to reflect this_cpu operations percpu: remove __get_cpu_var and __raw_get_cpu_var macros fsnotify: remove destroy_list from fsnotify_mark fsnotify: unify inode and mount marks handling fallocate: create FAN_MODIFY and IN_MODIFY events mm/cma: make kmemleak ignore CMA regions slub: fix cpuset check in get_any_partial slab: fix cpuset check in fallback_alloc shmdt: use i_size_read() instead of ->i_size ipc/shm.c: fix overly aggressive shmdt() when calls span multiple segments ipc/msg: increase MSGMNI, remove scaling ipc/sem.c: increase SEMMSL, SEMMNI, SEMOPM ipc/sem.c: change memory barrier in sem_lock() to smp_rmb() lib/decompress.c: consistency of compress formats for kernel image decompress_bunzip2: off by one in get_next_block() usr/Kconfig: make initrd compression algorithm selection not expert fault-inject: add ratelimit option ratelimit: add initialization macro ...
This commit is contained in:
@@ -445,7 +445,7 @@ across partially overlapping sets of CPUs would risk unstable dynamics
|
||||
that would be beyond our understanding. So if each of two partially
|
||||
overlapping cpusets enables the flag 'cpuset.sched_load_balance', then we
|
||||
form a single sched domain that is a superset of both. We won't move
|
||||
a task to a CPU outside it cpuset, but the scheduler load balancing
|
||||
a task to a CPU outside its cpuset, but the scheduler load balancing
|
||||
code might waste some compute cycles considering that possibility.
|
||||
|
||||
This mismatch is why there is not a simple one-to-one relation
|
||||
@@ -552,8 +552,8 @@ otherwise initial value -1 that indicates the cpuset has no request.
|
||||
1 : search siblings (hyperthreads in a core).
|
||||
2 : search cores in a package.
|
||||
3 : search cpus in a node [= system wide on non-NUMA system]
|
||||
( 4 : search nodes in a chunk of node [on NUMA system] )
|
||||
( 5 : search system wide [on NUMA system] )
|
||||
4 : search nodes in a chunk of node [on NUMA system]
|
||||
5 : search system wide [on NUMA system]
|
||||
|
||||
The system default is architecture dependent. The system default
|
||||
can be changed using the relax_domain_level= boot parameter.
|
||||
|
||||
@@ -326,7 +326,7 @@ per cgroup, instead of globally.
|
||||
|
||||
* tcp memory pressure: sockets memory pressure for the tcp protocol.
|
||||
|
||||
2.7.3 Common use cases
|
||||
2.7.2 Common use cases
|
||||
|
||||
Because the "kmem" counter is fed to the main user counter, kernel memory can
|
||||
never be limited completely independently of user memory. Say "U" is the user
|
||||
@@ -354,19 +354,19 @@ set:
|
||||
|
||||
3. User Interface
|
||||
|
||||
0. Configuration
|
||||
3.0. Configuration
|
||||
|
||||
a. Enable CONFIG_CGROUPS
|
||||
b. Enable CONFIG_MEMCG
|
||||
c. Enable CONFIG_MEMCG_SWAP (to use swap extension)
|
||||
d. Enable CONFIG_MEMCG_KMEM (to use kmem extension)
|
||||
|
||||
1. Prepare the cgroups (see cgroups.txt, Why are cgroups needed?)
|
||||
3.1. Prepare the cgroups (see cgroups.txt, Why are cgroups needed?)
|
||||
# mount -t tmpfs none /sys/fs/cgroup
|
||||
# mkdir /sys/fs/cgroup/memory
|
||||
# mount -t cgroup none /sys/fs/cgroup/memory -o memory
|
||||
|
||||
2. Make the new group and move bash into it
|
||||
3.2. Make the new group and move bash into it
|
||||
# mkdir /sys/fs/cgroup/memory/0
|
||||
# echo $$ > /sys/fs/cgroup/memory/0/tasks
|
||||
|
||||
|
||||
@@ -829,6 +829,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
CONFIG_DEBUG_PAGEALLOC, hence this option will not help
|
||||
tracking down these problems.
|
||||
|
||||
debug_pagealloc=
|
||||
[KNL] When CONFIG_DEBUG_PAGEALLOC is set, this
|
||||
parameter enables the feature at boot time. In
|
||||
default, it is disabled. We can avoid allocating huge
|
||||
chunk of memory for debug pagealloc if we don't enable
|
||||
it at boot time and the system will work mostly same
|
||||
with the kernel built without CONFIG_DEBUG_PAGEALLOC.
|
||||
on: enable the feature
|
||||
|
||||
debugpat [X86] Enable PAT debugging
|
||||
|
||||
decnet.addr= [HW,NET]
|
||||
@@ -1228,9 +1237,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
multiple times interleaved with hugepages= to reserve
|
||||
huge pages of different sizes. Valid pages sizes on
|
||||
x86-64 are 2M (when the CPU supports "pse") and 1G
|
||||
(when the CPU supports the "pdpe1gb" cpuinfo flag)
|
||||
Note that 1GB pages can only be allocated at boot time
|
||||
using hugepages= and not freed afterwards.
|
||||
(when the CPU supports the "pdpe1gb" cpuinfo flag).
|
||||
|
||||
hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC)
|
||||
terminal devices. Valid values: 0..8
|
||||
@@ -2506,6 +2513,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||
OSS [HW,OSS]
|
||||
See Documentation/sound/oss/oss-parameters.txt
|
||||
|
||||
page_owner= [KNL] Boot-time page_owner enabling option.
|
||||
Storage of the information about who allocated
|
||||
each page is disabled in default. With this switch,
|
||||
we can turn it on.
|
||||
on: enable the feature
|
||||
|
||||
panic= [KNL] Kernel behaviour on panic: delay <timeout>
|
||||
timeout > 0: seconds before rebooting
|
||||
timeout = 0: wait forever
|
||||
|
||||
@@ -8,6 +8,11 @@ to implement them for any given architecture and shows how they can be used
|
||||
properly. It also stresses on the precautions that must be taken when reading
|
||||
those local variables across CPUs when the order of memory writes matters.
|
||||
|
||||
Note that local_t based operations are not recommended for general kernel use.
|
||||
Please use the this_cpu operations instead unless there is really a special purpose.
|
||||
Most uses of local_t in the kernel have been replaced by this_cpu operations.
|
||||
this_cpu operations combine the relocation with the local_t like semantics in
|
||||
a single instruction and yield more compact and faster executing code.
|
||||
|
||||
|
||||
* Purpose of local atomic operations
|
||||
@@ -87,10 +92,10 @@ the per cpu variable. For instance :
|
||||
local_inc(&get_cpu_var(counters));
|
||||
put_cpu_var(counters);
|
||||
|
||||
If you are already in a preemption-safe context, you can directly use
|
||||
__get_cpu_var() instead.
|
||||
If you are already in a preemption-safe context, you can use
|
||||
this_cpu_ptr() instead.
|
||||
|
||||
local_inc(&__get_cpu_var(counters));
|
||||
local_inc(this_cpu_ptr(&counters));
|
||||
|
||||
|
||||
|
||||
@@ -134,7 +139,7 @@ static void test_each(void *info)
|
||||
{
|
||||
/* Increment the counter from a non preemptible context */
|
||||
printk("Increment on cpu %d\n", smp_processor_id());
|
||||
local_inc(&__get_cpu_var(counters));
|
||||
local_inc(this_cpu_ptr(&counters));
|
||||
|
||||
/* This is what incrementing the variable would look like within a
|
||||
* preemptible context (it disables preemption) :
|
||||
|
||||
@@ -116,10 +116,12 @@ set during run time.
|
||||
|
||||
auto_msgmni:
|
||||
|
||||
Enables/Disables automatic recomputing of msgmni upon memory add/remove
|
||||
or upon ipc namespace creation/removal (see the msgmni description
|
||||
above). Echoing "1" into this file enables msgmni automatic recomputing.
|
||||
Echoing "0" turns it off. auto_msgmni default value is 1.
|
||||
This variable has no effect and may be removed in future kernel
|
||||
releases. Reading it always returns 0.
|
||||
Up to Linux 3.17, it enabled/disabled automatic recomputing of msgmni
|
||||
upon memory add/remove or upon ipc namespace creation/removal.
|
||||
Echoing "1" into this file enabled msgmni automatic recomputing.
|
||||
Echoing "0" turned it off. auto_msgmni default value was 1.
|
||||
|
||||
|
||||
==============================================================
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
page owner: Tracking about who allocated each page
|
||||
-----------------------------------------------------------
|
||||
|
||||
* Introduction
|
||||
|
||||
page owner is for the tracking about who allocated each page.
|
||||
It can be used to debug memory leak or to find a memory hogger.
|
||||
When allocation happens, information about allocation such as call stack
|
||||
and order of pages is stored into certain storage for each page.
|
||||
When we need to know about status of all pages, we can get and analyze
|
||||
this information.
|
||||
|
||||
Although we already have tracepoint for tracing page allocation/free,
|
||||
using it for analyzing who allocate each page is rather complex. We need
|
||||
to enlarge the trace buffer for preventing overlapping until userspace
|
||||
program launched. And, launched program continually dump out the trace
|
||||
buffer for later analysis and it would change system behviour with more
|
||||
possibility rather than just keeping it in memory, so bad for debugging.
|
||||
|
||||
page owner can also be used for various purposes. For example, accurate
|
||||
fragmentation statistics can be obtained through gfp flag information of
|
||||
each page. It is already implemented and activated if page owner is
|
||||
enabled. Other usages are more than welcome.
|
||||
|
||||
page owner is disabled in default. So, if you'd like to use it, you need
|
||||
to add "page_owner=on" into your boot cmdline. If the kernel is built
|
||||
with page owner and page owner is disabled in runtime due to no enabling
|
||||
boot option, runtime overhead is marginal. If disabled in runtime, it
|
||||
doesn't require memory to store owner information, so there is no runtime
|
||||
memory overhead. And, page owner inserts just two unlikely branches into
|
||||
the page allocator hotpath and if it returns false then allocation is
|
||||
done like as the kernel without page owner. These two unlikely branches
|
||||
would not affect to allocation performance. Following is the kernel's
|
||||
code size change due to this facility.
|
||||
|
||||
- Without page owner
|
||||
text data bss dec hex filename
|
||||
40662 1493 644 42799 a72f mm/page_alloc.o
|
||||
|
||||
- With page owner
|
||||
text data bss dec hex filename
|
||||
40892 1493 644 43029 a815 mm/page_alloc.o
|
||||
1427 24 8 1459 5b3 mm/page_ext.o
|
||||
2722 50 0 2772 ad4 mm/page_owner.o
|
||||
|
||||
Although, roughly, 4 KB code is added in total, page_alloc.o increase by
|
||||
230 bytes and only half of it is in hotpath. Building the kernel with
|
||||
page owner and turning it on if needed would be great option to debug
|
||||
kernel memory problem.
|
||||
|
||||
There is one notice that is caused by implementation detail. page owner
|
||||
stores information into the memory from struct page extension. This memory
|
||||
is initialized some time later than that page allocator starts in sparse
|
||||
memory system, so, until initialization, many pages can be allocated and
|
||||
they would have no owner information. To fix it up, these early allocated
|
||||
pages are investigated and marked as allocated in initialization phase.
|
||||
Although it doesn't mean that they have the right owner information,
|
||||
at least, we can tell whether the page is allocated or not,
|
||||
more accurately. On 2GB memory x86-64 VM box, 13343 early allocated pages
|
||||
are catched and marked, although they are mostly allocated from struct
|
||||
page extension feature. Anyway, after that, no page is left in
|
||||
un-tracking state.
|
||||
|
||||
* Usage
|
||||
|
||||
1) Build user-space helper
|
||||
cd tools/vm
|
||||
make page_owner_sort
|
||||
|
||||
2) Enable page owner
|
||||
Add "page_owner=on" to boot cmdline.
|
||||
|
||||
3) Do the job what you want to debug
|
||||
|
||||
4) Analyze information from page owner
|
||||
cat /sys/kernel/debug/page_owner > page_owner_full.txt
|
||||
grep -v ^PFN page_owner_full.txt > page_owner.txt
|
||||
./page_owner_sort page_owner.txt sorted_page_owner.txt
|
||||
|
||||
See the result about who allocated each page
|
||||
in the sorted_page_owner.txt.
|
||||
+1
-1
@@ -4045,7 +4045,7 @@ F: drivers/tty/serial/ucc_uart.c
|
||||
FREESCALE SOC SOUND DRIVERS
|
||||
M: Timur Tabi <timur@tabi.org>
|
||||
M: Nicolin Chen <nicoleotsuka@gmail.com>
|
||||
M: Xiubo Li <Li.Xiubo@freescale.com>
|
||||
M: Xiubo Li <Xiubo.Lee@gmail.com>
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
|
||||
@@ -5,6 +5,7 @@ config ARM
|
||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||
select ARCH_SUPPORTS_ATOMIC_RMW
|
||||
select ARCH_USE_BUILTIN_BSWAP
|
||||
|
||||
@@ -2,6 +2,7 @@ config ARM64
|
||||
def_bool y
|
||||
select ARCH_BINFMT_ELF_RANDOMIZE_PIE
|
||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_HAS_SG_CHAIN
|
||||
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
||||
select ARCH_USE_CMPXCHG_LOCKREF
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
config MICROBLAZE
|
||||
def_bool y
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_MIGHT_HAVE_PC_PARPORT
|
||||
select ARCH_WANT_IPC_PARSE_VERSION
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
|
||||
@@ -38,14 +38,14 @@
|
||||
LDREGX \t2(\t1),\t2
|
||||
addil LT%exception_data,%r27
|
||||
LDREG RT%exception_data(%r1),\t1
|
||||
/* t1 = &__get_cpu_var(exception_data) */
|
||||
/* t1 = this_cpu_ptr(&exception_data) */
|
||||
add,l \t1,\t2,\t1
|
||||
/* t1 = t1->fault_ip */
|
||||
LDREG EXCDATA_IP(\t1), \t1
|
||||
.endm
|
||||
#else
|
||||
.macro get_fault_ip t1 t2
|
||||
/* t1 = &__get_cpu_var(exception_data) */
|
||||
/* t1 = this_cpu_ptr(&exception_data) */
|
||||
addil LT%exception_data,%r27
|
||||
LDREG RT%exception_data(%r1),\t2
|
||||
/* t1 = t2->fault_ip */
|
||||
|
||||
@@ -129,6 +129,7 @@ config PPC
|
||||
select HAVE_BPF_JIT if PPC64
|
||||
select HAVE_ARCH_JUMP_LABEL
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select GENERIC_SMP_IDLE_THREAD
|
||||
select GENERIC_CMOS_UPDATE
|
||||
select GENERIC_TIME_VSYSCALL_OLD
|
||||
|
||||
@@ -1514,7 +1514,7 @@ static void kernel_unmap_linear_page(unsigned long vaddr, unsigned long lmi)
|
||||
mmu_kernel_ssize, 0);
|
||||
}
|
||||
|
||||
void kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
void __kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
unsigned long flags, vaddr, lmi;
|
||||
int i;
|
||||
|
||||
@@ -429,7 +429,7 @@ static int change_page_attr(struct page *page, int numpages, pgprot_t prot)
|
||||
}
|
||||
|
||||
|
||||
void kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
void __kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
if (PageHighMem(page))
|
||||
return;
|
||||
|
||||
@@ -65,6 +65,7 @@ config S390
|
||||
def_bool y
|
||||
select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
|
||||
select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||
select ARCH_INLINE_READ_LOCK
|
||||
select ARCH_INLINE_READ_LOCK_BH
|
||||
|
||||
@@ -120,7 +120,7 @@ static void ipte_range(pte_t *pte, unsigned long address, int nr)
|
||||
}
|
||||
}
|
||||
|
||||
void kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
void __kernel_map_pages(struct page *page, int numpages, int enable)
|
||||
{
|
||||
unsigned long address;
|
||||
int nr, i, j;
|
||||
|
||||
@@ -16,6 +16,7 @@ config SUPERH
|
||||
select HAVE_DEBUG_BUGVERBOSE
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select PERF_USE_VMALLOC
|
||||
select HAVE_DEBUG_KMEMLEAK
|
||||
select HAVE_KERNEL_GZIP
|
||||
|
||||
@@ -415,8 +415,9 @@
|
||||
#define __NR_getrandom 347
|
||||
#define __NR_memfd_create 348
|
||||
#define __NR_bpf 349
|
||||
#define __NR_execveat 350
|
||||
|
||||
#define NR_syscalls 350
|
||||
#define NR_syscalls 351
|
||||
|
||||
/* Bitmask values returned from kern_features system call. */
|
||||
#define KERN_FEATURE_MIXED_MODE_STACK 0x00000001
|
||||
|
||||
@@ -6,6 +6,11 @@ sys64_execve:
|
||||
jmpl %g1, %g0
|
||||
flushw
|
||||
|
||||
sys64_execveat:
|
||||
set sys_execveat, %g1
|
||||
jmpl %g1, %g0
|
||||
flushw
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
sunos_execv:
|
||||
mov %g0, %o2
|
||||
@@ -13,6 +18,11 @@ sys32_execve:
|
||||
set compat_sys_execve, %g1
|
||||
jmpl %g1, %g0
|
||||
flushw
|
||||
|
||||
sys32_execveat:
|
||||
set compat_sys_execveat, %g1
|
||||
jmpl %g1, %g0
|
||||
flushw
|
||||
#endif
|
||||
|
||||
.align 32
|
||||
|
||||
@@ -87,3 +87,4 @@ sys_call_table:
|
||||
/*335*/ .long sys_syncfs, sys_sendmmsg, sys_setns, sys_process_vm_readv, sys_process_vm_writev
|
||||
/*340*/ .long sys_ni_syscall, sys_kcmp, sys_finit_module, sys_sched_setattr, sys_sched_getattr
|
||||
/*345*/ .long sys_renameat2, sys_seccomp, sys_getrandom, sys_memfd_create, sys_bpf
|
||||
/*350*/ .long sys_execveat
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user