Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/32649 )
Change subject: dev: Replace Callback in the virtio device with a lambda.
......................................................................
dev: Replace Callback in the virtio device with a lambda.
Issue-on: https://gem5.atlassian.net/browse/GEM5-698
Change-Id: Ia628ceb0080b11b81c7eee82e7c8c0049b2cd62f
---
M src/dev/arm/vio_mmio.cc
M src/dev/arm/vio_mmio.hh
M src/dev/virtio/base.cc
M src/dev/virtio/base.hh
M src/dev/virtio/pci.cc
M src/dev/virtio/pci.hh
6 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/src/dev/arm/vio_mmio.cc b/src/dev/arm/vio_mmio.cc
index e0117af..2dfbc61 100644
--- a/src/dev/arm/vio_mmio.cc
+++ b/src/dev/arm/vio_mmio.cc
@@ -45,13 +45,12 @@
MmioVirtIO::MmioVirtIO(const MmioVirtIOParams *params)
: BasicPioDevice(params, params->pio_size),
hostFeaturesSelect(0), guestFeaturesSelect(0), pageSize(0),
- interruptStatus(0),
- callbackKick(this), vio(*params->vio),
+ interruptStatus(0), vio(*params->vio),
interrupt(params->interrupt->get())
{
fatal_if(!interrupt, "No MMIO VirtIO interrupt specified\n");
- vio.registerKickCallback(&callbackKick);
+ vio.registerKickCallback([this]() { kick(); });
}
MmioVirtIO::~MmioVirtIO()
diff --git a/src/dev/arm/vio_mmio.hh b/src/dev/arm/vio_mmio.hh
index fddbb83..d42d92a 100644
--- a/src/dev/arm/vio_mmio.hh
+++ b/src/dev/arm/vio_mmio.hh
@@ -103,8 +103,6 @@
uint32_t pageSize;
uint32_t interruptStatus;
- MakeCallback<MmioVirtIO, &MmioVirtIO::kick> callbackKick;
-
protected: // Params
VirtIODeviceBase &vio;
ArmInterruptPin *const interrupt;
diff --git a/src/dev/virtio/base.cc b/src/dev/virtio/base.cc
index fef054c..6b4fe0a 100644
--- a/src/dev/virtio/base.cc
+++ b/src/dev/virtio/base.cc
@@ -328,8 +328,7 @@
guestFeatures(0),
byteOrder(params->system->getGuestByteOrder()),
deviceId(id), configSize(config_size), deviceFeatures(features),
- _deviceStatus(0), _queueSelect(0),
- transKick(NULL)
+ _deviceStatus(0), _queueSelect(0)
{
}
diff --git a/src/dev/virtio/base.hh b/src/dev/virtio/base.hh
index 98c48a5..7c4c3f8 100644
--- a/src/dev/virtio/base.hh
+++ b/src/dev/virtio/base.hh
@@ -38,9 +38,10 @@
#ifndef __DEV_VIRTIO_BASE_HH__
#define __DEV_VIRTIO_BASE_HH__
+#include <functional>
+
#include "arch/isa_traits.hh"
#include "base/bitunion.hh"
-#include "base/callback.hh"
#include "dev/virtio/virtio_ring.h"
#include "mem/port_proxy.hh"
#include "sim/sim_object.hh"
@@ -605,9 +606,11 @@
* typically through an interrupt. Device models call this method
* to tell the transport interface to notify the guest.
*/
- void kick() {
+ void
+ kick()
+ {
assert(transKick);
- transKick->process();
+ transKick();
};
/**
@@ -725,11 +728,13 @@
* Register a callback to kick the guest through the transport
* interface.
*
- * @param c Callback into transport interface.
+ * @param callback Callback into transport interface.
*/
- void registerKickCallback(Callback *c) {
+ void
+ registerKickCallback(const std::function<void()> &callback)
+ {
assert(!transKick);
- transKick = c;
+ transKick = callback;
}
@@ -867,7 +872,7 @@
std::vector<VirtQueue *> _queues;
/** Callbacks to kick the guest through the transport layer */
- Callback *transKick;
+ std::function<void()> transKick;
};
class VirtIODummyDevice : public VirtIODeviceBase
diff --git a/src/dev/virtio/pci.cc b/src/dev/virtio/pci.cc
index 6931581..115136e 100644
--- a/src/dev/virtio/pci.cc
+++ b/src/dev/virtio/pci.cc
@@ -44,7 +44,7 @@
PciVirtIO::PciVirtIO(const Params *params)
: PciDevice(params), queueNotify(0), interruptDeliveryPending(false),
- vio(*params->vio), callbackKick(this)
+ vio(*params->vio)
{
// Override the subsystem ID with the device ID from VirtIO
config.subsystemID = htole(vio.deviceId);
@@ -55,7 +55,7 @@
// used to check accesses later on.
BARSize[0] = alignToPowerOfTwo(BAR0_SIZE_BASE + vio.configSize);
- vio.registerKickCallback(&callbackKick);
+ vio.registerKickCallback([this]() { kick(); });
}
PciVirtIO::~PciVirtIO()
diff --git a/src/dev/virtio/pci.hh b/src/dev/virtio/pci.hh
index 7bb4633..b6c162c 100644
--- a/src/dev/virtio/pci.hh
+++ b/src/dev/virtio/pci.hh
@@ -80,8 +80,6 @@
bool interruptDeliveryPending;
VirtIODeviceBase &vio;
-
- MakeCallback<PciVirtIO, &PciVirtIO::kick> callbackKick;
};
#endif // __DEV_VIRTIO_PCI_HH__
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/32649
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ia628ceb0080b11b81c7eee82e7c8c0049b2cd62f
Gerrit-Change-Number: 32649
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabebl...@google.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s