return true;
 }
 
+/* gen_device_info will have incorrect default topology values for unsupported kernels.
+ * verify kernel support to ensure OA metrics are accurate.
+ */
+static bool
+oa_metrics_kernel_support(int fd, const struct gen_device_info *devinfo)
+{
+   if (devinfo->gen >= 10) {
+      /* topology uAPI required for CNL+ (kernel 4.17+) make a call to the api
+       * to verify support
+       */
+      struct drm_i915_query_item item = {
+         .query_id = DRM_I915_QUERY_TOPOLOGY_INFO,
+      };
+      struct drm_i915_query query = {
+         .num_items = 1,
+         .items_ptr = (uintptr_t) &item,
+      };
+
+      /* kernel 4.17+ supports the query */
+      return drmIoctl(fd, DRM_IOCTL_I915_QUERY, &query) == 0;
+   }
+
+   if (devinfo->gen >= 8) {
+      /* 4.13+ api required for gen8 - gen9 */
+      int mask;
+      struct drm_i915_getparam gp = {
+         .param = I915_PARAM_SLICE_MASK,
+         .value = &mask,
+      };
+      /* kernel 4.13+ supports this parameter */
+      return drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp) == 0;
+   }
+
+   if (devinfo->gen == 7)
+      /* default topology values are correct for HSW */
+      return true;
+
+   /* oa not supported before gen 7*/
+   return false;
+}
+
 static unsigned
 brw_init_perf_query_info(struct gl_context *ctx)
 {
    init_pipeline_statistic_query_registers(brw);
    brw_perf_query_register_mdapi_statistic_query(brw);
 
+   if (!oa_metrics_kernel_support(screen->fd, devinfo))
+      return false;
+
    if (!query_topology(brw)) {
       /* We need the i915 query uAPI on CNL+ (kernel 4.17+). */
       if (devinfo->gen >= 10)