1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * DMA Pool allocator 4 * 5 * Copyright 2001 David Brownell 6 * Copyright 2007 Intel Corporation 7 * Author: Matthew Wilcox <willy@linux.intel.com> 8 * 9 * This allocator returns small blocks of a given size which are DMA-able by 10 * the given device. It uses the dma_alloc_coherent page allocator to get 11 * new pages, then splits them up into blocks of the required size. 12 * Many older drivers still have their own code to do this. 13 * 14 * The current design of this allocator is fairly simple. The pool is 15 * represented by the 'struct dma_pool' which keeps a doubly-linked list of 16 * allocated pages. Each page in the page_list is split into blocks of at 17 * least 'size' bytes. Free blocks are tracked in an unsorted singly-linked 18 * list of free blocks within the page. Used blocks aren't tracked, but we 19 * keep a count of how many are currently allocated from each page. 20 */ 21 22 #include <linux/device.h> 23 #include <linux/dma-mapping.h> 24 #include <linux/dmapool.h> 25 #include <linux/kernel.h> 26 #include <linux/list.h> 27 #include <linux/export.h> 28 #include <linux/mutex.h> 29 #include <linux/poison.h> 30 #include <linux/sched.h> 31 #include <linux/slab.h> 32 #include <linux/stat.h> 33 #include <linux/spinlock.h> 34 #include <linux/string.h> 35 #include <linux/types.h> 36 #include <linux/wait.h> 37 38 #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB_DEBUG_ON) 39 #define DMAPOOL_DEBUG 1 40 #endif 41 42 struct dma_pool { /* the pool */ 43 struct list_head page_list; 44 spinlock_t lock; 45 size_t size; 46 struct device *dev; 47 size_t allocation; 48 size_t boundary; 49 char name[32]; 50 struct list_head pools; 51 }; 52 53 struct dma_page { /* cacheable header for 'allocation' bytes */ 54 struct list_head page_list; 55 void *vaddr; 56 dma_addr_t dma; 57 unsigned int in_use; 58 unsigned int offset; 59 }; 60 61 static DEFINE_MUTEX(pools_lock); 62 static DEFINE_MUTEX(pools_reg_lock); 63 64 static ssize_t 65 show_pools(struct device *dev, struct device_attribute *attr, char *buf) 66 { 67 unsigned temp; 68 unsigned size; 69 char *next; 70 struct dma_page *page; 71 struct dma_pool *pool; 72 73 next = buf; 74 size = PAGE_SIZE; 75 76 temp = scnprintf(next, size, "poolinfo - 0.1\n"); 77 size -= temp; 78 next += temp; 79 80 mutex_lock(&pools_lock); 81 list_for_each_entry(pool, &dev->dma_pools, pools) { 82 unsigned pages = 0; 83 unsigned blocks = 0; 84 85 spin_lock_irq(&pool->lock); 86 list_for_each_entry(page, &pool->page_list, page_list) { 87 pages++; 88 blocks += page->in_use; 89 } 90 spin_unlock_irq(&pool->lock); 91 92 /* per-pool info, no real statistics yet */ 93 temp = scnprintf(next, size, "%-16s %4u %4zu %4zu %2u\n", 94 pool->name, blocks, 95 pages * (pool->allocation / pool->size), 96 pool->size, pages); 97 size -= temp; 98 next += temp; 99 } 100 mutex_unlock(&pools_lock); 101 102 return PAGE_SIZE - size; 103 } 104 105 static DEVICE_ATTR(pools, 0444, show_pools, NULL); 106 107 /** 108 * dma_pool_create - Creates a pool of consistent memory blocks, for dma. 109 * @name: name of pool, for diagnostics 110 * @dev: device that will be doing the DMA 111 * @size: size of the blocks in this pool. 112 * @align: alignment requirement for blocks; must be a power of two 113 * @boundary: returned blocks won't cross this power of two boundary 114 * Context: not in_interrupt() 115 * 116 * Given one of these pools, dma_pool_alloc() 117 * may be used to allocate memory. Such memory will all have "consistent" 118 * DMA mappings, accessible by the device and its driver without using 119 * cache flushing primitives. The actual size of blocks allocated may be 120 * larger than requested because of alignment. 121 * 122 * If @boundary is nonzero, objects returned from dma_pool_alloc() won't 123 * cross that size boundary. This is useful for devices which have 124 * addressing restrictions on individual DMA transfers, such as not crossing 125 * boundaries of 4KBytes. 126 * 127 * Return: a dma allocation pool with the requested characteristics, or 128 * %NULL if one can't be created. 129 */ 130 struct dma_pool *dma_pool_create(const char *name, struct device *dev, 131 size_t size, size_t align, size_t boundary) 132 { 133 struct dma_pool *retval; 134 size_t allocation; 135 bool empty = false; 136 137 if (align == 0) 138 align = 1; 139 else if (align & (align - 1)) 140 return NULL; 141 142 if (size == 0) 143 return NULL; 144 else if (size < 4) 145 size = 4; 146 147 size = ALIGN(size, align); 148 allocation = max_t(size_t, size, PAGE_SIZE); 149 150 if (!boundary) 151 boundary = allocation; 152 else if ((boundary < size) || (boundary & (boundary - 1))) 153 return NULL; 154 155 retval = kmalloc_node(sizeof(*retval), GFP_KERNEL, dev_to_node(dev)); 156 if (!retval) 157 return retval; 158 159 strlcpy(retval->name, name, sizeof(retval->name)); 160 161 retval->dev = dev; 162 163 INIT_LIST_HEAD(&retval->page_list); 164 spin_lock_init(&retval->lock); 165 retval->size = size; 166 retval->boundary = boundary; 167 retval->allocation = allocation; 168 169 INIT_LIST_HEAD(&retval->pools); 170 171 /* 172 * pools_lock ensures that the ->dma_pools list does not get corrupted. 173 * pools_reg_lock ensures that there is not a race between 174 * dma_pool_create() and dma_pool_destroy() or within dma_pool_create() 175 * when the first invocation of dma_pool_create() failed on 176 * device_create_file() and the second assumes that it has been done (I 177 * know it is a short window). 178 */ 179 mutex_lock(&pools_reg_lock); 180 mutex_lock(&pools_lock); 181 if (list_empty(&dev->dma_pools)) 182 empty = true; 183 list_add(&retval->pools, &dev->dma_pools); 184 mutex_unlock(&pools_lock); 185 if (empty) { 186 int err; 187 188 err = device_create_file(dev, &dev_attr_pools); 189 if (err) { 190 mutex_lock(&pools_lock); 191 list_del(&retval->pools); 192 mutex_unlock(&pools_lock); 193 mutex_unlock(&pools_reg_lock); 194 kfree(retval); 195 return NULL; 196 } 197 } 198 mutex_unlock(&pools_reg_lock); 199 return retval; 200 } 201 EXPORT_SYMBOL(dma_pool_create); 202 203 static void pool_initialise_page(struct dma_pool *pool, struct dma_page *page) 204 { 205 unsigned int offset = 0; 206 unsigned int next_boundary = pool->boundary; 207 208 do { 209 unsigned int next = offset + pool->size; 210 if (unlikely((next + pool->size) >= next_boundary)) { 211 next = next_boundary; 212 next_boundary += pool->boundary; 213 } 214 *(int *)(page->vaddr + offset) = next; 215 offset = next; 216 } while (offset < pool->allocation); 217 } 218 219 static struct dma_page *pool_alloc_page(struct dma_pool *pool, gfp_t mem_flags) 220 { 221 struct dma_page *page; 222 223 page = kmalloc(sizeof(*page), mem_flags); 224 if (!page) 225 return NULL; 226 page->vaddr = dma_alloc_coherent(pool->dev, pool->allocation, 227 &page->dma, mem_flags); 228 if (page->vaddr) { 229 #ifdef DMAPOOL_DEBUG 230 memset(page->vaddr, POOL_POISON_FREED, pool->allocation); 231 #endif 232 pool_initialise_page(pool, page); 233 page->in_use = 0; 234 page->offset = 0; 235 } else { 236 kfree(page); 237 page = NULL; 238 } 239 return page; 240 } 241 242 static inline bool is_page_busy(struct dma_page *page) 243 { 244 return page->in_use != 0; 245 } 246 247 static void pool_free_page(struct dma_pool *pool, struct dma_page *page) 248 { 249 dma_addr_t dma = page->dma; 250 251 #ifdef DMAPOOL_DEBUG 252 memset(page->vaddr, POOL_POISON_FREED, pool->allocation); 253 #endif 254 dma_free_coherent(pool->dev, pool->allocation, page->vaddr, dma); 255 list_del(&page->page_list); 256 kfree(page); 257 } 258 259 /** 260 * dma_pool_destroy - destroys a pool of dma memory blocks. 261 * @pool: dma pool that will be destroyed 262 * Context: !in_interrupt() 263 * 264 * Caller guarantees that no more memory from the pool is in use, 265 * and that nothing will try to use the pool after this call. 266 */ 267 void dma_pool_destroy(struct dma_pool *pool) 268 { 269 bool empty = false; 270 271 if (unlikely(!pool)) 272 return; 273 274 mutex_lock(&pools_reg_lock); 275 mutex_lock(&pools_lock); 276 list_del(&pool->pools); 277 if (pool->dev && list_empty(&pool->dev->dma_pools)) 278 empty = true; 279 mutex_unlock(&pools_lock); 280 if (empty) 281 device_remove_file(pool->dev, &dev_attr_pools); 282 mutex_unlock(&pools_reg_lock); 283 284 while (!list_empty(&pool->page_list)) { 285 struct dma_page *page; 286 page = list_entry(pool->page_list.next, 287 struct dma_page, page_list); 288 if (is_page_busy(page)) { 289 if (pool->dev) 290 dev_err(pool->dev, 291 "dma_pool_destroy %s, %p busy\n", 292 pool->name, page->vaddr); 293 else 294 pr_err("dma_pool_destroy %s, %p busy\n", 295 pool->name, page->vaddr); 296 /* leak the still-in-use consistent memory */ 297 list_del(&page->page_list); 298 kfree(page); 299 } else 300 pool_free_page(pool, page); 301 } 302 303 kfree(pool); 304 } 305 EXPORT_SYMBOL(dma_pool_destroy); 306 307 /** 308 * dma_pool_alloc - get a block of consistent memory 309 * @pool: dma pool that will produce the block 310 * @mem_flags: GFP_* bitmask 311 * @handle: pointer to dma address of block 312 * 313 * Return: the kernel virtual address of a currently unused block, 314 * and reports its dma address through the handle. 315 * If such a memory block can't be allocated, %NULL is returned. 316 */ 317 void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, 318 dma_addr_t *handle) 319 { 320 unsigned long flags; 321 struct dma_page *page; 322 size_t offset; 323 void *retval; 324 325 might_sleep_if(gfpflags_allow_blocking(mem_flags)); 326 327 spin_lock_irqsave(&pool->lock, flags); 328 list_for_each_entry(page, &pool->page_list, page_list) { 329 if (page->offset < pool->allocation) 330 goto ready; 331 } 332 333 /* pool_alloc_page() might sleep, so temporarily drop &pool->lock */ 334 spin_unlock_irqrestore(&pool->lock, flags); 335 336 page = pool_alloc_page(pool, mem_flags & (~__GFP_ZERO)); 337 if (!page) 338 return NULL; 339 340 spin_lock_irqsave(&pool->lock, flags); 341 342 list_add(&page->page_list, &pool->page_list); 343 ready: 344 page->in_use++; 345 offset = page->offset; 346 page->offset = *(int *)(page->vaddr + offset); 347 retval = offset + page->vaddr; 348 *handle = offset + page->dma; 349 #ifdef DMAPOOL_DEBUG 350 { 351 int i; 352 u8 *data = retval; 353 /* page->offset is stored in first 4 bytes */ 354 for (i = sizeof(page->offset); i < pool->size; i++) { 355 if (data[i] == POOL_POISON_FREED) 356 continue; 357 if (pool->dev) 358 dev_err(pool->dev, 359 "dma_pool_alloc %s, %p (corrupted)\n", 360 pool->name, retval); 361 else 362 pr_err("dma_pool_alloc %s, %p (corrupted)\n", 363 pool->name, retval); 364 365 /* 366 * Dump the first 4 bytes even if they are not 367 * POOL_POISON_FREED 368 */ 369 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 16, 1, 370 data, pool->size, 1); 371 break; 372 } 373 } 374 if (!(mem_flags & __GFP_ZERO)) 375 memset(retval, POOL_POISON_ALLOCATED, pool->size); 376 #endif 377 spin_unlock_irqrestore(&pool->lock, flags); 378 379 if (want_init_on_alloc(mem_flags)) 380 memset(retval, 0, pool->size); 381 382 return retval; 383 } 384 EXPORT_SYMBOL(dma_pool_alloc); 385 386 static struct dma_page *pool_find_page(struct dma_pool *pool, dma_addr_t dma) 387 { 388 struct dma_page *page; 389 390 list_for_each_entry(page, &pool->page_list, page_list) { 391 if (dma < page->dma) 392 continue; 393 if ((dma - page->dma) < pool->allocation) 394 return page; 395 } 396 return NULL; 397 } 398 399 /** 400 * dma_pool_free - put block back into dma pool 401 * @pool: the dma pool holding the block 402 * @vaddr: virtual address of block 403 * @dma: dma address of block 404 * 405 * Caller promises neither device nor driver will again touch this block 406 * unless it is first re-allocated. 407 */ 408 void dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma) 409 { 410 struct dma_page *page; 411 unsigned long flags; 412 unsigned int offset; 413 414 spin_lock_irqsave(&pool->lock, flags); 415 page = pool_find_page(pool, dma); 416 if (!page) { 417 spin_unlock_irqrestore(&pool->lock, flags); 418 if (pool->dev) 419 dev_err(pool->dev, 420 "dma_pool_free %s, %p/%lx (bad dma)\n", 421 pool->name, vaddr, (unsigned long)dma); 422 else 423 pr_err("dma_pool_free %s, %p/%lx (bad dma)\n", 424 pool->name, vaddr, (unsigned long)dma); 425 return; 426 } 427 428 offset = vaddr - page->vaddr; 429 if (want_init_on_free()) 430 memset(vaddr, 0, pool->size); 431 #ifdef DMAPOOL_DEBUG 432 if ((dma - page->dma) != offset) { 433 spin_unlock_irqrestore(&pool->lock, flags); 434 if (pool->dev) 435 dev_err(pool->dev, 436 "dma_pool_free %s, %p (bad vaddr)/%pad\n", 437 pool->name, vaddr, &dma); 438 else 439 pr_err("dma_pool_free %s, %p (bad vaddr)/%pad\n", 440 pool->name, vaddr, &dma); 441 return; 442 } 443 { 444 unsigned int chain = page->offset; 445 while (chain < pool->allocation) { 446 if (chain != offset) { 447 chain = *(int *)(page->vaddr + chain); 448 continue; 449 } 450 spin_unlock_irqrestore(&pool->lock, flags); 451 if (pool->dev) 452 dev_err(pool->dev, "dma_pool_free %s, dma %pad already free\n", 453 pool->name, &dma); 454 else 455 pr_err("dma_pool_free %s, dma %pad already free\n", 456 pool->name, &dma); 457 return; 458 } 459 } 460 memset(vaddr, POOL_POISON_FREED, pool->size); 461 #endif 462 463 page->in_use--; 464 *(int *)vaddr = page->offset; 465 page->offset = offset; 466 /* 467 * Resist a temptation to do 468 * if (!is_page_busy(page)) pool_free_page(pool, page); 469 * Better have a few empty pages hang around. 470 */ 471 spin_unlock_irqrestore(&pool->lock, flags); 472 } 473 EXPORT_SYMBOL(dma_pool_free); 474 475 /* 476 * Managed DMA pool 477 */ 478 static void dmam_pool_release(struct device *dev, void *res) 479 { 480 struct dma_pool *pool = *(struct dma_pool **)res; 481 482 dma_pool_destroy(pool); 483 } 484 485 static int dmam_pool_match(struct device *dev, void *res, void *match_data) 486 { 487 return *(struct dma_pool **)res == match_data; 488 } 489 490 /** 491 * dmam_pool_create - Managed dma_pool_create() 492 * @name: name of pool, for diagnostics 493 * @dev: device that will be doing the DMA 494 * @size: size of the blocks in this pool. 495 * @align: alignment requirement for blocks; must be a power of two 496 * @allocation: returned blocks won't cross this boundary (or zero) 497 * 498 * Managed dma_pool_create(). DMA pool created with this function is 499 * automatically destroyed on driver detach. 500 * 501 * Return: a managed dma allocation pool with the requested 502 * characteristics, or %NULL if one can't be created. 503 */ 504 struct dma_pool *dmam_pool_create(const char *name, struct device *dev, 505 size_t size, size_t align, size_t allocation) 506 { 507 struct dma_pool **ptr, *pool; 508 509 ptr = devres_alloc(dmam_pool_release, sizeof(*ptr), GFP_KERNEL); 510 if (!ptr) 511 return NULL; 512 513 pool = *ptr = dma_pool_create(name, dev, size, align, allocation); 514 if (pool) 515 devres_add(dev, ptr); 516 else 517 devres_free(ptr); 518 519 return pool; 520 } 521 EXPORT_SYMBOL(dmam_pool_create); 522 523 /** 524 * dmam_pool_destroy - Managed dma_pool_destroy() 525 * @pool: dma pool that will be destroyed 526 * 527 * Managed dma_pool_destroy(). 528 */ 529 void dmam_pool_destroy(struct dma_pool *pool) 530 { 531 struct device *dev = pool->dev; 532 533 WARN_ON(devres_release(dev, dmam_pool_release, dmam_pool_match, pool)); 534 } 535 EXPORT_SYMBOL(dmam_pool_destroy); 536