All of lore.kernel.org
 help / color / mirror / Atom feed
* lockdep warning: console vs. mem hotplug
@ 2017-03-20 16:43 Sebastian Ott
  2017-03-21  4:44 ` Sergey Senozhatsky
  2017-03-24 16:39 ` Steven Rostedt
  0 siblings, 2 replies; 18+ messages in thread
From: Sebastian Ott @ 2017-03-20 16:43 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Petr Mladek, Steven Rostedt, Heiko Carstens, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 13505 bytes --]

Since commit f975237b7682 ("printk: use printk_safe buffers in printk")
I observe lockdep warnings on s390 when doing memory hotplug:

[  132.379220] ======================================================
[  132.379220] [ INFO: possible circular locking dependency detected ]
[  132.379221] 4.11.0-rc3 #330 Not tainted
[  132.379221] -------------------------------------------------------
[  132.379222] sh/708 is trying to acquire lock:
[  132.379222]  (&(&sclp_con_lock)->rlock){-.-...}, at: [<000000000074524a>] sclp_console_write+0x4a/0x2b8
[  132.379224]
[  132.379224] but task is already holding lock:
[  132.379224]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
[  132.379226]
[  132.379227] which lock already depends on the new lock.
[  132.379227]
[  132.379227]
[  132.379228] the existing dependency chain (in reverse order) is:
[  132.379228]
[  132.379229] -> #2 (&(&zone->lock)->rlock){..-...}:
[  132.379230]        validate_chain.isra.22+0xb36/0xd18
[  132.379231]        __lock_acquire+0x650/0x880
[  132.379231]        lock_acquire+0x24e/0x2b0
[  132.379232]        _raw_spin_lock_irqsave+0x70/0xb8
[  132.379232]        get_page_from_freelist+0x548/0xf30
[  132.379233]        __alloc_pages_nodemask+0x1c8/0x14c0
[  132.379233]        allocate_slab+0xde/0x668
[  132.379233]        new_slab+0x94/0xa8
[  132.379234]        ___slab_alloc.constprop.66+0x556/0x578
[  132.379234]        __slab_alloc.isra.62.constprop.65+0x74/0xa8
[  132.379235]        kmem_cache_alloc+0x136/0x4b8
[  132.379235]        __debug_object_init+0xaa/0x448
[  132.379236]        debug_object_activate+0x182/0x238
[  132.379236]        mod_timer+0xe6/0x450
[  132.379236]        prandom_reseed+0x44/0x50
[  132.379237]        do_one_initcall+0xa2/0x150
[  132.379237]        kernel_init_freeable+0x228/0x2d8
[  132.379238]        kernel_init+0x2a/0x138
[  132.379238]        kernel_thread_starter+0x6/0xc
[  132.379239]        kernel_thread_starter+0x0/0xc
[  132.379239]
[  132.379239] -> #1 (&(&base->lock)->rlock){-.-.-.}:
[  132.379241]        validate_chain.isra.22+0xb36/0xd18
[  132.379242]        __lock_acquire+0x650/0x880
[  132.379242]        lock_acquire+0x24e/0x2b0
[  132.379242]        _raw_spin_lock_irqsave+0x70/0xb8
[  132.379243]        lock_timer_base+0x78/0xa8
[  132.379243]        mod_timer+0xba/0x450
[  132.379244]        sclp_console_write+0x262/0x2b8
[  132.379244]        console_unlock+0x4a6/0x658
[  132.379245]        register_console+0x31c/0x430
[  132.379245]        sclp_console_init+0x152/0x170
[  132.379245]        console_init+0x3a/0x58
[  132.379246]        start_kernel+0x350/0x480
[  132.379246]        _stext+0x20/0x80
[  132.379246]
[  132.379247] -> #0 (&(&sclp_con_lock)->rlock){-.-...}:
[  132.379249]        check_prev_add+0x150/0x648
[  132.379249]        validate_chain.isra.22+0xb36/0xd18
[  132.379249]        __lock_acquire+0x650/0x880
[  132.379250]        lock_acquire+0x24e/0x2b0
[  132.379250]        _raw_spin_lock_irqsave+0x70/0xb8
[  132.379251]        sclp_console_write+0x4a/0x2b8
[  132.379251]        console_unlock+0x4a6/0x658
[  132.379252]        vprintk_emit+0x33e/0x350
[  132.379252]        vprintk_default+0x44/0x58
[  132.379252]        printk+0x4e/0x58
[  132.379253]        __offline_isolated_pages+0x1a0/0x340
[  132.379253]        offline_isolated_pages_cb+0x2e/0x40
[  132.379254]        walk_system_ram_range+0x96/0xe8
[  132.379254]        __offline_pages.constprop.43+0x6da/0x918
[  132.379255]        memory_subsys_offline+0x6a/0xa0
[  132.379255]        device_offline+0x84/0xd8
[  132.379255]        store_mem_state+0xfe/0x120
[  132.379256]        kernfs_fop_write+0x126/0x1d0
[  132.379256]        __vfs_write+0x46/0x140
[  132.379257]        vfs_write+0xb8/0x1a8
[  132.379257]        SyS_write+0x66/0xc0
[  132.379257]        system_call+0xc4/0x240
[  132.379258]
[  132.379258] other info that might help us debug this:
[  132.379258]
[  132.379259] Chain exists of:
[  132.379259]   &(&sclp_con_lock)->rlock --> &(&base->lock)->rlock --> &(&zone->lock)->rlock
[  132.379262]
[  132.379262]  Possible unsafe locking scenario:
[  132.379262]
[  132.379263]        CPU0                    CPU1
[  132.379263]        ----                    ----
[  132.379264]   lock(&(&zone->lock)->rlock);
[  132.379265]                                lock(&(&base->lock)->rlock);
[  132.379266]                                lock(&(&zone->lock)->rlock);
[  132.379267]   lock(&(&sclp_con_lock)->rlock);
[  132.379268]
[  132.379268]  *** DEADLOCK ***
[  132.379269]
[  132.379269] 10 locks held by sh/708:
[  132.379269]  #0:  (sb_writers#4){.+.+.+}, at: [<0000000000345d4a>] vfs_write+0xa2/0x1a8
[  132.379272]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003e5e60>] kernfs_fop_write+0xd8/0x1d0
[  132.379273]  #2:  (s_active#180){.+.+.+}, at: [<00000000003e5e6c>] kernfs_fop_write+0xe4/0x1d0
[  132.379275]  #3:  (device_hotplug_lock){+.+...}, at: [<000000000069bb58>] lock_device_hotplug_sysfs+0x30/0x68
[  132.379277]  #4:  (memory_add_remove_lock){+.+...}, at: [<000000000031cfe6>] mem_hotplug_begin+0x3e/0xd0
[  132.379279]  #5:  (mem_hotplug.lock){++++.+}, at: [<000000000031cfa8>] mem_hotplug_begin+0x0/0xd0
[  132.379281]  #6:  (mem_hotplug.lock#2){+.+...}, at: [<000000000031d02c>] mem_hotplug_begin+0x84/0xd0
[  132.379283]  #7:  (&dev->mutex){......}, at: [<000000000069d55c>] device_offline+0x5c/0xd8
[  132.379285]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
[  132.379287]  #9:  (console_lock){+.+...}, at: [<00000000001bdc02>] vprintk_emit+0x332/0x350

Here's another one using a different console:

[   66.522890] ======================================================
[   66.522890] [ INFO: possible circular locking dependency detected ]
[   66.522891] 4.11.0-rc2-00237-g2e287c0 #119 Not tainted
[   66.522891] -------------------------------------------------------
[   66.522892] sh/822 is trying to acquire lock:
[   66.522892]  (&console_sch_key){-.-...}, at: [<00000000007573f0>] raw3215_write+0x58/0x208
[   66.522894] but task is already holding lock:
[   66.522894]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002ae3da>] __offline_isolated_pages+0x302/0x370
[   66.522897] which lock already depends on the new lock.
[   66.522898] the existing dependency chain (in reverse order) is:
[   66.522899] -> #4 (&(&zone->lock)->rlock){..-...}:
[   66.522901]        validate_chain.isra.10+0xb7a/0xda8
[   66.522901]        __lock_acquire+0x62c/0x850
[   66.522902]        lock_acquire+0x254/0x2b8
[   66.522902]        _raw_spin_lock_irqsave+0x70/0xb8
[   66.522903]        get_page_from_freelist+0x4e2/0xf28
[   66.522903]        __alloc_pages_nodemask+0x1fa/0x1528
[   66.522904]        allocate_slab+0xf2/0x6c0
[   66.522904]        new_slab+0x94/0xa8
[   66.522905]        ___slab_alloc.constprop.22+0x570/0x590
[   66.522905]        __slab_alloc.isra.16.constprop.21+0x74/0xa8
[   66.522906]        kmem_cache_alloc+0x13c/0x4b0
[   66.522906]        __debug_object_init+0x5c/0x468
[   66.522907]        hrtimer_init+0x42/0x1d8
[   66.522907]        init_dl_task_timer+0x3a/0x58
[   66.522908]        __sched_fork.isra.5+0x7e/0xe8
[   66.522908]        init_idle+0x7a/0x278
[   66.522908]        fork_idle+0xa4/0xb8
[   66.522909]        idle_threads_init+0x64/0xc8
[   66.522909]        smp_init+0x2e/0x110
[   66.522910]        kernel_init_freeable+0x16c/0x2e0
[   66.522910]        kernel_init+0x2a/0x148
[   66.522911]        kernel_thread_starter+0x6/0xc
[   66.522911]        kernel_thread_starter+0x0/0xc
[   66.522912] -> #3 (&rq->lock){-.-.-.}:
[   66.522914]        validate_chain.isra.10+0xb7a/0xda8
[   66.522914]        __lock_acquire+0x62c/0x850
[   66.522915]        lock_acquire+0x254/0x2b8
[   66.522915]        _raw_spin_lock+0x60/0xa0
[   66.522916]        task_fork_fair+0x54/0x118
[   66.522916]        sched_fork+0x13e/0x2a0
[   66.522916]        copy_process+0x642/0x1e80
[   66.522917]        _do_fork+0xc2/0x6d0
[   66.522917]        kernel_thread+0x4e/0x60
[   66.522918]        rest_init+0x42/0x170
[   66.522918]        start_kernel+0x464/0x478
[   66.522918]        _stext+0x20/0x80
[   66.522919] -> #2 (&p->pi_lock){-.-.-.}:
[   66.522921]        validate_chain.isra.10+0xb7a/0xda8
[   66.522922]        __lock_acquire+0x62c/0x850
[   66.522922]        lock_acquire+0x254/0x2b8
[   66.522922]        _raw_spin_lock_irqsave+0x70/0xb8
[   66.522923]        try_to_wake_up+0x4a/0x5f8
[   66.522924]        autoremove_wake_function+0x2e/0x88
[   66.522924]        __wake_up_common+0x76/0xc0
[   66.522924]        __wake_up+0x54/0x68
[   66.522925]        ccw_device_verify_done+0xae/0x268
[   66.522925]        ccw_request_handler+0x422/0x560
[   66.522926]        do_cio_interrupt+0x224/0x2a0
[   66.522926]        __handle_irq_event_percpu+0x1a6/0x440
[   66.522927]        handle_irq_event_percpu+0x38/0x88
[   66.522927]        handle_percpu_irq+0x84/0xb0
[   66.522928]        generic_handle_irq+0x42/0x60
[   66.522928]        do_IRQ+0x86/0xc8
[   66.522929]        io_int_handler+0x104/0x294
[   66.522929]        enabled_wait+0x72/0x140
[   66.522930]        enabled_wait+0x5a/0x140
[   66.522930]        arch_cpu_idle+0x32/0x50
[   66.522930]        default_idle_call+0x52/0x68
[   66.522931]        do_idle+0x10e/0x160
[   66.522931]        cpu_startup_entry+0x3e/0x48
[   66.522932]        start_kernel+0x464/0x478
[   66.522932]        _stext+0x20/0x80
[   66.522933] -> #1 (&priv->wait_q){-.-...}:
[   66.522935]        validate_chain.isra.10+0xb7a/0xda8
[   66.522935]        __lock_acquire+0x62c/0x850
[   66.522935]        lock_acquire+0x254/0x2b8
[   66.522936]        _raw_spin_lock_irqsave+0x70/0xb8
[   66.522936]        __wake_up+0x3a/0x68
[   66.522937]        ccw_device_recog_done+0x28e/0x2c8
[   66.522937]        snsid_callback+0x324/0x390
[   66.522938]        ccw_request_handler+0x480/0x560
[   66.522938]        do_cio_interrupt+0x224/0x2a0
[   66.522939]        __handle_irq_event_percpu+0x1a6/0x440
[   66.522939]        handle_irq_event_percpu+0x38/0x88
[   66.522940]        handle_percpu_irq+0x84/0xb0
[   66.522940]        generic_handle_irq+0x42/0x60
[   66.522940]        do_IRQ+0x86/0xc8
[   66.522941]        io_int_handler+0x104/0x294
[   66.522941]        _raw_spin_unlock_irq+0x4e/0x78
[   66.522942]        _raw_spin_unlock_irq+0x4a/0x78
[   66.522942]        ccw_device_enable_console+0x9a/0x180
[   66.522943]        con3215_init+0x110/0x1b8
[   66.522943]        console_init+0x3a/0x58
[   66.522944]        start_kernel+0x33a/0x478
[   66.522944]        _stext+0x20/0x80
[   66.522945] -> #0 (&console_sch_key){-.-...}:
[   66.522947]        check_prev_add+0x160/0x6e8
[   66.522947]        validate_chain.isra.10+0xb7a/0xda8
[   66.522948]        __lock_acquire+0x62c/0x850
[   66.522948]        lock_acquire+0x254/0x2b8
[   66.522948]        _raw_spin_lock_irqsave+0x70/0xb8
[   66.522949]        raw3215_write+0x58/0x208
[   66.522949]        con3215_write+0x8e/0xf8
[   66.522950]        console_unlock+0x49a/0x670
[   66.522950]        vprintk_emit+0x308/0x378
[   66.522951]        vprintk_default+0x44/0x58
[   66.522951]        printk+0x4e/0x60
[   66.522952]        __offline_isolated_pages+0x168/0x370
[   66.522952]        offline_isolated_pages_cb+0x2e/0x40
[   66.522953]        walk_system_ram_range+0x92/0xf0
[   66.522953]        __offline_pages.constprop.9+0x74a/0x988
[   66.522954]        memory_subsys_offline+0x6c/0xa0
[   66.522954]        device_offline+0x84/0xe0
[   66.522954]        store_mem_state+0xfe/0x120
[   66.522955]        kernfs_fop_write+0x124/0x1c8
[   66.522955]        __vfs_write+0x36/0x140
[   66.522956]        vfs_write+0xb8/0x1a0
[   66.522956]        SyS_write+0x66/0xc0
[   66.522957]        system_call+0xc4/0x240

[   66.522957] other info that might help us debug this:
[   66.522958] Chain exists of:
[   66.522958]   &console_sch_key --> &rq->lock --> &(&zone->lock)->rlock
[   66.522961]  Possible unsafe locking scenario:
[   66.522962]        CPU0                    CPU1
[   66.522962]        ----                    ----
[   66.522963]   lock(&(&zone->lock)->rlock);
[   66.522964]                                lock(&rq->lock);
[   66.522965]                                lock(&(&zone->lock)->rlock);
[   66.522966]   lock(&console_sch_key);

[   66.522967]  *** DEADLOCK ***

[   66.522968] 10 locks held by sh/822:
[   66.522968]  #0:  (sb_writers#5){.+.+.+}, at: [<000000000034f9c2>] vfs_write+0xa2/0x1a0
[   66.522970]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003f1afe>] kernfs_fop_write+0xd6/0x1c8
[   66.522972]  #2:  (s_active#53){.+.+.+}, at: [<00000000003f1b0a>] kernfs_fop_write+0xe2/0x1c8
[   66.522974]  #3:  (device_hotplug_lock){+.+...}, at: [<00000000006adb70>] lock_device_hotplug_sysfs+0x30/0x70
[   66.522976]  #4:  (memory_add_remove_lock){+.+...}, at: [<0000000000328e16>] mem_hotplug_begin+0x3e/0xd0
[   66.522978]  #5:  (mem_hotplug.lock){++++.+}, at: [<0000000000328dd8>] mem_hotplug_begin+0x0/0xd0
[   66.522980]  #6:  (mem_hotplug.lock#2){+.+...}, at: [<0000000000328e5c>] mem_hotplug_begin+0x84/0xd0
[   66.522982]  #7:  (&dev->mutex){......}, at: [<00000000006af41c>] device_offline+0x5c/0xe0
[   66.522984]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002ae3da>] __offline_isolated_pages+0x302/0x370
[   66.522986]  #9:  (console_lock){+.+...}, at: [<00000000001c2c84>] vprintk_emit+0x2fc/0x378

Config attached.

Regards,
Sebastian

