Skip site navigation (1)Skip section navigation (2)
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>