Mostly a revert of r5306. com.h defines MAX_NR_TASKS value which replaces

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.
This commit is contained in:
Tomas Hruby 2009-09-29 20:13:41 +00:00
parent 4dad30937b
commit 40b1d58077
3 changed files with 12 additions and 13 deletions

View file

@ -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. */

View file

@ -16,14 +16,13 @@
* 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

View 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);