1)合法指针:内核返回的指针一般是指向页面的边界(4K边界),即ptr & 0xfff == 0 2)非法指针:这样ptr的值不可能落在(0xfffff000,0xffffffff)之间(这个区间是内核高端内存所在的区间,关于用户空间和内核空间,可以看考这里。), 而一般内核的出错代码也是一个小负数,在-1000到0之间,转变成unsigned long,正好在(0x...
比如说我们上面的filp_open函数返回值,用IS_ERR函数去检查,如果地址落在0xfffffffffffff000~0xffffffffffffffff范围,表示filp_open函数失败,IS_ERR为1,同时filp_open返回的错误地址对应一个linux的错误号,如果想知道是哪个错误号,就用PTR_ERR函数来转化。错误的返回地址和错误号是可以根据截图中的ERR_PTR、PTR_ERR...
static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) { if (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0; } 应用到如下地方用于减少函数行,使用统一api diff --git a/drivers/pci/controller/dwc/pcie-kirin.c b/drivers/pci/controller/dwc/pcie-kirin.c index c19617...
dev_err(dev,"Can't find cpu/codec DT node\n");returnERR_PTR(-EINVAL); } link->cpu_of_node = of_parse_phandle(cpu,"sound-dai",0);if(!link->cpu_of_node) { dev_err(card->dev,"error getting cpu phandle\n");returnERR_PTR(-EINVAL); } ret = snd_soc_of_get_dai_name(cpu, ...
几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR,程序员大本营,技术文章内容聚合第一站。
ERR_PTR,PTR_ERR还有IS_ERR函数详解 内核中的函数常常返回指针,问题是如果出错,也希望能够通过返回的指针体现出来。 总体来说,如果内核返回一个指针,那么有三种情况:合法指针,NULL指针和非法指针。 1)合法指针:内核返回的指针一般是指向页面的边界(4K边界),即ptr & 0xfff == 0...
表示filp_open函数失败,IS_ERR为1,同时filp_open返回的错误地址对应一个linux的错误号, 如果想知道是哪个错误号,就用PTR_ERR函数来转化。 错误的返回地址和错误号是可以使用 ERR_PTR、PTR_ERR 相互转化的。
该函数返回strcut file*结构指针,供后继函数操作使用,该返回值用IS_ERR()来检验其有效性。 参数说明: 第一个参数是filp_open返回的file结构体指针 第二个参数基本上都是NULL 参数说明: 第一个参数是filp_open返回的file结构体指针 第二个参数是buf,注意,这个参数有用__user修饰,表明buf指向用户空间的地址,如果...
IS_ERR、PTR_ERR、ERR_PTR 2015-04-10 14:33 −最近在使用filp_open打开文件时遇到到一个问题,当打开一个并不存在的文件时,filp_open返回值值为0xfffffffe,而并不是0(NULL),这是因为内核对返回指针的函数做了特殊处理。内核中的函数常常返回指针,通常如果调用出错,会返回NULL空指针,但linux做了更精妙的处...