ACK/Cmnt: [SRU][F/linux-raspi][PATCH] UBUNTU: [Config] Switch from PREEMPT_VOLUNTARY to PREEMPT
Andrea Righi
andrea.righi at canonical.com
Fri Aug 7 12:48:20 UTC 2020
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 at 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 at 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 at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
More information about the kernel-team
mailing list