1*4164e152SWei Yang /* SPDX-License-Identifier: GPL-2.0 */
2*4164e152SWei Yang #ifndef _TOOLS_LINUX_CONTAINER_OF_H
3*4164e152SWei Yang #define _TOOLS_LINUX_CONTAINER_OF_H
4*4164e152SWei Yang 
5*4164e152SWei Yang #ifndef container_of
6*4164e152SWei Yang /**
7*4164e152SWei Yang  * container_of - cast a member of a structure out to the containing structure
8*4164e152SWei Yang  * @ptr:	the pointer to the member.
9*4164e152SWei Yang  * @type:	the type of the container struct this is embedded in.
10*4164e152SWei Yang  * @member:	the name of the member within the struct.
11*4164e152SWei Yang  *
12*4164e152SWei Yang  */
13*4164e152SWei Yang #define container_of(ptr, type, member) ({			\
14*4164e152SWei Yang 	const typeof(((type *)0)->member) * __mptr = (ptr);	\
15*4164e152SWei Yang 	(type *)((char *)__mptr - offsetof(type, member)); })
16*4164e152SWei Yang #endif
17*4164e152SWei Yang 
18*4164e152SWei Yang #endif	/* _TOOLS_LINUX_CONTAINER_OF_H */
19