|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH xenbus] Remove some code duplication in store.c...
...by using a new inline __StorePoll() function and returning event count
directly from StorePollLocked().
Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx>
---
src/xenbus/store.c | 54 ++++++++++++++++++++++++++--------------------
1 file changed, 31 insertions(+), 23 deletions(-)
diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index 556d040..f07e469 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -824,11 +824,12 @@ StoreProcessResponse(
KeMemoryBarrier();
}
-static VOID
+static ULONG
StorePollLocked(
IN PXENBUS_STORE_CONTEXT Context
)
{
+ ULONG Count;
ULONG Read;
ULONG Written;
NTSTATUS status;
@@ -837,6 +838,12 @@ StorePollLocked(
Context->Polls++;
+ Count = XENBUS_EVTCHN(GetCount,
+ &Context->EvtchnInterface,
+ Context->Channel);
+
+ KeMemoryBarrier();
+
do {
Read = Written = 0;
@@ -856,6 +863,19 @@ StorePollLocked(
Context->Channel);
} while (Written != 0 || Read != 0);
+
+ return Count;
+}
+
+static FORCEINLINE VOID
+__StorePoll(
+ IN PXENBUS_STORE_CONTEXT Context
+ )
+{
+ KeAcquireSpinLockAtDpcLevel(&Context->Lock);
+ if (Context->References != 0)
+ (VOID) StorePollLocked(Context);
+ KeReleaseSpinLockFromDpcLevel(&Context->Lock);
}
static
@@ -879,11 +899,7 @@ StoreDpc(
UNREFERENCED_PARAMETER(Argument2);
ASSERT(Context != NULL);
-
- KeAcquireSpinLockAtDpcLevel(&Context->Lock);
- if (Context->References != 0)
- StorePollLocked(Context);
- KeReleaseSpinLockFromDpcLevel(&Context->Lock);
+ __StorePoll(Context);
}
#define TIME_US(_us) ((_us) * 10)
@@ -902,6 +918,7 @@ StoreSubmitRequest(
PXENBUS_STORE_RESPONSE Response;
KIRQL Irql;
ULONG Count;
+ XENBUS_STORE_REQUEST_STATE State;
LARGE_INTEGER Timeout;
ASSERT3U(Request->State, ==, XENBUS_STORE_REQUEST_PREPARED);
@@ -916,16 +933,14 @@ StoreSubmitRequest(
Request->State = XENBUS_STORE_REQUEST_SUBMITTED;
- Count = XENBUS_EVTCHN(GetCount,
- &Context->EvtchnInterface,
- Context->Channel);
+ Count = StorePollLocked(Context);
- StorePollLocked(Context);
KeMemoryBarrier();
+ State = Request->State;
Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENBUS_STORE_POLL_PERIOD));
- while (Request->State != XENBUS_STORE_REQUEST_COMPLETED) {
+ while (State != XENBUS_STORE_REQUEST_COMPLETED) {
NTSTATUS status;
status = XENBUS_EVTCHN(Wait,
@@ -936,12 +951,10 @@ StoreSubmitRequest(
if (status == STATUS_TIMEOUT)
Warning("TIMED OUT\n");
- Count = XENBUS_EVTCHN(GetCount,
- &Context->EvtchnInterface,
- Context->Channel);
+ Count = StorePollLocked(Context);
- StorePollLocked(Context);
KeMemoryBarrier();
+ State = Request->State;
}
KeReleaseSpinLockFromDpcLevel(&Context->Lock);
@@ -1823,12 +1836,7 @@ StorePoll(
IN PINTERFACE Interface
)
{
- PXENBUS_STORE_CONTEXT Context = Interface->Context;
-
- KeAcquireSpinLockAtDpcLevel(&Context->Lock);
- if (Context->References != 0)
- StorePollLocked(Context);
- KeReleaseSpinLockFromDpcLevel(&Context->Lock);
+ __StorePoll(Interface->Context);
}
#define TIME_US(_us) ((_us) * 10)
@@ -1898,7 +1906,7 @@ StoreWatchdog(
(VOID) XENBUS_EVTCHN(Send,
&Context->EvtchnInterface,
Context->Channel);
- StorePollLocked(Context);
+ (VOID) StorePollLocked(Context);
}
KeMemoryBarrier();
@@ -2604,7 +2612,7 @@ StoreRelease(
XENBUS_SUSPEND(Release, &Context->SuspendInterface);
StoreDisable(Context);
- StorePollLocked(Context);
+ (VOID) StorePollLocked(Context);
RtlZeroMemory(&Context->Response, sizeof (XENBUS_STORE_RESPONSE));
XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
--
2.17.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |