Commit e310b435 authored by Chris Wilson's avatar Chris Wilson Committed by Rodrigo Vivi

drm/i915/selftests: Add compiler paranoia for checking HWSP values

Since we want to read the values from the HWSP as written to by the GPU,
warn the compiler that the values are volatile.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200728152110.830-2-chris@chris-wilson.co.ukSigned-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 98ef0674
...@@ -491,7 +491,7 @@ checked_intel_timeline_create(struct intel_gt *gt) ...@@ -491,7 +491,7 @@ checked_intel_timeline_create(struct intel_gt *gt)
if (IS_ERR(tl)) if (IS_ERR(tl))
return tl; return tl;
if (*tl->hwsp_seqno != tl->seqno) { if (READ_ONCE(*tl->hwsp_seqno) != tl->seqno) {
pr_err("Timeline created with incorrect breadcrumb, found %x, expected %x\n", pr_err("Timeline created with incorrect breadcrumb, found %x, expected %x\n",
*tl->hwsp_seqno, tl->seqno); *tl->hwsp_seqno, tl->seqno);
intel_timeline_put(tl); intel_timeline_put(tl);
...@@ -561,9 +561,9 @@ static int live_hwsp_engine(void *arg) ...@@ -561,9 +561,9 @@ static int live_hwsp_engine(void *arg)
for (n = 0; n < count; n++) { for (n = 0; n < count; n++) {
struct intel_timeline *tl = timelines[n]; struct intel_timeline *tl = timelines[n];
if (!err && *tl->hwsp_seqno != n) { if (!err && READ_ONCE(*tl->hwsp_seqno) != n) {
pr_err("Invalid seqno stored in timeline %lu @ %x, found 0x%x\n", GEM_TRACE_ERR("Invalid seqno:%lu stored in timeline %llu @ %x, found 0x%x\n",
n, tl->hwsp_offset, *tl->hwsp_seqno); n, tl->fence_context, tl->hwsp_offset, *tl->hwsp_seqno);
GEM_TRACE_DUMP(); GEM_TRACE_DUMP();
err = -EINVAL; err = -EINVAL;
} }
...@@ -633,9 +633,9 @@ static int live_hwsp_alternate(void *arg) ...@@ -633,9 +633,9 @@ static int live_hwsp_alternate(void *arg)
for (n = 0; n < count; n++) { for (n = 0; n < count; n++) {
struct intel_timeline *tl = timelines[n]; struct intel_timeline *tl = timelines[n];
if (!err && *tl->hwsp_seqno != n) { if (!err && READ_ONCE(*tl->hwsp_seqno) != n) {
pr_err("Invalid seqno stored in timeline %lu @ %x, found 0x%x\n", GEM_TRACE_ERR("Invalid seqno:%lu stored in timeline %llu @ %x, found 0x%x\n",
n, tl->hwsp_offset, *tl->hwsp_seqno); n, tl->fence_context, tl->hwsp_offset, *tl->hwsp_seqno);
GEM_TRACE_DUMP(); GEM_TRACE_DUMP();
err = -EINVAL; err = -EINVAL;
} }
...@@ -733,7 +733,8 @@ static int live_hwsp_wrap(void *arg) ...@@ -733,7 +733,8 @@ static int live_hwsp_wrap(void *arg)
goto out; goto out;
} }
if (*hwsp_seqno[0] != seqno[0] || *hwsp_seqno[1] != seqno[1]) { if (READ_ONCE(*hwsp_seqno[0]) != seqno[0] ||
READ_ONCE(*hwsp_seqno[1]) != seqno[1]) {
pr_err("Bad timeline values: found (%x, %x), expected (%x, %x)\n", pr_err("Bad timeline values: found (%x, %x), expected (%x, %x)\n",
*hwsp_seqno[0], *hwsp_seqno[1], *hwsp_seqno[0], *hwsp_seqno[1],
seqno[0], seqno[1]); seqno[0], seqno[1]);
...@@ -966,9 +967,10 @@ static int live_hwsp_recycle(void *arg) ...@@ -966,9 +967,10 @@ static int live_hwsp_recycle(void *arg)
break; break;
} }
if (*tl->hwsp_seqno != count) { if (READ_ONCE(*tl->hwsp_seqno) != count) {
pr_err("Invalid seqno stored in timeline %lu @ tl->hwsp_offset, found 0x%x\n", GEM_TRACE_ERR("Invalid seqno:%lu stored in timeline %llu @ %x found 0x%x\n",
count, *tl->hwsp_seqno); count, tl->fence_context,
tl->hwsp_offset, *tl->hwsp_seqno);
GEM_TRACE_DUMP(); GEM_TRACE_DUMP();
err = -EINVAL; err = -EINVAL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment