Module Name: src Committed By: palle Date: Sun Mar 22 19:37:54 UTC 2015
Modified Files: src/sys/arch/sparc64/sparc64: cpu.c Log Message: sun4v: Fixed bug in cpu_cache_info_sun4v() causing non-cache nodes to be processed - this should fix crashes on T2-based systems (e.g. T5120) when retrieving L2$ info during bootstrap. Tested by rodent@ To generate a diff of this commit: cvs rdiff -u -r1.123 -r1.124 src/sys/arch/sparc64/sparc64/cpu.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc64/sparc64/cpu.c diff -u src/sys/arch/sparc64/sparc64/cpu.c:1.123 src/sys/arch/sparc64/sparc64/cpu.c:1.124 --- src/sys/arch/sparc64/sparc64/cpu.c:1.123 Wed Feb 11 04:44:11 2015 +++ src/sys/arch/sparc64/sparc64/cpu.c Sun Mar 22 19:37:54 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: cpu.c,v 1.123 2015/02/11 04:44:11 palle Exp $ */ +/* $NetBSD: cpu.c,v 1.124 2015/03/22 19:37:54 palle Exp $ */ /* * Copyright (c) 1996 @@ -52,7 +52,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.123 2015/02/11 04:44:11 palle Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.124 2015/03/22 19:37:54 palle Exp $"); #include "opt_multiprocessor.h" @@ -161,18 +161,21 @@ cpu_cache_info_sun4v(const char *type, i uint64_t val = 0;; idx = mdesc_find_node_by_idx(idx, "cache"); while (idx != -1 && val == 0) { - const char *p; - size_t len = 0; - p = mdesc_get_prop_data(idx, "type", &len); - if (p == NULL) - panic("No type found\n"); - if (len == 0) - panic("Len is zero"); - if (type == NULL || strcmp(p, type) == 0) { - uint64_t l; - l = mdesc_get_prop_val(idx, "level"); - if (l == level) - val = mdesc_get_prop_val(idx, prop); + const char *name = mdesc_name_by_idx(idx); + if (strcmp("cache", name) == 0) { + const char *p; + size_t len = 0; + p = mdesc_get_prop_data(idx, "type", &len); + if (p == NULL) + panic("No type found\n"); + if (len == 0) + panic("Len is zero"); + if (type == NULL || strcmp(p, type) == 0) { + uint64_t l; + l = mdesc_get_prop_val(idx, "level"); + if (l == level) + val = mdesc_get_prop_val(idx, prop); + } } if (val == 0) idx = mdesc_next_node(idx);