mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Evidently I've overestimated gcc's ability to peak inside inline functions
and optimize away unused stack values. The 48 bytes that the lock_profile_object adds to the stack evidently has a measurable performance impact on certain workloads.
This commit is contained in:
parent
b07b4f1229
commit
a5bceb77f2
2 changed files with 16 additions and 6 deletions
|
|
@ -157,9 +157,9 @@ _mtx_lock_flags(struct mtx *m, int opts, const char *file, int line)
|
|||
void
|
||||
_mtx_unlock_flags(struct mtx *m, int opts, const char *file, int line)
|
||||
{
|
||||
|
||||
#ifdef LOCK_PROFILING
|
||||
struct lock_object lo;
|
||||
|
||||
#endif
|
||||
MPASS(curthread != NULL);
|
||||
KASSERT(m->mtx_lock != MTX_DESTROYED,
|
||||
("mtx_unlock() of destroyed mutex @ %s:%d", file, line));
|
||||
|
|
@ -176,7 +176,9 @@ _mtx_unlock_flags(struct mtx *m, int opts, const char *file, int line)
|
|||
m->mtx_object.lo_flags &= ~LO_CONTESTED;
|
||||
#endif
|
||||
_rel_sleep_lock(m, curthread, opts, file, line);
|
||||
#ifdef LOCK_PROFILING
|
||||
lock_profile_release_lock(&lo);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -200,9 +202,9 @@ _mtx_lock_spin_flags(struct mtx *m, int opts, const char *file, int line)
|
|||
void
|
||||
_mtx_unlock_spin_flags(struct mtx *m, int opts, const char *file, int line)
|
||||
{
|
||||
|
||||
#ifdef LOCK_PROFILING
|
||||
struct lock_object lo;
|
||||
|
||||
#endif
|
||||
MPASS(curthread != NULL);
|
||||
KASSERT(m->mtx_lock != MTX_DESTROYED,
|
||||
("mtx_unlock_spin() of destroyed mutex @ %s:%d", file, line));
|
||||
|
|
@ -218,7 +220,9 @@ _mtx_unlock_spin_flags(struct mtx *m, int opts, const char *file, int line)
|
|||
m->mtx_object.lo_flags &= ~LO_CONTESTED;
|
||||
#endif
|
||||
_rel_spin_lock(m);
|
||||
#ifdef LOCK_PROFILING
|
||||
lock_profile_release_lock(&lo);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -228,9 +228,10 @@ _sx_try_xlock(struct sx *sx, const char *file, int line)
|
|||
void
|
||||
_sx_sunlock(struct sx *sx, const char *file, int line)
|
||||
{
|
||||
#ifdef LOCK_PROFILING
|
||||
struct lock_object lo;
|
||||
int count = -1;
|
||||
|
||||
#endif
|
||||
_sx_assert(sx, SX_SLOCKED, file, line);
|
||||
mtx_lock(sx->sx_lock);
|
||||
|
||||
|
|
@ -262,15 +263,18 @@ _sx_sunlock(struct sx *sx, const char *file, int line)
|
|||
LOCK_LOG_LOCK("SUNLOCK", &sx->sx_object, 0, 0, file, line);
|
||||
|
||||
mtx_unlock(sx->sx_lock);
|
||||
#ifdef LOCK_PROFILING
|
||||
if (count == 0)
|
||||
lock_profile_release_lock(&lo);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
_sx_xunlock(struct sx *sx, const char *file, int line)
|
||||
{
|
||||
#ifdef LOCK_PROFILING
|
||||
struct lock_object lo;
|
||||
#endif
|
||||
|
||||
_sx_assert(sx, SX_XLOCKED, file, line);
|
||||
mtx_lock(sx->sx_lock);
|
||||
|
|
@ -298,7 +302,9 @@ _sx_xunlock(struct sx *sx, const char *file, int line)
|
|||
LOCK_LOG_LOCK("XUNLOCK", &sx->sx_object, 0, 0, file, line);
|
||||
|
||||
mtx_unlock(sx->sx_lock);
|
||||
#ifdef LOCK_PROFILING
|
||||
lock_profile_release_lock(&lo);
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
Loading…
Reference in a new issue