/shark/trunk/kernel/exchand.c |
---|
18,11 → 18,11 |
/** |
------------ |
CVS : $Id: exchand.c,v 1.3 2004-02-10 17:50:03 giacomo Exp $ |
CVS : $Id: exchand.c,v 1.4 2004-03-10 16:42:51 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2004-02-10 17:50:03 $ |
Revision: $Revision: 1.4 $ |
Last update: $Date: 2004-03-10 16:42:51 $ |
------------ |
**/ |
129,28 → 129,9 |
} |
} |
extern void *StartTracerBuffer; // Buffer Start 0 |
extern void *EndTracerBuffer; // Buffer End 4 |
extern void *LastBeforeEndTracerBuffer; //8 |
extern void *CurrentTracerBuffer; //The Actual Write Point For The Next Event 12 |
extern void *FirstTracerBuffer; //The First Valid Event 16 |
extern int TracerActive; //20 |
extern int TracerOutputType; //24 |
extern unsigned long long TracerEventsRecorded; //28 |
extern unsigned int TracerEventsPresent; //36 |
static void theend(void *arg) |
{ |
#ifdef __NEW_TRACER__ |
void *save_tracer_pointer; |
#endif |
if (myflag) { |
cprintf("S.Ha.R.K. Exception raised!!!\n"); |
cprintf("Time (s:ns) :%ld:%ld\n", mytime.tv_sec, mytime.tv_nsec); |
160,26 → 141,6 |
proc_table[myinfo.si_task].name); |
cprintf("Avail time : %d\n", proc_table[myinfo.si_task].avail_time); |
#ifdef __NEW_TRACER__ |
save_tracer_pointer = malloc(48); |
*(void **)(save_tracer_pointer) = StartTracerBuffer; // Buffer Start 0 |
*(void **)(save_tracer_pointer+4) = EndTracerBuffer; // Buffer End 4 |
*(void **)(save_tracer_pointer+8) = LastBeforeEndTracerBuffer; //8 |
*(void **)(save_tracer_pointer+12) = CurrentTracerBuffer; //The Actual Write Point For The Next Event 12 |
*(void **)(save_tracer_pointer+16) = FirstTracerBuffer; //The First Valid Event 16 |
*(int *)(save_tracer_pointer+20) = 0; //20 |
*(int *)(save_tracer_pointer+24) = TRACER_UDP_OUTPUT; //24 |
*(unsigned long long *)(save_tracer_pointer+28) = TracerEventsRecorded; //28 |
*(unsigned int *)(save_tracer_pointer+36) = TracerEventsPresent; //36 |
cprintf("Dumper Magic Number = %u\n",(int)save_tracer_pointer); |
#endif |
} |
if (myflag_shutdown) { |
cprintf("\nShutdown message:\n%s\n", shutdown_message_buffer); |
/shark/trunk/tracer/include/FTrace_OSD.h |
---|
5,7 → 5,7 |
#include <FTrace_types.h> |
#define FTRACE_OSD_CHUNK_HEAD 60 |
#define FTRACE_OSD_CHUNK_HEAD 64 |
#define FTRACE_OSD_NEXT1 1 |
#define FTRACE_OSD_NEXT2 2 |
21,6 → 21,8 |
/* OSD Chunk Init */ |
int FTrace_OSD_chunk_init(FTrace_Chunk_Ptr c, int normal_size, int emergency_site, FTrace_flags flags); |
int FTrace_OSD_update_chunk_flags(FTrace_Chunk_Ptr c); |
/* OSD Chunk Link */ |
int FTrace_OSD_chunk_link(FTrace_Chunk_Ptr a, FTrace_Chunk_Ptr b, int osd_flags); |
/shark/trunk/tracer/newtrace/FTrace_OSD_ll.c |
---|
28,18 → 28,29 |
extern BYTE FTrace_enable; |
DWORD tsclow, tschigh; |
DWORD next = *(DWORD *)(OSD_pointers); |
DWORD current = *(DWORD *)(OSD_pointers + next); |
DWORD start = *(DWORD *)(OSD_pointers + next + 4); |
DWORD size = *(DWORD *)(OSD_pointers + next + 8); |
DWORD flags = *(DWORD *)(OSD_pointers + next + 16); |
DWORD next; |
DWORD current; |
DWORD start; |
DWORD size; |
DWORD flags; |
SYS_FLAGS f; |
f = ll_fsave(); |
if (FTrace_enable) { |
f = ll_fsave(); |
next = *(DWORD *)(OSD_pointers); |
current = *(DWORD *)(OSD_pointers + next); |
start = *(DWORD *)(OSD_pointers + next + 4); |
size = *(DWORD *)(OSD_pointers + next + 8); |
flags = *(DWORD *)(OSD_pointers + next + 16); |
if (current == NULL) { |
ll_frestore(f); |
return; |
} |
if (type != FTrace_EVT_next_chunk) { |
if ((flags & FTRACE_CHUNK_FLAG_FULL) == FTRACE_CHUNK_FLAG_FULL) { |
52,7 → 63,7 |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_CYC) { |
current = start; |
} else { |
*(WORD *)(OSD_pointers + next + 16) &= FTRACE_CHUNK_FLAG_FULL; |
*(WORD *)(OSD_pointers + next + 16) |= FTRACE_CHUNK_FLAG_FULL; |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_JTN) { |
*(DWORD *)(OSD_pointers) += 20; |
next = *(DWORD *)(OSD_pointers); |
62,7 → 73,7 |
__asm__("cpuid\n\t" |
"rdtsc\n\t" |
: "=a" (tsclow), "=b" (tschigh) : : "ecx","edx"); |
: "=a" (tsclow), "=d" (tschigh) : : "ecx","ebx"); |
*(DWORD *)current = (DWORD)(type << 16 | par1); |
*(DWORD *)(current + 4) = tschigh; |
73,16 → 84,15 |
} else { |
*(WORD *)(OSD_pointers + next + 16) &= FTRACE_CHUNK_FLAG_FULL; |
if ((flags & 0x0C) == FTRACE_CHUNK_FLAG_JTN) |
*(DWORD *)(OSD_pointers) += 20; |
*(WORD *)(OSD_pointers + next + 16) |= FTRACE_CHUNK_FLAG_FULL; |
*(DWORD *)(OSD_pointers) += 20; |
} |
ll_frestore(f); |
} |
ll_frestore(f); |
} |
void FTrace_unsafe_ipoint(WORD type, WORD par1) |
95,12 → 105,13 |
"cpuid\n\t" |
"rdtsc\n\t" |
"movl (%%edi),%%ebx\n\t" |
"movl %%esi,(%%ebx)\n\t" /* Save TYPE + WORD par1 */ |
"movl %%edx,4(%%ebx)\n\t" /* Save TSC HIGH */ |
"movl %%eax,8(%%ebx)\n\t" /* Save TSC LOW */ |
"addl $12,(%%edi)\n\t" /* Inc Position */ |
"movl %%esi,(%%ebx)\n\t" /* Save TYPE + WORD par1 */ |
"movl %%edx,4(%%ebx)\n\t" /* Save TSC HIGH */ |
"movl %%eax,8(%%ebx)\n\t" /* Save TSC LOW */ |
"movl %%eax,12(%%ebx)\n\t" /* DWORD par2 */ |
"addl $16,(%%edi)\n\t" /* Inc Position */ |
"popfl\n\t" |
:: "D" ((DWORD *)(OSD_pointers)), "S" ((type | 0x8000) << 16 | par1)); |
:: "D" ((DWORD *)(OSD_pointers+4)), "S" ((type | 0x8000) << 16 | par1)); |
} |
/shark/trunk/tracer/newtrace/FTrace.c |
---|
238,6 → 238,7 |
} |
FT_temp->flags = flags; |
FTrace_OSD_update_chunk_flags(FT_temp); |
return 0; |
301,6 → 302,7 |
/* Set as used */ |
FT_temp->flags &= ~FTRACE_CHUNK_FLAG_FREE; |
FTrace_OSD_update_chunk_flags(FT_temp); |
/* Update the actual_chunk and OSD_pointers */ |
FTrace_fsave(); |
401,6 → 403,7 |
if (!(ckB->flags & FTRACE_CHUNK_FLAG_FREE)) { |
ckB->flags &= ~FTRACE_CHUNK_FLAG_FREE; |
FTrace_OSD_update_chunk_flags(ckB); |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: Chunk B is not free\n"); |
#endif |
553,3 → 556,25 |
return 0; |
} |
void FTrace_chunk_dump(int number) { |
FTrace_Chunk_Ptr FT_temp = ChunkTable[number]; |
cprintf("ID = %x\n",FT_temp->id); |
cprintf("NUM = %d\n",FT_temp->number); |
cprintf("FLAGS = %d\n",FT_temp->flags); |
cprintf("SIZE = %d\n",FT_temp->size); |
cprintf("EMERG = %d\n",FT_temp->emergency_size); |
} |
void FTrace_OSD_dump() { |
void *p = OSD_pointers; |
int i; |
for (i=0;i<FTRACE_OSD_CHUNK_HEAD;i+=4) |
cprintf("DATA %d = %x\n",i,*(unsigned int *)(p+i)); |
} |
/shark/trunk/tracer/newtrace/FTrace_OSD.c |
---|
111,12 → 111,21 |
if (delta == 0) return -1; |
memcpy((void *)(a->osd+delta),(void *)(b->osd),20); |
memcpy((void *)(a->osd+delta),(void *)(b->osd+4),20); |
return 0; |
} |
int FTrace_OSD_update_chunk_flags(FTrace_Chunk_Ptr c) |
{ |
*(DWORD *)(c->osd + 20) = (DWORD)(c->flags); |
return 0; |
} |
int FTrace_OSD_load_pointers() |
{ |