|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH xenbus 3/4] Tolerate any failure of __FdoVirqCreate() in the VIRQ_TIMER case
From: Paul Durrant <pdurrant@xxxxxxxxxx>
In pratice __FdoVirqCreate() won't return STATUS_NOT_SUPPORTED since the
XENBUS_EVTCHN(Open, ...) doesn't return a status code and ERRNO_TO_STATUS()
(inside VcpuSetPeriodicTimer()) doesn't translate any Xen errno to that
status code, therefore the check in FdoVirqInitialize() is actually bogus.
This patch simply tolerates any status code returned by __FdoVirqCreate()
when creating a VIRQ_TIMER and then gates enabling the watchdog on there
being at least one VIRQ_TIMER successfully created.
Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx>
---
src/xenbus/fdo.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 18f936baae38..9db968de0247 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -2978,6 +2978,7 @@ FdoVirqInitialize(
PXENBUS_VIRQ Virq;
ULONG Count;
ULONG Index;
+ ULONG Timer;
NTSTATUS status;
InitializeListHead(&Fdo->VirqList);
@@ -2994,28 +2995,25 @@ FdoVirqInitialize(
Count = KeQueryActiveProcessorCountEx(ALL_PROCESSOR_GROUPS);
+ Timer = 0;
for (Index = 0; Index < Count; Index++) {
status = __FdoVirqCreate(Fdo, VIRQ_TIMER, Index, &Virq);
- if (!NT_SUCCESS(status)) {
- if (status != STATUS_NOT_SUPPORTED )
- continue;
-
- goto fail2;
- }
+ if (!NT_SUCCESS(status))
+ continue;
InsertTailList(&Fdo->VirqList, &Virq->ListEntry);
+ Timer++;
}
- status = SystemSetWatchdog(Fdo->Watchdog);
- if (!NT_SUCCESS(status))
- goto fail3;
+ if (Timer != 0) {
+ status = SystemSetWatchdog(Fdo->Watchdog);
+ if (!NT_SUCCESS(status))
+ goto fail2;
+ }
done:
return STATUS_SUCCESS;
-fail3:
- Error("fail3\n");
-
fail2:
Error("fail2\n");
--
2.17.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |