1. 03 11月, 2015 1 次提交
    • M
      xtensa: fix secondary core boot in SMP · ab45fb14
      Max Filippov 提交于
      There are multiple factors adding to the issue in different
      configurations:
      
      - commit 17290231 ("xtensa: add fixup for double exception raised
        in window overflow") added function window_overflow_restore_a0_fixup to
        double exception vector overlapping reset vector location of secondary
        processor cores.
      - on MMUv2 cores RESET_VECTOR1_VADDR may point to uncached kernel memory
        making code overlapping depend on cache type and size, so that without
        cache or with WT cache reset vector code overwrites double exception
        code, making issue even harder to detect.
      - on MMUv3 cores RESET_VECTOR1_VADDR may point to unmapped area, as
        MMUv3 cores change virtual address map to match MMUv2 layout, but
        reset vector virtual address is given for the original MMUv3 mapping.
      - physical memory region of the secondary reset vector is not reserved
        in the physical memory map, and thus may be allocated and overwritten
        at arbitrary moment.
      
      Fix it as follows:
      
      - move window_overflow_restore_a0_fixup code to .text section.
      - define RESET_VECTOR1_VADDR so that it points to reset vector in the
        cacheable MMUv2 map for cores with MMU.
      - reserve reset vector region in the physical memory map. Drop separate
        literal section and build mxhead.S with text section literals.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      ab45fb14
  2. 17 8月, 2015 1 次提交
    • M
      xtensa: implement fake NMI · 38fef73c
      Max Filippov 提交于
      In case perf IRQ is the highest of the medium-level IRQs, and is alone
      on its level, it may be treated as NMI:
      - LOCKLEVEL is defined to be one level less than EXCM level,
      - IRQ masking never lowers current IRQ level,
      - new fake exception cause code, EXCCAUSE_MAPPED_NMI is assigned to that
        IRQ; new second level exception handler, do_nmi, assigned to it
        handles it as NMI,
      - atomic operations in configurations without s32c1i still need to mask
        all interrupts.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Acked-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      38fef73c
  3. 14 8月, 2014 1 次提交
    • M
      xtensa: don't allow overflow/underflow on unaligned stack · 3cfc096e
      Max Filippov 提交于
      Double exceptions that happen during register window overflow/underflow
      are handled in the topmost stack frame, as if it was the only exception
      that occured. However unaligned access exception handler is special
      because it needs to analyze instruction that caused the exception, but
      the userspace instruction that triggered window exception is completely
      irrelevant. Unaligned data access is rather normal in the generic
      userspace code, but stack pointer manipulation must always be done by
      architecture-aware code and thus unaligned stack means a serious problem
      anyway.
      Use the default unaligned access handler that raises SIGBUS in case
      of unaligned access in window overflow/underflow handler.
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      3cfc096e
  4. 09 6月, 2014 1 次提交
    • M
      xtensa: add fixup for double exception raised in window overflow · 17290231
      Max Filippov 提交于
      There are two FIXMEs in the double exception handler 'for the extremely
      unlikely case'. This case gets hit by gcc during kernel build once in
      a few hours, resulting in an unrecoverable exception condition.
      
      Provide missing fixup routine to handle this case. Double exception
      literals now need 8 more bytes, add them to the linker script.
      
      Also replace bbsi instructions with bbsi.l as we're branching depending
      on 8th and 7th LSB-based bits of exception address.
      
      This may be tested by adding the explicit DTLB invalidation to window
      overflow handlers, like the following:
      
          --- a/arch/xtensa/kernel/vectors.S
          +++ b/arch/xtensa/kernel/vectors.S
          @@ -592,6 +592,14 @@ ENDPROC(_WindowUnderflow4)
           ENTRY_ALIGN64(_WindowOverflow8)
      
          	s32e	a0, a9, -16
          +	bbsi.l	a9, 31, 1f
          +	rsr	a0, ccount
          +	bbsi.l	a0, 4, 1f
          +	pdtlb	a0, a9
          +	idtlb	a0
          +	movi	a0, 9
          +	idtlb	a0
          +1:
          	l32e    a0, a1, -12
          	s32e    a2, a9,  -8
          	s32e    a1, a9, -12
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      17290231
  5. 30 1月, 2014 1 次提交
    • C
      xtensa: fix fast_syscall_spill_registers · c0e50d41
      Chris Zankel 提交于
      The original implementation could clobber registers under certain conditions.
      
      The Xtensa processor architecture uses windowed registers and the original
      implementation was using a4 as a temporary register, which under certain
      conditions could be register a0 of the oldest window frame, and didn't always
      restore the content correctly.
      
      By moving the _spill_registers routine inside the fast system call, it frees
      up one more register (the return address is not required anymore) for the
      spill routine.
      Signed-off-by: NChris Zankel <chris@zankel.net>
      c0e50d41
  6. 07 9月, 2013 1 次提交
  7. 09 5月, 2013 2 次提交
    • M
      xtensa: disable IRQs while IRQ handler is running · 895666a9
      Max Filippov 提交于
      IRQ handlers are expected to run with IRQs disabled.
      See e.g. http://lwn.net/Articles/380931/ for a longer story.
      
      This was overlooked in the commit
        2d1c645c xtensa: dispatch medium-priority interrupts
      Revert to old behavior and simplify interrupt entry and exit code.
      Interrupt handler still honours IRQ priority.
      
      do_notify_resume/schedule must be called with interrupts enabled, enable
      interrupts if we return from user exception.
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      Signed-off-by: NChris Zankel <chris@zankel.net>
      895666a9
    • M
      xtensa: add MMU v3 support · e85e335f
      Max Filippov 提交于
      MMUv3 comes out of reset with identity vaddr -> paddr mapping in the TLB
      way 6:
      
      Way 6 (512 MB)
              Vaddr       Paddr       ASID  Attr RWX Cache
              ----------  ----------  ----  ---- --- -------
              0x00000000  0x00000000  0x01  0x03 RWX Bypass
              0x20000000  0x20000000  0x01  0x03 RWX Bypass
              0x40000000  0x40000000  0x01  0x03 RWX Bypass
              0x60000000  0x60000000  0x01  0x03 RWX Bypass
              0x80000000  0x80000000  0x01  0x03 RWX Bypass
              0xa0000000  0xa0000000  0x01  0x03 RWX Bypass
              0xc0000000  0xc0000000  0x01  0x03 RWX Bypass
              0xe0000000  0xe0000000  0x01  0x03 RWX Bypass
      
      This patch adds remapping code at the reset vector or at the kernel
      _start (depending on CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) that
      reconfigures MMUv3 as MMUv2:
      
      Way 5 (128 MB)
              Vaddr       Paddr       ASID  Attr RWX Cache
              ----------  ----------  ----  ---- --- -------
              0xd0000000  0x00000000  0x01  0x07 RWX WB
              0xd8000000  0x00000000  0x01  0x03 RWX Bypass
      Way 6 (256 MB)
              Vaddr       Paddr       ASID  Attr RWX Cache
              ----------  ----------  ----  ---- --- -------
              0xe0000000  0xf0000000  0x01  0x07 RWX WB
              0xf0000000  0xf0000000  0x01  0x03 RWX Bypass
      Signed-off-by: NMax Filippov <jcmvbkbc@gmail.com>
      Signed-off-by: NChris Zankel <chris@zankel.net>
      e85e335f
  8. 24 2月, 2013 1 次提交
  9. 19 12月, 2012 3 次提交
  10. 16 10月, 2012 1 次提交
  11. 25 5月, 2010 1 次提交
  12. 03 4月, 2009 1 次提交
  13. 11 12月, 2006 1 次提交
  14. 10 9月, 2005 1 次提交
  15. 24 6月, 2005 1 次提交