svn commit: r273266 - in head: lib/libkvm sys/compat/freebsd32 sys/kern sys/sys
Luigi Rizzo
rizzo at iet.unipi.it
Sun Oct 19 03:17:04 UTC 2014
On Sat, Oct 18, 2014 at 07:36:12PM +0000, Adrian Chadd wrote:
> Author: adrian
> Date: Sat Oct 18 19:36:11 2014
> New Revision: 273266
> URL: https://svnweb.freebsd.org/changeset/base/273266
>
> Log:
> Update the ULE scheduler + thread and kinfo structs to use int for cpuid
> rather than u_char.
>
> To try and play nice with the ABI, the u_char CPU ID values are clamped
> at 254. The new fields now contain the full CPU ID, or -1 for no cpu.
This causes the following error with gcc:
cc1: warnings being treated as errors
/usr/home/luigi/FreeBSD/head/sys/kern/kern_intr.c: In function 'intr_setaffinity':
/usr/home/luigi/FreeBSD/head/sys/kern/kern_intr.c:378: warning: comparison is always true due to limited range of data type
*** Error code 1
I suppose we can use NOCPU_OLD, or cast.
cheers
luigi
> Differential Revision: D955
> Reviewed by: jhb, kib
> Sponsored by: Norse Corp, Inc.
>
> Modified:
> head/lib/libkvm/kvm_proc.c
> head/sys/compat/freebsd32/freebsd32.h
> head/sys/kern/kern_proc.c
> head/sys/kern/sched_ule.c
> head/sys/sys/proc.h
> head/sys/sys/user.h
>
> Modified: head/lib/libkvm/kvm_proc.c
> ==============================================================================
> --- head/lib/libkvm/kvm_proc.c Sat Oct 18 19:22:59 2014 (r273265)
> +++ head/lib/libkvm/kvm_proc.c Sat Oct 18 19:36:11 2014 (r273266)
> @@ -431,6 +431,24 @@ nopgrp:
> strlcpy(kp->ki_tdname, mtd.td_name, sizeof(kp->ki_tdname));
> kp->ki_pctcpu = 0;
> kp->ki_rqindex = 0;
> +
> + /*
> + * Note: legacy fields; wraps at NO_CPU_OLD or the
> + * old max CPU value as appropriate
> + */
> + if (mtd.td_lastcpu == NOCPU)
> + kp->ki_lastcpu_old = NOCPU_OLD;
> + else if (mtd.td_lastcpu > MAXCPU_OLD)
> + kp->ki_lastcpu_old = MAXCPU_OLD;
> + else
> + kp->ki_lastcpu_old = mtd.td_lastcpu;
> +
> + if (mtd.td_oncpu == NOCPU)
> + kp->ki_oncpu_old = NOCPU_OLD;
> + else if (mtd.td_oncpu > MAXCPU_OLD)
> + kp->ki_oncpu_old = MAXCPU_OLD;
> + else
> + kp->ki_oncpu_old = mtd.td_oncpu;
> } else {
> kp->ki_stat = SZOMB;
> }
>
> Modified: head/sys/compat/freebsd32/freebsd32.h
> ==============================================================================
> --- head/sys/compat/freebsd32/freebsd32.h Sat Oct 18 19:22:59 2014 (r273265)
> +++ head/sys/compat/freebsd32/freebsd32.h Sat Oct 18 19:36:11 2014 (r273266)
> @@ -332,8 +332,8 @@ struct kinfo_proc32 {
> signed char ki_nice;
> char ki_lock;
> char ki_rqindex;
> - u_char ki_oncpu;
> - u_char ki_lastcpu;
> + u_char ki_oncpu_old;
> + u_char ki_lastcpu_old;
> char ki_tdname[TDNAMLEN+1];
> char ki_wmesg[WMESGLEN+1];
> char ki_login[LOGNAMELEN+1];
> @@ -343,6 +343,8 @@ struct kinfo_proc32 {
> char ki_loginclass[LOGINCLASSLEN+1];
> char ki_sparestrings[50];
> int ki_spareints[KI_NSPARE_INT];
> + int ki_oncpu;
> + int ki_lastcpu;
> int ki_tracer;
> int ki_flag2;
> int ki_fibnum;
>
> Modified: head/sys/kern/kern_proc.c
> ==============================================================================
> --- head/sys/kern/kern_proc.c Sat Oct 18 19:22:59 2014 (r273265)
> +++ head/sys/kern/kern_proc.c Sat Oct 18 19:36:11 2014 (r273266)
> @@ -984,6 +984,25 @@ fill_kinfo_thread(struct thread *td, str
> kp->ki_wchan = td->td_wchan;
> kp->ki_pri.pri_level = td->td_priority;
> kp->ki_pri.pri_native = td->td_base_pri;
> +
> + /*
> + * Note: legacy fields; clamp at the old NOCPU value and/or
> + * the maximum u_char CPU value.
> + */
> + if (td->td_lastcpu == NOCPU)
> + kp->ki_lastcpu_old = NOCPU_OLD;
> + else if (td->td_lastcpu > MAXCPU_OLD)
> + kp->ki_lastcpu_old = MAXCPU_OLD;
> + else
> + kp->ki_lastcpu_old = td->td_lastcpu;
> +
> + if (td->td_oncpu == NOCPU)
> + kp->ki_oncpu_old = NOCPU_OLD;
> + else if (td->td_oncpu > MAXCPU_OLD)
> + kp->ki_oncpu_old = MAXCPU_OLD;
> + else
> + kp->ki_oncpu_old = td->td_oncpu;
> +
> kp->ki_lastcpu = td->td_lastcpu;
> kp->ki_oncpu = td->td_oncpu;
> kp->ki_tdflags = td->td_flags;
> @@ -1164,6 +1183,11 @@ freebsd32_kinfo_proc_out(const struct ki
> CP(*ki, *ki32, ki_rqindex);
> CP(*ki, *ki32, ki_oncpu);
> CP(*ki, *ki32, ki_lastcpu);
> +
> + /* XXX TODO: wrap cpu value as appropriate */
> + CP(*ki, *ki32, ki_oncpu_old);
> + CP(*ki, *ki32, ki_lastcpu_old);
> +
> bcopy(ki->ki_tdname, ki32->ki_tdname, TDNAMLEN + 1);
> bcopy(ki->ki_wmesg, ki32->ki_wmesg, WMESGLEN + 1);
> bcopy(ki->ki_login, ki32->ki_login, LOGNAMELEN + 1);
>
> Modified: head/sys/kern/sched_ule.c
> ==============================================================================
> --- head/sys/kern/sched_ule.c Sat Oct 18 19:22:59 2014 (r273265)
> +++ head/sys/kern/sched_ule.c Sat Oct 18 19:36:11 2014 (r273266)
> @@ -90,7 +90,7 @@ dtrace_vtime_switch_func_t dtrace_vtime_
> struct td_sched {
> struct runq *ts_runq; /* Run-queue we're queued on. */
> short ts_flags; /* TSF_* flags. */
> - u_char ts_cpu; /* CPU that we have affinity for. */
> + int ts_cpu; /* CPU that we have affinity for. */
> int ts_rltick; /* Real last tick, for affinity. */
> int ts_slice; /* Ticks of slice remaining. */
> u_int ts_slptime; /* Number of ticks we vol. slept */
>
> Modified: head/sys/sys/proc.h
> ==============================================================================
> --- head/sys/sys/proc.h Sat Oct 18 19:22:59 2014 (r273265)
> +++ head/sys/sys/proc.h Sat Oct 18 19:36:11 2014 (r273266)
> @@ -229,8 +229,8 @@ struct thread {
> int td_sqqueue; /* (t) Sleepqueue queue blocked on. */
> void *td_wchan; /* (t) Sleep address. */
> const char *td_wmesg; /* (t) Reason for sleep. */
> - u_char td_lastcpu; /* (t) Last cpu we were on. */
> - u_char td_oncpu; /* (t) Which cpu we are on. */
> + int td_lastcpu; /* (t) Last cpu we were on. */
> + int td_oncpu; /* (t) Which cpu we are on. */
> volatile u_char td_owepreempt; /* (k*) Preempt on last critical_exit */
> u_char td_tsqueue; /* (t) Turnstile queue blocked on. */
> short td_locks; /* (k) Count of non-spin locks. */
> @@ -601,7 +601,9 @@ struct proc {
> #define p_session p_pgrp->pg_session
> #define p_pgid p_pgrp->pg_id
>
> -#define NOCPU 0xff /* For when we aren't on a CPU. */
> +#define NOCPU (-1) /* For when we aren't on a CPU. */
> +#define NOCPU_OLD (255)
> +#define MAXCPU_OLD (254)
>
> #define PROC_SLOCK(p) mtx_lock_spin(&(p)->p_slock)
> #define PROC_SUNLOCK(p) mtx_unlock_spin(&(p)->p_slock)
>
> Modified: head/sys/sys/user.h
> ==============================================================================
> --- head/sys/sys/user.h Sat Oct 18 19:22:59 2014 (r273265)
> +++ head/sys/sys/user.h Sat Oct 18 19:36:11 2014 (r273266)
> @@ -84,7 +84,7 @@
> * it in two places: function fill_kinfo_proc in sys/kern/kern_proc.c and
> * function kvm_proclist in lib/libkvm/kvm_proc.c .
> */
> -#define KI_NSPARE_INT 6
> +#define KI_NSPARE_INT 4
> #define KI_NSPARE_LONG 12
> #define KI_NSPARE_PTR 6
>
> @@ -171,8 +171,8 @@ struct kinfo_proc {
> signed char ki_nice; /* Process "nice" value */
> char ki_lock; /* Process lock (prevent swap) count */
> char ki_rqindex; /* Run queue index */
> - u_char ki_oncpu; /* Which cpu we are on */
> - u_char ki_lastcpu; /* Last cpu we were on */
> + u_char ki_oncpu_old; /* Which cpu we are on (legacy) */
> + u_char ki_lastcpu_old; /* Last cpu we were on (legacy) */
> char ki_tdname[TDNAMLEN+1]; /* thread name */
> char ki_wmesg[WMESGLEN+1]; /* wchan message */
> char ki_login[LOGNAMELEN+1]; /* setlogin name */
> @@ -187,6 +187,8 @@ struct kinfo_proc {
> */
> char ki_sparestrings[50]; /* spare string space */
> int ki_spareints[KI_NSPARE_INT]; /* spare room for growth */
> + int ki_oncpu; /* Which cpu we are on */
> + int ki_lastcpu; /* Last cpu we were on */
> int ki_tracer; /* Pid of tracing process */
> int ki_flag2; /* P2_* flags */
> int ki_fibnum; /* Default FIB number */
>
More information about the svn-src-head
mailing list