Message ID | 20200807122005.264328-1-juergh@canonical.com |
---|---|
State | New |
Headers | show |
Series | [SRU,F/linux-raspi] UBUNTU: [Config] Switch from PREEMPT_VOLUNTARY to PREEMPT | expand |
On Fri, Aug 07, 2020 at 02:20:05PM +0200, Juerg Haefliger wrote: > BugLink: https://bugs.launchpad.net/bugs/1890808 > BugLink: https://bugs.launchpad.net/bugs/1880388 > BugLink: https://bugs.launchpad.net/bugs/1887831 > > CONFIG_PREEMPT was accidentially disabled (and CONFIG_PREEMPT_VOLUNTARY > enabled instead) with the Disco release of the raspi kernel. That should not > have happened and is by itself reason enough to change it back. > > Furthermore, this change uncovered a locking issue in the dwc_otg driver. > With CONFIG_PROVE_LOCKING=y: > > [ 197.032171] ================================ > [ 197.039097] WARNING: inconsistent lock state > [ 197.046003] 5.4.44 #7 Not tainted > [ 197.051856] -------------------------------- > [ 197.058617] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. > [ 197.067139] minicom/823 [HC0[0]:SC0[0]:HE1:SE1] takes: > [ 197.074711] ffff00003530f098 (&((spinlock_t *)hcd->lock)->rlock){?.-.}, at: DWC_SPINLOCK_IRQSAVE+0x24/0x38 > [ 197.089460] {IN-HARDIRQ-W} state was registered at: > [ 197.096982] lock_acquire+0xd0/0x210 > [ 197.103208] _raw_spin_lock+0x3c/0x50 > [ 197.109427] DWC_SPINLOCK+0x20/0x30 > [ 197.115370] dwc_otg_handle_common_intr+0x5c/0xdc0 > [ 197.122589] dwc_otg_common_irq+0x20/0x38 > [ 197.128917] __handle_irq_event_percpu+0xb8/0x360 > [ 197.135970] handle_irq_event_percpu+0x3c/0x98 > [ 197.142737] handle_irq_event+0x4c/0x80 > [ 197.148784] handle_level_irq+0xbc/0x140 > [ 197.154867] generic_handle_irq+0x34/0x50 > [ 197.161024] bcm2836_chained_handle_irq+0x50/0x70 > [ 197.167903] generic_handle_irq+0x34/0x50 > [ 197.174047] __handle_domain_irq+0x6c/0xc0 > [ 197.180277] bcm2836_arm_irqchip_handle_irq+0x74/0xe0 > [ 197.187517] el1_irq+0x108/0x200 > [ 197.192874] arch_cpu_idle+0x3c/0x1c8 > [ 197.198624] default_idle_call+0x24/0x48 > [ 197.204593] do_idle+0x210/0x2a0 > [ 197.209757] cpu_startup_entry+0x2c/0x30 > [ 197.215545] secondary_start_kernel+0x134/0x1b8 > [ 197.221929] irq event stamp: 11518 > [ 197.227047] hardirqs last enabled at (11517): [<ffffadd6fac9b954>] el0_svc_common.constprop.0+0x10c/0x1e8 > [ 197.240513] hardirqs last disabled at (11518): [<ffffadd6fb7e4078>] _raw_spin_lock_irqsave+0x30/0x78 > [ 197.253784] softirqs last enabled at (11506): [<ffffadd6fac824f8>] __do_softirq+0x400/0x488 > [ 197.266666] softirqs last disabled at (11481): [<ffffadd6facfa4ac>] irq_exit+0xfc/0x130 > <SNIP> > > So reenable CONFIG_PREEMPT which gets rid of the above warning and brings us > back in line with Bionic (and upstream raspberrypi as well). > > Signed-off-by: Juerg Haefliger <juergh@canonical.com> I think the dwc_otg driver should be fixed anyway, but regarding the preemption model it makes sense to re-align with upstream raspberrypi (and bionic). And it makes more sense in general to have a fully preemptible kernel for the raspberrypi, therefore: Acked-by: Andrea Righi <andrea.righi@canonical.com> > --- > debian.raspi/config/config.common.ubuntu | 63 ++++-------------------- > 1 file changed, 9 insertions(+), 54 deletions(-) > > diff --git a/debian.raspi/config/config.common.ubuntu b/debian.raspi/config/config.common.ubuntu > index df7a4c6cf3cf..4f8355ed3f67 100644 > --- a/debian.raspi/config/config.common.ubuntu > +++ b/debian.raspi/config/config.common.ubuntu > @@ -250,32 +250,6 @@ CONFIG_ARCH_HIBERNATION_HEADER=y > CONFIG_ARCH_HIBERNATION_POSSIBLE=y > # CONFIG_ARCH_HIGHBANK is not set > # CONFIG_ARCH_HISI is not set > -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_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_TRYLOCK=y > -CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=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_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_ARCH_IOP32X is not set > # CONFIG_ARCH_IXP4XX is not set > # CONFIG_ARCH_K3 is not set > @@ -1093,6 +1067,7 @@ CONFIG_CDROM_PKTCDVD=m > CONFIG_CDROM_PKTCDVD_BUFFERS=8 > # CONFIG_CDROM_PKTCDVD_WCACHE is not set > CONFIG_CEC_CORE=y > +# CONFIG_CEC_GPIO is not set > CONFIG_CEC_NOTIFIER=y > CONFIG_CEC_PLATFORM_DRIVERS=y > CONFIG_CEPH_FS=m > @@ -1594,6 +1569,7 @@ CONFIG_DEBUG_MISC=y > # CONFIG_DEBUG_PER_CPU_MAPS is not set > # CONFIG_DEBUG_PINCTRL is not set > # CONFIG_DEBUG_PLIST is not set > +# CONFIG_DEBUG_PREEMPT is not set > # CONFIG_DEBUG_RODATA_TEST is not set > # CONFIG_DEBUG_RSEQ is not set > # CONFIG_DEBUG_RT_MUTEXES is not set > @@ -3095,31 +3071,6 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 > # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set > # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set > CONFIG_INIT_STACK_NONE=y > -CONFIG_INLINE_READ_LOCK=y > -CONFIG_INLINE_READ_LOCK_BH=y > -CONFIG_INLINE_READ_LOCK_IRQ=y > -CONFIG_INLINE_READ_LOCK_IRQSAVE=y > -CONFIG_INLINE_READ_UNLOCK=y > -CONFIG_INLINE_READ_UNLOCK_BH=y > -CONFIG_INLINE_READ_UNLOCK_IRQ=y > -CONFIG_INLINE_READ_UNLOCK_IRQRESTORE=y > -CONFIG_INLINE_SPIN_LOCK=y > -CONFIG_INLINE_SPIN_LOCK_BH=y > -CONFIG_INLINE_SPIN_LOCK_IRQ=y > -CONFIG_INLINE_SPIN_LOCK_IRQSAVE=y > -CONFIG_INLINE_SPIN_TRYLOCK=y > -CONFIG_INLINE_SPIN_TRYLOCK_BH=y > -CONFIG_INLINE_SPIN_UNLOCK_BH=y > -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y > -CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE=y > -CONFIG_INLINE_WRITE_LOCK=y > -CONFIG_INLINE_WRITE_LOCK_BH=y > -CONFIG_INLINE_WRITE_LOCK_IRQ=y > -CONFIG_INLINE_WRITE_LOCK_IRQSAVE=y > -CONFIG_INLINE_WRITE_UNLOCK=y > -CONFIG_INLINE_WRITE_UNLOCK_BH=y > -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y > -CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE=y > CONFIG_INOTIFY_USER=y > CONFIG_INPUT=y > CONFIG_INPUT_88PM80X_ONKEY=m > @@ -5342,13 +5293,17 @@ CONFIG_PPS_CLIENT_LDISC=m > CONFIG_PPS_CLIENT_PARPORT=m > # CONFIG_PPS_DEBUG is not set > CONFIG_PPTP=m > -# CONFIG_PREEMPT is not set > +CONFIG_PREEMPT=y > +CONFIG_PREEMPTION=y > # CONFIG_PREEMPTIRQ_DELAY_TEST is not set > # CONFIG_PREEMPTIRQ_EVENTS is not set > CONFIG_PREEMPTIRQ_TRACEPOINTS=y > +CONFIG_PREEMPT_COUNT=y > # CONFIG_PREEMPT_NONE is not set > CONFIG_PREEMPT_NOTIFIERS=y > -CONFIG_PREEMPT_VOLUNTARY=y > +CONFIG_PREEMPT_RCU=y > +# CONFIG_PREEMPT_TRACER is not set > +# CONFIG_PREEMPT_VOLUNTARY is not set > CONFIG_PREVENT_FIRMWARE_BUILD=y > CONFIG_PRINTER=m > CONFIG_PRINTK=y > @@ -7161,7 +7116,6 @@ CONFIG_TRACING=y > CONFIG_TRACING_MAP=y > CONFIG_TRACING_SUPPORT=y > # CONFIG_TRANSPARENT_HUGEPAGE is not set > -CONFIG_TREE_RCU=y > CONFIG_TREE_SRCU=y > CONFIG_TRUSTED_FOUNDATIONS=y > CONFIG_TRUSTED_KEYS=y > @@ -7234,6 +7188,7 @@ CONFIG_ULTRIX_PARTITION=y > CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" > CONFIG_UNICODE=y > # CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set > +CONFIG_UNINLINE_SPIN_UNLOCK=y > CONFIG_UNISYSSPAR=y > CONFIG_UNIX=y > CONFIG_UNIX98_PTYS=y > -- > 2.25.1 > > > -- > kernel-team mailing list > kernel-team@lists.ubuntu.com > https://lists.ubuntu.com/mailman/listinfo/kernel-team
On Fri, Aug 07, 2020 at 02:20:05PM +0200, Juerg Haefliger wrote: > BugLink: https://bugs.launchpad.net/bugs/1890808 > BugLink: https://bugs.launchpad.net/bugs/1880388 > BugLink: https://bugs.launchpad.net/bugs/1887831 Acked-by: Paolo Pisati <paolo.pisati@canonical.com>
Applied to focal:linux-raspi master-next. ...Juerg > BugLink: https://bugs.launchpad.net/bugs/1890808 > BugLink: https://bugs.launchpad.net/bugs/1880388 > BugLink: https://bugs.launchpad.net/bugs/1887831 > > CONFIG_PREEMPT was accidentially disabled (and CONFIG_PREEMPT_VOLUNTARY > enabled instead) with the Disco release of the raspi kernel. That should not > have happened and is by itself reason enough to change it back. > > Furthermore, this change uncovered a locking issue in the dwc_otg driver. > With CONFIG_PROVE_LOCKING=y: > > [ 197.032171] ================================ > [ 197.039097] WARNING: inconsistent lock state > [ 197.046003] 5.4.44 #7 Not tainted > [ 197.051856] -------------------------------- > [ 197.058617] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. > [ 197.067139] minicom/823 [HC0[0]:SC0[0]:HE1:SE1] takes: > [ 197.074711] ffff00003530f098 (&((spinlock_t *)hcd->lock)->rlock){?.-.}, at: DWC_SPINLOCK_IRQSAVE+0x24/0x38 > [ 197.089460] {IN-HARDIRQ-W} state was registered at: > [ 197.096982] lock_acquire+0xd0/0x210 > [ 197.103208] _raw_spin_lock+0x3c/0x50 > [ 197.109427] DWC_SPINLOCK+0x20/0x30 > [ 197.115370] dwc_otg_handle_common_intr+0x5c/0xdc0 > [ 197.122589] dwc_otg_common_irq+0x20/0x38 > [ 197.128917] __handle_irq_event_percpu+0xb8/0x360 > [ 197.135970] handle_irq_event_percpu+0x3c/0x98 > [ 197.142737] handle_irq_event+0x4c/0x80 > [ 197.148784] handle_level_irq+0xbc/0x140 > [ 197.154867] generic_handle_irq+0x34/0x50 > [ 197.161024] bcm2836_chained_handle_irq+0x50/0x70 > [ 197.167903] generic_handle_irq+0x34/0x50 > [ 197.174047] __handle_domain_irq+0x6c/0xc0 > [ 197.180277] bcm2836_arm_irqchip_handle_irq+0x74/0xe0 > [ 197.187517] el1_irq+0x108/0x200 > [ 197.192874] arch_cpu_idle+0x3c/0x1c8 > [ 197.198624] default_idle_call+0x24/0x48 > [ 197.204593] do_idle+0x210/0x2a0 > [ 197.209757] cpu_startup_entry+0x2c/0x30 > [ 197.215545] secondary_start_kernel+0x134/0x1b8 > [ 197.221929] irq event stamp: 11518 > [ 197.227047] hardirqs last enabled at (11517): [<ffffadd6fac9b954>] el0_svc_common.constprop.0+0x10c/0x1e8 > [ 197.240513] hardirqs last disabled at (11518): [<ffffadd6fb7e4078>] _raw_spin_lock_irqsave+0x30/0x78 > [ 197.253784] softirqs last enabled at (11506): [<ffffadd6fac824f8>] __do_softirq+0x400/0x488 > [ 197.266666] softirqs last disabled at (11481): [<ffffadd6facfa4ac>] irq_exit+0xfc/0x130 > <SNIP> > > So reenable CONFIG_PREEMPT which gets rid of the above warning and brings us > back in line with Bionic (and upstream raspberrypi as well). > > Signed-off-by: Juerg Haefliger <juergh@canonical.com> > --- > debian.raspi/config/config.common.ubuntu | 63 ++++-------------------- > 1 file changed, 9 insertions(+), 54 deletions(-) > > diff --git a/debian.raspi/config/config.common.ubuntu b/debian.raspi/config/config.common.ubuntu > index df7a4c6cf3cf..4f8355ed3f67 100644 > --- a/debian.raspi/config/config.common.ubuntu > +++ b/debian.raspi/config/config.common.ubuntu > @@ -250,32 +250,6 @@ CONFIG_ARCH_HIBERNATION_HEADER=y > CONFIG_ARCH_HIBERNATION_POSSIBLE=y > # CONFIG_ARCH_HIGHBANK is not set > # CONFIG_ARCH_HISI is not set > -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_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_TRYLOCK=y > -CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=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_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_ARCH_IOP32X is not set > # CONFIG_ARCH_IXP4XX is not set > # CONFIG_ARCH_K3 is not set > @@ -1093,6 +1067,7 @@ CONFIG_CDROM_PKTCDVD=m > CONFIG_CDROM_PKTCDVD_BUFFERS=8 > # CONFIG_CDROM_PKTCDVD_WCACHE is not set > CONFIG_CEC_CORE=y > +# CONFIG_CEC_GPIO is not set > CONFIG_CEC_NOTIFIER=y > CONFIG_CEC_PLATFORM_DRIVERS=y > CONFIG_CEPH_FS=m > @@ -1594,6 +1569,7 @@ CONFIG_DEBUG_MISC=y > # CONFIG_DEBUG_PER_CPU_MAPS is not set > # CONFIG_DEBUG_PINCTRL is not set > # CONFIG_DEBUG_PLIST is not set > +# CONFIG_DEBUG_PREEMPT is not set > # CONFIG_DEBUG_RODATA_TEST is not set > # CONFIG_DEBUG_RSEQ is not set > # CONFIG_DEBUG_RT_MUTEXES is not set > @@ -3095,31 +3071,6 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 > # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set > # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set > CONFIG_INIT_STACK_NONE=y > -CONFIG_INLINE_READ_LOCK=y > -CONFIG_INLINE_READ_LOCK_BH=y > -CONFIG_INLINE_READ_LOCK_IRQ=y > -CONFIG_INLINE_READ_LOCK_IRQSAVE=y > -CONFIG_INLINE_READ_UNLOCK=y > -CONFIG_INLINE_READ_UNLOCK_BH=y > -CONFIG_INLINE_READ_UNLOCK_IRQ=y > -CONFIG_INLINE_READ_UNLOCK_IRQRESTORE=y > -CONFIG_INLINE_SPIN_LOCK=y > -CONFIG_INLINE_SPIN_LOCK_BH=y > -CONFIG_INLINE_SPIN_LOCK_IRQ=y > -CONFIG_INLINE_SPIN_LOCK_IRQSAVE=y > -CONFIG_INLINE_SPIN_TRYLOCK=y > -CONFIG_INLINE_SPIN_TRYLOCK_BH=y > -CONFIG_INLINE_SPIN_UNLOCK_BH=y > -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y > -CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE=y > -CONFIG_INLINE_WRITE_LOCK=y > -CONFIG_INLINE_WRITE_LOCK_BH=y > -CONFIG_INLINE_WRITE_LOCK_IRQ=y > -CONFIG_INLINE_WRITE_LOCK_IRQSAVE=y > -CONFIG_INLINE_WRITE_UNLOCK=y > -CONFIG_INLINE_WRITE_UNLOCK_BH=y > -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y > -CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE=y > CONFIG_INOTIFY_USER=y > CONFIG_INPUT=y > CONFIG_INPUT_88PM80X_ONKEY=m > @@ -5342,13 +5293,17 @@ CONFIG_PPS_CLIENT_LDISC=m > CONFIG_PPS_CLIENT_PARPORT=m > # CONFIG_PPS_DEBUG is not set > CONFIG_PPTP=m > -# CONFIG_PREEMPT is not set > +CONFIG_PREEMPT=y > +CONFIG_PREEMPTION=y > # CONFIG_PREEMPTIRQ_DELAY_TEST is not set > # CONFIG_PREEMPTIRQ_EVENTS is not set > CONFIG_PREEMPTIRQ_TRACEPOINTS=y > +CONFIG_PREEMPT_COUNT=y > # CONFIG_PREEMPT_NONE is not set > CONFIG_PREEMPT_NOTIFIERS=y > -CONFIG_PREEMPT_VOLUNTARY=y > +CONFIG_PREEMPT_RCU=y > +# CONFIG_PREEMPT_TRACER is not set > +# CONFIG_PREEMPT_VOLUNTARY is not set > CONFIG_PREVENT_FIRMWARE_BUILD=y > CONFIG_PRINTER=m > CONFIG_PRINTK=y > @@ -7161,7 +7116,6 @@ CONFIG_TRACING=y > CONFIG_TRACING_MAP=y > CONFIG_TRACING_SUPPORT=y > # CONFIG_TRANSPARENT_HUGEPAGE is not set > -CONFIG_TREE_RCU=y > CONFIG_TREE_SRCU=y > CONFIG_TRUSTED_FOUNDATIONS=y > CONFIG_TRUSTED_KEYS=y > @@ -7234,6 +7188,7 @@ CONFIG_ULTRIX_PARTITION=y > CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" > CONFIG_UNICODE=y > # CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set > +CONFIG_UNINLINE_SPIN_UNLOCK=y > CONFIG_UNISYSSPAR=y > CONFIG_UNIX=y > CONFIG_UNIX98_PTYS=y
diff --git a/debian.raspi/config/config.common.ubuntu b/debian.raspi/config/config.common.ubuntu index df7a4c6cf3cf..4f8355ed3f67 100644 --- a/debian.raspi/config/config.common.ubuntu +++ b/debian.raspi/config/config.common.ubuntu @@ -250,32 +250,6 @@ CONFIG_ARCH_HIBERNATION_HEADER=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y # CONFIG_ARCH_HIGHBANK is not set # CONFIG_ARCH_HISI is not set -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_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_TRYLOCK=y -CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=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_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_ARCH_IOP32X is not set # CONFIG_ARCH_IXP4XX is not set # CONFIG_ARCH_K3 is not set @@ -1093,6 +1067,7 @@ CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD_BUFFERS=8 # CONFIG_CDROM_PKTCDVD_WCACHE is not set CONFIG_CEC_CORE=y +# CONFIG_CEC_GPIO is not set CONFIG_CEC_NOTIFIER=y CONFIG_CEC_PLATFORM_DRIVERS=y CONFIG_CEPH_FS=m @@ -1594,6 +1569,7 @@ CONFIG_DEBUG_MISC=y # CONFIG_DEBUG_PER_CPU_MAPS is not set # CONFIG_DEBUG_PINCTRL is not set # CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_PREEMPT is not set # CONFIG_DEBUG_RODATA_TEST is not set # CONFIG_DEBUG_RSEQ is not set # CONFIG_DEBUG_RT_MUTEXES is not set @@ -3095,31 +3071,6 @@ CONFIG_INIT_ENV_ARG_LIMIT=32 # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set CONFIG_INIT_STACK_NONE=y -CONFIG_INLINE_READ_LOCK=y -CONFIG_INLINE_READ_LOCK_BH=y -CONFIG_INLINE_READ_LOCK_IRQ=y -CONFIG_INLINE_READ_LOCK_IRQSAVE=y -CONFIG_INLINE_READ_UNLOCK=y -CONFIG_INLINE_READ_UNLOCK_BH=y -CONFIG_INLINE_READ_UNLOCK_IRQ=y -CONFIG_INLINE_READ_UNLOCK_IRQRESTORE=y -CONFIG_INLINE_SPIN_LOCK=y -CONFIG_INLINE_SPIN_LOCK_BH=y -CONFIG_INLINE_SPIN_LOCK_IRQ=y -CONFIG_INLINE_SPIN_LOCK_IRQSAVE=y -CONFIG_INLINE_SPIN_TRYLOCK=y -CONFIG_INLINE_SPIN_TRYLOCK_BH=y -CONFIG_INLINE_SPIN_UNLOCK_BH=y -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y -CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE=y -CONFIG_INLINE_WRITE_LOCK=y -CONFIG_INLINE_WRITE_LOCK_BH=y -CONFIG_INLINE_WRITE_LOCK_IRQ=y -CONFIG_INLINE_WRITE_LOCK_IRQSAVE=y -CONFIG_INLINE_WRITE_UNLOCK=y -CONFIG_INLINE_WRITE_UNLOCK_BH=y -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE=y CONFIG_INOTIFY_USER=y CONFIG_INPUT=y CONFIG_INPUT_88PM80X_ONKEY=m @@ -5342,13 +5293,17 @@ CONFIG_PPS_CLIENT_LDISC=m CONFIG_PPS_CLIENT_PARPORT=m # CONFIG_PPS_DEBUG is not set CONFIG_PPTP=m -# CONFIG_PREEMPT is not set +CONFIG_PREEMPT=y +CONFIG_PREEMPTION=y # CONFIG_PREEMPTIRQ_DELAY_TEST is not set # CONFIG_PREEMPTIRQ_EVENTS is not set CONFIG_PREEMPTIRQ_TRACEPOINTS=y +CONFIG_PREEMPT_COUNT=y # CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_NOTIFIERS=y -CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_PREEMPT_RCU=y +# CONFIG_PREEMPT_TRACER is not set +# CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREVENT_FIRMWARE_BUILD=y CONFIG_PRINTER=m CONFIG_PRINTK=y @@ -7161,7 +7116,6 @@ CONFIG_TRACING=y CONFIG_TRACING_MAP=y CONFIG_TRACING_SUPPORT=y # CONFIG_TRANSPARENT_HUGEPAGE is not set -CONFIG_TREE_RCU=y CONFIG_TREE_SRCU=y CONFIG_TRUSTED_FOUNDATIONS=y CONFIG_TRUSTED_KEYS=y @@ -7234,6 +7188,7 @@ CONFIG_ULTRIX_PARTITION=y CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" CONFIG_UNICODE=y # CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set +CONFIG_UNINLINE_SPIN_UNLOCK=y CONFIG_UNISYSSPAR=y CONFIG_UNIX=y CONFIG_UNIX98_PTYS=y
BugLink: https://bugs.launchpad.net/bugs/1890808 BugLink: https://bugs.launchpad.net/bugs/1880388 BugLink: https://bugs.launchpad.net/bugs/1887831 CONFIG_PREEMPT was accidentially disabled (and CONFIG_PREEMPT_VOLUNTARY enabled instead) with the Disco release of the raspi kernel. That should not have happened and is by itself reason enough to change it back. Furthermore, this change uncovered a locking issue in the dwc_otg driver. With CONFIG_PROVE_LOCKING=y: [ 197.032171] ================================ [ 197.039097] WARNING: inconsistent lock state [ 197.046003] 5.4.44 #7 Not tainted [ 197.051856] -------------------------------- [ 197.058617] inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. [ 197.067139] minicom/823 [HC0[0]:SC0[0]:HE1:SE1] takes: [ 197.074711] ffff00003530f098 (&((spinlock_t *)hcd->lock)->rlock){?.-.}, at: DWC_SPINLOCK_IRQSAVE+0x24/0x38 [ 197.089460] {IN-HARDIRQ-W} state was registered at: [ 197.096982] lock_acquire+0xd0/0x210 [ 197.103208] _raw_spin_lock+0x3c/0x50 [ 197.109427] DWC_SPINLOCK+0x20/0x30 [ 197.115370] dwc_otg_handle_common_intr+0x5c/0xdc0 [ 197.122589] dwc_otg_common_irq+0x20/0x38 [ 197.128917] __handle_irq_event_percpu+0xb8/0x360 [ 197.135970] handle_irq_event_percpu+0x3c/0x98 [ 197.142737] handle_irq_event+0x4c/0x80 [ 197.148784] handle_level_irq+0xbc/0x140 [ 197.154867] generic_handle_irq+0x34/0x50 [ 197.161024] bcm2836_chained_handle_irq+0x50/0x70 [ 197.167903] generic_handle_irq+0x34/0x50 [ 197.174047] __handle_domain_irq+0x6c/0xc0 [ 197.180277] bcm2836_arm_irqchip_handle_irq+0x74/0xe0 [ 197.187517] el1_irq+0x108/0x200 [ 197.192874] arch_cpu_idle+0x3c/0x1c8 [ 197.198624] default_idle_call+0x24/0x48 [ 197.204593] do_idle+0x210/0x2a0 [ 197.209757] cpu_startup_entry+0x2c/0x30 [ 197.215545] secondary_start_kernel+0x134/0x1b8 [ 197.221929] irq event stamp: 11518 [ 197.227047] hardirqs last enabled at (11517): [<ffffadd6fac9b954>] el0_svc_common.constprop.0+0x10c/0x1e8 [ 197.240513] hardirqs last disabled at (11518): [<ffffadd6fb7e4078>] _raw_spin_lock_irqsave+0x30/0x78 [ 197.253784] softirqs last enabled at (11506): [<ffffadd6fac824f8>] __do_softirq+0x400/0x488 [ 197.266666] softirqs last disabled at (11481): [<ffffadd6facfa4ac>] irq_exit+0xfc/0x130 <SNIP> So reenable CONFIG_PREEMPT which gets rid of the above warning and brings us back in line with Bionic (and upstream raspberrypi as well). Signed-off-by: Juerg Haefliger <juergh@canonical.com> --- debian.raspi/config/config.common.ubuntu | 63 ++++-------------------- 1 file changed, 9 insertions(+), 54 deletions(-)