#include #include #include "util/debug.h" #include "tests/tests.h" static void fdarray__init_revents(struct fdarray *fda, short revents) { int fd; fda->nr = fda->nr_alloc; for (fd = 0; fd < fda->nr; ++fd) { fda->entries[fd].fd = fda->nr - fd; fda->entries[fd].revents = revents; } } static int fdarray__fprintf_prefix(struct fdarray *fda, const char *prefix, FILE *fp) { int printed = 0; if (!verbose) return 0; printed += fprintf(fp, "\n%s: ", prefix); return printed + fdarray__fprintf(fda, fp); } int test__fdarray__filter(int subtest __maybe_unused) { int nr_fds, expected_fd[2], fd, err = TEST_FAIL; struct fdarray *fda = fdarray__new(5, 5); if (fda == NULL) { pr_debug("\nfdarray__new() failed!"); goto out; } fdarray__init_revents(fda, POLLIN); nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL); if (nr_fds != fda->nr_alloc) { pr_debug("\nfdarray__filter()=%d != %d shouldn't have filtered anything", nr_fds, fda->nr_alloc); goto out_delete; } fdarray__init_revents(fda, POLLHUP); nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL); if (nr_fds != 0) { pr_debug("\nfdarray__filter()=%d != %d, should have filtered all fds", nr_fds, fda->nr_alloc); goto out_delete; } fdarray__init_revents(fda, POLLHUP); fda->entries[2].revents = POLLIN; expected_fd[0] = fda->entries[2].fd; pr_debug("\nfiltering all but fda->entries[2]:"); fdarray__fprintf_prefix(fda, "before", stderr); nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL); fdarray__fprintf_prefix(fda, " after", stderr); if (nr_fds != 1) { pr_debug("\nfdarray__filter()=%d != 1, should have left just one event", nr_fds); goto out_delete; } if (fda->entries[0].fd != expected_fd[0]) { pr_debug("\nfda->entries[0].fd=%d != %d\n", fda->entries[0].fd, expected_fd[0]); goto out_delete; } fdarray__init_revents(fda, POLLHUP); fda->entries[0].revents = POLLIN; expected_fd[0] = fda->entries[0].fd; fda->entries[3].revents = POLLIN; expected_fd[1] = fda->entries[3].fd; pr_debug("\nfiltering all but (fda->entries[0], fda->entries[3]):"); fdarray__fprintf_prefix(fda, "before", stderr); nr_fds = fdarray__filter(fda, POLLHUP, NULL, NULL); fdarray__fprintf_prefix(fda, " after", stderr); if (nr_fds != 2) { pr_debug("\nfdarray__filter()=%d != 2, should have left just two events", nr_fds); goto out_delete; } for (fd = 0; fd < 2; ++fd) { if (fda->entries[fd].fd != expected_fd[fd]) { pr_debug("\nfda->entries[%d].fd=%d != %d\n", fd, fda->entries[fd].fd, expected_fd[fd]); goto out_delete; } } pr_debug("\n"); err = 0; out_delete: fdarray__delete(fda); out: return err; } int test__fdarray__add(int subtest __maybe_unused) { int err = TEST_FAIL; struct fdarray *fda = fdarray__new(2, 2); if (fda == NULL) { pr_debug("\nfdarray__new() failed!"); goto out; } #define FDA_CHECK(_idx, _fd, _revents) \ if (fda->entries[_idx].fd != _fd) { \ pr_debug("\n%d: fda->entries[%d](%d) != %d!", \ __LINE__, _idx, fda->entries[1].fd, _fd); \ goto out_delete; \ } \ if (fda->entries[_idx].events != (_revents)) { \ pr_debug("\n%d: fda->entries[%d].revents(%d) != %d!", \ __LINE__, _idx, fda->entries[_idx].fd, _revents); \ goto out_delete; \ } #define FDA_ADD(_idx, _fd, _revents, _nr) \ if (fdarray__add(fda, _fd, _revents) < 0) { \ pr_debug("\n%d: fdarray__add(fda, %d, %d) failed!", \ __LINE__,_fd, _revents); \ goto out_delete; \ } \ if (fda->nr != _nr) { \ pr_debug("\n%d: fdarray__add(fda, %d, %d)=%d != %d", \ __LINE__,_fd, _revents, fda->nr, _nr); \ goto out_delete; \ } \ FDA_CHECK(_idx, _fd, _revents) FDA_ADD(0, 1, POLLIN, 1); FDA_ADD(1, 2, POLLERR, 2); fdarray__fprintf_prefix(fda, "before growing array", stderr); FDA_ADD(2, 35, POLLHUP, 3); if (fda->entries == NULL) { pr_debug("\nfdarray__add(fda, 35, POLLHUP) should have allocated fda->pollfd!"); goto out_delete; } fdarray__fprintf_prefix(fda, "after 3rd add", stderr); FDA_ADD(3, 88, POLLIN | POLLOUT, 4); fdarray__fprintf_prefix(fda, "after 4th add", stderr); FDA_CHECK(0, 1, POLLIN); FDA_CHECK(1, 2, POLLERR); FDA_CHECK(2, 35, POLLHUP); FDA_CHECK(3, 88, POLLIN | POLLOUT); #undef FDA_ADD #undef FDA_CHECK pr_debug("\n"); err = 0; out_delete: fdarray__delete(fda); out: return err; } value='35'>35space:mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-12-25 14:30:04 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-25 14:30:04 -0800
commit3ddc76dfc786cc6f87852693227fb0b1f124f807 (patch)
tree8192b4721e05cf6823087f9696db8c0c8f144b02 /sound/soc/codecs/cx20442.h
parentb272f732f888d4cf43c943a40c9aaa836f9b7431 (diff)
parent1f3a8e49d8f28f498b8694464623ac20aebfe62a (diff)
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer type cleanups from Thomas Gleixner: "This series does a tree wide cleanup of types related to timers/timekeeping. - Get rid of cycles_t and use a plain u64. The type is not really helpful and caused more confusion than clarity - Get rid of the ktime union. The union has become useless as we use the scalar nanoseconds storage unconditionally now. The 32bit timespec alike storage got removed due to the Y2038 limitations some time ago. That leaves the odd union access around for no reason. Clean it up. Both changes have been done with coccinelle and a small amount of manual mopping up" * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: ktime: Get rid of ktime_equal() ktime: Cleanup ktime_set() usage ktime: Get rid of the union clocksource: Use a plain u64 instead of cycle_t
Diffstat (limited to 'sound/soc/codecs/cx20442.h')