diff -r 5a6edc799552 -r 614c211270b3 src/mem/packet.hh --- a/src/mem/packet.hh Tue Jan 11 08:18:21 2011 -0800 +++ b/src/mem/packet.hh Tue Jan 11 09:29:48 2011 -0800 @@ -681,9 +681,9 @@ */ template T* - getPtr() + getPtr(bool null_ok = false) { - assert(flags.isSet(STATIC_DATA|DYNAMIC_DATA)); + assert(null_ok || flags.isSet(STATIC_DATA|DYNAMIC_DATA)); return (T*)data; } @@ -768,7 +768,6 @@ data = new uint8_t[getSize()]; } - /** * Check a functional request against a memory value represented * by a base/size pair and an associated data array. If the diff -r 5a6edc799552 -r 614c211270b3 src/mem/ruby/system/DMASequencer.cc --- a/src/mem/ruby/system/DMASequencer.cc Tue Jan 11 08:18:21 2011 -0800 +++ b/src/mem/ruby/system/DMASequencer.cc Tue Jan 11 09:29:48 2011 -0800 @@ -97,8 +97,10 @@ msg->getLen() = (offset + len) <= RubySystem::getBlockSizeBytes() ? len : RubySystem::getBlockSizeBytes() - offset; - if (write) { - msg->getDataBlk().setData(data, offset, msg->getLen()); + if (write && (data != NULL)) { + if (active_request.data != NULL) { + msg->getDataBlk().setData(data, offset, msg->getLen()); + } } assert(m_mandatory_q_ptr != NULL); @@ -160,8 +162,10 @@ if (active_request.bytes_completed == 0) offset = active_request.start_paddr & m_data_block_mask; assert(active_request.write == false); - memcpy(&active_request.data[active_request.bytes_completed], - dblk.getData(offset, len), len); + if (active_request.data != NULL) { + memcpy(&active_request.data[active_request.bytes_completed], + dblk.getData(offset, len), len); + } issueNext(); } diff -r 5a6edc799552 -r 614c211270b3 src/mem/ruby/system/RubyPort.cc --- a/src/mem/ruby/system/RubyPort.cc Tue Jan 11 08:18:21 2011 -0800 +++ b/src/mem/ruby/system/RubyPort.cc Tue Jan 11 09:29:48 2011 -0800 @@ -245,7 +245,7 @@ } } - RubyRequest ruby_request(pkt->getAddr(), pkt->getPtr(), + RubyRequest ruby_request(pkt->getAddr(), pkt->getPtr(true), pkt->getSize(), pc, type, RubyAccessMode_Supervisor, pkt);