lkml.org 
[lkml]   [2022]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 08/11] tracing/user_events: Use write ABI in example
    Date
    The ABI has changed to use a remote write approach. Update the example
    to show the expected use of this new ABI. Also remove debugfs
    path and use tracefs to ensure example works in more environments.

    Signed-off-by: Beau Belgrave <beaub@linux.microsoft.com>
    ---
    samples/user_events/example.c | 47 +++++++----------------------------
    1 file changed, 9 insertions(+), 38 deletions(-)

    diff --git a/samples/user_events/example.c b/samples/user_events/example.c
    index d06dc24156ec..28165a096697 100644
    --- a/samples/user_events/example.c
    +++ b/samples/user_events/example.c
    @@ -9,51 +9,28 @@
    #include <errno.h>
    #include <sys/ioctl.h>
    #include <sys/mman.h>
    +#include <sys/uio.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <unistd.h>
    -#include <asm/bitsperlong.h>
    -#include <endian.h>
    #include <linux/user_events.h>

    -#if __BITS_PER_LONG == 64
    -#define endian_swap(x) htole64(x)
    -#else
    -#define endian_swap(x) htole32(x)
    -#endif
    +const char *data_file = "/sys/kernel/tracing/user_events_data";
    +int enabled = 0;

    -/* Assumes debugfs is mounted */
    -const char *data_file = "/sys/kernel/debug/tracing/user_events_data";
    -const char *status_file = "/sys/kernel/debug/tracing/user_events_status";
    -
    -static int event_status(long **status)
    -{
    - int fd = open(status_file, O_RDONLY);
    -
    - *status = mmap(NULL, sysconf(_SC_PAGESIZE), PROT_READ,
    - MAP_SHARED, fd, 0);
    -
    - close(fd);
    -
    - if (*status == MAP_FAILED)
    - return -1;
    -
    - return 0;
    -}
    -
    -static int event_reg(int fd, const char *command, long *index, long *mask,
    - int *write)
    +static int event_reg(int fd, const char *command, int *write, int *enabled)
    {
    struct user_reg reg = {0};

    reg.size = sizeof(reg);
    + reg.enable_bit = 31;
    + reg.enable_size = sizeof(*enabled);
    + reg.enable_addr = (__u64)enabled;
    reg.name_args = (__u64)command;

    if (ioctl(fd, DIAG_IOCSREG, &reg) == -1)
    return -1;

    - *index = reg.status_bit / __BITS_PER_LONG;
    - *mask = endian_swap(1L << (reg.status_bit % __BITS_PER_LONG));
    *write = reg.write_index;

    return 0;
    @@ -62,17 +39,12 @@ static int event_reg(int fd, const char *command, long *index, long *mask,
    int main(int argc, char **argv)
    {
    int data_fd, write;
    - long index, mask;
    - long *status_page;
    struct iovec io[2];
    __u32 count = 0;

    - if (event_status(&status_page) == -1)
    - return errno;
    -
    data_fd = open(data_file, O_RDWR);

    - if (event_reg(data_fd, "test u32 count", &index, &mask, &write) == -1)
    + if (event_reg(data_fd, "test u32 count", &write, &enabled) == -1)
    return errno;

    /* Setup iovec */
    @@ -80,13 +52,12 @@ int main(int argc, char **argv)
    io[0].iov_len = sizeof(write);
    io[1].iov_base = &count;
    io[1].iov_len = sizeof(count);
    -
    ask:
    printf("Press enter to check status...\n");
    getchar();

    /* Check if anyone is listening */
    - if (status_page[index] & mask) {
    + if (enabled) {
    /* Yep, trace out our data */
    writev(data_fd, (const struct iovec *)io, 2);

    --
    2.25.1
    \
     
     \ /
      Last update: 2022-12-03 00:52    [W:3.966 / U:0.248 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site