Lines Matching +full:master +full:- +full:kernel
1 // SPDX-License-Identifier: GPL-2.0
7 #include <linux/kernel.h>
50 MODULE_PARM_DESC(use_hrtimer, "use high-resolution timer for sleeping");
58 MODULE_PARM_DESC(lock_read, "lock read-write locks for read");
70 MODULE_PARM_DESC(touch_softlockup, "touch soft-lockup watchdog between iterations");
74 MODULE_PARM_DESC(touch_hardlockup, "touch hard-lockup watchdog between iterations");
90 MODULE_PARM_DESC(disable_irq, "disable interrupts: generate hard-lockups");
94 MODULE_PARM_DESC(disable_softirq, "disable bottom-half irq handlers");
98 MODULE_PARM_DESC(disable_preempt, "disable preemption: generate soft-lockups");
106 MODULE_PARM_DESC(lock_mmap_sem, "lock mm->mmap_lock: block procfs interfaces");
152 MODULE_PARM_DESC(lock_inode, "lock file -> inode -> i_rwsem");
156 MODULE_PARM_DESC(lock_mapping, "lock file -> mapping -> i_mmap_rwsem");
160 MODULE_PARM_DESC(lock_sb_umount, "lock file -> sb -> s_umount");
169 static void test_lock(bool master, bool verbose) in test_lock() argument
176 if (lock_mutex_ptr && master) { in test_lock()
182 if (lock_rwsem_ptr && master) { in test_lock()
192 if (lock_mmap_sem && master) { in test_lock()
194 pr_notice("lock mmap_lock pid=%d\n", main_task->pid); in test_lock()
196 mmap_read_lock(main_task->mm); in test_lock()
198 mmap_write_lock(main_task->mm); in test_lock()
213 if (lock_spinlock_ptr && master) { in test_lock()
220 if (lock_rwlock_ptr && master) { in test_lock()
231 s64 cur_wait = local_clock() - wait_start; in test_lock()
246 static void test_unlock(bool master, bool verbose) in test_unlock() argument
248 if (lock_rwlock_ptr && master) { in test_unlock()
258 if (lock_spinlock_ptr && master) { in test_unlock()
277 if (lock_mmap_sem && master) { in test_unlock()
279 mmap_read_unlock(main_task->mm); in test_unlock()
281 mmap_write_unlock(main_task->mm); in test_unlock()
283 pr_notice("unlock mmap_lock pid=%d\n", main_task->pid); in test_unlock()
286 if (lock_rwsem_ptr && master) { in test_unlock()
296 if (lock_mutex_ptr && master) { in test_unlock()
315 list_add(&page->lru, pages); in test_alloc_pages()
349 static void test_lockup(bool master) in test_lockup() argument
357 test_lock(master, true); in test_lockup()
364 current->in_iowait = 1; in test_lockup()
369 current->in_iowait = 0; in test_lockup()
375 test_unlock(master, false); in test_lockup()
389 test_lock(master, false); in test_lockup()
396 local_clock() - lockup_start); in test_lockup()
400 test_unlock(master, true); in test_lockup()
419 /* should be at least readable kernel address */ in test_kernel_ptr()
422 access_ok((void __user *)ptr + size - 1, 1))) { in test_kernel_ptr()
423 pr_err("user space ptr invalid in kernel: %#lx\n", addr); in test_kernel_ptr()
428 get_kernel_nofault(buf, ptr + size - 1)) { in test_kernel_ptr()
429 pr_err("invalid kernel ptr: %#lx\n", addr); in test_kernel_ptr()
475 return -EINVAL; in test_lockup_init()
485 return -EINVAL; in test_lockup_init()
501 return -EINVAL; in test_lockup_init()
515 return -EINVAL; in test_lockup_init()
525 return -EINVAL; in test_lockup_init()
528 if (lock_mmap_sem && !main_task->mm) { in test_lockup_init()
530 return -EINVAL; in test_lockup_init()
544 return -EINVAL; in test_lockup_init()
548 lock_rwsem_ptr = (unsigned long)&test_inode->i_rwsem; in test_lockup_init()
550 if (test_lock_mapping && test_file && test_file->f_mapping) in test_lockup_init()
551 lock_rwsem_ptr = (unsigned long)&test_file->f_mapping->i_mmap_rwsem; in test_lockup_init()
554 lock_rwsem_ptr = (unsigned long)&test_inode->i_sb->s_umount; in test_lockup_init()
557 main_task->pid, time_secs, time_nsecs, in test_lockup_init()
606 pr_notice("FINISH in %llu ns\n", local_clock() - test_start); in test_lockup_init()
612 return -EINTR; in test_lockup_init()
614 return -EAGAIN; in test_lockup_init()
619 MODULE_AUTHOR("Konstantin Khlebnikov <khlebnikov@yandex-team.ru>");