git: 433ab9b6987b - main - ena: Prevent reset after device destruction

Marcin Wojtas mw at FreeBSD.org
Wed Sep 1 23:07:35 UTC 2021


The branch main has been updated by mw:

URL: https://cgit.FreeBSD.org/src/commit/?id=433ab9b6987b42b3e5b25b8b5dc7e5178c7ef9bb

commit 433ab9b6987b42b3e5b25b8b5dc7e5178c7ef9bb
Author:     Artur Rojek <ar at semihalf.com>
AuthorDate: 2021-08-12 08:34:25 +0000
Commit:     Marcin Wojtas <mw at FreeBSD.org>
CommitDate: 2021-09-01 23:06:06 +0000

    ena: Prevent reset after device destruction
    
    Check for ENA_FLAG_TRIGGER_RESET inside a locked context in order to
    avoid potential race conditions with ena_destroy_device. This aligns the
    reset task logic with the Linux driver.
    
    Obtained from: Semihalf
    MFC after: 2 weeks
    Sponsored by: Amazon, Inc.
---
 sys/dev/ena/ena.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
index 84d58c844332..7615bf4d7cc0 100644
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -3539,15 +3539,11 @@ ena_reset_task(void *arg, int pending)
 {
 	struct ena_adapter *adapter = (struct ena_adapter *)arg;
 
-	if (unlikely(!ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
-		ena_log(adapter->pdev, WARN,
-		    "device reset scheduled but trigger_reset is off\n");
-		return;
-	}
-
 	ENA_LOCK_LOCK(adapter);
-	ena_destroy_device(adapter, false);
-	ena_restore_device(adapter);
+	if (likely(ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter))) {
+		ena_destroy_device(adapter, false);
+		ena_restore_device(adapter);
+	}
 	ENA_LOCK_UNLOCK(adapter);
 }
 


More information about the dev-commits-src-main mailing list