1 /* 2 * Copyright 2011 Red Hat 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 * 23 * Authors: 24 * Jerome Glisse <j.glisse (at) gmail.com> 25 */ 26 #include <stdio.h> 27 #include <stdlib.h> 28 #include <unistd.h> 29 #include "rbo.h" 30 #include "xf86drm.h" 31 32 /* allocate as many single page bo to try to starve the kernel 33 * memory zone (below highmem) 34 */ 35 static void ttm_starve_kernel_private_memory(int fd) 36 { 37 struct list_head list; 38 struct rbo *bo, *tmp; 39 unsigned nbo = 0; 40 41 printf("\n[%s]\n", __func__); 42 list_inithead(&list); 43 while (1) { 44 bo = rbo(fd, 0, 4096, 0, NULL); 45 if (bo == NULL) { 46 printf("failing after %d bo\n", nbo); 47 break; 48 } 49 nbo++; 50 list_add(&bo->list, &list); 51 } 52 LIST_FOR_EACH_ENTRY_SAFE(bo, tmp, &list, list) { 53 list_del(&bo->list); 54 rbo_decref(bo); 55 } 56 } 57 58 static int radeon_open_fd(void) 59 { 60 return drmOpen("radeon", NULL); 61 } 62 63 int main(void) 64 { 65 int radeonfd; 66 67 radeonfd = radeon_open_fd(); 68 if (radeonfd < 0) { 69 fprintf(stderr, "failed to open radeon fd\n"); 70 return -1; 71 } 72 73 ttm_starve_kernel_private_memory(radeonfd); 74 75 close(radeonfd); 76 return 0; 77 } 78