From: Tomas Hruby Date: Tue, 20 Jul 2010 07:27:45 +0000 (+0000) Subject: service utility can par cpu option in system.conf X-Git-Tag: v3.1.8~185 X-Git-Url: http://zhaoyanbai.com/repos/?a=commitdiff_plain;h=f248bffc9e3f044386aef9796e49175f112f517f;p=minix.git service utility can par cpu option in system.conf - does not have any effect, solely for debugging SMP - backward compatible with older RS instance --- diff --git a/commands/service/service.c b/commands/service/service.c index 1ad832642..9848548b8 100644 --- a/commands/service/service.c +++ b/commands/service/service.c @@ -412,6 +412,7 @@ PRIVATE void fatal(char *fmt, ...) #define KW_SCHEDULER "scheduler" #define KW_PRIORITY "priority" #define KW_QUANTUM "quantum" +#define KW_CPU "cpu" #define KW_IRQ "irq" #define KW_IO "io" #define KW_PCI "pci" @@ -649,7 +650,7 @@ PRIVATE void do_priority(config_t *cpe) fatal("do_priority: priority %d out of range at %s:%d", priority_val, cpe->file, cpe->line); } - rs_start.rss_priority= (unsigned) priority_val; + rs_start.rss_priority= priority_val; } PRIVATE void do_quantum(config_t *cpe) @@ -687,7 +688,45 @@ PRIVATE void do_quantum(config_t *cpe) fatal("do_quantum: quantum %d out of range at %s:%d", quantum_val, cpe->file, cpe->line); } - rs_start.rss_quantum= (unsigned) quantum_val; + rs_start.rss_quantum= quantum_val; +} + +PRIVATE void do_cpu(config_t *cpe) +{ + int cpu; + char *check; + + /* Process a quantum value */ + if (cpe->next != NULL) + { + fatal("do_cpu: just one value expected at %s:%d", + cpe->file, cpe->line); + } + + + if (cpe->flags & CFG_SUBLIST) + { + fatal("do_cpu: unexpected sublist at %s:%d", + cpe->file, cpe->line); + } + if (cpe->flags & CFG_STRING) + { + fatal("do_cpu: unexpected string at %s:%d", + cpe->file, cpe->line); + } + cpu= strtol(cpe->word, &check, 0); + if (check[0] != '\0') + { + fatal("do_cpu: bad value '%s' at %s:%d", + cpe->word, cpe->file, cpe->line); + } + + if (cpu <= 0) + { + fatal("do_cpu: %d out of range at %s:%d", + cpu, cpe->file, cpe->line); + } + rs_start.rss_cpu= cpu; } PRIVATE void do_irq(config_t *cpe) @@ -1261,6 +1300,11 @@ PRIVATE void do_service(config_t *cpe, config_t *config) do_quantum(cpe->next); continue; } + if (strcmp(cpe->word, KW_CPU) == 0) + { + do_cpu(cpe->next); + continue; + } if (strcmp(cpe->word, KW_IRQ) == 0) { do_irq(cpe->next); @@ -1417,6 +1461,7 @@ PUBLIC int main(int argc, char **argv) rs_start.rss_scheduler= DSRV_SCH; rs_start.rss_priority= DSRV_Q; rs_start.rss_quantum= DSRV_QT; + rs_start.rss_cpu = DSRV_CPU; if (req_config) { assert(progname); diff --git a/include/minix/config.h b/include/minix/config.h index 1e78739e5..b67506ba0 100644 --- a/include/minix/config.h +++ b/include/minix/config.h @@ -85,6 +85,10 @@ /* default scheduling quanta */ #define USER_QUANTUM 200 +/* defualt user process cpu */ +#define USER_DEFAULT_CPU -1 /* use the default cpu or do not change the + current one */ + /*===========================================================================* * There are no user-settable parameters after this line * *===========================================================================*/ diff --git a/include/minix/priv.h b/include/minix/priv.h index 70052d513..07fe1a5e8 100644 --- a/include/minix/priv.h +++ b/include/minix/priv.h @@ -89,4 +89,7 @@ #define DSRV_QT USER_QUANTUM /* dynamic system services */ #define USR_QT USER_QUANTUM /* user processes */ +/* default CPU */ +#define DSRV_CPU USER_DEFAULT_CPU + #endif /* _MINIX_PRIV_H */ diff --git a/include/minix/rs.h b/include/minix/rs.h index d221cbdc6..997f31cce 100644 --- a/include/minix/rs.h +++ b/include/minix/rs.h @@ -71,6 +71,14 @@ struct rs_start bitchunk_t rss_vm[VM_CALL_MASK_SIZE]; int rss_nr_control; struct rss_label rss_control[RS_NR_CONTROL]; + + /* + * SMP specific data + * + * must be at the end of the structure for binary compatibility with + * non-smp sysytems + */ + int rss_cpu; }; /* ACL information for access to PCI devices */