• W
    perf evlist: Setup backward mmap state machine · 54cc54de
    Wang Nan 提交于
    Introduce a bkw_mmap_state state machine to evlist:
    
                         .________________(forbid)_____________.
                         |                                     V
     NOTREADY --(0)--> RUNNING --(1)--> DATA_PENDING --(2)--> EMPTY
                         ^  ^              |   ^               |
                         |  |__(forbid)____/   |___(forbid)___/|
                         |                                     |
                          \_________________(3)_______________/
    
     NOTREADY     : Backward ring buffers are not ready
     RUNNING      : Backward ring buffers are recording
     DATA_PENDING : We are required to collect data from backward ring buffers
     EMPTY        : We have collected data from backward ring buffers.
    
     (0): Setup backward ring buffer
     (1): Pause ring buffers for reading
     (2): Read from ring buffers
     (3): Resume ring buffers for recording
    
    We can't avoid this complexity. Since we deliberately drop records from
    overwritable ring buffer, there's no way for us to check remaining from
    ring buffer itself (by checking head and old pointers). Therefore, we
    need DATA_PENDING and EMPTY state to help us recording what we have done
    to the ring buffer.
    
    In record__mmap_read_evlist(), drive this state machine from DATA_PENDING
    to EMPTY.
    
    In perf_evlist__mmap_per_evsel(), drive this state machine from NOTREADY
    to RUNNING when creating backward mmap.
    Signed-off-by: NWang Nan <wangnan0@huawei.com>
    Acked-by: NJiri Olsa <jolsa@kernel.org>
    Cc: He Kuang <hekuang@huawei.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Nilay Vaish <nilayvaish@gmail.com>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1468485287-33422-11-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    54cc54de
evlist.h 12.4 KB