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-all mailing list