Date: Thu, 02 Jul 2020 13:07:29 -0600 From: Ian Lepore <ian@freebsd.org> To: kamalp@acm.org Cc: freebsd-arm@freebsd.org Subject: Re: cv_wait Message-ID: <28698f3e3db608dceee910a8ba62ad7b6be0769f.camel@freebsd.org> In-Reply-To: <CAK=yUGLvZ7uM=pTNrODnTgw6NStT4gHExsTDkrYTP_rQBV1C-A@mail.gmail.com> References: <CAK=yUGLoM1YWX5yxsboKqaCMr2jKGgtJ0a-CVVsfeEO3SpsYLQ@mail.gmail.com> <ef01153a05887b10a443c71cb42aff6180ae7f8f.camel@freebsd.org> <CAK=yUGLvZ7uM=pTNrODnTgw6NStT4gHExsTDkrYTP_rQBV1C-A@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2020-07-03 at 00:36 +0530, Kamal R. Prasad wrote: > but if i am doing cv_wait() for the first time, should someone be > calling cv_signal for it to proceed? > my algo is something like this in my driver:- > function1() > { > mtx_lock(&sc->sc_mtx); > cv_wait(&sc->sc_cv); > mtx_unlock(&sc->sc_mtx); > .... > critical section > .... > cv_signal(&sc->sc_cv); > } > > function2() > { > mtx_lock(&sc->sc_mtx); > cv_wait(&sc->sc_cv); > mtx_unlock(&sc->sc_mtx); > .... > critical section > .... > cv_signal(&sc->sc_cv); > } > --------------------- > i want to protect critical section. The critical section calls a > common > piece of code which has some locks. if i put in locks to guard the > cs, it > triggers a call to witness(). > > Update: i saw an implementation wherein they used a callout to > periodically > send a cv_signal(). i could do that but the pt of this implementation > is > that cs in either of these functions should not be eecuting at the > same > time. > > thanks > -kamal > A condition variable doesn't work the way you're trying to use it. What is the complaint from witness? What type of locks are used in the common code that causes a complaint? Are any of these functions involved called from interrupt handlers (that also imposes restrictions on what kind of locking you can do)? -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?28698f3e3db608dceee910a8ba62ad7b6be0769f.camel>