Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 502 → Rev 503

/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()
{