Split nhop_ref_object().
Now nhop_ref_object() unconditionally acquires a reference, and the new nhop_try_ref_object() uses refcount_acquire_if_not_zero() to conditionally acquire a reference. Since the former is cheaper, use it when we know that the initial counter value is non-zero. No functional change intended. Reviewed by: melifaro Differential Revision: https://reviews.freebsd.org/D25535
This commit is contained in:
parent
d3112319ac
commit
26dd427800
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=362976
@ -598,8 +598,17 @@ destroy_nhop_epoch(epoch_context_t ctx)
|
|||||||
destroy_nhop(nh_priv);
|
destroy_nhop(nh_priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void
|
||||||
nhop_ref_object(struct nhop_object *nh)
|
nhop_ref_object(struct nhop_object *nh)
|
||||||
|
{
|
||||||
|
u_int old;
|
||||||
|
|
||||||
|
old = refcount_acquire(&nh->nh_priv->nh_refcnt);
|
||||||
|
KASSERT(old > 0, ("%s: nhop object %p has 0 refs", __func__, nh));
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
nhop_try_ref_object(struct nhop_object *nh)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (refcount_acquire_if_not_zero(&nh->nh_priv->nh_refcnt));
|
return (refcount_acquire_if_not_zero(&nh->nh_priv->nh_refcnt));
|
||||||
@ -654,7 +663,7 @@ int
|
|||||||
nhop_ref_any(struct nhop_object *nh)
|
nhop_ref_any(struct nhop_object *nh)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (nhop_ref_object(nh));
|
return (nhop_try_ref_object(nh));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -51,7 +51,8 @@ struct rib_head;
|
|||||||
void nhops_init(void);
|
void nhops_init(void);
|
||||||
int nhops_init_rib(struct rib_head *rh);
|
int nhops_init_rib(struct rib_head *rh);
|
||||||
void nhops_destroy_rib(struct rib_head *rh);
|
void nhops_destroy_rib(struct rib_head *rh);
|
||||||
int nhop_ref_object(struct nhop_object *nh);
|
void nhop_ref_object(struct nhop_object *nh);
|
||||||
|
int nhop_try_ref_object(struct nhop_object *nh);
|
||||||
int nhop_ref_any(struct nhop_object *nh);
|
int nhop_ref_any(struct nhop_object *nh);
|
||||||
void nhop_free_any(struct nhop_object *nh);
|
void nhop_free_any(struct nhop_object *nh);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user