source: rtems/cpukit/rtems/src/regiongetsegmentsize.c @ 90015e7f

4.104.114.84.95
Last change on this file since 90015e7f was 90015e7f, checked in by Joel Sherrill <joel.sherrill@…>, on 07/01/02 at 22:32:31

2002-07-01 Joel Sherrill <joel@…>

  • Mega patch merge to change the format of the object IDs to loosen the dependency between the SCORE and the various APIs. There was considerable work to simplify the object name management and it appears that the name_table field is no longer needed. This patch also includes the addition of the internal mutex which is currently only used to protect some types of allocation and deallocation. This significantly can reduce context switch latency under certain circumstances. In particular, some heap/region operations were O(n) and had dispatching disabled. This should help enormously. With this merge, the patch is not as clean as it should be. In particular, the documentation has not been modified to reflect the new object ID layout, the IDs in the test screens are not updated, and _Objects_Get_information needs to be a real routine not inlined. As part of this patch a lot of MP code for thread/proxy blocking was made conditional and cleaned up.
  • include/rtems.h, inline/rtems/rtems/region.inl, macros/rtems/rtems/region.inl, src/dpmem.c, src/dpmemcreate.c, src/msg.c, src/msgqcreate.c, src/part.c, src/partcreate.c, src/ratemon.c, src/ratemoncreate.c, src/region.c, src/regioncreate.c, src/regiondelete.c, src/regionextend.c, src/regiongetinfo.c, src/regiongetsegment.c, src/regiongetsegmentsize.c, src/regionident.c, src/regionreturnsegment.c, src/rtemstimer.c, src/sem.c, src/semcreate.c, src/taskcreate.c, src/taskident.c, src/tasks.c, src/timercreate.c: Modified as part of above.
  • Property mode set to 100644
File size: 1.9 KB
Line 
1/*
2 *  Region Manager
3 *
4 *
5 *  COPYRIGHT (c) 1989-1999.
6 *  On-Line Applications Research Corporation (OAR).
7 *
8 *  The license and distribution terms for this file may be
9 *  found in the file LICENSE in this distribution or at
10 *  http://www.OARcorp.com/rtems/license.html.
11 *
12 *  $Id$
13 */
14
15#include <rtems/system.h>
16#include <rtems/rtems/status.h>
17#include <rtems/rtems/support.h>
18#include <rtems/score/object.h>
19#include <rtems/rtems/options.h>
20#include <rtems/rtems/region.h>
21#include <rtems/score/states.h>
22#include <rtems/score/thread.h>
23#include <rtems/score/apimutex.h>
24
25/*PAGE
26 *
27 *  rtems_region_get_segment_size
28 *
29 *  This directive will return the size of the segment indicated
30 *
31 *  Input parameters:
32 *    id         - region id
33 *    segment    - segment address
34 *    size       - pointer to segment size in bytes
35 *
36 *  Output parameters:
37 *    size       - segment size in bytes filled in
38 *    RTEMS_SUCCESSFUL - if successful
39 *    error code - if unsuccessful
40 */
41
42rtems_status_code rtems_region_get_segment_size(
43  Objects_Id         id,
44  void              *segment,
45  unsigned32        *size
46)
47{
48  register Region_Control *the_region;
49  Objects_Locations        location;
50  Thread_Control          *executing;
51
52  _RTEMS_Lock_allocator();
53  executing  = _Thread_Executing;
54  the_region = _Region_Get( id, &location );
55  switch ( location ) {
56    case OBJECTS_REMOTE:        /* this error cannot be returned */
57      _RTEMS_Unlock_allocator();
58      return RTEMS_INTERNAL_ERROR;
59
60    case OBJECTS_ERROR:
61      _RTEMS_Unlock_allocator();
62      return RTEMS_INVALID_ID;
63
64    case OBJECTS_LOCAL:
65
66      if ( _Heap_Size_of_user_area( &the_region->Memory, segment, size ) ) {
67        _RTEMS_Unlock_allocator();
68        return RTEMS_SUCCESSFUL;
69      }
70      _RTEMS_Unlock_allocator();
71      return RTEMS_INVALID_ADDRESS;
72  }
73
74  return RTEMS_INTERNAL_ERROR;   /* unreached - only to remove warnings */
75}
Note: See TracBrowser for help on using the repository browser.