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