Merge v5.14-rc3 into usb-next
[linux-2.6-microblaze.git] / tools / perf / util / session.c
index e59242c..51f7274 100644 (file)
@@ -301,8 +301,12 @@ void perf_session__delete(struct perf_session *session)
        perf_session__release_decomp_events(session);
        perf_env__exit(&session->header.env);
        machines__exit(&session->machines);
-       if (session->data)
+       if (session->data) {
+               if (perf_data__is_read(session->data))
+                       evlist__delete(session->evlist);
                perf_data__close(session->data);
+       }
+       trace_event__cleanup(&session->tevent);
        free(session);
 }
 
@@ -2156,6 +2160,7 @@ struct reader {
        u64              data_size;
        u64              data_offset;
        reader_cb_t      process;
+       bool             in_place_update;
 };
 
 static int
@@ -2189,7 +2194,9 @@ reader__process_events(struct reader *rd, struct perf_session *session,
        mmap_prot  = PROT_READ;
        mmap_flags = MAP_SHARED;
 
-       if (session->header.needs_swap) {
+       if (rd->in_place_update) {
+               mmap_prot  |= PROT_WRITE;
+       } else if (session->header.needs_swap) {
                mmap_prot  |= PROT_WRITE;
                mmap_flags = MAP_PRIVATE;
        }
@@ -2275,6 +2282,7 @@ static int __perf_session__process_events(struct perf_session *session)
                .data_size      = session->header.data_size,
                .data_offset    = session->header.data_offset,
                .process        = process_simple,
+               .in_place_update = session->data->in_place_update,
        };
        struct ordered_events *oe = &session->ordered_events;
        struct perf_tool *tool = session->tool;