···4848command line. However, its configuration can be adjusted via ``sysfs`` to a4949great extent. In some configurations it even is possible to unregister it via5050``sysfs`` which allows another ``CPUFreq`` scaling driver to be loaded and5151-registered (see `below <status_attr_>`_).5151+registered (see :ref:`below <status_attr>`).52525353+.. _operation_modes:53545455Operation Modes5556===============···6261a certain performance scaling algorithm. Which of them will be in effect6362depends on what kernel command line options are used and on the capabilities of6463the processor.6464+6565+.. _active_mode:65666667Active Mode6768-----------···9794Namely, if that option is set, the ``performance`` algorithm will be used by9895default, and the other one will be used by default if it is not set.99969797+.. _active_mode_hwp:9898+10099Active Mode With HWP101100~~~~~~~~~~~~~~~~~~~~102101···128123internal P-state selection logic is expected to focus entirely on performance.129124130125This will override the EPP/EPB setting coming from the ``sysfs`` interface131131-(see `Energy vs Performance Hints`_ below). Moreover, any attempts to change126126+(see :ref:`energy_performance_hints` below). Moreover, any attempts to change132127the EPP/EPB to a value different from 0 ("performance") via ``sysfs`` in this133128configuration will be rejected.134129···196191This is the default P-state selection algorithm if the197192:c:macro:`CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE` kernel configuration option198193is not set.194194+195195+.. _passive_mode:199196200197Passive Mode201198------------···296289the entire range of available P-states, including the whole turbo range, to the297290``CPUFreq`` core and (in the passive mode) to generic scaling governors. This298291generally causes turbo P-states to be set more often when ``intel_pstate`` is299299-used relative to ACPI-based CPU performance scaling (see `below <acpi-cpufreq_>`_300300-for more information).292292+used relative to ACPI-based CPU performance scaling (see293293+:ref:`below <acpi-cpufreq>` for more information).301294302295Moreover, since ``intel_pstate`` always knows what the real turbo threshold is303296(even if the Configurable TDP feature is enabled in the processor), its304304-``no_turbo`` attribute in ``sysfs`` (described `below <no_turbo_attr_>`_) should297297+``no_turbo`` attribute in ``sysfs`` (described :ref:`below <no_turbo_attr>`) should305298work as expected in all cases (that is, if set to disable turbo P-states, it306299always should prevent ``intel_pstate`` from using them).307300···314307315308 * The minimum supported P-state.316309317317- * The maximum supported `non-turbo P-state <turbo_>`_.310310+ * The maximum supported :ref:`non-turbo P-state <turbo>`.318311319312 * Whether or not turbo P-states are supported at all.320313321321- * The maximum supported `one-core turbo P-state <turbo_>`_ (if turbo P-states322322- are supported).314314+ * The maximum supported :ref:`one-core turbo P-state <turbo>` (if turbo315315+ P-states are supported).323316324317 * The scaling formula to translate the driver's internal representation325318 of P-states into frequencies and the other way around.···407400408401If ``CONFIG_ENERGY_MODEL`` has been set during kernel configuration and409402``intel_pstate`` runs on a hybrid processor without SMT, in addition to enabling410410-`CAS <CAS_>`_ it registers an Energy Model for the processor. This allows the403403+:ref:`CAS` it registers an Energy Model for the processor. This allows the411404Energy-Aware Scheduling (EAS) support to be enabled in the CPU scheduler if412405``schedutil`` is used as the ``CPUFreq`` governor which requires ``intel_pstate``413413-to operate in the `passive mode <Passive Mode_>`_.406406+to operate in the :ref:`passive mode <passive_mode>`.414407415408The Energy Model registered by ``intel_pstate`` is artificial (that is, it is416409based on abstract cost values and it does not include any real power numbers)···439432User Space Interface in ``sysfs``440433=================================441434435435+.. _global_attributes:436436+442437Global Attributes443438-----------------444439···453444454445``max_perf_pct``455446 Maximum P-state the driver is allowed to set in percent of the456456- maximum supported performance level (the highest supported `turbo457457- P-state <turbo_>`_).447447+ maximum supported performance level (the highest supported :ref:`turbo448448+ P-state <turbo>`).458449459450 This attribute will not be exposed if the460451 ``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel···462453463454``min_perf_pct``464455 Minimum P-state the driver is allowed to set in percent of the465465- maximum supported performance level (the highest supported `turbo466466- P-state <turbo_>`_).456456+ maximum supported performance level (the highest supported :ref:`turbo457457+ P-state <turbo>`).467458468459 This attribute will not be exposed if the469460 ``intel_pstate=per_cpu_perf_limits`` argument is present in the kernel···472463``num_pstates``473464 Number of P-states supported by the processor (between 0 and 255474465 inclusive) including both turbo and non-turbo P-states (see475475- `Turbo P-states Support`_).466466+ :ref:`turbo`).476467477468 This attribute is present only if the value exposed by it is the same478469 for all of the CPUs in the system.479470480471 The value of this attribute is not affected by the ``no_turbo``481481- setting described `below <no_turbo_attr_>`_.472472+ setting described :ref:`below <no_turbo_attr>`.482473483474 This attribute is read-only.484475485476``turbo_pct``486486- Ratio of the `turbo range <turbo_>`_ size to the size of the entire477477+ Ratio of the :ref:`turbo range <turbo>` size to the size of the entire487478 range of supported P-states, in percent.488479489480 This attribute is present only if the value exposed by it is the same···495486496487``no_turbo``497488 If set (equal to 1), the driver is not allowed to set any turbo P-states498498- (see `Turbo P-states Support`_). If unset (equal to 0, which is the489489+ (see :ref:`turbo`). If unset (equal to 0, which is the499490 default), turbo P-states can be set by the driver.500491 [Note that ``intel_pstate`` does not support the general ``boost``501492 attribute (supported by some other scaling drivers) which is replaced···504495 This attribute does not affect the maximum supported frequency value505496 supplied to the ``CPUFreq`` core and exposed via the policy interface,506497 but it affects the maximum possible value of per-policy P-state limits507507- (see `Interpretation of Policy Attributes`_ below for details).498498+ (see :ref:`policy_attributes_interpretation` below for details).508499509500``hwp_dynamic_boost``510501 This attribute is only present if ``intel_pstate`` works in the511511- `active mode with the HWP feature enabled <Active Mode With HWP_>`_ in502502+ :ref:`active mode with the HWP feature enabled <active_mode_hwp>` in512503 the processor. If set (equal to 1), it causes the minimum P-state limit513504 to be increased dynamically for a short time whenever a task previously514505 waiting on I/O is selected to run on a given logical CPU (the purpose···523514 Operation mode of the driver: "active", "passive" or "off".524515525516 "active"526526- The driver is functional and in the `active mode527527- <Active Mode_>`_.517517+ The driver is functional and in the :ref:`active mode518518+ <active_mode>`.528519529520 "passive"530530- The driver is functional and in the `passive mode531531- <Passive Mode_>`_.521521+ The driver is functional and in the :ref:`passive mode522522+ <passive_mode>`.532523533524 "off"534525 The driver is not functional (it is not registered as a scaling···556547 attribute to "1" enables the energy-efficiency optimizations and setting557548 to "0" disables them.558549550550+.. _policy_attributes_interpretation:551551+559552Interpretation of Policy Attributes560553-----------------------------------561554562555The interpretation of some ``CPUFreq`` policy attributes described in563556Documentation/admin-guide/pm/cpufreq.rst is special with ``intel_pstate``564557as the current scaling driver and it generally depends on the driver's565565-`operation mode <Operation Modes_>`_.558558+:ref:`operation mode <operation_modes>`.566559567560First of all, the values of the ``cpuinfo_max_freq``, ``cpuinfo_min_freq`` and568561``scaling_cur_freq`` attributes are produced by applying a processor-specific···573562attributes are capped by the frequency corresponding to the maximum P-state that574563the driver is allowed to set.575564576576-If the ``no_turbo`` `global attribute <no_turbo_attr_>`_ is set, the driver is577577-not allowed to use turbo P-states, so the maximum value of ``scaling_max_freq``578578-and ``scaling_min_freq`` is limited to the maximum non-turbo P-state frequency.565565+If the ``no_turbo`` :ref:`global attribute <no_turbo_attr>` is set, the driver566566+is not allowed to use turbo P-states, so the maximum value of567567+``scaling_max_freq`` and ``scaling_min_freq`` is limited to the maximum568568+non-turbo P-state frequency.579569Accordingly, setting ``no_turbo`` causes ``scaling_max_freq`` and580570``scaling_min_freq`` to go down to that value if they were above it before.581571However, the old values of ``scaling_max_freq`` and ``scaling_min_freq`` will be···588576which also is the value of ``cpuinfo_max_freq`` in either case.589577590578Next, the following policy attributes have special meaning if591591-``intel_pstate`` works in the `active mode <Active Mode_>`_:579579+``intel_pstate`` works in the :ref:`active mode <active_mode>`:592580593581``scaling_available_governors``594582 List of P-state selection algorithms provided by ``intel_pstate``.···609597 Shows the base frequency of the CPU. Any frequency above this will be610598 in the turbo frequency range.611599612612-The meaning of these attributes in the `passive mode <Passive Mode_>`_ is the600600+The meaning of these attributes in the :ref:`passive mode <passive_mode>` is the613601same as for other scaling drivers.614602615603Additionally, the value of the ``scaling_driver`` attribute for ``intel_pstate``616604depends on the operation mode of the driver. Namely, it is either617617-"intel_pstate" (in the `active mode <Active Mode_>`_) or "intel_cpufreq" (in the618618-`passive mode <Passive Mode_>`_).605605+"intel_pstate" (in the :ref:`active mode <active_mode>`) or "intel_cpufreq"606606+(in the :ref:`passive mode <passive_mode>`).607607+608608+.. _pstate_limits_coordination:619609620610Coordination of P-State Limits621611------------------------------622612623613``intel_pstate`` allows P-state limits to be set in two ways: with the help of624624-the ``max_perf_pct`` and ``min_perf_pct`` `global attributes625625-<Global Attributes_>`_ or via the ``scaling_max_freq`` and ``scaling_min_freq``614614+the ``max_perf_pct`` and ``min_perf_pct`` :ref:`global attributes615615+<global_attributes>` or via the ``scaling_max_freq`` and ``scaling_min_freq``626616``CPUFreq`` policy attributes. The coordination between those limits is based627617on the following rules, regardless of the current operation mode of the driver:628618···646632647633 3. The global and per-policy limits can be set independently.648634649649-In the `active mode with the HWP feature enabled <Active Mode With HWP_>`_, the635635+In the :ref:`active mode with the HWP feature enabled <active_mode_hwp>`, the650636resulting effective values are written into hardware registers whenever the651637limits change in order to request its internal P-state selection logic to always652638set P-states within these limits. Otherwise, the limits are taken into account653653-by scaling governors (in the `passive mode <Passive Mode_>`_) and by the driver654654-every time before setting a new P-state for a CPU.639639+by scaling governors (in the :ref:`passive mode <passive_mode>`) and by the640640+driver every time before setting a new P-state for a CPU.655641656642Additionally, if the ``intel_pstate=per_cpu_perf_limits`` command line argument657643is passed to the kernel, ``max_perf_pct`` and ``min_perf_pct`` are not exposed658644at all and the only way to set the limits is by using the policy attributes.659645646646+.. _energy_performance_hints:660647661648Energy vs Performance Hints662649---------------------------···717702On those systems each ``_PSS`` object returns a list of P-states supported by718703the corresponding CPU which basically is a subset of the P-states range that can719704be used by ``intel_pstate`` on the same system, with one exception: the whole720720-`turbo range <turbo_>`_ is represented by one item in it (the topmost one). By721721-convention, the frequency returned by ``_PSS`` for that item is greater by 1 MHz722722-than the frequency of the highest non-turbo P-state listed by it, but the705705+:ref:`turbo range <turbo>` is represented by one item in it (the topmost one).706706+By convention, the frequency returned by ``_PSS`` for that item is greater by707707+1 MHz than the frequency of the highest non-turbo P-state listed by it, but the723708corresponding P-state representation (following the hardware specification)724709returned for it matches the maximum supported turbo P-state (or is the725710special value 255 meaning essentially "go as high as you can get").···745730instead.746731747732One more issue related to that may appear on systems supporting the748748-`Configurable TDP feature <turbo_>`_ allowing the platform firmware to set the749749-turbo threshold. Namely, if that is not coordinated with the lists of P-states750750-returned by ``_PSS`` properly, there may be more than one item corresponding to751751-a turbo P-state in those lists and there may be a problem with avoiding the752752-turbo range (if desirable or necessary). Usually, to avoid using turbo753753-P-states overall, ``acpi-cpufreq`` simply avoids using the topmost state listed754754-by ``_PSS``, but that is not sufficient when there are other turbo P-states in755755-the list returned by it.733733+:ref:`Configurable TDP feature <turbo>` allowing the platform firmware to set734734+the turbo threshold. Namely, if that is not coordinated with the lists of735735+P-states returned by ``_PSS`` properly, there may be more than one item736736+corresponding to a turbo P-state in those lists and there may be a problem with737737+avoiding the turbo range (if desirable or necessary). Usually, to avoid using738738+turbo P-states overall, ``acpi-cpufreq`` simply avoids using the topmost state739739+listed by ``_PSS``, but that is not sufficient when there are other turbo740740+P-states in the list returned by it.756741757742Apart from the above, ``acpi-cpufreq`` works like ``intel_pstate`` in the758758-`passive mode <Passive Mode_>`_, except that the number of P-states it can set759759-is limited to the ones listed by the ACPI ``_PSS`` objects.743743+:ref:`passive mode <passive_mode>`, except that the number of P-states it can744744+set is limited to the ones listed by the ACPI ``_PSS`` objects.760745761746762747Kernel Command Line Options for ``intel_pstate``···771756 processor is supported by it.772757773758``active``774774- Register ``intel_pstate`` in the `active mode <Active Mode_>`_ to start775775- with.759759+ Register ``intel_pstate`` in the :ref:`active mode <active_mode>` to760760+ start with.776761777762``passive``778778- Register ``intel_pstate`` in the `passive mode <Passive Mode_>`_ to763763+ Register ``intel_pstate`` in the :ref:`passive mode <passive_mode>` to779764 start with.780765781766``force``···808793 and this option has no effect.809794810795``per_cpu_perf_limits``811811- Use per-logical-CPU P-State limits (see `Coordination of P-state812812- Limits`_ for details).796796+ Use per-logical-CPU P-State limits (see797797+ :ref:`pstate_limits_coordination` for details).813798814799``no_cas``815815- Do not enable `capacity-aware scheduling <CAS_>`_ which is enabled by816816- default on hybrid systems without SMT.800800+ Do not enable :ref:`capacity-aware scheduling <CAS>` which is enabled801801+ by default on hybrid systems without SMT.817802818803Diagnostics and Tuning819804======================···825810diagnostics. One of them is the ``cpu_frequency`` trace event generally used826811by ``CPUFreq``, and the other one is the ``pstate_sample`` trace event specific827812to ``intel_pstate``. Both of them are triggered by ``intel_pstate`` only if828828-it works in the `active mode <Active Mode_>`_.813813+it works in the :ref:`active mode <active_mode>`.829814830815The following sequence of shell commands can be used to enable them and see831816their output (if the kernel is generally configured to support event tracing)::···837822 gnome-terminal--4510 [001] ..s. 1177.680733: pstate_sample: core_busy=107 scaled=94 from=26 to=26 mperf=1143818 aperf=1230607 tsc=29838618 freq=2474476838823 cat-5235 [002] ..s. 1177.681723: cpu_frequency: state=2900000 cpu_id=2839824840840-If ``intel_pstate`` works in the `passive mode <Passive Mode_>`_, the825825+If ``intel_pstate`` works in the :ref:`passive mode <passive_mode>`, the841826``cpu_frequency`` trace event will be triggered either by the ``schedutil``842827scaling governor (for the policies it is attached to), or by the ``CPUFreq``843828core (for the policies with other scaling governors).
+7-4
drivers/cpufreq/cpufreq.c
···14211421 * If there is a problem with its frequency table, take it14221422 * offline and drop it.14231423 */14241424- ret = cpufreq_table_validate_and_sort(policy);14251425- if (ret)14261426- goto out_offline_policy;14241424+ if (policy->freq_table_sorted != CPUFREQ_TABLE_SORTED_ASCENDING &&14251425+ policy->freq_table_sorted != CPUFREQ_TABLE_SORTED_DESCENDING) {14261426+ ret = cpufreq_table_validate_and_sort(policy);14271427+ if (ret)14281428+ goto out_offline_policy;14291429+ }1427143014281431 /* related_cpus should at least include policy->cpus. */14291432 cpumask_copy(policy->related_cpus, policy->cpus);···25532550 for_each_inactive_policy(policy) {25542551 if (!strcmp(policy->last_governor, governor->name)) {25552552 policy->governor = NULL;25562556- strcpy(policy->last_governor, "\0");25532553+ policy->last_governor[0] = '\0';25572554 }25582555 }25592556 read_unlock_irqrestore(&cpufreq_driver_lock, flags);
+51-49
drivers/cpufreq/intel_pstate.c
···575575 int scaling = cpu->pstate.scaling;576576 int freq;577577578578- pr_debug("CPU%d: perf_ctl_max_phys = %d\n", cpu->cpu, perf_ctl_max_phys);579579- pr_debug("CPU%d: perf_ctl_turbo = %d\n", cpu->cpu, perf_ctl_turbo);580580- pr_debug("CPU%d: perf_ctl_scaling = %d\n", cpu->cpu, perf_ctl_scaling);578578+ pr_debug("CPU%d: PERF_CTL max_phys = %d\n", cpu->cpu, perf_ctl_max_phys);579579+ pr_debug("CPU%d: PERF_CTL turbo = %d\n", cpu->cpu, perf_ctl_turbo);580580+ pr_debug("CPU%d: PERF_CTL scaling = %d\n", cpu->cpu, perf_ctl_scaling);581581 pr_debug("CPU%d: HWP_CAP guaranteed = %d\n", cpu->cpu, cpu->pstate.max_pstate);582582 pr_debug("CPU%d: HWP_CAP highest = %d\n", cpu->cpu, cpu->pstate.turbo_pstate);583583 pr_debug("CPU%d: HWP-to-frequency scaling factor: %d\n", cpu->cpu, scaling);584584+585585+ if (scaling == perf_ctl_scaling)586586+ return;587587+588588+ hwp_is_hybrid = true;584589585590 cpu->pstate.turbo_freq = rounddown(cpu->pstate.turbo_pstate * scaling,586591 perf_ctl_scaling);···914909 [HWP_CPUFREQ_ATTR_COUNT] = NULL,915910};916911912912+static u8 hybrid_get_cpu_type(unsigned int cpu)913913+{914914+ return cpu_data(cpu).topo.intel_type;915915+}916916+917917static bool no_cas __ro_after_init;918918919919static struct cpudata *hybrid_max_perf_cpu __read_mostly;···935925 unsigned long *freq)936926{937927 /*938938- * Create "utilization bins" of 0-40%, 40%-60%, 60%-80%, and 80%-100%939939- * of the maximum capacity such that two CPUs of the same type will be940940- * regarded as equally attractive if the utilization of each of them941941- * falls into the same bin, which should prevent tasks from being942942- * migrated between them too often.928928+ * Create four "states" corresponding to 40%, 60%, 80%, and 100% of the929929+ * full capacity.943930 *944931 * For this purpose, return the "frequency" of 2 for the first945932 * performance level and otherwise leave the value set by the caller.···950943 return 0;951944}952945946946+static bool hybrid_has_l3(unsigned int cpu)947947+{948948+ struct cpu_cacheinfo *cacheinfo = get_cpu_cacheinfo(cpu);949949+ unsigned int i;950950+951951+ if (!cacheinfo)952952+ return false;953953+954954+ for (i = 0; i < cacheinfo->num_leaves; i++) {955955+ if (cacheinfo->info_list[i].level == 3)956956+ return true;957957+ }958958+959959+ return false;960960+}961961+953962static int hybrid_get_cost(struct device *dev, unsigned long freq,954963 unsigned long *cost)955964{956956- struct pstate_data *pstate = &all_cpu_data[dev->id]->pstate;957957- struct cpu_cacheinfo *cacheinfo = get_cpu_cacheinfo(dev->id);958958-965965+ /* Facilitate load balancing between CPUs of the same type. */966966+ *cost = freq;959967 /*960960- * The smaller the perf-to-frequency scaling factor, the larger the IPC961961- * ratio between the given CPU and the least capable CPU in the system.962962- * Regard that IPC ratio as the primary cost component and assume that963963- * the scaling factors for different CPU types will differ by at least964964- * 5% and they will not be above INTEL_PSTATE_CORE_SCALING.968968+ * Adjust the cost depending on CPU type.965969 *966966- * Add the freq value to the cost, so that the cost of running on CPUs967967- * of the same type in different "utilization bins" is different.970970+ * The idea is to start loading up LPE-cores before E-cores and start971971+ * to populate E-cores when LPE-cores are utilized above 60% of the972972+ * capacity. Similarly, P-cores start to be populated when E-cores are973973+ * utilized above 60% of the capacity.968974 */969969- *cost = div_u64(100ULL * INTEL_PSTATE_CORE_SCALING, pstate->scaling) + freq;970970- /*971971- * Increase the cost slightly for CPUs able to access L3 to avoid972972- * touching it in case some other CPUs of the same type can do the work973973- * without it.974974- */975975- if (cacheinfo) {976976- unsigned int i;977977-978978- /* Check if L3 cache is there. */979979- for (i = 0; i < cacheinfo->num_leaves; i++) {980980- if (cacheinfo->info_list[i].level == 3) {981981- *cost += 2;982982- break;983983- }984984- }975975+ if (hybrid_get_cpu_type(dev->id) == INTEL_CPU_TYPE_ATOM) {976976+ if (hybrid_has_l3(dev->id)) /* E-core */977977+ *cost += 1;978978+ } else { /* P-core */979979+ *cost += 2;985980 }986981987982 return 0;···1046103710471038 topology_set_cpu_scale(cpu->cpu, arch_scale_cpu_capacity(cpu->cpu));1048103910491049- pr_debug("CPU%d: perf = %u, max. perf = %u, base perf = %d\n", cpu->cpu,10501050- cpu->capacity_perf, hybrid_max_perf_cpu->capacity_perf,10511051- cpu->pstate.max_pstate_physical);10401040+ pr_debug("CPU%d: capacity perf = %u, base perf = %u, sys max perf = %u\n",10411041+ cpu->cpu, cpu->capacity_perf, cpu->pstate.max_pstate_physical,10421042+ hybrid_max_perf_cpu->capacity_perf);10521043}1053104410541045static void hybrid_clear_cpu_capacity(unsigned int cpunum)···23062297static int hwp_get_cpu_scaling(int cpu)23072298{23082299 if (hybrid_scaling_factor) {23092309- struct cpuinfo_x86 *c = &cpu_data(cpu);23102310- u8 cpu_type = c->topo.intel_type;23112311-23122300 /*23132301 * Return the hybrid scaling factor for P-cores and use the23142302 * default core scaling for E-cores.23152303 */23162316- if (cpu_type == INTEL_CPU_TYPE_CORE)23042304+ if (hybrid_get_cpu_type(cpu) == INTEL_CPU_TYPE_CORE)23172305 return hybrid_scaling_factor;2318230623192319- if (cpu_type == INTEL_CPU_TYPE_ATOM)23202320- return core_get_scaling();23072307+ return core_get_scaling();23212308 }2322230923232310 /* Use core scaling on non-hybrid systems. */···2348234323492344static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)23502345{23512351- int perf_ctl_max_phys = pstate_funcs.get_max_physical(cpu->cpu);23522346 int perf_ctl_scaling = pstate_funcs.get_scaling();2353234723482348+ cpu->pstate.max_pstate_physical = pstate_funcs.get_max_physical(cpu->cpu);23542349 cpu->pstate.min_pstate = pstate_funcs.get_min(cpu->cpu);23552355- cpu->pstate.max_pstate_physical = perf_ctl_max_phys;23562350 cpu->pstate.perf_ctl_scaling = perf_ctl_scaling;2357235123582352 if (hwp_active && !hwp_mode_bdw) {···2359235523602356 if (pstate_funcs.get_cpu_scaling) {23612357 cpu->pstate.scaling = pstate_funcs.get_cpu_scaling(cpu->cpu);23622362- if (cpu->pstate.scaling != perf_ctl_scaling) {23632363- intel_pstate_hybrid_hwp_adjust(cpu);23642364- hwp_is_hybrid = true;23652365- }23582358+ intel_pstate_hybrid_hwp_adjust(cpu);23662359 } else {23672360 cpu->pstate.scaling = perf_ctl_scaling;23682361 }···27612760 X86_MATCH(INTEL_ATOM_CRESTMONT, core_funcs),27622761 X86_MATCH(INTEL_ATOM_CRESTMONT_X, core_funcs),27632762 X86_MATCH(INTEL_ATOM_DARKMONT_X, core_funcs),27632763+ X86_MATCH(INTEL_DIAMONDRAPIDS_X, core_funcs),27642764 {}27652765};27662766#endif