smObjShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:8k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* smObjShow.c - shared memory objects show routines (VxMP Option) */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,06may02,mas  cache flush and volatile fix (SPR 68334); bridge flush fix
  7.  (SPR 68844)
  8. 01g,24oct01,mas  doc update (SPR 71149)
  9. 01f,14feb93,jdi  documentation cleanup for 5.1.
  10. 01e,29jan93,pme  added little endian support.
  11. 01d,08dec92,jdi  documentation cleanup.
  12. 01c,02oct92,pme  added SPARC support. documentation cleanup.
  13. 01b,29sep92,pme  added anchor local address in smObjShow.
  14. 01a,19jul92,pme  written.
  15. */
  16. /*
  17. DESCRIPTION
  18. This library provides routines to show shared memory object
  19. statistics, such as the current number of shared tasks, semaphores,
  20. message queues, etc.
  21. CONFIGURATION
  22. The routines in this library are included by default if the component
  23. INCLUDE_SM_OBJ is included.
  24. AVAILABILITY
  25. This module is distributed as a component of the unbundled shared memory
  26. objects support option, VxMP.
  27. INCLUDE FILES: smObjLib.h
  28. SEE ALSO: smObjLib,
  29. tb VxWorks Programmer's Guide: Shared Memory Objects
  30. */
  31. /* includes */
  32. #include "vxWorks.h"
  33. #include "cacheLib.h"
  34. #include "errno.h"
  35. #include "intLib.h"
  36. #include "logLib.h"
  37. #include "qFifoGLib.h"
  38. #include "smDllLib.h"
  39. #include "smLib.h"
  40. #include "smUtilLib.h"
  41. #include "smNameLib.h"
  42. #include "semLib.h"
  43. #include "stdio.h"
  44. #include "stdlib.h"
  45. #include "string.h"
  46. #include "private/smObjLibP.h"
  47. #include "private/msgQSmLibP.h"
  48. #include "private/semSmLibP.h"
  49. #include "private/smMemLibP.h"
  50. #include "private/memPartLibP.h"
  51. /* smObj Information Structure */
  52. typedef struct sm_obj_info      /* SM_OBJ_INFO */
  53.     {
  54.     int numCpuAttached;         /* number of attached CPU */
  55.     int maxSems;                /* maximum number of semaphores */
  56.     int maxMsgQueues;           /* maximum number of messages queues */
  57.     int maxTasks; /* maximum number of tasks */
  58.     int maxMemParts;            /* max # of shared memory partitions */
  59.     int maxNames;               /* max # of name of shared objects */
  60.     int curNumSemB; /* current number of binary semaphores */
  61.     int curNumSemC; /* current number of counting semaphores */
  62.     int curNumMsgQ; /* current number of messages queues */
  63.     int curNumTask; /* current number of tasks */
  64.     int curNumPart;             /* current number of shared partitions */
  65.     int curNumName;             /* current number of names */
  66.     int curMaxLockTries; /* current number of maximum number of tries */
  67.     } SM_OBJ_INFO;
  68. /******************************************************************************
  69. *
  70. * smObjShowInit - initialize shared memory objects show routine
  71. *
  72. * This routine links the shared memory objects show routine into the VxWorks
  73. * system.  These routines are included automatically by defining
  74. * %INCLUDE_SHOW_ROUTINES in configAll.h.
  75. *
  76. * RETURNS: N/A
  77. *
  78. * NOMANUAL
  79. */
  80. void smObjShowInit (void)
  81.     {
  82.     }
  83. /******************************************************************************
  84. *
  85. * smObjShow - display the current status of shared memory objects (VxMP Option)
  86. *
  87. * This routine displays useful information about the current status of
  88. * shared memory objects facilities.
  89. *
  90. * WARNING
  91. * The information returned by this routine is not static and may be obsolete
  92. * by the time it is examined.  This information is generally used for
  93. * debugging purposes only.
  94. *
  95. * EXAMPLE:
  96. * cs
  97. *     -> smObjShow
  98. *     Shared Mem Anchor Local Addr: 0x600.
  99. *     Shared Mem Hdr Local Addr:    0xb1514.
  100. *     Attached CPU :                5
  101. *     Max Tries to Take Lock:       1
  102. *     Shared Object Type    Current    Maximum  Available
  103. *     -------------------- ---------- --------- ----------
  104. *     Tasks                         1        20         19
  105. *     Binary Semaphores             8        30         20
  106. *     Counting Semaphores           2        30         20
  107. *     Messages Queues               3        10          7
  108. *     Memory Partitions             1         4          3
  109. *     Names in Database            16       100         84
  110. * ce
  111. *
  112. * AVAILABILITY
  113. * This routine is distributed as a component of the unbundled shared memory
  114. * objects support option, VxMP.
  115. * RETURNS: OK, or ERROR if no shared memory objects are initialized.
  116. *
  117. * ERRNO:
  118. *  S_smObjLib_NOT_INITIALIZED
  119. *
  120. * SEE ALSO: smObjLib
  121. */
  122. STATUS smObjShow (void) 
  123.     {
  124.     SM_INFO            smInfo; /* shared mem info */
  125.     SM_FIX_BLK_PART_ID pTcbPartId; /* pointer to shared tcb partition */
  126.     SM_OBJ_MEM_HDR     localSmObjHdr;  /* local copy of smObj Header */
  127.     int        numTask; /* number of tasks using smObj */
  128.     pTcbPartId = (SM_FIX_BLK_PART_ID) GLOB_TO_LOC_ADRS (smTcbPartId);
  129.     /* check if smObj facility is initialized */
  130.     if (pSmObjHdr == NULL)
  131. {
  132. errno = S_smObjLib_NOT_INITIALIZED;
  133. return (ERROR);
  134. }
  135.     /* get number of attached CPU using smInfoGet */
  136.     if (smInfoGet (&smObjDesc.smDesc, &smInfo) != OK)
  137.         {
  138. return (ERROR);
  139.         }
  140.     /* copy the shared memory header all at once to reduce bus traffic */
  141.     bcopy ((char *) pSmObjHdr, (char *) &localSmObjHdr, 
  142.    sizeof (SM_OBJ_MEM_HDR));
  143.     /* 
  144.      * Get current number of task using shared memory objects
  145.      * by the number of allocated blocks in the shared TCB partition.
  146.      */
  147.  
  148.     numTask = ntohl (pTcbPartId->curBlocksAllocated);
  149.     /* now print important data */
  150.     printf ("n");
  151.     printf ("%-29s: %#-10xn", "Shared Mem Anchor Local Addr", 
  152.     localToGlobalOffset);
  153.     printf ("%-29s: %#-10xn", "Shared Mem Hdr Local Addr", 
  154.     (unsigned int) pSmObjHdr);
  155.     printf ("%-29s: %-10dn", "Attached CPU", smInfo.attachedCpus);
  156.     printf ("%-29s: %-10dn", "Max Tries to Take Lock", smCurMaxTries);  
  157.     printf ("n");
  158.     printf ("Shared Object Type     Current   Maximum  Availablen");
  159.     printf ("-------------------- ---------- --------- ----------n");
  160.     printf ("Tasks                      %4d      %4d       %4dn",
  161.     numTask, ntohl (localSmObjHdr.maxTasks), 
  162.     ntohl (localSmObjHdr.maxTasks) - numTask);
  163.     printf ("Binary Semaphores          %4d      %4d       %4dn",
  164.     ntohl (localSmObjHdr.curNumSemB), ntohl (localSmObjHdr.maxSems), 
  165.     ntohl (localSmObjHdr.maxSems) - ntohl (localSmObjHdr.curNumSemB) - 
  166.     ntohl (localSmObjHdr.curNumSemC));
  167.     printf ("Counting Semaphores        %4d      %4d       %4dn",
  168.     ntohl (localSmObjHdr.curNumSemC), ntohl (localSmObjHdr.maxSems), 
  169.     ntohl (localSmObjHdr.maxSems) - ntohl (localSmObjHdr.curNumSemC) - 
  170.     ntohl (localSmObjHdr.curNumSemB));
  171.     printf ("Messages Queues            %4d      %4d       %4dn",
  172.     ntohl (localSmObjHdr.curNumMsgQ), 
  173.     ntohl (localSmObjHdr.maxMsgQueues), 
  174.     ntohl (localSmObjHdr.maxMsgQueues)-ntohl(localSmObjHdr.curNumMsgQ));
  175.     printf ("Memory Partitions          %4d      %4d       %4dn",
  176.     ntohl (localSmObjHdr.curNumPart), ntohl (localSmObjHdr.maxMemParts),
  177.     ntohl (localSmObjHdr.maxMemParts)-ntohl (localSmObjHdr.curNumPart));
  178.     printf ("Names in Database          %4d      %4d       %4dnn",
  179.     ntohl (localSmObjHdr.curNumName), ntohl (localSmObjHdr.maxNames),
  180.     ntohl (localSmObjHdr.maxNames) - ntohl (localSmObjHdr.curNumName));
  181.     
  182.     return (OK);
  183.     }
  184. /******************************************************************************
  185. *
  186. * smObjObjShow - generic shared memory objects object show routine
  187. *
  188. * This routine calls the appropriate show routine for each type 
  189. * of shared memory object.
  190. *
  191. * RETURNS: N/A
  192. *
  193. * NOMANUAL
  194. */
  195. void smObjObjShow 
  196.     (
  197.     int smObjId, /* shared object identifier to use */
  198.     int level /* level of information displayed */
  199.     )
  200.     {
  201.     SM_SEM_ID volatile pseudoSmObjId; /* hack to get a compatible type */ 
  202.     void *             tmp;
  203.     pseudoSmObjId = (SM_SEM_ID volatile) SM_OBJ_ID_TO_ADRS (smObjId);
  204.     CACHE_PIPE_FLUSH ();                        /* CACHE FLUSH   [SPR 68334] */
  205.     tmp = (void *) pseudoSmObjId->verify;       /* PCI bridge bug [SPR 68844]*/
  206.     if (SM_OBJ_VERIFY (pseudoSmObjId) != OK)
  207. {
  208. printf ("Object not found.n");
  209. return;
  210. }
  211.     
  212.     switch (ntohl (pseudoSmObjId->objType))
  213. {
  214. case SEM_TYPE_SM_BINARY :
  215. case SEM_TYPE_SM_COUNTING :
  216.     {
  217.     (*semSmShowRtn) ((SM_SEM_ID) SM_OBJ_ID_TO_ADRS (smObjId), level);
  218.     break;
  219.     }
  220. case MSG_Q_TYPE_SM :
  221.     {
  222.     (*msgQSmShowRtn) ((SM_MSG_Q_ID) SM_OBJ_ID_TO_ADRS (smObjId),level);
  223.     break;
  224.     }
  225. case MEM_PART_TYPE_SM_STD :
  226.     {
  227.     (*smMemPartShowRtn) ((SM_PART_ID) SM_OBJ_ID_TO_ADRS (smObjId), 
  228.   level);
  229.     break;
  230.     }
  231. default :
  232.     break;
  233. }
  234.     }