Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86/cpu: Shorten CPU matching macro

To add cpu-type to the existing CPU matching infrastructure, the base macro
X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE need to append _CPU_TYPE. This
makes an already long name longer, and somewhat incomprehensible.

To avoid this, rename the base macro to X86_MATCH_CPU. The macro name
doesn't need to explicitly tell everything that it matches. The arguments
to the macro already hint at that.

For consistency, use this base macro to define X86_MATCH_VFM and friends.

Remove unused X86_MATCH_VENDOR_FAM_MODEL_FEATURE while at it.

[ bp: Massage commit message. ]

Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
Link: https://lore.kernel.org/r/20250311-add-cpu-type-v8-2-e8514dcaaff2@linux.intel.com

authored by

Pawan Gupta and committed by
Ingo Molnar
c3390406 7b9b54e2

+26 -84
+26 -84
arch/x86/include/asm/cpu_device_id.h
··· 57 57 #define X86_CPU_ID_FLAG_ENTRY_VALID BIT(0) 58 58 59 59 /** 60 - * X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE - Base macro for CPU matching 60 + * X86_MATCH_CPU - Base macro for CPU matching 61 61 * @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY 62 62 * The name is expanded to X86_VENDOR_@_vendor 63 63 * @_family: The family number or X86_FAMILY_ANY ··· 74 74 * into another macro at the usage site for good reasons, then please 75 75 * start this local macro with X86_MATCH to allow easy grepping. 76 76 */ 77 - #define X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \ 78 - _steppings, _feature, _data) { \ 79 - .vendor = X86_VENDOR_##_vendor, \ 80 - .family = _family, \ 81 - .model = _model, \ 82 - .steppings = _steppings, \ 83 - .feature = _feature, \ 84 - .flags = X86_CPU_ID_FLAG_ENTRY_VALID, \ 85 - .driver_data = (unsigned long) _data \ 86 - } 87 - 88 - #define X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE(_vendor, _family, _model, \ 89 - _steppings, _feature, _data) { \ 77 + #define X86_MATCH_CPU(_vendor, _family, _model, _steppings, _feature, _data) { \ 90 78 .vendor = _vendor, \ 91 79 .family = _family, \ 92 80 .model = _model, \ ··· 85 97 } 86 98 87 99 /** 88 - * X86_MATCH_VENDOR_FAM_MODEL_FEATURE - Macro for CPU matching 89 - * @_vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY 90 - * The name is expanded to X86_VENDOR_@_vendor 91 - * @_family: The family number or X86_FAMILY_ANY 92 - * @_model: The model number, model constant or X86_MODEL_ANY 93 - * @_feature: A X86_FEATURE bit or X86_FEATURE_ANY 94 - * @_data: Driver specific data or NULL. The internal storage 95 - * format is unsigned long. The supplied value, pointer 96 - * etc. is casted to unsigned long internally. 97 - * 98 - * The steppings arguments of X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE() is 99 - * set to wildcards. 100 - */ 101 - #define X86_MATCH_VENDOR_FAM_MODEL_FEATURE(vendor, family, model, feature, data) \ 102 - X86_MATCH_VENDOR_FAM_MODEL_STEPPINGS_FEATURE(vendor, family, model, \ 103 - X86_STEPPING_ANY, feature, data) 104 - 105 - /** 106 100 * X86_MATCH_VENDOR_FAM_FEATURE - Macro for matching vendor, family and CPU feature 107 101 * @vendor: The vendor name, e.g. INTEL, AMD, HYGON, ..., ANY 108 102 * The name is expanded to X86_VENDOR_@vendor ··· 93 123 * @data: Driver specific data or NULL. The internal storage 94 124 * format is unsigned long. The supplied value, pointer 95 125 * etc. is casted to unsigned long internally. 96 - * 97 - * All other missing arguments of X86_MATCH_VENDOR_FAM_MODEL_FEATURE() are 98 - * set to wildcards. 99 126 */ 100 - #define X86_MATCH_VENDOR_FAM_FEATURE(vendor, family, feature, data) \ 101 - X86_MATCH_VENDOR_FAM_MODEL_FEATURE(vendor, family, \ 102 - X86_MODEL_ANY, feature, data) 127 + #define X86_MATCH_VENDOR_FAM_FEATURE(vendor, family, feature, data) \ 128 + X86_MATCH_CPU(X86_VENDOR_##vendor, family, X86_MODEL_ANY, \ 129 + X86_STEPPING_ANY, feature, data) 103 130 104 131 /** 105 132 * X86_MATCH_VENDOR_FEATURE - Macro for matching vendor and CPU feature ··· 106 139 * @data: Driver specific data or NULL. The internal storage 107 140 * format is unsigned long. The supplied value, pointer 108 141 * etc. is casted to unsigned long internally. 109 - * 110 - * All other missing arguments of X86_MATCH_VENDOR_FAM_MODEL_FEATURE() are 111 - * set to wildcards. 112 142 */ 113 - #define X86_MATCH_VENDOR_FEATURE(vendor, feature, data) \ 114 - X86_MATCH_VENDOR_FAM_FEATURE(vendor, X86_FAMILY_ANY, feature, data) 143 + #define X86_MATCH_VENDOR_FEATURE(vendor, feature, data) \ 144 + X86_MATCH_CPU(X86_VENDOR_##vendor, X86_FAMILY_ANY, X86_MODEL_ANY, \ 145 + X86_STEPPING_ANY, feature, data) 115 146 116 147 /** 117 148 * X86_MATCH_FEATURE - Macro for matching a CPU feature ··· 117 152 * @data: Driver specific data or NULL. The internal storage 118 153 * format is unsigned long. The supplied value, pointer 119 154 * etc. is casted to unsigned long internally. 120 - * 121 - * All other missing arguments of X86_MATCH_VENDOR_FAM_MODEL_FEATURE() are 122 - * set to wildcards. 123 155 */ 124 - #define X86_MATCH_FEATURE(feature, data) \ 125 - X86_MATCH_VENDOR_FEATURE(ANY, feature, data) 156 + #define X86_MATCH_FEATURE(feature, data) \ 157 + X86_MATCH_CPU(X86_VENDOR_ANY, X86_FAMILY_ANY, X86_MODEL_ANY, \ 158 + X86_STEPPING_ANY, feature, data) 126 159 127 160 /** 128 161 * X86_MATCH_VENDOR_FAM_MODEL - Match vendor, family and model ··· 131 168 * @data: Driver specific data or NULL. The internal storage 132 169 * format is unsigned long. The supplied value, pointer 133 170 * etc. is casted to unsigned long internally. 134 - * 135 - * All other missing arguments of X86_MATCH_VENDOR_FAM_MODEL_FEATURE() are 136 - * set to wildcards. 137 171 */ 138 - #define X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, data) \ 139 - X86_MATCH_VENDOR_FAM_MODEL_FEATURE(vendor, family, model, \ 140 - X86_FEATURE_ANY, data) 172 + #define X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, data) \ 173 + X86_MATCH_CPU(X86_VENDOR_##vendor, family, model, X86_STEPPING_ANY, \ 174 + X86_FEATURE_ANY, data) 141 175 142 176 /** 143 177 * X86_MATCH_VENDOR_FAM - Match vendor and family ··· 144 184 * @data: Driver specific data or NULL. The internal storage 145 185 * format is unsigned long. The supplied value, pointer 146 186 * etc. is casted to unsigned long internally. 147 - * 148 - * All other missing arguments to X86_MATCH_VENDOR_FAM_MODEL_FEATURE() are 149 - * set of wildcards. 150 187 */ 151 - #define X86_MATCH_VENDOR_FAM(vendor, family, data) \ 152 - X86_MATCH_VENDOR_FAM_MODEL(vendor, family, X86_MODEL_ANY, data) 188 + #define X86_MATCH_VENDOR_FAM(vendor, family, data) \ 189 + X86_MATCH_CPU(X86_VENDOR_##vendor, family, X86_MODEL_ANY, \ 190 + X86_STEPPING_ANY, X86_FEATURE_ANY, data) 153 191 154 192 /** 155 193 * X86_MATCH_VFM - Match encoded vendor/family/model ··· 155 197 * @data: Driver specific data or NULL. The internal storage 156 198 * format is unsigned long. The supplied value, pointer 157 199 * etc. is cast to unsigned long internally. 158 - * 159 - * Stepping and feature are set to wildcards 160 200 */ 161 - #define X86_MATCH_VFM(vfm, data) \ 162 - X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ 163 - VFM_VENDOR(vfm), \ 164 - VFM_FAMILY(vfm), \ 165 - VFM_MODEL(vfm), \ 166 - X86_STEPPING_ANY, X86_FEATURE_ANY, data) 201 + #define X86_MATCH_VFM(vfm, data) \ 202 + X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \ 203 + X86_STEPPING_ANY, X86_FEATURE_ANY, data) 167 204 168 205 #define __X86_STEPPINGS(mins, maxs) GENMASK(maxs, mins) 169 206 /** ··· 170 217 * @data: Driver specific data or NULL. The internal storage 171 218 * format is unsigned long. The supplied value, pointer 172 219 * etc. is cast to unsigned long internally. 173 - * 174 - * feature is set to wildcard 175 220 */ 176 - #define X86_MATCH_VFM_STEPS(vfm, min_step, max_step, data) \ 177 - X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ 178 - VFM_VENDOR(vfm), \ 179 - VFM_FAMILY(vfm), \ 180 - VFM_MODEL(vfm), \ 181 - __X86_STEPPINGS(min_step, max_step), \ 182 - X86_FEATURE_ANY, data) 221 + #define X86_MATCH_VFM_STEPS(vfm, min_step, max_step, data) \ 222 + X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \ 223 + __X86_STEPPINGS(min_step, max_step), X86_FEATURE_ANY, data) 183 224 184 225 /** 185 226 * X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature ··· 182 235 * @data: Driver specific data or NULL. The internal storage 183 236 * format is unsigned long. The supplied value, pointer 184 237 * etc. is cast to unsigned long internally. 185 - * 186 - * Steppings is set to wildcard 187 238 */ 188 - #define X86_MATCH_VFM_FEATURE(vfm, feature, data) \ 189 - X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ 190 - VFM_VENDOR(vfm), \ 191 - VFM_FAMILY(vfm), \ 192 - VFM_MODEL(vfm), \ 193 - X86_STEPPING_ANY, feature, data) 239 + #define X86_MATCH_VFM_FEATURE(vfm, feature, data) \ 240 + X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \ 241 + X86_STEPPING_ANY, feature, data) 194 242 195 243 extern const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match); 196 244 extern bool x86_match_min_microcode_rev(const struct x86_cpu_id *table);