aboutsummaryrefslogtreecommitdiffstats
path: root/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1145-drm-amdkfd-Add-debugfs-entry-for-hexdump-of-MQDs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1145-drm-amdkfd-Add-debugfs-entry-for-hexdump-of-MQDs.patch')
-rw-r--r--meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1145-drm-amdkfd-Add-debugfs-entry-for-hexdump-of-MQDs.patch389
1 files changed, 0 insertions, 389 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1145-drm-amdkfd-Add-debugfs-entry-for-hexdump-of-MQDs.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1145-drm-amdkfd-Add-debugfs-entry-for-hexdump-of-MQDs.patch
deleted file mode 100644
index b1ccf9c1..00000000
--- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/1145-drm-amdkfd-Add-debugfs-entry-for-hexdump-of-MQDs.patch
+++ /dev/null
@@ -1,389 +0,0 @@
-From 3545ecc3f326254d9779a6229201288db4dc2c22 Mon Sep 17 00:00:00 2001
-From: Felix Kuehling <Felix.Kuehling@amd.com>
-Date: Fri, 3 Jun 2016 20:32:53 -0400
-Subject: [PATCH 1145/4131] drm/amdkfd: Add debugfs entry for hexdump of MQDs
-
-This commit adds initial Debugfs support to KFD and implements a list
-of all queues by process with hexdumps of the MQDs. This can be
-useful for debugging CP scheduler problems.
-
-Change-Id: Ia63a65af8927e40d24a747d4c35b5907fe59c4b4
-Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
----
- drivers/gpu/drm/amd/amdkfd/kfd_device.c | 56 +++++++++++++++++++
- drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h | 4 ++
- drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c | 27 ++++++++++
- drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c | 25 +++++++++
- drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 13 +++++
- drivers/gpu/drm/amd/amdkfd/kfd_process.c | 28 ++++++++++
- .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 63 ++++++++++++++++++++++
- 7 files changed, 216 insertions(+)
-
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-index aae4e5a..64f41d6 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
-@@ -25,6 +25,7 @@
- #include <linux/pci.h>
- #include <linux/slab.h>
- #include <linux/highmem.h>
-+#include <linux/debugfs.h>
- #include "kfd_priv.h"
- #include "kfd_device_queue_manager.h"
- #include "kfd_pm4_headers.h"
-@@ -331,6 +332,58 @@ static void kfd_cwsr_fini(struct kfd_dev *kfd)
- __free_pages(kfd->cwsr_pages, get_order(kfd->cwsr_size));
- }
-
-+#if defined(CONFIG_DEBUG_FS)
-+
-+static int kfd_debugfs_open(struct inode *inode, struct file *file)
-+{
-+ int (*show)(struct seq_file *, void *) = inode->i_private;
-+
-+ return single_open(file, show, NULL);
-+}
-+
-+static const struct file_operations kfd_debugfs_fops = {
-+ .owner = THIS_MODULE,
-+ .open = kfd_debugfs_open,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = single_release,
-+};
-+
-+static void kfd_debugfs_init(struct kfd_dev *kfd)
-+{
-+ struct dentry *ent;
-+
-+ kfd->debugfs_root = debugfs_create_dir("kfd", NULL);
-+ if (kfd->debugfs_root == NULL ||
-+ kfd->debugfs_root == ERR_PTR(-ENODEV)) {
-+ dev_warn(kfd_device, "Failed to create kfd debugfs dir\n");
-+ return;
-+ }
-+
-+ ent = debugfs_create_file("mqds", S_IFREG | S_IRUGO, kfd->debugfs_root,
-+ kfd_debugfs_mqds_by_process,
-+ &kfd_debugfs_fops);
-+ if (ent == NULL)
-+ dev_warn(kfd_device, "Failed to create mqds in kfd debugfs\n");
-+}
-+
-+static void kfd_debugfs_fini(struct kfd_dev *kfd)
-+{
-+ debugfs_remove_recursive(kfd->debugfs_root);
-+}
-+
-+#else
-+
-+static void kfd_debugfs_init(struct kfd_dev *kfd)
-+{
-+}
-+
-+static void kfd_debugfs_fini(struct kfd_dev *kfd)
-+{
-+}
-+
-+#endif
-+
- bool kgd2kfd_device_init(struct kfd_dev *kfd,
- const struct kgd2kfd_shared_resources *gpu_resources)
- {
-@@ -439,6 +492,8 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
- if (kfd_resume(kfd))
- goto kfd_resume_error;
-
-+ kfd_debugfs_init(kfd);
-+
- kfd->dbgmgr = NULL;
-
- kfd->init_complete = true;
-@@ -472,6 +527,7 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
- void kgd2kfd_device_exit(struct kfd_dev *kfd)
- {
- if (kfd->init_complete) {
-+ kfd_debugfs_fini(kfd);
- kgd2kfd_suspend(kfd);
- kfd_cwsr_fini(kfd);
- device_queue_manager_uninit(kfd->dqm);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h
-index eb60192..574684f 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager.h
-@@ -85,6 +85,10 @@ struct mqd_manager {
- uint64_t queue_address, uint32_t pipe_id,
- uint32_t queue_id);
-
-+#if defined(CONFIG_DEBUG_FS)
-+ int (*debugfs_show_mqd)(struct seq_file *m, void *data);
-+#endif
-+
- struct mutex mqd_mutex;
- struct kfd_dev *dev;
- };
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
-index 85ba086..e565bee 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
-@@ -475,6 +475,24 @@ static int update_mqd_hiq(struct mqd_manager *mm, void *mqd,
- return 0;
- }
-
-+#if defined(CONFIG_DEBUG_FS)
-+
-+static int debugfs_show_mqd(struct seq_file *m, void *data)
-+{
-+ seq_hex_dump(m, " ", DUMP_PREFIX_OFFSET, 32, 4,
-+ data, sizeof(struct cik_mqd), false);
-+ return 0;
-+}
-+
-+static int debugfs_show_mqd_sdma(struct seq_file *m, void *data)
-+{
-+ seq_hex_dump(m, " ", DUMP_PREFIX_OFFSET, 32, 4,
-+ data, sizeof(struct cik_sdma_rlc_registers), false);
-+ return 0;
-+}
-+
-+#endif
-+
-
- struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type,
- struct kfd_dev *dev)
-@@ -501,6 +519,9 @@ struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type,
- mqd->update_mqd = update_mqd;
- mqd->destroy_mqd = destroy_mqd;
- mqd->is_occupied = is_occupied;
-+#if defined(CONFIG_DEBUG_FS)
-+ mqd->debugfs_show_mqd = debugfs_show_mqd;
-+#endif
- break;
- case KFD_MQD_TYPE_HIQ:
- mqd->init_mqd = init_mqd_hiq;
-@@ -509,6 +530,9 @@ struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type,
- mqd->update_mqd = update_mqd_hiq;
- mqd->destroy_mqd = destroy_mqd;
- mqd->is_occupied = is_occupied;
-+#if defined(CONFIG_DEBUG_FS)
-+ mqd->debugfs_show_mqd = debugfs_show_mqd;
-+#endif
- break;
- case KFD_MQD_TYPE_SDMA:
- mqd->init_mqd = init_mqd_sdma;
-@@ -517,6 +541,9 @@ struct mqd_manager *mqd_manager_init_cik(enum KFD_MQD_TYPE type,
- mqd->update_mqd = update_mqd_sdma;
- mqd->destroy_mqd = destroy_mqd_sdma;
- mqd->is_occupied = is_occupied_sdma;
-+#if defined(CONFIG_DEBUG_FS)
-+ mqd->debugfs_show_mqd = debugfs_show_mqd_sdma;
-+#endif
- break;
- default:
- kfree(mqd);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
-index 4260c2f..25c1269 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_vi.c
-@@ -426,7 +426,23 @@ static bool is_occupied_sdma(struct mqd_manager *mm, void *mqd,
- return mm->dev->kfd2kgd->hqd_sdma_is_occupied(mm->dev->kgd, mqd);
- }
-
-+#if defined(CONFIG_DEBUG_FS)
-
-+static int debugfs_show_mqd(struct seq_file *m, void *data)
-+{
-+ seq_hex_dump(m, " ", DUMP_PREFIX_OFFSET, 32, 4,
-+ data, sizeof(struct vi_mqd), false);
-+ return 0;
-+}
-+
-+static int debugfs_show_mqd_sdma(struct seq_file *m, void *data)
-+{
-+ seq_hex_dump(m, " ", DUMP_PREFIX_OFFSET, 32, 4,
-+ data, sizeof(struct vi_sdma_mqd), false);
-+ return 0;
-+}
-+
-+#endif
-
- struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type,
- struct kfd_dev *dev)
-@@ -453,6 +469,9 @@ struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type,
- mqd->update_mqd = update_mqd;
- mqd->destroy_mqd = destroy_mqd;
- mqd->is_occupied = is_occupied;
-+#if defined(CONFIG_DEBUG_FS)
-+ mqd->debugfs_show_mqd = debugfs_show_mqd;
-+#endif
- break;
- case KFD_MQD_TYPE_HIQ:
- mqd->init_mqd = init_mqd_hiq;
-@@ -461,6 +480,9 @@ struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type,
- mqd->update_mqd = update_mqd_hiq;
- mqd->destroy_mqd = destroy_mqd;
- mqd->is_occupied = is_occupied;
-+#if defined(CONFIG_DEBUG_FS)
-+ mqd->debugfs_show_mqd = debugfs_show_mqd;
-+#endif
- break;
- case KFD_MQD_TYPE_SDMA:
- mqd->init_mqd = init_mqd_sdma;
-@@ -469,6 +491,9 @@ struct mqd_manager *mqd_manager_init_vi(enum KFD_MQD_TYPE type,
- mqd->update_mqd = update_mqd_sdma;
- mqd->destroy_mqd = destroy_mqd_sdma;
- mqd->is_occupied = is_occupied_sdma;
-+#if defined(CONFIG_DEBUG_FS)
-+ mqd->debugfs_show_mqd = debugfs_show_mqd_sdma;
-+#endif
- break;
- default:
- kfree(mqd);
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-index bfce9a9..ee91cf7 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
-@@ -34,6 +34,7 @@
- #include <linux/kfd_ioctl.h>
- #include <linux/pid.h>
- #include <linux/interval_tree.h>
-+#include <linux/seq_file.h>
- #include <kgd_kfd_interface.h>
-
- #include "amd_rdma.h"
-@@ -269,6 +270,11 @@ struct kfd_dev {
- struct page *cwsr_pages;
- uint32_t cwsr_size;
- uint32_t tma_offset; /*Offset for TMA from the start of cwsr_mem*/
-+
-+ /* Debugfs */
-+#if defined(CONFIG_DEBUG_FS)
-+ struct dentry *debugfs_root;
-+#endif
- };
-
- struct kfd_bo {
-@@ -911,5 +917,12 @@ int restore(struct kfd_dev *kfd);
- int kfd_init_peer_direct(void);
- void kfd_close_peer_direct(void);
-
-+/* Debugfs */
-+#if defined(CONFIG_DEBUG_FS)
-+
-+int kfd_debugfs_mqds_by_process(struct seq_file *m, void *data);
-+int pqm_debugfs_mqds(struct seq_file *m, void *data);
-+
-+#endif
-
- #endif
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-index 3b312b7..ff1669b 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
-@@ -994,3 +994,31 @@ int kfd_reserved_mem_mmap(struct kfd_process *process, struct vm_area_struct *vm
- return ret;
- }
-
-+#if defined(CONFIG_DEBUG_FS)
-+
-+int kfd_debugfs_mqds_by_process(struct seq_file *m, void *data)
-+{
-+ struct kfd_process *p;
-+ unsigned int temp;
-+ int r = 0;
-+
-+ int idx = srcu_read_lock(&kfd_processes_srcu);
-+
-+ hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) {
-+ seq_printf(m, "Process %d PASID %d:\n",
-+ p->lead_thread->tgid, p->pasid);
-+
-+ down_read(&p->lock);
-+ r = pqm_debugfs_mqds(m, &p->pqm);
-+ up_read(&p->lock);
-+
-+ if (r != 0)
-+ break;
-+ }
-+
-+ srcu_read_unlock(&kfd_processes_srcu, idx);
-+
-+ return r;
-+}
-+
-+#endif
-diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
-index fe3d7ff..cf08e824 100644
---- a/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
-+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c
-@@ -425,4 +425,67 @@ struct kernel_queue *pqm_get_kernel_queue(
- return NULL;
- }
-
-+#if defined(CONFIG_DEBUG_FS)
-
-+int pqm_debugfs_mqds(struct seq_file *m, void *data)
-+{
-+ struct process_queue_manager *pqm = data;
-+ struct process_queue_node *pqn;
-+ struct queue *q;
-+ enum KFD_MQD_TYPE mqd_type;
-+ struct mqd_manager *mqd_manager;
-+ int r = 0;
-+
-+ list_for_each_entry(pqn, &pqm->queues, process_queue_list) {
-+ if (pqn->q) {
-+ q = pqn->q;
-+ switch (q->properties.type) {
-+ case KFD_QUEUE_TYPE_SDMA:
-+ seq_printf(m, " SDMA queue on device %x\n",
-+ q->device->id);
-+ mqd_type = KFD_MQD_TYPE_SDMA;
-+ break;
-+ case KFD_QUEUE_TYPE_COMPUTE:
-+ seq_printf(m, " Compute queue on device %x\n",
-+ q->device->id);
-+ mqd_type = KFD_MQD_TYPE_CP;
-+ break;
-+ default:
-+ seq_printf(m,
-+ " Bad user queue type %d on device %x\n",
-+ q->properties.type, q->device->id);
-+ continue;
-+ }
-+ mqd_manager = q->device->dqm->ops.get_mqd_manager(
-+ q->device->dqm, mqd_type);
-+ } else if (pqn->kq) {
-+ q = pqn->kq->queue;
-+ mqd_manager = pqn->kq->mqd;
-+ switch (q->properties.type) {
-+ case KFD_QUEUE_TYPE_DIQ:
-+ seq_printf(m, " DIQ on device %x\n",
-+ pqn->kq->dev->id);
-+ mqd_type = KFD_MQD_TYPE_HIQ;
-+ break;
-+ default:
-+ seq_printf(m,
-+ " Bad kernel queue type %d on device %x\n",
-+ q->properties.type,
-+ pqn->kq->dev->id);
-+ continue;
-+ }
-+ } else {
-+ seq_printf(m,
-+ " Weird: Queue node with neither kernel nor user queue\n");
-+ continue;
-+ }
-+
-+ r = mqd_manager->debugfs_show_mqd(m, q->mqd);
-+ if (r != 0)
-+ break;
-+ }
-+
-+ return r;
-+}
-+
-+#endif
---
-2.7.4
-