|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [EXTERNAL] [PATCH 2/2] Add AutoReboot capability
> -----Original Message-----
> From: Paul Durrant <xadimgnik@xxxxxxxxx>
> Sent: 10 December 2020 09:17
> To: Owen Smith <owen.smith@xxxxxxxxxx>; win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Subject: RE: [EXTERNAL] [PATCH 2/2] Add AutoReboot capability
>
> [CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments
> unless you have verified the sender and know the content is safe.
>
> > -----Original Message-----
> > From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On
> > Behalf Of Owen Smith
> > Sent: 09 December 2020 13:29
> > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> > Cc: Owen Smith <owen.smith@xxxxxxxxxx>
> > Subject: [EXTERNAL] [PATCH 2/2] Add AutoReboot capability
> >
> > Setting HKLM\System\CCS\Services\xenbus_monitor\AutoReboot to non-zero
> > will allow xenbus_monitor to trigger a reboot when another driver
> > requests a reboot. AutoReboot is set to the maximum number of reboots
> > to perform. Auto reboots display a message with a 60 second timeout.
> >
> > This setting can be used to allow headless/unmonitored VMs to complete
> > the neccessary number of reboots to return to PV disks/networks.
> > Without this capability its possible to update the driver on a parent
> > device, which may prompt for a reboot. After this reboot, its likely
> > that emulated devices are used whilst drivers are rebound to the
> > device nodes. This can leave headless/unmonitored VMs in a state where
> > emulated devices are in use with a pending reboot. If network settings
> > have been changed for PV devices (e.g. static IP addressing), then the
> > VM may not be accessible over RDP or similar connections.
> >
> > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
> > ---
> > src/monitor/monitor.c | 133
> > ++++++++++++++++++++++++++++++++++++++++--
> > 1 file changed, 129 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c index
> > 07bf8c1..5d58be4 100644
> > --- a/src/monitor/monitor.c
> > +++ b/src/monitor/monitor.c
> > @@ -301,7 +301,8 @@ WTSStateName(
> >
> > static VOID
> > DoReboot(
> > - VOID
> > + IN PTCHAR Message,
> > + IN DWORD Timeout
> > )
> > {
> > Log("waiting for pending install events..."); @@ -312,8 +313,8 @@
> > DoReboot(
> >
> > #pragma prefast(suppress:28159)
> > (VOID) InitiateSystemShutdownEx(NULL,
> > - NULL,
> > - 0,
> > + Message,
> > + Timeout,
> > TRUE,
> > TRUE,
> >
> > SHTDN_REASON_MAJOR_OPERATINGSYSTEM | @@ -451,6 +452,125 @@
> fail1:
> > return NULL;
> > }
> >
> > +static BOOL
> > +TryAutoReboot(
> > + IN PTCHAR DriverName
> > + )
> > +{
> > + PMONITOR_CONTEXT Context = &MonitorContext;
> > + HRESULT Result;
> > + DWORD Type;
> > + DWORD AutoReboot;
> > + DWORD RebootCount;
> > + DWORD Length;
> > + PTCHAR DisplayName;
> > + PTCHAR Description;
> > + PTCHAR Text;
> > + DWORD TextLength;
> > + HRESULT Error;
> > +
> > + Length = sizeof (DWORD);
> > +
> > + Error = RegQueryValueEx(Context->ParametersKey,
> > + "AutoReboot",
> > + NULL,
> > + &Type,
> > + (LPBYTE)&AutoReboot,
> > + &Length);
> > + if (Error != ERROR_SUCCESS ||
> > + Type != REG_DWORD)
> > + AutoReboot = 0;
> > +
> > + if (AutoReboot == 0)
> > + goto done;
> > +
> > + Length = sizeof (DWORD);
> > +
> > + Error = RegQueryValueEx(Context->ParametersKey,
> > + "RebootCount",
> > + NULL,
> > + &Type,
> > + (LPBYTE)&RebootCount,
> > + &Length);
> > + if (Error != ERROR_SUCCESS ||
> > + Type != REG_DWORD)
> > + RebootCount = 0;
> > +
> > + if (RebootCount >= AutoReboot)
> > + goto done;
> > +
> > + Log("AutoRebooting (reboot %u of %u)\n",
> > + RebootCount,
> > + AutoReboot);
> > +
> > + ++RebootCount;
> > +
> > + (VOID) RegSetValueEx(Context->ParametersKey,
> > + "RebootCount",
> > + 0,
> > + REG_DWORD,
> > + (const BYTE*)&RebootCount,
> > + (DWORD) sizeof(DWORD));
> > +
>
> I can't see anything that zeroes/deletes this once there are no more pending
> reboots. Is there something else that does this, or am I just missing
> something?
>
> Paul
>
It seems I missed clearing the value. Patch incoming shortly
Owen
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |