Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148467076
D42054.id130530.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D42054.id130530.diff
View Options
diff --git a/sys/compat/linuxkpi/common/include/linux/gfp.h b/sys/compat/linuxkpi/common/include/linux/gfp.h
--- a/sys/compat/linuxkpi/common/include/linux/gfp.h
+++ b/sys/compat/linuxkpi/common/include/linux/gfp.h
@@ -64,7 +64,7 @@
#define GFP_NOWAIT M_NOWAIT
#define GFP_ATOMIC (M_NOWAIT | M_USE_RESERVE)
-#define GFP_KERNEL M_WAITOK
+#define GFP_KERNEL M_NOWAIT
#define GFP_USER M_WAITOK
#define GFP_HIGHUSER M_WAITOK
#define GFP_HIGHUSER_MOVABLE M_WAITOK
diff --git a/sys/compat/linuxkpi/common/include/linux/slab.h b/sys/compat/linuxkpi/common/include/linux/slab.h
--- a/sys/compat/linuxkpi/common/include/linux/slab.h
+++ b/sys/compat/linuxkpi/common/include/linux/slab.h
@@ -47,12 +47,12 @@
#define kzalloc(size, flags) kmalloc(size, (flags) | __GFP_ZERO)
#define kzalloc_node(size, flags, node) kmalloc_node(size, (flags) | __GFP_ZERO, node)
#define kfree_const(ptr) kfree(ptr)
-#define vzalloc(size) __vmalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO, 0)
+#define vzalloc(size) __vmalloc(size, M_WAITOK | __GFP_NOWARN | __GFP_ZERO, 0)
#define vfree(arg) kfree(arg)
#define kvfree(arg) kfree(arg)
-#define vmalloc_node(size, node) __vmalloc_node(size, GFP_KERNEL, node)
-#define vmalloc_user(size) __vmalloc(size, GFP_KERNEL | __GFP_ZERO, 0)
-#define vmalloc(size) __vmalloc(size, GFP_KERNEL, 0)
+#define vmalloc_node(size, node) __vmalloc_node(size, M_WAITOK, node)
+#define vmalloc_user(size) __vmalloc(size, M_WAITOK | __GFP_ZERO, 0)
+#define vmalloc(size) __vmalloc(size, M_WAITOK, 0)
#define __kmalloc(...) kmalloc(__VA_ARGS__)
/*
diff --git a/sys/compat/linuxkpi/common/src/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c
--- a/sys/compat/linuxkpi/common/src/linux_compat.c
+++ b/sys/compat/linuxkpi/common/src/linux_compat.c
@@ -574,7 +574,7 @@
{
struct linux_file *filp;
- filp = kzalloc(sizeof(*filp), GFP_KERNEL);
+ filp = kzalloc(sizeof(*filp), M_WAITOK);
/* set initial refcount */
filp->f_count = 1;
@@ -1412,6 +1412,9 @@
return (EINVAL);
vmap = kzalloc(sizeof(*vmap), GFP_KERNEL);
+ if (vmap == NULL)
+ return (ENOMEM);
+
vmap->vm_start = 0;
vmap->vm_end = size;
vmap->vm_pgoff = *offset / PAGE_SIZE;
@@ -1941,7 +1944,7 @@
{
struct vmmap *vmmap;
- vmmap = kmalloc(sizeof(*vmmap), GFP_KERNEL);
+ vmmap = kmalloc(sizeof(*vmmap), M_WAITOK);
mtx_lock(&vmmaplock);
vmmap->vm_size = size;
vmmap->vm_addr = addr;
diff --git a/sys/compat/linuxkpi/common/src/linux_interrupt.c b/sys/compat/linuxkpi/common/src/linux_interrupt.c
--- a/sys/compat/linuxkpi/common/src/linux_interrupt.c
+++ b/sys/compat/linuxkpi/common/src/linux_interrupt.c
@@ -135,6 +135,9 @@
GFP_KERNEL | __GFP_ZERO);
else
irqe = kzalloc(sizeof(*irqe), GFP_KERNEL);
+ if (irqe == NULL)
+ return (-ENOMEM);
+
irqe->dev = dev;
irqe->res = res;
irqe->arg = arg;
diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c
--- a/sys/compat/linuxkpi/common/src/linux_pci.c
+++ b/sys/compat/linuxkpi/common/src/linux_pci.c
@@ -305,7 +305,7 @@
pdev->subsystem_device = pci_get_subdevice(dev);
pdev->class = pci_get_class(dev);
pdev->revision = pci_get_revid(dev);
- pdev->path_name = kasprintf(GFP_KERNEL, "%04d:%02d:%02d.%d",
+ pdev->path_name = kasprintf(M_WAITOK, "%04d:%02d:%02d.%d",
pci_get_domain(dev), pci_get_bus(dev), pci_get_slot(dev),
pci_get_function(dev));
pdev->bus = malloc(sizeof(*pdev->bus), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -1469,7 +1469,7 @@
priv = dev->dma_priv;
- pool = kzalloc(sizeof(*pool), GFP_KERNEL);
+ pool = kzalloc(sizeof(*pool), M_WAITOK);
pool->pool_device = dev;
pool->pool_entry_size = size;
diff --git a/sys/compat/linuxkpi/common/src/linux_shmemfs.c b/sys/compat/linuxkpi/common/src/linux_shmemfs.c
--- a/sys/compat/linuxkpi/common/src/linux_shmemfs.c
+++ b/sys/compat/linuxkpi/common/src/linux_shmemfs.c
@@ -48,8 +48,15 @@
struct page *page;
int rv;
- if ((gfp & GFP_NOWAIT) != 0)
- panic("GFP_NOWAIT is unimplemented");
+ /*
+ * Historically, GFP_KERNEL was the equivalent of M_WAITOK. But it was
+ * changed to a synonym of M_NOWAIT to allow allocations in
+ * non-sleepable code.
+ *
+ * However, there was an assertion here to make sure that `gfp` was
+ * never set to GFP_NOWAIT/M_NOWAIT. Do we need a specific handling of
+ * M_NOWAIT here?
+ */
VM_OBJECT_WLOCK(obj);
rv = vm_page_grab_valid(&page, obj, pindex, VM_ALLOC_NORMAL |
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Mar 19, 2:22 AM (21 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29939395
Default Alt Text
D42054.id130530.diff (4 KB)
Attached To
Mode
D42054: linuxkpi: `GFP_KERNEL` equals `M_NOWAIT` now instead of `M_WAITOK`
Attached
Detach File
Event Timeline
Log In to Comment