Print this page
    
OS-5223 removed shm segment is no longer available
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/sys/shm_impl.h
          +++ new/usr/src/uts/common/sys/shm_impl.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  
    | 
      ↓ open down ↓ | 
    13 lines elided | 
    
      ↑ open up ↑ | 
  
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
       24 + * Copyright 2016 Joyent, Inc.
  24   25   */
  25   26  
  26   27  #ifndef _SYS_SHM_IMPL_H
  27   28  #define _SYS_SHM_IMPL_H
  28   29  
  29      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  30      -
  31   30  #include <sys/ipc_impl.h>
  32   31  #if defined(_KERNEL) || defined(_KMEMUSER)
  33   32  #include <sys/shm.h>
  34   33  #include <sys/avl.h>
  35   34  #include <sys/t_lock.h>
  36   35  #endif
  37   36  
  38   37  #ifdef  __cplusplus
  39   38  extern "C" {
  40   39  #endif
  41   40  
  42   41  /*
  43   42   * shmsys system call subcodes
  44   43   */
  45   44  #define SHMAT   0
  46   45  #define SHMCTL  1
  47   46  #define SHMDT   2
  48   47  #define SHMGET  3
  49   48  #define SHMIDS  4
  50   49  
  51   50  /*
  52   51   *      There is a shared mem id data structure (shmid_ds) for each
  53   52   *      segment in the system.
  54   53   */
  55   54  #if defined(_KERNEL) || defined(_KMEMUSER)
  56   55  typedef struct kshmid {
  57   56          kipc_perm_t     shm_perm;       /* operation permission struct */
  58   57          size_t          shm_segsz;      /* size of segment in bytes */
  59   58          struct anon_map *shm_amp;       /* segment anon_map pointer */
  60   59          ushort_t        shm_lkcnt;      /* number of times it is being locked */
  61   60          pgcnt_t         shm_lkpages;    /* number of pages locked by shmctl */
  62   61          kmutex_t        shm_mlock;      /* held when locking physical pages */
  
    | 
      ↓ open down ↓ | 
    22 lines elided | 
    
      ↑ open up ↑ | 
  
  63   62                                          /* Therefore, protects p_lckcnt for */
  64   63                                          /* pages that back shm */
  65   64          pid_t           shm_lpid;       /* pid of last shmop */
  66   65          pid_t           shm_cpid;       /* pid of creator */
  67   66          ulong_t         shm_ismattch;   /* number of ISM attaches */
  68   67          time_t          shm_atime;      /* last shmat time */
  69   68          time_t          shm_dtime;      /* last shmdt time */
  70   69          time_t          shm_ctime;      /* last change time */
  71   70          struct sptinfo  *shm_sptinfo;   /* info about ISM segment */
  72   71          struct seg      *shm_sptseg;    /* pointer to ISM segment */
  73      -        long            shm_sptprot;    /* was reserved (still a "long") */
       72 +        ulong_t         shm_opts;
       73 +                                        /*
       74 +                                         * Composed of: sptprot (uchar_t) and
       75 +                                         * RM_PENDING flag (1 bit).
       76 +                                         */
  74   77  } kshmid_t;
  75   78  
  76   79  /*
  77   80   *      Segacct Flags.
  78   81   */
  79   82  #define SHMSA_ISM       1       /* uses shared page table */
  80   83  
       84 +/*
       85 + * shm_opts definitions
       86 + * Low byte in shm_opts is used for sptprot (see PROT_ALL). The upper bits are
       87 + * used for additional options.
       88 + */
       89 +#define SHM_PROT_MASK   0xff
       90 +#define SHM_RM_PENDING  0x100
       91 +
  81   92  typedef struct sptinfo {
  82   93          struct as       *sptas;         /* dummy as ptr. for spt segment */
  83   94  } sptinfo_t;
  84   95  
  85   96  /*
  86   97   * Protected by p->p_lock
  87   98   */
  88   99  typedef struct segacct {
  89  100          avl_node_t      sa_tree;
  90  101          caddr_t         sa_addr;
  91  102          size_t          sa_len;
  92  103          ulong_t         sa_flags;
  93  104          kshmid_t        *sa_id;
  94  105  } segacct_t;
  95  106  
  96  107  /*
  97  108   * Error codes for shmgetid().
  98  109   */
  99  110  #define SHMID_NONE      (-1)
 100  111  #define SHMID_FREE      (-2)
 101  112  
 102  113  extern void shminit(void);
 103  114  extern void shmfork(struct proc *, struct proc *);
 104  115  extern void shmexit(struct proc *);
 105  116  extern int shmgetid(struct proc *, caddr_t);
 106  117  
 107  118  #endif  /* _KERNEL */
 108  119  
 109  120  #if defined(_SYSCALL32)
 110  121  /*
 111  122   * LP64 view of the ILP32 shmid_ds structure
 112  123   */
 113  124  struct shmid_ds32 {
 114  125          struct ipc_perm32 shm_perm;     /* operation permission struct */
 115  126          size32_t        shm_segsz;      /* size of segment in bytes */
 116  127          caddr32_t       shm_amp;        /* segment anon_map pointer */
 117  128          uint16_t        shm_lkcnt;      /* number of times it is being locked */
 118  129          pid32_t         shm_lpid;       /* pid of last shmop */
 119  130          pid32_t         shm_cpid;       /* pid of creator */
 120  131          uint32_t        shm_nattch;     /* number of attaches */
 121  132          uint32_t        shm_cnattch;    /* number of ISM attaches */
 122  133          time32_t        shm_atime;      /* last shmat time */
 123  134          int32_t         shm_pad1;       /* reserved for time_t expansion */
 124  135          time32_t        shm_dtime;      /* last shmdt time */
 125  136          int32_t         shm_pad2;       /* reserved for time_t expansion */
 126  137          time32_t        shm_ctime;      /* last change time */
 127  138          int32_t         shm_pad3;       /* reserved for time_t expansion */
 128  139          int32_t         shm_pad4[4];    /* reserve area  */
 129  140  };
 130  141  #endif
 131  142  
 132  143  #ifdef  __cplusplus
 133  144  }
 134  145  #endif
 135  146  
 136  147  #endif  /* _SYS_SHM_IMPL_H */
  
    | 
      ↓ open down ↓ | 
    46 lines elided | 
    
      ↑ open up ↑ | 
  
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX