From owner-svn-src-head@FreeBSD.ORG Sun Oct 19 03:17:04 2014 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 1EF68A56; Sun, 19 Oct 2014 03:17:04 +0000 (UTC) Received: from onelab2.iet.unipi.it (onelab2.iet.unipi.it [131.114.59.238]) by mx1.freebsd.org (Postfix) with ESMTP id 85DF4DAA; Sun, 19 Oct 2014 03:17:03 +0000 (UTC) Received: by onelab2.iet.unipi.it (Postfix, from userid 275) id 9D27E7300A; Sun, 19 Oct 2014 05:20:38 +0200 (CEST) Date: Sun, 19 Oct 2014 05:20:38 +0200 From: Luigi Rizzo To: Adrian Chadd Subject: Re: svn commit: r273266 - in head: lib/libkvm sys/compat/freebsd32 sys/kern sys/sys Message-ID: <20141019032038.GA41067@onelab2.iet.unipi.it> References: <201410181936.s9IJaCwu018930@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201410181936.s9IJaCwu018930@svn.freebsd.org> User-Agent: Mutt/1.5.20 (2009-06-14) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Oct 2014 03:17:04 -0000 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 */ >