lkml.org 
[lkml]   [2022]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRe: [PATCH] x86/platform/uv: Dont use smp_processor_id while preemptable
    Date
    Thanks, I'll do that.

    ________________________________________
    From: Hans de Goede <hdegoede@redhat.com>
    Sent: Saturday, May 21, 2022 6:57 AM
    To: Travis, Mike; Borislav Petkov; Dave Hansen; Ingo Molnar; Thomas Gleixner; Wahl, Steve; x86@kernel.org
    Cc: Sivanich, Dimitri; Andy Shevchenko; Darren Hart; H. Peter Anvin; Anderson, Russ; linux-kernel@vger.kernel.org; platform-driver-x86@vger.kernel.org
    Subject: Re: [PATCH] x86/platform/uv: Dont use smp_processor_id while preemptable

    Hi Mike,

    On 5/20/22 22:37, Mike Travis wrote:
    > To avoid a "BUG: using smp_processor_id() in preemptible" debug
    > warning message, disable preemption around use of the processor id.
    >
    > Signed-off-by: Mike Travis <mike.travis@hpe.com>
    > Reviewed-by: Steve Wahl <steve.wahl@hpe.com>
    > Reviewed-by: Dimitri Sivanich <dimitri.sivanich@hpe.com>

    A git blame shows that this code has been around for quite
    a while; so presumably this should be backported to some of
    the stable kernel series ?

    Maybe add an appropriate Cc: stable tag with the range of
    kernels this should be added to and/or add a Fixes: tag?

    Regards,

    Hans


    > ---
    > arch/x86/platform/uv/uv_time.c | 9 ++++++---
    > 1 file changed, 6 insertions(+), 3 deletions(-)
    >
    > diff --git a/arch/x86/platform/uv/uv_time.c b/arch/x86/platform/uv/uv_time.c
    > index 54663f3e00cb..094190814a28 100644
    > --- a/arch/x86/platform/uv/uv_time.c
    > +++ b/arch/x86/platform/uv/uv_time.c
    > @@ -275,14 +275,17 @@ static int uv_rtc_unset_timer(int cpu, int force)
    > */
    > static u64 uv_read_rtc(struct clocksource *cs)
    > {
    > - unsigned long offset;
    > + unsigned long offset, time;
    > + unsigned int cpu = get_cpu();
    >
    > if (uv_get_min_hub_revision_id() == 1)
    > offset = 0;
    > else
    > - offset = (uv_blade_processor_id() * L1_CACHE_BYTES) % PAGE_SIZE;
    > + offset = (uv_cpu_blade_processor_id(cpu) * L1_CACHE_BYTES) % PAGE_SIZE;
    >
    > - return (u64)uv_read_local_mmr(UVH_RTC | offset);
    > + time = (u64)uv_read_local_mmr(UVH_RTC | offset);
    > + put_cpu();
    > + return time;
    > }
    >
    > /*

    \
     
     \ /
      Last update: 2022-05-21 20:52    [W:5.244 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site