lkml.org 
[lkml]   [2007]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[2.6.22.2 review 57/84] acpi-cpufreq: Proper ReadModifyWrite of PERF_CTL MSR

    From: Venki Pallipadi <venkatesh.pallipadi@intel.com>

    [CPUFREQ] acpi-cpufreq: Proper ReadModifyWrite of PERF_CTL MSR

    During recent acpi-cpufreq changes, writing to PERF_CTL msr
    changed from RMW of entire 64 bit to RMW of low 32 bit and clearing of
    upper 32 bit. Fix it back to do a proper RMW of the MSR.

    Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Signed-off-by: Dave Jones <davej@redhat.com>
    Cc: Chuck Ebbert <cebbert@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 13 +++++--------
    1 file changed, 5 insertions(+), 8 deletions(-)

    --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
    +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
    @@ -167,11 +167,13 @@ static void do_drv_read(struct drv_cmd *

    static void do_drv_write(struct drv_cmd *cmd)
    {
    - u32 h = 0;
    + u32 lo, hi;

    switch (cmd->type) {
    case SYSTEM_INTEL_MSR_CAPABLE:
    - wrmsr(cmd->addr.msr.reg, cmd->val, h);
    + rdmsr(cmd->addr.msr.reg, lo, hi);
    + lo = (lo & ~INTEL_MSR_RANGE) | (cmd->val & INTEL_MSR_RANGE);
    + wrmsr(cmd->addr.msr.reg, lo, hi);
    break;
    case SYSTEM_IO_CAPABLE:
    acpi_os_write_port((acpi_io_address)cmd->addr.io.port,
    @@ -372,7 +374,6 @@ static int acpi_cpufreq_target(struct cp
    struct cpufreq_freqs freqs;
    cpumask_t online_policy_cpus;
    struct drv_cmd cmd;
    - unsigned int msr;
    unsigned int next_state = 0; /* Index into freq_table */
    unsigned int next_perf_state = 0; /* Index into perf table */
    unsigned int i;
    @@ -417,11 +418,7 @@ static int acpi_cpufreq_target(struct cp
    case SYSTEM_INTEL_MSR_CAPABLE:
    cmd.type = SYSTEM_INTEL_MSR_CAPABLE;
    cmd.addr.msr.reg = MSR_IA32_PERF_CTL;
    - msr =
    - (u32) perf->states[next_perf_state].
    - control & INTEL_MSR_RANGE;
    - cmd.val = get_cur_val(online_policy_cpus);
    - cmd.val = (cmd.val & ~INTEL_MSR_RANGE) | msr;
    + cmd.val = (u32) perf->states[next_perf_state].control;
    break;
    case SYSTEM_IO_CAPABLE:
    cmd.type = SYSTEM_IO_CAPABLE;
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-08-07 23:23    [W:3.380 / U:0.224 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site