[-- Attachment #2: Type: text/plain, Size: 54907 bytes --]

#
# Automatically generated file; DO NOT EDIT.
# Linux/s390 4.11.0-rc2 Kernel Configuration
#
CONFIG_MMU=y
CONFIG_ZONE_DMA=y
CONFIG_CPU_BIG_ENDIAN=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
CONFIG_GENERIC_LOCKBREAK=y
CONFIG_PGSTE=y
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_KEXEC=y
CONFIG_AUDIT_ARCH=y
CONFIG_NO_IOPORT_MAP=y
# CONFIG_PCI_QUIRKS is not set
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_S390=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_PGTABLE_LEVELS=4
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_EXTABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

#
# General setup
#
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
# CONFIG_COMPILE_TEST is not set
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_HAVE_KERNEL_LZ4=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_CROSS_MEMORY_ATTACH=y
CONFIG_FHANDLE=y
# CONFIG_USELIB is not set
CONFIG_AUDIT=y
CONFIG_HAVE_ARCH_AUDITSYSCALL=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_WATCH=y
CONFIG_AUDIT_TREE=y

#
# IRQ subsystem
#
CONFIG_GENERIC_MSI_IRQ=y
CONFIG_SPARSE_IRQ=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y

#
# Timers subsystem
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
CONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ is not set
CONFIG_HIGH_RES_TIMERS=y

#
# CPU/Task time and stats accounting
#
CONFIG_VIRT_CPU_ACCOUNTING=y
CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y

#
# RCU Subsystem
#
CONFIG_PREEMPT_RCU=y
# CONFIG_RCU_EXPERT is not set
CONFIG_SRCU=y
CONFIG_TASKS_RCU=y
CONFIG_RCU_STALL_COMMON=y
# CONFIG_TREE_RCU_TRACE is not set
CONFIG_BUILD_BIN2C=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_CGROUPS=y
CONFIG_PAGE_COUNTER=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_CGROUP_PIDS=y
# CONFIG_CGROUP_RDMA is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CPUSETS=y
CONFIG_PROC_PID_CPUSET=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_PERF=y
# CONFIG_CGROUP_BPF is not set
# CONFIG_CGROUP_DEBUG is not set
CONFIG_SOCK_CGROUP_DATA=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_SCHED_AUTOGROUP=y
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_INITRAMFS_COMPRESSION=".gz"
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_SYSCTL_EXCEPTION_TRACE=y
CONFIG_BPF=y
CONFIG_EXPERT=y
CONFIG_MULTIUSER=y
# CONFIG_SGETMASK_SYSCALL is not set
CONFIG_SYSFS_SYSCALL=y
# CONFIG_SYSCTL_SYSCALL is not set
CONFIG_POSIX_TIMERS=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set
CONFIG_KALLSYMS_BASE_RELATIVE=y
CONFIG_PRINTK=y
CONFIG_PRINTK_NMI=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_HAVE_FUTEX_CMPXCHG=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_BPF_SYSCALL=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_ADVISE_SYSCALLS=y
CONFIG_USERFAULTFD=y
CONFIG_MEMBARRIER=y
# CONFIG_EMBEDDED is not set
CONFIG_HAVE_PERF_EVENTS=y
# CONFIG_PC104 is not set

#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_SLAB_FREELIST_RANDOM is not set
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SYSTEM_DATA_VERIFICATION is not set
CONFIG_PROFILING=y
CONFIG_TRACEPOINTS=y
CONFIG_KEXEC_CORE=y
CONFIG_OPROFILE=m
CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
CONFIG_STATIC_KEYS_SELFTEST=y
# CONFIG_UPROBES is not set
# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
CONFIG_KRETPROBES=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_NMI=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_CONTIGUOUS=y
CONFIG_GENERIC_SMP_IDLE_THREAD=y
CONFIG_ARCH_HAS_SET_MEMORY=y
CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
CONFIG_HAVE_CMPXCHG_LOCAL=y
CONFIG_HAVE_CMPXCHG_DOUBLE=y
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y
CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
# CONFIG_CC_STACKPROTECTOR is not set
CONFIG_HAVE_VIRT_CPU_ACCOUNTING=y
CONFIG_ARCH_HAS_SCALED_CPUTIME=y
CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
CONFIG_HAVE_EXIT_THREAD=y
CONFIG_HAVE_COPY_THREAD_TLS=y
# CONFIG_HAVE_ARCH_HASH is not set
# CONFIG_ISA_BUS_API is not set
CONFIG_CLONE_BACKWARDS2=y
CONFIG_OLD_SIGSUSPEND3=y
CONFIG_OLD_SIGACTION=y
CONFIG_COMPAT_OLD_SIGACTION=y
# CONFIG_CPU_NO_EFFICIENT_FFS is not set
# CONFIG_HAVE_ARCH_VMAP_STACK is not set
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
CONFIG_STRICT_KERNEL_RWX=y
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
CONFIG_STRICT_MODULE_RWX=y

#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_MODULE_SRCVERSION_ALL=y
# CONFIG_MODULE_SIG is not set
# CONFIG_MODULE_COMPRESS is not set
CONFIG_MODULES_TREE_LOOKUP=y
CONFIG_BLOCK=y
CONFIG_BLK_SCSI_REQUEST=y
CONFIG_BLK_DEV_BSG=y
CONFIG_BLK_DEV_BSGLIB=y
# CONFIG_BLK_DEV_INTEGRITY is not set
# CONFIG_BLK_DEV_ZONED is not set
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_CMDLINE_PARSER is not set
# CONFIG_BLK_WBT is not set
CONFIG_BLK_DEBUG_FS=y
# CONFIG_BLK_SED_OPAL is not set

#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
CONFIG_IBM_PARTITION=y
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
# CONFIG_LDM_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
# CONFIG_CMDLINE_PARTITION is not set
CONFIG_BLOCK_COMPAT=y
CONFIG_BLK_MQ_PCI=y
CONFIG_BLK_MQ_VIRTIO=y

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_DEFAULT_DEADLINE=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="deadline"
# CONFIG_MQ_IOSCHED_DEADLINE is not set
CONFIG_PREEMPT_NOTIFIERS=y
CONFIG_ASN1=m
CONFIG_ARCH_INLINE_SPIN_TRYLOCK=y
CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=y
CONFIG_ARCH_INLINE_SPIN_LOCK=y
CONFIG_ARCH_INLINE_SPIN_LOCK_BH=y
CONFIG_ARCH_INLINE_SPIN_LOCK_IRQ=y
CONFIG_ARCH_INLINE_SPIN_LOCK_IRQSAVE=y
CONFIG_ARCH_INLINE_SPIN_UNLOCK=y
CONFIG_ARCH_INLINE_SPIN_UNLOCK_BH=y
CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQ=y
CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE=y
CONFIG_ARCH_INLINE_READ_TRYLOCK=y
CONFIG_ARCH_INLINE_READ_LOCK=y
CONFIG_ARCH_INLINE_READ_LOCK_BH=y
CONFIG_ARCH_INLINE_READ_LOCK_IRQ=y
CONFIG_ARCH_INLINE_READ_LOCK_IRQSAVE=y
CONFIG_ARCH_INLINE_READ_UNLOCK=y
CONFIG_ARCH_INLINE_READ_UNLOCK_BH=y
CONFIG_ARCH_INLINE_READ_UNLOCK_IRQ=y
CONFIG_ARCH_INLINE_READ_UNLOCK_IRQRESTORE=y
CONFIG_ARCH_INLINE_WRITE_TRYLOCK=y
CONFIG_ARCH_INLINE_WRITE_LOCK=y
CONFIG_ARCH_INLINE_WRITE_LOCK_BH=y
CONFIG_ARCH_INLINE_WRITE_LOCK_IRQ=y
CONFIG_ARCH_INLINE_WRITE_LOCK_IRQSAVE=y
CONFIG_ARCH_INLINE_WRITE_UNLOCK=y
CONFIG_ARCH_INLINE_WRITE_UNLOCK_BH=y
CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQ=y
CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE=y
CONFIG_UNINLINE_SPIN_UNLOCK=y
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
CONFIG_MUTEX_SPIN_ON_OWNER=y
CONFIG_RWSEM_SPIN_ON_OWNER=y
CONFIG_LOCK_SPIN_ON_OWNER=y
CONFIG_FREEZER=y
CONFIG_HAVE_LIVEPATCH=y
CONFIG_LIVEPATCH=y

#
# Processor type and features
#
CONFIG_HAVE_MARCH_Z900_FEATURES=y
CONFIG_HAVE_MARCH_Z990_FEATURES=y
CONFIG_HAVE_MARCH_Z9_109_FEATURES=y
CONFIG_HAVE_MARCH_Z10_FEATURES=y
CONFIG_HAVE_MARCH_Z196_FEATURES=y
# CONFIG_HAVE_MARCH_ZEC12_FEATURES is not set
# CONFIG_HAVE_MARCH_Z13_FEATURES is not set
# CONFIG_MARCH_Z900 is not set
# CONFIG_MARCH_Z990 is not set
# CONFIG_MARCH_Z9_109 is not set
# CONFIG_MARCH_Z10 is not set
CONFIG_MARCH_Z196=y
# CONFIG_MARCH_ZEC12 is not set
# CONFIG_MARCH_Z13 is not set
# CONFIG_MARCH_Z900_TUNE is not set
# CONFIG_MARCH_Z990_TUNE is not set
# CONFIG_MARCH_Z9_109_TUNE is not set
# CONFIG_MARCH_Z10_TUNE is not set
# CONFIG_MARCH_Z196_TUNE is not set
CONFIG_MARCH_ZEC12_TUNE=y
# CONFIG_MARCH_Z13_TUNE is not set
# CONFIG_TUNE_DEFAULT is not set
# CONFIG_TUNE_Z900 is not set
# CONFIG_TUNE_Z990 is not set
# CONFIG_TUNE_Z9_109 is not set
# CONFIG_TUNE_Z10 is not set
# CONFIG_TUNE_Z196 is not set
CONFIG_TUNE_ZEC12=y
# CONFIG_TUNE_Z13 is not set
CONFIG_64BIT=y
CONFIG_COMPAT=y
CONFIG_SYSVIPC_COMPAT=y
CONFIG_KEYS_COMPAT=y
CONFIG_SMP=y
CONFIG_NR_CPUS=64
CONFIG_HOTPLUG_CPU=y
# CONFIG_NODES_SPAN_OTHER_NODES is not set
# CONFIG_NUMA is not set
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
CONFIG_SCHED_BOOK=y
CONFIG_SCHED_DRAWER=y
CONFIG_SCHED_TOPOLOGY=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_HZ_100=y
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=100
CONFIG_SCHED_HRTICK=y

#
# Memory setup
#
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
CONFIG_FORCE_MAX_ZONEORDER=9
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
CONFIG_HAVE_MEMBLOCK_PHYS_MAP=y
CONFIG_NO_BOOTMEM=y
CONFIG_MEMORY_ISOLATION=y
# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
CONFIG_MEMORY_HOTPLUG=y
CONFIG_MEMORY_HOTPLUG_SPARSE=y
# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set
CONFIG_MEMORY_HOTREMOVE=y
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_MEMORY_BALLOON=y
CONFIG_BALLOON_COMPACTION=y
CONFIG_COMPACTION=y
CONFIG_MIGRATION=y
CONFIG_PHYS_ADDR_T_64BIT=y
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_MMU_NOTIFIER=y
CONFIG_KSM=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
CONFIG_TRANSPARENT_HUGE_PAGECACHE=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
CONFIG_CMA=y
CONFIG_CMA_DEBUG=y
CONFIG_CMA_DEBUGFS=y
CONFIG_CMA_AREAS=7
CONFIG_MEM_SOFT_DIRTY=y
CONFIG_ZSWAP=y
CONFIG_ZPOOL=y
CONFIG_ZBUD=m
# CONFIG_Z3FOLD is not set
CONFIG_ZSMALLOC=m
# CONFIG_PGTABLE_MAPPING is not set
CONFIG_ZSMALLOC_STAT=y
CONFIG_IDLE_PAGE_TRACKING=y
CONFIG_PACK_STACK=y
CONFIG_CHECK_STACK=y
CONFIG_STACK_GUARD=256
# CONFIG_WARN_DYNAMIC_STACK is not set

#
# I/O subsystem
#
CONFIG_QDIO=y
CONFIG_PCI=y
CONFIG_PCI_NR_FUNCTIONS=64
# CONFIG_PCIEPORTBUS is not set
CONFIG_PCI_BUS_ADDR_T_64BIT=y
CONFIG_PCI_MSI=y
# CONFIG_PCI_MSI_IRQ_DOMAIN is not set
CONFIG_PCI_DEBUG=y
# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
# CONFIG_PCI_STUB is not set
# CONFIG_PCI_IOV is not set
# CONFIG_PCI_PRI is not set
# CONFIG_PCI_PASID is not set
CONFIG_HOTPLUG_PCI=y
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
CONFIG_HOTPLUG_PCI_S390=y

#
# DesignWare PCI Core Support
#

#
# PCI host controller drivers
#
CONFIG_PCI_DOMAINS=y
CONFIG_HAS_IOMEM=y
CONFIG_IOMMU_HELPER=y
CONFIG_NEED_SG_DMA_LENGTH=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_CHSC_SCH=y
CONFIG_SCM_BUS=y
CONFIG_EADM_SCH=m

#
# Dump support
#
# CONFIG_CRASH_DUMP is not set

#
# Executable file formats / Emulations
#
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_ELFCORE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=y
# CONFIG_HAVE_AOUT is not set
CONFIG_BINFMT_MISC=m
CONFIG_COREDUMP=y
CONFIG_SECCOMP=y

#
# Power Management
#
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_HIBERNATE_CALLBACKS=y
CONFIG_HIBERNATION=y
CONFIG_ARCH_SAVE_PAGE_KEYS=y
CONFIG_PM_STD_PARTITION=""
CONFIG_PM_SLEEP=y
CONFIG_PM_SLEEP_SMP=y
# CONFIG_PM_AUTOSLEEP is not set
# CONFIG_PM_WAKELOCKS is not set
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
CONFIG_NET=y
CONFIG_NET_INGRESS=y
CONFIG_NET_EGRESS=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=m
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=m
CONFIG_XFRM=y
CONFIG_XFRM_ALGO=m
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_XFRM_STATISTICS is not set
CONFIG_XFRM_IPCOMP=m
CONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_IUCV=y
CONFIG_AFIUCV=m
# CONFIG_SMC is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
# CONFIG_IP_FIB_TRIE_STATS is not set
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_ROUTE_CLASSID=y
# CONFIG_IP_PNP is not set
CONFIG_NET_IPIP=m
CONFIG_NET_IPGRE_DEMUX=m
CONFIG_NET_IP_TUNNEL=m
CONFIG_NET_IPGRE=m
CONFIG_NET_IPGRE_BROADCAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_IPVTI=m
CONFIG_NET_UDP_TUNNEL=m
# CONFIG_NET_FOU is not set
# CONFIG_NET_FOU_IP_TUNNELS is not set
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
# CONFIG_INET_ESP_OFFLOAD is not set
CONFIG_INET_IPCOMP=m
CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=m
CONFIG_INET_XFRM_MODE_TRANSPORT=m
CONFIG_INET_XFRM_MODE_TUNNEL=m
CONFIG_INET_XFRM_MODE_BEET=m
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
CONFIG_INET_UDP_DIAG=m
# CONFIG_INET_RAW_DIAG is not set
# CONFIG_INET_DIAG_DESTROY is not set
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
# CONFIG_TCP_CONG_NV is not set
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
# CONFIG_TCP_CONG_DCTCP is not set
# CONFIG_TCP_CONG_CDG is not set
# CONFIG_TCP_CONG_BBR is not set
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
CONFIG_IPV6=y
CONFIG_IPV6_ROUTER_PREF=y
# CONFIG_IPV6_ROUTE_INFO is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
# CONFIG_INET6_ESP_OFFLOAD is not set
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
CONFIG_INET6_XFRM_MODE_TRANSPORT=m
CONFIG_INET6_XFRM_MODE_TUNNEL=m
CONFIG_INET6_XFRM_MODE_BEET=m
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
CONFIG_IPV6_VTI=m
CONFIG_IPV6_SIT=m
# CONFIG_IPV6_SIT_6RD is not set
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_GRE=m
# CONFIG_IPV6_FOU is not set
# CONFIG_IPV6_FOU_TUNNEL is not set
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
# CONFIG_IPV6_MROUTE is not set
# CONFIG_IPV6_SEG6_LWTUNNEL is not set
# CONFIG_IPV6_SEG6_HMAC is not set
# CONFIG_NETLABEL is not set
CONFIG_NETWORK_SECMARK=y
CONFIG_NET_PTP_CLASSIFY=y
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
# CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set
CONFIG_IP_SCTP=m
CONFIG_NET_SCTPPROBE=m
# CONFIG_SCTP_DBG_OBJCNT is not set
CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set
# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
CONFIG_SCTP_COOKIE_HMAC_MD5=y
# CONFIG_SCTP_COOKIE_HMAC_SHA1 is not set
CONFIG_INET_SCTP_DIAG=m
CONFIG_RDS=m
CONFIG_RDS_RDMA=m
CONFIG_RDS_TCP=m
CONFIG_RDS_DEBUG=y
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
CONFIG_L2TP=m
CONFIG_L2TP_DEBUGFS=m
CONFIG_L2TP_V3=y
CONFIG_L2TP_IP=m
CONFIG_L2TP_ETH=m
CONFIG_STP=m
CONFIG_GARP=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
# CONFIG_BRIDGE_VLAN_FILTERING is not set
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
# CONFIG_VLAN_8021Q_MVRP is not set
# CONFIG_DECNET is not set
CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_PHONET is not set
# CONFIG_6LOWPAN is not set
# CONFIG_IEEE802154 is not set
CONFIG_NET_SCHED=y

#
# Queueing/Scheduling
#
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_HFSC=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_MULTIQ=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFB=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_NETEM=m
CONFIG_NET_SCH_DRR=m
CONFIG_NET_SCH_MQPRIO=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_QFQ=m
CONFIG_NET_SCH_CODEL=m
CONFIG_NET_SCH_FQ_CODEL=m
# CONFIG_NET_SCH_FQ is not set
# CONFIG_NET_SCH_HHF is not set
# CONFIG_NET_SCH_PIE is not set
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_SCH_PLUG=m

#
# Classification
#
CONFIG_NET_CLS=y
CONFIG_NET_CLS_BASIC=m
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_CLS_U32_PERF=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_FLOW=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NET_CLS_BPF=m
# CONFIG_NET_CLS_FLOWER is not set
# CONFIG_NET_CLS_MATCHALL is not set
# CONFIG_NET_EMATCH is not set
CONFIG_NET_CLS_ACT=y
CONFIG_NET_ACT_POLICE=m
CONFIG_NET_ACT_GACT=m
CONFIG_GACT_PROB=y
CONFIG_NET_ACT_MIRRED=m
# CONFIG_NET_ACT_SAMPLE is not set
CONFIG_NET_ACT_NAT=m
CONFIG_NET_ACT_PEDIT=m
CONFIG_NET_ACT_SIMP=m
CONFIG_NET_ACT_SKBEDIT=m
CONFIG_NET_ACT_CSUM=m
# CONFIG_NET_ACT_VLAN is not set
# CONFIG_NET_ACT_BPF is not set
# CONFIG_NET_ACT_SKBMOD is not set
# CONFIG_NET_ACT_IFE is not set
# CONFIG_NET_ACT_TUNNEL_KEY is not set
# CONFIG_NET_CLS_IND is not set
CONFIG_NET_SCH_FIFO=y
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
# CONFIG_BATMAN_ADV is not set
# CONFIG_OPENVSWITCH is not set
# CONFIG_VSOCKETS is not set
# CONFIG_NETLINK_DIAG is not set
# CONFIG_MPLS is not set
# CONFIG_HSR is not set
# CONFIG_NET_SWITCHDEV is not set
# CONFIG_NET_L3_MASTER_DEV is not set
# CONFIG_NET_NCSI is not set
CONFIG_RPS=y
CONFIG_RFS_ACCEL=y
CONFIG_XPS=y
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y
CONFIG_NET_RX_BUSY_POLL=y
CONFIG_BQL=y
CONFIG_BPF_JIT=y
CONFIG_NET_FLOW_LIMIT=y

#
# Network testing
#
CONFIG_NET_PKTGEN=m
CONFIG_NET_TCPPROBE=m
# CONFIG_NET_DROP_MONITOR is not set
# CONFIG_CAN is not set
# CONFIG_AF_RXRPC is not set
# CONFIG_AF_KCM is not set
# CONFIG_STREAM_PARSER is not set
CONFIG_FIB_RULES=y
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set
# CONFIG_NFC is not set
# CONFIG_PSAMPLE is not set
# CONFIG_NET_IFE is not set
# CONFIG_LWTUNNEL is not set
CONFIG_DST_CACHE=y
CONFIG_GRO_CELLS=y
# CONFIG_NET_DEVLINK is not set
CONFIG_MAY_USE_DEVLINK=y
CONFIG_HAVE_EBPF_JIT=y
# CONFIG_PCMCIA is not set
CONFIG_CCW=y

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
# CONFIG_DEVTMPFS_MOUNT is not set
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
CONFIG_ALLOW_DEV_COREDUMP=y
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
CONFIG_SYS_HYPERVISOR=y
# CONFIG_GENERIC_CPU_DEVICES is not set
CONFIG_GENERIC_CPU_AUTOPROBE=y
# CONFIG_DMA_SHARED_BUFFER is not set
# CONFIG_DMA_CMA is not set

#
# Bus devices
#
CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y
# CONFIG_MTD is not set
# CONFIG_OF is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_NULL_BLK is not set
# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
# CONFIG_ZRAM is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
CONFIG_BLK_DEV_CRYPTOLOOP=m
# CONFIG_BLK_DEV_DRBD is not set
CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SKD is not set
CONFIG_BLK_DEV_OSD=m
# CONFIG_BLK_DEV_SX8 is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=32768
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
CONFIG_ATA_OVER_ETH=m

#
# S/390 block device drivers
#
CONFIG_BLK_DEV_XPRAM=m
CONFIG_DCSSBLK=m
CONFIG_DASD=y
CONFIG_DASD_PROFILE=y
CONFIG_DASD_ECKD=y
CONFIG_DASD_FBA=y
CONFIG_DASD_DIAG=y
CONFIG_DASD_EER=y
CONFIG_SCM_BLOCK=m
CONFIG_SCM_BLOCK_CLUSTER_WRITE=y
CONFIG_VIRTIO_BLK=y
# CONFIG_VIRTIO_BLK_SCSI is not set
# CONFIG_BLK_DEV_RBD is not set
# CONFIG_BLK_DEV_RSXX is not set
# CONFIG_BLK_DEV_NVME is not set
# CONFIG_NVME_RDMA is not set
# CONFIG_NVME_FC is not set
# CONFIG_NVME_TARGET is not set

#
# Misc devices
#
# CONFIG_SENSORS_LIS3LV02D is not set
# CONFIG_DUMMY_IRQ is not set
# CONFIG_PHANTOM is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
CONFIG_ENCLOSURE_SERVICES=m
# CONFIG_HP_ILO is not set
# CONFIG_SRAM is not set
# CONFIG_C2PORT is not set

#
# EEPROM support
#
# CONFIG_EEPROM_93CX6 is not set
# CONFIG_CB710_CORE is not set

#
# Texas Instruments shared transport line discipline
#

#
# Altera FPGA firmware download module
#

#
# Intel MIC Bus Driver
#

#
# SCIF Bus Driver
#

#
# VOP Bus Driver
#

#
# Intel MIC Host Driver
#

#
# Intel MIC Card Driver
#

#
# SCIF Driver
#

#
# Intel MIC Coprocessor State Management (COSM) Drivers
#

#
# VOP Driver
#
# CONFIG_GENWQE is not set
# CONFIG_ECHO is not set
# CONFIG_CXL_BASE is not set
# CONFIG_CXL_AFU_DRIVER_OPS is not set

#
# SCSI device support
#
CONFIG_SCSI_MOD=y
CONFIG_RAID_ATTRS=m
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_NETLINK=y
# CONFIG_SCSI_MQ_DEFAULT is not set
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHR_DEV_OSST=m
CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_SCH=m
CONFIG_SCSI_ENCLOSURE=m
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_SCAN_ASYNC is not set

#
# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
# CONFIG_ISCSI_BOOT_SYSFS is not set
# CONFIG_SCSI_CXGB3_ISCSI is not set
# CONFIG_SCSI_CXGB4_ISCSI is not set
# CONFIG_SCSI_BNX2_ISCSI is not set
# CONFIG_BE2ISCSI is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_HPSA is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_3W_SAS is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_SCSI_AIC94XX is not set
# CONFIG_SCSI_MVSAS is not set
# CONFIG_SCSI_MVUMI is not set
# CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_ARCMSR is not set
# CONFIG_SCSI_ESAS2R is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
# CONFIG_SCSI_MPT3SAS is not set
# CONFIG_SCSI_MPT2SAS is not set
# CONFIG_SCSI_UFSHCD is not set
# CONFIG_SCSI_HPTIOP is not set
# CONFIG_LIBFC is not set
# CONFIG_SCSI_SNIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_STEX is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_WD719X is not set
CONFIG_SCSI_DEBUG=m
CONFIG_ZFCP=y
# CONFIG_SCSI_PMCRAID is not set
# CONFIG_SCSI_PM8001 is not set
# CONFIG_SCSI_BFA_FC is not set
CONFIG_SCSI_VIRTIO=m
# CONFIG_SCSI_CHELSIO_FCOE is not set
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
CONFIG_SCSI_DH_HP_SW=m
CONFIG_SCSI_DH_EMC=m
CONFIG_SCSI_DH_ALUA=m
CONFIG_SCSI_OSD_INITIATOR=m
CONFIG_SCSI_OSD_ULD=m
CONFIG_SCSI_OSD_DPRINT_SENSE=1
# CONFIG_SCSI_OSD_DEBUG is not set
# CONFIG_MD is not set
# CONFIG_TARGET_CORE is not set
# CONFIG_FUSION is not set

#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not set
# CONFIG_FIREWIRE_NOSY is not set
CONFIG_NETDEVICES=y
CONFIG_NET_CORE=y
CONFIG_BONDING=m
CONFIG_DUMMY=m
CONFIG_EQUALIZER=m
# CONFIG_NET_FC is not set
CONFIG_IFB=m
# CONFIG_NET_TEAM is not set
CONFIG_MACVLAN=m
CONFIG_MACVTAP=m
CONFIG_VXLAN=m
# CONFIG_GENEVE is not set
# CONFIG_GTP is not set
# CONFIG_MACSEC is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
CONFIG_TUN=m
CONFIG_TAP=m
# CONFIG_TUN_VNET_CROSS_LE is not set
CONFIG_VETH=m
CONFIG_VIRTIO_NET=m
CONFIG_NLMON=m
# CONFIG_ARCNET is not set

#
# CAIF transport drivers
#
CONFIG_ETHERNET=y
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_ADAPTEC is not set
# CONFIG_NET_VENDOR_AGERE is not set
# CONFIG_NET_VENDOR_ALACRITECH is not set
# CONFIG_NET_VENDOR_ALTEON is not set
# CONFIG_ALTERA_TSE is not set
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_AMD is not set
# CONFIG_NET_VENDOR_AQUANTIA is not set
# CONFIG_NET_VENDOR_ARC is not set
# CONFIG_NET_VENDOR_ATHEROS is not set
# CONFIG_NET_VENDOR_AURORA is not set
# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_BROCADE is not set
# CONFIG_NET_VENDOR_CAVIUM is not set
# CONFIG_NET_VENDOR_CHELSIO is not set
# CONFIG_NET_VENDOR_CISCO is not set
# CONFIG_DNET is not set
# CONFIG_NET_VENDOR_DEC is not set
# CONFIG_NET_VENDOR_DLINK is not set
# CONFIG_NET_VENDOR_EMULEX is not set
# CONFIG_NET_VENDOR_EZCHIP is not set
# CONFIG_NET_VENDOR_EXAR is not set
# CONFIG_NET_VENDOR_HP is not set
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_JME is not set
# CONFIG_NET_VENDOR_MARVELL is not set
CONFIG_NET_VENDOR_MELLANOX=y
CONFIG_MLX4_EN=m
CONFIG_MLX4_CORE=m
CONFIG_MLX4_DEBUG=y
# CONFIG_MLX5_CORE is not set
# CONFIG_MLXSW_CORE is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MYRI is not set
# CONFIG_FEALNX is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_NETRONOME is not set
# CONFIG_NET_VENDOR_NVIDIA is not set
# CONFIG_NET_VENDOR_OKI is not set
# CONFIG_ETHOC is not set
# CONFIG_NET_PACKET_ENGINE is not set
# CONFIG_NET_VENDOR_QLOGIC is not set
# CONFIG_NET_VENDOR_QUALCOMM is not set
# CONFIG_NET_VENDOR_REALTEK is not set
# CONFIG_NET_VENDOR_RENESAS is not set
# CONFIG_NET_VENDOR_RDC is not set
# CONFIG_NET_VENDOR_ROCKER is not set
# CONFIG_NET_VENDOR_SAMSUNG is not set
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SILAN is not set
# CONFIG_NET_VENDOR_SIS is not set
# CONFIG_NET_VENDOR_SOLARFLARE is not set
# CONFIG_NET_VENDOR_SMSC is not set
# CONFIG_NET_VENDOR_STMICRO is not set
# CONFIG_NET_VENDOR_SUN is not set
# CONFIG_NET_VENDOR_TEHUTI is not set
# CONFIG_NET_VENDOR_TI is not set
# CONFIG_NET_VENDOR_VIA is not set
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PHYLIB is not set
CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_DEFLATE=m
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_MPPE=m
# CONFIG_PPP_MULTILINK is not set
CONFIG_PPPOE=m
CONFIG_PPTP=m
CONFIG_PPPOL2TP=m
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
# CONFIG_SLIP is not set
CONFIG_SLHC=m

#
# S/390 network device drivers
#
CONFIG_LCS=m
CONFIG_CTCM=m
CONFIG_NETIUCV=m
CONFIG_SMSGIUCV=m
CONFIG_SMSGIUCV_EVENT=m
CONFIG_QETH=y
CONFIG_QETH_L2=y
CONFIG_QETH_L3=y
CONFIG_QETH_IPV6=y
CONFIG_CCWGROUP=y

#
# Host-side USB support is needed for USB Network Adapter support
#

#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#
# CONFIG_WAN is not set
# CONFIG_VMXNET3 is not set
# CONFIG_NVM is not set

#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_POLLDEV is not set
# CONFIG_INPUT_SPARSEKMAP is not set
# CONFIG_INPUT_MATRIXKMAP is not set

#
# Userland interfaces
#
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set

#
# Input Device Drivers
#
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
# CONFIG_RMI4_CORE is not set

#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set

#
# Character devices
#
CONFIG_TTY=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=0
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_NOZOMI is not set
# CONFIG_N_GSM is not set
# CONFIG_TRACE_SINK is not set
CONFIG_DEVMEM=y
# CONFIG_DEVKMEM is not set

#
# Serial drivers
#
# CONFIG_SERIAL_8250 is not set

#
# Non-8250 serial port support
#
# CONFIG_SERIAL_UARTLITE is not set
# CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_SCCNXP is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_ARC is not set
# CONFIG_SERIAL_RP2 is not set
# CONFIG_SERIAL_FSL_LPUART is not set
# CONFIG_SERIAL_DEV_BUS is not set
# CONFIG_TTY_PRINTK is not set
CONFIG_HVC_DRIVER=y
CONFIG_HVC_IUCV=y
CONFIG_VIRTIO_CONSOLE=y
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=m
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM_TPM=m
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
CONFIG_RAW_DRIVER=m
CONFIG_MAX_RAW_DEVS=256
CONFIG_HANGCHECK_TIMER=m
CONFIG_TCG_TPM=y
# CONFIG_TCG_VTPM_PROXY is not set
CONFIG_DEVPORT=y

#
# S/390 character device drivers
#
CONFIG_TN3270=y
CONFIG_TN3270_TTY=y
CONFIG_TN3270_FS=y
CONFIG_TN3270_CONSOLE=y
CONFIG_TN3215=y
CONFIG_TN3215_CONSOLE=y
CONFIG_CCW_CONSOLE=y
CONFIG_SCLP_TTY=y
CONFIG_SCLP_CONSOLE=y
CONFIG_SCLP_VT220_TTY=y
CONFIG_SCLP_VT220_CONSOLE=y
CONFIG_SCLP_ASYNC=m
CONFIG_SCLP_ASYNC_ID="000000000"
CONFIG_HMC_DRV=m
# CONFIG_SCLP_OFB is not set
CONFIG_S390_TAPE=m

#
# S/390 tape hardware support
#
CONFIG_S390_TAPE_34XX=m
CONFIG_S390_TAPE_3590=m
CONFIG_VMLOGRDR=m
CONFIG_VMCP=y
CONFIG_MONREADER=m
CONFIG_MONWRITER=m
CONFIG_S390_VMUR=m
# CONFIG_XILLYBUS is not set

#
# I2C support
#
# CONFIG_I2C is not set
# CONFIG_SPI is not set
# CONFIG_SPMI is not set
# CONFIG_HSI is not set

#
# PPS support
#
CONFIG_PPS=m
# CONFIG_PPS_DEBUG is not set

#
# PPS clients support
#
# CONFIG_PPS_CLIENT_KTIMER is not set
# CONFIG_PPS_CLIENT_LDISC is not set
# CONFIG_PPS_CLIENT_GPIO is not set

#
# PPS generators support
#

#
# PTP clock support
#
CONFIG_PTP_1588_CLOCK=m

#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
#
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
# CONFIG_POWER_AVS is not set
# CONFIG_POWER_RESET is not set
# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
# CONFIG_WATCHDOG_SYSFS is not set

#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=m
# CONFIG_XILINX_WATCHDOG is not set
# CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_DW_WATCHDOG is not set
# CONFIG_MAX63XX_WATCHDOG is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_I6300ESB_WDT is not set
CONFIG_DIAG288_WATCHDOG=m

#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set

#
# Watchdog Pretimeout Governors
#
# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y

#
# Broadcom specific AMBA
#
# CONFIG_BCMA is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_LPC_ICH is not set
# CONFIG_LPC_SCH is not set
# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_MFD_KEMPLD is not set
# CONFIG_MFD_MT6397 is not set
# CONFIG_MFD_RDC321X is not set
# CONFIG_MFD_RTSX_PCI is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_MFD_TI_AM335X_TSCADC is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_VX855 is not set
# CONFIG_REGULATOR is not set
# CONFIG_MEDIA_SUPPORT is not set

#
# Graphics support
#
# CONFIG_DRM is not set

#
# ACP (Audio CoProcessor) Configuration
#
# CONFIG_DRM_LIB_RANDOM is not set

#
# Frame buffer Devices
#
# CONFIG_FB is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
# CONFIG_VGASTATE is not set
# CONFIG_SOUND is not set

#
# HID support
#
# CONFIG_HID is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SUPPORT is not set
# CONFIG_UWB is not set
# CONFIG_MMC is not set
# CONFIG_MEMSTICK is not set
# CONFIG_NEW_LEDS is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_USER_MAD is not set
CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_USER_MEM=y
CONFIG_INFINIBAND_ON_DEMAND_PAGING=y
CONFIG_INFINIBAND_ADDR_TRANS=y
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
# CONFIG_INFINIBAND_MTHCA is not set
CONFIG_MLX4_INFINIBAND=m
# CONFIG_INFINIBAND_NES is not set
# CONFIG_INFINIBAND_OCRDMA is not set
# CONFIG_INFINIBAND_IPOIB is not set
# CONFIG_INFINIBAND_SRP is not set
# CONFIG_INFINIBAND_ISER is not set
# CONFIG_INFINIBAND_RDMAVT is not set
# CONFIG_RDMA_RXE is not set
# CONFIG_DMADEVICES is not set

#
# DMABUF options
#
# CONFIG_SYNC_FILE is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
# CONFIG_VFIO is not set
# CONFIG_VIRT_DRIVERS is not set
CONFIG_VIRTIO=y

#
# Virtio drivers
#
# CONFIG_VIRTIO_PCI is not set
CONFIG_VIRTIO_BALLOON=m
# CONFIG_VIRTIO_INPUT is not set
# CONFIG_VIRTIO_MMIO is not set

#
# Microsoft Hyper-V guest support
#
# CONFIG_STAGING is not set

#
# Hardware Spinlock drivers
#

#
# Clock Source drivers
#
# CONFIG_ATMEL_PIT is not set
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_SH_TIMER_TMU is not set
# CONFIG_EM_TIMER_STI is not set
# CONFIG_MAILBOX is not set
CONFIG_IOMMU_API=y
CONFIG_IOMMU_SUPPORT=y

#
# Generic IOMMU Pagetable Support
#
CONFIG_S390_IOMMU=y

#
# Remoteproc drivers
#
# CONFIG_REMOTEPROC is not set

#
# Rpmsg drivers
#

#
# SOC (System On Chip) specific Drivers
#

#
# Broadcom SoC drivers
#
# CONFIG_SUNXI_SRAM is not set
# CONFIG_SOC_TI is not set
# CONFIG_SOC_ZTE is not set
# CONFIG_PM_DEVFREQ is not set
# CONFIG_EXTCON is not set
# CONFIG_MEMORY is not set
# CONFIG_IIO is not set
# CONFIG_NTB is not set
# CONFIG_VME_BUS is not set
# CONFIG_PWM is not set
CONFIG_ARM_GIC_MAX_NR=1
# CONFIG_IPACK_BUS is not set
# CONFIG_RESET_CONTROLLER is not set
# CONFIG_FMC is not set

#
# PHY Subsystem
#
# CONFIG_GENERIC_PHY is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not set
# CONFIG_BCM_KONA_USB2_PHY is not set
# CONFIG_POWERCAP is not set
# CONFIG_MCB is not set

#
# Performance monitor support
#
# CONFIG_RAS is not set

#
# Android
#
# CONFIG_ANDROID is not set
# CONFIG_LIBNVDIMM is not set
# CONFIG_DEV_DAX is not set
# CONFIG_NVMEM is not set
# CONFIG_STM is not set
# CONFIG_INTEL_TH is not set

#
# FPGA Configuration Support
#
# CONFIG_FPGA is not set

#
# FSI support
#
# CONFIG_FSI is not set

#
# File systems
#
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not set
CONFIG_EXT4_FS=y
CONFIG_EXT4_USE_FOR_EXT2=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_EXT4_ENCRYPTION=y
CONFIG_EXT4_FS_ENCRYPTION=y
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
CONFIG_BTRFS_FS=y
CONFIG_BTRFS_FS_POSIX_ACL=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BTRFS_DEBUG is not set
# CONFIG_BTRFS_ASSERT is not set
# CONFIG_NILFS2_FS is not set
# CONFIG_F2FS_FS is not set
# CONFIG_FS_DAX is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
# CONFIG_EXPORTFS_BLOCK_OPS is not set
CONFIG_FILE_LOCKING=y
CONFIG_MANDATORY_FILE_LOCKING=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
# CONFIG_FANOTIFY_ACCESS_PERMISSIONS is not set
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=m
CONFIG_QFMT_V1=m
CONFIG_QFMT_V2=m
CONFIG_QUOTACTL=y
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=y
CONFIG_CUSE=m
CONFIG_OVERLAY_FS=m
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set

#
# Caches
#
CONFIG_FSCACHE=m
# CONFIG_FSCACHE_STATS is not set
# CONFIG_FSCACHE_HISTOGRAM is not set
# CONFIG_FSCACHE_DEBUG is not set
# CONFIG_FSCACHE_OBJECT_LIST is not set
CONFIG_CACHEFILES=m
# CONFIG_CACHEFILES_DEBUG is not set
# CONFIG_CACHEFILES_HISTOGRAM is not set

#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set

#
# DOS/FAT/NT Filesystems
#
# CONFIG_MSDOS_FS is not set
# CONFIG_VFAT_FS is not set
# CONFIG_NTFS_FS is not set

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_PROC_CHILDREN=y
CONFIG_KERNFS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
CONFIG_CONFIGFS_FS=m
# CONFIG_MISC_FILESYSTEMS is not set
# CONFIG_NETWORK_FILESYSTEMS is not set
# CONFIG_NLS is not set
# CONFIG_DLM is not set

#
# Kernel hacking
#
CONFIG_TRACE_IRQFLAGS_SUPPORT=y

#
# printk and dmesg options
#
CONFIG_PRINTK_TIME=y
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
CONFIG_DYNAMIC_DEBUG=y

#
# Compile-time checks and compiler options
#
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_DWARF4=y
CONFIG_GDB_SCRIPTS=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
# CONFIG_STRIP_ASM_SYMS is not set
CONFIG_READABLE_ASM=y
CONFIG_UNUSED_SYMBOLS=y
# CONFIG_PAGE_OWNER is not set
CONFIG_DEBUG_FS=y
CONFIG_HEADERS_CHECK=y
CONFIG_DEBUG_SECTION_MISMATCH=y
CONFIG_SECTION_MISMATCH_WARN_ONLY=y
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_DEBUG_KERNEL=y

#
# Memory Debugging
#
CONFIG_PAGE_EXTENSION=y
CONFIG_DEBUG_PAGEALLOC=y
# CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT is not set
# CONFIG_PAGE_POISONING is not set
# CONFIG_DEBUG_PAGE_REF is not set
# CONFIG_DEBUG_RODATA_TEST is not set
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_SLUB_DEBUG_ON=y
CONFIG_SLUB_STATS=y
CONFIG_HAVE_DEBUG_KMEMLEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_VM=y
CONFIG_DEBUG_VM_VMACACHE=y
CONFIG_DEBUG_VM_RB=y
CONFIG_DEBUG_VM_PGFLAGS=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
# CONFIG_DEBUG_PER_CPU_MAPS is not set
CONFIG_ARCH_HAS_KCOV=y
# CONFIG_KCOV is not set
CONFIG_DEBUG_SHIRQ=y

#
# Debug Lockups and Hangs
#
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
CONFIG_WQ_WATCHDOG=y
# CONFIG_PANIC_ON_OOPS is not set
CONFIG_PANIC_ON_OOPS_VALUE=0
CONFIG_PANIC_TIMEOUT=0
CONFIG_SCHED_DEBUG=y
CONFIG_SCHED_INFO=y
CONFIG_SCHEDSTATS=y
# CONFIG_SCHED_STACK_END_CHECK is not set
CONFIG_DEBUG_TIMEKEEPING=y
CONFIG_DEBUG_PREEMPT=y

#
# Lock Debugging (spinlocks, mutexes, etc...)
#
CONFIG_DEBUG_RT_MUTEXES=y
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_LOCKDEP=y
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_LOCKDEP=y
CONFIG_DEBUG_ATOMIC_SLEEP=y
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
# CONFIG_LOCK_TORTURE_TEST is not set
# CONFIG_WW_MUTEX_SELFTEST is not set
CONFIG_TRACE_IRQFLAGS=y
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_KOBJECT_RELEASE is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_LIST=y
# CONFIG_DEBUG_PI_LIST is not set
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_DEBUG_CREDENTIALS=y

#
# RCU Debugging
#
CONFIG_PROVE_RCU=y
# CONFIG_PROVE_RCU_REPEATEDLY is not set
# CONFIG_SPARSE_RCU_POINTER is not set
CONFIG_TORTURE_TEST=m
# CONFIG_RCU_PERF_TEST is not set
CONFIG_RCU_TORTURE_TEST=m
# CONFIG_RCU_TORTURE_TEST_SLOW_PREINIT is not set
# CONFIG_RCU_TORTURE_TEST_SLOW_INIT is not set
# CONFIG_RCU_TORTURE_TEST_SLOW_CLEANUP is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=300
# CONFIG_RCU_TRACE is not set
# CONFIG_RCU_EQS_DEBUG is not set
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
CONFIG_NOTIFIER_ERROR_INJECTION=m
CONFIG_PM_NOTIFIER_ERROR_INJECT=m
# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set
CONFIG_FAULT_INJECTION=y
CONFIG_FAILSLAB=y
CONFIG_FAIL_PAGE_ALLOC=y
CONFIG_FAIL_MAKE_REQUEST=y
CONFIG_FAIL_IO_TIMEOUT=y
CONFIG_FAIL_FUTEX=y
CONFIG_FAULT_INJECTION_DEBUG_FS=y
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
CONFIG_LATENCYTOP=y
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
CONFIG_TRACER_MAX_TRACE=y
CONFIG_TRACE_CLOCK=y
CONFIG_RING_BUFFER=y
CONFIG_EVENT_TRACING=y
CONFIG_CONTEXT_SWITCH_TRACER=y
CONFIG_RING_BUFFER_ALLOW_SWAP=y
CONFIG_TRACING=y
CONFIG_GENERIC_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
CONFIG_IRQSOFF_TRACER=y
CONFIG_PREEMPT_TRACER=y
CONFIG_SCHED_TRACER=y
# CONFIG_HWLAT_TRACER is not set
CONFIG_FTRACE_SYSCALLS=y
CONFIG_TRACER_SNAPSHOT=y
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not set
CONFIG_STACK_TRACER=y
CONFIG_BLK_DEV_IO_TRACE=y
# CONFIG_KPROBE_EVENTS is not set
# CONFIG_UPROBE_EVENTS is not set
# CONFIG_PROBE_EVENTS is not set
CONFIG_DYNAMIC_FTRACE=y
CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
CONFIG_FUNCTION_PROFILER=y
CONFIG_FTRACE_MCOUNT_RECORD=y
# CONFIG_FTRACE_STARTUP_TEST is not set
CONFIG_TRACING_MAP=y
CONFIG_HIST_TRIGGERS=y
# CONFIG_TRACEPOINT_BENCHMARK is not set
# CONFIG_RING_BUFFER_BENCHMARK is not set
# CONFIG_RING_BUFFER_STARTUP_TEST is not set
CONFIG_TRACE_ENUM_MAP_FILE=y

#
# Runtime Testing
#
CONFIG_LKDTM=m
CONFIG_TEST_LIST_SORT=y
# CONFIG_TEST_SORT is not set
CONFIG_KPROBES_SANITY_TEST=y
# CONFIG_BACKTRACE_SELF_TEST is not set
CONFIG_RBTREE_TEST=y
CONFIG_INTERVAL_TREE_TEST=m
CONFIG_PERCPU_TEST=m
CONFIG_ATOMIC64_SELFTEST=y
# CONFIG_TEST_HEXDUMP is not set
CONFIG_TEST_STRING_HELPERS=y
CONFIG_TEST_KSTRTOX=y
# CONFIG_TEST_PRINTF is not set
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_UUID is not set
# CONFIG_TEST_RHASHTABLE is not set
# CONFIG_TEST_HASH is not set
CONFIG_DMA_API_DEBUG=y
# CONFIG_TEST_LKM is not set
# CONFIG_TEST_USER_COPY is not set
CONFIG_TEST_BPF=m
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_UDELAY is not set
# CONFIG_MEMTEST is not set
# CONFIG_TEST_STATIC_KEYS is not set
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
# CONFIG_SAMPLES is not set
CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
CONFIG_ARCH_WANTS_UBSAN_NO_NULL=y
# CONFIG_UBSAN is not set
CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
# CONFIG_STRICT_DEVMEM is not set
CONFIG_S390_PTDUMP=y
CONFIG_EARLY_PRINTK=y

#
# Security options
#
CONFIG_KEYS=y
# CONFIG_PERSISTENT_KEYRINGS is not set
# CONFIG_BIG_KEYS is not set
# CONFIG_TRUSTED_KEYS is not set
CONFIG_ENCRYPTED_KEYS=y
# CONFIG_KEY_DH_OPERATIONS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
CONFIG_SECURITY_NETWORK=y
# CONFIG_SECURITY_NETWORK_XFRM is not set
# CONFIG_SECURITY_PATH is not set
CONFIG_LSM_MMAP_MIN_ADDR=65536
CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
# CONFIG_HARDENED_USERCOPY is not set
# CONFIG_STATIC_USERMODEHELPER is not set
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=0
# CONFIG_SECURITY_SMACK is not set
# CONFIG_SECURITY_TOMOYO is not set
# CONFIG_SECURITY_APPARMOR is not set
# CONFIG_SECURITY_LOADPIN is not set
# CONFIG_SECURITY_YAMA is not set
CONFIG_INTEGRITY=y
# CONFIG_INTEGRITY_SIGNATURE is not set
CONFIG_INTEGRITY_AUDIT=y
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
# CONFIG_IMA_TEMPLATE is not set
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH_SHA1=y
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
# CONFIG_IMA_DEFAULT_HASH_WP512 is not set
CONFIG_IMA_DEFAULT_HASH="sha1"
# CONFIG_IMA_WRITE_POLICY is not set
# CONFIG_IMA_READ_POLICY is not set
CONFIG_IMA_APPRAISE=y
# CONFIG_EVM is not set
CONFIG_DEFAULT_SECURITY_SELINUX=y
# CONFIG_DEFAULT_SECURITY_DAC is not set
CONFIG_DEFAULT_SECURITY="selinux"
CONFIG_XOR_BLOCKS=y
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=m
CONFIG_CRYPTO_KPP2=y
CONFIG_CRYPTO_KPP=m
CONFIG_CRYPTO_ACOMP2=y
CONFIG_CRYPTO_RSA=m
CONFIG_CRYPTO_DH=m
CONFIG_CRYPTO_ECDH=m
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=y
CONFIG_CRYPTO_NULL=y
CONFIG_CRYPTO_NULL2=y
# CONFIG_CRYPTO_PCRYPT is not set
CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_CRYPTO_CRYPTD=m
# CONFIG_CRYPTO_MCRYPTD is not set
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_ENGINE=m

#
# Authenticated Encryption with Associated Data
#
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_SEQIV=y
CONFIG_CRYPTO_ECHAINIV=m

#
# Block modes
#
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_CTR=y
CONFIG_CRYPTO_CTS=y
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XTS=y
CONFIG_CRYPTO_KEYWRAP=m

#
# Hash modes
#
# CONFIG_CRYPTO_CMAC is not set
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_VMAC=m

#
# Digest
#
CONFIG_CRYPTO_CRC32C=y
CONFIG_CRYPTO_CRC32=m
CONFIG_CRYPTO_CRCT10DIF=m
CONFIG_CRYPTO_GHASH=m
CONFIG_CRYPTO_POLY1305=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_RMD128=m
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_RMD256=m
CONFIG_CRYPTO_RMD320=m
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=m
# CONFIG_CRYPTO_SHA3 is not set
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=m

#
# Ciphers
#
CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_AES_TI is not set
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_BLOWFISH_COMMON=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST_COMMON=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
CONFIG_CRYPTO_CHACHA20=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=m

#
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_LZO=y
CONFIG_CRYPTO_842=m
CONFIG_CRYPTO_LZ4=m
CONFIG_CRYPTO_LZ4HC=m

#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_DRBG_MENU=y
CONFIG_CRYPTO_DRBG_HMAC=y
# CONFIG_CRYPTO_DRBG_HASH is not set
# CONFIG_CRYPTO_DRBG_CTR is not set
CONFIG_CRYPTO_DRBG=y
CONFIG_CRYPTO_JITTERENTROPY=y
CONFIG_CRYPTO_USER_API=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
CONFIG_CRYPTO_USER_API_RNG=m
CONFIG_CRYPTO_USER_API_AEAD=m
CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_HW=y
CONFIG_ZCRYPT=m
CONFIG_PKEY=m
CONFIG_CRYPTO_SHA1_S390=m
CONFIG_CRYPTO_SHA256_S390=m
CONFIG_CRYPTO_SHA512_S390=m
CONFIG_CRYPTO_DES_S390=m
CONFIG_CRYPTO_AES_S390=m
CONFIG_S390_PRNG=m
CONFIG_CRYPTO_GHASH_S390=m
CONFIG_CRYPTO_CRC32_S390=y
# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_ASYMMETRIC_KEY_TYPE=y
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
CONFIG_X509_CERTIFICATE_PARSER=m
# CONFIG_PKCS7_MESSAGE_PARSER is not set

#
# Certificates for signature checking
#
# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
CONFIG_BINARY_PRINTF=y

#
# Library routines
#
CONFIG_RAID6_PQ=y
CONFIG_BITREVERSE=y
# CONFIG_HAVE_ARCH_BITREVERSE is not set
CONFIG_GENERIC_NET_UTILS=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_IO=y
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=m
CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
CONFIG_CRC7=m
CONFIG_LIBCRC32C=y
CONFIG_CRC8=m
# CONFIG_AUDIT_ARCH_COMPAT_GENERIC is not set
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_842_COMPRESS=m
CONFIG_842_DECOMPRESS=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_LZ4_COMPRESS=m
CONFIG_LZ4HC_COMPRESS=m
CONFIG_LZ4_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_BCJ=y
# CONFIG_XZ_DEC_TEST is not set
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_DECOMPRESS_LZ4=y
CONFIG_INTERVAL_TREE=y
CONFIG_RADIX_TREE_MULTIORDER=y
CONFIG_ASSOCIATIVE_ARRAY=y
CONFIG_HAS_DMA=y
CONFIG_DMA_NOOP_OPS=y
# CONFIG_DMA_VIRT_OPS is not set
CONFIG_CPU_RMAP=y
CONFIG_DQL=y
CONFIG_GLOB=y
# CONFIG_GLOB_SELFTEST is not set
CONFIG_NLATTR=y
CONFIG_CLZ_TAB=y
CONFIG_CORDIC=m
# CONFIG_DDR is not set
CONFIG_IRQ_POLL=y
CONFIG_MPILIB=m
CONFIG_OID_REGISTRY=m
# CONFIG_SG_SPLIT is not set
CONFIG_SG_POOL=y
CONFIG_ARCH_HAS_SG_CHAIN=y
CONFIG_SBITMAP=y

#
# Virtualization
#
CONFIG_PFAULT=y
CONFIG_CMM=m
CONFIG_CMM_IUCV=y
CONFIG_APPLDATA_BASE=y
CONFIG_APPLDATA_MEM=m
CONFIG_APPLDATA_OS=m
CONFIG_APPLDATA_NET_SUM=m
CONFIG_S390_HYPFS_FS=y
CONFIG_HAVE_KVM=y
CONFIG_HAVE_KVM_IRQCHIP=y
CONFIG_HAVE_KVM_IRQFD=y
CONFIG_HAVE_KVM_IRQ_ROUTING=y
CONFIG_HAVE_KVM_EVENTFD=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_KVM_ASYNC_PF_SYNC=y
CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
CONFIG_KVM_VFIO=y
CONFIG_HAVE_KVM_INVALID_WAKEUPS=y
CONFIG_VIRTUALIZATION=y
CONFIG_KVM=m
CONFIG_KVM_S390_UCONTROL=y
CONFIG_VHOST_NET=m
CONFIG_VHOST=m
# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
CONFIG_S390_GUEST=y
CONFIG_S390_GUEST_OLD_TRANSPORT=y

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-20 16:43 lockdep warning: console vs. mem hotplug Sebastian Ott
@ 2017-03-21  4:44 ` Sergey Senozhatsky
  2017-03-21  5:04   ` Sergey Senozhatsky
                     ` (2 more replies)
  2017-03-24 16:39 ` Steven Rostedt
  1 sibling, 3 replies; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-03-21  4:44 UTC (permalink / raw)
  To: Sebastian Ott
  Cc: Petr Mladek, Steven Rostedt, Andrew Morton, Thomas Gleixner,
	Peter Zijlstra, Linus Torvalds, Michal Hocko, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

Cc Michal, Linus, Peter, Thomas, Andrew, Martin


// I kept only lockdep splats from the original report and cut off .configs
// full version:
// lkml.kernel.org/r/alpine.LFD.2.20.1703201736070.1753@schleppi

Sebastian, thanks.


On (03/20/17 17:43), Sebastian Ott wrote:
[..]
> Since commit f975237b7682 ("printk: use printk_safe buffers in printk")
> I observe lockdep warnings on s390 when doing memory hotplug:
> 
> [  132.379220] ======================================================
> [  132.379220] [ INFO: possible circular locking dependency detected ]
> [  132.379221] 4.11.0-rc3 #330 Not tainted
> [  132.379221] -------------------------------------------------------
> [  132.379222] sh/708 is trying to acquire lock:
> [  132.379222]  (&(&sclp_con_lock)->rlock){-.-...}, at: [<000000000074524a>] sclp_console_write+0x4a/0x2b8
> [  132.379224]
> [  132.379224] but task is already holding lock:
> [  132.379224]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
> [  132.379226]
> [  132.379227] which lock already depends on the new lock.
> [  132.379227]
> [  132.379227]
> [  132.379228] the existing dependency chain (in reverse order) is:
> [  132.379228]
> [  132.379229] -> #2 (&(&zone->lock)->rlock){..-...}:
> [  132.379230]        validate_chain.isra.22+0xb36/0xd18
> [  132.379231]        __lock_acquire+0x650/0x880
> [  132.379231]        lock_acquire+0x24e/0x2b0
> [  132.379232]        _raw_spin_lock_irqsave+0x70/0xb8
> [  132.379232]        get_page_from_freelist+0x548/0xf30
> [  132.379233]        __alloc_pages_nodemask+0x1c8/0x14c0
> [  132.379233]        allocate_slab+0xde/0x668
> [  132.379233]        new_slab+0x94/0xa8
> [  132.379234]        ___slab_alloc.constprop.66+0x556/0x578
> [  132.379234]        __slab_alloc.isra.62.constprop.65+0x74/0xa8
> [  132.379235]        kmem_cache_alloc+0x136/0x4b8
> [  132.379235]        __debug_object_init+0xaa/0x448
> [  132.379236]        debug_object_activate+0x182/0x238
> [  132.379236]        mod_timer+0xe6/0x450
> [  132.379236]        prandom_reseed+0x44/0x50
> [  132.379237]        do_one_initcall+0xa2/0x150
> [  132.379237]        kernel_init_freeable+0x228/0x2d8
> [  132.379238]        kernel_init+0x2a/0x138
> [  132.379238]        kernel_thread_starter+0x6/0xc
> [  132.379239]        kernel_thread_starter+0x0/0xc
> [  132.379239]
> [  132.379239] -> #1 (&(&base->lock)->rlock){-.-.-.}:
> [  132.379241]        validate_chain.isra.22+0xb36/0xd18
> [  132.379242]        __lock_acquire+0x650/0x880
> [  132.379242]        lock_acquire+0x24e/0x2b0
> [  132.379242]        _raw_spin_lock_irqsave+0x70/0xb8
> [  132.379243]        lock_timer_base+0x78/0xa8
> [  132.379243]        mod_timer+0xba/0x450
> [  132.379244]        sclp_console_write+0x262/0x2b8
> [  132.379244]        console_unlock+0x4a6/0x658
> [  132.379245]        register_console+0x31c/0x430
> [  132.379245]        sclp_console_init+0x152/0x170
> [  132.379245]        console_init+0x3a/0x58
> [  132.379246]        start_kernel+0x350/0x480
> [  132.379246]        _stext+0x20/0x80
> [  132.379246]
> [  132.379247] -> #0 (&(&sclp_con_lock)->rlock){-.-...}:
> [  132.379249]        check_prev_add+0x150/0x648
> [  132.379249]        validate_chain.isra.22+0xb36/0xd18
> [  132.379249]        __lock_acquire+0x650/0x880
> [  132.379250]        lock_acquire+0x24e/0x2b0
> [  132.379250]        _raw_spin_lock_irqsave+0x70/0xb8
> [  132.379251]        sclp_console_write+0x4a/0x2b8
> [  132.379251]        console_unlock+0x4a6/0x658
> [  132.379252]        vprintk_emit+0x33e/0x350
> [  132.379252]        vprintk_default+0x44/0x58
> [  132.379252]        printk+0x4e/0x58
> [  132.379253]        __offline_isolated_pages+0x1a0/0x340
> [  132.379253]        offline_isolated_pages_cb+0x2e/0x40
> [  132.379254]        walk_system_ram_range+0x96/0xe8
> [  132.379254]        __offline_pages.constprop.43+0x6da/0x918
> [  132.379255]        memory_subsys_offline+0x6a/0xa0
> [  132.379255]        device_offline+0x84/0xd8
> [  132.379255]        store_mem_state+0xfe/0x120
> [  132.379256]        kernfs_fop_write+0x126/0x1d0
> [  132.379256]        __vfs_write+0x46/0x140
> [  132.379257]        vfs_write+0xb8/0x1a8
> [  132.379257]        SyS_write+0x66/0xc0
> [  132.379257]        system_call+0xc4/0x240
> [  132.379258]
> [  132.379258] other info that might help us debug this:
> [  132.379258]
> [  132.379259] Chain exists of:
> [  132.379259]   &(&sclp_con_lock)->rlock --> &(&base->lock)->rlock --> &(&zone->lock)->rlock
> [  132.379262]
> [  132.379262]  Possible unsafe locking scenario:
> [  132.379262]
> [  132.379263]        CPU0                    CPU1
> [  132.379263]        ----                    ----
> [  132.379264]   lock(&(&zone->lock)->rlock);
> [  132.379265]                                lock(&(&base->lock)->rlock);
> [  132.379266]                                lock(&(&zone->lock)->rlock);
> [  132.379267]   lock(&(&sclp_con_lock)->rlock);


after a rather quick look.


as far as I understand it, the problem here is that we have the
following chains

a)    mod_timer() -> __debug_object_init()  -> __alloc_pages_nodemask()

	takes zone->lock under timer base->lock

	so this adds a   "base->lock -> zone->lock"   dependency


