service utility can par cpu option in system.conf

- does not have any effect, solely for debugging SMP

- backward compatible with older RS instance
This commit is contained in:
Tomas Hruby 2010-07-20 07:27:45 +00:00
parent 1b7d95df29
commit f248bffc9e
4 changed files with 62 additions and 2 deletions

View File

@ -412,6 +412,7 @@ PRIVATE void fatal(char *fmt, ...)
#define KW_SCHEDULER "scheduler" #define KW_SCHEDULER "scheduler"
#define KW_PRIORITY "priority" #define KW_PRIORITY "priority"
#define KW_QUANTUM "quantum" #define KW_QUANTUM "quantum"
#define KW_CPU "cpu"
#define KW_IRQ "irq" #define KW_IRQ "irq"
#define KW_IO "io" #define KW_IO "io"
#define KW_PCI "pci" #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", fatal("do_priority: priority %d out of range at %s:%d",
priority_val, cpe->file, cpe->line); 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) 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", fatal("do_quantum: quantum %d out of range at %s:%d",
quantum_val, cpe->file, cpe->line); 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) 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); do_quantum(cpe->next);
continue; continue;
} }
if (strcmp(cpe->word, KW_CPU) == 0)
{
do_cpu(cpe->next);
continue;
}
if (strcmp(cpe->word, KW_IRQ) == 0) if (strcmp(cpe->word, KW_IRQ) == 0)
{ {
do_irq(cpe->next); do_irq(cpe->next);
@ -1417,6 +1461,7 @@ PUBLIC int main(int argc, char **argv)
rs_start.rss_scheduler= DSRV_SCH; rs_start.rss_scheduler= DSRV_SCH;
rs_start.rss_priority= DSRV_Q; rs_start.rss_priority= DSRV_Q;
rs_start.rss_quantum= DSRV_QT; rs_start.rss_quantum= DSRV_QT;
rs_start.rss_cpu = DSRV_CPU;
if (req_config) { if (req_config) {
assert(progname); assert(progname);

View File

@ -85,6 +85,10 @@
/* default scheduling quanta */ /* default scheduling quanta */
#define USER_QUANTUM 200 #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 * * There are no user-settable parameters after this line *
*===========================================================================*/ *===========================================================================*/

View File

@ -89,4 +89,7 @@
#define DSRV_QT USER_QUANTUM /* dynamic system services */ #define DSRV_QT USER_QUANTUM /* dynamic system services */
#define USR_QT USER_QUANTUM /* user processes */ #define USR_QT USER_QUANTUM /* user processes */
/* default CPU */
#define DSRV_CPU USER_DEFAULT_CPU
#endif /* _MINIX_PRIV_H */ #endif /* _MINIX_PRIV_H */

View File

@ -71,6 +71,14 @@ struct rs_start
bitchunk_t rss_vm[VM_CALL_MASK_SIZE]; bitchunk_t rss_vm[VM_CALL_MASK_SIZE];
int rss_nr_control; int rss_nr_control;
struct rss_label rss_control[RS_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 */ /* ACL information for access to PCI devices */