mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 16:10:54 +00:00
Update TODO
This commit is contained in:
32
TODO
32
TODO
@ -70,17 +70,15 @@ Before 1.2:
|
|||||||
|
|
||||||
* If interrupt happens in kernel mode, send both
|
* If interrupt happens in kernel mode, send both
|
||||||
kernel stack and user space stack, have userspace stitch them
|
kernel stack and user space stack, have userspace stitch them
|
||||||
together. (User space stack must probably be done in a thread - kernel
|
together. well, they could be stitched together in the kernel.
|
||||||
stack must probably be taken in the interrupt itself?
|
Already done: we now take a stacktrace of the user space process
|
||||||
- Why this difference? The page tables should still be loaded. Is it
|
when the interrupt happens in kernel mode. We don't take any
|
||||||
because pages_present() doesn't work? No, turning it off doesn't help.
|
stacktraces of the kernel though. Things that need to be investigated:
|
||||||
- It looks like this works. Get:
|
- does the kernel come with dwarf debug information?
|
||||||
|
- does the kernel come with some other debug info
|
||||||
struct pt_regs *user_regs =
|
- is there a place where the vmlinux binary is usually
|
||||||
(void *)current->thread.esp0 - sizeof (struct pt_regs);
|
placed? (We should avoid any "location of vmlinux" type
|
||||||
|
questions if at all possible).
|
||||||
then use pages_present as usual to trace with user_regs; There could be
|
|
||||||
rare lockups though.
|
|
||||||
|
|
||||||
* Correctness
|
* Correctness
|
||||||
- When the module is unloaded, kill all processes blocking in read
|
- When the module is unloaded, kill all processes blocking in read
|
||||||
@ -450,6 +448,18 @@ Later:
|
|||||||
|
|
||||||
DONE:
|
DONE:
|
||||||
|
|
||||||
|
* (User space stack must probably be done in a thread - kernel
|
||||||
|
stack must probably be taken in the interrupt itself?
|
||||||
|
- Why this difference? The page tables should still be loaded. Is it
|
||||||
|
because pages_present() doesn't work? No, turning it off doesn't help.
|
||||||
|
- It looks like this works. Get:
|
||||||
|
|
||||||
|
struct pt_regs *user_regs =
|
||||||
|
(void *)current->thread.esp0 - sizeof (struct pt_regs);
|
||||||
|
|
||||||
|
then use pages_present as usual to trace with user_regs; There could be
|
||||||
|
rare lockups though.
|
||||||
|
|
||||||
* Non-GUI version that can save in a format the GUI can understand.
|
* Non-GUI version that can save in a format the GUI can understand.
|
||||||
Could be used for profiling startup etc. Would preferably be able to
|
Could be used for profiling startup etc. Would preferably be able to
|
||||||
dump the data to a network socket. Should be able to react to eg.
|
dump the data to a network socket. Should be able to react to eg.
|
||||||
|
|||||||
@ -54,6 +54,10 @@ lookup_signal_watch (int signo)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* These two functions might be interrupted by a signal handler that is
|
||||||
|
* going to run lookup_signal_watch(). Assuming that pointer writes are
|
||||||
|
* atomic, the code below should be ok.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
add_signal_watch (SignalWatch *watch)
|
add_signal_watch (SignalWatch *watch)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user