uclinux-2008r1(bf561)内核的icache支持(4):换页问题
2008-05-16 16:08
447 查看
很明显,在初始化的时候,当SDRAM>32M时,icache是无法覆盖整个存储空间的,此时,uclinux内核必然会发生I-fetch CPLB miss异常。uclinux内核对这种异常情况的处理由_cplb_mgr完成,这个函数在arch/blackfin/kernel/cplb-nompu/cplbmgr.S中,它将在整个存储区域的配置列表中寻找一个合适的块,替换掉ICACHE_DATA15和ICACHE_ADDR15,即它总是替换最新的一个页。
在这里,整个存储区域配置的列表保存在一个叫ipdt_table的数组中,看看他的定义:
u_long ipdt_table[MAX_SWITCH_I_CPLBS + 1] PDT_ATTR;
/*
* Number of required instruction CPLB switchtable entries
* MEMSIZE / 4 (we mostly install 4M page size CPLBs
* approx 12 for smaller 1MB page size CPLBs for allignment purposes
* 1 for L1 Instruction Memory
* possibly 1 for L2 Instruction Memory
* 1 for CONFIG_DEBUG_HUNT_FOR_ZERO
*/
#define MAX_SWITCH_I_CPLBS (((CONFIG_MEM_SIZE / 4) + 12 + 1 + 1 + 1) * 2)
这个数组同样是交叉保存了ICPLB_ADDR和ICPLB_DATA的值,它的初始化同样由generate_cpl_tables函数完成,与icplb_table的初始化类似。
在这里,整个存储区域配置的列表保存在一个叫ipdt_table的数组中,看看他的定义:
u_long ipdt_table[MAX_SWITCH_I_CPLBS + 1] PDT_ATTR;
/*
* Number of required instruction CPLB switchtable entries
* MEMSIZE / 4 (we mostly install 4M page size CPLBs
* approx 12 for smaller 1MB page size CPLBs for allignment purposes
* 1 for L1 Instruction Memory
* possibly 1 for L2 Instruction Memory
* 1 for CONFIG_DEBUG_HUNT_FOR_ZERO
*/
#define MAX_SWITCH_I_CPLBS (((CONFIG_MEM_SIZE / 4) + 12 + 1 + 1 + 1) * 2)
这个数组同样是交叉保存了ICPLB_ADDR和ICPLB_DATA的值,它的初始化同样由generate_cpl_tables函数完成,与icplb_table的初始化类似。
相关文章推荐
- uclinux-2008r1(bf561)内核的icache支持(3):__fill_code_cplbtab
- uclinux-2008r1(bf561)内核的icache支持(1):寄存器配置初始化
- uclinux-2008r1(bf561)内核的icache支持(2):icplb_table的生成
- 再读uclinux-2008r1(bf561)内核存储区域管理(5):page初始化
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(55): filemap.c的问题
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(47): d_alloc引出的问题
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(52):cache.s的问题
- 再读uclinux-2008r1-rc8(bf561)内核的中断处理(1):数据结构
- 再读uclinux-2008r1(bf561)内核存储区域管理(1):相关数据结构
- uclinux-2008r1-rc8(bf561)内核的console(1):数据结构
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(59): Milestone:内核成功启动
- 再读uclinux-2008r1(bf561)内核存储区域管理(2):可用页表初始化
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(54): initramfs的问题
- uclinux-2008r1(bf561)内核存储区域初探
- 重读uclinux-2008r1-rc8(bf561)内核的中断处理(2):中断配置
- 再读uclinux-2008r1(bf561)内核中的bootmem
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(53):reboot.c的问题
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(48): __cmpxchg的问题
- 重读uclinux-2008r1-rc8(bf561)内核的中断处理(3):中断处理流程
- uclinux-2008R1-RC8(bf561)到VDSP5的移植(13):未命名union的问题