perf tools: Support arch specific PERF_SAMPLE_WEIGHT_STRUCT processing
[linux-2.6-microblaze.git] / tools / perf / arch / x86 / util / event.c
index 047dc00..9b31734 100644 (file)
@@ -75,3 +75,28 @@ int perf_event__synthesize_extra_kmaps(struct perf_tool *tool,
 }
 
 #endif
+
+void arch_perf_parse_sample_weight(struct perf_sample *data,
+                                  const __u64 *array, u64 type)
+{
+       union perf_sample_weight weight;
+
+       weight.full = *array;
+       if (type & PERF_SAMPLE_WEIGHT)
+               data->weight = weight.full;
+       else {
+               data->weight = weight.var1_dw;
+               data->ins_lat = weight.var2_w;
+       }
+}
+
+void arch_perf_synthesize_sample_weight(const struct perf_sample *data,
+                                       __u64 *array, u64 type)
+{
+       *array = data->weight;
+
+       if (type & PERF_SAMPLE_WEIGHT_STRUCT) {
+               *array &= 0xffffffff;
+               *array |= ((u64)data->ins_lat << 32);
+       }
+}