b)    console_unlock() -> sclp_console_write() -> lock_timer_base()

	because sclp_console_write() calls add_timer() under sclp
	console spin_lock.

	this one adds a  "sclp_con_lock -> base->lock"  dependency


c)    __offline_isolated_pages() -> printk() -> sclp_console_write()

	calls printk under zone->lock.    pr_info("remove from free list %lx %d %lx\n", pfn, 1 << order, end_pfn);

	so it's a  "zone->lock -> sclp_con_lock -> base->lock"  dependency.
	which conflicts with (a).



a1) 	as an additional complication, (a) can also printk() from __debug_object_init(),
	for example see debug_print_object(). which probably can result in

	mod_timer() -> printk() -> mod_timer() -> base->lock  *** deadlock

	so may be we can consider switching to printk_safe in debug_print_object().
	but this is not directly related to the lockdep splat above.



so we probably can


1) move pr_info() out of zone->lock in __offline_isolated_pages().
   meh...


2) switch to printk_deferred() in __offline_isolated_pages().
   meh.. there might a bunch of other printks done from under zone->lock.


3) move add_timer() out of sclp_con_lock console in sclp_console_write().
   well, there can be other consoles that do something similar.


4) ... something smart.


need to look more at the second lockdep splat, but looks more or less
similar.

	-ss

