[PATCH] drm/i915/gvt: add new mmio_info flag to avoid log flood
Pei Zhang
pei.zhang at intel.com
Wed Feb 15 17:04:20 UTC 2017
If guest is accessing an un-expected mmio through cmd, gvt will print an
error log. In some special case, the guest cmd access is very huge which
cause the error log flood. Add a special flag to avoid this condition.
Signed-off-by: Pei Zhang <pei.zhang at intel.com>
---
drivers/gpu/drm/i915/gvt/cmd_parser.c | 5 ++++-
drivers/gpu/drm/i915/gvt/handlers.c | 16 ++++++++++++++++
drivers/gpu/drm/i915/gvt/mmio.h | 4 ++++
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index 7ee1db7..9dc55df 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -830,8 +830,11 @@ static int cmd_reg_handler(struct parser_exec_state *s,
}
if (!intel_gvt_mmio_is_cmd_access(gvt, offset)) {
- gvt_err("vgpu%d: %s access to non-render register (%x)\n",
+ if (!intel_gvt_mmio_is_cmd_access_violate(gvt, offset)) {
+ intel_gvt_mmio_set_cmd_access_violate(gvt, offset);
+ gvt_err("vgpu%d: %s access to non-render register (%x)\n",
s->vgpu->id, cmd, offset);
+ }
return 0;
}
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index 8fc673a..48176b3 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -61,6 +61,8 @@
#define F_CMD_ACCESSED (1 << 5)
/* This reg could be accessed by unaligned address */
#define F_UNALIGN (1 << 6)
+/* If guest cmd access a mmio without CMD_ACCESS flag, record it */
+#define F_CMD_ACCESS_VIOLATE (1 << 7)
unsigned long intel_gvt_get_device_type(struct intel_gvt *gvt)
{
@@ -2755,6 +2757,20 @@ bool intel_gvt_mmio_is_cmd_access(struct intel_gvt *gvt,
F_CMD_ACCESS;
}
+void intel_gvt_mmio_set_cmd_access_violate(struct intel_gvt *gvt,
+ unsigned int offset)
+{
+ gvt->mmio.mmio_attribute[offset >> 2] |=
+ F_CMD_ACCESS_VIOLATE;
+}
+
+bool intel_gvt_mmio_is_cmd_access_violate(struct intel_gvt *gvt,
+ unsigned int offset)
+{
+ return gvt->mmio.mmio_attribute[offset >> 2] &
+ F_CMD_ACCESS_VIOLATE;
+}
+
/**
* intel_gvt_mmio_is_unalign - mark a MMIO could be accessed unaligned
* @gvt: a GVT device
diff --git a/drivers/gpu/drm/i915/gvt/mmio.h b/drivers/gpu/drm/i915/gvt/mmio.h
index 3bc620f..7b6c78b 100644
--- a/drivers/gpu/drm/i915/gvt/mmio.h
+++ b/drivers/gpu/drm/i915/gvt/mmio.h
@@ -98,10 +98,14 @@ int intel_vgpu_emulate_mmio_write(struct intel_vgpu *vgpu, u64 pa,
void *p_data, unsigned int bytes);
bool intel_gvt_mmio_is_cmd_access(struct intel_gvt *gvt,
unsigned int offset);
+bool intel_gvt_mmio_is_cmd_access_violate(struct intel_gvt *gvt,
+ unsigned int offset);
bool intel_gvt_mmio_is_unalign(struct intel_gvt *gvt, unsigned int offset);
void intel_gvt_mmio_set_accessed(struct intel_gvt *gvt, unsigned int offset);
void intel_gvt_mmio_set_cmd_accessed(struct intel_gvt *gvt,
unsigned int offset);
+void intel_gvt_mmio_set_cmd_access_violate(struct intel_gvt *gvt,
+ unsigned int offset);
bool intel_gvt_mmio_has_mode_mask(struct intel_gvt *gvt, unsigned int offset);
int intel_vgpu_default_mmio_read(struct intel_vgpu *vgpu, unsigned int offset,
void *p_data, unsigned int bytes);
--
2.7.4
More information about the intel-gvt-dev
mailing list