[Nouveau] [PATCH 03/10] drm/nouveau: guard nv_error && printk pairs with nv_printk_enabled
Marcin Slusarz
marcin.slusarz at gmail.com
Sun Aug 19 13:59:58 PDT 2012
With CONFIG_NOUVEAU_DEBUG set to 0 or subdev debug flags set to 0 code paths
which use nv_error and printk would print awkwardly formatted data.
Guard those code paths with nv_printk_enabled.
Additionally, fix reporting levels of: nv20_graph_intr, nv40_graph_intr
and nv50_graph_intr.
Signed-off-by: Marcin Slusarz <marcin.slusarz at gmail.com>
---
drivers/gpu/drm/nouveau/core/engine/copy/nva3.c | 4 +++-
drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c | 4 +++-
drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c | 2 +-
drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c | 4 +++-
drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c | 5 ++++-
drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c | 5 ++++-
drivers/gpu/drm/nouveau/core/engine/graph/nv04.c | 2 +-
drivers/gpu/drm/nouveau/core/engine/graph/nv10.c | 2 +-
drivers/gpu/drm/nouveau/core/engine/graph/nv20.c | 6 +++---
drivers/gpu/drm/nouveau/core/engine/graph/nv40.c | 4 ++--
drivers/gpu/drm/nouveau/core/engine/graph/nv50.c | 21 ++++++++++++---------
drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c | 4 +++-
drivers/gpu/drm/nouveau/core/engine/graph/nve0.c | 4 +++-
drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c | 2 +-
drivers/gpu/drm/nouveau/core/subdev/mxm/mxms.c | 2 +-
15 files changed, 45 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/core/engine/copy/nva3.c b/drivers/gpu/drm/nouveau/core/engine/copy/nva3.c
index c43c334..fd4ea19 100644
--- a/drivers/gpu/drm/nouveau/core/engine/copy/nva3.c
+++ b/drivers/gpu/drm/nouveau/core/engine/copy/nva3.c
@@ -120,11 +120,13 @@ nva3_copy_intr(struct nouveau_subdev *subdev)
engctx = nouveau_engctx_get(engine, inst);
chid = pfifo->chid(pfifo, engctx);
- if (stat & 0x00000040) {
+ if ((stat & 0x00000040) && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "DISPATCH_ERROR [");
nouveau_enum_print(nva3_copy_isr_error_name, ssta);
printk("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n",
chid, inst << 12, subc, mthd, data);
+ }
+ if (stat & 0x00000040) {
nv_wr32(priv, 0x104004, 0x00000040);
stat &= ~0x00000040;
}
diff --git a/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
index 3071e2c..6835d7d 100644
--- a/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/copy/nvc0.c
@@ -133,11 +133,13 @@ nvc0_copy_intr(struct nouveau_subdev *subdev)
engctx = nouveau_engctx_get(engine, inst);
chid = pfifo->chid(pfifo, engctx);
- if (stat & 0x00000040) {
+ if ((stat & 0x00000040) && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "DISPATCH_ERROR [");
nouveau_enum_print(nvc0_copy_isr_error_name, ssta);
printk("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n",
chid, (u64)inst << 12, subc, mthd, data);
+ }
+ if (stat & 0x00000040) {
nv_wr32(priv, 0x104004 + (idx * 0x1000), 0x00000040);
stat &= ~0x00000040;
}
diff --git a/drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c b/drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c
index 198989b..67622aa 100644
--- a/drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c
+++ b/drivers/gpu/drm/nouveau/core/engine/crypt/nv84.c
@@ -147,7 +147,7 @@ nv84_crypt_intr(struct nouveau_subdev *subdev)
engctx = nouveau_engctx_get(engine, inst);
chid = pfifo->chid(pfifo, engctx);
- if (stat) {
+ if (stat && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "");
nouveau_bitfield_print(nv84_crypt_intr_mask, stat);
printk(" ch %d [0x%010llx] mthd 0x%04x data 0x%08x\n",
diff --git a/drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c b/drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c
index 835b8eb..9a589d3 100644
--- a/drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c
+++ b/drivers/gpu/drm/nouveau/core/engine/crypt/nv98.c
@@ -120,11 +120,13 @@ nv98_crypt_intr(struct nouveau_subdev *subdev)
engctx = nouveau_engctx_get(engine, inst);
chid = pfifo->chid(pfifo, engctx);
- if (stat & 0x00000040) {
+ if ((stat & 0x00000040) && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "DISPATCH_ERROR [");
nouveau_enum_print(nv98_crypt_isr_error_name, ssta);
printk("] ch %d [0x%010llx] subc %d mthd 0x%04x data 0x%08x\n",
chid, (u64)inst << 12, subc, mthd, data);
+ }
+ if (stat & 0x00000040) {
nv_wr32(priv, 0x087004, 0x00000040);
stat &= ~0x00000040;
}
diff --git a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
index 42276d9..31f5a96 100644
--- a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c
@@ -395,6 +395,9 @@ nvc0_fifo_isr_vm_fault(struct nvc0_fifo_priv *priv, int unit)
u32 stat = nv_rd32(priv, 0x280c + (unit * 0x10));
u32 client = (stat & 0x00001f00) >> 8;
+ if (!nv_printk_enabled(priv, ERROR))
+ return;
+
nv_error(priv, "%s fault at 0x%010llx [", (stat & 0x00000080) ?
"write" : "read", (u64)vahi << 32 | valo);
nouveau_enum_print(nvc0_fifo_fault_reason, stat & 0x0000000f);
@@ -459,7 +462,7 @@ nvc0_fifo_isr_subfifo_intr(struct nvc0_fifo_priv *priv, int unit)
show &= ~0x00800000;
}
- if (show) {
+ if (show && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "SUBFIFO%d:", unit);
nouveau_bitfield_print(nvc0_fifo_subfifo_intr, show);
printk("\n");
diff --git a/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c b/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c
index 945038c..b2612b0 100644
--- a/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/fifo/nve0.c
@@ -408,6 +408,9 @@ nve0_fifo_isr_vm_fault(struct nve0_fifo_priv *priv, int unit)
u32 stat = nv_rd32(priv, 0x280c + (unit * 0x10));
u32 client = (stat & 0x00001f00) >> 8;
+ if (!nv_printk_enabled(priv, ERROR))
+ return;
+
nv_error(priv, "PFIFO: %s fault at 0x%010llx [", (stat & 0x00000080) ?
"write" : "read", (u64)vahi << 32 | valo);
nouveau_enum_print(nve0_fifo_fault_reason, stat & 0x0000000f);
@@ -472,7 +475,7 @@ nve0_fifo_isr_subfifo_intr(struct nve0_fifo_priv *priv, int unit)
show &= ~0x00800000;
}
- if (show) {
+ if (show && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "SUBFIFO%d:", unit);
nouveau_bitfield_print(nve0_fifo_subfifo_intr, show);
printk("\n");
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv04.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv04.c
index e5b0189..267ac60 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nv04.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv04.c
@@ -1296,7 +1296,7 @@ nv04_graph_intr(struct nouveau_subdev *subdev)
nv_wr32(priv, NV03_PGRAPH_INTR, stat);
nv_wr32(priv, NV04_PGRAPH_FIFO, 0x00000001);
- if (show) {
+ if (show && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "");
nouveau_bitfield_print(nv04_graph_intr_name, show);
printk(" nsource:");
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv10.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv10.c
index ce38196..35c4d71 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nv10.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv10.c
@@ -1192,7 +1192,7 @@ nv10_graph_intr(struct nouveau_subdev *subdev)
nv_wr32(priv, NV03_PGRAPH_INTR, stat);
nv_wr32(priv, NV04_PGRAPH_FIFO, 0x00000001);
- if (show) {
+ if (show && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "");
nouveau_bitfield_print(nv10_graph_intr_name, show);
printk(" nsource:");
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv20.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv20.c
index 8f3f619..9e756e1 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nv20.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv20.c
@@ -223,15 +223,15 @@ nv20_graph_intr(struct nouveau_subdev *subdev)
nv_wr32(priv, NV03_PGRAPH_INTR, stat);
nv_wr32(priv, NV04_PGRAPH_FIFO, 0x00000001);
- if (show) {
- nv_info(priv, "");
+ if (show && nv_printk_enabled(priv, ERROR)) {
+ nv_error(priv, "");
nouveau_bitfield_print(nv10_graph_intr_name, show);
printk(" nsource:");
nouveau_bitfield_print(nv04_graph_nsource, nsource);
printk(" nstatus:");
nouveau_bitfield_print(nv10_graph_nstatus, nstatus);
printk("\n");
- nv_info(priv, "ch %d/%d class 0x%04x mthd 0x%04x data 0x%08x\n",
+ nv_error(priv, "ch %d/%d class 0x%04x mthd 0x%04x data 0x%08x\n",
chid, subc, class, mthd, data);
}
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c
index 5690fe3..7817f53 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv40.c
@@ -292,8 +292,8 @@ nv40_graph_intr(struct nouveau_subdev *subdev)
nv_wr32(priv, NV03_PGRAPH_INTR, stat);
nv_wr32(priv, NV04_PGRAPH_FIFO, 0x00000001);
- if (show) {
- nv_info(priv, "");
+ if (show && nv_printk_enabled(priv, ERROR)) {
+ nv_error(priv, "");
nouveau_bitfield_print(nv10_graph_intr_name, show);
printk(" nsource:");
nouveau_bitfield_print(nv04_graph_nsource, nsource);
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c b/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c
index f60aec9..6859514 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nv50.c
@@ -274,7 +274,7 @@ nv84_graph_tlb_flush(struct nouveau_engine *engine)
} while (!idle &&
!(timeout = ptimer->read(ptimer) - start > 2000000000));
- if (timeout) {
+ if (timeout && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "PGRAPH TLB flush idle timeout fail\n");
nv_error(priv, "PGRAPH_STATUS: ");
@@ -417,6 +417,8 @@ nv50_priv_mp_trap(struct nv50_graph_priv *priv, int tpid, int display)
pc = nv_rd32(priv, addr + 0x24);
oplow = nv_rd32(priv, addr + 0x70);
ophigh = nv_rd32(priv, addr + 0x74);
+ }
+ if (display && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "TRAP_MP_EXEC - "
"TP %d MP %d: ", tpid, i);
nouveau_enum_print(nv50_mp_exec_error_names, status);
@@ -622,7 +624,7 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,
/* M2MF: Memory to memory copy engine. */
if (status & 0x002) {
u32 ustatus = nv_rd32(priv, 0x406800) & 0x7fffffff;
- if (display) {
+ if (display && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "TRAP_M2MF");
nouveau_bitfield_print(nv50_graph_trap_m2mf, ustatus);
printk("\n");
@@ -643,7 +645,7 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,
/* VFETCH: Fetches data from vertex buffers. */
if (status & 0x004) {
u32 ustatus = nv_rd32(priv, 0x400c04) & 0x7fffffff;
- if (display) {
+ if (display && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "TRAP_VFETCH");
nouveau_bitfield_print(nv50_graph_trap_vfetch, ustatus);
printk("\n");
@@ -660,7 +662,7 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,
/* STRMOUT: DirectX streamout / OpenGL transform feedback. */
if (status & 0x008) {
ustatus = nv_rd32(priv, 0x401800) & 0x7fffffff;
- if (display) {
+ if (display && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "TRAP_STRMOUT");
nouveau_bitfield_print(nv50_graph_trap_strmout, ustatus);
printk("\n");
@@ -681,7 +683,7 @@ nv50_graph_trap_handler(struct nv50_graph_priv *priv, u32 display,
/* CCACHE: Handles code and c[] caches and fills them. */
if (status & 0x010) {
ustatus = nv_rd32(priv, 0x405018) & 0x7fffffff;
- if (display) {
+ if (display && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "TRAP_CCACHE");
nouveau_bitfield_print(nv50_graph_trap_ccache, ustatus);
printk("\n");
@@ -772,7 +774,7 @@ nv50_graph_intr(struct nouveau_subdev *subdev)
nouveau_handle_put(handle);
}
- if (show & 0x00100000) {
+ if ((show & 0x00100000) && nv_printk_enabled(priv, ERROR)) {
u32 ecode = nv_rd32(priv, 0x400110);
nv_error(priv, "DATA_ERROR ");
nouveau_enum_print(nv50_data_error_names, ecode);
@@ -787,15 +789,16 @@ nv50_graph_intr(struct nouveau_subdev *subdev)
nv_wr32(priv, 0x400100, stat);
nv_wr32(priv, 0x400500, 0x00010001);
- if (show) {
- nv_info(priv, "");
+ if (show && nv_printk_enabled(priv, ERROR)) {
+ nv_error(priv, "");
nouveau_bitfield_print(nv50_graph_intr_name, show);
printk("\n");
nv_error(priv, "ch %d [0x%010llx] subc %d class 0x%04x "
"mthd 0x%04x data 0x%08x\n",
chid, (u64)inst << 12, subc, class, mthd, data);
- nv50_fb_trap(nouveau_fb(priv), 1);
}
+ if (show)
+ nv50_fb_trap(nouveau_fb(priv), 1);
if (nv_rd32(priv, 0x400824) & (1 << 31))
nv_wr32(priv, 0x400824, nv_rd32(priv, 0x400824) & ~(1 << 31));
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
index 80c263b..1cdd608 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
@@ -265,12 +265,14 @@ nvc0_graph_intr(struct nouveau_subdev *subdev)
stat &= ~0x00000020;
}
- if (stat & 0x00100000) {
+ if ((stat & 0x00100000) && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "DATA_ERROR [");
nouveau_enum_print(nv50_data_error_names, code);
printk("] ch %d [0x%010llx] subc %d class 0x%04x "
"mthd 0x%04x data 0x%08x\n",
chid, inst << 12, subc, class, mthd, data);
+ }
+ if (stat & 0x00100000) {
nv_wr32(priv, 0x400100, 0x00100000);
stat &= ~0x00100000;
}
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c b/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c
index 2ba125b..ea58e10 100644
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c
@@ -161,12 +161,14 @@ nve0_graph_intr(struct nouveau_subdev *subdev)
stat &= ~0x00000020;
}
- if (stat & 0x00100000) {
+ if ((stat & 0x00100000) && nv_printk_enabled(priv, ERROR)) {
nv_error(priv, "DATA_ERROR [");
nouveau_enum_print(nv50_data_error_names, code);
printk("] ch %d [0x%010llx] subc %d class 0x%04x "
"mthd 0x%04x data 0x%08x\n",
chid, inst, subc, class, mthd, data);
+ }
+ if (stat & 0x00100000) {
nv_wr32(priv, 0x400100, 0x00100000);
stat &= ~0x00100000;
}
diff --git a/drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c b/drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c
index eaf18fb..a36d190 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/fb/nv50.c
@@ -447,7 +447,7 @@ nv50_fb_trap(struct nouveau_fb *pfb, int display)
}
nv_wr32(priv, 0x100c90, idx | 0x80000000);
- if (!display)
+ if (!display || !nv_printk_enabled(priv, ERROR))
return;
/* decode status bits into something more useful */
diff --git a/drivers/gpu/drm/nouveau/core/subdev/mxm/mxms.c b/drivers/gpu/drm/nouveau/core/subdev/mxm/mxms.c
index 839ca1e..8cecafe 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/mxm/mxms.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/mxm/mxms.c
@@ -146,7 +146,7 @@ mxms_foreach(struct nouveau_mxm *mxm, u8 types,
return false;
}
- if (nv_subdev(mxm)->debug >= NV_DBG_DEBUG && (exec == NULL)) {
+ if ((exec == NULL) && nv_printk_enabled(mxm, DEBUG)) {
static const char * mxms_desc_name[] = {
"ODS", "SCCS", "TS", "IPS",
"GSD", "VSS", "BCS", "FCS",
--
1.7.8.6
More information about the Nouveau
mailing list