aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2196-Revert-drm-amdkfd-Make-event-limit-dependent-on-user.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2196-Revert-drm-amdkfd-Make-event-limit-dependent-on-user.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2196-Revert-drm-amdkfd-Make-event-limit-dependent-on-user.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2196-Revert-drm-amdkfd-Make-event-limit-dependent-on-user.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2196-Revert-drm-amdkfd-Make-event-limit-dependent-on-user.patch
new file mode 100644
index 00000000..7473ad27
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2196-Revert-drm-amdkfd-Make-event-limit-dependent-on-user.patch
@@ -0,0 +1,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
+