Deleted Added
sdiff udiff text old ( 7537:8178df9c17c4 ) new ( 7546:84e8f914b3b8 )
full compact
1/*
2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 291 unchanged lines hidden (view full) ---

300 }
301
302 markRemoved();
303}
304
305void
306Sequencer::writeCallback(const Address& address, DataBlock& data)
307{
308 assert(address == line_address(address));
309 assert(m_writeRequestTable.count(line_address(address)));
310
311 RequestTable::iterator i = m_writeRequestTable.find(address);
312 assert(i != m_writeRequestTable.end());
313 SequencerRequest* request = i->second;
314
315 m_writeRequestTable.erase(i);

--- 8 unchanged lines hidden (view full) ---

324 if (request->ruby_request.type == RubyRequestType_Locked_Read) {
325 m_dataCache_ptr->setLocked(address, m_version);
326 } else if (request->ruby_request.type == RubyRequestType_RMW_Read) {
327 m_controller->blockOnQueue(address, m_mandatory_q_ptr);
328 } else if (request->ruby_request.type == RubyRequestType_RMW_Write) {
329 m_controller->unblock(address);
330 }
331
332 hitCallback(request, data);
333}
334
335void
336Sequencer::readCallback(const Address& address, DataBlock& data)
337{
338 assert(address == line_address(address));
339 assert(m_readRequestTable.count(line_address(address)));
340
341 RequestTable::iterator i = m_readRequestTable.find(address);
342 assert(i != m_readRequestTable.end());
343 SequencerRequest* request = i->second;
344
345 m_readRequestTable.erase(i);
346 markRemoved();
347
348 assert((request->ruby_request.type == RubyRequestType_LD) ||
349 (request->ruby_request.type == RubyRequestType_RMW_Read) ||
350 (request->ruby_request.type == RubyRequestType_IFETCH));
351
352 hitCallback(request, data);
353}
354
355void
356Sequencer::hitCallback(SequencerRequest* srequest, DataBlock& data)
357{
358 const RubyRequest & ruby_request = srequest->ruby_request;
359 Address request_address(ruby_request.paddr);
360 Address request_line_address(ruby_request.paddr);
361 request_line_address.makeLineAddress();
362 RubyRequestType type = ruby_request.type;
363 Time issued_time = srequest->issue_time;
364

--- 6 unchanged lines hidden (view full) ---

371 m_dataCache_ptr->setMRU(request_line_address);
372 }
373
374 assert(g_eventQueue_ptr->getTime() >= issued_time);
375 Time miss_latency = g_eventQueue_ptr->getTime() - issued_time;
376
377 // Profile the miss latency for all non-zero demand misses
378 if (miss_latency != 0) {
379 g_system_ptr->getProfiler()->missLatency(miss_latency, type);
380
381 if (Debug::getProtocolTrace()) {
382 g_system_ptr->getProfiler()->
383 profileTransition("Seq", m_version,
384 Address(ruby_request.paddr), "", "Done", "",
385 csprintf("%d cycles", miss_latency));
386 }
387 }

--- 254 unchanged lines hidden ---