Date: Tue, 29 Dec 2020 11:49:49 +0100 From: Sebastian Huber <sebastian.huber@embedded-brains.de> To: freebsd-hackers@freebsd.org Subject: Why is there e_drain_sx and e_drain_mtx? Message-ID: <5eeae691-b7d4-932b-14cc-065a368e77de@embedded-brains.de>
next in thread | raw e-mail | index | archive | help
Hello, in the epoch based reclamation implementation we have struct epoch { =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct ck_epoch e_epoch __ali= gned(EPOCH_ALIGN); =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 epoch_record_t e_pcpu_record; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int=C2=A0=C2=A0=C2=A0=C2=A0 e= _in_use; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int=C2=A0=C2=A0=C2=A0=C2=A0 e= _flags; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct sx e_drain_sx; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 struct mtx e_drain_mtx; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 volatile int e_drain_count; =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 const char *e_name; }; The e_drain_sx and e_drain_mtx are only used in void epoch_drain_callbacks(epoch_t epoch) { ... =C2=A0=C2=A0=C2=A0 DROP_GIANT(); =C2=A0=C2=A0=C2=A0 sx_xlock(&epoch->e_drain_sx); =C2=A0=C2=A0=C2=A0 mtx_lock(&epoch->e_drain_mtx); ... =C2=A0=C2=A0=C2=A0 mtx_unlock(&epoch->e_drain_mtx); =C2=A0=C2=A0=C2=A0 sx_xunlock(&epoch->e_drain_sx); =C2=A0=C2=A0=C2=A0 PICKUP_GIANT(); } Why is there a combination of a shared/exclusive lock and a mutex used=20 like this? Why is a single mutex insufficient? --=20 embedded brains GmbH Herr Sebastian HUBER Dornierstr. 4 82178 Puchheim Germany email: sebastian.huber@embedded-brains.de phone: +49-89-18 94 741 - 16 fax: +49-89-18 94 741 - 08 Registergericht: Amtsgericht M=C3=BCnchen Registernummer: HRB 157899 Vertretungsberechtigte Gesch=C3=A4ftsf=C3=BChrer: Peter Rasmussen, Thomas= D=C3=B6rfler Unsere Datenschutzerkl=C3=A4rung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5eeae691-b7d4-932b-14cc-065a368e77de>