diff --git a/cmd/cxl-host/service/cxl_host_service.go b/cmd/cxl-host/service/cxl_host_service.go index 3655883..b4238b8 100644 --- a/cmd/cxl-host/service/cxl_host_service.go +++ b/cmd/cxl-host/service/cxl_host_service.go @@ -1386,15 +1386,22 @@ func (s *CxlHostApiService) RedfishV1SystemsComputerSystemIdMemoryDomainsMemoryD } else { bdf := CxlDevNodeToBDF(memoryChunksId) - memAddr := GetCxlAddressInfoMiB(bdf) - resource.AddressRangeOffsetMiB = &memAddr.BaseAddress - resource.MemoryChunkSizeMiB = &memAddr.Size - resource.Links.Endpoints = append(resource.Links.Endpoints, redfishapi.OdataV4IdRef{OdataId: fmt.Sprintf("/redfish/v1/Systems/%s/Memory/CXL%d", computerSystemId, CxlDevBDFtoIndex(CxlDevNodeToBDF(memoryChunksId)))}) - resource.Links.EndpointsodataCount = 1 - - perfMetric := GetCXLMemPerf(bdf) - if perfMetric != nil { - resource.Oem = map[string]interface{}{"Seagate": map[string]interface{}{"Bandwidth": perfMetric.Bandwidth, "Latency": perfMetric.Latency}} + if bdf == "" { // node doesn't match to a CXL dev's base address + mem := GetNumaMemInfo(memoryChunksId) + memMiB := mem.MemTotal >> 10 // MemTotal is in KiB + resource.MemoryChunkSizeMiB = &memMiB + resource.Links.Endpoints = make([]redfishapi.OdataV4IdRef, 0) + } else { + memAddr := GetCxlAddressInfoMiB(bdf) + resource.AddressRangeOffsetMiB = &memAddr.BaseAddress + resource.MemoryChunkSizeMiB = &memAddr.Size + resource.Links.Endpoints = append(resource.Links.Endpoints, redfishapi.OdataV4IdRef{OdataId: fmt.Sprintf("/redfish/v1/Systems/%s/Memory/CXL%d", computerSystemId, CxlDevBDFtoIndex(CxlDevNodeToBDF(memoryChunksId)))}) + resource.Links.EndpointsodataCount = 1 + + perfMetric := GetCXLMemPerf(bdf) + if perfMetric != nil { + resource.Oem = map[string]interface{}{"Seagate": map[string]interface{}{"Bandwidth": perfMetric.Bandwidth, "Latency": perfMetric.Latency}} + } } } diff --git a/cmd/cxl-host/service/manager.go b/cmd/cxl-host/service/manager.go index dfd176e..5fa387d 100644 --- a/cmd/cxl-host/service/manager.go +++ b/cmd/cxl-host/service/manager.go @@ -464,17 +464,22 @@ func GetMemOnlyNumaNodes() []string { // GetCXLNumaNodes: return a map of [node]BDF func GetCXLNumaNodes() map[string]string { nodeMap := make(map[string]string) + for _, node := range GetMemOnlyNumaNodes() { // Initialize Node Map + nodeMap[node] = "" + } if blockSizeByte != -1 { cxlDevList := GetCXLWithMemDevList() for _, bdf := range cxlDevList { dev := GetCXLDevInfo(bdf) base_addr := dev.GetMemoryBaseAddr() - blockIndex := base_addr / blockSizeByte - entries, err := os.ReadDir(fmt.Sprintf("%smemory%d", PlatformPath.SysMem, blockIndex)) - if err == nil { - for _, entry := range entries { - if strings.HasPrefix(entry.Name(), "node") { - nodeMap[entry.Name()] = bdf + if base_addr != 0 { + blockIndex := base_addr / blockSizeByte + entries, err := os.ReadDir(fmt.Sprintf("%smemory%d", PlatformPath.SysMem, blockIndex)) + if err == nil { + for _, entry := range entries { + if strings.HasPrefix(entry.Name(), "node") { + nodeMap[entry.Name()] = bdf + } } } }