博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每个cpu有一个16byte的中断栈
阅读量:4215 次
发布时间:2019-05-26

本文共 1047 字,大约阅读时间需要 3 分钟。

在arm64/kernel/irq.c中有为每个cpu定义一个16 byte的中断栈#ifdef CONFIG_VMAP_STACKstatic void init_irq_stacks(void){	int cpu;	unsigned long *p;	for_each_possible_cpu(cpu) {		p = arch_alloc_vmap_stack(IRQ_STACK_SIZE, cpu_to_node(cpu));		per_cpu(irq_stack_ptr, cpu) = p;	}}#else/* irq stack only needs to be 16 byte aligned - not IRQ_STACK_SIZE aligned. */DEFINE_PER_CPU_ALIGNED(unsigned long [IRQ_STACK_SIZE/sizeof(long)], irq_stack);static void init_irq_stacks(void){	int cpu;	for_each_possible_cpu(cpu)		per_cpu(irq_stack_ptr, cpu) = per_cpu(irq_stack, cpu);}#endif这里我们没有定义CONFIG_VMAP_STACK#define THREAD_SIZE		(UL(1) << THREAD_SHIFT)其中THREAD_SHIFT的定义如下:#if defined(CONFIG_VMAP_STACK) && (MIN_THREAD_SHIFT < PAGE_SHIFT)#define THREAD_SHIFT		PAGE_SHIFT#else#define THREAD_SHIFT		MIN_THREAD_SHIFT#endif由于没有定义CONFIG_VMAP_STACK,因此这里thread_shift等于MIN_THREAD_SHIFT#define MIN_THREAD_SHIFT	(14 + KASAN_THREAD_SHIFT)由于我们没有定义KASAN_THREAD_SHIFT,因此KASAN_THREAD_SHIFT等于0在DEFINE_PER_CPU_ALIGNED(unsigned long [IRQ_STACK_SIZE/sizeof(long)], irq_stack);中为每个cpu就定义了一个16 byte的中断栈

 

转载地址:http://hinmi.baihongyu.com/

你可能感兴趣的文章
归并排序
查看>>
归并排序
查看>>
排序链表
查看>>
插入排序进行链表排序
查看>>
响应时间和周转时间区别
查看>>
spring 引入外部文件 配置数据源
查看>>
c++ 经典习题源码
查看>>
Hex Editor Neo 查看各种进制数
查看>>
android 实现倒计时功能
查看>>
android Button 的绑定,监听及其背景的改变
查看>>
android 开启闪关灯手电筒的实现
查看>>
android canvas 画布
查看>>
android 实现各activity之间的跳转
查看>>
android 实现输入计算输出
查看>>
android 退出提示框
查看>>
android 获得当前屏幕的大小高度与宽度
查看>>
让自己不空虚就做出点事了
查看>>
android 标题 名字修改设计
查看>>
android 保持屏幕常亮
查看>>
android 获取权限以及feature
查看>>