forked from rubenslte/android_kernel_samsung_msm8226
misc: Import SM-G900H kernel source code
* Samsung Package Version: G800HXXU1CRJ1
* CAF Tag: LA.BF.1.1.3-00110-8x26.0
This commit is contained in:
+1
-1
@@ -454,7 +454,7 @@ config DEBUG_KMEMLEAK_EARLY_LOG_SIZE
|
||||
int "Maximum kmemleak early log entries"
|
||||
depends on DEBUG_KMEMLEAK
|
||||
range 200 40000
|
||||
default 400
|
||||
default 800
|
||||
help
|
||||
Kmemleak must track all the memory allocations to avoid
|
||||
reporting false positives. Since memory may be allocated or
|
||||
|
||||
+1
-1
@@ -340,7 +340,7 @@ static int ddebug_parse_query(char *words[], int nwords,
|
||||
struct ddebug_query *query)
|
||||
{
|
||||
unsigned int i;
|
||||
int rc;
|
||||
int rc = 0;
|
||||
|
||||
/* check we have an even number of words */
|
||||
if (nwords % 2 != 0)
|
||||
|
||||
@@ -178,27 +178,6 @@ static struct dentry *debugfs_create_stacktrace_depth(
|
||||
|
||||
#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
|
||||
|
||||
static int debugfs_atomic_t_set(void *data, u64 val)
|
||||
{
|
||||
atomic_set((atomic_t *)data, val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int debugfs_atomic_t_get(void *data, u64 *val)
|
||||
{
|
||||
*val = atomic_read((atomic_t *)data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_SIMPLE_ATTRIBUTE(fops_atomic_t, debugfs_atomic_t_get,
|
||||
debugfs_atomic_t_set, "%lld\n");
|
||||
|
||||
static struct dentry *debugfs_create_atomic_t(const char *name, umode_t mode,
|
||||
struct dentry *parent, atomic_t *value)
|
||||
{
|
||||
return debugfs_create_file(name, mode, parent, value, &fops_atomic_t);
|
||||
}
|
||||
|
||||
struct dentry *fault_create_debugfs_attr(const char *name,
|
||||
struct dentry *parent, struct fault_attr *attr)
|
||||
{
|
||||
|
||||
+17
-1
@@ -12,6 +12,14 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/bug.h>
|
||||
|
||||
#if 0
|
||||
#ifdef CONFIG_SEC_DEBUG_LIST_PANIC
|
||||
static int list_debug = 0x00000100UL;
|
||||
#else
|
||||
static int list_debug;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Insert a new entry between two known consecutive entries.
|
||||
*
|
||||
@@ -32,9 +40,14 @@ void __list_add(struct list_head *new,
|
||||
"next (%p), but was %p. (prev=%p).\n",
|
||||
next, prev->next, prev);
|
||||
|
||||
#if 0
|
||||
BUG_ON(((prev->next != next) || (next->prev != prev)) &&
|
||||
PANIC_CORRUPTION);
|
||||
|
||||
#endif
|
||||
if ((prev->next != next) || (next->prev != prev))
|
||||
{
|
||||
panic("list corruption during add");
|
||||
}
|
||||
next->prev = new;
|
||||
new->next = next;
|
||||
new->prev = prev;
|
||||
@@ -61,7 +74,10 @@ void __list_del_entry(struct list_head *entry)
|
||||
WARN(next->prev != entry,
|
||||
"list_del corruption. next->prev should be %p, "
|
||||
"but was %p\n", entry, next->prev)) {
|
||||
#if 0
|
||||
BUG_ON(PANIC_CORRUPTION);
|
||||
#endif
|
||||
panic("list corruption during del");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
+6
-1
@@ -64,8 +64,13 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
|
||||
if (!esize) {
|
||||
/* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0
|
||||
* depending on if MOD equals 1. */
|
||||
rp[0] = 1;
|
||||
res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1;
|
||||
if (res->nlimbs) {
|
||||
if (mpi_resize(res, 1) < 0)
|
||||
goto enomem;
|
||||
rp = res->d;
|
||||
rp[0] = 1;
|
||||
}
|
||||
res->sign = 0;
|
||||
goto leave;
|
||||
}
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func)
|
||||
if (rs->missed)
|
||||
printk(KERN_WARNING "%s: %d callbacks suppressed\n",
|
||||
func, rs->missed);
|
||||
rs->begin = 0;
|
||||
rs->begin = jiffies;
|
||||
rs->printed = 0;
|
||||
rs->missed = 0;
|
||||
}
|
||||
|
||||
@@ -46,6 +46,17 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name,
|
||||
sem->activity = 0;
|
||||
raw_spin_lock_init(&sem->wait_lock);
|
||||
INIT_LIST_HEAD(&sem->wait_list);
|
||||
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = NULL;
|
||||
sem->owner_pid = 0;
|
||||
sem->owner_comm[0] = 'N';
|
||||
sem->owner_comm[1] = 'U';
|
||||
sem->owner_comm[2] = 'L';
|
||||
sem->owner_comm[3] = 'L';
|
||||
sem->caller = NULL;
|
||||
#endif
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL(__init_rwsem);
|
||||
|
||||
@@ -84,6 +95,13 @@ __rwsem_do_wake(struct rw_semaphore *sem, int wakewrite)
|
||||
tsk = waiter->task;
|
||||
/* Don't touch waiter after ->task has been NULLed */
|
||||
smp_mb();
|
||||
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = waiter->task;
|
||||
sem->owner_pid = waiter->task->pid;
|
||||
memcpy(sem->owner_comm ,waiter->task->comm,16);
|
||||
sem->caller = __builtin_return_address(0);
|
||||
#endif
|
||||
waiter->task = NULL;
|
||||
wake_up_process(tsk);
|
||||
put_task_struct(tsk);
|
||||
@@ -129,6 +147,14 @@ __rwsem_wake_one_writer(struct rw_semaphore *sem)
|
||||
list_del(&waiter->list);
|
||||
|
||||
tsk = waiter->task;
|
||||
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = waiter->task;
|
||||
sem->owner_pid = waiter->task->pid;
|
||||
memcpy(sem->owner_comm ,waiter->task->comm,16);
|
||||
sem->caller = __builtin_return_address(0);
|
||||
#endif
|
||||
|
||||
smp_mb();
|
||||
waiter->task = NULL;
|
||||
wake_up_process(tsk);
|
||||
@@ -218,6 +244,14 @@ void __sched __down_write_nested(struct rw_semaphore *sem, int subclass)
|
||||
/* granted */
|
||||
sem->activity = -1;
|
||||
raw_spin_unlock_irqrestore(&sem->wait_lock, flags);
|
||||
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = current;
|
||||
sem->owner_pid = current->pid;
|
||||
memcpy(sem->owner_comm ,current->comm,16);
|
||||
sem->caller = __builtin_return_address(0);
|
||||
#endif
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -265,6 +299,13 @@ int __down_write_trylock(struct rw_semaphore *sem)
|
||||
if (sem->activity == 0 && list_empty(&sem->wait_list)) {
|
||||
/* granted */
|
||||
sem->activity = -1;
|
||||
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = current;
|
||||
sem->owner_pid = current->pid;
|
||||
memcpy(sem->owner_comm ,current->comm,16);
|
||||
sem->caller = __builtin_return_address(0);
|
||||
#endif
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
@@ -281,6 +322,10 @@ void __up_read(struct rw_semaphore *sem)
|
||||
unsigned long flags;
|
||||
|
||||
raw_spin_lock_irqsave(&sem->wait_lock, flags);
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
if(sem->activity == 0)
|
||||
panic("Reader is making sem as writer locked state by mistake");
|
||||
#endif
|
||||
|
||||
if (--sem->activity == 0 && !list_empty(&sem->wait_list))
|
||||
sem = __rwsem_wake_one_writer(sem);
|
||||
@@ -298,6 +343,14 @@ void __up_write(struct rw_semaphore *sem)
|
||||
raw_spin_lock_irqsave(&sem->wait_lock, flags);
|
||||
|
||||
sem->activity = 0;
|
||||
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = current;
|
||||
sem->owner_pid = current->pid;
|
||||
memcpy(sem->owner_comm ,current->comm,16);
|
||||
sem->caller = __builtin_return_address(0);
|
||||
#endif
|
||||
|
||||
if (!list_empty(&sem->wait_list))
|
||||
sem = __rwsem_do_wake(sem, 1);
|
||||
|
||||
@@ -315,6 +368,12 @@ void __downgrade_write(struct rw_semaphore *sem)
|
||||
raw_spin_lock_irqsave(&sem->wait_lock, flags);
|
||||
|
||||
sem->activity = 1;
|
||||
#ifdef CONFIG_SEC_FORKHANG_DEBUG
|
||||
sem->owner = current;
|
||||
sem->owner_pid = current->pid;
|
||||
memcpy(sem->owner_comm ,current->comm,16);
|
||||
sem->caller = __builtin_return_address(0);
|
||||
#endif
|
||||
if (!list_empty(&sem->wait_list))
|
||||
sem = __rwsem_do_wake(sem, 0);
|
||||
|
||||
|
||||
+23
-1
@@ -13,6 +13,9 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/bug.h>
|
||||
#ifdef CONFIG_MACH_ATLANTICLTE_ATT
|
||||
#include <mach/msm_watchdog_v2.h>
|
||||
#endif
|
||||
|
||||
void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
|
||||
struct lock_class_key *key)
|
||||
@@ -50,6 +53,11 @@ void __rwlock_init(rwlock_t *lock, const char *name,
|
||||
|
||||
EXPORT_SYMBOL(__rwlock_init);
|
||||
|
||||
#ifdef CONFIG_SEC_DEBUG_SPINLOCK_PANIC
|
||||
#define DBG_HRT_MAX 10
|
||||
raw_spinlock_t debug_hrtimer_spinlock[DBG_HRT_MAX];
|
||||
#endif
|
||||
|
||||
static void spin_dump(raw_spinlock_t *lock, const char *msg)
|
||||
{
|
||||
struct task_struct *owner = NULL;
|
||||
@@ -65,8 +73,16 @@ static void spin_dump(raw_spinlock_t *lock, const char *msg)
|
||||
owner ? owner->comm : "<none>",
|
||||
owner ? task_pid_nr(owner) : -1,
|
||||
lock->owner_cpu);
|
||||
BUG_ON(PANIC_CORRUPTION);
|
||||
#ifdef CONFIG_MACH_ATLANTICLTE_ATT
|
||||
msm_cause_bite();
|
||||
dump_stack();
|
||||
#else
|
||||
#ifdef CONFIG_SEC_DEBUG_SPINLOCK_PANIC
|
||||
panic("spinlock bug");
|
||||
#else
|
||||
dump_stack();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static void spin_bug(raw_spinlock_t *lock, const char *msg)
|
||||
@@ -105,6 +121,7 @@ static inline void debug_spin_unlock(raw_spinlock_t *lock)
|
||||
lock->owner_cpu = -1;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void __spin_lock_debug(raw_spinlock_t *lock)
|
||||
{
|
||||
u64 i;
|
||||
@@ -131,12 +148,17 @@ static void __spin_lock_debug(raw_spinlock_t *lock)
|
||||
*/
|
||||
arch_spin_lock(&lock->raw_lock);
|
||||
}
|
||||
#endif
|
||||
|
||||
void do_raw_spin_lock(raw_spinlock_t *lock)
|
||||
{
|
||||
debug_spin_lock_before(lock);
|
||||
#if 0 /* Temporarily comment out for testing hrtimer spinlock issue */
|
||||
if (unlikely(!arch_spin_trylock(&lock->raw_lock)))
|
||||
__spin_lock_debug(lock);
|
||||
#else
|
||||
arch_spin_lock(&lock->raw_lock);
|
||||
#endif
|
||||
debug_spin_lock_after(lock);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -809,7 +809,7 @@ char *netdev_feature_string(char *buf, char *end, const u8 *addr,
|
||||
return number(buf, end, *(const netdev_features_t *)addr, spec);
|
||||
}
|
||||
|
||||
int kptr_restrict __read_mostly;
|
||||
int kptr_restrict __read_mostly = 4;
|
||||
|
||||
/*
|
||||
* Show a '%p' thing. A kernel extension is that the '%p' is followed
|
||||
|
||||
Reference in New Issue
Block a user