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 ---