1afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <errno.h> 2afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <fcntl.h> 3afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <getopt.h> 4afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <string.h> 5afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <stdlib.h> 6afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <stdio.h> 7afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <sys/mman.h> 8afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <sys/ioctl.h> 9afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <sys/socket.h> 10afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <sys/stat.h> 11afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <sys/types.h> 12afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <unistd.h> 13afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 14afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <ion/ion.h> 15afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <linux/ion.h> 16afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#include <linux/omap_ion.h> 17afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 18afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinsize_t len = 1024*1024, align = 0; 19afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinint prot = PROT_READ | PROT_WRITE; 20afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinint map_flags = MAP_SHARED; 21afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinint alloc_flags = 0; 22a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavinint heap_mask = 1; 23afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinint test = -1; 24afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinsize_t stride; 25afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 26afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinint _ion_alloc_test(int *fd, struct ion_handle **handle) 27afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin{ 28afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int ret; 29afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 30afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin *fd = ion_open(); 31afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (*fd < 0) 32afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return *fd; 33afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 34a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin ret = ion_alloc(*fd, len, align, heap_mask, alloc_flags, handle); 35afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 36afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ret) 37afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("%s failed: %s\n", __func__, strerror(ret)); 38afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return ret; 39afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin} 40afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 41afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinvoid ion_alloc_test() 42afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin{ 43afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int fd, ret; 44afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct ion_handle *handle; 45afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 46afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if(_ion_alloc_test(&fd, &handle)) 47afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 48afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 49afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ret = ion_free(fd, handle); 50afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ret) { 51afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("%s failed: %s %p\n", __func__, strerror(ret), handle); 52afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 53afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 54afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ion_close(fd); 55afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("ion alloc test: passed\n"); 56afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin} 57afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 58afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinvoid ion_map_test() 59afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin{ 60afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int fd, map_fd, ret; 61afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin size_t i; 62afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct ion_handle *handle; 63afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin unsigned char *ptr; 64afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 65afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if(_ion_alloc_test(&fd, &handle)) 66afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 67afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 68afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ret = ion_map(fd, handle, len, prot, map_flags, 0, &ptr, &map_fd); 69afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ret) 70afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 71afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 72afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin for (i = 0; i < len; i++) { 73afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ptr[i] = (unsigned char)i; 74afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 75afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin for (i = 0; i < len; i++) 76afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ptr[i] != (unsigned char)i) 77afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("%s failed wrote %d read %d from mapped " 78afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin "memory\n", __func__, i, ptr[i]); 79afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin /* clean up properly */ 80afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ret = ion_free(fd, handle); 81afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ion_close(fd); 82afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin munmap(ptr, len); 83afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin close(map_fd); 84afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 85afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin _ion_alloc_test(&fd, &handle); 86afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin close(fd); 87afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 88afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#if 0 89afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin munmap(ptr, len); 90afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin close(map_fd); 91afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ion_close(fd); 92afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 93afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin _ion_alloc_test(len, align, flags, &fd, &handle); 94afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin close(map_fd); 95afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ret = ion_map(fd, handle, len, prot, flags, 0, &ptr, &map_fd); 96afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin /* don't clean up */ 97afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin#endif 98afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin} 99afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 100afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinvoid ion_share_test() 101afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 102afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin{ 103afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct ion_handle *handle; 104afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int sd[2]; 105afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int num_fd = 1; 106afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct iovec count_vec = { 107afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .iov_base = &num_fd, 108afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .iov_len = sizeof num_fd, 109afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin }; 110afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin char buf[CMSG_SPACE(sizeof(int))]; 111afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin socketpair(AF_UNIX, SOCK_STREAM, 0, sd); 112afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (fork()) { 113afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct msghdr msg = { 114afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_control = buf, 115afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_controllen = sizeof buf, 116afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_iov = &count_vec, 117afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_iovlen = 1, 118afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin }; 119afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 120afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct cmsghdr *cmsg; 121afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int fd, share_fd, ret; 122afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin char *ptr; 123afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin /* parent */ 124afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if(_ion_alloc_test(&fd, &handle)) 125afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 126afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ret = ion_share(fd, handle, &share_fd); 127afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ret) 128afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("share failed %s\n", strerror(errno)); 129afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ptr = mmap(NULL, len, prot, map_flags, share_fd, 0); 130afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ptr == MAP_FAILED) { 131afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 132afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 133afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin strcpy(ptr, "master"); 134afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin cmsg = CMSG_FIRSTHDR(&msg); 135afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin cmsg->cmsg_level = SOL_SOCKET; 136afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin cmsg->cmsg_type = SCM_RIGHTS; 137afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin cmsg->cmsg_len = CMSG_LEN(sizeof(int)); 138afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin *(int *)CMSG_DATA(cmsg) = share_fd; 139afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin /* send the fd */ 140afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("master? [%10s] should be [master]\n", ptr); 141afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("master sending msg 1\n"); 142afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin sendmsg(sd[0], &msg, 0); 143afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (recvmsg(sd[0], &msg, 0) < 0) 144afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin perror("master recv msg 2"); 145afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("master? [%10s] should be [child]\n", ptr); 146afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 147afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin /* send ping */ 148afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin sendmsg(sd[0], &msg, 0); 149afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("master->master? [%10s]\n", ptr); 150afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (recvmsg(sd[0], &msg, 0) < 0) 151afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin perror("master recv 1"); 152afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } else { 153afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct msghdr msg; 154afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct cmsghdr *cmsg; 155afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin char* ptr; 156afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int fd, recv_fd; 157afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin char* child_buf[100]; 158afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin /* child */ 159afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct iovec count_vec = { 160afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .iov_base = child_buf, 161afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .iov_len = sizeof child_buf, 162afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin }; 163afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 164afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin struct msghdr child_msg = { 165afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_control = buf, 166afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_controllen = sizeof buf, 167afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_iov = &count_vec, 168afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin .msg_iovlen = 1, 169afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin }; 170afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 171afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (recvmsg(sd[1], &child_msg, 0) < 0) 172afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin perror("child recv msg 1"); 173afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin cmsg = CMSG_FIRSTHDR(&child_msg); 174afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (cmsg == NULL) { 175afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("no cmsg rcvd in child"); 176afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 177afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 178afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin recv_fd = *(int*)CMSG_DATA(cmsg); 179afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (recv_fd < 0) { 180afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("could not get recv_fd from socket"); 181afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 182afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 183afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("child %d\n", recv_fd); 184afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin fd = ion_open(); 185afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ptr = mmap(NULL, len, prot, map_flags, recv_fd, 0); 186afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (ptr == MAP_FAILED) { 187afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return; 188afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 189afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("child? [%10s] should be [master]\n", ptr); 190afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin strcpy(ptr, "child"); 191afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("child sending msg 2\n"); 192afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin sendmsg(sd[1], &child_msg, 0); 193afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 194afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin} 195afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 196afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavinint main(int argc, char* argv[]) { 197afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int c; 198afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin enum tests { 199afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ALLOC_TEST = 0, MAP_TEST, SHARE_TEST, 200afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin }; 201afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 202afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin while (1) { 203afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin static struct option opts[] = { 204afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"alloc", no_argument, 0, 'a'}, 205afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"alloc_flags", required_argument, 0, 'f'}, 206a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin {"heap_mask", required_argument, 0, 'h'}, 207afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"map", no_argument, 0, 'm'}, 208afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"share", no_argument, 0, 's'}, 209afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"len", required_argument, 0, 'l'}, 210afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"align", required_argument, 0, 'g'}, 211afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"map_flags", required_argument, 0, 'z'}, 212afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin {"prot", required_argument, 0, 'p'}, 213afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin }; 214afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin int i = 0; 215a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin c = getopt_long(argc, argv, "af:h:l:mr:st", opts, &i); 216afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin if (c == -1) 217afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 218afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin 219afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin switch (c) { 220afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'l': 221afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin len = atol(optarg); 222afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 223afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'g': 224afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin align = atol(optarg); 225afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 226afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'z': 227afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin map_flags = 0; 228afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin map_flags |= strstr(optarg, "PROT_EXEC") ? 229afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin PROT_EXEC : 0; 230afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin map_flags |= strstr(optarg, "PROT_READ") ? 231afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin PROT_READ: 0; 232afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin map_flags |= strstr(optarg, "PROT_WRITE") ? 233afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin PROT_WRITE: 0; 234afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin map_flags |= strstr(optarg, "PROT_NONE") ? 235afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin PROT_NONE: 0; 236afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 237afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'p': 238afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin prot = 0; 239afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin prot |= strstr(optarg, "MAP_PRIVATE") ? 240afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin MAP_PRIVATE : 0; 241afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin prot |= strstr(optarg, "MAP_SHARED") ? 242afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin MAP_PRIVATE : 0; 243afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 244afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'f': 245afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin alloc_flags = atol(optarg); 246afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 247a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin case 'h': 248a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin heap_mask = atol(optarg); 249a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin break; 250afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'a': 251afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin test = ALLOC_TEST; 252afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 253afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 'm': 254afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin test = MAP_TEST; 255afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 256afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case 's': 257afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin test = SHARE_TEST; 258afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 259afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 260afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 261a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin printf("test %d, len %u, align %u, map_flags %d, prot %d, heap_mask %d," 262a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin " alloc_flags %d\n", test, len, align, map_flags, prot, 263a50fd5568ea72ea1ad662207ccea512735803174Rebecca Schultz Zavin heap_mask, alloc_flags); 264afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin switch (test) { 265afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case ALLOC_TEST: 266afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ion_alloc_test(); 267afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 268afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case MAP_TEST: 269afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ion_map_test(); 270afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 271afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin case SHARE_TEST: 272afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin ion_share_test(); 273afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin break; 274afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin default: 275afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin printf("must specify a test (alloc, map, share)\n"); 276afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin } 277afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin return 0; 278afd912394690cbf7d40b021c62d80ff0f3d40806Rebecca Schultz Zavin} 279