+ //\r
+ // CPU arch attributes include page attributes and cache attributes. \r
+ // Only page attributes supports to be cleared, but not cache attributes.\r
+ // Caller is expected to use GetMemorySpaceDescriptor() to get the current\r
+ // attributes, AND/OR attributes, and then calls SetMemorySpaceAttributes()\r
+ // to set the new attributes.\r
+ // So 0 CPU arch attributes should not happen as memory should always have\r
+ // a cache attribute (no matter UC or WB, etc). \r
+ //\r
+ // Here, 0 CPU arch attributes will be filtered to be compatible with the\r
+ // case that caller just calls SetMemorySpaceAttributes() with none CPU\r
+ // arch attributes (for example, RUNTIME) as the purpose of the case is not\r
+ // to clear CPU arch attributes.\r
+ //\r
+ if (CpuArchAttributes != 0) {\r