[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 |