static struct s390_cpu_feature s390_cpu_features[MAX_CPU_FEATURES] = {
        [S390_CPU_FEATURE_MSA]  = {.type = TYPE_HWCAP, .num = HWCAP_NR_MSA},
        [S390_CPU_FEATURE_VXRS] = {.type = TYPE_HWCAP, .num = HWCAP_NR_VXRS},
+       [S390_CPU_FEATURE_UV]   = {.type = TYPE_FACILITY, .num = 158},
 };
 
 /*
 
 #include <linux/stddef.h>
 #include <linux/vmalloc.h>
 #include <linux/slab.h>
+#include <linux/cpufeature.h>
 
 #include <asm/uvdevice.h>
 #include <asm/uv.h>
 
 static int __init uvio_dev_init(void)
 {
-       if (!test_facility(158))
-               return -ENXIO;
        return misc_register(&uvio_dev_miscdev);
 }
 
-module_init(uvio_dev_init);
+module_cpu_feature_match(S390_CPU_FEATURE_UV, uvio_dev_init);
 module_exit(uvio_dev_exit);
 
 MODULE_AUTHOR("IBM Corporation");