lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sat, 7 Jul 2018 19:31:21 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>
Cc:     kbuild-all@...org, akpm@...ux-foundation.org,
        linux-kernel@...r.kernel.org,
        Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>,
        Dmitry Vyukov <dvyukov@...gle.com>,
        Ingo Molnar <mingo@...hat.com>,
        Peter Zijlstra <peterz@...radead.org>,
        Will Deacon <will.deacon@....com>
Subject: Re: [PATCH] locking/lockdep: Dump state of percpu_rwsem upon hung up.

Hi Tetsuo,

I love your patch! Yet something to improve:

[auto build test ERROR on next-20180706]
[also build test ERROR on v4.18-rc3]
[cannot apply to tip/auto-latest tip/sched/core linus/master v4.18-rc3 v4.18-rc2 v4.18-rc1]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Tetsuo-Handa/locking-lockdep-Dump-state-of-percpu_rwsem-upon-hung-up/20180707-143406
config: mips-allmodconfig (attached as .config)
compiler: mips-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=mips 

All error/warnings (new ones prefixed by >>):

   In file included from include/linux/kernel.h:14:0,
                    from include/asm-generic/bug.h:18,
                    from arch/mips/include/asm/bug.h:42,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/mm.h:9,
                    from kernel/hung_task.c:8:
   kernel/hung_task.c: In function 'dump_percpu_rwsem_state':
>> kernel/hung_task.c:95:20: error: passing argument 1 of 'atomic_long_read' from incompatible pointer type [-Werror=incompatible-pointer-types]
      atomic_long_read(&sem->rw_sem.count));
                       ^
   include/linux/printk.h:311:34: note: in definition of macro 'pr_info'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
                                     ^~~~~~~~~~~
   In file included from include/linux/atomic.h:1309:0,
                    from arch/mips/include/asm/processor.h:14,
                    from arch/mips/include/asm/thread_info.h:16,
                    from include/linux/thread_info.h:38,
                    from include/asm-generic/preempt.h:5,
                    from ./arch/mips/include/generated/asm/preempt.h:1,
                    from include/linux/preempt.h:81,
                    from include/linux/spinlock.h:51,
                    from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:6,
                    from include/linux/mm.h:10,
                    from kernel/hung_task.c:8:
   include/asm-generic/atomic-long.h:41:20: note: expected 'const atomic_long_t * {aka const struct <anonymous> *}' but argument is of type '__s32 * {aka int *}'
    static inline long atomic_long_read##mo(const atomic_long_t *l)  \
                       ^
>> include/asm-generic/atomic-long.h:47:1: note: in expansion of macro 'ATOMIC_LONG_READ_OP'
    ATOMIC_LONG_READ_OP()
    ^~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/atomic_long_read +95 kernel/hung_task.c

   > 8	#include <linux/mm.h>
     9	#include <linux/cpu.h>
    10	#include <linux/nmi.h>
    11	#include <linux/init.h>
    12	#include <linux/delay.h>
    13	#include <linux/freezer.h>
    14	#include <linux/kthread.h>
    15	#include <linux/lockdep.h>
    16	#include <linux/export.h>
    17	#include <linux/sysctl.h>
    18	#include <linux/utsname.h>
    19	#include <linux/sched/signal.h>
    20	#include <linux/sched/debug.h>
    21	#include <linux/percpu-rwsem.h>
    22	
    23	#include <trace/events/sched.h>
    24	
    25	/*
    26	 * The number of tasks checked:
    27	 */
    28	int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
    29	
    30	/*
    31	 * Limit number of tasks checked in a batch.
    32	 *
    33	 * This value controls the preemptibility of khungtaskd since preemption
    34	 * is disabled during the critical section. It also controls the size of
    35	 * the RCU grace period. So it needs to be upper-bound.
    36	 */
    37	#define HUNG_TASK_BATCHING 1024
    38	
    39	/*
    40	 * Zero means infinite timeout - no checking done:
    41	 */
    42	unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_TASK_TIMEOUT;
    43	
    44	/*
    45	 * Zero (default value) means use sysctl_hung_task_timeout_secs:
    46	 */
    47	unsigned long __read_mostly sysctl_hung_task_check_interval_secs;
    48	
    49	int __read_mostly sysctl_hung_task_warnings = 10;
    50	
    51	static int __read_mostly did_panic;
    52	static bool hung_task_show_lock;
    53	static bool hung_task_call_panic;
    54	
    55	static struct task_struct *watchdog_task;
    56	
    57	/*
    58	 * Should we panic (and reboot, if panic_timeout= is set) when a
    59	 * hung task is detected:
    60	 */
    61	unsigned int __read_mostly sysctl_hung_task_panic =
    62					CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE;
    63	
    64	static int __init hung_task_panic_setup(char *str)
    65	{
    66		int rc = kstrtouint(str, 0, &sysctl_hung_task_panic);
    67	
    68		if (rc)
    69			return rc;
    70		return 1;
    71	}
    72	__setup("hung_task_panic=", hung_task_panic_setup);
    73	
    74	static int
    75	hung_task_panic(struct notifier_block *this, unsigned long event, void *ptr)
    76	{
    77		did_panic = 1;
    78	
    79		return NOTIFY_DONE;
    80	}
    81	
    82	static struct notifier_block panic_block = {
    83		.notifier_call = hung_task_panic,
    84	};
    85	
    86	static void dump_percpu_rwsem_state(struct percpu_rw_semaphore *sem)
    87	{
    88		unsigned int sum = 0;
    89		int cpu;
    90	
    91		if (!sem)
    92			return;
    93		pr_info("percpu_rw_semaphore(%p)\n", sem);
    94		pr_info("  ->rw_sem.count=0x%lx\n",
  > 95			atomic_long_read(&sem->rw_sem.count));
    96		pr_info("  ->rss.gp_state=%d\n", sem->rss.gp_state);
    97		pr_info("  ->rss.gp_count=%d\n", sem->rss.gp_count);
    98		pr_info("  ->rss.cb_state=%d\n", sem->rss.cb_state);
    99		pr_info("  ->rss.gp_type=%d\n", sem->rss.gp_type);
   100		pr_info("  ->readers_block=%d\n", sem->readers_block);
   101		for_each_possible_cpu(cpu)
   102			sum += per_cpu(*sem->read_count, cpu);
   103		pr_info("  ->read_count=%d\n", sum);
   104		pr_info("  ->list_empty(rw_sem.wait_list)=%d\n",
   105		       list_empty(&sem->rw_sem.wait_list));
   106		pr_info("  ->writer.task=%p\n", sem->writer.task);
   107	}
   108	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (56614 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