A method and system for ensuring orderly forward progress in granting
snoop castout requests. Masters may include a tag ("request tag") in
their transfer requests to a bus macro. The request tag indicates the
order of the request issued by the master. If the bus macro determines
that the transfer request is snoopable, then the bus macro broadcasts a
snoop request that includes the request tag. If a snoop controller
determines that the address in the snoop request is a hit to a modified
coherency granule in an associated cache, then the master associated with
that snoop controller transmits a castout request to the bus macro that
includes the request tag associated with the snoop request. The bus macro
uses the request tag to determine whether the castout request is a
response to the oldest in a series of pipelined snoop requests to be
serviced.