svn commit: r353938 - head/sys/compat/linuxkpi/common/src

Ryan Stone rstone at FreeBSD.org
Wed Oct 23 17:20:21 UTC 2019


Author: rstone
Date: Wed Oct 23 17:20:20 2019
New Revision: 353938
URL: https://svnweb.freebsd.org/changeset/base/353938

Log:
  Add missing M_NOWAIT flag
  
  The LinuxKPI linux_dma code calls PCTRIE_INSERT with a
  mutex held, but does not set M_NOWAIT when allocating
  nodes, leading to a potential panic.  All of this code
  can handle an allocation failure here, so prefer an
  allocation failure to sleeping on memory.
  
  Also fix a related case where NOWAIT/WAITOK was not
  specified.  In this case it's not clear whether sleeping
  is allowed so be conservative and assume not.  There are
  a lot of other paths in this code that can fail due to
  a lack of memory anyway.
  
  Differential Revision: https://reviews.freebsd.org/D22127
  Reviewed by: imp
  Sponsored by: Dell EMC Isilon
  MFC After: 1 week

Modified:
  head/sys/compat/linuxkpi/common/src/linux_pci.c

Modified: head/sys/compat/linuxkpi/common/src/linux_pci.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_pci.c	Wed Oct 23 17:02:45 2019	(r353937)
+++ head/sys/compat/linuxkpi/common/src/linux_pci.c	Wed Oct 23 17:20:20 2019	(r353938)
@@ -500,7 +500,7 @@ static void *
 linux_dma_trie_alloc(struct pctrie *ptree)
 {
 
-	return (uma_zalloc(linux_dma_trie_zone, 0));
+	return (uma_zalloc(linux_dma_trie_zone, M_NOWAIT));
 }
 
 static void
@@ -569,7 +569,10 @@ linux_dma_map_phys(struct device *dev, vm_paddr_t phys
 	if (bus_dma_id_mapped(priv->dmat, phys, len))
 		return (phys);
 
-	obj = uma_zalloc(linux_dma_obj_zone, 0);
+	obj = uma_zalloc(linux_dma_obj_zone, M_NOWAIT);
+	if (obj == NULL) {
+		return (0);
+	}
 
 	DMA_PRIV_LOCK(priv);
 	if (bus_dmamap_create(priv->dmat, 0, &obj->dmamap) != 0) {


More information about the svn-src-head mailing list