PROBLEM: (QAR 51349) (Patch ID: TCR141-013) ******** This patch fixes various problems in the MEMORY CHANNEL API. In particular, changes were made to ensure that the API is thread safe, that locks are properly acquired and released, and to increase performance and reliability. The routine imc_ckerrcnt() in libimc.a was not thread safe. Locks have been added to ensure that this call is single threaded. The routine imc_lkacquire() in libimc.a allowed a process to acquire or release a lock held by another process. A memory barrier and simple locks were implemented in the kernel to prevent this from happening. Because of a requirement that coherent regions must have LOOPBACK on, even if only a single host was transmitting, the full memory channel bandwidth was not being used. A flag has been implemented to allow the user to specify a coherent region everywhere except the local host, thereby removing the LOOPBACK requirement, and doubling the throughput on transmit attach. Occasional memory channel errors were being logged because a timeout counter in the routine imc_ckerrcnt() was too small. The timeout has been increased. In the routine mcs_trans_error() in mcs_trans_error.o random return codes were being returned for certain nontranslatable error codes. This has been fixed by always returning a default error code in those cases.