diff --git a/headers/private/kernel/util/AutoLock.h b/headers/private/kernel/util/AutoLock.h index 58ee5e6dbb..fd40971be3 100644 --- a/headers/private/kernel/util/AutoLock.h +++ b/headers/private/kernel/util/AutoLock.h @@ -6,9 +6,13 @@ #define KERNEL_UTIL_AUTO_LOCKER_H -#include +#include + #include +#include +#include + namespace BPrivate { @@ -63,11 +67,60 @@ public: // BenaphoreLocker typedef AutoLocker BenaphoreLocker; +// InterruptsLocking +class InterruptsLocking { +public: + inline bool Lock(int* lockable) + { + *lockable = disable_interrupts(); + return true; + } + + inline void Unlock(int* lockable) + { + restore_interrupts(*lockable); + } +}; + +// InterruptsLocker +class InterruptsLocker : AutoLocker { +public: + inline InterruptsLocker(bool alreadyLocked = false, + bool lockIfNotLocked = true) + : AutoLocker(&fState, alreadyLocked, + lockIfNotLocked) + { + } + +private: + int fState; +}; + +// SpinLocking +class SpinLocking { +public: + inline bool Lock(spinlock* lockable) + { + acquire_spinlock(lockable); + return true; + } + + inline void Unlock(spinlock* lockable) + { + release_spinlock(lockable); + } +}; + +// SpinLocker +typedef AutoLocker SpinLocker; + } // namespace BPrivate using BPrivate::AutoLocker; using BPrivate::MutexLocker; using BPrivate::RecursiveLocker; using BPrivate::BenaphoreLocker; +using BPrivate::InterruptsLocker; +using BPrivate::SpinLocker; #endif // KERNEL_UTIL_AUTO_LOCKER_H diff --git a/src/add-ons/kernel/drivers/tty/Jamfile b/src/add-ons/kernel/drivers/tty/Jamfile index 5060013f2c..9ab336230d 100644 --- a/src/add-ons/kernel/drivers/tty/Jamfile +++ b/src/add-ons/kernel/drivers/tty/Jamfile @@ -1,6 +1,6 @@ SubDir HAIKU_TOP src add-ons kernel drivers tty ; -UsePrivateHeaders kernel ; +UsePrivateKernelHeaders ; KernelAddon tty : driver.cpp diff --git a/src/add-ons/kernel/network/datalink_protocols/arp/Jamfile b/src/add-ons/kernel/network/datalink_protocols/arp/Jamfile index 6b8718e9ae..6ec9fc84fa 100644 --- a/src/add-ons/kernel/network/datalink_protocols/arp/Jamfile +++ b/src/add-ons/kernel/network/datalink_protocols/arp/Jamfile @@ -10,7 +10,8 @@ if $(TARGET_PLATFORM) != haiku { # Unfortunately we get more than we want, namely all POSIX headers. } -UsePrivateHeaders kernel net ; +UsePrivateKernelHeaders ; +UsePrivateHeaders net ; KernelAddon arp : arp.cpp diff --git a/src/add-ons/kernel/network/devices/ethernet/Jamfile b/src/add-ons/kernel/network/devices/ethernet/Jamfile index cb4c9ce692..0c9f78e0c5 100644 --- a/src/add-ons/kernel/network/devices/ethernet/Jamfile +++ b/src/add-ons/kernel/network/devices/ethernet/Jamfile @@ -10,7 +10,8 @@ if $(TARGET_PLATFORM) != haiku { # Unfortunately we get more than we want, namely all POSIX headers. } -UsePrivateHeaders kernel net ; +UsePrivateKernelHeaders ; +UsePrivateHeaders net ; KernelAddon ethernet : ethernet.cpp diff --git a/src/add-ons/kernel/network/protocols/ipv4/Jamfile b/src/add-ons/kernel/network/protocols/ipv4/Jamfile index 029ba88ee5..bdcda454b9 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/Jamfile +++ b/src/add-ons/kernel/network/protocols/ipv4/Jamfile @@ -10,7 +10,8 @@ if $(TARGET_PLATFORM) != haiku { # Unfortunately we get more than we want, namely all POSIX headers. } -UsePrivateHeaders kernel net ; +UsePrivateKernelHeaders ; +UsePrivateHeaders net ; KernelAddon ipv4 : ipv4.cpp diff --git a/src/add-ons/kernel/network/protocols/tcp/Jamfile b/src/add-ons/kernel/network/protocols/tcp/Jamfile index da555d5284..48815a50e5 100644 --- a/src/add-ons/kernel/network/protocols/tcp/Jamfile +++ b/src/add-ons/kernel/network/protocols/tcp/Jamfile @@ -10,7 +10,8 @@ if $(TARGET_PLATFORM) != haiku { # Unfortunately we get more than we want, namely all POSIX headers. } -UsePrivateHeaders kernel net ; +UsePrivateKernelHeaders ; +UsePrivateHeaders net ; KernelAddon tcp : tcp.cpp diff --git a/src/add-ons/kernel/network/protocols/udp/Jamfile b/src/add-ons/kernel/network/protocols/udp/Jamfile index 177e797455..e19505984b 100644 --- a/src/add-ons/kernel/network/protocols/udp/Jamfile +++ b/src/add-ons/kernel/network/protocols/udp/Jamfile @@ -10,7 +10,8 @@ if $(TARGET_PLATFORM) != haiku { # Unfortunately we get more than we want, namely all POSIX headers. } -UsePrivateHeaders kernel net ; +UsePrivateKernelHeaders ; +UsePrivateHeaders net ; KernelAddon udp : udp.cpp