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

Re: [win-pv-devel] [PATCH] Update EVTCHN, GNTTAB and STORE interface headers



> -----Original Message-----
> From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On
> Behalf Of Owen Smith
> Sent: 25 June 2018 10:48
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith <owen.smith@xxxxxxxxxx>
> Subject: [win-pv-devel] [PATCH] Update EVTCHN, GNTTAB and STORE
> interface headers
> 
> Updates revision to 09000004
> Fixes Evtchn Unmask calls
> Updates xenbus interface headers to latest versions
> 
> This will resolve an issue where, under certain timing conditions,
> xenvbd will request a second reboot before functioning correctly.
> 
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>

Given the difficulties separating these updates...

Reviewed-by: Paul Durrant <paul.durrant@xxxxxxxxxx>

> ---
>  include/evtchn_interface.h | 128
> +++++++++++++++++++++++++++++++++------------
>  include/gnttab_interface.h |  92 +++++++++++++++++++++++++++++++-
>  include/store_interface.h  |  68 ++++++++++++++++++++++--
>  src/xenvbd.inf             |   6 +--
>  src/xenvbd/ring.c          |   6 ++-
>  5 files changed, 257 insertions(+), 43 deletions(-)
> 
> diff --git a/include/evtchn_interface.h b/include/evtchn_interface.h
> index 6f8fe42..068a697 100644
> --- a/include/evtchn_interface.h
> +++ b/include/evtchn_interface.h
> @@ -112,13 +112,6 @@ typedef PXENBUS_EVTCHN_CHANNEL
>      ...
>      );
> 
> -typedef NTSTATUS
> -(*XENBUS_EVTCHN_BIND_V2)(
> -    IN  PINTERFACE              Interface,
> -    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
> -    IN  ULONG                   Cpu
> -    );
> -
>  /*! \typedef XENBUS_EVTCHN_BIND
>      \brief Bind an event channel to a specific CPU
> 
> @@ -135,8 +128,8 @@ typedef NTSTATUS
>      IN  UCHAR                   Number
>      );
> 
> -typedef BOOLEAN
> -(*XENBUS_EVTCHN_UNMASK_V1)(
> +typedef VOID
> +(*XENBUS_EVTCHN_UNMASK_V4)(
>      IN  PINTERFACE              Interface,
>      IN  PXENBUS_EVTCHN_CHANNEL  Channel,
>      IN  BOOLEAN                 InCallback
> @@ -148,17 +141,28 @@ typedef BOOLEAN
>      \param Interface The interface header
>      \param Channel The channel handle
>      \param InCallback Set to TRUE if this method is invoked in context of the
> channel callback
> +    \param Force Set to TRUE if the unmask must succeed, otherwise set to
> FALSE and the function will return FALSE if the unmask did not complete.
>  */
> -typedef VOID
> +typedef BOOLEAN
>  (*XENBUS_EVTCHN_UNMASK)(
>      IN  PINTERFACE              Interface,
>      IN  PXENBUS_EVTCHN_CHANNEL  Channel,
> -    IN  BOOLEAN                 InCallback
> +    IN  BOOLEAN                 InCallback,
> +    IN  BOOLEAN                 Force
> +    );
> +
> +typedef VOID
> +(*XENBUS_EVTCHN_SEND_V1)(
> +    IN  PINTERFACE              Interface,
> +    IN  PXENBUS_EVTCHN_CHANNEL  Channel
>      );
> 
>  /*! \typedef XENBUS_EVTCHN_SEND
>      \brief Send an event to the remote end of the channel
> 
> +    It is assumed that the domain cannot suspend during this call so
> +    IRQL must be >= DISPATCH_LEVEL.
> +
>      \param Interface The interface header
>      \param Channel The channel handle
>  */
> @@ -180,6 +184,42 @@ typedef VOID
>      IN  PXENBUS_EVTCHN_CHANNEL  Channel
>      );
> 
> +/*! \typedef XENBUS_EVTCHN_GET_COUNT
> +    \brief Get the number of events received by the channel since it was
> opened
> +
> +    \param Interface The interface header
> +    \param Channel The channel handle
> +    \return The number of events
> +*/
> +typedef ULONG
> +(*XENBUS_EVTCHN_GET_COUNT)(
> +    IN  PINTERFACE              Interface,
> +    IN  PXENBUS_EVTCHN_CHANNEL  Channel
> +    );
> +
> +typedef NTSTATUS
> +(*XENBUS_EVTCHN_WAIT_V5)(
> +    IN  PINTERFACE              Interface,
> +    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
> +    IN  PLARGE_INTEGER          Timeout OPTIONAL
> +    );
> +
> +/*! \typedef XENBUS_EVTCHN_WAIT
> +    \brief Wait for events to the local end of the channel
> +
> +    \param Interface The interface header
> +    \param Channel The channel handle
> +    \param Count The event count to wait for
> +    \param Timeout An optional timeout value (similar to
> KeWaitForSingleObject(), but non-zero values are allowed at
> DISPATCH_LEVEL).
> +*/
> +typedef NTSTATUS
> +(*XENBUS_EVTCHN_WAIT)(
> +    IN  PINTERFACE              Interface,
> +    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
> +    IN  ULONG                   Count,
> +    IN  PLARGE_INTEGER          Timeout OPTIONAL
> +    );
> +
>  /*! \typedef XENBUS_EVTCHN_GET_PORT
>      \brief Get the local port number bound to the channel
> 
> @@ -209,61 +249,83 @@ typedef VOID
>  DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
>  0xbe2440ac, 0x1098, 0x4150, 0xaf, 0x4d, 0x45, 0x2f, 0xad, 0xce, 0xf9, 0x23);
> 
> -/*! \struct _XENBUS_EVTCHN_INTERFACE_V1
> -    \brief EVTCHN interface version 1
> +/*! \struct _XENBUS_EVTCHN_INTERFACE_V4
> +    \brief EVTCHN interface version 4
>      \ingroup interfaces
>  */
> -struct _XENBUS_EVTCHN_INTERFACE_V1 {
> +struct _XENBUS_EVTCHN_INTERFACE_V4 {
>      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_BIND      EvtchnBind;
> +    XENBUS_EVTCHN_UNMASK_V4 EvtchnUnmaskVersion4;
> +    XENBUS_EVTCHN_SEND_V1   EvtchnSendVersion1;
>      XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
>      XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
>      XENBUS_EVTCHN_CLOSE     EvtchnClose;
>  };
> 
> -/*! \struct _XENBUS_EVTCHN_INTERFACE_V2
> -    \brief EVTCHN interface version 2
> +/*! \struct _XENBUS_EVTCHN_INTERFACE_V5
> +    \brief EVTCHN interface version 5
>      \ingroup interfaces
>  */
> -struct _XENBUS_EVTCHN_INTERFACE_V2 {
> +struct _XENBUS_EVTCHN_INTERFACE_V5 {
>      INTERFACE               Interface;
>      XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
>      XENBUS_EVTCHN_RELEASE   EvtchnRelease;
>      XENBUS_EVTCHN_OPEN      EvtchnOpen;
> -    XENBUS_EVTCHN_BIND_V2   EvtchnBindVersion2;
> -    XENBUS_EVTCHN_UNMASK_V1 EvtchnUnmaskVersion1;
> +    XENBUS_EVTCHN_BIND      EvtchnBind;
> +    XENBUS_EVTCHN_UNMASK_V4 EvtchnUnmaskVersion4;
> +    XENBUS_EVTCHN_SEND_V1   EvtchnSendVersion1;
> +    XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
> +    XENBUS_EVTCHN_WAIT_V5   EvtchnWaitVersion5;
> +    XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
> +    XENBUS_EVTCHN_CLOSE     EvtchnClose;
> +};
> +
> +/*! \struct _XENBUS_EVTCHN_INTERFACE_V6
> +    \brief EVTCHN interface version 6
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_EVTCHN_INTERFACE_V6 {
> +    INTERFACE               Interface;
> +    XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
> +    XENBUS_EVTCHN_RELEASE   EvtchnRelease;
> +    XENBUS_EVTCHN_OPEN      EvtchnOpen;
> +    XENBUS_EVTCHN_BIND      EvtchnBind;
> +    XENBUS_EVTCHN_UNMASK_V4 EvtchnUnmaskVersion4;
>      XENBUS_EVTCHN_SEND      EvtchnSend;
>      XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
> +    XENBUS_EVTCHN_WAIT_V5   EvtchnWaitVersion5;
>      XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
>      XENBUS_EVTCHN_CLOSE     EvtchnClose;
>  };
> 
> -/*! \struct _XENBUS_EVTCHN_INTERFACE_V3
> -    \brief EVTCHN interface version 3
> +/*! \struct _XENBUS_EVTCHN_INTERFACE_V7
> +    \brief EVTCHN interface version 7
>      \ingroup interfaces
>  */
> -struct _XENBUS_EVTCHN_INTERFACE_V3 {
> +struct _XENBUS_EVTCHN_INTERFACE_V7 {
>      INTERFACE               Interface;
>      XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
>      XENBUS_EVTCHN_RELEASE   EvtchnRelease;
>      XENBUS_EVTCHN_OPEN      EvtchnOpen;
> -    XENBUS_EVTCHN_BIND_V2   EvtchnBindVersion2;
> -    XENBUS_EVTCHN_UNMASK    EvtchnUnmask;
> +    XENBUS_EVTCHN_BIND      EvtchnBind;
> +    XENBUS_EVTCHN_UNMASK_V4 EvtchnUnmaskVersion4;
>      XENBUS_EVTCHN_SEND      EvtchnSend;
>      XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
> +    XENBUS_EVTCHN_GET_COUNT EvtchnGetCount;
> +    XENBUS_EVTCHN_WAIT      EvtchnWait;
>      XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
>      XENBUS_EVTCHN_CLOSE     EvtchnClose;
>  };
> 
> -/*! \struct _XENBUS_EVTCHN_INTERFACE_V4
> -    \brief EVTCHN interface version 4
> +/*! \struct _XENBUS_EVTCHN_INTERFACE_V8
> +    \brief EVTCHN interface version 8
>      \ingroup interfaces
>  */
> -struct _XENBUS_EVTCHN_INTERFACE_V4 {
> +struct _XENBUS_EVTCHN_INTERFACE_V8 {
>      INTERFACE               Interface;
>      XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
>      XENBUS_EVTCHN_RELEASE   EvtchnRelease;
> @@ -272,11 +334,13 @@ struct _XENBUS_EVTCHN_INTERFACE_V4 {
>      XENBUS_EVTCHN_UNMASK    EvtchnUnmask;
>      XENBUS_EVTCHN_SEND      EvtchnSend;
>      XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
> +    XENBUS_EVTCHN_GET_COUNT EvtchnGetCount;
> +    XENBUS_EVTCHN_WAIT      EvtchnWait;
>      XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
>      XENBUS_EVTCHN_CLOSE     EvtchnClose;
>  };
> 
> -typedef struct _XENBUS_EVTCHN_INTERFACE_V4
> XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVTCHN_INTERFACE;
> +typedef struct _XENBUS_EVTCHN_INTERFACE_V8
> XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVTCHN_INTERFACE;
> 
>  /*! \def XENBUS_EVTCHN
>      \brief Macro at assist in method invocation
> @@ -286,8 +350,8 @@ typedef struct _XENBUS_EVTCHN_INTERFACE_V4
> XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVT
> 
>  #endif  // _WINDLL
> 
> -#define XENBUS_EVTCHN_INTERFACE_VERSION_MIN 1
> -#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 4
> +#define XENBUS_EVTCHN_INTERFACE_VERSION_MIN 4
> +#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 8
> 
>  #endif  // _XENBUS_EVTCHN_INTERFACE_H
> 
> diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
> index d29440a..61272ab 100644
> --- a/include/gnttab_interface.h
> +++ b/include/gnttab_interface.h
> @@ -148,6 +148,26 @@ typedef ULONG
>      IN  PXENBUS_GNTTAB_ENTRY        Entry
>      );
> 
> +/*! \typedef XENBUS_GNTTAB_QUERY_REFERENCE
> +    \brief Get the reference number of the entry
> +
> +    \param Interface The interface header
> +    \param Reference The reference number
> +    \param Pfn An optional pointer to receive the value of the reference
> frame number
> +    \param ReadOnly An optional pointer to receive the boolean value of the
> read-only flag
> +*/
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_QUERY_REFERENCE)(
> +    IN  PINTERFACE  Interface,
> +    IN  ULONG       Reference,
> +    OUT PPFN_NUMBER Pfn OPTIONAL,
> +    OUT PBOOLEAN    ReadOnly OPTIONAL
> +    );
> +
> +#define XENBUS_GNTTAB_CONSOLE_REFERENCE 0
> +#define XENBUS_GNTTAB_STORE_REFERENCE   1
> +
> +
>  /*! \typedef XENBUS_GNTTAB_DESTROY_CACHE
>      \brief Destroy a cache of grant table entries
> 
> @@ -163,6 +183,39 @@ typedef VOID
>      IN  PXENBUS_GNTTAB_CACHE    Cache
>      );
> 
> +/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
> +    \brief Map foreign memory pages into the system address space
> +
> +    \param Interface The interface header
> +    \param Domain The domid of the foreign domain that granted the pages
> +    \param NumberPages Number of pages to map
> +    \param References Array of grant reference numbers shared by the
> foreign domain
> +    \param ReadOnly If TRUE, pages are mapped with read-only access
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    );
> +
> +/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> +    \brief Unmap foreign memory pages from the system address space
> +
> +    \param Interface The interface header
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
>  DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
>  0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
> @@ -182,7 +235,42 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
>      XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
>  };
> 
> -typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> +/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
> +    \brief GNTTAB interface version 2
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_GNTTAB_INTERFACE_V2 {
> +    INTERFACE                           Interface;
> +    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
> +    XENBUS_GNTTAB_RELEASE               GnttabRelease;
> +    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
> +    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
> GnttabPermitForeignAccess;
> +    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
> GnttabRevokeForeignAccess;
> +    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
> +    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
> +    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
> +    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> GnttabUnmapForeignPages;
> +};
> +
> +/*! \struct _XENBUS_GNTTAB_INTERFACE_V3
> +    \brief GNTTAB interface version 3
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_GNTTAB_INTERFACE_V3 {
> +    INTERFACE                           Interface;
> +    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
> +    XENBUS_GNTTAB_RELEASE               GnttabRelease;
> +    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
> +    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
> GnttabPermitForeignAccess;
> +    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
> GnttabRevokeForeignAccess;
> +    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
> +    XENBUS_GNTTAB_QUERY_REFERENCE       GnttabQueryReference;
> +    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
> +    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
> +    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> GnttabUnmapForeignPages;
> +};
> +
> +typedef struct _XENBUS_GNTTAB_INTERFACE_V3
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> 
>  /*! \def XENBUS_GNTTAB
>      \brief Macro at assist in method invocation
> @@ -193,7 +281,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
>  #endif  // _WINDLL
> 
>  #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
> -#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
> +#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 3
> 
>  #endif  // _XENBUS_GNTTAB_INTERFACE_H
> 
> diff --git a/include/store_interface.h b/include/store_interface.h
> index 5bcbba3..52f1a1d 100644
> --- a/include/store_interface.h
> +++ b/include/store_interface.h
> @@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION
> XENBUS_STORE_TRANSACTION, *PXENBUS_S
>  */
>  typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH,
> *PXENBUS_STORE_WATCH;
> 
> +/*! \typedef XENBUS_STORE_PERMISSION_MASK
> +    \brief Bitmask of XenStore key permissions
> +*/
> +typedef enum _XENBUS_STORE_PERMISSION_MASK {
> +    XENBUS_STORE_PERM_NONE = 0,
> +    XENBUS_STORE_PERM_READ = 1,
> +    XENBUS_STORE_PERM_WRITE = 2,
> +} XENBUS_STORE_PERMISSION_MASK;
> +
> +/*! \typedef XENBUS_STORE_PERMISSION
> +    \brief XenStore key permissions entry for a single domain
> +*/
> +typedef struct _XENBUS_STORE_PERMISSION {
> +    USHORT                          Domain;
> +    XENBUS_STORE_PERMISSION_MASK    Mask;
> +} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
> +
>  /*! \typedef XENBUS_STORE_ACQUIRE
>      \brief Acquire a reference to the STORE interface
> 
> @@ -247,10 +264,36 @@ typedef VOID
>      IN  PINTERFACE  Interface
>      );
> 
> +/*! \typedef XENBUS_STORE_PERMISSIONS_SET
> +    \brief Set permissions for a XenStore key
> +
> +    \param Interface The interface header
> +    \param Transaction The transaction handle (NULL if this is not
> +    part of a transaction)
> +    \param Prefix An optional prefix for the \a Node
> +    \param Node The concatenation of the \a Prefix and this value specifies
> +    the XenStore key to set permissions of
> +    \param Permissions An array of permissions to set
> +    \param NumberPermissions Number of elements in the \a Permissions
> array
> +*/
> +typedef NTSTATUS
> +(*XENBUS_STORE_PERMISSIONS_SET)(
> +    IN  PINTERFACE                  Interface,
> +    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
> +    IN  PCHAR                       Prefix OPTIONAL,
> +    IN  PCHAR                       Node,
> +    IN  PXENBUS_STORE_PERMISSION    Permissions,
> +    IN  ULONG                       NumberPermissions
> +    );
> +
>  // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
>  DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
>  0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
> 
> +/*! \struct _XENBUS_STORE_INTERFACE_V1
> +    \brief STORE interface version 1
> +    \ingroup interfaces
> +*/
>  struct _XENBUS_STORE_INTERFACE_V1 {
>      INTERFACE                       Interface;
>      XENBUS_STORE_ACQUIRE            StoreAcquire;
> @@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
>      XENBUS_STORE_POLL               StorePoll;
>  };
> 
> -/*! \struct _XENBUS_STORE_INTERFACE_V1
> -    \brief STORE interface version 1
> +/*! \struct _XENBUS_STORE_INTERFACE_V2
> +    \brief STORE interface version 2
>      \ingroup interfaces
>  */
> -typedef struct _XENBUS_STORE_INTERFACE_V1
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
> +struct _XENBUS_STORE_INTERFACE_V2 {
> +    INTERFACE                       Interface;
> +    XENBUS_STORE_ACQUIRE            StoreAcquire;
> +    XENBUS_STORE_RELEASE            StoreRelease;
> +    XENBUS_STORE_FREE               StoreFree;
> +    XENBUS_STORE_READ               StoreRead;
> +    XENBUS_STORE_PRINTF             StorePrintf;
> +    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
> +    XENBUS_STORE_REMOVE             StoreRemove;
> +    XENBUS_STORE_DIRECTORY          StoreDirectory;
> +    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
> +    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
> +    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
> +    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
> +    XENBUS_STORE_POLL               StorePoll;
> +};
> +
> +typedef struct _XENBUS_STORE_INTERFACE_V2
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
> 
>  /*! \def XENBUS_STORE
>      \brief Macro at assist in method invocation
> @@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE
>  #endif  // _WINDLL
> 
>  #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
> -#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
> +#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
> 
>  #endif  // _XENBUS_STORE_INTERFACE_H
> 
> diff --git a/src/xenvbd.inf b/src/xenvbd.inf
> index bb5ada2..5220add 100644
> --- a/src/xenvbd.inf
> +++ b/src/xenvbd.inf
> @@ -54,9 +54,9 @@ xenvbd_coinst.dll=0,,
>  %Vendor%=Inst,NT$ARCH$
> 
>  [Inst.NT$ARCH$]
> -
> %XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@@VEND
> OR_DEVICE_ID@&DEV_VBD&REV_09000000
> -
> %XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0001&D
> EV_VBD&REV_09000000
> -
> %XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0002&D
> EV_VBD&REV_09000000
> +%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@@VEN
> DOR_DEVICE_ID@&DEV_VBD&REV_09000004
> +%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0001&
> DEV_VBD&REV_09000004
> +%XenVbdName%=XenVbd_Inst,XENBUS\VEN_@VENDOR_PREFIX@0002&
> DEV_VBD&REV_09000004
> 
>  [XenVbd_Inst]
>  CopyFiles=XenVbd_Copyfiles
> diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c
> index a7b636d..2f5c876 100644
> --- a/src/xenvbd/ring.c
> +++ b/src/xenvbd/ring.c
> @@ -1649,7 +1649,8 @@ BlkifRingDpc(
>      XENBUS_EVTCHN(Unmask,
>                    &Ring->EvtchnInterface,
>                    BlkifRing->Channel,
> -                  FALSE);
> +                  FALSE,
> +                  TRUE);
>  }
> 
>  static NTSTATUS
> @@ -1923,7 +1924,8 @@ BlkifRingConnect(
>      XENBUS_EVTCHN(Unmask,
>                    &Ring->EvtchnInterface,
>                    BlkifRing->Channel,
> -                  FALSE);
> +                  FALSE,
> +                  TRUE);
> 
>      status = RtlStringCchPrintfA(Name,
>                                   MAX_NAME_LEN,
> --
> 2.16.2.windows.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/win-pv-devel
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel

 


Rackspace

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