Sequencer.cc (7560:29d5891a96d6) Sequencer.cc (7565:9fc3475e8175)
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;

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

352 writeCallback(address, GenericMachineType_NULL, data);
353}
354
355void
356Sequencer::writeCallback(const Address& address,
357 GenericMachineType mach,
358 DataBlock& data)
359{
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;

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

352 writeCallback(address, GenericMachineType_NULL, data);
353}
354
355void
356Sequencer::writeCallback(const Address& address,
357 GenericMachineType mach,
358 DataBlock& data)
359{
360 writeCallback(address, mach, data, 0, 0, 0);
361}
362
363void
364Sequencer::writeCallback(const Address& address,
365 GenericMachineType mach,
366 DataBlock& data,
367 Time initialRequestTime,
368 Time forwardRequestTime,
369 Time firstResponseTime)
370{
360 assert(address == line_address(address));
361 assert(m_writeRequestTable.count(line_address(address)));
362
363 RequestTable::iterator i = m_writeRequestTable.find(address);
364 assert(i != m_writeRequestTable.end());
365 SequencerRequest* request = i->second;
366
367 m_writeRequestTable.erase(i);

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

380 bool success = handleLlsc(address, request);
381
382 if (request->ruby_request.type == RubyRequestType_RMW_Read) {
383 m_controller->blockOnQueue(address, m_mandatory_q_ptr);
384 } else if (request->ruby_request.type == RubyRequestType_RMW_Write) {
385 m_controller->unblock(address);
386 }
387
371 assert(address == line_address(address));
372 assert(m_writeRequestTable.count(line_address(address)));
373
374 RequestTable::iterator i = m_writeRequestTable.find(address);
375 assert(i != m_writeRequestTable.end());
376 SequencerRequest* request = i->second;
377
378 m_writeRequestTable.erase(i);

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

391 bool success = handleLlsc(address, request);
392
393 if (request->ruby_request.type == RubyRequestType_RMW_Read) {
394 m_controller->blockOnQueue(address, m_mandatory_q_ptr);
395 } else if (request->ruby_request.type == RubyRequestType_RMW_Write) {
396 m_controller->unblock(address);
397 }
398
388 hitCallback(request, mach, data, success);
399 hitCallback(request, mach, data, success,
400 initialRequestTime, forwardRequestTime, firstResponseTime);
389}
390
391void
392Sequencer::readCallback(const Address& address, DataBlock& data)
393{
394 readCallback(address, GenericMachineType_NULL, data);
395}
396
397void
398Sequencer::readCallback(const Address& address,
399 GenericMachineType mach,
400 DataBlock& data)
401{
401}
402
403void
404Sequencer::readCallback(const Address& address, DataBlock& data)
405{
406 readCallback(address, GenericMachineType_NULL, data);
407}
408
409void
410Sequencer::readCallback(const Address& address,
411 GenericMachineType mach,
412 DataBlock& data)
413{
414 readCallback(address, mach, data, 0, 0, 0);
415}
416
417void
418Sequencer::readCallback(const Address& address,
419 GenericMachineType mach,
420 DataBlock& data,
421 Time initialRequestTime,
422 Time forwardRequestTime,
423 Time firstResponseTime)
424{
402 assert(address == line_address(address));
403 assert(m_readRequestTable.count(line_address(address)));
404
405 RequestTable::iterator i = m_readRequestTable.find(address);
406 assert(i != m_readRequestTable.end());
407 SequencerRequest* request = i->second;
408
409 m_readRequestTable.erase(i);
410 markRemoved();
411
412 assert((request->ruby_request.type == RubyRequestType_LD) ||
413 (request->ruby_request.type == RubyRequestType_RMW_Read) ||
414 (request->ruby_request.type == RubyRequestType_IFETCH));
415
425 assert(address == line_address(address));
426 assert(m_readRequestTable.count(line_address(address)));
427
428 RequestTable::iterator i = m_readRequestTable.find(address);
429 assert(i != m_readRequestTable.end());
430 SequencerRequest* request = i->second;
431
432 m_readRequestTable.erase(i);
433 markRemoved();
434
435 assert((request->ruby_request.type == RubyRequestType_LD) ||
436 (request->ruby_request.type == RubyRequestType_RMW_Read) ||
437 (request->ruby_request.type == RubyRequestType_IFETCH));
438
416 hitCallback(request, mach, data, true);
439 hitCallback(request, mach, data, true,
440 initialRequestTime, forwardRequestTime, firstResponseTime);
417}
418
419void
420Sequencer::hitCallback(SequencerRequest* srequest,
421 GenericMachineType mach,
422 DataBlock& data,
441}
442
443void
444Sequencer::hitCallback(SequencerRequest* srequest,
445 GenericMachineType mach,
446 DataBlock& data,
423 bool success)
447 bool success,
448 Time initialRequestTime,
449 Time forwardRequestTime,
450 Time firstResponseTime)
424{
425 const RubyRequest & ruby_request = srequest->ruby_request;
426 Address request_address(ruby_request.paddr);
427 Address request_line_address(ruby_request.paddr);
428 request_line_address.makeLineAddress();
429 RubyRequestType type = ruby_request.type;
430 Time issued_time = srequest->issue_time;
431

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

440
441 assert(g_eventQueue_ptr->getTime() >= issued_time);
442 Time miss_latency = g_eventQueue_ptr->getTime() - issued_time;
443
444 // Profile the miss latency for all non-zero demand misses
445 if (miss_latency != 0) {
446 g_system_ptr->getProfiler()->missLatency(miss_latency, type, mach);
447
451{
452 const RubyRequest & ruby_request = srequest->ruby_request;
453 Address request_address(ruby_request.paddr);
454 Address request_line_address(ruby_request.paddr);
455 request_line_address.makeLineAddress();
456 RubyRequestType type = ruby_request.type;
457 Time issued_time = srequest->issue_time;
458

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

467
468 assert(g_eventQueue_ptr->getTime() >= issued_time);
469 Time miss_latency = g_eventQueue_ptr->getTime() - issued_time;
470
471 // Profile the miss latency for all non-zero demand misses
472 if (miss_latency != 0) {
473 g_system_ptr->getProfiler()->missLatency(miss_latency, type, mach);
474
475 if (mach == GenericMachineType_L1Cache_wCC) {
476 g_system_ptr->getProfiler()->missLatencyWcc(issued_time,
477 initialRequestTime,
478 forwardRequestTime,
479 firstResponseTime,
480 g_eventQueue_ptr->getTime());
481 }
482
483 if (mach == GenericMachineType_Directory) {
484 g_system_ptr->getProfiler()->missLatencyDir(issued_time,
485 initialRequestTime,
486 forwardRequestTime,
487 firstResponseTime,
488 g_eventQueue_ptr->getTime());
489 }
490
448 if (Debug::getProtocolTrace()) {
449 if (success) {
450 g_system_ptr->getProfiler()->
451 profileTransition("Seq", m_version,
452 Address(ruby_request.paddr), "", "Done", "",
453 csprintf("%d cycles", miss_latency));
454 } else {
455 g_system_ptr->getProfiler()->

--- 240 unchanged lines hidden ---
491 if (Debug::getProtocolTrace()) {
492 if (success) {
493 g_system_ptr->getProfiler()->
494 profileTransition("Seq", m_version,
495 Address(ruby_request.paddr), "", "Done", "",
496 csprintf("%d cycles", miss_latency));
497 } else {
498 g_system_ptr->getProfiler()->

--- 240 unchanged lines hidden ---