source: rtems/c/src/exec/score/src/objectgetnoprotection.c @ ef9505a9

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

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/Makefile.am, include/rtems/score/coremsg.h, include/rtems/score/coremutex.h, include/rtems/score/coresem.h, include/rtems/score/object.h, include/rtems/score/threadq.h, inline/rtems/score/object.inl, inline/rtems/score/thread.inl, macros/rtems/score/object.inl, src/Makefile.am, src/coremsg.c, src/coremutex.c, src/coresem.c, src/mpci.c, src/objectcomparenameraw.c, src/objectextendinformation.c, src/objectinitializeinformation.c, src/objectnametoid.c, src/thread.c, src/threadclose.c, src/threadget.c, src/threadq.c, src/threadqextractwithproxy.c: Modified as part of above.
  • include/rtems/score/apimutex.h, src/objectgetnoprotection.c: New files.
  • Property mode set to 100644
File size: 2.1 KB
Line 
1/*
2 *  Object Handler -- Object Get
3 *
4 *
5 *  COPYRIGHT (c) 1989-2002.
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/score/address.h>
17#include <rtems/score/chain.h>
18#include <rtems/score/object.h>
19#if defined(RTEMS_MULTIPROCESSING)
20#include <rtems/score/objectmp.h>
21#endif
22#include <rtems/score/thread.h>
23#include <rtems/score/wkspace.h>
24#include <rtems/score/sysstate.h>
25#include <rtems/score/isr.h>
26
27/*PAGE
28 *
29 * _Objects_Get_no_protection
30 *
31 * This routine sets the object pointer for the given
32 * object id based on the given object information structure.
33 *
34 * Input parameters:
35 *   information - pointer to entry in table for this class
36 *   id          - object id to search for
37 *   location    - address of where to store the location
38 *
39 * Output parameters:
40 *   returns  - address of object if local
41 *   location - one of the following:
42 *                  OBJECTS_ERROR  - invalid object ID
43 *                  OBJECTS_REMOTE - remote object
44 *                  OBJECTS_LOCAL  - local object
45 */
46
47Objects_Control *_Objects_Get_no_protection(
48  Objects_Information *information,
49  Objects_Id           id,
50  Objects_Locations   *location
51)
52{
53  Objects_Control *the_object;
54  unsigned32       index;
55
56#if defined(RTEMS_MULTIPROCESSING)
57  index = id - information->minimum_id + 1;
58#else
59  /* index = _Objects_Get_index( id ); */
60  index = id & 0x0000ffff;
61  /* This should work but doesn't always :( */
62  /* index = (unsigned16) id; */
63#endif
64
65   if ( information->maximum >= index ) {
66    if ( (the_object = information->local_table[ index ]) != NULL ) {
67      *location = OBJECTS_LOCAL;
68      return the_object;
69    }
70    *location = OBJECTS_ERROR;
71    return NULL;
72  }
73  *location = OBJECTS_ERROR;
74
75/*
76 *  Not supported for multiprocessing
77 */
78#if 0 && defined(RTEMS_MULTIPROCESSING)
79  _Objects_MP_Is_remote( information, id, location, &the_object );
80  return the_object;
81#endif
82  return NULL;
83}
Note: See TracBrowser for help on using the repository browser.