mem: Fixing memory size type issue in port proxy.

This patch changes the data type used for image size from int
to uint64_t. Current version allows initializing AbstractMemory
types with a maximum binary size of 2GiB. This will be limiting
in many studies.

Change-Id: Iea3bbd525d4a67aa7cf606f6311aef66c9b4a52c
This commit is contained in:
Mahyar Samani
2023-08-15 12:37:11 -07:00
parent 41dcd3c5d5
commit d869018226
4 changed files with 18 additions and 18 deletions

View File

@@ -56,7 +56,7 @@ PortProxy::PortProxy(const RequestPort &port, unsigned int cache_line_size) :
void
PortProxy::readBlobPhys(Addr addr, Request::Flags flags,
void *p, int size) const
void *p, uint64_t size) const
{
for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
gen.next()) {
@@ -73,7 +73,7 @@ PortProxy::readBlobPhys(Addr addr, Request::Flags flags,
void
PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
const void *p, int size) const
const void *p, uint64_t size) const
{
for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
gen.next()) {
@@ -90,7 +90,7 @@ PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
void
PortProxy::memsetBlobPhys(Addr addr, Request::Flags flags,
uint8_t v, int size) const
uint8_t v, uint64_t size) const
{
// quick and dirty...
uint8_t *buf = new uint8_t[size];

View File

@@ -120,19 +120,19 @@ class PortProxy : FunctionalRequestProtocol
* Read size bytes memory at physical address and store in p.
*/
void readBlobPhys(Addr addr, Request::Flags flags,
void *p, int size) const;
void *p, uint64_t size) const;
/**
* Write size bytes from p to physical address.
*/
void writeBlobPhys(Addr addr, Request::Flags flags,
const void *p, int size) const;
const void *p, uint64_t size) const;
/**
* Fill size bytes starting at physical addr with byte value val.
*/
void memsetBlobPhys(Addr addr, Request::Flags flags,
uint8_t v, int size) const;
uint8_t v, uint64_t size) const;
@@ -143,7 +143,7 @@ class PortProxy : FunctionalRequestProtocol
* Returns true on success and false on failure.
*/
virtual bool
tryReadBlob(Addr addr, void *p, int size) const
tryReadBlob(Addr addr, void *p, uint64_t size) const
{
readBlobPhys(addr, 0, p, size);
return true;
@@ -154,7 +154,7 @@ class PortProxy : FunctionalRequestProtocol
* Returns true on success and false on failure.
*/
virtual bool
tryWriteBlob(Addr addr, const void *p, int size) const
tryWriteBlob(Addr addr, const void *p, uint64_t size) const
{
writeBlobPhys(addr, 0, p, size);
return true;
@@ -165,7 +165,7 @@ class PortProxy : FunctionalRequestProtocol
* Returns true on success and false on failure.
*/
virtual bool
tryMemsetBlob(Addr addr, uint8_t val, int size) const
tryMemsetBlob(Addr addr, uint8_t val, uint64_t size) const
{
memsetBlobPhys(addr, 0, val, size);
return true;
@@ -179,7 +179,7 @@ class PortProxy : FunctionalRequestProtocol
* Same as tryReadBlob, but insists on success.
*/
void
readBlob(Addr addr, void *p, int size) const
readBlob(Addr addr, void *p, uint64_t size) const
{
if (!tryReadBlob(addr, p, size))
fatal("readBlob(%#x, ...) failed", addr);
@@ -189,7 +189,7 @@ class PortProxy : FunctionalRequestProtocol
* Same as tryWriteBlob, but insists on success.
*/
void
writeBlob(Addr addr, const void *p, int size) const
writeBlob(Addr addr, const void *p, uint64_t size) const
{
if (!tryWriteBlob(addr, p, size))
fatal("writeBlob(%#x, ...) failed", addr);
@@ -199,7 +199,7 @@ class PortProxy : FunctionalRequestProtocol
* Same as tryMemsetBlob, but insists on success.
*/
void
memsetBlob(Addr addr, uint8_t v, int size) const
memsetBlob(Addr addr, uint8_t v, uint64_t size) const
{
if (!tryMemsetBlob(addr, v, size))
fatal("memsetBlob(%#x, ...) failed", addr);

View File

@@ -86,7 +86,7 @@ TranslatingPortProxy::tryOnBlob(BaseMMU::Mode mode, TranslationGenPtr gen,
}
bool
TranslatingPortProxy::tryReadBlob(Addr addr, void *p, int size) const
TranslatingPortProxy::tryReadBlob(Addr addr, void *p, uint64_t size) const
{
constexpr auto mode = BaseMMU::Read;
return tryOnBlob(mode, _tc->getMMUPtr()->translateFunctional(
@@ -99,7 +99,7 @@ TranslatingPortProxy::tryReadBlob(Addr addr, void *p, int size) const
bool
TranslatingPortProxy::tryWriteBlob(
Addr addr, const void *p, int size) const
Addr addr, const void *p, uint64_t size) const
{
constexpr auto mode = BaseMMU::Write;
return tryOnBlob(mode, _tc->getMMUPtr()->translateFunctional(
@@ -111,7 +111,7 @@ TranslatingPortProxy::tryWriteBlob(
}
bool
TranslatingPortProxy::tryMemsetBlob(Addr addr, uint8_t v, int size) const
TranslatingPortProxy::tryMemsetBlob(Addr addr, uint8_t v, uint64_t size) const
{
constexpr auto mode = BaseMMU::Write;
return tryOnBlob(mode, _tc->getMMUPtr()->translateFunctional(

View File

@@ -77,16 +77,16 @@ class TranslatingPortProxy : public PortProxy
/** Version of tryReadblob that translates virt->phys and deals
* with page boundries. */
bool tryReadBlob(Addr addr, void *p, int size) const override;
bool tryReadBlob(Addr addr, void *p, uint64_t size) const override;
/** Version of tryWriteBlob that translates virt->phys and deals
* with page boundries. */
bool tryWriteBlob(Addr addr, const void *p, int size) const override;
bool tryWriteBlob(Addr addr, const void *p, uint64_t size) const override;
/**
* Fill size bytes starting at addr with byte value val.
*/
bool tryMemsetBlob(Addr address, uint8_t v, int size) const override;
bool tryMemsetBlob(Addr address, uint8_t v, uint64_t size) const override;
};
} // namespace gem5