...
...
4
through a new IOCTL.
4
through a new IOCTL.
5
5
6
The new debugfs file shows a list of driver DRM GEM objects in tabular mode.
6
The new debugfs file shows a list of driver DRM GEM objects in tabular mode.
7
To visualise it, cat sudo cat /sys/kernel/debug/dri/*.gpu/gems.
7
To visualise it, cat sudo cat /sys/kernel/debug/dri/*.gpu/gems.
8
To test this functionality from UM, please refer to this Mesa patch series:
8
To test this functionality from UM, please refer to this Mesa patch series:
9
10
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34224
9
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34224
11
10
11
Discussion of previous revision of this patch series can be found at:
12
https://lore.kernel.org/dri-devel/20250327140845.105962-1-adrian.larumbe@collabora.com/
13
12
Changelog:
14
Changelog:
13
v3:
14
- Replaced kfree() with kfree_const() when freeing a bo label
15
- Rearranged functions for delaing with GEMs list adding and deleting
16
- Changed Kernel BO labelling format not to include quotes
17
- Return error in labelling ioctl when string length is too long
18
15
16
v4:
17
- Labelled all kernel BO's, not just heap chunks.
18
- Refactored DebugGFs GEMs list handling functions
19
- Added debugfs GEMS node mask to tell different kinds of BO's
19
20
20
Adrián Larumbe (4):
21
Adrián Larumbe (4):
21
drm/panthor: Introduce BO labeling
22
drm/panthor: Introduce BO labeling
22
drm/panthor: Add driver IOCTL for setting BO labels
23
drm/panthor: Add driver IOCTL for setting BO labels
24
drm/panthor: Label all kernel BO's
23
drm/panthor: show device-wide list of DRM GEM objects over DebugFS
25
drm/panthor: show device-wide list of DRM GEM objects over DebugFS
24
drm/panthor: Display heap chunk entries in DebugFS GEMS file
25
26
26
drivers/gpu/drm/panthor/panthor_device.c | 5 +
27
drivers/gpu/drm/panthor/panthor_device.c | 5 +
27
drivers/gpu/drm/panthor/panthor_device.h | 11 ++
28
drivers/gpu/drm/panthor/panthor_device.h | 11 ++
28
drivers/gpu/drm/panthor/panthor_drv.c | 66 ++++++++++
29
drivers/gpu/drm/panthor/panthor_drv.c | 66 ++++++++
29
drivers/gpu/drm/panthor/panthor_gem.c | 158 +++++++++++++++++++++++
30
drivers/gpu/drm/panthor/panthor_fw.c | 8 +-
30
drivers/gpu/drm/panthor/panthor_gem.h | 60 +++++++++
31
drivers/gpu/drm/panthor/panthor_gem.c | 190 ++++++++++++++++++++++-
31
drivers/gpu/drm/panthor/panthor_heap.c | 3 +
32
drivers/gpu/drm/panthor/panthor_gem.h | 56 ++++++-
33
drivers/gpu/drm/panthor/panthor_heap.c | 6 +-
34
drivers/gpu/drm/panthor/panthor_sched.c | 9 +-
32
include/uapi/drm/panthor_drm.h | 19 +++
35
include/uapi/drm/panthor_drm.h | 19 +++
33
7 files changed, 322 insertions(+)
36
9 files changed, 360 insertions(+), 10 deletions(-)
34
37
35
--
38
--
36
2.48.1
39
2.48.1
diff view generated by jsdifflib
1
Add a new character string Panthor BO field, and a function that allows
1
Add a new character string Panthor BO field, and a function that allows
2
setting it from within the driver.
2
setting it from within the driver.
3
3
4
Driver takes care of freeing the string when it's replaced or no longer
4
Driver takes care of freeing the string when it's replaced or no longer
5
needed at object destruction time, but allocating it is the responsibility
5
needed at object destruction time, but allocating it is the responsibility
6
of callers.
6
of callers.
7
7
8
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
8
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
9
---
9
---
10
drivers/gpu/drm/panthor/panthor_gem.c | 38 +++++++++++++++++++++++++++
10
drivers/gpu/drm/panthor/panthor_gem.c | 38 +++++++++++++++++++++++++++
11
drivers/gpu/drm/panthor/panthor_gem.h | 17 ++++++++++++
11
drivers/gpu/drm/panthor/panthor_gem.h | 17 ++++++++++++
12
2 files changed, 55 insertions(+)
12
2 files changed, 55 insertions(+)
13
13
14
diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c
14
diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c
15
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
16
--- a/drivers/gpu/drm/panthor/panthor_gem.c
16
--- a/drivers/gpu/drm/panthor/panthor_gem.c
17
+++ b/drivers/gpu/drm/panthor/panthor_gem.c
17
+++ b/drivers/gpu/drm/panthor/panthor_gem.c
18
@@ -XXX,XX +XXX,XX @@ static void panthor_gem_free_object(struct drm_gem_object *obj)
18
@@ -XXX,XX +XXX,XX @@ static void panthor_gem_free_object(struct drm_gem_object *obj)
19
    struct panthor_gem_object *bo = to_panthor_bo(obj);
19
    struct panthor_gem_object *bo = to_panthor_bo(obj);
20
    struct drm_gem_object *vm_root_gem = bo->exclusive_vm_root_gem;
20
    struct drm_gem_object *vm_root_gem = bo->exclusive_vm_root_gem;
21
21
22
+    /*
22
+    /*
23
+     * Label might have been allocated with kstrdup_const(),
23
+     * Label might have been allocated with kstrdup_const(),
24
+     * we need to take that into account when freeing the memory
24
+     * we need to take that into account when freeing the memory
25
+     */
25
+     */
26
+    kfree_const(bo->label.str);
26
+    kfree_const(bo->label.str);
27
+
27
+
28
+    mutex_destroy(&bo->label.lock);
28
+    mutex_destroy(&bo->label.lock);
29
+
29
+
30
    drm_gem_free_mmap_offset(&bo->base.base);