> [  132.379268]  *** DEADLOCK ***
> [  132.379269]
> [  132.379269] 10 locks held by sh/708:
> [  132.379269]  #0:  (sb_writers#4){.+.+.+}, at: [<0000000000345d4a>] vfs_write+0xa2/0x1a8
> [  132.379272]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003e5e60>] kernfs_fop_write+0xd8/0x1d0
> [  132.379273]  #2:  (s_active#180){.+.+.+}, at: [<00000000003e5e6c>] kernfs_fop_write+0xe4/0x1d0
> [  132.379275]  #3:  (device_hotplug_lock){+.+...}, at: [<000000000069bb58>] lock_device_hotplug_sysfs+0x30/0x68
> [  132.379277]  #4:  (memory_add_remove_lock){+.+...}, at: [<000000000031cfe6>] mem_hotplug_begin+0x3e/0xd0
> [  132.379279]  #5:  (mem_hotplug.lock){++++.+}, at: [<000000000031cfa8>] mem_hotplug_begin+0x0/0xd0
> [  132.379281]  #6:  (mem_hotplug.lock#2){+.+...}, at: [<000000000031d02c>] mem_hotplug_begin+0x84/0xd0
> [  132.379283]  #7:  (&dev->mutex){......}, at: [<000000000069d55c>] device_offline+0x5c/0xd8
> [  132.379285]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
> [  132.379287]  #9:  (console_lock){+.+...}, at: [<00000000001bdc02>] vprintk_emit+0x332/0x350
> 
> Here's another one using a different console:
> 
> [   66.522890] ======================================================
> [   66.522890] [ INFO: possible circular locking dependency detected ]
> [   66.522891] 4.11.0-rc2-00237-g2e287c0 #119 Not tainted
> [   66.522891] -------------------------------------------------------
> [   66.522892] sh/822 is trying to acquire lock:
> [   66.522892]  (&console_sch_key){-.-...}, at: [<00000000007573f0>] raw3215_write+0x58/0x208
> [   66.522894] but task is already holding lock:
> [   66.522894]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002ae3da>] __offline_isolated_pages+0x302/0x370
> [   66.522897] which lock already depends on the new lock.
> [   66.522898] the existing dependency chain (in reverse order) is:
> [   66.522899] -> #4 (&(&zone->lock)->rlock){..-...}:
> [   66.522901]        validate_chain.isra.10+0xb7a/0xda8
> [   66.522901]        __lock_acquire+0x62c/0x850
> [   66.522902]        lock_acquire+0x254/0x2b8
> [   66.522902]        _raw_spin_lock_irqsave+0x70/0xb8
> [   66.522903]        get_page_from_freelist+0x4e2/0xf28
> [   66.522903]        __alloc_pages_nodemask+0x1fa/0x1528
> [   66.522904]        allocate_slab+0xf2/0x6c0
> [   66.522904]        new_slab+0x94/0xa8
> [   66.522905]        ___slab_alloc.constprop.22+0x570/0x590
> [   66.522905]        __slab_alloc.isra.16.constprop.21+0x74/0xa8
> [   66.522906]        kmem_cache_alloc+0x13c/0x4b0
> [   66.522906]        __debug_object_init+0x5c/0x468
> [   66.522907]        hrtimer_init+0x42/0x1d8
> [   66.522907]        init_dl_task_timer+0x3a/0x58
> [   66.522908]        __sched_fork.isra.5+0x7e/0xe8
> [   66.522908]        init_idle+0x7a/0x278
> [   66.522908]        fork_idle+0xa4/0xb8
> [   66.522909]        idle_threads_init+0x64/0xc8
> [   66.522909]        smp_init+0x2e/0x110
> [   66.522910]        kernel_init_freeable+0x16c/0x2e0
> [   66.522910]        kernel_init+0x2a/0x148
> [   66.522911]        kernel_thread_starter+0x6/0xc
> [   66.522911]        kernel_thread_starter+0x0/0xc
> [   66.522912] -> #3 (&rq->lock){-.-.-.}:
> [   66.522914]        validate_chain.isra.10+0xb7a/0xda8
> [   66.522914]        __lock_acquire+0x62c/0x850
> [   66.522915]        lock_acquire+0x254/0x2b8
> [   66.522915]        _raw_spin_lock+0x60/0xa0
> [   66.522916]        task_fork_fair+0x54/0x118
> [   66.522916]        sched_fork+0x13e/0x2a0
> [   66.522916]        copy_process+0x642/0x1e80
> [   66.522917]        _do_fork+0xc2/0x6d0
> [   66.522917]        kernel_thread+0x4e/0x60
> [   66.522918]        rest_init+0x42/0x170
> [   66.522918]        start_kernel+0x464/0x478
> [   66.522918]        _stext+0x20/0x80
> [   66.522919] -> #2 (&p->pi_lock){-.-.-.}:
> [   66.522921]        validate_chain.isra.10+0xb7a/0xda8
> [   66.522922]        __lock_acquire+0x62c/0x850
> [   66.522922]        lock_acquire+0x254/0x2b8
> [   66.522922]        _raw_spin_lock_irqsave+0x70/0xb8
> [   66.522923]        try_to_wake_up+0x4a/0x5f8
> [   66.522924]        autoremove_wake_function+0x2e/0x88
> [   66.522924]        __wake_up_common+0x76/0xc0
> [   66.522924]        __wake_up+0x54/0x68
> [   66.522925]        ccw_device_verify_done+0xae/0x268
> [   66.522925]        ccw_request_handler+0x422/0x560
> [   66.522926]        do_cio_interrupt+0x224/0x2a0
> [   66.522926]        __handle_irq_event_percpu+0x1a6/0x440
> [   66.522927]        handle_irq_event_percpu+0x38/0x88
> [   66.522927]        handle_percpu_irq+0x84/0xb0
> [   66.522928]        generic_handle_irq+0x42/0x60
> [   66.522928]        do_IRQ+0x86/0xc8
> [   66.522929]        io_int_handler+0x104/0x294
> [   66.522929]        enabled_wait+0x72/0x140
> [   66.522930]        enabled_wait+0x5a/0x140
> [   66.522930]        arch_cpu_idle+0x32/0x50
> [   66.522930]        default_idle_call+0x52/0x68
> [   66.522931]        do_idle+0x10e/0x160
> [   66.522931]        cpu_startup_entry+0x3e/0x48
> [   66.522932]        start_kernel+0x464/0x478
> [   66.522932]        _stext+0x20/0x80
> [   66.522933] -> #1 (&priv->wait_q){-.-...}:
> [   66.522935]        validate_chain.isra.10+0xb7a/0xda8
> [   66.522935]        __lock_acquire+0x62c/0x850
> [   66.522935]        lock_acquire+0x254/0x2b8
> [   66.522936]        _raw_spin_lock_irqsave+0x70/0xb8
> [   66.522936]        __wake_up+0x3a/0x68
> [   66.522937]        ccw_device_recog_done+0x28e/0x2c8
> [   66.522937]        snsid_callback+0x324/0x390
> [   66.522938]        ccw_request_handler+0x480/0x560
> [   66.522938]        do_cio_interrupt+0x224/0x2a0
> [   66.522939]        __handle_irq_event_percpu+0x1a6/0x440
> [   66.522939]        handle_irq_event_percpu+0x38/0x88
> [   66.522940]        handle_percpu_irq+0x84/0xb0
> [   66.522940]        generic_handle_irq+0x42/0x60
> [   66.522940]        do_IRQ+0x86/0xc8
> [   66.522941]        io_int_handler+0x104/0x294
> [   66.522941]        _raw_spin_unlock_irq+0x4e/0x78
> [   66.522942]        _raw_spin_unlock_irq+0x4a/0x78
> [   66.522942]        ccw_device_enable_console+0x9a/0x180
> [   66.522943]        con3215_init+0x110/0x1b8
> [   66.522943]        console_init+0x3a/0x58
> [   66.522944]        start_kernel+0x33a/0x478
> [   66.522944]        _stext+0x20/0x80
> [   66.522945] -> #0 (&console_sch_key){-.-...}:
> [   66.522947]        check_prev_add+0x160/0x6e8
> [   66.522947]        validate_chain.isra.10+0xb7a/0xda8
> [   66.522948]        __lock_acquire+0x62c/0x850
> [   66.522948]        lock_acquire+0x254/0x2b8
> [   66.522948]        _raw_spin_lock_irqsave+0x70/0xb8
> [   66.522949]        raw3215_write+0x58/0x208
> [   66.522949]        con3215_write+0x8e/0xf8
> [   66.522950]        console_unlock+0x49a/0x670
> [   66.522950]        vprintk_emit+0x308/0x378
> [   66.522951]        vprintk_default+0x44/0x58
> [   66.522951]        printk+0x4e/0x60
> [   66.522952]        __offline_isolated_pages+0x168/0x370
> [   66.522952]        offline_isolated_pages_cb+0x2e/0x40
> [   66.522953]        walk_system_ram_range+0x92/0xf0
> [   66.522953]        __offline_pages.constprop.9+0x74a/0x988
> [   66.522954]        memory_subsys_offline+0x6c/0xa0
> [   66.522954]        device_offline+0x84/0xe0
> [   66.522954]        store_mem_state+0xfe/0x120
> [   66.522955]        kernfs_fop_write+0x124/0x1c8
> [   66.522955]        __vfs_write+0x36/0x140
> [   66.522956]        vfs_write+0xb8/0x1a0
> [   66.522956]        SyS_write+0x66/0xc0
> [   66.522957]        system_call+0xc4/0x240
> 
> [   66.522957] other info that might help us debug this:
> [   66.522958] Chain exists of:
> [   66.522958]   &console_sch_key --> &rq->lock --> &(&zone->lock)->rlock
> [   66.522961]  Possible unsafe locking scenario:
> [   66.522962]        CPU0                    CPU1
> [   66.522962]        ----                    ----
> [   66.522963]   lock(&(&zone->lock)->rlock);
> [   66.522964]                                lock(&rq->lock);
> [   66.522965]                                lock(&(&zone->lock)->rlock);
> [   66.522966]   lock(&console_sch_key);
> 
> [   66.522967]  *** DEADLOCK ***
> 
> [   66.522968] 10 locks held by sh/822:
> [   66.522968]  #0:  (sb_writers#5){.+.+.+}, at: [<000000000034f9c2>] vfs_write+0xa2/0x1a0
> [   66.522970]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003f1afe>] kernfs_fop_write+0xd6/0x1c8
> [   66.522972]  #2:  (s_active#53){.+.+.+}, at: [<00000000003f1b0a>] kernfs_fop_write+0xe2/0x1c8
> [   66.522974]  #3:  (device_hotplug_lock){+.+...}, at: [<00000000006adb70>] lock_device_hotplug_sysfs+0x30/0x70
> [   66.522976]  #4:  (memory_add_remove_lock){+.+...}, at: [<0000000000328e16>] mem_hotplug_begin+0x3e/0xd0
> [   66.522978]  #5:  (mem_hotplug.lock){++++.+}, at: [<0000000000328dd8>] mem_hotplug_begin+0x0/0xd0
> [   66.522980]  #6:  (mem_hotplug.lock#2){+.+...}, at: [<0000000000328e5c>] mem_hotplug_begin+0x84/0xd0
> [   66.522982]  #7:  (&dev->mutex){......}, at: [<00000000006af41c>] device_offline+0x5c/0xe0
> [   66.522984]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002ae3da>] __offline_isolated_pages+0x302/0x370
> [   66.522986]  #9:  (console_lock){+.+...}, at: [<00000000001c2c84>] vprintk_emit+0x2fc/0x378

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-21  4:44 ` Sergey Senozhatsky
@ 2017-03-21  5:04   ` Sergey Senozhatsky
  2017-03-25  0:04   ` Sergey Senozhatsky
  2017-07-24 12:46   ` Sebastian Ott
  2 siblings, 0 replies; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-03-21  5:04 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Sebastian Ott, Petr Mladek, Steven Rostedt, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Michal Hocko,
	Heiko Carstens, Martin Schwidefsky, linux-kernel,
	Sergey Senozhatsky

