From: Oded Gabbay <oded.gabbay@gmail.com>
To: David Airlie <airlied@linux.ie>,
Alex Deucher <alexander.deucher@amd.com>,
Jerome Glisse <j.glisse@gmail.com>
Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
John Bridgman <John.Bridgman@amd.com>,
Andrew Lewycky <Andrew.Lewycky@amd.com>,
Joerg Roedel <joro@8bytes.org>, Oded Gabbay <oded.gabbay@amd.com>
Subject: [PATCH 26/83] hsa/radeon: Make binding of process to device permanent
Date: Fri, 11 Jul 2014 00:50:26 +0300 [thread overview]
Message-ID: <1405029027-6085-25-git-send-email-oded.gabbay@amd.com> (raw)
In-Reply-To: <1405029027-6085-1-git-send-email-oded.gabbay@amd.com>
From: Andrew Lewycky <Andrew.Lewycky@amd.com>
Permanently bind the process to the device.
The binding survives even when all queues are destroyed.
Process exit and device removal terminate the binding.
Signed-off-by: Andrew Lewycky <Andrew.Lewycky@amd.com>
Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
---
drivers/gpu/hsa/radeon/kfd_chardev.c | 27 +++------------------------
drivers/gpu/hsa/radeon/kfd_priv.h | 3 ---
drivers/gpu/hsa/radeon/kfd_process.c | 21 ++++++++++-----------
3 files changed, 13 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/hsa/radeon/kfd_chardev.c b/drivers/gpu/hsa/radeon/kfd_chardev.c
index 4e7d5d0..e0b276d 100644
--- a/drivers/gpu/hsa/radeon/kfd_chardev.c
+++ b/drivers/gpu/hsa/radeon/kfd_chardev.c
@@ -141,20 +141,13 @@ kfd_ioctl_create_queue(struct file *filep, struct kfd_process *p, void __user *a
pdd = radeon_kfd_bind_process_to_device(dev, p);
if (IS_ERR(pdd) < 0) {
err = PTR_ERR(pdd);
- goto err_bind_pasid;
+ goto err_bind_process;
}
- pr_debug("kfd: creating queue number %d for PASID %d on GPU 0x%x\n",
- pdd->queue_count,
+ pr_debug("kfd: creating queue for PASID %d on GPU 0x%x\n",
p->pasid,
dev->id);
- if (pdd->queue_count++ == 0) {
- err = dev->device_info->scheduler_class->register_process(dev->scheduler, p, &pdd->scheduler_process);
- if (err < 0)
- goto err_register_process;
- }
-
if (!radeon_kfd_allocate_queue_id(p, &queue_id))
goto err_allocate_queue_id;
@@ -198,12 +191,7 @@ err_copy_args_out:
err_create_queue:
radeon_kfd_remove_queue(p, queue_id);
err_allocate_queue_id:
- if (--pdd->queue_count == 0) {
- dev->device_info->scheduler_class->deregister_process(dev->scheduler, pdd->scheduler_process);
- pdd->scheduler_process = NULL;
- }
-err_register_process:
-err_bind_pasid:
+err_bind_process:
kfree(queue);
mutex_unlock(&p->mutex);
return err;
@@ -215,7 +203,6 @@ kfd_ioctl_destroy_queue(struct file *filp, struct kfd_process *p, void __user *a
struct kfd_ioctl_destroy_queue_args args;
struct kfd_queue *queue;
struct kfd_dev *dev;
- struct kfd_process_device *pdd;
if (copy_from_user(&args, arg, sizeof(args)))
return -EFAULT;
@@ -239,14 +226,6 @@ kfd_ioctl_destroy_queue(struct file *filp, struct kfd_process *p, void __user *a
kfree(queue);
- pdd = radeon_kfd_get_process_device_data(dev, p);
- BUG_ON(pdd == NULL); /* Because a queue exists. */
-
- if (--pdd->queue_count == 0) {
- dev->device_info->scheduler_class->deregister_process(dev->scheduler, pdd->scheduler_process);
- pdd->scheduler_process = NULL;
- }
-
mutex_unlock(&p->mutex);
return 0;
}
diff --git a/drivers/gpu/hsa/radeon/kfd_priv.h b/drivers/gpu/hsa/radeon/kfd_priv.h
index 630d690..bca9cce 100644
--- a/drivers/gpu/hsa/radeon/kfd_priv.h
+++ b/drivers/gpu/hsa/radeon/kfd_priv.h
@@ -166,9 +166,6 @@ struct kfd_process_device {
/* The user-mode address of the doorbell mapping for this device. */
doorbell_t __user *doorbell_mapping;
- /* The number of queues created by this process for this device. */
- uint32_t queue_count;
-
/* Scheduler process data for this device. */
struct kfd_scheduler_process *scheduler_process;
diff --git a/drivers/gpu/hsa/radeon/kfd_process.c b/drivers/gpu/hsa/radeon/kfd_process.c
index 145ee38..f89f855 100644
--- a/drivers/gpu/hsa/radeon/kfd_process.c
+++ b/drivers/gpu/hsa/radeon/kfd_process.c
@@ -120,15 +120,6 @@ destroy_queues(struct kfd_process *p, struct kfd_dev *dev_filter)
dev->device_info->scheduler_class->destroy_queue(dev->scheduler, &queue->scheduler_queue);
kfree(queue);
-
- BUG_ON(pdd->queue_count == 0);
- BUG_ON(pdd->scheduler_process == NULL);
-
- if (--pdd->queue_count == 0) {
- dev->device_info->scheduler_class->deregister_process(dev->scheduler,
- pdd->scheduler_process);
- pdd->scheduler_process = NULL;
- }
}
}
}
@@ -144,6 +135,8 @@ static void free_process(struct kfd_process *p)
/* doorbell mappings: automatic */
list_for_each_entry_safe(pdd, temp, &p->per_device_data, per_device_list) {
+ pdd->dev->device_info->scheduler_class->deregister_process(pdd->dev->scheduler, pdd->scheduler_process);
+ pdd->scheduler_process = NULL;
amd_iommu_unbind_pasid(pdd->dev->pdev, p->pasid);
list_del(&pdd->per_device_list);
kfree(pdd);
@@ -255,6 +248,12 @@ struct kfd_process_device *radeon_kfd_bind_process_to_device(struct kfd_dev *dev
if (err < 0)
return ERR_PTR(err);
+ err = dev->device_info->scheduler_class->register_process(dev->scheduler, p, &pdd->scheduler_process);
+ if (err < 0) {
+ amd_iommu_unbind_pasid(dev->pdev, p->pasid);
+ return ERR_PTR(err);
+ }
+
pdd->bound = true;
return pdd;
@@ -285,8 +284,8 @@ void radeon_kfd_unbind_process_from_device(struct kfd_dev *dev, pasid_t pasid)
destroy_queues(p, dev);
- /* All queues just got destroyed so this should be gone. */
- BUG_ON(pdd->scheduler_process != NULL);
+ dev->device_info->scheduler_class->deregister_process(dev->scheduler, pdd->scheduler_process);
+ pdd->scheduler_process = NULL;
/*
* Just mark pdd as unbound, because we still need it to call
--
1.9.1
next prev parent reply other threads:[~2014-07-10 21:52 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-10 21:50 [PATCH 02/83] drm/radeon: reduce number of free VMIDs and pipes in KV Oded Gabbay
2014-07-10 21:50 ` [PATCH 03/83] drm/radeon: Report doorbell configuration to kfd Oded Gabbay
2014-07-11 16:16 ` Jerome Glisse
2014-07-10 21:50 ` [PATCH 04/83] drm/radeon: Add radeon <--> kfd interface Oded Gabbay
2014-07-10 22:38 ` Joe Perches
2014-07-11 16:24 ` Jerome Glisse
2014-07-17 11:55 ` Oded Gabbay
2014-07-10 21:50 ` [PATCH 05/83] drm/radeon: Add kfd-->kgd interface to get virtual ram size Oded Gabbay
2014-07-11 16:27 ` Jerome Glisse
2014-07-10 21:50 ` [PATCH 06/83] drm/radeon: Add kfd-->kgd interfaces of memory allocation/mapping Oded Gabbay
2014-07-11 16:32 ` Jerome Glisse
2014-07-10 21:50 ` [PATCH 07/83] drm/radeon: Add kfd-->kgd interface of locking srbm_gfx_cntl register Oded Gabbay
2014-07-11 16:34 ` Jerome Glisse
2014-07-11 17:48 ` Bridgman, John
2014-07-12 0:36 ` Bridgman, John
2014-07-12 0:37 ` Bridgman, John
2014-07-10 21:50 ` [PATCH 08/83] drm/radeon: Add calls to initialize and finalize kfd from radeon Oded Gabbay
2014-07-11 16:36 ` Jerome Glisse
2014-07-17 11:57 ` Oded Gabbay
2014-07-17 12:29 ` Christian König
2014-07-17 12:30 ` Oded Gabbay
[not found] ` <53C7C555.8040402@amd.com>
2014-07-17 13:31 ` Daniel Vetter
2014-07-10 21:50 ` [PATCH 09/83] hsa/radeon: Add code base of hsa driver for AMD's GPUs Oded Gabbay
2014-07-11 17:04 ` Jerome Glisse
2014-07-11 17:28 ` Joe Perches
2014-07-17 11:51 ` Oded Gabbay
2014-07-11 17:40 ` Daniel Vetter
2014-07-11 18:02 ` Bridgman, John
2014-07-11 18:10 ` Jerome Glisse
2014-07-11 18:46 ` Bridgman, John
2014-07-11 18:51 ` Jerome Glisse
2014-07-11 18:56 ` Bridgman, John
2014-07-11 19:22 ` Jerome Glisse
2014-07-11 19:38 ` Joe Perches
2014-07-17 11:51 ` Oded Gabbay
2014-07-10 21:50 ` [PATCH 10/83] hsa/radeon: Add initialization and unmapping of doorbell aperture Oded Gabbay
2014-07-10 21:50 ` [PATCH 11/83] hsa/radeon: Add scheduler code Oded Gabbay
2014-07-11 18:25 ` Jerome Glisse
2014-07-17 11:57 ` Oded Gabbay
2014-07-10 21:50 ` [PATCH 12/83] hsa/radeon: Add kfd mmap handler Oded Gabbay
2014-07-11 18:47 ` Jerome Glisse
2014-07-10 21:50 ` [PATCH 13/83] hsa/radeon: Add 2 new IOCTL to kfd, CREATE_QUEUE and DESTROY_QUEUE Oded Gabbay
2014-07-11 19:19 ` Jerome Glisse
2014-07-11 21:01 ` Jerome Glisse
2014-07-11 21:42 ` Dave Airlie
2014-07-14 7:33 ` Gabbay, Oded
2014-07-10 21:50 ` [PATCH 14/83] hsa/radeon: Update MAINTAINERS and CREDITS files Oded Gabbay
2014-07-10 21:50 ` [PATCH 15/83] hsa/radeon: Add interrupt handling module Oded Gabbay
2014-07-11 19:57 ` Jerome Glisse
2014-07-10 21:50 ` [PATCH 16/83] hsa/radeon: Add the isr function of the KFD scehduler Oded Gabbay
2014-07-10 21:50 ` [PATCH 17/83] hsa/radeon: Handle deactivation of queues using interrupts Oded Gabbay
2014-07-10 21:50 ` [PATCH 18/83] hsa/radeon: Enable interrupts in KFD scheduler Oded Gabbay
2014-07-10 21:50 ` [PATCH 19/83] hsa/radeon: Enable/Disable KFD interrupt module Oded Gabbay
2014-07-10 21:50 ` [PATCH 20/83] hsa/radeon: Add interrupt callback function to kgd2kfd interface Oded Gabbay
2014-07-10 21:50 ` [PATCH 21/83] hsa/radeon: Add kgd-->kfd interfaces for suspend and resume Oded Gabbay
2014-07-10 21:50 ` [PATCH 22/83] drm/radeon: Add calls to suspend and resume of kfd driver Oded Gabbay
2014-07-10 21:50 ` [PATCH 23/83] drm/radeon/cik: Don't touch int of pipes 1-7 Oded Gabbay
2014-07-10 21:50 ` [PATCH 24/83] drm/radeon/cik: Call kfd isr function Oded Gabbay
2014-07-10 21:50 ` [PATCH 25/83] hsa/radeon: fix the OEMID assignment in kfd_topology Oded Gabbay
2014-07-10 21:50 ` Oded Gabbay [this message]
2014-07-10 21:50 ` [PATCH 27/83] hsa/radeon: Implement hsaKmtSetMemoryPolicy Oded Gabbay
2014-07-11 16:05 ` [PATCH 02/83] drm/radeon: reduce number of free VMIDs and pipes in KV Jerome Glisse
2014-07-11 16:18 ` Christian König
2014-07-11 16:22 ` Alex Deucher
2014-07-11 17:07 ` Bridgman, John
[not found] ` <CAL4m05UPDBrSOaHdyVSws9c3i=NPmSfVYQ=4emehyctN1+9r0g@mail.gmail.com>
2014-07-11 22:54 ` Bridgman, John
2014-07-12 9:00 ` Christian König
2014-07-14 7:31 ` Michel Dänzer
2014-07-14 7:38 ` Michel Dänzer
2014-07-14 7:58 ` Christian König
2014-07-17 11:47 ` Oded Gabbay
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1405029027-6085-25-git-send-email-oded.gabbay@amd.com \
--to=oded.gabbay@gmail.com \
--cc=Andrew.Lewycky@amd.com \
--cc=John.Bridgman@amd.com \
--cc=airlied@linux.ie \
--cc=alexander.deucher@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=j.glisse@gmail.com \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oded.gabbay@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome