]> Zhao Yanbai Git Server - minix.git/commitdiff
Removed NR_TASKS from macros manipulating endpoint_t
authorTomas Hruby <tom@minix3.org>
Tue, 22 Sep 2009 21:45:26 +0000 (21:45 +0000)
committerTomas Hruby <tom@minix3.org>
Tue, 22 Sep 2009 21:45:26 +0000 (21:45 +0000)
- the magic numbers ANY, NONE and SELF are kept for the compatibility with the
  current userspace. It is OK as long as NR_PROCS is greater so they don't
  colide with other endpoints

- the 32 bit endpoint_t value is split in half, lower 16 bits for process slot
  number and upper half for generation number

- transition to a structured endpoint_t in the future possible

include/minix/com.h
include/minix/endpoint.h

index ef8dc8f044075c68b8e294ad3edc930222b9029f..47e781c853493dd09653461a6794ef193b8a9a70 100755 (executable)
@@ -9,8 +9,10 @@
 #define ANY            0x7ace  /* used to indicate 'any process' */
 #define NONE           0x6ace  /* used to indicate 'no process at all' */
 #define SELF           0x8ace  /* used to indicate 'own process' */
-#define _MAX_MAGIC_PROC (SELF) /* used by <minix/endpoint.h> 
-                                  to determine generation size */
+/* check if the magic process numbers are valid process table slot numbers */
+#if (ANY < NR_PROCS)
+#error "Magic process number in the process table range"
+#endif
 
 /*===========================================================================*
  *             Process numbers of processes in the system image             *
index 97a77876393492f77d8bcb33269d7ad43d19d153..105a58b4d1824211e1d9982b0af61465304518d3 100644 (file)
  * the generation size is big enough to start the next generation
  * above the highest magic number.
  */
-#define _ENDPOINT_GENERATION_SIZE (NR_TASKS+_MAX_MAGIC_PROC+1)
-#define _ENDPOINT_MAX_GENERATION  (INT_MAX/_ENDPOINT_GENERATION_SIZE-1)
+#define _ENDPOINT_GENERATION_BITS      16
+#define _ENDPOINT_PNUM_BITS            16
+#define _ENDPOINT_MAX_GENERATION       ((1 << _ENDPOINT_GENERATION_BITS)-1)
+#define _ENDPOINT_MAX_PNUM             ((1 << _ENDPOINT_PNUM_BITS) - 1)
 
 /* Generation + Process slot number <-> endpoint. */
-#define _ENDPOINT(g, p) ((g) * _ENDPOINT_GENERATION_SIZE + (p))
-#define _ENDPOINT_G(e) (((e)+NR_TASKS) / _ENDPOINT_GENERATION_SIZE)
-#define _ENDPOINT_P(e) ((((e)+NR_TASKS) % _ENDPOINT_GENERATION_SIZE) - NR_TASKS)
+#define _ENDPOINT(g, p)        ((endpoint_t)(((g) << _ENDPOINT_PNUM_BITS) | (p)))
+#define _ENDPOINT_G(e)         ((u16_t)((e) >> _ENDPOINT_PNUM_BITS))
+#define _ENDPOINT_P(e)         ((i16_t)((e) & _ENDPOINT_MAX_PNUM))
 
 #endif