1. 21 Sep, 2018 3 commits
    • Philippe Gerum's avatar
      ipipe: timer: notify co-kernel about entering ONESHOT_STOPPED mode · bec60476
      Philippe Gerum authored
      Although we don't want to disable the hardware not to wreck the
      outstanding timing requests managed by the co-kernel, we should
      nevertheless notify it about entering the ONESHOT_STOPPED mode, so
      that it may disable the host tick emulation.
      bec60476
    • Philippe Gerum's avatar
      ipipe: timer: do not interpose on undefined handlers · 9894f2da
      Philippe Gerum authored
      There is no point in interposing on clock chip handlers for which
      there was no support originally. In some cases (oneshot_stopped), we
      may even get a kernel fault, jumping to a NULL address.
      
      Interpose on non-NULL original handlers only.
      9894f2da
    • Philippe Gerum's avatar
      ipipe: timer: resume hardware operations in oneshot handler · 3fabc93f
      Philippe Gerum authored
      Although we won't allow disabling the hardware when the clock event
      logic switches a device to stopped mode - so that we won't affect the
      timer logic running on the head stage unexpectedly -, we still have to
      enable the hardware when switched (back) to oneshot mode, since it may
      have been stopped prior to interposing on the device in
      ipipe_timer_start().
      
      Failing to do so would leave the hardware shut down for both regular
      and Xenomai operations, with no mean to bring it up again.
      3fabc93f
  2. 18 Sep, 2018 2 commits
  3. 11 Sep, 2018 2 commits
  4. 10 Sep, 2018 1 commit
  5. 04 Sep, 2018 1 commit
  6. 29 Aug, 2018 6 commits
  7. 28 Aug, 2018 5 commits
    • Philippe Gerum's avatar
      thermal/drivers/hisi: drop spurious enable of auto-enable irq · 9912a82d
      Philippe Gerum authored
      Fixes the kernel warning below due to the second enable sneaking in
      between a thermal IRQ is handled by the hard interrupt handler - which
      disables it - and the IRQ thread eventually attempts to re-enable the
      interrupt - which was already enabled.
      
      [    0.405830] Unbalanced enable for IRQ 44
      [    0.406029] ------------[ cut here ]------------
      [    0.406035] WARNING: CPU: 3 PID: 1285 at kernel/irq/manage.c:525 __enable_irq+0x60/0x70
      [    0.406044] Modules linked in:
      [    0.406055] CPU: 3 PID: 1285 Comm: irq/44-hisi_the Not tainted 4.14.62-ipipe #2
      [    0.406060] Hardware name: HiKey Development Board (DT)
      [    0.406065] I-pipe domain: Linux
      [    0.406073] task: ffff8000336b0000 task.stack: ffff00000b9e0000
      [    0.406078] PC is at __enable_irq+0x60/0x70
      [    0.406083] LR is at __enable_irq+0x60/0x70
      [    0.406088] pc : [<ffff000008124d58>] lr : [<ffff000008124d58>] pstate: 60000045
      [    0.406093] sp : ffff00000b9e3c60
      [    0.406098] x29: ffff00000b9e3c60 x28: 0000000000000000
      [    0.406108] x27: ffff00000805ba40 x26: ffff8000336b0000
      [    0.406118] x25: ffff000008124000 x24: ffff00000b9e3d7c
      [    0.406128] x23: 0000000000000002 x22: ffff800033f39e88
      [    0.406138] x21: 000000000000bc40 x20: 000000000000002c
      [    0.406147] x19: ffff800034275200 x18: 0000000000000010
      [    0.406157] x17: 0000000000000007 x16: 0000000000000001
      [    0.406166] x15: ffff0000890014c7 x14: 0000000000000006
      [    0.406175] x13: ffff0000090014d5 x12: ffff000008eb34d0
      [    0.406184] x11: ffff000008eb3000 x10: 0000000005f5e0ff
      [    0.406193] x9 : ffff00000b9e3970 x8 : 0000000000000040
      [    0.406202] x7 : ffff000008e7c000 x6 : 0000000000000040
      [    0.406211] x5 : 0000000000000000 x4 : 0000000000000000
      [    0.406220] x3 : ffffffffffffffff x2 : ffff000008eb34f0
      [    0.406229] x1 : ffff8000336b0000 x0 : 000000000000001c
      [    0.406239] Call trace:
      [    0.406244] Exception stack(0xffff00000b9e3b20 to 0xffff00000b9e3c60)
      [    0.406249] 3b20: 000000000000001c ffff8000336b0000 ffff000008eb34f0 ffffffffffffffff
      [    0.406255] 3b40: 0000000000000000 0000000000000000 0000000000000040 ffff000008e7c000
      [    0.406261] 3b60: 0000000000000040 ffff00000b9e3970 0000000005f5e0ff ffff000008eb3000
      [    0.406267] 3b80: ffff000008eb34d0 ffff0000090014d5 0000000000000006 ffff0000890014c7
      [    0.406272] 3ba0: 0000000000000001 0000000000000007 0000000000000010 ffff800034275200
      [    0.406278] 3bc0: 000000000000002c 000000000000bc40 ffff800033f39e88 0000000000000002
      [    0.406284] 3be0: ffff00000b9e3d7c ffff000008124000 ffff8000336b0000 ffff00000805ba40
      [    0.406289] 3c00: 0000000000000000 ffff00000b9e3c60 ffff000008124d58 ffff00000b9e3c60
      [    0.406295] 3c20: ffff000008124d58 0000000060000045 0000000000000000 ffff800034275200
      [    0.406300] 3c40: ffffffffffffffff ffff000008e7c2b0 ffff00000b9e3c60 ffff000008124d58
      [    0.406306] [<ffff000008124d58>] __enable_irq+0x60/0x70
      [    0.406311] [<ffff000008124d9c>] enable_irq+0x34/0x68
      [    0.406317] [<ffff000008780320>] hisi_thermal_get_temp+0x160/0x198
      [    0.406322] [<ffff00000877b868>] of_thermal_get_temp+0x20/0x30
      [    0.406327] [<ffff00000877b0d4>] thermal_zone_get_temp+0x5c/0x138
      [    0.406332] [<ffff000008778740>] thermal_zone_device_update.part.4+0x20/0xb0
      [    0.406337] [<ffff0000087787f8>] thermal_zone_device_update+0x28/0x38
      [    0.406342] [<ffff00000877fe7c>] hisi_thermal_alarm_irq_thread+0x64/0x80
      [    0.406347] [<ffff0000081244e0>] irq_thread_fn+0x28/0x68
      [    0.406352] [<ffff000008124784>] irq_thread+0x114/0x1b0
      [    0.406357] [<ffff0000080f0384>] kthread+0xfc/0x128
      [    0.406362] [<ffff000008085274>] ret_from_fork+0x14/0x20
      [    0.406366] ---[ end trace 0e6011135c69587a ]---
      9912a82d
    • Philippe Gerum's avatar
      f7097302
    • Philippe Gerum's avatar
      ftrace: ipipe: rely on fully atomic stop_machine() handler · 4bedbd42
      Philippe Gerum authored
      Now that stop_machine() guarantees fully atomic execution of the stop
      routine via hard interrupt disabling, there is no point in using
      ipipe_critical_enter/exit() for the same purpose in order to patch the
      kernel text.
      4bedbd42
    • Philippe Gerum's avatar
      stop_machine: ipipe: ensure atomic stop-context operations · ff4dfa6c
      Philippe Gerum authored
      stop_machine() guarantees that all online CPUs are spinning
      non-preemptible in a known code location before a subset of them may
      safely run a stop-context function. This service is typically useful
      for live patching the kernel code, or changing global memory mappings,
      so that no activity could run in parallel until the system has
      returned to a stable state after all stop-context operations have
      completed.
      
      When interrupt pipelining is enabled, we have to provide the same
      guarantee by restoring hard interrupt disabling where virtualizing the
      interrupt disable flag would defeat it.
      ff4dfa6c
    • Philippe Gerum's avatar
      lockdep: ipipe: improve detection of out-of-band contexts · c322a7ab
      Philippe Gerum authored
      trace_hardirqs_on_virt[_caller]() must be invoked instead of
      trace_hardirqs_on[_caller]() from assembly sites before returning from
      an interrupt/fault, so that the virtual IRQ disable state is checked
      for before switching the tracer's logic state to ON.
      
      This is required as an interrupt may be received and handled by the
      pipeline core although not forwarded to the root domain, when
      interrupts are virtually disabled. In such a case, we want to
      reconcile the tracer's logic with the effect of interrupt pipelining.
      c322a7ab
  8. 15 Aug, 2018 20 commits