mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'akpm' (updates from Andrew Morton)
Merge second patch-bomb from Andrew Morton: - misc fixes - audit stuff - fanotify/inotify/dnotify things - most of the rest of MM. The new cache shrinker code from Glauber and Dave Chinner probably isn't quite stabilized yet. - ptrace - ipc - partitions - reboot cleanups - add LZ4 decompressor, use it for kernel compression * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (118 commits) lib/scatterlist: error handling in __sg_alloc_table() scsi_debug: fix do_device_access() with wrap around range crypto: talitos: use sg_pcopy_to_buffer() lib/scatterlist: introduce sg_pcopy_from_buffer() and sg_pcopy_to_buffer() lib/scatterlist: factor out sg_miter_get_next_page() from sg_miter_next() crypto: add lz4 Cryptographic API lib: add lz4 compressor module arm: add support for LZ4-compressed kernel lib: add support for LZ4-compressed kernel decompressor: add LZ4 decompressor module lib: add weak clz/ctz functions reboot: move arch/x86 reboot= handling to generic kernel reboot: arm: change reboot_mode to use enum reboot_mode reboot: arm: prepare reboot_mode for moving to generic kernel code reboot: arm: remove unused restart_mode fields from some arm subarchs reboot: unicore32: prepare reboot_mode for moving to generic kernel code reboot: x86: prepare reboot_mode for moving to generic kernel code reboot: checkpatch.pl the new kernel/reboot.c file reboot: move shutdown/reboot related functions to kernel/reboot.c reboot: remove -stable friendly PF_THREAD_BOUND define ...
This commit is contained in:
commit
a82a729f04
238 changed files with 4461 additions and 1691 deletions
|
|
@ -103,8 +103,11 @@ extern void __audit_syscall_exit(int ret_success, long ret_value);
|
|||
extern struct filename *__audit_reusename(const __user char *uptr);
|
||||
extern void __audit_getname(struct filename *name);
|
||||
extern void audit_putname(struct filename *name);
|
||||
|
||||
#define AUDIT_INODE_PARENT 1 /* dentry represents the parent */
|
||||
#define AUDIT_INODE_HIDDEN 2 /* audit record should be hidden */
|
||||
extern void __audit_inode(struct filename *name, const struct dentry *dentry,
|
||||
unsigned int parent);
|
||||
unsigned int flags);
|
||||
extern void __audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
const unsigned char type);
|
||||
|
|
@ -148,10 +151,22 @@ static inline void audit_getname(struct filename *name)
|
|||
if (unlikely(!audit_dummy_context()))
|
||||
__audit_getname(name);
|
||||
}
|
||||
static inline void audit_inode(struct filename *name, const struct dentry *dentry,
|
||||
static inline void audit_inode(struct filename *name,
|
||||
const struct dentry *dentry,
|
||||
unsigned int parent) {
|
||||
if (unlikely(!audit_dummy_context())) {
|
||||
unsigned int flags = 0;
|
||||
if (parent)
|
||||
flags |= AUDIT_INODE_PARENT;
|
||||
__audit_inode(name, dentry, flags);
|
||||
}
|
||||
}
|
||||
static inline void audit_inode_parent_hidden(struct filename *name,
|
||||
const struct dentry *dentry)
|
||||
{
|
||||
if (unlikely(!audit_dummy_context()))
|
||||
__audit_inode(name, dentry, parent);
|
||||
__audit_inode(name, dentry,
|
||||
AUDIT_INODE_PARENT | AUDIT_INODE_HIDDEN);
|
||||
}
|
||||
static inline void audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
|
|
@ -311,7 +326,7 @@ static inline void audit_putname(struct filename *name)
|
|||
{ }
|
||||
static inline void __audit_inode(struct filename *name,
|
||||
const struct dentry *dentry,
|
||||
unsigned int parent)
|
||||
unsigned int flags)
|
||||
{ }
|
||||
static inline void __audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
|
|
@ -321,6 +336,9 @@ static inline void audit_inode(struct filename *name,
|
|||
const struct dentry *dentry,
|
||||
unsigned int parent)
|
||||
{ }
|
||||
static inline void audit_inode_parent_hidden(struct filename *name,
|
||||
const struct dentry *dentry)
|
||||
{ }
|
||||
static inline void audit_inode_child(const struct inode *parent,
|
||||
const struct dentry *dentry,
|
||||
const unsigned char type)
|
||||
|
|
|
|||
10
include/linux/decompress/unlz4.h
Normal file
10
include/linux/decompress/unlz4.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef DECOMPRESS_UNLZ4_H
|
||||
#define DECOMPRESS_UNLZ4_H
|
||||
|
||||
int unlz4(unsigned char *inbuf, int len,
|
||||
int(*fill)(void*, unsigned int),
|
||||
int(*flush)(void*, unsigned int),
|
||||
unsigned char *output,
|
||||
int *pos,
|
||||
void(*error)(char *x));
|
||||
#endif
|
||||
|
|
@ -372,8 +372,8 @@ struct address_space_operations {
|
|||
int (*get_xip_mem)(struct address_space *, pgoff_t, int,
|
||||
void **, unsigned long *);
|
||||
/*
|
||||
* migrate the contents of a page to the specified target. If sync
|
||||
* is false, it must not block.
|
||||
* migrate the contents of a page to the specified target. If
|
||||
* migrate_mode is MIGRATE_ASYNC, it must not block.
|
||||
*/
|
||||
int (*migratepage) (struct address_space *,
|
||||
struct page *, struct page *, enum migrate_mode);
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ static inline int allocflags_to_migratetype(gfp_t gfp_flags)
|
|||
* 0x9 => DMA or NORMAL (MOVABLE+DMA)
|
||||
* 0xa => MOVABLE (Movable is valid only if HIGHMEM is set too)
|
||||
* 0xb => BAD (MOVABLE+HIGHMEM+DMA)
|
||||
* 0xc => DMA32 (MOVABLE+HIGHMEM+DMA32)
|
||||
* 0xc => DMA32 (MOVABLE+DMA32)
|
||||
* 0xd => BAD (MOVABLE+DMA32+DMA)
|
||||
* 0xe => BAD (MOVABLE+DMA32+HIGHMEM)
|
||||
* 0xf => BAD (MOVABLE+DMA32+HIGHMEM+DMA)
|
||||
|
|
|
|||
87
include/linux/lz4.h
Normal file
87
include/linux/lz4.h
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
#ifndef __LZ4_H__
|
||||
#define __LZ4_H__
|
||||
/*
|
||||
* LZ4 Kernel Interface
|
||||
*
|
||||
* Copyright (C) 2013, LG Electronics, Kyungsik Lee <kyungsik.lee@lge.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#define LZ4_MEM_COMPRESS (4096 * sizeof(unsigned char *))
|
||||
#define LZ4HC_MEM_COMPRESS (65538 * sizeof(unsigned char *))
|
||||
|
||||
/*
|
||||
* lz4_compressbound()
|
||||
* Provides the maximum size that LZ4 may output in a "worst case" scenario
|
||||
* (input data not compressible)
|
||||
*/
|
||||
static inline size_t lz4_compressbound(size_t isize)
|
||||
{
|
||||
return isize + (isize / 255) + 16;
|
||||
}
|
||||
|
||||
/*
|
||||
* lz4_compress()
|
||||
* src : source address of the original data
|
||||
* src_len : size of the original data
|
||||
* dst : output buffer address of the compressed data
|
||||
* This requires 'dst' of size LZ4_COMPRESSBOUND.
|
||||
* dst_len : is the output size, which is returned after compress done
|
||||
* workmem : address of the working memory.
|
||||
* This requires 'workmem' of size LZ4_MEM_COMPRESS.
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer and workmem must be already allocated with
|
||||
* the defined size.
|
||||
*/
|
||||
int lz4_compress(const unsigned char *src, size_t src_len,
|
||||
unsigned char *dst, size_t *dst_len, void *wrkmem);
|
||||
|
||||
/*
|
||||
* lz4hc_compress()
|
||||
* src : source address of the original data
|
||||
* src_len : size of the original data
|
||||
* dst : output buffer address of the compressed data
|
||||
* This requires 'dst' of size LZ4_COMPRESSBOUND.
|
||||
* dst_len : is the output size, which is returned after compress done
|
||||
* workmem : address of the working memory.
|
||||
* This requires 'workmem' of size LZ4HC_MEM_COMPRESS.
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer and workmem must be already allocated with
|
||||
* the defined size.
|
||||
*/
|
||||
int lz4hc_compress(const unsigned char *src, size_t src_len,
|
||||
unsigned char *dst, size_t *dst_len, void *wrkmem);
|
||||
|
||||
/*
|
||||
* lz4_decompress()
|
||||
* src : source address of the compressed data
|
||||
* src_len : is the input size, whcih is returned after decompress done
|
||||
* dest : output buffer address of the decompressed data
|
||||
* actual_dest_len: is the size of uncompressed data, supposing it's known
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer must be already allocated.
|
||||
* slightly faster than lz4_decompress_unknownoutputsize()
|
||||
*/
|
||||
int lz4_decompress(const char *src, size_t *src_len, char *dest,
|
||||
size_t actual_dest_len);
|
||||
|
||||
/*
|
||||
* lz4_decompress_unknownoutputsize()
|
||||
* src : source address of the compressed data
|
||||
* src_len : is the input size, therefore the compressed size
|
||||
* dest : output buffer address of the decompressed data
|
||||
* dest_len: is the max size of the destination buffer, which is
|
||||
* returned with actual size of decompressed data after
|
||||
* decompress done
|
||||
* return : Success if return 0
|
||||
* Error if return (< 0)
|
||||
* note : Destination buffer must be already allocated.
|
||||
*/
|
||||
int lz4_decompress_unknownoutputsize(const char *src, size_t src_len,
|
||||
char *dest, size_t *dest_len);
|
||||
#endif
|
||||
|
|
@ -151,12 +151,6 @@ extern unsigned int kobjsize(const void *objp);
|
|||
#define VM_STACK_FLAGS (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
|
||||
#endif
|
||||
|
||||
#define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ)
|
||||
#define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK
|
||||
#define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK))
|
||||
#define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ)
|
||||
#define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ)
|
||||
|
||||
/*
|
||||
* Special vmas that are non-mergable, non-mlock()able.
|
||||
* Note: mm/huge_memory.c VM_NO_THP depends on this definition.
|
||||
|
|
|
|||
|
|
@ -869,11 +869,6 @@ static inline int is_highmem_idx(enum zone_type idx)
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline int is_normal_idx(enum zone_type idx)
|
||||
{
|
||||
return (idx == ZONE_NORMAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* is_highmem - helper function to quickly check if a struct zone is a
|
||||
* highmem zone or not. This is an attempt to keep references
|
||||
|
|
@ -892,29 +887,6 @@ static inline int is_highmem(struct zone *zone)
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline int is_normal(struct zone *zone)
|
||||
{
|
||||
return zone == zone->zone_pgdat->node_zones + ZONE_NORMAL;
|
||||
}
|
||||
|
||||
static inline int is_dma32(struct zone *zone)
|
||||
{
|
||||
#ifdef CONFIG_ZONE_DMA32
|
||||
return zone == zone->zone_pgdat->node_zones + ZONE_DMA32;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int is_dma(struct zone *zone)
|
||||
{
|
||||
#ifdef CONFIG_ZONE_DMA
|
||||
return zone == zone->zone_pgdat->node_zones + ZONE_DMA;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* These two functions are used to setup the per zone pages min values */
|
||||
struct ctl_table;
|
||||
int min_free_kbytes_sysctl_handler(struct ctl_table *, int,
|
||||
|
|
|
|||
|
|
@ -142,9 +142,6 @@ static inline void ptrace_init_task(struct task_struct *child, bool ptrace)
|
|||
{
|
||||
INIT_LIST_HEAD(&child->ptrace_entry);
|
||||
INIT_LIST_HEAD(&child->ptraced);
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
atomic_set(&child->ptrace_bp_refcnt, 1);
|
||||
#endif
|
||||
child->jobctl = 0;
|
||||
child->ptrace = 0;
|
||||
child->parent = child->real_parent;
|
||||
|
|
@ -351,11 +348,4 @@ extern int task_current_syscall(struct task_struct *target, long *callno,
|
|||
unsigned long args[6], unsigned int maxargs,
|
||||
unsigned long *sp, unsigned long *pc);
|
||||
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
extern int ptrace_get_breakpoints(struct task_struct *tsk);
|
||||
extern void ptrace_put_breakpoints(struct task_struct *tsk);
|
||||
#else
|
||||
static inline void ptrace_put_breakpoints(struct task_struct *tsk) { }
|
||||
#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10,6 +10,31 @@
|
|||
#define SYS_HALT 0x0002 /* Notify of system halt */
|
||||
#define SYS_POWER_OFF 0x0003 /* Notify of system power off */
|
||||
|
||||
enum reboot_mode {
|
||||
REBOOT_COLD = 0,
|
||||
REBOOT_WARM,
|
||||
REBOOT_HARD,
|
||||
REBOOT_SOFT,
|
||||
REBOOT_GPIO,
|
||||
};
|
||||
extern enum reboot_mode reboot_mode;
|
||||
|
||||
enum reboot_type {
|
||||
BOOT_TRIPLE = 't',
|
||||
BOOT_KBD = 'k',
|
||||
BOOT_BIOS = 'b',
|
||||
BOOT_ACPI = 'a',
|
||||
BOOT_EFI = 'e',
|
||||
BOOT_CF9 = 'p',
|
||||
BOOT_CF9_COND = 'q',
|
||||
};
|
||||
extern enum reboot_type reboot_type;
|
||||
|
||||
extern int reboot_default;
|
||||
extern int reboot_cpu;
|
||||
extern int reboot_force;
|
||||
|
||||
|
||||
extern int register_reboot_notifier(struct notifier_block *);
|
||||
extern int unregister_reboot_notifier(struct notifier_block *);
|
||||
|
||||
|
|
@ -26,7 +51,7 @@ extern void machine_shutdown(void);
|
|||
struct pt_regs;
|
||||
extern void machine_crash_shutdown(struct pt_regs *);
|
||||
|
||||
/*
|
||||
/*
|
||||
* Architecture independent implemenations of sys_reboot commands.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -244,6 +244,11 @@ size_t sg_copy_from_buffer(struct scatterlist *sgl, unsigned int nents,
|
|||
size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
void *buf, size_t buflen);
|
||||
|
||||
size_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
void *buf, size_t buflen, off_t skip);
|
||||
size_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents,
|
||||
void *buf, size_t buflen, off_t skip);
|
||||
|
||||
/*
|
||||
* Maximum number of entries that will be allocated in one piece, if
|
||||
* a list larger than this is required then chaining will be utilized.
|
||||
|
|
|
|||
|
|
@ -1401,9 +1401,6 @@ struct task_struct {
|
|||
} memcg_batch;
|
||||
unsigned int memcg_kmem_skip_account;
|
||||
#endif
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
atomic_t ptrace_bp_refcnt;
|
||||
#endif
|
||||
#ifdef CONFIG_UPROBES
|
||||
struct uprobe_task *utask;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -12,10 +12,12 @@ struct task_struct;
|
|||
struct sem_array {
|
||||
struct kern_ipc_perm ____cacheline_aligned_in_smp
|
||||
sem_perm; /* permissions .. see ipc.h */
|
||||
time_t sem_otime; /* last semop time */
|
||||
time_t sem_ctime; /* last change time */
|
||||
struct sem *sem_base; /* ptr to first semaphore in array */
|
||||
struct list_head sem_pending; /* pending operations to be processed */
|
||||
struct list_head pending_alter; /* pending operations */
|
||||
/* that alter the array */
|
||||
struct list_head pending_const; /* pending complex operations */
|
||||
/* that do not alter semvals */
|
||||
struct list_head list_id; /* undo requests on this array */
|
||||
int sem_nsems; /* no. of semaphores in array */
|
||||
int complex_count; /* pending complex operations */
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#define _LINUX_VEXPRESS_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/reboot.h>
|
||||
|
||||
#define VEXPRESS_SITE_MB 0
|
||||
#define VEXPRESS_SITE_DB1 1
|
||||
|
|
|
|||
|
|
@ -10,12 +10,12 @@
|
|||
struct vm_area_struct; /* vma defining user mapping in mm_types.h */
|
||||
|
||||
/* bits in flags of vmalloc's vm_struct below */
|
||||
#define VM_IOREMAP 0x00000001 /* ioremap() and friends */
|
||||
#define VM_ALLOC 0x00000002 /* vmalloc() */
|
||||
#define VM_MAP 0x00000004 /* vmap()ed pages */
|
||||
#define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */
|
||||
#define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */
|
||||
#define VM_UNLIST 0x00000020 /* vm_struct is not listed in vmlist */
|
||||
#define VM_IOREMAP 0x00000001 /* ioremap() and friends */
|
||||
#define VM_ALLOC 0x00000002 /* vmalloc() */
|
||||
#define VM_MAP 0x00000004 /* vmap()ed pages */
|
||||
#define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */
|
||||
#define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */
|
||||
#define VM_UNINITIALIZED 0x00000020 /* vm_struct is not fully initialized */
|
||||
/* bits [20..32] reserved for arch specific ioremap internals */
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -47,11 +47,16 @@ enum wb_reason {
|
|||
WB_REASON_LAPTOP_TIMER,
|
||||
WB_REASON_FREE_MORE_MEM,
|
||||
WB_REASON_FS_FREE_SPACE,
|
||||
/*
|
||||
* There is no bdi forker thread any more and works are done
|
||||
* by emergency worker, however, this is TPs userland visible
|
||||
* and we'll be exposing exactly the same information,
|
||||
* so it has a mismatch name.
|
||||
*/
|
||||
WB_REASON_FORKER_THREAD,
|
||||
|
||||
WB_REASON_MAX,
|
||||
};
|
||||
extern const char *wb_reason_name[];
|
||||
|
||||
/*
|
||||
* A control structure which tells the writeback code what to do. These are
|
||||
|
|
@ -95,7 +100,6 @@ int try_to_writeback_inodes_sb_nr(struct super_block *, unsigned long nr,
|
|||
void sync_inodes_sb(struct super_block *);
|
||||
long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
|
||||
enum wb_reason reason);
|
||||
long wb_do_writeback(struct bdi_writeback *wb, int force_wait);
|
||||
void wakeup_flusher_threads(long nr_pages, enum wb_reason reason);
|
||||
void inode_wait_for_writeback(struct inode *inode);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue