Notes:

Request source

Incoming request

Data state

Directory state

Outgoing snoop

Outgoing requests (after snoop)

Possible final data states

Possible final directory states

Upstream cache












ReadShared

ReadNotSharedDirty


I

I

-

ReadShared (if no HNF)

ReadNotSharedDirty (if no HNF and SD state not allowed by configuration)

ReadNoSnp (if HNF)

Rcvd data state (if alloc) or I

I, RSC

I

RSC,RUSC

SnpOnce (if no DCT)

SnpSharedFwd (if DCT)

-

Rcvd data state (if alloc) or I

RSC

UD, SD, UC, SC

I, RSC, RSD,RUSC

-

-

Same as previous

Same as previous

UD,UC,I

RU

SnpShared (if no DCT)

SnpSharedFwd (if DCT)

-

Same as previous or UC/UD (if alloc)

RSC

I

RSD, RUSD

SnpShared (if no DCT)

SnpSharedFwd (if DCT)

-

SC/UD/UC (if alloc) or I

RSC

ReadUnique






I

I

-

ReadUnique (if no HNF)

ReadNoSnp (if HNF)

UC (if alloc) or I

RU

UD, UC

I

-

-

Same as previous

RU

UD, UC

RSC, RSD

SnpUnique (if no DCT)

SnpUniqueFwd (if DCT)

-

Same as previous

RU

UD, UC, I

RUSD, RUSC

SnpUnique (if no DCT)

SnpUniqueFwd (if DCT)

-

Same as previous or UC (if alloc)

RU

SC, SD

I

-

ReadUnique (if no HNF)

UD, UC

RU

SC, SD

RSC, RSD

SnpUnique

ReadUnique (if no HNF)

UD, UC

RU

CleanUnique

I

RUSC, RUSD

SnpUnique

I

RU

UD, UC

RSC, RSD

SnpUnique

Same as previous

RU

I, SC, SD

RSC, RSD

SnpUnique

CleanUnique (if no HNF)

I, UD, UC

RU

Evict

UD, SD, UC, SC

RSC

-

-

Same as previous

I

I

RSC

Evict (if not HNF)

Same as previous

I

WriteBackFull

UD, SD, UC, I

RSD, RUSD, RU

UD ,SD

I, RSC

WriteEvictFull

UD, UC, I

RU

UD, UC

I

ReadOnce

UD, SD, UC, SC

RSD, RUSD, RUSC RU, RSC, I

-

-

Same as previous

Same as previous

I

RSD, RUSD, RUSC, RU, RSC

SnpOnce (if no DCT)

SnpOnceFwd (if DCT)

-

I

Same as previous

I

I

-

ReadOnce (if no HNF)

ReadNoSnp (if HNF)

I

I

WriteUniquePtl

UD, UC

I

-

-

UD

I

UD, UC

RSD, RUSD, RU, RSC

-

SnpCleanInvalid

UD

I

SD, SC, I

RSD, RUSD, RU, RSC, I

WriteUniquePtl

I

I

WriteUniquePtl

( at HNF)

UD, SD, UC, SC

I

-

-

UD

I

UD, SD, UC, SC

RSD, RUSD, RU, RSC

-

SnpCleanInvalid

UD

I

I

RSD, RUSD, RU

WriteNoSnp

SnpCleanInvalid

I

I

I

RSC, I

WriteNoSnpPtl

SnpCleanInvalid

I

I

Internal

LocalEvictionHNF

UD, SD

I, RSC

WriteNoSnp

I

Same as previous

UD, UC, SC, SD

RU, RSD

-

-

I

Same as previous

LocalEviction

SC

I

-

Evict

I

I

UD, SD

I

-

WriteBackFull

I

I

UC

I

-

WriteEvictFull

I

I

UD, UC

RU, RSD

-

-

I

RU, RSD, RUSD

UD,SD

RSC

SnpCleanInvalid

WriteBackFull

I

I

UC

RSC

SnpCleanInvalid

WriteEvictFull

I

I

GlobalEviction

UD, SD

RSC, RU

SnpCleanInvalid

WriteBackFull / WriteNoSnp

I

I

UC

RSC, RU

SnpCleanInvalid

WriteEvictFull (if not HNF)

I

I

SC

RSC

SnpCleanInvalid

Evict (if not HNF)

I

I

Downstream cache

SnpCleanInvalid

UD,SD,UC, SC

I

-

-

I

I

UD,SD,UC, SC, I

RSC, RU, RSD, RUSD

SnpCleanInvalid

-

I

I

SnpUnique SnpUniqueFwd

UD,SD,UC, SC

I

-

-

I

I

UD,SD,UC, SC, I

RSC, RU, RSD, RUSD

SnpUnique

-

I

I

SnpShared SnpSharedFwd

SnpNotSharedDirty

SnpNotSharedDirtyFwd

UD, SD, UC

I, RSC

-

-

SC

Same as previous

UD, SD, UC, SC, I

RU, RSD, RUSD

SnpShared

-

I, SC

RSC

Local CPU/DMA port (i.e. incoming from sequencer through the “mandatoryQueue”)

Load

UD, SD, UC, SC

-

-

-

Same as previous

Same as previous

I

-

-

ReadShared

ReadNotSharedDirty (if SD state not allowed by configuration)

Rcvd data state

Same as previous

Load (alloc_seq = false)

I

-

-

ReadOnce

I

Store

UD, UC

-

-

-

UD

Same as previous

SD, SC, I

-

-

ReadUnique

UD_T

Same as previous

Store (alloc_seq = false)

I

-

-

WriteUniquePtl

I

Same as previous