----- Original Message ----- > Hello Dave, > > The problem is fixed and I changed the display according to your > suggestion. Please check. I'm going to test it over the weekend on my sample set of vmcores just to make sure the failure protection is still working. I'm still not particularly happy about the display. For example, with the older style without hrtimer_cpu_base addresses, I think it's unnecessary to display the HRTIMER_BASES[] address next to each cpu since the each address in the array is shown for each clock. Plus the "ACTIVE TIMERS:" line is pretty much unnecessary, and perhaps the OFFSET and GET_TIME fields can be put on one line. Let me think some more about how it can be made more useful/clear. > One more thing is about current time. I think current time is needed > when debugging, for debuggers can compare the expires of hrtimers with > current time. > > When realizing this functionality, I once tried to use xtime plus > wall_to_monotonic. But then I found the value is not that correct. So I > use uptime here. Since it seems strange, what about changing the > display? If it's not readily obvious what it's showing, and how it relates to the expire data, then I would leave it out. One other suggestion... I probably should have been a bit more clear about using accessible() to prevent the command from aborting prematurely. Your fixes do accomplish that, but, for example, while this usage of accessible() makes perfect sense in your print_timer() function: + if (!accessible((ulong)timer)) { + fprintf(fp, "(destroyed timer)\n"); + return; + } later on in the function, this usage is essentially redundant with the subsequent readmem(): + if (accessible((ulong)(timer + OFFSET(hrtimer_function)))) { + readmem((ulong)(timer + OFFSET(hrtimer_function)), KVADDR, &function, + sizeof(function), "hrtimer function", FAULT_ON_ERROR); + fprintf(fp, "%lx ", function); + fprintf(fp ,"<%s>", value_to_symstr(function, buf3, 0)); + } It can be done with one call by using RETURN_ON_ERROR|QUIET and checking the return value: if (readmem((ulong)(timer + OFFSET(hrtimer_function)), KVADDR, &function, sizeof(function), "hrtimer function", RETURN_ON_ERROR|QUIET)) { fprintf(fp, "%lx ", function); fprintf(fp ,"<%s>", value_to_symstr(function, buf3, 0)); } Thanks, Dave -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility