base.cc (9157:e0bad9d7bbd6) base.cc (9178:6a0ff1770e6e)
1/*
2 * Copyright (c) 2011-2012 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

384 */
385
386 MasterPort *old_itb_port = oldTC->getITBPtr()->getMasterPort();
387 MasterPort *old_dtb_port = oldTC->getDTBPtr()->getMasterPort();
388 MasterPort *new_itb_port = newTC->getITBPtr()->getMasterPort();
389 MasterPort *new_dtb_port = newTC->getDTBPtr()->getMasterPort();
390
391 // Move over any table walker ports if they exist
1/*
2 * Copyright (c) 2011-2012 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

384 */
385
386 MasterPort *old_itb_port = oldTC->getITBPtr()->getMasterPort();
387 MasterPort *old_dtb_port = oldTC->getDTBPtr()->getMasterPort();
388 MasterPort *new_itb_port = newTC->getITBPtr()->getMasterPort();
389 MasterPort *new_dtb_port = newTC->getDTBPtr()->getMasterPort();
390
391 // Move over any table walker ports if they exist
392 if (new_itb_port && !new_itb_port->isConnected()) {
392 if (new_itb_port) {
393 assert(!new_itb_port->isConnected());
393 assert(old_itb_port);
394 assert(old_itb_port);
395 assert(old_itb_port->isConnected());
394 SlavePort &slavePort = old_itb_port->getSlavePort();
396 SlavePort &slavePort = old_itb_port->getSlavePort();
397 old_itb_port->unbind();
395 new_itb_port->bind(slavePort);
398 new_itb_port->bind(slavePort);
396 old_itb_port->unBind();
397 }
399 }
398 if (new_dtb_port && !new_dtb_port->isConnected()) {
400 if (new_dtb_port) {
401 assert(!new_dtb_port->isConnected());
399 assert(old_dtb_port);
402 assert(old_dtb_port);
403 assert(old_dtb_port->isConnected());
400 SlavePort &slavePort = old_dtb_port->getSlavePort();
404 SlavePort &slavePort = old_dtb_port->getSlavePort();
405 old_dtb_port->unbind();
401 new_dtb_port->bind(slavePort);
406 new_dtb_port->bind(slavePort);
402 old_dtb_port->unBind();
403 }
404
405 // Checker whether or not we have to transfer CheckerCPU
406 // objects over in the switch
407 CheckerCPU *oldChecker = oldTC->getCheckerCpuPtr();
408 CheckerCPU *newChecker = newTC->getCheckerCpuPtr();
409 if (oldChecker && newChecker) {
410 MasterPort *old_checker_itb_port =
411 oldChecker->getITBPtr()->getMasterPort();
412 MasterPort *old_checker_dtb_port =
413 oldChecker->getDTBPtr()->getMasterPort();
414 MasterPort *new_checker_itb_port =
415 newChecker->getITBPtr()->getMasterPort();
416 MasterPort *new_checker_dtb_port =
417 newChecker->getDTBPtr()->getMasterPort();
418
419 // Move over any table walker ports if they exist for checker
407 }
408
409 // Checker whether or not we have to transfer CheckerCPU
410 // objects over in the switch
411 CheckerCPU *oldChecker = oldTC->getCheckerCpuPtr();
412 CheckerCPU *newChecker = newTC->getCheckerCpuPtr();
413 if (oldChecker && newChecker) {
414 MasterPort *old_checker_itb_port =
415 oldChecker->getITBPtr()->getMasterPort();
416 MasterPort *old_checker_dtb_port =
417 oldChecker->getDTBPtr()->getMasterPort();
418 MasterPort *new_checker_itb_port =
419 newChecker->getITBPtr()->getMasterPort();
420 MasterPort *new_checker_dtb_port =
421 newChecker->getDTBPtr()->getMasterPort();
422
423 // Move over any table walker ports if they exist for checker
420 if (new_checker_itb_port && !new_checker_itb_port->isConnected()) {
424 if (new_checker_itb_port) {
425 assert(!new_checker_itb_port->isConnected());
421 assert(old_checker_itb_port);
426 assert(old_checker_itb_port);
422 SlavePort &slavePort = old_checker_itb_port->getSlavePort();;
427 assert(old_checker_itb_port->isConnected());
428 SlavePort &slavePort = old_checker_itb_port->getSlavePort();
429 old_checker_itb_port->unbind();
423 new_checker_itb_port->bind(slavePort);
430 new_checker_itb_port->bind(slavePort);
424 old_checker_itb_port->unBind();
425 }
431 }
426 if (new_checker_dtb_port && !new_checker_dtb_port->isConnected()) {
432 if (new_checker_dtb_port) {
433 assert(!new_checker_dtb_port->isConnected());
427 assert(old_checker_dtb_port);
434 assert(old_checker_dtb_port);
428 SlavePort &slavePort = old_checker_dtb_port->getSlavePort();;
435 assert(old_checker_dtb_port->isConnected());
436 SlavePort &slavePort = old_checker_dtb_port->getSlavePort();
437 old_checker_dtb_port->unbind();
429 new_checker_dtb_port->bind(slavePort);
438 new_checker_dtb_port->bind(slavePort);
430 old_checker_dtb_port->unBind();
431 }
432 }
433 }
434
435 interrupts = oldCPU->interrupts;
436 interrupts->setCPU(this);
437 oldCPU->interrupts = NULL;
438
439 if (FullSystem) {
440 for (ThreadID i = 0; i < size; ++i)
441 threadContexts[i]->profileClear();
442
443 if (profileEvent)
444 schedule(profileEvent, curTick());
445 }
446
439 }
440 }
441 }
442
443 interrupts = oldCPU->interrupts;
444 interrupts->setCPU(this);
445 oldCPU->interrupts = NULL;
446
447 if (FullSystem) {
448 for (ThreadID i = 0; i < size; ++i)
449 threadContexts[i]->profileClear();
450
451 if (profileEvent)
452 schedule(profileEvent, curTick());
453 }
454
447 // Connect new CPU to old CPU's memory only if new CPU isn't
448 // connected to anything. Also connect old CPU's memory to new
449 // CPU.
450 if (!getInstPort().isConnected()) {
451 getInstPort().bind(oldCPU->getInstPort().getSlavePort());
452 oldCPU->getInstPort().unBind();
453 }
455 // All CPUs have an instruction and a data port, and the new CPU's
456 // ports are dangling while the old CPU has its ports connected
457 // already. Unbind the old CPU and then bind the ports of the one
458 // we are switching to.
459 assert(!getInstPort().isConnected());
460 assert(oldCPU->getInstPort().isConnected());
461 SlavePort &inst_peer_port = oldCPU->getInstPort().getSlavePort();
462 oldCPU->getInstPort().unbind();
463 getInstPort().bind(inst_peer_port);
454
464
455 if (!getDataPort().isConnected()) {
456 getDataPort().bind(oldCPU->getDataPort().getSlavePort());
457 oldCPU->getDataPort().unBind();
458 }
465 assert(!getDataPort().isConnected());
466 assert(oldCPU->getDataPort().isConnected());
467 SlavePort &data_peer_port = oldCPU->getDataPort().getSlavePort();
468 oldCPU->getDataPort().unbind();
469 getDataPort().bind(data_peer_port);
459}
460
461
462BaseCPU::ProfileEvent::ProfileEvent(BaseCPU *_cpu, Tick _interval)
463 : cpu(_cpu), interval(_interval)
464{ }
465
466void

--- 72 unchanged lines hidden ---
470}
471
472
473BaseCPU::ProfileEvent::ProfileEvent(BaseCPU *_cpu, Tick _interval)
474 : cpu(_cpu), interval(_interval)
475{ }
476
477void

--- 72 unchanged lines hidden ---