[..]
> 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
	^^^^^^^^^^^^
	I take it back. Won't improve anything.

	-ss

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-20 16:43 lockdep warning: console vs. mem hotplug Sebastian Ott
  2017-03-21  4:44 ` Sergey Senozhatsky
@ 2017-03-24 16:39 ` Steven Rostedt
  2017-03-24 16:57   ` Sebastian Ott
  2017-03-25  0:00   ` Sergey Senozhatsky
  1 sibling, 2 replies; 18+ messages in thread
From: Steven Rostedt @ 2017-03-24 16:39 UTC (permalink / raw)
  To: Sebastian Ott
  Cc: Sergey Senozhatsky, Petr Mladek, Heiko Carstens, linux-kernel

On Mon, 20 Mar 2017 17:43:23 +0100 (CET)
Sebastian Ott <sebott@linux.vnet.ibm.com> wrote:

> Since commit f975237b7682 ("printk: use printk_safe buffers in printk")
> I observe lockdep warnings on s390 when doing memory hotplug:
> 
> [  132.379220] ======================================================
> [  132.379220] [ INFO: possible circular locking dependency detected ]
> [  132.379221] 4.11.0-rc3 #330 Not tainted
> [  132.379221] -------------------------------------------------------
> [  132.379222] sh/708 is trying to acquire lock:
> [  132.379222]  (&(&sclp_con_lock)->rlock){-.-...}, at: [<000000000074524a>] sclp_console_write+0x4a/0x2b8
> [  132.379224]
> [  132.379224] but task is already holding lock:
> [  132.379224]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
> [  132.379226]
> [  132.379227] which lock already depends on the new lock.
> [  132.379227]
> [  132.379227]
> [  132.379228] the existing dependency chain (in reverse order) is:
> [  132.379228]
> [  132.379229] -> #2 (&(&zone->lock)->rlock){..-...}:
> [  132.379230]        validate_chain.isra.22+0xb36/0xd18
> [  132.379231]        __lock_acquire+0x650/0x880
> [  132.379231]        lock_acquire+0x24e/0x2b0
> [  132.379232]        _raw_spin_lock_irqsave+0x70/0xb8
> [  132.379232]        get_page_from_freelist+0x548/0xf30
> [  132.379233]        __alloc_pages_nodemask+0x1c8/0x14c0
> [  132.379233]        allocate_slab+0xde/0x668
> [  132.379233]        new_slab+0x94/0xa8
> [  132.379234]        ___slab_alloc.constprop.66+0x556/0x578
> [  132.379234]        __slab_alloc.isra.62.constprop.65+0x74/0xa8
> [  132.379235]        kmem_cache_alloc+0x136/0x4b8
> [  132.379235]        __debug_object_init+0xaa/0x448
> [  132.379236]        debug_object_activate+0x182/0x238
> [  132.379236]        mod_timer+0xe6/0x450
> [  132.379236]        prandom_reseed+0x44/0x50
> [  132.379237]        do_one_initcall+0xa2/0x150
> [  132.379237]        kernel_init_freeable+0x228/0x2d8
> [  132.379238]        kernel_init+0x2a/0x138
> [  132.379238]        kernel_thread_starter+0x6/0xc
> [  132.379239]        kernel_thread_starter+0x0/0xc
> [  132.379239]
> [  132.379239] -> #1 (&(&base->lock)->rlock){-.-.-.}:
> [  132.379241]        validate_chain.isra.22+0xb36/0xd18
> [  132.379242]        __lock_acquire+0x650/0x880
> [  132.379242]        lock_acquire+0x24e/0x2b0
> [  132.379242]        _raw_spin_lock_irqsave+0x70/0xb8
> [  132.379243]        lock_timer_base+0x78/0xa8
> [  132.379243]        mod_timer+0xba/0x450
> [  132.379244]        sclp_console_write+0x262/0x2b8
> [  132.379244]        console_unlock+0x4a6/0x658
> [  132.379245]        register_console+0x31c/0x430
> [  132.379245]        sclp_console_init+0x152/0x170
> [  132.379245]        console_init+0x3a/0x58
> [  132.379246]        start_kernel+0x350/0x480
> [  132.379246]        _stext+0x20/0x80
> [  132.379246]
> [  132.379247] -> #0 (&(&sclp_con_lock)->rlock){-.-...}:
> [  132.379249]        check_prev_add+0x150/0x648
> [  132.379249]        validate_chain.isra.22+0xb36/0xd18
> [  132.379249]        __lock_acquire+0x650/0x880
> [  132.379250]        lock_acquire+0x24e/0x2b0
> [  132.379250]        _raw_spin_lock_irqsave+0x70/0xb8
> [  132.379251]        sclp_console_write+0x4a/0x2b8
> [  132.379251]        console_unlock+0x4a6/0x658
> [  132.379252]        vprintk_emit+0x33e/0x350
> [  132.379252]        vprintk_default+0x44/0x58
> [  132.379252]        printk+0x4e/0x58
> [  132.379253]        __offline_isolated_pages+0x1a0/0x340
> [  132.379253]        offline_isolated_pages_cb+0x2e/0x40
> [  132.379254]        walk_system_ram_range+0x96/0xe8
> [  132.379254]        __offline_pages.constprop.43+0x6da/0x918
> [  132.379255]        memory_subsys_offline+0x6a/0xa0
> [  132.379255]        device_offline+0x84/0xd8
> [  132.379255]        store_mem_state+0xfe/0x120
> [  132.379256]        kernfs_fop_write+0x126/0x1d0
> [  132.379256]        __vfs_write+0x46/0x140
> [  132.379257]        vfs_write+0xb8/0x1a8
> [  132.379257]        SyS_write+0x66/0xc0
> [  132.379257]        system_call+0xc4/0x240
> [  132.379258]
> [  132.379258] other info that might help us debug this:
> [  132.379258]
> [  132.379259] Chain exists of:
> [  132.379259]   &(&sclp_con_lock)->rlock --> &(&base->lock)->rlock --> &(&zone->lock)->rlock
> [  132.379262]
> [  132.379262]  Possible unsafe locking scenario:
> [  132.379262]
> [  132.379263]        CPU0                    CPU1
> [  132.379263]        ----                    ----
> [  132.379264]   lock(&(&zone->lock)->rlock);
> [  132.379265]                                lock(&(&base->lock)->rlock);
> [  132.379266]                                lock(&(&zone->lock)->rlock);
> [  132.379267]   lock(&(&sclp_con_lock)->rlock);
> [  132.379268]
> [  132.379268]  *** DEADLOCK ***
> [  132.379269]
> [  132.379269] 10 locks held by sh/708:
> [  132.379269]  #0:  (sb_writers#4){.+.+.+}, at: [<0000000000345d4a>] vfs_write+0xa2/0x1a8
> [  132.379272]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003e5e60>] kernfs_fop_write+0xd8/0x1d0
> [  132.379273]  #2:  (s_active#180){.+.+.+}, at: [<00000000003e5e6c>] kernfs_fop_write+0xe4/0x1d0
> [  132.379275]  #3:  (device_hotplug_lock){+.+...}, at: [<000000000069bb58>] lock_device_hotplug_sysfs+0x30/0x68
> [  132.379277]  #4:  (memory_add_remove_lock){+.+...}, at: [<000000000031cfe6>] mem_hotplug_begin+0x3e/0xd0
> [  132.379279]  #5:  (mem_hotplug.lock){++++.+}, at: [<000000000031cfa8>] mem_hotplug_begin+0x0/0xd0
> [  132.379281]  #6:  (mem_hotplug.lock#2){+.+...}, at: [<000000000031d02c>] mem_hotplug_begin+0x84/0xd0
> [  132.379283]  #7:  (&dev->mutex){......}, at: [<000000000069d55c>] device_offline+0x5c/0xd8
> [  132.379285]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
> [  132.379287]  #9:  (console_lock){+.+...}, at: [<00000000001bdc02>] vprintk_emit+0x332/0x350

Is there a stack trace of where the lockdep dump happened? That is
useful too. Otherwise we don't see where the inverse happened.

