xref: /linux/drivers/gpu/drm/amd/amdgpu/amdgpu_eviction_fence.h (revision b08494a8f7416e5f09907318c5460ad6f6e2a548)
1fb796c30SShashank Sharma /* SPDX-License-Identifier: MIT */
2fb796c30SShashank Sharma /*
3fb796c30SShashank Sharma  * Copyright 2023 Advanced Micro Devices, Inc.
4fb796c30SShashank Sharma  *
5fb796c30SShashank Sharma  * Permission is hereby granted, free of charge, to any person obtaining a
6fb796c30SShashank Sharma  * copy of this software and associated documentation files (the "Software"),
7fb796c30SShashank Sharma  * to deal in the Software without restriction, including without limitation
8fb796c30SShashank Sharma  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9fb796c30SShashank Sharma  * and/or sell copies of the Software, and to permit persons to whom the
10fb796c30SShashank Sharma  * Software is furnished to do so, subject to the following conditions:
11fb796c30SShashank Sharma  *
12fb796c30SShashank Sharma  * The above copyright notice and this permission notice shall be included in
13fb796c30SShashank Sharma  * all copies or substantial portions of the Software.
14fb796c30SShashank Sharma  *
15fb796c30SShashank Sharma  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16fb796c30SShashank Sharma  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17fb796c30SShashank Sharma  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18fb796c30SShashank Sharma  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19fb796c30SShashank Sharma  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20fb796c30SShashank Sharma  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21fb796c30SShashank Sharma  * OTHER DEALINGS IN THE SOFTWARE.
22fb796c30SShashank Sharma  *
23fb796c30SShashank Sharma  */
24fb796c30SShashank Sharma 
25fb796c30SShashank Sharma #ifndef AMDGPU_EV_FENCE_H_
26fb796c30SShashank Sharma #define AMDGPU_EV_FENCE_H_
27fb796c30SShashank Sharma 
28fb796c30SShashank Sharma struct amdgpu_eviction_fence {
29fb796c30SShashank Sharma 	struct dma_fence base;
30fb796c30SShashank Sharma 	spinlock_t	 lock;
31fb796c30SShashank Sharma 	char		 timeline_name[TASK_COMM_LEN];
32fb796c30SShashank Sharma 	struct amdgpu_eviction_fence_mgr *evf_mgr;
33fb796c30SShashank Sharma };
34fb796c30SShashank Sharma 
35fb796c30SShashank Sharma struct amdgpu_eviction_fence_mgr {
36fb796c30SShashank Sharma 	u64			ev_fence_ctx;
37fb796c30SShashank Sharma 	atomic_t		ev_fence_seq;
38fb796c30SShashank Sharma 	spinlock_t		ev_fence_lock;
39fb796c30SShashank Sharma 	struct amdgpu_eviction_fence *ev_fence;
40b0328087SShashank Sharma 	struct delayed_work	suspend_work;
4144cfdf36SShashank Sharma 	uint8_t fd_closing;
42fb796c30SShashank Sharma };
43fb796c30SShashank Sharma 
44fb796c30SShashank Sharma /* Eviction fence helper functions */
45fb796c30SShashank Sharma struct amdgpu_eviction_fence *
46fb796c30SShashank Sharma amdgpu_eviction_fence_create(struct amdgpu_eviction_fence_mgr *evf_mgr);
47fb796c30SShashank Sharma 
48fb796c30SShashank Sharma void
49fb796c30SShashank Sharma amdgpu_eviction_fence_destroy(struct amdgpu_eviction_fence_mgr *evf_mgr);
50fb796c30SShashank Sharma 
51fb796c30SShashank Sharma int
52fb796c30SShashank Sharma amdgpu_eviction_fence_attach(struct amdgpu_eviction_fence_mgr *evf_mgr,
53fb796c30SShashank Sharma 			     struct amdgpu_bo *bo);
54fb796c30SShashank Sharma 
55fb796c30SShashank Sharma void
56fb796c30SShashank Sharma amdgpu_eviction_fence_detach(struct amdgpu_eviction_fence_mgr *evf_mgr,
57fb796c30SShashank Sharma 			     struct amdgpu_bo *bo);
58fb796c30SShashank Sharma 
59fb796c30SShashank Sharma int
60fb796c30SShashank Sharma amdgpu_eviction_fence_init(struct amdgpu_eviction_fence_mgr *evf_mgr);
61fb796c30SShashank Sharma 
62fb796c30SShashank Sharma void
63*a242a3e4SShashank Sharma amdgpu_eviction_fence_signal(struct amdgpu_eviction_fence_mgr *evf_mgr,
64*a242a3e4SShashank Sharma 			     struct amdgpu_eviction_fence *ev_fence);
65fb796c30SShashank Sharma 
66b0328087SShashank Sharma int
67b0328087SShashank Sharma amdgpu_eviction_fence_replace_fence(struct amdgpu_eviction_fence_mgr *evf_mgr,
68b0328087SShashank Sharma 				    struct drm_exec *exec);
69fb796c30SShashank Sharma #endif
70