Skip to content

Commit 6961986

Browse files
andrealmeidalexdeucher
authored andcommitted
drm/amdgpu: Move coredump code to amdgpu_reset file
Giving that we use codedump just for device resets, move it's functions and structs to a more semantic file, the amdgpu_reset.{c, h}. Signed-off-by: André Almeida <[email protected]> Signed-off-by: Shashank Sharma <[email protected]> Reviewed-by: Shashank Sharma <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 2d6a2a2 commit 6961986

File tree

4 files changed

+90
-87
lines changed

4 files changed

+90
-87
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -773,15 +773,6 @@ struct amdgpu_mqd {
773773
struct amdgpu_reset_domain;
774774
struct amdgpu_fru_info;
775775

776-
#ifdef CONFIG_DEV_COREDUMP
777-
struct amdgpu_coredump_info {
778-
struct amdgpu_device *adev;
779-
struct amdgpu_task_info reset_task_info;
780-
struct timespec64 reset_time;
781-
bool reset_vram_lost;
782-
};
783-
#endif
784-
785776
struct amdgpu_reset_info {
786777
/* reset dump register */
787778
u32 *reset_dump_reg_list;

drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
#include <linux/slab.h>
3333
#include <linux/iommu.h>
3434
#include <linux/pci.h>
35-
#include <linux/devcoredump.h>
36-
#include <generated/utsrelease.h>
3735
#include <linux/pci-p2pdma.h>
3836
#include <linux/apple-gmux.h>
3937

@@ -5059,82 +5057,6 @@ static int amdgpu_reset_reg_dumps(struct amdgpu_device *adev)
50595057
return 0;
50605058
}
50615059

5062-
#ifndef CONFIG_DEV_COREDUMP
5063-
static void amdgpu_coredump(struct amdgpu_device *adev, bool vram_lost,
5064-
struct amdgpu_reset_context *reset_context)
5065-
{
5066-
}
5067-
#else
5068-
static ssize_t amdgpu_devcoredump_read(char *buffer, loff_t offset,
5069-
size_t count, void *data, size_t datalen)
5070-
{
5071-
struct drm_printer p;
5072-
struct amdgpu_coredump_info *coredump = data;
5073-
struct drm_print_iterator iter;
5074-
int i;
5075-
5076-
iter.data = buffer;
5077-
iter.offset = 0;
5078-
iter.start = offset;
5079-
iter.remain = count;
5080-
5081-
p = drm_coredump_printer(&iter);
5082-
5083-
drm_printf(&p, "**** AMDGPU Device Coredump ****\n");
5084-
drm_printf(&p, "kernel: " UTS_RELEASE "\n");
5085-
drm_printf(&p, "module: " KBUILD_MODNAME "\n");
5086-
drm_printf(&p, "time: %lld.%09ld\n", coredump->reset_time.tv_sec, coredump->reset_time.tv_nsec);
5087-
if (coredump->reset_task_info.pid)
5088-
drm_printf(&p, "process_name: %s PID: %d\n",
5089-
coredump->reset_task_info.process_name,
5090-
coredump->reset_task_info.pid);
5091-
5092-
if (coredump->reset_vram_lost)
5093-
drm_printf(&p, "VRAM is lost due to GPU reset!\n");
5094-
if (coredump->adev->reset_info.num_regs) {
5095-
drm_printf(&p, "AMDGPU register dumps:\nOffset: Value:\n");
5096-
5097-
for (i = 0; i < coredump->adev->reset_info.num_regs; i++)
5098-
drm_printf(&p, "0x%08x: 0x%08x\n",
5099-
coredump->adev->reset_info.reset_dump_reg_list[i],
5100-
coredump->adev->reset_info.reset_dump_reg_value[i]);
5101-
}
5102-
5103-
return count - iter.remain;
5104-
}
5105-
5106-
static void amdgpu_devcoredump_free(void *data)
5107-
{
5108-
kfree(data);
5109-
}
5110-
5111-
static void amdgpu_coredump(struct amdgpu_device *adev, bool vram_lost,
5112-
struct amdgpu_reset_context *reset_context)
5113-
{
5114-
struct amdgpu_coredump_info *coredump;
5115-
struct drm_device *dev = adev_to_drm(adev);
5116-
5117-
coredump = kzalloc(sizeof(*coredump), GFP_NOWAIT);
5118-
5119-
if (!coredump) {
5120-
DRM_ERROR("%s: failed to allocate memory for coredump\n", __func__);
5121-
return;
5122-
}
5123-
5124-
coredump->reset_vram_lost = vram_lost;
5125-
5126-
if (reset_context->job && reset_context->job->vm)
5127-
coredump->reset_task_info = reset_context->job->vm->task_info;
5128-
5129-
coredump->adev = adev;
5130-
5131-
ktime_get_ts64(&coredump->reset_time);
5132-
5133-
dev_coredumpm(dev->dev, THIS_MODULE, coredump, 0, GFP_NOWAIT,
5134-
amdgpu_devcoredump_read, amdgpu_devcoredump_free);
5135-
}
5136-
#endif
5137-
51385060
int amdgpu_do_asic_reset(struct list_head *device_list_handle,
51395061
struct amdgpu_reset_context *reset_context)
51405062
{

drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
*
2222
*/
2323

24+
#include <linux/devcoredump.h>
25+
#include <generated/utsrelease.h>
26+
2427
#include "amdgpu_reset.h"
2528
#include "aldebaran.h"
2629
#include "sienna_cichlid.h"
@@ -159,5 +162,81 @@ void amdgpu_device_unlock_reset_domain(struct amdgpu_reset_domain *reset_domain)
159162
up_write(&reset_domain->sem);
160163
}
161164

165+
#ifndef CONFIG_DEV_COREDUMP
166+
void amdgpu_coredump(struct amdgpu_device *adev, bool vram_lost,
167+
struct amdgpu_reset_context *reset_context)
168+
{
169+
}
170+
#else
171+
static ssize_t
172+
amdgpu_devcoredump_read(char *buffer, loff_t offset, size_t count,
173+
void *data, size_t datalen)
174+
{
175+
struct drm_printer p;
176+
struct amdgpu_coredump_info *coredump = data;
177+
struct drm_print_iterator iter;
178+
int i;
179+
180+
iter.data = buffer;
181+
iter.offset = 0;
182+
iter.start = offset;
183+
iter.remain = count;
184+
185+
p = drm_coredump_printer(&iter);
186+
187+
drm_printf(&p, "**** AMDGPU Device Coredump ****\n");
188+
drm_printf(&p, "kernel: " UTS_RELEASE "\n");
189+
drm_printf(&p, "module: " KBUILD_MODNAME "\n");
190+
drm_printf(&p, "time: %lld.%09ld\n", coredump->reset_time.tv_sec,
191+
coredump->reset_time.tv_nsec);
192+
193+
if (coredump->reset_task_info.pid)
194+
drm_printf(&p, "process_name: %s PID: %d\n",
195+
coredump->reset_task_info.process_name,
196+
coredump->reset_task_info.pid);
197+
198+
if (coredump->reset_vram_lost)
199+
drm_printf(&p, "VRAM is lost due to GPU reset!\n");
200+
if (coredump->adev->reset_info.num_regs) {
201+
drm_printf(&p, "AMDGPU register dumps:\nOffset: Value:\n");
202+
203+
for (i = 0; i < coredump->adev->reset_info.num_regs; i++)
204+
drm_printf(&p, "0x%08x: 0x%08x\n",
205+
coredump->adev->reset_info.reset_dump_reg_list[i],
206+
coredump->adev->reset_info.reset_dump_reg_value[i]);
207+
}
208+
209+
return count - iter.remain;
210+
}
162211

212+
static void amdgpu_devcoredump_free(void *data)
213+
{
214+
kfree(data);
215+
}
163216

217+
void amdgpu_coredump(struct amdgpu_device *adev, bool vram_lost,
218+
struct amdgpu_reset_context *reset_context)
219+
{
220+
struct amdgpu_coredump_info *coredump;
221+
struct drm_device *dev = adev_to_drm(adev);
222+
223+
coredump = kzalloc(sizeof(*coredump), GFP_NOWAIT);
224+
225+
if (!coredump) {
226+
DRM_ERROR("%s: failed to allocate memory for coredump\n", __func__);
227+
return;
228+
}
229+
230+
coredump->reset_vram_lost = vram_lost;
231+
232+
if (reset_context->job && reset_context->job->vm)
233+
coredump->reset_task_info = reset_context->job->vm->task_info;
234+
235+
coredump->adev = adev;
236+
237+
ktime_get_ts64(&coredump->reset_time);
238+
239+
dev_coredumpm(dev->dev, THIS_MODULE, coredump, 0, GFP_NOWAIT,
240+
amdgpu_devcoredump_read, amdgpu_devcoredump_free);
241+
}
242+
#endif

drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ struct amdgpu_reset_domain {
8989
atomic_t reset_res;
9090
};
9191

92+
#ifdef CONFIG_DEV_COREDUMP
93+
struct amdgpu_coredump_info {
94+
struct amdgpu_device *adev;
95+
struct amdgpu_task_info reset_task_info;
96+
struct timespec64 reset_time;
97+
bool reset_vram_lost;
98+
};
99+
#endif
92100

93101
int amdgpu_reset_init(struct amdgpu_device *adev);
94102
int amdgpu_reset_fini(struct amdgpu_device *adev);
@@ -130,6 +138,9 @@ void amdgpu_device_lock_reset_domain(struct amdgpu_reset_domain *reset_domain);
130138

131139
void amdgpu_device_unlock_reset_domain(struct amdgpu_reset_domain *reset_domain);
132140

141+
void amdgpu_coredump(struct amdgpu_device *adev, bool vram_lost,
142+
struct amdgpu_reset_context *reset_context);
143+
133144
#define for_each_handler(i, handler, reset_ctl) \
134145
for (i = 0; (i < AMDGPU_RESET_MAX_HANDLERS) && \
135146
(handler = (*reset_ctl->reset_handlers)[i]); \

0 commit comments

Comments
 (0)