-- Steve

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-24 16:39 ` Steven Rostedt
@ 2017-03-24 16:57   ` Sebastian Ott
  2017-03-25  0:00   ` Sergey Senozhatsky
  1 sibling, 0 replies; 18+ messages in thread
From: Sebastian Ott @ 2017-03-24 16:57 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Sergey Senozhatsky, Petr Mladek, Heiko Carstens, linux-kernel

On Fri, 24 Mar 2017, Steven Rostedt wrote:
> Is there a stack trace of where the lockdep dump happened? That is
> useful too. Otherwise we don't see where the inverse happened.

Sure. Here you go.

[  132.379220] ======================================================
[  132.379220] [ INFO: possible circular locking dependency detected ]
[  132.379221] 4.11.0-rc3 #330 Not tainted
[  132.379221] -------------------------------------------------------
[  132.379222] sh/708 is trying to acquire lock:
[  132.379222]  (&(&sclp_con_lock)->rlock){-.-...}, at: [<000000000074524a>] sclp_console_write+0x4a/0x2b8
[  132.379224] 
[  132.379224] but task is already holding lock:
[  132.379224]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
[  132.379226] 
[  132.379227] which lock already depends on the new lock.
[  132.379227] 
[  132.379227] 
[  132.379228] the existing dependency chain (in reverse order) is:
[  132.379228] 
[  132.379229] -> #2 (&(&zone->lock)->rlock){..-...}:
[  132.379230]        validate_chain.isra.22+0xb36/0xd18
[  132.379231]        __lock_acquire+0x650/0x880
[  132.379231]        lock_acquire+0x24e/0x2b0
[  132.379232]        _raw_spin_lock_irqsave+0x70/0xb8
[  132.379232]        get_page_from_freelist+0x548/0xf30
[  132.379233]        __alloc_pages_nodemask+0x1c8/0x14c0
[  132.379233]        allocate_slab+0xde/0x668
[  132.379233]        new_slab+0x94/0xa8
[  132.379234]        ___slab_alloc.constprop.66+0x556/0x578
[  132.379234]        __slab_alloc.isra.62.constprop.65+0x74/0xa8
[  132.379235]        kmem_cache_alloc+0x136/0x4b8
[  132.379235]        __debug_object_init+0xaa/0x448
[  132.379236]        debug_object_activate+0x182/0x238
[  132.379236]        mod_timer+0xe6/0x450
[  132.379236]        prandom_reseed+0x44/0x50
[  132.379237]        do_one_initcall+0xa2/0x150
[  132.379237]        kernel_init_freeable+0x228/0x2d8
[  132.379238]        kernel_init+0x2a/0x138
[  132.379238]        kernel_thread_starter+0x6/0xc
[  132.379239]        kernel_thread_starter+0x0/0xc
[  132.379239] 
[  132.379239] -> #1 (&(&base->lock)->rlock){-.-.-.}:
[  132.379241]        validate_chain.isra.22+0xb36/0xd18
[  132.379242]        __lock_acquire+0x650/0x880
[  132.379242]        lock_acquire+0x24e/0x2b0
[  132.379242]        _raw_spin_lock_irqsave+0x70/0xb8
[  132.379243]        lock_timer_base+0x78/0xa8
[  132.379243]        mod_timer+0xba/0x450
[  132.379244]        sclp_console_write+0x262/0x2b8
[  132.379244]        console_unlock+0x4a6/0x658
[  132.379245]        register_console+0x31c/0x430
[  132.379245]        sclp_console_init+0x152/0x170
[  132.379245]        console_init+0x3a/0x58
[  132.379246]        start_kernel+0x350/0x480
[  132.379246]        _stext+0x20/0x80
[  132.379246] 
[  132.379247] -> #0 (&(&sclp_con_lock)->rlock){-.-...}:
[  132.379249]        check_prev_add+0x150/0x648
[  132.379249]        validate_chain.isra.22+0xb36/0xd18
[  132.379249]        __lock_acquire+0x650/0x880
[  132.379250]        lock_acquire+0x24e/0x2b0
[  132.379250]        _raw_spin_lock_irqsave+0x70/0xb8
[  132.379251]        sclp_console_write+0x4a/0x2b8
[  132.379251]        console_unlock+0x4a6/0x658
[  132.379252]        vprintk_emit+0x33e/0x350
[  132.379252]        vprintk_default+0x44/0x58
[  132.379252]        printk+0x4e/0x58
[  132.379253]        __offline_isolated_pages+0x1a0/0x340
[  132.379253]        offline_isolated_pages_cb+0x2e/0x40
[  132.379254]        walk_system_ram_range+0x96/0xe8
[  132.379254]        __offline_pages.constprop.43+0x6da/0x918
[  132.379255]        memory_subsys_offline+0x6a/0xa0
[  132.379255]        device_offline+0x84/0xd8
[  132.379255]        store_mem_state+0xfe/0x120
[  132.379256]        kernfs_fop_write+0x126/0x1d0
[  132.379256]        __vfs_write+0x46/0x140
[  132.379257]        vfs_write+0xb8/0x1a8
[  132.379257]        SyS_write+0x66/0xc0
[  132.379257]        system_call+0xc4/0x240
[  132.379258] 
[  132.379258] other info that might help us debug this:
[  132.379258] 
[  132.379259] Chain exists of:
[  132.379259]   &(&sclp_con_lock)->rlock --> &(&base->lock)->rlock --> &(&zone->lock)->rlock
[  132.379262] 
[  132.379262]  Possible unsafe locking scenario:
[  132.379262] 
[  132.379263]        CPU0                    CPU1
[  132.379263]        ----                    ----
[  132.379264]   lock(&(&zone->lock)->rlock);
[  132.379265]                                lock(&(&base->lock)->rlock);
[  132.379266]                                lock(&(&zone->lock)->rlock);
[  132.379267]   lock(&(&sclp_con_lock)->rlock);
[  132.379268] 
[  132.379268]  *** DEADLOCK ***
[  132.379269] 
[  132.379269] 10 locks held by sh/708:
[  132.379269]  #0:  (sb_writers#4){.+.+.+}, at: [<0000000000345d4a>] vfs_write+0xa2/0x1a8
[  132.379272]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003e5e60>] kernfs_fop_write+0xd8/0x1d0
[  132.379273]  #2:  (s_active#180){.+.+.+}, at: [<00000000003e5e6c>] kernfs_fop_write+0xe4/0x1d0
[  132.379275]  #3:  (device_hotplug_lock){+.+...}, at: [<000000000069bb58>] lock_device_hotplug_sysfs+0x30/0x68
[  132.379277]  #4:  (memory_add_remove_lock){+.+...}, at: [<000000000031cfe6>] mem_hotplug_begin+0x3e/0xd0
[  132.379279]  #5:  (mem_hotplug.lock){++++.+}, at: [<000000000031cfa8>] mem_hotplug_begin+0x0/0xd0
[  132.379281]  #6:  (mem_hotplug.lock#2){+.+...}, at: [<000000000031d02c>] mem_hotplug_begin+0x84/0xd0
[  132.379283]  #7:  (&dev->mutex){......}, at: [<000000000069d55c>] device_offline+0x5c/0xd8
[  132.379285]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002a65a8>] __offline_isolated_pages+0xe0/0x340
[  132.379287]  #9:  (console_lock){+.+...}, at: [<00000000001bdc02>] vprintk_emit+0x332/0x350
[  132.379289] 
[  132.379289] stack backtrace:
[  132.379290] CPU: 1 PID: 708 Comm: sh Not tainted 4.11.0-rc3 #330
[  132.379290] Hardware name: IBM              2827 H66              703              (LPAR)
[  132.379290] Stack:
[  132.379291]        000000006f5ab458 000000006f5ab4e8 0000000000000003 0000000000000000
[  132.379293]        000000006f5ab588 000000006f5ab500 000000006f5ab500 0000000000000020
[  132.379294]        0000000000929180 000000000000000a 0000000000000020 000000000000000a
[  132.379296]        000000000000000c 000000006f5ab550 0000000000000000 0000000000000000
[  132.379298]        04000000016e0b18 0000000000111da2 000000006f5ab4e8 000000006f5ab540
[  132.379300] Call Trace:
[  132.379300] ([<0000000000111c86>] show_trace+0x8e/0xe0)
[  132.379301]  [<0000000000111d58>] show_stack+0x80/0xd8 
[  132.379301]  [<00000000005ff656>] dump_stack+0x96/0xd8 
[  132.379302]  [<0000000000291572>] print_circular_bug+0x2f2/0x308 
[  132.379302]  [<00000000001a6b98>] check_prev_add+0x150/0x648 
[  132.379303]  [<00000000001a7bc6>] validate_chain.isra.22+0xb36/0xd18 
[  132.379303]  [<00000000001a9240>] __lock_acquire+0x650/0x880 
[  132.379304]  [<00000000001a9bee>] lock_acquire+0x24e/0x2b0 
[  132.379304]  [<00000000008dcab0>] _raw_spin_lock_irqsave+0x70/0xb8 
[  132.379304]  [<000000000074524a>] sclp_console_write+0x4a/0x2b8 
[  132.379305]  [<00000000001bd71e>] console_unlock+0x4a6/0x658 
[  132.379305]  [<00000000001bdc0e>] vprintk_emit+0x33e/0x350 
[  132.379306]  [<00000000001bddec>] vprintk_default+0x44/0x58 
[  132.379306]  [<0000000000291c8e>] printk+0x4e/0x58 
[  132.379307]  [<00000000002a6668>] __offline_isolated_pages+0x1a0/0x340 
[  132.379307]  [<000000000031cbbe>] offline_isolated_pages_cb+0x2e/0x40 
[  132.379308]  [<0000000000147466>] walk_system_ram_range+0x96/0xe8 
[  132.379308]  [<00000000008d2bba>] __offline_pages.constprop.43+0x6da/0x918 
[  132.379309]  [<00000000006b9b2a>] memory_subsys_offline+0x6a/0xa0 
[  132.379309]  [<000000000069d584>] device_offline+0x84/0xd8 
[  132.379310]  [<00000000006ba146>] store_mem_state+0xfe/0x120 
[  132.379310]  [<00000000003e5eae>] kernfs_fop_write+0x126/0x1d0 
[  132.379311]  [<0000000000344b0e>] __vfs_write+0x46/0x140 
[  132.379311]  [<0000000000345d60>] vfs_write+0xb8/0x1a8 
[  132.379312]  [<000000000034742e>] SyS_write+0x66/0xc0 
[  132.379312]  [<00000000008dda2c>] system_call+0xc4/0x240 
[  132.379313] INFO: lockdep is turned off.




[  377.096545] ======================================================
[  377.096545] [ INFO: possible circular locking dependency detected ]
[  377.096546] 4.11.0-rc2-00238-ga722844 #120 Not tainted
[  377.096546] -------------------------------------------------------
[  377.096547] sh/848 is trying to acquire lock:
[  377.096547]  ((console_sem).lock){-.....}, at: [<00000000001a594e>] down_trylock+0x2e/0x68
[  377.096549] but task is already holding lock:
[  377.096550]  (&(&zone->lock)->rlock){..-...}, at: [<00000000002ae3da>] __offline_isolated_pages+0x302/0x370
[  377.096552] which lock already depends on the new lock.
[  377.096553] the existing dependency chain (in reverse order) is:

[  377.096554] -> #3 (&(&zone->lock)->rlock){..-...}:
[  377.096556]        validate_chain.isra.10+0xb7a/0xda8
[  377.096557]        __lock_acquire+0x62c/0x850
[  377.096557]        lock_acquire+0x254/0x2b8
[  377.096558]        _raw_spin_lock_irqsave+0x70/0xb8
[  377.096558]        get_page_from_freelist+0x4e2/0xf28
[  377.096558]        __alloc_pages_nodemask+0x1fa/0x1528
[  377.096559]        allocate_slab+0xf2/0x6c0
[  377.096559]        new_slab+0x94/0xa8
[  377.096560]        ___slab_alloc.constprop.22+0x570/0x590
[  377.096560]        __slab_alloc.isra.16.constprop.21+0x74/0xa8
[  377.096561]        kmem_cache_alloc+0x13c/0x4b0
[  377.096561]        __debug_object_init+0x5c/0x468
[  377.096561]        hrtimer_init+0x42/0x1d8
[  377.096562]        init_dl_task_timer+0x3a/0x58
[  377.096562]        __sched_fork.isra.5+0x7e/0xe8
[  377.096563]        init_idle+0x7a/0x278
[  377.096563]        fork_idle+0xa4/0xb8
[  377.096564]        idle_threads_init+0x64/0xc8
[  377.096564]        smp_init+0x2e/0x110
[  377.096565]        kernel_init_freeable+0x16c/0x2e0
[  377.096565]        kernel_init+0x2a/0x148
[  377.096565]        kernel_thread_starter+0x6/0xc
[  377.096566]        kernel_thread_starter+0x0/0xc

[  377.096567] -> #2 (&rq->lock){-.-.-.}:
[  377.096568]        validate_chain.isra.10+0xb7a/0xda8
[  377.096569]        __lock_acquire+0x62c/0x850
[  377.096569]        lock_acquire+0x254/0x2b8
[  377.096569]        _raw_spin_lock+0x60/0xa0
[  377.096570]        task_fork_fair+0x54/0x118
[  377.096570]        sched_fork+0x13e/0x2a0
[  377.096571]        copy_process+0x642/0x1e80
[  377.096571]        _do_fork+0xc2/0x6d0
[  377.096571]        kernel_thread+0x4e/0x60
[  377.096572]        rest_init+0x42/0x170
[  377.096572]        start_kernel+0x464/0x478
[  377.096572]        _stext+0x20/0x80

[  377.096573] -> #1 (&p->pi_lock){-.-.-.}:
[  377.096574]        validate_chain.isra.10+0xb7a/0xda8
[  377.096575]        __lock_acquire+0x62c/0x850
[  377.096575]        lock_acquire+0x254/0x2b8
[  377.096576]        _raw_spin_lock_irqsave+0x70/0xb8
[  377.096576]        try_to_wake_up+0x4a/0x5f8
[  377.096576]        up+0x58/0x70
[  377.096577]        __up_console_sem+0x5a/0x90
[  377.096577]        console_unlock+0x610/0x670
[  377.096578]        vprintk_emit+0x308/0x378
[  377.096578]        dev_vprintk_emit+0x1e6/0x200
[  377.096578]        dev_printk_emit+0x4e/0x60
[  377.096579]        __dev_printk+0x8e/0xb0
[  377.096579]        dev_warn+0x68/0x78
[  377.096579]        qeth_dev_portname_store+0x58/0x70
[  377.096580]        kernfs_fop_write+0x124/0x1c8
[  377.096580]        __vfs_write+0x36/0x140
[  377.096580]        vfs_write+0xb8/0x1a0
[  377.096581]        SyS_write+0x66/0xc0
[  377.096581]        system_call+0xc4/0x240

[  377.096582] -> #0 ((console_sem).lock){-.....}:
[  377.096583]        check_prev_add+0x160/0x6e8
[  377.096584]        validate_chain.isra.10+0xb7a/0xda8
[  377.096584]        __lock_acquire+0x62c/0x850
[  377.096584]        lock_acquire+0x254/0x2b8
[  377.096585]        _raw_spin_lock_irqsave+0x70/0xb8
[  377.096585]        down_trylock+0x2e/0x68
[  377.096586]        __down_trylock_console_sem+0x4a/0xc0
[  377.096586]        console_trylock+0x32/0xc8
[  377.096586]        vprintk_emit+0x2fc/0x378
[  377.096587]        vprintk_default+0x44/0x58
[  377.096587]        printk+0x4e/0x60
[  377.096587]        __offline_isolated_pages+0x168/0x370
[  377.096588]        offline_isolated_pages_cb+0x2e/0x40
[  377.096588]        walk_system_ram_range+0x92/0xf0
[  377.096589]        __offline_pages.constprop.9+0x74a/0x988
[  377.096589]        memory_subsys_offline+0x6c/0xa0
[  377.096589]        device_offline+0x84/0xe0
[  377.096590]        store_mem_state+0xfe/0x120
[  377.096590]        kernfs_fop_write+0x124/0x1c8
[  377.096590]        __vfs_write+0x36/0x140
[  377.096591]        vfs_write+0xb8/0x1a0
[  377.096591]        SyS_write+0x66/0xc0
[  377.096592]        system_call+0xc4/0x240

[  377.096592] other info that might help us debug this:

[  377.096593] Chain exists of:
[  377.096593]   (console_sem).lock --> &rq->lock --> &(&zone->lock)->rlock

[  377.096595]  Possible unsafe locking scenario:

[  377.096596]        CPU0                    CPU1
[  377.096596]        ----                    ----
[  377.096597]   lock(&(&zone->lock)->rlock);
[  377.096598]                                lock(&rq->lock);
[  377.096599]                                lock(&(&zone->lock)->rlock);
[  377.096600]   lock((console_sem).lock);

[  377.096601]  *** DEADLOCK ***

[  377.096601] 9 locks held by sh/848:
[  377.096602]  #0:  (sb_writers#5){.+.+.+}, at: [<000000000034f9c2>] vfs_write+0xa2/0x1a0
[  377.096604]  #1:  (&of->mutex){+.+.+.}, at: [<00000000003f1afe>] kernfs_fop_write+0xd6/0x1c8
[  377.096605]  #2:  (s_active#51){.+.+.+}, at: [<00000000003f1b0a>] kernfs_fop_write+0xe2/0x1c8
[  377.096607]  #3:  (device_hotplug_lock){+.+.+.}, at: [<00000000006adb70>] lock_device_hotplug_sysfs+0x30/0x70
[  377.096609]  #4:  (memory_add_remove_lock){+.+.+.}, at: [<0000000000328e16>] mem_hotplug_begin+0x3e/0xd0
[  377.096610]  #5:  (mem_hotplug.lock){++++++}, at: [<0000000000328dd8>] mem_hotplug_begin+0x0/0xd0
[  377.096612]  #6:  (mem_hotplug.lock#2){+.+.+.}, at: [<0000000000328e5c>] mem_hotplug_begin+0x84/0xd0
[  377.096614]  #7:  (&dev->mutex){......}, at: [<00000000006af41c>] device_offline+0x5c/0xe0
[  377.096615]  #8:  (&(&zone->lock)->rlock){..-...}, at: [<00000000002ae3da>] __offline_isolated_pages+0x302/0x370

[  377.096617] stack backtrace:
[  377.096618] CPU: 0 PID: 848 Comm: sh Not tainted 4.11.0-rc2-00238-ga722844 #120
[  377.096618] Hardware name: IBM              2827 H66              703              (z/VM)
[  377.096619] Stack:
[  377.096619]        000000003ed0f450 000000003ed0f4e0 0000000000000003 0000000000000000
[  377.096620]        000000003ed0f580 000000003ed0f4f8 000000003ed0f4f8 0000000000000020
[  377.096629]        00000000009441c0 0000000000000020 000000000000000a 000000000000000a
[  377.096631]        000000000000000c 000000003ed0f548 0000000000000000 0000000000000000
[  377.096633]        04000000016fa078 0000000000112338 000000003ed0f4e0 000000003ed0f538
[  377.096635] Call Trace:
[  377.096635] ([<0000000000112212>] show_trace+0x8a/0xe0)
[  377.096636]  [<00000000001122e8>] show_stack+0x80/0xd8 
[  377.096636]  [<000000000060f5a6>] dump_stack+0x96/0xd8 
[  377.096637]  [<00000000001a9d3c>] print_circular_bug+0x314/0x340 
[  377.096637]  [<00000000001aacc0>] check_prev_add+0x160/0x6e8 
[  377.096638]  [<00000000001abdc2>] validate_chain.isra.10+0xb7a/0xda8 
[  377.096638]  [<00000000001ad7dc>] __lock_acquire+0x62c/0x850 
[  377.096639]  [<00000000001ae20c>] lock_acquire+0x254/0x2b8 
[  377.096639]  [<00000000008f63b8>] _raw_spin_lock_irqsave+0x70/0xb8 
[  377.096639]  [<00000000001a594e>] down_trylock+0x2e/0x68 
[  377.096640]  [<00000000001c1262>] __down_trylock_console_sem+0x4a/0xc0 
[  377.096641]  [<00000000001c130a>] console_trylock+0x32/0xc8 
[  377.096641]  [<00000000001c2c84>] vprintk_emit+0x2fc/0x378 
[  377.096641]  [<00000000001c2edc>] vprintk_default+0x44/0x58 
[  377.096642]  [<000000000029a24e>] printk+0x4e/0x60 
[  377.096642]  [<00000000002ae240>] __offline_isolated_pages+0x168/0x370 
[  377.096643]  [<00000000003289d6>] offline_isolated_pages_cb+0x2e/0x40 
[  377.096643]  [<00000000001492fa>] walk_system_ram_range+0x92/0xf0 
[  377.096644]  [<00000000008ec1fa>] __offline_pages.constprop.9+0x74a/0x988 
[  377.096644]  [<00000000006cc9bc>] memory_subsys_offline+0x6c/0xa0 
[  377.096645]  [<00000000006af444>] device_offline+0x84/0xe0 
[  377.096645]  [<00000000006cd0ae>] store_mem_state+0xfe/0x120 
[  377.096645]  [<00000000003f1b4c>] kernfs_fop_write+0x124/0x1c8 
[  377.096646]  [<000000000034e736>] __vfs_write+0x36/0x140 
[  377.096646]  [<000000000034f9d8>] vfs_write+0xb8/0x1a0 
[  377.096647]  [<000000000035110e>] SyS_write+0x66/0xc0 
[  377.096647]  [<00000000008f74ac>] system_call+0xc4/0x240 
[  377.096648] INFO: lockdep is turned off.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-24 16:39 ` Steven Rostedt
  2017-03-24 16:57   ` Sebastian Ott
@ 2017-03-25  0:00   ` Sergey Senozhatsky
  2017-03-25  1:00     ` Steven Rostedt
  1 sibling, 1 reply; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-03-25  0:00 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Sebastian Ott, Sergey Senozhatsky, Petr Mladek, Heiko Carstens,
	linux-kernel

Hello,

On (03/24/17 12:39), Steven Rostedt wrote:
[..]
> Is there a stack trace of where the lockdep dump happened? That is
> useful too. Otherwise we don't see where the inverse happened.

Steven, isn't it the inversion I describe in [1] (after the first lockdep
warning)?

[1] lkml.kernel.org/r/20170321044421.GB448@jagdpanzerIV.localdomain

	-ss

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-21  4:44 ` Sergey Senozhatsky
  2017-03-21  5:04   ` Sergey Senozhatsky
@ 2017-03-25  0:04   ` Sergey Senozhatsky
  2017-03-25  1:08     ` Steven Rostedt
                       ` (2 more replies)
  2017-07-24 12:46   ` Sebastian Ott
  2 siblings, 3 replies; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-03-25  0:04 UTC (permalink / raw)
  To: Sebastian Ott
  Cc: Petr Mladek, Steven Rostedt, Andrew Morton, Thomas Gleixner,
	Peter Zijlstra, Linus Torvalds, Michal Hocko, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky,
	Sergey Senozhatsky

On (03/21/17 13:44), Sergey Senozhatsky wrote:
[..]
> so we probably can
> 
> 
> 1) move pr_info() out of zone->lock in __offline_isolated_pages().
>    meh...
> 
> 
> 2) switch to printk_deferred() in __offline_isolated_pages().
>    meh.. there might a bunch of other printks done from under zone->lock.
> 
> 
> 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
>    well, there can be other consoles that do something similar.
> 
> 
> 4) ... something smart.


Sebastian, does this change make lockdep happy?

it removes console drivers from the __offline_isolated_pages(). not the
best solution I can think of, but the simplest one.

---

 mm/page_alloc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f749b7ff7c50..eb61e6ab5f4f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
 		BUG_ON(!PageBuddy(page));
 		order = page_order(page);
 #ifdef CONFIG_DEBUG_VM
-		pr_info("remove from free list %lx %d %lx\n",
+		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
 			pfn, 1 << order, end_pfn);
 #endif
 		list_del(&page->lru);

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-25  0:00   ` Sergey Senozhatsky
@ 2017-03-25  1:00     ` Steven Rostedt
  0 siblings, 0 replies; 18+ messages in thread
From: Steven Rostedt @ 2017-03-25  1:00 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Sebastian Ott, Petr Mladek, Heiko Carstens, linux-kernel

On Sat, 25 Mar 2017 09:00:05 +0900
Sergey Senozhatsky <sergey.senozhatsky@gmail.com> wrote:

> Hello,
> 
> On (03/24/17 12:39), Steven Rostedt wrote:
> [..]
> > Is there a stack trace of where the lockdep dump happened? That is
> > useful too. Otherwise we don't see where the inverse happened.  
> 
> Steven, isn't it the inversion I describe in [1] (after the first lockdep
> warning)?
> 
> [1] lkml.kernel.org/r/20170321044421.GB448@jagdpanzerIV.localdomain
>

Yeah, I believe you are right. I just wanted to make sure. It's the
same backtrace as the "(&(&sclp_con_lock)->rlock){-.-...}:" dump, but I
wanted to make sure.

-- Steve

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-25  0:04   ` Sergey Senozhatsky
@ 2017-03-25  1:08     ` Steven Rostedt
  2017-03-25  1:37       ` Sergey Senozhatsky
  2017-03-25 10:59     ` Sebastian Ott
  2017-03-28 14:22     ` Michal Hocko
  2 siblings, 1 reply; 18+ messages in thread
From: Steven Rostedt @ 2017-03-25  1:08 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Sebastian Ott, Petr Mladek, Andrew Morton, Thomas Gleixner,
	Peter Zijlstra, Linus Torvalds, Michal Hocko, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

On Sat, 25 Mar 2017 09:04:42 +0900
Sergey Senozhatsky <sergey.senozhatsky@gmail.com> wrote:

> On (03/21/17 13:44), Sergey Senozhatsky wrote:
> [..]
> > so we probably can
> > 
> > 
> > 1) move pr_info() out of zone->lock in __offline_isolated_pages().
> >    meh...
> > 
> > 
> > 2) switch to printk_deferred() in __offline_isolated_pages().
> >    meh.. there might a bunch of other printks done from under zone->lock.
> > 
> > 
> > 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
> >    well, there can be other consoles that do something similar.
> > 
> > 
> > 4) ... something smart.  
> 
> 
> Sebastian, does this change make lockdep happy?
> 
> it removes console drivers from the __offline_isolated_pages(). not the
> best solution I can think of, but the simplest one.
> 
> ---
> 
>  mm/page_alloc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index f749b7ff7c50..eb61e6ab5f4f 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
>  		BUG_ON(!PageBuddy(page));
>  		order = page_order(page);
>  #ifdef CONFIG_DEBUG_VM
> -		pr_info("remove from free list %lx %d %lx\n",
> +		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
>  			pfn, 1 << order, end_pfn);
>  #endif
>  		list_del(&page->lru);


My fear is that this will trigger for any printk in page_alloc.c under
the zone lock.

-- Steve

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-25  1:08     ` Steven Rostedt
@ 2017-03-25  1:37       ` Sergey Senozhatsky
  0 siblings, 0 replies; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-03-25  1:37 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Sergey Senozhatsky, Sebastian Ott, Petr Mladek, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Michal Hocko,
	Heiko Carstens, Martin Schwidefsky, linux-kernel,
	Sergey Senozhatsky

On (03/24/17 21:08), Steven Rostedt wrote:
> > Sebastian, does this change make lockdep happy?
> > 
> > it removes console drivers from the __offline_isolated_pages(). not the
> > best solution I can think of, but the simplest one.
> > 
> > ---
> > 
> >  mm/page_alloc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index f749b7ff7c50..eb61e6ab5f4f 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
> >  		BUG_ON(!PageBuddy(page));
> >  		order = page_order(page);
> >  #ifdef CONFIG_DEBUG_VM
> > -		pr_info("remove from free list %lx %d %lx\n",
> > +		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
> >  			pfn, 1 << order, end_pfn);
> >  #endif
> >  		list_del(&page->lru);
> 
> 
> My fear is that this will trigger for any printk in page_alloc.c under
> the zone lock.

absolutely true.

I Cc'd debugobjects, mm and sclp_console maintainers because the
real (smart) solution to the problem is somewhere there.



another problem (not reported) is that we have conflicting dependencies
	mod_timer -> sclp_console
	sclp_console -> mod_timer

which can result in a deadlock:
	mod_timer -> debugobjects -> printk -> sclp_console -> mod_timer


this one, I think, can be addressed by switching to a printk_safe in debugobjects.


// I'm traveling now. there will be delays in replies, sorry.

	-ss

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-25  0:04   ` Sergey Senozhatsky
  2017-03-25  1:08     ` Steven Rostedt
@ 2017-03-25 10:59     ` Sebastian Ott
  2017-03-28 14:22     ` Michal Hocko
  2 siblings, 0 replies; 18+ messages in thread
From: Sebastian Ott @ 2017-03-25 10:59 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Petr Mladek, Steven Rostedt, Andrew Morton, Thomas Gleixner,
	Peter Zijlstra, Linus Torvalds, Michal Hocko, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

