mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 07:23:14 +00:00
rcu: Remove unused RCU list functions
Given changes to callback migration, rcu_cblist_head(), rcu_cblist_tail(), rcu_cblist_count_cbs(), rcu_segcblist_segempty(), rcu_segcblist_dequeued_lazy(), and rcu_segcblist_new_cbs() are no longer used. This commit therefore removes them. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
This commit is contained in:
parent
f2dbe4a562
commit
aed4e04686
@ -35,24 +35,6 @@ void rcu_cblist_init(struct rcu_cblist *rclp)
|
|||||||
rclp->len_lazy = 0;
|
rclp->len_lazy = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Debug function to actually count the number of callbacks.
|
|
||||||
* If the number exceeds the limit specified, return -1.
|
|
||||||
*/
|
|
||||||
long rcu_cblist_count_cbs(struct rcu_cblist *rclp, long lim)
|
|
||||||
{
|
|
||||||
int cnt = 0;
|
|
||||||
struct rcu_head **rhpp = &rclp->head;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
if (!*rhpp)
|
|
||||||
return cnt;
|
|
||||||
if (++cnt > lim)
|
|
||||||
return -1;
|
|
||||||
rhpp = &(*rhpp)->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dequeue the oldest rcu_head structure from the specified callback
|
* Dequeue the oldest rcu_head structure from the specified callback
|
||||||
* list. This function assumes that the callback is non-lazy, but
|
* list. This function assumes that the callback is non-lazy, but
|
||||||
@ -102,17 +84,6 @@ void rcu_segcblist_disable(struct rcu_segcblist *rsclp)
|
|||||||
rsclp->tails[RCU_NEXT_TAIL] = NULL;
|
rsclp->tails[RCU_NEXT_TAIL] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Is the specified segment of the specified rcu_segcblist structure
|
|
||||||
* empty of callbacks?
|
|
||||||
*/
|
|
||||||
bool rcu_segcblist_segempty(struct rcu_segcblist *rsclp, int seg)
|
|
||||||
{
|
|
||||||
if (seg == RCU_DONE_TAIL)
|
|
||||||
return &rsclp->head == rsclp->tails[RCU_DONE_TAIL];
|
|
||||||
return rsclp->tails[seg - 1] == rsclp->tails[seg];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Does the specified rcu_segcblist structure contain callbacks that
|
* Does the specified rcu_segcblist structure contain callbacks that
|
||||||
* are ready to be invoked?
|
* are ready to be invoked?
|
||||||
@ -133,50 +104,6 @@ bool rcu_segcblist_pend_cbs(struct rcu_segcblist *rsclp)
|
|||||||
!rcu_segcblist_restempty(rsclp, RCU_DONE_TAIL);
|
!rcu_segcblist_restempty(rsclp, RCU_DONE_TAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Dequeue and return the first ready-to-invoke callback. If there
|
|
||||||
* are no ready-to-invoke callbacks, return NULL. Disables interrupts
|
|
||||||
* to avoid interference. Does not protect from interference from other
|
|
||||||
* CPUs or tasks.
|
|
||||||
*/
|
|
||||||
struct rcu_head *rcu_segcblist_dequeue(struct rcu_segcblist *rsclp)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
int i;
|
|
||||||
struct rcu_head *rhp;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
if (!rcu_segcblist_ready_cbs(rsclp)) {
|
|
||||||
local_irq_restore(flags);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
rhp = rsclp->head;
|
|
||||||
BUG_ON(!rhp);
|
|
||||||
rsclp->head = rhp->next;
|
|
||||||
for (i = RCU_DONE_TAIL; i < RCU_CBLIST_NSEGS; i++) {
|
|
||||||
if (rsclp->tails[i] != &rhp->next)
|
|
||||||
break;
|
|
||||||
rsclp->tails[i] = &rsclp->head;
|
|
||||||
}
|
|
||||||
smp_mb(); /* Dequeue before decrement for rcu_barrier(). */
|
|
||||||
WRITE_ONCE(rsclp->len, rsclp->len - 1);
|
|
||||||
local_irq_restore(flags);
|
|
||||||
return rhp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Account for the fact that a previously dequeued callback turned out
|
|
||||||
* to be marked as lazy.
|
|
||||||
*/
|
|
||||||
void rcu_segcblist_dequeued_lazy(struct rcu_segcblist *rsclp)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
rsclp->len_lazy--;
|
|
||||||
local_irq_restore(flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a pointer to the first callback in the specified rcu_segcblist
|
* Return a pointer to the first callback in the specified rcu_segcblist
|
||||||
* structure. This is useful for diagnostics.
|
* structure. This is useful for diagnostics.
|
||||||
@ -202,17 +129,6 @@ struct rcu_head *rcu_segcblist_first_pend_cb(struct rcu_segcblist *rsclp)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Does the specified rcu_segcblist structure contain callbacks that
|
|
||||||
* have not yet been processed beyond having been posted, that is,
|
|
||||||
* does it contain callbacks in its last segment?
|
|
||||||
*/
|
|
||||||
bool rcu_segcblist_new_cbs(struct rcu_segcblist *rsclp)
|
|
||||||
{
|
|
||||||
return rcu_segcblist_is_enabled(rsclp) &&
|
|
||||||
!rcu_segcblist_restempty(rsclp, RCU_NEXT_READY_TAIL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enqueue the specified callback onto the specified rcu_segcblist
|
* Enqueue the specified callback onto the specified rcu_segcblist
|
||||||
* structure, updating accounting as needed. Note that the ->len
|
* structure, updating accounting as needed. Note that the ->len
|
||||||
|
@ -31,29 +31,7 @@ static inline void rcu_cblist_dequeued_lazy(struct rcu_cblist *rclp)
|
|||||||
rclp->len_lazy--;
|
rclp->len_lazy--;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Interim function to return rcu_cblist head pointer. Longer term, the
|
|
||||||
* rcu_cblist will be used more pervasively, removing the need for this
|
|
||||||
* function.
|
|
||||||
*/
|
|
||||||
static inline struct rcu_head *rcu_cblist_head(struct rcu_cblist *rclp)
|
|
||||||
{
|
|
||||||
return rclp->head;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Interim function to return rcu_cblist head pointer. Longer term, the
|
|
||||||
* rcu_cblist will be used more pervasively, removing the need for this
|
|
||||||
* function.
|
|
||||||
*/
|
|
||||||
static inline struct rcu_head **rcu_cblist_tail(struct rcu_cblist *rclp)
|
|
||||||
{
|
|
||||||
WARN_ON_ONCE(!rclp->head);
|
|
||||||
return rclp->tail;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rcu_cblist_init(struct rcu_cblist *rclp);
|
void rcu_cblist_init(struct rcu_cblist *rclp);
|
||||||
long rcu_cblist_count_cbs(struct rcu_cblist *rclp, long lim);
|
|
||||||
struct rcu_head *rcu_cblist_dequeue(struct rcu_cblist *rclp);
|
struct rcu_head *rcu_cblist_dequeue(struct rcu_cblist *rclp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -134,14 +112,10 @@ static inline struct rcu_head **rcu_segcblist_tail(struct rcu_segcblist *rsclp)
|
|||||||
|
|
||||||
void rcu_segcblist_init(struct rcu_segcblist *rsclp);
|
void rcu_segcblist_init(struct rcu_segcblist *rsclp);
|
||||||
void rcu_segcblist_disable(struct rcu_segcblist *rsclp);
|
void rcu_segcblist_disable(struct rcu_segcblist *rsclp);
|
||||||
bool rcu_segcblist_segempty(struct rcu_segcblist *rsclp, int seg);
|
|
||||||
bool rcu_segcblist_ready_cbs(struct rcu_segcblist *rsclp);
|
bool rcu_segcblist_ready_cbs(struct rcu_segcblist *rsclp);
|
||||||
bool rcu_segcblist_pend_cbs(struct rcu_segcblist *rsclp);
|
bool rcu_segcblist_pend_cbs(struct rcu_segcblist *rsclp);
|
||||||
struct rcu_head *rcu_segcblist_dequeue(struct rcu_segcblist *rsclp);
|
|
||||||
void rcu_segcblist_dequeued_lazy(struct rcu_segcblist *rsclp);
|
|
||||||
struct rcu_head *rcu_segcblist_first_cb(struct rcu_segcblist *rsclp);
|
struct rcu_head *rcu_segcblist_first_cb(struct rcu_segcblist *rsclp);
|
||||||
struct rcu_head *rcu_segcblist_first_pend_cb(struct rcu_segcblist *rsclp);
|
struct rcu_head *rcu_segcblist_first_pend_cb(struct rcu_segcblist *rsclp);
|
||||||
bool rcu_segcblist_new_cbs(struct rcu_segcblist *rsclp);
|
|
||||||
void rcu_segcblist_enqueue(struct rcu_segcblist *rsclp,
|
void rcu_segcblist_enqueue(struct rcu_segcblist *rsclp,
|
||||||
struct rcu_head *rhp, bool lazy);
|
struct rcu_head *rhp, bool lazy);
|
||||||
bool rcu_segcblist_entrain(struct rcu_segcblist *rsclp,
|
bool rcu_segcblist_entrain(struct rcu_segcblist *rsclp,
|
||||||
|
Loading…
Reference in New Issue
Block a user