1 /*
2 * linux/kernel/panic.c
3 *
4 * (C) 1991 Linus Torvalds
5 */
6
7 /*
8 * This function is used through-out the kernel (includeinh mm and fs)
9 * to indicate a major problem.
10 */
/*
* 该函数在整个内核中使用(包括在 头文件*.h, 内存管理程序mm和文件系统fs中),
* 用以指出主要的出错问题。
*/
11 #include <linux/kernel.h> // 内核头文件。含有一些内核常用函数的原形定义。
12 #include <linux/sched.h> // 调度程序头文件,定义了任务结构task_struct、初始任务0的数据,
// 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。
13
14 void sys_sync(void); /* it's really int */ /* 实际上是整型int (fs/buffer.c,44) */
15
// 该函数用来显示内核中出现的重大错误信息,并运行文件系统同步函数,然后进入死循环--死机。
// 如果当前进程是任务0的话,还说明是交换任务出错,并且还没有运行文件系统同步函数。
// 函数名前的关键字volatile用于告诉编译器gcc该函数不会返回。这样可让gcc产生更好一些的
// 代码,更重要的是使用这个关键字可以避免产生某些(未初始化变量的)假警告信息。
// 等同于现在gcc的函数属性说明:void panic(const char *s) __attribute__ ((noreturn));
16 volatile void panic(const char * s)
17 {
18 printk("Kernel panic: %s\n\r",s);
19 if (current == task[0])
20 printk("In swapper task - not syncing\n\r");
21 else
22 sys_sync();
23 for(;;);
24 }
25