[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [win-pv-devel] [PATCH 11/20] Add Setup/teardown of active device and logging to OnSuspend/OnShutdown



> -----Original Message-----
> From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On
> Behalf Of Owen Smith
> Sent: 24 May 2016 15:21
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith
> Subject: [win-pv-devel] [PATCH 11/20] Add Setup/teardown of active device
> and logging to OnSuspend/OnShutdown
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
> ---
>  src/liteagent/LiteAgent.cpp | 51
> ++++++++++++++++++++++++++++++++++++++++++++-
>  src/liteagent/LiteAgent.h   |  5 +++++
>  2 files changed, 55 insertions(+), 1 deletion(-)
> 
> diff --git a/src/liteagent/LiteAgent.cpp b/src/liteagent/LiteAgent.cpp
> index a887925..bb17e91 100644
> --- a/src/liteagent/LiteAgent.cpp
> +++ b/src/liteagent/LiteAgent.cpp
> @@ -149,7 +149,9 @@ static CLiteAgent s_service;
>      return s_service.__ServiceControlHandlerEx(req, evt, data, ctxt);
>  }
> 
> -CLiteAgent::CLiteAgent() : m_handle(NULL),
> m_devs(GUID_INTERFACE_XENIFACE), m_dev(NULL)
> +CLiteAgent::CLiteAgent() :
> +    m_handle(NULL), m_devs(GUID_INTERFACE_XENIFACE), m_dev(NULL),
> +    m_ctxt_shutdown(NULL), m_ctxt_suspend(NULL), m_update(0)
>  {
>      m_status.dwServiceType        = SERVICE_WIN32;
>      m_status.dwCurrentState       = SERVICE_START_PENDING;
> @@ -184,6 +186,18 @@ CLiteAgent::~CLiteAgent()
>          m_dev = (CXenIfaceItf*)dev;
>          // setting active device
>          CLiteAgent::Log("Starting Active Device\n");
> +
> +        // register watch
> +        m_dev->StoreAddWatch("control/shutdown", m_shutdown,
> &m_ctxt_shutdown);
> +        // register suspend event
> +        m_dev->SuspendRegister(m_suspend, &m_ctxt_suspend);
> +
> +        // advertise
> +        m_dev->StoreWrite("control/feature-shutdown", "1");
> +        // set xen time
> +        SetXenTime();
> +        // kick xapi
> +        KickXapi();
>      }
>  }
> 
> @@ -194,6 +208,18 @@ CLiteAgent::~CLiteAgent()
>          m_dev = NULL;
>          // active device removed
>          CLiteAgent::Log("Active Device Removed\n");
> +
> +        // unadvertise
> +        m_dev->StoreRemove("control/feature-shutdown");
> +        // kick xapi
> +        KickXapi();
> +
> +        // unregister suspend event
> +        m_dev->SuspendDeregister(m_ctxt_suspend);
> +        m_ctxt_suspend = NULL;
> +        // unregister watch
> +        m_dev->StoreRemoveWatch(m_ctxt_shutdown);
> +        m_ctxt_shutdown = NULL;
>      }
>  }
> 
> @@ -241,6 +267,8 @@ void CLiteAgent::OnShutdown()
>      if (m_dev == NULL)
>          return;
>      CLiteAgent::Log("OnShutdown(%ws)\n", m_dev->Path());
> +
> +    // check shutdown type and enact shutdown
>  }
> 
>  void CLiteAgent::OnSuspend()
> @@ -248,6 +276,27 @@ void CLiteAgent::OnSuspend()
>      if (m_dev == NULL)
>          return;
>      CLiteAgent::Log("OnSuspend(%ws)\n", m_dev->Path());
> +
> +    // advertise
> +    m_dev->StoreWrite("control/feature-shutdown", "1");
> +    // set xen time
> +    SetXenTime();
> +    // kick xapi
> +    KickXapi();
> +}
> +
> +void CLiteAgent::SetXenTime()
> +{
> +    CLiteAgent::Log("SetXenTime()\n");
> +}
> +
> +void CLiteAgent::KickXapi()
> +{
> +    char value[32];
> +    _snprintf_s(value, sizeof(value), 31, "%I64d", m_update);
> +    m_dev->StoreWrite("data/update_cnt", value);
> +    m_dev->StoreWrite("data/updated", "1");
> +    ++m_update;
>  }

Please don't include anything specific to the XenServer toolstack here. Has 
this code been tested in a non XenServer environment?

  Paul

> 
>  void CLiteAgent::SetServiceStatus(DWORD state, DWORD exit /*= 0*/,
> DWORD hint /*= 0*/)
> diff --git a/src/liteagent/LiteAgent.h b/src/liteagent/LiteAgent.h
> index b19d8e2..a95c394 100644
> --- a/src/liteagent/LiteAgent.h
> +++ b/src/liteagent/LiteAgent.h
> @@ -70,6 +70,8 @@ private: // service events
> 
>      void OnShutdown();
>      void OnSuspend();
> +    void SetXenTime();
> +    void KickXapi();
> 
>  private: // service support
>      void SetServiceStatus(DWORD state, DWORD exit = 0, DWORD hint = 0);
> @@ -84,6 +86,9 @@ private: // service support
> 
>      CDeviceList             m_devs;
>      CXenIfaceItf*           m_dev;
> +    void*                   m_ctxt_shutdown;
> +    void*                   m_ctxt_suspend;
> +    int                     m_update;
>  };
> 
>  #endif
> --
> 1.9.4.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.