root/tools/perf/lib/lib.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ion
  2. readn
  3. writen

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <unistd.h>
   3 #include <stdbool.h>
   4 #include <errno.h>
   5 #include <linux/kernel.h>
   6 #include <internal/lib.h>
   7 
   8 unsigned int page_size;
   9 
  10 static ssize_t ion(bool is_read, int fd, void *buf, size_t n)
  11 {
  12         void *buf_start = buf;
  13         size_t left = n;
  14 
  15         while (left) {
  16                 /* buf must be treated as const if !is_read. */
  17                 ssize_t ret = is_read ? read(fd, buf, left) :
  18                                         write(fd, buf, left);
  19 
  20                 if (ret < 0 && errno == EINTR)
  21                         continue;
  22                 if (ret <= 0)
  23                         return ret;
  24 
  25                 left -= ret;
  26                 buf  += ret;
  27         }
  28 
  29         BUG_ON((size_t)(buf - buf_start) != n);
  30         return n;
  31 }
  32 
  33 /*
  34  * Read exactly 'n' bytes or return an error.
  35  */
  36 ssize_t readn(int fd, void *buf, size_t n)
  37 {
  38         return ion(true, fd, buf, n);
  39 }
  40 
  41 /*
  42  * Write exactly 'n' bytes or return an error.
  43  */
  44 ssize_t writen(int fd, const void *buf, size_t n)
  45 {
  46         /* ion does not modify buf. */
  47         return ion(false, fd, (void *)buf, n);
  48 }

/* [<][>][^][v][top][bottom][index][help] */