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:
Mark Johnston 2020-07-06 21:20:57 +00:00
parent d3112319ac
commit 26dd427800
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=362976
2 changed files with 13 additions and 3 deletions

View File

@ -598,8 +598,17 @@ destroy_nhop_epoch(epoch_context_t ctx)
destroy_nhop(nh_priv);
}
int
void
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));
@ -654,7 +663,7 @@ int
nhop_ref_any(struct nhop_object *nh)
{
return (nhop_ref_object(nh));
return (nhop_try_ref_object(nh));
}
void

View File

@ -51,7 +51,8 @@ struct rib_head;
void nhops_init(void);
int nhops_init_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);
void nhop_free_any(struct nhop_object *nh);