~ubuntu-branches/ubuntu/saucy/linux-ti-omap4/saucy-proposed

« back to all changes in this revision

Viewing changes to tools/perf/util/header.c

  • Committer: Package Import Robot
  • Author(s): Paolo Pisati, Paolo Pisati, Stefan Bader, Upstream Kernel Changes
  • Date: 2012-08-15 17:17:43 UTC
  • Revision ID: package-import@ubuntu.com-20120815171743-h5wnuf51xe7pvdid
Tags: 3.5.0-207.13
[ Paolo Pisati ]

* Start new release

[ Stefan Bader ]

* (config) Enable getabis to use local package copies

[ Upstream Kernel Changes ]

* fixup: gargabe collect iva_seq[0|1] init
* [Config] enable all SND_OMAP_SOC_*s
* fixup: cm2xxx_3xxx.o is needed for omap2_cm_read|write_reg
* fixup: add some snd_soc_dai* helper functions
* fixup: s/snd_soc_dpcm_params/snd_soc_dpcm/g
* fixup: typo, no_host_mode and useless SDP4430 init
* fixup: enable again aess hwmod

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
int perf_header__push_event(u64 id, const char *name)
33
33
{
 
34
        struct perf_trace_event_type *nevents;
 
35
 
34
36
        if (strlen(name) > MAX_EVENT_NAME)
35
37
                pr_warning("Event %s will be truncated\n", name);
36
38
 
37
 
        if (!events) {
38
 
                events = malloc(sizeof(struct perf_trace_event_type));
39
 
                if (events == NULL)
40
 
                        return -ENOMEM;
41
 
        } else {
42
 
                struct perf_trace_event_type *nevents;
 
39
        nevents = realloc(events, (event_count + 1) * sizeof(*events));
 
40
        if (nevents == NULL)
 
41
                return -ENOMEM;
 
42
        events = nevents;
43
43
 
44
 
                nevents = realloc(events, (event_count + 1) * sizeof(*events));
45
 
                if (nevents == NULL)
46
 
                        return -ENOMEM;
47
 
                events = nevents;
48
 
        }
49
44
        memset(&events[event_count], 0, sizeof(struct perf_trace_event_type));
50
45
        events[event_count].event_id = id;
51
46
        strncpy(events[event_count].name, name, MAX_EVENT_NAME - 1);
442
437
        return ret;
443
438
}
444
439
 
445
 
static int write_trace_info(int fd, struct perf_header *h __used,
 
440
static int write_tracing_data(int fd, struct perf_header *h __used,
446
441
                            struct perf_evlist *evlist)
447
442
{
448
443
        return read_tracing_data(fd, &evlist->entries);
1477
1472
        return err;
1478
1473
}
1479
1474
 
1480
 
static int process_trace_info(struct perf_file_section *section __unused,
 
1475
static int process_tracing_data(struct perf_file_section *section __unused,
1481
1476
                              struct perf_header *ph __unused,
1482
1477
                              int feat __unused, int fd)
1483
1478
{
1513
1508
                .full_only = true }
1514
1509
 
1515
1510
/* feature_ops not implemented: */
1516
 
#define print_trace_info                NULL
1517
 
#define print_build_id                  NULL
 
1511
#define print_tracing_data      NULL
 
1512
#define print_build_id          NULL
1518
1513
 
1519
1514
static const struct feature_ops feat_ops[HEADER_LAST_FEATURE] = {
1520
 
        FEAT_OPP(HEADER_TRACE_INFO,     trace_info),
 
1515
        FEAT_OPP(HEADER_TRACING_DATA,   tracing_data),
1521
1516
        FEAT_OPP(HEADER_BUILD_ID,       build_id),
1522
1517
        FEAT_OPA(HEADER_HOSTNAME,       hostname),
1523
1518
        FEAT_OPA(HEADER_OSRELEASE,      osrelease),
1947
1942
                else
1948
1943
                        return -1;
1949
1944
        } else if (ph->needs_swap) {
1950
 
                unsigned int i;
1951
1945
                /*
1952
1946
                 * feature bitmap is declared as an array of unsigned longs --
1953
1947
                 * not good since its size can differ between the host that
1963
1957
                 * file), punt and fallback to the original behavior --
1964
1958
                 * clearing all feature bits and setting buildid.
1965
1959
                 */
1966
 
                for (i = 0; i < BITS_TO_LONGS(HEADER_FEAT_BITS); ++i)
1967
 
                        header->adds_features[i] = bswap_64(header->adds_features[i]);
 
1960
                mem_bswap_64(&header->adds_features,
 
1961
                            BITS_TO_U64(HEADER_FEAT_BITS));
1968
1962
 
1969
1963
                if (!test_bit(HEADER_HOSTNAME, header->adds_features)) {
1970
 
                        for (i = 0; i < BITS_TO_LONGS(HEADER_FEAT_BITS); ++i) {
1971
 
                                header->adds_features[i] = bswap_64(header->adds_features[i]);
1972
 
                                header->adds_features[i] = bswap_32(header->adds_features[i]);
1973
 
                        }
 
1964
                        /* unswap as u64 */
 
1965
                        mem_bswap_64(&header->adds_features,
 
1966
                                    BITS_TO_U64(HEADER_FEAT_BITS));
 
1967
 
 
1968
                        /* unswap as u32 */
 
1969
                        mem_bswap_32(&header->adds_features,
 
1970
                                    BITS_TO_U32(HEADER_FEAT_BITS));
1974
1971
                }
1975
1972
 
1976
1973
                if (!test_bit(HEADER_HOSTNAME, header->adds_features)) {
2096
2093
        return ret <= 0 ? -1 : 0;
2097
2094
}
2098
2095
 
 
2096
static int perf_evsel__set_tracepoint_name(struct perf_evsel *evsel)
 
2097
{
 
2098
        struct event_format *event = trace_find_event(evsel->attr.config);
 
2099
        char bf[128];
 
2100
 
 
2101
        if (event == NULL)
 
2102
                return -1;
 
2103
 
 
2104
        snprintf(bf, sizeof(bf), "%s:%s", event->system, event->name);
 
2105
        evsel->name = strdup(bf);
 
2106
        if (event->name == NULL)
 
2107
                return -1;
 
2108
 
 
2109
        return 0;
 
2110
}
 
2111
 
 
2112
static int perf_evlist__set_tracepoint_names(struct perf_evlist *evlist)
 
2113
{
 
2114
        struct perf_evsel *pos;
 
2115
 
 
2116
        list_for_each_entry(pos, &evlist->entries, node) {
 
2117
                if (pos->attr.type == PERF_TYPE_TRACEPOINT &&
 
2118
                    perf_evsel__set_tracepoint_name(pos))
 
2119
                        return -1;
 
2120
        }
 
2121
 
 
2122
        return 0;
 
2123
}
 
2124
 
2099
2125
int perf_session__read_header(struct perf_session *session, int fd)
2100
2126
{
2101
2127
        struct perf_header *header = &session->header;
2177
2203
 
2178
2204
        lseek(fd, header->data_offset, SEEK_SET);
2179
2205
 
 
2206
        if (perf_evlist__set_tracepoint_names(session->evlist))
 
2207
                goto out_delete_evlist;
 
2208
 
2180
2209
        header->frozen = 1;
2181
2210
        return 0;
2182
2211
out_errno: