diff --git a/src/dev/virtio/VirtIORng.py b/src/dev/virtio/VirtIORng.py index 54848ee7f1..13df059fa0 100644 --- a/src/dev/virtio/VirtIORng.py +++ b/src/dev/virtio/VirtIORng.py @@ -46,5 +46,3 @@ class VirtIORng(VirtIODeviceBase): cxx_class = 'gem5::VirtIORng' qSize = Param.Unsigned(16, "Request queue size") - - entropy_source = Param.String("/dev/random", "The source of entropy") diff --git a/src/dev/virtio/rng.cc b/src/dev/virtio/rng.cc index 50a747ce98..c26568eb94 100644 --- a/src/dev/virtio/rng.cc +++ b/src/dev/virtio/rng.cc @@ -38,9 +38,7 @@ #include "dev/virtio/rng.hh" -#include -#include - +#include "base/random.hh" #include "debug/VIORng.hh" #include "params/VirtIORng.hh" #include "sim/system.hh" @@ -50,8 +48,7 @@ namespace gem5 VirtIORng::VirtIORng(const Params ¶ms) : VirtIODeviceBase(params, ID_RNG, 0, 0), - qReq(params.system->physProxy, byteOrder, params.qSize, - params.entropy_source, *this) + qReq(params.system->physProxy, byteOrder, params.qSize, *this) { registerQueue(qReq); } @@ -60,16 +57,10 @@ VirtIORng::~VirtIORng() { } -VirtIORng::RngQueue::RngQueue(PortProxy &proxy, ByteOrder bo, - uint16_t size, const std::string &rng_file_path, +VirtIORng::RngQueue::RngQueue(PortProxy &proxy, ByteOrder bo, uint16_t size, VirtIORng &_parent) - : VirtQueue(proxy, bo, size), parent(_parent), dist(0,255) + : VirtQueue(proxy, bo, size), parent(_parent) { - rng_fd = open(rng_file_path.c_str(), O_RDONLY); - if (rng_fd < 0) { - DPRINTF(VIORng, "error when open entropy source: %s\n", - rng_file_path.c_str()); - } } void @@ -89,16 +80,7 @@ VirtIORng::RngQueue::trySend() DPRINTF(VIORng, "Got descriptor (len: %i)\n", d->size()); size_t len = 0; while (len < d->size()) { - uint8_t byte = 0; - bool rng_read_success = false; - if (rng_fd >= 0) { - ssize_t result = read(rng_fd, &byte, sizeof(uint8_t)); - rng_read_success = (result > 0); - } - if (!rng_read_success) { - // fallback to C++ std rng generator - byte = dist(rd_device); - } + uint8_t byte = gem5::random_mt.random(); d->chainWrite(len, &byte, sizeof(uint8_t)); ++len; } diff --git a/src/dev/virtio/rng.hh b/src/dev/virtio/rng.hh index 50a3723359..7be235421a 100644 --- a/src/dev/virtio/rng.hh +++ b/src/dev/virtio/rng.hh @@ -39,8 +39,6 @@ #ifndef __DEV_VIRTIO_RNG_HH__ #define __DEV_VIRTIO_RNG_HH__ -#include - #include "base/compiler.hh" #include "dev/virtio/base.hh" @@ -76,9 +74,8 @@ class VirtIORng : public VirtIODeviceBase : public VirtQueue { public: - RngQueue(PortProxy &proxy, ByteOrder bo, - uint16_t size, const std::string &rng_file_path, - VirtIORng &_parent); + RngQueue(PortProxy &proxy, ByteOrder bo, uint16_t size, + VirtIORng &_parent); virtual ~RngQueue() {} void onNotify() { trySend(); } @@ -90,12 +87,6 @@ class VirtIORng : public VirtIODeviceBase protected: VirtIORng &parent; - private: - // system's special file for generating random number - int rng_fd; - // fallback random number generator - std::random_device rd_device; - std::uniform_int_distribution dist; }; /** Receive queue for port 0 */ RngQueue qReq;