30
    drm_gem_free_mmap_offset(&bo->base.base);
31
    mutex_destroy(&bo->gpuva_list_lock);
31
    mutex_destroy(&bo->gpuva_list_lock);
32
    drm_gem_shmem_free(&bo->base);
32
    drm_gem_shmem_free(&bo->base);
33
@@ -XXX,XX +XXX,XX @@ struct drm_gem_object *panthor_gem_create_object(struct drm_device *ddev, size_t
33
@@ -XXX,XX +XXX,XX @@ struct drm_gem_object *panthor_gem_create_object(struct drm_device *ddev, size_t
34
    obj->base.map_wc = !ptdev->coherent;
34
    obj->base.map_wc = !ptdev->coherent;
35
    mutex_init(&obj->gpuva_list_lock);
35
    mutex_init(&obj->gpuva_list_lock);
36
    drm_gem_gpuva_set_lock(&obj->base.base, &obj->gpuva_list_lock);
36
    drm_gem_gpuva_set_lock(&obj->base.base, &obj->gpuva_list_lock);
37
+    mutex_init(&obj->label.lock);
37
+    mutex_init(&obj->label.lock);
38
38
39
    return &obj->base.base;
39
    return &obj->base.base;
40
}
40
}
41
@@ -XXX,XX +XXX,XX @@ panthor_gem_create_with_handle(struct drm_file *file,
41
@@ -XXX,XX +XXX,XX @@ panthor_gem_create_with_handle(struct drm_file *file,
42
42
43
    return ret;
43
    return ret;
44
}
44
}
45
+
45
+
46
+void
46
+void
47
+panthor_gem_bo_set_label(struct drm_gem_object *obj, const char *label)
47
+panthor_gem_bo_set_label(struct drm_gem_object *obj, const char *label)
48
+{
48
+{
49
+    struct panthor_gem_object *bo = to_panthor_bo(obj);
49
+    struct panthor_gem_object *bo = to_panthor_bo(obj);
50
+    const char *old_label;
50
+    const char *old_label;
51
+
51
+
52
+    mutex_lock(&bo->label.lock);
52
+    mutex_lock(&bo->label.lock);
53
+    old_label = bo->label.str;
53
+    old_label = bo->label.str;
54
+    bo->label.str = label;
54
+    bo->label.str = label;
55
+    mutex_unlock(&bo->label.lock);
55
+    mutex_unlock(&bo->label.lock);
56
+
56
+
57
+    kfree(old_label);
57
+    kfree(old_label);
58
+}
58
+}
59
+
59
+
60
+void
60
+void
61
+panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *label)
61
+panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *label)
62
+{
62
+{
63
+    const char *str;
63
+    const char *str;
64
+
64
+
65
+    str = kstrdup_const(label, GFP_KERNEL);
65
+    str = kstrdup_const(label, GFP_KERNEL);
66
+    if (!str) {
66
+    if (!str) {
67
+        /* Failing to allocate memory for a label isn't a fatal condition */
67
+        /* Failing to allocate memory for a label isn't a fatal condition */
68
+        drm_warn(bo->obj->dev, "Not enough memory to allocate BO label");
68
+        drm_warn(bo->obj->dev, "Not enough memory to allocate BO label");
69
+        return;
69
+        return;
70
+    }
70
+    }
71
+
71
+
72
+    panthor_gem_bo_set_label(bo->obj, kstrdup_const(str, GFP_KERNEL));
72
+    panthor_gem_bo_set_label(bo->obj, kstrdup_const(str, GFP_KERNEL));
73
+}
73
+}
74
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
74
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
75
index XXXXXXX..XXXXXXX 100644
75
index XXXXXXX..XXXXXXX 100644
76
--- a/drivers/gpu/drm/panthor/panthor_gem.h
76
--- a/drivers/gpu/drm/panthor/panthor_gem.h
77
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
77
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
78
@@ -XXX,XX +XXX,XX @@ struct panthor_gem_object {
78
@@ -XXX,XX +XXX,XX @@ struct panthor_gem_object {
79
79
80
    /** @flags: Combination of drm_panthor_bo_flags flags. */
80
    /** @flags: Combination of drm_panthor_bo_flags flags. */
81
    u32 flags;
81
    u32 flags;
82
+
82
+
83
+    /**
83
+    /**
84
+     * @label: BO tagging fields. The label can be assigned within the
84
+     * @label: BO tagging fields. The label can be assigned within the
85
+     * driver itself or through a specific IOCTL.
85
+     * driver itself or through a specific IOCTL.
86
+     */
86
+     */
87
+    struct {
87
+    struct {
88
+        /**
88
+        /**
89
+         * @label.str: Pointer to NULL-terminated string,
89
+         * @label.str: Pointer to NULL-terminated string,
90
+         */
90
+         */
91
+        const char *str;
91
+        const char *str;
92
+
92
+
93
+        /** @lock.str: Protects access to the @label.str field. */
93
+        /** @lock.str: Protects access to the @label.str field. */
94
+        struct mutex lock;
94
+        struct mutex lock;
95
+    } label;
95
+    } label;
96
};
96
};
97
97
98
/**
98
/**
99
@@ -XXX,XX +XXX,XX @@ panthor_gem_create_with_handle(struct drm_file *file,
99
@@ -XXX,XX +XXX,XX @@ panthor_gem_create_with_handle(struct drm_file *file,
100
             struct panthor_vm *exclusive_vm,
100
             struct panthor_vm *exclusive_vm,
101
             u64 *size, u32 flags, uint32_t *handle);
101
             u64 *size, u32 flags, uint32_t *handle);
102
102
103
+void panthor_gem_bo_set_label(struct drm_gem_object *obj, const char *label);
103
+void panthor_gem_bo_set_label(struct drm_gem_object *obj, const char *label);
104
+void panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *label);
104
+void panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *label);
105
+
105
+
106
static inline u64
106
static inline u64
107
panthor_kernel_bo_gpuva(struct panthor_kernel_bo *bo)
107
panthor_kernel_bo_gpuva(struct panthor_kernel_bo *bo)
108
{
108
{
109
--
109
--
110
2.48.1
110
2.48.1
111
111
diff view generated by jsdifflib
1
Allow UM to label a BO for which it possesses a DRM handle.
1
Allow UM to label a BO for which it possesses a DRM handle.
2
2
3
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
3
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
4
---
4
---
5
drivers/gpu/drm/panthor/panthor_drv.c | 40 +++++++++++++++++++++++++++
5
drivers/gpu/drm/panthor/panthor_drv.c | 40 +++++++++++++++++++++++++++
6
drivers/gpu/drm/panthor/panthor_gem.h | 2 ++
6
include/uapi/drm/panthor_drm.h | 19 +++++++++++++
7
include/uapi/drm/panthor_drm.h | 19 +++++++++++++
7
2 files changed, 59 insertions(+)
8
3 files changed, 61 insertions(+)
8
9
9
diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c
10
diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c
10
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
11
--- a/drivers/gpu/drm/panthor/panthor_drv.c
12
--- a/drivers/gpu/drm/panthor/panthor_drv.c
12
+++ b/drivers/gpu/drm/panthor/panthor_drv.c
13
+++ b/drivers/gpu/drm/panthor/panthor_drv.c
...
...
25
+    obj = drm_gem_object_lookup(file, args->handle);
26
+    obj = drm_gem_object_lookup(file, args->handle);
26
+    if (!obj)
27
+    if (!obj)
27
+        return -ENOENT;
28
+        return -ENOENT;
28
+
29
+
29
+    if (args->size && args->label) {
30
+    if (args->size && args->label) {
30
+        if (args->size > PAGE_SIZE) {
31
+        if (args->size > PANTHOR_BO_LABEL_MAXLEN) {
31
+            ret = -E2BIG;
32
+            ret = -E2BIG;
32
+            goto err_label;
33
+            goto err_label;
33
+        }
34
+        }
34
+
35
+
35
+        label = strndup_user(u64_to_user_ptr(args->label), args->size);
36
+        label = strndup_user(u64_to_user_ptr(args->label), args->size);
...
...
69
* - 1.3 - adds DRM_PANTHOR_GROUP_STATE_INNOCENT flag
70
* - 1.3 - adds DRM_PANTHOR_GROUP_STATE_INNOCENT flag
70
+ * - 1.4 - adds DRM_IOCTL_PANTHOR_BO_SET_LABEL ioctl
71
+ * - 1.4 - adds DRM_IOCTL_PANTHOR_BO_SET_LABEL ioctl
71
*/
72
*/
72
static const struct drm_driver panthor_drm_driver = {
73
static const struct drm_driver panthor_drm_driver = {
73
    .driver_features = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ |
74
    .driver_features = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ |
75
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
76
index XXXXXXX..XXXXXXX 100644
77
--- a/drivers/gpu/drm/panthor/panthor_gem.h
78
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
79
@@ -XXX,XX +XXX,XX @@
80
81
struct panthor_vm;
82
83
+#define PANTHOR_BO_LABEL_MAXLEN    PAGE_SIZE
84
+
85
/**
86
* struct panthor_gem_object - Driver specific GEM object.
87
*/
74
diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h
88
diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h
75
index XXXXXXX..XXXXXXX 100644
89
index XXXXXXX..XXXXXXX 100644
76
--- a/include/uapi/drm/panthor_drm.h
90
--- a/include/uapi/drm/panthor_drm.h
77
+++ b/include/uapi/drm/panthor_drm.h
91
+++ b/include/uapi/drm/panthor_drm.h
78
@@ -XXX,XX +XXX,XX @@ enum drm_panthor_ioctl_id {
92
@@ -XXX,XX +XXX,XX @@ enum drm_panthor_ioctl_id {
...
...
diff view generated by jsdifflib
1
Expand the driver's DebugFS GEMS file to display entries for the heap
1
Kernel BO's aren't exposed to UM, so labelling them is the responsibility
2
chunks' GEM objects, both those allocated at heap creation time through an
2
of the driver itself. This kind of tagging will prove useful in further
3
ioctl(), or in response to a tiler OOM event.
3
commits when want to expose these objects through DebugFS.
4
5
Expand panthor_kernel_bo_create() interface to take a NULL-terminated
6
string. No bounds checking is done because all label strings are given
7
as statically-allocated literals, but if a more complex kernel BO naming
8
scheme with explicit memory allocation and formatting was desired in the
9
future, this would have to change.
4
10
5
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
11
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
6
---
12
---
7
drivers/gpu/drm/panthor/panthor_gem.c | 12 +-----------
13
drivers/gpu/drm/panthor/panthor_fw.c | 8 +++++---
8
drivers/gpu/drm/panthor/panthor_gem.h | 14 ++++++++++++++
14
drivers/gpu/drm/panthor/panthor_gem.c | 3 ++-
9
drivers/gpu/drm/panthor/panthor_heap.c | 3 +++
15
drivers/gpu/drm/panthor/panthor_gem.h | 2 +-
10
3 files changed, 18 insertions(+), 11 deletions(-)
16
drivers/gpu/drm/panthor/panthor_heap.c | 6 ++++--
17
drivers/gpu/drm/panthor/panthor_sched.c | 9 ++++++---
18
5 files changed, 18 insertions(+), 10 deletions(-)
11
19
20
diff --git a/drivers/gpu/drm/panthor/panthor_fw.c b/drivers/gpu/drm/panthor/panthor_fw.c
21
index XXXXXXX..XXXXXXX 100644
22
--- a/drivers/gpu/drm/panthor/panthor_fw.c
23
+++ b/drivers/gpu/drm/panthor/panthor_fw.c
24
@@ -XXX,XX +XXX,XX @@ panthor_fw_alloc_queue_iface_mem(struct panthor_device *ptdev,
25
                 DRM_PANTHOR_BO_NO_MMAP,
26
                 DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC |
27
                 DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED,
28
-                 PANTHOR_VM_KERNEL_AUTO_VA);
29
+                 PANTHOR_VM_KERNEL_AUTO_VA,
30
+                 "Queue FW interface");
31
    if (IS_ERR(mem))
32
        return mem;
33
34
@@ -XXX,XX +XXX,XX @@ panthor_fw_alloc_suspend_buf_mem(struct panthor_device *ptdev, size_t size)
35
    return panthor_kernel_bo_create(ptdev, panthor_fw_vm(ptdev), size,
36
                    DRM_PANTHOR_BO_NO_MMAP,
37
                    DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC,
38
-                    PANTHOR_VM_KERNEL_AUTO_VA);
39
+                    PANTHOR_VM_KERNEL_AUTO_VA,
40
+                    "FW suspend buffer");
41
}
42
43
static int panthor_fw_load_section_entry(struct panthor_device *ptdev,
44
@@ -XXX,XX +XXX,XX @@ static int panthor_fw_load_section_entry(struct panthor_device *ptdev,
45
        section->mem = panthor_kernel_bo_create(ptdev, panthor_fw_vm(ptdev),
46
                            section_size,
47
                            DRM_PANTHOR_BO_NO_MMAP,
48
-                            vm_map_flags, va);
49
+                            vm_map_flags, va, "FW Section");
50
        if (IS_ERR(section->mem))
51
            return PTR_ERR(section->mem);
52
12
diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c
53
diff --git a/drivers/gpu/drm/panthor/panthor_gem.c b/drivers/gpu/drm/panthor/panthor_gem.c
13
index XXXXXXX..XXXXXXX 100644
54
index XXXXXXX..XXXXXXX 100644
14
--- a/drivers/gpu/drm/panthor/panthor_gem.c
55
--- a/drivers/gpu/drm/panthor/panthor_gem.c
15
+++ b/drivers/gpu/drm/panthor/panthor_gem.c
56
+++ b/drivers/gpu/drm/panthor/panthor_gem.c
16
@@ -XXX,XX +XXX,XX @@ static void panthor_gem_debugfs_bo_init(struct panthor_gem_object *bo)
57
@@ -XXX,XX +XXX,XX @@ void panthor_kernel_bo_destroy(struct panthor_kernel_bo *bo)
17
    get_task_comm(bo->gems.creator.process_name, current->group_leader);
58
struct panthor_kernel_bo *
18
}
59
panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
19
60
             size_t size, u32 bo_flags, u32 vm_map_flags,
20
-static void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo)
61
-             u64 gpu_va)
21
-{
62
+             u64 gpu_va, const char *name)
22
-    struct panthor_device *ptdev = container_of(bo->base.base.dev,
23
-                         struct panthor_device, base);
24
-
25
-    mutex_lock(&ptdev->gems.lock);
26
-    list_add_tail(&bo->gems.node, &ptdev->gems.node);
27
-    mutex_unlock(&ptdev->gems.lock);
28
-}
29
-
30
static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo)
31
{
63
{
32
    struct panthor_device *ptdev = container_of(bo->base.base.dev,
64
    struct drm_gem_shmem_object *obj;
33
@@ -XXX,XX +XXX,XX @@ static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo)
65
    struct panthor_kernel_bo *kbo;
34
    list_del_init(&bo->gems.node);
66
@@ -XXX,XX +XXX,XX @@ panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
35
    mutex_unlock(&ptdev->gems.lock);
67
    kbo->obj = &obj->base;
36
}
68
    bo->flags = bo_flags;
37
+
69
38
#else
70
+    panthor_gem_kernel_bo_set_label(kbo, name);
39
static void panthor_gem_debugfs_bo_init(struct panthor_gem_object *bo) {}
71
    /* The system and GPU MMU page size might differ, which becomes a
40
-static void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo) {}
72
     * problem for FW sections that need to be mapped at explicit address
41
static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo) {}
73
     * since our PAGE_SIZE alignment might cover a VA range that's
42
#endif
43
44
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
74
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
45
index XXXXXXX..XXXXXXX 100644
75
index XXXXXXX..XXXXXXX 100644
46
--- a/drivers/gpu/drm/panthor/panthor_gem.h
76
--- a/drivers/gpu/drm/panthor/panthor_gem.h
47
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
77
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
48
@@ -XXX,XX +XXX,XX @@
78
@@ -XXX,XX +XXX,XX @@ panthor_kernel_bo_vunmap(struct panthor_kernel_bo *bo)
49
#include <linux/iosys-map.h>
79
struct panthor_kernel_bo *
50
#include <linux/rwsem.h>
80
panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
51
81
             size_t size, u32 bo_flags, u32 vm_map_flags,
52
+#include "panthor_device.h"
82
-             u64 gpu_va);
53
+
83
+             u64 gpu_va, const char *name);
54
struct panthor_vm;
84
55
85
void panthor_kernel_bo_destroy(struct panthor_kernel_bo *bo);
56
/**
86
57
@@ -XXX,XX +XXX,XX @@ void panthor_kernel_bo_destroy(struct panthor_kernel_bo *bo);
58
#ifdef CONFIG_DEBUG_FS
59
void panthor_gem_debugfs_print_bos(struct panthor_device *pfdev,
60
                 struct seq_file *m);
61
+
62
+static inline void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo)
63
+{
64
+    struct panthor_device *ptdev = container_of(bo->base.base.dev,
65
+                         struct panthor_device, base);
66
+
67
+    mutex_lock(&ptdev->gems.lock);
68
+    list_add_tail(&bo->gems.node, &ptdev->gems.node);
69
+    mutex_unlock(&ptdev->gems.lock);
70
+}
71
+#elif
72
+static inline void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo) {}
73
#endif
74
75
#endif /* __PANTHOR_GEM_H__ */
76
diff --git a/drivers/gpu/drm/panthor/panthor_heap.c b/drivers/gpu/drm/panthor/panthor_heap.c
87
diff --git a/drivers/gpu/drm/panthor/panthor_heap.c b/drivers/gpu/drm/panthor/panthor_heap.c
77
index XXXXXXX..XXXXXXX 100644
88
index XXXXXXX..XXXXXXX 100644
78
--- a/drivers/gpu/drm/panthor/panthor_heap.c
89
--- a/drivers/gpu/drm/panthor/panthor_heap.c
79
+++ b/drivers/gpu/drm/panthor/panthor_heap.c
90
+++ b/drivers/gpu/drm/panthor/panthor_heap.c
80
@@ -XXX,XX +XXX,XX @@ static int panthor_alloc_heap_chunk(struct panthor_device *ptdev,
91
@@ -XXX,XX +XXX,XX @@ static int panthor_alloc_heap_chunk(struct panthor_device *ptdev,
81
    heap->chunk_count++;
92
    chunk->bo = panthor_kernel_bo_create(ptdev, vm, heap->chunk_size,
82
    mutex_unlock(&heap->lock);
93
                     DRM_PANTHOR_BO_NO_MMAP,
83
94
                     DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC,
84
+    panthor_gem_kernel_bo_set_label(chunk->bo, "Tiler heap chunk");
95
-                     PANTHOR_VM_KERNEL_AUTO_VA);
85
+    panthor_gem_debugfs_bo_add(to_panthor_bo(chunk->bo->obj));
96
+                     PANTHOR_VM_KERNEL_AUTO_VA,
86
+
97
+                     "Tiler heap chunk");
87
    return 0;
98
    if (IS_ERR(chunk->bo)) {
88
99
        ret = PTR_ERR(chunk->bo);
89
err_destroy_bo:
100
        goto err_free_chunk;
101
@@ -XXX,XX +XXX,XX @@ panthor_heap_pool_create(struct panthor_device *ptdev, struct panthor_vm *vm)
102
    pool->gpu_contexts = panthor_kernel_bo_create(ptdev, vm, bosize,
103
                         DRM_PANTHOR_BO_NO_MMAP,
104
                         DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC,
105
-                         PANTHOR_VM_KERNEL_AUTO_VA);
106
+                         PANTHOR_VM_KERNEL_AUTO_VA,
107
+                         "Heap pool");
108
    if (IS_ERR(pool->gpu_contexts)) {
109
        ret = PTR_ERR(pool->gpu_contexts);
110
        goto err_destroy_pool;
111
diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c
112
index XXXXXXX..XXXXXXX 100644
113
--- a/drivers/gpu/drm/panthor/panthor_sched.c
114
+++ b/drivers/gpu/drm/panthor/panthor_sched.c
115
@@ -XXX,XX +XXX,XX @@ group_create_queue(struct panthor_group *group,
116
                         DRM_PANTHOR_BO_NO_MMAP,
117
                         DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC |
118
                         DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED,
119
-                         PANTHOR_VM_KERNEL_AUTO_VA);
120
+                         PANTHOR_VM_KERNEL_AUTO_VA,
121
+                         "Ring buffer");
122
    if (IS_ERR(queue->ringbuf)) {
123
        ret = PTR_ERR(queue->ringbuf);
124
        goto err_free_queue;
125
@@ -XXX,XX +XXX,XX @@ group_create_queue(struct panthor_group *group,
126
                     DRM_PANTHOR_BO_NO_MMAP,
127
                     DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC |
128
                     DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED,
129
-                     PANTHOR_VM_KERNEL_AUTO_VA);
130
+                     PANTHOR_VM_KERNEL_AUTO_VA,
131
+                     "fdinfo slots");
132
133
    if (IS_ERR(queue->profiling.slots)) {
134
        ret = PTR_ERR(queue->profiling.slots);
135
@@ -XXX,XX +XXX,XX @@ int panthor_group_create(struct panthor_file *pfile,
136
                         DRM_PANTHOR_BO_NO_MMAP,
137
                         DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC |
138
                         DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED,
139
-                         PANTHOR_VM_KERNEL_AUTO_VA);
140
+                         PANTHOR_VM_KERNEL_AUTO_VA,
141
+                         "Group sync objects");
142
    if (IS_ERR(group->syncobjs)) {
143
        ret = PTR_ERR(group->syncobjs);
144
        goto err_put_group;
90
--
145
--
91
2.48.1
146
2.48.1
92
147
diff view generated by jsdifflib
1
Add a device DebugFS file that displays a complete list of all the DRM GEM
1
Add a device DebugFS file that displays a complete list of all the DRM
2
objects that are exposed to UM through a DRM handle.
2
GEM objects that are exposed to UM through a DRM handle.
3
3
4
Since leaking object identifiers that might belong to a different NS is
4
Since leaking object identifiers that might belong to a different NS is
5
inadmissible, this functionality is only made available in debug builds
5
inadmissible, this functionality is only made available in debug builds
6
with DEBUGFS support enabled.
6
with DEBUGFS support enabled.
7
7
8
File format is that of a table, with each entry displaying a variety of
8
File format is that of a table, with each entry displaying a variety of
9
fields with information about each GEM object.
9
fields with information about each GEM object.
10
10
11
Each GEM object entry in the file displays the following information
11
Each GEM object entry in the file displays the following information
12
fields: Client PID, BO's global name, reference count, BO virtual size, BO
12
fields: Client PID, BO's global name, reference count, BO virtual size,
13
resize size, VM address in its DRM-managed range, BO label and a flag
13
BO resize size, VM address in its DRM-managed range, BO label and a flag
14
bitmask.
14
bitmask.
15
16
There's also a kflags field for the type of BO. Bit 0 tells us whether
17
it's a kernel BO, and bit 1 means the BO is mapped onto the FW's address
18
space.
15
19
16
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
20
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
17
---
21
---
18
drivers/gpu/drm/panthor/panthor_device.c | 5 +
22
drivers/gpu/drm/panthor/panthor_device.c | 5 +
19
drivers/gpu/drm/panthor/panthor_device.h | 11 ++
23
drivers/gpu/drm/panthor/panthor_device.h | 11 ++
20
drivers/gpu/drm/panthor/panthor_drv.c | 26 +++++
24
drivers/gpu/drm/panthor/panthor_drv.c | 26 ++++
21
drivers/gpu/drm/panthor/panthor_gem.c | 130 +++++++++++++++++++++++
25
drivers/gpu/drm/panthor/panthor_gem.c | 149 +++++++++++++++++++++++
22
drivers/gpu/drm/panthor/panthor_gem.h | 29 +++++
26
drivers/gpu/drm/panthor/panthor_gem.h | 35 ++++++
23
5 files changed, 201 insertions(+)
27
5 files changed, 226 insertions(+)
24
28
25
diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/panthor/panthor_device.c
29
diff --git a/drivers/gpu/drm/panthor/panthor_device.c b/drivers/gpu/drm/panthor/panthor_device.c
26
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
27
--- a/drivers/gpu/drm/panthor/panthor_device.c
31
--- a/drivers/gpu/drm/panthor/panthor_device.c
28
+++ b/drivers/gpu/drm/panthor/panthor_device.c
32
+++ b/drivers/gpu/drm/panthor/panthor_device.c
29
@@ -XXX,XX +XXX,XX @@ int panthor_device_init(struct panthor_device *ptdev)
33
@@ -XXX,XX +XXX,XX @@ int panthor_device_init(struct panthor_device *ptdev)
30
    pm_runtime_set_autosuspend_delay(ptdev->base.dev, 50);
34
    if (ret)
31
    pm_runtime_use_autosuspend(ptdev->base.dev);
35
        return ret;
32
36
33
+#ifdef CONFIG_DEBUG_FS
37
+#ifdef CONFIG_DEBUG_FS
34
+    drmm_mutex_init(&ptdev->base, &ptdev->gems.lock);
38
+    drmm_mutex_init(&ptdev->base, &ptdev->gems.lock);
35
+    INIT_LIST_HEAD(&ptdev->gems.node);
39
+    INIT_LIST_HEAD(&ptdev->gems.node);
36
+#endif
40
+#endif
37
+
41
+
38
    ret = drm_dev_register(&ptdev->base, 0);
42
    atomic_set(&ptdev->pm.state, PANTHOR_DEVICE_PM_STATE_SUSPENDED);
39
    if (ret)
43
    p = alloc_page(GFP_KERNEL | __GFP_ZERO);
40
        goto err_disable_autosuspend;
44
    if (!p)
41
diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/panthor/panthor_device.h
45
diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/panthor/panthor_device.h
42
index XXXXXXX..XXXXXXX 100644
46
index XXXXXXX..XXXXXXX 100644
43
--- a/drivers/gpu/drm/panthor/panthor_device.h
47
--- a/drivers/gpu/drm/panthor/panthor_device.h
44
+++ b/drivers/gpu/drm/panthor/panthor_device.h
48
+++ b/drivers/gpu/drm/panthor/panthor_device.h
45
@@ -XXX,XX +XXX,XX @@ struct panthor_device {
49
@@ -XXX,XX +XXX,XX @@ struct panthor_device {
...
...
111
+#include <linux/cleanup.h>
115
+#include <linux/cleanup.h>
112
#include <linux/dma-buf.h>
116
#include <linux/dma-buf.h>
113
#include <linux/dma-mapping.h>
117
#include <linux/dma-mapping.h>
114
#include <linux/err.h>
118
#include <linux/err.h>
115
@@ -XXX,XX +XXX,XX @@
119
@@ -XXX,XX +XXX,XX @@
120
#include <drm/panthor_drm.h>
121
122
#include "panthor_device.h"
123
+#include "panthor_fw.h"
116
#include "panthor_gem.h"
124
#include "panthor_gem.h"
117
#include "panthor_mmu.h"
125
#include "panthor_mmu.h"
118
126
119
+#ifdef CONFIG_DEBUG_FS
127
+#ifdef CONFIG_DEBUG_FS
120
+static void panthor_gem_debugfs_bo_init(struct panthor_gem_object *bo)
128
+static void panthor_gem_debugfs_bo_init(struct panthor_gem_object *bo, u32 type_mask)
121
+{
129
+{
122
+    INIT_LIST_HEAD(&bo->gems.node);
130
+    INIT_LIST_HEAD(&bo->debugfs.node);
123
+    bo->gems.creator.tgid = current->group_leader->pid;
131
+
124
+    get_task_comm(bo->gems.creator.process_name, current->group_leader);
132
+    if (!(type_mask & PANTHOR_BO_FW_MAPPED)) {
125
+}
133
+        bo->debugfs.creator.tgid = current->group_leader->pid;
126
+
134
+        get_task_comm(bo->debugfs.creator.process_name, current->group_leader);
127
+static void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo)
135
+    } else {
136
+        bo->debugfs.creator.tgid = 0;
137
+        snprintf(bo->debugfs.creator.process_name,
138
+             sizeof(bo->debugfs.creator.process_name),
139
+             "kernel");
140
+    }
141
+
142
+    bo->debugfs.bo_mask = type_mask;
143
+}
144
+
145
+static void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo, u32 type_mask)
128
+{
146
+{
129
+    struct panthor_device *ptdev = container_of(bo->base.base.dev,
147
+    struct panthor_device *ptdev = container_of(bo->base.base.dev,
130
+                         struct panthor_device, base);
148
+                         struct panthor_device, base);
131
+
149
+
150
+    panthor_gem_debugfs_bo_init(bo, type_mask);
151
+
132
+    mutex_lock(&ptdev->gems.lock);
152
+    mutex_lock(&ptdev->gems.lock);
133
+    list_add_tail(&bo->gems.node, &ptdev->gems.node);
153
+    list_add_tail(&bo->debugfs.node, &ptdev->gems.node);
134
+    mutex_unlock(&ptdev->gems.lock);
154
+    mutex_unlock(&ptdev->gems.lock);
135
+}
155
+}
136
+
156
+
137
+static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo)
157
+static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo)
138
+{
158
+{
139
+    struct panthor_device *ptdev = container_of(bo->base.base.dev,
159
+    struct panthor_device *ptdev = container_of(bo->base.base.dev,
140
+                         struct panthor_device, base);
160
+                         struct panthor_device, base);
141
+
161
+
142
+    if (list_empty(&bo->gems.node))
162
+    if (list_empty(&bo->debugfs.node))
143
+        return;
163
+        return;
144
+
164
+
145
+    mutex_lock(&ptdev->gems.lock);
165
+    mutex_lock(&ptdev->gems.lock);
146
+    list_del_init(&bo->gems.node);
166
+    list_del_init(&bo->debugfs.node);
147
+    mutex_unlock(&ptdev->gems.lock);
167
+    mutex_unlock(&ptdev->gems.lock);
148
+}
168
+}
169
+
149
+#else
170
+#else
150
+static void panthor_gem_debugfs_bo_init(struct panthor_gem_object *bo) {}
171
+static void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo, u32 type_mask) {}
151
+static void panthor_gem_debugfs_bo_add(struct panthor_gem_object *bo) {}
152
+static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo) {}
172
+static void panthor_gem_debugfs_bo_rm(struct panthor_gem_object *bo) {}
153
+#endif
173
+#endif
154
+
174
+
155
static void panthor_gem_free_object(struct drm_gem_object *obj)
175
static void panthor_gem_free_object(struct drm_gem_object *obj)
156
{
176
{
...
...
160
+    panthor_gem_debugfs_bo_rm(bo);
180
+    panthor_gem_debugfs_bo_rm(bo);
161
+
181
+
162
    /*
182
    /*
163
     * Label might have been allocated with kstrdup_const(),
183
     * Label might have been allocated with kstrdup_const(),
164
     * we need to take that into account when freeing the memory
184
     * we need to take that into account when freeing the memory
165
@@ -XXX,XX +XXX,XX @@ struct drm_gem_object *panthor_gem_create_object(struct drm_device *ddev, size_t
185
@@ -XXX,XX +XXX,XX @@ panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
166
    drm_gem_gpuva_set_lock(&obj->base.base, &obj->gpuva_list_lock);
186
    struct drm_gem_shmem_object *obj;
167
    mutex_init(&obj->label.lock);
187
    struct panthor_kernel_bo *kbo;
168
188
    struct panthor_gem_object *bo;
169
+    panthor_gem_debugfs_bo_init(obj);
189
+    u32 type_mask = PANTHOR_BO_KERNEL;
170
+
190
    int ret;
171
    return &obj->base.base;
191
172
}
192
    if (drm_WARN_ON(&ptdev->base, !vm))
173
193
@@ -XXX,XX +XXX,XX @@ panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
194
    kbo->obj = &obj->base;
195
    bo->flags = bo_flags;
196
197
+    if (vm == panthor_fw_vm(ptdev))
198
+        type_mask |= PANTHOR_BO_FW_MAPPED;
199
+
200
    panthor_gem_kernel_bo_set_label(kbo, name);
201
+    panthor_gem_debugfs_bo_add(to_panthor_bo(kbo->obj), type_mask);
202
+
203
    /* The system and GPU MMU page size might differ, which becomes a
204
     * problem for FW sections that need to be mapped at explicit address
205
     * since our PAGE_SIZE alignment might cover a VA range that's
174
@@ -XXX,XX +XXX,XX @@ panthor_gem_create_with_handle(struct drm_file *file,
206
@@ -XXX,XX +XXX,XX @@ panthor_gem_create_with_handle(struct drm_file *file,
175
    /* drop reference from allocate - handle holds it now. */
207
    /* drop reference from allocate - handle holds it now. */
176
    drm_gem_object_put(&shmem->base);
208
    drm_gem_object_put(&shmem->base);
177
209
178
+    panthor_gem_debugfs_bo_add(bo);
210
+    panthor_gem_debugfs_bo_add(bo, 0);
179
+
211
+
180
    return ret;
212
    return ret;
181
}
213
}
182
214
183
@@ -XXX,XX +XXX,XX @@ panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *label)
215
@@ -XXX,XX +XXX,XX @@ panthor_gem_kernel_bo_set_label(struct panthor_kernel_bo *bo, const char *label)
...
...
217
+        return;
249
+        return;
218
+
250
+
219
+    resident_size = bo->base.pages != NULL ? bo->base.base.size : 0;
251
+    resident_size = bo->base.pages != NULL ? bo->base.base.size : 0;
220
+
252
+
221
+    snprintf(creator_info, sizeof(creator_info),
253
+    snprintf(creator_info, sizeof(creator_info),
222
+         "%s/%d", bo->gems.creator.process_name, bo->gems.creator.tgid);
254
+         "%s/%d", bo->debugfs.creator.process_name, bo->debugfs.creator.tgid);
223
+    seq_printf(m, "%-32s%-16d%-16d%-16zd%-16zd%-16lx",
255
+    seq_printf(m, "%-32s%-16d%-16d%-16zd%-16zd%-16lx",
224
+         creator_info,
256
+         creator_info,
225
+         bo->base.base.name,
257
+         bo->base.base.name,
226
+         refcount,
258
+         refcount,
227
+         bo->base.base.size,
259
+         bo->base.base.size,
...
...
239
+        has_flags = panfrost_gem_print_flag("purgeable", true, has_flags, m);
271
+        has_flags = panfrost_gem_print_flag("purgeable", true, has_flags, m);
240
+    if (!has_flags)
272
+    if (!has_flags)
241
+        seq_puts(m, "none");
273
+        seq_puts(m, "none");
242
+    seq_puts(m, ")");
274
+    seq_puts(m, ")");
243
+
275
+
276
+    seq_printf(m, "%-6s0x%-2x", "", bo->debugfs.bo_mask);
277
+
244
+    mutex_lock(&bo->label.lock);
278
+    mutex_lock(&bo->label.lock);
245
+    seq_printf(m, "%-16s%-60s", "", bo->label.str ? : NULL);
279
+    seq_printf(m, "%-6s%-60s", "", bo->label.str ? : NULL);
246
+    mutex_unlock(&bo->label.lock);
280
+    mutex_unlock(&bo->label.lock);
247
+    seq_puts(m, "\n");
281
+    seq_puts(m, "\n");
248
+
282
+
249
+    totals->size += bo->base.base.size;
283
+    totals->size += bo->base.base.size;
250
+    totals->resident += resident_size;
284
+    totals->resident += resident_size;
...
...
256
+                 struct seq_file *m)
290
+                 struct seq_file *m)
257
+{
291
+{
258
+    struct gem_size_totals totals = {0};
292
+    struct gem_size_totals totals = {0};
259
+    struct panthor_gem_object *bo;
293
+    struct panthor_gem_object *bo;
260
+
294
+
261
+    seq_puts(m, "created-by global-name refcount size resident-size file-offset flags label\n");
295
+    seq_puts(m, "created-by global-name refcount size resident-size file-offset flags kflags label\n");
262
+    seq_puts(m, "------------------------------------------------------------------------------------------------------------------------------------------------\n");
296
+    seq_puts(m, "------------------------------------------------------------------------------------------------------------------------------------------------\n");
263
+
297
+
264
+    scoped_guard(mutex, &ptdev->gems.lock) {
298
+    scoped_guard(mutex, &ptdev->gems.lock) {
265
+        list_for_each_entry(bo, &ptdev->gems.node, gems.node)
299
+        list_for_each_entry(bo, &ptdev->gems.node, debugfs.node)
266
+            panthor_gem_debugfs_bo_print(bo, m, &totals);
300
+            panthor_gem_debugfs_bo_print(bo, m, &totals);
267
+    }
301
+    }
268
+
302
+
269
+    seq_puts(m, "================================================================================================================================================\n");
303
+    seq_puts(m, "==========================================================================================================================================================\n");
270
+    seq_printf(m, "Total size: %zd, Total resident: %zd, Total reclaimable: %zd\n",
304
+    seq_printf(m, "Total size: %zd, Total resident: %zd, Total reclaimable: %zd\n",
271
+         totals.size, totals.resident, totals.reclaimable);
305
+         totals.size, totals.resident, totals.reclaimable);
272
+}
306
+}
273
+#endif
307
+#endif
274
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
308
diff --git a/drivers/gpu/drm/panthor/panthor_gem.h b/drivers/gpu/drm/panthor/panthor_gem.h
275
index XXXXXXX..XXXXXXX 100644
309
index XXXXXXX..XXXXXXX 100644
276
--- a/drivers/gpu/drm/panthor/panthor_gem.h
310
--- a/drivers/gpu/drm/panthor/panthor_gem.h
277
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
311
+++ b/drivers/gpu/drm/panthor/panthor_gem.h
278
@@ -XXX,XX +XXX,XX @@
312
@@ -XXX,XX +XXX,XX @@ struct panthor_vm;
279
313
280
struct panthor_vm;
314
#define PANTHOR_BO_LABEL_MAXLEN    PAGE_SIZE
281
315
316
+#define PANTHOR_BO_KERNEL    BIT(0)
317
+#define PANTHOR_BO_FW_MAPPED    BIT(1)
318
+
282
+/**
319
+/**
283
+ * struct panthor_gem_debugfs - GEM object's DebugFS list information
320
+ * struct panthor_gem_debugfs - GEM object's DebugFS list information
284
+ */
321
+ */
285
+struct panthor_gem_debugfs {
322
+struct panthor_gem_debugfs {
286
+    /**
323
+    /**
...
...
295
+        char process_name[TASK_COMM_LEN];
332
+        char process_name[TASK_COMM_LEN];
296
+
333
+
297
+        /** @creator.tgid: PID of the thread's group leader within its process */
334
+        /** @creator.tgid: PID of the thread's group leader within its process */
298
+        pid_t tgid;
335
+        pid_t tgid;
299
+    } creator;
336
+    } creator;
337
+
338
+    /** @bo_mask: Bitmask encoding BO type as {USER, KERNEL} x {GPU, FW} */
339
+    u32 bo_mask;
300
+};
340
+};
301
+
341
+
302
/**
342
/**
303
* struct panthor_gem_object - Driver specific GEM object.
343
* struct panthor_gem_object - Driver specific GEM object.
304
*/
344
*/
305
@@ -XXX,XX +XXX,XX @@ struct panthor_gem_object {
345
@@ -XXX,XX +XXX,XX @@ struct panthor_gem_object {
306
        /** @lock.str: Protects access to the @label.str field. */
346
        /** @lock.str: Protects access to the @label.str field. */
307
        struct mutex lock;
347
        struct mutex lock;
308
    } label;
348
    } label;
309
+
349
+
310
+#ifdef CONFIG_DEBUG_FS
350
+#ifdef CONFIG_DEBUG_FS
311
+    struct panthor_gem_debugfs gems;
351
+    struct panthor_gem_debugfs debugfs;
312
+#endif
352
+#endif
313
};
353
};
314
354
315
/**
355
/**
316
@@ -XXX,XX +XXX,XX @@ panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
356
@@ -XXX,XX +XXX,XX @@ panthor_kernel_bo_create(struct panthor_device *ptdev, struct panthor_vm *vm,
...
...
diff view generated by jsdifflib