免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1681 | 回复: 0
打印 上一主题 下一主题

Mips 34k smp MT 一点分析备忘 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-29 15:14 |只看该作者 |倒序浏览

                                                /*mem init */
setup_arch()->prom_init()->prom_meminit()->add_memory_region()
add_memory_region 修改boot_mem_map
linux->arch->mips->init.c:
void __init bootmem_init(void) 根据 boot_mem_map 标记物理内存:
start_kernel()-->setup_arch()-->arch_mem_init()->bootmem_init 标记物理内存
boot_mem_map.nr_map记录所有内存
//MIPS 34K SMP_MT 模式
//init TC&VPE
start_kernel()->
rest_init()->kernel_init()->smp_prepare_cpus()->msmtc_prepare_cpus()
msmtc_prepare_cpus()->smtc_prepare_cpus()->
->emt(EMT_ENABLE);        evpe(EVPE_ENABLE);
(/* Arm multithreading and enable other VPEs - but all TCs are Halted */)
/*启用各个CPU 并初始化后 进入idle*/
kernel_init->()smp_init()->cpu_up->_cpu_up _cpu_up->__cpu_up()->
msmtc_boot_secondary()->smtc_boot_secondary():
set "tc_restart:" register ->
head.s:smp_bootstrap()->start_secondary()->cpu_idle()
                                                                                                                                                                                             
smtc_boot_secondary()->write_tc_c0_tcrestart()
                                                             |->write_tc_c0_tchalt()
                              
//个TC优先级时间设置                                                                                                                                             
TCSCHEDULE_MT_WRITE
#define TCSCHEDULE_MT_READ() mftc0(2,6)
#define TCSCHEDULE_MT_WRITE(val) mttc0(2,6,(val))   
//except_vector
void __init trap_init(void)
{
        .....
        if (cpu_has_mipsmt)
                //set_except_vector(25, handle_mt);                             
          
set_except_vector(25, smtc_thread_exception_handler);                       
smtc_thread_exception()->smtc_do_pending_irqs()->smtc_handle_pending_ipis()
->smp_call_function_interrupt()                                                                                                               
         
//调度 schedule获取当前 cpu ID 选择process
schedule()->context_switch()->switch_to()
linux/include/asm-mips/system.h:
#define switch_to(prev,next,last)->
extern asmlinkage void *resume(void *last, void *next, void *next_ti);
(r4k_switch.s)
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/39383/showart_2106729.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP