From 6994354b8fdb276660874fe04e3d3bbc9cdd81dc Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 31 Mar 2022 11:20:59 +0200 Subject: [PATCH] platform(x86): avoid multiple assignment messages The new ported linux drivers multiple times trigger this assignment, whereby exactly one time is sufficient. Issue #4416 Issue #4450 Issue #4455 --- repos/os/src/drivers/platform/legacy/x86/pci_device.cc | 4 +++- .../os/src/drivers/platform/legacy/x86/pci_device_component.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_device.cc b/repos/os/src/drivers/platform/legacy/x86/pci_device.cc index 6587f6ee24..ea4acb6a6a 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_device.cc +++ b/repos/os/src/drivers/platform/legacy/x86/pci_device.cc @@ -138,7 +138,8 @@ void Platform::Device_component::config_write(unsigned char address, } /* assign device to device_pd */ - if (address == Device_config::PCI_CMD_REG && + if (!_device_assigned && + address == Device_config::PCI_CMD_REG && (value & Device_config::PCI_CMD_DMA)) { try { _session.assign_device(this); } @@ -147,6 +148,7 @@ void Platform::Device_component::config_write(unsigned char address, catch (...) { error("assignment to device failed"); } + _device_assigned = true; _device_used = true; } diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h b/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h index 2be3e506f2..b8e68de77e 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h +++ b/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h @@ -60,6 +60,7 @@ class Platform::Device_component : public Rpc_object, Irq_session_component *_irq_session = nullptr; unsigned short _irq_line; bool _device_used { false }; + bool _device_assigned { false }; Allocator &_global_heap; class Io_mem : public Io_mem_connection,