A bus protocol is disclosed for a symmetric multiprocessing computer system consisting
of a plurality of nodes, each of which contains a multitude of processors, I/O
devices, main memory and a system controller comprising an integrated switch with
a top level cache. The nodes are interconnected by a dual concentric ring topology.
The bus protocol is used to exchange snoop requests and addresses, data, coherency
information and operational status between nodes in a manner that allows partial
coherency results to be passed in parallel with a snoop request and address as
an operation is forwarded along each ring. Each node combines it's own coherency
results with the partial coherency results it received prior to forwarding the
snoop request, address and updated partial coherency results to the next node on
the ring. The protocol allows each node in the system to see the final coherency
results without requiring the requesting node to broadcast these results to all
the other nodes in the system. The bus protocol also allows data to be returned
on one of the two rings, with the ring selection determined by the relative placement
of the source and destination nodes on each ring, in order to control latency and
data bus utilization.