把中断路由到对应的cpu上
来源:互联网 发布:监控录像分析软件 编辑:程序博客网 时间:2024/05/22 06:55
当cpu使能后(使能时就会进行初始化),就可以正行运行了,当然也包括处理中断,但是这个时候,中断还没有路由到对应的cpu上。
整理的函数正确运行后,中断就路由到对应的cpu上了。
这里呢就分析一下中断是怎么路由到它自己对应的cpu上的。
看一下函数调用:
usrRoot-->usrSmpInit-->usrEnableCpu-->usrSmpCpuEnableHook-->vxbIntToCpuRoute-->vxbDevMethodRun-->vxbIntCtlrCpuReroute-->vxbMipsSbIntCtlrCpuReroute
整理的函数正确运行后,中断就路由到对应的cpu上了。
看一下最后一个函数做了什么动作:
LOCAL STATUS vxbMipsSbIntCtlrCpuReroute ( VXB_DEVICE_ID pDev, void * destCpu ) { struct intCtlrHwConf *isrHandle = &(pVxbPMipsSbIntCtlrDrvCtrl->isrHandle); int i, cpunum, outputPin, configCpu; BOOL flag; void (*func)(); /* move interrupts to requested cpu */ for (i = 0;i < SB1_NUM_INT_SOURCES;i++) {/*判断对应的引脚有没有设置*/ VXB_INTCTLR_PINENTRY_ALLOCATED(isrHandle, i, flag); if (flag) { /*获取这个引脚的处理函数,如果函数为空或者等于intCtlrStrayISR就跳过*/ MIPS_SBE_ISR(isrHandle, i, func); if (func == NULL || func == intCtlrStrayISR) continue;/*获取这个引脚对应的cpu号*/ MIPS_SBE_DESTCPU(isrHandle, i, configCpu); if (configCpu == (int)destCpu) {/*把其他cpu上这个中断源禁止掉,也就是只有对应的cpu可以处理*/ for (cpunum = 0; cpunum < SB_NUM_CORES; cpunum++) sb1IntDisableCore (i, cpunum);/*获取这个引脚对应的输出引脚*/ MIPS_SBE_OUTPUTPIN(isrHandle, i, outputPin);/*把这个输出引脚路由到对应的cpu上*/ sb1IntConnectCore (i, outputPin, (int)destCpu);/*并使能中断*/ VXB_INTCTLR_PINENTRY_ENABLED(isrHandle, i, flag);/*使能中断*/ if (flag) sb1IntEnableCore (i, (int)destCpu); } } }/*记录已经使能的cpu*/ pVxbPMipsSbIntCtlrDrvCtrl->enabledCpus |= (1 << (int)destCpu); return (OK); }看一下上面使用的一些宏操作:
/*获取中断函数*/#define MIPS_SBE_ISR(pEnt,inputPin,func) \ { \ struct vxbIntCtlrPin * pPin = \ vxbIntCtlrPinEntryGet(pEnt,inputPin); \ func = pPin->isr; \ }/*获取一个引脚的输出引脚*/#define MIPS_SBE_OUTPUTPIN(pEnt,inputPin,outputPin) \ { \ struct vxbIntCtlrPin * pPin = \ vxbIntCtlrPinEntryGet(pEnt,inputPin); \ outputPin = pPin->pinOutput; \ }/*获取一个引脚中断要路由到哪个cpu*/#define MIPS_SBE_DESTCPU(pEnt,inputPin,destCpu) \ { \ struct vxbIntCtlrPin * pPin = \ vxbIntCtlrPinEntryGet(pEnt,inputPin); \ destCpu = pPin->pinCpu; \ }挂接到对应cpu的函数:
LOCAL STATUS sb1IntConnectCore ( int intrSource, /* interrupt level / sb1 source number */ int intrLine,/* interrupt output line */ int cpunum/* core number to operate on */ ) { #ifdef SOUTH_BRIDGE2Hif(intrSource == HT1_INT0)intrSource = SYS_INT0;#endif/*设置对应的中断的额路由寄存器,根据输入的参数设置要路由到哪个cpu核哪个输出引脚上,核间通信寄存器*/MIPS_SB64((((unsigned int)(SB1_INT_CTLR(bcm1xxxIntMapBaseH)))+intrSource),(1<<(intrLine+4))|(1<<cpunum)); return (OK); }
使能对应核的cpu上的中断:
LOCAL STATUS sb1IntEnableCore ( int intrSource, int cpunum ) { STATUS retStatus;#ifdef SOUTH_BRIDGE2Hif(intrSource == HT1_INT0)intrSource = SYS_INT0;#endif retStatus = OK;/*设置对应中断的使能寄存器置位,这里的寄存器是核间通信寄存器*/MIPS_SW64((unsigned int)SB1_INT_CTLR(bcm1xxxIntMaskL),(unsigned int)(1<<intrSource)); return (retStatus); }
阅读全文
0 0
- 把中断路由到对应的cpu上
- 中断从硬件到内核的路由
- 多核优化,使用linux affinity 将进程,线程,中断指定到对应的cpu运行,用ftrace查看消耗时间
- linux中断由硬件到内核的路由
- 将网卡中断分布到多个cpu上的方法
- linux下绑定硬件中断到不同的cpu
- 内核如何与中断号对应上
- 在git服务器上新建一个工程,怎么把本地的工程对应到远程的git服务器上面的工程
- MacOS上添加到某网络的路由
- cpu的中断响应时间
- CPU响应中断的条件
- 关于把keil上的工程移植到IAR上
- 把书本上的字快速弄到电脑上
- 在picturebox上画一条线,然后在线上写字,把文字对应的线删掉
- ucos移植到stm32上的中断小小改进
- 通过Jstack分析CPU占用的线程查找到对应的线程代码
- 一个多线程绑定到不同cpu上的例子
- 多CPU的机器上在驱动中如何HOOK中断
- Oracle数据库底层
- 李宏毅机器学习课程10~~~卷积神经网络
- Tuxedo 介绍与安装(一)
- 银根收紧 加息
- Echarts数据可视化series-scatter散点图,开发全解+完美注释
- 把中断路由到对应的cpu上
- 融合车牌识别算法的PC端车牌识别SDK
- cpu-tlb-缓存-窗口通路
- [HNOI2008]GT考试
- 盒子模型
- 居中
- Linux--系统网络测试和测试工具
- 【普及模拟】城市连接
- 多核初始化过程