summaryrefslogtreecommitdiff
path: root/src/mem/packet.cc
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2010-06-16 15:25:57 -0700
committerSteve Reinhardt <steve.reinhardt@amd.com>2010-06-16 15:25:57 -0700
commitf24ae2ec2a43a5197934668b6f9638ed118994d8 (patch)
treef51c948e2eedae7d6772228ddb2653aa71622674 /src/mem/packet.cc
parent57f2b7db11c9a16f3104588c137e6246bd124041 (diff)
downloadgem5-f24ae2ec2a43a5197934668b6f9638ed118994d8.tar.xz
cache: fail store conditionals when upgrade loses race
Requires new "SCUpgradeReq" message that marks upgrades for store conditionals, so downstream caches can fail these when they run into invalidations. See http://www.m5sim.org/flyspray/task/197
Diffstat (limited to 'src/mem/packet.cc')
-rw-r--r--src/mem/packet.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/mem/packet.cc b/src/mem/packet.cc
index 2f84e4414..c54a52438 100644
--- a/src/mem/packet.cc
+++ b/src/mem/packet.cc
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2010 Advancec Micro Devices, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -92,11 +93,22 @@ MemCmd::commandInfo[] =
{ SET3(IsWrite, NeedsExclusive, IsResponse),
InvalidCmd, "WriteInvalidateResp" },
/* UpgradeReq */
- { SET4(IsInvalidate, NeedsExclusive, IsRequest, NeedsResponse),
+ { SET5(IsInvalidate, NeedsExclusive, IsUpgrade, IsRequest, NeedsResponse),
UpgradeResp, "UpgradeReq" },
+ /* SCUpgradeReq: response could be UpgradeResp or UpgradeFailResp */
+ { SET6(IsInvalidate, NeedsExclusive, IsUpgrade, IsLlsc,
+ IsRequest, NeedsResponse),
+ UpgradeResp, "SCUpgradeReq" },
/* UpgradeResp */
- { SET2(NeedsExclusive, IsResponse),
+ { SET3(NeedsExclusive, IsUpgrade, IsResponse),
InvalidCmd, "UpgradeResp" },
+ /* SCUpgradeFailReq: generates UpgradeFailResp ASAP */
+ { SET5(IsInvalidate, NeedsExclusive, IsLlsc,
+ IsRequest, NeedsResponse),
+ UpgradeFailResp, "SCUpgradeFailReq" },
+ /* UpgradeFailResp */
+ { SET2(NeedsExclusive, IsResponse),
+ InvalidCmd, "UpgradeFailResp" },
/* ReadExReq */
{ SET5(IsRead, NeedsExclusive, IsInvalidate, IsRequest, NeedsResponse),
ReadExResp, "ReadExReq" },