hc
2024-05-16 8d2a02b24d66aa359e83eebc1ed3c0f85367a1cb
kernel/drivers/gpu/arm/bifrost/mmu/backend/mali_kbase_mmu_jm.c
....@@ -1,7 +1,7 @@
11 // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
22 /*
33 *
4
- * (C) COPYRIGHT 2019-2021 ARM Limited. All rights reserved.
4
+ * (C) COPYRIGHT 2019-2023 ARM Limited. All rights reserved.
55 *
66 * This program is free software and is provided to you under the terms of the
77 * GNU General Public License version 2 as published by the Free Software
....@@ -63,15 +63,16 @@
6363 u32 const exception_data = (status >> 8) & 0xFFFFFF;
6464 int const as_no = as->number;
6565 unsigned long flags;
66
+ const uintptr_t fault_addr = fault->addr;
6667
6768 /* terminal fault, print info about the fault */
6869 dev_err(kbdev->dev,
69
- "GPU bus fault in AS%d at VA 0x%016llX\n"
70
+ "GPU bus fault in AS%d at PA %pK\n"
7071 "raw fault status: 0x%X\n"
7172 "exception type 0x%X: %s\n"
7273 "exception data 0x%X\n"
7374 "pid: %d\n",
74
- as_no, fault->addr,
75
+ as_no, (void *)fault_addr,
7576 status,
7677 exception_type, kbase_gpu_exception_name(exception_type),
7778 exception_data,
....@@ -94,6 +95,7 @@
9495 KBASE_MMU_FAULT_TYPE_BUS_UNEXPECTED);
9596 kbase_mmu_hw_enable_fault(kbdev, as,
9697 KBASE_MMU_FAULT_TYPE_BUS_UNEXPECTED);
98
+
9799 }
98100
99101 /*
....@@ -185,6 +187,7 @@
185187 KBASE_MMU_FAULT_TYPE_PAGE_UNEXPECTED);
186188 kbase_mmu_hw_enable_fault(kbdev, as,
187189 KBASE_MMU_FAULT_TYPE_PAGE_UNEXPECTED);
190
+
188191 }
189192
190193 /**
....@@ -240,13 +243,13 @@
240243 * hw counters dumping in progress, signal the
241244 * other thread that it failed
242245 */
243
- spin_lock_irqsave(&kbdev->hwcnt.lock, flags);
246
+ spin_lock_irqsave(&kbdev->hwcnt.lock, flags);
244247 if ((kbdev->hwcnt.kctx == kctx) &&
245248 (kbdev->hwcnt.backend.state ==
246249 KBASE_INSTR_STATE_DUMPING))
247
- kbdev->hwcnt.backend.state =
248
- KBASE_INSTR_STATE_FAULT;
249
- spin_unlock_irqrestore(&kbdev->hwcnt.lock, flags);
250
+ kbdev->hwcnt.backend.state = KBASE_INSTR_STATE_FAULT;
251
+
252
+ spin_unlock_irqrestore(&kbdev->hwcnt.lock, flags);
250253
251254 /*
252255 * Stop the kctx from submitting more jobs and cause it
....@@ -326,7 +329,7 @@
326329
327330 while (bf_bits | pf_bits) {
328331 struct kbase_as *as;
329
- int as_no;
332
+ unsigned int as_no;
330333 struct kbase_context *kctx;
331334 struct kbase_fault *fault;
332335
....@@ -421,13 +424,14 @@
421424 return kbase_job_slot_softstop_start_rp(kctx, reg);
422425 }
423426
424
-int kbase_mmu_as_init(struct kbase_device *kbdev, int i)
427
+int kbase_mmu_as_init(struct kbase_device *kbdev, unsigned int i)
425428 {
426429 kbdev->as[i].number = i;
427430 kbdev->as[i].bf_data.addr = 0ULL;
428431 kbdev->as[i].pf_data.addr = 0ULL;
432
+ kbdev->as[i].is_unresponsive = false;
429433
430
- kbdev->as[i].pf_wq = alloc_workqueue("mali_mmu%d", 0, 1, i);
434
+ kbdev->as[i].pf_wq = alloc_workqueue("mali_mmu%u", 0, 1, i);
431435 if (!kbdev->as[i].pf_wq)
432436 return -ENOMEM;
433437