Messages in this thread | | | Date | Tue, 21 Sep 2010 15:53:34 +0800 | From | Américo Wang <> | Subject | Re: A simple question of sys_ |
| |
On Mon, Sep 20, 2010 at 04:28:36PM +0800, Rofail Qu wrote: >2010/9/20 Américo Wang <xiyou.wangcong@gmail.com>: >> On Fri, Sep 17, 2010 at 02:58:30PM +0800, Rofail Qu wrote: >>>How to use macro IS_ERR() ? >>> >>>It defines as, >>>... >>>#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) >>>static inline long __must_check IS_ERR(const void *ptr) >>>{ >>> return IS_ERR_VALUE((unsigned long)ptr); >>>} >>>... >>>so when pass x as a pointer and x>=-MAX_ERRNO (including NULL or any >>>valid address), >>>IS_ERR() will return true! >> >> NULL is not an error pointer, you missed the cast to unsigned long. >Ahh, yeah. A stupid mistake i have. >Thanks. >> >> >>>IS_ERR(x) seems to use on judge if "x" is a valid error number, right? >>> >> >> Strictly speaking, it checks if 'x' is an error pointer. >Then what is the range of a valid pointer? >At least less than (unsigned long)-MAX_ERRNO from this case.
Yeah, the last page in the virtual memory address is reserved, so all but the last page are non-error addresses. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |