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

Reply via email to