当内核指针因为缺页或者等其他原因不能正常返回的时候,内核返回什么?ret?不太可能,因为本身定义的就是返回一个指针。内核的设计者将内核地址空间的最后一个页(具体地址空间要看地址是多少位的)作为出错地址,因为内核的errno最大有4095个,而一页一般是4096,所以可以在最后一页和出错代码之间建立关系。(unsigned long)-MAX_ERRNO。
比如kthread_run就是这样的机制。
返回的指针先用IS_ERR()来判断是否是错误指针,如果是的话就用PTR_ERROR来转化为错误代码。