All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juergen Gross <jgross@suse.com>
To: Zhongqiu Han <zhongqiu.han@oss.qualcomm.com>,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
	Viresh Kumar <viresh.kumar@linaro.org>
Subject: Re: [PATCH 16/32] cpufreq: Stop using 32-bit MSR interfaces
Date: Tue, 30 Jun 2026 08:38:35 +0200	[thread overview]
Message-ID: <fbb632b9-4b87-4c6c-b0e2-e6687d88f378@suse.com> (raw)
In-Reply-To: <faa8f6fa-f393-42f4-97dc-7cde4fbf9616@oss.qualcomm.com>


[-- Attachment #1.1.1: Type: text/plain, Size: 18896 bytes --]

On 29.06.26 16:55, Zhongqiu Han wrote:
> On 6/29/2026 2:05 PM, Juergen Gross wrote:
>> The 32-bit MSR interfaces rdmsr() and wrmsr() are planned to be
>> removed. Use the related 64-bit variants instead.
> 
> Hello Juergen,
> 
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>>   drivers/cpufreq/acpi-cpufreq.c       | 22 ++++----
>>   drivers/cpufreq/e_powersaver.c       | 48 ++++++++---------
>>   drivers/cpufreq/longhaul.c           | 15 +++---
>>   drivers/cpufreq/longrun.c            | 78 +++++++++++++++-------------
>>   drivers/cpufreq/powernow-k6.c        | 12 ++---
>>   drivers/cpufreq/powernow-k8.c        | 67 ++++++++++++------------
>>   drivers/cpufreq/speedstep-centrino.c | 16 +++---
>>   drivers/cpufreq/speedstep-lib.c      | 63 +++++++++++-----------
>>   8 files changed, 166 insertions(+), 155 deletions(-)
>>
>> diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c
>> index 21639d9ac753..b40fa99b5ab2 100644
>> --- a/drivers/cpufreq/acpi-cpufreq.c
>> +++ b/drivers/cpufreq/acpi-cpufreq.c
>> @@ -246,32 +246,32 @@ static unsigned extract_freq(struct cpufreq_policy 
>> *policy, u32 val)
>>   static u32 cpu_freq_read_intel(struct acpi_pct_register *not_used)
>>   {
>> -    u32 val, dummy __always_unused;
>> +    u64 val;
>> -    rdmsr(MSR_IA32_PERF_CTL, val, dummy);
>> -    return val;
>> +    rdmsrq(MSR_IA32_PERF_CTL, val);
>> +    return (u32)val;
>>   }
>>   static void cpu_freq_write_intel(struct acpi_pct_register *not_used, u32 val)
>>   {
>> -    u32 lo, hi;
>> +    struct msr msrval;
>> -    rdmsr(MSR_IA32_PERF_CTL, lo, hi);
>> -    lo = (lo & ~INTEL_MSR_RANGE) | (val & INTEL_MSR_RANGE);
>> -    wrmsr(MSR_IA32_PERF_CTL, lo, hi);
>> +    rdmsrq(MSR_IA32_PERF_CTL, msrval.q);
>> +    msrval.h = (msrval.h & ~INTEL_MSR_RANGE) | (val & INTEL_MSR_RANGE);
> 
> msrval.l

Oh, indeed.

> 
> please feel free to correct me if there is any misunderstanding.
> 
> how about using u64 directly?
> 
>      u64 msrval;
>      rdmsrq(MSR_IA32_PERF_CTL, msrval);
>      msrval = (msrval & ~(u64)INTEL_MSR_RANGE) | (val & INTEL_MSR_RANGE);
>      wrmsrq(MSR_IA32_PERF_CTL, msrval);
> 
> As per my understanding, we can use u64 instead of struct msr in many
> other places in this patch as well.

I didn't look at all the MSR definitions to find out whether a plain u64 would
work.

Will look into this in more detail.

> 
>> +    wrmsrq(MSR_IA32_PERF_CTL, msrval.q);
>>   }
>>   static u32 cpu_freq_read_amd(struct acpi_pct_register *not_used)
>>   {
>> -    u32 val, dummy __always_unused;
>> +    u64 val;
>> -    rdmsr(MSR_AMD_PERF_CTL, val, dummy);
>> -    return val;
>> +    rdmsrq(MSR_AMD_PERF_CTL, val);
>> +    return (u32)val;
>>   }
>>   static void cpu_freq_write_amd(struct acpi_pct_register *not_used, u32 val)
>>   {
>> -    wrmsr(MSR_AMD_PERF_CTL, val, 0);
>> +    wrmsrq(MSR_AMD_PERF_CTL, val);
>>   }
>>   static u32 cpu_freq_read_io(struct acpi_pct_register *reg)
>> diff --git a/drivers/cpufreq/e_powersaver.c b/drivers/cpufreq/e_powersaver.c
>> index eb5a9209d828..13709f9667ea 100644
>> --- a/drivers/cpufreq/e_powersaver.c
>> +++ b/drivers/cpufreq/e_powersaver.c
>> @@ -90,7 +90,7 @@ static int eps_acpi_exit(struct cpufreq_policy *policy)
>>   static unsigned int eps_get(unsigned int cpu)
>>   {
>>       struct eps_cpu_data *centaur;
>> -    u32 lo, hi;
>> +    u64 val;
>>       if (cpu)
>>           return 0;
>> @@ -99,35 +99,35 @@ static unsigned int eps_get(unsigned int cpu)
>>           return 0;
>>       /* Return current frequency */
>> -    rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>> -    return centaur->fsb * ((lo >> 8) & 0xff);
>> +    rdmsrq(MSR_IA32_PERF_STATUS, val);
>> +    return centaur->fsb * ((val >> 8) & 0xff);
>>   }
>>   static int eps_set_state(struct eps_cpu_data *centaur,
>>                struct cpufreq_policy *policy,
>>                u32 dest_state)
>>   {
>> -    u32 lo, hi;
>> +    u64 val;
>>       int i;
>>       /* Wait while CPU is busy */
>> -    rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>> +    rdmsrq(MSR_IA32_PERF_STATUS, val);
>>       i = 0;
>> -    while (lo & ((1 << 16) | (1 << 17))) {
>> +    while (val & ((1 << 16) | (1 << 17))) {
>>           udelay(16);
>> -        rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>> +        rdmsrq(MSR_IA32_PERF_STATUS, val);
>>           i++;
>>           if (unlikely(i > 64)) {
>>               return -ENODEV;
>>           }
>>       }
>>       /* Set new multiplier and voltage */
>> -    wrmsr(MSR_IA32_PERF_CTL, dest_state & 0xffff, 0);
>> +    wrmsrq(MSR_IA32_PERF_CTL, dest_state & 0xffff);
>>       /* Wait until transition end */
>>       i = 0;
>>       do {
>>           udelay(16);
>> -        rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>> +        rdmsrq(MSR_IA32_PERF_STATUS, val);
>>           i++;
>>           if (unlikely(i > 64)) {
>>               return -ENODEV;
> 
> 
>      do {
>          udelay(16);
>          rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>          i++;
>          if (unlikely(i > 64)) {
>              return -ENODEV;
>          }
>      } while (lo & ((1 << 16) | (1 << 17)));-->lo has been deleted?

Thanks for spotting that. Seems by 32-bit allyesconfig tree lost the config
entry needed for building this source.

Will fix this.

> 
> 
> 
> 
> 
>> @@ -139,10 +139,10 @@ static int eps_set_state(struct eps_cpu_data *centaur,
>>       u8 current_multiplier, current_voltage;
>>       /* Print voltage and multiplier */
>> -    rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>> -    current_voltage = lo & 0xff;
>> +    rdmsrq(MSR_IA32_PERF_STATUS, val);
>> +    current_voltage = val & 0xff;
>>       pr_info("Current voltage = %dmV\n", current_voltage * 16 + 700);
>> -    current_multiplier = (lo >> 8) & 0xff;
>> +    current_multiplier = (val >> 8) & 0xff;
>>       pr_info("Current multiplier = %d\n", current_multiplier);
>>       }
>>   #endif
>> @@ -171,8 +171,8 @@ static int eps_target(struct cpufreq_policy *policy, 
>> unsigned int index)
>>   static int eps_cpu_init(struct cpufreq_policy *policy)
>>   {
>>       unsigned int i;
>> -    u32 lo, hi;
>>       u64 val;
>> +    struct msr status;
>>       u8 current_multiplier, current_voltage;
>>       u8 max_multiplier, max_voltage;
>>       u8 min_multiplier, min_voltage;
>> @@ -195,13 +195,13 @@ static int eps_cpu_init(struct cpufreq_policy *policy)
>>       switch (c->x86_model) {
>>       case 10:
>> -        rdmsr(0x1153, lo, hi);
>> -        brand = (((lo >> 2) ^ lo) >> 18) & 3;
>> +        rdmsrq(0x1153, val);
>> +        brand = (((val >> 2) ^ val) >> 18) & 3;
>>           pr_cont("Model A ");
>>           break;
>>       case 13:
>> -        rdmsr(0x1154, lo, hi);
>> -        brand = (((lo >> 4) ^ (lo >> 2))) & 0x000000ff;
>> +        rdmsrq(0x1154, val);
>> +        brand = (((val >> 4) ^ (val >> 2))) & 0x000000ff;
>>           pr_cont("Model D ");
>>           break;
>>       }
>> @@ -237,20 +237,20 @@ static int eps_cpu_init(struct cpufreq_policy *policy)
>>       }
>>       /* Print voltage and multiplier */
>> -    rdmsr(MSR_IA32_PERF_STATUS, lo, hi);
>> -    current_voltage = lo & 0xff;
>> +    rdmsrq(MSR_IA32_PERF_STATUS, status.q);
>> +    current_voltage = status.l & 0xff;
>>       pr_info("Current voltage = %dmV\n", current_voltage * 16 + 700);
>> -    current_multiplier = (lo >> 8) & 0xff;
>> +    current_multiplier = (status.l >> 8) & 0xff;
>>       pr_info("Current multiplier = %d\n", current_multiplier);
>>       /* Print limits */
>> -    max_voltage = hi & 0xff;
>> +    max_voltage = status.h & 0xff;
>>       pr_info("Highest voltage = %dmV\n", max_voltage * 16 + 700);
>> -    max_multiplier = (hi >> 8) & 0xff;
>> +    max_multiplier = (status.h >> 8) & 0xff;
>>       pr_info("Highest multiplier = %d\n", max_multiplier);
>> -    min_voltage = (hi >> 16) & 0xff;
>> +    min_voltage = (status.h >> 16) & 0xff;
>>       pr_info("Lowest voltage = %dmV\n", min_voltage * 16 + 700);
>> -    min_multiplier = (hi >> 24) & 0xff;
>> +    min_multiplier = (status.h >> 24) & 0xff;
>>       pr_info("Lowest multiplier = %d\n", min_multiplier);
>>       /* Sanity checks */
>> diff --git a/drivers/cpufreq/longhaul.c b/drivers/cpufreq/longhaul.c
>> index a18d1d11725f..4c2599264333 100644
>> --- a/drivers/cpufreq/longhaul.c
>> +++ b/drivers/cpufreq/longhaul.c
>> @@ -118,13 +118,14 @@ static unsigned int calc_speed(int mult)
>>   static int longhaul_get_cpu_mult(void)
>>   {
>> -    unsigned long invalue = 0, lo, hi;
>> +    unsigned long invalue = 0;
>> +    u64 val;
>> -    rdmsr(MSR_IA32_EBL_CR_POWERON, lo, hi);
>> -    invalue = (lo & (1<<22|1<<23|1<<24|1<<25))>>22;
>> +    rdmsrq(MSR_IA32_EBL_CR_POWERON, val);
>> +    invalue = (val & (1<<22|1<<23|1<<24|1<<25))>>22;
>>       if (longhaul_version == TYPE_LONGHAUL_V2 ||
>>           longhaul_version == TYPE_POWERSAVER) {
>> -        if (lo & (1<<27))
>> +        if (val & (1<<27))
>>               invalue += 16;
>>       }
>>       return eblcr[invalue];
>> @@ -761,7 +762,7 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)
>>       struct cpuinfo_x86 *c = &cpu_data(0);
>>       char *cpuname = NULL;
>>       int ret;
>> -    u32 lo, hi;
>> +    u64 val;
>>       /* Check what we have on this motherboard */
>>       switch (c->x86_model) {
>> @@ -835,8 +836,8 @@ static int longhaul_cpu_init(struct cpufreq_policy *policy)
>>       }
>>       /* Check Longhaul ver. 2 */
>>       if (longhaul_version == TYPE_LONGHAUL_V2) {
>> -        rdmsr(MSR_VIA_LONGHAUL, lo, hi);
>> -        if (lo == 0 && hi == 0)
>> +        rdmsrq(MSR_VIA_LONGHAUL, val);
>> +        if (val == 0)
>>               /* Looks like MSR isn't present */
>>               longhaul_version = TYPE_LONGHAUL_V1;
>>       }
>> diff --git a/drivers/cpufreq/longrun.c b/drivers/cpufreq/longrun.c
>> index f3aaca0496a4..99abef32e7e5 100644
>> --- a/drivers/cpufreq/longrun.c
>> +++ b/drivers/cpufreq/longrun.c
>> @@ -35,27 +35,27 @@ static unsigned int longrun_low_freq, longrun_high_freq;
>>    */
>>   static void longrun_get_policy(struct cpufreq_policy *policy)
>>   {
>> -    u32 msr_lo, msr_hi;
>> +    struct msr msr;
>> -    rdmsr(MSR_TMTA_LONGRUN_FLAGS, msr_lo, msr_hi);
>> -    pr_debug("longrun flags are %x - %x\n", msr_lo, msr_hi);
>> -    if (msr_lo & 0x01)
>> +    rdmsrq(MSR_TMTA_LONGRUN_FLAGS, msr.q);
>> +    pr_debug("longrun flags are %x - %x\n", msr.l, msr.h);
>> +    if (msr.l & 0x01)
>>           policy->policy = CPUFREQ_POLICY_PERFORMANCE;
>>       else
>>           policy->policy = CPUFREQ_POLICY_POWERSAVE;
>> -    rdmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
>> -    pr_debug("longrun ctrl is %x - %x\n", msr_lo, msr_hi);
>> -    msr_lo &= 0x0000007F;
>> -    msr_hi &= 0x0000007F;
>> +    rdmsrq(MSR_TMTA_LONGRUN_CTRL, msr.q);
>> +    pr_debug("longrun ctrl is %x - %x\n", msr.l, msr.h);
>> +    msr.l &= 0x0000007F;
>> +    msr.h &= 0x0000007F;
>>       if (longrun_high_freq <= longrun_low_freq) {
>>           /* Assume degenerate Longrun table */
>>           policy->min = policy->max = longrun_high_freq;
>>       } else {
>> -        policy->min = longrun_low_freq + msr_lo *
>> +        policy->min = longrun_low_freq + msr.l *
>>               ((longrun_high_freq - longrun_low_freq) / 100);
>> -        policy->max = longrun_low_freq + msr_hi *
>> +        policy->max = longrun_low_freq + msr.h *
>>               ((longrun_high_freq - longrun_low_freq) / 100);
>>       }
>>       policy->cpu = 0;
>> @@ -71,7 +71,7 @@ static void longrun_get_policy(struct cpufreq_policy *policy)
>>    */
>>   static int longrun_set_policy(struct cpufreq_policy *policy)
>>   {
>> -    u32 msr_lo, msr_hi;
>> +    struct msr msr;
>>       u32 pctg_lo, pctg_hi;
>>       if (!policy)
>> @@ -93,24 +93,24 @@ static int longrun_set_policy(struct cpufreq_policy *policy)
>>           pctg_lo = pctg_hi;
>>       /* performance or economy mode */
>> -    rdmsr(MSR_TMTA_LONGRUN_FLAGS, msr_lo, msr_hi);
>> -    msr_lo &= 0xFFFFFFFE;
>> +    rdmsrq(MSR_TMTA_LONGRUN_FLAGS, msr.q);
>> +    msr.l &= 0xFFFFFFFE;
>>       switch (policy->policy) {
>>       case CPUFREQ_POLICY_PERFORMANCE:
>> -        msr_lo |= 0x00000001;
>> +        msr.l |= 0x00000001;
>>           break;
>>       case CPUFREQ_POLICY_POWERSAVE:
>>           break;
>>       }
>> -    wrmsr(MSR_TMTA_LONGRUN_FLAGS, msr_lo, msr_hi);
>> +    wrmsrq(MSR_TMTA_LONGRUN_FLAGS, msr.q);
>>       /* lower and upper boundary */
>> -    rdmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
>> -    msr_lo &= 0xFFFFFF80;
>> -    msr_hi &= 0xFFFFFF80;
>> -    msr_lo |= pctg_lo;
>> -    msr_hi |= pctg_hi;
>> -    wrmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
>> +    rdmsrq(MSR_TMTA_LONGRUN_CTRL, msr.q);
>> +    msr.l &= 0xFFFFFF80;
>> +    msr.h &= 0xFFFFFF80;
>> +    msr.l |= pctg_lo;
>> +    msr.h |= pctg_hi;
>> +    wrmsrq(MSR_TMTA_LONGRUN_CTRL, msr.q);
>>       return 0;
>>   }
>> @@ -160,7 +160,7 @@ static unsigned int longrun_get(unsigned int cpu)
>>   static int longrun_determine_freqs(unsigned int *low_freq,
>>                                 unsigned int *high_freq)
>>   {
>> -    u32 msr_lo, msr_hi;
>> +    struct msr msr;
>>       u32 save_lo, save_hi;
>>       u32 eax, ebx, ecx, edx;
>>       u32 try_hi;
>> @@ -178,15 +178,17 @@ static int longrun_determine_freqs(unsigned int *low_freq,
>>            * For maximum frequency, read out level zero.
>>            */
>>           /* minimum */
>> -        rdmsr(MSR_TMTA_LRTI_READOUT, msr_lo, msr_hi);
>> -        wrmsr(MSR_TMTA_LRTI_READOUT, msr_hi, msr_hi);
>> -        rdmsr(MSR_TMTA_LRTI_VOLT_MHZ, msr_lo, msr_hi);
>> -        *low_freq = msr_lo * 1000; /* to kHz */
>> +        rdmsrq(MSR_TMTA_LRTI_READOUT, msr.q);
>> +        msr.l = msr.h;
>> +        wrmsrq(MSR_TMTA_LRTI_READOUT, msr.q);
>> +        rdmsrq(MSR_TMTA_LRTI_VOLT_MHZ, msr.q);
>> +        *low_freq = msr.l * 1000; /* to kHz */
>>           /* maximum */
>> -        wrmsr(MSR_TMTA_LRTI_READOUT, 0, msr_hi);
>> -        rdmsr(MSR_TMTA_LRTI_VOLT_MHZ, msr_lo, msr_hi);
>> -        *high_freq = msr_lo * 1000; /* to kHz */
>> +        msr.l = 0;
>> +        wrmsrq(MSR_TMTA_LRTI_READOUT, msr.q);
>> +        rdmsrq(MSR_TMTA_LRTI_VOLT_MHZ, msr.q);
>> +        *high_freq = msr.l * 1000; /* to kHz */
>>           pr_debug("longrun table interface told %u - %u kHz\n",
>>                   *low_freq, *high_freq);
>> @@ -202,9 +204,9 @@ static int longrun_determine_freqs(unsigned int *low_freq,
>>       pr_debug("high frequency is %u kHz\n", *high_freq);
>>       /* get current borders */
>> -    rdmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
>> -    save_lo = msr_lo & 0x0000007F;
>> -    save_hi = msr_hi & 0x0000007F;
>> +    rdmsrq(MSR_TMTA_LONGRUN_CTRL, msr.q);
>> +    save_lo = msr.l & 0x0000007F;
>> +    save_hi = msr.h & 0x0000007F;
>>       /* if current perf_pctg is larger than 90%, we need to decrease the
>>        * upper limit to make the calculation more accurate.
>> @@ -214,16 +216,18 @@ static int longrun_determine_freqs(unsigned int *low_freq,
>>        * on some barrier values */
>>       for (try_hi = 80; try_hi > 0 && ecx > 90; try_hi -= 10) {
>>           /* set to 0 to try_hi perf_pctg */
>> -        msr_lo &= 0xFFFFFF80;
>> -        msr_hi &= 0xFFFFFF80;
>> -        msr_hi |= try_hi;
>> -        wrmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
>> +        msr.l &= 0xFFFFFF80;
>> +        msr.h &= 0xFFFFFF80;
>> +        msr.h |= try_hi;
>> +        wrmsrq(MSR_TMTA_LONGRUN_CTRL, msr.q);
>>           /* read out current core MHz and current perf_pctg */
>>           cpuid(0x80860007, &eax, &ebx, &ecx, &edx);
>>           /* restore values */
>> -        wrmsr(MSR_TMTA_LONGRUN_CTRL, save_lo, save_hi);
>> +        msr.l = save_lo;
>> +        msr.h = save_hi;
>> +        wrmsrq(MSR_TMTA_LONGRUN_CTRL, msr.q);
>>       }
> 
> As sashiko.dev pointed, from the second iter, this patch code
> will clear upper 25 bits to zero.
> 
> https://sashiko.dev/#/patchset/20260629060526.3638272-1-jgross%40suse.com
> 
> for (try_hi = 80; ...; ...) {
> -   msr_lo &= 0xFFFFFF80;    /* iter 1: X.lo[31:7]; iter 2+: same */
> -   msr_hi &= 0xFFFFFF80;
> -   msr_hi |= try_hi;
> -   wrmsr(reg, msr_lo, msr_hi);/* writes X.hi[31:7] | try_hi    */
> +   msr.l &= 0xFFFFFF80;      /* iter 2+: locals=0 -> mask = 0  */
> +   msr.h &= 0xFFFFFF80;
> +   msr.h |= try_hi;
> +   wrmsrq(reg, msr.q);   /* <-- iter 2+ writes 0 (vs X.hi[31:7])*/
> 
>      cpuid(...);
> 
>      /* restore */
> -   wrmsr(reg, save_lo, save_hi);  /* locals untouched */
> +   msr.l = save_lo;              /* poisons locals ->next iter bug  */
> +   msr.h = save_hi;
> +   wrmsrq(reg, msr.q);
> }
> 
> I'm not sure whether the upper 25 bits are reserved, but the original
> code preserved them across iterations. It might be safer to keep that
> behavior unchanged.

Will fix that.


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3743 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

  reply	other threads:[~2026-06-30  6:38 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-29  6:04 [PATCH 00/32] x86/msr: Drop 32-bit MSR interfaces Juergen Gross
2026-06-29  6:04 ` Juergen Gross
2026-06-29  6:04 ` [PATCH 01/32] thermal/intel: Stop using " Juergen Gross
2026-07-02  9:31   ` Ingo Molnar
2026-07-02 11:18     ` Jürgen Groß
2026-07-03 11:22   ` [PATCH v2 " Juergen Gross
2026-06-29  6:04 ` [PATCH 02/32] powercap: " Juergen Gross
2026-06-29 11:25   ` Ingo Molnar
2026-06-29 11:33     ` Jürgen Groß
2026-06-29 12:31       ` Ingo Molnar
2026-06-29 12:52         ` Jürgen Groß
2026-06-29  6:04 ` [PATCH 03/32] edac: " Juergen Gross
2026-06-30  1:50   ` Zhuo, Qiuxu
2026-07-02 10:15   ` [tip: x86/msr] EDAC: " tip-bot2 for Juergen Gross
2026-06-29  6:04 ` [PATCH 04/32] acpi: " Juergen Gross
2026-06-30 12:30   ` Rafael J. Wysocki (Intel)
2026-06-30 12:42     ` Jürgen Groß
2026-07-02  9:17     ` Ingo Molnar
2026-07-02 11:33       ` Rafael J. Wysocki (Intel)
2026-07-04  8:26         ` Ingo Molnar
2026-06-29  6:04 ` [PATCH 05/32] x86/mtrr: " Juergen Gross
2026-06-29 11:33   ` Ingo Molnar
2026-06-29 11:41     ` Jürgen Groß
2026-06-29 12:27       ` Ingo Molnar
2026-06-29 13:04         ` Jürgen Groß
2026-07-02  9:15           ` Ingo Molnar
2026-07-03 11:23   ` [PATCH v2 " Juergen Gross
2026-06-29  6:04 ` [PATCH 06/32] x86/msr: Stop using 32-bit MSR interfaces in lib/msr-smp.c Juergen Gross
2026-07-02 10:16   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:04 ` [PATCH 07/32] x86/msr: Remove wrmsr_safe() Juergen Gross
2026-06-29  6:04 ` [PATCH 08/32] x86/mce: Stop using 32-bit MSR interfaces Juergen Gross
2026-07-02 10:16   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-07-03 10:55   ` [PATCH] x86/mce: Fix build warning after MSR-interface switch Juergen Gross
2026-06-29  6:05 ` [PATCH 09/32] KVM/x86: Stop using 32-bit MSR interfaces Juergen Gross
2026-06-29  6:05 ` [PATCH 10/32] x86/hygon: " Juergen Gross
2026-07-02 10:16   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 11/32] x86/pci: " Juergen Gross
2026-06-29  6:19   ` sashiko-bot
2026-07-02 10:16   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-07-02 10:25     ` sashiko-bot
2026-06-29  6:05 ` [PATCH 12/32] x86/amd: " Juergen Gross
2026-07-02 10:16   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 13/32] x86/featctl: " Juergen Gross
2026-07-02  9:39   ` Ingo Molnar
2026-07-02 11:19     ` Jürgen Groß
2026-07-03 11:24   ` [PATCH v2 " Juergen Gross
2026-06-29  6:05 ` [PATCH 14/32] x86/tsc: " Juergen Gross
2026-07-02 10:15   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 15/32] x86/msr: Remove rdmsr_safe() Juergen Gross
2026-06-29  6:05 ` [PATCH 16/32] cpufreq: Stop using 32-bit MSR interfaces Juergen Gross
2026-06-29 14:55   ` Zhongqiu Han
2026-06-30  6:38     ` Juergen Gross [this message]
2026-07-03 11:24   ` [PATCH v2 " Juergen Gross
2026-07-05  4:51     ` Zhongqiu Han
2026-06-29  6:05 ` [PATCH 17/32] x86/resctrl: " Juergen Gross
2026-07-01 16:49   ` Reinette Chatre
2026-07-02 10:15   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 18/32] x86/apic: " Juergen Gross
2026-07-02 10:15   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 19/32] x86/cpu: " Juergen Gross
2026-07-02 10:15   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-07-03 21:48     ` Borislav Petkov
2026-07-06  8:30       ` Juergen Gross
2026-06-29  6:05 ` [PATCH 20/32] drivers/ata: " Juergen Gross
2026-06-29  6:23   ` sashiko-bot
2026-06-29  7:28     ` Jürgen Groß
2026-07-03 11:25   ` [PATCH v2 " Juergen Gross
2026-06-29  6:05 ` [PATCH 21/32] agp/nvidia: " Juergen Gross
2026-06-29  6:25   ` sashiko-bot
2026-06-29  6:05 ` [PATCH 22/32] fbdev/geode: " Juergen Gross
2026-06-29  6:05 ` [PATCH 23/32] hw_random/via-rng: " Juergen Gross
2026-06-29  6:05 ` [PATCH 24/32] drivers/gpio: " Juergen Gross
2026-06-29 10:33   ` Bartosz Golaszewski
2026-07-01  8:13   ` Linus Walleij
2026-07-01  8:32     ` Juergen Gross
2026-06-29  6:05 ` [PATCH 25/32] drivers/misc: " Juergen Gross
2026-06-29  6:05 ` [PATCH 26/32] x86/msr: Remove wrmsr() Juergen Gross
2026-06-29  6:05 ` [PATCH 27/32] x86/hyperv: Stop using 32-bit MSR interfaces Juergen Gross
2026-07-03  9:39   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 28/32] x86/olpc: " Juergen Gross
2026-07-03  9:39   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 29/32] hwmon: " Juergen Gross
2026-06-29  6:25   ` sashiko-bot
2026-06-29 15:05   ` Guenter Roeck
2026-07-03  9:39   ` [tip: x86/msr] " tip-bot2 for Juergen Gross
2026-06-29  6:05 ` [PATCH 30/32] x86/msr: Remove rdmsr() Juergen Gross
2026-06-29  6:05 ` [PATCH 31/32] treewide: convert rdmsrq() from a macro to an inline function Juergen Gross
2026-06-29  6:05   ` Juergen Gross
2026-06-29  6:24   ` sashiko-bot
2026-06-29  6:05 ` [PATCH 32/32] x86/msr: Simplify some rdmsrq() use cases Juergen Gross
2026-06-29  6:52 ` [PATCH 00/32] x86/msr: Drop 32-bit MSR interfaces Arnd Bergmann
2026-06-29  6:52   ` Arnd Bergmann
2026-06-29  7:01   ` Jürgen Groß
2026-06-29  7:01     ` Jürgen Groß
2026-06-29  8:06     ` Arnd Bergmann
2026-06-29  8:06       ` Arnd Bergmann
2026-06-29  8:15       ` Jürgen Groß
2026-06-29  8:15         ` Jürgen Groß
2026-06-29  8:30         ` Jan Beulich
2026-06-29  8:38         ` Arnd Bergmann
2026-06-29  8:38           ` Arnd Bergmann
2026-06-30 20:06           ` H. Peter Anvin
2026-06-30 20:06             ` H. Peter Anvin
2026-06-29 11:19       ` Ingo Molnar
2026-06-29 11:19         ` Ingo Molnar
2026-06-30 18:59         ` Sean Christopherson
2026-06-30 18:59           ` Sean Christopherson
2026-07-01  8:33           ` Jürgen Groß
2026-07-01  8:33             ` Jürgen Groß
2026-07-02 10:07           ` Ingo Molnar
2026-07-02 10:07             ` Ingo Molnar
2026-07-02 11:03             ` Juergen Gross
2026-07-02 11:03               ` Juergen Gross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fbb632b9-4b87-4c6c-b0e2-e6687d88f378@suse.com \
    --to=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=viresh.kumar@linaro.org \
    --cc=zhongqiu.han@oss.qualcomm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.