1. A method of maintaining coherency of data accessed by a remote device, comprising: maintaining, on the remote device, a remote cache directory indicative of memory locations residing in a cache on a processor which shares access to some portion of a memory device; maintaining, on the remote device, a castout buffer indicating cache lines that have been or will be castout from the processor cache; and routing memory requests issued at the remote device to the memory device or the processor cache, depending on information contained in the remote cache directory and castout buffer.