1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
From 7c5930106e577c1b79caa6970ff247c0888b490c Mon Sep 17 00:00:00 2001
From: "Le.Ma" <Le.Ma@amd.com>
Date: Fri, 17 Nov 2017 11:37:12 +0800
Subject: [PATCH 2196/4131] Revert "drm/amdkfd: Make event limit dependent on
user mode mapping size"
This reverts commit af785feadfa6a808872f5cf94f45bd8d6cbd9455.
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Le.Ma <Le.Ma@amd.com>
---
drivers/gpu/drm/amd/amdkfd/kfd_events.c | 25 ++++++-------------------
drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 1 -
2 files changed, 6 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
index ef2e131..9bdea43 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
@@ -101,17 +101,9 @@ static int allocate_event_notification_slot(struct kfd_process *p,
p->signal_page = allocate_signal_page(p);
if (!p->signal_page)
return -ENOMEM;
- /* Oldest user mode expects 256 event slots */
- p->signal_mapped_size = 256*8;
}
- /*
- * Compatibility with old user mode: Only use signal slots
- * user mode has mapped, may be less than
- * KFD_SIGNAL_EVENT_LIMIT. This also allows future increase
- * of the event limit without breaking user mode.
- */
- id = idr_alloc(&p->event_idr, ev, 0, p->signal_mapped_size / 8,
+ id = idr_alloc(&p->event_idr, ev, 0, KFD_SIGNAL_EVENT_LIMIT,
GFP_KERNEL);
if (id < 0)
return id;
@@ -208,8 +200,7 @@ static int create_signal_event(struct file *devkfd,
{
int ret;
- if (p->signal_mapped_size &&
- p->signal_event_count == p->signal_mapped_size / 8) {
+ if (p->signal_event_count == KFD_SIGNAL_EVENT_LIMIT) {
if (!p->signal_event_limit_reached) {
pr_warn("Signal event wasn't created because limit was reached\n");
p->signal_event_limit_reached = true;
@@ -785,12 +776,12 @@ int kfd_wait_on_events(struct kfd_process *p,
int kfd_event_mmap(struct kfd_process *p, struct vm_area_struct *vma)
{
+
unsigned long pfn;
struct kfd_signal_page *page;
- int ret;
- /* check required size doesn't exceed the allocated size */
- if (get_order(KFD_SIGNAL_EVENT_LIMIT * 8) <
+ /* check required size is logical */
+ if (get_order(KFD_SIGNAL_EVENT_LIMIT * 8) !=
get_order(vma->vm_end - vma->vm_start)) {
pr_err("Event page mmap requested illegal size\n");
return -EINVAL;
@@ -820,12 +811,8 @@ int kfd_event_mmap(struct kfd_process *p, struct vm_area_struct *vma)
page->user_address = (uint64_t __user *)vma->vm_start;
/* mapping the page to user process */
- ret = remap_pfn_range(vma, vma->vm_start, pfn,
+ return remap_pfn_range(vma, vma->vm_start, pfn,
vma->vm_end - vma->vm_start, vma->vm_page_prot);
- if (!ret)
- p->signal_mapped_size = vma->vm_end - vma->vm_start;
-
- return ret;
}
/*
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index cec554c..5e46745 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -722,7 +722,6 @@ struct kfd_process {
struct idr event_idr;
/* Event page */
struct kfd_signal_page *signal_page;
- size_t signal_mapped_size;
size_t signal_event_count;
bool signal_event_limit_reached;
--
2.7.4
|