On Sat, 25 Mar 2017, Sergey Senozhatsky wrote:

> On (03/21/17 13:44), Sergey Senozhatsky wrote:
> [..]
> > so we probably can
> > 
> > 
> > 1) move pr_info() out of zone->lock in __offline_isolated_pages().
> >    meh...
> > 
> > 
> > 2) switch to printk_deferred() in __offline_isolated_pages().
> >    meh.. there might a bunch of other printks done from under zone->lock.
> > 
> > 
> > 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
> >    well, there can be other consoles that do something similar.
> > 
> > 
> > 4) ... something smart.
> 
> 
> Sebastian, does this change make lockdep happy?
> 
> it removes console drivers from the __offline_isolated_pages(). not the
> best solution I can think of, but the simplest one.

It does. No complaint from lockdep.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-25  0:04   ` Sergey Senozhatsky
  2017-03-25  1:08     ` Steven Rostedt
  2017-03-25 10:59     ` Sebastian Ott
@ 2017-03-28 14:22     ` Michal Hocko
  2017-03-28 16:00       ` Petr Mladek
  2017-03-30  3:59       ` Sergey Senozhatsky
  2 siblings, 2 replies; 18+ messages in thread
From: Michal Hocko @ 2017-03-28 14:22 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Sebastian Ott, Petr Mladek, Steven Rostedt, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

On Sat 25-03-17 09:04:42, Sergey Senozhatsky wrote:
> On (03/21/17 13:44), Sergey Senozhatsky wrote:
> [..]
> > so we probably can
> > 
> > 
> > 1) move pr_info() out of zone->lock in __offline_isolated_pages().
> >    meh...
> > 
> > 
> > 2) switch to printk_deferred() in __offline_isolated_pages().
> >    meh.. there might a bunch of other printks done from under zone->lock.
> > 
> > 
> > 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
> >    well, there can be other consoles that do something similar.
> > 
> > 
> > 4) ... something smart.
> 
> 
> Sebastian, does this change make lockdep happy?
> 
> it removes console drivers from the __offline_isolated_pages(). not the
> best solution I can think of, but the simplest one.
> 
> ---
> 
>  mm/page_alloc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index f749b7ff7c50..eb61e6ab5f4f 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
>  		BUG_ON(!PageBuddy(page));
>  		order = page_order(page);
>  #ifdef CONFIG_DEBUG_VM
> -		pr_info("remove from free list %lx %d %lx\n",
> +		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
>  			pfn, 1 << order, end_pfn);
>  #endif
>  		list_del(&page->lru);

I believe this is not a proper fix. Although this code is ugly and maybe
it doesn't really need zone->lock because that should be the page
allocator internal thing the problem is that printk shouldn't impose
such a subtle dependency on locks. Why does the timer needs to allocate
at all?

-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-28 14:22     ` Michal Hocko
@ 2017-03-28 16:00       ` Petr Mladek
  2017-03-29  7:31         ` Michal Hocko
  2017-03-30  3:59       ` Sergey Senozhatsky
  1 sibling, 1 reply; 18+ messages in thread
From: Petr Mladek @ 2017-03-28 16:00 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Sergey Senozhatsky, Sebastian Ott, Steven Rostedt, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

On Tue 2017-03-28 16:22:27, Michal Hocko wrote:
> On Sat 25-03-17 09:04:42, Sergey Senozhatsky wrote:
> > On (03/21/17 13:44), Sergey Senozhatsky wrote:
> > [..]
> > > so we probably can
> > > 
> > > 
> > > 1) move pr_info() out of zone->lock in __offline_isolated_pages().
> > >    meh...
> > > 
> > > 
> > > 2) switch to printk_deferred() in __offline_isolated_pages().
> > >    meh.. there might a bunch of other printks done from under zone->lock.
> > > 
> > > 
> > > 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
> > >    well, there can be other consoles that do something similar.
> > > 
> > > 
> > > 4) ... something smart.
> > 
> > 
> > Sebastian, does this change make lockdep happy?
> > 
> > it removes console drivers from the __offline_isolated_pages(). not the
> > best solution I can think of, but the simplest one.
> > 
> > ---
> > 
> >  mm/page_alloc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index f749b7ff7c50..eb61e6ab5f4f 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
> >  		BUG_ON(!PageBuddy(page));
> >  		order = page_order(page);
> >  #ifdef CONFIG_DEBUG_VM
> > -		pr_info("remove from free list %lx %d %lx\n",
> > +		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
> >  			pfn, 1 << order, end_pfn);
> >  #endif
> >  		list_del(&page->lru);
> 
> I believe this is not a proper fix. Although this code is ugly and maybe
> it doesn't really need zone->lock because that should be the page
> allocator internal thing the problem is that printk shouldn't impose
> such a subtle dependency on locks. Why does the timer needs to allocate
> at all?

printk/console use timers to postpone flushing of buffers. There are
often more consequent printks. The code wants to wait a bit and flush
them together eventually. At the same time, it wants to set a deadline
for the flushing. It makes sure that they will get flushed in a
reasonable time even when the buffer is not full. It is questionable
but it makes some sense.

In each case, the timer code is used also by scheduler and we probably
need to use scheduler from printk.


Regarding the timer code. The problem seems to be with static
timers. They call debug_object_init() when the timer is used
for the first time. See the special handling of not-found
objects in debug_object_activate().

Now, __debug_object_init() calls fill_pool() that allocates
the memory. A solution would be to either use static
struct kmem_cache for statically defined timers and
avoid the allocation. Or we should call fill_pool()
asynchronously from a safe context.

What do you think?

Best Regards,
Petr

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-28 16:00       ` Petr Mladek
@ 2017-03-29  7:31         ` Michal Hocko
  2017-03-30  9:45           ` Petr Mladek
  0 siblings, 1 reply; 18+ messages in thread
From: Michal Hocko @ 2017-03-29  7:31 UTC (permalink / raw)
  To: Petr Mladek
  Cc: Sergey Senozhatsky, Sebastian Ott, Steven Rostedt, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

On Tue 28-03-17 18:00:16, Petr Mladek wrote:
> On Tue 2017-03-28 16:22:27, Michal Hocko wrote:
> > On Sat 25-03-17 09:04:42, Sergey Senozhatsky wrote:
> > > On (03/21/17 13:44), Sergey Senozhatsky wrote:
> > > [..]
> > > > so we probably can
> > > > 
> > > > 
> > > > 1) move pr_info() out of zone->lock in __offline_isolated_pages().
> > > >    meh...
> > > > 
> > > > 
> > > > 2) switch to printk_deferred() in __offline_isolated_pages().
> > > >    meh.. there might a bunch of other printks done from under zone->lock.
> > > > 
> > > > 
> > > > 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
> > > >    well, there can be other consoles that do something similar.
> > > > 
> > > > 
> > > > 4) ... something smart.
> > > 
> > > 
> > > Sebastian, does this change make lockdep happy?
> > > 
> > > it removes console drivers from the __offline_isolated_pages(). not the
> > > best solution I can think of, but the simplest one.
> > > 
> > > ---
> > > 
> > >  mm/page_alloc.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > > index f749b7ff7c50..eb61e6ab5f4f 100644
> > > --- a/mm/page_alloc.c
> > > +++ b/mm/page_alloc.c
> > > @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
> > >  		BUG_ON(!PageBuddy(page));
> > >  		order = page_order(page);
> > >  #ifdef CONFIG_DEBUG_VM
> > > -		pr_info("remove from free list %lx %d %lx\n",
> > > +		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
> > >  			pfn, 1 << order, end_pfn);
> > >  #endif
> > >  		list_del(&page->lru);
> > 
> > I believe this is not a proper fix. Although this code is ugly and maybe
> > it doesn't really need zone->lock because that should be the page
> > allocator internal thing the problem is that printk shouldn't impose
> > such a subtle dependency on locks. Why does the timer needs to allocate
> > at all?
> 
> printk/console use timers to postpone flushing of buffers. There are
> often more consequent printks. The code wants to wait a bit and flush
> them together eventually. At the same time, it wants to set a deadline
> for the flushing. It makes sure that they will get flushed in a
> reasonable time even when the buffer is not full. It is questionable
> but it makes some sense.
> 
> In each case, the timer code is used also by scheduler and we probably
> need to use scheduler from printk.
> 
> Regarding the timer code. The problem seems to be with static
> timers. They call debug_object_init() when the timer is used
> for the first time. See the special handling of not-found
> objects in debug_object_activate().

Thanks for the clarification!

> Now, __debug_object_init() calls fill_pool() that allocates
> the memory. A solution would be to either use static
> struct kmem_cache

I am not sure what do you mean by that.

> for statically defined timers and avoid the allocation. Or we should
> call fill_pool() asynchronously from a safe context.

I think we should avoid the allocation completely. It is GFP_ATOMIC and
so likely to fail under heavy memory pressure. Async fill will make it
slightly more complicated but still unreliable.
 
> What do you think?

Why cannot we simply embed this debugging data into the timer itself?
It will make the structure larger (I didn't check how much) but this is
an opt in feature so it should be acceptable.

A subtle dependecny on the allocator is really bad and we should get rid
of it.
-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-28 14:22     ` Michal Hocko
  2017-03-28 16:00       ` Petr Mladek
@ 2017-03-30  3:59       ` Sergey Senozhatsky
  1 sibling, 0 replies; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-03-30  3:59 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Sergey Senozhatsky, Sebastian Ott, Petr Mladek, Steven Rostedt,
	Andrew Morton, Thomas Gleixner, Peter Zijlstra, Linus Torvalds,
	Heiko Carstens, Martin Schwidefsky, linux-kernel,
	Sergey Senozhatsky

On (03/28/17 16:22), Michal Hocko wrote:
[..]
> > Sebastian, does this change make lockdep happy?
> > 
> > it removes console drivers from the __offline_isolated_pages(). not the
> > best solution I can think of, but the simplest one.
> > 
> > ---
> > 
> >  mm/page_alloc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> > index f749b7ff7c50..eb61e6ab5f4f 100644
> > --- a/mm/page_alloc.c
> > +++ b/mm/page_alloc.c
> > @@ -7705,7 +7705,7 @@ __offline_isolated_pages(unsigned long start_pfn, unsigned long end_pfn)
> >  		BUG_ON(!PageBuddy(page));
> >  		order = page_order(page);
> >  #ifdef CONFIG_DEBUG_VM
> > -		pr_info("remove from free list %lx %d %lx\n",
> > +		printk_deferred(KERN_INFO "remove from free list %lx %d %lx\n",
> >  			pfn, 1 << order, end_pfn);
> >  #endif
> >  		list_del(&page->lru);
> 
> I believe this is not a proper fix.

oh, absolutely. I hate it. didn't really propose it as a fix. mostly
did it just to verify that there are no other lock inversions behind
the one that has been reported (lockdep turns off itself when it
detects the first lock dependency inversion).

> Although this code is ugly and maybe it doesn't really need zone->lock
> because that should be the page allocator internal thing the problem is
> that printk shouldn't impose such a subtle dependency on locks. Why does
> the timer needs to allocate at all?

I believe Petr has answered your questions. sorry for the delay.

	-ss

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-29  7:31         ` Michal Hocko
@ 2017-03-30  9:45           ` Petr Mladek
  0 siblings, 0 replies; 18+ messages in thread
From: Petr Mladek @ 2017-03-30  9:45 UTC (permalink / raw)
  To: Michal Hocko
  Cc: Sergey Senozhatsky, Sebastian Ott, Steven Rostedt, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

On Wed 2017-03-29 09:31:47, Michal Hocko wrote:
> On Tue 28-03-17 18:00:16, Petr Mladek wrote:
> > On Tue 2017-03-28 16:22:27, Michal Hocko wrote:
> > > On Sat 25-03-17 09:04:42, Sergey Senozhatsky wrote:
> > > > On (03/21/17 13:44), Sergey Senozhatsky wrote:
> > > > [..]
> > > > > so we probably can
> > > > > 
> > > > > 
> > > > > 1) move pr_info() out of zone->lock in __offline_isolated_pages().
> > > > >    meh...
> > > > > 
> > > > > 
> > > > > 2) switch to printk_deferred() in __offline_isolated_pages().
> > > > >    meh.. there might a bunch of other printks done from under zone->lock.
> > > > > 
> > > > > 
> > > > > 3) move add_timer() out of sclp_con_lock console in sclp_console_write().
> > > > >    well, there can be other consoles that do something similar.
> > > > > 
> > > > > 
> > > > > 4) ... something smart.
> > > > 
> > > > 
> > Regarding the timer code. The problem seems to be with static
> > timers. They call debug_object_init() when the timer is used
> > for the first time. See the special handling of not-found
> > objects in debug_object_activate().
> 
> Thanks for the clarification!
> 
> > Now, __debug_object_init() calls fill_pool() that allocates
> > the memory. A solution would be to either use static
> > struct kmem_cache
> 
> I am not sure what do you mean by that.

The problem is when the timer is defined using
DEFINE_TIMER() and initialized using __TIMER_INITIALIZER().

I had an unclear idea about extending the macro to define
also the needed structure that might later be used by
debug_object_init() instead of taking it from the pool.

I am sorry for the confusion with struct kmem_cache.
It is the type of the pointer that is passed when
allocating the memory in fill_pool(). It seems
we actually need struct debug_obj. But it might
be even more complicated.


