/linux-4.4.14/tools/lib/api/fd/ |
H A D | array.c | 13 void fdarray__init(struct fdarray *fda, int nr_autogrow) fdarray__init() argument 15 fda->entries = NULL; fdarray__init() 16 fda->priv = NULL; fdarray__init() 17 fda->nr = fda->nr_alloc = 0; fdarray__init() 18 fda->nr_autogrow = nr_autogrow; fdarray__init() 21 int fdarray__grow(struct fdarray *fda, int nr) fdarray__grow() argument 24 int nr_alloc = fda->nr_alloc + nr; fdarray__grow() 25 size_t psize = sizeof(fda->priv[0]) * nr_alloc; fdarray__grow() 27 struct pollfd *entries = realloc(fda->entries, size); fdarray__grow() 32 priv = realloc(fda->priv, psize); fdarray__grow() 38 fda->nr_alloc = nr_alloc; fdarray__grow() 39 fda->entries = entries; fdarray__grow() 40 fda->priv = priv; fdarray__grow() 46 struct fdarray *fda = calloc(1, sizeof(*fda)); fdarray__new() local 48 if (fda != NULL) { fdarray__new() 49 if (fdarray__grow(fda, nr_alloc)) { fdarray__new() 50 free(fda); fdarray__new() 51 fda = NULL; fdarray__new() 53 fda->nr_autogrow = nr_autogrow; fdarray__new() 57 return fda; fdarray__new() 60 void fdarray__exit(struct fdarray *fda) fdarray__exit() argument 62 free(fda->entries); fdarray__exit() 63 free(fda->priv); fdarray__exit() 64 fdarray__init(fda, 0); fdarray__exit() 67 void fdarray__delete(struct fdarray *fda) fdarray__delete() argument 69 fdarray__exit(fda); fdarray__delete() 70 free(fda); fdarray__delete() 73 int fdarray__add(struct fdarray *fda, int fd, short revents) fdarray__add() argument 75 int pos = fda->nr; fdarray__add() 77 if (fda->nr == fda->nr_alloc && fdarray__add() 78 fdarray__grow(fda, fda->nr_autogrow) < 0) fdarray__add() 81 fda->entries[fda->nr].fd = fd; fdarray__add() 82 fda->entries[fda->nr].events = revents; fdarray__add() 83 fda->nr++; fdarray__add() 87 int fdarray__filter(struct fdarray *fda, short revents, fdarray__filter() argument 88 void (*entry_destructor)(struct fdarray *fda, int fd)) fdarray__filter() 92 if (fda->nr == 0) fdarray__filter() 95 for (fd = 0; fd < fda->nr; ++fd) { fdarray__filter() 96 if (fda->entries[fd].revents & revents) { fdarray__filter() 98 entry_destructor(fda, fd); fdarray__filter() 104 fda->entries[nr] = fda->entries[fd]; fdarray__filter() 105 fda->priv[nr] = fda->priv[fd]; fdarray__filter() 111 return fda->nr = nr; fdarray__filter() 114 int fdarray__poll(struct fdarray *fda, int timeout) fdarray__poll() argument 116 return poll(fda->entries, fda->nr, timeout); fdarray__poll() 119 int fdarray__fprintf(struct fdarray *fda, FILE *fp) fdarray__fprintf() argument 121 int fd, printed = fprintf(fp, "%d [ ", fda->nr); fdarray__fprintf() 123 for (fd = 0; fd < fda->nr; ++fd) fdarray__fprintf() 124 printed += fprintf(fp, "%s%d", fd ? ", " : "", fda->entries[fd].fd); fdarray__fprintf()
|
H A D | array.h | 15 * I.e. using 'fda->priv[N].idx = * value' where N < fda->nr is ok, 16 * but doing 'fda->priv = malloc(M)' is not allowed. 28 void fdarray__init(struct fdarray *fda, int nr_autogrow); 29 void fdarray__exit(struct fdarray *fda); 32 void fdarray__delete(struct fdarray *fda); 34 int fdarray__add(struct fdarray *fda, int fd, short revents); 35 int fdarray__poll(struct fdarray *fda, int timeout); 36 int fdarray__filter(struct fdarray *fda, short revents, 37 void (*entry_destructor)(struct fdarray *fda, int fd)); 38 int fdarray__grow(struct fdarray *fda, int extra); 39 int fdarray__fprintf(struct fdarray *fda, FILE *fp); 41 static inline int fdarray__available_entries(struct fdarray *fda) fdarray__available_entries() argument 43 return fda->nr_alloc - fda->nr; fdarray__available_entries()
|
/linux-4.4.14/tools/perf/tests/ |
H A D | fdarray.c | 5 static void fdarray__init_revents(struct fdarray *fda, short revents) fdarray__init_revents() argument 9 fda->nr = fda->nr_alloc; fdarray__init_revents() 11 for (fd = 0; fd < fda->nr; ++fd) { fdarray__init_revents() 12 fda->entries[fd].fd = fda->nr - fd; fdarray__init_revents() 13 fda->entries[fd].revents = revents; fdarray__init_revents() 17 static int fdarray__fprintf_prefix(struct fdarray *fda, const char *prefix, FILE *fp) fdarray__fprintf_prefix() argument 25 return printed + fdarray__fprintf(fda, fp); fdarray__fprintf_prefix() 31 struct fdarray *fda = fdarray__new(5, 5); test__fdarray__filter() local 33 if (fda == NULL) { test__fdarray__filter() 38 fdarray__init_revents(fda, POLLIN); test__fdarray__filter() 39 nr_fds = fdarray__filter(fda, POLLHUP, NULL); test__fdarray__filter() 40 if (nr_fds != fda->nr_alloc) { test__fdarray__filter() 42 nr_fds, fda->nr_alloc); test__fdarray__filter() 46 fdarray__init_revents(fda, POLLHUP); test__fdarray__filter() 47 nr_fds = fdarray__filter(fda, POLLHUP, NULL); test__fdarray__filter() 50 nr_fds, fda->nr_alloc); test__fdarray__filter() 54 fdarray__init_revents(fda, POLLHUP); test__fdarray__filter() 55 fda->entries[2].revents = POLLIN; test__fdarray__filter() 56 expected_fd[0] = fda->entries[2].fd; test__fdarray__filter() 58 pr_debug("\nfiltering all but fda->entries[2]:"); test__fdarray__filter() 59 fdarray__fprintf_prefix(fda, "before", stderr); test__fdarray__filter() 60 nr_fds = fdarray__filter(fda, POLLHUP, NULL); test__fdarray__filter() 61 fdarray__fprintf_prefix(fda, " after", stderr); test__fdarray__filter() 67 if (fda->entries[0].fd != expected_fd[0]) { test__fdarray__filter() 69 fda->entries[0].fd, expected_fd[0]); test__fdarray__filter() 73 fdarray__init_revents(fda, POLLHUP); test__fdarray__filter() 74 fda->entries[0].revents = POLLIN; test__fdarray__filter() 75 expected_fd[0] = fda->entries[0].fd; test__fdarray__filter() 76 fda->entries[3].revents = POLLIN; test__fdarray__filter() 77 expected_fd[1] = fda->entries[3].fd; test__fdarray__filter() 79 pr_debug("\nfiltering all but (fda->entries[0], fda->entries[3]):"); test__fdarray__filter() 80 fdarray__fprintf_prefix(fda, "before", stderr); test__fdarray__filter() 81 nr_fds = fdarray__filter(fda, POLLHUP, NULL); test__fdarray__filter() 82 fdarray__fprintf_prefix(fda, " after", stderr); test__fdarray__filter() 90 if (fda->entries[fd].fd != expected_fd[fd]) { test__fdarray__filter() 92 fda->entries[fd].fd, expected_fd[fd]); test__fdarray__filter() 101 fdarray__delete(fda); test__fdarray__filter() 109 struct fdarray *fda = fdarray__new(2, 2); test__fdarray__add() local 111 if (fda == NULL) { test__fdarray__add() 117 if (fda->entries[_idx].fd != _fd) { \ test__fdarray__add() 118 pr_debug("\n%d: fda->entries[%d](%d) != %d!", \ test__fdarray__add() 119 __LINE__, _idx, fda->entries[1].fd, _fd); \ test__fdarray__add() 122 if (fda->entries[_idx].events != (_revents)) { \ test__fdarray__add() 123 pr_debug("\n%d: fda->entries[%d].revents(%d) != %d!", \ test__fdarray__add() 124 __LINE__, _idx, fda->entries[_idx].fd, _revents); \ test__fdarray__add() 129 if (fdarray__add(fda, _fd, _revents) < 0) { \ test__fdarray__add() 130 pr_debug("\n%d: fdarray__add(fda, %d, %d) failed!", \ test__fdarray__add() 134 if (fda->nr != _nr) { \ test__fdarray__add() 135 pr_debug("\n%d: fdarray__add(fda, %d, %d)=%d != %d", \ test__fdarray__add() 136 __LINE__,_fd, _revents, fda->nr, _nr); \ test__fdarray__add() 144 fdarray__fprintf_prefix(fda, "before growing array", stderr); test__fdarray__add() 148 if (fda->entries == NULL) { test__fdarray__add() 149 pr_debug("\nfdarray__add(fda, 35, POLLHUP) should have allocated fda->pollfd!"); test__fdarray__add() 153 fdarray__fprintf_prefix(fda, "after 3rd add", stderr); test__fdarray__add() 157 fdarray__fprintf_prefix(fda, "after 4th add", stderr); test__fdarray__add() 171 fdarray__delete(fda); test__fdarray__add()
|
/linux-4.4.14/tools/perf/ |
H A D | builtin-kvm.c | 945 struct fdarray *fda = &kvm->evlist->pollfd; kvm_events_live_report() local 956 if (fda->entries[nr_stdin].revents & POLLIN) kvm_events_live_report() 960 err = fdarray__poll(fda, 100); kvm_events_live_report()
|
/linux-4.4.14/tools/perf/util/ |
H A D | evlist.c | 515 static void perf_evlist__munmap_filtered(struct fdarray *fda, int fd) perf_evlist__munmap_filtered() argument 517 struct perf_evlist *evlist = container_of(fda, struct perf_evlist, pollfd); perf_evlist__munmap_filtered() 519 perf_evlist__mmap_put(evlist, fda->priv[fd].idx); perf_evlist__munmap_filtered()
|