svn commit: r318274 - in stable/11/sys: kern sys
Marius Strobl
marius at FreeBSD.org
Sun May 14 14:21:11 UTC 2017
Author: marius
Date: Sun May 14 14:21:09 2017
New Revision: 318274
URL: https://svnweb.freebsd.org/changeset/base/318274
Log:
MFC: r317982
- Also outside of the KOBJOPLOOKUP macro - which in turn is used by
the code auto-generated for *.m - kobj_lookup_method(9) is useful;
for example in back-ends or base class device drivers in order to
determine whether a default method has been overridden. Thus, allow
for the kobj_method_t pointer argument - used by KOBJOPLOOKUP in
order to update the cache entry - of kobj_lookup_method(9), to be
NULL. Actually, that pointer is redundant as it's just set to the
same kobj_method_t that the kobj_lookup_method(9) function returns
in the first place, but probably it serves to reduce the number of
instructions generated for KOBJOPLOOKUP.
- For the same reason, move updating kobj_lookup_{hits,misses} (if
KOBJ_STATS is defined) from kobj_lookup_method(9) to KOBJOPLOOKUP.
As a side-effect, this gets rid of the convoluted approach of always
incrementing kobj_lookup_hits in KOBJOPLOOKUP and then in case of
a cache miss, decrementing it in kobj_lookup_method(9) again.
Modified:
stable/11/sys/kern/subr_kobj.c
stable/11/sys/sys/kobj.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/kern/subr_kobj.c
==============================================================================
--- stable/11/sys/kern/subr_kobj.c Sun May 14 14:04:32 2017 (r318273)
+++ stable/11/sys/kern/subr_kobj.c Sun May 14 14:21:09 2017 (r318274)
@@ -213,19 +213,11 @@ kobj_lookup_method(kobj_class_t cls,
{
kobj_method_t *ce;
-#ifdef KOBJ_STATS
- /*
- * Correct for the 'hit' assumption in KOBJOPLOOKUP and record
- * a 'miss'.
- */
- kobj_lookup_hits--;
- kobj_lookup_misses++;
-#endif
-
ce = kobj_lookup_method_mi(cls, desc);
if (!ce)
ce = &desc->deflt;
- *cep = ce;
+ if (cep)
+ *cep = ce;
return ce;
}
Modified: stable/11/sys/sys/kobj.h
==============================================================================
--- stable/11/sys/sys/kobj.h Sun May 14 14:04:32 2017 (r318273)
+++ stable/11/sys/sys/kobj.h Sun May 14 14:21:09 2017 (r318274)
@@ -226,10 +226,12 @@ extern u_int kobj_lookup_misses;
kobj_method_t **_cep = \
&OPS->cache[_desc->id & (KOBJ_CACHE_SIZE-1)]; \
kobj_method_t *_ce = *_cep; \
- kobj_lookup_hits++; /* assume hit */ \
- if (_ce->desc != _desc) \
+ if (_ce->desc != _desc) { \
_ce = kobj_lookup_method(OPS->cls, \
_cep, _desc); \
+ kobj_lookup_misses++; \
+ } else \
+ kobj_lookup_hits++; \
_m = _ce->func; \
} while(0)
#else
More information about the svn-src-stable-11
mailing list