Date: Fri, 7 Feb 2020 22:44:41 +0000 (UTC) From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r357673 - head/sys/kern Message-ID: <202002072244.017MifN1037887@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mjg Date: Fri Feb 7 22:44:41 2020 New Revision: 357673 URL: https://svnweb.freebsd.org/changeset/base/357673 Log: rms: use newly added zpcpu routines instead of direct access where appropriate Modified: head/sys/kern/kern_rmlock.c Modified: head/sys/kern/kern_rmlock.c ============================================================================== --- head/sys/kern/kern_rmlock.c Fri Feb 7 22:43:58 2020 (r357672) +++ head/sys/kern/kern_rmlock.c Fri Feb 7 22:44:41 2020 (r357673) @@ -900,60 +900,56 @@ static void __noinline rms_rlock_fallback(struct rmslock *rms) { - (*zpcpu_get(rms->readers_influx)) = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); mtx_lock(&rms->mtx); MPASS(*zpcpu_get(rms->readers_pcpu) == 0); while (rms->writers > 0) msleep(&rms->readers, &rms->mtx, PUSER - 1, mtx_name(&rms->mtx), 0); - (*zpcpu_get(rms->readers_pcpu))++; + critical_enter(); + zpcpu_add_protected(rms->readers_pcpu, 1); mtx_unlock(&rms->mtx); + critical_exit(); } void rms_rlock(struct rmslock *rms) { - int *influx; WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, __func__); critical_enter(); - influx = zpcpu_get(rms->readers_influx); + zpcpu_set_protected(rms->readers_influx, 1); __compiler_membar(); - *influx = 1; - __compiler_membar(); if (__predict_false(rms->writers > 0)) { rms_rlock_fallback(rms); return; } __compiler_membar(); - (*zpcpu_get(rms->readers_pcpu))++; + zpcpu_add_protected(rms->readers_pcpu, 1); __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); } int rms_try_rlock(struct rmslock *rms) { - int *influx; critical_enter(); - influx = zpcpu_get(rms->readers_influx); + zpcpu_set_protected(rms->readers_influx, 1); __compiler_membar(); - *influx = 1; - __compiler_membar(); if (__predict_false(rms->writers > 0)) { __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); return (0); } __compiler_membar(); - (*zpcpu_get(rms->readers_pcpu))++; + zpcpu_add_protected(rms->readers_pcpu, 1); __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); return (1); } @@ -962,7 +958,7 @@ static void __noinline rms_runlock_fallback(struct rmslock *rms) { - (*zpcpu_get(rms->readers_influx)) = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); mtx_lock(&rms->mtx); @@ -978,21 +974,18 @@ rms_runlock_fallback(struct rmslock *rms) void rms_runlock(struct rmslock *rms) { - int *influx; critical_enter(); - influx = zpcpu_get(rms->readers_influx); + zpcpu_set_protected(rms->readers_influx, 1); __compiler_membar(); - *influx = 1; - __compiler_membar(); if (__predict_false(rms->writers > 0)) { rms_runlock_fallback(rms); return; } __compiler_membar(); - (*zpcpu_get(rms->readers_pcpu))--; + zpcpu_sub_protected(rms->readers_pcpu, 1); __compiler_membar(); - *influx = 0; + zpcpu_set_protected(rms->readers_influx, 0); critical_exit(); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202002072244.017MifN1037887>