2022-05-23 07:31:18

by Mike Travis

[permalink] [raw]
Subject: [PATCH] x86/platform/uv: Dont use smp_processor_id while preemptable

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 <[email protected]>
Reviewed-by: Steve Wahl <[email protected]>
Reviewed-by: Dimitri Sivanich <[email protected]>
---
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;
}

/*
--
2.26.2



2022-05-26 22:47:02

by Dave Hansen

[permalink] [raw]
Subject: Re: [PATCH] x86/platform/uv: Dont use smp_processor_id while preemptable

On 5/20/22 13: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.

I'm sure this gets rid of the warning. But, could you please take a
quick look at the callers and ensure that they can handle if this read
comes from another CPU?

In other words, what would actually go wrong if uv_read_rtc() got
preempted in this region? What would this actually fix?

2022-05-27 08:37:48

by Mike Travis

[permalink] [raw]
Subject: Re: [PATCH] x86/platform/uv: Dont use smp_processor_id while preemptable

Dave Hansen <[email protected]> wrote:
On 5/20/22 13: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.

>I'm sure this gets rid of the warning. But, could you please take a
>quick look at the callers and ensure that they can handle if this read
>comes from another CPU?
>
>In other words, what would actually go wrong if uv_read_rtc() got
>preempted in this region? What would this actually fix?

I talked with the author of this driver and among the preemption scenarios it always returns the same system time. And due to the round robin aspect of the request scheduling, getting an earlier time when a second CPU reads it's time is not possible. So getting rid of the debug warning message seems to be the only benefit from this patch.