summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2001-02-28 02:53:44 +0000
committerjake <jake@FreeBSD.org>2001-02-28 02:53:44 +0000
commit623f06756a2fee7aa42dcd2328139007fd86bdb8 (patch)
tree2c59521942b2c5e581e4929f8e039ce2f6c63ccd
parentb31794bc17abbe5f5aec97c5172725ab3fbb9443 (diff)
downloadFreeBSD-src-623f06756a2fee7aa42dcd2328139007fd86bdb8.zip
FreeBSD-src-623f06756a2fee7aa42dcd2328139007fd86bdb8.tar.gz
Sigh. Try to get priorities sorted out. Don't bother trying to
update native priority, it is diffcult to get right and likely to end up horribly wrong. Use an honestly wrong fixed value that seems to work; PUSER for user threads, and the interrupt priority for ithreads. Set it once when the process is created and forget about it. Suggested by: bde Pointy hat: me
-rw-r--r--sys/kern/init_main.c2
-rw-r--r--sys/kern/kern_fork.c1
-rw-r--r--sys/kern/kern_intr.c1
-rw-r--r--sys/kern/kern_mutex.c2
-rw-r--r--sys/kern/subr_turnstile.c2
-rw-r--r--sys/kern/subr_witness.c2
6 files changed, 2 insertions, 8 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 4231390..1bc112d 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -306,7 +306,7 @@ proc0_init(void *dummy __unused)
p->p_nice = NZERO;
p->p_pri.pri_class = PRI_TIMESHARE;
p->p_pri.pri_level = PVM;
- p->p_pri.pri_native = PRI_MAX;
+ p->p_pri.pri_native = PUSER;
p->p_pri.pri_user = PUSER;
p->p_peers = 0;
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index e99ef22..9f19669 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -357,7 +357,6 @@ again:
p2 = newproc;
p2->p_intr_nesting_level = 0;
- p2->p_pri.pri_native = PRI_MAX;
p2->p_stat = SIDL; /* protect against others */
p2->p_pid = trypid;
LIST_INSERT_HEAD(&allproc, p2, p_list);
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
index 1c37284..f64e89d 100644
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -134,6 +134,7 @@ ithread_update(struct ithd *ithd)
entropy = 0;
p->p_pri.pri_level = ih->ih_pri;
+ p->p_pri.pri_native = ih->ih_pri;
TAILQ_FOREACH(ih, &ithd->it_handlers, ih_next) {
if (strlen(p->p_comm) + strlen(ih->ih_name) + 1 <
sizeof(p->p_comm)) {
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c
index fbee435..0b0ba86 100644
--- a/sys/kern/kern_mutex.c
+++ b/sys/kern/kern_mutex.c
@@ -426,8 +426,6 @@ _mtx_lock_sleep(struct mtx *m, int opts, const char *file, int line)
p->p_blocked = m;
p->p_mtxname = m->mtx_description;
p->p_stat = SMTX;
- if (p->p_pri.pri_native == PRI_MAX)
- p->p_pri.pri_native = p->p_pri.pri_level;
propagate_priority(p);
if ((opts & MTX_QUIET) == 0)
diff --git a/sys/kern/subr_turnstile.c b/sys/kern/subr_turnstile.c
index fbee435..0b0ba86 100644
--- a/sys/kern/subr_turnstile.c
+++ b/sys/kern/subr_turnstile.c
@@ -426,8 +426,6 @@ _mtx_lock_sleep(struct mtx *m, int opts, const char *file, int line)
p->p_blocked = m;
p->p_mtxname = m->mtx_description;
p->p_stat = SMTX;
- if (p->p_pri.pri_native == PRI_MAX)
- p->p_pri.pri_native = p->p_pri.pri_level;
propagate_priority(p);
if ((opts & MTX_QUIET) == 0)
diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c
index fbee435..0b0ba86 100644
--- a/sys/kern/subr_witness.c
+++ b/sys/kern/subr_witness.c
@@ -426,8 +426,6 @@ _mtx_lock_sleep(struct mtx *m, int opts, const char *file, int line)
p->p_blocked = m;
p->p_mtxname = m->mtx_description;
p->p_stat = SMTX;
- if (p->p_pri.pri_native == PRI_MAX)
- p->p_pri.pri_native = p->p_pri.pri_level;
propagate_priority(p);
if ((opts & MTX_QUIET) == 0)
OpenPOWER on IntegriCloud