> > for statically defined timers and avoid the allocation. Or we should
> > call fill_pool() asynchronously from a safe context.
> 
> I think we should avoid the allocation completely. It is GFP_ATOMIC and
> so likely to fail under heavy memory pressure. Async fill will make it
> slightly more complicated but still unreliable.
>  
> > What do you think?
> 
> Why cannot we simply embed this debugging data into the timer itself?
> It will make the structure larger (I didn't check how much) but this is
> an opt in feature so it should be acceptable.

This sounds reasonable to me.

> A subtle dependecny on the allocator is really bad and
> we should get rid of it.

Yup.

Best Regards,
Petr

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-03-21  4:44 ` Sergey Senozhatsky
  2017-03-21  5:04   ` Sergey Senozhatsky
  2017-03-25  0:04   ` Sergey Senozhatsky
@ 2017-07-24 12:46   ` Sebastian Ott
  2017-07-24 13:32     ` Sergey Senozhatsky
  2 siblings, 1 reply; 18+ messages in thread
From: Sebastian Ott @ 2017-07-24 12:46 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: Petr Mladek, Steven Rostedt, Andrew Morton, Thomas Gleixner,
	Peter Zijlstra, Linus Torvalds, Michal Hocko, Heiko Carstens,
	Martin Schwidefsky, linux-kernel, Sergey Senozhatsky

Hello Sergey,

On Tue, 21 Mar 2017, Sergey Senozhatsky wrote:
> // I kept only lockdep splats from the original report and cut off .configs
> // full version:
> // lkml.kernel.org/r/alpine.LFD.2.20.1703201736070.1753@schleppi
>
> On (03/20/17 17:43), Sebastian Ott wrote:
> > Since commit f975237b7682 ("printk: use printk_safe buffers in printk")
> > I observe lockdep warnings on s390 when doing memory hotplug:

When using the sclp console I can no longer recreate that lockdep warning
but the other one is still present:

[  347.644660] ======================================================
[  347.644660] WARNING: possible circular locking dependency detected
[  347.644661] 4.13.0-rc2 #146 Not tainted
[  347.644661] ------------------------------------------------------
[  347.644662] sh/770 is trying to acquire lock:
[  347.644662]  (&console_sch_key){-.-...}, at: [<0000000000763d80>] raw3215_write+0x58/0x208
[  347.644665] but task is already holding lock:
[  347.644665]  (&(&zone->lock)->rlock){-.-...}, at: [<00000000002b693e>] __offline_isolated_pages+0x316/0x388
[  347.644668] which lock already depends on the new lock.
[  347.644669] the existing dependency chain (in reverse order) is:
[  347.644670] -> #4 (&(&zone->lock)->rlock){-.-...}:
[  347.644672]        validate_chain.isra.10+0xb56/0xd88
[  347.644673]        __lock_acquire+0x62c/0x850
[  347.644673]        lock_acquire+0x254/0x2b8
[  347.644674]        _raw_spin_lock_irqsave+0x70/0xb8
[  347.644674]        get_page_from_freelist+0x446/0xf30
[  347.644675]        __alloc_pages_nodemask+0x200/0x1568
[  347.644675]        allocate_slab+0xf0/0x658
[  347.644676]        new_slab+0x94/0xa8
[  347.644677]        ___slab_alloc.constprop.23+0x55e/0x580
[  347.644677]        __slab_alloc.isra.17.constprop.22+0x74/0xa8
[  347.644678]        kmem_cache_alloc+0x13c/0x4b0
[  347.644678]        __debug_object_init+0x5c/0x468
[  347.644679]        hrtimer_init+0x42/0x1d8
[  347.644679]        init_dl_task_timer+0x3a/0x58
[  347.644680]        __sched_fork.isra.2+0x82/0xd8
[  347.644680]        init_idle+0x7a/0x278
[  347.644681]        fork_idle+0xa4/0xb8
[  347.644681]        idle_threads_init+0x6a/0xd0
[  347.644682]        smp_init+0x34/0x110
[  347.644682]        kernel_init_freeable+0x166/0x2d8
[  347.644683]        kernel_init+0x2a/0x148
[  347.644683]        kernel_thread_starter+0x6/0xc
[  347.644684]        kernel_thread_starter+0x0/0xc

[  347.644684] -> #3 (&rq->lock){-.-.-.}:
[  347.644686]        validate_chain.isra.10+0xb56/0xd88
[  347.644687]        __lock_acquire+0x62c/0x850
[  347.644687]        lock_acquire+0x254/0x2b8
[  347.644688]        _raw_spin_lock+0x60/0xa0
[  347.644688]        task_fork_fair+0x6a/0x160
[  347.644689]        sched_fork+0x13e/0x2a0
[  347.644689]        copy_process+0x676/0x1ec0
[  347.644690]        _do_fork+0xc2/0x6d0
[  347.644690]        kernel_thread+0x4e/0x60
[  347.644691]        rest_init+0x48/0x290
[  347.644691]        start_kernel+0x470/0x480
[  347.644692]        _stext+0x20/0x80

[  347.644693] -> #2 (&p->pi_lock){-.-.-.}:
[  347.644695]        validate_chain.isra.10+0xb56/0xd88
[  347.644695]        __lock_acquire+0x62c/0x850
[  347.644696]        lock_acquire+0x254/0x2b8
[  347.644696]        _raw_spin_lock_irqsave+0x70/0xb8
[  347.644697]        try_to_wake_up+0x4a/0x600
[  347.644697]        autoremove_wake_function+0x2e/0x88
[  347.644698]        __wake_up_common+0x76/0xc0
[  347.644698]        __wake_up+0x54/0x68
[  347.644699]        ccw_device_verify_done+0xae/0x268
[  347.644700]        ccw_request_handler+0x422/0x560
[  347.644700]        do_cio_interrupt+0x224/0x2a0
[  347.644701]        __handle_irq_event_percpu+0x1a6/0x440
[  347.644701]        handle_irq_event_percpu+0x38/0x88
[  347.644702]        handle_percpu_irq+0x84/0xb0
[  347.644702]        generic_handle_irq+0x42/0x60
[  347.644703]        do_IRQ+0x86/0xc8
[  347.644703]        io_int_handler+0x104/0x2d4
[  347.644704]        enabled_wait+0x72/0x140
[  347.644704]        enabled_wait+0x5a/0x140
[  347.644705]        arch_cpu_idle+0x32/0x50
[  347.644706]        default_idle_call+0x52/0x68
[  347.644706]        do_idle+0x118/0x170
[  347.644707]        cpu_startup_entry+0x3e/0x48
[  347.644707]        smp_start_secondary+0x112/0x120
[  347.644708]        restart_int_handler+0x62/0x78
[  347.644708]                  (null)

[  347.644709] -> #1 (&priv->wait_q){-.....}:
[  347.644711]        validate_chain.isra.10+0xb56/0xd88
[  347.644711]        __lock_acquire+0x62c/0x850
[  347.644712]        lock_acquire+0x254/0x2b8
[  347.644712]        _raw_spin_lock_irqsave+0x70/0xb8
[  347.644713]        __wake_up+0x3a/0x68
[  347.644713]        ccw_device_recog_done+0x28e/0x2c8
[  347.644714]        snsid_callback+0x324/0x390
[  347.644714]        ccw_request_handler+0x480/0x560
[  347.644715]        do_cio_interrupt+0x224/0x2a0
[  347.644715]        __handle_irq_event_percpu+0x1a6/0x440
[  347.644715]        handle_irq_event_percpu+0x38/0x88
[  347.644716]        handle_percpu_irq+0x84/0xb0
[  347.644716]        generic_handle_irq+0x42/0x60
[  347.644717]        do_IRQ+0x86/0xc8
[  347.644717]        io_int_handler+0x104/0x2d4
[  347.644718]        _raw_spin_unlock_irq+0x4e/0x78
[  347.644718]        _raw_spin_unlock_irq+0x4a/0x78
[  347.644719]        ccw_device_enable_console+0xa0/0x188
[  347.644719]        con3215_init+0x116/0x1b8
[  347.644720]        console_init+0x40/0x60
[  347.644720]        start_kernel+0x34c/0x480
[  347.644720]        _stext+0x20/0x80

[  347.644721] -> #0 (&console_sch_key){-.-...}:
[  347.644723]        check_prev_add+0x160/0x6e8
[  347.644723]        validate_chain.isra.10+0xb56/0xd88
[  347.644723]        __lock_acquire+0x62c/0x850
[  347.644724]        lock_acquire+0x254/0x2b8
[  347.644724]        _raw_spin_lock_irqsave+0x70/0xb8
[  347.644725]        raw3215_write+0x58/0x208
[  347.644725]        con3215_write+0x8e/0xf8
[  347.644725]        console_unlock+0x4d8/0x6a8
[  347.644726]        vprintk_emit+0x308/0x378
[  347.644726]        vprintk_default+0x44/0x58
[  347.644727]        printk+0x4e/0x60
[  347.644727]        __offline_isolated_pages+0x16a/0x388
[  347.644728]        offline_isolated_pages_cb+0x2e/0x40
[  347.644728]        walk_system_ram_range+0x92/0xf0
[  347.644729]        __offline_pages.constprop.6+0x6d2/0x910
[  347.644729]        memory_subsys_offline+0x6c/0xa0
[  347.644730]        device_offline+0x84/0xe0
[  347.644730]        store_mem_state+0xfe/0x120
[  347.644731]        kernfs_fop_write+0x132/0x208
[  347.644731]        __vfs_write+0x36/0x158
[  347.644731]        vfs_write+0xb8/0x1a0
[  347.644732]        SyS_write+0x66/0xc0
[  347.644732]        system_call+0xc4/0x298
[  347.644733] other info that might help us debug this:
[  347.644734] Chain exists of:
[  347.644734]   &console_sch_key --> &rq->lock --> &(&zone->lock)->rlock
[  347.644736]  Possible unsafe locking scenario:
[  347.644737]        CPU0                    CPU1
[  347.644738]        ----                    ----
[  347.644738]   lock(&(&zone->lock)->rlock);
[  347.644739]                                lock(&rq->lock);
[  347.644740]                                lock(&(&zone->lock)->rlock);
[  347.644741]   lock(&console_sch_key);
[  347.644742]  *** DEADLOCK ***
[  347.644743] 9 locks held by sh/770:
[  347.644743]  #0:  (sb_writers#5){.+.+.+}, at: [<000000000035c64a>] vfs_write+0xa2/0x1a0
[  347.644745]  #1:  (&of->mutex){+.+.+.}, at: [<000000000040065a>] kernfs_fop_write+0x1b2/0x208
[  347.644747]  #2:  (s_active#46){.+.+.+}, at: [<0000000000400666>] kernfs_fop_write+0x1be/0x208
[  347.644749]  #3:  (device_hotplug_lock){+.+...}, at: [<00000000006b9d18>] lock_device_hotplug_sysfs+0x30/0x70
[  347.644750]  #4:  (cpu_hotplug_lock.rw_sem){++++++}, at: [<000000000033596a>] mem_hotplug_begin+0x2a/0x40
[  347.644752]  #5:  (mem_hotplug_lock.rw_sem){++++.+}, at: [<00000000001a5c78>] percpu_down_write+0x38/0x110
[  347.644754]  #6:  (&dev->mutex){......}, at: [<00000000006bb5ac>] device_offline+0x5c/0xe0
[  347.644756]  #7:  (&(&zone->lock)->rlock){-.-...}, at: [<00000000002b693e>] __offline_isolated_pages+0x316/0x388
[  347.644758]  #8:  (console_lock){+.+...}, at: [<00000000001c2a3c>] vprintk_emit+0x2fc/0x378
[  347.644760] stack backtrace:
[  347.644760] CPU: 2 PID: 770 Comm: sh Not tainted 4.13.0-rc2 #146
[  347.644761] Hardware name: IBM 2827 H66 706 (z/VM 6.3.0)
[  347.644761] Call Trace:
[  347.644761] ([<0000000000113a1a>] show_stack+0x8a/0xe0)
[  347.644762]  [<00000000008fe4a6>] dump_stack+0x96/0xd8 
[  347.644762]  [<00000000001a95c4>] print_circular_bug+0x314/0x340 
[  347.644763]  [<00000000001aa548>] check_prev_add+0x160/0x6e8 
[  347.644763]  [<00000000001ab626>] validate_chain.isra.10+0xb56/0xd88 
[  347.644764]  [<00000000001ad024>] __lock_acquire+0x62c/0x850 
[  347.644764]  [<00000000001adbec>] lock_acquire+0x254/0x2b8 
[  347.644765]  [<000000000091e4a8>] _raw_spin_lock_irqsave+0x70/0xb8 
[  347.644766]  [<0000000000763d80>] raw3215_write+0x58/0x208 
[  347.644766]  [<000000000076416e>] con3215_write+0x8e/0xf8 
[  347.644766]  [<00000000001c2570>] console_unlock+0x4d8/0x6a8 
[  347.644767]  [<00000000001c2a48>] vprintk_emit+0x308/0x378 
[  347.644767]  [<00000000001c2c94>] vprintk_default+0x44/0x58 
[  347.644768]  [<00000000001c3c0e>] printk+0x4e/0x60 
[  347.644768]  [<00000000002b6792>] __offline_isolated_pages+0x16a/0x388 
[  347.644769]  [<0000000000335516>] offline_isolated_pages_cb+0x2e/0x40 
[  347.644769]  [<000000000014b092>] walk_system_ram_range+0x92/0xf0 
[  347.644770]  [<0000000000913cfa>] __offline_pages.constprop.6+0x6d2/0x910 
[  347.644770]  [<00000000006d8cf4>] memory_subsys_offline+0x6c/0xa0 
[  347.644771]  [<00000000006bb5d4>] device_offline+0x84/0xe0 
[  347.644771]  [<00000000006d93de>] store_mem_state+0xfe/0x120 
[  347.644772]  [<00000000004005da>] kernfs_fop_write+0x132/0x208 
[  347.644773]  [<000000000035b236>] __vfs_write+0x36/0x158 
[  347.644773]  [<000000000035c660>] vfs_write+0xb8/0x1a0 
[  347.644774]  [<000000000035dd96>] SyS_write+0x66/0xc0 
[  347.644774]  [<000000000091f59c>] system_call+0xc4/0x298 
[  347.644774] INFO: lockdep is turned off.

Sebastian

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: lockdep warning: console vs. mem hotplug
  2017-07-24 12:46   ` Sebastian Ott
@ 2017-07-24 13:32     ` Sergey Senozhatsky
  0 siblings, 0 replies; 18+ messages in thread
From: Sergey Senozhatsky @ 2017-07-24 13:32 UTC (permalink / raw)
  To: Sebastian Ott
  Cc: Sergey Senozhatsky, Petr Mladek, Steven Rostedt, Andrew Morton,
	Thomas Gleixner, Peter Zijlstra, Linus Torvalds, Michal Hocko,
	Heiko Carstens, Martin Schwidefsky, linux-kernel,
	Sergey Senozhatsky

Hello,

On (07/24/17 14:46), Sebastian Ott wrote:
> [  347.644660] ======================================================
> [  347.644660] WARNING: possible circular locking dependency detected
> [  347.644661] 4.13.0-rc2 #146 Not tainted
> [  347.644661] ------------------------------------------------------
> [  347.644662] sh/770 is trying to acquire lock:
> [  347.644662]  (&console_sch_key){-.-...}, at: [<0000000000763d80>] raw3215_write+0x58/0x208
> [  347.644665] but task is already holding lock:
> [  347.644665]  (&(&zone->lock)->rlock){-.-...}, at: [<00000000002b693e>] __offline_isolated_pages+0x316/0x388
> [  347.644668] which lock already depends on the new lock.
> [  347.644669] the existing dependency chain (in reverse order) is:
> [  347.644670] -> #4 (&(&zone->lock)->rlock){-.-...}:
> [  347.644672]        validate_chain.isra.10+0xb56/0xd88
> [  347.644673]        __lock_acquire+0x62c/0x850
> [  347.644673]        lock_acquire+0x254/0x2b8
> [  347.644674]        _raw_spin_lock_irqsave+0x70/0xb8
> [  347.644674]        get_page_from_freelist+0x446/0xf30
> [  347.644675]        __alloc_pages_nodemask+0x200/0x1568
> [  347.644675]        allocate_slab+0xf0/0x658
> [  347.644676]        new_slab+0x94/0xa8
> [  347.644677]        ___slab_alloc.constprop.23+0x55e/0x580
> [  347.644677]        __slab_alloc.isra.17.constprop.22+0x74/0xa8
> [  347.644678]        kmem_cache_alloc+0x13c/0x4b0
> [  347.644678]        __debug_object_init+0x5c/0x468
> [  347.644679]        hrtimer_init+0x42/0x1d8
> [  347.644679]        init_dl_task_timer+0x3a/0x58
> [  347.644680]        __sched_fork.isra.2+0x82/0xd8
> [  347.644680]        init_idle+0x7a/0x278
> [  347.644681]        fork_idle+0xa4/0xb8
> [  347.644681]        idle_threads_init+0x6a/0xd0
> [  347.644682]        smp_init+0x34/0x110
> [  347.644682]        kernel_init_freeable+0x166/0x2d8
> [  347.644683]        kernel_init+0x2a/0x148
> [  347.644683]        kernel_thread_starter+0x6/0xc
> [  347.644684]        kernel_thread_starter+0x0/0xc
> 
> [  347.644684] -> #3 (&rq->lock){-.-.-.}:
> [  347.644686]        validate_chain.isra.10+0xb56/0xd88
> [  347.644687]        __lock_acquire+0x62c/0x850
> [  347.644687]        lock_acquire+0x254/0x2b8
> [  347.644688]        _raw_spin_lock+0x60/0xa0
> [  347.644688]        task_fork_fair+0x6a/0x160
> [  347.644689]        sched_fork+0x13e/0x2a0
> [  347.644689]        copy_process+0x676/0x1ec0
> [  347.644690]        _do_fork+0xc2/0x6d0
> [  347.644690]        kernel_thread+0x4e/0x60
> [  347.644691]        rest_init+0x48/0x290
> [  347.644691]        start_kernel+0x470/0x480
> [  347.644692]        _stext+0x20/0x80

ok... this part is not exactly clear to me, but we've got

	rq->lock    ->    &(&zone->lock)->rlock

dependency.

> [  347.644693] -> #2 (&p->pi_lock){-.-.-.}:
> [  347.644695]        validate_chain.isra.10+0xb56/0xd88
> [  347.644695]        __lock_acquire+0x62c/0x850
> [  347.644696]        lock_acquire+0x254/0x2b8
> [  347.644696]        _raw_spin_lock_irqsave+0x70/0xb8
> [  347.644697]        try_to_wake_up+0x4a/0x600
> [  347.644697]        autoremove_wake_function+0x2e/0x88
> [  347.644698]        __wake_up_common+0x76/0xc0
> [  347.644698]        __wake_up+0x54/0x68
> [  347.644699]        ccw_device_verify_done+0xae/0x268
> [  347.644700]        ccw_request_handler+0x422/0x560
> [  347.644700]        do_cio_interrupt+0x224/0x2a0
> [  347.644701]        __handle_irq_event_percpu+0x1a6/0x440
> [  347.644701]        handle_irq_event_percpu+0x38/0x88
> [  347.644702]        handle_percpu_irq+0x84/0xb0
> [  347.644702]        generic_handle_irq+0x42/0x60
> [  347.644703]        do_IRQ+0x86/0xc8
> [  347.644703]        io_int_handler+0x104/0x2d4
> [  347.644704]        enabled_wait+0x72/0x140
> [  347.644704]        enabled_wait+0x5a/0x140
> [  347.644705]        arch_cpu_idle+0x32/0x50
> [  347.644706]        default_idle_call+0x52/0x68
> [  347.644706]        do_idle+0x118/0x170
> [  347.644707]        cpu_startup_entry+0x3e/0x48
> [  347.644707]        smp_start_secondary+0x112/0x120
> [  347.644708]        restart_int_handler+0x62/0x78
> [  347.644708]                  (null)
> 
> [  347.644709] -> #1 (&priv->wait_q){-.....}:
> [  347.644711]        validate_chain.isra.10+0xb56/0xd88
> [  347.644711]        __lock_acquire+0x62c/0x850
> [  347.644712]        lock_acquire+0x254/0x2b8
> [  347.644712]        _raw_spin_lock_irqsave+0x70/0xb8
> [  347.644713]        __wake_up+0x3a/0x68
> [  347.644713]        ccw_device_recog_done+0x28e/0x2c8
> [  347.644714]        snsid_callback+0x324/0x390
> [  347.644714]        ccw_request_handler+0x480/0x560
> [  347.644715]        do_cio_interrupt+0x224/0x2a0
> [  347.644715]        __handle_irq_event_percpu+0x1a6/0x440
> [  347.644715]        handle_irq_event_percpu+0x38/0x88
> [  347.644716]        handle_percpu_irq+0x84/0xb0
> [  347.644716]        generic_handle_irq+0x42/0x60
> [  347.644717]        do_IRQ+0x86/0xc8
> [  347.644717]        io_int_handler+0x104/0x2d4
> [  347.644718]        _raw_spin_unlock_irq+0x4e/0x78
> [  347.644718]        _raw_spin_unlock_irq+0x4a/0x78
> [  347.644719]        ccw_device_enable_console+0xa0/0x188
> [  347.644719]        con3215_init+0x116/0x1b8
> [  347.644720]        console_init+0x40/0x60
> [  347.644720]        start_kernel+0x34c/0x480
> [  347.644720]        _stext+0x20/0x80


so do_IRQ()->do_cio_interrupt() does several things


1) it takes sch->lock			// also knows as "console_sch_key"
2) calls sch->driver->irq(sch) under sch->lock
3) which invokes __wake_up()
	3.1) which locks ->wait_q
	3.2) which locks ->pi_lock

so we've got

	console_sch_key ->   priv->wait_q
	console_sch_key ->   rq->pi_lock
	console_sch_key ->   rq->lock
	console_sch_key ->   .... other scheduler/timekeeping/etc. locks

> [  347.644721] -> #0 (&console_sch_key){-.-...}:
> [  347.644723]        check_prev_add+0x160/0x6e8
> [  347.644723]        validate_chain.isra.10+0xb56/0xd88
> [  347.644723]        __lock_acquire+0x62c/0x850
> [  347.644724]        lock_acquire+0x254/0x2b8
> [  347.644724]        _raw_spin_lock_irqsave+0x70/0xb8
> [  347.644725]        raw3215_write+0x58/0x208
> [  347.644725]        con3215_write+0x8e/0xf8
> [  347.644725]        console_unlock+0x4d8/0x6a8
> [  347.644726]        vprintk_emit+0x308/0x378
> [  347.644726]        vprintk_default+0x44/0x58
> [  347.644727]        printk+0x4e/0x60
> [  347.644727]        __offline_isolated_pages+0x16a/0x388
> [  347.644728]        offline_isolated_pages_cb+0x2e/0x40
> [  347.644728]        walk_system_ram_range+0x92/0xf0
> [  347.644729]        __offline_pages.constprop.6+0x6d2/0x910
> [  347.644729]        memory_subsys_offline+0x6c/0xa0
> [  347.644730]        device_offline+0x84/0xe0
> [  347.644730]        store_mem_state+0xfe/0x120
> [  347.644731]        kernfs_fop_write+0x132/0x208
> [  347.644731]        __vfs_write+0x36/0x158
> [  347.644731]        vfs_write+0xb8/0x1a0
> [  347.644732]        SyS_write+0x66/0xc0
> [  347.644732]        system_call+0xc4/0x298

here we've got

	(&zone->lock)->rlock    ->    console_sch_key

due to pr_info("remove from free list %lx %d %lx\n",...) under
spin_lock_irqsave(&zone->lock, flags).


so it's
           from #4                   from #0              from #1
   rq->lock  ->  (&zone->lock)->rlock  ->  console_sch_key  ->  rq->lock


need to think what the fix can be...
if anyone has any thoughts I'd be glad to hear.


> [  347.644733] other info that might help us debug this:
> [  347.644734] Chain exists of:
> [  347.644734]   &console_sch_key --> &rq->lock --> &(&zone->lock)->rlock
> [  347.644736]  Possible unsafe locking scenario:
> [  347.644737]        CPU0                    CPU1
> [  347.644738]        ----                    ----
> [  347.644738]   lock(&(&zone->lock)->rlock);
> [  347.644739]                                lock(&rq->lock);
> [  347.644740]                                lock(&(&zone->lock)->rlock);
> [  347.644741]   lock(&console_sch_key);
> [  347.644742]  *** DEADLOCK ***
> [  347.644743] 9 locks held by sh/770:
> [  347.644743]  #0:  (sb_writers#5){.+.+.+}, at: [<000000000035c64a>] vfs_write+0xa2/0x1a0
> [  347.644745]  #1:  (&of->mutex){+.+.+.}, at: [<000000000040065a>] kernfs_fop_write+0x1b2/0x208
> [  347.644747]  #2:  (s_active#46){.+.+.+}, at: [<0000000000400666>] kernfs_fop_write+0x1be/0x208
> [  347.644749]  #3:  (device_hotplug_lock){+.+...}, at: [<00000000006b9d18>] lock_device_hotplug_sysfs+0x30/0x70
> [  347.644750]  #4:  (cpu_hotplug_lock.rw_sem){++++++}, at: [<000000000033596a>] mem_hotplug_begin+0x2a/0x40
> [  347.644752]  #5:  (mem_hotplug_lock.rw_sem){++++.+}, at: [<00000000001a5c78>] percpu_down_write+0x38/0x110
> [  347.644754]  #6:  (&dev->mutex){......}, at: [<00000000006bb5ac>] device_offline+0x5c/0xe0
> [  347.644756]  #7:  (&(&zone->lock)->rlock){-.-...}, at: [<00000000002b693e>] __offline_isolated_pages+0x316/0x388
> [  347.644758]  #8:  (console_lock){+.+...}, at: [<00000000001c2a3c>] vprintk_emit+0x2fc/0x378
> [  347.644760] stack backtrace:
> [  347.644760] CPU: 2 PID: 770 Comm: sh Not tainted 4.13.0-rc2 #146
> [  347.644761] Hardware name: IBM 2827 H66 706 (z/VM 6.3.0)
> [  347.644761] Call Trace:
> [  347.644761] ([<0000000000113a1a>] show_stack+0x8a/0xe0)
> [  347.644762]  [<00000000008fe4a6>] dump_stack+0x96/0xd8 
> [  347.644762]  [<00000000001a95c4>] print_circular_bug+0x314/0x340 
> [  347.644763]  [<00000000001aa548>] check_prev_add+0x160/0x6e8 
> [  347.644763]  [<00000000001ab626>] validate_chain.isra.10+0xb56/0xd88 
> [  347.644764]  [<00000000001ad024>] __lock_acquire+0x62c/0x850 
> [  347.644764]  [<00000000001adbec>] lock_acquire+0x254/0x2b8 
> [  347.644765]  [<000000000091e4a8>] _raw_spin_lock_irqsave+0x70/0xb8 
> [  347.644766]  [<0000000000763d80>] raw3215_write+0x58/0x208 
> [  347.644766]  [<000000000076416e>] con3215_write+0x8e/0xf8 
> [  347.644766]  [<00000000001c2570>] console_unlock+0x4d8/0x6a8 
> [  347.644767]  [<00000000001c2a48>] vprintk_emit+0x308/0x378 
> [  347.644767]  [<00000000001c2c94>] vprintk_default+0x44/0x58 
> [  347.644768]  [<00000000001c3c0e>] printk+0x4e/0x60 
> [  347.644768]  [<00000000002b6792>] __offline_isolated_pages+0x16a/0x388 
> [  347.644769]  [<0000000000335516>] offline_isolated_pages_cb+0x2e/0x40 
> [  347.644769]  [<000000000014b092>] walk_system_ram_range+0x92/0xf0 
> [  347.644770]  [<0000000000913cfa>] __offline_pages.constprop.6+0x6d2/0x910 
> [  347.644770]  [<00000000006d8cf4>] memory_subsys_offline+0x6c/0xa0 
> [  347.644771]  [<00000000006bb5d4>] device_offline+0x84/0xe0 
> [  347.644771]  [<00000000006d93de>] store_mem_state+0xfe/0x120 
> [  347.644772]  [<00000000004005da>] kernfs_fop_write+0x132/0x208 
> [  347.644773]  [<000000000035b236>] __vfs_write+0x36/0x158 
> [  347.644773]  [<000000000035c660>] vfs_write+0xb8/0x1a0 
> [  347.644774]  [<000000000035dd96>] SyS_write+0x66/0xc0 
> [  347.644774]  [<000000000091f59c>] system_call+0xc4/0x298 
> [  347.644774] INFO: lockdep is turned off.

	-ss

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-07-24 13:32 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-20 16:43 lockdep warning: console vs. mem hotplug Sebastian Ott
2017-03-21  4:44 ` Sergey Senozhatsky
2017-03-21  5:04   ` Sergey Senozhatsky
2017-03-25  0:04   ` Sergey Senozhatsky
2017-03-25  1:08     ` Steven Rostedt
2017-03-25  1:37       ` Sergey Senozhatsky
2017-03-25 10:59     ` Sebastian Ott
2017-03-28 14:22     ` Michal Hocko
2017-03-28 16:00       ` Petr Mladek
2017-03-29  7:31         ` Michal Hocko
2017-03-30  9:45           ` Petr Mladek
2017-03-30  3:59       ` Sergey Senozhatsky
2017-07-24 12:46   ` Sebastian Ott
2017-07-24 13:32     ` Sergey Senozhatsky
2017-03-24 16:39 ` Steven Rostedt
2017-03-24 16:57   ` Sebastian Ott
2017-03-25  0:00   ` Sergey Senozhatsky
2017-03-25  1:00     ` Steven Rostedt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.