mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 12:57:35 +00:00
Kernel: Protect PCI access with spinlock instead of mutex
This commit is contained in:
parent
200589ba27
commit
64254b5df8
2 changed files with 11 additions and 12 deletions
|
@ -110,7 +110,7 @@ UNMAP_AFTER_INIT bool Access::initialize_for_one_pci_domain()
|
|||
|
||||
void Access::add_host_controller_and_enumerate_attached_devices(NonnullOwnPtr<HostController> controller, Function<void(DeviceIdentifier const&)> callback)
|
||||
{
|
||||
MutexLocker locker(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
SpinlockLocker scan_locker(m_scan_lock);
|
||||
auto domain_number = controller->domain_number();
|
||||
|
||||
|
@ -137,7 +137,7 @@ UNMAP_AFTER_INIT Access::Access()
|
|||
|
||||
UNMAP_AFTER_INIT void Access::rescan_hardware()
|
||||
{
|
||||
MutexLocker locker(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
SpinlockLocker scan_locker(m_scan_lock);
|
||||
VERIFY(m_device_identifiers.is_empty());
|
||||
for (auto it = m_host_controllers.begin(); it != m_host_controllers.end(); ++it) {
|
||||
|
@ -149,7 +149,7 @@ UNMAP_AFTER_INIT void Access::rescan_hardware()
|
|||
|
||||
void Access::fast_enumerate(Function<void(DeviceIdentifier const&)>& callback) const
|
||||
{
|
||||
MutexLocker locker(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(!m_device_identifiers.is_empty());
|
||||
for (auto const& device_identifier : m_device_identifiers) {
|
||||
callback(device_identifier);
|
||||
|
@ -171,21 +171,21 @@ DeviceIdentifier Access::get_device_identifier(Address address) const
|
|||
|
||||
void Access::write8_field(Address address, u32 field, u8 value)
|
||||
{
|
||||
MutexLocker lock(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(m_host_controllers.contains(address.domain()));
|
||||
auto& controller = *m_host_controllers.get(address.domain()).value();
|
||||
controller.write8_field(address.bus(), address.device(), address.function(), field, value);
|
||||
}
|
||||
void Access::write16_field(Address address, u32 field, u16 value)
|
||||
{
|
||||
MutexLocker lock(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(m_host_controllers.contains(address.domain()));
|
||||
auto& controller = *m_host_controllers.get(address.domain()).value();
|
||||
controller.write16_field(address.bus(), address.device(), address.function(), field, value);
|
||||
}
|
||||
void Access::write32_field(Address address, u32 field, u32 value)
|
||||
{
|
||||
MutexLocker lock(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(m_host_controllers.contains(address.domain()));
|
||||
auto& controller = *m_host_controllers.get(address.domain()).value();
|
||||
controller.write32_field(address.bus(), address.device(), address.function(), field, value);
|
||||
|
@ -202,21 +202,21 @@ u16 Access::read16_field(Address address, RegisterOffset field)
|
|||
|
||||
u8 Access::read8_field(Address address, u32 field)
|
||||
{
|
||||
MutexLocker lock(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(m_host_controllers.contains(address.domain()));
|
||||
auto& controller = *m_host_controllers.get(address.domain()).value();
|
||||
return controller.read8_field(address.bus(), address.device(), address.function(), field);
|
||||
}
|
||||
u16 Access::read16_field(Address address, u32 field)
|
||||
{
|
||||
MutexLocker lock(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(m_host_controllers.contains(address.domain()));
|
||||
auto& controller = *m_host_controllers.get(address.domain()).value();
|
||||
return controller.read16_field(address.bus(), address.device(), address.function(), field);
|
||||
}
|
||||
u32 Access::read32_field(Address address, u32 field)
|
||||
{
|
||||
MutexLocker lock(m_access_lock);
|
||||
SpinlockLocker locker(m_access_lock);
|
||||
VERIFY(m_host_controllers.contains(address.domain()));
|
||||
auto& controller = *m_host_controllers.get(address.domain()).value();
|
||||
return controller.read32_field(address.bus(), address.device(), address.function(), field);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue