Re: [PATCH v4] intel_idle: introduce 'no_native' module parameter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi David,

On Thu, Feb 20, 2025 at 1:21 PM David Arcari <darcari@xxxxxxxxxx> wrote:
>
>
> Hi Rafael,
>
> On 2/19/25 4:27 PM, Rafael J. Wysocki wrote:
> > On Thu, Feb 13, 2025 at 5:07 PM David Arcari <darcari@xxxxxxxxxx> wrote:
> >>
> >> Since commit 18734958e9bf ("intel_idle: Use ACPI _CST for processor models
> >> without C-state tables") the intel_idle driver has had the ability to use
> >> the ACPI _CST to populate C-states when the processor model is not
> >> recognized. However, even when the processor model is recognized (native
> >> mode) there are cases where it is useful to make the driver ignore the per
> >> cpu idle states in lieu of ACPI C-states (such as specific application
> >> performance). Add the 'no_native' module parameter to provide this
> >> functionality.
> >>
> >> Cc: Jonathan Corbet <corbet@xxxxxxx>
> >> Cc: Jacob Pan <jacob.jun.pan@xxxxxxxxxxxxxxx>
> >> Cc: Len Brown <lenb@xxxxxxxxxx>
> >> Cc: David Arcari <darcari@xxxxxxxxxx>
> >> Cc: Artem Bityutskiy <dedekind1@xxxxxxxxx>
> >> Cc: Prarit Bhargava <prarit@xxxxxxxxxx>
> >> Cc: linux-doc@xxxxxxxxxxxxxxx
> >> Cc: linux-kernel@xxxxxxxxxxxxxxx
> >> Signed-off-by: David Arcari <darcari@xxxxxxxxxx>
> >> ---
> >> v4: fix !CONFIG_ACPI_PROCESSOR_CSTATE compilation issue
> >> v3: more documentation cleanup
> >> v2: renamed parameter, cleaned up documentation
> >>
> >> Documentation/admin-guide/pm/intel_idle.rst | 18 +++++++++++++-----
> >>   drivers/idle/intel_idle.c                   | 16 ++++++++++++++++
> >>   2 files changed, 29 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/Documentation/admin-guide/pm/intel_idle.rst b/Documentation/admin-guide/pm/intel_idle.rst
> >> index 39bd6ecce7de..5940528146eb 100644
> >> --- a/Documentation/admin-guide/pm/intel_idle.rst
> >> +++ b/Documentation/admin-guide/pm/intel_idle.rst
> >> @@ -192,11 +192,19 @@ even if they have been enumerated (see :ref:`cpu-pm-qos` in
> >>   Documentation/admin-guide/pm/cpuidle.rst).
> >>   Setting ``max_cstate`` to 0 causes the ``intel_idle`` initialization to fail.
> >>
> >> -The ``no_acpi`` and ``use_acpi`` module parameters (recognized by ``intel_idle``
> >> -if the kernel has been configured with ACPI support) can be set to make the
> >> -driver ignore the system's ACPI tables entirely or use them for all of the
> >> -recognized processor models, respectively (they both are unset by default and
> >> -``use_acpi`` has no effect if ``no_acpi`` is set).
> >> +The ``no_acpi``, ``use_acpi`` and ``no_native`` module parameters are
> >> +recognized by ``intel_idle`` if the kernel has been configured with ACPI
> >> +support.  In the case that ACPI is not configured these flags have no impact
> >> +on functionality.
> >> +
> >> +``no_acpi`` - Do not use ACPI at all.  Only native mode is available, no
> >> +ACPI mode.
> >> +
> >> +``use_acpi`` - No-op in ACPI mode, the driver will consult ACPI tables for
> >> +C-states on/off status in native mode.
> >> +
> >> +``no_native`` - Work only in ACPI mode, no native mode available (ignore
> >> +all custom tables).
> >>
> >>   The value of the ``states_off`` module parameter (0 by default) represents a
> >>   list of idle states to be disabled by default in the form of a bitmask.
> >> diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
> >> index 118fe1d37c22..b0be5ef43ffc 100644
> >> --- a/drivers/idle/intel_idle.c
> >> +++ b/drivers/idle/intel_idle.c
> >> @@ -1695,6 +1695,10 @@ static bool force_use_acpi __read_mostly; /* No effect if no_acpi is set. */
> >>   module_param_named(use_acpi, force_use_acpi, bool, 0444);
> >>   MODULE_PARM_DESC(use_acpi, "Use ACPI _CST for building the idle states list");
> >>
> >> +static bool no_native __read_mostly; /* No effect if no_acpi is set. */
> >> +module_param_named(no_native, no_native, bool, 0444);
> >> +MODULE_PARM_DESC(no_native, "Ignore cpu specific (native) idle states in lieu of ACPI idle states");
> >> +
> >>   static struct acpi_processor_power acpi_state_table __initdata;
> >>
> >>   /**
> >> @@ -1834,6 +1838,11 @@ static bool __init intel_idle_off_by_default(unsigned int flags, u32 mwait_hint)
> >>          }
> >>          return true;
> >>   }
> >> +
> >> +static inline bool ignore_native(void)
> >> +{
> >> +       return no_native & !no_acpi;
> >> +}
> >>   #else /* !CONFIG_ACPI_PROCESSOR_CSTATE */
> >>   #define force_use_acpi (false)
> >>
> >> @@ -1843,6 +1852,7 @@ static inline bool intel_idle_off_by_default(unsigned int flags, u32 mwait_hint)
> >>   {
> >>          return false;
> >>   }
> >> +static inline bool ignore_native(void) { return false; }
> >>   #endif /* !CONFIG_ACPI_PROCESSOR_CSTATE */
> >>
> >>   /**
> >> @@ -2328,6 +2338,12 @@ static int __init intel_idle_init(void)
> >>          pr_debug("MWAIT substates: 0x%x\n", mwait_substates);
> >>
> >>          icpu = (const struct idle_cpu *)id->driver_data;
> >> +       if (ignore_native()) {
> >> +               if (icpu) {
> >> +                       pr_debug("ignoring native cpu idle states\n");
> >> +                       icpu = NULL;
> >> +               }
> >> +       }
> >
> > Why not
> >
> > +       if (icpu && ignore_native()) {
> > +              pr_debug("disregarding built-in CPU idle states table\n");
> > +              icpu = NULL;
> > +       }
>
> That's cleaner.  I'll submit a v5 shortly.
>
> Should the pr_debug be a pr_info?  I've waffled on this, but think that
> pr_info is probably a good idea.  Or do you prefer pr_debug?

I think that this is debug mostly as it allows one to verify that
no_native is taken into account as expected.





[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux