]> Zhao Yanbai Git Server - minix.git/commitdiff
Mostly a revert of r5306. com.h defines MAX_NR_TASKS value which replaces
authorTomas Hruby <tom@minix3.org>
Tue, 29 Sep 2009 20:13:41 +0000 (20:13 +0000)
committerTomas Hruby <tom@minix3.org>
Tue, 29 Sep 2009 20:13:41 +0000 (20:13 +0000)
NR_TASKS in the endpoint macros. MAX_NR_TASKS defines the maximal number of
kernel tasks. It is unlikely that we will ever need this many tasks as the goal
is not to have such a difference in the future. For now it makes possible to
remove the limiting NR_TASKS from the endpoint code.

include/minix/com.h
include/minix/endpoint.h
test/test39.c

index 33c8609803a559426c908263970d83507fde0c0f..b4d24d8f24eb48221a341425987e34ff62cd59a3 100755 (executable)
@@ -9,10 +9,8 @@
 #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' */
-/* 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
+#define _MAX_MAGIC_PROC (SELF) /* used by <minix/endpoint.h> 
+                                  to determine generation size */
 
 /*===========================================================================*
  *             Process numbers of processes in the system image             *
@@ -33,6 +31,7 @@
 #define HARDWARE     KERNEL    /* for hardware interrupt handlers */
 
 /* Number of tasks. Note that NR_PROCS is defined in <minix/config.h>. */
+#define MAX_NR_TASKS   1023
 #define NR_TASKS         4 
 
 /* User-space processes, that is, device drivers, servers, and INIT. */
index a646d1657ac32e42f6c41cca3f229adbb15a11c1..54dc7b9d66566f86e0652c24eb1a8a72dd9dd383 100644 (file)
  * the generation size is big enough to start the next generation
  * above the highest magic number.
  */
-#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)
+#define _ENDPOINT_GENERATION_SIZE (MAX_NR_TASKS+_MAX_MAGIC_PROC+1)
+#define _ENDPOINT_MAX_GENERATION  (INT_MAX/_ENDPOINT_GENERATION_SIZE-1)
 
 /* Generation + Process slot number <-> endpoint. */
-#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))
+#define _ENDPOINT(g, p) ((endpoint_t)((g) * _ENDPOINT_GENERATION_SIZE + (p)))
+#define _ENDPOINT_G(e) (((e)+MAX_NR_TASKS) / _ENDPOINT_GENERATION_SIZE)
+#define _ENDPOINT_P(e) \
+       ((((e)+MAX_NR_TASKS) % _ENDPOINT_GENERATION_SIZE) - MAX_NR_TASKS)
 
 #endif
index cd99ff7cbedd1ee1f7ff6494cd1eb24b8cf65f91..9287761536bf35a8ce87950390ecf89f71f4778c 100644 (file)
@@ -10,8 +10,9 @@ int main(int argc, char *argv[])
        printf("Test 39 ");
 
        for(g = 0; g <= _ENDPOINT_MAX_GENERATION; g++) {
-               for(p = -NR_TASKS; p < _NR_PROCS; p++) {
-                       int e, mg, mp;
+               for(p = -MAX_NR_TASKS; p < _NR_PROCS; p++) {
+                       endpoint_t e;
+                       int mg, mp;
                        e = _ENDPOINT(g, p);
                        mg = _ENDPOINT_G(e);
                        mp = _ENDPOINT_P(e);