The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/lib/libspl/include/sys/stack.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 /*
   22  * This header file distributed under the terms of the CDDL.
   23  * Portions Copyright 2008 Sun Microsystems, Inc. All Rights reserved.
   24  */
   25 #ifndef _SYS_STACK_H
   26 #define _SYS_STACK_H
   27 
   28 #include <pthread.h>
   29 
   30 #define STACK_BIAS      0
   31 
   32 #ifdef __USE_GNU
   33 
   34 static inline int
   35 stack_getbounds(stack_t *sp)
   36 {
   37         pthread_attr_t attr;
   38         int rc;
   39 
   40         rc = pthread_getattr_np(pthread_self(), &attr);
   41         if (rc)
   42                 return (rc);
   43 
   44         rc = pthread_attr_getstack(&attr, &sp->ss_sp, &sp->ss_size);
   45         if (rc == 0)
   46                 sp->ss_flags = 0;
   47 
   48         pthread_attr_destroy(&attr);
   49 
   50         return (rc);
   51 }
   52 
   53 static inline int
   54 thr_stksegment(stack_t *sp)
   55 {
   56         int rc;
   57 
   58         rc = stack_getbounds(sp);
   59         if (rc)
   60                 return (rc);
   61 
   62         /*
   63          * thr_stksegment() is expected to set sp.ss_sp to the high stack
   64          * address, but the stack_getbounds() interface is expected to
   65          * set sp.ss_sp to the low address.  Adjust accordingly.
   66          */
   67         sp->ss_sp = (void *)(((uintptr_t)sp->ss_sp) + sp->ss_size);
   68         sp->ss_flags = 0;
   69 
   70         return (rc);
   71 }
   72 
   73 #endif /* __USE_GNU */
   74 #endif /* _SYS_STACK_H */

Cache object: cbb7f46448741c2bf84830e936294f67


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.