Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/start.S

    rfae1647 rd9ee2ea  
    5050        .auto
    5151       
     52#ifdef CONFIG_SMP
     53        # Identify self(CPU) in OS structures by ID / EID
     54       
     55        mov r9 = cr64
     56        mov r10 = 1
     57        movl r12 = 0xffffffff
     58        movl r8 = cpu_by_id_eid_list
     59        and r8 = r8, r12
     60        shr r9 = r9, 16
     61        add r8 = r8, r9
     62        st1 [r8] = r10
     63#endif
     64       
    5265        mov psr.l = r0
    5366        srlz.i
     
    151164        bsw.1
    152165       
     166#ifdef CONFIG_SMP
     167        # Am I BSP or AP?
     168        movl r20 = bsp_started ;;
     169        ld8 r20 = [r20] ;;
     170        cmp.eq p3, p2 = r20, r0 ;;
     171#else
     172        cmp.eq p3, p2 = r0, r0 ;;  /* you are BSP */
     173#endif  /* CONFIG_SMP */
     174       
    153175        # Initialize register stack
    154176        mov ar.rsc = r0
     
    169191         * Initialize bootinfo on BSP.
    170192         */
    171         addl r21 = @gprel(bootinfo), gp ;;
    172         st8 [r21] = r20
     193(p3)    addl r21 = @gprel(bootinfo), gp ;;
     194(p3)    st8 [r21] = r20
    173195       
    174196        ssm (1 << 19) ;; /* Disable f32 - f127 */
     
    176198        srlz.d ;;
    177199       
     200#ifdef CONFIG_SMP
     201(p2)    movl r18 = main_ap ;;
     202(p2)    mov b1 = r18 ;;
     203(p2)    br.call.sptk.many b0 = b1
     204       
     205        # Mark that BSP is on
     206       
     207        mov r20 = 1 ;;
     208        movl r21 = bsp_started ;;
     209        st8 [r21] = r20 ;;
     210#endif
     211       
    178212        br.call.sptk.many b0 = arch_pre_main
    179 0:
    180         br.call.sptk.many b0 = main_bsp
     213       
     214        movl r18 = main_bsp ;;
     215        mov b1 = r18 ;;
     216        br.call.sptk.many b0 = b1
     217
    1812180:
    182219        br 0b
     220
     221#ifdef CONFIG_SMP
     222
     223.align 4096
     224kernel_image_ap_start:
     225        .auto
     226       
     227        # Identify self(CPU) in OS structures by ID / EID
     228       
     229        mov r9 = cr64
     230        mov r10 = 1
     231        movl r12 = 0xffffffff
     232        movl r8 = cpu_by_id_eid_list
     233        and r8 = r8, r12
     234        shr r9 = r9, 16
     235        add r8 = r8, r9
     236        st1 [r8] = r10
     237       
     238        # Wait for wakeup synchro signal (#3 in cpu_by_id_eid_list)
     239
     240kernel_image_ap_start_loop:
     241        movl r11 = kernel_image_ap_start_loop
     242        and r11 = r11, r12
     243        mov b1 = r11
     244       
     245        ld1 r20 = [r8]
     246        movl r21 = 3
     247        cmp.eq p2, p3 = r20, r21
     248(p3)    br.call.sptk.many b0 = b1
     249       
     250        movl r11 = kernel_image_start
     251        and r11 = r11, r12
     252        mov b1 = r11
     253        br.call.sptk.many b0 = b1
     254
     255.align 16
     256.global bsp_started
     257bsp_started:
     258        .space 8
     259
     260.align 4096
     261.global cpu_by_id_eid_list
     262cpu_by_id_eid_list:
     263        .space 65536
     264
     265#endif  /* CONFIG_SMP */
Note: See TracChangeset for help on using the changeset viewer.