X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=genevent%2Fgenevent.c;h=799be7be3fa1192c2fa982d3b15e348faa915cfe;hb=c902404990f997d6d5476424e68478de7645655d;hp=8aaabbe61477b1b2fec8404bc8763534a6544d0b;hpb=aaa1804290af1f945f0da70cdfe54548b8a72b32;p=lttv.git diff --git a/genevent/genevent.c b/genevent/genevent.c index 8aaabbe6..799be7be 100644 --- a/genevent/genevent.c +++ b/genevent/genevent.c @@ -489,7 +489,10 @@ int print_type_declaration(type_descriptor_t * td, FILE *fd, unsigned int tabs, fprintf(fd, "%s", field->name); fprintf(fd, ";\n"); } - fprintf(fd, "} LTT_ALIGN;\n"); + if(td->fac->align) + fprintf(fd, "} LTT_ALIGN;\n"); + else + fprintf(fd, "};\n"); fprintf(fd, "\n"); break; case UNION: @@ -513,7 +516,10 @@ int print_type_declaration(type_descriptor_t * td, FILE *fd, unsigned int tabs, fprintf(fd, "%s", field->name); fprintf(fd, ";\n"); } - fprintf(fd, "} LTT_ALIGN;\n"); + if(td->fac->align) + fprintf(fd, "} LTT_ALIGN;\n"); + else + fprintf(fd, "};\n"); fprintf(fd, "\n"); break; default: @@ -719,11 +725,14 @@ int print_type_write(type_descriptor_t * td, FILE *fd, unsigned int tabs, case ENUM: print_tabs(tabs, fd); fprintf(fd, "align = "); - if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1; + if(td->fac->align) { + if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1; + } else + fprintf(fd, "0"); fprintf(fd, ";\n"); fprintf(fd, "\n"); print_tabs(tabs, fd); - fprintf(fd, "if(*len == 0) {\n"); + fprintf(fd, "if (*len == 0) {\n"); print_tabs(tabs+1, fd); fprintf(fd, "*to += ltt_align(*to, align); /* align output */\n"); print_tabs(tabs, fd); @@ -842,6 +851,7 @@ int print_type_alignment_fct(type_descriptor_t * td, FILE *fd, unsigned int basename_len = 0; if(td->custom_write) return 0; /* Does print custom type */ + if(td->fac->align == 0) return 0; strncpy(basename, nest_name, PATH_MAX); basename_len = strlen(basename); @@ -1161,9 +1171,9 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "/* Flush pending memcpy */\n"); print_tabs(1, fd); - fprintf(fd, "if(*len != 0) {\n"); + fprintf(fd, "if (*len != 0) {\n"); print_tabs(2, fd); - fprintf(fd, "if(buffer != NULL)\n"); + fprintf(fd, "if (buffer != NULL)\n"); print_tabs(3, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n"); print_tabs(1, fd); @@ -1185,11 +1195,14 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "align = "); - if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1; + if(td->fac->align) { + if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1; + } else + fprintf(fd, "0"); fprintf(fd, ";\n"); fprintf(fd, "\n"); print_tabs(1, fd); - fprintf(fd, "if(*len == 0) {\n"); + fprintf(fd, "if (*len == 0) {\n"); print_tabs(2, fd); fprintf(fd, "*to += ltt_align(*to, align); /* align output */\n"); print_tabs(1, fd); @@ -1230,7 +1243,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, // print_tabs(1, fd); // fprintf(fd, "*to += ltt_align(*to, size);\n"); print_tabs(1, fd); - fprintf(fd, "if(buffer != NULL)\n"); + fprintf(fd, "if (buffer != NULL)\n"); print_tabs(2, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, &obj->len, *len);\n"); print_tabs(1, fd); @@ -1256,7 +1269,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "*len = obj->len * (*len);\n"); print_tabs(1, fd); - fprintf(fd, "if(buffer != NULL)\n"); + fprintf(fd, "if (buffer != NULL)\n"); print_tabs(2, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, obj->array, *len);\n"); print_tabs(1, fd); @@ -1268,7 +1281,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "/* Variable length child : iter. */\n"); print_tabs(1, fd); - fprintf(fd, "for(unsigned int i=0; ilen; i++) {\n"); + fprintf(fd, "for (unsigned int i = 0; i < obj->len; i++) {\n"); if(print_type_write(((field_t*)td->fields.array[1])->type, fd, 2, basename, "array[i]", "obj->", 1)) return 1; print_tabs(1, fd); @@ -1278,7 +1291,8 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "/* Realign the *to_base on arch size, set *to to 0 */\n"); print_tabs(1, fd); - fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n"); + if(td->fac->align) + fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n"); print_tabs(1, fd); fprintf(fd, "*to_base = *to_base+*to;\n"); print_tabs(1, fd); @@ -1293,7 +1307,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "size = strlen(obj) + 1; /* Include final NULL char. */\n"); print_tabs(1, fd); - fprintf(fd, "if(buffer != NULL)\n"); + fprintf(fd, "if (buffer != NULL)\n"); print_tabs(2, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, obj, size);\n"); print_tabs(1, fd); @@ -1302,7 +1316,8 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "/* Realign the *to_base on arch size, set *to to 0 */\n"); print_tabs(1, fd); - fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n"); + if(td->fac->align) + fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n"); print_tabs(1, fd); fprintf(fd, "*to_base = *to_base+*to;\n"); print_tabs(1, fd); @@ -1336,7 +1351,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs, print_tabs(1, fd); fprintf(fd, "/* Variable length child : iter. */\n"); print_tabs(1, fd); - fprintf(fd, "for(unsigned int i=0; ifields.array[0])->type, fd, 2, basename, "", "obj->array[i]", 1)) return 1; print_tabs(1, fd); @@ -1464,9 +1479,13 @@ int print_event_logging_function(char *basename, facility_t *fac, fprintf(fd, "size_t before_hdr_pad, after_hdr_pad, header_size;\n"); fprintf(fd, "\n"); - print_tabs(1, fd); - fprintf(fd, "if(ltt_traces.num_active_traces == 0) return;\n"); - fprintf(fd, "\n"); + if(!event->force) { + print_tabs(1, fd); + fprintf(fd, "if (ltt_traces.num_active_traces == 0)\n"); + print_tabs(2, fd); + fprintf(fd, "return;\n"); + fprintf(fd, "\n"); + } /* Calculate event variable len + event data alignment offset. * Assume that the padding for alignment starts at a void* @@ -1533,12 +1552,18 @@ int print_event_logging_function(char *basename, facility_t *fac, /* For each trace */ print_tabs(1, fd); fprintf(fd, "list_for_each_entry_rcu(trace, <t_traces.head, list) {\n"); - print_tabs(2, fd); - fprintf(fd, "if(!trace->active) continue;\n\n"); + if(!event->force) { + print_tabs(2, fd); + fprintf(fd, "if (!trace->active)\n"); + print_tabs(3, fd); + fprintf(fd, "continue;\n\n"); + } if(event->per_trace) { print_tabs(2, fd); - fprintf(fd, "if(dest_trace != trace) continue;\n\n"); + fprintf(fd, "if (dest_trace != trace)\n"); + print_tabs(3, fd); + fprintf(fd, "continue;\n\n"); } print_tabs(2, fd); @@ -1559,7 +1584,9 @@ int print_event_logging_function(char *basename, facility_t *fac, fprintf(fd, "&before_hdr_pad, &after_hdr_pad, &header_size);\n"); /* If error, return */ print_tabs(2, fd); - fprintf(fd, "if(!buffer) continue; /* buffer full */\n\n"); + fprintf(fd, "if (!buffer)\n"); + print_tabs(3, fd); + fprintf(fd, "continue; /* buffer full */\n\n"); //print_tabs(2, fd); // for DEBUG only // fprintf(fd, "goto commit; /* DEBUG : never actually write. */\n\n"); @@ -1568,13 +1595,29 @@ int print_event_logging_function(char *basename, facility_t *fac, fprintf(fd, "\n"); /* Write event header */ - print_tabs(2, fd); - fprintf(fd, "ltt_write_event_header(trace, channel, buffer,\n"); - print_tabs(3, fd); - fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum, - fac->name, event->name); - print_tabs(3, fd); - fprintf(fd, "reserve_size, before_hdr_pad, tsc);\n"); + if(strcmp("compact", fac->name) != 0) { + print_tabs(2, fd); + fprintf(fd, "ltt_write_event_header(trace, channel, buffer,\n"); + print_tabs(3, fd); + fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum, + fac->name, event->name); + print_tabs(3, fd); + fprintf(fd, "reserve_size, before_hdr_pad, tsc);\n"); + } else { + print_tabs(2, fd); + fprintf(fd, "ltt_write_compact_header(trace, channel, buffer,\n"); + print_tabs(3, fd); + fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum, + fac->name, event->name); + print_tabs(3, fd); + if(event->compact_data) { + assert(event->fields.position > 0); + field_t *field = (field_t*)(event->fields.array[0]); + fprintf(fd, "reserve_size, before_hdr_pad, tsc, lttng_param_%s);\n", + field->name); + } else + fprintf(fd, "reserve_size, before_hdr_pad, tsc, 0);\n"); + } print_tabs(2, fd); fprintf(fd, "*to_base += before_hdr_pad + after_hdr_pad + header_size;\n"); fprintf(fd, "\n"); @@ -1584,7 +1627,10 @@ int print_event_logging_function(char *basename, facility_t *fac, for(unsigned int i=0;ifields.position;i++){ field_t *field = (field_t*)(event->fields.array[i]); type_descriptor_t *type = field->type; - + + /* First param is compacted in the header */ + if(event->compact_data && i == 0) + continue; /* Set from */ print_tabs(2, fd); switch(type->type) { @@ -1609,7 +1655,7 @@ int print_event_logging_function(char *basename, facility_t *fac, print_tabs(2, fd); fprintf(fd, "/* Flush pending memcpy */\n"); print_tabs(2, fd); - fprintf(fd, "if(*len != 0) {\n"); + fprintf(fd, "if (*len != 0) {\n"); print_tabs(3, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n"); print_tabs(3, fd); @@ -1637,7 +1683,7 @@ int print_event_logging_function(char *basename, facility_t *fac, print_tabs(1, fd); fprintf(fd, "ltt_nesting[smp_processor_id()]--;\n"); print_tabs(1, fd); - fprintf(fd, "preempt_enable_no_resched();\n"); + fprintf(fd, "preempt_enable();\n"); fprintf(fd, "}\n"); #if 0 @@ -1855,7 +1901,7 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac, print_tabs(2, fd); fprintf(fd, "/* Flush pending memcpy */\n"); print_tabs(2, fd); - fprintf(fd, "if(*len != 0) {\n"); + fprintf(fd, "if (*len != 0) {\n"); print_tabs(3, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n"); print_tabs(3, fd); @@ -1982,7 +2028,7 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac, fprintf(fd, "\n"); print_tabs(1, fd); - fprintf(fd, "if(!trace) {\n"); + fprintf(fd, "if (!trace) {\n"); print_tabs(2, fd); fprintf(fd, "ltt_thread_init();\n"); print_tabs(2, fd); @@ -2049,7 +2095,7 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac, if(event->per_trace) { print_tabs(2, fd); - fprintf(fd, "if(dest_trace != trace) continue;\n\n"); + fprintf(fd, "if (dest_trace != trace) continue;\n\n"); } print_tabs(2, fd); @@ -2070,7 +2116,9 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac, fprintf(fd, "&before_hdr_pad, &after_hdr_pad, &header_size);\n"); /* If error, return */ print_tabs(2, fd); - fprintf(fd, "if(!buffer) goto end; /* buffer full */\n\n"); + fprintf(fd, "if (!buffer)\n"); + print_tabs(3, fd); + fprintf(fd, "goto end; /* buffer full */\n\n"); //print_tabs(2, fd); // for DEBUG only // fprintf(fd, "goto commit; /* DEBUG : never actually write. */\n\n"); @@ -2120,7 +2168,7 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac, print_tabs(2, fd); fprintf(fd, "/* Flush pending memcpy */\n"); print_tabs(2, fd); - fprintf(fd, "if(*len != 0) {\n"); + fprintf(fd, "if (*len != 0) {\n"); print_tabs(3, fd); fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n"); print_tabs(3, fd); @@ -2214,7 +2262,8 @@ int print_log_header_types(facility_t *fac, FILE *fd) if(print_type_declaration(types->array[i], fd, 0, "", "")) return 1; /* Print also the align function */ - if(print_type_alignment_fct(types->array[i], fd, + if(((type_descriptor_t*)types->array[i])->fac->align) + if(print_type_alignment_fct(types->array[i], fd, 0, "", "")) return 1; /* Print also the write function */ if(print_type_write_fct(types->array[i], fd, @@ -2248,7 +2297,9 @@ int print_log_header_events(facility_t *fac, FILE *fd) if(t->type_name == NULL) { if((print_type_declaration(t, fd, 0, basename, f->name))) return 1; /* Print also the align function */ - if((print_type_alignment_fct(t, fd, 0, basename, f->name))) return 1; + if(fac->align) { + if((print_type_alignment_fct(t, fd, 0, basename, f->name))) return 1; + } /* Print also the write function */ if((print_type_write_fct(t, fd, 0, basename, f->name))) return 1; } @@ -2518,6 +2569,8 @@ int print_loader_header(facility_t *fac) fprintf(fd,"#define LTT_FACILITY_NAME\t\t\"%s\"\n", fac->name); fprintf(fd,"#define LTT_FACILITY_NUM_EVENTS\tfacility_%s_num_events\n\n", fac->name); + fprintf(fd,"#define LTT_FACILITY_ALIGNMENT\t\t%u\n\n", + fac->align); fprintf(fd, "#endif //CONFIG_LTT\n\n"); fprintf(fd, "#endif //_LTT_FACILITY_LOADER_%s_H_\n", fac->capname); @@ -2580,6 +2633,8 @@ int print_loader_header_user(facility_t *fac) fprintf(fd,"#define LTT_FACILITY_NAME\t\t\t\t\t\t\t\t\"%s\"\n", fac->name); fprintf(fd,"#define LTT_FACILITY_NUM_EVENTS\t\t\t\t\tfacility_%s_num_events\n\n", fac->name); + fprintf(fd,"#define LTT_FACILITY_ALIGNMENT\t\t\t\t\t%u\n\n", + fac->align); fprintf(fd, "#endif //_LTT_FACILITY_LOADER_%s_H_\n", fac->capname); fclose(fd); @@ -2640,7 +2695,6 @@ int print_loader_c(facility_t *fac) fprintf(fd, "#include \n"); fprintf(fd, "#include \n"); fprintf(fd, "#include \n"); - fprintf(fd, "#include \n"); if(!fac->arch) fprintf(fd, "#include \"ltt-facility-loader-%s.h\"\n", fac->name); else @@ -2662,6 +2716,7 @@ int print_loader_c(facility_t *fac) fprintf(fd, "\t.num_events = LTT_FACILITY_NUM_EVENTS,\n"); fprintf(fd, "\t.checksum = LTT_FACILITY_CHECKSUM,\n"); fprintf(fd, "\t.symbol = SYMBOL_STRING(LTT_FACILITY_SYMBOL),\n"); + fprintf(fd, "\t.alignment = LTT_FACILITY_ALIGNMENT,\n"); fprintf(fd, "};\n"); fprintf(fd, "\n"); fprintf(fd, "static int __init facility_init(void)\n"); @@ -2683,7 +2738,7 @@ int print_loader_c(facility_t *fac) fprintf(fd, "\tint err;\n"); fprintf(fd, "\n"); fprintf(fd, "\terr = ltt_facility_unregister(LTT_FACILITY_SYMBOL);\n"); - fprintf(fd, "\tif(err != 0)\n"); + fprintf(fd, "\tif (err != 0)\n"); fprintf(fd, "\t\tprintk(KERN_ERR \"LTT : Error in unregistering facility.\\n\");\n"); fprintf(fd, "\n"); fprintf(fd, "}\n"); @@ -2762,7 +2817,7 @@ int print_loader_c_user(facility_t *fac) fprintf(fd, "\t.name = LTT_FACILITY_NAME,\n"); fprintf(fd, "\t.num_events = LTT_FACILITY_NUM_EVENTS,\n"); fprintf(fd, "#ifndef LTT_PACK\n"); - fprintf(fd, "\t.alignment = sizeof(void*),\n"); + fprintf(fd, "\t.alignment = LTT_FACILITY_ALIGNMENT?sizeof(void*):0,\n"); fprintf(fd, "#else\n"); fprintf(fd, "\t.alignment = 0,\n"); fprintf(fd, "#endif //LTT_PACK\n"); @@ -2783,7 +2838,7 @@ int print_loader_c_user(facility_t *fac) fprintf(fd, "\terr = ltt_register_generic(<T_FACILITY_SYMBOL, &facility);\n"); fprintf(fd, "\tLTT_FACILITY_CHECKSUM_SYMBOL = LTT_FACILITY_SYMBOL;\n"); fprintf(fd, "\t\n"); - fprintf(fd, "\tif(err) {\n"); + fprintf(fd, "\tif (err) {\n"); fprintf(fd, "#ifdef LTT_SHOW_DEBUG\n"); fprintf(fd, "\t\tperror(\"Error in ltt_register_generic\");\n"); fprintf(fd, "#endif //LTT_SHOW_DEBUG\n");