Module Name:    src
Committed By:   tls
Date:           Sun Aug 10 06:54:38 UTC 2014

Modified Files:
        src/sys/ddb [tls-earlyentropy]: db_cpu.c

Log Message:
Rebase.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.5.2.1 src/sys/ddb/db_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/ddb/db_cpu.c
diff -u src/sys/ddb/db_cpu.c:1.5 src/sys/ddb/db_cpu.c:1.5.2.1
--- src/sys/ddb/db_cpu.c:1.5	Sun Nov 24 21:58:38 2013
+++ src/sys/ddb/db_cpu.c	Sun Aug 10 06:54:38 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: db_cpu.c,v 1.5 2013/11/24 21:58:38 rmind Exp $	*/
+/*	$NetBSD: db_cpu.c,v 1.5.2.1 2014/08/10 06:54:38 tls Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_cpu.c,v 1.5 2013/11/24 21:58:38 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_cpu.c,v 1.5.2.1 2014/08/10 06:54:38 tls Exp $");
 
 #ifndef _KERNEL
 #include <stdbool.h>
@@ -42,23 +42,37 @@ __KERNEL_RCSID(0, "$NetBSD: db_cpu.c,v 1
 
 #include <ddb/ddb.h>
 
-static struct cpu_info **cpu_info_addr;
+static int		db_ncpu;
+static struct cpu_info	**db_cpu_infos;
+
+static void
+db_cpu_init(void)
+{
+	db_expr_t addr;
+
+	db_value_of_name("ncpu", &addr);
+	db_read_bytes((db_addr_t)addr, sizeof(db_ncpu), (char *)&db_ncpu);
+
+	db_value_of_name("cpu_infos", &addr);
+	db_read_bytes((db_addr_t)addr, sizeof(db_cpu_infos),
+	    (char *)&db_cpu_infos);
+}
 
 static struct cpu_info *
-db_cpu_index(u_int idx)
+db_cpu_by_index(u_int idx)
 {
-	db_addr_t slot_addr = (db_addr_t)(cpu_info_addr + idx);
 	struct cpu_info *ci;
 
-	db_read_bytes(slot_addr, sizeof(ci), (char *)&ci);
+	db_read_bytes((db_addr_t)&db_cpu_infos[idx], sizeof(ci), (char *)&ci);
 	return ci;
 }
 
 struct cpu_info *
 db_cpu_first(void)
 {
-	db_value_of_name("cpu_infos", (db_expr_t *)&cpu_info_addr);
-	return db_cpu_index(0);
+
+	db_cpu_init();
+	return db_cpu_by_index(0);
 }
 
 struct cpu_info *
@@ -67,5 +81,7 @@ db_cpu_next(struct cpu_info *ci)
 	u_int idx;
 
 	db_read_bytes((db_addr_t)&ci->ci_index, sizeof(idx), (char *)&idx);
-	return db_cpu_index(idx + 1);
+	if ((idx + 1) >= (u_int)db_ncpu)
+		return NULL;
+	return db_cpu_by_index(idx + 1);
 }

Reply via email to