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