|
@@ -11,6 +11,7 @@
|
|
|
#include <linux/log2.h>
|
|
|
#include <linux/typecheck.h>
|
|
|
#include <linux/printk.h>
|
|
|
+#include <linux/build_bug.h>
|
|
|
#include <asm/byteorder.h>
|
|
|
#include <uapi/linux/kernel.h>
|
|
|
|
|
@@ -854,9 +855,12 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { }
|
|
|
* @member: the name of the member within the struct.
|
|
|
*
|
|
|
*/
|
|
|
-#define container_of(ptr, type, member) ({ \
|
|
|
- const typeof( ((type *)0)->member ) *__mptr = (ptr); \
|
|
|
- (type *)( (char *)__mptr - offsetof(type,member) );})
|
|
|
+#define container_of(ptr, type, member) ({ \
|
|
|
+ void *__mptr = (void *)(ptr); \
|
|
|
+ BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
|
|
|
+ !__same_type(*(ptr), void), \
|
|
|
+ "pointer type mismatch in container_of()"); \
|
|
|
+ ((type *)(__mptr - offsetof(type, member))); })
|
|
|
|
|
|
/* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */
|
|
|
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
|