[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] rcu: move private declarations and definitions from header to implementation



On 14/10/2011 08:50, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:

> No consumer of RCU should need to see these, and there's also no need
> to clutter the global name space with them.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Acked-by: Keir Fraser <keir@xxxxxxx>

> --- a/xen/common/rcupdate.c
> +++ b/xen/common/rcupdate.c
> @@ -46,15 +46,50 @@
>  #include <xen/cpu.h>
>  #include <xen/stop_machine.h>
>  
> -/* Definition for rcupdate control block. */
> -struct rcu_ctrlblk rcu_ctrlblk = {
> +/* Global control variables for rcupdate callback mechanism. */
> +static struct rcu_ctrlblk {
> +    long cur;           /* Current batch number.                      */
> +    long completed;     /* Number of the last completed batch         */
> +    int  next_pending;  /* Is the next batch already waiting?         */
> +
> +    spinlock_t  lock __cacheline_aligned;
> +    cpumask_t   cpumask; /* CPUs that need to switch in order    */
> +    /* for current batch to proceed.        */
> +} __cacheline_aligned rcu_ctrlblk = {
>      .cur = -300,
>      .completed = -300,
>      .lock = SPIN_LOCK_UNLOCKED,
>      .cpumask = CPU_MASK_NONE,
>  };
>  
> -DEFINE_PER_CPU(struct rcu_data, rcu_data);
> +/*
> + * Per-CPU data for Read-Copy Update.
> + * nxtlist - new callbacks are added here
> + * curlist - current batch for which quiescent cycle started if any
> + */
> +struct rcu_data {
> +    /* 1) quiescent state handling : */
> +    long quiescbatch;    /* Batch # for grace period */
> +    int  qs_pending;     /* core waits for quiesc state */
> +
> +    /* 2) batch handling */
> +    long            batch;            /* Batch # for current RCU batch */
> +    struct rcu_head *nxtlist;
> +    struct rcu_head **nxttail;
> +    long            qlen;             /* # of queued callbacks */
> +    struct rcu_head *curlist;
> +    struct rcu_head **curtail;
> +    struct rcu_head *donelist;
> +    struct rcu_head **donetail;
> +    long            blimit;           /* Upper limit on a processed batch */
> +    int cpu;
> +    struct rcu_head barrier;
> +#ifdef CONFIG_SMP
> +    long            last_rs_qlen;     /* qlen during the last resched */
> +#endif
> +};
> +
> +static DEFINE_PER_CPU(struct rcu_data, rcu_data);
>  
>  static int blimit = 10;
>  static int qhimark = 10000;
> @@ -104,6 +139,18 @@ int rcu_barrier(void)
>      return stop_machine_run(rcu_barrier_action, &cpu_count, NR_CPUS);
>  }
>  
> +/* Is batch a before batch b ? */
> +static inline int rcu_batch_before(long a, long b)
> +{
> +    return (a - b) < 0;
> +}
> +
> +/* Is batch a after batch b ? */
> +static inline int rcu_batch_after(long a, long b)
> +{
> +    return (a - b) > 0;
> +}
> +
>  static void force_quiescent_state(struct rcu_data *rdp,
>                                    struct rcu_ctrlblk *rcp)
>  {
> --- a/xen/include/xen/rcupdate.h
> +++ b/xen/include/xen/rcupdate.h
> @@ -57,60 +57,6 @@ struct rcu_head {
>  } while (0)
>  
>  
> -
> -/* Global control variables for rcupdate callback mechanism. */
> -struct rcu_ctrlblk {
> -    long cur;           /* Current batch number.                      */
> -    long completed;     /* Number of the last completed batch         */
> -    int  next_pending;  /* Is the next batch already waiting?         */
> -
> -    spinlock_t  lock __cacheline_aligned;
> -    cpumask_t   cpumask; /* CPUs that need to switch in order    */
> -    /* for current batch to proceed.        */
> -} __cacheline_aligned;
> -
> -/* Is batch a before batch b ? */
> -static inline int rcu_batch_before(long a, long b)
> -{
> -    return (a - b) < 0;
> -}
> -
> -/* Is batch a after batch b ? */
> -static inline int rcu_batch_after(long a, long b)
> -{
> -    return (a - b) > 0;
> -}
> -
> -/*
> - * Per-CPU data for Read-Copy Update.
> - * nxtlist - new callbacks are added here
> - * curlist - current batch for which quiescent cycle started if any
> - */
> -struct rcu_data {
> -    /* 1) quiescent state handling : */
> -    long quiescbatch;    /* Batch # for grace period */
> -    int  qs_pending;     /* core waits for quiesc state */
> -
> -    /* 2) batch handling */
> -    long            batch;            /* Batch # for current RCU batch */
> -    struct rcu_head *nxtlist;
> -    struct rcu_head **nxttail;
> -    long            qlen;             /* # of queued callbacks */
> -    struct rcu_head *curlist;
> -    struct rcu_head **curtail;
> -    struct rcu_head *donelist;
> -    struct rcu_head **donetail;
> -    long            blimit;           /* Upper limit on a processed batch */
> -    int cpu;
> -    struct rcu_head barrier;
> -#ifdef CONFIG_SMP
> -    long            last_rs_qlen;     /* qlen during the last resched */
> -#endif
> -};
> -
> -DECLARE_PER_CPU(struct rcu_data, rcu_data);
> -extern struct rcu_ctrlblk rcu_ctrlblk;
> -
>  int rcu_pending(int cpu);
>  int rcu_needs_cpu(int cpu);
>  
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.