Add RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS command
[lttng-modules.git] / lib / ringbuffer / ring_buffer_vfs.c
index f1a8bab781cd2f5829c552067eefdb2365c1f2e7..274e976c974ecacf4edf293f648a428448bf8f55 100644 (file)
@@ -191,8 +191,20 @@ long lib_ring_buffer_ioctl(struct file *filp, unsigned int cmd,
 
        switch (cmd) {
        case RING_BUFFER_SNAPSHOT:
+               /*
+                * First, ensure we perform a "final" flush onto the
+                * stream.  This will ensure we create a packet of
+                * padding if we encounter an empty packet. This ensures
+                * the time-stamps right before the snapshot is used as
+                * end of packet timestamp.
+                */
+               if (!buf->quiescent)
+                       lib_ring_buffer_switch_remote_empty(buf);
                return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot,
                                            &buf->prod_snapshot);
+       case RING_BUFFER_SNAPSHOT_SAMPLE_POSITIONS:
+               return lib_ring_buffer_snapshot_sample_positions(buf,
+                               &buf->cons_snapshot, &buf->prod_snapshot);
        case RING_BUFFER_SNAPSHOT_GET_CONSUMED:
                return put_ulong(buf->cons_snapshot, arg);
        case RING_BUFFER_SNAPSHOT_GET_PRODUCED:
@@ -320,8 +332,20 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
 
        switch (cmd) {
        case RING_BUFFER_COMPAT_SNAPSHOT:
+               /*
+                * First, ensure we perform a "final" flush onto the
+                * stream.  This will ensure we create a packet of
+                * padding if we encounter an empty packet. This ensures
+                * the time-stamps right before the snapshot is used as
+                * end of packet timestamp.
+                */
+               if (!buf->quiescent)
+                       lib_ring_buffer_switch_remote_empty(buf);
                return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot,
                                                &buf->prod_snapshot);
+       case RING_BUFFER_COMPAT_SNAPSHOT_SAMPLE_POSITIONS:
+               return lib_ring_buffer_snapshot_sample_positions(buf,
+                               &buf->cons_snapshot, &buf->prod_snapshot);
        case RING_BUFFER_COMPAT_SNAPSHOT_GET_CONSUMED:
                return compat_put_ulong(buf->cons_snapshot, arg);
        case RING_BUFFER_COMPAT_SNAPSHOT_GET_PRODUCED:
This page took 0.02379 seconds and 4 git commands to generate.