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

[win-pv-devel] [PATCH] Update to EVTCHN version 3



Take the opportunity to refresh all imported headers though as there's a
small doxygen tweak in each of them too.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 include/cache_interface.h    |  1 +
 include/debug_interface.h    |  1 +
 include/emulated_interface.h |  1 +
 include/evtchn_interface.h   | 69 +++++++++++++++++++++++++++++++++++++++-----
 include/gnttab_interface.h   |  1 +
 include/store_interface.h    |  1 +
 include/suspend_interface.h  |  1 +
 src/xenvbd/notifier.c        | 33 +++++++++------------
 8 files changed, 81 insertions(+), 27 deletions(-)

diff --git a/include/cache_interface.h b/include/cache_interface.h
index 12599ef..dae3ac6 100644
--- a/include/cache_interface.h
+++ b/include/cache_interface.h
@@ -205,6 +205,7 @@ DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,
 
 /*! \struct _XENBUS_CACHE_INTERFACE_V1
     \brief CACHE interface version 1
+    \ingroup interfaces
 */
 struct _XENBUS_CACHE_INTERFACE_V1 {
     INTERFACE               Interface;
diff --git a/include/debug_interface.h b/include/debug_interface.h
index 0b4f763..cc71db0 100644
--- a/include/debug_interface.h
+++ b/include/debug_interface.h
@@ -146,6 +146,7 @@ DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,
 
 /*! \struct _XENBUS_DEBUG_INTERFACE_V1
     \brief DEBUG interface version 1
+    \ingroup interfaces
 */
 struct _XENBUS_DEBUG_INTERFACE_V1 {
     INTERFACE               Interface;
diff --git a/include/emulated_interface.h b/include/emulated_interface.h
index 0019c1b..85ed2b8 100644
--- a/include/emulated_interface.h
+++ b/include/emulated_interface.h
@@ -101,6 +101,7 @@ DEFINE_GUID(GUID_XENFILT_EMULATED_INTERFACE,
 
 /*! \struct _XENFILT_EMULATED_INTERFACE_V1
     \brief EMULATED interface version 1
+    \ingroup interfaces
 */
 struct _XENFILT_EMULATED_INTERFACE_V1 {
     INTERFACE                           Interface;
diff --git a/include/evtchn_interface.h b/include/evtchn_interface.h
index 207f341..1bc456a 100644
--- a/include/evtchn_interface.h
+++ b/include/evtchn_interface.h
@@ -112,19 +112,39 @@ typedef PXENBUS_EVTCHN_CHANNEL
     ...
     );
 
+/*! \typedef XENBUS_EVTCHN_BIND
+    \brief Bind an event channel to a specific CPU
+
+    \param Interface The interface header
+    \param Channel The channel handle
+    \param Cpu The CPU that should handle events
+*/
+typedef NTSTATUS
+(*XENBUS_EVTCHN_BIND)(
+    IN  PINTERFACE              Interface,
+    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
+    IN  ULONG                   Cpu
+    );
+
+typedef BOOLEAN
+(*XENBUS_EVTCHN_UNMASK_V1)(
+    IN  PINTERFACE              Interface,
+    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
+    IN  BOOLEAN                 InCallback
+    );
+
 /*! \typedef XENBUS_EVTCHN_UNMASK
     \brief Unmask an event channel
 
     \param Interface The interface header
     \param Channel The channel handle
-    \param Locked Set to TRUE if this method is invoked in context of the 
channel callback
-    \return TRUE if there was an event pending at the point of unmask, FALSE 
otherwise
+    \param InCallback Set to TRUE if this method is invoked in context of the 
channel callback
 */
-typedef BOOLEAN
+typedef VOID
 (*XENBUS_EVTCHN_UNMASK)(
     IN  PINTERFACE              Interface,
     IN  PXENBUS_EVTCHN_CHANNEL  Channel,
-    IN  BOOLEAN                 Locked
+    IN  BOOLEAN                 InCallback
     );
 
 /*! \typedef XENBUS_EVTCHN_SEND
@@ -182,20 +202,55 @@ DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
 
 /*! \struct _XENBUS_EVTCHN_INTERFACE_V1
     \brief EVTCHN interface version 1
+    \ingroup interfaces
 */
 struct _XENBUS_EVTCHN_INTERFACE_V1 {
     INTERFACE               Interface;
     XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
     XENBUS_EVTCHN_RELEASE   EvtchnRelease;
     XENBUS_EVTCHN_OPEN      EvtchnOpen;
+    XENBUS_EVTCHN_UNMASK_V1 EvtchnUnmaskVersion1;
+    XENBUS_EVTCHN_SEND      EvtchnSend;
+    XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
+    XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
+    XENBUS_EVTCHN_CLOSE     EvtchnClose;
+};
+
+/*! \struct _XENBUS_EVTCHN_INTERFACE_V2
+    \brief EVTCHN interface version 2
+    \ingroup interfaces
+*/
+struct _XENBUS_EVTCHN_INTERFACE_V2 {
+    INTERFACE               Interface;
+    XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
+    XENBUS_EVTCHN_RELEASE   EvtchnRelease;
+    XENBUS_EVTCHN_OPEN      EvtchnOpen;
+    XENBUS_EVTCHN_BIND      EvtchnBind;
+    XENBUS_EVTCHN_UNMASK_V1 EvtchnUnmaskVersion1;
+    XENBUS_EVTCHN_SEND      EvtchnSend;
+    XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
+    XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
+    XENBUS_EVTCHN_CLOSE     EvtchnClose;
+};
+
+/*! \struct _XENBUS_EVTCHN_INTERFACE_V3
+    \brief EVTCHN interface version 3
+    \ingroup interfaces
+*/
+struct _XENBUS_EVTCHN_INTERFACE_V3 {
+    INTERFACE               Interface;
+    XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
+    XENBUS_EVTCHN_RELEASE   EvtchnRelease;
+    XENBUS_EVTCHN_OPEN      EvtchnOpen;
+    XENBUS_EVTCHN_BIND      EvtchnBind;
     XENBUS_EVTCHN_UNMASK    EvtchnUnmask;
     XENBUS_EVTCHN_SEND      EvtchnSend;
-    XENBUS_EVTCHN_SEND      EvtchnTrigger;
+    XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
     XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
     XENBUS_EVTCHN_CLOSE     EvtchnClose;
 };
 
-typedef struct _XENBUS_EVTCHN_INTERFACE_V1 XENBUS_EVTCHN_INTERFACE, 
*PXENBUS_EVTCHN_INTERFACE;
+typedef struct _XENBUS_EVTCHN_INTERFACE_V3 XENBUS_EVTCHN_INTERFACE, 
*PXENBUS_EVTCHN_INTERFACE;
 
 /*! \def XENBUS_EVTCHN
     \brief Macro at assist in method invocation
@@ -206,7 +261,7 @@ typedef struct _XENBUS_EVTCHN_INTERFACE_V1 
XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVT
 #endif  // _WINDLL
 
 #define XENBUS_EVTCHN_INTERFACE_VERSION_MIN 1
-#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 1
+#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 3
 
 #endif  // _XENBUS_EVTCHN_INTERFACE_H
 
diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
index c9d005f..d29440a 100644
--- a/include/gnttab_interface.h
+++ b/include/gnttab_interface.h
@@ -169,6 +169,7 @@ DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
 
 /*! \struct _XENBUS_GNTTAB_INTERFACE_V1
     \brief GNTTAB interface version 1
+    \ingroup interfaces
 */
 struct _XENBUS_GNTTAB_INTERFACE_V1 {
     INTERFACE                           Interface;
diff --git a/include/store_interface.h b/include/store_interface.h
index f052b8f..5bcbba3 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -269,6 +269,7 @@ struct _XENBUS_STORE_INTERFACE_V1 {
 
 /*! \struct _XENBUS_STORE_INTERFACE_V1
     \brief STORE interface version 1
+    \ingroup interfaces
 */
 typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, 
*PXENBUS_STORE_INTERFACE;
 
diff --git a/include/suspend_interface.h b/include/suspend_interface.h
index 1a39141..df1b4b0 100644
--- a/include/suspend_interface.h
+++ b/include/suspend_interface.h
@@ -148,6 +148,7 @@ DEFINE_GUID(GUID_XENBUS_SUSPEND_INTERFACE,
 
 /*! \struct _XENBUS_SUSPEND_INTERFACE_V1
     \brief SUSPEND interface version 1
+    \ingroup interfaces
 */
 struct _XENBUS_SUSPEND_INTERFACE_V1 {
     INTERFACE                   Interface;
diff --git a/src/xenvbd/notifier.c b/src/xenvbd/notifier.c
index d299c0c..b812d69 100644
--- a/src/xenvbd/notifier.c
+++ b/src/xenvbd/notifier.c
@@ -125,19 +125,15 @@ NotifierDpc(
             return;
     }
 
-    for (;;) {
-        if (Notifier->Connected)
-            FrontendNotifyResponses(Notifier->Frontend);
-
-        if (!Notifier->Connected)
-            break;
-
-        if (!XENBUS_EVTCHN(Unmask,
-                           Notifier->EvtchnInterface,
-                           Notifier->Channel,
-                           FALSE))
-            break;
-    }
+    if (!Notifier->Connected)
+        return;
+
+    FrontendNotifyResponses(Notifier->Frontend);
+
+    XENBUS_EVTCHN(Unmask,
+                  Notifier->EvtchnInterface,
+                  Notifier->Channel,
+                  FALSE);
 }
 
 NTSTATUS
@@ -211,13 +207,10 @@ NotifierConnect(
                                    Notifier->EvtchnInterface,
                                    Notifier->Channel);
 
-    if (XENBUS_EVTCHN(Unmask,
-                      Notifier->EvtchnInterface,
-                      Notifier->Channel,
-                      FALSE))
-        XENBUS_EVTCHN(Trigger,
-                      Notifier->EvtchnInterface,
-                      Notifier->Channel);
+    XENBUS_EVTCHN(Unmask,
+                  Notifier->EvtchnInterface,
+                  Notifier->Channel,
+                  FALSE);
 
     Notifier->Connected = TRUE;
     return STATUS_SUCCESS;
-- 
2.1.1


_______________________________________________
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®.