summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authormarius <marius@FreeBSD.org>2017-05-14 14:21:09 +0000
committermarius <marius@FreeBSD.org>2017-05-14 14:21:09 +0000
commit6314dd4b859877b0b6e62bfee0679ff14f562d1b (patch)
tree53fb679066c43776c6ae6e029bd210ebcfdcbfb9 /sys/kern
parentbb5dae3f631153c9c528095117091bb75406e419 (diff)
downloadFreeBSD-src-6314dd4b859877b0b6e62bfee0679ff14f562d1b.zip
FreeBSD-src-6314dd4b859877b0b6e62bfee0679ff14f562d1b.tar.gz
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.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/subr_kobj.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/sys/kern/subr_kobj.c b/sys/kern/subr_kobj.c
index 5be746a..15a7b8a 100644
--- a/sys/kern/subr_kobj.c
+++ b/sys/kern/subr_kobj.c
@@ -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;
}
OpenPOWER on IntegriCloud