|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v3 1/2] x86: restore pv_rtc_handler() invocation
> -----Original Message-----
> From: Jan Beulich <jbeulich@xxxxxxxx>
> Sent: 15 July 2020 12:57
> To: xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>; Paul Durrant <paul@xxxxxxx>;
> Wei Liu <wl@xxxxxxx>;
> Roger Pau Monné <roger.pau@xxxxxxxxxx>
> Subject: [PATCH v3 1/2] x86: restore pv_rtc_handler() invocation
>
> This was lost when making the logic accessible to PVH Dom0.
>
> While doing so make the access to the global function pointer safe
> against races (as noticed by Roger): The only current user wants to be
> invoked just once (but can tolerate to be invoked multiple times),
> zapping the pointer at that point.
>
> Fixes: 835d8d69d96a ("x86/rtc: provide mediated access to RTC for PVH dom0")
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> v3: Latch pointer under lock.
> v2: New.
>
> --- a/xen/arch/x86/time.c
> +++ b/xen/arch/x86/time.c
> @@ -1148,6 +1148,8 @@ void rtc_guest_write(unsigned int port,
>
> switch ( port )
> {
> + typeof(pv_rtc_handler) hook;
> +
> case RTC_PORT(0):
> /*
> * All PV domains (and PVH dom0) are allowed to write to the latched
> @@ -1160,6 +1162,14 @@ void rtc_guest_write(unsigned int port,
> case RTC_PORT(1):
> if ( !ioports_access_permitted(currd, RTC_PORT(0), RTC_PORT(1)) )
> break;
> +
> + spin_lock_irqsave(&rtc_lock, flags);
> + hook = pv_rtc_handler;
> + spin_unlock_irqrestore(&rtc_lock, flags);
> +
> + if ( hook )
> + hook(currd->arch.cmos_idx & 0x7f, data);
> +
> spin_lock_irqsave(&rtc_lock, flags);
> outb(currd->arch.cmos_idx & 0x7f, RTC_PORT(0));
> outb(data, RTC_PORT(1));
LGTM..
Release-acked-by: Paul Durrant <paul@xxxxxxx>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |