9,8 → 9,8 |
FTrace_Chunk_Ptr ChunkTable[MAX_CHUNK]; /* Chunk array */ |
FTrace_Chunk_Ptr ActualChunk = NULL; /* Actual Chunk */ |
|
/* Global Pointers */ |
BYTE OSD_pointers[FTRACE_OSD_CHUNK_HEAD]; |
/* OSD Pointer */ |
void *OSD_current_pointer; |
|
int FTraceInit = 0; |
int FTraceEnable = 0; |
63,7 → 63,7 |
|
FTrace_lock(); |
|
memset(OSD_pointers,0,sizeof(OSD_pointers)); |
OSD_current_pointer = NULL; |
|
for (i = 0;i < MAX_CHUNK;i++) |
ChunkTable[i] = NULL; |
114,11 → 114,11 |
|
} |
|
int FTrace_chunk_create(int n, int size, int emergency_size, FTrace_flags flags) |
int FTrace_chunk_create(int size, int emergency_size, FTrace_flags flags) |
{ |
|
FTrace_Chunk_Ptr FT_temp; |
int i, number, err; |
int number, err; |
|
FTrace_lock(); |
|
133,48 → 133,44 |
} |
} |
|
for (i = 0;i < n;i++) { |
number = FTrace_find_free_slot(); |
if (number == -1) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: cannot find free slot for chunk\n"); |
#endif |
FTrace_unlock(); |
return -1; |
} |
|
number = FTrace_find_free_slot(); |
if (number == -1) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: cannot find free slot for chunk\n"); |
#endif |
FTrace_unlock(); |
return -1; |
} |
FT_temp = (FTrace_Chunk_Ptr)FTrace_malloc(sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size); |
if (FT_temp == NULL) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: cannot allocate memory for chunk\n"); |
#endif |
FTrace_unlock(); |
return -1; |
} |
|
FT_temp = (FTrace_Chunk_Ptr)FTrace_malloc(sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size); |
if (FT_temp == NULL) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: cannot allocate memory for chunk\n"); |
#endif |
FTrace_unlock(); |
return -1; |
} |
memset(FT_temp,0,sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size); |
|
memset(FT_temp,0,sizeof(struct FTrace_Chunk) + FTRACE_OSD_CHUNK_HEAD + size + emergency_size); |
err = FTrace_chunk_init(FT_temp, number, size, emergency_size, flags); |
if (err != 0) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: cannot initialized the new chunk\n"); |
#endif |
FTrace_unlock(); |
return -1; |
} |
|
err = FTrace_chunk_init(FT_temp, number, size, emergency_size, flags); |
if (err != 0) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: cannot initialized the new chunk\n"); |
#endif |
FTrace_unlock(); |
return -1; |
} |
/* Set the ChunkTable */ |
ChunkTable[number] = FT_temp; |
|
/* Set the ChunkTable */ |
ChunkTable[number] = FT_temp; |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Debug: Chunk %d created at addr %x\n",number,(int)FT_temp); |
#endif |
|
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Debug: Chunk %d created at addr %x\n",number,(int)FT_temp); |
#endif |
|
} |
|
FTrace_unlock(); |
return 0; |
return number; |
|
} |
|
269,9 → 265,11 |
FTrace_unlock(); |
return -1; |
} |
|
*flags = FT_temp->flags; |
|
|
FTrace_OSD_update_chunk_flags(FT_temp); *flags = FT_temp->flags; |
|
FTrace_unlock(); |
|
return 0; |
|
} |
308,9 → 306,8 |
|
/* Update the actual_chunk and OSD_pointers */ |
FTrace_fsave(); |
FTrace_OSD_save_pointers(); |
ActualChunk = FT_temp; |
FTrace_OSD_load_pointers(); |
OSD_current_pointer = (void *)FT_temp->osd; |
FTrace_frestore(); |
|
} else { |
369,7 → 366,7 |
} |
|
/* Link two chunks */ |
int FTrace_chunk_link(int chunk_A, int chunk_B, int osd_flags) |
int FTrace_chunk_link(int chunk_A, int chunk_B) |
{ |
|
FTrace_Chunk_Ptr ckA = ChunkTable[chunk_A]; |
415,9 → 412,7 |
|
/* FTrace Low Level Blocking Part */ |
FTrace_fsave(); |
FTrace_OSD_save_pointers(); |
|
err = FTrace_OSD_chunk_link(ckA,ckB,osd_flags); |
err = FTrace_OSD_chunk_link(ckA,ckB); |
if (err != 0) { |
#ifdef FTRACE_DEBUG |
FTrace_printf("FTrace Error: Cannot link the chunks\n"); |
424,8 → 419,6 |
#endif |
return -1; |
} |
|
FTrace_OSD_load_pointers(); |
FTrace_frestore(); |
|
FTrace_unlock(); |
434,25 → 427,6 |
|
} |
|
/* Update the OSD of actual chunk */ |
int FTrace_update_actual_chunk() |
{ |
|
FTrace_lock(); |
|
if (ActualChunk == NULL) return 0; |
|
FTrace_fsave(); |
FTrace_OSD_save_pointers(); |
FTrace_frestore(); |
|
FTrace_unlock(); |
|
return 0; |
|
} |
|
|
/* Create a new memory region where the compressed data are stored */ |
int FTrace_compress_chunk(int number, FTrace_flags new_flags) |
{ |
581,11 → 555,7 |
void FTrace_chunk_dump(int number) { |
|
FTrace_Chunk_Ptr FT_temp = ChunkTable[number]; |
int i,t; |
DWORD p; |
|
FTrace_update_actual_chunk(); |
|
cprintf("ID = %x\n",FT_temp->id); |
cprintf("NUM = %d\n",FT_temp->number); |
cprintf("FLAGS = %d\n",FT_temp->flags); |
592,25 → 562,5 |
cprintf("SIZE = %d\n",FT_temp->size); |
cprintf("EMERG = %d\n",FT_temp->emergency_size); |
|
for (i=0; i<0xFF; i++) { |
p = *(DWORD *)(FT_temp->osd + 8); |
t = 0; |
while((p + 16) < *(DWORD *)(FT_temp->osd + 8) + *(DWORD *)(FT_temp->osd + 12)) { |
if (*(WORD *)(p+2) == i) t++; |
p += 16; |
} |
if (t != 0) |
cprintf("Event type %02x => %d\n",i,t); |
} |
|
} |
|
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)); |
|
} |