Hi Dave,
Am Mittwoch, den 29.04.2009, 14:04 -0400 schrieb Dave Anderson:
Hi Michael,
I made a few other changes to your cpu map/mask patch:
- cpu_map_size() has been changed to use the symbol-name-creation
scheme as cpu_map_addr() in order to absolutely maintain the
backwards-compatibility issue brought up by Robin. So if the
old symbol names still exist, the code does exactly the same
thing that it used to.
fine.
- Your changes to get_cpus_present() and get_cpus_possible() were
incomplete because they were still using the hardwired "cpus_present_map"
and "cpus_possible_map" symbols.
- I didn't change the s390.c and s390x.c s390[x]_get_smp_cpus()
functions beyond what you did, but I think they should be
changed to use get_cpus_online() instead of the way they
are doing it now. As it is now, they are restricting themselves
to the number of cpu bits in a per-arch long. If the
s390 CONFIG_NR_CPUS can exceed 32, or the s390x CONFIG_NR_CPUS
can exceed 64, then those two functions are incorrect.
If the architecture limits them to 32/64, then I suppose the
way it's done now is OK. That's your call...
Right.
Index: crash-4.0-8.9/s390.c
===================================================================
--- crash-4.0-8.9.orig/s390.c
+++ crash-4.0-8.9/s390.c
@@ -999,16 +999,7 @@ s390_dis_filter(ulong vaddr, char *inbuf
int
s390_get_smp_cpus(void)
{
- unsigned long map = 0, addr;
- int i, cpu_num = 0;
- addr=symbol_value("cpu_online_map");
- readmem(addr, KVADDR, &map,sizeof(long),
"cpu_online_map",FAULT_ON_ERROR);
- for(i = 0; i < sizeof(map)*8;i++){
- if(map & 0x1UL)
- cpu_num += 1;
- map >>= 1;
- }
- return cpu_num;
+ return get_cpus_online();
}
/*
Index: crash-4.0-8.9/s390x.c
===================================================================
--- crash-4.0-8.9.orig/s390x.c
+++ crash-4.0-8.9/s390x.c
@@ -1029,16 +1029,7 @@ s390x_dis_filter(ulong vaddr, char *inbu
int
s390x_get_smp_cpus(void)
{
- unsigned long map = 0, addr;
- int i, cpu_num = 0;
- addr=symbol_value("cpu_online_map");
- readmem(addr, KVADDR, &map,sizeof(long),
"cpu_online_map",FAULT_ON_ERROR);
- for(i = 0; i < sizeof(map)*8;i++){
- if(map & 0x1UL)
- cpu_num += 1;
- map >>= 1;
- }
- return cpu_num;
+ return get_cpus_online();
}
/*
Also, the attached patch contains the changes for searching
for kernel module debuginfo files in the same directory tree
specified with "mod -S <directory>". Alternatively there
is a new "crash --mod <directory>" command line option, such
that "mod -S" with no directory argument will default to
searching the command-line specified directory.
Works fine, thanks!
Anyway, I've only tested this on older kernels that still have
the "cpu_xxxx_map" symbols. Can you test the patch on new
kernels?
I did some successful tests on 2.6.29 kernels (s390x).
And also let me know whether the s390[x] functions
should be updated.
Yes, please update the s390(x) functions accordingly.
Michael
PS: I noticed some whitespace issues in your patch (blanks instead of
tabs). Maybe you could change that.