Page MenuHomeFreeBSD

D30520.diff
No OneTemporary

D30520.diff

diff --git a/sys/compat/linuxkpi/common/include/linux/dmapool.h b/sys/compat/linuxkpi/common/include/linux/dmapool.h
--- a/sys/compat/linuxkpi/common/include/linux/dmapool.h
+++ b/sys/compat/linuxkpi/common/include/linux/dmapool.h
@@ -41,6 +41,7 @@
struct dma_pool *linux_dma_pool_create(char *name, struct device *dev,
size_t size, size_t align, size_t boundary);
void linux_dma_pool_destroy(struct dma_pool *pool);
+void lkpi_dmam_pool_destroy(struct device *, void *);
void *linux_dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
dma_addr_t *handle);
void linux_dma_pool_free(struct dma_pool *pool, void *vaddr,
@@ -54,6 +55,25 @@
return (linux_dma_pool_create(name, dev, size, align, boundary));
}
+static inline struct dma_pool *
+dmam_pool_create(/* const */ char *name, struct device *dev, size_t size,
+ size_t align, size_t boundary)
+{
+ struct dma_pool **pp;
+
+ pp = devres_alloc(lkpi_dmam_pool_destroy, sizeof(*pp), GFP_KERNEL);
+ if (pp == NULL)
+ return (NULL);
+ *pp = linux_dma_pool_create(name, dev, size, align, boundary);
+ if (*pp == NULL) {
+ devres_free(pp);
+ return (NULL);
+ }
+
+ devres_add(dev, pp);
+ return (*pp);
+}
+
static inline void
dma_pool_destroy(struct dma_pool *pool)
{
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
@@ -997,6 +997,16 @@
kfree(pool);
}
+void
+lkpi_dmam_pool_destroy(struct device *dev, void *p)
+{
+ struct dma_pool *pool;
+
+ pool = *(struct dma_pool **)p;
+ LINUX_DMA_PCTRIE_RECLAIM(&pool->pool_ptree);
+ linux_dma_pool_destroy(pool);
+}
+
void *
linux_dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
dma_addr_t *handle)

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 1, 1:22 PM (21 h, 57 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13252865
Default Alt Text
D30520.diff (1 KB)

Event Timeline