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 */
> 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to