diff -r b26bdba50c41 common/include/evtchn_public.h --- a/common/include/evtchn_public.h Thu Nov 01 16:21:24 2007 -0700 +++ b/common/include/evtchn_public.h Fri Nov 02 09:52:30 2007 -0700 @@ -21,7 +21,7 @@ DEFINE_GUID( GUID_XEN_IFACE_EVTCHN, 0xD2 //{D2D20756-DE69-4447-8A7D-9837197D6166} typedef evtchn_port_t -(*PXEN_EVTCHN_ALLOCUNBOUND)(int Domain); +(*PXEN_EVTCHN_ALLOCUNBOUND)(domid_t Domain); typedef NTSTATUS (*PXEN_EVTCHN_BIND)(evtchn_port_t Port, PKSERVICE_ROUTINE ServiceRoutine, PVOID ServiceContext); diff -r b26bdba50c41 common/include/hypercall.h --- a/common/include/hypercall.h Thu Nov 01 16:21:24 2007 -0700 +++ b/common/include/hypercall.h Fri Nov 02 09:52:30 2007 -0700 @@ -102,7 +102,7 @@ HYPERVISOR_console_io(int cmd, int count } static __inline int -HYPERVISOR_hvm_op(int op, char *arg) +HYPERVISOR_hvm_op(int op, struct xen_hvm_param *arg) { long __res; __asm { diff -r b26bdba50c41 xenpci/evtchn.c --- a/xenpci/evtchn.c Thu Nov 01 16:21:24 2007 -0700 +++ b/xenpci/evtchn.c Fri Nov 02 09:52:30 2007 -0700 @@ -35,7 +35,6 @@ BOOLEAN BOOLEAN EvtChn_InterruptDpc(WDFINTERRUPT Interrupt, WDFOBJECT AssociatedObject) { - int i; int cpu = 0; vcpu_info_t *vcpu_info; unsigned long evt_words, evt_word; @@ -50,7 +49,7 @@ EvtChn_InterruptDpc(WDFINTERRUPT Interru vcpu_info = &shared_info_area->vcpu_info[cpu]; - evt_words = _InterlockedExchange(&vcpu_info->evtchn_pending_sel, 0); + evt_words = _InterlockedExchange((volatile LONG *)&vcpu_info->evtchn_pending_sel, 0); while (_BitScanForward(&evt_word, evt_words)) { @@ -68,7 +67,7 @@ EvtChn_InterruptDpc(WDFINTERRUPT Interru KdPrint((__DRIVER_NAME " Calling Handler for port %d\n", port)); ev_action->ServiceRoutine(NULL, ev_action->ServiceContext); } - _interlockedbittestandreset(&shared_info_area->evtchn_pending[0], port); + _interlockedbittestandreset((volatile LONG *)&shared_info_area->evtchn_pending[0], port); } } KdPrint((__DRIVER_NAME " <-- InterruptDpc\n")); @@ -81,7 +80,6 @@ EvtChn_Interrupt(WDFINTERRUPT Interrupt, { int cpu = 0; vcpu_info_t *vcpu_info; - int i; unsigned long evt_words, evt_word; unsigned long evt_bit; unsigned long port; @@ -96,8 +94,8 @@ EvtChn_Interrupt(WDFINTERRUPT Interrupt, vcpu_info->evtchn_upcall_pending = 0; - evt_words = _InterlockedExchange(&vcpu_info->evtchn_pending_sel, 0); - + evt_words = _InterlockedExchange((volatile LONG *)&vcpu_info->evtchn_pending_sel, 0); + while (_BitScanForward(&evt_word, evt_words)) { evt_words &= ~(1 << evt_word); @@ -114,7 +112,7 @@ EvtChn_Interrupt(WDFINTERRUPT Interrupt, KdPrint((__DRIVER_NAME " Calling Handler for port %d\n", port)); ev_action->ServiceRoutine(NULL, ev_action->ServiceContext); } - _interlockedbittestandreset(&shared_info_area->evtchn_pending[0], port); + _interlockedbittestandreset((volatile LONG *)&shared_info_area->evtchn_pending[0], port); } } @@ -124,7 +122,7 @@ EvtChn_Interrupt(WDFINTERRUPT Interrupt, } evtchn_port_t -EvtChn_AllocUnbound(int Domain) +EvtChn_AllocUnbound(domid_t Domain) { evtchn_alloc_unbound_t op; @@ -178,7 +176,7 @@ EvtChn_Mask(evtchn_port_t Port) { //KdPrint((__DRIVER_NAME " --> EvtChn_Mask\n")); - _interlockedbittestandset(&shared_info_area->evtchn_mask[0], Port); + _interlockedbittestandset((volatile LONG *)&shared_info_area->evtchn_mask[0], Port); //KdPrint((__DRIVER_NAME " <-- EvtChn_Mask\n")); @@ -190,7 +188,7 @@ EvtChn_Unmask(evtchn_port_t Port) { KdPrint((__DRIVER_NAME " --> EvtChn_Unmask\n")); - _interlockedbittestandreset(&shared_info_area->evtchn_mask[0], Port); + _interlockedbittestandreset((volatile LONG *)&shared_info_area->evtchn_mask[0], Port); // should we kick off pending interrupts here too??? KdPrint((__DRIVER_NAME " <-- EvtChn_Unmask\n")); @@ -242,7 +240,7 @@ EvtChn_GetXenStoreRingAddr() xen_store_mfn = (ULONG)hvm_get_parameter(HVM_PARAM_STORE_PFN); pa_xen_store_interface.QuadPart = xen_store_mfn << PAGE_SHIFT; - xen_store_interface = (struct xenstore_domain_interface *)MmMapIoSpace(pa_xen_store_interface, PAGE_SIZE, MmNonCached); + xen_store_interface = MmMapIoSpace(pa_xen_store_interface, PAGE_SIZE, MmNonCached); //KdPrint((__DRIVER_NAME " xen_store_mfn = %08x\n", xen_store_mfn)); //KdPrint((__DRIVER_NAME " xen_store_evtchn = %08x\n", xen_store_evtchn)); @@ -273,6 +271,8 @@ EvtChn_Init() } shared_info_area->vcpu_info[0].evtchn_upcall_pending = 0; shared_info_area->vcpu_info[0].evtchn_pending_sel = 0; + + return STATUS_SUCCESS; } static ev_action_t ev_actions[NR_EVENTS]; diff -r b26bdba50c41 xenpci/gnttbl.c --- a/xenpci/gnttbl.c Thu Nov 01 16:21:24 2007 -0700 +++ b/xenpci/gnttbl.c Fri Nov 02 09:52:30 2007 -0700 @@ -63,7 +63,7 @@ GntTab_Map(unsigned int start_idx, unsig xatp.domid = DOMID_SELF; xatp.idx = i; xatp.space = XENMAPSPACE_grant_table; - xatp.gpfn = (gnttab_table_physical.QuadPart >> PAGE_SHIFT) + i; + xatp.gpfn = (xen_pfn_t)(gnttab_table_physical.QuadPart >> PAGE_SHIFT) + i; if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp)) KdPrint((__DRIVER_NAME " ***ERROR MAPPING FRAME***\n")); } while (i-- > start_idx); @@ -74,11 +74,7 @@ VOID VOID GntTbl_Init() { - struct gnttab_setup_table setup; - unsigned long *frames; int i; - PMDL Mdl; - ULONG ret; KdPrint((__DRIVER_NAME " --> GntTbl_Init\n")); @@ -108,7 +104,7 @@ GntTbl_GrantAccess(domid_t domid, unsign gnttab_table[ref].domid = domid; _WriteBarrier(); readonly *= GTF_readonly; - gnttab_table[ref].flags = GTF_permit_access | readonly; + gnttab_table[ref].flags = GTF_permit_access | (uint16_t)readonly; KdPrint((__DRIVER_NAME " <-- GntTbl_GrantAccess (ref = %d)\n", ref)); @@ -128,7 +124,7 @@ GntTbl_EndAccess(grant_ref_t ref) KdPrint((__DRIVER_NAME "WARNING: g.e. still in use!\n")); return FALSE; } - } while ((nflags = InterlockedCompareExchange16(&gnttab_table[ref].flags, flags, 0)) != flags); + } while ((nflags = InterlockedCompareExchange16((volatile SHORT *)&gnttab_table[ref].flags, flags, 0)) != flags); put_free_entry(ref); return TRUE; diff -r b26bdba50c41 xenpci/xenbus.c --- a/xenpci/xenbus.c Thu Nov 01 16:21:24 2007 -0700 +++ b/xenpci/xenbus.c Fri Nov 02 09:52:30 2007 -0700 @@ -20,6 +20,9 @@ Foundation, Inc., 51 Franklin Street, Fi #include "xenpci.h" #include "io/xs_wire.h" #include + +#pragma warning( disable : 4204 ) +#pragma warning( disable : 4221 ) struct xenbus_req_info { @@ -85,7 +88,7 @@ static int allocate_xenbus_id(void) KdPrint((__DRIVER_NAME " --> allocate_xenbus_id\n")); - while (1) + for (;;) { // spin_lock(&req_lock); if (nr_live_reqs < NR_REQS) @@ -95,6 +98,7 @@ static int allocate_xenbus_id(void) } o_probe = probe; + for (;;) { if (!req_info[o_probe].In_Use) @@ -179,11 +183,11 @@ static void xb_write(int type, int req_i { XENSTORE_RING_IDX prod; int r; - int len = 0; + size_t len = 0; const struct write_req *cur_req; - int req_off; - int total_off; - int this_chunk; + size_t req_off; + size_t total_off; + size_t this_chunk; struct xsd_sockmsg m = {type, req_id, trans_id }; struct write_req header_req = { &m, sizeof(m) }; @@ -347,16 +351,15 @@ char* xenbus_wait_for_value(const char* // else // wait_for_watch(); // } - return NULL; + UNREFERENCED_PARAMETER(path); + UNREFERENCED_PARAMETER(value); + + return NULL; } NTSTATUS XenBus_Init() { - OBJECT_ATTRIBUTES oa; - NTSTATUS status; - int i; - KdPrint((__DRIVER_NAME " --> XenBus_Init\n")); xen_store_evtchn = EvtChn_GetXenStorePort(); @@ -417,6 +420,8 @@ XenBus_Stop() // Does this actually stop the threads??? ZwClose(XenBus_WatchThreadHandle); ZwClose(XenBus_ReadThreadHandle); + + return STATUS_SUCCESS; } char * @@ -424,7 +429,7 @@ XenBus_List(xenbus_transaction_t xbt, co { struct xsd_sockmsg *reply, *repmsg; struct write_req req[] = { { pre, strlen(pre)+1 } }; - int nr_elems, x, i; + ULONG nr_elems, x, i; char **res; char *msg; @@ -488,7 +493,10 @@ XenBus_ReadThreadProc(PVOID StartContext char *payload; char *path, *token; - while(TRUE) { + UNREFERENCED_PARAMETER(StartContext); + + for (;;) + { KeWaitForSingleObject(&XenBus_ReadThreadEvent, Executive, KernelMode, FALSE, NULL); KdPrint((__DRIVER_NAME " ReadThread Woken (Count = %d)\n", ReadThreadWaitCount++)); while (xen_store_interface->rsp_prod != xen_store_interface->rsp_cons) { @@ -553,7 +561,9 @@ XenBus_WatchThreadProc(PVOID StartContex int index; PXENBUS_WATCH_ENTRY entry; - while(TRUE) + UNREFERENCED_PARAMETER(StartContext); + + for (;;) { KeWaitForSingleObject(&XenBus_WatchThreadEvent, Executive, KernelMode, FALSE, NULL); while (XenBus_WatchRingReadIndex != XenBus_WatchRingWriteIndex) @@ -606,7 +616,7 @@ XenBus_AddWatch(xenbus_transaction_t xbt req[0].data = Path; req[0].len = strlen(Path) + 1; - sprintf(Token, "%d", i); + RtlStringCbPrintfA(Token, ARRAY_SIZE(Token), "%d", i); req[1].data = Token; req[1].len = strlen(Token) + 1; @@ -656,7 +666,7 @@ XenBus_RemWatch(xenbus_transaction_t xbt req[0].data = Path; req[0].len = strlen(Path) + 1; - sprintf(Token, "%d", i); + RtlStringCbPrintfA(Token, ARRAY_SIZE(Token), "%d", i); req[1].data = Token; req[1].len = strlen(Token) + 1; @@ -755,6 +765,9 @@ XenBus_Interrupt(PKINTERRUPT Interrupt, KeSetEvent(&XenBus_ReadThreadEvent, 1, FALSE); KdPrint((__DRIVER_NAME " <-- XenBus_Interrupt\n")); + + /* is this right? */ + return TRUE; } char * @@ -764,7 +777,7 @@ XenBus_Printf(xenbus_transaction_t xbt, char buf[1024]; va_start(ap, fmt); - vsprintf(buf, fmt, ap); + RtlStringCbVPrintfA(buf, ARRAY_SIZE(buf), fmt, ap); va_end(ap); return XenBus_Write(xbt, path, buf); } \ No newline at end of file diff -r b26bdba50c41 xenpci/xenpci.c --- a/xenpci/xenpci.c Thu Nov 01 16:21:24 2007 -0700 +++ b/xenpci/xenpci.c Fri Nov 02 09:52:30 2007 -0700 @@ -96,29 +96,6 @@ DriverEntry(PDRIVER_OBJECT DriverObject, return status; } -typedef struct { - unsigned nEAX; - unsigned nEBX; - unsigned nECX; - unsigned nEDX; -} CPUID_Output, *PCPUID_Output; - -static void CPUID(PCPUID_Output pResult, int nFunction) -{ - __asm { - mov eax, nFunction - xor ebx, ebx - xor ecx, ebx - xor edx, ebx - cpuid - mov edi, pResult - mov [edi.nEAX], eax - mov [edi.nEBX], ebx - mov [edi.nECX], ecx - mov [edi.nEDX], edx - } -} - static void WRMSR(unsigned int msr, ULONGLONG val) { ULONG lo, hi; @@ -135,22 +112,22 @@ static int static int get_hypercall_stubs() { - CPUID_Output cpuid_output; + DWORD32 cpuid_output[4]; char xensig[13]; ULONG i; ULONG pages; ULONG msr; - CPUID(&cpuid_output, 0x40000000); - *(ULONG*)(xensig + 0) = cpuid_output.nEBX; - *(ULONG*)(xensig + 4) = cpuid_output.nECX; - *(ULONG*)(xensig + 8) = cpuid_output.nEDX; - xensig[12] = 0; - KdPrint((__DRIVER_NAME " Xen Signature = %s, EAX = 0x%08x\n", xensig, cpuid_output.nEAX)); + __cpuid(cpuid_output, 0x40000000); + *(ULONG*)(xensig + 0) = cpuid_output[1]; + *(ULONG*)(xensig + 4) = cpuid_output[2]; + *(ULONG*)(xensig + 8) = cpuid_output[3]; + xensig[12] = '\0'; + KdPrint((__DRIVER_NAME " Xen Signature = %s, EAX = 0x%08x\n", xensig, cpuid_output[0])); - CPUID(&cpuid_output, 0x40000002); - pages = cpuid_output.nEAX; - msr = cpuid_output.nEBX; + __cpuid(cpuid_output, 0x40000002); + pages = cpuid_output[0]; + msr = cpuid_output[1]; KdPrint((__DRIVER_NAME " Hypercall area is %u pages.\n", pages)); hypercall_stubs = ExAllocatePoolWithTag(NonPagedPool, pages * PAGE_SIZE, XENPCI_POOL_TAG); @@ -261,7 +238,6 @@ XenPCI_AddDevice( WDF_IO_QUEUE_CONFIG ioQConfig; WDF_INTERRUPT_CONFIG interruptConfig; PNP_BUS_INFORMATION busInfo; - WDF_FDO_EVENT_CALLBACKS FdoCallbacks; //PDEVICE_OBJECT pdo; //ULONG propertyAddress, length; @@ -371,7 +347,8 @@ XenPCI_PrepareHardware( NTSTATUS status = STATUS_SUCCESS; PCM_PARTIAL_RESOURCE_DESCRIPTOR descriptor; ULONG i; - PXENPCI_DEVICE_DATA deviceData = GetDeviceData(Device); + + UNREFERENCED_PARAMETER(Device); KdPrint((__DRIVER_NAME " --> EvtDevicePrepareHardware\n")); @@ -457,6 +434,8 @@ XenPCI_ReleaseHardware(WDFDEVICE Device, { UNREFERENCED_PARAMETER(Device); UNREFERENCED_PARAMETER(ResourcesTranslated); + + return STATUS_SUCCESS; } static NTSTATUS @@ -483,13 +462,13 @@ XenPCI_D0EntryPostInterruptsEnabled(WDFD XenPCI_D0EntryPostInterruptsEnabled(WDFDEVICE Device, WDF_POWER_DEVICE_STATE PreviousState) { NTSTATUS status = STATUS_SUCCESS; - OBJECT_ATTRIBUTES oa; + //OBJECT_ATTRIBUTES oa; char *response; char *msgTypes; char **Types; - char *msgInstances; - char **Instances; - int i, j; + //char *msgInstances; + //char **Instances; + int i; char buffer[128]; UNREFERENCED_PARAMETER(Device); @@ -513,7 +492,7 @@ XenPCI_D0EntryPostInterruptsEnabled(WDFD if (!msgTypes) { for (i = 0; Types[i]; i++) { - sprintf(buffer, "device/%s", Types[i]); + RtlStringCbPrintfA(buffer, ARRAY_SIZE(buffer), "device/%s", Types[i]); KdPrint((__DRIVER_NAME " ls device[%d] -> %s\n", i, Types[i])); XenPCI_XenBusWatchHandler(buffer, NULL); ExFreePoolWithTag(Types[i], XENPCI_POOL_TAG); @@ -536,9 +515,12 @@ XenPCI_D0EntryPostInterruptsEnabled(WDFD } static NTSTATUS -XenPCI_D0ExitPreInterruptsDisabled(WDFDEVICE Device, WDF_POWER_DEVICE_STATE TargetState) +XenPCI_D0ExitPreInterruptsDisabled(WDFDEVICE Device, WDF_POWER_DEVICE_STATE TargetState) { NTSTATUS status = STATUS_SUCCESS; + + UNREFERENCED_PARAMETER(Device); + UNREFERENCED_PARAMETER(TargetState); XenBus_Stop(); @@ -586,6 +568,8 @@ XenPCI_InterruptEnable(WDFINTERRUPT Inte shared_info_area->vcpu_info[0].evtchn_upcall_mask = 0; KdPrint((__DRIVER_NAME " <-- EvtInterruptEnable\n")); + + return STATUS_SUCCESS; } static NTSTATUS @@ -599,6 +583,8 @@ XenPCI_InterruptDisable(WDFINTERRUPT Int shared_info_area->vcpu_info[0].evtchn_upcall_mask = 1; KdPrint((__DRIVER_NAME " <-- EvtInterruptDisable\n")); + + return STATUS_SUCCESS; } static NTSTATUS @@ -611,13 +597,14 @@ XenPCI_ChildListCreateDevice(WDFCHILDLIS XEN_IFACE_XENBUS XenBusInterface; XEN_IFACE_XEN XenInterface; XEN_IFACE_GNTTBL GntTblInterface; - UNICODE_STRING DeviceId; DECLARE_UNICODE_STRING_SIZE(buffer, 20); WDF_OBJECT_ATTRIBUTES PdoAttributes; DECLARE_CONST_UNICODE_STRING(DeviceLocation, L"Xen Bus"); WDF_QUERY_INTERFACE_CONFIG qiConfig; - WDF_PDO_EVENT_CALLBACKS PdoCallbacks; PXENPCI_XEN_DEVICE_DATA ChildDeviceData = NULL; + size_t path_len; + + UNREFERENCED_PARAMETER(ChildList); KdPrint((__DRIVER_NAME " --> ChildListCreateDevice\n")); @@ -704,8 +691,12 @@ XenPCI_ChildListCreateDevice(WDFCHILDLIS XenBusInterface.InterfaceHeader.Size = sizeof(XenBusInterface); XenBusInterface.InterfaceHeader.Version = 1; - XenBusInterface.InterfaceHeader.Context = ExAllocatePoolWithTag(NonPagedPool, (strlen(XenIdentificationDesc->Path) + 1), XENPCI_POOL_TAG); - strcpy(XenBusInterface.InterfaceHeader.Context, XenIdentificationDesc->Path); + path_len = strlen(XenIdentificationDesc->Path) + 1; + XenBusInterface.InterfaceHeader.Context = ExAllocatePoolWithTag(NonPagedPool, + path_len, XENPCI_POOL_TAG); + /* TODO: check for alloc fail here */ + RtlStringCbCopyA(XenBusInterface.InterfaceHeader.Context, path_len, + XenIdentificationDesc->Path); XenBusInterface.Read = XenBus_Read; XenBusInterface.Write = XenBus_Write; XenBusInterface.Printf = XenBus_Printf; @@ -765,7 +756,6 @@ XenPCI_XenBusWatchHandler(char *Path, PV XENPCI_IDENTIFICATION_DESCRIPTION description; NTSTATUS status; int i; - char *NamePtr; char **Bits; int Count; WDFCHILDLIST ChildList; @@ -773,8 +763,9 @@ XenPCI_XenBusWatchHandler(char *Path, PV WDFDEVICE ChildDevice; PXENPCI_XEN_DEVICE_DATA ChildDeviceData; - ANSI_STRING AnsiBuf; + + UNREFERENCED_PARAMETER(Data); KdPrint((__DRIVER_NAME " --> HotPlugHandler\n")); @@ -830,8 +821,6 @@ XenPCI_XenBusWatchHandler(char *Path, PV ExFreePoolWithTag(Bits, XENPCI_POOL_TAG); KdPrint((__DRIVER_NAME " <-- HotPlugHandler\n")); - - return status; } static void @@ -840,6 +829,9 @@ XenBus_ShutdownHandler(char *Path, PVOID char *value; xenbus_transaction_t xbt; int retry; + + UNREFERENCED_PARAMETER(Path); + UNREFERENCED_PARAMETER(StartContext); KdPrint((__DRIVER_NAME " --> XenBus_ShutdownHandler\n")); @@ -853,7 +845,7 @@ XenBus_ShutdownHandler(char *Path, PVOID if (value != NULL && strlen(value) != 0) XenBus_Write(XBT_NIL, SHUTDOWN_PATH, ""); - XenBus_EndTransaction(&xbt, 0, &retry); + XenBus_EndTransaction(xbt, 0, &retry); KdPrint((__DRIVER_NAME " <-- XenBus_ShutdownHandler\n")); } @@ -867,8 +859,11 @@ XenPCI_FilterRemoveResourceRequirements( WDFIORESLIST ResourceList; PIO_RESOURCE_DESCRIPTOR Descriptor; - int i, j; + ULONG i; + ULONG j; int offset; + + UNREFERENCED_PARAMETER(Device); KdPrint((__DRIVER_NAME " --> FilterRemoveResourceRequirements\n")); @@ -927,7 +922,10 @@ XenPCI_FilterAddResourceRequirements(WDF WDFIORESLIST ResourceList; PIO_RESOURCE_DESCRIPTOR Descriptor; - int i, j; + ULONG i; + ULONG j; + + UNREFERENCED_PARAMETER(Device); KdPrint((__DRIVER_NAME " --> FilterAddResourceRequirements\n")); @@ -981,6 +979,10 @@ static NTSTATUS static NTSTATUS XenPCI_RemoveAddedResources(WDFDEVICE Device, WDFCMRESLIST ResourcesRaw, WDFCMRESLIST ResourcesTranslated) { + UNREFERENCED_PARAMETER(Device); + UNREFERENCED_PARAMETER(ResourcesRaw); + UNREFERENCED_PARAMETER(ResourcesTranslated); + KdPrint((__DRIVER_NAME " --> RemoveAddedResources\n")); KdPrint((__DRIVER_NAME " <-- RemoveAddedResources\n")); @@ -993,6 +995,8 @@ XenPCI_DeviceResourceRequirementsQuery(W NTSTATUS status; WDFIORESLIST resourceList; IO_RESOURCE_DESCRIPTOR descriptor; + + UNREFERENCED_PARAMETER(Device); KdPrint((__DRIVER_NAME " --> DeviceResourceRequirementsQuery\n")); diff -r b26bdba50c41 xenpci/xenpci.h --- a/xenpci/xenpci.h Thu Nov 01 16:21:24 2007 -0700 +++ b/xenpci/xenpci.h Fri Nov 02 09:52:30 2007 -0700 @@ -193,7 +193,7 @@ NTSTATUS NTSTATUS EvtChn_Notify(evtchn_port_t Port); evtchn_port_t -EvtChn_AllocUnbound(int Domain); +EvtChn_AllocUnbound(domid_t Domain); NTSTATUS EvtChn_Init(); @@ -202,7 +202,7 @@ BOOLEAN BOOLEAN GntTbl_EndAccess(grant_ref_t ref); -NTSTATUS +evtchn_port_t EvtChn_GetXenStorePort(); PVOID EvtChn_GetXenStoreRingAddr();