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:
parent
4dad30937b
commit
40b1d58077
3 changed files with 12 additions and 13 deletions
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue