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.4/arch/mips/kernel/genex.S

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