Ignore:
Timestamp:
Apr 18, 2017, 8:47:31 AM (3 months ago)
Author:
brainslayer
Message:

update kernels

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/arch/mips/kernel/genex.S

    r31859 r31884  
    207207        LONG_L  s0, TI_REGS($28)
    208208        LONG_S  sp, TI_REGS($28)
    209         PTR_LA  ra, ret_from_irq
    210         PTR_LA  v0, plat_irq_dispatch
    211         jr      v0
     209
     210        /*
     211         * SAVE_ALL ensures we are using a valid kernel stack for the thread.
     212         * Check if we are already using the IRQ stack.
     213         */
     214        move    s1, sp # Preserve the sp
     215
     216        /* Get IRQ stack for this CPU */
     217        ASM_CPUID_MFC0  k0, ASM_SMP_CPUID_REG
     218#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)
     219        lui     k1, %hi(irq_stack)
     220#else
     221        lui     k1, %highest(irq_stack)
     222        daddiu  k1, %higher(irq_stack)
     223        dsll    k1, 16
     224        daddiu  k1, %hi(irq_stack)
     225        dsll    k1, 16
     226#endif
     227        LONG_SRL        k0, SMP_CPUID_PTRSHIFT
     228        LONG_ADDU       k1, k0
     229        LONG_L  t0, %lo(irq_stack)(k1)
     230
     231        # Check if already on IRQ stack
     232        PTR_LI  t1, ~(_THREAD_SIZE-1)
     233        and     t1, t1, sp
     234        beq     t0, t1, 2f
     235
     236        /* Switch to IRQ stack */
     237        li      t1, _IRQ_STACK_SIZE
     238        PTR_ADD sp, t0, t1
     239
     2402:
     241        jal     plat_irq_dispatch
     242
     243        /* Restore sp */
     244        move    sp, s1
     245
     246        j       ret_from_irq
    212247#ifdef CONFIG_CPU_MICROMIPS
    213248        nop
     
    282317        LONG_L  s0, TI_REGS($28)
    283318        LONG_S  sp, TI_REGS($28)
    284         PTR_LA  ra, ret_from_irq
    285         jr      v0
     319
     320        /*
     321         * SAVE_ALL ensures we are using a valid kernel stack for the thread.
     322         * Check if we are already using the IRQ stack.
     323         */
     324        move    s1, sp # Preserve the sp
     325
     326        /* Get IRQ stack for this CPU */
     327        ASM_CPUID_MFC0  k0, ASM_SMP_CPUID_REG
     328#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)
     329        lui     k1, %hi(irq_stack)
     330#else
     331        lui     k1, %highest(irq_stack)
     332        daddiu  k1, %higher(irq_stack)
     333        dsll    k1, 16
     334        daddiu  k1, %hi(irq_stack)
     335        dsll    k1, 16
     336#endif
     337        LONG_SRL        k0, SMP_CPUID_PTRSHIFT
     338        LONG_ADDU       k1, k0
     339        LONG_L  t0, %lo(irq_stack)(k1)
     340
     341        # Check if already on IRQ stack
     342        PTR_LI  t1, ~(_THREAD_SIZE-1)
     343        and     t1, t1, sp
     344        beq     t0, t1, 2f
     345
     346        /* Switch to IRQ stack */
     347        li      t1, _IRQ_STACK_SIZE
     348        PTR_ADD sp, t0, t1
     349
     3502:
     351        jalr    v0
     352
     353        /* Restore sp */
     354        move    sp, s1
     355
     356        j       ret_from_irq
    286357        END(except_vec_vi_handler)
    287358
Note: See TracChangeset for help on using the changeset viewer.