move all projects into the trunk directory
[lttv.git] / ltt / branches / poly / lttv / lttv / state.h
diff --git a/ltt/branches/poly/lttv/lttv/state.h b/ltt/branches/poly/lttv/lttv/state.h
deleted file mode 100644 (file)
index 523e058..0000000
+++ /dev/null
@@ -1,443 +0,0 @@
-/* This file is part of the Linux Trace Toolkit viewer
- * Copyright (C) 2003-2004 Michel Dagenais
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License Version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, 
- * MA 02111-1307, USA.
- */
-
-#ifndef STATE_H
-#define STATE_H
-
-#include <glib.h>
-#include <lttv/tracecontext.h>
-#include <stdio.h>
-
-/* The operating system state, kept during the trace analysis,
-   contains a subset of the real operating system state, 
-   sufficient for the analysis, and possibly organized quite differently.
-
-   The state information is added to LttvTracesetContext, LttvTraceContext 
-   and LttvTracefileContext objects, used by process_traceset, through
-   subtyping. The context objects already reflect the multiple tracefiles
-   (one per cpu) per trace and multiple traces per trace set. The state
-   objects defined here simply add fields to the relevant context objects. 
-
-   There is no traceset specific state yet. It may eventually contains such
-   things as clock differences over time.
-
-   The trace state currently consists in a process table. 
-
-   The tracefile level state relates to the associated cpu. It contains the
-   position of the current event in the tracefile (since the state depends on
-   which events have been processed) and a pointer to the current process,
-   in the process table, being run on that cpu.
-
-   For each process in the process table, various informations such as exec 
-   file name, pid, ppid and creation time are stored. Each process state also
-   contains an execution mode stack (e.g. irq within system call, called
-   from user mode). */
-
-/* Priority of state hooks */
-#define LTTV_PRIO_STATE 25
-
-#define LTTV_STATE_SAVE_INTERVAL 50000
-
-/* Facilities Quarks */
-
-extern GQuark
-    LTT_FACILITY_KERNEL,
-    LTT_FACILITY_KERNEL_ARCH,
-    LTT_FACILITY_FS,
-    LTT_FACILITY_LIST,
-    LTT_FACILITY_USER_GENERIC,
-    LTT_FACILITY_BLOCK,
-    LTT_FACILITY_STATEDUMP;
-
-/* Events Quarks */
-
-extern GQuark 
-    LTT_EVENT_SYSCALL_ENTRY,
-    LTT_EVENT_SYSCALL_EXIT,
-    LTT_EVENT_TRAP_ENTRY,
-    LTT_EVENT_TRAP_EXIT,
-    LTT_EVENT_IRQ_ENTRY,
-    LTT_EVENT_IRQ_EXIT,
-    LTT_EVENT_SOFT_IRQ_RAISE,
-    LTT_EVENT_SOFT_IRQ_ENTRY,
-    LTT_EVENT_SOFT_IRQ_EXIT,
-    LTT_EVENT_SCHED_SCHEDULE,
-    LTT_EVENT_PROCESS_FORK,
-    LTT_EVENT_KTHREAD_CREATE,
-    LTT_EVENT_PROCESS_EXIT,
-    LTT_EVENT_PROCESS_FREE,
-    LTT_EVENT_EXEC,
-    LTT_EVENT_PROCESS_STATE,
-    LTT_EVENT_STATEDUMP_END,
-    LTT_EVENT_FUNCTION_ENTRY,
-    LTT_EVENT_FUNCTION_EXIT,
-    LTT_EVENT_THREAD_BRAND,
-    LTT_EVENT_REQUEST_ISSUE,
-    LTT_EVENT_REQUEST_COMPLETE,
-    LTT_EVENT_LIST_INTERRUPT,
-    LTT_EVENT_SYS_CALL_TABLE,
-    LTT_EVENT_SOFTIRQ_VEC;
-
-/* Fields Quarks */
-
-extern GQuark 
-    LTT_FIELD_SYSCALL_ID,
-    LTT_FIELD_TRAP_ID,
-    LTT_FIELD_IRQ_ID,
-    LTT_FIELD_SOFT_IRQ_ID,
-    LTT_FIELD_PREV_PID,
-    LTT_FIELD_NEXT_PID,
-    LTT_FIELD_PREV_STATE,
-    LTT_FIELD_PARENT_PID,
-    LTT_FIELD_CHILD_PID,
-    LTT_FIELD_PID,
-    LTT_FIELD_TGID,
-    LTT_FIELD_FILENAME,
-    LTT_FIELD_NAME,
-    LTT_FIELD_TYPE,
-    LTT_FIELD_MODE,
-    LTT_FIELD_SUBMODE,
-    LTT_FIELD_STATUS,
-    LTT_FIELD_THIS_FN,
-    LTT_FIELD_CALL_SITE,
-    LTT_FIELD_MINOR,
-    LTT_FIELD_MAJOR,
-    LTT_FIELD_OPERATION,
-    LTT_FIELD_ACTION,
-    LTT_FIELD_ID,
-    LTT_FIELD_ADDRESS,
-    LTT_FIELD_SYMBOL;
-
-typedef struct _LttvTracesetState LttvTracesetState;
-typedef struct _LttvTracesetStateClass LttvTracesetStateClass;
-
-typedef struct _LttvTraceState LttvTraceState;
-typedef struct _LttvTraceStateClass LttvTraceStateClass;
-
-typedef struct _LttvTracefileState LttvTracefileState;
-typedef struct _LttvTracefileStateClass LttvTracefileStateClass;
-
-gint lttv_state_hook_add_event_hooks(void *hook_data, void *call_data);
-void lttv_state_add_event_hooks(LttvTracesetState *self);
-
-gint lttv_state_hook_remove_event_hooks(void *hook_data, void *call_data);
-void lttv_state_remove_event_hooks(LttvTracesetState *self);
-
-void lttv_state_save_add_event_hooks(LttvTracesetState *self);
-// Hook wrapper. call_data is a trace context.
-gint lttv_state_save_hook_add_event_hooks(void *hook_data, void *call_data);
-
-void lttv_state_save_remove_event_hooks(LttvTracesetState *self);
-// Hook wrapper. call_data is a trace context.
-gint lttv_state_save_hook_remove_event_hooks(void *hook_data, void *call_data);
-
-void lttv_state_traceset_seek_time_closest(LttvTracesetState *self, LttTime t);
-
-/* The LttvProcessState structure defines the current state for each process.
-   A process can make system calls (in some rare cases nested) and receive
-   interrupts/faults. For instance, a process may issue a system call,
-   generate a page fault while reading an argument from user space, and
-   get caught by an interrupt. To represent these nested states, an
-   execution mode stack is maintained. The stack bottom is normal user mode 
-   and the top of stack is the current execution mode.
-
-   The execution mode stack tells about the process status, execution mode and
-   submode (interrupt, system call or IRQ number). All these could be 
-   defined as enumerations but may need extensions (e.g. new process state). 
-   GQuark are thus used. They are as easy to manipulate as integers but have
-   a string associated, just like enumerations.
-
-   The execution mode is one of "user mode", "kernel thread", "system call",
-   "interrupt request", "fault". */
-
-typedef GQuark LttvExecutionMode;
-
-extern LttvExecutionMode
-  LTTV_STATE_USER_MODE,
-  LTTV_STATE_SYSCALL,
-  LTTV_STATE_TRAP,
-  LTTV_STATE_IRQ,
-  LTTV_STATE_SOFT_IRQ,
-  LTTV_STATE_MODE_UNKNOWN;
-
-
-/* The submode number depends on the execution mode. For user mode or kernel
-   thread, which are the normal mode (execution mode stack bottom), 
-   it is set to "none". For interrupt requests, faults and system calls, 
-   it is set respectively to the interrupt name (e.g. "timer"), fault name 
-   (e.g. "page fault"), and system call name (e.g. "select"). */
-typedef GQuark LttvExecutionSubmode;
-
-extern LttvExecutionSubmode
-  LTTV_STATE_SUBMODE_NONE,
-  LTTV_STATE_SUBMODE_UNKNOWN;
-
-/* The process status is one of "running", "wait-cpu" (runnable), or "wait-*"
-   where "*" describes the resource waited for (e.g. timer, process, 
-   disk...). */
-
-typedef GQuark LttvProcessStatus;
-
-extern LttvProcessStatus
-  LTTV_STATE_UNNAMED,
-  LTTV_STATE_WAIT_FORK,
-  LTTV_STATE_WAIT_CPU,
-  LTTV_STATE_EXIT,
-  LTTV_STATE_ZOMBIE,
-  LTTV_STATE_WAIT,
-  LTTV_STATE_RUN,
-  LTTV_STATE_DEAD;
-
-extern GQuark
-  LTTV_STATE_UNBRANDED;
-
-typedef GQuark LttvProcessType;
-
-extern LttvProcessType
-  LTTV_STATE_USER_THREAD,
-  LTTV_STATE_KERNEL_THREAD;
-
-typedef GQuark LttvCPUMode;
-extern LttvCPUMode
-  LTTV_CPU_UNKNOWN,
-  LTTV_CPU_IDLE,
-  LTTV_CPU_BUSY,
-  LTTV_CPU_IRQ,
-  LTTV_CPU_SOFT_IRQ,
-  LTTV_CPU_TRAP;
-
-typedef GQuark LttvIRQMode;
-extern LttvIRQMode
-  LTTV_IRQ_UNKNOWN,
-  LTTV_IRQ_IDLE,
-  LTTV_IRQ_BUSY;
-
-typedef GQuark LttvBdevMode;
-extern LttvBdevMode
-  LTTV_BDEV_UNKNOWN,
-  LTTV_BDEV_IDLE,
-  LTTV_BDEV_BUSY_READING,
-  LTTV_BDEV_BUSY_WRITING;
-
-typedef struct _LttvExecutionState {
-  LttvExecutionMode t;
-  LttvExecutionSubmode n;
-  LttTime entry;
-  LttTime change;
-  LttTime cum_cpu_time;
-  LttvProcessStatus s;
-} LttvExecutionState;
-
-typedef struct _LttvProcessState {
-  guint pid;
-  guint tgid;
-  guint ppid;
-  LttTime creation_time;
-  LttTime insertion_time;
-  GQuark name;
-  GQuark brand;
-  GQuark pid_time;
-  GArray *execution_stack;         /* Array of LttvExecutionState */
-  LttvExecutionState *state;       /* Top of interrupt stack */
-      /* WARNING : each time the execution_stack size is modified, the state
-       * must be reget : g_array_set_size can have to move the array.
-       * (Mathieu) */
-  guint cpu;                /* CPU where process is scheduled (being either in
-                               the active or inactive runqueue)*/
-//  guint  last_tracefile_index;    /* index in the trace for cpu tracefile */
-  LttvTracefileState  *usertrace;    /* Associated usertrace */
-  /* opened file descriptors, address map?... */
-  GArray *user_stack;          /* User space function call stack */
-  guint64  current_function;
-  LttvProcessType type;        /* kernel thread or user space ? */
-  guint target_pid; /* target PID of the current event. */
-  guint free_events; /* 0 : none, 1 : free or exit dead, 2 : should delete */
-} LttvProcessState;
-
-#define ANY_CPU 0 /* For clarity sake : a call to lttv_state_find_process for
-                     a PID != 0 will search on any cpu automatically. */
-
-LttvProcessState *
-lttv_state_find_process(LttvTraceState *ts, guint cpu, guint pid);
-
-LttvProcessState *
-lttv_state_find_process_or_create(LttvTraceState *ts, guint cpu, guint pid,
-    const LttTime *timestamp);
-
-LttvProcessState *
-lttv_state_create_process(LttvTraceState *tcs, LttvProcessState *parent, 
-    guint cpu, guint pid, guint tgid, GQuark name, const LttTime *timestamp);
-
-void lttv_state_write(LttvTraceState *self, LttTime t, FILE *fp);
-void lttv_state_write_raw(LttvTraceState *self, LttTime t, FILE *fp);
-
-/* The LttvTracesetState, LttvTraceState and LttvTracefileState types
-   inherit from the corresponding Context objects defined in processTrace. */
-
-#define LTTV_TRACESET_STATE_TYPE  (lttv_traceset_state_get_type ())
-#define LTTV_TRACESET_STATE(obj)  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACESET_STATE_TYPE, LttvTracesetState))
-#define LTTV_TRACESET_STATE_CLASS(vtable)  (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACESET_STATE_TYPE, LttvTracesetStateClass))
-#define LTTV_IS_TRACESET_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACESET_STATE_TYPE))
-#define LTTV_IS_TRACESET_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACESET_STATE_TYPE))
-#define LTTV_TRACESET_STATE_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACESET_STATE_TYPE, LttvTracesetStateClass))
-
-struct _LttvTracesetState {
-  LttvTracesetContext parent;
-};
-
-struct _LttvTracesetStateClass {
-  LttvTracesetContextClass parent;
-};
-
-GType lttv_traceset_state_get_type (void);
-
-
-#define LTTV_TRACE_STATE_TYPE  (lttv_trace_state_get_type ())
-#define LTTV_TRACE_STATE(obj)  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACE_STATE_TYPE, LttvTraceState))
-#define LTTV_TRACE_STATE_CLASS(vtable)  (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACE_STATE_TYPE, LttvTraceStateClass))
-#define LTTV_IS_TRACE_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACE_STATE_TYPE))
-#define LTTV_IS_TRACE_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACE_STATE_TYPE))
-#define LTTV_TRACE_STATE_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACE_STATE_TYPE, LttvTraceStateClass))
-
-typedef struct _LttvCPUState {
-  GArray *mode_stack;
-  guint last_irq;
-  guint last_soft_irq;
-  guint last_trap;
-} LttvCPUState;
-
-typedef struct _LttvIRQState {
-  GArray *mode_stack;
-} LttvIRQState;
-
-typedef struct _LttvSoftIRQState {
-  guint pending; /* number of times it is pending */
-  guint running; /* number of times it is currently running (on different processors) */
-} LttvSoftIRQState;
-
-typedef struct _LttvTrapState {
-  guint running; /* number of times it is currently running (on different processors) */
-} LttvTrapState;
-
-typedef struct _LttvBdevState {
-  GArray *mode_stack;
-} LttvBdevState;
-
-struct _LttvTraceState {
-  LttvTraceContext parent;
-
-  GHashTable *processes;  /* LttvProcessState objects indexed by pid and
-                             last_cpu */
-  GHashTable *usertraces;  /* GPtrArray objects indexed by pid, containing
-                             pointers to LttvTracefileState objects. */
-  guint nb_event, save_interval;
-  /* Block/char devices, locks, memory pages... */
-  GQuark *eventtype_names;
-  GQuark *syscall_names;
-  guint  nb_syscalls;
-  GQuark *trap_names;
-  guint  nb_traps;
-  guint  nb_irqs;
-  guint  nb_soft_irqs;
-  GQuark *irq_names;
-  GQuark *soft_irq_names;
-  LttTime *max_time_state_recomputed_in_seek;
-
-  /* Array of per cpu running process */
-  LttvProcessState **running_process;
-  gboolean has_precomputed_states;
-  LttvCPUState *cpu_states; /* state of each cpu */
-  LttvIRQState *irq_states; /* state of each irq handler */
-  LttvSoftIRQState *soft_irq_states; /* state of each softirq */
-  LttvTrapState *trap_states; /* state of each trap */
-  GHashTable *bdev_states; /* state of the block devices */
-};
-
-struct _LttvTraceStateClass {
-  LttvTraceContextClass parent;
-
-  void (*state_save) (LttvTraceState *self, LttvAttribute *container);
-  void (*state_restore) (LttvTraceState *self, LttvAttribute *container);
-  void (*state_saved_free) (LttvTraceState *self, LttvAttribute *container);
-};
-
-GType lttv_trace_state_get_type (void);
-
-void lttv_state_save(LttvTraceState *self, LttvAttribute *container);
-
-void lttv_state_restore(LttvTraceState *self, LttvAttribute *container);
-
-void lttv_state_state_saved_free(LttvTraceState *self, 
-    LttvAttribute *container);
-
-int lttv_state_pop_state_cleanup(LttvProcessState *process,
-    LttvTracefileState *tfs);
-
-#define LTTV_TRACEFILE_STATE_TYPE  (lttv_tracefile_state_get_type ())
-#define LTTV_TRACEFILE_STATE(obj)  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LTTV_TRACEFILE_STATE_TYPE, LttvTracefileState))
-#define LTTV_TRACEFILE_STATE_CLASS(vtable)  (G_TYPE_CHECK_CLASS_CAST ((vtable), LTTV_TRACEFILE_STATE_TYPE, LttvTracefileStateClass))
-#define LTTV_IS_TRACEFILE_STATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LTTV_TRACEFILE_STATE_TYPE))
-#define LTTV_IS_TRACEFILE_STATE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), LTTV_TRACEFILE_STATE_TYPE))
-#define LTTV_TRACEFILE_STATE_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS ((inst), LTTV_TRACEFILE_STATE_TYPE, LttvTracefileStateClass))
-
-struct _LttvTracefileState {
-  LttvTracefileContext parent;
-
-  GQuark tracefile_name;
-  guint cpu;  /* Current cpu of the tracefile */ /* perhaps merge in cpu_state */
-  LttvCPUState *cpu_state; /* cpu resource state */
-};
-
-struct _LttvTracefileStateClass {
-  LttvTracefileContextClass parent;
-};
-
-GType lttv_tracefile_state_get_type (void);
-
-static inline guint lttv_state_get_target_pid(LttvTracefileState *tfs)
-{
-  LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context;
-  guint cpu = tfs->cpu;
-  LttvProcessState *process = ts->running_process[cpu];
-
-  if(tfs->parent.target_pid >= 0) return tfs->parent.target_pid;
-  else return process->pid;
-}
-
-
-#define HDR_PROCESS 0
-#define HDR_ES 1
-#define HDR_USER_STACK 2
-#define HDR_USERTRACE 3
-#define HDR_PROCESS_STATE 4
-#define HDR_CPU 5
-#define HDR_TRACEFILE 6
-#define HDR_TRACESET 7
-#define HDR_TRACE 8
-#define HDR_QUARKS 9
-#define HDR_QUARK 10
-
-/* Device number manipulation macros from kernel source */
-#define MINORBITS      20
-#define MINORMASK      ((1U << MINORBITS) - 1)
-#define MAJOR(dev)     ((unsigned int) ((dev) >> MINORBITS))
-#define MINOR(dev)     ((unsigned int) ((dev) & MINORMASK))
-#define MKDEV(ma,mi)   (((ma) << MINORBITS) | (mi))
-
-#endif // STATE_H
This page took 0.026007 seconds and 4 git commands to generate.