Index: dma-resv.c
===================================================================
RCS file: /var/cvs/src/sys/dev/pci/drm/dma-resv.c,v
retrieving revision 1.1
diff -u -p -r1.1 dma-resv.c
--- dma-resv.c	8 Jun 2020 04:47:58 -0000	1.1
+++ dma-resv.c	7 Jan 2021 16:48:50 -0000
@@ -467,29 +467,15 @@ int dma_resv_get_fences_rcu(struct dma_r
 		if (sz) {
 			struct dma_fence **nshared;
 
-#ifdef __linux__
 			nshared = krealloc(shared, sz,
 					   GFP_NOWAIT | __GFP_NOWARN);
-#else
-			nshared = kmalloc(sz, GFP_NOWAIT | __GFP_NOWARN);
-			if (nshared != NULL && shared != NULL)
-				memcpy(nshared, shared, sz);
-			kfree(shared);
-#endif
 			if (!nshared) {
 				rcu_read_unlock();
 
 				dma_fence_put(fence_excl);
 				fence_excl = NULL;
 
-#ifdef __linux__
 				nshared = krealloc(shared, sz, GFP_KERNEL);
-#else
-				nshared = kmalloc(sz, GFP_KERNEL);
-				if (nshared != NULL && shared != NULL)
-					memcpy(nshared, shared, sz);
-				kfree(shared);
-#endif
 				if (nshared) {
 					shared = nshared;
 					continue;
Index: include/linux/slab.h
===================================================================
RCS file: /var/cvs/src/sys/dev/pci/drm/include/linux/slab.h,v
retrieving revision 1.3
diff -u -p -r1.3 slab.h
--- include/linux/slab.h	11 Oct 2020 05:45:33 -0000	1.3
+++ include/linux/slab.h	7 Jan 2021 16:47:53 -0000
@@ -40,6 +40,39 @@ kzalloc(size_t size, int flags)
 	return malloc(size, M_DRM, flags | M_ZERO);
 }
 
+/* XXX debugging krealloc */
+static inline void *
+krealloc(const void *objp, size_t size, int flags)
+{
+	void *newp;
+
+	printf("krealloc: %p, %zu, %u\n", objp, size, flags);
+
+	/* free on zero size even though we return NULL */
+	if (size == 0) {
+		free((void *)objp, M_DRM, 0);
+		return NULL;
+	}
+	
+	newp = malloc(size, M_DRM, flags);
+
+	/* don't free objp if we can't reallocate */
+	if (newp == NULL) {
+		printf("krealloc: malloc fail - dont free\n");
+		return NULL;
+	}
+
+	/* behave like kmalloc when objp is NULL */
+	if (objp == NULL) {
+		return newp;
+	}
+
+	/* this is wrong, should use MIN(oldsize, size) */
+	memcpy(newp, objp, size);
+	free((void *)objp, M_DRM, 0);
+	return newp;	
+}
+
 static inline void
 kfree(const void *objp)
 {
