svn commit: r333451 - vendor-sys/ena-com/dist

Marcin Wojtas mw at FreeBSD.org
Thu May 10 09:18:27 UTC 2018


Author: mw
Date: Thu May 10 09:18:26 2018
New Revision: 333451
URL: https://svnweb.freebsd.org/changeset/base/333451

Log:
  Apply fixes in ena-com
  
  * Change ena-com BIT macro to work on unsigned value.
    To make the shifting operations safer, they should be working on
    unsigned values.
  
  * Fix a mutex not owned ASSERT panic in ENA control path.
    A thread calling cv_broadcast()/cv_signal() must hold the mutex used for
    cv_wait(). Fix the ENA control path code that has this problem.
  
  Submitted by:   Krishna Yenduri <kyenduri at brkt.com>
  Reviewed by:    Michal Krawczyk <mk at semihalf.com>
  Tested by:      Michal Krawczyk <mk at semihalf.com>

Modified:
  vendor-sys/ena-com/dist/ena_plat.h

Modified: vendor-sys/ena-com/dist/ena_plat.h
==============================================================================
--- vendor-sys/ena-com/dist/ena_plat.h	Thu May 10 09:06:21 2018	(r333450)
+++ vendor-sys/ena-com/dist/ena_plat.h	Thu May 10 09:18:26 2018	(r333451)
@@ -165,7 +165,7 @@ static inline long PTR_ERR(const void *ptr)
 
 #define GENMASK(h, l)		(((1U << ((h) - (l) + 1)) - 1) << (l))
 #define GENMASK_ULL(h, l)	(((~0ULL) << (l)) & (~0ULL >> (64 - 1 - (h))))
-#define BIT(x)			(1 << (x))
+#define BIT(x)			(1UL << (x))
 
 #define ENA_ABORT() 		BUG()
 #define BUG() 			panic("ENA BUG")
@@ -244,7 +244,12 @@ static inline long PTR_ERR(const void *ptr)
 		    timeout_us * hz / 1000 / 1000 );			\
 		mtx_unlock(&((waitqueue).mtx));				\
 	} while (0)
-#define ENA_WAIT_EVENT_SIGNAL(waitqueue) cv_broadcast(&((waitqueue).wq))
+#define ENA_WAIT_EVENT_SIGNAL(waitqueue)		\
+	do {						\
+		mtx_lock(&((waitqueue).mtx));		\
+		cv_broadcast(&((waitqueue).wq));	\
+		mtx_unlock(&((waitqueue).mtx));		\
+	} while (0)
 
 #define dma_addr_t 	bus_addr_t
 #define u8 		uint8_t


More information about the svn-src-vendor mailing list