`is_err` 是 Linux 内核中的一个宏,用于判断一个返回值是否表示错误。这个宏通常与内核中的错误码一起使用,以简化错误处理逻辑。 ### 基础概念 在内核编程中,很多函数会返回一个状态码...
#defineIS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (0xFFFFF000)) 也就是判断传入的指针值是否落在区间0xFFFF F000~0xFFFF FFFF之内,如果落在这个区间之内的话,就是无效的指针,因此,可以使用IS_ERR()函数去判断内核函数中返回的指针值是否是有效的指针,另外,平时在内核中看见的错误号码都是...
void*ERR_PTR(longerror);longIS_ERR(constvoid*ptr);longPTR_ERR(constvoid*ptr); 第一个函数实际上把错误值作为指针返回。假若函数在内存申请失败后要执行语句return -ENOMEM;,则必须改为这样的语句:return ERR_PTR(-ENOMEM);。 第二个函数用于检查返回值是否是指针错误:if (IS_ERR(foo))。最后一个函数返...
char __user * __user *envp, struct pt_regs *regs) { int error; char * filename; filename = getname(filenamei); error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; error = do_execve(filename, argv, envp, regs); putname(filename); out: return error; } ...
本文介绍Linux 4.4内核IS_ERR()函数。 文件:include/linux/err.h,定义如下: 一、功能 功能:判断传入的指针ptr是否有效。 Linux内核...
如果传递给IS_ERR()函数的参数是一个页面的首地址指针,那么必然是一个错误指针。 IS_ERR()也可以用来检测一个错误码,这就是与ERR_PTR()配合使用了,看下面一小段代码:(kernel/fs/namespace.c/sys_mount()) asmlinkage long sys_mount(char * dev_name, char * dir_name, char * type, ...
在IS_ERR()函数中 (unsigned long)-MAX_ERRNO实际上表示的是0xFFFFF001(因为负数在计算机中是原码的补码),在linux中虚拟内存空间的分配,0~3G是给用 户空间的,而3G~4G是给linux内核的,而0xFFFFF000就位于linux内核的虚拟内存空间范围内,从0xFFFFF000到4G间的大小 只有4KB,这实际上也就是一个PAGE_SIZE的大小,...
{return(void*)error;}staticinline long __must_checkPTR_ERR(constvoid*ptr){return(long)ptr;}staticinline long __must_checkIS_ERR(constvoid*ptr){returnIS_ERR_VALUE((unsigned long)ptr);}staticinline long __must_checkIS_ERR_OR_NULL(constvoid*ptr){return!ptr||IS_ERR_VALUE((unsigned long)...
36 return ERR_PTR(-ENOMEM); 38 ret = kfifo_init(buffer, size, gfp_mask, lock); 39 40 if (IS_ERR(ret)) 41 kfree(buffer); 43 return ret; 44 } 在kfifo_init和kfifo_calloc中,kfifo->size的值总是在调用者传进来的size参数的基础上向2的幂扩展,这是内核一贯的做法。这样的好处不言而喻-...
if (IS_ERR(iommu) && PTR_ERR(iommu) == -EPROBE_DEFER) return -EPROBE_DEFER; dev_dbg(dev, "device is%sbehind an iommu\n", iommu ? " " : " not "); arch_setup_dma_ops(dev, dma_addr, size, iommu, coherent); return 0; ...