lsq_unit_impl.hh (9358:aa761458ddcb) | lsq_unit_impl.hh (9383:55fa95053ee8) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2010-2011 ARM Limited | 2 * Copyright (c) 2010-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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 419 unchanged lines hidden (view full) --- 430 Addr bs = dcachePort->peerBlockSize(); 431 432 // Make sure we actually got a size 433 assert(bs != 0); 434 435 cacheBlockMask = ~(bs - 1); 436 } 437 | 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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 419 unchanged lines hidden (view full) --- 430 Addr bs = dcachePort->peerBlockSize(); 431 432 // Make sure we actually got a size 433 assert(bs != 0); 434 435 cacheBlockMask = ~(bs - 1); 436 } 437 |
438 // Unlock the cpu-local monitor when the CPU sees a snoop to a locked 439 // address. The CPU can speculatively execute a LL operation after a pending 440 // SC operation in the pipeline and that can make the cache monitor the CPU 441 // is connected to valid while it really shouldn't be. 442 for (int x = 0; x < cpu->numActiveThreads(); x++) { 443 ThreadContext *tc = cpu->getContext(x); 444 bool no_squash = cpu->thread[x]->noSquashFromTC; 445 cpu->thread[x]->noSquashFromTC = true; 446 TheISA::handleLockedSnoop(tc, pkt, cacheBlockMask); 447 cpu->thread[x]->noSquashFromTC = no_squash; 448 } 449 |
|
438 // If this is the only load in the LSQ we don't care 439 if (load_idx == loadTail) 440 return; 441 incrLdIdx(load_idx); 442 443 DPRINTF(LSQUnit, "Got snoop for address %#x\n", pkt->getAddr()); 444 Addr invalidate_addr = pkt->getAddr() & cacheBlockMask; 445 while (load_idx != loadTail) { --- 832 unchanged lines hidden --- | 450 // If this is the only load in the LSQ we don't care 451 if (load_idx == loadTail) 452 return; 453 incrLdIdx(load_idx); 454 455 DPRINTF(LSQUnit, "Got snoop for address %#x\n", pkt->getAddr()); 456 Addr invalidate_addr = pkt->getAddr() & cacheBlockMask; 457 while (load_idx != loadTail) { --- 832 unchanged lines hidden --- |