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-all
mailing list