]> xenbits.xensource.com Git - people/pauldu/xenbus.git/commitdiff
Avoid unnecessary check for non-NULL Processor->Interrupt in EvtchnRelease() fixes
authorPaul Durrant <pdurrant@amazon.com>
Tue, 4 Jul 2023 17:26:41 +0000 (18:26 +0100)
committerPaul Durrant <pdurrant@amazon.com>
Tue, 4 Jul 2023 19:30:34 +0000 (20:30 +0100)
If EvtchnIsProcessorEnabled() is TRUE then Processor->Interrupt should be
valid. Hence use an ASSERTion instead. Also replicate the check of
EvtchnIsProcessorEnabled() in the error path in EvtchnAcquire().
While we're at it, let's also use EvtchnIsProcessorEnabled() in
EvtchnInterruptEnable() and EvtchnInterruptDisable().

Signed-off-by: Paul Durrant <pdurrant@amazon.com>
src/xenbus/evtchn.c

index 9f7026db8dde5391feec057740daa3fc9d5f7ff7..55d9dd6cbae6c3bd0b47ad930772d3d091574bde 100644 (file)
@@ -1297,15 +1297,15 @@ EvtchnInterruptEnable(
 
         Processor = &Context->Processor[Cpu];
 
-        if (Processor->Interrupt == NULL)
-            continue;
-
-        status = SystemProcessorVcpuId(Cpu, &vcpu_id);
-        if (!NT_SUCCESS(status))
+        if (!EvtchnIsProcessorEnabled(Context, Cpu))
             continue;
 
+        ASSERT(Processor->Interrupt != NULL);
         Vector = FdoGetInterruptVector(Context->Fdo, Processor->Interrupt);
 
+        status = SystemProcessorVcpuId(Cpu, &vcpu_id);
+        ASSERT(NT_SUCCESS(status));
+
         status = HvmSetEvtchnUpcallVector(vcpu_id, Vector);
         if (!NT_SUCCESS(status)) {
             if (status != STATUS_NOT_IMPLEMENTED )
@@ -1368,9 +1368,10 @@ EvtchnInterruptDisable(
         if (!Processor->UpcallEnabled)
             continue;
 
+        ASSERT(EvtchnIsProcessorEnabled(Context, Cpu));
+
         status = SystemProcessorVcpuId(Cpu, &vcpu_id);
-        if (!NT_SUCCESS(status))
-            continue;
+        ASSERT(NT_SUCCESS(status));
 
         (VOID) HvmSetEvtchnUpcallVector(vcpu_id, 0);
         Processor->UpcallEnabled = FALSE;
@@ -1657,16 +1658,18 @@ fail9:
     for (Cpu = 0; Cpu < Context->ProcessorCount; Cpu++) {
         PXENBUS_EVTCHN_PROCESSOR Processor;
 
+        if (!EvtchnIsProcessorEnabled(Context, Cpu))
+            continue;
+
         ASSERT(Context->Processor != NULL);
         Processor = &Context->Processor[Cpu];
 
         RtlZeroMemory(&Processor->Dpc, sizeof (KDPC));
         RtlZeroMemory(&Processor->PendingList, sizeof (LIST_ENTRY));
 
-        if (Processor->Interrupt != NULL) {
-            FdoFreeInterrupt(Fdo, Processor->Interrupt);
-            Processor->Interrupt = NULL;
-        }
+        ASSERT(Processor->Interrupt != NULL);
+        FdoFreeInterrupt(Fdo, Processor->Interrupt);
+        Processor->Interrupt = NULL;
 
         Processor->Cpu = 0;
         Processor->Context = NULL;
@@ -1765,10 +1768,9 @@ EvtchnRelease(
         RtlZeroMemory(&Processor->Dpc, sizeof (KDPC));
         RtlZeroMemory(&Processor->PendingList, sizeof (LIST_ENTRY));
 
-        if (Processor->Interrupt != NULL) {
-            FdoFreeInterrupt(Fdo, Processor->Interrupt);
-            Processor->Interrupt = NULL;
-        }
+        ASSERT(Processor->Interrupt != NULL);
+        FdoFreeInterrupt(Fdo, Processor->Interrupt);
+        Processor->Interrupt = NULL;
 
         Processor->Cpu = 0;
         Processor->Context = NULL;