From: David Miller <davem@davemloft.net>
To: gdb-patches@sourceware.org
Cc: stan@codesourcery.com, kcy@codesourcery.com
Subject: Re: [PATCH] Fix 'info os' crashes on sparc.
Date: Tue, 20 Nov 2012 06:13:00 -0000 [thread overview]
Message-ID: <20121120.011339.2105774812993461488.davem@davemloft.net> (raw)
In-Reply-To: <20121120.003006.1287326526424655175.davem@davemloft.net>
From: David Miller <davem@davemloft.net>
Date: Tue, 20 Nov 2012 00:30:06 -0500 (EST)
> 2012-11-19 David S. Miller <davem@davemloft.net>
>
> * common/linux-osdata.c (get_number_of_cpu_cores): Add support
> for parsing the layout of sparc /proc/cpuinfo files.
Actually, there is a better fix, GLIBC already has all of this /proc
parsing logic for every cpu type, and can even distinguish activated
vs. non-activated cpus.
We simply need to do sysconf(_SC_NPROCESSORS_ONLN)
The thing is, this code still has a problem. The number of cpus
active doesn't tell us anything about what the largest cpu number
might be.
The cpus numbers themselves can be arbitrarily sparse and beyond the
number of cpus.
And it's the cpu numbers that are used to index these various tables.
gdb/
2012-11-19 David S. Miller <davem@davemloft.net>
* common/linux-osdata.c (get_number_of_cpu_cores): Delete.
(linux_xfer_osdata_processes): Fetch _SC_NPROCESSORS_ONLN via
sysconf.
(get_cores_used_by_process): Update comment.
diff --git a/gdb/common/linux-osdata.c b/gdb/common/linux-osdata.c
index afe3e75..d54f9d3 100644
--- a/gdb/common/linux-osdata.c
+++ b/gdb/common/linux-osdata.c
@@ -26,6 +26,7 @@
#include "linux-osdata.h"
#include <sys/types.h>
+#include <sys/sysinfo.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
@@ -253,30 +254,8 @@ get_process_owner (uid_t *owner, PID_T pid)
return -1;
}
-/* Returns the number of CPU cores found on the system. */
-
-static int
-get_number_of_cpu_cores (void)
-{
- int cores = 0;
- FILE *f = fopen ("/proc/cpuinfo", "r");
-
- while (!feof (f))
- {
- char buf[512];
- char *p = fgets (buf, sizeof (buf), f);
-
- if (p && strncmp (buf, "processor", 9) == 0)
- ++cores;
- }
-
- fclose (f);
-
- return cores;
-}
-
/* Find the CPU cores used by process PID and return them in CORES.
- CORES points to an array of at least get_number_of_cpu_cores ()
+ CORES points to an array of at least sysconf(_SC_NPROCESSOR_ONLN)
elements. */
static int
@@ -340,7 +319,7 @@ linux_xfer_osdata_processes (gdb_byte *readbuf,
dirp = opendir ("/proc");
if (dirp)
{
- const int num_cores = get_number_of_cpu_cores ();
+ const int num_cores = sysconf (_SC_NPROCESSORS_ONLN);
struct dirent *dp;
while ((dp = readdir (dirp)) != NULL)
next parent reply other threads:[~2012-11-20 6:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20121120.003006.1287326526424655175.davem@davemloft.net>
2012-11-20 6:13 ` David Miller [this message]
2012-11-20 14:44 ` Pedro Alves
2012-11-20 17:41 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121120.011339.2105774812993461488.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=gdb-patches@sourceware.org \
--cc=kcy@codesourcery.com \
--cc=stan@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox