#include "display/intel_fbdev.h"
 
 #include "i915_drv.h"
+#include "i915_perf.h"
 #include "i915_globals.h"
 #include "i915_selftest.h"
 
                return 0;
        }
 
-       return pci_register_driver(&i915_pci_driver);
+       err = pci_register_driver(&i915_pci_driver);
+       if (err)
+               return err;
+
+       i915_perf_sysctl_register();
+       return 0;
 }
 
 static void __exit i915_exit(void)
        if (!i915_pci_driver.driver.owner)
                return;
 
+       i915_perf_sysctl_unregister();
        pci_unregister_driver(&i915_pci_driver);
        i915_globals_exit();
 }
 
        struct i915_vma *vma;
 };
 
+static struct ctl_table_header *sysctl_header;
+
 static enum hrtimer_restart oa_poll_check_timer_cb(struct hrtimer *hrtimer);
 
 void i915_oa_config_release(struct kref *ref)
 };
 
 /**
- * i915_perf_init - initialize i915-perf state on module load
+ * i915_perf_init - initialize i915-perf state on module bind
  * @i915: i915 device instance
  *
  * Initializes i915-perf state without exposing anything to userspace.
 
                oa_sample_rate_hard_limit = 1000 *
                        (RUNTIME_INFO(i915)->cs_timestamp_frequency_khz / 2);
-               perf->sysctl_header = register_sysctl_table(dev_root);
 
                mutex_init(&perf->metrics_lock);
                idr_init(&perf->metrics_idr);
        return 0;
 }
 
+void i915_perf_sysctl_register(void)
+{
+       sysctl_header = register_sysctl_table(dev_root);
+}
+
+void i915_perf_sysctl_unregister(void)
+{
+       unregister_sysctl_table(sysctl_header);
+}
+
 /**
  * i915_perf_fini - Counter part to i915_perf_init()
  * @i915: i915 device instance
        idr_for_each(&perf->metrics_idr, destroy_config, perf);
        idr_destroy(&perf->metrics_idr);
 
-       unregister_sysctl_table(perf->sysctl_header);
-
        memset(&perf->ops, 0, sizeof(perf->ops));
        perf->i915 = NULL;
 }
 
 void i915_perf_register(struct drm_i915_private *i915);
 void i915_perf_unregister(struct drm_i915_private *i915);
 int i915_perf_ioctl_version(void);
+void i915_perf_sysctl_register(void);
+void i915_perf_sysctl_unregister(void);
 
 int i915_perf_open_ioctl(struct drm_device *dev, void *data,
                         struct drm_file *file);