]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/linux/rcuclassic.h
Merge commit 'v2.6.27-rc6' into core/rcu
[karo-tx-linux.git] / include / linux / rcuclassic.h
index 4ab8436227276322042c5b7374e6d0c561e80486..29bf528c7dccbd595167399b7d25f5641a1485b8 100644 (file)
 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?         */
+       long    pending;        /* Number of the last pending batch           */
+#ifdef CONFIG_DEBUG_RCU_STALL
+       unsigned long gp_check; /* Time grace period should end, in seconds.  */
+#endif /* #ifdef CONFIG_DEBUG_RCU_STALL */
 
        int     signaled;
 
@@ -66,11 +69,7 @@ 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
- */
+/* Per-CPU data for Read-Copy UPdate. */
 struct rcu_data {
        /* 1) quiescent state handling : */
        long            quiescbatch;     /* Batch # for grace period */
@@ -78,12 +77,24 @@ struct rcu_data {
        int             qs_pending;      /* core waits for quiesc state */
 
        /* 2) batch handling */
-       long            batch;           /* Batch # for current RCU batch */
+       /*
+        * if nxtlist is not NULL, then:
+        * batch:
+        *      The batch # for the last entry of nxtlist
+        * [*nxttail[1], NULL = *nxttail[2]):
+        *      Entries that batch # <= batch
+        * [*nxttail[0], *nxttail[1]):
+        *      Entries that batch # <= batch - 1
+        * [nxtlist, *nxttail[0]):
+        *      Entries that batch # <= batch - 2
+        *      The grace period for these entries has completed, and
+        *      the other grace-period-completed entries may be moved
+        *      here temporarily in rcu_process_callbacks().
+        */
+       long            batch;
        struct rcu_head *nxtlist;
-       struct rcu_head **nxttail;
+       struct rcu_head **nxttail[3];
        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 */