svn commit: r333453 - head/sys/contrib/ena-com

Marcin Wojtas mw at FreeBSD.org
Thu May 10 09:25:52 UTC 2018


Author: mw
Date: Thu May 10 09:25:51 2018
New Revision: 333453
URL: https://svnweb.freebsd.org/changeset/base/333453

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:
  head/sys/contrib/ena-com/ena_plat.h
Directory Properties:
  head/sys/contrib/ena-com/   (props changed)

Modified: head/sys/contrib/ena-com/ena_plat.h
==============================================================================
--- head/sys/contrib/ena-com/ena_plat.h	Thu May 10 09:21:49 2018	(r333452)
+++ head/sys/contrib/ena-com/ena_plat.h	Thu May 10 09:25:51 2018	(r333453)
@@ -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-all mailing list