1*fa862482SVladimir Kondratyev /*- 2*fa862482SVladimir Kondratyev * Copyright (c) 2010 Isilon Systems, Inc. 3*fa862482SVladimir Kondratyev * Copyright (c) 2010 iX Systems, Inc. 4*fa862482SVladimir Kondratyev * Copyright (c) 2010 Panasas, Inc. 5*fa862482SVladimir Kondratyev * Copyright (c) 2017 Matt Macy <mmacy@FreeBSD.org> 6*fa862482SVladimir Kondratyev * All rights reserved. 7*fa862482SVladimir Kondratyev * 8*fa862482SVladimir Kondratyev * Redistribution and use in source and binary forms, with or without 9*fa862482SVladimir Kondratyev * modification, are permitted provided that the following conditions 10*fa862482SVladimir Kondratyev * are met: 11*fa862482SVladimir Kondratyev * 1. Redistributions of source code must retain the above copyright 12*fa862482SVladimir Kondratyev * notice unmodified, this list of conditions, and the following 13*fa862482SVladimir Kondratyev * disclaimer. 14*fa862482SVladimir Kondratyev * 2. Redistributions in binary form must reproduce the above copyright 15*fa862482SVladimir Kondratyev * notice, this list of conditions and the following disclaimer in the 16*fa862482SVladimir Kondratyev * documentation and/or other materials provided with the distribution. 17*fa862482SVladimir Kondratyev * 18*fa862482SVladimir Kondratyev * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19*fa862482SVladimir Kondratyev * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20*fa862482SVladimir Kondratyev * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21*fa862482SVladimir Kondratyev * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22*fa862482SVladimir Kondratyev * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23*fa862482SVladimir Kondratyev * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24*fa862482SVladimir Kondratyev * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25*fa862482SVladimir Kondratyev * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26*fa862482SVladimir Kondratyev * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27*fa862482SVladimir Kondratyev * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*fa862482SVladimir Kondratyev */ 29*fa862482SVladimir Kondratyev 30*fa862482SVladimir Kondratyev #ifndef _LINUXKPI_LINUX_CONTAINER_OF_H 31*fa862482SVladimir Kondratyev #define _LINUXKPI_LINUX_CONTAINER_OF_H 32*fa862482SVladimir Kondratyev 33*fa862482SVladimir Kondratyev #include <sys/stdint.h> 34*fa862482SVladimir Kondratyev 35*fa862482SVladimir Kondratyev #include <linux/build_bug.h> 36*fa862482SVladimir Kondratyev #include <linux/stddef.h> 37*fa862482SVladimir Kondratyev 38*fa862482SVladimir Kondratyev #define container_of(ptr, type, member) \ 39*fa862482SVladimir Kondratyev ({ \ 40*fa862482SVladimir Kondratyev const __typeof(((type *)0)->member) *__p = (ptr); \ 41*fa862482SVladimir Kondratyev (type *)((uintptr_t)__p - offsetof(type, member)); \ 42*fa862482SVladimir Kondratyev }) 43*fa862482SVladimir Kondratyev 44*fa862482SVladimir Kondratyev #define typeof_member(type, member) __typeof(((type *)0)->member) 45*fa862482SVladimir Kondratyev 46*fa862482SVladimir Kondratyev #endif 47