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 {
         struct ck_epoch e_epoch __aligned(EPOCH_ALIGN);
         epoch_record_t e_pcpu_record;
         int     e_in_use;
         int     e_flags;
         struct sx e_drain_sx;
         struct mtx e_drain_mtx;
         volatile int e_drain_count;
         const char *e_name;
};

The e_drain_sx and e_drain_mtx are only used in

void
epoch_drain_callbacks(epoch_t epoch)
{
...
     DROP_GIANT();

     sx_xlock(&epoch->e_drain_sx);
     mtx_lock(&epoch->e_drain_mtx);

...

     mtx_unlock(&epoch->e_drain_mtx);
     sx_xunlock(&epoch->e_drain_sx);

     PICKUP_GIANT();
}

Why is there a combination of a shared/exclusive lock and a mutex used 
like this? Why is a single mutex insufficient?

-- 
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ünchen
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung 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>